@oobe-protocol-labs/sap-mcp-server 0.9.1 → 0.9.3
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 +732 -1
- package/README.md +9 -3
- package/USER_DOCS/00_START_HERE.md +51 -4
- package/USER_DOCS/01_HOSTED_REMOTE_MCP.md +1 -1
- package/USER_DOCS/03_PAYMENTS_X402_PAYSH.md +32 -3
- package/USER_DOCS/04_CLIENT_CONFIGS.md +14 -7
- package/USER_DOCS/05_SKILLS_AND_TOOLS.md +68 -8
- package/USER_DOCS/06_DESKTOP_GUI_WIZARD.md +20 -14
- package/USER_DOCS/07_SMITHERY_AND_MARKETPLACES.md +7 -0
- package/config.example.json +5 -4
- package/config.schema.json +9 -4
- 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 +232 -25
- package/dist/adapters/mcp/sdk-compat.js.map +1 -1
- package/dist/adapters/mcp/tool-response.d.ts +51 -3
- package/dist/adapters/mcp/tool-response.d.ts.map +1 -1
- package/dist/adapters/mcp/tool-response.js +48 -3
- 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 +15 -10
- 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 +136 -33
- package/dist/config/mcp-client-injection.js.map +1 -1
- package/dist/config/paths.d.ts +14 -1
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +20 -1
- 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/wizard.d.ts +6 -0
- package/dist/config/wizard.d.ts.map +1 -1
- package/dist/config/wizard.js +102 -18
- package/dist/config/wizard.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 +14 -1
- package/dist/config-cli.js.map +1 -1
- package/dist/core/constants.d.ts +38 -6
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +49 -6
- 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/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/memory/async-processor.d.ts +107 -0
- package/dist/memory/async-processor.d.ts.map +1 -0
- package/dist/memory/async-processor.js +204 -0
- package/dist/memory/async-processor.js.map +1 -0
- package/dist/memory/auto-record.d.ts +47 -0
- package/dist/memory/auto-record.d.ts.map +1 -0
- package/dist/memory/auto-record.js +133 -0
- package/dist/memory/auto-record.js.map +1 -0
- package/dist/memory/database.d.ts +103 -0
- package/dist/memory/database.d.ts.map +1 -0
- package/dist/memory/database.js +337 -0
- package/dist/memory/database.js.map +1 -0
- package/dist/memory/hermes-bridge.d.ts +70 -0
- package/dist/memory/hermes-bridge.d.ts.map +1 -0
- package/dist/memory/hermes-bridge.js +155 -0
- package/dist/memory/hermes-bridge.js.map +1 -0
- package/dist/memory/index.d.ts +23 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +22 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/memory-store.d.ts +76 -0
- package/dist/memory/memory-store.d.ts.map +1 -0
- package/dist/memory/memory-store.js +231 -0
- package/dist/memory/memory-store.js.map +1 -0
- package/dist/memory/stream-buffer-store.d.ts +69 -0
- package/dist/memory/stream-buffer-store.d.ts.map +1 -0
- package/dist/memory/stream-buffer-store.js +182 -0
- package/dist/memory/stream-buffer-store.js.map +1 -0
- package/dist/memory/tool-call-store.d.ts +68 -0
- package/dist/memory/tool-call-store.d.ts.map +1 -0
- package/dist/memory/tool-call-store.js +189 -0
- package/dist/memory/tool-call-store.js.map +1 -0
- package/dist/memory/types.d.ts +197 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +15 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/memory/utils.d.ts +30 -0
- package/dist/memory/utils.d.ts.map +1 -0
- package/dist/memory/utils.js +47 -0
- package/dist/memory/utils.js.map +1 -0
- 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 +22 -0
- package/dist/payments/hosted-tool-eligibility.d.ts.map +1 -0
- package/dist/payments/hosted-tool-eligibility.js +173 -0
- package/dist/payments/hosted-tool-eligibility.js.map +1 -0
- package/dist/payments/index.d.ts +2 -2
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +1 -1
- package/dist/payments/index.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 +33 -0
- package/dist/payments/monetization-gate.d.ts.map +1 -1
- package/dist/payments/monetization-gate.js +124 -12
- package/dist/payments/monetization-gate.js.map +1 -1
- package/dist/payments/pricing.d.ts +31 -0
- package/dist/payments/pricing.d.ts.map +1 -1
- package/dist/payments/pricing.js +317 -19
- 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 +121 -0
- package/dist/payments/x402-paid-call.d.ts.map +1 -1
- package/dist/payments/x402-paid-call.js +428 -1
- 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 +165 -0
- package/dist/premium/builtin-plugins.d.ts.map +1 -0
- package/dist/premium/builtin-plugins.js +422 -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 +133 -0
- package/dist/premium/provider-bridge.d.ts.map +1 -0
- package/dist/premium/provider-bridge.js +349 -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 +516 -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 +20 -16
- 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 +7 -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 +16 -14
- 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 +22 -23
- 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 +347 -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 +23 -4
- package/dist/remote/public-home/sections.js.map +1 -1
- package/dist/remote/public-home/types.d.ts +9 -0
- package/dist/remote/public-home/types.d.ts.map +1 -1
- package/dist/remote/server.d.ts +20 -0
- package/dist/remote/server.d.ts.map +1 -1
- package/dist/remote/server.js +370 -9
- 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 +38 -6
- 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/tool-permissions.d.ts.map +1 -1
- package/dist/security/tool-permissions.js +12 -0
- package/dist/security/tool-permissions.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 +20 -4
- 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 +19 -3
- package/dist/signer/local-keypair-signer.d.ts.map +1 -1
- package/dist/signer/local-keypair-signer.js +24 -4
- 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/strategies/strategy-store.d.ts +82 -0
- package/dist/strategies/strategy-store.d.ts.map +1 -0
- package/dist/strategies/strategy-store.js +165 -0
- package/dist/strategies/strategy-store.js.map +1 -0
- package/dist/tools/agent-start-tool.d.ts.map +1 -1
- package/dist/tools/agent-start-tool.js +481 -5
- 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 +32 -7
- 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 +8 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +11 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/magicblock-tools.d.ts +31 -6
- package/dist/tools/magicblock-tools.d.ts.map +1 -1
- package/dist/tools/magicblock-tools.js +178 -53
- package/dist/tools/magicblock-tools.js.map +1 -1
- package/dist/tools/memory-tools.d.ts +26 -0
- package/dist/tools/memory-tools.d.ts.map +1 -0
- package/dist/tools/memory-tools.js +533 -0
- package/dist/tools/memory-tools.js.map +1 -0
- 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 +1102 -0
- package/dist/tools/premium-tools.js.map +1 -0
- package/dist/tools/profile-tools.d.ts.map +1 -1
- package/dist/tools/profile-tools.js +18 -1
- package/dist/tools/profile-tools.js.map +1 -1
- 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 +304 -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 +17 -0
- package/dist/tools/register-tools.js.map +1 -1
- package/dist/tools/sap-sdk-tools.d.ts +420 -1
- package/dist/tools/sap-sdk-tools.d.ts.map +1 -1
- package/dist/tools/sap-sdk-tools.js +1548 -127
- package/dist/tools/sap-sdk-tools.js.map +1 -1
- package/dist/tools/sap-sns-tools.d.ts +2 -2
- package/dist/tools/sap-sns-tools.d.ts.map +1 -1
- package/dist/tools/sap-sns-tools.js +12 -8
- package/dist/tools/sap-sns-tools.js.map +1 -1
- package/dist/tools/skills-tools.d.ts +16 -0
- package/dist/tools/skills-tools.d.ts.map +1 -1
- package/dist/tools/skills-tools.js +282 -5
- package/dist/tools/skills-tools.js.map +1 -1
- package/dist/tools/tool-aliases.d.ts.map +1 -1
- package/dist/tools/tool-aliases.js +7 -0
- package/dist/tools/tool-aliases.js.map +1 -1
- package/dist/tools/transaction-tools.d.ts +135 -0
- package/dist/tools/transaction-tools.d.ts.map +1 -1
- package/dist/tools/transaction-tools.js +515 -16
- package/dist/tools/transaction-tools.js.map +1 -1
- package/dist/tools/x402-paid-call-tool.d.ts.map +1 -1
- package/dist/tools/x402-paid-call-tool.js +756 -23
- 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/dist/wizard-core/desktop-flow.d.ts.map +1 -1
- package/dist/wizard-core/desktop-flow.js +4 -2
- package/dist/wizard-core/desktop-flow.js.map +1 -1
- package/docs/03_CONFIGURATION_AND_WIZARD.md +5 -3
- package/docs/06_PAYMENTS_X402_AND_PAYSH.md +82 -4
- package/docs/07_ENDPOINTS_AND_CLIENTS.md +7 -3
- package/docs/09_TOOLS_SKILLS_AND_AGENT_GUIDE.md +21 -3
- package/docs/14_DESKTOP_WIZARD_RELEASE.md +8 -6
- package/docs/16_SAP_AGENT_IDENTITY_PIPELINE.md +304 -0
- package/docs/18_PREMIUM_PLUGIN_RUNTIME.md +108 -0
- package/docs/BRANCH_AND_CI.md +67 -0
- package/docs/README.md +19 -2
- package/docs/magicblock-tools.md +70 -29
- package/package.json +10 -6
- package/server.json +3 -3
- package/skills/README.md +12 -2
- package/skills/sap-agent-registry/SKILL.md +99 -4
- package/skills/sap-defi/SKILL.md +8 -4
- package/skills/sap-discovery-indexing/SKILL.md +26 -4
- package/skills/sap-escrow-settlement/SKILL.md +22 -4
- package/skills/sap-mcp/SKILL.md +140 -22
- package/skills/sap-mcp/TOOL_REFERENCE.md +47 -7
- package/skills/sap-nft-metaplex/SKILL.md +22 -0
- package/skills/sap-operations/SKILL.md +32 -3
- package/skills/sap-payments-x402/SKILL.md +85 -8
- package/skills/sap-sns/SKILL.md +32 -10
- package/smithery.config.schema.json +7 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name premium/webhook-engine
|
|
3
|
+
* @description Signed webhook delivery engine for premium event callbacks.
|
|
4
|
+
*
|
|
5
|
+
* After a session is activated, the webhook engine registers a buyer-owned
|
|
6
|
+
* HTTPS endpoint, subscribes to the provider for matching events, signs each
|
|
7
|
+
* delivery with HMAC-SHA256, and dispatches it via HTTP POST.
|
|
8
|
+
*
|
|
9
|
+
* The engine enforces:
|
|
10
|
+
* - Event filtering: only delivers event ids listed in the subscription.
|
|
11
|
+
* - URL validation: rejects localhost, private networks, and non-HTTPS URLs.
|
|
12
|
+
* - Signing: HMAC-SHA256 over `{deliveryId, deliveredAt, payload}` using
|
|
13
|
+
* the `SAP_MCP_PREMIUM_WEBHOOK_SIGNER` env var.
|
|
14
|
+
* - Retry: up to 3 attempts with exponential backoff for non-2xx responses.
|
|
15
|
+
* - Unit quota: decrements after each successful delivery.
|
|
16
|
+
* - Idempotency: deduplicates via `eventId` in the event store.
|
|
17
|
+
*
|
|
18
|
+
* @flow
|
|
19
|
+
* 1. Buyer calls `POST /premium/webhook/register` with targetUrl + events.
|
|
20
|
+
* 2. → `registerWebhook()` validates URL, creates subscription.
|
|
21
|
+
* 3. Engine subscribes to provider, receives events matching the subscription.
|
|
22
|
+
* 4. For each matching event: sign, POST to targetUrl, record delivery.
|
|
23
|
+
* 5. Buyer can check delivery status via `getWebhookDeliveryStatus()`.
|
|
24
|
+
*
|
|
25
|
+
* @module premium/webhook-engine
|
|
26
|
+
*/
|
|
27
|
+
import type { PremiumWebhookDelivery, PremiumWebhookSubscription } from './types.js';
|
|
28
|
+
/**
|
|
29
|
+
* @name registerWebhook
|
|
30
|
+
* @description Register a webhook subscription for an active premium session.
|
|
31
|
+
*
|
|
32
|
+
* @param sessionId - The activated premium session id.
|
|
33
|
+
* @param targetUrl - HTTPS endpoint owned by the buyer.
|
|
34
|
+
* @param events - Exact event ids to deliver.
|
|
35
|
+
* @param signingPublicKey - Optional buyer public key for signature verification.
|
|
36
|
+
* @returns The `PremiumWebhookSubscription`, or `null` if the session is not
|
|
37
|
+
* active or the URL is invalid.
|
|
38
|
+
*
|
|
39
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_register`,
|
|
40
|
+
* `remote/server.ts` → `POST /premium/webhook/register`
|
|
41
|
+
*/
|
|
42
|
+
export declare function registerWebhook(sessionId: string, targetUrl: string, events: string[], signingPublicKey?: string): Promise<PremiumWebhookSubscription | null>;
|
|
43
|
+
/**
|
|
44
|
+
* @name RELAY_TARGET_URL_EXPORT
|
|
45
|
+
* @description Exported relay sentinel so premium-tools and tests can reference it
|
|
46
|
+
* without duplicating the literal.
|
|
47
|
+
*/
|
|
48
|
+
export declare const PREMIUM_WEBHOOK_RELAY_TARGET_URL = "relay://buffer";
|
|
49
|
+
/**
|
|
50
|
+
* @name registerWebhookRelay
|
|
51
|
+
* @description Register a buffer-only (relay) webhook subscription for an active
|
|
52
|
+
* premium session.
|
|
53
|
+
*
|
|
54
|
+
* Unlike `registerWebhook`, this does not require a public HTTPS endpoint.
|
|
55
|
+
* Events matching the subscription are appended to the event store by the
|
|
56
|
+
* delivery loop and the agent consumes them via `sap_premium_stream_poll` or
|
|
57
|
+
* `sap_premium_stream_flush`. This solves the core problem for agents running
|
|
58
|
+
* locally without a publicly reachable HTTPS callback URL.
|
|
59
|
+
*
|
|
60
|
+
* @param sessionId - The activated premium session id.
|
|
61
|
+
* @param events - Exact event ids to buffer.
|
|
62
|
+
* @returns The `PremiumWebhookSubscription`, or `null` if the session is not
|
|
63
|
+
* active or no events were provided.
|
|
64
|
+
*
|
|
65
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_relay`
|
|
66
|
+
*/
|
|
67
|
+
export declare function registerWebhookRelay(sessionId: string, events: string[]): Promise<PremiumWebhookSubscription | null>;
|
|
68
|
+
/**
|
|
69
|
+
* @name getRelaySubscriptionsForSession
|
|
70
|
+
* @description Return all active relay (buffer-only) webhook subscriptions for a
|
|
71
|
+
* session id. Used by the relay status tool to report buffered event counts.
|
|
72
|
+
*
|
|
73
|
+
* @param sessionId - The premium session id.
|
|
74
|
+
* @returns Array of relay subscriptions for the session.
|
|
75
|
+
*
|
|
76
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_relay_status`
|
|
77
|
+
*/
|
|
78
|
+
export declare function getRelaySubscriptionsForSession(sessionId: string): PremiumWebhookSubscription[];
|
|
79
|
+
/**
|
|
80
|
+
* @name startWebhookDelivery
|
|
81
|
+
* @description Start the webhook delivery loop for a subscription.
|
|
82
|
+
*
|
|
83
|
+
* Subscribes to the provider, receives events, filters by the subscription's
|
|
84
|
+
* event list, signs and delivers each matching event, and decrements the
|
|
85
|
+
* session quota. Stops when the quota reaches zero or the subscription is
|
|
86
|
+
* deactivated.
|
|
87
|
+
*
|
|
88
|
+
* @param subscription - The webhook subscription to deliver for.
|
|
89
|
+
*
|
|
90
|
+
* @usedBy `remote/server.ts` → webhook delivery worker
|
|
91
|
+
*/
|
|
92
|
+
export declare function startWebhookDelivery(subscription: PremiumWebhookSubscription): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* @name unregisterWebhook
|
|
95
|
+
* @description Deactivate and remove a webhook subscription.
|
|
96
|
+
*
|
|
97
|
+
* @param subscriptionId - The webhook subscription id.
|
|
98
|
+
* @returns True if the subscription was found and removed.
|
|
99
|
+
*
|
|
100
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_unregister`
|
|
101
|
+
*/
|
|
102
|
+
export declare function unregisterWebhook(subscriptionId: string): boolean;
|
|
103
|
+
/**
|
|
104
|
+
* @name getWebhookSubscription
|
|
105
|
+
* @description Retrieve a webhook subscription by id.
|
|
106
|
+
*
|
|
107
|
+
* @param subscriptionId - The webhook subscription id.
|
|
108
|
+
* @returns The subscription, or `null` if not found.
|
|
109
|
+
*
|
|
110
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_status`
|
|
111
|
+
*/
|
|
112
|
+
export declare function getWebhookSubscription(subscriptionId: string): PremiumWebhookSubscription | null;
|
|
113
|
+
/**
|
|
114
|
+
* @name getWebhookDeliveries
|
|
115
|
+
* @description Retrieve delivery records for a subscription.
|
|
116
|
+
*
|
|
117
|
+
* @param subscriptionId - The webhook subscription id.
|
|
118
|
+
* @param limit - Maximum records to return (default 50).
|
|
119
|
+
* @returns Array of `PremiumWebhookDelivery` records.
|
|
120
|
+
*
|
|
121
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_status`
|
|
122
|
+
*/
|
|
123
|
+
export declare function getWebhookDeliveries(subscriptionId: string, limit?: number): PremiumWebhookDelivery[];
|
|
124
|
+
/**
|
|
125
|
+
* @name getActiveWebhookCount
|
|
126
|
+
* @description Return the number of currently active webhook subscriptions.
|
|
127
|
+
*
|
|
128
|
+
* @usedBy `metrics.ts`
|
|
129
|
+
*/
|
|
130
|
+
export declare function getActiveWebhookCount(): number;
|
|
131
|
+
/**
|
|
132
|
+
* @name stopAllWebhooks
|
|
133
|
+
* @description Deactivate all webhook subscriptions. Called during graceful shutdown.
|
|
134
|
+
*
|
|
135
|
+
* @usedBy `remote/server.ts` shutdown handler
|
|
136
|
+
*/
|
|
137
|
+
export declare function stopAllWebhooks(): void;
|
|
138
|
+
//# sourceMappingURL=webhook-engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-engine.d.ts","sourceRoot":"","sources":["../../src/premium/webhook-engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAMH,OAAO,KAAK,EAAE,sBAAsB,EAAE,0BAA0B,EAAiB,MAAM,YAAY,CAAC;AAwPpG;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,EAChB,gBAAgB,CAAC,EAAE,MAAM,GACxB,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAwB5C;AAED;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,mBAAmB,CAAC;AAEjE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC,CAuB5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAAC,SAAS,EAAE,MAAM,GAAG,0BAA0B,EAAE,CAQ/F;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ElG;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAMjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,GAAG,0BAA0B,GAAG,IAAI,CAGhG;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,sBAAsB,EAAE,CASjG;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAM9C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC"}
|
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @name premium/webhook-engine
|
|
3
|
+
* @description Signed webhook delivery engine for premium event callbacks.
|
|
4
|
+
*
|
|
5
|
+
* After a session is activated, the webhook engine registers a buyer-owned
|
|
6
|
+
* HTTPS endpoint, subscribes to the provider for matching events, signs each
|
|
7
|
+
* delivery with HMAC-SHA256, and dispatches it via HTTP POST.
|
|
8
|
+
*
|
|
9
|
+
* The engine enforces:
|
|
10
|
+
* - Event filtering: only delivers event ids listed in the subscription.
|
|
11
|
+
* - URL validation: rejects localhost, private networks, and non-HTTPS URLs.
|
|
12
|
+
* - Signing: HMAC-SHA256 over `{deliveryId, deliveredAt, payload}` using
|
|
13
|
+
* the `SAP_MCP_PREMIUM_WEBHOOK_SIGNER` env var.
|
|
14
|
+
* - Retry: up to 3 attempts with exponential backoff for non-2xx responses.
|
|
15
|
+
* - Unit quota: decrements after each successful delivery.
|
|
16
|
+
* - Idempotency: deduplicates via `eventId` in the event store.
|
|
17
|
+
*
|
|
18
|
+
* @flow
|
|
19
|
+
* 1. Buyer calls `POST /premium/webhook/register` with targetUrl + events.
|
|
20
|
+
* 2. → `registerWebhook()` validates URL, creates subscription.
|
|
21
|
+
* 3. Engine subscribes to provider, receives events matching the subscription.
|
|
22
|
+
* 4. For each matching event: sign, POST to targetUrl, record delivery.
|
|
23
|
+
* 5. Buyer can check delivery status via `getWebhookDeliveryStatus()`.
|
|
24
|
+
*
|
|
25
|
+
* @module premium/webhook-engine
|
|
26
|
+
*/
|
|
27
|
+
import { createHmac, randomUUID } from 'node:crypto';
|
|
28
|
+
import { request } from 'node:https';
|
|
29
|
+
import { request as httpRequest } from 'node:http';
|
|
30
|
+
import { URL } from 'node:url';
|
|
31
|
+
import { getPremiumSession, decrementSessionQuota, closeSession } from './session-manager.js';
|
|
32
|
+
import { subscribeToProvider } from './provider-bridge.js';
|
|
33
|
+
import { appendEvent } from './event-store.js';
|
|
34
|
+
/**
|
|
35
|
+
* @description Registry of active webhook subscriptions keyed by subscription id.
|
|
36
|
+
*/
|
|
37
|
+
const webhookSubscriptions = new Map();
|
|
38
|
+
/**
|
|
39
|
+
* @description Delivery attempt records keyed by delivery id.
|
|
40
|
+
*/
|
|
41
|
+
const deliveryRecords = new Map();
|
|
42
|
+
/**
|
|
43
|
+
* @description Hard cap on stored delivery records.
|
|
44
|
+
*
|
|
45
|
+
* Default: 100_000 (tuned for a 312GB RAM production server).
|
|
46
|
+
* Each record is ~512B, so 100K records ≈ 50MB.
|
|
47
|
+
* Override via `SAP_MCP_PREMIUM_MAX_DELIVERIES` env var.
|
|
48
|
+
*/
|
|
49
|
+
const MAX_DELIVERY_RECORDS = (() => {
|
|
50
|
+
const raw = process.env.SAP_MCP_PREMIUM_MAX_DELIVERIES;
|
|
51
|
+
const parsed = Number(raw);
|
|
52
|
+
return Number.isFinite(parsed) && parsed > 0 ? Math.trunc(parsed) : 100_000;
|
|
53
|
+
})();
|
|
54
|
+
/**
|
|
55
|
+
* @description Maximum retry attempts per delivery.
|
|
56
|
+
*/
|
|
57
|
+
const MAX_RETRIES = 3;
|
|
58
|
+
/**
|
|
59
|
+
* @description Base delay for exponential backoff in milliseconds.
|
|
60
|
+
*/
|
|
61
|
+
const RETRY_BASE_DELAY_MS = 500;
|
|
62
|
+
/**
|
|
63
|
+
* @name RELAY_TARGET_URL
|
|
64
|
+
* @description Sentinel target URL for buffer-only (relay) webhook subscriptions.
|
|
65
|
+
*
|
|
66
|
+
* When a subscription's `targetUrl` equals this value, the webhook engine skips
|
|
67
|
+
* HTTP POST delivery entirely. Events are still appended to the event store via
|
|
68
|
+
* `appendEvent()`, and the agent consumes them through
|
|
69
|
+
* `sap_premium_stream_poll` / `sap_premium_stream_flush`. This eliminates the
|
|
70
|
+
* need for a public HTTPS endpoint — agents running locally can receive webhook
|
|
71
|
+
* events by polling the server-side buffer.
|
|
72
|
+
*
|
|
73
|
+
* @internal
|
|
74
|
+
*/
|
|
75
|
+
const RELAY_TARGET_URL = 'relay://buffer';
|
|
76
|
+
/**
|
|
77
|
+
* @name isRelayTarget
|
|
78
|
+
* @description Returns true when a target URL is the buffer-only relay sentinel.
|
|
79
|
+
*
|
|
80
|
+
* @param targetUrl - The target URL to check.
|
|
81
|
+
* @returns True if the URL is the relay buffer sentinel.
|
|
82
|
+
*
|
|
83
|
+
* @internal
|
|
84
|
+
*/
|
|
85
|
+
function isRelayTarget(targetUrl) {
|
|
86
|
+
return targetUrl === RELAY_TARGET_URL;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* @name validateWebhookUrl
|
|
90
|
+
* @description Validate that a webhook target URL is safe for delivery.
|
|
91
|
+
*
|
|
92
|
+
* Accepts the relay sentinel `relay://buffer` as a buffer-only delivery mode
|
|
93
|
+
* that never makes an outbound HTTP call.
|
|
94
|
+
*
|
|
95
|
+
* Rejects:
|
|
96
|
+
* - Non-HTTPS URLs in production (allow HTTP for localhost testing).
|
|
97
|
+
* - localhost, 127.0.0.1, 0.0.0.0, private network ranges (10.x, 172.16-31.x, 192.168.x).
|
|
98
|
+
*
|
|
99
|
+
* @param targetUrl - The URL to validate.
|
|
100
|
+
* @returns True if the URL is safe for webhook delivery.
|
|
101
|
+
*
|
|
102
|
+
* @internal
|
|
103
|
+
*/
|
|
104
|
+
function validateWebhookUrl(targetUrl) {
|
|
105
|
+
// The relay sentinel is always valid — it never makes an outbound HTTP call.
|
|
106
|
+
if (isRelayTarget(targetUrl))
|
|
107
|
+
return true;
|
|
108
|
+
let parsed;
|
|
109
|
+
try {
|
|
110
|
+
parsed = new URL(targetUrl);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
// Must be HTTPS in production. Allow HTTP only for localhost testing.
|
|
116
|
+
const isLocalhost = parsed.hostname === 'localhost' || parsed.hostname === '127.0.0.1';
|
|
117
|
+
if (parsed.protocol !== 'https:' && !isLocalhost)
|
|
118
|
+
return false;
|
|
119
|
+
// Block private network ranges (SSRF prevention).
|
|
120
|
+
const host = parsed.hostname;
|
|
121
|
+
if (host.startsWith('10.') ||
|
|
122
|
+
host.startsWith('172.16.') || host.startsWith('172.17.') || host.startsWith('172.18.') ||
|
|
123
|
+
host.startsWith('172.19.') || host.startsWith('172.20.') || host.startsWith('172.21.') ||
|
|
124
|
+
host.startsWith('172.22.') || host.startsWith('172.23.') || host.startsWith('172.24.') ||
|
|
125
|
+
host.startsWith('172.25.') || host.startsWith('172.26.') || host.startsWith('172.27.') ||
|
|
126
|
+
host.startsWith('172.28.') || host.startsWith('172.29.') || host.startsWith('172.30.') ||
|
|
127
|
+
host.startsWith('172.31.') ||
|
|
128
|
+
host.startsWith('192.168.') ||
|
|
129
|
+
host === '0.0.0.0' ||
|
|
130
|
+
host === '::1' ||
|
|
131
|
+
host.startsWith('fe80:')) {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* @name signDelivery
|
|
138
|
+
* @description Sign a webhook delivery payload with HMAC-SHA256.
|
|
139
|
+
*
|
|
140
|
+
* The signature is computed over the string `${deliveryId}.${deliveredAt}.${JSON.stringify(payload)}`
|
|
141
|
+
* using the `SAP_MCP_PREMIUM_WEBHOOK_SIGNER` env var as the key.
|
|
142
|
+
*
|
|
143
|
+
* @param deliveryId - The unique delivery id.
|
|
144
|
+
* @param deliveredAt - ISO timestamp of the delivery.
|
|
145
|
+
* @param payload - The event payload to sign.
|
|
146
|
+
* @returns Hex-encoded HMAC-SHA256 signature.
|
|
147
|
+
*
|
|
148
|
+
* @internal
|
|
149
|
+
*/
|
|
150
|
+
function signDelivery(deliveryId, deliveredAt, payload) {
|
|
151
|
+
const key = process.env.SAP_MCP_PREMIUM_WEBHOOK_SIGNER;
|
|
152
|
+
if (!key) {
|
|
153
|
+
throw new Error('SAP_MCP_PREMIUM_WEBHOOK_SIGNER is not set — webhook delivery requires a configured signing key');
|
|
154
|
+
}
|
|
155
|
+
const message = `${deliveryId}.${deliveredAt}.${JSON.stringify(payload)}`;
|
|
156
|
+
return createHmac('sha256', key).update(message).digest('hex');
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* @name deliverWebhook
|
|
160
|
+
* @description Deliver a single event to a webhook target URL with retries.
|
|
161
|
+
*
|
|
162
|
+
* @param subscription - The webhook subscription.
|
|
163
|
+
* @param event - The provider event to deliver.
|
|
164
|
+
* @returns The `PremiumWebhookDelivery` record for this attempt.
|
|
165
|
+
*
|
|
166
|
+
* @internal
|
|
167
|
+
*/
|
|
168
|
+
async function deliverWebhook(subscription, event) {
|
|
169
|
+
const deliveryId = `wh-delivery-${randomUUID()}`;
|
|
170
|
+
const deliveredAt = new Date().toISOString();
|
|
171
|
+
const signature = signDelivery(deliveryId, deliveredAt, event.payload);
|
|
172
|
+
const body = JSON.stringify({
|
|
173
|
+
deliveryId,
|
|
174
|
+
eventType: event.eventType,
|
|
175
|
+
deliveredAt,
|
|
176
|
+
signature,
|
|
177
|
+
payload: event.payload,
|
|
178
|
+
});
|
|
179
|
+
let httpStatus = null;
|
|
180
|
+
let success = false;
|
|
181
|
+
let responseBody;
|
|
182
|
+
let retryCount = 0;
|
|
183
|
+
const parsedUrl = new URL(subscription.targetUrl);
|
|
184
|
+
const isHttps = parsedUrl.protocol === 'https:';
|
|
185
|
+
const reqFn = isHttps ? request : httpRequest;
|
|
186
|
+
for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
|
|
187
|
+
retryCount = attempt;
|
|
188
|
+
try {
|
|
189
|
+
const response = await new Promise((resolve, reject) => {
|
|
190
|
+
const req = reqFn({
|
|
191
|
+
hostname: parsedUrl.hostname,
|
|
192
|
+
port: parsedUrl.port || (isHttps ? 443 : 80),
|
|
193
|
+
path: `${parsedUrl.pathname}${parsedUrl.search}`,
|
|
194
|
+
method: 'POST',
|
|
195
|
+
headers: {
|
|
196
|
+
'Content-Type': 'application/json',
|
|
197
|
+
'Content-Length': Buffer.byteLength(body),
|
|
198
|
+
'X-SAP-Premium-Delivery-Id': deliveryId,
|
|
199
|
+
'X-SAP-Premium-Signature': signature,
|
|
200
|
+
},
|
|
201
|
+
timeout: 10_000,
|
|
202
|
+
}, (res) => {
|
|
203
|
+
let data = '';
|
|
204
|
+
res.on('data', (chunk) => { data += chunk.toString(); });
|
|
205
|
+
res.on('end', () => resolve({ status: res.statusCode ?? 0, body: data }));
|
|
206
|
+
});
|
|
207
|
+
req.on('error', reject);
|
|
208
|
+
req.on('timeout', () => { req.destroy(); reject(new Error('Webhook delivery timeout.')); });
|
|
209
|
+
req.write(body);
|
|
210
|
+
req.end();
|
|
211
|
+
});
|
|
212
|
+
httpStatus = response.status;
|
|
213
|
+
responseBody = response.body.slice(0, 512);
|
|
214
|
+
success = response.status >= 200 && response.status < 300;
|
|
215
|
+
if (success)
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
responseBody = error instanceof Error ? error.message : 'Unknown delivery error.';
|
|
220
|
+
}
|
|
221
|
+
if (attempt < MAX_RETRIES) {
|
|
222
|
+
await new Promise(resolve => setTimeout(resolve, RETRY_BASE_DELAY_MS * 2 ** attempt));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
const delivery = {
|
|
226
|
+
deliveryId,
|
|
227
|
+
subscriptionId: subscription.subscriptionId,
|
|
228
|
+
eventId: event.eventId,
|
|
229
|
+
eventType: event.eventType,
|
|
230
|
+
deliveredAt,
|
|
231
|
+
signature,
|
|
232
|
+
httpStatus,
|
|
233
|
+
success,
|
|
234
|
+
responseBody,
|
|
235
|
+
retryCount,
|
|
236
|
+
};
|
|
237
|
+
// Store delivery record with cap.
|
|
238
|
+
deliveryRecords.set(deliveryId, delivery);
|
|
239
|
+
if (deliveryRecords.size > MAX_DELIVERY_RECORDS) {
|
|
240
|
+
const oldestKey = deliveryRecords.keys().next().value;
|
|
241
|
+
if (oldestKey)
|
|
242
|
+
deliveryRecords.delete(oldestKey);
|
|
243
|
+
}
|
|
244
|
+
// Update subscription stats.
|
|
245
|
+
subscription.deliveriesAttempted++;
|
|
246
|
+
if (success)
|
|
247
|
+
subscription.deliveriesSucceeded++;
|
|
248
|
+
subscription.lastDeliveryAt = deliveredAt;
|
|
249
|
+
subscription.lastDeliveryStatus = httpStatus;
|
|
250
|
+
return delivery;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* @name registerWebhook
|
|
254
|
+
* @description Register a webhook subscription for an active premium session.
|
|
255
|
+
*
|
|
256
|
+
* @param sessionId - The activated premium session id.
|
|
257
|
+
* @param targetUrl - HTTPS endpoint owned by the buyer.
|
|
258
|
+
* @param events - Exact event ids to deliver.
|
|
259
|
+
* @param signingPublicKey - Optional buyer public key for signature verification.
|
|
260
|
+
* @returns The `PremiumWebhookSubscription`, or `null` if the session is not
|
|
261
|
+
* active or the URL is invalid.
|
|
262
|
+
*
|
|
263
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_register`,
|
|
264
|
+
* `remote/server.ts` → `POST /premium/webhook/register`
|
|
265
|
+
*/
|
|
266
|
+
export async function registerWebhook(sessionId, targetUrl, events, signingPublicKey) {
|
|
267
|
+
const session = getPremiumSession(sessionId);
|
|
268
|
+
if (!session || session.status !== 'active')
|
|
269
|
+
return null;
|
|
270
|
+
if (!validateWebhookUrl(targetUrl))
|
|
271
|
+
return null;
|
|
272
|
+
if (events.length === 0)
|
|
273
|
+
return null;
|
|
274
|
+
const subscription = {
|
|
275
|
+
subscriptionId: `wh-sub-${randomUUID()}`,
|
|
276
|
+
sessionId,
|
|
277
|
+
pluginId: session.pluginId,
|
|
278
|
+
capabilityId: session.capabilityId,
|
|
279
|
+
targetUrl,
|
|
280
|
+
events,
|
|
281
|
+
signingPublicKey,
|
|
282
|
+
createdAt: new Date().toISOString(),
|
|
283
|
+
deliveriesAttempted: 0,
|
|
284
|
+
deliveriesSucceeded: 0,
|
|
285
|
+
lastDeliveryAt: null,
|
|
286
|
+
lastDeliveryStatus: null,
|
|
287
|
+
active: true,
|
|
288
|
+
};
|
|
289
|
+
webhookSubscriptions.set(subscription.subscriptionId, subscription);
|
|
290
|
+
return subscription;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* @name RELAY_TARGET_URL_EXPORT
|
|
294
|
+
* @description Exported relay sentinel so premium-tools and tests can reference it
|
|
295
|
+
* without duplicating the literal.
|
|
296
|
+
*/
|
|
297
|
+
export const PREMIUM_WEBHOOK_RELAY_TARGET_URL = RELAY_TARGET_URL;
|
|
298
|
+
/**
|
|
299
|
+
* @name registerWebhookRelay
|
|
300
|
+
* @description Register a buffer-only (relay) webhook subscription for an active
|
|
301
|
+
* premium session.
|
|
302
|
+
*
|
|
303
|
+
* Unlike `registerWebhook`, this does not require a public HTTPS endpoint.
|
|
304
|
+
* Events matching the subscription are appended to the event store by the
|
|
305
|
+
* delivery loop and the agent consumes them via `sap_premium_stream_poll` or
|
|
306
|
+
* `sap_premium_stream_flush`. This solves the core problem for agents running
|
|
307
|
+
* locally without a publicly reachable HTTPS callback URL.
|
|
308
|
+
*
|
|
309
|
+
* @param sessionId - The activated premium session id.
|
|
310
|
+
* @param events - Exact event ids to buffer.
|
|
311
|
+
* @returns The `PremiumWebhookSubscription`, or `null` if the session is not
|
|
312
|
+
* active or no events were provided.
|
|
313
|
+
*
|
|
314
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_relay`
|
|
315
|
+
*/
|
|
316
|
+
export async function registerWebhookRelay(sessionId, events) {
|
|
317
|
+
const session = getPremiumSession(sessionId);
|
|
318
|
+
if (!session || session.status !== 'active')
|
|
319
|
+
return null;
|
|
320
|
+
if (events.length === 0)
|
|
321
|
+
return null;
|
|
322
|
+
const subscription = {
|
|
323
|
+
subscriptionId: `wh-relay-${randomUUID()}`,
|
|
324
|
+
sessionId,
|
|
325
|
+
pluginId: session.pluginId,
|
|
326
|
+
capabilityId: session.capabilityId,
|
|
327
|
+
targetUrl: RELAY_TARGET_URL,
|
|
328
|
+
events,
|
|
329
|
+
signingPublicKey: undefined,
|
|
330
|
+
createdAt: new Date().toISOString(),
|
|
331
|
+
deliveriesAttempted: 0,
|
|
332
|
+
deliveriesSucceeded: 0,
|
|
333
|
+
lastDeliveryAt: null,
|
|
334
|
+
lastDeliveryStatus: null,
|
|
335
|
+
active: true,
|
|
336
|
+
};
|
|
337
|
+
webhookSubscriptions.set(subscription.subscriptionId, subscription);
|
|
338
|
+
return subscription;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* @name getRelaySubscriptionsForSession
|
|
342
|
+
* @description Return all active relay (buffer-only) webhook subscriptions for a
|
|
343
|
+
* session id. Used by the relay status tool to report buffered event counts.
|
|
344
|
+
*
|
|
345
|
+
* @param sessionId - The premium session id.
|
|
346
|
+
* @returns Array of relay subscriptions for the session.
|
|
347
|
+
*
|
|
348
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_relay_status`
|
|
349
|
+
*/
|
|
350
|
+
export function getRelaySubscriptionsForSession(sessionId) {
|
|
351
|
+
const results = [];
|
|
352
|
+
for (const sub of webhookSubscriptions.values()) {
|
|
353
|
+
if (sub.sessionId === sessionId && isRelayTarget(sub.targetUrl)) {
|
|
354
|
+
results.push({ ...sub });
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return results;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* @name startWebhookDelivery
|
|
361
|
+
* @description Start the webhook delivery loop for a subscription.
|
|
362
|
+
*
|
|
363
|
+
* Subscribes to the provider, receives events, filters by the subscription's
|
|
364
|
+
* event list, signs and delivers each matching event, and decrements the
|
|
365
|
+
* session quota. Stops when the quota reaches zero or the subscription is
|
|
366
|
+
* deactivated.
|
|
367
|
+
*
|
|
368
|
+
* @param subscription - The webhook subscription to deliver for.
|
|
369
|
+
*
|
|
370
|
+
* @usedBy `remote/server.ts` → webhook delivery worker
|
|
371
|
+
*/
|
|
372
|
+
export async function startWebhookDelivery(subscription) {
|
|
373
|
+
const iterable = await subscribeToProvider(subscription.pluginId, subscription.capabilityId, {});
|
|
374
|
+
if (!iterable) {
|
|
375
|
+
console.error(`[webhook-engine] Failed to start delivery loop for ${subscription.subscriptionId}: ` +
|
|
376
|
+
`provider adapter not available for ${subscription.pluginId}:${subscription.capabilityId}. ` +
|
|
377
|
+
`Check SAP_MCP_ENABLE_PREMIUM_PLUGINS, SAP_MCP_PLUGIN_DIR, and that providers are compiled (.js).`);
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
console.log(`[webhook-engine] Delivery loop started for ${subscription.subscriptionId} ` +
|
|
381
|
+
`(${subscription.pluginId}:${subscription.capabilityId}, events: ${subscription.events.join(', ')}).`);
|
|
382
|
+
for await (const event of iterable) {
|
|
383
|
+
if (!subscription.active)
|
|
384
|
+
break;
|
|
385
|
+
// Filter: only deliver events listed in the subscription.
|
|
386
|
+
if (!subscription.events.includes(event.eventType))
|
|
387
|
+
continue;
|
|
388
|
+
// Store the event for replay/idempotency.
|
|
389
|
+
appendEvent({
|
|
390
|
+
eventId: event.eventId,
|
|
391
|
+
sessionId: subscription.sessionId,
|
|
392
|
+
pluginId: subscription.pluginId,
|
|
393
|
+
capabilityId: subscription.capabilityId,
|
|
394
|
+
eventType: event.eventType,
|
|
395
|
+
observedAt: event.observedAt,
|
|
396
|
+
payload: event.payload,
|
|
397
|
+
deliveredAt: new Date().toISOString(),
|
|
398
|
+
});
|
|
399
|
+
// Relay (buffer-only) mode: skip HTTP POST delivery entirely.
|
|
400
|
+
// The event is already in the event store; the agent consumes it via
|
|
401
|
+
// sap_premium_stream_poll / sap_premium_stream_flush.
|
|
402
|
+
if (isRelayTarget(subscription.targetUrl)) {
|
|
403
|
+
subscription.deliveriesAttempted++;
|
|
404
|
+
subscription.deliveriesSucceeded++;
|
|
405
|
+
subscription.lastDeliveryAt = new Date().toISOString();
|
|
406
|
+
subscription.lastDeliveryStatus = 200;
|
|
407
|
+
const relayDelivery = {
|
|
408
|
+
deliveryId: `wh-relay-${randomUUID()}`,
|
|
409
|
+
subscriptionId: subscription.subscriptionId,
|
|
410
|
+
eventId: event.eventId,
|
|
411
|
+
eventType: event.eventType,
|
|
412
|
+
deliveredAt: new Date().toISOString(),
|
|
413
|
+
signature: 'relay-buffer',
|
|
414
|
+
httpStatus: 200,
|
|
415
|
+
success: true,
|
|
416
|
+
responseBody: 'Buffered for agent poll consumption.',
|
|
417
|
+
retryCount: 0,
|
|
418
|
+
};
|
|
419
|
+
deliveryRecords.set(relayDelivery.deliveryId, relayDelivery);
|
|
420
|
+
if (deliveryRecords.size > MAX_DELIVERY_RECORDS) {
|
|
421
|
+
const oldestKey = deliveryRecords.keys().next().value;
|
|
422
|
+
if (oldestKey)
|
|
423
|
+
deliveryRecords.delete(oldestKey);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
// Deliver via HTTP POST with retries.
|
|
428
|
+
await deliverWebhook(subscription, event);
|
|
429
|
+
}
|
|
430
|
+
// Decrement quota and auto-close at zero.
|
|
431
|
+
const remaining = decrementSessionQuota(subscription.sessionId);
|
|
432
|
+
if (remaining <= 0) {
|
|
433
|
+
subscription.active = false;
|
|
434
|
+
closeSession(subscription.sessionId, 'Webhook unit quota exhausted.');
|
|
435
|
+
break;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
/**
|
|
440
|
+
* @name unregisterWebhook
|
|
441
|
+
* @description Deactivate and remove a webhook subscription.
|
|
442
|
+
*
|
|
443
|
+
* @param subscriptionId - The webhook subscription id.
|
|
444
|
+
* @returns True if the subscription was found and removed.
|
|
445
|
+
*
|
|
446
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_unregister`
|
|
447
|
+
*/
|
|
448
|
+
export function unregisterWebhook(subscriptionId) {
|
|
449
|
+
const subscription = webhookSubscriptions.get(subscriptionId);
|
|
450
|
+
if (!subscription)
|
|
451
|
+
return false;
|
|
452
|
+
subscription.active = false;
|
|
453
|
+
webhookSubscriptions.delete(subscriptionId);
|
|
454
|
+
return true;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* @name getWebhookSubscription
|
|
458
|
+
* @description Retrieve a webhook subscription by id.
|
|
459
|
+
*
|
|
460
|
+
* @param subscriptionId - The webhook subscription id.
|
|
461
|
+
* @returns The subscription, or `null` if not found.
|
|
462
|
+
*
|
|
463
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_status`
|
|
464
|
+
*/
|
|
465
|
+
export function getWebhookSubscription(subscriptionId) {
|
|
466
|
+
const sub = webhookSubscriptions.get(subscriptionId);
|
|
467
|
+
return sub ? { ...sub } : null;
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* @name getWebhookDeliveries
|
|
471
|
+
* @description Retrieve delivery records for a subscription.
|
|
472
|
+
*
|
|
473
|
+
* @param subscriptionId - The webhook subscription id.
|
|
474
|
+
* @param limit - Maximum records to return (default 50).
|
|
475
|
+
* @returns Array of `PremiumWebhookDelivery` records.
|
|
476
|
+
*
|
|
477
|
+
* @usedBy `premium-tools.ts` → MCP tool `sap_premium_webhook_status`
|
|
478
|
+
*/
|
|
479
|
+
export function getWebhookDeliveries(subscriptionId, limit = 50) {
|
|
480
|
+
const results = [];
|
|
481
|
+
for (const delivery of deliveryRecords.values()) {
|
|
482
|
+
if (delivery.subscriptionId === subscriptionId) {
|
|
483
|
+
results.push(delivery);
|
|
484
|
+
if (results.length >= limit)
|
|
485
|
+
break;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
return results;
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* @name getActiveWebhookCount
|
|
492
|
+
* @description Return the number of currently active webhook subscriptions.
|
|
493
|
+
*
|
|
494
|
+
* @usedBy `metrics.ts`
|
|
495
|
+
*/
|
|
496
|
+
export function getActiveWebhookCount() {
|
|
497
|
+
let count = 0;
|
|
498
|
+
for (const sub of webhookSubscriptions.values()) {
|
|
499
|
+
if (sub.active)
|
|
500
|
+
count++;
|
|
501
|
+
}
|
|
502
|
+
return count;
|
|
503
|
+
}
|
|
504
|
+
/**
|
|
505
|
+
* @name stopAllWebhooks
|
|
506
|
+
* @description Deactivate all webhook subscriptions. Called during graceful shutdown.
|
|
507
|
+
*
|
|
508
|
+
* @usedBy `remote/server.ts` shutdown handler
|
|
509
|
+
*/
|
|
510
|
+
export function stopAllWebhooks() {
|
|
511
|
+
for (const sub of webhookSubscriptions.values()) {
|
|
512
|
+
sub.active = false;
|
|
513
|
+
}
|
|
514
|
+
webhookSubscriptions.clear();
|
|
515
|
+
}
|
|
516
|
+
//# sourceMappingURL=webhook-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-engine.js","sourceRoot":"","sources":["../../src/premium/webhook-engine.ts"],"names":[],"mappings":"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"}
|