@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,40 @@
|
|
|
1
|
+
import { ConsoleError } from '../console-api/router.js';
|
|
2
|
+
import type { GatewayStore, WorkspaceRecord } from '../store.js';
|
|
3
|
+
/** Identity name → wallet address as the running buyer pays; null when the buyer cannot be reached. */
|
|
4
|
+
export type BuyerAddressBook = () => Promise<Map<string, string> | null>;
|
|
5
|
+
/** The running buyer's identities (`GET /_antseed/buyer-identities`), cached for two seconds. */
|
|
6
|
+
export declare function liveBuyerAddresses(buyerPort: number, secret?: string | null): Promise<Map<string, string> | null>;
|
|
7
|
+
export declare function buyerAddressBook(buyerPort: number, secret?: string | null): BuyerAddressBook;
|
|
8
|
+
export interface ResolvedWalletAddress {
|
|
9
|
+
address: string | null;
|
|
10
|
+
/** live: the running buyer said so. disk: read from the identity's key here (the buyer is down or does not have it). unknown: neither. */
|
|
11
|
+
source: 'live' | 'disk' | 'unknown';
|
|
12
|
+
/** Why the address is unknown, for display. */
|
|
13
|
+
note?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const BUYER_NOT_RUNNING = "unknown (buyer not running)";
|
|
16
|
+
/**
|
|
17
|
+
* The identity's address: from the running buyer, else from its key here
|
|
18
|
+
* (the default identity honouring ANTSEED_IDENTITY_HEX as the buyer does).
|
|
19
|
+
* A desktop-style data dir without that variable cannot say which wallet
|
|
20
|
+
* the buyer uses, so it is unknown rather than guessed from identity.key.
|
|
21
|
+
*/
|
|
22
|
+
export declare function resolveIdentityAddress(dataDir: string, live: BuyerAddressBook | null, name: string): Promise<ResolvedWalletAddress>;
|
|
23
|
+
export declare function sameAddress(a: string | null | undefined, b: string | null | undefined): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Keeps the display cache in line with what was resolved: an address from
|
|
26
|
+
* the buyer replaces a different cached one (warned once); one read from
|
|
27
|
+
* disk only fills an empty cache, since the buyer may be using another key.
|
|
28
|
+
*/
|
|
29
|
+
export declare function syncWalletCache(store: GatewayStore, workspace: WorkspaceRecord, resolved: ResolvedWalletAddress, warn: (message: string) => void): void;
|
|
30
|
+
/**
|
|
31
|
+
* Signing guard: the key loaded for an identity must be the one the running
|
|
32
|
+
* buyer pays from, so nothing is signed for a wallet the workspace does not
|
|
33
|
+
* use. Throws 409 `wallet_mismatch` naming both addresses. When the buyer
|
|
34
|
+
* cannot be reached the key is trusted (it was loaded as the buyer would).
|
|
35
|
+
*/
|
|
36
|
+
export declare function assertSignerMatchesBuyer(live: BuyerAddressBook | null, name: string, signingAddress: string): Promise<void>;
|
|
37
|
+
export declare function walletMismatch(name: string, signingAddress: string, buyerAddress: string): ConsoleError;
|
|
38
|
+
/** For tests: forget cached buyer answers. */
|
|
39
|
+
export declare function clearLiveBuyerAddressCache(): void;
|
|
40
|
+
//# sourceMappingURL=wallet-address.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-address.d.ts","sourceRoot":"","sources":["../../../src/gateway/services/wallet-address.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAEhE,uGAAuG;AACvG,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAA;AAKxE,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAuBjH;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,gBAAgB,CAE5F;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,0IAA0I;IAC1I,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IACnC,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,eAAO,MAAM,iBAAiB,gCAAgC,CAAA;AAE9D;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAczI;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAE/F;AAID;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,qBAAqB,EAC/B,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAC9B,IAAI,CAeN;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjI;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,YAAY,CAIvG;AAED,8CAA8C;AAC9C,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which wallet a workspace pays from. The running buyer is the source of
|
|
3
|
+
* truth: it may hold a key the gateway process cannot see on disk (the
|
|
4
|
+
* desktop app hands it the default wallet in ANTSEED_IDENTITY_HEX). The
|
|
5
|
+
* address cached on the workspace row is for display only and is corrected
|
|
6
|
+
* from the buyer whenever the two differ.
|
|
7
|
+
*/
|
|
8
|
+
import { DEFAULT_BUYER_IDENTITY } from '@antseed/node';
|
|
9
|
+
import { buyerIdentityAddress, hasDesktopIdentity, loadDefaultBuyerIdentity } from '../../buyer-identities/store.js';
|
|
10
|
+
import { buyerFetch } from '../buyer-control.js';
|
|
11
|
+
import { ConsoleError } from '../console-api/router.js';
|
|
12
|
+
const LIVE_TTL_MS = 2_000;
|
|
13
|
+
const liveCache = new Map();
|
|
14
|
+
/** The running buyer's identities (`GET /_antseed/buyer-identities`), cached for two seconds. */
|
|
15
|
+
export function liveBuyerAddresses(buyerPort, secret) {
|
|
16
|
+
const key = String(buyerPort);
|
|
17
|
+
const cached = liveCache.get(key);
|
|
18
|
+
if (cached && Date.now() - cached.at < LIVE_TTL_MS)
|
|
19
|
+
return cached.value;
|
|
20
|
+
const value = (async () => {
|
|
21
|
+
try {
|
|
22
|
+
const response = secret
|
|
23
|
+
? await buyerFetch({ buyerPort, secret, timeoutMs: 3_000 }, '/_antseed/buyer-identities')
|
|
24
|
+
: await fetch(`http://127.0.0.1:${buyerPort}/_antseed/buyer-identities`, { signal: AbortSignal.timeout(3_000) });
|
|
25
|
+
if (!response.ok)
|
|
26
|
+
return null;
|
|
27
|
+
const body = await response.json();
|
|
28
|
+
if (!Array.isArray(body.identities))
|
|
29
|
+
return null;
|
|
30
|
+
const book = new Map();
|
|
31
|
+
for (const entry of body.identities) {
|
|
32
|
+
if (typeof entry.name === 'string' && typeof entry.address === 'string')
|
|
33
|
+
book.set(entry.name, entry.address);
|
|
34
|
+
}
|
|
35
|
+
return book;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
})();
|
|
41
|
+
liveCache.set(key, { at: Date.now(), value });
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
export function buyerAddressBook(buyerPort, secret) {
|
|
45
|
+
return () => liveBuyerAddresses(buyerPort, secret);
|
|
46
|
+
}
|
|
47
|
+
export const BUYER_NOT_RUNNING = 'unknown (buyer not running)';
|
|
48
|
+
/**
|
|
49
|
+
* The identity's address: from the running buyer, else from its key here
|
|
50
|
+
* (the default identity honouring ANTSEED_IDENTITY_HEX as the buyer does).
|
|
51
|
+
* A desktop-style data dir without that variable cannot say which wallet
|
|
52
|
+
* the buyer uses, so it is unknown rather than guessed from identity.key.
|
|
53
|
+
*/
|
|
54
|
+
export async function resolveIdentityAddress(dataDir, live, name) {
|
|
55
|
+
const book = live ? await live().catch(() => null) : null;
|
|
56
|
+
const fromBuyer = book?.get(name);
|
|
57
|
+
if (fromBuyer)
|
|
58
|
+
return { address: fromBuyer, source: 'live' };
|
|
59
|
+
if (name === DEFAULT_BUYER_IDENTITY) {
|
|
60
|
+
const loaded = await loadDefaultBuyerIdentity(dataDir).catch(() => null);
|
|
61
|
+
if (!book && !loaded?.fromEnv && await hasDesktopIdentity(dataDir)) {
|
|
62
|
+
return { address: null, source: 'unknown', note: BUYER_NOT_RUNNING };
|
|
63
|
+
}
|
|
64
|
+
const address = loaded?.identity?.wallet.address ?? null;
|
|
65
|
+
return address ? { address, source: 'disk' } : { address: null, source: 'unknown', note: book ? 'not loaded by the buyer' : BUYER_NOT_RUNNING };
|
|
66
|
+
}
|
|
67
|
+
const address = await buyerIdentityAddress(dataDir, name);
|
|
68
|
+
return address ? { address, source: 'disk' } : { address: null, source: 'unknown', note: book ? 'not loaded by the buyer' : BUYER_NOT_RUNNING };
|
|
69
|
+
}
|
|
70
|
+
export function sameAddress(a, b) {
|
|
71
|
+
return Boolean(a && b && a.toLowerCase() === b.toLowerCase());
|
|
72
|
+
}
|
|
73
|
+
const warned = new Set();
|
|
74
|
+
/**
|
|
75
|
+
* Keeps the display cache in line with what was resolved: an address from
|
|
76
|
+
* the buyer replaces a different cached one (warned once); one read from
|
|
77
|
+
* disk only fills an empty cache, since the buyer may be using another key.
|
|
78
|
+
*/
|
|
79
|
+
export function syncWalletCache(store, workspace, resolved, warn) {
|
|
80
|
+
const cached = workspace.walletAddress;
|
|
81
|
+
if (!resolved.address || sameAddress(cached, resolved.address))
|
|
82
|
+
return;
|
|
83
|
+
if (resolved.source === 'live') {
|
|
84
|
+
if (cached) {
|
|
85
|
+
const key = `${workspace.id}:${cached}:${resolved.address}`.toLowerCase();
|
|
86
|
+
if (!warned.has(key)) {
|
|
87
|
+
warned.add(key);
|
|
88
|
+
warn(`workspace ${workspace.name} (${workspace.id}) wallet changed from ${cached} to ${resolved.address}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
store.setWalletAddress(workspace.buyerIdentity, resolved.address);
|
|
92
|
+
}
|
|
93
|
+
else if (resolved.source === 'disk' && !cached) {
|
|
94
|
+
store.setWalletAddress(workspace.buyerIdentity, resolved.address);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Signing guard: the key loaded for an identity must be the one the running
|
|
99
|
+
* buyer pays from, so nothing is signed for a wallet the workspace does not
|
|
100
|
+
* use. Throws 409 `wallet_mismatch` naming both addresses. When the buyer
|
|
101
|
+
* cannot be reached the key is trusted (it was loaded as the buyer would).
|
|
102
|
+
*/
|
|
103
|
+
export async function assertSignerMatchesBuyer(live, name, signingAddress) {
|
|
104
|
+
const book = live ? await live().catch(() => null) : null;
|
|
105
|
+
const buyerAddress = book?.get(name);
|
|
106
|
+
if (buyerAddress && !sameAddress(buyerAddress, signingAddress))
|
|
107
|
+
throw walletMismatch(name, signingAddress, buyerAddress);
|
|
108
|
+
}
|
|
109
|
+
export function walletMismatch(name, signingAddress, buyerAddress) {
|
|
110
|
+
return new ConsoleError(409, 'wallet_mismatch', `The key this gateway holds for buyer identity "${name}" is wallet ${signingAddress}, but the running buyer pays from ${buyerAddress}. Nothing was signed. Run the gateway with the same key as the buyer (e.g. the same ANTSEED_IDENTITY_HEX).`, { signingAddress, buyerAddress });
|
|
111
|
+
}
|
|
112
|
+
/** For tests: forget cached buyer answers. */
|
|
113
|
+
export function clearLiveBuyerAddressCache() {
|
|
114
|
+
liveCache.clear();
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=wallet-address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-address.js","sourceRoot":"","sources":["../../../src/gateway/services/wallet-address.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-address.test.d.ts","sourceRoot":"","sources":["../../../src/gateway/services/wallet-address.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { afterEach, beforeEach, test } from 'node:test';
|
|
6
|
+
import { Wallet } from 'ethers';
|
|
7
|
+
import { GatewayStore, DEFAULT_WORKSPACE_ID } from '../store.js';
|
|
8
|
+
import { BUYER_NOT_RUNNING, resolveIdentityAddress, syncWalletCache } from './wallet-address.js';
|
|
9
|
+
import { resolveWorkspaceWallet, withWallet } from './workspaces.js';
|
|
10
|
+
// The variable must not leak in from the shell running the tests.
|
|
11
|
+
delete process.env['ANTSEED_IDENTITY_HEX'];
|
|
12
|
+
// Obvious fakes: fixed test keys.
|
|
13
|
+
const DISK_KEY = '33'.repeat(32);
|
|
14
|
+
const DISK_WALLET = new Wallet(`0x${DISK_KEY}`).address;
|
|
15
|
+
const BUYER_WALLET = new Wallet(`0x${'44'.repeat(32)}`).address;
|
|
16
|
+
const OTHER_WALLET = new Wallet(`0x${'55'.repeat(32)}`).address;
|
|
17
|
+
let dataDir;
|
|
18
|
+
let store;
|
|
19
|
+
let warnings;
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
dataDir = mkdtempSync(join(tmpdir(), 'antseed-wallet-address-'));
|
|
22
|
+
store = new GatewayStore(dataDir);
|
|
23
|
+
warnings = [];
|
|
24
|
+
});
|
|
25
|
+
afterEach(() => {
|
|
26
|
+
store.close();
|
|
27
|
+
rmSync(dataDir, { recursive: true, force: true });
|
|
28
|
+
});
|
|
29
|
+
const ctx = (book) => ({
|
|
30
|
+
store,
|
|
31
|
+
dataDir,
|
|
32
|
+
buyerAddresses: async () => book,
|
|
33
|
+
warn: (message) => { warnings.push(message); },
|
|
34
|
+
});
|
|
35
|
+
test('the running buyer wins over the key on disk and corrects a stale cache, warning once', async () => {
|
|
36
|
+
writeFileSync(join(dataDir, 'identity.key'), DISK_KEY);
|
|
37
|
+
store.setWalletAddress('default', DISK_WALLET);
|
|
38
|
+
const live = new Map([['default', BUYER_WALLET]]);
|
|
39
|
+
const resolved = await resolveIdentityAddress(dataDir, async () => live, 'default');
|
|
40
|
+
assert.deepEqual(resolved, { address: BUYER_WALLET, source: 'live' });
|
|
41
|
+
const first = await withWallet(ctx(live), store.defaultWorkspace());
|
|
42
|
+
assert.equal(first.walletAddress, BUYER_WALLET);
|
|
43
|
+
assert.equal(store.defaultWorkspace().walletAddress, BUYER_WALLET);
|
|
44
|
+
assert.deepEqual(warnings, [`workspace Default (${DEFAULT_WORKSPACE_ID}) wallet changed from ${DISK_WALLET} to ${BUYER_WALLET}`]);
|
|
45
|
+
// The same change is not warned about again.
|
|
46
|
+
store.setWalletAddress('default', DISK_WALLET);
|
|
47
|
+
await withWallet(ctx(live), store.defaultWorkspace());
|
|
48
|
+
assert.equal(warnings.length, 1);
|
|
49
|
+
});
|
|
50
|
+
test('buyer down: the key on disk is used, but only fills an empty cache', async () => {
|
|
51
|
+
writeFileSync(join(dataDir, 'identity.key'), DISK_KEY);
|
|
52
|
+
const resolved = await resolveWorkspaceWallet(ctx(null), store.defaultWorkspace());
|
|
53
|
+
assert.deepEqual(resolved, { address: DISK_WALLET, source: 'disk' });
|
|
54
|
+
assert.equal(store.defaultWorkspace().walletAddress, DISK_WALLET);
|
|
55
|
+
// A value the buyer reported earlier is not overwritten by a guess from disk.
|
|
56
|
+
store.setWalletAddress('default', OTHER_WALLET);
|
|
57
|
+
const again = await withWallet(ctx(null), store.defaultWorkspace());
|
|
58
|
+
assert.equal(again.walletAddress, DISK_WALLET);
|
|
59
|
+
assert.equal(store.defaultWorkspace().walletAddress, OTHER_WALLET);
|
|
60
|
+
assert.deepEqual(warnings, []);
|
|
61
|
+
});
|
|
62
|
+
test('desktop-style data dir without ANTSEED_IDENTITY_HEX and no buyer: unknown, nothing cached', async () => {
|
|
63
|
+
// identity.enc next to a stale identity.key: the buyer runs with the desktop's key, which this process cannot see.
|
|
64
|
+
writeFileSync(join(dataDir, 'identity.key'), DISK_KEY);
|
|
65
|
+
writeFileSync(join(dataDir, 'identity.enc'), 'encrypted');
|
|
66
|
+
const shown = await withWallet(ctx(null), store.defaultWorkspace());
|
|
67
|
+
assert.equal(shown.walletAddress, null);
|
|
68
|
+
assert.equal(shown.walletNote, BUYER_NOT_RUNNING);
|
|
69
|
+
assert.equal(store.defaultWorkspace().walletAddress, null);
|
|
70
|
+
// With the buyer up, its answer is taken.
|
|
71
|
+
const live = await withWallet(ctx(new Map([['default', BUYER_WALLET]])), store.defaultWorkspace());
|
|
72
|
+
assert.equal(live.walletAddress, BUYER_WALLET);
|
|
73
|
+
assert.equal(store.defaultWorkspace().walletAddress, BUYER_WALLET);
|
|
74
|
+
});
|
|
75
|
+
test('a buyer that is up but does not list the identity falls back to its key here', async () => {
|
|
76
|
+
const resolved = await resolveIdentityAddress(dataDir, async () => new Map(), 'ws-missing');
|
|
77
|
+
assert.equal(resolved.address, null);
|
|
78
|
+
assert.equal(resolved.source, 'unknown');
|
|
79
|
+
});
|
|
80
|
+
test('syncWalletCache ignores unknown results', () => {
|
|
81
|
+
syncWalletCache(store, store.defaultWorkspace(), { address: null, source: 'unknown' }, (message) => warnings.push(message));
|
|
82
|
+
assert.equal(store.defaultWorkspace().walletAddress, null);
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=wallet-address.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet-address.test.js","sourceRoot":"","sources":["../../../src/gateway/services/wallet-address.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { RoutingPolicy } from '../../routing-policy/policy.js';
|
|
2
|
+
import type { BuyerClient } from '../console-api/handlers/network-buyer.js';
|
|
3
|
+
import { type BudgetLimits } from '../limits.js';
|
|
4
|
+
import type { OrgRole, WorkspaceRecord, WorkspaceRole } from '../store.js';
|
|
5
|
+
import { type BuyerAddressBook, type ResolvedWalletAddress } from './wallet-address.js';
|
|
6
|
+
import { type Actor, type PolicyConfirmations, type ServiceContext } from './context.js';
|
|
7
|
+
/** `ws-<slug>`, suffixed until no identity has that name. */
|
|
8
|
+
export declare function uniqueWorkspaceIdentity(dataDir: string, name: string): Promise<string>;
|
|
9
|
+
/** Where a workspace's wallet address comes from; see services/wallet-address.ts. */
|
|
10
|
+
export interface WalletContext {
|
|
11
|
+
store: ServiceContext['store'];
|
|
12
|
+
dataDir: string;
|
|
13
|
+
/** The running buyer's identities; defaults to asking the buyer on `buyerPort`. */
|
|
14
|
+
buyerAddresses?: BuyerAddressBook;
|
|
15
|
+
buyerPort?: number;
|
|
16
|
+
controlSecret?: string;
|
|
17
|
+
log?: (message: string) => void;
|
|
18
|
+
warn?: (message: string) => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function walletAddressBook(ctx: Pick<WalletContext, 'buyerAddresses' | 'buyerPort' | 'controlSecret'>): BuyerAddressBook | null;
|
|
21
|
+
/** The workspace's wallet address, resolved live and kept in the display cache. */
|
|
22
|
+
export declare function resolveWorkspaceWallet(ctx: WalletContext, workspace: WorkspaceRecord): Promise<ResolvedWalletAddress>;
|
|
23
|
+
/**
|
|
24
|
+
* The workspace with its wallet address as the running buyer pays (see
|
|
25
|
+
* resolveWorkspaceWallet). When that cannot be known the address is null and
|
|
26
|
+
* `walletNote` says why; the cached value is never presented as current.
|
|
27
|
+
*/
|
|
28
|
+
export declare function withWallet(ctx: WalletContext, workspace: WorkspaceRecord): Promise<WorkspaceRecord & {
|
|
29
|
+
walletNote?: string;
|
|
30
|
+
}>;
|
|
31
|
+
export interface CreateWorkspaceInput extends PolicyConfirmations {
|
|
32
|
+
name: string;
|
|
33
|
+
limits?: BudgetLimits;
|
|
34
|
+
routingPolicy?: RoutingPolicy | null;
|
|
35
|
+
orgRoutingPolicy?: RoutingPolicy | null;
|
|
36
|
+
/** Pay from this existing buyer identity; by default a new `ws-<name>` identity (wallet) is created. */
|
|
37
|
+
buyerIdentity?: string;
|
|
38
|
+
}
|
|
39
|
+
/** Creates a workspace with its own wallet (or an existing identity's); `adminMemberId` becomes its first admin. */
|
|
40
|
+
export declare function createWorkspace(ctx: ServiceContext, actor: Actor, input: CreateWorkspaceInput, options?: {
|
|
41
|
+
adminMemberId?: string | null;
|
|
42
|
+
}): Promise<WorkspaceRecord>;
|
|
43
|
+
export interface UpdateWorkspaceInput extends PolicyConfirmations {
|
|
44
|
+
name?: string;
|
|
45
|
+
/** Org admins only (the caller's check); only the periods present change. */
|
|
46
|
+
limits?: Partial<BudgetLimits>;
|
|
47
|
+
routingPolicy?: RoutingPolicy | null;
|
|
48
|
+
/** Org admins only (the caller's check). */
|
|
49
|
+
orgRoutingPolicy?: RoutingPolicy | null;
|
|
50
|
+
/** Refused: a workspace's wallet never changes. */
|
|
51
|
+
buyerIdentity?: unknown;
|
|
52
|
+
}
|
|
53
|
+
/** Renames a workspace or changes its budgets and policies; policy changes get their own audit entry. */
|
|
54
|
+
export declare function updateWorkspace(ctx: ServiceContext, actor: Actor, id: string, input: UpdateWorkspaceInput): WorkspaceRecord;
|
|
55
|
+
/**
|
|
56
|
+
* Deletes a workspace that has no active keys and, unless another workspace
|
|
57
|
+
* shares its identity, an empty wallet (asked of the buyer). The identity
|
|
58
|
+
* itself is kept.
|
|
59
|
+
*/
|
|
60
|
+
export declare function deleteWorkspace(ctx: ServiceContext, actor: Actor, id: string, buyer: BuyerClient): Promise<WorkspaceRecord>;
|
|
61
|
+
/**
|
|
62
|
+
* Who is changing workspace membership: `callerOrgRole` is the caller's org
|
|
63
|
+
* role (a management token counts as an org admin). Without it (the CLI) the
|
|
64
|
+
* caller is not limited.
|
|
65
|
+
*/
|
|
66
|
+
export interface WorkspaceMemberOptions {
|
|
67
|
+
callerOrgRole?: OrgRole;
|
|
68
|
+
}
|
|
69
|
+
/** Adds a member to a workspace or changes their role there. */
|
|
70
|
+
export declare function setWorkspaceMember(ctx: ServiceContext, actor: Actor, workspaceId: string, memberId: string, role: WorkspaceRole, options?: WorkspaceMemberOptions): void;
|
|
71
|
+
/** Removes a member from a workspace; their keys there are revoked with the membership. */
|
|
72
|
+
export declare function removeWorkspaceMember(ctx: ServiceContext, actor: Actor, workspaceId: string, memberId: string, options?: WorkspaceMemberOptions): {
|
|
73
|
+
revokedKeys: string[];
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=workspaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../../src/gateway/services/workspaces.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { DEFAULT_BUYER_IDENTITY } from '@antseed/node';
|
|
2
|
+
import { buyerIdentityExists, createBuyerIdentity } from '../../buyer-identities/store.js';
|
|
3
|
+
import { ConsoleError } from '../console-api/router.js';
|
|
4
|
+
import { badRequest, notFound } from '../console-api/serialize.js';
|
|
5
|
+
import { NO_BUDGET_LIMITS } from '../limits.js';
|
|
6
|
+
import { parseUsdToUsdc } from '../money.js';
|
|
7
|
+
import { checkPolicyInput, policyInputProblem } from '../policy-resolver.js';
|
|
8
|
+
import { buyerAddressBook, resolveIdentityAddress, syncWalletCache } from './wallet-address.js';
|
|
9
|
+
import { changedFields, recordAudit, requiredText, throwIfProblem } from './context.js';
|
|
10
|
+
const IDENTITY_NAME_MAX = 32;
|
|
11
|
+
const NAME_MAX = 100;
|
|
12
|
+
function slugify(name) {
|
|
13
|
+
return name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '').slice(0, IDENTITY_NAME_MAX - 3) || 'workspace';
|
|
14
|
+
}
|
|
15
|
+
/** `ws-<slug>`, suffixed until no identity has that name. */
|
|
16
|
+
export async function uniqueWorkspaceIdentity(dataDir, name) {
|
|
17
|
+
const base = `ws-${slugify(name)}`.slice(0, IDENTITY_NAME_MAX).replace(/-+$/, '');
|
|
18
|
+
if (!await buyerIdentityExists(dataDir, base))
|
|
19
|
+
return base;
|
|
20
|
+
for (let suffix = 2;; suffix += 1) {
|
|
21
|
+
const tail = `-${suffix}`;
|
|
22
|
+
const candidate = `${base.slice(0, IDENTITY_NAME_MAX - tail.length).replace(/-+$/, '')}${tail}`;
|
|
23
|
+
if (!await buyerIdentityExists(dataDir, candidate))
|
|
24
|
+
return candidate;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function requireWorkspaceRecord(ctx, id) {
|
|
28
|
+
const workspace = ctx.store.getWorkspace(id);
|
|
29
|
+
if (!workspace)
|
|
30
|
+
throw notFound('Workspace');
|
|
31
|
+
return workspace;
|
|
32
|
+
}
|
|
33
|
+
export function walletAddressBook(ctx) {
|
|
34
|
+
if (ctx.buyerAddresses)
|
|
35
|
+
return ctx.buyerAddresses;
|
|
36
|
+
return ctx.buyerPort ? buyerAddressBook(ctx.buyerPort, ctx.controlSecret) : null;
|
|
37
|
+
}
|
|
38
|
+
/** The workspace's wallet address, resolved live and kept in the display cache. */
|
|
39
|
+
export async function resolveWorkspaceWallet(ctx, workspace) {
|
|
40
|
+
const resolved = await resolveIdentityAddress(ctx.dataDir, walletAddressBook(ctx), workspace.buyerIdentity);
|
|
41
|
+
syncWalletCache(ctx.store, workspace, resolved, (message) => (ctx.warn ?? ctx.log ?? (() => undefined))(message));
|
|
42
|
+
return resolved;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The workspace with its wallet address as the running buyer pays (see
|
|
46
|
+
* resolveWorkspaceWallet). When that cannot be known the address is null and
|
|
47
|
+
* `walletNote` says why; the cached value is never presented as current.
|
|
48
|
+
*/
|
|
49
|
+
export async function withWallet(ctx, workspace) {
|
|
50
|
+
const resolved = await resolveWorkspaceWallet(ctx, workspace);
|
|
51
|
+
return { ...workspace, walletAddress: resolved.address, ...(resolved.note ? { walletNote: resolved.note } : {}) };
|
|
52
|
+
}
|
|
53
|
+
/** Whether the workspace's wallet still holds anything; null when the buyer cannot say. */
|
|
54
|
+
async function walletHoldsFunds(buyer, workspace) {
|
|
55
|
+
try {
|
|
56
|
+
const response = await buyer(`/_antseed/balances?identity=${encodeURIComponent(workspace.buyerIdentity)}`);
|
|
57
|
+
if (!response.ok)
|
|
58
|
+
return null;
|
|
59
|
+
const balances = await response.json();
|
|
60
|
+
return ['available', 'reserved', 'walletUsdc'].some((field) => {
|
|
61
|
+
const value = balances[field];
|
|
62
|
+
if (typeof value !== 'string' && typeof value !== 'number')
|
|
63
|
+
return false;
|
|
64
|
+
try {
|
|
65
|
+
return parseUsdToUsdc(String(value)) > 0;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Empty-allow and narrowing checks for the workspace's two policies as they
|
|
78
|
+
* would be after a change: the org policy under the gateway default, the
|
|
79
|
+
* workspace admins' own under the org policy.
|
|
80
|
+
*/
|
|
81
|
+
function checkWorkspacePolicies(ctx, workspace, sent, flags) {
|
|
82
|
+
const next = { ...workspace, ...sent };
|
|
83
|
+
const target = { workspaceId: workspace.id, workspace: next };
|
|
84
|
+
const checks = [];
|
|
85
|
+
if (sent.orgRoutingPolicy !== undefined) {
|
|
86
|
+
checks.push({ field: 'orgRoutingPolicy', check: checkPolicyInput(ctx.store, target, 'workspace-org', sent.orgRoutingPolicy) });
|
|
87
|
+
}
|
|
88
|
+
if (sent.routingPolicy !== undefined) {
|
|
89
|
+
checks.push({ field: 'routingPolicy', check: checkPolicyInput(ctx.store, target, 'workspace', sent.routingPolicy) });
|
|
90
|
+
}
|
|
91
|
+
throwIfProblem(policyInputProblem(checks, flags));
|
|
92
|
+
}
|
|
93
|
+
/** Creates a workspace with its own wallet (or an existing identity's); `adminMemberId` becomes its first admin. */
|
|
94
|
+
export async function createWorkspace(ctx, actor, input, options = {}) {
|
|
95
|
+
const { store } = ctx;
|
|
96
|
+
const name = requiredText(input.name, 'name', NAME_MAX);
|
|
97
|
+
const limits = input.limits ?? NO_BUDGET_LIMITS;
|
|
98
|
+
const routingPolicy = input.routingPolicy ?? null;
|
|
99
|
+
const orgRoutingPolicy = input.orgRoutingPolicy ?? null;
|
|
100
|
+
checkWorkspacePolicies(ctx, { id: 'ws_new', routingPolicy: null, orgRoutingPolicy: null }, {
|
|
101
|
+
...(routingPolicy ? { routingPolicy } : {}),
|
|
102
|
+
...(orgRoutingPolicy ? { orgRoutingPolicy } : {}),
|
|
103
|
+
}, input);
|
|
104
|
+
let buyerIdentity;
|
|
105
|
+
let walletAddress = null;
|
|
106
|
+
if (input.buyerIdentity !== undefined) {
|
|
107
|
+
buyerIdentity = input.buyerIdentity.trim();
|
|
108
|
+
if (!buyerIdentity)
|
|
109
|
+
throw badRequest('buyerIdentity is required');
|
|
110
|
+
if (buyerIdentity.length > IDENTITY_NAME_MAX)
|
|
111
|
+
throw badRequest(`buyerIdentity is longer than ${IDENTITY_NAME_MAX} characters`);
|
|
112
|
+
if (buyerIdentity !== DEFAULT_BUYER_IDENTITY && !await buyerIdentityExists(ctx.dataDir, buyerIdentity)) {
|
|
113
|
+
throw badRequest(`Unknown buyer identity "${buyerIdentity}"`);
|
|
114
|
+
}
|
|
115
|
+
walletAddress = (await resolveIdentityAddress(ctx.dataDir, ctx.buyerAddresses ?? null, buyerIdentity).catch(() => null))?.address ?? null;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
const created = await createBuyerIdentity(ctx.dataDir, await uniqueWorkspaceIdentity(ctx.dataDir, name));
|
|
119
|
+
buyerIdentity = created.name;
|
|
120
|
+
walletAddress = created.address;
|
|
121
|
+
}
|
|
122
|
+
const workspace = store.createWorkspace({ name, buyerIdentity, walletAddress, limits, routingPolicy, orgRoutingPolicy });
|
|
123
|
+
if (options.adminMemberId)
|
|
124
|
+
store.setWorkspaceMember(workspace.id, options.adminMemberId, 'admin');
|
|
125
|
+
ctx.log(`console: workspace ${workspace.id} created, paying with identity ${buyerIdentity}`);
|
|
126
|
+
recordAudit(ctx, actor, 'workspace.create', { kind: 'workspace', id: workspace.id, label: name }, { buyerIdentity, limits, routingPolicy, orgRoutingPolicy });
|
|
127
|
+
return workspace;
|
|
128
|
+
}
|
|
129
|
+
/** Renames a workspace or changes its budgets and policies; policy changes get their own audit entry. */
|
|
130
|
+
export function updateWorkspace(ctx, actor, id, input) {
|
|
131
|
+
const { store } = ctx;
|
|
132
|
+
const before = requireWorkspaceRecord(ctx, id);
|
|
133
|
+
if (input.buyerIdentity !== undefined)
|
|
134
|
+
throw badRequest('A workspace\'s wallet cannot be changed');
|
|
135
|
+
const { routingPolicy, orgRoutingPolicy } = input;
|
|
136
|
+
checkWorkspacePolicies(ctx, before, {
|
|
137
|
+
...(routingPolicy !== undefined ? { routingPolicy } : {}),
|
|
138
|
+
...(orgRoutingPolicy !== undefined ? { orgRoutingPolicy } : {}),
|
|
139
|
+
}, input);
|
|
140
|
+
const workspace = store.updateWorkspace(id, {
|
|
141
|
+
...(input.name !== undefined ? { name: requiredText(input.name, 'name', NAME_MAX) } : {}),
|
|
142
|
+
...(input.limits !== undefined ? { limits: input.limits } : {}),
|
|
143
|
+
...(routingPolicy !== undefined ? { routingPolicy } : {}),
|
|
144
|
+
...(orgRoutingPolicy !== undefined ? { orgRoutingPolicy } : {}),
|
|
145
|
+
});
|
|
146
|
+
const target = { kind: 'workspace', id, label: workspace.name };
|
|
147
|
+
const changes = changedFields(before, workspace, ['name', 'limits', 'routingPolicy', 'orgRoutingPolicy']);
|
|
148
|
+
if (changes['routingPolicy'] || changes['orgRoutingPolicy']) {
|
|
149
|
+
recordAudit(ctx, actor, 'workspace.policy.update', target, {
|
|
150
|
+
...(changes['routingPolicy'] ? { routingPolicy: changes['routingPolicy'] } : {}),
|
|
151
|
+
...(changes['orgRoutingPolicy'] ? { orgRoutingPolicy: changes['orgRoutingPolicy'] } : {}),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
const other = Object.fromEntries(Object.entries(changes).filter(([field]) => field !== 'routingPolicy' && field !== 'orgRoutingPolicy'));
|
|
155
|
+
if (Object.keys(other).length)
|
|
156
|
+
recordAudit(ctx, actor, 'workspace.update', target, { changes: other });
|
|
157
|
+
return workspace;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Deletes a workspace that has no active keys and, unless another workspace
|
|
161
|
+
* shares its identity, an empty wallet (asked of the buyer). The identity
|
|
162
|
+
* itself is kept.
|
|
163
|
+
*/
|
|
164
|
+
export async function deleteWorkspace(ctx, actor, id, buyer) {
|
|
165
|
+
const { store } = ctx;
|
|
166
|
+
const workspace = requireWorkspaceRecord(ctx, id);
|
|
167
|
+
if (workspace.isDefault)
|
|
168
|
+
throw new ConsoleError(409, 'default_workspace', 'The Default workspace cannot be deleted');
|
|
169
|
+
if (store.countWorkspaceKeys(workspace.id) > 0)
|
|
170
|
+
throw new ConsoleError(409, 'workspace_has_keys', 'Revoke this workspace\'s keys first');
|
|
171
|
+
const shared = store.listWorkspaces().some((other) => other.id !== workspace.id && other.buyerIdentity === workspace.buyerIdentity);
|
|
172
|
+
if (!shared) {
|
|
173
|
+
const funds = await walletHoldsFunds(buyer, workspace);
|
|
174
|
+
if (funds === null)
|
|
175
|
+
throw new ConsoleError(409, 'balance_unknown', 'The buyer is not reachable, so the wallet balance cannot be checked');
|
|
176
|
+
if (funds)
|
|
177
|
+
throw new ConsoleError(409, 'workspace_has_balance', 'Withdraw this workspace\'s funds first');
|
|
178
|
+
}
|
|
179
|
+
store.deleteWorkspace(workspace.id);
|
|
180
|
+
ctx.log(`console: workspace ${workspace.id} deleted (identity ${workspace.buyerIdentity} kept)`);
|
|
181
|
+
recordAudit(ctx, actor, 'workspace.delete', { kind: 'workspace', id: workspace.id, label: workspace.name }, { buyerIdentity: workspace.buyerIdentity });
|
|
182
|
+
return workspace;
|
|
183
|
+
}
|
|
184
|
+
const ORG_RANK = { member: 0, admin: 1, owner: 2 };
|
|
185
|
+
/** A workspace admin cannot remove or demote someone who outranks them in the org. */
|
|
186
|
+
function requireNotOutranked(target, options, what) {
|
|
187
|
+
const caller = options.callerOrgRole;
|
|
188
|
+
if (caller === undefined || ORG_RANK[target.orgRole] <= ORG_RANK[caller])
|
|
189
|
+
return;
|
|
190
|
+
throw new ConsoleError(403, 'forbidden', `You cannot ${what} an organization ${target.orgRole}`);
|
|
191
|
+
}
|
|
192
|
+
/** Adds a member to a workspace or changes their role there. */
|
|
193
|
+
export function setWorkspaceMember(ctx, actor, workspaceId, memberId, role, options = {}) {
|
|
194
|
+
const { store } = ctx;
|
|
195
|
+
requireWorkspaceRecord(ctx, workspaceId);
|
|
196
|
+
const member = store.getMember(memberId);
|
|
197
|
+
if (!member)
|
|
198
|
+
throw notFound('Member');
|
|
199
|
+
if (member.status === 'disabled')
|
|
200
|
+
throw new ConsoleError(409, 'member_disabled', 'This member is disabled');
|
|
201
|
+
if (role !== 'admin' && role !== 'member')
|
|
202
|
+
throw badRequest('role must be admin or member');
|
|
203
|
+
const previous = store.memberWorkspaceRoles(member.id).get(workspaceId) ?? null;
|
|
204
|
+
if (previous === 'admin' && role === 'member')
|
|
205
|
+
requireNotOutranked(member, options, 'demote');
|
|
206
|
+
store.setWorkspaceMember(workspaceId, member.id, role);
|
|
207
|
+
recordAudit(ctx, actor, 'workspace.member.set', { kind: 'member', id: member.id, label: member.label }, { workspaceId, before: previous, after: role });
|
|
208
|
+
}
|
|
209
|
+
/** Removes a member from a workspace; their keys there are revoked with the membership. */
|
|
210
|
+
export function removeWorkspaceMember(ctx, actor, workspaceId, memberId, options = {}) {
|
|
211
|
+
const { store } = ctx;
|
|
212
|
+
const member = store.getMember(memberId);
|
|
213
|
+
if (member)
|
|
214
|
+
requireNotOutranked(member, options, 'remove');
|
|
215
|
+
if (!store.removeWorkspaceMember(workspaceId, memberId))
|
|
216
|
+
throw notFound('Workspace member');
|
|
217
|
+
const revokedKeys = [];
|
|
218
|
+
for (const key of store.listKeys({ workspaceId, ownerMemberId: memberId })) {
|
|
219
|
+
if (key.status !== 'active')
|
|
220
|
+
continue;
|
|
221
|
+
store.revokeKey(key.id);
|
|
222
|
+
ctx.sessions?.revokeKeySessions(key.id);
|
|
223
|
+
revokedKeys.push(key.id);
|
|
224
|
+
}
|
|
225
|
+
recordAudit(ctx, actor, 'workspace.member.remove', { kind: 'member', id: memberId, label: store.getMember(memberId)?.label ?? null }, { workspaceId, revokedKeys });
|
|
226
|
+
return { revokedKeys };
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=workspaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../../src/gateway/services/workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACtD,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AAG1F,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAqB,MAAM,cAAc,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC5C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE5E,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,eAAe,EAAqD,MAAM,qBAAqB,CAAA;AAClJ,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAA6D,MAAM,cAAc,CAAA;AAElJ,MAAM,iBAAiB,GAAG,EAAE,CAAA;AAC5B,MAAM,QAAQ,GAAG,GAAG,CAAA;AAEpB,SAAS,OAAO,CAAC,IAAY;IAC3B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,GAAG,CAAC,CAAC,IAAI,WAAW,CAAA;AAC9H,CAAC;AAED,6DAA6D;AAC7D,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,OAAe,EAAE,IAAY;IACzE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACjF,IAAI,CAAC,MAAM,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IAC1D,KAAK,IAAI,MAAM,GAAG,CAAC,GAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAA;QACzB,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAA;QAC/F,IAAI,CAAC,MAAM,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC;YAAE,OAAO,SAAS,CAAA;IACtE,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAkC,EAAE,EAAU;IAC5E,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;IAC5C,IAAI,CAAC,SAAS;QAAE,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAA;IAC3C,OAAO,SAAS,CAAA;AAClB,CAAC;AAcD,MAAM,UAAU,iBAAiB,CAAC,GAA0E;IAC1G,IAAI,GAAG,CAAC,cAAc;QAAE,OAAO,GAAG,CAAC,cAAc,CAAA;IACjD,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAClF,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,GAAkB,EAAE,SAA0B;IACzF,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,aAAa,CAAC,CAAA;IAC3G,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IACjH,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAkB,EAAE,SAA0B;IAC7E,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;IAC7D,OAAO,EAAE,GAAG,SAAS,EAAE,aAAa,EAAE,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;AACnH,CAAC;AAED,2FAA2F;AAC3F,KAAK,UAAU,gBAAgB,CAAC,KAAkB,EAAE,SAA0B;IAC5E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,+BAA+B,kBAAkB,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;QAC1G,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAA;QAC7B,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAA;QACjE,OAAO,CAAC,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC7B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAA;YACxE,IAAI,CAAC;gBACH,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAA;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAA;YACb,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,sBAAsB,CAC7B,GAAmB,EACnB,SAA6E,EAC7E,IAAuF,EACvF,KAA0B;IAE1B,MAAM,IAAI,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,EAAqB,CAAA;IACzD,MAAM,MAAM,GAAG,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;IAC7D,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAA;IAChI,CAAC;IACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAA;IACtH,CAAC;IACD,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;AACnD,CAAC;AAWD,oHAAoH;AACpH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAmB,EACnB,KAAY,EACZ,KAA2B,EAC3B,UAA6C,EAAE;IAE/C,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;IACrB,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;IACvD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,gBAAgB,CAAA;IAC/C,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,IAAI,IAAI,CAAA;IACjD,MAAM,gBAAgB,GAAG,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAA;IACvD,sBAAsB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE;QACzF,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAClD,EAAE,KAAK,CAAC,CAAA;IACT,IAAI,aAAqB,CAAA;IACzB,IAAI,aAAa,GAAkB,IAAI,CAAA;IACvC,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACtC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;QAC1C,IAAI,CAAC,aAAa;YAAE,MAAM,UAAU,CAAC,2BAA2B,CAAC,CAAA;QACjE,IAAI,aAAa,CAAC,MAAM,GAAG,iBAAiB;YAAE,MAAM,UAAU,CAAC,gCAAgC,iBAAiB,aAAa,CAAC,CAAA;QAC9H,IAAI,aAAa,KAAK,sBAAsB,IAAI,CAAC,MAAM,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;YACvG,MAAM,UAAU,CAAC,2BAA2B,aAAa,GAAG,CAAC,CAAA;QAC/D,CAAC;QACD,aAAa,GAAG,CAAC,MAAM,sBAAsB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI,CAAA;IAC3I,CAAC;SAAM,CAAC;QACN,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,uBAAuB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAA;QACxG,aAAa,GAAG,OAAO,CAAC,IAAI,CAAA;QAC5B,aAAa,GAAG,OAAO,CAAC,OAAO,CAAA;IACjC,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC,CAAA;IACxH,IAAI,OAAO,CAAC,aAAa;QAAE,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;IACjG,GAAG,CAAC,GAAG,CAAC,sBAAsB,SAAS,CAAC,EAAE,kCAAkC,aAAa,EAAE,CAAC,CAAA;IAC5F,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC,CAAA;IAC7J,OAAO,SAAS,CAAA;AAClB,CAAC;AAaD,yGAAyG;AACzG,MAAM,UAAU,eAAe,CAAC,GAAmB,EAAE,KAAY,EAAE,EAAU,EAAE,KAA2B;IACxG,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;IACrB,MAAM,MAAM,GAAG,sBAAsB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC9C,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;QAAE,MAAM,UAAU,CAAC,yCAAyC,CAAC,CAAA;IAClG,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAA;IACjD,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE;QAClC,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,EAAE,KAAK,CAAC,CAAA;IACT,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,CAAC,EAAE,EAAE;QAC1C,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzF,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,GAAG,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAC,CAAA;IACF,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,CAAA;IAC/D,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC,CAAA;IACzG,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC5D,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE;YACzD,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1F,CAAC,CAAA;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,eAAe,IAAI,KAAK,KAAK,kBAAkB,CAAC,CAAC,CAAA;IACxI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;QAAE,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAA;IACtG,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,GAAmB,EAAE,KAAY,EAAE,EAAU,EAAE,KAAkB;IACrG,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;IACrB,MAAM,SAAS,GAAG,sBAAsB,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACjD,IAAI,SAAS,CAAC,SAAS;QAAE,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,mBAAmB,EAAE,yCAAyC,CAAC,CAAA;IACpH,IAAI,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,oBAAoB,EAAE,qCAAqC,CAAC,CAAA;IACxI,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa,CAAC,CAAA;IACnI,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QACtD,IAAI,KAAK,KAAK,IAAI;YAAE,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,iBAAiB,EAAE,qEAAqE,CAAC,CAAA;QACzI,IAAI,KAAK;YAAE,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,uBAAuB,EAAE,wCAAwC,CAAC,CAAA;IAC3G,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IACnC,GAAG,CAAC,GAAG,CAAC,sBAAsB,SAAS,CAAC,EAAE,sBAAsB,SAAS,CAAC,aAAa,QAAQ,CAAC,CAAA;IAChG,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,aAAa,EAAE,CAAC,CAAA;IACvJ,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,QAAQ,GAA4B,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;AAW3E,sFAAsF;AACtF,SAAS,mBAAmB,CAAC,MAA4B,EAAE,OAA+B,EAAE,IAAY;IACtG,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAA;IACpC,IAAI,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAM;IAChF,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,cAAc,IAAI,oBAAoB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;AAClG,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,kBAAkB,CAChC,GAAmB,EACnB,KAAY,EACZ,WAAmB,EACnB,QAAgB,EAChB,IAAmB,EACnB,UAAkC,EAAE;IAEpC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;IACrB,sBAAsB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACxC,IAAI,CAAC,MAAM;QAAE,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAA;IACrC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;QAAE,MAAM,IAAI,YAAY,CAAC,GAAG,EAAE,iBAAiB,EAAE,yBAAyB,CAAC,CAAA;IAC3G,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ;QAAE,MAAM,UAAU,CAAC,8BAA8B,CAAC,CAAA;IAC3F,MAAM,QAAQ,GAAG,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAA;IAC/E,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ;QAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC7F,KAAK,CAAC,kBAAkB,CAAC,WAAW,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IACtD,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,sBAAsB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AACzJ,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,qBAAqB,CACnC,GAAmB,EACnB,KAAY,EACZ,WAAmB,EACnB,QAAgB,EAChB,UAAkC,EAAE;IAEpC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAA;IACrB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACxC,IAAI,MAAM;QAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAC1D,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,WAAW,EAAE,QAAQ,CAAC;QAAE,MAAM,QAAQ,CAAC,kBAAkB,CAAC,CAAA;IAC3F,MAAM,WAAW,GAAa,EAAE,CAAA;IAChC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;QAC3E,IAAI,GAAG,CAAC,MAAM,KAAK,QAAQ;YAAE,SAAQ;QACrC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACvB,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACvC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IACD,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAA;IACnK,OAAO,EAAE,WAAW,EAAE,CAAA;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spend-durability.test.d.ts","sourceRoot":"","sources":["../../src/gateway/spend-durability.test.ts"],"names":[],"mappings":""}
|