@oobe-protocol-labs/sap-mcp-server 0.1.0
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 +159 -0
- package/CHANGELOG.md +55 -0
- package/LICENSE +21 -0
- package/README.md +223 -0
- package/config.example.json +64 -0
- package/config.schema.json +370 -0
- package/config.secure-example.json +100 -0
- package/dist/adapters/index.d.ts +6 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +6 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/mcp/errors.d.ts +7 -0
- package/dist/adapters/mcp/errors.d.ts.map +1 -0
- package/dist/adapters/mcp/errors.js +10 -0
- package/dist/adapters/mcp/errors.js.map +1 -0
- package/dist/adapters/mcp/index.d.ts +8 -0
- package/dist/adapters/mcp/index.d.ts.map +1 -0
- package/dist/adapters/mcp/index.js +8 -0
- package/dist/adapters/mcp/index.js.map +1 -0
- package/dist/adapters/mcp/prompt-response.d.ts +13 -0
- package/dist/adapters/mcp/prompt-response.d.ts.map +1 -0
- package/dist/adapters/mcp/prompt-response.js +7 -0
- package/dist/adapters/mcp/prompt-response.js.map +1 -0
- package/dist/adapters/mcp/resource-response.d.ts +8 -0
- package/dist/adapters/mcp/resource-response.d.ts.map +1 -0
- package/dist/adapters/mcp/resource-response.js +7 -0
- package/dist/adapters/mcp/resource-response.js.map +1 -0
- package/dist/adapters/mcp/sdk-compat.d.ts +191 -0
- package/dist/adapters/mcp/sdk-compat.d.ts.map +1 -0
- package/dist/adapters/mcp/sdk-compat.js +606 -0
- package/dist/adapters/mcp/sdk-compat.js.map +1 -0
- package/dist/adapters/mcp/tool-response.d.ts +32 -0
- package/dist/adapters/mcp/tool-response.d.ts.map +1 -0
- package/dist/adapters/mcp/tool-response.js +27 -0
- package/dist/adapters/mcp/tool-response.js.map +1 -0
- package/dist/adapters/solana/commitment.d.ts +9 -0
- package/dist/adapters/solana/commitment.d.ts.map +1 -0
- package/dist/adapters/solana/commitment.js +14 -0
- package/dist/adapters/solana/commitment.js.map +1 -0
- package/dist/adapters/solana/connection.d.ts +10 -0
- package/dist/adapters/solana/connection.d.ts.map +1 -0
- package/dist/adapters/solana/connection.js +13 -0
- package/dist/adapters/solana/connection.js.map +1 -0
- package/dist/adapters/solana/index.d.ts +7 -0
- package/dist/adapters/solana/index.d.ts.map +1 -0
- package/dist/adapters/solana/index.js +7 -0
- package/dist/adapters/solana/index.js.map +1 -0
- package/dist/adapters/solana/public-key.d.ts +9 -0
- package/dist/adapters/solana/public-key.d.ts.map +1 -0
- package/dist/adapters/solana/public-key.js +11 -0
- package/dist/adapters/solana/public-key.js.map +1 -0
- package/dist/cli.d.ts +29 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +269 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/defaults.d.ts +28 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +28 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/env.d.ts +297 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +563 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/mcp-client-injection.d.ts +113 -0
- package/dist/config/mcp-client-injection.d.ts.map +1 -0
- package/dist/config/mcp-client-injection.js +453 -0
- package/dist/config/mcp-client-injection.js.map +1 -0
- package/dist/config/paths.d.ts +37 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +93 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/profiles.d.ts +85 -0
- package/dist/config/profiles.d.ts.map +1 -0
- package/dist/config/profiles.js +346 -0
- package/dist/config/profiles.js.map +1 -0
- package/dist/config/schema.d.ts +9 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +8 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/secure-config.d.ts +607 -0
- package/dist/config/secure-config.d.ts.map +1 -0
- package/dist/config/secure-config.js +526 -0
- package/dist/config/secure-config.js.map +1 -0
- package/dist/config/setup.d.ts +42 -0
- package/dist/config/setup.d.ts.map +1 -0
- package/dist/config/setup.js +173 -0
- package/dist/config/setup.js.map +1 -0
- package/dist/config/wizard.d.ts +15 -0
- package/dist/config/wizard.d.ts.map +1 -0
- package/dist/config/wizard.js +1176 -0
- package/dist/config/wizard.js.map +1 -0
- package/dist/config-cli.d.ts +21 -0
- package/dist/config-cli.d.ts.map +1 -0
- package/dist/config-cli.js +679 -0
- package/dist/config-cli.js.map +1 -0
- package/dist/core/constants.d.ts +78 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +78 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/errors.d.ts +188 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +337 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/guards.d.ts +41 -0
- package/dist/core/guards.d.ts.map +1 -0
- package/dist/core/guards.js +93 -0
- package/dist/core/guards.js.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +10 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +64 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +159 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/result.d.ts +49 -0
- package/dist/core/result.d.ts.map +1 -0
- package/dist/core/result.js +61 -0
- package/dist/core/result.js.map +1 -0
- package/dist/core/types.d.ts +147 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +8 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/payments/http-adapter.d.ts +76 -0
- package/dist/payments/http-adapter.d.ts.map +1 -0
- package/dist/payments/http-adapter.js +126 -0
- package/dist/payments/http-adapter.js.map +1 -0
- package/dist/payments/index.d.ts +12 -0
- package/dist/payments/index.d.ts.map +1 -0
- package/dist/payments/index.js +9 -0
- package/dist/payments/index.js.map +1 -0
- package/dist/payments/json-rpc.d.ts +49 -0
- package/dist/payments/json-rpc.d.ts.map +1 -0
- package/dist/payments/json-rpc.js +53 -0
- package/dist/payments/json-rpc.js.map +1 -0
- package/dist/payments/monetization-gate.d.ts +49 -0
- package/dist/payments/monetization-gate.d.ts.map +1 -0
- package/dist/payments/monetization-gate.js +398 -0
- package/dist/payments/monetization-gate.js.map +1 -0
- package/dist/payments/oobe-facilitator-server.d.ts +71 -0
- package/dist/payments/oobe-facilitator-server.d.ts.map +1 -0
- package/dist/payments/oobe-facilitator-server.js +409 -0
- package/dist/payments/oobe-facilitator-server.js.map +1 -0
- package/dist/payments/pay-sh-spec.d.ts +44 -0
- package/dist/payments/pay-sh-spec.d.ts.map +1 -0
- package/dist/payments/pay-sh-spec.js +218 -0
- package/dist/payments/pay-sh-spec.js.map +1 -0
- package/dist/payments/pricing.d.ts +60 -0
- package/dist/payments/pricing.d.ts.map +1 -0
- package/dist/payments/pricing.js +272 -0
- package/dist/payments/pricing.js.map +1 -0
- package/dist/payments/usage-ledger.d.ts +84 -0
- package/dist/payments/usage-ledger.d.ts.map +1 -0
- package/dist/payments/usage-ledger.js +126 -0
- package/dist/payments/usage-ledger.js.map +1 -0
- package/dist/policy/bento-policy-engine.d.ts +71 -0
- package/dist/policy/bento-policy-engine.d.ts.map +1 -0
- package/dist/policy/bento-policy-engine.js +218 -0
- package/dist/policy/bento-policy-engine.js.map +1 -0
- package/dist/policy/default-policies.d.ts +9 -0
- package/dist/policy/default-policies.d.ts.map +1 -0
- package/dist/policy/default-policies.js +69 -0
- package/dist/policy/default-policies.js.map +1 -0
- package/dist/policy/hybrid-policy-engine.d.ts +95 -0
- package/dist/policy/hybrid-policy-engine.d.ts.map +1 -0
- package/dist/policy/hybrid-policy-engine.js +297 -0
- package/dist/policy/hybrid-policy-engine.js.map +1 -0
- package/dist/policy/index.d.ts +10 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +10 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/local-policy-engine.d.ts +119 -0
- package/dist/policy/local-policy-engine.d.ts.map +1 -0
- package/dist/policy/local-policy-engine.js +318 -0
- package/dist/policy/local-policy-engine.js.map +1 -0
- package/dist/policy/permission-checks.d.ts +19 -0
- package/dist/policy/permission-checks.d.ts.map +1 -0
- package/dist/policy/permission-checks.js +60 -0
- package/dist/policy/permission-checks.js.map +1 -0
- package/dist/policy/policy-engine.d.ts +57 -0
- package/dist/policy/policy-engine.d.ts.map +1 -0
- package/dist/policy/policy-engine.js +162 -0
- package/dist/policy/policy-engine.js.map +1 -0
- package/dist/policy/policy-types.d.ts +46 -0
- package/dist/policy/policy-types.d.ts.map +1 -0
- package/dist/policy/policy-types.js +5 -0
- package/dist/policy/policy-types.js.map +1 -0
- package/dist/policy/risk-level.d.ts +18 -0
- package/dist/policy/risk-level.d.ts.map +1 -0
- package/dist/policy/risk-level.js +46 -0
- package/dist/policy/risk-level.js.map +1 -0
- package/dist/policy/spending-limits.d.ts +17 -0
- package/dist/policy/spending-limits.d.ts.map +1 -0
- package/dist/policy/spending-limits.js +40 -0
- package/dist/policy/spending-limits.js.map +1 -0
- package/dist/prompts/context/sap-agent-context.prompt.d.ts +64 -0
- package/dist/prompts/context/sap-agent-context.prompt.d.ts.map +1 -0
- package/dist/prompts/context/sap-agent-context.prompt.js +336 -0
- package/dist/prompts/context/sap-agent-context.prompt.js.map +1 -0
- package/dist/prompts/developer/debug-sap-error.prompt.d.ts +13 -0
- package/dist/prompts/developer/debug-sap-error.prompt.d.ts.map +1 -0
- package/dist/prompts/developer/debug-sap-error.prompt.js +78 -0
- package/dist/prompts/developer/debug-sap-error.prompt.js.map +1 -0
- package/dist/prompts/developer/generate-sap-integration.prompt.d.ts +13 -0
- package/dist/prompts/developer/generate-sap-integration.prompt.d.ts.map +1 -0
- package/dist/prompts/developer/generate-sap-integration.prompt.js +132 -0
- package/dist/prompts/developer/generate-sap-integration.prompt.js.map +1 -0
- package/dist/prompts/developer/index.d.ts +6 -0
- package/dist/prompts/developer/index.d.ts.map +1 -0
- package/dist/prompts/developer/index.js +6 -0
- package/dist/prompts/developer/index.js.map +1 -0
- package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts +13 -0
- package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.d.ts.map +1 -0
- package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js +97 -0
- package/dist/prompts/execution-proof/explain-proof-of-execution.prompt.js.map +1 -0
- package/dist/prompts/execution-proof/index.d.ts +6 -0
- package/dist/prompts/execution-proof/index.d.ts.map +1 -0
- package/dist/prompts/execution-proof/index.js +6 -0
- package/dist/prompts/execution-proof/index.js.map +1 -0
- package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts +13 -0
- package/dist/prompts/execution-proof/verify-execution-proof.prompt.d.ts.map +1 -0
- package/dist/prompts/execution-proof/verify-execution-proof.prompt.js +95 -0
- package/dist/prompts/execution-proof/verify-execution-proof.prompt.js.map +1 -0
- package/dist/prompts/index.d.ts +5 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +5 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/payments/create-paid-api.prompt.d.ts +13 -0
- package/dist/prompts/payments/create-paid-api.prompt.d.ts.map +1 -0
- package/dist/prompts/payments/create-paid-api.prompt.js +142 -0
- package/dist/prompts/payments/create-paid-api.prompt.js.map +1 -0
- package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts +13 -0
- package/dist/prompts/payments/explain-x402-settlement.prompt.d.ts.map +1 -0
- package/dist/prompts/payments/explain-x402-settlement.prompt.js +83 -0
- package/dist/prompts/payments/explain-x402-settlement.prompt.js.map +1 -0
- package/dist/prompts/payments/index.d.ts +6 -0
- package/dist/prompts/payments/index.d.ts.map +1 -0
- package/dist/prompts/payments/index.js +6 -0
- package/dist/prompts/payments/index.js.map +1 -0
- package/dist/prompts/register-prompts.d.ts +10 -0
- package/dist/prompts/register-prompts.d.ts.map +1 -0
- package/dist/prompts/register-prompts.js +40 -0
- package/dist/prompts/register-prompts.js.map +1 -0
- package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts +13 -0
- package/dist/prompts/registry/analyze-sap-agent.prompt.d.ts.map +1 -0
- package/dist/prompts/registry/analyze-sap-agent.prompt.js +85 -0
- package/dist/prompts/registry/analyze-sap-agent.prompt.js.map +1 -0
- package/dist/prompts/registry/index.d.ts +6 -0
- package/dist/prompts/registry/index.d.ts.map +1 -0
- package/dist/prompts/registry/index.js +6 -0
- package/dist/prompts/registry/index.js.map +1 -0
- package/dist/prompts/registry/register-sap-agent.prompt.d.ts +13 -0
- package/dist/prompts/registry/register-sap-agent.prompt.d.ts.map +1 -0
- package/dist/prompts/registry/register-sap-agent.prompt.js +152 -0
- package/dist/prompts/registry/register-sap-agent.prompt.js.map +1 -0
- package/dist/remote/auth/index.d.ts +86 -0
- package/dist/remote/auth/index.d.ts.map +1 -0
- package/dist/remote/auth/index.js +152 -0
- package/dist/remote/auth/index.js.map +1 -0
- package/dist/remote/server.d.ts +140 -0
- package/dist/remote/server.d.ts.map +1 -0
- package/dist/remote/server.js +412 -0
- package/dist/remote/server.js.map +1 -0
- package/dist/resources/current/sap-current-config.resource.d.ts +30 -0
- package/dist/resources/current/sap-current-config.resource.d.ts.map +1 -0
- package/dist/resources/current/sap-current-config.resource.js +142 -0
- package/dist/resources/current/sap-current-config.resource.js.map +1 -0
- package/dist/resources/execution-proof/index.d.ts +5 -0
- package/dist/resources/execution-proof/index.d.ts.map +1 -0
- package/dist/resources/execution-proof/index.js +5 -0
- package/dist/resources/execution-proof/index.js.map +1 -0
- package/dist/resources/execution-proof/sap-execution-record.resource.d.ts +13 -0
- package/dist/resources/execution-proof/sap-execution-record.resource.d.ts.map +1 -0
- package/dist/resources/execution-proof/sap-execution-record.resource.js +75 -0
- package/dist/resources/execution-proof/sap-execution-record.resource.js.map +1 -0
- package/dist/resources/index.d.ts +5 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +5 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/memory/index.d.ts +5 -0
- package/dist/resources/memory/index.d.ts.map +1 -0
- package/dist/resources/memory/index.js +5 -0
- package/dist/resources/memory/index.js.map +1 -0
- package/dist/resources/memory/sap-memory.resource.d.ts +13 -0
- package/dist/resources/memory/sap-memory.resource.d.ts.map +1 -0
- package/dist/resources/memory/sap-memory.resource.js +77 -0
- package/dist/resources/memory/sap-memory.resource.js.map +1 -0
- package/dist/resources/profile/sap-active-profile.resource.d.ts +51 -0
- package/dist/resources/profile/sap-active-profile.resource.d.ts.map +1 -0
- package/dist/resources/profile/sap-active-profile.resource.js +119 -0
- package/dist/resources/profile/sap-active-profile.resource.js.map +1 -0
- package/dist/resources/register-resources.d.ts +10 -0
- package/dist/resources/register-resources.d.ts.map +1 -0
- package/dist/resources/register-resources.js +33 -0
- package/dist/resources/register-resources.js.map +1 -0
- package/dist/resources/registry/index.d.ts +6 -0
- package/dist/resources/registry/index.d.ts.map +1 -0
- package/dist/resources/registry/index.js +6 -0
- package/dist/resources/registry/index.js.map +1 -0
- package/dist/resources/registry/sap-agent.resource.d.ts +13 -0
- package/dist/resources/registry/sap-agent.resource.d.ts.map +1 -0
- package/dist/resources/registry/sap-agent.resource.js +75 -0
- package/dist/resources/registry/sap-agent.resource.js.map +1 -0
- package/dist/resources/registry/sap-global-registry.resource.d.ts +13 -0
- package/dist/resources/registry/sap-global-registry.resource.d.ts.map +1 -0
- package/dist/resources/registry/sap-global-registry.resource.js +71 -0
- package/dist/resources/registry/sap-global-registry.resource.js.map +1 -0
- package/dist/resources/reputation/index.d.ts +5 -0
- package/dist/resources/reputation/index.d.ts.map +1 -0
- package/dist/resources/reputation/index.js +5 -0
- package/dist/resources/reputation/index.js.map +1 -0
- package/dist/resources/reputation/sap-reputation.resource.d.ts +13 -0
- package/dist/resources/reputation/sap-reputation.resource.d.ts.map +1 -0
- package/dist/resources/reputation/sap-reputation.resource.js +75 -0
- package/dist/resources/reputation/sap-reputation.resource.js.map +1 -0
- package/dist/resources/stats/sap-network-stats.resource.d.ts +14 -0
- package/dist/resources/stats/sap-network-stats.resource.d.ts.map +1 -0
- package/dist/resources/stats/sap-network-stats.resource.js +86 -0
- package/dist/resources/stats/sap-network-stats.resource.js.map +1 -0
- package/dist/resources/tool-schema/index.d.ts +5 -0
- package/dist/resources/tool-schema/index.d.ts.map +1 -0
- package/dist/resources/tool-schema/index.js +5 -0
- package/dist/resources/tool-schema/index.js.map +1 -0
- package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts +13 -0
- package/dist/resources/tool-schema/sap-tool-schema.resource.d.ts.map +1 -0
- package/dist/resources/tool-schema/sap-tool-schema.resource.js +75 -0
- package/dist/resources/tool-schema/sap-tool-schema.resource.js.map +1 -0
- package/dist/sap/index.d.ts +7 -0
- package/dist/sap/index.d.ts.map +1 -0
- package/dist/sap/index.js +6 -0
- package/dist/sap/index.js.map +1 -0
- package/dist/sap/sap-client-manager.d.ts +54 -0
- package/dist/sap/sap-client-manager.d.ts.map +1 -0
- package/dist/sap/sap-client-manager.js +129 -0
- package/dist/sap/sap-client-manager.js.map +1 -0
- package/dist/sap/sap-errors.d.ts +13 -0
- package/dist/sap/sap-errors.d.ts.map +1 -0
- package/dist/sap/sap-errors.js +23 -0
- package/dist/sap/sap-errors.js.map +1 -0
- package/dist/sap/sap-types.d.ts +69 -0
- package/dist/sap/sap-types.d.ts.map +1 -0
- package/dist/sap/sap-types.js +5 -0
- package/dist/sap/sap-types.js.map +1 -0
- package/dist/schemas/common.schema.d.ts +42 -0
- package/dist/schemas/common.schema.d.ts.map +1 -0
- package/dist/schemas/common.schema.js +36 -0
- package/dist/schemas/common.schema.js.map +1 -0
- package/dist/schemas/developer.schema.d.ts +31 -0
- package/dist/schemas/developer.schema.d.ts.map +1 -0
- package/dist/schemas/developer.schema.js +19 -0
- package/dist/schemas/developer.schema.js.map +1 -0
- package/dist/schemas/execution-proof.schema.d.ts +44 -0
- package/dist/schemas/execution-proof.schema.d.ts.map +1 -0
- package/dist/schemas/execution-proof.schema.js +26 -0
- package/dist/schemas/execution-proof.schema.js.map +1 -0
- package/dist/schemas/identity.schema.d.ts +34 -0
- package/dist/schemas/identity.schema.d.ts.map +1 -0
- package/dist/schemas/identity.schema.js +21 -0
- package/dist/schemas/identity.schema.js.map +1 -0
- package/dist/schemas/index.d.ts +15 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +15 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/memory.schema.d.ts +34 -0
- package/dist/schemas/memory.schema.d.ts.map +1 -0
- package/dist/schemas/memory.schema.js +21 -0
- package/dist/schemas/memory.schema.js.map +1 -0
- package/dist/schemas/payments.schema.d.ts +37 -0
- package/dist/schemas/payments.schema.d.ts.map +1 -0
- package/dist/schemas/payments.schema.js +22 -0
- package/dist/schemas/payments.schema.js.map +1 -0
- package/dist/schemas/registry.schema.d.ts +65 -0
- package/dist/schemas/registry.schema.d.ts.map +1 -0
- package/dist/schemas/registry.schema.js +34 -0
- package/dist/schemas/registry.schema.js.map +1 -0
- package/dist/schemas/reputation.schema.d.ts +31 -0
- package/dist/schemas/reputation.schema.d.ts.map +1 -0
- package/dist/schemas/reputation.schema.js +20 -0
- package/dist/schemas/reputation.schema.js.map +1 -0
- package/dist/schemas/settlement.schema.d.ts +50 -0
- package/dist/schemas/settlement.schema.d.ts.map +1 -0
- package/dist/schemas/settlement.schema.js +29 -0
- package/dist/schemas/settlement.schema.js.map +1 -0
- package/dist/schemas/tool-schema.schema.d.ts +56 -0
- package/dist/schemas/tool-schema.schema.d.ts.map +1 -0
- package/dist/schemas/tool-schema.schema.js +26 -0
- package/dist/schemas/tool-schema.schema.js.map +1 -0
- package/dist/schemas/transaction.schema.d.ts +34 -0
- package/dist/schemas/transaction.schema.d.ts.map +1 -0
- package/dist/schemas/transaction.schema.js +20 -0
- package/dist/schemas/transaction.schema.js.map +1 -0
- package/dist/security/approval-required.d.ts +9 -0
- package/dist/security/approval-required.d.ts.map +1 -0
- package/dist/security/approval-required.js +10 -0
- package/dist/security/approval-required.js.map +1 -0
- package/dist/security/index.d.ts +9 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +9 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/private-key-guard.d.ts +11 -0
- package/dist/security/private-key-guard.d.ts.map +1 -0
- package/dist/security/private-key-guard.js +22 -0
- package/dist/security/private-key-guard.js.map +1 -0
- package/dist/security/prompt-injection-notes.d.ts +13 -0
- package/dist/security/prompt-injection-notes.d.ts.map +1 -0
- package/dist/security/prompt-injection-notes.js +23 -0
- package/dist/security/prompt-injection-notes.js.map +1 -0
- package/dist/security/tool-permissions.d.ts +30 -0
- package/dist/security/tool-permissions.d.ts.map +1 -0
- package/dist/security/tool-permissions.js +270 -0
- package/dist/security/tool-permissions.js.map +1 -0
- package/dist/security/unsafe-action-guard.d.ts +28 -0
- package/dist/security/unsafe-action-guard.d.ts.map +1 -0
- package/dist/security/unsafe-action-guard.js +175 -0
- package/dist/security/unsafe-action-guard.js.map +1 -0
- package/dist/server/create-server.d.ts +12 -0
- package/dist/server/create-server.d.ts.map +1 -0
- package/dist/server/create-server.js +57 -0
- package/dist/server/create-server.js.map +1 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +7 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/register-capabilities.d.ts +10 -0
- package/dist/server/register-capabilities.d.ts.map +1 -0
- package/dist/server/register-capabilities.js +23 -0
- package/dist/server/register-capabilities.js.map +1 -0
- package/dist/server/server-metadata.d.ts +32 -0
- package/dist/server/server-metadata.d.ts.map +1 -0
- package/dist/server/server-metadata.js +32 -0
- package/dist/server/server-metadata.js.map +1 -0
- package/dist/session/agent-session.d.ts +25 -0
- package/dist/session/agent-session.d.ts.map +1 -0
- package/dist/session/agent-session.js +35 -0
- package/dist/session/agent-session.js.map +1 -0
- package/dist/session/delegated-session.d.ts +20 -0
- package/dist/session/delegated-session.d.ts.map +1 -0
- package/dist/session/delegated-session.js +47 -0
- package/dist/session/delegated-session.js.map +1 -0
- package/dist/session/index.d.ts +10 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +9 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/redis-session-store.d.ts +89 -0
- package/dist/session/redis-session-store.d.ts.map +1 -0
- package/dist/session/redis-session-store.js +219 -0
- package/dist/session/redis-session-store.js.map +1 -0
- package/dist/session/session-limits.d.ts +20 -0
- package/dist/session/session-limits.d.ts.map +1 -0
- package/dist/session/session-limits.js +55 -0
- package/dist/session/session-limits.js.map +1 -0
- package/dist/session/session-permissions.d.ts +37 -0
- package/dist/session/session-permissions.d.ts.map +1 -0
- package/dist/session/session-permissions.js +58 -0
- package/dist/session/session-permissions.js.map +1 -0
- package/dist/session/session-store.d.ts +38 -0
- package/dist/session/session-store.d.ts.map +1 -0
- package/dist/session/session-store.js +62 -0
- package/dist/session/session-store.js.map +1 -0
- package/dist/session/session-types.d.ts +33 -0
- package/dist/session/session-types.d.ts.map +1 -0
- package/dist/session/session-types.js +5 -0
- package/dist/session/session-types.js.map +1 -0
- package/dist/signer/external-signer.d.ts +16 -0
- package/dist/signer/external-signer.d.ts.map +1 -0
- package/dist/signer/external-signer.js +128 -0
- package/dist/signer/external-signer.js.map +1 -0
- package/dist/signer/index.d.ts +9 -0
- package/dist/signer/index.d.ts.map +1 -0
- package/dist/signer/index.js +8 -0
- package/dist/signer/index.js.map +1 -0
- package/dist/signer/load-keypair.d.ts +15 -0
- package/dist/signer/load-keypair.d.ts.map +1 -0
- package/dist/signer/load-keypair.js +39 -0
- package/dist/signer/load-keypair.js.map +1 -0
- package/dist/signer/local-keypair-signer.d.ts +11 -0
- package/dist/signer/local-keypair-signer.d.ts.map +1 -0
- package/dist/signer/local-keypair-signer.js +46 -0
- package/dist/signer/local-keypair-signer.js.map +1 -0
- package/dist/signer/signer-resolver.d.ts +10 -0
- package/dist/signer/signer-resolver.d.ts.map +1 -0
- package/dist/signer/signer-resolver.js +63 -0
- package/dist/signer/signer-resolver.js.map +1 -0
- package/dist/signer/signer-types.d.ts +35 -0
- package/dist/signer/signer-types.d.ts.map +1 -0
- package/dist/signer/signer-types.js +5 -0
- package/dist/signer/signer-types.js.map +1 -0
- package/dist/signer/signing-proxy.d.ts +45 -0
- package/dist/signer/signing-proxy.d.ts.map +1 -0
- package/dist/signer/signing-proxy.js +300 -0
- package/dist/signer/signing-proxy.js.map +1 -0
- package/dist/tools/client-sdk-tools.d.ts +22 -0
- package/dist/tools/client-sdk-tools.d.ts.map +1 -0
- package/dist/tools/client-sdk-tools.js +220 -0
- package/dist/tools/client-sdk-tools.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +17 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/profile-tools.d.ts +12 -0
- package/dist/tools/profile-tools.d.ts.map +1 -0
- package/dist/tools/profile-tools.js +250 -0
- package/dist/tools/profile-tools.js.map +1 -0
- package/dist/tools/register-tools.d.ts +12 -0
- package/dist/tools/register-tools.d.ts.map +1 -0
- package/dist/tools/register-tools.js +36 -0
- package/dist/tools/register-tools.js.map +1 -0
- package/dist/tools/sap-network-stats.tool.d.ts +14 -0
- package/dist/tools/sap-network-stats.tool.d.ts.map +1 -0
- package/dist/tools/sap-network-stats.tool.js +101 -0
- package/dist/tools/sap-network-stats.tool.js.map +1 -0
- package/dist/tools/sap-sdk-tools.d.ts +15 -0
- package/dist/tools/sap-sdk-tools.d.ts.map +1 -0
- package/dist/tools/sap-sdk-tools.js +1515 -0
- package/dist/tools/sap-sdk-tools.js.map +1 -0
- package/dist/tools/sap-sns-tools.d.ts +35 -0
- package/dist/tools/sap-sns-tools.d.ts.map +1 -0
- package/dist/tools/sap-sns-tools.js +626 -0
- package/dist/tools/sap-sns-tools.js.map +1 -0
- package/dist/tools/skills-tools.d.ts +12 -0
- package/dist/tools/skills-tools.d.ts.map +1 -0
- package/dist/tools/skills-tools.js +273 -0
- package/dist/tools/skills-tools.js.map +1 -0
- package/dist/tools/transaction-tools.d.ts +14 -0
- package/dist/tools/transaction-tools.d.ts.map +1 -0
- package/dist/tools/transaction-tools.js +297 -0
- package/dist/tools/transaction-tools.js.map +1 -0
- package/dist/transports/http.d.ts +40 -0
- package/dist/transports/http.d.ts.map +1 -0
- package/dist/transports/http.js +212 -0
- package/dist/transports/http.js.map +1 -0
- package/dist/transports/index.d.ts +6 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports/index.js +6 -0
- package/dist/transports/index.js.map +1 -0
- package/dist/transports/stdio.d.ts +14 -0
- package/dist/transports/stdio.d.ts.map +1 -0
- package/dist/transports/stdio.js +32 -0
- package/dist/transports/stdio.js.map +1 -0
- package/dist/tui/components.d.ts +59 -0
- package/dist/tui/components.d.ts.map +1 -0
- package/dist/tui/components.js +82 -0
- package/dist/tui/components.js.map +1 -0
- package/dist/tui/config-wizard.d.ts +12 -0
- package/dist/tui/config-wizard.d.ts.map +1 -0
- package/dist/tui/config-wizard.js +348 -0
- package/dist/tui/config-wizard.js.map +1 -0
- package/dist/tui/wizard-save.d.ts +51 -0
- package/dist/tui/wizard-save.d.ts.map +1 -0
- package/dist/tui/wizard-save.js +148 -0
- package/dist/tui/wizard-save.js.map +1 -0
- package/docs/00_README.md +45 -0
- package/docs/01_PRODUCT_OVERVIEW.md +69 -0
- package/docs/02_ARCHITECTURE_AND_REQUEST_FLOW.md +120 -0
- package/docs/03_CONFIGURATION_AND_WIZARD.md +143 -0
- package/docs/04_LOCAL_STDIO_USAGE.md +118 -0
- package/docs/05_REMOTE_VPS_DEPLOYMENT.md +136 -0
- package/docs/06_PAYMENTS_X402_AND_PAYSH.md +162 -0
- package/docs/07_ENDPOINTS_AND_CLIENTS.md +114 -0
- package/docs/08_SECURITY_POLICY_AND_SIGNING.md +134 -0
- package/docs/09_TOOLS_SKILLS_AND_AGENT_GUIDE.md +72 -0
- package/docs/10_OPERATIONS_RELEASE_AND_PM2.md +90 -0
- package/docs/11_CODE_QUALITY_AUDIT.md +49 -0
- package/ecosystem.config.example.cjs +55 -0
- package/package.json +132 -0
- package/skills/README.md +146 -0
- package/skills/sap-agent-registry/SKILL.md +39 -0
- package/skills/sap-agentkit/SKILL.md +40 -0
- package/skills/sap-defi/SKILL.md +51 -0
- package/skills/sap-discovery-indexing/SKILL.md +33 -0
- package/skills/sap-escrow-settlement/SKILL.md +37 -0
- package/skills/sap-ledger-session/SKILL.md +24 -0
- package/skills/sap-market-data/SKILL.md +36 -0
- package/skills/sap-mcp/SKILL.md +202 -0
- package/skills/sap-mcp/TOOL_REFERENCE.md +184 -0
- package/skills/sap-memory-vault/SKILL.md +29 -0
- package/skills/sap-nft-metaplex/SKILL.md +38 -0
- package/skills/sap-operations/SKILL.md +97 -0
- package/skills/sap-payments-x402/SKILL.md +47 -0
- package/skills/sap-reputation-attestation/SKILL.md +30 -0
- package/skills/sap-sns/SKILL.md +51 -0
- package/skills/sap-social-gaming/SKILL.md +30 -0
- package/skills/sap-solana-token/SKILL.md +32 -0
- package/skills/sap-staking/SKILL.md +24 -0
- package/skills/sap-tool-registry/SKILL.md +29 -0
|
@@ -0,0 +1,626 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SAP SNS MCP tools.
|
|
3
|
+
*
|
|
4
|
+
* Wraps the SNS integration from `@oobe-protocol-labs/synapse-sap-sdk@0.21.x` and
|
|
5
|
+
* `@bonfida/spl-name-service`.
|
|
6
|
+
*
|
|
7
|
+
* Architecture (v0.21.0 — Free Choice Record System):
|
|
8
|
+
* - `SnsModule` (modules/sns) is the primary SDK module for SAP agent domain operations:
|
|
9
|
+
* registration, resolution, availability, validation, PDA derivation.
|
|
10
|
+
* - Bonfida SDK functions are used directly for record management and domain queries
|
|
11
|
+
* not covered by SnsModule.
|
|
12
|
+
* - `sns-standalone` (SnsSdk) is DEPRECATED and removed in v0.21.0.
|
|
13
|
+
*
|
|
14
|
+
* Tool groups:
|
|
15
|
+
* - Registration: `sap_sns_register_agent_domain` (SnsModule — signs + submits with USDC)
|
|
16
|
+
* - Availability: `sap_sns_check_domain`, `sap_sns_batch_check_domains` (SnsModule)
|
|
17
|
+
* - Resolution: `sap_sns_resolve_domain` (SnsModule), `sap_sns_resolve_wallet` (Bonfida)
|
|
18
|
+
* - Records: `sap_sns_get_domain_records`, `sap_sns_get_record` (Bonfida)
|
|
19
|
+
* - Ownership: `sap_sns_check_ownership` (Bonfida)
|
|
20
|
+
* - PDA: `sap_sns_get_domain_pda`, `sap_sns_get_record_pda` (SnsModule)
|
|
21
|
+
* - Validation: `sap_sns_validate_records` (SnsModule)
|
|
22
|
+
* - Record management: `sap_sns_build_manage_record_transaction`, `sap_sns_build_set_primary_domain_transaction` (Bonfida)
|
|
23
|
+
*/
|
|
24
|
+
import { PublicKey, Transaction } from '@solana/web3.js';
|
|
25
|
+
import { SnsModule, Record as SnsRecord } from '@oobe-protocol-labs/synapse-sap-sdk/modules/sns';
|
|
26
|
+
import { getDomainKeySync, getRecordKeySync, getRecord as bonfidaGetRecord, getRecords as bonfidaGetRecords, createRecordInstruction as bonfidaCreateRecordInstruction, deleteNameRegistry, getNameOwner, Record as BonfidaRecord, } from '@bonfida/spl-name-service';
|
|
27
|
+
import { createTextResponse } from '../adapters/mcp/tool-response.js';
|
|
28
|
+
import { registerTool } from '../adapters/mcp/sdk-compat.js';
|
|
29
|
+
import { loadKeypairFromFile } from '../signer/load-keypair.js';
|
|
30
|
+
import { logger } from '../core/logger.js';
|
|
31
|
+
const SNS_RECORD_KEYS = [
|
|
32
|
+
'SOL',
|
|
33
|
+
'Pic',
|
|
34
|
+
'TXT',
|
|
35
|
+
'Url',
|
|
36
|
+
'Twitter',
|
|
37
|
+
'Discord',
|
|
38
|
+
'Telegram',
|
|
39
|
+
'Github',
|
|
40
|
+
'Email',
|
|
41
|
+
'IPFS',
|
|
42
|
+
'ARWV',
|
|
43
|
+
'IPNS',
|
|
44
|
+
'ETH',
|
|
45
|
+
'BTC',
|
|
46
|
+
'BSC',
|
|
47
|
+
'Injective',
|
|
48
|
+
'LTC',
|
|
49
|
+
'DOGE',
|
|
50
|
+
'A',
|
|
51
|
+
'AAAA',
|
|
52
|
+
'CNAME',
|
|
53
|
+
'Reddit',
|
|
54
|
+
'Background',
|
|
55
|
+
'Backpack',
|
|
56
|
+
'POINT',
|
|
57
|
+
'BASE',
|
|
58
|
+
'SHDW',
|
|
59
|
+
];
|
|
60
|
+
// ============================================================================
|
|
61
|
+
// Serialization helpers
|
|
62
|
+
// ============================================================================
|
|
63
|
+
/**
|
|
64
|
+
* @name jsonReplacer
|
|
65
|
+
* @description Serializes SDK values returned by SNS tools into JSON-safe output.
|
|
66
|
+
*/
|
|
67
|
+
function jsonReplacer(_key, value) {
|
|
68
|
+
if (value instanceof PublicKey) {
|
|
69
|
+
return value.toBase58();
|
|
70
|
+
}
|
|
71
|
+
if (value instanceof Map) {
|
|
72
|
+
return Object.fromEntries(value.entries());
|
|
73
|
+
}
|
|
74
|
+
if (value instanceof Uint8Array) {
|
|
75
|
+
return Array.from(value);
|
|
76
|
+
}
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* @name ok
|
|
81
|
+
* @description Wraps successful SNS output in a consistent MCP text response.
|
|
82
|
+
*/
|
|
83
|
+
function ok(payload) {
|
|
84
|
+
const objectPayload = payload && typeof payload === 'object' && !Array.isArray(payload)
|
|
85
|
+
? payload
|
|
86
|
+
: { result: payload };
|
|
87
|
+
return createTextResponse(JSON.stringify({ success: true, ...objectPayload }, jsonReplacer, 2));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* @name errorResponse
|
|
91
|
+
* @description Wraps SNS failures in an MCP error response without throwing through the transport.
|
|
92
|
+
*/
|
|
93
|
+
function errorResponse(error) {
|
|
94
|
+
return createTextResponse(`Error: ${error instanceof Error ? error.message : 'Unknown SNS error'}`, { isError: true });
|
|
95
|
+
}
|
|
96
|
+
// ============================================================================
|
|
97
|
+
// Input parsing helpers
|
|
98
|
+
// ============================================================================
|
|
99
|
+
/**
|
|
100
|
+
* @name requiredString
|
|
101
|
+
* @description Reads a required string field from MCP input.
|
|
102
|
+
*/
|
|
103
|
+
function requiredString(input, field) {
|
|
104
|
+
const value = input[field];
|
|
105
|
+
if (typeof value !== 'string' || value.trim() === '') {
|
|
106
|
+
throw new Error(`${field} is required`);
|
|
107
|
+
}
|
|
108
|
+
return value.trim();
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* @name optionalString
|
|
112
|
+
* @description Reads an optional string field from MCP input.
|
|
113
|
+
*/
|
|
114
|
+
function optionalString(input, field) {
|
|
115
|
+
const value = input[field];
|
|
116
|
+
return typeof value === 'string' && value.trim() !== '' ? value.trim() : undefined;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* @name optionalBoolean
|
|
120
|
+
* @description Reads an optional boolean field from MCP input.
|
|
121
|
+
*/
|
|
122
|
+
function optionalBoolean(input, field) {
|
|
123
|
+
const value = input[field];
|
|
124
|
+
if (value === undefined || value === null) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
if (typeof value !== 'boolean') {
|
|
128
|
+
throw new Error(`${field} must be a boolean`);
|
|
129
|
+
}
|
|
130
|
+
return value;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* @name optionalNumber
|
|
134
|
+
* @description Reads an optional finite number field from MCP input.
|
|
135
|
+
*/
|
|
136
|
+
function optionalNumber(input, field) {
|
|
137
|
+
const value = input[field];
|
|
138
|
+
if (value === undefined || value === null || value === '') {
|
|
139
|
+
return undefined;
|
|
140
|
+
}
|
|
141
|
+
if (typeof value === 'number' && Number.isFinite(value)) {
|
|
142
|
+
return value;
|
|
143
|
+
}
|
|
144
|
+
if (typeof value === 'string' && Number.isFinite(Number(value))) {
|
|
145
|
+
return Number(value);
|
|
146
|
+
}
|
|
147
|
+
throw new Error(`${field} must be a finite number`);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* @name requiredPublicKey
|
|
151
|
+
* @description Reads a required base58 public key from MCP input.
|
|
152
|
+
*/
|
|
153
|
+
function requiredPublicKey(input, field) {
|
|
154
|
+
return new PublicKey(requiredString(input, field));
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* @name optionalStringArray
|
|
158
|
+
* @description Reads an optional string array from MCP input.
|
|
159
|
+
*/
|
|
160
|
+
function optionalStringArray(input, field) {
|
|
161
|
+
const value = input[field];
|
|
162
|
+
if (value === undefined || value === null) {
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
if (!Array.isArray(value) || !value.every((item) => typeof item === 'string')) {
|
|
166
|
+
throw new Error(`${field} must be an array of strings`);
|
|
167
|
+
}
|
|
168
|
+
return value;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* @name optionalRecord
|
|
172
|
+
* @description Reads an optional object field from MCP input.
|
|
173
|
+
*/
|
|
174
|
+
function optionalRecord(input, field) {
|
|
175
|
+
const value = input[field];
|
|
176
|
+
if (value === undefined || value === null) {
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
180
|
+
throw new Error(`${field} must be an object`);
|
|
181
|
+
}
|
|
182
|
+
return value;
|
|
183
|
+
}
|
|
184
|
+
// ============================================================================
|
|
185
|
+
// Domain and record helpers
|
|
186
|
+
// ============================================================================
|
|
187
|
+
/**
|
|
188
|
+
* @name normalizeDomain
|
|
189
|
+
* @description Strips .sol suffix and lowercases for SDK methods that expect bare names.
|
|
190
|
+
*/
|
|
191
|
+
function normalizeDomain(domain) {
|
|
192
|
+
const trimmed = domain.trim().toLowerCase();
|
|
193
|
+
return trimmed.endsWith('.sol') ? trimmed.slice(0, -4) : trimmed;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* @name ensureFullDomain
|
|
197
|
+
* @description Ensures a domain name has the .sol suffix for Bonfida SDK calls.
|
|
198
|
+
*/
|
|
199
|
+
function ensureFullDomain(domain) {
|
|
200
|
+
const trimmed = domain.trim().toLowerCase();
|
|
201
|
+
return trimmed.endsWith('.sol') ? trimmed : `${trimmed}.sol`;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* @name parseSnsRecordType
|
|
205
|
+
* @description Parses SNS record type names or values into Bonfida record enum values.
|
|
206
|
+
*/
|
|
207
|
+
function parseSnsRecordType(input, field) {
|
|
208
|
+
const raw = requiredString(input, field).toLowerCase();
|
|
209
|
+
const entries = Object.entries(SnsRecord);
|
|
210
|
+
const match = entries.find(([key, value]) => key.toLowerCase() === raw || String(value).toLowerCase() === raw);
|
|
211
|
+
if (!match) {
|
|
212
|
+
throw new Error(`${field} must be one of: ${entries.map(([key]) => key).join(', ')}`);
|
|
213
|
+
}
|
|
214
|
+
return match[1];
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* @name parseSapData
|
|
218
|
+
* @description Builds optional SAP structured data for the SNS TXT record.
|
|
219
|
+
*/
|
|
220
|
+
function parseSapData(input) {
|
|
221
|
+
const sapData = optionalRecord(input, 'sapData');
|
|
222
|
+
const capabilities = optionalStringArray(input, 'capabilities');
|
|
223
|
+
const protocols = optionalStringArray(input, 'protocols');
|
|
224
|
+
const x402Endpoint = optionalString(input, 'x402Endpoint');
|
|
225
|
+
const agentUri = optionalString(input, 'agentUri');
|
|
226
|
+
const metadataUri = optionalString(input, 'metadataUri');
|
|
227
|
+
const merged = {
|
|
228
|
+
...(sapData ?? {}),
|
|
229
|
+
...(capabilities ? { capabilities } : {}),
|
|
230
|
+
...(protocols ? { protocols } : {}),
|
|
231
|
+
...(x402Endpoint ? { x402Endpoint } : {}),
|
|
232
|
+
...(agentUri ? { agentUri } : {}),
|
|
233
|
+
...(metadataUri ? { metadataUri } : {}),
|
|
234
|
+
};
|
|
235
|
+
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* @name assignSnsRecord
|
|
239
|
+
* @description Assigns an optional SNS record field while preserving the SDK record map type.
|
|
240
|
+
*/
|
|
241
|
+
function assignSnsRecord(records, key, value) {
|
|
242
|
+
if (typeof value === 'string' && value.trim() !== '') {
|
|
243
|
+
records[key] = value.trim();
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* @name parseSnsRecordMap
|
|
248
|
+
* @description Converts MCP input into the strongly typed SNS record map expected by the SDK.
|
|
249
|
+
*
|
|
250
|
+
* Note: SOL record is NOT included during registration — it requires createSolRecordInstruction
|
|
251
|
+
* (with Ed25519 signature), not createRecordInstruction. Set it after registration using
|
|
252
|
+
* sap_sns_build_manage_record_transaction with recordType "SOL".
|
|
253
|
+
*/
|
|
254
|
+
function parseSnsRecordMap(input) {
|
|
255
|
+
const recordsInput = optionalRecord(input, 'records');
|
|
256
|
+
const pic = optionalString(input, 'pic') ?? recordsInput?.Pic;
|
|
257
|
+
if (!pic) {
|
|
258
|
+
throw new Error('pic or records.Pic is required because SNS core records require Pic');
|
|
259
|
+
}
|
|
260
|
+
const records = {
|
|
261
|
+
Pic: pic,
|
|
262
|
+
};
|
|
263
|
+
if (recordsInput) {
|
|
264
|
+
for (const key of SNS_RECORD_KEYS) {
|
|
265
|
+
// Skip SOL — set it after registration via buildManageRecordTx
|
|
266
|
+
if (key === 'SOL')
|
|
267
|
+
continue;
|
|
268
|
+
assignSnsRecord(records, key, recordsInput[key]);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
const sapData = parseSapData(input);
|
|
272
|
+
if (sapData) {
|
|
273
|
+
records.TXT = JSON.stringify(sapData);
|
|
274
|
+
}
|
|
275
|
+
assignSnsRecord(records, 'Url', optionalString(input, 'url') ?? optionalString(input, 'endpoint'));
|
|
276
|
+
assignSnsRecord(records, 'Twitter', optionalString(input, 'twitter'));
|
|
277
|
+
assignSnsRecord(records, 'Discord', optionalString(input, 'discord'));
|
|
278
|
+
assignSnsRecord(records, 'Telegram', optionalString(input, 'telegram'));
|
|
279
|
+
assignSnsRecord(records, 'Github', optionalString(input, 'github'));
|
|
280
|
+
assignSnsRecord(records, 'Email', optionalString(input, 'email'));
|
|
281
|
+
assignSnsRecord(records, 'IPFS', optionalString(input, 'ipfs'));
|
|
282
|
+
assignSnsRecord(records, 'ARWV', optionalString(input, 'arweave'));
|
|
283
|
+
assignSnsRecord(records, 'IPNS', optionalString(input, 'ipns'));
|
|
284
|
+
assignSnsRecord(records, 'ETH', optionalString(input, 'eth'));
|
|
285
|
+
assignSnsRecord(records, 'BTC', optionalString(input, 'btc'));
|
|
286
|
+
assignSnsRecord(records, 'BSC', optionalString(input, 'bsc'));
|
|
287
|
+
assignSnsRecord(records, 'Injective', optionalString(input, 'injective'));
|
|
288
|
+
assignSnsRecord(records, 'LTC', optionalString(input, 'ltc'));
|
|
289
|
+
assignSnsRecord(records, 'DOGE', optionalString(input, 'doge'));
|
|
290
|
+
assignSnsRecord(records, 'A', optionalString(input, 'a'));
|
|
291
|
+
assignSnsRecord(records, 'AAAA', optionalString(input, 'aaaa'));
|
|
292
|
+
assignSnsRecord(records, 'CNAME', optionalString(input, 'cname'));
|
|
293
|
+
assignSnsRecord(records, 'Reddit', optionalString(input, 'reddit'));
|
|
294
|
+
assignSnsRecord(records, 'Background', optionalString(input, 'background'));
|
|
295
|
+
assignSnsRecord(records, 'Backpack', optionalString(input, 'backpack'));
|
|
296
|
+
assignSnsRecord(records, 'POINT', optionalString(input, 'point'));
|
|
297
|
+
assignSnsRecord(records, 'BASE', optionalString(input, 'base'));
|
|
298
|
+
assignSnsRecord(records, 'SHDW', optionalString(input, 'shdw'));
|
|
299
|
+
return records;
|
|
300
|
+
}
|
|
301
|
+
// ============================================================================
|
|
302
|
+
// SDK module factory helpers
|
|
303
|
+
// ============================================================================
|
|
304
|
+
/**
|
|
305
|
+
* @name createSnsModule
|
|
306
|
+
* @description Creates the SAP SNS module (modules/sns) for agent domain registration and resolution.
|
|
307
|
+
*/
|
|
308
|
+
function createSnsModule(context) {
|
|
309
|
+
return new SnsModule({
|
|
310
|
+
connection: context.connection,
|
|
311
|
+
sapProgramId: context.config.programId,
|
|
312
|
+
defaultCommitment: context.config.commitment,
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* @name requireLocalRegistrationSigner
|
|
317
|
+
* @description Loads the configured local keypair for SNS registration and verifies the expected wallet.
|
|
318
|
+
*/
|
|
319
|
+
function requireLocalRegistrationSigner(context, agentWallet) {
|
|
320
|
+
if (context.config.mode !== 'local-dev-keypair' || !context.config.walletPath) {
|
|
321
|
+
throw new Error('SNS direct registration requires local-dev-keypair mode and a configured SAP_WALLET_PATH');
|
|
322
|
+
}
|
|
323
|
+
const keypair = loadKeypairFromFile(context.config.walletPath);
|
|
324
|
+
if (!keypair.publicKey.equals(agentWallet)) {
|
|
325
|
+
throw new Error(`Configured wallet ${keypair.publicKey.toBase58()} does not match agentWallet ${agentWallet.toBase58()}`);
|
|
326
|
+
}
|
|
327
|
+
return keypair;
|
|
328
|
+
}
|
|
329
|
+
// ============================================================================
|
|
330
|
+
// Bonfida SDK helpers (for operations not available in SnsModule)
|
|
331
|
+
// ============================================================================
|
|
332
|
+
/**
|
|
333
|
+
* @name bonfidaGetDomainRecords
|
|
334
|
+
* @description Fetches all configured SNS records for a domain using Bonfida SDK directly.
|
|
335
|
+
*
|
|
336
|
+
* This replaces the deprecated SnsSdk.getDomainRecords() method.
|
|
337
|
+
*/
|
|
338
|
+
async function bonfidaGetDomainRecords(connection, domain) {
|
|
339
|
+
const fullDomain = ensureFullDomain(domain);
|
|
340
|
+
const recordEntries = Object.entries(BonfidaRecord);
|
|
341
|
+
const recordKeys = recordEntries.map(([, value]) => value);
|
|
342
|
+
const results = await bonfidaGetRecords(connection, fullDomain, recordKeys, true);
|
|
343
|
+
const records = {};
|
|
344
|
+
recordEntries.forEach(([key, _value], index) => {
|
|
345
|
+
const result = results[index];
|
|
346
|
+
if (result !== undefined && result !== null) {
|
|
347
|
+
records[key] = result;
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
return records;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* @name bonfidaBuildManageRecordTx
|
|
354
|
+
* @description Builds an unsigned transaction for creating/updating/deleting an SNS record.
|
|
355
|
+
*
|
|
356
|
+
* This replaces the deprecated SnsSdk.buildManageRecordTx() method.
|
|
357
|
+
* Uses createRecordInstruction from Bonfida SDK directly.
|
|
358
|
+
*
|
|
359
|
+
* Note: SOL record is not supported by createRecordInstruction — it requires
|
|
360
|
+
* createSolRecordInstruction with an Ed25519 signature. This is an SDK limitation.
|
|
361
|
+
*/
|
|
362
|
+
async function bonfidaBuildManageRecordTx(connection, domain, recordType, value, owner) {
|
|
363
|
+
if (value === null) {
|
|
364
|
+
// Delete: use delete instruction
|
|
365
|
+
// getRecordKeySync returns PublicKey directly (not an object with .pubkey)
|
|
366
|
+
const recordKey = getRecordKeySync(ensureFullDomain(domain), recordType);
|
|
367
|
+
void recordKey; // available for future use (e.g. streaming buffer checks)
|
|
368
|
+
// getDomainKeySync returns { pubkey, hashed, parent }
|
|
369
|
+
const { pubkey: _domainKey } = getDomainKeySync(ensureFullDomain(domain));
|
|
370
|
+
void _domainKey;
|
|
371
|
+
const deleteIx = await deleteNameRegistry(connection, `${ensureFullDomain(domain)}.${recordType}`, owner);
|
|
372
|
+
const tx = new Transaction().add(deleteIx);
|
|
373
|
+
tx.feePayer = owner;
|
|
374
|
+
tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;
|
|
375
|
+
return { transactionBase64: Buffer.from(tx.serialize({ requireAllSignatures: false })).toString('base64') };
|
|
376
|
+
}
|
|
377
|
+
// Create/update: use createRecordInstruction
|
|
378
|
+
const fullDomain = ensureFullDomain(domain);
|
|
379
|
+
// SOL record is not supported by createRecordInstruction
|
|
380
|
+
if (recordType === BonfidaRecord.SOL) {
|
|
381
|
+
throw new Error('SOL record cannot be created with createRecordInstruction. ' +
|
|
382
|
+
'It requires createSolRecordInstruction with an Ed25519 signature. ' +
|
|
383
|
+
'This is a Bonfida SDK limitation.');
|
|
384
|
+
}
|
|
385
|
+
const ix = await bonfidaCreateRecordInstruction(connection, fullDomain, recordType, value, owner, owner);
|
|
386
|
+
const tx = new Transaction().add(ix);
|
|
387
|
+
tx.feePayer = owner;
|
|
388
|
+
tx.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;
|
|
389
|
+
return { transactionBase64: Buffer.from(tx.serialize({ requireAllSignatures: false })).toString('base64') };
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* @name bonfidaResolveDomain
|
|
393
|
+
* @description Resolves a .sol domain to its owner wallet using Bonfida SDK directly.
|
|
394
|
+
*
|
|
395
|
+
* This replaces the deprecated SnsSdk.resolveDomain() method.
|
|
396
|
+
*/
|
|
397
|
+
async function bonfidaResolveDomain(connection, domain) {
|
|
398
|
+
const { pubkey: domainKey } = getDomainKeySync(ensureFullDomain(domain));
|
|
399
|
+
const owner = await getNameOwner(connection, domainKey);
|
|
400
|
+
return owner?.registry?.owner?.toBase58() ?? null;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* @name bonfidaCheckOwnership
|
|
404
|
+
* @description Checks if a wallet owns a .sol domain using Bonfida SDK directly.
|
|
405
|
+
*
|
|
406
|
+
* This replaces the deprecated SnsSdk.checkOwnership() method.
|
|
407
|
+
*/
|
|
408
|
+
async function bonfidaCheckOwnership(connection, domain, owner) {
|
|
409
|
+
const { pubkey: domainKey } = getDomainKeySync(ensureFullDomain(domain));
|
|
410
|
+
const ownerInfo = await getNameOwner(connection, domainKey);
|
|
411
|
+
if (!ownerInfo?.registry?.owner) {
|
|
412
|
+
return false;
|
|
413
|
+
}
|
|
414
|
+
return ownerInfo.registry.owner.equals(owner);
|
|
415
|
+
}
|
|
416
|
+
// ============================================================================
|
|
417
|
+
// Tool registration helper
|
|
418
|
+
// ============================================================================
|
|
419
|
+
/**
|
|
420
|
+
* @name registerSnsTool
|
|
421
|
+
* @description Registers a single SNS MCP tool with standard error handling.
|
|
422
|
+
*/
|
|
423
|
+
function registerSnsTool(server, tool) {
|
|
424
|
+
registerTool(server, tool.name, {
|
|
425
|
+
title: tool.title,
|
|
426
|
+
description: tool.description,
|
|
427
|
+
inputSchema: tool.inputSchema,
|
|
428
|
+
}, async (input) => {
|
|
429
|
+
try {
|
|
430
|
+
const args = input && typeof input === 'object' && !Array.isArray(input) ? input : {};
|
|
431
|
+
return ok(await tool.handler(args));
|
|
432
|
+
}
|
|
433
|
+
catch (error) {
|
|
434
|
+
logger.error(`SAP SNS tool failed: ${tool.name}`, { error });
|
|
435
|
+
return errorResponse(error);
|
|
436
|
+
}
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
// ============================================================================
|
|
440
|
+
// Tool definitions
|
|
441
|
+
// ============================================================================
|
|
442
|
+
/**
|
|
443
|
+
* @name createSnsTools
|
|
444
|
+
* @description Creates all SNS tool registrations against the current SAP MCP context.
|
|
445
|
+
*
|
|
446
|
+
* Tools use SnsModule (modules/sns) as primary SDK and Bonfida SDK functions
|
|
447
|
+
* for record management and queries not available in SnsModule.
|
|
448
|
+
*/
|
|
449
|
+
function createSnsTools(context) {
|
|
450
|
+
return [
|
|
451
|
+
// --- SnsModule: Availability checks ---
|
|
452
|
+
{
|
|
453
|
+
name: 'sap_sns_check_domain',
|
|
454
|
+
title: 'Check SNS Domain',
|
|
455
|
+
description: 'Check whether a .sol domain is available for registration using the SAP SDK SnsModule.',
|
|
456
|
+
inputSchema: { domain: { type: 'string', description: 'The .sol domain name to check for availability (with or without .sol suffix)' } },
|
|
457
|
+
handler: async (input) => ({ available: await createSnsModule(context).checkAvailability(requiredString(input, 'domain')) }),
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
name: 'sap_sns_batch_check_domains',
|
|
461
|
+
title: 'Batch Check SNS Domains',
|
|
462
|
+
description: 'Check availability for multiple .sol domains (up to 25) using the SAP SDK SnsModule.',
|
|
463
|
+
inputSchema: { domains: { type: 'array', items: { type: 'string', description: 'A .sol domain name to check (with or without .sol suffix)' }, description: 'Array of .sol domain names to batch-check for availability (1-25 domains)' } },
|
|
464
|
+
handler: async (input) => {
|
|
465
|
+
const domains = optionalStringArray(input, 'domains');
|
|
466
|
+
if (!domains || domains.length === 0) {
|
|
467
|
+
throw new Error('domains must contain at least one domain');
|
|
468
|
+
}
|
|
469
|
+
return { availability: await createSnsModule(context).batchCheckAvailability(domains) };
|
|
470
|
+
},
|
|
471
|
+
},
|
|
472
|
+
// --- SnsModule: Domain resolution ---
|
|
473
|
+
{
|
|
474
|
+
name: 'sap_sns_resolve_domain',
|
|
475
|
+
title: 'Resolve SAP SNS Domain',
|
|
476
|
+
description: 'Resolve a .sol domain to SAP agent identity, wallet, metadata, and SNS records using the SAP SDK SnsModule.',
|
|
477
|
+
inputSchema: { domain: { type: 'string', description: 'The .sol domain name to resolve to SAP agent identity and SNS records' } },
|
|
478
|
+
handler: async (input) => ({ resolution: await createSnsModule(context).resolveAgentDomain(requiredString(input, 'domain')) }),
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
name: 'sap_sns_validate_records',
|
|
482
|
+
title: 'Validate SAP SNS Records',
|
|
483
|
+
description: 'Validate SNS records for SAP agent compatibility (checks SOL, Pic, TXT records on-chain).',
|
|
484
|
+
inputSchema: { domain: { type: 'string', description: 'The .sol domain name whose SNS records should be validated for SAP agent compatibility' } },
|
|
485
|
+
handler: async (input) => await createSnsModule(context).validateAgentRecords(requiredString(input, 'domain')),
|
|
486
|
+
},
|
|
487
|
+
// --- SnsModule: PDA derivation ---
|
|
488
|
+
{
|
|
489
|
+
name: 'sap_sns_get_domain_pda',
|
|
490
|
+
title: 'Get SNS Domain PDA',
|
|
491
|
+
description: 'Derive the SNS domain PDA for a .sol domain using the SAP SDK SnsModule.',
|
|
492
|
+
inputSchema: { domain: { type: 'string', description: 'The .sol domain name to derive the SNS domain PDA for' } },
|
|
493
|
+
handler: async (input) => ({ domainPda: createSnsModule(context).getDomainPda(requiredString(input, 'domain')) }),
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
name: 'sap_sns_get_record_pda',
|
|
497
|
+
title: 'Get SNS Record PDA',
|
|
498
|
+
description: 'Derive the SNS record PDA for a domain and record type using the SAP SDK SnsModule.',
|
|
499
|
+
inputSchema: { domain: { type: 'string', description: 'The .sol domain name to derive the record PDA for' }, recordType: { type: 'string', description: 'The SNS record type for the PDA derivation (e.g. SOL, TXT, Url, IPFS, ETH, BTC, etc.)' } },
|
|
500
|
+
handler: async (input) => ({
|
|
501
|
+
recordPda: createSnsModule(context).getRecordPda(requiredString(input, 'domain'), parseSnsRecordType(input, 'recordType')),
|
|
502
|
+
}),
|
|
503
|
+
},
|
|
504
|
+
// --- SnsModule: Domain registration (the primary tool) ---
|
|
505
|
+
{
|
|
506
|
+
name: 'sap_sns_register_agent_domain',
|
|
507
|
+
title: 'Register SAP Agent SNS Domain',
|
|
508
|
+
description: 'Register a .sol domain for the configured local SAP agent wallet using the SAP SDK SnsModule. Builds, signs, and submits the full registration transaction with USDC payment in one call. Domain registration fees are paid in USDC plus SOL for rent and transaction fees. The SOL record is NOT set during registration (it requires a separate Ed25519 signature) — set it after using sap_sns_build_manage_record_transaction.',
|
|
509
|
+
inputSchema: {
|
|
510
|
+
domain: { type: 'string', description: 'The .sol domain name to register for the SAP agent (with or without .sol suffix)' },
|
|
511
|
+
agentWallet: { type: 'string', description: 'The Solana public key (base58) of the SAP agent wallet that will own the domain' },
|
|
512
|
+
pic: { type: 'string', description: 'Profile picture URL for the SNS Pic record (required if not provided in records.Pic)' },
|
|
513
|
+
records: { type: 'object', description: 'Optional map of SNS record key-value pairs to set during registration (e.g. { "Url": "https://...", "Twitter": "@handle" }). Note: SOL record is skipped during registration.' },
|
|
514
|
+
sapData: { type: 'object', description: 'Optional structured SAP metadata to embed in the domain TXT record (capabilities, protocols, endpoints, etc.)' },
|
|
515
|
+
capabilities: { type: 'array', items: { type: 'string', description: 'A SAP capability identifier (e.g. "jupiter:swap")' }, description: 'Optional list of SAP capability IDs to advertise in the domain TXT record' },
|
|
516
|
+
protocols: { type: 'array', items: { type: 'string', description: 'A protocol identifier (e.g. "sap", "mcp")' }, description: 'Optional list of protocol IDs the agent supports' },
|
|
517
|
+
setAsPrimary: { type: 'boolean', description: 'Whether to set this domain as the agent primary .sol domain' },
|
|
518
|
+
durationYears: { type: 'number', description: 'Registration duration in years (default: 1)' },
|
|
519
|
+
space: { type: 'number', description: 'Storage space in bytes for the domain name account (default: 600)' },
|
|
520
|
+
},
|
|
521
|
+
handler: async (input) => {
|
|
522
|
+
const agentWallet = requiredPublicKey(input, 'agentWallet');
|
|
523
|
+
const signer = requireLocalRegistrationSigner(context, agentWallet);
|
|
524
|
+
return {
|
|
525
|
+
registration: await createSnsModule(context).registerAgentDomain({
|
|
526
|
+
agentWallet,
|
|
527
|
+
domainName: normalizeDomain(requiredString(input, 'domain')),
|
|
528
|
+
records: parseSnsRecordMap(input),
|
|
529
|
+
signer,
|
|
530
|
+
durationYears: optionalNumber(input, 'durationYears'),
|
|
531
|
+
setAsPrimary: optionalBoolean(input, 'setAsPrimary'),
|
|
532
|
+
commitment: context.config.commitment,
|
|
533
|
+
space: optionalNumber(input, 'space'),
|
|
534
|
+
}),
|
|
535
|
+
};
|
|
536
|
+
},
|
|
537
|
+
},
|
|
538
|
+
// --- Bonfida SDK: Record fetching ---
|
|
539
|
+
{
|
|
540
|
+
name: 'sap_sns_get_domain_records',
|
|
541
|
+
title: 'Get SNS Domain Records',
|
|
542
|
+
description: 'Fetch all configured SNS records for a .sol domain using the Bonfida SDK. Returns a key-value map of all records.',
|
|
543
|
+
inputSchema: { domain: { type: 'string', description: 'The .sol domain name to fetch all configured SNS records for' } },
|
|
544
|
+
handler: async (input) => ({ records: await bonfidaGetDomainRecords(context.connection, requiredString(input, 'domain')) }),
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
name: 'sap_sns_get_record',
|
|
548
|
+
title: 'Get SNS Record',
|
|
549
|
+
description: 'Fetch a single SNS record value for a .sol domain using the Bonfida SDK.',
|
|
550
|
+
inputSchema: { domain: { type: 'string', description: 'The .sol domain name to fetch a record from' }, recordType: { type: 'string', description: 'The SNS record type to fetch (e.g. SOL, TXT, Url, IPFS, ETH, BTC, etc.)' } },
|
|
551
|
+
handler: async (input) => ({
|
|
552
|
+
record: await bonfidaGetRecord(context.connection, ensureFullDomain(requiredString(input, 'domain')), parseSnsRecordType(input, 'recordType'), true),
|
|
553
|
+
}),
|
|
554
|
+
},
|
|
555
|
+
// --- Bonfida SDK: Domain queries ---
|
|
556
|
+
{
|
|
557
|
+
name: 'sap_sns_resolve_wallet',
|
|
558
|
+
title: 'Resolve SNS Wallet',
|
|
559
|
+
description: 'Resolve a .sol domain to its owner wallet public key using the Bonfida SDK.',
|
|
560
|
+
inputSchema: { domain: { type: 'string', description: 'The .sol domain name to resolve to its owner wallet public key' } },
|
|
561
|
+
handler: async (input) => ({ wallet: await bonfidaResolveDomain(context.connection, requiredString(input, 'domain')) }),
|
|
562
|
+
},
|
|
563
|
+
{
|
|
564
|
+
name: 'sap_sns_check_ownership',
|
|
565
|
+
title: 'Check SNS Ownership',
|
|
566
|
+
description: 'Check whether a wallet owns a .sol domain using the Bonfida SDK.',
|
|
567
|
+
inputSchema: { domain: { type: 'string', description: 'The .sol domain name to check ownership of' }, owner: { type: 'string', description: 'The Solana public key (base58) of the wallet to verify as the domain owner' } },
|
|
568
|
+
handler: async (input) => ({
|
|
569
|
+
ownsDomain: await bonfidaCheckOwnership(context.connection, requiredString(input, 'domain'), requiredPublicKey(input, 'owner')),
|
|
570
|
+
}),
|
|
571
|
+
},
|
|
572
|
+
// --- Bonfida SDK: Record management (builds unsigned transactions) ---
|
|
573
|
+
{
|
|
574
|
+
name: 'sap_sns_build_manage_record_transaction',
|
|
575
|
+
title: 'Build SNS Manage Record Transaction',
|
|
576
|
+
description: 'Build an unsigned SNS record create/update/delete transaction using the Bonfida SDK. The returned transaction must be signed with sap_sign_transaction before submission. Use null value to delete a record. Note: SOL record is not supported — it requires a separate Ed25519 signature flow.',
|
|
577
|
+
inputSchema: {
|
|
578
|
+
domain: { type: 'string', description: 'The .sol domain name whose record should be created, updated, or deleted' },
|
|
579
|
+
recordType: { type: 'string', description: 'The SNS record type to manage (e.g. TXT, Url, IPFS, ETH, BTC, etc.)' },
|
|
580
|
+
value: { type: ['string', 'null'], description: 'The new record value as a string, or null to delete the record' },
|
|
581
|
+
owner: { type: 'string', description: 'The Solana public key (base58) of the domain owner authorizing the record change' },
|
|
582
|
+
},
|
|
583
|
+
handler: async (input) => {
|
|
584
|
+
const rawValue = input.value;
|
|
585
|
+
if (rawValue !== null && rawValue !== undefined && typeof rawValue !== 'string') {
|
|
586
|
+
throw new Error('value must be a string or null');
|
|
587
|
+
}
|
|
588
|
+
const recordValue = typeof rawValue === 'string' ? rawValue : null;
|
|
589
|
+
return {
|
|
590
|
+
transaction: await bonfidaBuildManageRecordTx(context.connection, requiredString(input, 'domain'), parseSnsRecordType(input, 'recordType'), recordValue, requiredPublicKey(input, 'owner')),
|
|
591
|
+
};
|
|
592
|
+
},
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
name: 'sap_sns_build_set_primary_domain_transaction',
|
|
596
|
+
title: 'Build SNS Set Primary Domain Transaction',
|
|
597
|
+
description: 'Build an unsigned transaction to set a .sol domain as primary for the owner using the Bonfida SDK. The returned transaction must be signed with sap_sign_transaction before submission.',
|
|
598
|
+
inputSchema: { domain: { type: 'string', description: 'The .sol domain name to set as primary for the owner' }, owner: { type: 'string', description: 'The Solana public key (base58) of the domain owner setting their primary domain' } },
|
|
599
|
+
handler: async () => {
|
|
600
|
+
throw new Error('Setting primary domain requires the Bonfida SNS CLI or direct program interaction. ' +
|
|
601
|
+
'This operation is not available via the Bonfida SDK JavaScript bindings.');
|
|
602
|
+
},
|
|
603
|
+
},
|
|
604
|
+
];
|
|
605
|
+
}
|
|
606
|
+
// ============================================================================
|
|
607
|
+
// Registration entry point
|
|
608
|
+
// ============================================================================
|
|
609
|
+
/**
|
|
610
|
+
* @name registerSapSnsTools
|
|
611
|
+
* @description Registers production SNS integration tools.
|
|
612
|
+
*
|
|
613
|
+
* Uses SnsModule from synapse-sap-sdk v0.21.0 as primary SDK module and
|
|
614
|
+
* Bonfida SDK functions for record management not covered by SnsModule.
|
|
615
|
+
* sns-standalone (SnsSdk) is deprecated and removed.
|
|
616
|
+
*/
|
|
617
|
+
export function registerSapSnsTools(server, context) {
|
|
618
|
+
logger.info('Registering SAP SNS tools');
|
|
619
|
+
let count = 0;
|
|
620
|
+
for (const tool of createSnsTools(context)) {
|
|
621
|
+
registerSnsTool(server, tool);
|
|
622
|
+
count++;
|
|
623
|
+
}
|
|
624
|
+
logger.info('SAP SNS tools registered', { count });
|
|
625
|
+
}
|
|
626
|
+
//# sourceMappingURL=sap-sns-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sap-sns-tools.js","sourceRoot":"","sources":["../../src/tools/sap-sns-tools.ts"],"names":[],"mappings":"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"}
|