@oobe-protocol-labs/sap-mcp-server 0.9.15 → 0.9.20
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 +227 -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 +2 -0
- package/dist/payments/pricing.d.ts.map +1 -1
- package/dist/payments/pricing.js +126 -10
- 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 +102 -0
- package/dist/premium/webhook-engine.d.ts.map +1 -0
- package/dist/premium/webhook-engine.js +382 -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 +34 -1
- package/dist/server/server-metadata.d.ts.map +1 -1
- package/dist/server/server-metadata.js +35 -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.d.ts.map +1 -1
- package/dist/tools/agent-start-tool.js +210 -2
- 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 +6 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +7 -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 +732 -0
- package/dist/tools/premium-tools.js.map +1 -0
- package/dist/tools/register-tools.d.ts.map +1 -1
- package/dist/tools/register-tools.js +9 -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 +191 -13
- package/dist/tools/sap-sdk-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 +20 -4
- package/docs/07_ENDPOINTS_AND_CLIENTS.md +4 -1
- package/docs/09_TOOLS_SKILLS_AND_AGENT_GUIDE.md +16 -5
- 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/README.md +12 -0
- package/package.json +8 -6
- package/server.json +3 -3
- package/skills/README.md +10 -2
- package/skills/sap-agent-registry/SKILL.md +27 -6
- package/skills/sap-discovery-indexing/SKILL.md +11 -0
- package/skills/sap-mcp/SKILL.md +49 -16
- package/skills/sap-mcp/TOOL_REFERENCE.md +20 -7
- package/skills/sap-operations/SKILL.md +11 -0
- package/skills/sap-payments-x402/SKILL.md +30 -8
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name premium/builtin-plugins
|
|
3
|
+
* @description Built-in premium plugin definitions and discovery helpers.
|
|
4
|
+
*
|
|
5
|
+
* Defines the core built-in public premium plugin shipped with SAP MCP:
|
|
6
|
+
* 1. `sap-premium-market-data` — Jupiter quotes, Pyth price ticks, threshold webhooks.
|
|
7
|
+
*
|
|
8
|
+
* Additional built-in plugin arrays are imported and merged by `listPremiumPlugins()`:
|
|
9
|
+
* - `TRADING_PREMIUM_PLUGINS` — Trading streams.
|
|
10
|
+
* - `MEME_RADAR_PREMIUM_PLUGINS` — Meme token listing, sentiment, rugpull, volume.
|
|
11
|
+
* - `TECH_FUNDAMENTALS_PREMIUM_PLUGINS` — GitHub activity, TVL changes, tokenomics analysis.
|
|
12
|
+
*
|
|
13
|
+
* Also provides discovery helpers (`listPremiumPlugins`, `listPremiumCapabilities`,
|
|
14
|
+
* `findPremiumCapability`) that merge built-in plugins with privately loaded
|
|
15
|
+
* manifests, and status helpers (`publicPremiumProviderStatus`,
|
|
16
|
+
* `premiumPrivatePluginSupport`) used by the remote server and MCP tools.
|
|
17
|
+
*
|
|
18
|
+
* @flow
|
|
19
|
+
* 1. MCP tool `sap_premium_plugin_catalog` → `listPremiumPlugins()` →
|
|
20
|
+
* merges built-in + private manifests, filters by visibility, returns clones.
|
|
21
|
+
* 2. MCP tool `sap_premium_create_session_plan` → `findPremiumCapability()` →
|
|
22
|
+
* resolves a specific plugin/capability pair for session planning.
|
|
23
|
+
* 3. Remote server (`remote/server.ts`) → `publicPremiumProviderStatus()` →
|
|
24
|
+
* exposes which provider env vars are configured.
|
|
25
|
+
* 4. Remote server → `premiumPrivatePluginSupport()` → reports private plugin
|
|
26
|
+
* loader configuration and safety contract.
|
|
27
|
+
*
|
|
28
|
+
* @module premium/builtin-plugins
|
|
29
|
+
*/
|
|
30
|
+
import { loadPrivatePremiumPluginManifests, loadPrivatePremiumPluginReport, premiumDiscoveryIncludesPrivate, } from './private-manifest-loader.js';
|
|
31
|
+
import { TRADING_PREMIUM_PLUGINS } from './trading-capabilities.js';
|
|
32
|
+
import { MEME_RADAR_PREMIUM_PLUGINS } from './meme-radar-capabilities.js';
|
|
33
|
+
import { TECH_FUNDAMENTALS_PREMIUM_PLUGINS } from './tech-fundamentals-capabilities.js';
|
|
34
|
+
/* -------------------------------------------------------------------------- */
|
|
35
|
+
/* Shared JSON Schema fragments */
|
|
36
|
+
/* -------------------------------------------------------------------------- */
|
|
37
|
+
/**
|
|
38
|
+
* @description Reusable Solana address field schema. Enforces base58 length
|
|
39
|
+
* bounds and explicitly forbids keypair bytes. Exported as `premiumAddressField`
|
|
40
|
+
* for reuse by MCP tool definitions.
|
|
41
|
+
*/
|
|
42
|
+
const addressField = {
|
|
43
|
+
type: 'string',
|
|
44
|
+
minLength: 32,
|
|
45
|
+
maxLength: 64,
|
|
46
|
+
description: 'Solana wallet, mint, program, or account public key in base58 form. Do not pass keypair bytes.',
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* @description Input schema for stream capabilities. Requires a stable
|
|
50
|
+
* `subscriptionKey` for de-duplication and allows free-form `filters`.
|
|
51
|
+
*/
|
|
52
|
+
const streamInputSchema = {
|
|
53
|
+
type: 'object',
|
|
54
|
+
required: ['subscriptionKey'],
|
|
55
|
+
properties: {
|
|
56
|
+
subscriptionKey: {
|
|
57
|
+
type: 'string',
|
|
58
|
+
minLength: 3,
|
|
59
|
+
description: 'Stable subscription key chosen by the agent runtime so duplicate opens can be de-duplicated.',
|
|
60
|
+
},
|
|
61
|
+
filters: {
|
|
62
|
+
type: 'object',
|
|
63
|
+
additionalProperties: true,
|
|
64
|
+
description: 'Narrow filters such as mint, wallet, protocol, agentId, capability, priceFeedId, or threshold.',
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
additionalProperties: false,
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* @description Output schema for stream capabilities. Each event carries a
|
|
71
|
+
* stable id, type, ISO timestamp, and a versioned provider-specific payload.
|
|
72
|
+
*/
|
|
73
|
+
const streamOutputSchema = {
|
|
74
|
+
type: 'object',
|
|
75
|
+
required: ['eventId', 'eventType', 'observedAt', 'payload'],
|
|
76
|
+
properties: {
|
|
77
|
+
eventId: {
|
|
78
|
+
type: 'string',
|
|
79
|
+
description: 'Stable event id suitable for idempotent processing and replay detection.',
|
|
80
|
+
},
|
|
81
|
+
eventType: {
|
|
82
|
+
type: 'string',
|
|
83
|
+
description: 'Premium stream event type emitted by this capability.',
|
|
84
|
+
},
|
|
85
|
+
observedAt: {
|
|
86
|
+
type: 'string',
|
|
87
|
+
format: 'date-time',
|
|
88
|
+
description: 'ISO timestamp when SAP MCP observed or emitted the event.',
|
|
89
|
+
},
|
|
90
|
+
payload: {
|
|
91
|
+
type: 'object',
|
|
92
|
+
additionalProperties: true,
|
|
93
|
+
description: 'Provider-specific event payload. Schemas are versioned per premium plugin manifest.',
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
additionalProperties: false,
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* @description Input schema for webhook capabilities. Requires an HTTPS
|
|
100
|
+
* `targetUrl` (localhost/private networks rejected by providers) and a
|
|
101
|
+
* non-empty `events` array. Optional `signingPublicKey` for signature verification.
|
|
102
|
+
*/
|
|
103
|
+
const webhookInputSchema = {
|
|
104
|
+
type: 'object',
|
|
105
|
+
required: ['targetUrl', 'events'],
|
|
106
|
+
properties: {
|
|
107
|
+
targetUrl: {
|
|
108
|
+
type: 'string',
|
|
109
|
+
format: 'uri',
|
|
110
|
+
description: 'HTTPS webhook target owned by the buyer. Localhost and private network URLs are rejected by providers.',
|
|
111
|
+
},
|
|
112
|
+
events: {
|
|
113
|
+
type: 'array',
|
|
114
|
+
minItems: 1,
|
|
115
|
+
items: { type: 'string', description: 'Event id listed in the capability delivery contract.' },
|
|
116
|
+
description: 'Exact event ids to deliver to this webhook subscription.',
|
|
117
|
+
},
|
|
118
|
+
signingPublicKey: {
|
|
119
|
+
type: 'string',
|
|
120
|
+
description: 'Optional public key used by the consumer to verify webhook signatures.',
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
additionalProperties: false,
|
|
124
|
+
};
|
|
125
|
+
/**
|
|
126
|
+
* @description Output schema for webhook deliveries. Includes a delivery id,
|
|
127
|
+
* event type, timestamp, provider signature, and versioned payload.
|
|
128
|
+
*/
|
|
129
|
+
const webhookOutputSchema = {
|
|
130
|
+
type: 'object',
|
|
131
|
+
required: ['deliveryId', 'eventType', 'deliveredAt', 'signature', 'payload'],
|
|
132
|
+
properties: {
|
|
133
|
+
deliveryId: { type: 'string', description: 'Idempotent webhook delivery id.' },
|
|
134
|
+
eventType: { type: 'string', description: 'Delivered premium event type.' },
|
|
135
|
+
deliveredAt: { type: 'string', format: 'date-time', description: 'ISO timestamp for delivery attempt.' },
|
|
136
|
+
signature: { type: 'string', description: 'Provider signature over deliveryId, deliveredAt, and payload.' },
|
|
137
|
+
payload: { type: 'object', additionalProperties: true, description: 'Versioned event payload.' },
|
|
138
|
+
},
|
|
139
|
+
additionalProperties: false,
|
|
140
|
+
};
|
|
141
|
+
/* -------------------------------------------------------------------------- */
|
|
142
|
+
/* Capability factory helpers */
|
|
143
|
+
/* -------------------------------------------------------------------------- */
|
|
144
|
+
/**
|
|
145
|
+
* @name streamCapability
|
|
146
|
+
* @description Factory for building a `stream`-type premium capability definition.
|
|
147
|
+
*
|
|
148
|
+
* Sets status to `requires-provider` when any env vars are declared, otherwise
|
|
149
|
+
* `planned`. Uses `x402-per-minute` pricing with 1–120 minute bounds and
|
|
150
|
+
* MCP streamable HTTP transport with 750ms latency target and 300s replay window.
|
|
151
|
+
*
|
|
152
|
+
* @param id - Capability id (e.g. `jupiter.quote.delta`).
|
|
153
|
+
* @param title - Human-readable label.
|
|
154
|
+
* @param description - Agent-facing description with payment boundary.
|
|
155
|
+
* @param events - Event ids this stream can emit.
|
|
156
|
+
* @param unitPriceUsd - Price per minute in USD.
|
|
157
|
+
* @param providerEnv - Env var names required for provider readiness.
|
|
158
|
+
* @returns A complete `PremiumCapabilityDefinition` with type `stream`.
|
|
159
|
+
*
|
|
160
|
+
* @internal
|
|
161
|
+
*/
|
|
162
|
+
function streamCapability(id, title, description, events, unitPriceUsd, providerEnv) {
|
|
163
|
+
return {
|
|
164
|
+
id,
|
|
165
|
+
type: 'stream',
|
|
166
|
+
title,
|
|
167
|
+
description,
|
|
168
|
+
status: providerEnv.length > 0 ? 'requires-provider' : 'planned',
|
|
169
|
+
requiresProvider: providerEnv.length > 0,
|
|
170
|
+
providerEnv,
|
|
171
|
+
inputSchema: streamInputSchema,
|
|
172
|
+
outputSchema: streamOutputSchema,
|
|
173
|
+
pricing: {
|
|
174
|
+
tier: 'premium-stream',
|
|
175
|
+
model: 'x402-per-minute',
|
|
176
|
+
unit: 'minute',
|
|
177
|
+
unitPriceUsd,
|
|
178
|
+
minUnits: 1,
|
|
179
|
+
maxUnits: 120,
|
|
180
|
+
settlement: 'x402',
|
|
181
|
+
},
|
|
182
|
+
delivery: {
|
|
183
|
+
transport: 'mcp-streamable-http',
|
|
184
|
+
events,
|
|
185
|
+
latencyTargetMs: 750,
|
|
186
|
+
replayWindowSeconds: 300,
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* @name webhookCapability
|
|
192
|
+
* @description Factory for building a `webhook`-type premium capability definition.
|
|
193
|
+
*
|
|
194
|
+
* Sets status to `requires-provider` when any env vars are declared, otherwise
|
|
195
|
+
* `planned`. Uses `x402-per-event` pricing with 10–100 000 event bounds and
|
|
196
|
+
* webhook HTTP transport with 1500ms latency target and 900s replay window.
|
|
197
|
+
*
|
|
198
|
+
* @param id - Capability id (e.g. `price.threshold.crossed`).
|
|
199
|
+
* @param title - Human-readable label.
|
|
200
|
+
* @param description - Agent-facing description with payment boundary.
|
|
201
|
+
* @param events - Event ids this webhook can deliver.
|
|
202
|
+
* @param unitPriceUsd - Price per event in USD.
|
|
203
|
+
* @param providerEnv - Env var names required for provider readiness.
|
|
204
|
+
* @returns A complete `PremiumCapabilityDefinition` with type `webhook`.
|
|
205
|
+
*
|
|
206
|
+
* @internal
|
|
207
|
+
*/
|
|
208
|
+
function webhookCapability(id, title, description, events, unitPriceUsd, providerEnv) {
|
|
209
|
+
return {
|
|
210
|
+
id,
|
|
211
|
+
type: 'webhook',
|
|
212
|
+
title,
|
|
213
|
+
description,
|
|
214
|
+
status: providerEnv.length > 0 ? 'requires-provider' : 'planned',
|
|
215
|
+
requiresProvider: providerEnv.length > 0,
|
|
216
|
+
providerEnv,
|
|
217
|
+
inputSchema: webhookInputSchema,
|
|
218
|
+
outputSchema: webhookOutputSchema,
|
|
219
|
+
pricing: {
|
|
220
|
+
tier: 'premium-webhook',
|
|
221
|
+
model: 'x402-per-event',
|
|
222
|
+
unit: 'event',
|
|
223
|
+
unitPriceUsd,
|
|
224
|
+
minUnits: 10,
|
|
225
|
+
maxUnits: 100_000,
|
|
226
|
+
settlement: 'x402',
|
|
227
|
+
},
|
|
228
|
+
delivery: {
|
|
229
|
+
transport: 'webhook-http',
|
|
230
|
+
events,
|
|
231
|
+
latencyTargetMs: 1_500,
|
|
232
|
+
replayWindowSeconds: 900,
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
/* -------------------------------------------------------------------------- */
|
|
237
|
+
/* Built-in plugin catalog */
|
|
238
|
+
/* -------------------------------------------------------------------------- */
|
|
239
|
+
/**
|
|
240
|
+
* @name BUILTIN_PREMIUM_PLUGINS
|
|
241
|
+
* @description The built-in public premium plugins shipped with SAP MCP.
|
|
242
|
+
*
|
|
243
|
+
* These are always available (no env vars needed for discovery) and serve as
|
|
244
|
+
* the reference implementations for the premium plugin manifest format.
|
|
245
|
+
* Additional plugin arrays (`TRADING_PREMIUM_PLUGINS`,
|
|
246
|
+
* `MEME_RADAR_PREMIUM_PLUGINS`, `TECH_FUNDAMENTALS_PREMIUM_PLUGINS`) are merged
|
|
247
|
+
* in `listPremiumPlugins()`.
|
|
248
|
+
*
|
|
249
|
+
* @type {PremiumPluginManifest[]}
|
|
250
|
+
*
|
|
251
|
+
* @usedBy `listPremiumPlugins()` as the base catalog merged with private manifests.
|
|
252
|
+
*/
|
|
253
|
+
export const BUILTIN_PREMIUM_PLUGINS = [
|
|
254
|
+
{
|
|
255
|
+
id: 'sap-premium-market-data',
|
|
256
|
+
version: '0.1.0',
|
|
257
|
+
title: 'SAP Premium Market Data',
|
|
258
|
+
description: 'Paid low-latency market stream contracts for quotes, prices, route changes, and threshold events.',
|
|
259
|
+
publisher: 'OOBE Protocol',
|
|
260
|
+
visibility: 'public',
|
|
261
|
+
capabilities: [
|
|
262
|
+
streamCapability('jupiter.quote.delta', 'Jupiter quote delta stream', 'Streams quote deltas for exact mints and amounts so agents can react without repeated broad polling.', ['quote.delta', 'route.changed', 'price.impact.changed'], 0.02, ['SAP_MCP_PREMIUM_JUPITER_STREAM_URL']),
|
|
263
|
+
streamCapability('pyth.price.tick', 'Pyth price tick stream', 'Streams price ticks for explicit Pyth feed ids with bounded replay and x402 metering.', ['price.tick', 'confidence.changed', 'feed.stale'], 0.015, ['SAP_MCP_PREMIUM_PYTH_STREAM_URL']),
|
|
264
|
+
webhookCapability('price.threshold.crossed', 'Price threshold webhook', 'Delivers signed HTTPS callbacks when configured mint/feed thresholds cross.', ['price.threshold.crossed'], 0.001, ['SAP_MCP_PREMIUM_WEBHOOK_SIGNER']),
|
|
265
|
+
],
|
|
266
|
+
},
|
|
267
|
+
];
|
|
268
|
+
/**
|
|
269
|
+
* @name clonePlugin
|
|
270
|
+
* @description Deep-clone a plugin manifest via JSON serialization.
|
|
271
|
+
*
|
|
272
|
+
* Ensures callers cannot mutate the internal built-in or loaded manifest objects.
|
|
273
|
+
*
|
|
274
|
+
* @param plugin - The manifest to clone.
|
|
275
|
+
* @returns A deep copy of the manifest.
|
|
276
|
+
*
|
|
277
|
+
* @internal
|
|
278
|
+
*/
|
|
279
|
+
function clonePlugin(plugin) {
|
|
280
|
+
return JSON.parse(JSON.stringify(plugin));
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* @name listPremiumPlugins
|
|
284
|
+
* @description Return all discoverable premium plugins (built-in + private).
|
|
285
|
+
*
|
|
286
|
+
* Merges `BUILTIN_PREMIUM_PLUGINS` with privately loaded manifests, filters by
|
|
287
|
+
* visibility (public always; private/enterprise only when `includePrivate` is
|
|
288
|
+
* true or `SAP_MCP_PREMIUM_EXPOSE_PRIVATE_DISCOVERY=true`), and returns deep
|
|
289
|
+
* clones to prevent external mutation.
|
|
290
|
+
*
|
|
291
|
+
* @param options - Discovery options (see `PremiumPluginListOptions`).
|
|
292
|
+
* @returns Array of `PremiumPluginManifest` clones.
|
|
293
|
+
*
|
|
294
|
+
* @usedBy
|
|
295
|
+
* - `premium-tools.ts` → MCP tool `sap_premium_plugin_catalog`.
|
|
296
|
+
* - `remote/server.ts` → landing page plugin listing.
|
|
297
|
+
* - `listPremiumCapabilities`, `findPremiumCapability` (internally).
|
|
298
|
+
*/
|
|
299
|
+
export function listPremiumPlugins(options = {}) {
|
|
300
|
+
const includePrivate = options.includePrivate ?? premiumDiscoveryIncludesPrivate();
|
|
301
|
+
const plugins = [
|
|
302
|
+
...BUILTIN_PREMIUM_PLUGINS,
|
|
303
|
+
...TRADING_PREMIUM_PLUGINS,
|
|
304
|
+
...MEME_RADAR_PREMIUM_PLUGINS,
|
|
305
|
+
...TECH_FUNDAMENTALS_PREMIUM_PLUGINS,
|
|
306
|
+
...loadPrivatePremiumPluginManifests(),
|
|
307
|
+
];
|
|
308
|
+
return plugins
|
|
309
|
+
.filter(plugin => plugin.visibility === 'public' || includePrivate)
|
|
310
|
+
.map(clonePlugin);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* @name listPremiumCapabilities
|
|
314
|
+
* @description Return all capabilities across all discoverable plugins,
|
|
315
|
+
* optionally filtered by capability type.
|
|
316
|
+
*
|
|
317
|
+
* @param type - Optional filter: `stream`, `webhook`, or `tool`.
|
|
318
|
+
* @param options - Discovery options (see `PremiumPluginListOptions`).
|
|
319
|
+
* @returns Array of `PremiumCapabilityDefinition` clones (shallow-copied).
|
|
320
|
+
*
|
|
321
|
+
* @usedBy `publicPremiumProviderStatus` (internally), MCP tools.
|
|
322
|
+
*/
|
|
323
|
+
export function listPremiumCapabilities(type, options = {}) {
|
|
324
|
+
return listPremiumPlugins(options).flatMap(plugin => plugin.capabilities
|
|
325
|
+
.filter(capability => !type || capability.type === type)
|
|
326
|
+
.map(capability => ({ ...capability })));
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* @name findPremiumCapability
|
|
330
|
+
* @description Resolve a specific plugin/capability pair by id.
|
|
331
|
+
*
|
|
332
|
+
* @param pluginId - The plugin id to search for.
|
|
333
|
+
* @param capabilityId - The capability id within that plugin.
|
|
334
|
+
* @param type - Optional capability type filter.
|
|
335
|
+
* @param options - Discovery options (see `PremiumPluginListOptions`).
|
|
336
|
+
* @returns `{ plugin, capability }` if found, otherwise `null`.
|
|
337
|
+
*
|
|
338
|
+
* @usedBy `session-manager.ts:createPremiumSessionPlan` → resolves the
|
|
339
|
+
* capability for pricing bounds and provider env checks.
|
|
340
|
+
*/
|
|
341
|
+
export function findPremiumCapability(pluginId, capabilityId, type, options = {}) {
|
|
342
|
+
const plugin = listPremiumPlugins(options).find(candidate => candidate.id === pluginId);
|
|
343
|
+
const capability = plugin?.capabilities.find(candidate => candidate.id === capabilityId && (!type || candidate.type === type));
|
|
344
|
+
return plugin && capability ? { plugin, capability } : null;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* @name publicPremiumProviderStatus
|
|
348
|
+
* @description Return a map of all provider env var names to their current
|
|
349
|
+
* readiness state (true/false based on `process.env`).
|
|
350
|
+
*
|
|
351
|
+
* Used by the remote server to expose which premium providers are configured
|
|
352
|
+
* without revealing secret values.
|
|
353
|
+
*
|
|
354
|
+
* @returns Record keyed by env var name, value is boolean readiness.
|
|
355
|
+
*
|
|
356
|
+
* @usedBy `remote/server.ts` → provider status endpoint.
|
|
357
|
+
*/
|
|
358
|
+
export function publicPremiumProviderStatus() {
|
|
359
|
+
const envNames = new Set(listPremiumCapabilities().flatMap(capability => capability.providerEnv));
|
|
360
|
+
return Object.fromEntries([...envNames].sort().map(name => [name, Boolean(process.env[name])]));
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* @name premiumPrivatePluginSupport
|
|
364
|
+
* @description Return a diagnostic object describing the private plugin
|
|
365
|
+
* loader configuration, loaded/rejected manifest counts, and the safety contract.
|
|
366
|
+
*
|
|
367
|
+
* Used by the remote server and MCP tools to report private plugin support
|
|
368
|
+
* status without exposing any enterprise code or secrets.
|
|
369
|
+
*
|
|
370
|
+
* @returns Object with `enabled`, `exposePrivateDiscovery`, `loadedManifestCount`,
|
|
371
|
+
* `rejectedManifestCount`, `loaderEnv`, `contract`, and `safety` fields.
|
|
372
|
+
*
|
|
373
|
+
* @usedBy `remote/server.ts`, `premium-tools.ts`.
|
|
374
|
+
*/
|
|
375
|
+
export function premiumPrivatePluginSupport() {
|
|
376
|
+
const privateReport = loadPrivatePremiumPluginReport();
|
|
377
|
+
return {
|
|
378
|
+
enabled: process.env.SAP_MCP_ENABLE_PREMIUM_PLUGINS === 'true',
|
|
379
|
+
exposePrivateDiscovery: premiumDiscoveryIncludesPrivate(),
|
|
380
|
+
loadedManifestCount: privateReport.loadedManifests.length,
|
|
381
|
+
rejectedManifestCount: privateReport.rejectedManifests.length,
|
|
382
|
+
loaderEnv: ['SAP_MCP_ENABLE_PREMIUM_PLUGINS', 'SAP_MCP_PLUGIN_DIR', 'SAP_MCP_PREMIUM_EXPOSE_PRIVATE_DISCOVERY'],
|
|
383
|
+
contract: 'Private premium plugins must ship a manifest that passes sap_premium_validate_plugin_manifest. The public SAP MCP repo only exposes the contract; enterprise plugin code and provider secrets stay outside the open repo.',
|
|
384
|
+
safety: 'Plugin manifests are data only. SAP MCP does not execute plugin code from user input, and provider secrets are never exposed through public metadata.',
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* @name premiumAddressField
|
|
389
|
+
* @description Re-exported reusable Solana address JSON Schema fragment.
|
|
390
|
+
*
|
|
391
|
+
* Used by MCP tool definitions that accept a Solana public key argument.
|
|
392
|
+
*/
|
|
393
|
+
export const premiumAddressField = addressField;
|
|
394
|
+
//# sourceMappingURL=builtin-plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtin-plugins.js","sourceRoot":"","sources":["../../src/premium/builtin-plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name premium/event-store
|
|
3
|
+
* @description In-memory event store for premium event replay and idempotency.
|
|
4
|
+
*
|
|
5
|
+
* Every event delivered through the stream broker or webhook engine is recorded
|
|
6
|
+
* here. The store supports:
|
|
7
|
+
* - append with `eventId` deduplication (idempotency)
|
|
8
|
+
* - query by session, event type, or time window
|
|
9
|
+
* - automatic eviction of events past their replay window
|
|
10
|
+
*
|
|
11
|
+
* @flow
|
|
12
|
+
* 1. `stream-broker.ts` / `webhook-engine.ts` deliver an event →
|
|
13
|
+
* `appendEvent()` stores it (dedup by `eventId`).
|
|
14
|
+
* 2. `stream-broker.ts` reconnects a client → `getEvents()` replays past
|
|
15
|
+
* events within the replay window.
|
|
16
|
+
* 3. Pruning runs on every append/query to evict events past their
|
|
17
|
+
* `replayWindowSeconds` per capability.
|
|
18
|
+
*
|
|
19
|
+
* @module premium/event-store
|
|
20
|
+
*/
|
|
21
|
+
import type { PremiumEventQuery, PremiumEventRecord } from './types.js';
|
|
22
|
+
/**
|
|
23
|
+
* @name appendEvent
|
|
24
|
+
* @description Append a premium event to the store with idempotency.
|
|
25
|
+
*
|
|
26
|
+
* If an event with the same `eventId` already exists, it is not duplicated.
|
|
27
|
+
* The store is pruned after each append.
|
|
28
|
+
*
|
|
29
|
+
* @param record - The event record to append.
|
|
30
|
+
* @returns True if the event was newly inserted, false if it was a duplicate.
|
|
31
|
+
*
|
|
32
|
+
* @usedBy `stream-broker.ts`, `webhook-engine.ts`
|
|
33
|
+
*/
|
|
34
|
+
export declare function appendEvent(record: PremiumEventRecord): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* @name getEvents
|
|
37
|
+
* @description Query events from the store with optional filters.
|
|
38
|
+
*
|
|
39
|
+
* @param query - Filter criteria (sessionId, eventType, since, limit).
|
|
40
|
+
* @returns Array of matching event records, ordered by `deliveredAt` ascending.
|
|
41
|
+
*
|
|
42
|
+
* @usedBy `stream-broker.ts` (replay), `premium-tools.ts` (audit)
|
|
43
|
+
*/
|
|
44
|
+
export declare function getEvents(query?: PremiumEventQuery): PremiumEventRecord[];
|
|
45
|
+
/**
|
|
46
|
+
* @name getEventCount
|
|
47
|
+
* @description Return the total number of stored events.
|
|
48
|
+
*
|
|
49
|
+
* @usedBy `metrics.ts`
|
|
50
|
+
*/
|
|
51
|
+
export declare function getEventCount(): number;
|
|
52
|
+
/**
|
|
53
|
+
* @name clearAllEvents
|
|
54
|
+
* @description Clear all events from the store.
|
|
55
|
+
*
|
|
56
|
+
* Used in tests and during graceful server shutdown.
|
|
57
|
+
*
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
export declare function clearAllEvents(): void;
|
|
61
|
+
//# sourceMappingURL=event-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-store.d.ts","sourceRoot":"","sources":["../../src/premium/event-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAoBxE;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAM/D;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,GAAE,iBAAsB,GAAG,kBAAkB,EAAE,CAc7E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AA+BD;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name premium/event-store
|
|
3
|
+
* @description In-memory event store for premium event replay and idempotency.
|
|
4
|
+
*
|
|
5
|
+
* Every event delivered through the stream broker or webhook engine is recorded
|
|
6
|
+
* here. The store supports:
|
|
7
|
+
* - append with `eventId` deduplication (idempotency)
|
|
8
|
+
* - query by session, event type, or time window
|
|
9
|
+
* - automatic eviction of events past their replay window
|
|
10
|
+
*
|
|
11
|
+
* @flow
|
|
12
|
+
* 1. `stream-broker.ts` / `webhook-engine.ts` deliver an event →
|
|
13
|
+
* `appendEvent()` stores it (dedup by `eventId`).
|
|
14
|
+
* 2. `stream-broker.ts` reconnects a client → `getEvents()` replays past
|
|
15
|
+
* events within the replay window.
|
|
16
|
+
* 3. Pruning runs on every append/query to evict events past their
|
|
17
|
+
* `replayWindowSeconds` per capability.
|
|
18
|
+
*
|
|
19
|
+
* @module premium/event-store
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* @description In-memory event records keyed by `eventId` for O(1) dedup.
|
|
23
|
+
*/
|
|
24
|
+
const eventMap = new Map();
|
|
25
|
+
/**
|
|
26
|
+
* @description Hard cap on stored events to prevent unbounded memory growth.
|
|
27
|
+
*
|
|
28
|
+
* Default: 500_000 (tuned for a 312GB RAM production server).
|
|
29
|
+
* Each event is ~1KB, so 500K events ≈ 500MB.
|
|
30
|
+
* Override via `SAP_MCP_PREMIUM_MAX_EVENTS` env var.
|
|
31
|
+
*/
|
|
32
|
+
const MAX_STORED_EVENTS = (() => {
|
|
33
|
+
const raw = process.env.SAP_MCP_PREMIUM_MAX_EVENTS;
|
|
34
|
+
const parsed = Number(raw);
|
|
35
|
+
return Number.isFinite(parsed) && parsed > 0 ? Math.trunc(parsed) : 500_000;
|
|
36
|
+
})();
|
|
37
|
+
/**
|
|
38
|
+
* @name appendEvent
|
|
39
|
+
* @description Append a premium event to the store with idempotency.
|
|
40
|
+
*
|
|
41
|
+
* If an event with the same `eventId` already exists, it is not duplicated.
|
|
42
|
+
* The store is pruned after each append.
|
|
43
|
+
*
|
|
44
|
+
* @param record - The event record to append.
|
|
45
|
+
* @returns True if the event was newly inserted, false if it was a duplicate.
|
|
46
|
+
*
|
|
47
|
+
* @usedBy `stream-broker.ts`, `webhook-engine.ts`
|
|
48
|
+
*/
|
|
49
|
+
export function appendEvent(record) {
|
|
50
|
+
if (eventMap.has(record.eventId))
|
|
51
|
+
return false;
|
|
52
|
+
eventMap.set(record.eventId, record);
|
|
53
|
+
pruneOldEvents();
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* @name getEvents
|
|
58
|
+
* @description Query events from the store with optional filters.
|
|
59
|
+
*
|
|
60
|
+
* @param query - Filter criteria (sessionId, eventType, since, limit).
|
|
61
|
+
* @returns Array of matching event records, ordered by `deliveredAt` ascending.
|
|
62
|
+
*
|
|
63
|
+
* @usedBy `stream-broker.ts` (replay), `premium-tools.ts` (audit)
|
|
64
|
+
*/
|
|
65
|
+
export function getEvents(query = {}) {
|
|
66
|
+
const limit = query.limit ?? 1_000;
|
|
67
|
+
const sinceMs = query.since ? new Date(query.since).getTime() : 0;
|
|
68
|
+
const results = [];
|
|
69
|
+
for (const record of eventMap.values()) {
|
|
70
|
+
if (query.sessionId && record.sessionId !== query.sessionId)
|
|
71
|
+
continue;
|
|
72
|
+
if (query.eventType && record.eventType !== query.eventType)
|
|
73
|
+
continue;
|
|
74
|
+
if (sinceMs > 0 && new Date(record.deliveredAt).getTime() < sinceMs)
|
|
75
|
+
continue;
|
|
76
|
+
results.push(record);
|
|
77
|
+
if (results.length >= limit)
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
return results.sort((a, b) => new Date(a.deliveredAt).getTime() - new Date(b.deliveredAt).getTime());
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* @name getEventCount
|
|
84
|
+
* @description Return the total number of stored events.
|
|
85
|
+
*
|
|
86
|
+
* @usedBy `metrics.ts`
|
|
87
|
+
*/
|
|
88
|
+
export function getEventCount() {
|
|
89
|
+
return eventMap.size;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* @name pruneOldEvents
|
|
93
|
+
* @description Evict events older than 24 hours or when the store exceeds
|
|
94
|
+
* `MAX_STORED_EVENTS`. The oldest events are evicted first.
|
|
95
|
+
*
|
|
96
|
+
* @internal
|
|
97
|
+
*/
|
|
98
|
+
function pruneOldEvents() {
|
|
99
|
+
if (eventMap.size <= MAX_STORED_EVENTS) {
|
|
100
|
+
// Also evict events older than 24 hours.
|
|
101
|
+
const cutoff = Date.now() - 24 * 60 * 60 * 1000;
|
|
102
|
+
for (const [eventId, record] of eventMap.entries()) {
|
|
103
|
+
if (new Date(record.deliveredAt).getTime() < cutoff) {
|
|
104
|
+
eventMap.delete(eventId);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Over cap: evict oldest entries by insertion order.
|
|
110
|
+
const toEvict = eventMap.size - MAX_STORED_EVENTS;
|
|
111
|
+
let evicted = 0;
|
|
112
|
+
for (const eventId of eventMap.keys()) {
|
|
113
|
+
if (evicted >= toEvict)
|
|
114
|
+
break;
|
|
115
|
+
eventMap.delete(eventId);
|
|
116
|
+
evicted++;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* @name clearAllEvents
|
|
121
|
+
* @description Clear all events from the store.
|
|
122
|
+
*
|
|
123
|
+
* Used in tests and during graceful server shutdown.
|
|
124
|
+
*
|
|
125
|
+
* @internal
|
|
126
|
+
*/
|
|
127
|
+
export function clearAllEvents() {
|
|
128
|
+
eventMap.clear();
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=event-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event-store.js","sourceRoot":"","sources":["../../src/premium/event-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name premium/index
|
|
3
|
+
* @description Barrel export for the SAP MCP Premium plugin subsystem.
|
|
4
|
+
*
|
|
5
|
+
* Re-exports every public module in the premium layer so external consumers
|
|
6
|
+
* (MCP tools, remote server, tests) can import from a single entry point:
|
|
7
|
+
*
|
|
8
|
+
* ```ts
|
|
9
|
+
* import {
|
|
10
|
+
* listPremiumPlugins,
|
|
11
|
+
* createPremiumSessionPlan,
|
|
12
|
+
* activatePremiumSession,
|
|
13
|
+
* startStream,
|
|
14
|
+
* streamEvents,
|
|
15
|
+
* registerWebhook,
|
|
16
|
+
* getPremiumMetrics,
|
|
17
|
+
* validatePremiumPluginManifest,
|
|
18
|
+
* type PremiumPluginManifest,
|
|
19
|
+
* } from '../premium/index.js';
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @flow
|
|
23
|
+
* Import order matters only for readability, not for runtime:
|
|
24
|
+
* 1. `builtin-plugins` — Built-in plugin definitions and discovery helpers.
|
|
25
|
+
* 2. `manifest-builder` — Template generation for custom plugin authors.
|
|
26
|
+
* 3. `private-manifest-loader` — Filesystem loader for enterprise manifests.
|
|
27
|
+
* 4. `plugin-validator` — Manifest validation against strict schema rules.
|
|
28
|
+
* 5. `session-manager` — In-memory session plan lifecycle.
|
|
29
|
+
* 6. `activation-manager` — x402/pay.sh receipt binding and session activation.
|
|
30
|
+
* 7. `event-store` — Replay and idempotency store for delivered events.
|
|
31
|
+
* 8. `provider-bridge` — Dynamic loader for private provider adapters.
|
|
32
|
+
* 9. `stream-broker` — SSE stream delivery for premium real-time events.
|
|
33
|
+
* 10. `webhook-engine` — Signed webhook delivery for premium event callbacks.
|
|
34
|
+
* 11. `metrics` — Premium subsystem metrics snapshot.
|
|
35
|
+
* 12. `types` — All TypeScript type declarations.
|
|
36
|
+
*
|
|
37
|
+
* @module premium/index
|
|
38
|
+
*/
|
|
39
|
+
export * from './builtin-plugins.js';
|
|
40
|
+
export * from './trading-capabilities.js';
|
|
41
|
+
export * from './meme-radar-capabilities.js';
|
|
42
|
+
export * from './tech-fundamentals-capabilities.js';
|
|
43
|
+
export * from './manifest-builder.js';
|
|
44
|
+
export * from './private-manifest-loader.js';
|
|
45
|
+
export * from './plugin-validator.js';
|
|
46
|
+
export * from './session-manager.js';
|
|
47
|
+
export * from './activation-manager.js';
|
|
48
|
+
export * from './event-store.js';
|
|
49
|
+
export * from './provider-bridge.js';
|
|
50
|
+
export * from './stream-broker.js';
|
|
51
|
+
export * from './webhook-engine.js';
|
|
52
|
+
export * from './metrics.js';
|
|
53
|
+
export * from './types.js';
|
|
54
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/premium/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,cAAc,sBAAsB,CAAC;AACrC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,qCAAqC,CAAC;AACpD,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|