@antseed/cli 0.1.179 → 0.1.180
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/README.md +2 -0
- package/dist/buyer-identities/store.d.ts +39 -2
- package/dist/buyer-identities/store.d.ts.map +1 -1
- package/dist/buyer-identities/store.js +99 -10
- package/dist/buyer-identities/store.js.map +1 -1
- package/dist/cli/commands/buyer/identity.d.ts +3 -1
- package/dist/cli/commands/buyer/identity.d.ts.map +1 -1
- package/dist/cli/commands/buyer/identity.js +55 -8
- package/dist/cli/commands/buyer/identity.js.map +1 -1
- package/dist/cli/commands/buyer/identity.test.d.ts +2 -0
- package/dist/cli/commands/buyer/identity.test.d.ts.map +1 -0
- package/dist/cli/commands/buyer/identity.test.js +168 -0
- package/dist/cli/commands/buyer/identity.test.js.map +1 -0
- package/dist/cli/commands/buyer/set-authorized-wallet.d.ts +10 -0
- package/dist/cli/commands/buyer/set-authorized-wallet.d.ts.map +1 -1
- package/dist/cli/commands/buyer/set-authorized-wallet.js +26 -4
- package/dist/cli/commands/buyer/set-authorized-wallet.js.map +1 -1
- package/dist/cli/commands/buyer/set-authorized-wallet.test.js +37 -2
- package/dist/cli/commands/buyer/set-authorized-wallet.test.js.map +1 -1
- package/dist/cli/commands/buyer/start.d.ts +15 -0
- package/dist/cli/commands/buyer/start.d.ts.map +1 -1
- package/dist/cli/commands/buyer/start.js +158 -48
- package/dist/cli/commands/buyer/start.js.map +1 -1
- package/dist/cli/commands/buyer/start.test.js +16 -1
- package/dist/cli/commands/buyer/start.test.js.map +1 -1
- package/dist/cli/commands/chat.d.ts +3 -0
- package/dist/cli/commands/chat.d.ts.map +1 -0
- package/dist/cli/commands/chat.js +189 -0
- package/dist/cli/commands/chat.js.map +1 -0
- package/dist/cli/commands/gateway/activity.d.ts +15 -0
- package/dist/cli/commands/gateway/activity.d.ts.map +1 -0
- package/dist/cli/commands/gateway/activity.js +233 -0
- package/dist/cli/commands/gateway/activity.js.map +1 -0
- package/dist/cli/commands/gateway/admin-token.d.ts +3 -0
- package/dist/cli/commands/gateway/admin-token.d.ts.map +1 -0
- package/dist/cli/commands/gateway/admin-token.js +90 -0
- package/dist/cli/commands/gateway/admin-token.js.map +1 -0
- package/dist/cli/commands/gateway/console-link.d.ts +20 -0
- package/dist/cli/commands/gateway/console-link.d.ts.map +1 -0
- package/dist/cli/commands/gateway/console-link.js +92 -0
- package/dist/cli/commands/gateway/console-link.js.map +1 -0
- package/dist/cli/commands/gateway/gateway-commands.test.d.ts +2 -0
- package/dist/cli/commands/gateway/gateway-commands.test.d.ts.map +1 -0
- package/dist/cli/commands/gateway/gateway-commands.test.js +230 -0
- package/dist/cli/commands/gateway/gateway-commands.test.js.map +1 -0
- package/dist/cli/commands/gateway/gateway-console-commands.test.d.ts +2 -0
- package/dist/cli/commands/gateway/gateway-console-commands.test.d.ts.map +1 -0
- package/dist/cli/commands/gateway/gateway-console-commands.test.js +373 -0
- package/dist/cli/commands/gateway/gateway-console-commands.test.js.map +1 -0
- package/dist/cli/commands/gateway/index.d.ts +8 -0
- package/dist/cli/commands/gateway/index.d.ts.map +1 -1
- package/dist/cli/commands/gateway/index.js +93 -14
- package/dist/cli/commands/gateway/index.js.map +1 -1
- package/dist/cli/commands/gateway/key.d.ts +4 -0
- package/dist/cli/commands/gateway/key.d.ts.map +1 -1
- package/dist/cli/commands/gateway/key.js +297 -182
- package/dist/cli/commands/gateway/key.js.map +1 -1
- package/dist/cli/commands/gateway/member.d.ts +3 -0
- package/dist/cli/commands/gateway/member.d.ts.map +1 -0
- package/dist/cli/commands/gateway/member.js +302 -0
- package/dist/cli/commands/gateway/member.js.map +1 -0
- package/dist/cli/commands/gateway/migrate.d.ts +18 -0
- package/dist/cli/commands/gateway/migrate.d.ts.map +1 -0
- package/dist/cli/commands/gateway/migrate.js +158 -0
- package/dist/cli/commands/gateway/migrate.js.map +1 -0
- package/dist/cli/commands/gateway/operator.d.ts +11 -0
- package/dist/cli/commands/gateway/operator.d.ts.map +1 -0
- package/dist/cli/commands/gateway/operator.js +199 -0
- package/dist/cli/commands/gateway/operator.js.map +1 -0
- package/dist/cli/commands/gateway/operator.test.d.ts +2 -0
- package/dist/cli/commands/gateway/operator.test.d.ts.map +1 -0
- package/dist/cli/commands/gateway/operator.test.js +151 -0
- package/dist/cli/commands/gateway/operator.test.js.map +1 -0
- package/dist/cli/commands/gateway/peer-list.d.ts +3 -0
- package/dist/cli/commands/gateway/peer-list.d.ts.map +1 -0
- package/dist/cli/commands/gateway/peer-list.js +107 -0
- package/dist/cli/commands/gateway/peer-list.js.map +1 -0
- package/dist/cli/commands/gateway/policy-options.d.ts +23 -0
- package/dist/cli/commands/gateway/policy-options.d.ts.map +1 -0
- package/dist/cli/commands/gateway/policy-options.js +156 -0
- package/dist/cli/commands/gateway/policy-options.js.map +1 -0
- package/dist/cli/commands/gateway/preset.d.ts +3 -0
- package/dist/cli/commands/gateway/preset.d.ts.map +1 -0
- package/dist/cli/commands/gateway/preset.js +181 -0
- package/dist/cli/commands/gateway/preset.js.map +1 -0
- package/dist/cli/commands/gateway/routing.d.ts +3 -0
- package/dist/cli/commands/gateway/routing.d.ts.map +1 -0
- package/dist/cli/commands/gateway/routing.js +110 -0
- package/dist/cli/commands/gateway/routing.js.map +1 -0
- package/dist/cli/commands/gateway/settings.d.ts +4 -0
- package/dist/cli/commands/gateway/settings.d.ts.map +1 -0
- package/dist/cli/commands/gateway/settings.js +314 -0
- package/dist/cli/commands/gateway/settings.js.map +1 -0
- package/dist/cli/commands/gateway/shared.d.ts +55 -6
- package/dist/cli/commands/gateway/shared.d.ts.map +1 -1
- package/dist/cli/commands/gateway/shared.js +206 -26
- package/dist/cli/commands/gateway/shared.js.map +1 -1
- package/dist/cli/commands/gateway/workspace.d.ts +3 -0
- package/dist/cli/commands/gateway/workspace.d.ts.map +1 -0
- package/dist/cli/commands/gateway/workspace.js +250 -0
- package/dist/cli/commands/gateway/workspace.js.map +1 -0
- package/dist/cli/commands/tunnel/start.d.ts.map +1 -1
- package/dist/cli/commands/tunnel/start.js +23 -5
- package/dist/cli/commands/tunnel/start.js.map +1 -1
- package/dist/cli/index.js +12 -44
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/program.d.ts +4 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +49 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/program.test.d.ts +2 -0
- package/dist/cli/program.test.d.ts.map +1 -0
- package/dist/cli/program.test.js +38 -0
- package/dist/cli/program.test.js.map +1 -0
- package/dist/cli/prompt-hidden.d.ts +3 -0
- package/dist/cli/prompt-hidden.d.ts.map +1 -0
- package/dist/cli/prompt-hidden.js +38 -0
- package/dist/cli/prompt-hidden.js.map +1 -0
- package/dist/cli/wallet-passphrase.d.ts +48 -0
- package/dist/cli/wallet-passphrase.d.ts.map +1 -0
- package/dist/cli/wallet-passphrase.js +119 -0
- package/dist/cli/wallet-passphrase.js.map +1 -0
- package/dist/cli/wallet-passphrase.test.d.ts +2 -0
- package/dist/cli/wallet-passphrase.test.d.ts.map +1 -0
- package/dist/cli/wallet-passphrase.test.js +79 -0
- package/dist/cli/wallet-passphrase.test.js.map +1 -0
- package/dist/config/effective.d.ts +12 -0
- package/dist/config/effective.d.ts.map +1 -1
- package/dist/config/effective.js +39 -6
- package/dist/config/effective.js.map +1 -1
- package/dist/config/effective.test.js +9 -1
- package/dist/config/effective.test.js.map +1 -1
- package/dist/config/loader.d.ts +6 -0
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +12 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/loader.test.js +7 -1
- package/dist/config/loader.test.js.map +1 -1
- package/dist/config/types.d.ts +14 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/validation.d.ts.map +1 -1
- package/dist/config/validation.js +19 -0
- package/dist/config/validation.js.map +1 -1
- package/dist/gateway/accounting.d.ts +33 -3
- package/dist/gateway/accounting.d.ts.map +1 -1
- package/dist/gateway/accounting.js +86 -7
- package/dist/gateway/accounting.js.map +1 -1
- package/dist/gateway/admission-benchmark.test.d.ts +2 -0
- package/dist/gateway/admission-benchmark.test.d.ts.map +1 -0
- package/dist/gateway/admission-benchmark.test.js +75 -0
- package/dist/gateway/admission-benchmark.test.js.map +1 -0
- package/dist/gateway/auth/auth.test.d.ts +4 -0
- package/dist/gateway/auth/auth.test.d.ts.map +1 -0
- package/dist/gateway/auth/auth.test.js +337 -0
- package/dist/gateway/auth/auth.test.js.map +1 -0
- package/dist/gateway/auth/credentials.test.d.ts +2 -0
- package/dist/gateway/auth/credentials.test.d.ts.map +1 -0
- package/dist/gateway/auth/credentials.test.js +132 -0
- package/dist/gateway/auth/credentials.test.js.map +1 -0
- package/dist/gateway/auth/db.d.ts +156 -0
- package/dist/gateway/auth/db.d.ts.map +1 -0
- package/dist/gateway/auth/db.js +390 -0
- package/dist/gateway/auth/db.js.map +1 -0
- package/dist/gateway/auth/hardening.test.d.ts +2 -0
- package/dist/gateway/auth/hardening.test.d.ts.map +1 -0
- package/dist/gateway/auth/hardening.test.js +155 -0
- package/dist/gateway/auth/hardening.test.js.map +1 -0
- package/dist/gateway/auth/http.d.ts +53 -0
- package/dist/gateway/auth/http.d.ts.map +1 -0
- package/dist/gateway/auth/http.js +165 -0
- package/dist/gateway/auth/http.js.map +1 -0
- package/dist/gateway/auth/index.d.ts +26 -0
- package/dist/gateway/auth/index.d.ts.map +1 -0
- package/dist/gateway/auth/index.js +1014 -0
- package/dist/gateway/auth/index.js.map +1 -0
- package/dist/gateway/auth/oidc.d.ts +57 -0
- package/dist/gateway/auth/oidc.d.ts.map +1 -0
- package/dist/gateway/auth/oidc.js +159 -0
- package/dist/gateway/auth/oidc.js.map +1 -0
- package/dist/gateway/auth/oidc.test.d.ts +2 -0
- package/dist/gateway/auth/oidc.test.d.ts.map +1 -0
- package/dist/gateway/auth/oidc.test.js +223 -0
- package/dist/gateway/auth/oidc.test.js.map +1 -0
- package/dist/gateway/auth/reauth.test.d.ts +2 -0
- package/dist/gateway/auth/reauth.test.d.ts.map +1 -0
- package/dist/gateway/auth/reauth.test.js +108 -0
- package/dist/gateway/auth/reauth.test.js.map +1 -0
- package/dist/gateway/auth/store-integration.test.d.ts +2 -0
- package/dist/gateway/auth/store-integration.test.d.ts.map +1 -0
- package/dist/gateway/auth/store-integration.test.js +100 -0
- package/dist/gateway/auth/store-integration.test.js.map +1 -0
- package/dist/gateway/auth/test-helpers.d.ts +167 -0
- package/dist/gateway/auth/test-helpers.d.ts.map +1 -0
- package/dist/gateway/auth/test-helpers.js +368 -0
- package/dist/gateway/auth/test-helpers.js.map +1 -0
- package/dist/gateway/auth/types.d.ts +145 -0
- package/dist/gateway/auth/types.d.ts.map +1 -0
- package/dist/gateway/auth/types.js +2 -0
- package/dist/gateway/auth/types.js.map +1 -0
- package/dist/gateway/auth/wallet.d.ts +15 -0
- package/dist/gateway/auth/wallet.d.ts.map +1 -0
- package/dist/gateway/auth/wallet.js +43 -0
- package/dist/gateway/auth/wallet.js.map +1 -0
- package/dist/gateway/bundle.d.ts +127 -0
- package/dist/gateway/bundle.d.ts.map +1 -0
- package/dist/gateway/bundle.js +604 -0
- package/dist/gateway/bundle.js.map +1 -0
- package/dist/gateway/bundle.test.d.ts +2 -0
- package/dist/gateway/bundle.test.d.ts.map +1 -0
- package/dist/gateway/bundle.test.js +277 -0
- package/dist/gateway/bundle.test.js.map +1 -0
- package/dist/gateway/buyer-control.d.ts +33 -0
- package/dist/gateway/buyer-control.d.ts.map +1 -0
- package/dist/gateway/buyer-control.js +93 -0
- package/dist/gateway/buyer-control.js.map +1 -0
- package/dist/gateway/buyer-policy-probe.d.ts +41 -0
- package/dist/gateway/buyer-policy-probe.d.ts.map +1 -0
- package/dist/gateway/buyer-policy-probe.js +99 -0
- package/dist/gateway/buyer-policy-probe.js.map +1 -0
- package/dist/gateway/buyer-policy-probe.test.d.ts +2 -0
- package/dist/gateway/buyer-policy-probe.test.d.ts.map +1 -0
- package/dist/gateway/buyer-policy-probe.test.js +128 -0
- package/dist/gateway/buyer-policy-probe.test.js.map +1 -0
- package/dist/gateway/buyer-process.d.ts +30 -0
- package/dist/gateway/buyer-process.d.ts.map +1 -0
- package/dist/gateway/buyer-process.js +101 -0
- package/dist/gateway/buyer-process.js.map +1 -0
- package/dist/gateway/buyer-process.test.d.ts +2 -0
- package/dist/gateway/buyer-process.test.d.ts.map +1 -0
- package/dist/gateway/buyer-process.test.js +112 -0
- package/dist/gateway/buyer-process.test.js.map +1 -0
- package/dist/gateway/chat/routes.d.ts +45 -0
- package/dist/gateway/chat/routes.d.ts.map +1 -0
- package/dist/gateway/chat/routes.js +439 -0
- package/dist/gateway/chat/routes.js.map +1 -0
- package/dist/gateway/chat/routes.test.d.ts +2 -0
- package/dist/gateway/chat/routes.test.d.ts.map +1 -0
- package/dist/gateway/chat/routes.test.js +304 -0
- package/dist/gateway/chat/routes.test.js.map +1 -0
- package/dist/gateway/chat/tools.d.ts +35 -0
- package/dist/gateway/chat/tools.d.ts.map +1 -0
- package/dist/gateway/chat/tools.js +347 -0
- package/dist/gateway/chat/tools.js.map +1 -0
- package/dist/gateway/chat/tools.test.d.ts +2 -0
- package/dist/gateway/chat/tools.test.d.ts.map +1 -0
- package/dist/gateway/chat/tools.test.js +136 -0
- package/dist/gateway/chat/tools.test.js.map +1 -0
- package/dist/gateway/console-api/access.d.ts +52 -0
- package/dist/gateway/console-api/access.d.ts.map +1 -0
- package/dist/gateway/console-api/access.js +171 -0
- package/dist/gateway/console-api/access.js.map +1 -0
- package/dist/gateway/console-api/deps.d.ts +52 -0
- package/dist/gateway/console-api/deps.d.ts.map +1 -0
- package/dist/gateway/console-api/deps.js +2 -0
- package/dist/gateway/console-api/deps.js.map +1 -0
- package/dist/gateway/console-api/handlers/admin-tokens.d.ts +8 -0
- package/dist/gateway/console-api/handlers/admin-tokens.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/admin-tokens.js +48 -0
- package/dist/gateway/console-api/handlers/admin-tokens.js.map +1 -0
- package/dist/gateway/console-api/handlers/audit.d.ts +8 -0
- package/dist/gateway/console-api/handlers/audit.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/audit.js +19 -0
- package/dist/gateway/console-api/handlers/audit.js.map +1 -0
- package/dist/gateway/console-api/handlers/audit.test.d.ts +2 -0
- package/dist/gateway/console-api/handlers/audit.test.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/audit.test.js +241 -0
- package/dist/gateway/console-api/handlers/audit.test.js.map +1 -0
- package/dist/gateway/console-api/handlers/data-settings.test.d.ts +2 -0
- package/dist/gateway/console-api/handlers/data-settings.test.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/data-settings.test.js +264 -0
- package/dist/gateway/console-api/handlers/data-settings.test.js.map +1 -0
- package/dist/gateway/console-api/handlers/index.d.ts +4 -0
- package/dist/gateway/console-api/handlers/index.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/index.js +24 -0
- package/dist/gateway/console-api/handlers/index.js.map +1 -0
- package/dist/gateway/console-api/handlers/keys.d.ts +13 -0
- package/dist/gateway/console-api/handlers/keys.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/keys.js +128 -0
- package/dist/gateway/console-api/handlers/keys.js.map +1 -0
- package/dist/gateway/console-api/handlers/keys.test.d.ts +2 -0
- package/dist/gateway/console-api/handlers/keys.test.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/keys.test.js +166 -0
- package/dist/gateway/console-api/handlers/keys.test.js.map +1 -0
- package/dist/gateway/console-api/handlers/network-buyer.d.ts +22 -0
- package/dist/gateway/console-api/handlers/network-buyer.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/network-buyer.js +39 -0
- package/dist/gateway/console-api/handlers/network-buyer.js.map +1 -0
- package/dist/gateway/console-api/handlers/network-mapping.d.ts +33 -0
- package/dist/gateway/console-api/handlers/network-mapping.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/network-mapping.js +219 -0
- package/dist/gateway/console-api/handlers/network-mapping.js.map +1 -0
- package/dist/gateway/console-api/handlers/network-test-helpers.d.ts +35 -0
- package/dist/gateway/console-api/handlers/network-test-helpers.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/network-test-helpers.js +121 -0
- package/dist/gateway/console-api/handlers/network-test-helpers.js.map +1 -0
- package/dist/gateway/console-api/handlers/network.d.ts +15 -0
- package/dist/gateway/console-api/handlers/network.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/network.js +57 -0
- package/dist/gateway/console-api/handlers/network.js.map +1 -0
- package/dist/gateway/console-api/handlers/network.test.d.ts +2 -0
- package/dist/gateway/console-api/handlers/network.test.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/network.test.js +383 -0
- package/dist/gateway/console-api/handlers/network.test.js.map +1 -0
- package/dist/gateway/console-api/handlers/org.d.ts +10 -0
- package/dist/gateway/console-api/handlers/org.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/org.js +150 -0
- package/dist/gateway/console-api/handlers/org.js.map +1 -0
- package/dist/gateway/console-api/handlers/peer-lists.d.ts +5 -0
- package/dist/gateway/console-api/handlers/peer-lists.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/peer-lists.js +43 -0
- package/dist/gateway/console-api/handlers/peer-lists.js.map +1 -0
- package/dist/gateway/console-api/handlers/presets.d.ts +9 -0
- package/dist/gateway/console-api/handlers/presets.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/presets.js +79 -0
- package/dist/gateway/console-api/handlers/presets.js.map +1 -0
- package/dist/gateway/console-api/handlers/routing.d.ts +5 -0
- package/dist/gateway/console-api/handlers/routing.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/routing.js +20 -0
- package/dist/gateway/console-api/handlers/routing.js.map +1 -0
- package/dist/gateway/console-api/handlers/settings.d.ts +10 -0
- package/dist/gateway/console-api/handlers/settings.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/settings.js +38 -0
- package/dist/gateway/console-api/handlers/settings.js.map +1 -0
- package/dist/gateway/console-api/handlers/status.d.ts +9 -0
- package/dist/gateway/console-api/handlers/status.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/status.js +47 -0
- package/dist/gateway/console-api/handlers/status.js.map +1 -0
- package/dist/gateway/console-api/handlers/status.test.d.ts +2 -0
- package/dist/gateway/console-api/handlers/status.test.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/status.test.js +82 -0
- package/dist/gateway/console-api/handlers/status.test.js.map +1 -0
- package/dist/gateway/console-api/handlers/usage.d.ts +10 -0
- package/dist/gateway/console-api/handlers/usage.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/usage.js +68 -0
- package/dist/gateway/console-api/handlers/usage.js.map +1 -0
- package/dist/gateway/console-api/handlers/wallet-card-link.d.ts +29 -0
- package/dist/gateway/console-api/handlers/wallet-card-link.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/wallet-card-link.js +46 -0
- package/dist/gateway/console-api/handlers/wallet-card-link.js.map +1 -0
- package/dist/gateway/console-api/handlers/wallet-chain.d.ts +26 -0
- package/dist/gateway/console-api/handlers/wallet-chain.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/wallet-chain.js +80 -0
- package/dist/gateway/console-api/handlers/wallet-chain.js.map +1 -0
- package/dist/gateway/console-api/handlers/wallet-mapping.d.ts +45 -0
- package/dist/gateway/console-api/handlers/wallet-mapping.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/wallet-mapping.js +202 -0
- package/dist/gateway/console-api/handlers/wallet-mapping.js.map +1 -0
- package/dist/gateway/console-api/handlers/wallet-operator.d.ts +41 -0
- package/dist/gateway/console-api/handlers/wallet-operator.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/wallet-operator.js +198 -0
- package/dist/gateway/console-api/handlers/wallet-operator.js.map +1 -0
- package/dist/gateway/console-api/handlers/wallet-operator.test.d.ts +2 -0
- package/dist/gateway/console-api/handlers/wallet-operator.test.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/wallet-operator.test.js +195 -0
- package/dist/gateway/console-api/handlers/wallet-operator.test.js.map +1 -0
- package/dist/gateway/console-api/handlers/wallet.d.ts +61 -0
- package/dist/gateway/console-api/handlers/wallet.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/wallet.js +221 -0
- package/dist/gateway/console-api/handlers/wallet.js.map +1 -0
- package/dist/gateway/console-api/handlers/wallet.test.d.ts +2 -0
- package/dist/gateway/console-api/handlers/wallet.test.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/wallet.test.js +581 -0
- package/dist/gateway/console-api/handlers/wallet.test.js.map +1 -0
- package/dist/gateway/console-api/handlers/workspaces.d.ts +12 -0
- package/dist/gateway/console-api/handlers/workspaces.d.ts.map +1 -0
- package/dist/gateway/console-api/handlers/workspaces.js +96 -0
- package/dist/gateway/console-api/handlers/workspaces.js.map +1 -0
- package/dist/gateway/console-api/operator-types.d.ts +68 -0
- package/dist/gateway/console-api/operator-types.d.ts.map +1 -0
- package/dist/gateway/console-api/operator-types.js +21 -0
- package/dist/gateway/console-api/operator-types.js.map +1 -0
- package/dist/gateway/console-api/router.d.ts +97 -0
- package/dist/gateway/console-api/router.d.ts.map +1 -0
- package/dist/gateway/console-api/router.js +69 -0
- package/dist/gateway/console-api/router.js.map +1 -0
- package/dist/gateway/console-api/routes.test.d.ts +2 -0
- package/dist/gateway/console-api/routes.test.d.ts.map +1 -0
- package/dist/gateway/console-api/routes.test.js +331 -0
- package/dist/gateway/console-api/routes.test.js.map +1 -0
- package/dist/gateway/console-api/serialize.d.ts +33 -0
- package/dist/gateway/console-api/serialize.d.ts.map +1 -0
- package/dist/gateway/console-api/serialize.js +179 -0
- package/dist/gateway/console-api/serialize.js.map +1 -0
- package/dist/gateway/console-api/server.d.ts +38 -0
- package/dist/gateway/console-api/server.d.ts.map +1 -0
- package/dist/gateway/console-api/server.js +308 -0
- package/dist/gateway/console-api/server.js.map +1 -0
- package/dist/gateway/console-api/server.test.d.ts +2 -0
- package/dist/gateway/console-api/server.test.d.ts.map +1 -0
- package/dist/gateway/console-api/server.test.js +149 -0
- package/dist/gateway/console-api/server.test.js.map +1 -0
- package/dist/gateway/console-api/test-support.d.ts +59 -0
- package/dist/gateway/console-api/test-support.d.ts.map +1 -0
- package/dist/gateway/console-api/test-support.js +120 -0
- package/dist/gateway/console-api/test-support.js.map +1 -0
- package/dist/gateway/console-api/types.d.ts +779 -0
- package/dist/gateway/console-api/types.d.ts.map +1 -0
- package/dist/gateway/console-api/types.js +6 -0
- package/dist/gateway/console-api/types.js.map +1 -0
- package/dist/gateway/console-location.d.ts +21 -0
- package/dist/gateway/console-location.d.ts.map +1 -0
- package/dist/gateway/console-location.js +41 -0
- package/dist/gateway/console-location.js.map +1 -0
- package/dist/gateway/console-recovery.d.ts +34 -0
- package/dist/gateway/console-recovery.d.ts.map +1 -0
- package/dist/gateway/console-recovery.js +94 -0
- package/dist/gateway/console-recovery.js.map +1 -0
- package/dist/gateway/console-recovery.test.d.ts +2 -0
- package/dist/gateway/console-recovery.test.d.ts.map +1 -0
- package/dist/gateway/console-recovery.test.js +106 -0
- package/dist/gateway/console-recovery.test.js.map +1 -0
- package/dist/gateway/console.d.ts +18 -0
- package/dist/gateway/console.d.ts.map +1 -0
- package/dist/gateway/console.js +101 -0
- package/dist/gateway/console.js.map +1 -0
- package/dist/gateway/console.test.d.ts +2 -0
- package/dist/gateway/console.test.d.ts.map +1 -0
- package/dist/gateway/console.test.js +165 -0
- package/dist/gateway/console.test.js.map +1 -0
- package/dist/gateway/errors.d.ts +3 -0
- package/dist/gateway/errors.d.ts.map +1 -0
- package/dist/gateway/errors.js +5 -0
- package/dist/gateway/errors.js.map +1 -0
- package/dist/gateway/exposure.d.ts +33 -0
- package/dist/gateway/exposure.d.ts.map +1 -0
- package/dist/gateway/exposure.js +146 -0
- package/dist/gateway/exposure.js.map +1 -0
- package/dist/gateway/exposure.test.d.ts +2 -0
- package/dist/gateway/exposure.test.d.ts.map +1 -0
- package/dist/gateway/exposure.test.js +93 -0
- package/dist/gateway/exposure.test.js.map +1 -0
- package/dist/gateway/gateway-policy.test.d.ts +2 -0
- package/dist/gateway/gateway-policy.test.d.ts.map +1 -0
- package/dist/gateway/gateway-policy.test.js +404 -0
- package/dist/gateway/gateway-policy.test.js.map +1 -0
- package/dist/gateway/gateway.test.js +47 -25
- package/dist/gateway/gateway.test.js.map +1 -1
- package/dist/gateway/keys.d.ts +2 -0
- package/dist/gateway/keys.d.ts.map +1 -1
- package/dist/gateway/keys.js +2 -0
- package/dist/gateway/keys.js.map +1 -1
- package/dist/gateway/limits.d.ts +32 -8
- package/dist/gateway/limits.d.ts.map +1 -1
- package/dist/gateway/limits.js +27 -11
- package/dist/gateway/limits.js.map +1 -1
- package/dist/gateway/observability.d.ts +51 -0
- package/dist/gateway/observability.d.ts.map +1 -0
- package/dist/gateway/observability.js +136 -0
- package/dist/gateway/observability.js.map +1 -0
- package/dist/gateway/policy-resolver.d.ts +73 -0
- package/dist/gateway/policy-resolver.d.ts.map +1 -0
- package/dist/gateway/policy-resolver.js +142 -0
- package/dist/gateway/policy-resolver.js.map +1 -0
- package/dist/gateway/policy-resolver.test.d.ts +2 -0
- package/dist/gateway/policy-resolver.test.d.ts.map +1 -0
- package/dist/gateway/policy-resolver.test.js +273 -0
- package/dist/gateway/policy-resolver.test.js.map +1 -0
- package/dist/gateway/request-errors.test.d.ts +2 -0
- package/dist/gateway/request-errors.test.d.ts.map +1 -0
- package/dist/gateway/request-errors.test.js +108 -0
- package/dist/gateway/request-errors.test.js.map +1 -0
- package/dist/gateway/request-shaping.d.ts +25 -0
- package/dist/gateway/request-shaping.d.ts.map +1 -0
- package/dist/gateway/request-shaping.js +66 -0
- package/dist/gateway/request-shaping.js.map +1 -0
- package/dist/gateway/response-usage.d.ts +35 -0
- package/dist/gateway/response-usage.d.ts.map +1 -0
- package/dist/gateway/response-usage.js +167 -0
- package/dist/gateway/response-usage.js.map +1 -0
- package/dist/gateway/response-usage.test.d.ts +2 -0
- package/dist/gateway/response-usage.test.d.ts.map +1 -0
- package/dist/gateway/response-usage.test.js +78 -0
- package/dist/gateway/response-usage.test.js.map +1 -0
- package/dist/gateway/runtime.d.ts +25 -0
- package/dist/gateway/runtime.d.ts.map +1 -1
- package/dist/gateway/runtime.js +39 -19
- package/dist/gateway/runtime.js.map +1 -1
- package/dist/gateway/server.d.ts +68 -2
- package/dist/gateway/server.d.ts.map +1 -1
- package/dist/gateway/server.js +532 -116
- package/dist/gateway/server.js.map +1 -1
- package/dist/gateway/services/audit.d.ts +16 -0
- package/dist/gateway/services/audit.d.ts.map +1 -0
- package/dist/gateway/services/audit.js +18 -0
- package/dist/gateway/services/audit.js.map +1 -0
- package/dist/gateway/services/context.d.ts +66 -0
- package/dist/gateway/services/context.d.ts.map +1 -0
- package/dist/gateway/services/context.js +52 -0
- package/dist/gateway/services/context.js.map +1 -0
- package/dist/gateway/services/keys.d.ts +78 -0
- package/dist/gateway/services/keys.d.ts.map +1 -0
- package/dist/gateway/services/keys.js +232 -0
- package/dist/gateway/services/keys.js.map +1 -0
- package/dist/gateway/services/members.d.ts +72 -0
- package/dist/gateway/services/members.d.ts.map +1 -0
- package/dist/gateway/services/members.js +161 -0
- package/dist/gateway/services/members.js.map +1 -0
- package/dist/gateway/services/network.d.ts +36 -0
- package/dist/gateway/services/network.d.ts.map +1 -0
- package/dist/gateway/services/network.js +147 -0
- package/dist/gateway/services/network.js.map +1 -0
- package/dist/gateway/services/operator.d.ts +98 -0
- package/dist/gateway/services/operator.d.ts.map +1 -0
- package/dist/gateway/services/operator.js +170 -0
- package/dist/gateway/services/operator.js.map +1 -0
- package/dist/gateway/services/operator.test.d.ts +2 -0
- package/dist/gateway/services/operator.test.d.ts.map +1 -0
- package/dist/gateway/services/operator.test.js +184 -0
- package/dist/gateway/services/operator.test.js.map +1 -0
- package/dist/gateway/services/peer-lists.d.ts +20 -0
- package/dist/gateway/services/peer-lists.d.ts.map +1 -0
- package/dist/gateway/services/peer-lists.js +134 -0
- package/dist/gateway/services/peer-lists.js.map +1 -0
- package/dist/gateway/services/presets.d.ts +34 -0
- package/dist/gateway/services/presets.d.ts.map +1 -0
- package/dist/gateway/services/presets.js +134 -0
- package/dist/gateway/services/presets.js.map +1 -0
- package/dist/gateway/services/routing.d.ts +13 -0
- package/dist/gateway/services/routing.d.ts.map +1 -0
- package/dist/gateway/services/routing.js +18 -0
- package/dist/gateway/services/routing.js.map +1 -0
- package/dist/gateway/services/services.test.d.ts +2 -0
- package/dist/gateway/services/services.test.d.ts.map +1 -0
- package/dist/gateway/services/services.test.js +476 -0
- package/dist/gateway/services/services.test.js.map +1 -0
- package/dist/gateway/services/settings.d.ts +68 -0
- package/dist/gateway/services/settings.d.ts.map +1 -0
- package/dist/gateway/services/settings.js +580 -0
- package/dist/gateway/services/settings.js.map +1 -0
- package/dist/gateway/services/tokens.d.ts +29 -0
- package/dist/gateway/services/tokens.d.ts.map +1 -0
- package/dist/gateway/services/tokens.js +48 -0
- package/dist/gateway/services/tokens.js.map +1 -0
- package/dist/gateway/services/usage.d.ts +55 -0
- package/dist/gateway/services/usage.d.ts.map +1 -0
- package/dist/gateway/services/usage.js +225 -0
- package/dist/gateway/services/usage.js.map +1 -0
- package/dist/gateway/services/wallet-address-env.test.d.ts +2 -0
- package/dist/gateway/services/wallet-address-env.test.d.ts.map +1 -0
- package/dist/gateway/services/wallet-address-env.test.js +119 -0
- package/dist/gateway/services/wallet-address-env.test.js.map +1 -0
- package/dist/gateway/services/wallet-address.d.ts +40 -0
- package/dist/gateway/services/wallet-address.d.ts.map +1 -0
- package/dist/gateway/services/wallet-address.js +116 -0
- package/dist/gateway/services/wallet-address.js.map +1 -0
- package/dist/gateway/services/wallet-address.test.d.ts +2 -0
- package/dist/gateway/services/wallet-address.test.d.ts.map +1 -0
- package/dist/gateway/services/wallet-address.test.js +84 -0
- package/dist/gateway/services/wallet-address.test.js.map +1 -0
- package/dist/gateway/services/workspaces.d.ts +75 -0
- package/dist/gateway/services/workspaces.d.ts.map +1 -0
- package/dist/gateway/services/workspaces.js +228 -0
- package/dist/gateway/services/workspaces.js.map +1 -0
- package/dist/gateway/spend-durability.test.d.ts +2 -0
- package/dist/gateway/spend-durability.test.d.ts.map +1 -0
- package/dist/gateway/spend-durability.test.js +330 -0
- package/dist/gateway/spend-durability.test.js.map +1 -0
- package/dist/gateway/spend-feed.d.ts +11 -1
- package/dist/gateway/spend-feed.d.ts.map +1 -1
- package/dist/gateway/spend-feed.js +17 -4
- package/dist/gateway/spend-feed.js.map +1 -1
- package/dist/gateway/spend-feed.test.d.ts +2 -0
- package/dist/gateway/spend-feed.test.d.ts.map +1 -0
- package/dist/gateway/spend-feed.test.js +34 -0
- package/dist/gateway/spend-feed.test.js.map +1 -0
- package/dist/gateway/store-data.test.d.ts +2 -0
- package/dist/gateway/store-data.test.d.ts.map +1 -0
- package/dist/gateway/store-data.test.js +346 -0
- package/dist/gateway/store-data.test.js.map +1 -0
- package/dist/gateway/store-migrations.d.ts +6 -0
- package/dist/gateway/store-migrations.d.ts.map +1 -0
- package/dist/gateway/store-migrations.js +301 -0
- package/dist/gateway/store-migrations.js.map +1 -0
- package/dist/gateway/store.d.ts +595 -10
- package/dist/gateway/store.d.ts.map +1 -1
- package/dist/gateway/store.js +1242 -120
- package/dist/gateway/store.js.map +1 -1
- package/dist/gateway/store.test.d.ts +2 -0
- package/dist/gateway/store.test.d.ts.map +1 -0
- package/dist/gateway/store.test.js +185 -0
- package/dist/gateway/store.test.js.map +1 -0
- package/dist/proxy/buyer-chain-reader.d.ts +68 -0
- package/dist/proxy/buyer-chain-reader.d.ts.map +1 -0
- package/dist/proxy/buyer-chain-reader.js +152 -0
- package/dist/proxy/buyer-chain-reader.js.map +1 -0
- package/dist/proxy/buyer-chain-reader.test.d.ts +2 -0
- package/dist/proxy/buyer-chain-reader.test.d.ts.map +1 -0
- package/dist/proxy/buyer-chain-reader.test.js +102 -0
- package/dist/proxy/buyer-chain-reader.test.js.map +1 -0
- package/dist/proxy/buyer-proxy.d.ts +169 -3
- package/dist/proxy/buyer-proxy.d.ts.map +1 -1
- package/dist/proxy/buyer-proxy.js +873 -117
- package/dist/proxy/buyer-proxy.js.map +1 -1
- package/dist/proxy/buyer-proxy.test.js +31 -0
- package/dist/proxy/buyer-proxy.test.js.map +1 -1
- package/dist/proxy/chain-read-cache.d.ts +47 -0
- package/dist/proxy/chain-read-cache.d.ts.map +1 -0
- package/dist/proxy/chain-read-cache.js +110 -0
- package/dist/proxy/chain-read-cache.js.map +1 -0
- package/dist/proxy/chain-read-cache.test.d.ts +2 -0
- package/dist/proxy/chain-read-cache.test.d.ts.map +1 -0
- package/dist/proxy/chain-read-cache.test.js +75 -0
- package/dist/proxy/chain-read-cache.test.js.map +1 -0
- package/dist/proxy/chain-rpc-test-support.d.ts +31 -0
- package/dist/proxy/chain-rpc-test-support.d.ts.map +1 -0
- package/dist/proxy/chain-rpc-test-support.js +136 -0
- package/dist/proxy/chain-rpc-test-support.js.map +1 -0
- package/dist/proxy/chain-rpc.d.ts +121 -0
- package/dist/proxy/chain-rpc.d.ts.map +1 -0
- package/dist/proxy/chain-rpc.js +420 -0
- package/dist/proxy/chain-rpc.js.map +1 -0
- package/dist/proxy/chain-rpc.test.d.ts +2 -0
- package/dist/proxy/chain-rpc.test.d.ts.map +1 -0
- package/dist/proxy/chain-rpc.test.js +180 -0
- package/dist/proxy/chain-rpc.test.js.map +1 -0
- package/dist/proxy/deposit-watch-hub.d.ts +47 -0
- package/dist/proxy/deposit-watch-hub.d.ts.map +1 -0
- package/dist/proxy/deposit-watch-hub.js +111 -0
- package/dist/proxy/deposit-watch-hub.js.map +1 -0
- package/dist/proxy/deposit-watch-hub.test.d.ts +2 -0
- package/dist/proxy/deposit-watch-hub.test.d.ts.map +1 -0
- package/dist/proxy/deposit-watch-hub.test.js +133 -0
- package/dist/proxy/deposit-watch-hub.test.js.map +1 -0
- package/dist/proxy/deposit-watcher.d.ts +44 -4
- package/dist/proxy/deposit-watcher.d.ts.map +1 -1
- package/dist/proxy/deposit-watcher.js +76 -11
- package/dist/proxy/deposit-watcher.js.map +1 -1
- package/dist/proxy/deposit-watcher.test.js +54 -1
- package/dist/proxy/deposit-watcher.test.js.map +1 -1
- package/dist/proxy/gateway-policy.test.d.ts +2 -0
- package/dist/proxy/gateway-policy.test.d.ts.map +1 -0
- package/dist/proxy/gateway-policy.test.js +576 -0
- package/dist/proxy/gateway-policy.test.js.map +1 -0
- package/dist/proxy/network-models.d.ts +2 -0
- package/dist/proxy/network-models.d.ts.map +1 -1
- package/dist/proxy/network-models.js +3 -1
- package/dist/proxy/network-models.js.map +1 -1
- package/dist/proxy/route-policy.d.ts +97 -0
- package/dist/proxy/route-policy.d.ts.map +1 -0
- package/dist/proxy/route-policy.js +230 -0
- package/dist/proxy/route-policy.js.map +1 -0
- package/dist/proxy/route-policy.test.d.ts +2 -0
- package/dist/proxy/route-policy.test.d.ts.map +1 -0
- package/dist/proxy/route-policy.test.js +120 -0
- package/dist/proxy/route-policy.test.js.map +1 -0
- package/dist/proxy/spend-attribution.d.ts +41 -10
- package/dist/proxy/spend-attribution.d.ts.map +1 -1
- package/dist/proxy/spend-attribution.js +133 -37
- package/dist/proxy/spend-attribution.js.map +1 -1
- package/dist/proxy/tee-control.d.ts +3 -1
- package/dist/proxy/tee-control.d.ts.map +1 -1
- package/dist/proxy/tee-control.js +5 -3
- package/dist/proxy/tee-control.js.map +1 -1
- package/dist/proxy/telemetry.d.ts +2 -1
- package/dist/proxy/telemetry.d.ts.map +1 -1
- package/dist/proxy/telemetry.js +10 -5
- package/dist/proxy/telemetry.js.map +1 -1
- package/dist/routing-policy/policy.d.ts +149 -0
- package/dist/routing-policy/policy.d.ts.map +1 -0
- package/dist/routing-policy/policy.js +450 -0
- package/dist/routing-policy/policy.js.map +1 -0
- package/dist/routing-policy/policy.test.d.ts +2 -0
- package/dist/routing-policy/policy.test.d.ts.map +1 -0
- package/dist/routing-policy/policy.test.js +134 -0
- package/dist/routing-policy/policy.test.js.map +1 -0
- package/package.json +15 -7
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { test } from 'node:test';
|
|
3
|
+
import { Wallet, verifyTypedData } from 'ethers';
|
|
4
|
+
import { makeDepositsDomain, SET_OPERATOR_TYPES } from '@antseed/node';
|
|
5
|
+
import { ConsoleRouter } from '../router.js';
|
|
6
|
+
import { call, fakeDeps, fakeRequireWorkspaceAccess, memberPrincipal, rejectsWith } from './network-test-helpers.js';
|
|
7
|
+
import { registerOperatorRoutes } from './wallet-operator.js';
|
|
8
|
+
// Obvious fakes only.
|
|
9
|
+
const TEAM_WALLET = new Wallet(`0x${'22'.repeat(32)}`);
|
|
10
|
+
const OWNER_WALLET = `0x${'0a'.repeat(20)}`;
|
|
11
|
+
const ALI_WALLET = `0x${'0b'.repeat(20)}`;
|
|
12
|
+
const STRANGER = `0x${'0c'.repeat(20)}`;
|
|
13
|
+
const NOW = 1_700_000_000_000;
|
|
14
|
+
const DAY = 24 * 60 * 60_000;
|
|
15
|
+
const CHAIN = {
|
|
16
|
+
chainId: 'base-mainnet',
|
|
17
|
+
evmChainId: 8453,
|
|
18
|
+
rpcUrl: 'https://rpc.example.test',
|
|
19
|
+
depositsContractAddress: `0x${'d1'.repeat(20)}`,
|
|
20
|
+
usdcContractAddress: `0x${'a1'.repeat(20)}`,
|
|
21
|
+
};
|
|
22
|
+
const MEMBERS = {
|
|
23
|
+
m_owner: { id: 'm_owner', label: 'Owner', orgRole: 'owner', status: 'active' },
|
|
24
|
+
m_ali: { id: 'm_ali', label: 'Ali', orgRole: 'admin', status: 'active' },
|
|
25
|
+
m_sam: { id: 'm_sam', label: 'Sam', orgRole: 'member', status: 'active' },
|
|
26
|
+
};
|
|
27
|
+
const owner = memberPrincipal('m_owner', {}, 'owner');
|
|
28
|
+
const ali = memberPrincipal('m_ali', {}, 'admin');
|
|
29
|
+
const sam = memberPrincipal('m_sam', { ws_team: 'member' });
|
|
30
|
+
function fixture(chain, extra = {}) {
|
|
31
|
+
const audits = [];
|
|
32
|
+
const reads = { operator: 0, nonce: 0 };
|
|
33
|
+
let now = NOW;
|
|
34
|
+
const store = {
|
|
35
|
+
getWorkspace: (id) => (id === 'ws_team' ? { id, buyerIdentity: 'team-a', walletAddress: TEAM_WALLET.address } : null),
|
|
36
|
+
getMember: (id) => MEMBERS[id] ?? null,
|
|
37
|
+
listWorkspaces: () => [{ id: 'ws_team', buyerIdentity: 'team-a' }, { id: 'ws_other', buyerIdentity: 'other' }],
|
|
38
|
+
memberWorkspaceRoles: (memberId) => new Map(memberId === 'm_sam' ? [['ws_team', 'member']] : []),
|
|
39
|
+
getKey: () => null,
|
|
40
|
+
getAdminToken: () => null,
|
|
41
|
+
recordAudit: (entry) => { audits.push(entry); },
|
|
42
|
+
};
|
|
43
|
+
const router = new ConsoleRouter();
|
|
44
|
+
registerOperatorRoutes(router, fakeDeps(store, () => now), {
|
|
45
|
+
access: fakeRequireWorkspaceAccess,
|
|
46
|
+
loadWallet: async (name) => (name === 'team-a' ? TEAM_WALLET : null),
|
|
47
|
+
walletAddress: async () => TEAM_WALLET.address,
|
|
48
|
+
resolveChain: async () => CHAIN,
|
|
49
|
+
readOperator: async () => { reads.operator += 1; return chain.operator; },
|
|
50
|
+
operatorNonce: async () => { reads.nonce += 1; return chain.nonce; },
|
|
51
|
+
sessionSignIn: (sessionId) => (sessionId === 'session-m_owner' ? { authenticatedAt: now - 60_000, credentialId: 'cred_passkey' } : null),
|
|
52
|
+
memberWallets: (memberId) => (memberId === 'm_owner'
|
|
53
|
+
? { wallets: [{ id: 'cred_owner_wallet', address: OWNER_WALLET, createdAt: NOW - 2 * DAY }, { id: 'cred_new', address: STRANGER.replace('0c', '0d'), createdAt: NOW - 3_600_000 }], total: 3 }
|
|
54
|
+
: { wallets: [], total: 0 }),
|
|
55
|
+
walletOwner: (address) => {
|
|
56
|
+
if (address.toLowerCase() === OWNER_WALLET)
|
|
57
|
+
return { memberId: 'm_owner', label: 'Owner' };
|
|
58
|
+
if (address.toLowerCase() === ALI_WALLET)
|
|
59
|
+
return { memberId: 'm_ali', label: 'Ali' };
|
|
60
|
+
return null;
|
|
61
|
+
},
|
|
62
|
+
...extra,
|
|
63
|
+
});
|
|
64
|
+
return { router, audits, reads, chain, advance: (ms) => { now += ms; } };
|
|
65
|
+
}
|
|
66
|
+
const get = (router, who = owner, query = '') => call(router, 'GET', `/workspaces/ws_team/wallet/operator${query}`, who);
|
|
67
|
+
test('no operator: the owner may authorize, with each wallet\'s 24 h eligibility; others read only', async () => {
|
|
68
|
+
const { router } = fixture({ operator: null, nonce: 0n });
|
|
69
|
+
const state = await get(router);
|
|
70
|
+
assert.equal(state.relation, 'none');
|
|
71
|
+
assert.equal(state.operator, null);
|
|
72
|
+
assert.equal(state.buyer, TEAM_WALLET.address);
|
|
73
|
+
assert.equal(state.canAuthorize, true);
|
|
74
|
+
assert.deepEqual(state.eligibleWallets.map((entry) => entry.eligibleAt), [NOW - DAY, NOW - 3_600_000 + DAY]);
|
|
75
|
+
const asMember = await get(router, sam);
|
|
76
|
+
assert.equal(asMember.canAuthorize, false);
|
|
77
|
+
assert.deepEqual(asMember.eligibleWallets, []);
|
|
78
|
+
const asAdmin = await get(router, ali);
|
|
79
|
+
assert.equal(asAdmin.canAuthorize, false);
|
|
80
|
+
});
|
|
81
|
+
test('operator states relative to the viewer: yours, another member\'s, unknown, self', async () => {
|
|
82
|
+
const yours = await get(fixture({ operator: OWNER_WALLET, nonce: 1n }).router);
|
|
83
|
+
assert.equal(yours.relation, 'yours');
|
|
84
|
+
assert.equal(yours.canAuthorize, false);
|
|
85
|
+
assert.equal(yours.operator?.toLowerCase(), OWNER_WALLET);
|
|
86
|
+
const { router: aliRouter } = fixture({ operator: ALI_WALLET, nonce: 1n });
|
|
87
|
+
const seenByOwner = await get(aliRouter);
|
|
88
|
+
assert.equal(seenByOwner.relation, 'member');
|
|
89
|
+
assert.equal(seenByOwner.memberLabel, 'Ali');
|
|
90
|
+
const seenByAli = await get(aliRouter, ali);
|
|
91
|
+
assert.equal(seenByAli.relation, 'yours');
|
|
92
|
+
// Plain members learn it is a member's wallet, not whose.
|
|
93
|
+
const seenBySam = await get(aliRouter, sam);
|
|
94
|
+
assert.equal(seenBySam.relation, 'member');
|
|
95
|
+
assert.equal(seenBySam.memberLabel, null);
|
|
96
|
+
const unknown = await get(fixture({ operator: STRANGER, nonce: 1n }).router);
|
|
97
|
+
assert.equal(unknown.relation, 'unknown');
|
|
98
|
+
assert.equal(unknown.memberLabel, null);
|
|
99
|
+
const self = await get(fixture({ operator: TEAM_WALLET.address.toLowerCase(), nonce: 1n }).router);
|
|
100
|
+
assert.equal(self.relation, 'self');
|
|
101
|
+
// The zero address reads as no operator.
|
|
102
|
+
assert.equal((await get(fixture({ operator: `0x${'0'.repeat(40)}`, nonce: 2n }).router)).relation, 'none');
|
|
103
|
+
});
|
|
104
|
+
test('operator reads are cached; fresh=1 and sync re-read at most every 3 s', async () => {
|
|
105
|
+
const f = fixture({ operator: null, nonce: 0n });
|
|
106
|
+
await get(f.router);
|
|
107
|
+
await get(f.router, sam);
|
|
108
|
+
assert.equal(f.reads.operator, 1);
|
|
109
|
+
await get(f.router, owner, '?fresh=1');
|
|
110
|
+
assert.equal(f.reads.operator, 1, 'a fresh read right after a read reuses it');
|
|
111
|
+
f.advance(3_000);
|
|
112
|
+
await get(f.router, owner, '?fresh=1');
|
|
113
|
+
assert.equal(f.reads.operator, 2);
|
|
114
|
+
f.advance(30_000);
|
|
115
|
+
await get(f.router);
|
|
116
|
+
assert.equal(f.reads.operator, 2, 'within the 60 s TTL');
|
|
117
|
+
f.advance(31_000);
|
|
118
|
+
await get(f.router);
|
|
119
|
+
assert.equal(f.reads.operator, 3);
|
|
120
|
+
});
|
|
121
|
+
test('sync after a transaction audits a change the chain confirms', async () => {
|
|
122
|
+
const f = fixture({ operator: null, nonce: 0n });
|
|
123
|
+
await get(f.router);
|
|
124
|
+
f.chain.operator = OWNER_WALLET;
|
|
125
|
+
f.advance(5_000);
|
|
126
|
+
const txHash = `0x${'ef'.repeat(32)}`;
|
|
127
|
+
const state = await call(f.router, 'POST', '/workspaces/ws_team/wallet/operator/sync', sam, { txHash });
|
|
128
|
+
assert.equal(state.relation, 'member');
|
|
129
|
+
assert.deepEqual(f.audits.map((entry) => entry.action), ['wallet.operator.changed']);
|
|
130
|
+
assert.equal(f.audits[0].details?.['before'], null);
|
|
131
|
+
assert.equal((f.audits[0].details?.['after']).toLowerCase(), OWNER_WALLET);
|
|
132
|
+
assert.equal(f.audits[0].details?.['txHash'], txHash);
|
|
133
|
+
// Nothing changed: nothing audited; a bogus hash is dropped.
|
|
134
|
+
f.advance(5_000);
|
|
135
|
+
await call(f.router, 'POST', '/workspaces/ws_team/wallet/operator/sync', sam, { txHash: 'nope' });
|
|
136
|
+
assert.equal(f.audits.length, 1);
|
|
137
|
+
// Cleared on chain (transferOperator to the zero address).
|
|
138
|
+
f.chain.operator = `0x${'0'.repeat(40)}`;
|
|
139
|
+
f.advance(5_000);
|
|
140
|
+
const cleared = await call(f.router, 'POST', '/workspaces/ws_team/wallet/operator/sync', owner, {});
|
|
141
|
+
assert.equal(cleared.relation, 'none');
|
|
142
|
+
assert.equal(f.audits.at(-1).details?.['after'], null);
|
|
143
|
+
});
|
|
144
|
+
test('outsiders cannot read the operator; chain failures are 502', async () => {
|
|
145
|
+
const { router } = fixture({ operator: null, nonce: 0n });
|
|
146
|
+
await rejectsWith(get(router, memberPrincipal('m_sam', {})), 403, 'forbidden');
|
|
147
|
+
const broken = fixture({ operator: null, nonce: 0n }, { readOperator: async () => { throw new Error('rpc down'); } });
|
|
148
|
+
await rejectsWith(get(broken.router), 502, 'chain_unavailable');
|
|
149
|
+
});
|
|
150
|
+
test('operator-auth reads the operator and the nonce live, right before each signature', async () => {
|
|
151
|
+
const f = fixture({ operator: null, nonce: 4n });
|
|
152
|
+
await get(f.router); // warms the display cache; signing must not use it
|
|
153
|
+
const first = await call(f.router, 'POST', '/workspaces/ws_team/wallet/operator-auth', owner, { operator: OWNER_WALLET });
|
|
154
|
+
assert.equal(first.nonce, '4');
|
|
155
|
+
assert.equal(first.chainId, 8453);
|
|
156
|
+
assert.equal(first.depositsContract?.toLowerCase(), CHAIN.depositsContractAddress);
|
|
157
|
+
assert.equal(first.operator?.toLowerCase(), OWNER_WALLET);
|
|
158
|
+
const signer = verifyTypedData(makeDepositsDomain(8453, CHAIN.depositsContractAddress), SET_OPERATOR_TYPES, { operator: OWNER_WALLET, nonce: 4n }, first.signature);
|
|
159
|
+
assert.equal(signer, TEAM_WALLET.address);
|
|
160
|
+
// The nonce moved on chain (e.g. an operator was set and cleared meanwhile).
|
|
161
|
+
f.chain.nonce = 6n;
|
|
162
|
+
const second = await call(f.router, 'POST', '/workspaces/ws_team/wallet/operator-auth', owner, { operator: OWNER_WALLET });
|
|
163
|
+
assert.equal(second.nonce, '6');
|
|
164
|
+
assert.equal(f.reads.operator, 3);
|
|
165
|
+
assert.equal(f.reads.nonce, 2);
|
|
166
|
+
});
|
|
167
|
+
test('operator-auth refuses a wallet that already has an operator, without signing', async () => {
|
|
168
|
+
const f = fixture({ operator: ALI_WALLET, nonce: 1n });
|
|
169
|
+
await rejectsWith(call(f.router, 'POST', '/workspaces/ws_team/wallet/operator-auth', owner, { operator: OWNER_WALLET }), 409, 'operator_already_set');
|
|
170
|
+
assert.equal(f.reads.nonce, 1, 'the nonce is read with the operator, but nothing is signed');
|
|
171
|
+
assert.deepEqual(f.audits.map((entry) => entry.action), ['wallet.operator_auth.denied']);
|
|
172
|
+
assert.equal(f.audits[0].details?.['code'], 'operator_already_set');
|
|
173
|
+
});
|
|
174
|
+
test('operator-auth keeps the 24 h rule for a newly added wallet', async () => {
|
|
175
|
+
const f = fixture({ operator: null, nonce: 0n });
|
|
176
|
+
await rejectsWith(call(f.router, 'POST', '/workspaces/ws_team/wallet/operator-auth', owner, { operator: STRANGER.replace('0c', '0d') }), 403, 'operator_too_new');
|
|
177
|
+
await rejectsWith(call(f.router, 'POST', '/workspaces/ws_team/wallet/operator-auth', owner, { operator: STRANGER }), 403, 'operator_not_yours');
|
|
178
|
+
await rejectsWith(call(f.router, 'POST', '/workspaces/ws_team/wallet/operator-auth', ali, { operator: ALI_WALLET }), 403, 'forbidden');
|
|
179
|
+
assert.equal(f.reads.nonce, 0);
|
|
180
|
+
});
|
|
181
|
+
test('GET /wallet/operators summarizes every workspace the caller can open, null where unreadable', async () => {
|
|
182
|
+
const { router } = fixture({ operator: null, nonce: 0n }, {
|
|
183
|
+
walletAddress: async (name) => { if (name === 'other')
|
|
184
|
+
throw new Error('no key'); return TEAM_WALLET.address; },
|
|
185
|
+
});
|
|
186
|
+
assert.deepEqual(await call(router, 'GET', '/wallet/operators', owner), [
|
|
187
|
+
{ workspaceId: 'ws_team', operator: null, relation: 'none', canAuthorize: true },
|
|
188
|
+
{ workspaceId: 'ws_other', operator: null, relation: null, canAuthorize: false },
|
|
189
|
+
]);
|
|
190
|
+
// A plain member sees only the workspaces they belong to, and cannot authorize.
|
|
191
|
+
assert.deepEqual(await call(router, 'GET', '/wallet/operators', sam), [
|
|
192
|
+
{ workspaceId: 'ws_team', operator: null, relation: 'none', canAuthorize: false },
|
|
193
|
+
]);
|
|
194
|
+
});
|
|
195
|
+
//# sourceMappingURL=wallet-operator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-operator.test.js","sourceRoot":"","sources":["../../../../src/gateway/console-api/handlers/wallet-operator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace wallets: balances, card funding links, the deposit watcher,
|
|
3
|
+
* payment channels and buyer rewards, plus the chain the browser signs
|
|
4
|
+
* operator actions (claim, withdraw, deposit) against.
|
|
5
|
+
*/
|
|
6
|
+
import { type AntsChainConfig, type RewardsView } from '@antseed/ants';
|
|
7
|
+
import type { AbstractSigner } from 'ethers';
|
|
8
|
+
import { requireWorkspaceAccess } from '../access.js';
|
|
9
|
+
import type { ConsoleDeps } from '../deps.js';
|
|
10
|
+
import { type ConsoleRouter } from '../router.js';
|
|
11
|
+
import type { WalletOwner } from '../../services/operator.js';
|
|
12
|
+
import { type BuyerAddressBook } from '../../services/wallet-address.js';
|
|
13
|
+
import { type BuyerClient } from './network-buyer.js';
|
|
14
|
+
import { type ChannelChainState } from './wallet-mapping.js';
|
|
15
|
+
export interface SigningWallet {
|
|
16
|
+
address: string;
|
|
17
|
+
signMessage(message: string): Promise<string>;
|
|
18
|
+
/** EIP-712 signing (ethers wallets have it); needed for operator authorizations. */
|
|
19
|
+
signTypedData?: AbstractSigner['signTypedData'];
|
|
20
|
+
}
|
|
21
|
+
/** Seams for tests; production uses the defaults. */
|
|
22
|
+
export interface WalletRouteOverrides {
|
|
23
|
+
buyer?: BuyerClient;
|
|
24
|
+
requireWorkspaceAccess?: typeof requireWorkspaceAccess;
|
|
25
|
+
/** The buyer identity's wallet, able to sign; null when it has no readable key. */
|
|
26
|
+
loadWallet?: (name: string) => Promise<SigningWallet | null>;
|
|
27
|
+
/** The identity's address as the running buyer pays, without loading a signer; null when unknown. */
|
|
28
|
+
walletAddress?: (name: string) => Promise<string | null>;
|
|
29
|
+
/** The running buyer's identity → address; defaults to `deps.buyerAddresses`. */
|
|
30
|
+
buyerAddresses?: BuyerAddressBook;
|
|
31
|
+
resolveChain?: () => Promise<AntsChainConfig>;
|
|
32
|
+
/** Buyer rewards, with the legacy epochs a claim may name (`legacyEpochs`, empty when unknown). */
|
|
33
|
+
readRewards?: (chain: AntsChainConfig, address: string) => Promise<RewardsView & {
|
|
34
|
+
legacyEpochs?: number[];
|
|
35
|
+
}>;
|
|
36
|
+
/** On-chain records of these channels (AntseedChannels); ids that could not be read are left out. */
|
|
37
|
+
readChannelStates?: (chain: AntsChainConfig, channelIds: string[]) => Promise<Map<string, ChannelChainState>>;
|
|
38
|
+
payBaseUrl?: () => string;
|
|
39
|
+
/** The buyer's current AntseedDeposits operator nonce (live read). */
|
|
40
|
+
operatorNonce?: (chain: AntsChainConfig, buyer: string) => Promise<bigint>;
|
|
41
|
+
/** The buyer's current AntseedDeposits operator, null when none (live read). */
|
|
42
|
+
readOperator?: (chain: AntsChainConfig, buyer: string) => Promise<string | null>;
|
|
43
|
+
/** The member who signs in with a wallet address; defaults to auth's credentials table. */
|
|
44
|
+
walletOwner?: (address: string) => WalletOwner | null;
|
|
45
|
+
/** When a console session's sign-in happened and with which credential; defaults to auth's session table. */
|
|
46
|
+
sessionSignIn?: (sessionId: string) => {
|
|
47
|
+
authenticatedAt: number;
|
|
48
|
+
credentialId: string | null;
|
|
49
|
+
} | null;
|
|
50
|
+
/** A member's wallet credentials (lower-case addresses, when added) and credential count; defaults to auth's credentials table. */
|
|
51
|
+
memberWallets?: (memberId: string) => {
|
|
52
|
+
wallets: Array<{
|
|
53
|
+
id: string;
|
|
54
|
+
address: string;
|
|
55
|
+
createdAt: number;
|
|
56
|
+
}>;
|
|
57
|
+
total: number;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
export declare function registerWalletRoutes(router: ConsoleRouter, deps: ConsoleDeps, overrides?: WalletRouteOverrides): void;
|
|
61
|
+
//# sourceMappingURL=wallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../../src/gateway/console-api/handlers/wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace wallets: balances, card funding links, the deposit watcher,
|
|
3
|
+
* payment channels and buyer rewards, plus the chain the browser signs
|
|
4
|
+
* operator actions (claim, withdraw, deposit) against.
|
|
5
|
+
*/
|
|
6
|
+
import { resolveAntsChain } from '@antseed/ants';
|
|
7
|
+
import { DEFAULT_BUYER_IDENTITY } from '@antseed/node';
|
|
8
|
+
import { createHash } from 'node:crypto';
|
|
9
|
+
import { loadBuyerSigningIdentity } from '../../../buyer-identities/store.js';
|
|
10
|
+
import { ChainReadCache } from '../../../proxy/chain-read-cache.js';
|
|
11
|
+
import { memberWalletCredentials, sessionSignIn } from '../../auth/db.js';
|
|
12
|
+
import { errorMessage } from '../../errors.js';
|
|
13
|
+
import { audit, requireOrgAdmin, requireWorkspaceAccess } from '../access.js';
|
|
14
|
+
import { ConsoleError } from '../router.js';
|
|
15
|
+
import { assertSignerMatchesBuyer, resolveIdentityAddress, syncWalletCache } from '../../services/wallet-address.js';
|
|
16
|
+
import { buyerJson, defaultBuyerClient, optionalBuyerJson, withIdentity } from './network-buyer.js';
|
|
17
|
+
import { antseedPayBaseUrl, buildCardLink, CARD_PROVIDERS } from './wallet-card-link.js';
|
|
18
|
+
import { applyChannelChainState, chainInfo, mapBalances, mapChannels, mapDepositWatch, mapRewards, record } from './wallet-mapping.js';
|
|
19
|
+
import { createRewardsReader, readChannelStates as readChannelStatesOnChain, REWARDS_TTL_MS } from './wallet-chain.js';
|
|
20
|
+
import { registerOperatorRoutes } from './wallet-operator.js';
|
|
21
|
+
/** Channel states are re-read from the chain at most this often for the same set of channels. */
|
|
22
|
+
const CHANNELS_TTL_MS = 30_000;
|
|
23
|
+
/** Rows the buyer still counts as open; the chain may say otherwise. */
|
|
24
|
+
const OPEN_CHANNEL_STATUSES = new Set(['active', 'open', 'closing', 'withdrawable']);
|
|
25
|
+
/** After a failed rewards read, the chain is not asked again for this long (the last value is served, marked stale). */
|
|
26
|
+
const REWARDS_ERROR_RETRY_MS = 30_000;
|
|
27
|
+
/** One rewards reader per process: one ANTS context and provider per chain. */
|
|
28
|
+
const sharedRewardsReader = createRewardsReader();
|
|
29
|
+
/** The same key the buyer loads for the identity (ANTSEED_IDENTITY_HEX for the default one, then the identity files). */
|
|
30
|
+
async function loadSigningWallet(dataDir, name) {
|
|
31
|
+
return (await loadBuyerSigningIdentity(dataDir, name))?.wallet ?? null;
|
|
32
|
+
}
|
|
33
|
+
function rejectionReason(result) {
|
|
34
|
+
if (typeof result['reason'] === 'string')
|
|
35
|
+
return result['reason'];
|
|
36
|
+
if (typeof result['code'] === 'string')
|
|
37
|
+
return result['code'];
|
|
38
|
+
return 'no reason given';
|
|
39
|
+
}
|
|
40
|
+
export function registerWalletRoutes(router, deps, overrides = {}) {
|
|
41
|
+
const buyer = overrides.buyer ?? defaultBuyerClient(deps);
|
|
42
|
+
const access = overrides.requireWorkspaceAccess ?? requireWorkspaceAccess;
|
|
43
|
+
const addressBook = overrides.buyerAddresses ?? deps.buyerAddresses ?? null;
|
|
44
|
+
const loadKey = overrides.loadWallet ?? ((name) => loadSigningWallet(deps.dataDir, name));
|
|
45
|
+
// Every signature goes through here: a key that is not the wallet the buyer pays from is refused.
|
|
46
|
+
const loadWallet = async (name) => {
|
|
47
|
+
const wallet = await loadKey(name);
|
|
48
|
+
if (wallet)
|
|
49
|
+
await assertSignerMatchesBuyer(addressBook, name, wallet.address);
|
|
50
|
+
return wallet;
|
|
51
|
+
};
|
|
52
|
+
// Live first (the running buyer), then the key on disk; never the cached workspace column.
|
|
53
|
+
const walletAddress = overrides.walletAddress ?? (async (name) => (await resolveIdentityAddress(deps.dataDir, addressBook, name)).address);
|
|
54
|
+
const resolveChain = overrides.resolveChain ?? (() => resolveAntsChain(deps.configPath));
|
|
55
|
+
const readRewards = overrides.readRewards ?? sharedRewardsReader;
|
|
56
|
+
const readChannelStates = overrides.readChannelStates ?? readChannelStatesOnChain;
|
|
57
|
+
const payBaseUrl = overrides.payBaseUrl ?? (() => antseedPayBaseUrl());
|
|
58
|
+
const signInOf = overrides.sessionSignIn ?? ((sessionId) => sessionSignIn(deps.store.database, sessionId));
|
|
59
|
+
const memberWallets = overrides.memberWallets ?? ((memberId) => memberWalletCredentials(deps.store.database, memberId));
|
|
60
|
+
// One cache for the chain reads this router makes itself: rewards (`rewards:<address>`), the operator (`operator:<address>`) and channel states (`channels:<ids hash>`).
|
|
61
|
+
const chainCache = new ChainReadCache({ now: deps.now, errorRetryMs: REWARDS_ERROR_RETRY_MS });
|
|
62
|
+
const workspace = (request, minRole = 'member') => {
|
|
63
|
+
const id = request.params['id'] ?? '';
|
|
64
|
+
access(deps.store, request.principal, id, minRole);
|
|
65
|
+
const found = deps.store.getWorkspace(id);
|
|
66
|
+
if (!found)
|
|
67
|
+
throw new ConsoleError(404, 'not_found', 'Workspace not found.');
|
|
68
|
+
return { buyerIdentity: found.buyerIdentity || DEFAULT_BUYER_IDENTITY, record: found };
|
|
69
|
+
};
|
|
70
|
+
/** The buyer reported this address for the workspace: correct the display cache if it differs. */
|
|
71
|
+
const noteLiveAddress = (ws, address) => {
|
|
72
|
+
syncWalletCache(deps.store, ws.record, { address, source: 'live' }, (message) => deps.log(`console: WARNING ${message}`));
|
|
73
|
+
};
|
|
74
|
+
const addressOf = async (ws) => {
|
|
75
|
+
if (!overrides.walletAddress) {
|
|
76
|
+
const resolved = await resolveIdentityAddress(deps.dataDir, addressBook, ws.buyerIdentity).catch(() => null);
|
|
77
|
+
if (resolved?.address && resolved.source === 'live')
|
|
78
|
+
noteLiveAddress(ws, resolved.address);
|
|
79
|
+
return resolved?.address ?? null;
|
|
80
|
+
}
|
|
81
|
+
return walletAddress(ws.buyerIdentity).catch(() => null);
|
|
82
|
+
};
|
|
83
|
+
/** The identity's signing wallet; a key that cannot be read is a 409. */
|
|
84
|
+
const workspaceSigner = async (ws) => {
|
|
85
|
+
try {
|
|
86
|
+
return await loadWallet(ws.buyerIdentity);
|
|
87
|
+
}
|
|
88
|
+
catch (err) {
|
|
89
|
+
if (err instanceof ConsoleError)
|
|
90
|
+
throw err;
|
|
91
|
+
throw new ConsoleError(409, 'wallet_unavailable', `The wallet's key cannot be read: ${errorMessage(err)}`);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const depositStatus = async (ws, address) => {
|
|
95
|
+
// The identity param is ignored by buyers that expose only the default watcher.
|
|
96
|
+
const body = await optionalBuyerJson(buyer, withIdentity('/_antseed/deposits/status', ws.buyerIdentity));
|
|
97
|
+
return body ? mapDepositWatch(body, address) : { mode: 'off', status: 'buyer-unreachable', lastTxHash: null, event: null };
|
|
98
|
+
};
|
|
99
|
+
router.add('GET', '/workspaces/:id/wallet', async (request) => {
|
|
100
|
+
const ws = workspace(request);
|
|
101
|
+
// `fresh=1` (after a transaction) asks the buyer to re-read the chain; it rate-limits that per wallet.
|
|
102
|
+
const fresh = request.query.get('fresh') === '1';
|
|
103
|
+
const raw = await buyerJson(buyer, withIdentity(`/_antseed/balances${fresh ? '?fresh=1' : ''}`, ws.buyerIdentity));
|
|
104
|
+
const balances = mapBalances(raw);
|
|
105
|
+
if (balances.address)
|
|
106
|
+
noteLiveAddress(ws, balances.address);
|
|
107
|
+
const address = balances.address || await addressOf(ws) || '';
|
|
108
|
+
return {
|
|
109
|
+
buyerIdentity: ws.buyerIdentity, ...balances, address, deposit: await depositStatus(ws, address || null),
|
|
110
|
+
// Last known values: the chain is unreachable or rate limiting right now.
|
|
111
|
+
...(raw['stale'] === true ? { stale: true } : {}),
|
|
112
|
+
};
|
|
113
|
+
});
|
|
114
|
+
router.add('POST', '/workspaces/:id/wallet/card-link', async (request) => {
|
|
115
|
+
const ws = workspace(request);
|
|
116
|
+
const body = record(request.body);
|
|
117
|
+
const provider = body['provider'];
|
|
118
|
+
if (!CARD_PROVIDERS.includes(provider))
|
|
119
|
+
throw new ConsoleError(400, 'invalid_provider', 'provider must be "crossmint" or "stripe".');
|
|
120
|
+
const wallet = await workspaceSigner(ws);
|
|
121
|
+
if (!wallet)
|
|
122
|
+
throw new ConsoleError(409, 'wallet_unavailable', `Buyer identity "${ws.buyerIdentity}" has no wallet key on this gateway.`);
|
|
123
|
+
try {
|
|
124
|
+
return { url: await buildCardLink({ baseUrl: payBaseUrl(), wallet, amountUsd: body['amountUsd'], provider }) };
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
throw new ConsoleError(400, 'invalid_amount', errorMessage(err));
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
router.add('POST', '/workspaces/:id/wallet/watch', async (request) => {
|
|
131
|
+
const ws = workspace(request);
|
|
132
|
+
const mode = record(request.body)['mode'];
|
|
133
|
+
if (mode !== 'active' && mode !== 'background')
|
|
134
|
+
throw new ConsoleError(400, 'invalid_mode', 'mode must be "active" or "background".');
|
|
135
|
+
const address = await addressOf(ws);
|
|
136
|
+
// Only the watcher the buyer exposes can be driven; refuse rather than promote another wallet's.
|
|
137
|
+
const current = await depositStatus(ws, address);
|
|
138
|
+
if (current.status === 'not-watched') {
|
|
139
|
+
throw new ConsoleError(409, 'watch_unavailable', 'The buyer exposes a deposit watcher for its default wallet only; this wallet is swept automatically in the background.');
|
|
140
|
+
}
|
|
141
|
+
const result = await buyerJson(buyer, '/_antseed/deposits/watch', { method: 'POST', body: { mode, identity: ws.buyerIdentity } });
|
|
142
|
+
return mapDepositWatch({ watcher: true, status: result['status'] }, address);
|
|
143
|
+
});
|
|
144
|
+
registerOperatorRoutes(router, deps, {
|
|
145
|
+
access,
|
|
146
|
+
loadWallet,
|
|
147
|
+
walletAddress,
|
|
148
|
+
resolveChain,
|
|
149
|
+
...(overrides.operatorNonce ? { operatorNonce: overrides.operatorNonce } : {}),
|
|
150
|
+
...(overrides.readOperator ? { readOperator: overrides.readOperator } : {}),
|
|
151
|
+
...(overrides.walletOwner ? { walletOwner: overrides.walletOwner } : {}),
|
|
152
|
+
sessionSignIn: signInOf,
|
|
153
|
+
memberWallets,
|
|
154
|
+
cache: chainCache,
|
|
155
|
+
onOperatorChanged: (address, buyerIdentity) => {
|
|
156
|
+
// Rewards carry the operator (their recipient); the buyer caches it with the balances for 5 min.
|
|
157
|
+
chainCache.invalidate(`rewards:${address.toLowerCase()}`);
|
|
158
|
+
void optionalBuyerJson(buyer, withIdentity('/_antseed/balances?fresh=1', buyerIdentity));
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
router.add('GET', '/workspaces/:id/channels', async (request) => {
|
|
162
|
+
const ws = workspace(request);
|
|
163
|
+
const all = request.query.get('all') === '1';
|
|
164
|
+
const channels = mapChannels(await buyerJson(buyer, withIdentity(`/_antseed/channels${all ? '?all=1' : ''}`, ws.buyerIdentity)));
|
|
165
|
+
// The buyer's store can call a channel active long after a seller settled
|
|
166
|
+
// it, and reports its configured maximum as the reserve; the chain decides both.
|
|
167
|
+
const ids = channels.filter((channel) => OPEN_CHANNEL_STATUSES.has(channel.status)).map((channel) => channel.channelId).sort();
|
|
168
|
+
let states = new Map();
|
|
169
|
+
// After a close request or withdrawal the browser asks for a re-read rather than wait out the cache.
|
|
170
|
+
if (request.query.get('fresh') === '1')
|
|
171
|
+
chainCache.invalidate('channels');
|
|
172
|
+
if (ids.length > 0) {
|
|
173
|
+
try {
|
|
174
|
+
states = (await chainCache.read(`channels:${createHash('sha256').update(ids.join(',')).digest('hex')}`, { ttlMs: CHANNELS_TTL_MS }, async () => readChannelStates(await resolveChain(), ids))).value;
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// Unreadable chain: show what the buyer knows rather than nothing.
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const nowSeconds = Math.floor(deps.now() / 1000);
|
|
181
|
+
const reconciled = channels.map((channel) => applyChannelChainState(channel, states.get(channel.channelId), nowSeconds));
|
|
182
|
+
return all ? reconciled : reconciled.filter((channel) => OPEN_CHANNEL_STATUSES.has(channel.status));
|
|
183
|
+
});
|
|
184
|
+
router.add('POST', '/workspaces/:id/channels/close', async (request) => {
|
|
185
|
+
requireOrgAdmin(request.principal, deps.store);
|
|
186
|
+
const ws = workspace(request);
|
|
187
|
+
const peerId = record(request.body)['peerId'];
|
|
188
|
+
if (typeof peerId !== 'string' || !/^(0x)?[0-9a-fA-F]{40}$/.test(peerId.trim())) {
|
|
189
|
+
throw new ConsoleError(400, 'invalid_peer', 'peerId must be a 40-character hex peer id.');
|
|
190
|
+
}
|
|
191
|
+
const result = record((await buyerJson(buyer, '/_antseed/channels/close', {
|
|
192
|
+
method: 'POST',
|
|
193
|
+
body: { peerId: peerId.trim().toLowerCase().replace(/^0x/, ''), includeAuth: true, identity: ws.buyerIdentity },
|
|
194
|
+
}))['result']);
|
|
195
|
+
if (result['status'] === 'rejected') {
|
|
196
|
+
throw new ConsoleError(409, 'close_rejected', `The seller declined to close the channel (${rejectionReason(result)}).`);
|
|
197
|
+
}
|
|
198
|
+
chainCache.invalidate('channels');
|
|
199
|
+
audit(deps, request, 'channel.close', { kind: 'workspace', id: request.params['id'] ?? null, label: null }, { buyerIdentity: ws.buyerIdentity, peerId: peerId.trim() });
|
|
200
|
+
return { ok: true };
|
|
201
|
+
});
|
|
202
|
+
router.add('GET', '/workspaces/:id/rewards', async (request) => {
|
|
203
|
+
const ws = workspace(request);
|
|
204
|
+
let address = await addressOf(ws);
|
|
205
|
+
if (!address)
|
|
206
|
+
address = mapBalances(await buyerJson(buyer, withIdentity('/_antseed/balances', ws.buyerIdentity))).address;
|
|
207
|
+
if (!address)
|
|
208
|
+
throw new ConsoleError(409, 'wallet_unavailable', 'This workspace has no wallet address yet.');
|
|
209
|
+
const owner = address;
|
|
210
|
+
try {
|
|
211
|
+
// Five-minute cache; a page visit within ten minutes is answered at once while it refreshes.
|
|
212
|
+
const read = await chainCache.read(`rewards:${owner.toLowerCase()}`, { ttlMs: REWARDS_TTL_MS, staleWhileRevalidateMs: REWARDS_TTL_MS }, async () => mapRewards(await readRewards(await resolveChain(), owner), owner));
|
|
213
|
+
return read.stale ? { ...read.value, stale: true } : read.value;
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
throw new ConsoleError(502, 'rewards_unavailable', `Rewards could not be read from the chain: ${errorMessage(err)}`);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
router.add('GET', '/chain', async () => chainInfo(await resolveChain()));
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../../src/gateway/console-api/handlers/wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.test.d.ts","sourceRoot":"","sources":["../../../../src/gateway/console-api/handlers/wallet.test.ts"],"names":[],"mappings":""}
|