ebay-mcp 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +586 -0
- package/build/api/account-management/account.d.ts +216 -0
- package/build/api/account-management/account.js +305 -0
- package/build/api/analytics-and-report/analytics.d.ts +33 -0
- package/build/api/analytics-and-report/analytics.js +102 -0
- package/build/api/client.d.ts +89 -0
- package/build/api/client.js +343 -0
- package/build/api/communication/feedback.d.ts +45 -0
- package/build/api/communication/feedback.js +119 -0
- package/build/api/communication/message.d.ts +55 -0
- package/build/api/communication/message.js +131 -0
- package/build/api/communication/negotiation.d.ts +39 -0
- package/build/api/communication/negotiation.js +97 -0
- package/build/api/communication/notification.d.ts +128 -0
- package/build/api/communication/notification.js +373 -0
- package/build/api/index.d.ts +96 -0
- package/build/api/index.js +121 -0
- package/build/api/listing-management/inventory.d.ts +216 -0
- package/build/api/listing-management/inventory.js +633 -0
- package/build/api/listing-metadata/metadata.d.ts +154 -0
- package/build/api/listing-metadata/metadata.js +485 -0
- package/build/api/listing-metadata/taxonomy.d.ts +38 -0
- package/build/api/listing-metadata/taxonomy.js +58 -0
- package/build/api/marketing-and-promotions/marketing.d.ts +395 -0
- package/build/api/marketing-and-promotions/marketing.js +565 -0
- package/build/api/marketing-and-promotions/recommendation.d.ts +20 -0
- package/build/api/marketing-and-promotions/recommendation.js +32 -0
- package/build/api/order-management/dispute.d.ts +65 -0
- package/build/api/order-management/dispute.js +69 -0
- package/build/api/order-management/fulfillment.d.ts +80 -0
- package/build/api/order-management/fulfillment.js +89 -0
- package/build/api/other/compliance.d.ts +26 -0
- package/build/api/other/compliance.js +47 -0
- package/build/api/other/edelivery.d.ts +153 -0
- package/build/api/other/edelivery.js +219 -0
- package/build/api/other/identity.d.ts +17 -0
- package/build/api/other/identity.js +24 -0
- package/build/api/other/translation.d.ts +14 -0
- package/build/api/other/translation.js +22 -0
- package/build/api/other/vero.d.ts +30 -0
- package/build/api/other/vero.js +48 -0
- package/build/auth/oauth-metadata.d.ts +46 -0
- package/build/auth/oauth-metadata.js +59 -0
- package/build/auth/oauth-middleware.d.ts +35 -0
- package/build/auth/oauth-middleware.js +99 -0
- package/build/auth/oauth-types.d.ts +66 -0
- package/build/auth/oauth-types.js +4 -0
- package/build/auth/oauth.d.ts +93 -0
- package/build/auth/oauth.js +383 -0
- package/build/auth/scope-utils.d.ts +70 -0
- package/build/auth/scope-utils.js +304 -0
- package/build/auth/token-verifier.d.ts +57 -0
- package/build/auth/token-verifier.js +172 -0
- package/build/config/environment.d.ts +61 -0
- package/build/config/environment.js +260 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +98 -0
- package/build/schemas/account-management/account.d.ts +5324 -0
- package/build/schemas/account-management/account.js +366 -0
- package/build/schemas/analytics/analytics.d.ts +167 -0
- package/build/schemas/analytics/analytics.js +191 -0
- package/build/schemas/communication/messages.d.ts +1872 -0
- package/build/schemas/communication/messages.js +348 -0
- package/build/schemas/fulfillment/orders.d.ts +4655 -0
- package/build/schemas/fulfillment/orders.js +317 -0
- package/build/schemas/index.d.ts +2100 -0
- package/build/schemas/index.js +68 -0
- package/build/schemas/inventory-management/inventory.d.ts +6419 -0
- package/build/schemas/inventory-management/inventory.js +450 -0
- package/build/schemas/marketing/marketing.d.ts +14181 -0
- package/build/schemas/marketing/marketing.js +1088 -0
- package/build/schemas/metadata/metadata.d.ts +5259 -0
- package/build/schemas/metadata/metadata.js +614 -0
- package/build/schemas/other/other-apis.d.ts +257 -0
- package/build/schemas/other/other-apis.js +372 -0
- package/build/schemas/taxonomy/taxonomy.d.ts +215 -0
- package/build/schemas/taxonomy/taxonomy.js +571 -0
- package/build/scripts/auto-setup.d.ts +12 -0
- package/build/scripts/auto-setup.js +277 -0
- package/build/scripts/diagnostics.d.ts +8 -0
- package/build/scripts/diagnostics.js +299 -0
- package/build/scripts/download-specs.d.ts +1 -0
- package/build/scripts/download-specs.js +116 -0
- package/build/scripts/interactive-setup.d.ts +21 -0
- package/build/scripts/interactive-setup.js +723 -0
- package/build/server-http.d.ts +11 -0
- package/build/server-http.js +361 -0
- package/build/tools/definitions/account-with-schemas.d.ts +39 -0
- package/build/tools/definitions/account-with-schemas.js +170 -0
- package/build/tools/definitions/account.d.ts +12 -0
- package/build/tools/definitions/account.js +428 -0
- package/build/tools/definitions/analytics.d.ts +25 -0
- package/build/tools/definitions/analytics.js +66 -0
- package/build/tools/definitions/communication.d.ts +12 -0
- package/build/tools/definitions/communication.js +151 -0
- package/build/tools/definitions/fulfillment.d.ts +12 -0
- package/build/tools/definitions/fulfillment.js +326 -0
- package/build/tools/definitions/index.d.ts +25 -0
- package/build/tools/definitions/index.js +37 -0
- package/build/tools/definitions/inventory.d.ts +12 -0
- package/build/tools/definitions/inventory.js +429 -0
- package/build/tools/definitions/marketing.d.ts +12 -0
- package/build/tools/definitions/marketing.js +1095 -0
- package/build/tools/definitions/metadata.d.ts +12 -0
- package/build/tools/definitions/metadata.js +188 -0
- package/build/tools/definitions/other.d.ts +13 -0
- package/build/tools/definitions/other.js +309 -0
- package/build/tools/definitions/taxonomy.d.ts +25 -0
- package/build/tools/definitions/taxonomy.js +64 -0
- package/build/tools/definitions/token-management.d.ts +35 -0
- package/build/tools/definitions/token-management.js +103 -0
- package/build/tools/index.d.ts +11 -0
- package/build/tools/index.js +1003 -0
- package/build/tools/schemas.d.ts +14764 -0
- package/build/tools/schemas.js +667 -0
- package/build/tools/tool-definitions.d.ts +35 -0
- package/build/tools/tool-definitions.js +3534 -0
- package/build/types/application-settings/developerAnalyticsV1BetaOas3.d.ts +197 -0
- package/build/types/application-settings/developerAnalyticsV1BetaOas3.js +5 -0
- package/build/types/application-settings/developerClientRegistrationV1Oas3.d.ts +155 -0
- package/build/types/application-settings/developerClientRegistrationV1Oas3.js +5 -0
- package/build/types/application-settings/developerKeyManagementV1Oas3.d.ts +246 -0
- package/build/types/application-settings/developerKeyManagementV1Oas3.js +5 -0
- package/build/types/ebay-enums.d.ts +1204 -0
- package/build/types/ebay-enums.js +1330 -0
- package/build/types/ebay.d.ts +143 -0
- package/build/types/ebay.js +123 -0
- package/build/types/index.d.ts +6 -0
- package/build/types/index.js +10 -0
- package/build/types/sell-apps/account-management/sellAccountV1Oas3.d.ts +2579 -0
- package/build/types/sell-apps/account-management/sellAccountV1Oas3.js +5 -0
- package/build/types/sell-apps/analytics-and-report/sellAnalyticsV1Oas3.d.ts +446 -0
- package/build/types/sell-apps/analytics-and-report/sellAnalyticsV1Oas3.js +5 -0
- package/build/types/sell-apps/communication/commerceFeedbackV1BetaOas3.d.ts +705 -0
- package/build/types/sell-apps/communication/commerceFeedbackV1BetaOas3.js +5 -0
- package/build/types/sell-apps/communication/commerceMessageV1Oas3.d.ts +590 -0
- package/build/types/sell-apps/communication/commerceMessageV1Oas3.js +5 -0
- package/build/types/sell-apps/communication/commerceNotificationV1Oas3.d.ts +1276 -0
- package/build/types/sell-apps/communication/commerceNotificationV1Oas3.js +5 -0
- package/build/types/sell-apps/communication/sellNegotiationV1Oas3.d.ts +277 -0
- package/build/types/sell-apps/communication/sellNegotiationV1Oas3.js +5 -0
- package/build/types/sell-apps/listing-management/sellInventoryV1Oas3.d.ts +3133 -0
- package/build/types/sell-apps/listing-management/sellInventoryV1Oas3.js +5 -0
- package/build/types/sell-apps/listing-metadata/sellMetadataV1Oas3.d.ts +2289 -0
- package/build/types/sell-apps/listing-metadata/sellMetadataV1Oas3.js +5 -0
- package/build/types/sell-apps/markeitng-and-promotions/sellMarketingV1Oas3.d.ts +6650 -0
- package/build/types/sell-apps/markeitng-and-promotions/sellMarketingV1Oas3.js +5 -0
- package/build/types/sell-apps/markeitng-and-promotions/sellRecommendationV1Oas3.d.ts +172 -0
- package/build/types/sell-apps/markeitng-and-promotions/sellRecommendationV1Oas3.js +5 -0
- package/build/types/sell-apps/order-management/sellFulfillmentV1Oas3.d.ts +1869 -0
- package/build/types/sell-apps/order-management/sellFulfillmentV1Oas3.js +5 -0
- package/build/types/sell-apps/other-apis/commerceIdentityV1Oas3.d.ts +178 -0
- package/build/types/sell-apps/other-apis/commerceIdentityV1Oas3.js +5 -0
- package/build/types/sell-apps/other-apis/commerceTranslationV1BetaOas3.d.ts +128 -0
- package/build/types/sell-apps/other-apis/commerceTranslationV1BetaOas3.js +5 -0
- package/build/types/sell-apps/other-apis/commerceVeroV1Oas3.d.ts +417 -0
- package/build/types/sell-apps/other-apis/commerceVeroV1Oas3.js +5 -0
- package/build/types/sell-apps/other-apis/sellComplianceV1Oas3.d.ts +273 -0
- package/build/types/sell-apps/other-apis/sellComplianceV1Oas3.js +5 -0
- package/build/types/sell-apps/other-apis/sellEdeliveryInternationalShippingOas3.d.ts +2537 -0
- package/build/types/sell-apps/other-apis/sellEdeliveryInternationalShippingOas3.js +5 -0
- package/build/types/sell-apps/other-apis/sellMarketingV1Oas3.d.ts +6650 -0
- package/build/types/sell-apps/other-apis/sellMarketingV1Oas3.js +5 -0
- package/build/types/sell-apps/other-apis/sellRecommendationV1Oas3.d.ts +172 -0
- package/build/types/sell-apps/other-apis/sellRecommendationV1Oas3.js +5 -0
- package/build/utils/account-management/account.d.ts +1094 -0
- package/build/utils/account-management/account.js +831 -0
- package/build/utils/communication/feedback.d.ts +152 -0
- package/build/utils/communication/feedback.js +216 -0
- package/build/utils/communication/message.d.ts +174 -0
- package/build/utils/communication/message.js +242 -0
- package/build/utils/communication/negotiation.d.ts +123 -0
- package/build/utils/communication/negotiation.js +150 -0
- package/build/utils/communication/notification.d.ts +370 -0
- package/build/utils/communication/notification.js +369 -0
- package/build/utils/date-converter.d.ts +59 -0
- package/build/utils/date-converter.js +160 -0
- package/build/utils/llm-client-detector.d.ts +54 -0
- package/build/utils/llm-client-detector.js +318 -0
- package/build/utils/oauth-helper.d.ts +37 -0
- package/build/utils/oauth-helper.js +315 -0
- package/build/utils/order-management/dispute.d.ts +346 -0
- package/build/utils/order-management/dispute.js +369 -0
- package/build/utils/order-management/fulfillment.d.ts +200 -0
- package/build/utils/order-management/fulfillment.js +205 -0
- package/build/utils/other/compliance.d.ts +49 -0
- package/build/utils/other/compliance.js +76 -0
- package/build/utils/other/edelivery.d.ts +310 -0
- package/build/utils/other/edelivery.js +241 -0
- package/build/utils/other/identity.d.ts +13 -0
- package/build/utils/other/identity.js +13 -0
- package/build/utils/other/translation.d.ts +28 -0
- package/build/utils/other/translation.js +41 -0
- package/build/utils/other/vero.d.ts +61 -0
- package/build/utils/other/vero.js +90 -0
- package/build/utils/scope-helper.d.ts +49 -0
- package/build/utils/scope-helper.js +207 -0
- package/build/utils/security-checker.d.ts +46 -0
- package/build/utils/security-checker.js +248 -0
- package/build/utils/setup-validator.d.ts +25 -0
- package/build/utils/setup-validator.js +305 -0
- package/build/utils/token-utils.d.ts +40 -0
- package/build/utils/token-utils.js +40 -0
- package/package.json +115 -0
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Zod schemas for Notification API input validation
|
|
4
|
+
* Based on: src/api/communication/notification.ts
|
|
5
|
+
* OpenAPI spec: docs/sell-apps/communication/commerce_notification_v1_oas3.json
|
|
6
|
+
* Types from: src/types/commerce_notification_v1_oas3.ts
|
|
7
|
+
*/
|
|
8
|
+
// Reusable schema for limit parameter (string in API)
|
|
9
|
+
const limitSchema = z
|
|
10
|
+
.string({
|
|
11
|
+
invalid_type_error: 'limit must be a string',
|
|
12
|
+
description: 'Maximum number of items to return per page (10-100)',
|
|
13
|
+
})
|
|
14
|
+
.optional();
|
|
15
|
+
// Reusable schema for continuation token parameter
|
|
16
|
+
const continuationTokenSchema = z
|
|
17
|
+
.string({
|
|
18
|
+
message: 'Continuation token must be a string',
|
|
19
|
+
invalid_type_error: 'continuation_token must be a string',
|
|
20
|
+
description: 'Token for pagination',
|
|
21
|
+
})
|
|
22
|
+
.optional();
|
|
23
|
+
// Reusable schema for ID parameters (required)
|
|
24
|
+
const idSchema = (name, description) => z.string({
|
|
25
|
+
message: `${name} is required`,
|
|
26
|
+
required_error: `${name.toLowerCase().replace(/\s+/g, '_')} is required`,
|
|
27
|
+
invalid_type_error: `${name.toLowerCase().replace(/\s+/g, '_')} must be a string`,
|
|
28
|
+
description,
|
|
29
|
+
});
|
|
30
|
+
// Reusable schema for object data parameters
|
|
31
|
+
const _objectDataSchema = (name, description) => z.record(z.unknown(), {
|
|
32
|
+
message: `${name} is required`,
|
|
33
|
+
required_error: `${name.toLowerCase().replace(/\s+/g, '_')} is required`,
|
|
34
|
+
invalid_type_error: `${name.toLowerCase().replace(/\s+/g, '_')} must be an object`,
|
|
35
|
+
description,
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* Schema for getPublicKey method
|
|
39
|
+
* Endpoint: GET /public_key/{public_key_id}
|
|
40
|
+
* Path: GetPublicKeyParams - public_key_id (required)
|
|
41
|
+
*/
|
|
42
|
+
export const getPublicKeySchema = z.object({
|
|
43
|
+
public_key_id: idSchema('Public key ID', 'The unique identifier for the public key'),
|
|
44
|
+
});
|
|
45
|
+
/**
|
|
46
|
+
* Schema for getConfig method
|
|
47
|
+
* Endpoint: GET /config
|
|
48
|
+
*/
|
|
49
|
+
export const getConfigSchema = z.object({});
|
|
50
|
+
/**
|
|
51
|
+
* Schema for updateConfig method
|
|
52
|
+
* Endpoint: PUT /config
|
|
53
|
+
* Body: ConfigType - alertEmail
|
|
54
|
+
*/
|
|
55
|
+
export const updateConfigSchema = z.object({
|
|
56
|
+
alert_email: z
|
|
57
|
+
.string({
|
|
58
|
+
invalid_type_error: 'alert_email must be a string',
|
|
59
|
+
description: 'Email address for Notification API alerts',
|
|
60
|
+
})
|
|
61
|
+
.email({
|
|
62
|
+
message: 'alert_email must be a valid email address',
|
|
63
|
+
})
|
|
64
|
+
.optional(),
|
|
65
|
+
});
|
|
66
|
+
/**
|
|
67
|
+
* Schema for getDestinations method
|
|
68
|
+
* Endpoint: GET /destination
|
|
69
|
+
* Query: DestinationParams - continuation_token, limit
|
|
70
|
+
*/
|
|
71
|
+
export const getDestinationsSchema = z.object({
|
|
72
|
+
continuation_token: continuationTokenSchema,
|
|
73
|
+
limit: limitSchema,
|
|
74
|
+
});
|
|
75
|
+
/**
|
|
76
|
+
* Schema for getDestination method
|
|
77
|
+
* Endpoint: GET /destination/{destination_id}
|
|
78
|
+
* Path: destination_id (required)
|
|
79
|
+
*/
|
|
80
|
+
export const getDestinationSchema = z.object({
|
|
81
|
+
destination_id: idSchema('Destination ID', 'The unique identifier for the destination'),
|
|
82
|
+
});
|
|
83
|
+
/**
|
|
84
|
+
* Schema for createDestination method
|
|
85
|
+
* Endpoint: POST /destination
|
|
86
|
+
* Body: DestinationRequest - deliveryConfig, name, status
|
|
87
|
+
*/
|
|
88
|
+
export const createDestinationSchema = z.object({
|
|
89
|
+
delivery_config: z
|
|
90
|
+
.object({
|
|
91
|
+
endpoint: z
|
|
92
|
+
.string({
|
|
93
|
+
invalid_type_error: 'endpoint must be a string',
|
|
94
|
+
description: 'HTTPS endpoint URL (no internal IPs or localhost)',
|
|
95
|
+
})
|
|
96
|
+
.url({
|
|
97
|
+
message: 'endpoint must be a valid URL',
|
|
98
|
+
})
|
|
99
|
+
.optional(),
|
|
100
|
+
verification_token: z
|
|
101
|
+
.string({
|
|
102
|
+
invalid_type_error: 'verification_token must be a string',
|
|
103
|
+
description: 'Verification token (32-80 alphanumeric, underscore, hyphen characters)',
|
|
104
|
+
})
|
|
105
|
+
.min(32, 'verification_token must be at least 32 characters')
|
|
106
|
+
.max(80, 'verification_token must be at most 80 characters')
|
|
107
|
+
.regex(/^[a-zA-Z0-9_-]+$/, 'verification_token can only contain alphanumeric, underscore, and hyphen characters')
|
|
108
|
+
.optional(),
|
|
109
|
+
}, {
|
|
110
|
+
invalid_type_error: 'delivery_config must be an object',
|
|
111
|
+
description: 'Delivery configuration with endpoint and verification token',
|
|
112
|
+
})
|
|
113
|
+
.optional(),
|
|
114
|
+
name: z
|
|
115
|
+
.string({
|
|
116
|
+
invalid_type_error: 'name must be a string',
|
|
117
|
+
description: 'Seller-specified name for the destination',
|
|
118
|
+
})
|
|
119
|
+
.optional(),
|
|
120
|
+
status: z
|
|
121
|
+
.string({
|
|
122
|
+
invalid_type_error: 'status must be a string',
|
|
123
|
+
description: 'Status: ENABLED or DISABLED',
|
|
124
|
+
})
|
|
125
|
+
.optional(),
|
|
126
|
+
});
|
|
127
|
+
/**
|
|
128
|
+
* Schema for updateDestination method
|
|
129
|
+
* Endpoint: PUT /destination/{destination_id}
|
|
130
|
+
* Path: destination_id (required)
|
|
131
|
+
* Body: DestinationRequest
|
|
132
|
+
*/
|
|
133
|
+
export const updateDestinationSchema = z.object({
|
|
134
|
+
destination_id: idSchema('Destination ID', 'The unique identifier for the destination'),
|
|
135
|
+
delivery_config: z
|
|
136
|
+
.object({
|
|
137
|
+
endpoint: z
|
|
138
|
+
.string({
|
|
139
|
+
invalid_type_error: 'endpoint must be a string',
|
|
140
|
+
description: 'HTTPS endpoint URL',
|
|
141
|
+
})
|
|
142
|
+
.url({
|
|
143
|
+
message: 'endpoint must be a valid URL',
|
|
144
|
+
})
|
|
145
|
+
.optional(),
|
|
146
|
+
verification_token: z
|
|
147
|
+
.string({
|
|
148
|
+
invalid_type_error: 'verification_token must be a string',
|
|
149
|
+
description: 'Verification token (32-80 characters)',
|
|
150
|
+
})
|
|
151
|
+
.min(32)
|
|
152
|
+
.max(80)
|
|
153
|
+
.regex(/^[a-zA-Z0-9_-]+$/)
|
|
154
|
+
.optional(),
|
|
155
|
+
})
|
|
156
|
+
.optional(),
|
|
157
|
+
name: z
|
|
158
|
+
.string({
|
|
159
|
+
invalid_type_error: 'name must be a string',
|
|
160
|
+
description: 'Destination name',
|
|
161
|
+
})
|
|
162
|
+
.optional(),
|
|
163
|
+
status: z
|
|
164
|
+
.string({
|
|
165
|
+
invalid_type_error: 'status must be a string',
|
|
166
|
+
description: 'Status: ENABLED or DISABLED',
|
|
167
|
+
})
|
|
168
|
+
.optional(),
|
|
169
|
+
});
|
|
170
|
+
/**
|
|
171
|
+
* Schema for deleteDestination method
|
|
172
|
+
* Endpoint: DELETE /destination/{destination_id}
|
|
173
|
+
* Path: destination_id (required)
|
|
174
|
+
*/
|
|
175
|
+
export const deleteDestinationSchema = z.object({
|
|
176
|
+
destination_id: idSchema('Destination ID', 'The unique identifier for the destination'),
|
|
177
|
+
});
|
|
178
|
+
/**
|
|
179
|
+
* Schema for getSubscriptions method
|
|
180
|
+
* Endpoint: GET /subscription
|
|
181
|
+
* Query: SubscriptionParams - continuation_token, limit
|
|
182
|
+
*/
|
|
183
|
+
export const getSubscriptionsSchema = z.object({
|
|
184
|
+
limit: limitSchema,
|
|
185
|
+
continuation_token: continuationTokenSchema,
|
|
186
|
+
});
|
|
187
|
+
/**
|
|
188
|
+
* Schema for createSubscription method
|
|
189
|
+
* Endpoint: POST /subscription
|
|
190
|
+
* Body: CreateSubscriptionRequest - destinationId, payload, status, topicId
|
|
191
|
+
*/
|
|
192
|
+
export const createSubscriptionSchema = z.object({
|
|
193
|
+
destination_id: z
|
|
194
|
+
.string({
|
|
195
|
+
invalid_type_error: 'destination_id must be a string',
|
|
196
|
+
description: 'The unique identifier of the destination endpoint',
|
|
197
|
+
})
|
|
198
|
+
.optional(),
|
|
199
|
+
payload: z
|
|
200
|
+
.object({
|
|
201
|
+
delivery_protocol: z
|
|
202
|
+
.string({
|
|
203
|
+
invalid_type_error: 'delivery_protocol must be a string',
|
|
204
|
+
description: 'Delivery protocol (currently only HTTPS is supported)',
|
|
205
|
+
})
|
|
206
|
+
.optional(),
|
|
207
|
+
format: z
|
|
208
|
+
.string({
|
|
209
|
+
invalid_type_error: 'format must be a string',
|
|
210
|
+
description: 'Payload format (currently only JSON is supported)',
|
|
211
|
+
})
|
|
212
|
+
.optional(),
|
|
213
|
+
schema_version: z
|
|
214
|
+
.string({
|
|
215
|
+
invalid_type_error: 'schema_version must be a string',
|
|
216
|
+
description: 'Schema version for the notification topic',
|
|
217
|
+
})
|
|
218
|
+
.optional(),
|
|
219
|
+
}, {
|
|
220
|
+
invalid_type_error: 'payload must be an object',
|
|
221
|
+
description: 'Payload configuration',
|
|
222
|
+
})
|
|
223
|
+
.optional(),
|
|
224
|
+
status: z
|
|
225
|
+
.string({
|
|
226
|
+
invalid_type_error: 'status must be a string',
|
|
227
|
+
description: 'Status: ENABLED or DISABLED',
|
|
228
|
+
})
|
|
229
|
+
.optional(),
|
|
230
|
+
topic_id: z
|
|
231
|
+
.string({
|
|
232
|
+
invalid_type_error: 'topic_id must be a string',
|
|
233
|
+
description: 'The unique identifier of the notification topic',
|
|
234
|
+
})
|
|
235
|
+
.optional(),
|
|
236
|
+
});
|
|
237
|
+
/**
|
|
238
|
+
* Schema for getSubscription method
|
|
239
|
+
* Endpoint: GET /subscription/{subscription_id}
|
|
240
|
+
* Path: subscription_id (required)
|
|
241
|
+
*/
|
|
242
|
+
export const getSubscriptionSchema = z.object({
|
|
243
|
+
subscription_id: idSchema('Subscription ID', 'The unique identifier for the subscription'),
|
|
244
|
+
});
|
|
245
|
+
/**
|
|
246
|
+
* Schema for updateSubscription method
|
|
247
|
+
* Endpoint: PUT /subscription/{subscription_id}
|
|
248
|
+
* Path: subscription_id (required)
|
|
249
|
+
* Body: UpdateSubscriptionRequest - destinationId, payload, status
|
|
250
|
+
*/
|
|
251
|
+
export const updateSubscriptionSchema = z.object({
|
|
252
|
+
subscription_id: idSchema('Subscription ID', 'The unique identifier for the subscription'),
|
|
253
|
+
destination_id: z
|
|
254
|
+
.string({
|
|
255
|
+
invalid_type_error: 'destination_id must be a string',
|
|
256
|
+
description: 'The unique identifier of the destination',
|
|
257
|
+
})
|
|
258
|
+
.optional(),
|
|
259
|
+
payload: z
|
|
260
|
+
.object({
|
|
261
|
+
delivery_protocol: z
|
|
262
|
+
.string({
|
|
263
|
+
invalid_type_error: 'delivery_protocol must be a string',
|
|
264
|
+
description: 'Delivery protocol',
|
|
265
|
+
})
|
|
266
|
+
.optional(),
|
|
267
|
+
format: z
|
|
268
|
+
.string({
|
|
269
|
+
invalid_type_error: 'format must be a string',
|
|
270
|
+
description: 'Payload format',
|
|
271
|
+
})
|
|
272
|
+
.optional(),
|
|
273
|
+
schema_version: z
|
|
274
|
+
.string({
|
|
275
|
+
invalid_type_error: 'schema_version must be a string',
|
|
276
|
+
description: 'Schema version',
|
|
277
|
+
})
|
|
278
|
+
.optional(),
|
|
279
|
+
})
|
|
280
|
+
.optional(),
|
|
281
|
+
status: z
|
|
282
|
+
.string({
|
|
283
|
+
invalid_type_error: 'status must be a string',
|
|
284
|
+
description: 'Status: ENABLED or DISABLED',
|
|
285
|
+
})
|
|
286
|
+
.optional(),
|
|
287
|
+
});
|
|
288
|
+
/**
|
|
289
|
+
* Schema for deleteSubscription method
|
|
290
|
+
* Endpoint: DELETE /subscription/{subscription_id}
|
|
291
|
+
* Path: subscription_id (required)
|
|
292
|
+
*/
|
|
293
|
+
export const deleteSubscriptionSchema = z.object({
|
|
294
|
+
subscription_id: idSchema('Subscription ID', 'The unique identifier for the subscription'),
|
|
295
|
+
});
|
|
296
|
+
/**
|
|
297
|
+
* Schema for disableSubscription method
|
|
298
|
+
* Endpoint: POST /subscription/{subscription_id}/disable
|
|
299
|
+
* Path: subscription_id (required)
|
|
300
|
+
*/
|
|
301
|
+
export const disableSubscriptionSchema = z.object({
|
|
302
|
+
subscription_id: idSchema('Subscription ID', 'The unique identifier for the subscription'),
|
|
303
|
+
});
|
|
304
|
+
/**
|
|
305
|
+
* Schema for enableSubscription method
|
|
306
|
+
* Endpoint: POST /subscription/{subscription_id}/enable
|
|
307
|
+
* Path: subscription_id (required)
|
|
308
|
+
*/
|
|
309
|
+
export const enableSubscriptionSchema = z.object({
|
|
310
|
+
subscription_id: idSchema('Subscription ID', 'The unique identifier for the subscription'),
|
|
311
|
+
});
|
|
312
|
+
/**
|
|
313
|
+
* Schema for testSubscription method
|
|
314
|
+
* Endpoint: POST /subscription/{subscription_id}/test
|
|
315
|
+
* Path: subscription_id (required)
|
|
316
|
+
*/
|
|
317
|
+
export const testSubscriptionSchema = z.object({
|
|
318
|
+
subscription_id: idSchema('Subscription ID', 'The unique identifier for the subscription'),
|
|
319
|
+
});
|
|
320
|
+
/**
|
|
321
|
+
* Schema for getTopic method
|
|
322
|
+
* Endpoint: GET /topic/{topic_id}
|
|
323
|
+
* Path: topic_id (required)
|
|
324
|
+
*/
|
|
325
|
+
export const getTopicSchema = z.object({
|
|
326
|
+
topic_id: idSchema('Topic ID', 'The unique identifier for the topic'),
|
|
327
|
+
});
|
|
328
|
+
/**
|
|
329
|
+
* Schema for getTopics method
|
|
330
|
+
* Endpoint: GET /topic
|
|
331
|
+
* Query: TopicParams - continuation_token, limit
|
|
332
|
+
*/
|
|
333
|
+
export const getTopicsSchema = z.object({
|
|
334
|
+
limit: limitSchema,
|
|
335
|
+
continuation_token: continuationTokenSchema,
|
|
336
|
+
});
|
|
337
|
+
/**
|
|
338
|
+
* Schema for createSubscriptionFilter method
|
|
339
|
+
* Endpoint: POST /subscription/{subscription_id}/filter
|
|
340
|
+
* Path: subscription_id (required)
|
|
341
|
+
* Body: CreateSubscriptionFilterRequest - filterSchema
|
|
342
|
+
*/
|
|
343
|
+
export const createSubscriptionFilterSchema = z.object({
|
|
344
|
+
subscription_id: idSchema('Subscription ID', 'The unique identifier for the subscription'),
|
|
345
|
+
filter_schema: z
|
|
346
|
+
.record(z.unknown(), {
|
|
347
|
+
invalid_type_error: 'filter_schema must be an object',
|
|
348
|
+
description: 'Valid JSON Schema Core document (version 2020-12 or later) to filter notifications',
|
|
349
|
+
})
|
|
350
|
+
.optional(),
|
|
351
|
+
});
|
|
352
|
+
/**
|
|
353
|
+
* Schema for getSubscriptionFilter method
|
|
354
|
+
* Endpoint: GET /subscription/{subscription_id}/filter/{filter_id}
|
|
355
|
+
* Path: subscription_id (required), filter_id (required)
|
|
356
|
+
*/
|
|
357
|
+
export const getSubscriptionFilterSchema = z.object({
|
|
358
|
+
subscription_id: idSchema('Subscription ID', 'The unique identifier for the subscription'),
|
|
359
|
+
filter_id: idSchema('Filter ID', 'The unique identifier for the filter'),
|
|
360
|
+
});
|
|
361
|
+
/**
|
|
362
|
+
* Schema for deleteSubscriptionFilter method
|
|
363
|
+
* Endpoint: DELETE /subscription/{subscription_id}/filter/{filter_id}
|
|
364
|
+
* Path: subscription_id (required), filter_id (required)
|
|
365
|
+
*/
|
|
366
|
+
export const deleteSubscriptionFilterSchema = z.object({
|
|
367
|
+
subscription_id: idSchema('Subscription ID', 'The unique identifier for the subscription'),
|
|
368
|
+
filter_id: idSchema('Filter ID', 'The unique identifier for the filter'),
|
|
369
|
+
});
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for date/timestamp conversion and validation
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Convert a date string or Date object to Unix timestamp (milliseconds)
|
|
6
|
+
*
|
|
7
|
+
* Supported formats:
|
|
8
|
+
* - ISO 8601: "2025-01-15T10:30:00Z" or "2025-01-15T10:30:00.000Z"
|
|
9
|
+
* - Date object: new Date()
|
|
10
|
+
* - Unix timestamp (milliseconds): 1736938200000
|
|
11
|
+
* - Unix timestamp (seconds): 1736938200
|
|
12
|
+
* - Relative time: "in 2 hours", "in 7200 seconds"
|
|
13
|
+
*
|
|
14
|
+
* @param dateInput - Date string, Date object, or Unix timestamp
|
|
15
|
+
* @returns Unix timestamp in milliseconds
|
|
16
|
+
* @throws Error if date format is invalid
|
|
17
|
+
*/
|
|
18
|
+
export declare function convertToTimestamp(dateInput: string | Date | number): number;
|
|
19
|
+
/**
|
|
20
|
+
* Calculate expiry timestamp from duration in seconds
|
|
21
|
+
* Useful for eBay token responses which provide expires_in in seconds
|
|
22
|
+
*
|
|
23
|
+
* @param expiresInSeconds - Duration in seconds (e.g., 7200 for 2 hours)
|
|
24
|
+
* @param fromTimestamp - Optional base timestamp (defaults to now)
|
|
25
|
+
* @returns Expiry timestamp in milliseconds
|
|
26
|
+
*/
|
|
27
|
+
export declare function calculateExpiry(expiresInSeconds: number, fromTimestamp?: number): number;
|
|
28
|
+
/**
|
|
29
|
+
* Check if a timestamp is expired
|
|
30
|
+
*
|
|
31
|
+
* @param expiryTimestamp - Expiry timestamp in milliseconds
|
|
32
|
+
* @param bufferSeconds - Optional buffer time in seconds (default: 60)
|
|
33
|
+
* @returns true if expired (or will expire within buffer time)
|
|
34
|
+
*/
|
|
35
|
+
export declare function isExpired(expiryTimestamp: number, bufferSeconds?: number): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Get human-readable time remaining until expiry
|
|
38
|
+
*
|
|
39
|
+
* @param expiryTimestamp - Expiry timestamp in milliseconds
|
|
40
|
+
* @returns Human-readable string (e.g., "2 hours 15 minutes")
|
|
41
|
+
*/
|
|
42
|
+
export declare function getTimeRemaining(expiryTimestamp: number): string;
|
|
43
|
+
/**
|
|
44
|
+
* Validate token expiry times and provide recommendations
|
|
45
|
+
*
|
|
46
|
+
* @param accessTokenExpiry - Access token expiry timestamp
|
|
47
|
+
* @param refreshTokenExpiry - Refresh token expiry timestamp
|
|
48
|
+
* @returns Validation result with warnings and recommendations
|
|
49
|
+
*/
|
|
50
|
+
export interface TokenExpiryValidation {
|
|
51
|
+
valid: boolean;
|
|
52
|
+
accessTokenStatus: 'valid' | 'expiring-soon' | 'expired';
|
|
53
|
+
refreshTokenStatus: 'valid' | 'expiring-soon' | 'expired';
|
|
54
|
+
accessTokenRemaining: string;
|
|
55
|
+
refreshTokenRemaining: string;
|
|
56
|
+
warnings: string[];
|
|
57
|
+
recommendations: string[];
|
|
58
|
+
}
|
|
59
|
+
export declare function validateTokenExpiry(accessTokenExpiry: number, refreshTokenExpiry: number): TokenExpiryValidation;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for date/timestamp conversion and validation
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Convert a date string or Date object to Unix timestamp (milliseconds)
|
|
6
|
+
*
|
|
7
|
+
* Supported formats:
|
|
8
|
+
* - ISO 8601: "2025-01-15T10:30:00Z" or "2025-01-15T10:30:00.000Z"
|
|
9
|
+
* - Date object: new Date()
|
|
10
|
+
* - Unix timestamp (milliseconds): 1736938200000
|
|
11
|
+
* - Unix timestamp (seconds): 1736938200
|
|
12
|
+
* - Relative time: "in 2 hours", "in 7200 seconds"
|
|
13
|
+
*
|
|
14
|
+
* @param dateInput - Date string, Date object, or Unix timestamp
|
|
15
|
+
* @returns Unix timestamp in milliseconds
|
|
16
|
+
* @throws Error if date format is invalid
|
|
17
|
+
*/
|
|
18
|
+
export function convertToTimestamp(dateInput) {
|
|
19
|
+
// If already a number, handle as timestamp
|
|
20
|
+
if (typeof dateInput === 'number') {
|
|
21
|
+
// If appears to be seconds (less than year 2100 in milliseconds)
|
|
22
|
+
if (dateInput < 4102444800000) {
|
|
23
|
+
// Could be seconds, check if reasonable
|
|
24
|
+
const now = Date.now();
|
|
25
|
+
const asSeconds = dateInput * 1000;
|
|
26
|
+
// If multiplying by 1000 gives reasonable future date, it's seconds
|
|
27
|
+
if (asSeconds > now - 100 * 365 * 24 * 60 * 60 * 1000) {
|
|
28
|
+
return Math.floor(asSeconds);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Already milliseconds
|
|
32
|
+
return Math.floor(dateInput);
|
|
33
|
+
}
|
|
34
|
+
// If Date object
|
|
35
|
+
if (dateInput instanceof Date) {
|
|
36
|
+
const timestamp = dateInput.getTime();
|
|
37
|
+
if (isNaN(timestamp)) {
|
|
38
|
+
throw new Error('Invalid Date object');
|
|
39
|
+
}
|
|
40
|
+
return timestamp;
|
|
41
|
+
}
|
|
42
|
+
// If string, try parsing
|
|
43
|
+
if (typeof dateInput === 'string') {
|
|
44
|
+
// Handle relative time: "in X hours/minutes/seconds"
|
|
45
|
+
const relativeMatch = /^in\s+(\d+)\s+(hours?|minutes?|seconds?|days?)$/i.exec(dateInput);
|
|
46
|
+
if (relativeMatch) {
|
|
47
|
+
const amount = parseInt(relativeMatch[1], 10);
|
|
48
|
+
const unit = relativeMatch[2].toLowerCase();
|
|
49
|
+
let multiplier = 1000; // Default to seconds
|
|
50
|
+
if (unit.startsWith('minute'))
|
|
51
|
+
multiplier = 60 * 1000;
|
|
52
|
+
else if (unit.startsWith('hour'))
|
|
53
|
+
multiplier = 60 * 60 * 1000;
|
|
54
|
+
else if (unit.startsWith('day'))
|
|
55
|
+
multiplier = 24 * 60 * 60 * 1000;
|
|
56
|
+
return Date.now() + amount * multiplier;
|
|
57
|
+
}
|
|
58
|
+
// Try parsing as ISO date or other standard format
|
|
59
|
+
const parsed = Date.parse(dateInput);
|
|
60
|
+
if (isNaN(parsed)) {
|
|
61
|
+
throw new Error(`Invalid date format: ${dateInput}. Supported formats: ISO 8601, Unix timestamp, or relative time (e.g., "in 2 hours")`);
|
|
62
|
+
}
|
|
63
|
+
return parsed;
|
|
64
|
+
}
|
|
65
|
+
throw new Error(`Unsupported date input type: ${typeof dateInput}`);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Calculate expiry timestamp from duration in seconds
|
|
69
|
+
* Useful for eBay token responses which provide expires_in in seconds
|
|
70
|
+
*
|
|
71
|
+
* @param expiresInSeconds - Duration in seconds (e.g., 7200 for 2 hours)
|
|
72
|
+
* @param fromTimestamp - Optional base timestamp (defaults to now)
|
|
73
|
+
* @returns Expiry timestamp in milliseconds
|
|
74
|
+
*/
|
|
75
|
+
export function calculateExpiry(expiresInSeconds, fromTimestamp) {
|
|
76
|
+
const baseTime = fromTimestamp ?? Date.now();
|
|
77
|
+
return baseTime + expiresInSeconds * 1000;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if a timestamp is expired
|
|
81
|
+
*
|
|
82
|
+
* @param expiryTimestamp - Expiry timestamp in milliseconds
|
|
83
|
+
* @param bufferSeconds - Optional buffer time in seconds (default: 60)
|
|
84
|
+
* @returns true if expired (or will expire within buffer time)
|
|
85
|
+
*/
|
|
86
|
+
export function isExpired(expiryTimestamp, bufferSeconds = 60) {
|
|
87
|
+
const now = Date.now();
|
|
88
|
+
const buffer = bufferSeconds * 1000;
|
|
89
|
+
return now + buffer >= expiryTimestamp;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get human-readable time remaining until expiry
|
|
93
|
+
*
|
|
94
|
+
* @param expiryTimestamp - Expiry timestamp in milliseconds
|
|
95
|
+
* @returns Human-readable string (e.g., "2 hours 15 minutes")
|
|
96
|
+
*/
|
|
97
|
+
export function getTimeRemaining(expiryTimestamp) {
|
|
98
|
+
const now = Date.now();
|
|
99
|
+
const diff = expiryTimestamp - now;
|
|
100
|
+
if (diff <= 0) {
|
|
101
|
+
return 'Expired';
|
|
102
|
+
}
|
|
103
|
+
const seconds = Math.floor(diff / 1000);
|
|
104
|
+
const minutes = Math.floor(seconds / 60);
|
|
105
|
+
const hours = Math.floor(minutes / 60);
|
|
106
|
+
const days = Math.floor(hours / 24);
|
|
107
|
+
if (days > 0) {
|
|
108
|
+
const remainingHours = hours % 24;
|
|
109
|
+
return `${days} day${days > 1 ? 's' : ''}${remainingHours > 0 ? ` ${remainingHours} hour${remainingHours > 1 ? 's' : ''}` : ''}`;
|
|
110
|
+
}
|
|
111
|
+
if (hours > 0) {
|
|
112
|
+
const remainingMinutes = minutes % 60;
|
|
113
|
+
return `${hours} hour${hours > 1 ? 's' : ''}${remainingMinutes > 0 ? ` ${remainingMinutes} minute${remainingMinutes > 1 ? 's' : ''}` : ''}`;
|
|
114
|
+
}
|
|
115
|
+
if (minutes > 0) {
|
|
116
|
+
const remainingSeconds = seconds % 60;
|
|
117
|
+
return `${minutes} minute${minutes > 1 ? 's' : ''}${remainingSeconds > 0 ? ` ${remainingSeconds} second${remainingSeconds > 1 ? 's' : ''}` : ''}`;
|
|
118
|
+
}
|
|
119
|
+
return `${seconds} second${seconds > 1 ? 's' : ''}`;
|
|
120
|
+
}
|
|
121
|
+
export function validateTokenExpiry(accessTokenExpiry, refreshTokenExpiry) {
|
|
122
|
+
const warnings = [];
|
|
123
|
+
const recommendations = [];
|
|
124
|
+
const accessExpired = isExpired(accessTokenExpiry, 0);
|
|
125
|
+
const accessExpiringSoon = isExpired(accessTokenExpiry, 300); // 5 minutes
|
|
126
|
+
const refreshExpired = isExpired(refreshTokenExpiry, 0);
|
|
127
|
+
const refreshExpiringSoon = isExpired(refreshTokenExpiry, 86400); // 1 day
|
|
128
|
+
let accessTokenStatus = 'valid';
|
|
129
|
+
let refreshTokenStatus = 'valid';
|
|
130
|
+
if (accessExpired) {
|
|
131
|
+
accessTokenStatus = 'expired';
|
|
132
|
+
warnings.push('Access token has expired');
|
|
133
|
+
if (!refreshExpired) {
|
|
134
|
+
recommendations.push('Use the refresh token to obtain a new access token');
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else if (accessExpiringSoon) {
|
|
138
|
+
accessTokenStatus = 'expiring-soon';
|
|
139
|
+
warnings.push('Access token will expire soon');
|
|
140
|
+
}
|
|
141
|
+
if (refreshExpired) {
|
|
142
|
+
refreshTokenStatus = 'expired';
|
|
143
|
+
warnings.push('Refresh token has expired');
|
|
144
|
+
recommendations.push('User needs to re-authorize the application to get new tokens');
|
|
145
|
+
}
|
|
146
|
+
else if (refreshExpiringSoon) {
|
|
147
|
+
refreshTokenStatus = 'expiring-soon';
|
|
148
|
+
warnings.push('Refresh token will expire soon (within 24 hours)');
|
|
149
|
+
recommendations.push('Consider prompting user to re-authorize before refresh token expires');
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
valid: !accessExpired && !refreshExpired,
|
|
153
|
+
accessTokenStatus,
|
|
154
|
+
refreshTokenStatus,
|
|
155
|
+
accessTokenRemaining: getTimeRemaining(accessTokenExpiry),
|
|
156
|
+
refreshTokenRemaining: getTimeRemaining(refreshTokenExpiry),
|
|
157
|
+
warnings,
|
|
158
|
+
recommendations,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM Client Detection and Auto-Configuration
|
|
3
|
+
*
|
|
4
|
+
* Detects installed LLM clients and provides utilities to auto-configure them
|
|
5
|
+
* with the eBay MCP server settings.
|
|
6
|
+
*/
|
|
7
|
+
export interface LLMClient {
|
|
8
|
+
name: string;
|
|
9
|
+
displayName: string;
|
|
10
|
+
configPath: string;
|
|
11
|
+
detected: boolean;
|
|
12
|
+
configExists: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface MCPServerConfig {
|
|
15
|
+
command: string;
|
|
16
|
+
args?: string[];
|
|
17
|
+
env?: Record<string, string>;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Detect all available LLM clients
|
|
21
|
+
*/
|
|
22
|
+
export declare function detectLLMClients(): LLMClient[];
|
|
23
|
+
/**
|
|
24
|
+
* Configure Claude Desktop with eBay MCP server
|
|
25
|
+
*/
|
|
26
|
+
export declare function configureClaudeDesktop(projectRoot: string): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Configure Cline (VSCode extension) with eBay MCP server
|
|
29
|
+
*/
|
|
30
|
+
export declare function configureCline(projectRoot: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Configure Continue.dev with eBay MCP server
|
|
33
|
+
*/
|
|
34
|
+
export declare function configureContinue(projectRoot: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Configure specified LLM client
|
|
37
|
+
*/
|
|
38
|
+
export declare function configureLLMClient(clientName: string, projectRoot: string): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Get human-readable instructions for manual configuration
|
|
41
|
+
*/
|
|
42
|
+
export declare function getManualConfigInstructions(clientName: string, projectRoot: string): string;
|
|
43
|
+
/**
|
|
44
|
+
* Verify client configuration is correct
|
|
45
|
+
*/
|
|
46
|
+
export declare function verifyClientConfiguration(clientName: string, projectRoot: string): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Get all LLM clients (detected and undetected)
|
|
49
|
+
*/
|
|
50
|
+
export declare function getAllSupportedClients(): string[];
|
|
51
|
+
/**
|
|
52
|
+
* Check if client supports MCP protocol
|
|
53
|
+
*/
|
|
54
|
+
export declare function supportsNativeMCP(clientName: string): boolean;
|