@oobe-protocol-labs/sap-mcp-server 0.9.16 → 0.9.21
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/.env.example +8 -7
- package/CHANGELOG.md +238 -0
- package/README.md +3 -3
- package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +1 -1
- package/USER_DOCS/04_CLIENT_CONFIGS.md +3 -3
- package/USER_DOCS/05_SKILLS_AND_TOOLS.md +16 -8
- package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +5 -5
- package/config.example.json +5 -4
- package/config.schema.json +7 -2
- package/config.secure-example.json +5 -4
- package/dist/adapters/index.d.ts +7 -1
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +7 -1
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/mcp/errors.d.ts +13 -1
- package/dist/adapters/mcp/errors.d.ts.map +1 -1
- package/dist/adapters/mcp/errors.js +13 -1
- package/dist/adapters/mcp/errors.js.map +1 -1
- package/dist/adapters/mcp/index.d.ts +7 -1
- package/dist/adapters/mcp/index.d.ts.map +1 -1
- package/dist/adapters/mcp/index.js +7 -1
- package/dist/adapters/mcp/index.js.map +1 -1
- package/dist/adapters/mcp/prompt-response.d.ts +13 -1
- package/dist/adapters/mcp/prompt-response.d.ts.map +1 -1
- package/dist/adapters/mcp/prompt-response.js +13 -1
- package/dist/adapters/mcp/prompt-response.js.map +1 -1
- package/dist/adapters/mcp/resource-response.d.ts +14 -1
- package/dist/adapters/mcp/resource-response.d.ts.map +1 -1
- package/dist/adapters/mcp/resource-response.js +14 -1
- package/dist/adapters/mcp/resource-response.js.map +1 -1
- package/dist/adapters/mcp/sdk-compat.d.ts +11 -3
- package/dist/adapters/mcp/sdk-compat.d.ts.map +1 -1
- package/dist/adapters/mcp/sdk-compat.js +213 -24
- package/dist/adapters/mcp/sdk-compat.js.map +1 -1
- package/dist/adapters/mcp/tool-response.d.ts +39 -4
- package/dist/adapters/mcp/tool-response.d.ts.map +1 -1
- package/dist/adapters/mcp/tool-response.js +39 -4
- package/dist/adapters/mcp/tool-response.js.map +1 -1
- package/dist/adapters/solana/commitment.d.ts +14 -2
- package/dist/adapters/solana/commitment.d.ts.map +1 -1
- package/dist/adapters/solana/commitment.js +14 -2
- package/dist/adapters/solana/commitment.js.map +1 -1
- package/dist/adapters/solana/connection.d.ts +11 -2
- package/dist/adapters/solana/connection.d.ts.map +1 -1
- package/dist/adapters/solana/connection.js +11 -2
- package/dist/adapters/solana/connection.js.map +1 -1
- package/dist/adapters/solana/index.d.ts +7 -1
- package/dist/adapters/solana/index.d.ts.map +1 -1
- package/dist/adapters/solana/index.js +7 -1
- package/dist/adapters/solana/index.js.map +1 -1
- package/dist/adapters/solana/public-key.d.ts +11 -2
- package/dist/adapters/solana/public-key.d.ts.map +1 -1
- package/dist/adapters/solana/public-key.js +11 -2
- package/dist/adapters/solana/public-key.js.map +1 -1
- package/dist/config/defaults.d.ts +5 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +5 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/env.d.ts +4 -0
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +11 -6
- package/dist/config/env.js.map +1 -1
- package/dist/config/index.d.ts +5 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/mcp-client-injection.d.ts.map +1 -1
- package/dist/config/mcp-client-injection.js +97 -1
- package/dist/config/mcp-client-injection.js.map +1 -1
- package/dist/config/paths.d.ts +5 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +5 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/profiles.d.ts +3 -10
- package/dist/config/profiles.d.ts.map +1 -1
- package/dist/config/profiles.js +5 -0
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/schema.d.ts +5 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +5 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/config/secure-config.d.ts +5 -0
- package/dist/config/secure-config.d.ts.map +1 -1
- package/dist/config/secure-config.js +5 -0
- package/dist/config/secure-config.js.map +1 -1
- package/dist/config/setup.d.ts +5 -0
- package/dist/config/setup.d.ts.map +1 -1
- package/dist/config/setup.js +5 -0
- package/dist/config/setup.js.map +1 -1
- package/dist/config-cli.d.ts +3 -13
- package/dist/config-cli.d.ts.map +1 -1
- package/dist/config-cli.js +5 -0
- package/dist/config-cli.js.map +1 -1
- package/dist/core/constants.d.ts +25 -6
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +27 -8
- package/dist/core/constants.js.map +1 -1
- package/dist/core/errors.d.ts +5 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +5 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/guards.d.ts +5 -0
- package/dist/core/guards.d.ts.map +1 -1
- package/dist/core/guards.js +3 -1
- package/dist/core/guards.js.map +1 -1
- package/dist/core/index.d.ts +7 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +7 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/logger.js +1 -1
- package/dist/core/logger.js.map +1 -1
- package/dist/core/result.d.ts +77 -9
- package/dist/core/result.d.ts.map +1 -1
- package/dist/core/result.js +68 -9
- package/dist/core/result.js.map +1 -1
- package/dist/core/types.d.ts +5 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +3 -4
- package/dist/core/types.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/payments/facilitator-rpc-fallback.d.ts.map +1 -1
- package/dist/payments/facilitator-rpc-fallback.js +95 -0
- package/dist/payments/facilitator-rpc-fallback.js.map +1 -1
- package/dist/payments/hosted-tool-eligibility.d.ts +1 -0
- package/dist/payments/hosted-tool-eligibility.d.ts.map +1 -1
- package/dist/payments/hosted-tool-eligibility.js +1 -0
- package/dist/payments/hosted-tool-eligibility.js.map +1 -1
- package/dist/payments/mcp-session-cache.d.ts +35 -0
- package/dist/payments/mcp-session-cache.d.ts.map +1 -0
- package/dist/payments/mcp-session-cache.js +83 -0
- package/dist/payments/mcp-session-cache.js.map +1 -0
- package/dist/payments/monetization-gate.d.ts +5 -0
- package/dist/payments/monetization-gate.d.ts.map +1 -1
- package/dist/payments/monetization-gate.js +24 -1
- package/dist/payments/monetization-gate.js.map +1 -1
- package/dist/payments/pricing.d.ts +1 -0
- package/dist/payments/pricing.d.ts.map +1 -1
- package/dist/payments/pricing.js +66 -8
- package/dist/payments/pricing.js.map +1 -1
- package/dist/payments/usage-ledger.d.ts +36 -2
- package/dist/payments/usage-ledger.d.ts.map +1 -1
- package/dist/payments/usage-ledger.js +121 -4
- package/dist/payments/usage-ledger.js.map +1 -1
- package/dist/payments/x402-paid-call.d.ts +50 -0
- package/dist/payments/x402-paid-call.d.ts.map +1 -1
- package/dist/payments/x402-paid-call.js +171 -0
- package/dist/payments/x402-paid-call.js.map +1 -1
- package/dist/policy/default-policies.d.ts +18 -2
- package/dist/policy/default-policies.d.ts.map +1 -1
- package/dist/policy/default-policies.js +18 -2
- package/dist/policy/default-policies.js.map +1 -1
- package/dist/policy/index.d.ts +6 -3
- package/dist/policy/index.d.ts.map +1 -1
- package/dist/policy/index.js +6 -3
- package/dist/policy/index.js.map +1 -1
- package/dist/policy/local-policy-engine.d.ts +71 -13
- package/dist/policy/local-policy-engine.d.ts.map +1 -1
- package/dist/policy/local-policy-engine.js +33 -11
- package/dist/policy/local-policy-engine.js.map +1 -1
- package/dist/policy/permission-checks.d.ts +29 -3
- package/dist/policy/permission-checks.d.ts.map +1 -1
- package/dist/policy/permission-checks.js +29 -3
- package/dist/policy/permission-checks.js.map +1 -1
- package/dist/policy/policy-engine.d.ts +22 -2
- package/dist/policy/policy-engine.d.ts.map +1 -1
- package/dist/policy/policy-engine.js +22 -2
- package/dist/policy/policy-engine.js.map +1 -1
- package/dist/policy/policy-types.d.ts +55 -5
- package/dist/policy/policy-types.d.ts.map +1 -1
- package/dist/policy/policy-types.js +8 -1
- package/dist/policy/policy-types.js.map +1 -1
- package/dist/policy/risk-level.d.ts +32 -3
- package/dist/policy/risk-level.d.ts.map +1 -1
- package/dist/policy/risk-level.js +32 -3
- package/dist/policy/risk-level.js.map +1 -1
- package/dist/policy/spending-limits.d.ts +29 -3
- package/dist/policy/spending-limits.d.ts.map +1 -1
- package/dist/policy/spending-limits.js +29 -3
- package/dist/policy/spending-limits.js.map +1 -1
- package/dist/premium/activation-manager.d.ts +43 -0
- package/dist/premium/activation-manager.d.ts.map +1 -0
- package/dist/premium/activation-manager.js +131 -0
- package/dist/premium/activation-manager.js.map +1 -0
- package/dist/premium/builtin-plugins.d.ts +143 -0
- package/dist/premium/builtin-plugins.d.ts.map +1 -0
- package/dist/premium/builtin-plugins.js +394 -0
- package/dist/premium/builtin-plugins.js.map +1 -0
- package/dist/premium/event-store.d.ts +61 -0
- package/dist/premium/event-store.d.ts.map +1 -0
- package/dist/premium/event-store.js +130 -0
- package/dist/premium/event-store.js.map +1 -0
- package/dist/premium/index.d.ts +54 -0
- package/dist/premium/index.d.ts.map +1 -0
- package/dist/premium/index.js +54 -0
- package/dist/premium/index.js.map +1 -0
- package/dist/premium/manifest-builder.d.ts +65 -0
- package/dist/premium/manifest-builder.d.ts.map +1 -0
- package/dist/premium/manifest-builder.js +182 -0
- package/dist/premium/manifest-builder.js.map +1 -0
- package/dist/premium/meme-radar-capabilities.d.ts +38 -0
- package/dist/premium/meme-radar-capabilities.d.ts.map +1 -0
- package/dist/premium/meme-radar-capabilities.js +306 -0
- package/dist/premium/meme-radar-capabilities.js.map +1 -0
- package/dist/premium/metrics.d.ts +27 -0
- package/dist/premium/metrics.d.ts.map +1 -0
- package/dist/premium/metrics.js +65 -0
- package/dist/premium/metrics.js.map +1 -0
- package/dist/premium/plugin-validator.d.ts +39 -0
- package/dist/premium/plugin-validator.d.ts.map +1 -0
- package/dist/premium/plugin-validator.js +325 -0
- package/dist/premium/plugin-validator.js.map +1 -0
- package/dist/premium/private-manifest-loader.d.ts +111 -0
- package/dist/premium/private-manifest-loader.d.ts.map +1 -0
- package/dist/premium/private-manifest-loader.js +285 -0
- package/dist/premium/private-manifest-loader.js.map +1 -0
- package/dist/premium/provider-bridge.d.ts +109 -0
- package/dist/premium/provider-bridge.d.ts.map +1 -0
- package/dist/premium/provider-bridge.js +239 -0
- package/dist/premium/provider-bridge.js.map +1 -0
- package/dist/premium/session-manager.d.ts +125 -0
- package/dist/premium/session-manager.d.ts.map +1 -0
- package/dist/premium/session-manager.js +337 -0
- package/dist/premium/session-manager.js.map +1 -0
- package/dist/premium/stream-broker.d.ts +98 -0
- package/dist/premium/stream-broker.d.ts.map +1 -0
- package/dist/premium/stream-broker.js +199 -0
- package/dist/premium/stream-broker.js.map +1 -0
- package/dist/premium/tech-fundamentals-capabilities.d.ts +37 -0
- package/dist/premium/tech-fundamentals-capabilities.d.ts.map +1 -0
- package/dist/premium/tech-fundamentals-capabilities.js +283 -0
- package/dist/premium/tech-fundamentals-capabilities.js.map +1 -0
- package/dist/premium/trading-capabilities.d.ts +36 -0
- package/dist/premium/trading-capabilities.d.ts.map +1 -0
- package/dist/premium/trading-capabilities.js +205 -0
- package/dist/premium/trading-capabilities.js.map +1 -0
- package/dist/premium/types.d.ts +518 -0
- package/dist/premium/types.d.ts.map +1 -0
- package/dist/premium/types.js +23 -0
- package/dist/premium/types.js.map +1 -0
- package/dist/premium/webhook-engine.d.ts +138 -0
- package/dist/premium/webhook-engine.d.ts.map +1 -0
- package/dist/premium/webhook-engine.js +510 -0
- package/dist/premium/webhook-engine.js.map +1 -0
- package/dist/prompts/context/sap-agent-context.prompt.d.ts +5 -0
- package/dist/prompts/context/sap-agent-context.prompt.d.ts.map +1 -1
- package/dist/prompts/context/sap-agent-context.prompt.js +2 -8
- package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -1
- package/dist/prompts/context/sap-agent-intent-router.prompt.d.ts +14 -0
- package/dist/prompts/context/sap-agent-intent-router.prompt.d.ts.map +1 -0
- package/dist/prompts/context/sap-agent-intent-router.prompt.js +155 -0
- package/dist/prompts/context/sap-agent-intent-router.prompt.js.map +1 -0
- package/dist/prompts/context/sap-agent-start.prompt.js +1 -0
- package/dist/prompts/context/sap-agent-start.prompt.js.map +1 -1
- package/dist/prompts/developer/debug-sap-error.prompt.d.ts +5 -0
- package/dist/prompts/developer/debug-sap-error.prompt.d.ts.map +1 -1
- package/dist/prompts/developer/debug-sap-error.prompt.js +3 -4
- package/dist/prompts/developer/debug-sap-error.prompt.js.map +1 -1
- package/dist/prompts/developer/generate-sap-integration.prompt.d.ts +5 -0
- package/dist/prompts/developer/generate-sap-integration.prompt.d.ts.map +1 -1
- package/dist/prompts/developer/generate-sap-integration.prompt.js +3 -4
- package/dist/prompts/developer/generate-sap-integration.prompt.js.map +1 -1
- package/dist/prompts/developer/index.d.ts +4 -1
- package/dist/prompts/developer/index.d.ts.map +1 -1
- package/dist/prompts/developer/index.js +4 -1
- package/dist/prompts/developer/index.js.map +1 -1
- package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts +5 -0
- package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts.map +1 -1
- package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js +3 -4
- package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js.map +1 -1
- package/dist/prompts/execution-proof/index.d.ts +4 -1
- package/dist/prompts/execution-proof/index.d.ts.map +1 -1
- package/dist/prompts/execution-proof/index.js +4 -1
- package/dist/prompts/execution-proof/index.js.map +1 -1
- package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts +5 -0
- package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts.map +1 -1
- package/dist/prompts/execution-proof/verify-execution-proof.prompt.js +3 -4
- package/dist/prompts/execution-proof/verify-execution-proof.prompt.js.map +1 -1
- package/dist/prompts/index.d.ts +4 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +4 -1
- package/dist/prompts/index.js.map +1 -1
- package/dist/prompts/payments/create-paid-api.prompt.d.ts +5 -0
- package/dist/prompts/payments/create-paid-api.prompt.d.ts.map +1 -1
- package/dist/prompts/payments/create-paid-api.prompt.js +3 -4
- package/dist/prompts/payments/create-paid-api.prompt.js.map +1 -1
- package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts +5 -0
- package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts.map +1 -1
- package/dist/prompts/payments/explain-x402-settlement.prompt.js +3 -4
- package/dist/prompts/payments/explain-x402-settlement.prompt.js.map +1 -1
- package/dist/prompts/payments/index.d.ts +4 -1
- package/dist/prompts/payments/index.d.ts.map +1 -1
- package/dist/prompts/payments/index.js +4 -1
- package/dist/prompts/payments/index.js.map +1 -1
- package/dist/prompts/register-prompts.d.ts +18 -2
- package/dist/prompts/register-prompts.d.ts.map +1 -1
- package/dist/prompts/register-prompts.js +21 -3
- package/dist/prompts/register-prompts.js.map +1 -1
- package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts +5 -0
- package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts.map +1 -1
- package/dist/prompts/registry/analyze-sap-agent.prompt.js +3 -4
- package/dist/prompts/registry/analyze-sap-agent.prompt.js.map +1 -1
- package/dist/prompts/registry/index.d.ts +4 -1
- package/dist/prompts/registry/index.d.ts.map +1 -1
- package/dist/prompts/registry/index.js +4 -1
- package/dist/prompts/registry/index.js.map +1 -1
- package/dist/prompts/registry/register-sap-agent.prompt.d.ts +5 -0
- package/dist/prompts/registry/register-sap-agent.prompt.d.ts.map +1 -1
- package/dist/prompts/registry/register-sap-agent.prompt.js +3 -4
- package/dist/prompts/registry/register-sap-agent.prompt.js.map +1 -1
- package/dist/remote/premium-memory.d.ts +90 -0
- package/dist/remote/premium-memory.d.ts.map +1 -0
- package/dist/remote/premium-memory.js +161 -0
- package/dist/remote/premium-memory.js.map +1 -0
- package/dist/remote/premium-routes.d.ts +99 -0
- package/dist/remote/premium-routes.d.ts.map +1 -0
- package/dist/remote/premium-routes.js +346 -0
- package/dist/remote/premium-routes.js.map +1 -0
- package/dist/remote/public-home/sections.d.ts.map +1 -1
- package/dist/remote/public-home/sections.js +7 -1
- package/dist/remote/public-home/sections.js.map +1 -1
- package/dist/remote/public-home/types.d.ts +6 -0
- package/dist/remote/public-home/types.d.ts.map +1 -1
- package/dist/remote/server.d.ts +18 -0
- package/dist/remote/server.d.ts.map +1 -1
- package/dist/remote/server.js +298 -116
- package/dist/remote/server.js.map +1 -1
- package/dist/remote/tx-relay.d.ts +42 -0
- package/dist/remote/tx-relay.d.ts.map +1 -0
- package/dist/remote/tx-relay.js +118 -0
- package/dist/remote/tx-relay.js.map +1 -0
- package/dist/resources/current/sap-current-config.resource.d.ts +5 -0
- package/dist/resources/current/sap-current-config.resource.d.ts.map +1 -1
- package/dist/resources/current/sap-current-config.resource.js +2 -5
- package/dist/resources/current/sap-current-config.resource.js.map +1 -1
- package/dist/resources/execution-proof/index.d.ts +5 -0
- package/dist/resources/execution-proof/index.d.ts.map +1 -1
- package/dist/resources/execution-proof/index.js +5 -0
- package/dist/resources/execution-proof/index.js.map +1 -1
- package/dist/resources/execution-proof/sap-execution-record.resource.d.ts +5 -0
- package/dist/resources/execution-proof/sap-execution-record.resource.d.ts.map +1 -1
- package/dist/resources/execution-proof/sap-execution-record.resource.js +3 -4
- package/dist/resources/execution-proof/sap-execution-record.resource.js.map +1 -1
- package/dist/resources/index.d.ts +5 -0
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +5 -0
- package/dist/resources/index.js.map +1 -1
- package/dist/resources/memory/index.d.ts +5 -0
- package/dist/resources/memory/index.d.ts.map +1 -1
- package/dist/resources/memory/index.js +5 -0
- package/dist/resources/memory/index.js.map +1 -1
- package/dist/resources/memory/sap-memory.resource.d.ts +5 -0
- package/dist/resources/memory/sap-memory.resource.d.ts.map +1 -1
- package/dist/resources/memory/sap-memory.resource.js +3 -4
- package/dist/resources/memory/sap-memory.resource.js.map +1 -1
- package/dist/resources/profile/sap-active-profile.resource.d.ts +5 -0
- package/dist/resources/profile/sap-active-profile.resource.d.ts.map +1 -1
- package/dist/resources/profile/sap-active-profile.resource.js +2 -5
- package/dist/resources/profile/sap-active-profile.resource.js.map +1 -1
- package/dist/resources/register-resources.d.ts +5 -0
- package/dist/resources/register-resources.d.ts.map +1 -1
- package/dist/resources/register-resources.js +3 -1
- package/dist/resources/register-resources.js.map +1 -1
- package/dist/resources/registry/index.d.ts +5 -0
- package/dist/resources/registry/index.d.ts.map +1 -1
- package/dist/resources/registry/index.js +5 -0
- package/dist/resources/registry/index.js.map +1 -1
- package/dist/resources/registry/sap-agent.resource.d.ts +5 -0
- package/dist/resources/registry/sap-agent.resource.d.ts.map +1 -1
- package/dist/resources/registry/sap-agent.resource.js +3 -4
- package/dist/resources/registry/sap-agent.resource.js.map +1 -1
- package/dist/resources/registry/sap-global-registry.resource.d.ts +18 -4
- package/dist/resources/registry/sap-global-registry.resource.d.ts.map +1 -1
- package/dist/resources/registry/sap-global-registry.resource.js +18 -4
- package/dist/resources/registry/sap-global-registry.resource.js.map +1 -1
- package/dist/resources/reputation/index.d.ts +4 -1
- package/dist/resources/reputation/index.d.ts.map +1 -1
- package/dist/resources/reputation/index.js +4 -1
- package/dist/resources/reputation/index.js.map +1 -1
- package/dist/resources/reputation/sap-reputation.resource.d.ts +18 -4
- package/dist/resources/reputation/sap-reputation.resource.d.ts.map +1 -1
- package/dist/resources/reputation/sap-reputation.resource.js +18 -4
- package/dist/resources/reputation/sap-reputation.resource.js.map +1 -1
- package/dist/resources/tool-schema/index.d.ts +4 -1
- package/dist/resources/tool-schema/index.d.ts.map +1 -1
- package/dist/resources/tool-schema/index.js +4 -1
- package/dist/resources/tool-schema/index.js.map +1 -1
- package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts +18 -4
- package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts.map +1 -1
- package/dist/resources/tool-schema/sap-tool-schema.resource.js +18 -4
- package/dist/resources/tool-schema/sap-tool-schema.resource.js.map +1 -1
- package/dist/sap/index.d.ts +7 -1
- package/dist/sap/index.d.ts.map +1 -1
- package/dist/sap/index.js +7 -1
- package/dist/sap/index.js.map +1 -1
- package/dist/sap/sap-client-manager.d.ts +80 -13
- package/dist/sap/sap-client-manager.d.ts.map +1 -1
- package/dist/sap/sap-client-manager.js +80 -13
- package/dist/sap/sap-client-manager.js.map +1 -1
- package/dist/sap/sap-errors.d.ts +22 -3
- package/dist/sap/sap-errors.d.ts.map +1 -1
- package/dist/sap/sap-errors.js +22 -3
- package/dist/sap/sap-errors.js.map +1 -1
- package/dist/sap/sap-types.d.ts +75 -6
- package/dist/sap/sap-types.d.ts.map +1 -1
- package/dist/sap/sap-types.js +11 -1
- package/dist/sap/sap-types.js.map +1 -1
- package/dist/schemas/common.schema.d.ts +45 -8
- package/dist/schemas/common.schema.d.ts.map +1 -1
- package/dist/schemas/common.schema.js +45 -8
- package/dist/schemas/common.schema.js.map +1 -1
- package/dist/schemas/developer.schema.d.ts +22 -3
- package/dist/schemas/developer.schema.d.ts.map +1 -1
- package/dist/schemas/developer.schema.js +22 -3
- package/dist/schemas/developer.schema.js.map +1 -1
- package/dist/schemas/execution-proof.schema.d.ts +29 -4
- package/dist/schemas/execution-proof.schema.d.ts.map +1 -1
- package/dist/schemas/execution-proof.schema.js +29 -4
- package/dist/schemas/execution-proof.schema.js.map +1 -1
- package/dist/schemas/identity.schema.d.ts +23 -3
- package/dist/schemas/identity.schema.d.ts.map +1 -1
- package/dist/schemas/identity.schema.js +23 -3
- package/dist/schemas/identity.schema.js.map +1 -1
- package/dist/schemas/index.d.ts +11 -1
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +11 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/memory.schema.d.ts +23 -3
- package/dist/schemas/memory.schema.d.ts.map +1 -1
- package/dist/schemas/memory.schema.js +23 -3
- package/dist/schemas/memory.schema.js.map +1 -1
- package/dist/schemas/payments.schema.d.ts +24 -3
- package/dist/schemas/payments.schema.d.ts.map +1 -1
- package/dist/schemas/payments.schema.js +24 -3
- package/dist/schemas/payments.schema.js.map +1 -1
- package/dist/schemas/registry.schema.d.ts +36 -4
- package/dist/schemas/registry.schema.d.ts.map +1 -1
- package/dist/schemas/registry.schema.js +36 -4
- package/dist/schemas/registry.schema.js.map +1 -1
- package/dist/schemas/reputation.schema.d.ts +22 -3
- package/dist/schemas/reputation.schema.d.ts.map +1 -1
- package/dist/schemas/reputation.schema.js +22 -3
- package/dist/schemas/reputation.schema.js.map +1 -1
- package/dist/schemas/settlement.schema.d.ts +31 -4
- package/dist/schemas/settlement.schema.d.ts.map +1 -1
- package/dist/schemas/settlement.schema.js +31 -4
- package/dist/schemas/settlement.schema.js.map +1 -1
- package/dist/schemas/tool-schema.schema.d.ts +29 -3
- package/dist/schemas/tool-schema.schema.d.ts.map +1 -1
- package/dist/schemas/tool-schema.schema.js +29 -3
- package/dist/schemas/tool-schema.schema.js.map +1 -1
- package/dist/schemas/transaction.schema.d.ts +23 -3
- package/dist/schemas/transaction.schema.d.ts.map +1 -1
- package/dist/schemas/transaction.schema.js +23 -3
- package/dist/schemas/transaction.schema.js.map +1 -1
- package/dist/security/approval-required.d.ts +19 -2
- package/dist/security/approval-required.d.ts.map +1 -1
- package/dist/security/approval-required.js +19 -2
- package/dist/security/approval-required.js.map +1 -1
- package/dist/security/index.d.ts +7 -1
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +7 -1
- package/dist/security/index.js.map +1 -1
- package/dist/security/private-key-guard.d.ts +18 -2
- package/dist/security/private-key-guard.d.ts.map +1 -1
- package/dist/security/private-key-guard.js +19 -2
- package/dist/security/private-key-guard.js.map +1 -1
- package/dist/security/prompt-injection-notes.d.ts +10 -1
- package/dist/security/prompt-injection-notes.d.ts.map +1 -1
- package/dist/security/prompt-injection-notes.js +10 -1
- package/dist/security/prompt-injection-notes.js.map +1 -1
- package/dist/security/unsafe-action-guard.d.ts +36 -10
- package/dist/security/unsafe-action-guard.d.ts.map +1 -1
- package/dist/security/unsafe-action-guard.js +67 -15
- package/dist/security/unsafe-action-guard.js.map +1 -1
- package/dist/server/create-server.d.ts +18 -3
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +18 -3
- package/dist/server/create-server.js.map +1 -1
- package/dist/server/index.d.ts +6 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +6 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/register-capabilities.d.ts +17 -2
- package/dist/server/register-capabilities.d.ts.map +1 -1
- package/dist/server/register-capabilities.js +17 -2
- package/dist/server/register-capabilities.js.map +1 -1
- package/dist/server/server-metadata.d.ts +35 -1
- package/dist/server/server-metadata.d.ts.map +1 -1
- package/dist/server/server-metadata.js +36 -2
- package/dist/server/server-metadata.js.map +1 -1
- package/dist/session/agent-session.d.ts +35 -4
- package/dist/session/agent-session.d.ts.map +1 -1
- package/dist/session/agent-session.js +35 -4
- package/dist/session/agent-session.js.map +1 -1
- package/dist/session/delegated-session.d.ts +31 -3
- package/dist/session/delegated-session.d.ts.map +1 -1
- package/dist/session/delegated-session.js +31 -3
- package/dist/session/delegated-session.js.map +1 -1
- package/dist/session/index.d.ts +7 -1
- package/dist/session/index.d.ts.map +1 -1
- package/dist/session/index.js +7 -1
- package/dist/session/index.js.map +1 -1
- package/dist/session/redis-session-store.d.ts +94 -21
- package/dist/session/redis-session-store.d.ts.map +1 -1
- package/dist/session/redis-session-store.js +87 -20
- package/dist/session/redis-session-store.js.map +1 -1
- package/dist/session/session-limits.d.ts +34 -4
- package/dist/session/session-limits.d.ts.map +1 -1
- package/dist/session/session-limits.js +34 -4
- package/dist/session/session-limits.js.map +1 -1
- package/dist/session/session-permissions.d.ts +57 -7
- package/dist/session/session-permissions.d.ts.map +1 -1
- package/dist/session/session-permissions.js +57 -7
- package/dist/session/session-permissions.js.map +1 -1
- package/dist/session/session-store.d.ts +9 -1
- package/dist/session/session-store.d.ts.map +1 -1
- package/dist/session/session-store.js +18 -3
- package/dist/session/session-store.js.map +1 -1
- package/dist/session/session-types.d.ts +33 -4
- package/dist/session/session-types.d.ts.map +1 -1
- package/dist/session/session-types.js +9 -1
- package/dist/session/session-types.js.map +1 -1
- package/dist/signer/index.d.ts +7 -1
- package/dist/signer/index.d.ts.map +1 -1
- package/dist/signer/index.js +7 -1
- package/dist/signer/index.js.map +1 -1
- package/dist/signer/load-keypair.d.ts +25 -4
- package/dist/signer/load-keypair.d.ts.map +1 -1
- package/dist/signer/load-keypair.js +25 -4
- package/dist/signer/load-keypair.js.map +1 -1
- package/dist/signer/local-keypair-signer.d.ts +16 -2
- package/dist/signer/local-keypair-signer.d.ts.map +1 -1
- package/dist/signer/local-keypair-signer.js +16 -2
- package/dist/signer/local-keypair-signer.js.map +1 -1
- package/dist/signer/signer-resolver.d.ts +19 -2
- package/dist/signer/signer-resolver.d.ts.map +1 -1
- package/dist/signer/signer-resolver.js +26 -3
- package/dist/signer/signer-resolver.js.map +1 -1
- package/dist/signer/signer-types.d.ts +47 -5
- package/dist/signer/signer-types.d.ts.map +1 -1
- package/dist/signer/signer-types.js +13 -1
- package/dist/signer/signer-types.js.map +1 -1
- package/dist/tools/agent-start-tool.js +20 -1
- package/dist/tools/agent-start-tool.js.map +1 -1
- package/dist/tools/client-sdk-tools.d.ts.map +1 -1
- package/dist/tools/client-sdk-tools.js +27 -2
- package/dist/tools/client-sdk-tools.js.map +1 -1
- package/dist/tools/estimate-tool-cost.d.ts +13 -0
- package/dist/tools/estimate-tool-cost.d.ts.map +1 -0
- package/dist/tools/estimate-tool-cost.js +139 -0
- package/dist/tools/estimate-tool-cost.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +9 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/magicblock-tools.d.ts +25 -0
- package/dist/tools/magicblock-tools.d.ts.map +1 -1
- package/dist/tools/magicblock-tools.js +116 -8
- package/dist/tools/magicblock-tools.js.map +1 -1
- package/dist/tools/perp-tools.d.ts +39 -0
- package/dist/tools/perp-tools.d.ts.map +1 -0
- package/dist/tools/perp-tools.js +1110 -0
- package/dist/tools/perp-tools.js.map +1 -0
- package/dist/tools/premium-tools.d.ts +8 -0
- package/dist/tools/premium-tools.d.ts.map +1 -0
- package/dist/tools/premium-tools.js +1096 -0
- package/dist/tools/premium-tools.js.map +1 -0
- package/dist/tools/quick-context-tool.d.ts +16 -0
- package/dist/tools/quick-context-tool.d.ts.map +1 -0
- package/dist/tools/quick-context-tool.js +228 -0
- package/dist/tools/quick-context-tool.js.map +1 -0
- package/dist/tools/register-tools.d.ts.map +1 -1
- package/dist/tools/register-tools.js +14 -0
- package/dist/tools/register-tools.js.map +1 -1
- package/dist/tools/sap-sdk-tools.d.ts.map +1 -1
- package/dist/tools/sap-sdk-tools.js +42 -32
- package/dist/tools/sap-sdk-tools.js.map +1 -1
- package/dist/tools/skills-tools.d.ts +6 -0
- package/dist/tools/skills-tools.d.ts.map +1 -1
- package/dist/tools/skills-tools.js +5 -4
- package/dist/tools/skills-tools.js.map +1 -1
- package/dist/tools/x402-paid-call-tool.js +2 -2
- package/dist/tools/x402-paid-call-tool.js.map +1 -1
- package/dist/transports/index.d.ts +6 -1
- package/dist/transports/index.d.ts.map +1 -1
- package/dist/transports/index.js +6 -1
- package/dist/transports/index.js.map +1 -1
- package/dist/transports/stdio.d.ts +17 -5
- package/dist/transports/stdio.d.ts.map +1 -1
- package/dist/transports/stdio.js +17 -5
- package/dist/transports/stdio.js.map +1 -1
- package/dist/tui/wizard-save.d.ts +88 -8
- package/dist/tui/wizard-save.d.ts.map +1 -1
- package/dist/tui/wizard-save.js +77 -8
- package/dist/tui/wizard-save.js.map +1 -1
- package/docs/06_PAYMENTS_X402_AND_PAYSH.md +3 -3
- package/docs/07_ENDPOINTS_AND_CLIENTS.md +4 -1
- package/docs/14_DESKTOP_WIZARD_RELEASE.md +3 -3
- package/docs/16_SAP_AGENT_IDENTITY_PIPELINE.md +6 -0
- package/docs/18_PREMIUM_PLUGIN_RUNTIME.md +108 -0
- package/docs/BRANCH_AND_CI.md +67 -0
- package/docs/README.md +12 -0
- package/package.json +8 -9
- package/server.json +3 -3
- package/skills/sap-agent-registry/SKILL.md +6 -0
- package/skills/sap-mcp/SKILL.md +27 -4
- package/skills/sap-mcp/TOOL_REFERENCE.md +4 -1
- package/skills/sap-payments-x402/SKILL.md +22 -8
|
@@ -9,7 +9,7 @@ import type { PaymentDecision } from './pricing.js';
|
|
|
9
9
|
* @name PaymentLedgerEventType
|
|
10
10
|
* @description Supported audit event types emitted by the monetization gate.
|
|
11
11
|
*/
|
|
12
|
-
export type PaymentLedgerEventType = 'payment_required' | 'payment_verified' | 'payment_settled' | 'payment_failed' | 'payment_canceled';
|
|
12
|
+
export type PaymentLedgerEventType = 'payment_required' | 'payment_challenge_returned' | 'payment_eligibility_blocked' | 'payment_verified' | 'payment_verification_failed' | 'payment_settled' | 'payment_failed' | 'payment_canceled';
|
|
13
13
|
/**
|
|
14
14
|
* @name PaymentLedgerEvent
|
|
15
15
|
* @description Durable audit record for a monetized MCP request without storing private key material or payment payloads.
|
|
@@ -29,6 +29,7 @@ export interface PaymentLedgerEvent {
|
|
|
29
29
|
network?: string;
|
|
30
30
|
amount?: string;
|
|
31
31
|
payer?: string;
|
|
32
|
+
challengeTransport?: 'mcp-json-rpc' | 'http-402';
|
|
32
33
|
errorReason?: string;
|
|
33
34
|
errorMessage?: string;
|
|
34
35
|
}
|
|
@@ -52,6 +53,11 @@ export declare class UsageLedger {
|
|
|
52
53
|
private readonly ledgerPath;
|
|
53
54
|
private readonly redis?;
|
|
54
55
|
private readonly redisStreamKey;
|
|
56
|
+
private readonly buffer;
|
|
57
|
+
private flushTimer?;
|
|
58
|
+
private readonly flushIntervalMs;
|
|
59
|
+
private readonly maxBufferSize;
|
|
60
|
+
private flushing;
|
|
55
61
|
constructor(ledgerPath?: string, redis?: InstanceType<typeof Redis>, redisStreamKey?: string);
|
|
56
62
|
/**
|
|
57
63
|
* @name createFromEnv
|
|
@@ -60,19 +66,47 @@ export declare class UsageLedger {
|
|
|
60
66
|
static createFromEnv(): Promise<UsageLedger>;
|
|
61
67
|
/**
|
|
62
68
|
* @name append
|
|
63
|
-
* @description
|
|
69
|
+
* @description Buffers a payment audit event. Flushes to disk when the buffer
|
|
70
|
+
* is full or the periodic timer fires (5s). Redis stream is written immediately
|
|
71
|
+
* for real-time consumers.
|
|
64
72
|
*/
|
|
65
73
|
append(event: PaymentLedgerEvent): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* @name flush
|
|
76
|
+
* @description Flushes buffered events to disk in a single write.
|
|
77
|
+
*/
|
|
78
|
+
flush(): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* @name close
|
|
81
|
+
* @description Stops periodic flushing and forces any buffered events to disk.
|
|
82
|
+
*/
|
|
83
|
+
close(): Promise<void>;
|
|
84
|
+
private startFlushTimer;
|
|
66
85
|
/**
|
|
67
86
|
* @name recordDecision
|
|
68
87
|
* @description Records that a request requires payment.
|
|
69
88
|
*/
|
|
70
89
|
recordDecision(metadata: PaymentRequestMetadata, decision: PaymentDecision): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* @name recordChallengeReturned
|
|
92
|
+
* @description Records that SAP MCP returned a standards-compatible x402 challenge before any payment was signed.
|
|
93
|
+
*/
|
|
94
|
+
recordChallengeReturned(metadata: PaymentRequestMetadata, decision: PaymentDecision, challengeTransport: 'mcp-json-rpc' | 'http-402'): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* @name recordEligibilityBlocked
|
|
97
|
+
* @description Records a hosted accountless write rejected before monetization, proving that no x402 fee was charged.
|
|
98
|
+
*/
|
|
99
|
+
recordEligibilityBlocked(metadata: PaymentRequestMetadata, toolNames: string[], reason: string, errorMessage?: string): Promise<void>;
|
|
71
100
|
/**
|
|
72
101
|
* @name recordVerified
|
|
73
102
|
* @description Records that an x402 payment was accepted before handler execution.
|
|
74
103
|
*/
|
|
75
104
|
recordVerified(metadata: PaymentRequestMetadata, decision: PaymentDecision): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* @name recordVerificationFailed
|
|
107
|
+
* @description Records that a supplied x402 payment header failed before tool execution or settlement.
|
|
108
|
+
*/
|
|
109
|
+
recordVerificationFailed(metadata: PaymentRequestMetadata, decision: PaymentDecision, reason: string, errorMessage?: string): Promise<void>;
|
|
76
110
|
/**
|
|
77
111
|
* @name recordCanceled
|
|
78
112
|
* @description Records that a verified payment was canceled because MCP execution did not complete successfully.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-ledger.d.ts","sourceRoot":"","sources":["../../src/payments/usage-ledger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAC9B,kBAAkB,GAClB,kBAAkB,GAClB,iBAAiB,GACjB,gBAAgB,GAChB,kBAAkB,CAAC;AAEvB;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;
|
|
1
|
+
{"version":3,"file":"usage-ledger.d.ts","sourceRoot":"","sources":["../../src/payments/usage-ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,10 +16,16 @@ export class UsageLedger {
|
|
|
16
16
|
ledgerPath;
|
|
17
17
|
redis;
|
|
18
18
|
redisStreamKey;
|
|
19
|
+
buffer = [];
|
|
20
|
+
flushTimer;
|
|
21
|
+
flushIntervalMs = 5_000;
|
|
22
|
+
maxBufferSize = 100;
|
|
23
|
+
flushing = false;
|
|
19
24
|
constructor(ledgerPath = join(getDataDir(), 'payments', 'usage-ledger.jsonl'), redis, redisStreamKey = 'sap-mcp:payments:ledger') {
|
|
20
25
|
this.ledgerPath = ledgerPath;
|
|
21
26
|
this.redis = redis;
|
|
22
27
|
this.redisStreamKey = redisStreamKey;
|
|
28
|
+
this.startFlushTimer();
|
|
23
29
|
}
|
|
24
30
|
/**
|
|
25
31
|
* @name createFromEnv
|
|
@@ -44,12 +50,59 @@ export class UsageLedger {
|
|
|
44
50
|
}
|
|
45
51
|
/**
|
|
46
52
|
* @name append
|
|
47
|
-
* @description
|
|
53
|
+
* @description Buffers a payment audit event. Flushes to disk when the buffer
|
|
54
|
+
* is full or the periodic timer fires (5s). Redis stream is written immediately
|
|
55
|
+
* for real-time consumers.
|
|
48
56
|
*/
|
|
49
57
|
async append(event) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
await this.redis?.xadd(this.redisStreamKey, 'MAXLEN', '~', '100000', '*', 'event', event.event, 'requestHash', event.requestHash, 'payload', JSON.stringify(event));
|
|
58
|
+
this.buffer.push(event);
|
|
59
|
+
// Redis stream is written immediately for real-time monitoring
|
|
60
|
+
await this.redis?.xadd(this.redisStreamKey, 'MAXLEN', '~', '100000', '*', 'event', event.event, 'requestHash', event.requestHash, 'payload', JSON.stringify(event)).catch(() => undefined); // don't block on Redis errors
|
|
61
|
+
if (this.buffer.length >= this.maxBufferSize) {
|
|
62
|
+
await this.flush();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @name flush
|
|
67
|
+
* @description Flushes buffered events to disk in a single write.
|
|
68
|
+
*/
|
|
69
|
+
async flush() {
|
|
70
|
+
if (this.flushing || this.buffer.length === 0) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
this.flushing = true;
|
|
74
|
+
const toWrite = this.buffer.splice(0, this.buffer.length);
|
|
75
|
+
try {
|
|
76
|
+
await mkdir(dirname(this.ledgerPath), { recursive: true });
|
|
77
|
+
const lines = toWrite.map(event => JSON.stringify(event)).join('\n') + '\n';
|
|
78
|
+
await appendFile(this.ledgerPath, lines, 'utf-8');
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
// Put events back at the front on failure — don't lose audit data
|
|
82
|
+
this.buffer.unshift(...toWrite);
|
|
83
|
+
logger.warn('Usage ledger flush failed, events buffered for retry', { error, pending: this.buffer.length });
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
this.flushing = false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* @name close
|
|
91
|
+
* @description Stops periodic flushing and forces any buffered events to disk.
|
|
92
|
+
*/
|
|
93
|
+
async close() {
|
|
94
|
+
if (this.flushTimer) {
|
|
95
|
+
clearInterval(this.flushTimer);
|
|
96
|
+
this.flushTimer = undefined;
|
|
97
|
+
}
|
|
98
|
+
await this.flush();
|
|
99
|
+
await this.redis?.quit().catch(() => undefined);
|
|
100
|
+
}
|
|
101
|
+
startFlushTimer() {
|
|
102
|
+
this.flushTimer = setInterval(() => {
|
|
103
|
+
void this.flush().catch(() => undefined);
|
|
104
|
+
}, this.flushIntervalMs);
|
|
105
|
+
this.flushTimer.unref?.();
|
|
53
106
|
}
|
|
54
107
|
/**
|
|
55
108
|
* @name recordDecision
|
|
@@ -72,6 +125,47 @@ export class UsageLedger {
|
|
|
72
125
|
userAgent: metadata.userAgent,
|
|
73
126
|
});
|
|
74
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* @name recordChallengeReturned
|
|
130
|
+
* @description Records that SAP MCP returned a standards-compatible x402 challenge before any payment was signed.
|
|
131
|
+
*/
|
|
132
|
+
async recordChallengeReturned(metadata, decision, challengeTransport) {
|
|
133
|
+
if (!decision.required) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
await this.append({
|
|
137
|
+
event: 'payment_challenge_returned',
|
|
138
|
+
timestamp: new Date().toISOString(),
|
|
139
|
+
requestHash: metadata.requestHash,
|
|
140
|
+
method: metadata.method,
|
|
141
|
+
path: metadata.path,
|
|
142
|
+
toolNames: decision.toolNames,
|
|
143
|
+
priceUsd: decision.priceUsd,
|
|
144
|
+
paymentHeaderPresent: metadata.paymentHeaderPresent,
|
|
145
|
+
remoteAddress: metadata.remoteAddress,
|
|
146
|
+
userAgent: metadata.userAgent,
|
|
147
|
+
challengeTransport,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* @name recordEligibilityBlocked
|
|
152
|
+
* @description Records a hosted accountless write rejected before monetization, proving that no x402 fee was charged.
|
|
153
|
+
*/
|
|
154
|
+
async recordEligibilityBlocked(metadata, toolNames, reason, errorMessage) {
|
|
155
|
+
await this.append({
|
|
156
|
+
event: 'payment_eligibility_blocked',
|
|
157
|
+
timestamp: new Date().toISOString(),
|
|
158
|
+
requestHash: metadata.requestHash,
|
|
159
|
+
method: metadata.method,
|
|
160
|
+
path: metadata.path,
|
|
161
|
+
toolNames,
|
|
162
|
+
paymentHeaderPresent: metadata.paymentHeaderPresent,
|
|
163
|
+
remoteAddress: metadata.remoteAddress,
|
|
164
|
+
userAgent: metadata.userAgent,
|
|
165
|
+
errorReason: reason,
|
|
166
|
+
errorMessage,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
75
169
|
/**
|
|
76
170
|
* @name recordVerified
|
|
77
171
|
* @description Records that an x402 payment was accepted before handler execution.
|
|
@@ -93,6 +187,29 @@ export class UsageLedger {
|
|
|
93
187
|
userAgent: metadata.userAgent,
|
|
94
188
|
});
|
|
95
189
|
}
|
|
190
|
+
/**
|
|
191
|
+
* @name recordVerificationFailed
|
|
192
|
+
* @description Records that a supplied x402 payment header failed before tool execution or settlement.
|
|
193
|
+
*/
|
|
194
|
+
async recordVerificationFailed(metadata, decision, reason, errorMessage) {
|
|
195
|
+
if (!decision.required) {
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
await this.append({
|
|
199
|
+
event: 'payment_verification_failed',
|
|
200
|
+
timestamp: new Date().toISOString(),
|
|
201
|
+
requestHash: metadata.requestHash,
|
|
202
|
+
method: metadata.method,
|
|
203
|
+
path: metadata.path,
|
|
204
|
+
toolNames: decision.toolNames,
|
|
205
|
+
priceUsd: decision.priceUsd,
|
|
206
|
+
paymentHeaderPresent: metadata.paymentHeaderPresent,
|
|
207
|
+
remoteAddress: metadata.remoteAddress,
|
|
208
|
+
userAgent: metadata.userAgent,
|
|
209
|
+
errorReason: reason,
|
|
210
|
+
errorMessage,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
96
213
|
/**
|
|
97
214
|
* @name recordCanceled
|
|
98
215
|
* @description Records that a verified payment was canceled because MCP execution did not complete successfully.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage-ledger.js","sourceRoot":"","sources":["../../src/payments/usage-ledger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"usage-ledger.js","sourceRoot":"","sources":["../../src/payments/usage-ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -275,6 +275,56 @@ interface JsonRpcRequest {
|
|
|
275
275
|
* @description Initializes MCP, obtains x402 payment requirements, signs locally, retries the call, and returns the settlement receipt.
|
|
276
276
|
*/
|
|
277
277
|
export declare function executeX402PaidCall(input: X402PaidCallInput): Promise<X402PaidCallResult>;
|
|
278
|
+
/**
|
|
279
|
+
* @name X402BatchPaidCallInput
|
|
280
|
+
* @description Request shape for batch paid calls with concurrency control.
|
|
281
|
+
*/
|
|
282
|
+
export interface X402BatchPaidCallInput {
|
|
283
|
+
endpoint?: string;
|
|
284
|
+
profileName?: string;
|
|
285
|
+
maxPriceUsd: number;
|
|
286
|
+
maxTotalUsd?: number;
|
|
287
|
+
confirm: boolean;
|
|
288
|
+
maxAttempts?: number;
|
|
289
|
+
concurrency?: number;
|
|
290
|
+
calls: ReadonlyArray<{
|
|
291
|
+
toolName: string;
|
|
292
|
+
arguments?: Record<string, unknown>;
|
|
293
|
+
}>;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* @name X402BatchPaidCallResult
|
|
297
|
+
* @description Result of a batch paid call.
|
|
298
|
+
*/
|
|
299
|
+
export interface X402BatchPaidCallResult {
|
|
300
|
+
success: boolean;
|
|
301
|
+
endpoint: string;
|
|
302
|
+
sessionId: string;
|
|
303
|
+
totalCalls: number;
|
|
304
|
+
succeeded: number;
|
|
305
|
+
failed: number;
|
|
306
|
+
totalAmountUsd: number;
|
|
307
|
+
results: ReadonlyArray<X402PaidCallResult | {
|
|
308
|
+
success: false;
|
|
309
|
+
error: string;
|
|
310
|
+
toolName: string;
|
|
311
|
+
}>;
|
|
312
|
+
audit: {
|
|
313
|
+
profileName: string;
|
|
314
|
+
signerAddress: string;
|
|
315
|
+
totalAmountUsd: number;
|
|
316
|
+
maxTotalUsd: number;
|
|
317
|
+
callCount: number;
|
|
318
|
+
concurrency: number;
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* @name executeX402BatchPaidCall
|
|
323
|
+
* @description Executes multiple paid tool calls in parallel with a shared MCP session.
|
|
324
|
+
* Uses concurrency-limited parallelism (default 3) to avoid overwhelming the hosted server.
|
|
325
|
+
* Each call gets its own x402 challenge and payment — no shared payment across calls.
|
|
326
|
+
*/
|
|
327
|
+
export declare function executeX402BatchPaidCall(input: X402BatchPaidCallInput): Promise<X402BatchPaidCallResult>;
|
|
278
328
|
/**
|
|
279
329
|
* @name executeExternalX402Call
|
|
280
330
|
* @description Calls a generic HTTP x402 endpoint by fetching its challenge, signing locally, retrying with the payment header, and returning the receipt.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"x402-paid-call.d.ts","sourceRoot":"","sources":["../../src/payments/x402-paid-call.ts"],"names":[],"mappings":";AACA;;;GAGG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAI7G,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"x402-paid-call.d.ts","sourceRoot":"","sources":["../../src/payments/x402-paid-call.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ import { Connection, PublicKey } from '@solana/web3.js';
|
|
|
12
12
|
import { loadConfig } from '../config/env.js';
|
|
13
13
|
import { getActiveProfile, getProfileConfigPath } from '../config/profiles.js';
|
|
14
14
|
import { MCP_SERVER_VERSION } from '../core/constants.js';
|
|
15
|
+
import { getCachedSession, cacheSession, invalidateSession } from './mcp-session-cache.js';
|
|
15
16
|
export const DEFAULT_X402_PAID_CALL_ENDPOINT = 'https://mcp.sap.oobeprotocol.ai/mcp';
|
|
16
17
|
const MCP_PROTOCOL_VERSION = '2025-06-18';
|
|
17
18
|
const DEFAULT_MAX_ATTEMPTS = 3;
|
|
@@ -60,6 +61,127 @@ export async function executeX402PaidCall(input) {
|
|
|
60
61
|
}
|
|
61
62
|
throw new Error('x402 paid call exhausted retries.');
|
|
62
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* @name executeX402BatchPaidCall
|
|
66
|
+
* @description Executes multiple paid tool calls in parallel with a shared MCP session.
|
|
67
|
+
* Uses concurrency-limited parallelism (default 3) to avoid overwhelming the hosted server.
|
|
68
|
+
* Each call gets its own x402 challenge and payment — no shared payment across calls.
|
|
69
|
+
*/
|
|
70
|
+
export async function executeX402BatchPaidCall(input) {
|
|
71
|
+
if (!input.confirm) {
|
|
72
|
+
throw new Error('Batch x402 paid calls require confirm: true because they sign payment payloads.');
|
|
73
|
+
}
|
|
74
|
+
if (!Number.isFinite(input.maxPriceUsd) || input.maxPriceUsd <= 0) {
|
|
75
|
+
throw new Error('Batch x402 paid calls require a positive maxPriceUsd spending cap.');
|
|
76
|
+
}
|
|
77
|
+
if (!input.calls || input.calls.length === 0) {
|
|
78
|
+
throw new Error('Batch x402 paid calls require at least one call.');
|
|
79
|
+
}
|
|
80
|
+
const endpoint = input.endpoint ?? DEFAULT_X402_PAID_CALL_ENDPOINT;
|
|
81
|
+
const profileName = input.profileName ?? getActiveProfile();
|
|
82
|
+
const config = loadPaymentProfile(input.profileName);
|
|
83
|
+
const signer = await loadClientSigner(config);
|
|
84
|
+
const httpClient = createHttpPaymentClient(signer);
|
|
85
|
+
const sessionId = await initializeMcpSession(endpoint);
|
|
86
|
+
const maxAttempts = normalizeMaxAttempts(input.maxAttempts);
|
|
87
|
+
const maxTotalUsd = normalizeBatchMaxTotalUsd(input.maxTotalUsd, input.maxPriceUsd, input.calls.length);
|
|
88
|
+
const enforceExplicitTotalCap = input.maxTotalUsd !== undefined;
|
|
89
|
+
const concurrency = enforceExplicitTotalCap ? 1 : Math.max(1, Math.min(input.concurrency ?? 3, 8));
|
|
90
|
+
const signerAddress = String(signer.address);
|
|
91
|
+
// Execute calls with limited concurrency
|
|
92
|
+
const results = [];
|
|
93
|
+
const queue = Array.from(input.calls.entries());
|
|
94
|
+
let reservedAmountUsd = 0;
|
|
95
|
+
async function processOne(index) {
|
|
96
|
+
while (index < queue.length) {
|
|
97
|
+
const [, call] = queue[index];
|
|
98
|
+
if (reservedAmountUsd + input.maxPriceUsd > maxTotalUsd) {
|
|
99
|
+
results[index] = {
|
|
100
|
+
success: false,
|
|
101
|
+
error: `batch_max_total_exceeded: refusing ${call.toolName}; per-call cap ${formatClientUsd(input.maxPriceUsd)} would exceed batch cap ${formatClientUsd(maxTotalUsd)}.`,
|
|
102
|
+
toolName: call.toolName,
|
|
103
|
+
};
|
|
104
|
+
index += concurrency;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
reservedAmountUsd += input.maxPriceUsd;
|
|
108
|
+
const requestBody = buildToolCallRequest(call.toolName, call.arguments);
|
|
109
|
+
const transientRetries = [];
|
|
110
|
+
let lastError;
|
|
111
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
|
|
112
|
+
try {
|
|
113
|
+
const result = await executePaidAttempt({
|
|
114
|
+
endpoint,
|
|
115
|
+
sessionId,
|
|
116
|
+
signerAddress,
|
|
117
|
+
httpClient,
|
|
118
|
+
requestBody,
|
|
119
|
+
profileName,
|
|
120
|
+
maxPriceUsd: input.maxPriceUsd,
|
|
121
|
+
attempt,
|
|
122
|
+
transientRetries,
|
|
123
|
+
});
|
|
124
|
+
results[index] = result;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
const retry = classifyPaidCallRetry(error);
|
|
129
|
+
if (!retry.retryable || attempt >= maxAttempts) {
|
|
130
|
+
lastError = error instanceof Error ? error.message : String(error);
|
|
131
|
+
results[index] = {
|
|
132
|
+
success: false,
|
|
133
|
+
error: lastError,
|
|
134
|
+
toolName: call.toolName,
|
|
135
|
+
};
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
transientRetries.push(retry.reason);
|
|
139
|
+
await sleep(RETRY_BASE_DELAY_MS * attempt);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
index += concurrency;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Launch concurrent workers
|
|
146
|
+
const workers = Array.from({ length: Math.min(concurrency, queue.length) }, (_, i) => processOne(i));
|
|
147
|
+
await Promise.all(workers);
|
|
148
|
+
const succeeded = results.filter(r => r.success).length;
|
|
149
|
+
const totalAmountUsd = results.reduce((sum, r) => sum + ('payment' in r ? r.payment.amountUsd : 0), 0);
|
|
150
|
+
return {
|
|
151
|
+
success: succeeded === results.length,
|
|
152
|
+
endpoint,
|
|
153
|
+
sessionId,
|
|
154
|
+
totalCalls: input.calls.length,
|
|
155
|
+
succeeded,
|
|
156
|
+
failed: results.length - succeeded,
|
|
157
|
+
totalAmountUsd,
|
|
158
|
+
results,
|
|
159
|
+
audit: {
|
|
160
|
+
profileName,
|
|
161
|
+
signerAddress,
|
|
162
|
+
totalAmountUsd,
|
|
163
|
+
maxTotalUsd,
|
|
164
|
+
callCount: input.calls.length,
|
|
165
|
+
concurrency,
|
|
166
|
+
},
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
function normalizeBatchMaxTotalUsd(value, maxPriceUsd, callCount) {
|
|
170
|
+
const defaultTotal = maxPriceUsd * callCount;
|
|
171
|
+
if (value === undefined) {
|
|
172
|
+
return defaultTotal;
|
|
173
|
+
}
|
|
174
|
+
if (!Number.isFinite(value) || value <= 0) {
|
|
175
|
+
throw new Error('Batch x402 paid calls require maxTotalUsd to be positive when provided.');
|
|
176
|
+
}
|
|
177
|
+
if (value < maxPriceUsd) {
|
|
178
|
+
throw new Error('Batch x402 paid calls require maxTotalUsd to be at least maxPriceUsd for one call.');
|
|
179
|
+
}
|
|
180
|
+
return value;
|
|
181
|
+
}
|
|
182
|
+
function formatClientUsd(value) {
|
|
183
|
+
return `$${value.toFixed(6).replace(/0+$/, '').replace(/\.$/, '')}`;
|
|
184
|
+
}
|
|
63
185
|
/**
|
|
64
186
|
* @name executeExternalX402Call
|
|
65
187
|
* @description Calls a generic HTTP x402 endpoint by fetching its challenge, signing locally, retrying with the payment header, and returning the receipt.
|
|
@@ -270,6 +392,15 @@ export function inspectX402Receipt(receiptHeader) {
|
|
|
270
392
|
}
|
|
271
393
|
async function executePaidAttempt(options) {
|
|
272
394
|
const unpaid = await postMcp(options.endpoint, options.requestBody, options.sessionId);
|
|
395
|
+
// If the cached session expired server-side, invalidate and re-initialize once
|
|
396
|
+
if (unpaid.response.status === 404 || isSessionNotFound(unpaid.body)) {
|
|
397
|
+
if (options.sessionRefreshAttempted) {
|
|
398
|
+
throw new Error(`MCP session refresh failed: ${JSON.stringify(unpaid.body)}`);
|
|
399
|
+
}
|
|
400
|
+
invalidateSession(options.endpoint);
|
|
401
|
+
const freshSession = await initializeMcpSession(options.endpoint);
|
|
402
|
+
return executePaidAttempt({ ...options, sessionId: freshSession, sessionRefreshAttempted: true });
|
|
403
|
+
}
|
|
273
404
|
const paymentRequired = getPaymentRequiredResponse(options.httpClient, unpaid.response, unpaid.body);
|
|
274
405
|
const selectedRequirements = selectSingleRequirement(paymentRequired, options.maxPriceUsd);
|
|
275
406
|
const amountUsd = paymentRequirementsAmountUsd(selectedRequirements);
|
|
@@ -467,6 +598,11 @@ function createHttpPaymentClient(signer) {
|
|
|
467
598
|
return new x402HTTPClient(client);
|
|
468
599
|
}
|
|
469
600
|
async function initializeMcpSession(endpoint) {
|
|
601
|
+
// Check cache first — reuse session if still valid (5min TTL)
|
|
602
|
+
const cached = getCachedSession(endpoint);
|
|
603
|
+
if (cached) {
|
|
604
|
+
return cached;
|
|
605
|
+
}
|
|
470
606
|
const initBody = {
|
|
471
607
|
jsonrpc: '2.0',
|
|
472
608
|
id: 'sap-x402-paid-call-init',
|
|
@@ -490,6 +626,8 @@ async function initializeMcpSession(endpoint) {
|
|
|
490
626
|
throw new Error('Hosted MCP initialize response did not include mcp-session-id.');
|
|
491
627
|
}
|
|
492
628
|
await postMcp(endpoint, initializedBody, sessionId);
|
|
629
|
+
// Cache the session for reuse by subsequent paid calls
|
|
630
|
+
cacheSession(endpoint, sessionId);
|
|
493
631
|
return sessionId;
|
|
494
632
|
}
|
|
495
633
|
function buildToolCallRequest(toolName, args) {
|
|
@@ -719,6 +857,30 @@ function safeResponseHeaders(headers) {
|
|
|
719
857
|
function classifyPaidCallRetry(error) {
|
|
720
858
|
const message = error instanceof Error ? error.message : String(error);
|
|
721
859
|
const normalized = message.toLowerCase();
|
|
860
|
+
// Explicit maxPriceUsd exceeded check — not retryable, agent needs to raise the cap
|
|
861
|
+
if (normalized.includes('exceeds maxpriceusd')) {
|
|
862
|
+
return {
|
|
863
|
+
retryable: false,
|
|
864
|
+
reason: 'max_price_exceeded',
|
|
865
|
+
hint: 'The tool cost exceeds the maxPriceUsd cap. Use sap_estimate_tool_cost to get the expected cost, then retry with maxPriceUsd set to at least 1.5x the estimated price.',
|
|
866
|
+
};
|
|
867
|
+
}
|
|
868
|
+
// Session not found — not retryable with same session, but the caller should re-initialize
|
|
869
|
+
if (normalized.includes('mcp_session_not_found') || normalized.includes('mcp_session_required')) {
|
|
870
|
+
return {
|
|
871
|
+
retryable: false,
|
|
872
|
+
reason: 'session_expired',
|
|
873
|
+
hint: 'The MCP session expired. The session cache has been invalidated. Retry with a fresh session.',
|
|
874
|
+
};
|
|
875
|
+
}
|
|
876
|
+
// Hosted local signer required — not retryable via x402, use local sap_payments
|
|
877
|
+
if (normalized.includes('hosted_local_signer_required')) {
|
|
878
|
+
return {
|
|
879
|
+
retryable: false,
|
|
880
|
+
reason: 'local_signer_required',
|
|
881
|
+
hint: 'This tool requires a local Solana signature. Do NOT use sap_payments_call_paid_tool. Use the local sap_payments equivalent (e.g. sap_payments_register_agent, sap_payments_finalize_transaction).',
|
|
882
|
+
};
|
|
883
|
+
}
|
|
722
884
|
const retryable = containsAny(normalized, [
|
|
723
885
|
'blockhashnotfound',
|
|
724
886
|
'blockhash not found',
|
|
@@ -757,6 +919,15 @@ function sleep(ms) {
|
|
|
757
919
|
function isJsonRpcError(value) {
|
|
758
920
|
return value !== null && typeof value === 'object' && 'error' in value;
|
|
759
921
|
}
|
|
922
|
+
function isSessionNotFound(body) {
|
|
923
|
+
if (!isJsonRpcError(body))
|
|
924
|
+
return false;
|
|
925
|
+
const error = body.error;
|
|
926
|
+
if (!error || typeof error !== 'object')
|
|
927
|
+
return false;
|
|
928
|
+
const message = error.message;
|
|
929
|
+
return message === 'mcp_session_not_found' || message === 'mcp_session_required';
|
|
930
|
+
}
|
|
760
931
|
function networkFromRpcUrl(value) {
|
|
761
932
|
if (!value) {
|
|
762
933
|
return 'mainnet-beta';
|