@antseed/cli 0.1.179 → 0.1.181
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 +5 -3
- 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/apps/index.js +8 -8
- 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 -49
- 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/network/bootstrap.js +1 -1
- package/dist/cli/commands/seller/setup.js +1 -1
- package/dist/cli/commands/seller/start.d.ts.map +1 -1
- package/dist/cli/commands/seller/start.js +1 -2
- package/dist/cli/commands/seller/start.js.map +1 -1
- package/dist/cli/commands/system-proxy/index.js +1 -1
- 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/commands/wrapped-tools.js +8 -8
- package/dist/cli/commands/wrapped-tools.test.js +5 -5
- 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/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +0 -1
- package/dist/config/defaults.js.map +1 -1
- 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 -2
- 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,68 @@
|
|
|
1
|
+
import type { AntseedConfig } from '../../config/types.js';
|
|
2
|
+
import { type BuyerClient } from '../console-api/handlers/network-buyer.js';
|
|
3
|
+
import type { AuthConfig, BuyerSettings, BuyerSettingsInput, ObservabilitySettings, Settings } from '../console-api/types.js';
|
|
4
|
+
import { type Actor, type ServiceContext } from './context.js';
|
|
5
|
+
/** What header values look like to callers who may not read them. */
|
|
6
|
+
export declare const REDACTED = "\u2022\u2022\u2022\u2022";
|
|
7
|
+
/** What the settings services need beyond the common context. */
|
|
8
|
+
export interface SettingsContext extends ServiceContext {
|
|
9
|
+
configPath: string;
|
|
10
|
+
publicUrl: string | null;
|
|
11
|
+
/** The port the gateway forwards to. */
|
|
12
|
+
buyerPort: number;
|
|
13
|
+
/** Auth configuration to report; a conservative default when absent. */
|
|
14
|
+
authConfig?: () => Promise<AuthConfig> | AuthConfig;
|
|
15
|
+
}
|
|
16
|
+
type JsonObject = Record<string, unknown>;
|
|
17
|
+
/**
|
|
18
|
+
* Edits the config file in place: reads the raw JSON, lets `mutate` touch
|
|
19
|
+
* only the fields it changes (so everything else, defaults left implicit
|
|
20
|
+
* included, stays as the operator wrote it), and replaces the file
|
|
21
|
+
* atomically with the same mode. A file that does not parse is never
|
|
22
|
+
* overwritten; a missing one is created with just the changed fields.
|
|
23
|
+
* Edits are serialized in-process, and a symlinked config is written
|
|
24
|
+
* through to its target.
|
|
25
|
+
*/
|
|
26
|
+
export declare function patchConfigFile(configPath: string, mutate: (config: JsonObject) => void): Promise<void>;
|
|
27
|
+
/** Every buyer setting as the config file holds it; `proxyPort` is the port the gateway forwards to. */
|
|
28
|
+
export declare function buyerSettingsFromConfig(config: AntseedConfig, options: {
|
|
29
|
+
proxyPort: number;
|
|
30
|
+
overrides?: string[];
|
|
31
|
+
revealSecrets?: boolean;
|
|
32
|
+
}): BuyerSettings;
|
|
33
|
+
/**
|
|
34
|
+
* Current settings. OTLP header values and RPC URLs can be credentials:
|
|
35
|
+
* they are masked unless `revealSecrets` (an org-admin session; never a
|
|
36
|
+
* management token). With `buyer`, the running buyer's env/flag overrides
|
|
37
|
+
* are included.
|
|
38
|
+
*/
|
|
39
|
+
export declare function readSettings(deps: SettingsContext, options?: {
|
|
40
|
+
revealSecrets?: boolean;
|
|
41
|
+
buyer?: BuyerClient;
|
|
42
|
+
}): Promise<Settings>;
|
|
43
|
+
export type BuyerSettingsPatch = BuyerSettingsInput;
|
|
44
|
+
/**
|
|
45
|
+
* Applies a buyer-settings patch to the config file (in place, atomically,
|
|
46
|
+
* keeping everything else as written). The result is validated exactly as
|
|
47
|
+
* the buyer will load it before anything is written. Routing preferences
|
|
48
|
+
* apply at once (the buyer reloads the file); any other change asks the
|
|
49
|
+
* buyer to restart. `restartRequired` when a restart was needed but the
|
|
50
|
+
* buyer could not restart itself (not supervised, or not reachable): the
|
|
51
|
+
* operator has to. `changed` is false when nothing changed.
|
|
52
|
+
*/
|
|
53
|
+
export declare function updateBuyerSettings(ctx: SettingsContext, actor: Actor, body: unknown, buyer: BuyerClient): Promise<{
|
|
54
|
+
changed: boolean;
|
|
55
|
+
restartRequired: boolean;
|
|
56
|
+
}>;
|
|
57
|
+
/**
|
|
58
|
+
* Saves the observability settings (OTLP export, content logging,
|
|
59
|
+
* retention). Where request data goes (the endpoint) and whether prompts
|
|
60
|
+
* are kept is for a signed-in org admin or the operator
|
|
61
|
+
* (`mayChangeDestination`), not a management token: a refused attempt is
|
|
62
|
+
* audited and answered 403 `session_required`.
|
|
63
|
+
*/
|
|
64
|
+
export declare function setObservabilitySettings(ctx: ServiceContext, actor: Actor, body: unknown, options: {
|
|
65
|
+
mayChangeDestination: boolean;
|
|
66
|
+
}): ObservabilitySettings;
|
|
67
|
+
export {};
|
|
68
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../../src/gateway/services/settings.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAE1D,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,0CAA0C,CAAA;AAG9F,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAG7H,OAAO,EAAe,KAAK,KAAK,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAG3E,qEAAqE;AACrE,eAAO,MAAM,QAAQ,6BAAS,CAAA;AAE9B,iEAAiE;AACjE,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAA;CACpD;AAMD,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAmCzC;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7G;AAsDD,wGAAwG;AACxG,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5E,aAAa,CAgDf;AAUD;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,eAAe,EACrB,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,WAAW,CAAA;CAAO,GAC7D,OAAO,CAAC,QAAQ,CAAC,CAgBnB;AA4DD,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,CAAA;AAkMnD;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EACpB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CA8CzD;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,EAAE;IAAE,oBAAoB,EAAE,OAAO,CAAA;CAAE,GACzC,qBAAqB,CA0BvB"}
|
|
@@ -0,0 +1,580 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import { chmod, readFile, realpath, rename, rm, stat, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { resolve } from 'node:path';
|
|
5
|
+
import { configFromObject, loadConfig } from '../../config/loader.js';
|
|
6
|
+
import { redact } from '../../proxy/chain-rpc.js';
|
|
7
|
+
import { optionalBuyerJson } from '../console-api/handlers/network-buyer.js';
|
|
8
|
+
import { ConsoleError } from '../console-api/router.js';
|
|
9
|
+
import { asObject, badRequest } from '../console-api/serialize.js';
|
|
10
|
+
import { errorMessage } from '../errors.js';
|
|
11
|
+
import { OBSERVABILITY_SETTING, observabilitySettings } from '../observability.js';
|
|
12
|
+
import { recordAudit } from './context.js';
|
|
13
|
+
const MAX_OTLP_HEADERS = 20;
|
|
14
|
+
/** What header values look like to callers who may not read them. */
|
|
15
|
+
export const REDACTED = '••••';
|
|
16
|
+
function resolveConfigPath(configPath) {
|
|
17
|
+
return configPath.startsWith('~') ? resolve(homedir(), configPath.slice(2)) : resolve(configPath);
|
|
18
|
+
}
|
|
19
|
+
function childObject(parent, key) {
|
|
20
|
+
const value = parent[key];
|
|
21
|
+
if (value && typeof value === 'object' && !Array.isArray(value))
|
|
22
|
+
return value;
|
|
23
|
+
const created = {};
|
|
24
|
+
parent[key] = created;
|
|
25
|
+
return created;
|
|
26
|
+
}
|
|
27
|
+
/** Config edits in flight, per file: each waits for the previous one so concurrent PATCHes never lose an update. */
|
|
28
|
+
const configLocks = new Map();
|
|
29
|
+
async function withConfigLock(path, task) {
|
|
30
|
+
const previous = configLocks.get(path) ?? Promise.resolve();
|
|
31
|
+
const run = previous.then(task, task);
|
|
32
|
+
const settled = run.then(() => undefined, () => undefined);
|
|
33
|
+
configLocks.set(path, settled);
|
|
34
|
+
try {
|
|
35
|
+
return await run;
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
if (configLocks.get(path) === settled)
|
|
39
|
+
configLocks.delete(path);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/** The file a (possibly symlinked) config path points at, so the edit replaces the target rather than the link. */
|
|
43
|
+
async function configTarget(path) {
|
|
44
|
+
try {
|
|
45
|
+
return await realpath(path);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (error.code === 'ENOENT')
|
|
49
|
+
return path;
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Edits the config file in place: reads the raw JSON, lets `mutate` touch
|
|
55
|
+
* only the fields it changes (so everything else, defaults left implicit
|
|
56
|
+
* included, stays as the operator wrote it), and replaces the file
|
|
57
|
+
* atomically with the same mode. A file that does not parse is never
|
|
58
|
+
* overwritten; a missing one is created with just the changed fields.
|
|
59
|
+
* Edits are serialized in-process, and a symlinked config is written
|
|
60
|
+
* through to its target.
|
|
61
|
+
*/
|
|
62
|
+
export async function patchConfigFile(configPath, mutate) {
|
|
63
|
+
const target = await configTarget(resolveConfigPath(configPath));
|
|
64
|
+
await withConfigLock(target, () => patchConfigTarget(target, mutate));
|
|
65
|
+
}
|
|
66
|
+
async function patchConfigTarget(path, mutate) {
|
|
67
|
+
let raw = null;
|
|
68
|
+
try {
|
|
69
|
+
raw = await readFile(path, 'utf8');
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (error.code !== 'ENOENT')
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
let config = {};
|
|
76
|
+
if (raw !== null && raw.trim() !== '') {
|
|
77
|
+
let parsed;
|
|
78
|
+
try {
|
|
79
|
+
parsed = JSON.parse(raw);
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
throw new ConsoleError(409, 'config_unreadable', `The config file ${path} is not valid JSON; fix it before changing settings here`);
|
|
83
|
+
}
|
|
84
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
85
|
+
throw new ConsoleError(409, 'config_unreadable', `The config file ${path} is not a JSON object`);
|
|
86
|
+
}
|
|
87
|
+
config = parsed;
|
|
88
|
+
}
|
|
89
|
+
mutate(config);
|
|
90
|
+
const mode = raw === null ? 0o600 : (await stat(path)).mode & 0o777;
|
|
91
|
+
const temp = `${path}.${randomBytes(6).toString('hex')}.tmp`;
|
|
92
|
+
try {
|
|
93
|
+
await writeFile(temp, `${JSON.stringify(config, null, 2)}\n`, { mode });
|
|
94
|
+
await chmod(temp, mode);
|
|
95
|
+
await rename(temp, path);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
await rm(temp, { force: true });
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async function authConfig(deps) {
|
|
103
|
+
if (deps.authConfig)
|
|
104
|
+
return deps.authConfig();
|
|
105
|
+
return { setupRequired: !deps.store.isSetupComplete(), passkey: true, wallet: true, oidc: null, cloudflareAccess: false, apiKeyLogin: true };
|
|
106
|
+
}
|
|
107
|
+
const USDC_UNITS = 1_000_000;
|
|
108
|
+
const DEFAULT_MAX_PER_REQUEST_USDC = '300000';
|
|
109
|
+
const DEFAULT_MAX_RESERVE_USDC = '1000000';
|
|
110
|
+
function usdcFromBaseUnits(value, fallback) {
|
|
111
|
+
const units = Number(value ?? fallback);
|
|
112
|
+
return Number.isFinite(units) ? units / USDC_UNITS : Number(fallback) / USDC_UNITS;
|
|
113
|
+
}
|
|
114
|
+
/** RPC URLs carry API keys in their path or query: shown as origin + "/…" unless revealed. */
|
|
115
|
+
function maskRpcUrl(url, reveal) {
|
|
116
|
+
return reveal ? url : redact(url);
|
|
117
|
+
}
|
|
118
|
+
/** Every buyer setting as the config file holds it; `proxyPort` is the port the gateway forwards to. */
|
|
119
|
+
export function buyerSettingsFromConfig(config, options) {
|
|
120
|
+
const buyer = config.buyer;
|
|
121
|
+
const pricing = buyer.maxPricing.defaults;
|
|
122
|
+
const prefs = buyer.routingPreferences;
|
|
123
|
+
const crypto = config.payments.crypto;
|
|
124
|
+
const reveal = options.revealSecrets === true;
|
|
125
|
+
const verifier = {
|
|
126
|
+
enabled: buyer.verifier?.enabled ?? true,
|
|
127
|
+
prefer: [...(buyer.verifier?.prefer ?? [])],
|
|
128
|
+
require: buyer.verifier?.require ?? false,
|
|
129
|
+
};
|
|
130
|
+
return {
|
|
131
|
+
proxyPort: options.proxyPort,
|
|
132
|
+
maxPricing: {
|
|
133
|
+
inputUsdPerMillion: pricing.inputUsdPerMillion,
|
|
134
|
+
outputUsdPerMillion: pricing.outputUsdPerMillion,
|
|
135
|
+
cachedInputUsdPerMillion: pricing.cachedInputUsdPerMillion ?? null,
|
|
136
|
+
},
|
|
137
|
+
minPeerReputation: buyer.minPeerReputation,
|
|
138
|
+
routingPreferences: {
|
|
139
|
+
minTrustScore: prefs.minTrustScore,
|
|
140
|
+
maxInputUsdPerMillion: prefs.maxInputUsdPerMillion,
|
|
141
|
+
allowedPeerIds: [...prefs.allowedPeerIds],
|
|
142
|
+
blockedPeerIds: [...prefs.blockedPeerIds],
|
|
143
|
+
preferFreePeers: prefs.preferFreePeers,
|
|
144
|
+
},
|
|
145
|
+
verifier,
|
|
146
|
+
requireVerifier: verifier.enabled && verifier.require,
|
|
147
|
+
payments: {
|
|
148
|
+
autoSweep: buyer.autoSweep !== false,
|
|
149
|
+
maxPerRequestUsdc: usdcFromBaseUnits(config.payments.maxPerRequestUsdc, DEFAULT_MAX_PER_REQUEST_USDC),
|
|
150
|
+
maxReserveUsdc: usdcFromBaseUnits(config.payments.maxReserveAmountUsdc, DEFAULT_MAX_RESERVE_USDC),
|
|
151
|
+
rpcUrl: crypto?.rpcUrl ? maskRpcUrl(crypto.rpcUrl, reveal) : null,
|
|
152
|
+
fallbackRpcUrls: (crypto?.fallbackRpcUrls ?? []).map((url) => maskRpcUrl(url, reveal)),
|
|
153
|
+
},
|
|
154
|
+
network: {
|
|
155
|
+
peerRefreshIntervalMs: buyer.peerRefreshIntervalMs,
|
|
156
|
+
metadataFetchTimeoutMs: buyer.metadataFetchTimeoutMs,
|
|
157
|
+
requestTimeoutMs: buyer.requestTimeoutMs,
|
|
158
|
+
maxStreamDurationMs: buyer.maxStreamDurationMs,
|
|
159
|
+
disableMetadataV2Services: buyer.disableMetadataV2Services,
|
|
160
|
+
},
|
|
161
|
+
evidence: {
|
|
162
|
+
sampleRate: buyer.verification?.sampleRate ?? null,
|
|
163
|
+
maxSampleBytes: buyer.verification?.maxSampleBytes ?? null,
|
|
164
|
+
},
|
|
165
|
+
overrides: [...(options.overrides ?? [])],
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/** Settings the running buyer took from its environment or flags; empty when it cannot say. */
|
|
169
|
+
async function buyerOverrides(buyer) {
|
|
170
|
+
if (!buyer)
|
|
171
|
+
return [];
|
|
172
|
+
const body = await optionalBuyerJson(buyer, '/_antseed/setting-overrides');
|
|
173
|
+
const overrides = body?.['overrides'];
|
|
174
|
+
return Array.isArray(overrides) ? overrides.filter((entry) => typeof entry === 'string') : [];
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Current settings. OTLP header values and RPC URLs can be credentials:
|
|
178
|
+
* they are masked unless `revealSecrets` (an org-admin session; never a
|
|
179
|
+
* management token). With `buyer`, the running buyer's env/flag overrides
|
|
180
|
+
* are included.
|
|
181
|
+
*/
|
|
182
|
+
export async function readSettings(deps, options = {}) {
|
|
183
|
+
const config = await loadConfig(deps.configPath);
|
|
184
|
+
const observability = observabilitySettings(deps.store);
|
|
185
|
+
return {
|
|
186
|
+
publicUrl: deps.publicUrl,
|
|
187
|
+
buyer: buyerSettingsFromConfig(config, {
|
|
188
|
+
// The port the gateway actually forwards to, which flags or env can set apart from the config.
|
|
189
|
+
proxyPort: deps.buyerPort,
|
|
190
|
+
overrides: await buyerOverrides(options.buyer),
|
|
191
|
+
revealSecrets: options.revealSecrets === true,
|
|
192
|
+
}),
|
|
193
|
+
observability: options.revealSecrets
|
|
194
|
+
? observability
|
|
195
|
+
: { ...observability, otlpHeaders: Object.fromEntries(Object.keys(observability.otlpHeaders).map((name) => [name, REDACTED])) },
|
|
196
|
+
auth: await authConfig(deps),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
function originOf(url) {
|
|
200
|
+
if (!url)
|
|
201
|
+
return null;
|
|
202
|
+
try {
|
|
203
|
+
return new URL(url).origin;
|
|
204
|
+
}
|
|
205
|
+
catch {
|
|
206
|
+
return null;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* `current` supplies the value of a header sent back masked (a round trip
|
|
211
|
+
* from a redacted read), but only while the endpoint keeps its origin: the
|
|
212
|
+
* saved values are credentials for that collector, so pointing the export
|
|
213
|
+
* elsewhere needs them typed again.
|
|
214
|
+
*/
|
|
215
|
+
function parseObservability(body, current) {
|
|
216
|
+
const input = asObject(body);
|
|
217
|
+
const endpointRaw = input['otlpEndpoint'];
|
|
218
|
+
let otlpEndpoint = null;
|
|
219
|
+
if (endpointRaw !== undefined && endpointRaw !== null && endpointRaw !== '') {
|
|
220
|
+
if (typeof endpointRaw !== 'string')
|
|
221
|
+
throw badRequest('otlpEndpoint must be a URL');
|
|
222
|
+
let url;
|
|
223
|
+
try {
|
|
224
|
+
url = new URL(endpointRaw);
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
throw badRequest('otlpEndpoint must be a URL');
|
|
228
|
+
}
|
|
229
|
+
if (url.protocol !== 'https:' && url.protocol !== 'http:')
|
|
230
|
+
throw badRequest('otlpEndpoint must be http(s)');
|
|
231
|
+
otlpEndpoint = url.toString();
|
|
232
|
+
}
|
|
233
|
+
// Turning the export off keeps them (nothing is sent anywhere).
|
|
234
|
+
const sameOrigin = otlpEndpoint === null || originOf(otlpEndpoint) === originOf(current.otlpEndpoint);
|
|
235
|
+
const headersRaw = input['otlpHeaders'] ?? {};
|
|
236
|
+
if (!headersRaw || typeof headersRaw !== 'object' || Array.isArray(headersRaw))
|
|
237
|
+
throw badRequest('otlpHeaders must be an object of strings');
|
|
238
|
+
const otlpHeaders = {};
|
|
239
|
+
for (const [name, value] of Object.entries(headersRaw)) {
|
|
240
|
+
if (!/^[A-Za-z0-9-]{1,100}$/.test(name) || typeof value !== 'string' || /[\r\n]/.test(value))
|
|
241
|
+
throw badRequest(`Invalid header "${name}"`);
|
|
242
|
+
if (value === REDACTED) {
|
|
243
|
+
if (!sameOrigin) {
|
|
244
|
+
throw new ConsoleError(400, 'otlp_headers_required', `The export endpoint changed: enter the value of header "${name}" again (saved header values are not sent to a new endpoint)`);
|
|
245
|
+
}
|
|
246
|
+
const kept = current.otlpHeaders[name];
|
|
247
|
+
if (kept === undefined)
|
|
248
|
+
throw badRequest(`Header "${name}" needs a value`);
|
|
249
|
+
otlpHeaders[name] = kept;
|
|
250
|
+
continue;
|
|
251
|
+
}
|
|
252
|
+
otlpHeaders[name] = value;
|
|
253
|
+
}
|
|
254
|
+
if (Object.keys(otlpHeaders).length > MAX_OTLP_HEADERS)
|
|
255
|
+
throw badRequest('Too many otlpHeaders');
|
|
256
|
+
const logContent = input['logContent'] ?? false;
|
|
257
|
+
if (typeof logContent !== 'boolean')
|
|
258
|
+
throw badRequest('logContent must be true or false');
|
|
259
|
+
const retention = input['retentionDays'] ?? null;
|
|
260
|
+
if (retention !== null && (typeof retention !== 'number' || !Number.isSafeInteger(retention) || retention < 1)) {
|
|
261
|
+
throw badRequest('retentionDays must be a whole number of days or null');
|
|
262
|
+
}
|
|
263
|
+
return { otlpEndpoint, otlpHeaders, logContent, retentionDays: retention };
|
|
264
|
+
}
|
|
265
|
+
function numberIn(value, field, opts = {}) {
|
|
266
|
+
const ok = typeof value === 'number' && Number.isFinite(value)
|
|
267
|
+
&& (opts.min === undefined || value >= opts.min)
|
|
268
|
+
&& (opts.max === undefined || value <= opts.max)
|
|
269
|
+
&& (!opts.integer || Number.isInteger(value));
|
|
270
|
+
if (!ok) {
|
|
271
|
+
const range = opts.max !== undefined ? ` from ${opts.min ?? 0} to ${opts.max}` : ` of at least ${opts.min ?? 0}`;
|
|
272
|
+
throw badRequest(`${field} must be ${opts.integer ? 'a whole number' : 'a number'}${range}`);
|
|
273
|
+
}
|
|
274
|
+
return value;
|
|
275
|
+
}
|
|
276
|
+
function booleanField(value, field) {
|
|
277
|
+
if (typeof value !== 'boolean')
|
|
278
|
+
throw badRequest(`${field} must be true or false`);
|
|
279
|
+
return value;
|
|
280
|
+
}
|
|
281
|
+
function peerIdList(value, field) {
|
|
282
|
+
if (!Array.isArray(value) || value.some((entry) => typeof entry !== 'string' || !/^(?:0x)?[0-9a-f]{40}$/i.test(entry.trim()))) {
|
|
283
|
+
throw badRequest(`${field} must be a list of 40-character hex peer ids`);
|
|
284
|
+
}
|
|
285
|
+
return [...new Set(value.map((entry) => entry.trim().toLowerCase().replace(/^0x/, '')))];
|
|
286
|
+
}
|
|
287
|
+
function rpcUrlField(value, field) {
|
|
288
|
+
if (typeof value !== 'string')
|
|
289
|
+
throw badRequest(`${field} must be an http(s) URL`);
|
|
290
|
+
let url;
|
|
291
|
+
try {
|
|
292
|
+
url = new URL(value.trim());
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
throw badRequest(`${field} must be an http(s) URL`);
|
|
296
|
+
}
|
|
297
|
+
if (url.protocol !== 'https:' && url.protocol !== 'http:')
|
|
298
|
+
throw badRequest(`${field} must be an http(s) URL`);
|
|
299
|
+
return value.trim();
|
|
300
|
+
}
|
|
301
|
+
/** A section of the patch body, or undefined when absent. */
|
|
302
|
+
function section(input, key) {
|
|
303
|
+
return input[key] === undefined ? undefined : asObject(input[key]);
|
|
304
|
+
}
|
|
305
|
+
/** Checks a buyer-settings patch's types and ranges before anything is written. */
|
|
306
|
+
function parseBuyerSettingsPatch(body) {
|
|
307
|
+
const input = asObject(body);
|
|
308
|
+
const patch = {};
|
|
309
|
+
const pricing = section(input, 'maxPricing');
|
|
310
|
+
if (pricing) {
|
|
311
|
+
const out = {};
|
|
312
|
+
for (const field of ['inputUsdPerMillion', 'outputUsdPerMillion']) {
|
|
313
|
+
if (pricing[field] !== undefined)
|
|
314
|
+
out[field] = numberIn(pricing[field], `maxPricing.${field}`, { min: 0 });
|
|
315
|
+
}
|
|
316
|
+
const cached = pricing['cachedInputUsdPerMillion'];
|
|
317
|
+
if (cached !== undefined)
|
|
318
|
+
out.cachedInputUsdPerMillion = cached === null ? null : numberIn(cached, 'maxPricing.cachedInputUsdPerMillion', { min: 0 });
|
|
319
|
+
if (Object.keys(out).length > 0)
|
|
320
|
+
patch.maxPricing = out;
|
|
321
|
+
}
|
|
322
|
+
if (input['minPeerReputation'] !== undefined)
|
|
323
|
+
patch.minPeerReputation = numberIn(input['minPeerReputation'], 'minPeerReputation', { min: 0, max: 100 });
|
|
324
|
+
const prefs = section(input, 'routingPreferences');
|
|
325
|
+
if (prefs) {
|
|
326
|
+
const out = {};
|
|
327
|
+
if (prefs['minTrustScore'] !== undefined)
|
|
328
|
+
out.minTrustScore = numberIn(prefs['minTrustScore'], 'routingPreferences.minTrustScore', { min: 0, max: 100 });
|
|
329
|
+
if (prefs['maxInputUsdPerMillion'] !== undefined)
|
|
330
|
+
out.maxInputUsdPerMillion = numberIn(prefs['maxInputUsdPerMillion'], 'routingPreferences.maxInputUsdPerMillion', { min: 0 });
|
|
331
|
+
if (prefs['allowedPeerIds'] !== undefined)
|
|
332
|
+
out.allowedPeerIds = peerIdList(prefs['allowedPeerIds'], 'routingPreferences.allowedPeerIds');
|
|
333
|
+
if (prefs['blockedPeerIds'] !== undefined)
|
|
334
|
+
out.blockedPeerIds = peerIdList(prefs['blockedPeerIds'], 'routingPreferences.blockedPeerIds');
|
|
335
|
+
if (prefs['preferFreePeers'] !== undefined)
|
|
336
|
+
out.preferFreePeers = booleanField(prefs['preferFreePeers'], 'routingPreferences.preferFreePeers');
|
|
337
|
+
if (Object.keys(out).length > 0)
|
|
338
|
+
patch.routingPreferences = out;
|
|
339
|
+
}
|
|
340
|
+
const verifier = section(input, 'verifier');
|
|
341
|
+
if (verifier) {
|
|
342
|
+
const out = {};
|
|
343
|
+
if (verifier['enabled'] !== undefined)
|
|
344
|
+
out.enabled = booleanField(verifier['enabled'], 'verifier.enabled');
|
|
345
|
+
if (verifier['require'] !== undefined)
|
|
346
|
+
out.require = booleanField(verifier['require'], 'verifier.require');
|
|
347
|
+
if (verifier['prefer'] !== undefined) {
|
|
348
|
+
const prefer = verifier['prefer'];
|
|
349
|
+
if (!Array.isArray(prefer) || prefer.some((id) => typeof id !== 'string' || !/^[a-z0-9][a-z0-9._-]{0,99}$/i.test(id.trim()))) {
|
|
350
|
+
throw badRequest('verifier.prefer must be a list of verifier ids');
|
|
351
|
+
}
|
|
352
|
+
out.prefer = [...new Set(prefer.map((id) => id.trim()))];
|
|
353
|
+
}
|
|
354
|
+
if (Object.keys(out).length > 0)
|
|
355
|
+
patch.verifier = out;
|
|
356
|
+
}
|
|
357
|
+
const payments = section(input, 'payments');
|
|
358
|
+
if (payments) {
|
|
359
|
+
const out = {};
|
|
360
|
+
if (payments['autoSweep'] !== undefined)
|
|
361
|
+
out.autoSweep = booleanField(payments['autoSweep'], 'payments.autoSweep');
|
|
362
|
+
if (payments['maxPerRequestUsdc'] !== undefined)
|
|
363
|
+
out.maxPerRequestUsdc = numberIn(payments['maxPerRequestUsdc'], 'payments.maxPerRequestUsdc', { min: 0.000001, max: 1_000_000 });
|
|
364
|
+
if (payments['maxReserveUsdc'] !== undefined)
|
|
365
|
+
out.maxReserveUsdc = numberIn(payments['maxReserveUsdc'], 'payments.maxReserveUsdc', { min: 0.000001, max: 1_000_000 });
|
|
366
|
+
if (payments['rpcUrl'] !== undefined)
|
|
367
|
+
out.rpcUrl = payments['rpcUrl'] === null || payments['rpcUrl'] === '' ? null : rpcUrlField(payments['rpcUrl'], 'payments.rpcUrl');
|
|
368
|
+
if (payments['fallbackRpcUrls'] !== undefined) {
|
|
369
|
+
if (!Array.isArray(payments['fallbackRpcUrls']))
|
|
370
|
+
throw badRequest('payments.fallbackRpcUrls must be a list of URLs');
|
|
371
|
+
out.fallbackRpcUrls = payments['fallbackRpcUrls'].map((url, index) => rpcUrlField(url, `payments.fallbackRpcUrls[${index}]`));
|
|
372
|
+
}
|
|
373
|
+
if (Object.keys(out).length > 0)
|
|
374
|
+
patch.payments = out;
|
|
375
|
+
}
|
|
376
|
+
const network = section(input, 'network');
|
|
377
|
+
if (network) {
|
|
378
|
+
const out = {};
|
|
379
|
+
if (network['peerRefreshIntervalMs'] !== undefined)
|
|
380
|
+
out.peerRefreshIntervalMs = numberIn(network['peerRefreshIntervalMs'], 'network.peerRefreshIntervalMs', { min: 1_000, integer: true });
|
|
381
|
+
if (network['metadataFetchTimeoutMs'] !== undefined)
|
|
382
|
+
out.metadataFetchTimeoutMs = numberIn(network['metadataFetchTimeoutMs'], 'network.metadataFetchTimeoutMs', { min: 100, integer: true });
|
|
383
|
+
if (network['requestTimeoutMs'] !== undefined)
|
|
384
|
+
out.requestTimeoutMs = numberIn(network['requestTimeoutMs'], 'network.requestTimeoutMs', { min: 1, integer: true });
|
|
385
|
+
if (network['maxStreamDurationMs'] !== undefined)
|
|
386
|
+
out.maxStreamDurationMs = numberIn(network['maxStreamDurationMs'], 'network.maxStreamDurationMs', { min: 1, integer: true });
|
|
387
|
+
if (network['disableMetadataV2Services'] !== undefined)
|
|
388
|
+
out.disableMetadataV2Services = booleanField(network['disableMetadataV2Services'], 'network.disableMetadataV2Services');
|
|
389
|
+
if (Object.keys(out).length > 0)
|
|
390
|
+
patch.network = out;
|
|
391
|
+
}
|
|
392
|
+
const evidence = section(input, 'evidence');
|
|
393
|
+
if (evidence) {
|
|
394
|
+
const out = {};
|
|
395
|
+
if (evidence['sampleRate'] !== undefined)
|
|
396
|
+
out.sampleRate = evidence['sampleRate'] === null ? null : numberIn(evidence['sampleRate'], 'evidence.sampleRate', { min: 0, max: 1 });
|
|
397
|
+
if (evidence['maxSampleBytes'] !== undefined)
|
|
398
|
+
out.maxSampleBytes = evidence['maxSampleBytes'] === null ? null : numberIn(evidence['maxSampleBytes'], 'evidence.maxSampleBytes', { min: 1, integer: true });
|
|
399
|
+
if (Object.keys(out).length > 0)
|
|
400
|
+
patch.evidence = out;
|
|
401
|
+
}
|
|
402
|
+
return patch;
|
|
403
|
+
}
|
|
404
|
+
function setOrDelete(target, key, value) {
|
|
405
|
+
if (value === null || value === undefined)
|
|
406
|
+
delete target[key];
|
|
407
|
+
else
|
|
408
|
+
target[key] = value;
|
|
409
|
+
}
|
|
410
|
+
function toBaseUnits(usdc) {
|
|
411
|
+
return String(Math.round(usdc * USDC_UNITS));
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Writes a patch into the raw config object, touching only the fields it
|
|
415
|
+
* names. A masked RPC URL sent back unchanged keeps the saved one.
|
|
416
|
+
*/
|
|
417
|
+
function applyBuyerPatch(config, patch, current) {
|
|
418
|
+
const buyer = childObject(config, 'buyer');
|
|
419
|
+
if (patch.maxPricing) {
|
|
420
|
+
const defaults = childObject(childObject(buyer, 'maxPricing'), 'defaults');
|
|
421
|
+
for (const [field, value] of Object.entries(patch.maxPricing))
|
|
422
|
+
setOrDelete(defaults, field, value);
|
|
423
|
+
}
|
|
424
|
+
if (patch.minPeerReputation !== undefined)
|
|
425
|
+
buyer['minPeerReputation'] = patch.minPeerReputation;
|
|
426
|
+
if (patch.routingPreferences)
|
|
427
|
+
Object.assign(childObject(buyer, 'routingPreferences'), patch.routingPreferences);
|
|
428
|
+
if (patch.verifier)
|
|
429
|
+
Object.assign(childObject(buyer, 'verifier'), patch.verifier);
|
|
430
|
+
if (patch.network)
|
|
431
|
+
Object.assign(buyer, patch.network);
|
|
432
|
+
if (patch.evidence) {
|
|
433
|
+
const verification = childObject(buyer, 'verification');
|
|
434
|
+
for (const [field, value] of Object.entries(patch.evidence))
|
|
435
|
+
setOrDelete(verification, field, value);
|
|
436
|
+
if (Object.keys(verification).length === 0)
|
|
437
|
+
delete buyer['verification'];
|
|
438
|
+
}
|
|
439
|
+
const payments = patch.payments;
|
|
440
|
+
if (payments) {
|
|
441
|
+
if (payments.autoSweep !== undefined)
|
|
442
|
+
buyer['autoSweep'] = payments.autoSweep;
|
|
443
|
+
const paymentsConfig = childObject(config, 'payments');
|
|
444
|
+
if (payments.maxPerRequestUsdc !== undefined)
|
|
445
|
+
paymentsConfig['maxPerRequestUsdc'] = toBaseUnits(payments.maxPerRequestUsdc);
|
|
446
|
+
if (payments.maxReserveUsdc !== undefined)
|
|
447
|
+
paymentsConfig['maxReserveAmountUsdc'] = toBaseUnits(payments.maxReserveUsdc);
|
|
448
|
+
if (payments.rpcUrl !== undefined || payments.fallbackRpcUrls !== undefined) {
|
|
449
|
+
const crypto = childObject(paymentsConfig, 'crypto');
|
|
450
|
+
// The file's `payments.crypto` replaces the default one wholesale: keep the chain.
|
|
451
|
+
if (crypto['chainId'] === undefined && current.payments.crypto?.chainId)
|
|
452
|
+
crypto['chainId'] = current.payments.crypto.chainId;
|
|
453
|
+
const savedRpc = current.payments.crypto?.rpcUrl;
|
|
454
|
+
if (payments.rpcUrl !== undefined) {
|
|
455
|
+
setOrDelete(crypto, 'rpcUrl', payments.rpcUrl !== null && savedRpc && payments.rpcUrl === redact(savedRpc) ? savedRpc : payments.rpcUrl);
|
|
456
|
+
}
|
|
457
|
+
if (payments.fallbackRpcUrls !== undefined) {
|
|
458
|
+
const saved = current.payments.crypto?.fallbackRpcUrls ?? [];
|
|
459
|
+
const urls = payments.fallbackRpcUrls.map((url) => saved.find((existing) => redact(existing) === url) ?? url);
|
|
460
|
+
setOrDelete(crypto, 'fallbackRpcUrls', urls.length > 0 ? urls : null);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
/** Whether anything outside the routing preferences (which the buyer reloads by itself) changed. */
|
|
466
|
+
function needsRestart(before, after) {
|
|
467
|
+
const comparable = (config) => JSON.stringify({
|
|
468
|
+
buyer: { ...config.buyer, routingPreferences: null },
|
|
469
|
+
payments: config.payments,
|
|
470
|
+
});
|
|
471
|
+
return comparable(before) !== comparable(after);
|
|
472
|
+
}
|
|
473
|
+
/** The patch for the audit log, with RPC URLs reduced to their origin. */
|
|
474
|
+
function auditPatch(patch) {
|
|
475
|
+
if (!patch.payments || (patch.payments.rpcUrl === undefined && patch.payments.fallbackRpcUrls === undefined))
|
|
476
|
+
return patch;
|
|
477
|
+
return {
|
|
478
|
+
...patch,
|
|
479
|
+
payments: {
|
|
480
|
+
...patch.payments,
|
|
481
|
+
...(patch.payments.rpcUrl !== undefined ? { rpcUrl: patch.payments.rpcUrl === null ? null : redact(patch.payments.rpcUrl) } : {}),
|
|
482
|
+
...(patch.payments.fallbackRpcUrls !== undefined ? { fallbackRpcUrls: patch.payments.fallbackRpcUrls.map(redact) } : {}),
|
|
483
|
+
},
|
|
484
|
+
};
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Applies a buyer-settings patch to the config file (in place, atomically,
|
|
488
|
+
* keeping everything else as written). The result is validated exactly as
|
|
489
|
+
* the buyer will load it before anything is written. Routing preferences
|
|
490
|
+
* apply at once (the buyer reloads the file); any other change asks the
|
|
491
|
+
* buyer to restart. `restartRequired` when a restart was needed but the
|
|
492
|
+
* buyer could not restart itself (not supervised, or not reachable): the
|
|
493
|
+
* operator has to. `changed` is false when nothing changed.
|
|
494
|
+
*/
|
|
495
|
+
export async function updateBuyerSettings(ctx, actor, body, buyer) {
|
|
496
|
+
const patch = parseBuyerSettingsPatch(body);
|
|
497
|
+
if (Object.keys(patch).length === 0)
|
|
498
|
+
return { changed: false, restartRequired: false };
|
|
499
|
+
let restart = false;
|
|
500
|
+
let changed = false;
|
|
501
|
+
await patchConfigFile(ctx.configPath, (config) => {
|
|
502
|
+
let before;
|
|
503
|
+
try {
|
|
504
|
+
before = configFromObject(structuredClone(config));
|
|
505
|
+
}
|
|
506
|
+
catch (error) {
|
|
507
|
+
throw new ConsoleError(409, 'config_invalid', `The config file is not valid (${errorMessage(error)}); fix it before changing settings here`);
|
|
508
|
+
}
|
|
509
|
+
applyBuyerPatch(config, patch, before);
|
|
510
|
+
let after;
|
|
511
|
+
try {
|
|
512
|
+
after = configFromObject(structuredClone(config));
|
|
513
|
+
}
|
|
514
|
+
catch (error) {
|
|
515
|
+
throw badRequest(errorMessage(error).replace(/^Invalid config:\s*(- )?/i, '').replace(/\n- /g, '; '));
|
|
516
|
+
}
|
|
517
|
+
changed = JSON.stringify(before) !== JSON.stringify(after);
|
|
518
|
+
restart = needsRestart(before, after);
|
|
519
|
+
});
|
|
520
|
+
if (!changed)
|
|
521
|
+
return { changed: false, restartRequired: false };
|
|
522
|
+
recordAudit(ctx, actor, 'settings.buyer.update', { kind: 'settings', id: 'buyer', label: 'Buyer settings' }, { ...auditPatch(patch) });
|
|
523
|
+
if (!restart) {
|
|
524
|
+
ctx.log('console: buyer routing preferences changed; the buyer reloads them from the config file');
|
|
525
|
+
return { changed: true, restartRequired: false };
|
|
526
|
+
}
|
|
527
|
+
ctx.log('console: buyer settings changed; restarting the buyer');
|
|
528
|
+
let restartRequired = false;
|
|
529
|
+
try {
|
|
530
|
+
const response = await buyer('/_antseed/restart', { method: 'POST' });
|
|
531
|
+
if (!response.ok) {
|
|
532
|
+
const answer = await response.json().catch(() => null);
|
|
533
|
+
// A buyer that is not supervised cannot restart itself: the operator has to.
|
|
534
|
+
restartRequired = true;
|
|
535
|
+
ctx.log(answer?.error === 'restart_unsupported'
|
|
536
|
+
? 'console: the buyer cannot restart itself (not supervised); restart it to apply the new settings'
|
|
537
|
+
: `console: buyer restart request answered HTTP ${response.status}`);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
catch (error) {
|
|
541
|
+
restartRequired = true;
|
|
542
|
+
ctx.log(`console: buyer restart request failed: ${errorMessage(error)}`);
|
|
543
|
+
}
|
|
544
|
+
return { changed: true, restartRequired };
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* Saves the observability settings (OTLP export, content logging,
|
|
548
|
+
* retention). Where request data goes (the endpoint) and whether prompts
|
|
549
|
+
* are kept is for a signed-in org admin or the operator
|
|
550
|
+
* (`mayChangeDestination`), not a management token: a refused attempt is
|
|
551
|
+
* audited and answered 403 `session_required`.
|
|
552
|
+
*/
|
|
553
|
+
export function setObservabilitySettings(ctx, actor, body, options) {
|
|
554
|
+
const current = observabilitySettings(ctx.store);
|
|
555
|
+
const settings = parseObservability(body, current);
|
|
556
|
+
const endpointChanged = settings.otlpEndpoint !== current.otlpEndpoint;
|
|
557
|
+
const logContentChanged = settings.logContent !== current.logContent;
|
|
558
|
+
if ((endpointChanged || logContentChanged) && !options.mayChangeDestination) {
|
|
559
|
+
recordAudit(ctx, actor, 'settings.observability.denied', { kind: 'settings', id: 'observability', label: 'Observability' }, {
|
|
560
|
+
code: 'session_required', endpointChanged, logContentChanged,
|
|
561
|
+
});
|
|
562
|
+
throw new ConsoleError(403, 'session_required', 'Only an org admin signed in to the console can change the export endpoint or content logging; management tokens cannot');
|
|
563
|
+
}
|
|
564
|
+
ctx.store.setSetting(OBSERVABILITY_SETTING, settings);
|
|
565
|
+
// Turning content logging off also forgets what it kept.
|
|
566
|
+
const clearedBodies = current.logContent && !settings.logContent ? ctx.store.clearRequestContent() : 0;
|
|
567
|
+
recordAudit(ctx, actor, 'settings.observability.update', { kind: 'settings', id: 'observability', label: 'Observability' }, {
|
|
568
|
+
...(endpointChanged ? { previousOtlpEndpoint: current.otlpEndpoint } : {}),
|
|
569
|
+
...(logContentChanged ? { previousLogContent: current.logContent } : {}),
|
|
570
|
+
...(clearedBodies ? { clearedBodies } : {}),
|
|
571
|
+
otlpEndpoint: settings.otlpEndpoint,
|
|
572
|
+
// Header names only: values may be credentials.
|
|
573
|
+
otlpHeaders: Object.keys(settings.otlpHeaders),
|
|
574
|
+
logContent: settings.logContent,
|
|
575
|
+
retentionDays: settings.retentionDays,
|
|
576
|
+
});
|
|
577
|
+
ctx.log(`console: observability settings changed (export ${settings.otlpEndpoint ? 'on' : 'off'}, content logging ${settings.logContent ? 'on' : 'off'})`);
|
|
578
|
+
return settings;
|
|
579
|
+
}
|
|
580
|
+
//# sourceMappingURL=settings.js.map
|