@vendure/mcp-plugin 3.8.0-minor-bootstrap.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/lib/api/api-extensions.d.ts +2 -0
- package/lib/api/api-extensions.js +239 -0
- package/lib/api/api-extensions.js.map +1 -0
- package/lib/api/mcp-actor.service.d.ts +19 -0
- package/lib/api/mcp-actor.service.js +52 -0
- package/lib/api/mcp-actor.service.js.map +1 -0
- package/lib/api/mcp-admin.resolver.d.ts +105 -0
- package/lib/api/mcp-admin.resolver.js +463 -0
- package/lib/api/mcp-admin.resolver.js.map +1 -0
- package/lib/api/mcp-shop.resolver.d.ts +25 -0
- package/lib/api/mcp-shop.resolver.js +74 -0
- package/lib/api/mcp-shop.resolver.js.map +1 -0
- package/lib/check-options.d.ts +7 -0
- package/lib/check-options.js +130 -0
- package/lib/check-options.js.map +1 -0
- package/lib/constants.d.ts +48 -0
- package/lib/constants.js +72 -0
- package/lib/constants.js.map +1 -0
- package/lib/delete-in-batches.d.ts +5 -0
- package/lib/delete-in-batches.js +28 -0
- package/lib/delete-in-batches.js.map +1 -0
- package/lib/entities/index.d.ts +5 -0
- package/lib/entities/index.js +22 -0
- package/lib/entities/index.js.map +1 -0
- package/lib/entities/mcp-authorization-code.entity.d.ts +33 -0
- package/lib/entities/mcp-authorization-code.entity.js +77 -0
- package/lib/entities/mcp-authorization-code.entity.js.map +1 -0
- package/lib/entities/mcp-authorization-request.entity.d.ts +31 -0
- package/lib/entities/mcp-authorization-request.entity.js +73 -0
- package/lib/entities/mcp-authorization-request.entity.js.map +1 -0
- package/lib/entities/mcp-oauth-client.entity.d.ts +56 -0
- package/lib/entities/mcp-oauth-client.entity.js +70 -0
- package/lib/entities/mcp-oauth-client.entity.js.map +1 -0
- package/lib/entities/mcp-oauth-grant.entity.d.ts +77 -0
- package/lib/entities/mcp-oauth-grant.entity.js +121 -0
- package/lib/entities/mcp-oauth-grant.entity.js.map +1 -0
- package/lib/entities/mcp-tool-call-log.entity.d.ts +50 -0
- package/lib/entities/mcp-tool-call-log.entity.js +101 -0
- package/lib/entities/mcp-tool-call-log.entity.js.map +1 -0
- package/lib/events/mcp-tool-call.event.d.ts +17 -0
- package/lib/events/mcp-tool-call.event.js +23 -0
- package/lib/events/mcp-tool-call.event.js.map +1 -0
- package/lib/get-client-ip.d.ts +2 -0
- package/lib/get-client-ip.js +10 -0
- package/lib/get-client-ip.js.map +1 -0
- package/lib/get-language-code.d.ts +3 -0
- package/lib/get-language-code.js +12 -0
- package/lib/get-language-code.js.map +1 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +26 -0
- package/lib/index.js.map +1 -0
- package/lib/internal-types.d.ts +27 -0
- package/lib/internal-types.js +3 -0
- package/lib/internal-types.js.map +1 -0
- package/lib/logging/mcp-tool-call-log-retention.service.d.ts +8 -0
- package/lib/logging/mcp-tool-call-log-retention.service.js +54 -0
- package/lib/logging/mcp-tool-call-log-retention.service.js.map +1 -0
- package/lib/logging/mcp-tool-call-log.service.d.ts +24 -0
- package/lib/logging/mcp-tool-call-log.service.js +128 -0
- package/lib/logging/mcp-tool-call-log.service.js.map +1 -0
- package/lib/oauth/cimd/cimd-client-resolver.service.d.ts +18 -0
- package/lib/oauth/cimd/cimd-client-resolver.service.js +109 -0
- package/lib/oauth/cimd/cimd-client-resolver.service.js.map +1 -0
- package/lib/oauth/cimd/cimd-document.d.ts +11 -0
- package/lib/oauth/cimd/cimd-document.js +66 -0
- package/lib/oauth/cimd/cimd-document.js.map +1 -0
- package/lib/oauth/cimd/cimd-fetch.d.ts +14 -0
- package/lib/oauth/cimd/cimd-fetch.js +192 -0
- package/lib/oauth/cimd/cimd-fetch.js.map +1 -0
- package/lib/oauth/cimd/cimd-url.d.ts +5 -0
- package/lib/oauth/cimd/cimd-url.js +94 -0
- package/lib/oauth/cimd/cimd-url.js.map +1 -0
- package/lib/oauth/grant-session.service.d.ts +19 -0
- package/lib/oauth/grant-session.service.js +141 -0
- package/lib/oauth/grant-session.service.js.map +1 -0
- package/lib/oauth/oauth-error.d.ts +18 -0
- package/lib/oauth/oauth-error.js +60 -0
- package/lib/oauth/oauth-error.js.map +1 -0
- package/lib/oauth/oauth-metadata.service.d.ts +34 -0
- package/lib/oauth/oauth-metadata.service.js +107 -0
- package/lib/oauth/oauth-metadata.service.js.map +1 -0
- package/lib/oauth/oauth-retention.service.d.ts +23 -0
- package/lib/oauth/oauth-retention.service.js +103 -0
- package/lib/oauth/oauth-retention.service.js.map +1 -0
- package/lib/oauth/oauth-types.d.ts +61 -0
- package/lib/oauth/oauth-types.js +32 -0
- package/lib/oauth/oauth-types.js.map +1 -0
- package/lib/oauth/oauth-utils.d.ts +20 -0
- package/lib/oauth/oauth-utils.js +111 -0
- package/lib/oauth/oauth-utils.js.map +1 -0
- package/lib/oauth/oauth.controller.d.ts +31 -0
- package/lib/oauth/oauth.controller.js +132 -0
- package/lib/oauth/oauth.controller.js.map +1 -0
- package/lib/oauth/oauth.service.d.ts +69 -0
- package/lib/oauth/oauth.service.js +650 -0
- package/lib/oauth/oauth.service.js.map +1 -0
- package/lib/oauth/token-hash.d.ts +6 -0
- package/lib/oauth/token-hash.js +21 -0
- package/lib/oauth/token-hash.js.map +1 -0
- package/lib/plugin.d.ts +54 -0
- package/lib/plugin.js +171 -0
- package/lib/plugin.js.map +1 -0
- package/lib/rate-limit/ip-bucket-key.d.ts +1 -0
- package/lib/rate-limit/ip-bucket-key.js +35 -0
- package/lib/rate-limit/ip-bucket-key.js.map +1 -0
- package/lib/rate-limit/mcp-oauth-rate-limit.guard.d.ts +20 -0
- package/lib/rate-limit/mcp-oauth-rate-limit.guard.js +63 -0
- package/lib/rate-limit/mcp-oauth-rate-limit.guard.js.map +1 -0
- package/lib/rate-limit/mcp-rate-limiter.service.d.ts +47 -0
- package/lib/rate-limit/mcp-rate-limiter.service.js +248 -0
- package/lib/rate-limit/mcp-rate-limiter.service.js.map +1 -0
- package/lib/registry/bm25.d.ts +12 -0
- package/lib/registry/bm25.js +60 -0
- package/lib/registry/bm25.js.map +1 -0
- package/lib/registry/mcp-tool-execution.service.d.ts +45 -0
- package/lib/registry/mcp-tool-execution.service.js +72 -0
- package/lib/registry/mcp-tool-execution.service.js.map +1 -0
- package/lib/registry/mcp-tool-registry.service.d.ts +89 -0
- package/lib/registry/mcp-tool-registry.service.js +668 -0
- package/lib/registry/mcp-tool-registry.service.js.map +1 -0
- package/lib/registry/mcp-tool-schema.service.d.ts +42 -0
- package/lib/registry/mcp-tool-schema.service.js +229 -0
- package/lib/registry/mcp-tool-schema.service.js.map +1 -0
- package/lib/registry/registry-types.d.ts +32 -0
- package/lib/registry/registry-types.js +3 -0
- package/lib/registry/registry-types.js.map +1 -0
- package/lib/resolve-options.d.ts +7 -0
- package/lib/resolve-options.js +85 -0
- package/lib/resolve-options.js.map +1 -0
- package/lib/shared/endpoint-paths.d.ts +8 -0
- package/lib/shared/endpoint-paths.js +12 -0
- package/lib/shared/endpoint-paths.js.map +1 -0
- package/lib/shared/loopback.d.ts +2 -0
- package/lib/shared/loopback.js +9 -0
- package/lib/shared/loopback.js.map +1 -0
- package/lib/shop-session/mcp-shop-session.service.d.ts +47 -0
- package/lib/shop-session/mcp-shop-session.service.js +132 -0
- package/lib/shop-session/mcp-shop-session.service.js.map +1 -0
- package/lib/tasks/mcp-oauth-retention.task.d.ts +9 -0
- package/lib/tasks/mcp-oauth-retention.task.js +21 -0
- package/lib/tasks/mcp-oauth-retention.task.js.map +1 -0
- package/lib/tasks/mcp-tool-call-log-retention.task.d.ts +7 -0
- package/lib/tasks/mcp-tool-call-log-retention.task.js +22 -0
- package/lib/tasks/mcp-tool-call-log-retention.task.js.map +1 -0
- package/lib/tools/built-in/active-order.service.d.ts +26 -0
- package/lib/tools/built-in/active-order.service.js +125 -0
- package/lib/tools/built-in/active-order.service.js.map +1 -0
- package/lib/tools/built-in/admin/add-customer-to-group.tool.d.ts +23 -0
- package/lib/tools/built-in/admin/add-customer-to-group.tool.js +68 -0
- package/lib/tools/built-in/admin/add-customer-to-group.tool.js.map +1 -0
- package/lib/tools/built-in/admin/add-note-to-order.tool.d.ts +104 -0
- package/lib/tools/built-in/admin/add-note-to-order.tool.js +66 -0
- package/lib/tools/built-in/admin/add-note-to-order.tool.js.map +1 -0
- package/lib/tools/built-in/admin/adjust-stock.tool.d.ts +26 -0
- package/lib/tools/built-in/admin/adjust-stock.tool.js +88 -0
- package/lib/tools/built-in/admin/adjust-stock.tool.js.map +1 -0
- package/lib/tools/built-in/admin/cancel-order.tool.d.ts +17 -0
- package/lib/tools/built-in/admin/cancel-order.tool.js +60 -0
- package/lib/tools/built-in/admin/cancel-order.tool.js.map +1 -0
- package/lib/tools/built-in/admin/channel-access.d.ts +2 -0
- package/lib/tools/built-in/admin/channel-access.js +9 -0
- package/lib/tools/built-in/admin/channel-access.js.map +1 -0
- package/lib/tools/built-in/admin/create-customer.tool.d.ts +41 -0
- package/lib/tools/built-in/admin/create-customer.tool.js +57 -0
- package/lib/tools/built-in/admin/create-customer.tool.js.map +1 -0
- package/lib/tools/built-in/admin/create-fulfillment.tool.d.ts +118 -0
- package/lib/tools/built-in/admin/create-fulfillment.tool.js +156 -0
- package/lib/tools/built-in/admin/create-fulfillment.tool.js.map +1 -0
- package/lib/tools/built-in/admin/create-product.tool.d.ts +52 -0
- package/lib/tools/built-in/admin/create-product.tool.js +61 -0
- package/lib/tools/built-in/admin/create-product.tool.js.map +1 -0
- package/lib/tools/built-in/admin/create-variant.tool.d.ts +48 -0
- package/lib/tools/built-in/admin/create-variant.tool.js +79 -0
- package/lib/tools/built-in/admin/create-variant.tool.js.map +1 -0
- package/lib/tools/built-in/admin/entity-field-schemas.d.ts +36 -0
- package/lib/tools/built-in/admin/entity-field-schemas.js +63 -0
- package/lib/tools/built-in/admin/entity-field-schemas.js.map +1 -0
- package/lib/tools/built-in/admin/get-customer.tool.d.ts +28 -0
- package/lib/tools/built-in/admin/get-customer.tool.js +55 -0
- package/lib/tools/built-in/admin/get-customer.tool.js.map +1 -0
- package/lib/tools/built-in/admin/get-order.tool.d.ts +100 -0
- package/lib/tools/built-in/admin/get-order.tool.js +68 -0
- package/lib/tools/built-in/admin/get-order.tool.js.map +1 -0
- package/lib/tools/built-in/admin/get-product.tool.d.ts +69 -0
- package/lib/tools/built-in/admin/get-product.tool.js +77 -0
- package/lib/tools/built-in/admin/get-product.tool.js.map +1 -0
- package/lib/tools/built-in/admin/get-stock-levels.tool.d.ts +23 -0
- package/lib/tools/built-in/admin/get-stock-levels.tool.js +61 -0
- package/lib/tools/built-in/admin/get-stock-levels.tool.js.map +1 -0
- package/lib/tools/built-in/admin/index.d.ts +25 -0
- package/lib/tools/built-in/admin/index.js +54 -0
- package/lib/tools/built-in/admin/index.js.map +1 -0
- package/lib/tools/built-in/admin/list-channels.tool.d.ts +24 -0
- package/lib/tools/built-in/admin/list-channels.tool.js +56 -0
- package/lib/tools/built-in/admin/list-channels.tool.js.map +1 -0
- package/lib/tools/built-in/admin/list-customer-groups.tool.d.ts +23 -0
- package/lib/tools/built-in/admin/list-customer-groups.tool.js +52 -0
- package/lib/tools/built-in/admin/list-customer-groups.tool.js.map +1 -0
- package/lib/tools/built-in/admin/list-customers.tool.d.ts +62 -0
- package/lib/tools/built-in/admin/list-customers.tool.js +66 -0
- package/lib/tools/built-in/admin/list-customers.tool.js.map +1 -0
- package/lib/tools/built-in/admin/list-orders.tool.d.ts +142 -0
- package/lib/tools/built-in/admin/list-orders.tool.js +87 -0
- package/lib/tools/built-in/admin/list-orders.tool.js.map +1 -0
- package/lib/tools/built-in/admin/list-products.tool.d.ts +63 -0
- package/lib/tools/built-in/admin/list-products.tool.js +71 -0
- package/lib/tools/built-in/admin/list-products.tool.js.map +1 -0
- package/lib/tools/built-in/admin/refund-order.tool.d.ts +38 -0
- package/lib/tools/built-in/admin/refund-order.tool.js +115 -0
- package/lib/tools/built-in/admin/refund-order.tool.js.map +1 -0
- package/lib/tools/built-in/admin/set-active-channel.tool.d.ts +22 -0
- package/lib/tools/built-in/admin/set-active-channel.tool.js +84 -0
- package/lib/tools/built-in/admin/set-active-channel.tool.js.map +1 -0
- package/lib/tools/built-in/admin/translation-schemas.d.ts +12 -0
- package/lib/tools/built-in/admin/translation-schemas.js +17 -0
- package/lib/tools/built-in/admin/translation-schemas.js.map +1 -0
- package/lib/tools/built-in/admin/update-customer.tool.d.ts +42 -0
- package/lib/tools/built-in/admin/update-customer.tool.js +59 -0
- package/lib/tools/built-in/admin/update-customer.tool.js.map +1 -0
- package/lib/tools/built-in/admin/update-order-state.tool.d.ts +16 -0
- package/lib/tools/built-in/admin/update-order-state.tool.js +58 -0
- package/lib/tools/built-in/admin/update-order-state.tool.js.map +1 -0
- package/lib/tools/built-in/admin/update-product.tool.d.ts +53 -0
- package/lib/tools/built-in/admin/update-product.tool.js +68 -0
- package/lib/tools/built-in/admin/update-product.tool.js.map +1 -0
- package/lib/tools/built-in/admin/update-variant.tool.d.ts +46 -0
- package/lib/tools/built-in/admin/update-variant.tool.js +77 -0
- package/lib/tools/built-in/admin/update-variant.tool.js.map +1 -0
- package/lib/tools/built-in/admin/upload-asset.tool.d.ts +32 -0
- package/lib/tools/built-in/admin/upload-asset.tool.js +56 -0
- package/lib/tools/built-in/admin/upload-asset.tool.js.map +1 -0
- package/lib/tools/built-in/catalog-query.service.d.ts +21 -0
- package/lib/tools/built-in/catalog-query.service.js +128 -0
- package/lib/tools/built-in/catalog-query.service.js.map +1 -0
- package/lib/tools/built-in/custom-field-input.service.d.ts +10 -0
- package/lib/tools/built-in/custom-field-input.service.js +64 -0
- package/lib/tools/built-in/custom-field-input.service.js.map +1 -0
- package/lib/tools/built-in/email-schema.d.ts +2 -0
- package/lib/tools/built-in/email-schema.js +12 -0
- package/lib/tools/built-in/email-schema.js.map +1 -0
- package/lib/tools/built-in/id-schema.d.ts +3 -0
- package/lib/tools/built-in/id-schema.js +11 -0
- package/lib/tools/built-in/id-schema.js.map +1 -0
- package/lib/tools/built-in/int32-schema.d.ts +4 -0
- package/lib/tools/built-in/int32-schema.js +8 -0
- package/lib/tools/built-in/int32-schema.js.map +1 -0
- package/lib/tools/built-in/list-helpers.d.ts +48 -0
- package/lib/tools/built-in/list-helpers.js +76 -0
- package/lib/tools/built-in/list-helpers.js.map +1 -0
- package/lib/tools/built-in/order-list-helpers.d.ts +20 -0
- package/lib/tools/built-in/order-list-helpers.js +48 -0
- package/lib/tools/built-in/order-list-helpers.js.map +1 -0
- package/lib/tools/built-in/providers.d.ts +2 -0
- package/lib/tools/built-in/providers.js +7 -0
- package/lib/tools/built-in/providers.js.map +1 -0
- package/lib/tools/built-in/remote-asset.d.ts +4 -0
- package/lib/tools/built-in/remote-asset.js +54 -0
- package/lib/tools/built-in/remote-asset.js.map +1 -0
- package/lib/tools/built-in/serializer.service.d.ts +327 -0
- package/lib/tools/built-in/serializer.service.js +413 -0
- package/lib/tools/built-in/serializer.service.js.map +1 -0
- package/lib/tools/built-in/shop/add-to-cart.tool.d.ts +21 -0
- package/lib/tools/built-in/shop/add-to-cart.tool.js +100 -0
- package/lib/tools/built-in/shop/add-to-cart.tool.js.map +1 -0
- package/lib/tools/built-in/shop/address-schema.d.ts +15 -0
- package/lib/tools/built-in/shop/address-schema.js +20 -0
- package/lib/tools/built-in/shop/address-schema.js.map +1 -0
- package/lib/tools/built-in/shop/apply-coupon-code.tool.d.ts +17 -0
- package/lib/tools/built-in/shop/apply-coupon-code.tool.js +62 -0
- package/lib/tools/built-in/shop/apply-coupon-code.tool.js.map +1 -0
- package/lib/tools/built-in/shop/collection-lookup.d.ts +15 -0
- package/lib/tools/built-in/shop/collection-lookup.js +35 -0
- package/lib/tools/built-in/shop/collection-lookup.js.map +1 -0
- package/lib/tools/built-in/shop/get-cart.tool.d.ts +94 -0
- package/lib/tools/built-in/shop/get-cart.tool.js +55 -0
- package/lib/tools/built-in/shop/get-cart.tool.js.map +1 -0
- package/lib/tools/built-in/shop/get-collection.tool.d.ts +42 -0
- package/lib/tools/built-in/shop/get-collection.tool.js +64 -0
- package/lib/tools/built-in/shop/get-collection.tool.js.map +1 -0
- package/lib/tools/built-in/shop/get-eligible-payment-methods.tool.d.ts +26 -0
- package/lib/tools/built-in/shop/get-eligible-payment-methods.tool.js +58 -0
- package/lib/tools/built-in/shop/get-eligible-payment-methods.tool.js.map +1 -0
- package/lib/tools/built-in/shop/get-eligible-shipping-methods.tool.d.ts +30 -0
- package/lib/tools/built-in/shop/get-eligible-shipping-methods.tool.js +59 -0
- package/lib/tools/built-in/shop/get-eligible-shipping-methods.tool.js.map +1 -0
- package/lib/tools/built-in/shop/get-my-account.tool.d.ts +22 -0
- package/lib/tools/built-in/shop/get-my-account.tool.js +57 -0
- package/lib/tools/built-in/shop/get-my-account.tool.js.map +1 -0
- package/lib/tools/built-in/shop/get-order.tool.d.ts +100 -0
- package/lib/tools/built-in/shop/get-order.tool.js +67 -0
- package/lib/tools/built-in/shop/get-order.tool.js.map +1 -0
- package/lib/tools/built-in/shop/get-product.tool.d.ts +57 -0
- package/lib/tools/built-in/shop/get-product.tool.js +81 -0
- package/lib/tools/built-in/shop/get-product.tool.js.map +1 -0
- package/lib/tools/built-in/shop/index.d.ts +19 -0
- package/lib/tools/built-in/shop/index.js +42 -0
- package/lib/tools/built-in/shop/index.js.map +1 -0
- package/lib/tools/built-in/shop/list-collections.tool.d.ts +42 -0
- package/lib/tools/built-in/shop/list-collections.tool.js +75 -0
- package/lib/tools/built-in/shop/list-collections.tool.js.map +1 -0
- package/lib/tools/built-in/shop/list-my-orders.tool.d.ts +100 -0
- package/lib/tools/built-in/shop/list-my-orders.tool.js +63 -0
- package/lib/tools/built-in/shop/list-my-orders.tool.js.map +1 -0
- package/lib/tools/built-in/shop/place-order.tool.d.ts +188 -0
- package/lib/tools/built-in/shop/place-order.tool.js +152 -0
- package/lib/tools/built-in/shop/place-order.tool.js.map +1 -0
- package/lib/tools/built-in/shop/product-search-query.d.ts +4 -0
- package/lib/tools/built-in/shop/product-search-query.js +34 -0
- package/lib/tools/built-in/shop/product-search-query.js.map +1 -0
- package/lib/tools/built-in/shop/remove-coupon-code.tool.d.ts +17 -0
- package/lib/tools/built-in/shop/remove-coupon-code.tool.js +63 -0
- package/lib/tools/built-in/shop/remove-coupon-code.tool.js.map +1 -0
- package/lib/tools/built-in/shop/remove-from-cart.tool.d.ts +17 -0
- package/lib/tools/built-in/shop/remove-from-cart.tool.js +58 -0
- package/lib/tools/built-in/shop/remove-from-cart.tool.js.map +1 -0
- package/lib/tools/built-in/shop/search-products.tool.d.ts +48 -0
- package/lib/tools/built-in/shop/search-products.tool.js +95 -0
- package/lib/tools/built-in/shop/search-products.tool.js.map +1 -0
- package/lib/tools/built-in/shop/set-checkout-details.tool.d.ts +56 -0
- package/lib/tools/built-in/shop/set-checkout-details.tool.js +187 -0
- package/lib/tools/built-in/shop/set-checkout-details.tool.js.map +1 -0
- package/lib/tools/built-in/shop/set-shipping-method.tool.d.ts +17 -0
- package/lib/tools/built-in/shop/set-shipping-method.tool.js +58 -0
- package/lib/tools/built-in/shop/set-shipping-method.tool.js.map +1 -0
- package/lib/tools/built-in/shop/update-cart-line.tool.d.ts +18 -0
- package/lib/tools/built-in/shop/update-cart-line.tool.js +60 -0
- package/lib/tools/built-in/shop/update-cart-line.tool.js.map +1 -0
- package/lib/tools/built-in/string-schemas.d.ts +4 -0
- package/lib/tools/built-in/string-schemas.js +13 -0
- package/lib/tools/built-in/string-schemas.js.map +1 -0
- package/lib/transport/mcp-server.factory.d.ts +13 -0
- package/lib/transport/mcp-server.factory.js +32 -0
- package/lib/transport/mcp-server.factory.js.map +1 -0
- package/lib/transport/mcp-transport.controller.d.ts +77 -0
- package/lib/transport/mcp-transport.controller.js +442 -0
- package/lib/transport/mcp-transport.controller.js.map +1 -0
- package/lib/types.d.ts +432 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/package.json +42 -0
- package/src/dashboard/components/activity-block.tsx +72 -0
- package/src/dashboard/components/actor-cell.tsx +31 -0
- package/src/dashboard/components/connection-dialog.tsx +106 -0
- package/src/dashboard/components/empty-cell.tsx +7 -0
- package/src/dashboard/components/grants-block.tsx +218 -0
- package/src/dashboard/components/stats-block.tsx +275 -0
- package/src/dashboard/components/tools-block.tsx +274 -0
- package/src/dashboard/components/tooltip-button.tsx +28 -0
- package/src/dashboard/components/use-mcp-table-state.ts +47 -0
- package/src/dashboard/i18n/ar.po +311 -0
- package/src/dashboard/i18n/bg.po +311 -0
- package/src/dashboard/i18n/cs.po +311 -0
- package/src/dashboard/i18n/de.po +311 -0
- package/src/dashboard/i18n/en.po +311 -0
- package/src/dashboard/i18n/es.po +311 -0
- package/src/dashboard/i18n/fa.po +311 -0
- package/src/dashboard/i18n/fr.po +311 -0
- package/src/dashboard/i18n/he.po +311 -0
- package/src/dashboard/i18n/hr.po +311 -0
- package/src/dashboard/i18n/hu.po +311 -0
- package/src/dashboard/i18n/it.po +311 -0
- package/src/dashboard/i18n/ja.po +311 -0
- package/src/dashboard/i18n/ko.po +311 -0
- package/src/dashboard/i18n/nb.po +311 -0
- package/src/dashboard/i18n/ne.po +311 -0
- package/src/dashboard/i18n/nl.po +311 -0
- package/src/dashboard/i18n/pl.po +311 -0
- package/src/dashboard/i18n/pt_BR.po +311 -0
- package/src/dashboard/i18n/pt_PT.po +311 -0
- package/src/dashboard/i18n/ro.po +311 -0
- package/src/dashboard/i18n/ru.po +311 -0
- package/src/dashboard/i18n/sv.po +311 -0
- package/src/dashboard/i18n/tr.po +311 -0
- package/src/dashboard/i18n/uk.po +311 -0
- package/src/dashboard/i18n/uz.po +311 -0
- package/src/dashboard/i18n/zh_Hans.po +311 -0
- package/src/dashboard/i18n/zh_Hant.po +311 -0
- package/src/dashboard/index.tsx +30 -0
- package/src/dashboard/mcp-activity-route.tsx +38 -0
- package/src/dashboard/mcp-authorize-route.tsx +369 -0
- package/src/dashboard/mcp-grants-route.tsx +38 -0
- package/src/dashboard/mcp-overview-route.tsx +46 -0
- package/src/dashboard/mcp-server-redirect-route.tsx +15 -0
- package/src/dashboard/mcp-tools-route.tsx +38 -0
- package/src/dashboard/mcp.graphql.ts +127 -0
- package/src/dashboard/published-files.spec.ts +54 -0
- package/src/dashboard/tsconfig.json +9 -0
- package/src/shared/endpoint-paths.ts +8 -0
- package/src/shared/loopback.ts +6 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { OrderService, RequestContext, TranslatorService } from '@vendure/core';
|
|
2
|
+
import { McpToolHandler } from '@vendure/mcp-sdk';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { McpToolSerializerService } from '../serializer.service';
|
|
5
|
+
declare const listOrdersInput: z.ZodObject<{
|
|
6
|
+
filter: z.ZodOptional<z.ZodObject<{
|
|
7
|
+
code: z.ZodOptional<z.ZodObject<{
|
|
8
|
+
eq: z.ZodOptional<z.ZodString>;
|
|
9
|
+
contains: z.ZodOptional<z.ZodString>;
|
|
10
|
+
in: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
11
|
+
}, z.core.$strict>>;
|
|
12
|
+
state: z.ZodOptional<z.ZodObject<{
|
|
13
|
+
eq: z.ZodOptional<z.ZodString>;
|
|
14
|
+
contains: z.ZodOptional<z.ZodString>;
|
|
15
|
+
in: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
16
|
+
}, z.core.$strict>>;
|
|
17
|
+
active: z.ZodOptional<z.ZodObject<{
|
|
18
|
+
eq: z.ZodOptional<z.ZodBoolean>;
|
|
19
|
+
}, z.core.$strict>>;
|
|
20
|
+
customerLastName: z.ZodOptional<z.ZodObject<{
|
|
21
|
+
eq: z.ZodOptional<z.ZodString>;
|
|
22
|
+
contains: z.ZodOptional<z.ZodString>;
|
|
23
|
+
in: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
24
|
+
}, z.core.$strict>>;
|
|
25
|
+
orderPlacedAt: z.ZodOptional<z.ZodObject<{
|
|
26
|
+
before: z.ZodOptional<z.ZodPipe<z.ZodISODateTime, z.ZodTransform<Date, string>>>;
|
|
27
|
+
after: z.ZodOptional<z.ZodPipe<z.ZodISODateTime, z.ZodTransform<Date, string>>>;
|
|
28
|
+
}, z.core.$strict>>;
|
|
29
|
+
updatedAt: z.ZodOptional<z.ZodObject<{
|
|
30
|
+
before: z.ZodOptional<z.ZodPipe<z.ZodISODateTime, z.ZodTransform<Date, string>>>;
|
|
31
|
+
after: z.ZodOptional<z.ZodPipe<z.ZodISODateTime, z.ZodTransform<Date, string>>>;
|
|
32
|
+
}, z.core.$strict>>;
|
|
33
|
+
totalWithTax: z.ZodOptional<z.ZodObject<{
|
|
34
|
+
eq: z.ZodOptional<z.ZodNumber>;
|
|
35
|
+
gte: z.ZodOptional<z.ZodNumber>;
|
|
36
|
+
lte: z.ZodOptional<z.ZodNumber>;
|
|
37
|
+
}, z.core.$strict>>;
|
|
38
|
+
}, z.core.$strict>>;
|
|
39
|
+
sortBy: z.ZodOptional<z.ZodEnum<{
|
|
40
|
+
createdAt: "createdAt";
|
|
41
|
+
updatedAt: "updatedAt";
|
|
42
|
+
orderPlacedAt: "orderPlacedAt";
|
|
43
|
+
total: "total";
|
|
44
|
+
}>>;
|
|
45
|
+
sortDirection: z.ZodOptional<z.ZodEnum<{
|
|
46
|
+
ASC: "ASC";
|
|
47
|
+
DESC: "DESC";
|
|
48
|
+
}>>;
|
|
49
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
50
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
51
|
+
}, z.core.$strict>;
|
|
52
|
+
type ListOrdersInput = z.infer<typeof listOrdersInput>;
|
|
53
|
+
export declare class ListOrdersTool implements McpToolHandler<ListOrdersInput> {
|
|
54
|
+
private readonly orderService;
|
|
55
|
+
private readonly translator;
|
|
56
|
+
private readonly serializer;
|
|
57
|
+
constructor(orderService: OrderService, translator: TranslatorService, serializer: McpToolSerializerService);
|
|
58
|
+
execute(ctx: RequestContext, input: ListOrdersInput): Promise<{
|
|
59
|
+
items: ({
|
|
60
|
+
id: import("@vendure/core").ID;
|
|
61
|
+
code: string;
|
|
62
|
+
state: import("@vendure/core").OrderState;
|
|
63
|
+
active: boolean;
|
|
64
|
+
total: number;
|
|
65
|
+
totalDecimal: string;
|
|
66
|
+
totalWithTax: number;
|
|
67
|
+
totalWithTaxDecimal: string;
|
|
68
|
+
currencyCode: import("@vendure/core").CurrencyCode;
|
|
69
|
+
totalQuantity: number;
|
|
70
|
+
createdAt: string | null;
|
|
71
|
+
updatedAt: string | null;
|
|
72
|
+
orderPlacedAt: string | null;
|
|
73
|
+
couponCodes: string[];
|
|
74
|
+
discounts: {
|
|
75
|
+
adjustmentSource: string;
|
|
76
|
+
type: import("@vendure/core").AdjustmentType;
|
|
77
|
+
description: string;
|
|
78
|
+
amount: number;
|
|
79
|
+
amountDecimal: string;
|
|
80
|
+
amountWithTax: number;
|
|
81
|
+
amountWithTaxDecimal: string;
|
|
82
|
+
}[];
|
|
83
|
+
lines: {
|
|
84
|
+
id: import("@vendure/core").ID;
|
|
85
|
+
quantity: number;
|
|
86
|
+
linePriceWithTax: number;
|
|
87
|
+
linePriceWithTaxDecimal: string;
|
|
88
|
+
productVariant: {
|
|
89
|
+
id: import("@vendure/core").ID;
|
|
90
|
+
name: import("@vendure/core").LocaleString;
|
|
91
|
+
sku: string;
|
|
92
|
+
} | null;
|
|
93
|
+
}[];
|
|
94
|
+
payments: {
|
|
95
|
+
id: import("@vendure/core").ID;
|
|
96
|
+
method: string;
|
|
97
|
+
amount: number;
|
|
98
|
+
amountDecimal: string;
|
|
99
|
+
state: import("@vendure/core").PaymentState;
|
|
100
|
+
transactionId: string;
|
|
101
|
+
errorMessage: string | undefined;
|
|
102
|
+
publicMetadata: any;
|
|
103
|
+
refunds: {
|
|
104
|
+
id: import("@vendure/core").ID;
|
|
105
|
+
state: import("@vendure/core").RefundState;
|
|
106
|
+
total: number;
|
|
107
|
+
totalDecimal: string;
|
|
108
|
+
reason: string;
|
|
109
|
+
}[];
|
|
110
|
+
}[] | undefined;
|
|
111
|
+
fulfillments: {
|
|
112
|
+
id: import("@vendure/core").ID;
|
|
113
|
+
state: import("@vendure/core").FulfillmentState;
|
|
114
|
+
method: string;
|
|
115
|
+
trackingCode: string;
|
|
116
|
+
lines: {
|
|
117
|
+
orderLineId: import("@vendure/core").ID;
|
|
118
|
+
quantity: number;
|
|
119
|
+
}[];
|
|
120
|
+
}[] | undefined;
|
|
121
|
+
customer: {
|
|
122
|
+
id: import("@vendure/core").ID;
|
|
123
|
+
emailAddress: string;
|
|
124
|
+
firstName: string;
|
|
125
|
+
lastName: string;
|
|
126
|
+
} | null | undefined;
|
|
127
|
+
shippingAddress: Record<string, string> | null;
|
|
128
|
+
billingAddress: Record<string, string> | null;
|
|
129
|
+
shippingWithTax: number;
|
|
130
|
+
shippingWithTaxDecimal: string;
|
|
131
|
+
shippingLines: {
|
|
132
|
+
id: import("@vendure/core").ID;
|
|
133
|
+
shippingMethodId: import("@vendure/core").ID | null;
|
|
134
|
+
priceWithTax: number;
|
|
135
|
+
priceWithTaxDecimal: string;
|
|
136
|
+
}[] | undefined;
|
|
137
|
+
} | null)[];
|
|
138
|
+
total: number;
|
|
139
|
+
hasMore: boolean;
|
|
140
|
+
}>;
|
|
141
|
+
}
|
|
142
|
+
export {};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ListOrdersTool = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@vendure/core");
|
|
15
|
+
const mcp_sdk_1 = require("@vendure/mcp-sdk");
|
|
16
|
+
const zod_1 = require("zod");
|
|
17
|
+
const list_helpers_1 = require("../list-helpers");
|
|
18
|
+
const order_list_helpers_1 = require("../order-list-helpers");
|
|
19
|
+
const serializer_service_1 = require("../serializer.service");
|
|
20
|
+
const listOrdersInput = zod_1.z.strictObject(Object.assign(Object.assign({}, (0, list_helpers_1.paginationFields)('orders')), { filter: zod_1.z
|
|
21
|
+
.strictObject({
|
|
22
|
+
code: list_helpers_1.stringFilter.optional(),
|
|
23
|
+
state: list_helpers_1.stringFilter
|
|
24
|
+
.describe('Order state, for example PaymentSettled or ArrangingPayment.')
|
|
25
|
+
.optional(),
|
|
26
|
+
active: list_helpers_1.booleanFilter
|
|
27
|
+
.describe('true for open carts, false for placed or cancelled orders.')
|
|
28
|
+
.optional(),
|
|
29
|
+
customerLastName: list_helpers_1.stringFilter.optional(),
|
|
30
|
+
orderPlacedAt: list_helpers_1.dateFilter.optional(),
|
|
31
|
+
updatedAt: list_helpers_1.dateFilter.optional(),
|
|
32
|
+
totalWithTax: list_helpers_1.numberFilter
|
|
33
|
+
.describe("Whole number in the currency's smallest unit, like every price these tools return.")
|
|
34
|
+
.optional(),
|
|
35
|
+
})
|
|
36
|
+
.describe('Conditions an order must meet; all of them apply together. Example: ' +
|
|
37
|
+
'{"state":{"eq":"ArrangingPayment"},"updatedAt":{"before":"2026-08-25T12:00:00Z"}} ' +
|
|
38
|
+
'finds orders stuck at payment since before noon.')
|
|
39
|
+
.optional(), sortBy: zod_1.z
|
|
40
|
+
.enum(order_list_helpers_1.ORDER_SORT_FIELDS)
|
|
41
|
+
.describe('Field to sort by. Defaults to updatedAt, most recently changed first. Open carts have ' +
|
|
42
|
+
'no orderPlacedAt, so when sorting by it filter active: false to see placed orders only.')
|
|
43
|
+
.optional(), sortDirection: order_list_helpers_1.sortDirection.describe('Sort direction. Defaults to DESC.').optional() }));
|
|
44
|
+
let ListOrdersTool = class ListOrdersTool {
|
|
45
|
+
constructor(orderService, translator, serializer) {
|
|
46
|
+
this.orderService = orderService;
|
|
47
|
+
this.translator = translator;
|
|
48
|
+
this.serializer = serializer;
|
|
49
|
+
}
|
|
50
|
+
async execute(ctx, input) {
|
|
51
|
+
var _a;
|
|
52
|
+
const options = (0, order_list_helpers_1.orderListOptions)(input, 'updatedAt');
|
|
53
|
+
if (((_a = input.filter) === null || _a === void 0 ? void 0 : _a.active) === undefined) {
|
|
54
|
+
options.filter = Object.assign(Object.assign({}, options.filter), { active: { eq: false } });
|
|
55
|
+
}
|
|
56
|
+
const result = await this.orderService.findAll(ctx, options, order_list_helpers_1.ORDER_LIST_RELATIONS);
|
|
57
|
+
(0, order_list_helpers_1.translateLineVariants)(result.items, this.translator, ctx);
|
|
58
|
+
return (0, list_helpers_1.page)(result.items.map(order => this.serializer.order(order)), result.totalItems, input);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
exports.ListOrdersTool = ListOrdersTool;
|
|
62
|
+
exports.ListOrdersTool = ListOrdersTool = __decorate([
|
|
63
|
+
(0, mcp_sdk_1.McpTool)({
|
|
64
|
+
name: 'list_orders',
|
|
65
|
+
toolset: 'admin',
|
|
66
|
+
description: 'List and filter orders for operations users, most recently updated first by default. ' +
|
|
67
|
+
'Unplaced carts are excluded unless you pass filter.active.',
|
|
68
|
+
keywords: [
|
|
69
|
+
'show all orders',
|
|
70
|
+
'recent orders in the store',
|
|
71
|
+
'browse the order queue',
|
|
72
|
+
'every order placed',
|
|
73
|
+
'orders dashboard for staff',
|
|
74
|
+
'pull the full order list',
|
|
75
|
+
'orders in a given state',
|
|
76
|
+
'find orders by customer last name',
|
|
77
|
+
],
|
|
78
|
+
permissions: [core_1.Permission.ReadOrder],
|
|
79
|
+
behavior: 'readonly',
|
|
80
|
+
inputSchema: listOrdersInput,
|
|
81
|
+
}),
|
|
82
|
+
(0, common_1.Injectable)(),
|
|
83
|
+
__metadata("design:paramtypes", [core_1.OrderService,
|
|
84
|
+
core_1.TranslatorService,
|
|
85
|
+
serializer_service_1.McpToolSerializerService])
|
|
86
|
+
], ListOrdersTool);
|
|
87
|
+
//# sourceMappingURL=list-orders.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-orders.tool.js","sourceRoot":"","sources":["../../../../src/tools/built-in/admin/list-orders.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { ProductService, RequestContext } from '@vendure/core';
|
|
2
|
+
import { McpToolHandler } from '@vendure/mcp-sdk';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { McpCatalogQueryService } from '../catalog-query.service';
|
|
5
|
+
import { McpToolSerializerService } from '../serializer.service';
|
|
6
|
+
declare const listProductsInput: z.ZodObject<{
|
|
7
|
+
filter: z.ZodOptional<z.ZodObject<{
|
|
8
|
+
name: z.ZodOptional<z.ZodObject<{
|
|
9
|
+
eq: z.ZodOptional<z.ZodString>;
|
|
10
|
+
contains: z.ZodOptional<z.ZodString>;
|
|
11
|
+
in: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
12
|
+
}, z.core.$strict>>;
|
|
13
|
+
slug: z.ZodOptional<z.ZodObject<{
|
|
14
|
+
eq: z.ZodOptional<z.ZodString>;
|
|
15
|
+
contains: z.ZodOptional<z.ZodString>;
|
|
16
|
+
in: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
17
|
+
}, z.core.$strict>>;
|
|
18
|
+
sku: z.ZodOptional<z.ZodObject<{
|
|
19
|
+
eq: z.ZodOptional<z.ZodString>;
|
|
20
|
+
contains: z.ZodOptional<z.ZodString>;
|
|
21
|
+
in: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
22
|
+
}, z.core.$strict>>;
|
|
23
|
+
enabled: z.ZodOptional<z.ZodObject<{
|
|
24
|
+
eq: z.ZodOptional<z.ZodBoolean>;
|
|
25
|
+
}, z.core.$strict>>;
|
|
26
|
+
updatedAt: z.ZodOptional<z.ZodObject<{
|
|
27
|
+
before: z.ZodOptional<z.ZodPipe<z.ZodISODateTime, z.ZodTransform<Date, string>>>;
|
|
28
|
+
after: z.ZodOptional<z.ZodPipe<z.ZodISODateTime, z.ZodTransform<Date, string>>>;
|
|
29
|
+
}, z.core.$strict>>;
|
|
30
|
+
}, z.core.$strict>>;
|
|
31
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
32
|
+
offset: z.ZodOptional<z.ZodNumber>;
|
|
33
|
+
}, z.core.$strict>;
|
|
34
|
+
type ListProductsInput = z.infer<typeof listProductsInput>;
|
|
35
|
+
export declare class ListProductsTool implements McpToolHandler<ListProductsInput> {
|
|
36
|
+
private readonly productService;
|
|
37
|
+
private readonly catalog;
|
|
38
|
+
private readonly serializer;
|
|
39
|
+
constructor(productService: ProductService, catalog: McpCatalogQueryService, serializer: McpToolSerializerService);
|
|
40
|
+
execute(ctx: RequestContext, input: ListProductsInput): Promise<{
|
|
41
|
+
items: {
|
|
42
|
+
id: import("@vendure/core").ID;
|
|
43
|
+
name: import("@vendure/core").LocaleString;
|
|
44
|
+
slug: import("@vendure/core").LocaleString;
|
|
45
|
+
description: string;
|
|
46
|
+
enabled: boolean;
|
|
47
|
+
featuredAsset: {
|
|
48
|
+
id: import("@vendure/core").ID;
|
|
49
|
+
preview: string;
|
|
50
|
+
} | null;
|
|
51
|
+
priceRange: {
|
|
52
|
+
min: number;
|
|
53
|
+
minDecimal: string;
|
|
54
|
+
max: number;
|
|
55
|
+
maxDecimal: string;
|
|
56
|
+
currencyCode: import("@vendure/core").CurrencyCode;
|
|
57
|
+
} | null;
|
|
58
|
+
}[];
|
|
59
|
+
total: number;
|
|
60
|
+
hasMore: boolean;
|
|
61
|
+
}>;
|
|
62
|
+
}
|
|
63
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.ListProductsTool = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@vendure/core");
|
|
15
|
+
const mcp_sdk_1 = require("@vendure/mcp-sdk");
|
|
16
|
+
const zod_1 = require("zod");
|
|
17
|
+
const catalog_query_service_1 = require("../catalog-query.service");
|
|
18
|
+
const list_helpers_1 = require("../list-helpers");
|
|
19
|
+
const serializer_service_1 = require("../serializer.service");
|
|
20
|
+
const listProductsInput = zod_1.z.strictObject(Object.assign(Object.assign({}, (0, list_helpers_1.paginationFields)('products')), { filter: zod_1.z
|
|
21
|
+
.strictObject({
|
|
22
|
+
name: list_helpers_1.stringFilter.optional(),
|
|
23
|
+
slug: list_helpers_1.stringFilter.optional(),
|
|
24
|
+
sku: list_helpers_1.stringFilter
|
|
25
|
+
.describe("Matches any of the product's variant SKUs. The result lists products, not " +
|
|
26
|
+
'variants, so it does not show which variant matched.')
|
|
27
|
+
.optional(),
|
|
28
|
+
enabled: list_helpers_1.booleanFilter.optional(),
|
|
29
|
+
updatedAt: list_helpers_1.dateFilter.optional(),
|
|
30
|
+
})
|
|
31
|
+
.describe('Conditions a product must meet; all of them apply together. Example: ' +
|
|
32
|
+
'{"sku":{"contains":"L2201"}} finds the product a variant SKU belongs to.')
|
|
33
|
+
.optional() }));
|
|
34
|
+
let ListProductsTool = class ListProductsTool {
|
|
35
|
+
constructor(productService, catalog, serializer) {
|
|
36
|
+
this.productService = productService;
|
|
37
|
+
this.catalog = catalog;
|
|
38
|
+
this.serializer = serializer;
|
|
39
|
+
}
|
|
40
|
+
async execute(ctx, input) {
|
|
41
|
+
const result = await this.productService.findAll(ctx, (0, list_helpers_1.listOptions)(input), ['featuredAsset']);
|
|
42
|
+
// Staff see the whole catalog, so the price range counts disabled variants too.
|
|
43
|
+
const variantsByProduct = await this.catalog.variantsByProductId(ctx, result.items.map(product => product.id), { includeDisabled: true });
|
|
44
|
+
return (0, list_helpers_1.page)(result.items.map(product => { var _a; return this.serializer.productListItem(product, (_a = variantsByProduct.get(String(product.id))) !== null && _a !== void 0 ? _a : []); }), result.totalItems, input);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.ListProductsTool = ListProductsTool;
|
|
48
|
+
exports.ListProductsTool = ListProductsTool = __decorate([
|
|
49
|
+
(0, mcp_sdk_1.McpTool)({
|
|
50
|
+
name: 'list_products',
|
|
51
|
+
toolset: 'admin',
|
|
52
|
+
description: "List and filter catalog products. Use get_product for a product's variant IDs.",
|
|
53
|
+
keywords: [
|
|
54
|
+
'show the whole catalog',
|
|
55
|
+
'list every product',
|
|
56
|
+
'browse all items we sell',
|
|
57
|
+
'full product list',
|
|
58
|
+
'see the inventory of products',
|
|
59
|
+
'catalog listing for staff',
|
|
60
|
+
'find product by sku',
|
|
61
|
+
],
|
|
62
|
+
permissions: [core_1.Permission.ReadProduct],
|
|
63
|
+
behavior: 'readonly',
|
|
64
|
+
inputSchema: listProductsInput,
|
|
65
|
+
}),
|
|
66
|
+
(0, common_1.Injectable)(),
|
|
67
|
+
__metadata("design:paramtypes", [core_1.ProductService,
|
|
68
|
+
catalog_query_service_1.McpCatalogQueryService,
|
|
69
|
+
serializer_service_1.McpToolSerializerService])
|
|
70
|
+
], ListProductsTool);
|
|
71
|
+
//# sourceMappingURL=list-products.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-products.tool.js","sourceRoot":"","sources":["../../../../src/tools/built-in/admin/list-products.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,wCAAoF;AACpF,8CAA2D;AAC3D,6BAAwB;AAExB,oEAAkE;AAClE,kDAOyB;AACzB,8DAAiE;AAEjE,MAAM,iBAAiB,GAAG,OAAC,CAAC,YAAY,iCACjC,IAAA,+BAAgB,EAAC,UAAU,CAAC,KAC/B,MAAM,EAAE,OAAC;SACJ,YAAY,CAAC;QACV,IAAI,EAAE,2BAAY,CAAC,QAAQ,EAAE;QAC7B,IAAI,EAAE,2BAAY,CAAC,QAAQ,EAAE;QAC7B,GAAG,EAAE,2BAAY;aACZ,QAAQ,CACL,4EAA4E;YACxE,sDAAsD,CAC7D;aACA,QAAQ,EAAE;QACf,OAAO,EAAE,4BAAa,CAAC,QAAQ,EAAE;QACjC,SAAS,EAAE,yBAAU,CAAC,QAAQ,EAAE;KACnC,CAAC;SACD,QAAQ,CACL,uEAAuE;QACnE,0EAA0E,CACjF;SACA,QAAQ,EAAE,IACjB,CAAC;AAsBI,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IACzB,YACqB,cAA8B,EAC9B,OAA+B,EAC/B,UAAoC;QAFpC,mBAAc,GAAd,cAAc,CAAgB;QAC9B,YAAO,GAAP,OAAO,CAAwB;QAC/B,eAAU,GAAV,UAAU,CAA0B;IACtD,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,GAAmB,EAAE,KAAwB;QACvD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,IAAA,0BAAW,EAAU,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;QACtG,gFAAgF;QAChF,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAC5D,GAAG,EACH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EACvC,EAAE,eAAe,EAAE,IAAI,EAAE,CAC5B,CAAC;QACF,OAAO,IAAA,mBAAI,EACP,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,WACvB,OAAA,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,EAAE,MAAA,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,mCAAI,EAAE,CAAC,CAAA,EAAA,CAC5F,EACD,MAAM,CAAC,UAAU,EACjB,KAAK,CACR,CAAC;IACN,CAAC;CACJ,CAAA;AAvBY,4CAAgB;2BAAhB,gBAAgB;IAlB5B,IAAA,iBAAO,EAAC;QACL,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,gFAAgF;QAC7F,QAAQ,EAAE;YACN,wBAAwB;YACxB,oBAAoB;YACpB,0BAA0B;YAC1B,mBAAmB;YACnB,+BAA+B;YAC/B,2BAA2B;YAC3B,qBAAqB;SACxB;QACD,WAAW,EAAE,CAAC,iBAAU,CAAC,WAAW,CAAC;QACrC,QAAQ,EAAE,UAAU;QACpB,WAAW,EAAE,iBAAiB;KACjC,CAAC;IACD,IAAA,mBAAU,GAAE;qCAG4B,qBAAc;QACrB,8CAAsB;QACnB,6CAAwB;GAJhD,gBAAgB,CAuB5B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { OrderService, RequestContext } from '@vendure/core';
|
|
2
|
+
import { McpToolHandler } from '@vendure/mcp-sdk';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { McpToolSerializerService } from '../serializer.service';
|
|
5
|
+
declare const refundOrderInput: z.ZodObject<{
|
|
6
|
+
id: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
7
|
+
amount: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
reason: z.ZodOptional<z.ZodString>;
|
|
9
|
+
paymentId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
|
|
10
|
+
}, z.core.$strict>;
|
|
11
|
+
type RefundOrderToolInput = z.infer<typeof refundOrderInput>;
|
|
12
|
+
export declare class RefundOrderTool implements McpToolHandler<RefundOrderToolInput> {
|
|
13
|
+
private readonly orderService;
|
|
14
|
+
private readonly serializer;
|
|
15
|
+
constructor(orderService: OrderService, serializer: McpToolSerializerService);
|
|
16
|
+
execute(ctx: RequestContext, input: RefundOrderToolInput): Promise<import("@vendure/common/lib/generated-types").MultipleOrderError | import("@vendure/common/lib/generated-types").OrderStateTransitionError | import("@vendure/common/lib/generated-types").QuantityTooGreatError | import("@vendure/common/lib/generated-types").AlreadyRefundedError | import("@vendure/common/lib/generated-types").NothingToRefundError | import("@vendure/common/lib/generated-types").PaymentOrderMismatchError | import("@vendure/common/lib/generated-types").RefundAmountError | import("@vendure/common/lib/generated-types").RefundDestinationError | import("@vendure/common/lib/generated-types").RefundIncompleteError | import("@vendure/common/lib/generated-types").RefundOrderStateError | import("@vendure/common/lib/generated-types").RefundStateTransitionError | {
|
|
17
|
+
__typename: string;
|
|
18
|
+
errorCode: string;
|
|
19
|
+
message: string;
|
|
20
|
+
refund?: undefined;
|
|
21
|
+
} | {
|
|
22
|
+
refund: {
|
|
23
|
+
id: import("@vendure/core").ID;
|
|
24
|
+
state: import("@vendure/core").RefundState;
|
|
25
|
+
total: number;
|
|
26
|
+
totalDecimal: string;
|
|
27
|
+
currencyCode: import("@vendure/core").CurrencyCode;
|
|
28
|
+
reason: string;
|
|
29
|
+
paymentId: import("@vendure/core").ID;
|
|
30
|
+
};
|
|
31
|
+
__typename?: undefined;
|
|
32
|
+
errorCode?: undefined;
|
|
33
|
+
message?: undefined;
|
|
34
|
+
}>;
|
|
35
|
+
/** Why no payment was picked: the first Settled payment is already refunded, or there is none. */
|
|
36
|
+
private nothingToRefundMessage;
|
|
37
|
+
}
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RefundOrderTool = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const shared_utils_1 = require("@vendure/common/lib/shared-utils");
|
|
15
|
+
const core_1 = require("@vendure/core");
|
|
16
|
+
const mcp_sdk_1 = require("@vendure/mcp-sdk");
|
|
17
|
+
const zod_1 = require("zod");
|
|
18
|
+
const id_schema_1 = require("../id-schema");
|
|
19
|
+
const int32_schema_1 = require("../int32-schema");
|
|
20
|
+
const order_list_helpers_1 = require("../order-list-helpers");
|
|
21
|
+
const serializer_service_1 = require("../serializer.service");
|
|
22
|
+
const string_schemas_1 = require("../string-schemas");
|
|
23
|
+
const refundOrderInput = zod_1.z.strictObject({
|
|
24
|
+
id: id_schema_1.idSchema.describe('Order ID.'),
|
|
25
|
+
amount: int32_schema_1.int32Schema
|
|
26
|
+
.min(1)
|
|
27
|
+
.describe('Amount to refund as a whole number of minor units. Defaults to the selected ' +
|
|
28
|
+
"payment's remaining refundable amount.")
|
|
29
|
+
.optional(),
|
|
30
|
+
reason: string_schemas_1.shortText.describe('Reason for the refund.').optional(),
|
|
31
|
+
paymentId: id_schema_1.idSchema
|
|
32
|
+
.describe("Payment to refund; must belong to this order. Defaults to the order's first Settled payment that still has a refundable amount.")
|
|
33
|
+
.optional(),
|
|
34
|
+
});
|
|
35
|
+
/** The refunds that count against a payment: a Failed refund returned no money. */
|
|
36
|
+
function countedRefunds(payment) {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
return (_b = (_a = payment.refunds) === null || _a === void 0 ? void 0 : _a.filter(refund => refund.state !== 'Failed')) !== null && _b !== void 0 ? _b : [];
|
|
39
|
+
}
|
|
40
|
+
function getRefundableAmount(payment) {
|
|
41
|
+
return payment.amount - (0, shared_utils_1.summate)(countedRefunds(payment), 'total');
|
|
42
|
+
}
|
|
43
|
+
let RefundOrderTool = class RefundOrderTool {
|
|
44
|
+
constructor(orderService, serializer) {
|
|
45
|
+
this.orderService = orderService;
|
|
46
|
+
this.serializer = serializer;
|
|
47
|
+
}
|
|
48
|
+
async execute(ctx, input) {
|
|
49
|
+
var _a;
|
|
50
|
+
const order = await (0, order_list_helpers_1.findOrderOrThrow)(this.orderService, ctx, input.id, [
|
|
51
|
+
'payments',
|
|
52
|
+
'payments.refunds',
|
|
53
|
+
]);
|
|
54
|
+
const payment = input.paymentId
|
|
55
|
+
? order.payments.find(p => (0, core_1.idsAreEqual)(p.id, input.paymentId))
|
|
56
|
+
: order.payments.find(p => p.state === 'Settled' && getRefundableAmount(p) > 0);
|
|
57
|
+
if (!payment) {
|
|
58
|
+
// A bare Vendure error result: the registry reports it as a failed call.
|
|
59
|
+
return {
|
|
60
|
+
__typename: 'RefundPaymentIdMissingError',
|
|
61
|
+
errorCode: 'REFUND_PAYMENT_ID_MISSING_ERROR',
|
|
62
|
+
message: input.paymentId
|
|
63
|
+
? 'The requested payment was not found on this order.'
|
|
64
|
+
: this.nothingToRefundMessage(order),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const refund = await this.orderService.refundOrder(ctx, {
|
|
68
|
+
paymentId: payment.id,
|
|
69
|
+
amount: (_a = input.amount) !== null && _a !== void 0 ? _a : getRefundableAmount(payment),
|
|
70
|
+
reason: input.reason,
|
|
71
|
+
shipping: 0,
|
|
72
|
+
adjustment: 0,
|
|
73
|
+
});
|
|
74
|
+
return (0, core_1.isGraphQlErrorResult)(refund)
|
|
75
|
+
? refund
|
|
76
|
+
: { refund: this.serializer.refund(refund, order.currencyCode) };
|
|
77
|
+
}
|
|
78
|
+
/** Why no payment was picked: the first Settled payment is already refunded, or there is none. */
|
|
79
|
+
nothingToRefundMessage(order) {
|
|
80
|
+
const settled = order.payments.find(p => p.state === 'Settled');
|
|
81
|
+
if (!settled) {
|
|
82
|
+
return `Order ${order.code} has no Settled payment to refund.`;
|
|
83
|
+
}
|
|
84
|
+
const refunds = countedRefunds(settled);
|
|
85
|
+
const refunded = this.serializer.decimal((0, shared_utils_1.summate)(refunds, 'total'));
|
|
86
|
+
const states = refunds.map(refund => refund.state).join(', ');
|
|
87
|
+
return (`Payment ${String(settled.id)} has no refundable amount left: ${refunded} of ` +
|
|
88
|
+
`${this.serializer.decimal(settled.amount)} already refunded (${states}).`);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
exports.RefundOrderTool = RefundOrderTool;
|
|
92
|
+
exports.RefundOrderTool = RefundOrderTool = __decorate([
|
|
93
|
+
(0, mcp_sdk_1.McpTool)({
|
|
94
|
+
name: 'refund_order',
|
|
95
|
+
toolset: 'admin',
|
|
96
|
+
description: "Refund part or all of an order's payment. With amount, refunds that amount; without it, refunds " +
|
|
97
|
+
'the remaining refundable amount of the first Settled payment. Pass paymentId to pick a payment ' +
|
|
98
|
+
'when the order has several.',
|
|
99
|
+
keywords: [
|
|
100
|
+
'give the customer their money back',
|
|
101
|
+
'issue a refund',
|
|
102
|
+
'return the payment',
|
|
103
|
+
'reimburse a buyer',
|
|
104
|
+
'pay back an order',
|
|
105
|
+
'process a refund',
|
|
106
|
+
],
|
|
107
|
+
permissions: [core_1.Permission.UpdateOrder],
|
|
108
|
+
behavior: 'destructive',
|
|
109
|
+
inputSchema: refundOrderInput,
|
|
110
|
+
}),
|
|
111
|
+
(0, common_1.Injectable)(),
|
|
112
|
+
__metadata("design:paramtypes", [core_1.OrderService,
|
|
113
|
+
serializer_service_1.McpToolSerializerService])
|
|
114
|
+
], RefundOrderTool);
|
|
115
|
+
//# sourceMappingURL=refund-order.tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refund-order.tool.js","sourceRoot":"","sources":["../../../../src/tools/built-in/admin/refund-order.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ChannelService, RequestContext, TransactionalConnection } from '@vendure/core';
|
|
2
|
+
import { McpCallerInfo, McpToolHandler } from '@vendure/mcp-sdk';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { McpToolSerializerService } from '../serializer.service';
|
|
5
|
+
declare const setActiveChannelInput: z.ZodObject<{
|
|
6
|
+
channelToken: z.ZodString;
|
|
7
|
+
}, z.core.$strict>;
|
|
8
|
+
type SetActiveChannelInput = z.infer<typeof setActiveChannelInput>;
|
|
9
|
+
export declare class SetActiveChannelTool implements McpToolHandler<SetActiveChannelInput> {
|
|
10
|
+
private readonly channelService;
|
|
11
|
+
private readonly connection;
|
|
12
|
+
private readonly serializer;
|
|
13
|
+
constructor(channelService: ChannelService, connection: TransactionalConnection, serializer: McpToolSerializerService);
|
|
14
|
+
execute(ctx: RequestContext, input: SetActiveChannelInput, caller?: McpCallerInfo): Promise<{
|
|
15
|
+
channel: {
|
|
16
|
+
id: import("@vendure/core").ID;
|
|
17
|
+
code: string;
|
|
18
|
+
token: string;
|
|
19
|
+
};
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SetActiveChannelTool = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@vendure/core");
|
|
15
|
+
const mcp_sdk_1 = require("@vendure/mcp-sdk");
|
|
16
|
+
const zod_1 = require("zod");
|
|
17
|
+
const mcp_oauth_grant_entity_1 = require("../../../entities/mcp-oauth-grant.entity");
|
|
18
|
+
const serializer_service_1 = require("../serializer.service");
|
|
19
|
+
const string_schemas_1 = require("../string-schemas");
|
|
20
|
+
const channel_access_1 = require("./channel-access");
|
|
21
|
+
const setActiveChannelInput = zod_1.z.strictObject({
|
|
22
|
+
channelToken: string_schemas_1.shortText.describe('Channel token of the channel to activate.'),
|
|
23
|
+
});
|
|
24
|
+
let SetActiveChannelTool = class SetActiveChannelTool {
|
|
25
|
+
constructor(channelService, connection, serializer) {
|
|
26
|
+
this.channelService = channelService;
|
|
27
|
+
this.connection = connection;
|
|
28
|
+
this.serializer = serializer;
|
|
29
|
+
}
|
|
30
|
+
async execute(ctx, input, caller) {
|
|
31
|
+
let channel;
|
|
32
|
+
try {
|
|
33
|
+
channel = await this.channelService.getChannelFromToken(ctx, input.channelToken);
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
if (!(e instanceof core_1.ChannelNotFoundError))
|
|
37
|
+
throw e;
|
|
38
|
+
throw new core_1.UserInputError(`No channel with token "${input.channelToken}". Call list_channels for the tokens ` +
|
|
39
|
+
'you can use.');
|
|
40
|
+
}
|
|
41
|
+
const accessibleIds = (0, channel_access_1.userChannelIds)(ctx);
|
|
42
|
+
if (!accessibleIds.some(id => (0, core_1.idsAreEqual)(id, channel.id))) {
|
|
43
|
+
throw new core_1.ForbiddenError();
|
|
44
|
+
}
|
|
45
|
+
// Update only channelId so a concurrent token refresh cannot overwrite rotated hashes.
|
|
46
|
+
if (!(caller === null || caller === void 0 ? void 0 : caller.grant)) {
|
|
47
|
+
// An authenticated MCP caller always carries a grant; its absence means the caller info
|
|
48
|
+
// was not wired up, so fail loudly rather than report a switch that never persisted.
|
|
49
|
+
throw new core_1.InternalServerError('MCP set_active_channel requires an authenticated grant');
|
|
50
|
+
}
|
|
51
|
+
const result = await this.connection
|
|
52
|
+
.getRepository(ctx, mcp_oauth_grant_entity_1.McpOauthGrant)
|
|
53
|
+
.update({ id: caller.grant.id }, { channelId: channel.id });
|
|
54
|
+
if (result.affected === 0) {
|
|
55
|
+
throw new core_1.EntityNotFoundError('McpOauthGrant', caller.grant.id);
|
|
56
|
+
}
|
|
57
|
+
return { channel: this.serializer.channel(channel) };
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
exports.SetActiveChannelTool = SetActiveChannelTool;
|
|
61
|
+
exports.SetActiveChannelTool = SetActiveChannelTool = __decorate([
|
|
62
|
+
(0, mcp_sdk_1.McpTool)({
|
|
63
|
+
name: 'set_active_channel',
|
|
64
|
+
toolset: 'admin',
|
|
65
|
+
description: 'Set the active channel for this MCP grant by channel token.',
|
|
66
|
+
keywords: [
|
|
67
|
+
'switch to another store',
|
|
68
|
+
'change the active channel',
|
|
69
|
+
'select which storefront to work in',
|
|
70
|
+
'set my current channel',
|
|
71
|
+
'switch channels',
|
|
72
|
+
"change the store I'm managing",
|
|
73
|
+
],
|
|
74
|
+
permissions: [core_1.Permission.Authenticated],
|
|
75
|
+
// Every later write on this grant lands on the channel this picks, so it is confirmed first.
|
|
76
|
+
behavior: 'destructive',
|
|
77
|
+
inputSchema: setActiveChannelInput,
|
|
78
|
+
}),
|
|
79
|
+
(0, common_1.Injectable)(),
|
|
80
|
+
__metadata("design:paramtypes", [core_1.ChannelService,
|
|
81
|
+
core_1.TransactionalConnection,
|
|
82
|
+
serializer_service_1.McpToolSerializerService])
|
|
83
|
+
], SetActiveChannelTool);
|
|
84
|
+
//# sourceMappingURL=set-active-channel.tool.js.map
|