@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,170 @@
|
|
|
1
|
+
import { DepositsClient, makeDepositsDomain, signSetOperator } from '@antseed/node';
|
|
2
|
+
import { getAddress, Interface } from 'ethers';
|
|
3
|
+
import { ConsoleError } from '../console-api/router.js';
|
|
4
|
+
import { ChainReadCache } from '../../proxy/chain-read-cache.js';
|
|
5
|
+
import { sharedChainProvider } from '../../proxy/chain-rpc.js';
|
|
6
|
+
import { errorMessage } from '../errors.js';
|
|
7
|
+
const ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/;
|
|
8
|
+
const ZERO_RE = /^0x0{40}$/;
|
|
9
|
+
/** A checksummed address, or null for anything else (including the zero address). */
|
|
10
|
+
export function normalizeOperator(value) {
|
|
11
|
+
if (typeof value !== 'string' || !ADDRESS_RE.test(value) || ZERO_RE.test(value))
|
|
12
|
+
return null;
|
|
13
|
+
return getAddress(value.toLowerCase());
|
|
14
|
+
}
|
|
15
|
+
export function isOperatorAddress(value) {
|
|
16
|
+
return normalizeOperator(value) !== null;
|
|
17
|
+
}
|
|
18
|
+
export function sameAddress(a, b) {
|
|
19
|
+
return !!a && !!b && a.toLowerCase() === b.toLowerCase();
|
|
20
|
+
}
|
|
21
|
+
function depositsClient(chain) {
|
|
22
|
+
if (!chain.depositsContractAddress || !chain.usdcContractAddress) {
|
|
23
|
+
throw new ConsoleError(503, 'chain_unavailable', 'The deposits contract is not configured for this chain.');
|
|
24
|
+
}
|
|
25
|
+
const target = {
|
|
26
|
+
rpcUrl: chain.rpcUrl,
|
|
27
|
+
...(chain.fallbackRpcUrls ? { fallbackRpcUrls: chain.fallbackRpcUrls } : {}),
|
|
28
|
+
evmChainId: chain.evmChainId,
|
|
29
|
+
};
|
|
30
|
+
// Through the process's one rate-aware provider, not a new one per read.
|
|
31
|
+
return new DepositsClient({ ...target, contractAddress: chain.depositsContractAddress, usdcAddress: chain.usdcContractAddress })
|
|
32
|
+
.withProvider(sharedChainProvider(target));
|
|
33
|
+
}
|
|
34
|
+
/** Reads straight from AntseedDeposits on the configured chain. */
|
|
35
|
+
export function depositsOperatorReader(chain) {
|
|
36
|
+
const client = depositsClient(chain);
|
|
37
|
+
return {
|
|
38
|
+
operator: async (buyer) => normalizeOperator(await client.getOperator(buyer)),
|
|
39
|
+
nonce: (buyer) => client.getOperatorNonce(buyer),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Operator reads per buyer address, shared by every console request: one RPC
|
|
44
|
+
* call per buyer per `ttlMs`, concurrent readers share it. A fresh read
|
|
45
|
+
* (after a transaction) is allowed once per `freshIntervalMs`; within that
|
|
46
|
+
* the last read stands. Entries live in a `ChainReadCache` (pass the
|
|
47
|
+
* gateway's shared one), under `operator:<address>`. A failed read is an
|
|
48
|
+
* error, never a stale operator: the authorized wallet is a security fact.
|
|
49
|
+
*/
|
|
50
|
+
export class OperatorCache {
|
|
51
|
+
ttlMs;
|
|
52
|
+
freshIntervalMs;
|
|
53
|
+
cache;
|
|
54
|
+
settled = new Map();
|
|
55
|
+
constructor(now, ttlMs = 60_000, freshIntervalMs = 3_000, cache) {
|
|
56
|
+
this.ttlMs = ttlMs;
|
|
57
|
+
this.freshIntervalMs = freshIntervalMs;
|
|
58
|
+
this.cache = cache ?? new ChainReadCache({ now });
|
|
59
|
+
}
|
|
60
|
+
static key(buyer) {
|
|
61
|
+
return `operator:${buyer.toLowerCase()}`;
|
|
62
|
+
}
|
|
63
|
+
/** The last value read for `buyer`, or undefined when none has been read. */
|
|
64
|
+
known(buyer) {
|
|
65
|
+
return this.settled.get(buyer.toLowerCase());
|
|
66
|
+
}
|
|
67
|
+
async read(buyer, load, fresh = false) {
|
|
68
|
+
const key = OperatorCache.key(buyer);
|
|
69
|
+
const age = this.cache.age(key);
|
|
70
|
+
const force = fresh && (age === null || age >= this.freshIntervalMs);
|
|
71
|
+
const read = await this.cache.read(key, { ttlMs: this.ttlMs, force, serveStaleOnError: false, errorRetryMs: 0 }, load);
|
|
72
|
+
this.settled.set(buyer.toLowerCase(), { operator: read.value });
|
|
73
|
+
return { operator: read.value, checkedAt: read.fetchedAt };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The member who signs in with `address` (a SIWE wallet credential), or
|
|
78
|
+
* null. Reads auth's credentials table; a gateway without it has no owners.
|
|
79
|
+
*/
|
|
80
|
+
export function walletOwnerFromDb(db, getMember, address) {
|
|
81
|
+
let memberId;
|
|
82
|
+
try {
|
|
83
|
+
const row = db.prepare("SELECT member_id FROM auth_credentials WHERE kind = 'wallet' AND wallet_address = ?").get(address.toLowerCase());
|
|
84
|
+
memberId = row?.member_id;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
if (!memberId)
|
|
90
|
+
return null;
|
|
91
|
+
const member = getMember(memberId);
|
|
92
|
+
return member && member.status !== 'disabled' ? { memberId: member.id, label: member.label } : null;
|
|
93
|
+
}
|
|
94
|
+
/** How the operator relates to the caller; see `OperatorRelation`. */
|
|
95
|
+
export function operatorRelation(input) {
|
|
96
|
+
if (!input.operator)
|
|
97
|
+
return { relation: 'none', owner: null };
|
|
98
|
+
if (sameAddress(input.operator, input.buyer))
|
|
99
|
+
return { relation: 'self', owner: null };
|
|
100
|
+
const owner = input.ownerOf(input.operator);
|
|
101
|
+
if (!owner)
|
|
102
|
+
return { relation: 'unknown', owner: null };
|
|
103
|
+
if (input.viewerMemberId && owner.memberId === input.viewerMemberId)
|
|
104
|
+
return { relation: 'yours', owner };
|
|
105
|
+
return { relation: 'member', owner };
|
|
106
|
+
}
|
|
107
|
+
/** One sentence on what the relation means, for the CLI. */
|
|
108
|
+
export function describeRelation(relation, owner) {
|
|
109
|
+
switch (relation) {
|
|
110
|
+
case 'none': return 'No authorized wallet: nobody can withdraw or claim rewards until one is authorized.';
|
|
111
|
+
case 'self': return 'The workspace wallet is its own authorized wallet: withdrawals and rewards stay in the gateway-held wallet.';
|
|
112
|
+
case 'yours': return 'One of your own sign-in wallets.';
|
|
113
|
+
case 'member': return `The sign-in wallet of ${owner ? `member ${owner.label} (${owner.memberId})` : 'another member'}.`;
|
|
114
|
+
case 'unknown': return 'WARNING: no member of this gateway signs in with this wallet. Withdrawals and rewards go to it, and only it can change or clear the authorization.';
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Signs the buyer's SetOperator authorization for `operator`. Reads the
|
|
119
|
+
* current operator and the nonce straight from the chain right before
|
|
120
|
+
* signing: a signature for a buyer that already has an operator could never
|
|
121
|
+
* be used (OperatorAlreadySet), and a stale nonce would revert (InvalidNonce).
|
|
122
|
+
*/
|
|
123
|
+
export async function signOperatorAuthorization(input) {
|
|
124
|
+
const operator = normalizeOperator(input.operator);
|
|
125
|
+
if (!operator)
|
|
126
|
+
throw new ConsoleError(400, 'invalid_operator', 'operator must be a wallet address.');
|
|
127
|
+
if (typeof input.wallet.signTypedData !== 'function') {
|
|
128
|
+
throw new ConsoleError(409, 'wallet_unavailable', 'The workspace wallet cannot sign typed data on this gateway.');
|
|
129
|
+
}
|
|
130
|
+
if (!input.chain.depositsContractAddress)
|
|
131
|
+
throw new ConsoleError(503, 'chain_unavailable', 'The deposits contract is not configured for this chain.');
|
|
132
|
+
const buyer = input.wallet.address;
|
|
133
|
+
let current;
|
|
134
|
+
let nonce;
|
|
135
|
+
try {
|
|
136
|
+
current = await input.reader.operator(buyer);
|
|
137
|
+
// Read after the operator: setOperator bumps the nonce, so this is never older than `current`.
|
|
138
|
+
nonce = await input.reader.nonce(buyer);
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
if (err instanceof ConsoleError)
|
|
142
|
+
throw err;
|
|
143
|
+
throw new ConsoleError(502, 'chain_unavailable', `The operator nonce could not be read: ${errorMessage(err)}`);
|
|
144
|
+
}
|
|
145
|
+
if (current) {
|
|
146
|
+
throw new ConsoleError(409, 'operator_already_set', `This wallet already has an authorized wallet (${current}). Only that wallet can transfer or clear the authorization.`);
|
|
147
|
+
}
|
|
148
|
+
const domain = makeDepositsDomain(input.chain.evmChainId, input.chain.depositsContractAddress);
|
|
149
|
+
const signature = await signSetOperator(input.wallet, domain, { operator, nonce });
|
|
150
|
+
return {
|
|
151
|
+
buyer,
|
|
152
|
+
operator,
|
|
153
|
+
nonce: nonce.toString(),
|
|
154
|
+
nonceValue: nonce,
|
|
155
|
+
signature,
|
|
156
|
+
depositsContract: getAddress(input.chain.depositsContractAddress.toLowerCase()),
|
|
157
|
+
chainId: input.chain.evmChainId,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const DEPOSITS_OPERATOR_IFACE = new Interface([
|
|
161
|
+
'function setOperator(address buyer, address operator, uint256 nonce, bytes buyerSig)',
|
|
162
|
+
'function transferOperator(address buyer, address newOperator)',
|
|
163
|
+
]);
|
|
164
|
+
export function setOperatorCalldata(buyer, operator, nonce, signature) {
|
|
165
|
+
return DEPOSITS_OPERATOR_IFACE.encodeFunctionData('setOperator', [buyer, operator, nonce, signature]);
|
|
166
|
+
}
|
|
167
|
+
export function transferOperatorCalldata(buyer, newOperator) {
|
|
168
|
+
return DEPOSITS_OPERATOR_IFACE.encodeFunctionData('transferOperator', [buyer, newOperator]);
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=operator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operator.js","sourceRoot":"","sources":["../../../src/gateway/services/operator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operator.test.d.ts","sourceRoot":"","sources":["../../../src/gateway/services/operator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { spawn, spawnSync } from 'node:child_process';
|
|
3
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { test } from 'node:test';
|
|
6
|
+
import Database from 'better-sqlite3';
|
|
7
|
+
import { Contract, ContractFactory, HDNodeWallet, Interface, JsonRpcProvider, NonceManager, Wallet, ZeroAddress, verifyTypedData } from 'ethers';
|
|
8
|
+
import { makeDepositsDomain, SET_OPERATOR_TYPES } from '@antseed/node';
|
|
9
|
+
import { ConsoleError } from '../console-api/router.js';
|
|
10
|
+
import { depositsOperatorReader, normalizeOperator, OperatorCache, operatorRelation, setOperatorCalldata, signOperatorAuthorization, transferOperatorCalldata, walletOwnerFromDb, } from './operator.js';
|
|
11
|
+
// Obvious fakes only.
|
|
12
|
+
const BUYER = new Wallet(`0x${'31'.repeat(32)}`);
|
|
13
|
+
const OPERATOR_A = `0x${'0a'.repeat(20)}`;
|
|
14
|
+
const OPERATOR_B = `0x${'0b'.repeat(20)}`;
|
|
15
|
+
const CHAIN = {
|
|
16
|
+
chainId: 'base-mainnet',
|
|
17
|
+
evmChainId: 8453,
|
|
18
|
+
rpcUrl: 'https://rpc.example.test',
|
|
19
|
+
depositsContractAddress: `0x${'d1'.repeat(20)}`,
|
|
20
|
+
usdcContractAddress: `0x${'a1'.repeat(20)}`,
|
|
21
|
+
};
|
|
22
|
+
function fakeReader(state, log = []) {
|
|
23
|
+
return {
|
|
24
|
+
operator: async (buyer) => { log.push(`operator:${buyer}`); return normalizeOperator(state.operator); },
|
|
25
|
+
nonce: async (buyer) => { log.push(`nonce:${buyer}`); return state.nonce; },
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
test('normalizeOperator drops the zero address and junk, checksums the rest', () => {
|
|
29
|
+
assert.equal(normalizeOperator(ZeroAddress), null);
|
|
30
|
+
assert.equal(normalizeOperator('0x1234'), null);
|
|
31
|
+
assert.equal(normalizeOperator(undefined), null);
|
|
32
|
+
assert.equal(normalizeOperator(OPERATOR_A.toUpperCase().replace('0X', '0x'))?.toLowerCase(), OPERATOR_A);
|
|
33
|
+
});
|
|
34
|
+
test('operatorRelation covers none, self, yours, member, unknown', () => {
|
|
35
|
+
const ownerOf = (address) => (address.toLowerCase() === OPERATOR_A ? { memberId: 'm_owner', label: 'Owner' } : null);
|
|
36
|
+
const base = { buyer: BUYER.address, ownerOf };
|
|
37
|
+
assert.equal(operatorRelation({ ...base, operator: null, viewerMemberId: 'm_owner' }).relation, 'none');
|
|
38
|
+
assert.equal(operatorRelation({ ...base, operator: BUYER.address.toLowerCase(), viewerMemberId: 'm_owner' }).relation, 'self');
|
|
39
|
+
assert.equal(operatorRelation({ ...base, operator: OPERATOR_A, viewerMemberId: 'm_owner' }).relation, 'yours');
|
|
40
|
+
assert.equal(operatorRelation({ ...base, operator: OPERATOR_A, viewerMemberId: 'm_other' }).relation, 'member');
|
|
41
|
+
assert.equal(operatorRelation({ ...base, operator: OPERATOR_A, viewerMemberId: null }).relation, 'member');
|
|
42
|
+
assert.equal(operatorRelation({ ...base, operator: OPERATOR_B, viewerMemberId: 'm_owner' }).relation, 'unknown');
|
|
43
|
+
});
|
|
44
|
+
test('walletOwnerFromDb finds the member signing in with a wallet; disabled members and missing tables give null', () => {
|
|
45
|
+
const db = new Database(':memory:');
|
|
46
|
+
assert.equal(walletOwnerFromDb(db, () => null, OPERATOR_A), null);
|
|
47
|
+
db.exec("CREATE TABLE auth_credentials (id TEXT, member_id TEXT, kind TEXT, wallet_address TEXT)");
|
|
48
|
+
db.prepare('INSERT INTO auth_credentials VALUES (?, ?, ?, ?)').run('c1', 'm1', 'wallet', OPERATOR_A);
|
|
49
|
+
db.prepare('INSERT INTO auth_credentials VALUES (?, ?, ?, ?)').run('c2', 'm2', 'wallet', OPERATOR_B);
|
|
50
|
+
const members = {
|
|
51
|
+
m1: { id: 'm1', label: 'One', status: 'active' },
|
|
52
|
+
m2: { id: 'm2', label: 'Two', status: 'disabled' },
|
|
53
|
+
};
|
|
54
|
+
assert.deepEqual(walletOwnerFromDb(db, (id) => members[id] ?? null, OPERATOR_A.toUpperCase().replace('0X', '0x')), { memberId: 'm1', label: 'One' });
|
|
55
|
+
assert.equal(walletOwnerFromDb(db, (id) => members[id] ?? null, OPERATOR_B), null);
|
|
56
|
+
db.close();
|
|
57
|
+
});
|
|
58
|
+
test('OperatorCache shares concurrent reads, keeps the TTL, and forgets failures', async () => {
|
|
59
|
+
let now = 1_000;
|
|
60
|
+
let calls = 0;
|
|
61
|
+
let fail = false;
|
|
62
|
+
const cache = new OperatorCache(() => now, 60_000, 3_000);
|
|
63
|
+
const load = async () => {
|
|
64
|
+
calls += 1;
|
|
65
|
+
if (fail)
|
|
66
|
+
throw new Error('rpc down');
|
|
67
|
+
return OPERATOR_A;
|
|
68
|
+
};
|
|
69
|
+
const [a, b] = await Promise.all([cache.read(BUYER.address, load), cache.read(BUYER.address.toLowerCase(), load)]);
|
|
70
|
+
assert.equal(calls, 1);
|
|
71
|
+
assert.equal(a.operator, OPERATOR_A);
|
|
72
|
+
assert.equal(b.checkedAt, 1_000);
|
|
73
|
+
assert.deepEqual(cache.known(BUYER.address), { operator: OPERATOR_A });
|
|
74
|
+
now += 61_000;
|
|
75
|
+
fail = true;
|
|
76
|
+
await assert.rejects(cache.read(BUYER.address, load), /rpc down/);
|
|
77
|
+
// The last good value stays known (for change audits) but is due for a re-read.
|
|
78
|
+
assert.deepEqual(cache.known(BUYER.address), { operator: OPERATOR_A });
|
|
79
|
+
fail = false;
|
|
80
|
+
await cache.read(BUYER.address, load);
|
|
81
|
+
assert.equal(calls, 3);
|
|
82
|
+
});
|
|
83
|
+
test('signOperatorAuthorization reads the operator then the nonce, live, and signs the SetOperator struct', async () => {
|
|
84
|
+
const log = [];
|
|
85
|
+
const auth = await signOperatorAuthorization({ wallet: BUYER, chain: CHAIN, operator: OPERATOR_A, reader: fakeReader({ operator: null, nonce: 7n }, log) });
|
|
86
|
+
assert.deepEqual(log, [`operator:${BUYER.address}`, `nonce:${BUYER.address}`]);
|
|
87
|
+
assert.equal(auth.nonce, '7');
|
|
88
|
+
assert.equal(auth.nonceValue, 7n);
|
|
89
|
+
assert.equal(auth.chainId, 8453);
|
|
90
|
+
const signer = verifyTypedData(makeDepositsDomain(8453, CHAIN.depositsContractAddress), SET_OPERATOR_TYPES, { operator: OPERATOR_A, nonce: 7n }, auth.signature);
|
|
91
|
+
assert.equal(signer, BUYER.address);
|
|
92
|
+
// Calldata matches the contract's ABI.
|
|
93
|
+
const iface = new Interface(['function setOperator(address buyer, address operator, uint256 nonce, bytes buyerSig)', 'function transferOperator(address buyer, address newOperator)']);
|
|
94
|
+
const decoded = iface.decodeFunctionData('setOperator', setOperatorCalldata(auth.buyer, auth.operator, auth.nonceValue, auth.signature));
|
|
95
|
+
assert.equal(decoded[2], 7n);
|
|
96
|
+
assert.equal(iface.decodeFunctionData('transferOperator', transferOperatorCalldata(BUYER.address, ZeroAddress))[1], ZeroAddress);
|
|
97
|
+
});
|
|
98
|
+
test('signOperatorAuthorization refuses when an operator is set, or the chain cannot be read', async () => {
|
|
99
|
+
await assert.rejects(signOperatorAuthorization({ wallet: BUYER, chain: CHAIN, operator: OPERATOR_A, reader: fakeReader({ operator: OPERATOR_B, nonce: 1n }) }), (err) => err instanceof ConsoleError && err.status === 409 && err.code === 'operator_already_set' && err.message.includes(normalizeOperator(OPERATOR_B)));
|
|
100
|
+
const broken = { operator: async () => { throw new Error('rpc down'); }, nonce: async () => 0n };
|
|
101
|
+
await assert.rejects(signOperatorAuthorization({ wallet: BUYER, chain: CHAIN, operator: OPERATOR_A, reader: broken }), (err) => err instanceof ConsoleError && err.code === 'chain_unavailable');
|
|
102
|
+
await assert.rejects(signOperatorAuthorization({ wallet: BUYER, chain: CHAIN, operator: ZeroAddress, reader: fakeReader({ operator: null, nonce: 0n }) }), (err) => err instanceof ConsoleError && err.code === 'invalid_operator');
|
|
103
|
+
await assert.rejects(signOperatorAuthorization({ wallet: BUYER, chain: { ...CHAIN, depositsContractAddress: undefined }, operator: OPERATOR_A, reader: fakeReader({ operator: null, nonce: 0n }) }), (err) => err instanceof ConsoleError && err.code === 'chain_unavailable');
|
|
104
|
+
});
|
|
105
|
+
// ── Optional end-to-end run against a local anvil chain ──────────────────
|
|
106
|
+
const ARTIFACT = fileURLToPath(new URL('../../../../../packages/contracts/out/AntseedDeposits.sol/AntseedDeposits.json', import.meta.url));
|
|
107
|
+
const ANVIL = spawnSync('anvil', ['--version'], { stdio: 'ignore' }).status === 0;
|
|
108
|
+
// anvil's public dev mnemonic (accounts 0-2): test keys, never real funds.
|
|
109
|
+
const DEV_MNEMONIC = 'test test test test test test test test test test test junk';
|
|
110
|
+
const devWallet = (index) => HDNodeWallet.fromPhrase(DEV_MNEMONIC, undefined, `m/44'/60'/0'/0/${index}`);
|
|
111
|
+
async function startAnvil() {
|
|
112
|
+
const port = 20_000 + Math.floor(Math.random() * 20_000);
|
|
113
|
+
const child = spawn('anvil', ['--port', String(port), '--silent'], { stdio: 'ignore' });
|
|
114
|
+
const url = `http://127.0.0.1:${port}`;
|
|
115
|
+
for (let attempt = 0; attempt < 100; attempt += 1) {
|
|
116
|
+
try {
|
|
117
|
+
const response = await fetch(url, { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'eth_chainId', params: [] }) });
|
|
118
|
+
if (response.ok)
|
|
119
|
+
return { url, process: child };
|
|
120
|
+
}
|
|
121
|
+
catch { /* not up yet */ }
|
|
122
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
123
|
+
}
|
|
124
|
+
child.kill();
|
|
125
|
+
throw new Error('anvil did not start');
|
|
126
|
+
}
|
|
127
|
+
function revertName(iface, err) {
|
|
128
|
+
const data = err.data ?? err.info?.error?.data;
|
|
129
|
+
if (typeof data !== 'string')
|
|
130
|
+
return err.revert?.name ?? null;
|
|
131
|
+
return iface.parseError(data)?.name ?? null;
|
|
132
|
+
}
|
|
133
|
+
test('anvil: authorize, refuse a second authorization, transfer, clear, re-authorize with the next nonce', { skip: !ANVIL || !existsSync(ARTIFACT) ? 'anvil or the AntseedDeposits artifact is not available' : false, timeout: 60_000 }, async () => {
|
|
134
|
+
const { url, process: anvil } = await startAnvil();
|
|
135
|
+
try {
|
|
136
|
+
const provider = new JsonRpcProvider(url, 31_337, { staticNetwork: true });
|
|
137
|
+
const [deployer, operatorA, operatorB] = [0, 1, 2].map((index) => new NonceManager(devWallet(index).connect(provider)));
|
|
138
|
+
const artifact = JSON.parse(readFileSync(ARTIFACT, 'utf8'));
|
|
139
|
+
const factory = new ContractFactory(artifact.abi, artifact.bytecode.object, deployer);
|
|
140
|
+
const deployed = await factory.deploy(`0x${'a1'.repeat(20)}`);
|
|
141
|
+
await deployed.waitForDeployment();
|
|
142
|
+
const address = await deployed.getAddress();
|
|
143
|
+
const iface = new Interface(artifact.abi);
|
|
144
|
+
const chain = { chainId: 'base-local', evmChainId: 31_337, rpcUrl: url, depositsContractAddress: address, usdcContractAddress: `0x${'a1'.repeat(20)}` };
|
|
145
|
+
const reader = depositsOperatorReader(chain);
|
|
146
|
+
const buyer = Wallet.createRandom();
|
|
147
|
+
const addressA = await operatorA.getAddress();
|
|
148
|
+
const addressB = await operatorB.getAddress();
|
|
149
|
+
const asA = new Contract(address, artifact.abi, operatorA);
|
|
150
|
+
const asB = new Contract(address, artifact.abi, operatorB);
|
|
151
|
+
// No operator → authorize A: the buyer signs, A submits and pays gas.
|
|
152
|
+
assert.equal(await reader.operator(buyer.address), null);
|
|
153
|
+
const first = await signOperatorAuthorization({ wallet: buyer, chain, operator: addressA, reader });
|
|
154
|
+
assert.equal(first.nonce, '0');
|
|
155
|
+
await (await asA.getFunction('setOperator')(buyer.address, addressA, first.nonceValue, first.signature)).wait();
|
|
156
|
+
assert.equal(await reader.operator(buyer.address), addressA);
|
|
157
|
+
assert.equal(await reader.nonce(buyer.address), 1n);
|
|
158
|
+
// Set: the gateway refuses to sign; replaying the old signature reverts.
|
|
159
|
+
await assert.rejects(signOperatorAuthorization({ wallet: buyer, chain, operator: addressB, reader }), (err) => err instanceof ConsoleError && err.code === 'operator_already_set');
|
|
160
|
+
const replay = await asB.getFunction('setOperator').staticCall(buyer.address, addressA, 0n, first.signature).then(() => null, (err) => revertName(iface, err));
|
|
161
|
+
assert.equal(replay, 'OperatorAlreadySet');
|
|
162
|
+
// Only the current operator can transfer.
|
|
163
|
+
const stranger = await asB.getFunction('transferOperator').staticCall(buyer.address, addressB).then(() => null, (err) => revertName(iface, err));
|
|
164
|
+
assert.equal(stranger, 'NotAuthorized');
|
|
165
|
+
await (await asA.getFunction('transferOperator')(buyer.address, addressB)).wait();
|
|
166
|
+
assert.equal(await reader.operator(buyer.address), addressB);
|
|
167
|
+
// B clears it (transfer to the zero address); the nonce stays at 1.
|
|
168
|
+
await (await asB.getFunction('transferOperator')(buyer.address, ZeroAddress)).wait();
|
|
169
|
+
assert.equal(await reader.operator(buyer.address), null);
|
|
170
|
+
assert.equal(await reader.nonce(buyer.address), 1n);
|
|
171
|
+
// The nonce-0 signature cannot be replayed after clearing; a fresh one (nonce 1) works.
|
|
172
|
+
const stale = await asA.getFunction('setOperator').staticCall(buyer.address, addressA, 0n, first.signature).then(() => null, (err) => revertName(iface, err));
|
|
173
|
+
assert.equal(stale, 'InvalidNonce');
|
|
174
|
+
const second = await signOperatorAuthorization({ wallet: buyer, chain, operator: addressA, reader });
|
|
175
|
+
assert.equal(second.nonce, '1');
|
|
176
|
+
await (await asA.getFunction('setOperator')(buyer.address, addressA, second.nonceValue, second.signature)).wait();
|
|
177
|
+
assert.equal(await reader.operator(buyer.address), addressA);
|
|
178
|
+
provider.destroy();
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
anvil.kill();
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
//# sourceMappingURL=operator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"operator.test.js","sourceRoot":"","sources":["../../../src/gateway/services/operator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PeerListRecord } from '../store.js';
|
|
2
|
+
import { type Actor, type ServiceContext } from './context.js';
|
|
3
|
+
/** A peer list by id or (case-insensitive) name. */
|
|
4
|
+
export declare function findPeerList(ctx: Pick<ServiceContext, 'store'>, idOrName: string): PeerListRecord;
|
|
5
|
+
export declare function createPeerList(ctx: ServiceContext, actor: Actor, input: {
|
|
6
|
+
name: string;
|
|
7
|
+
description?: string | null;
|
|
8
|
+
peerIds?: unknown;
|
|
9
|
+
}): PeerListRecord;
|
|
10
|
+
/** Renames a list or replaces its sellers; refuses to empty a policy's allow list without `confirmEmpty`. */
|
|
11
|
+
export declare function updatePeerList(ctx: ServiceContext, actor: Actor, id: string, input: {
|
|
12
|
+
name?: string;
|
|
13
|
+
description?: string | null;
|
|
14
|
+
peerIds?: unknown;
|
|
15
|
+
confirmEmpty?: boolean;
|
|
16
|
+
}): PeerListRecord;
|
|
17
|
+
export declare function deletePeerList(ctx: ServiceContext, actor: Actor, id: string, options?: {
|
|
18
|
+
confirmEmpty?: boolean;
|
|
19
|
+
}): PeerListRecord;
|
|
20
|
+
//# sourceMappingURL=peer-lists.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-lists.d.ts","sourceRoot":"","sources":["../../../src/gateway/services/peer-lists.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,aAAa,CAAA;AAC/D,OAAO,EAAiD,KAAK,KAAK,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAwE7G,oDAAoD;AACpD,wBAAgB,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAOjG;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,cAAc,CAQzJ;AAED,6GAA6G;AAC7G,wBAAgB,cAAc,CAC5B,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,MAAM,EACV,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAC/F,cAAc,CAsBhB;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,YAAY,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,cAAc,CAStI"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { expandPeerLists, normalizePeerId } from '../../routing-policy/policy.js';
|
|
2
|
+
import { badRequest, notFound } from '../console-api/serialize.js';
|
|
3
|
+
import { gatewayDefaultPolicy } from '../policy-resolver.js';
|
|
4
|
+
import { PolicyProblemError, recordAudit, requiredText } from './context.js';
|
|
5
|
+
const MAX_PEERS = 1_000;
|
|
6
|
+
/** Normalized, de-duplicated peer ids (hex addresses, `0x` optional). */
|
|
7
|
+
function cleanPeerIds(value) {
|
|
8
|
+
if (!Array.isArray(value) || !value.every((item) => typeof item === 'string'))
|
|
9
|
+
throw badRequest('peerIds must be a list of peer ids');
|
|
10
|
+
const ids = [...new Set(value.map(normalizePeerId).filter(Boolean))];
|
|
11
|
+
if (ids.length > MAX_PEERS)
|
|
12
|
+
throw badRequest(`A peer list holds at most ${MAX_PEERS} peers`);
|
|
13
|
+
if (ids.some((id) => !/^[0-9a-f]{1,128}$/.test(id)))
|
|
14
|
+
throw badRequest('Peer ids are hex addresses');
|
|
15
|
+
return ids;
|
|
16
|
+
}
|
|
17
|
+
function cleanDescription(value) {
|
|
18
|
+
if (value === null)
|
|
19
|
+
return null;
|
|
20
|
+
if (value.length > 500)
|
|
21
|
+
throw badRequest('description is longer than 500 characters');
|
|
22
|
+
return value.trim() || null;
|
|
23
|
+
}
|
|
24
|
+
function target(list) {
|
|
25
|
+
return { kind: 'peer_list', id: list.id, label: list.name };
|
|
26
|
+
}
|
|
27
|
+
/** Every stored policy, with where it is set. */
|
|
28
|
+
function storedPolicies(store) {
|
|
29
|
+
const found = [{ where: 'gateway default', policy: gatewayDefaultPolicy(store) }];
|
|
30
|
+
for (const workspace of store.listWorkspaces()) {
|
|
31
|
+
found.push({ where: `workspace ${workspace.name} (org policy)`, policy: workspace.orgRoutingPolicy });
|
|
32
|
+
found.push({ where: `workspace ${workspace.name}`, policy: workspace.routingPolicy });
|
|
33
|
+
}
|
|
34
|
+
for (const member of store.listMembers())
|
|
35
|
+
found.push({ where: `member ${member.label}`, policy: member.routingPolicy });
|
|
36
|
+
for (const key of store.listKeys()) {
|
|
37
|
+
if (key.status !== 'active')
|
|
38
|
+
continue;
|
|
39
|
+
found.push({ where: `key ${key.label}`, policy: key.routingPolicy });
|
|
40
|
+
found.push({ where: `key ${key.label} (owner)`, policy: key.ownerRoutingPolicy });
|
|
41
|
+
}
|
|
42
|
+
for (const preset of store.listPresets())
|
|
43
|
+
found.push({ where: `preset ${preset.slug}`, policy: preset.routingPolicy });
|
|
44
|
+
return found.filter((entry) => entry.policy !== null);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Policies whose allow list would let no seller serve once this list holds
|
|
48
|
+
* `peerIds` (null: the list is deleted) while it lets some serve today.
|
|
49
|
+
*/
|
|
50
|
+
function policiesLeftEmpty(store, listId, peerIds) {
|
|
51
|
+
const current = (id) => store.getPeerList(id)?.peerIds ?? null;
|
|
52
|
+
const next = (id) => (id === listId ? peerIds : current(id));
|
|
53
|
+
return storedPolicies(store)
|
|
54
|
+
.filter(({ policy }) => [...(policy.allowedPeerLists ?? []), ...(policy.allowedPeerGroups ?? []).flatMap((group) => group.peerLists ?? [])].includes(listId))
|
|
55
|
+
.filter(({ policy }) => expandPeerLists(policy, next).allowedPeerIds?.length === 0 && expandPeerLists(policy, current).allowedPeerIds?.length !== 0)
|
|
56
|
+
.map(({ where }) => where);
|
|
57
|
+
}
|
|
58
|
+
function emptyAllowError(listName, usedBy) {
|
|
59
|
+
return new PolicyProblemError({
|
|
60
|
+
status: 400,
|
|
61
|
+
body: {
|
|
62
|
+
error: {
|
|
63
|
+
code: 'empty_allow_list',
|
|
64
|
+
message: `This leaves no seller allowed for ${usedBy.join(', ')} (they allow only sellers in "${listName}"); send confirmEmpty: true to do it anyway`,
|
|
65
|
+
usedBy,
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
function requirePeerList(ctx, id) {
|
|
71
|
+
const list = ctx.store.getPeerList(id);
|
|
72
|
+
if (!list)
|
|
73
|
+
throw notFound('Peer list');
|
|
74
|
+
return list;
|
|
75
|
+
}
|
|
76
|
+
/** A peer list by id or (case-insensitive) name. */
|
|
77
|
+
export function findPeerList(ctx, idOrName) {
|
|
78
|
+
const byId = ctx.store.getPeerList(idOrName);
|
|
79
|
+
if (byId)
|
|
80
|
+
return byId;
|
|
81
|
+
const matches = ctx.store.listPeerLists().filter((list) => list.name.toLowerCase() === idOrName.trim().toLowerCase());
|
|
82
|
+
if (matches.length === 1)
|
|
83
|
+
return matches[0];
|
|
84
|
+
if (matches.length > 1)
|
|
85
|
+
throw badRequest(`Several peer lists are named "${idOrName}"; use the list id`);
|
|
86
|
+
throw notFound('Peer list');
|
|
87
|
+
}
|
|
88
|
+
export function createPeerList(ctx, actor, input) {
|
|
89
|
+
const list = ctx.store.createPeerList({
|
|
90
|
+
name: requiredText(input.name, 'name', 100),
|
|
91
|
+
description: cleanDescription(input.description ?? null),
|
|
92
|
+
peerIds: cleanPeerIds(input.peerIds ?? []),
|
|
93
|
+
});
|
|
94
|
+
recordAudit(ctx, actor, 'peer_list.create', target(list), { peerCount: list.peerIds.length });
|
|
95
|
+
return list;
|
|
96
|
+
}
|
|
97
|
+
/** Renames a list or replaces its sellers; refuses to empty a policy's allow list without `confirmEmpty`. */
|
|
98
|
+
export function updatePeerList(ctx, actor, id, input) {
|
|
99
|
+
const { store } = ctx;
|
|
100
|
+
const before = requirePeerList(ctx, id);
|
|
101
|
+
const description = input.description === undefined ? undefined : cleanDescription(input.description);
|
|
102
|
+
const peerIds = input.peerIds === undefined ? undefined : cleanPeerIds(input.peerIds);
|
|
103
|
+
if (peerIds !== undefined && !input.confirmEmpty) {
|
|
104
|
+
const usedBy = policiesLeftEmpty(store, before.id, peerIds);
|
|
105
|
+
if (usedBy.length > 0)
|
|
106
|
+
throw emptyAllowError(before.name, usedBy);
|
|
107
|
+
}
|
|
108
|
+
const list = store.updatePeerList(before.id, {
|
|
109
|
+
...(input.name !== undefined ? { name: requiredText(input.name, 'name', 100) } : {}),
|
|
110
|
+
...(description !== undefined ? { description } : {}),
|
|
111
|
+
...(peerIds !== undefined ? { peerIds } : {}),
|
|
112
|
+
});
|
|
113
|
+
const added = list.peerIds.filter((peer) => !before.peerIds.includes(peer));
|
|
114
|
+
const removed = before.peerIds.filter((peer) => !list.peerIds.includes(peer));
|
|
115
|
+
recordAudit(ctx, actor, 'peer_list.update', target(list), {
|
|
116
|
+
...(list.name !== before.name ? { name: { before: before.name, after: list.name } } : {}),
|
|
117
|
+
...(added.length ? { added } : {}),
|
|
118
|
+
...(removed.length ? { removed } : {}),
|
|
119
|
+
});
|
|
120
|
+
return list;
|
|
121
|
+
}
|
|
122
|
+
export function deletePeerList(ctx, actor, id, options = {}) {
|
|
123
|
+
const list = requirePeerList(ctx, id);
|
|
124
|
+
if (!options.confirmEmpty) {
|
|
125
|
+
const usedBy = policiesLeftEmpty(ctx.store, list.id, null);
|
|
126
|
+
if (usedBy.length > 0)
|
|
127
|
+
throw emptyAllowError(list.name, usedBy);
|
|
128
|
+
}
|
|
129
|
+
if (!ctx.store.deletePeerList(list.id))
|
|
130
|
+
throw notFound('Peer list');
|
|
131
|
+
recordAudit(ctx, actor, 'peer_list.delete', target(list));
|
|
132
|
+
return list;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=peer-lists.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"peer-lists.js","sourceRoot":"","sources":["../../../src/gateway/services/peer-lists.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { RoutingPolicy } from '../../routing-policy/policy.js';
|
|
2
|
+
import type { PresetRecord } from '../store.js';
|
|
3
|
+
import { type Actor, type ServiceContext } from './context.js';
|
|
4
|
+
export declare const MAX_SYSTEM_PROMPT: number;
|
|
5
|
+
export declare function requirePresetRecord(ctx: Pick<ServiceContext, 'store'>, id: string): PresetRecord;
|
|
6
|
+
export interface CreatePresetInput {
|
|
7
|
+
slug: string;
|
|
8
|
+
name: string;
|
|
9
|
+
/** Null: org-wide. */
|
|
10
|
+
workspaceId: string | null;
|
|
11
|
+
model: string;
|
|
12
|
+
routingPolicy?: RoutingPolicy | null;
|
|
13
|
+
systemPrompt?: string | null;
|
|
14
|
+
params?: unknown;
|
|
15
|
+
confirmEmpty?: boolean;
|
|
16
|
+
}
|
|
17
|
+
/** Presets are called as `model: "@preset/<slug>"`: a model with default params, a system prompt and a policy that narrows the key's. */
|
|
18
|
+
export declare function createPreset(ctx: ServiceContext, actor: Actor, input: CreatePresetInput): PresetRecord;
|
|
19
|
+
export interface UpdatePresetInput {
|
|
20
|
+
slug?: string;
|
|
21
|
+
name?: string;
|
|
22
|
+
/** Refused unless unchanged: presets never move between workspaces. */
|
|
23
|
+
workspaceId?: unknown;
|
|
24
|
+
model?: string;
|
|
25
|
+
routingPolicy?: RoutingPolicy | null;
|
|
26
|
+
systemPrompt?: string | null;
|
|
27
|
+
params?: unknown;
|
|
28
|
+
confirmEmpty?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export declare function updatePreset(ctx: ServiceContext, actor: Actor, id: string, input: UpdatePresetInput): PresetRecord;
|
|
31
|
+
export declare function deletePreset(ctx: ServiceContext, actor: Actor, id: string): PresetRecord;
|
|
32
|
+
/** A preset by id, or by slug (org-wide first, unless `workspaceId` narrows it to that workspace's). */
|
|
33
|
+
export declare function findPreset(ctx: Pick<ServiceContext, 'store'>, idOrSlug: string, workspaceId?: string | null): PresetRecord;
|
|
34
|
+
//# sourceMappingURL=presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../../src/gateway/services/presets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AAKnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAA4D,KAAK,KAAK,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAKxH,eAAO,MAAM,iBAAiB,QAAY,CAAA;AAwD1C,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,CAIhG;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,yIAAyI;AACzI,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAkBtG;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,uEAAuE;IACvE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAA;IACpC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,YAAY,CAAC,EAAE,OAAO,CAAA;CACvB;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAuBlH;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,CAKxF;AAED,wGAAwG;AACxG,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,CAO1H"}
|