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.
Files changed (205) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +586 -0
  3. package/build/api/account-management/account.d.ts +216 -0
  4. package/build/api/account-management/account.js +305 -0
  5. package/build/api/analytics-and-report/analytics.d.ts +33 -0
  6. package/build/api/analytics-and-report/analytics.js +102 -0
  7. package/build/api/client.d.ts +89 -0
  8. package/build/api/client.js +343 -0
  9. package/build/api/communication/feedback.d.ts +45 -0
  10. package/build/api/communication/feedback.js +119 -0
  11. package/build/api/communication/message.d.ts +55 -0
  12. package/build/api/communication/message.js +131 -0
  13. package/build/api/communication/negotiation.d.ts +39 -0
  14. package/build/api/communication/negotiation.js +97 -0
  15. package/build/api/communication/notification.d.ts +128 -0
  16. package/build/api/communication/notification.js +373 -0
  17. package/build/api/index.d.ts +96 -0
  18. package/build/api/index.js +121 -0
  19. package/build/api/listing-management/inventory.d.ts +216 -0
  20. package/build/api/listing-management/inventory.js +633 -0
  21. package/build/api/listing-metadata/metadata.d.ts +154 -0
  22. package/build/api/listing-metadata/metadata.js +485 -0
  23. package/build/api/listing-metadata/taxonomy.d.ts +38 -0
  24. package/build/api/listing-metadata/taxonomy.js +58 -0
  25. package/build/api/marketing-and-promotions/marketing.d.ts +395 -0
  26. package/build/api/marketing-and-promotions/marketing.js +565 -0
  27. package/build/api/marketing-and-promotions/recommendation.d.ts +20 -0
  28. package/build/api/marketing-and-promotions/recommendation.js +32 -0
  29. package/build/api/order-management/dispute.d.ts +65 -0
  30. package/build/api/order-management/dispute.js +69 -0
  31. package/build/api/order-management/fulfillment.d.ts +80 -0
  32. package/build/api/order-management/fulfillment.js +89 -0
  33. package/build/api/other/compliance.d.ts +26 -0
  34. package/build/api/other/compliance.js +47 -0
  35. package/build/api/other/edelivery.d.ts +153 -0
  36. package/build/api/other/edelivery.js +219 -0
  37. package/build/api/other/identity.d.ts +17 -0
  38. package/build/api/other/identity.js +24 -0
  39. package/build/api/other/translation.d.ts +14 -0
  40. package/build/api/other/translation.js +22 -0
  41. package/build/api/other/vero.d.ts +30 -0
  42. package/build/api/other/vero.js +48 -0
  43. package/build/auth/oauth-metadata.d.ts +46 -0
  44. package/build/auth/oauth-metadata.js +59 -0
  45. package/build/auth/oauth-middleware.d.ts +35 -0
  46. package/build/auth/oauth-middleware.js +99 -0
  47. package/build/auth/oauth-types.d.ts +66 -0
  48. package/build/auth/oauth-types.js +4 -0
  49. package/build/auth/oauth.d.ts +93 -0
  50. package/build/auth/oauth.js +383 -0
  51. package/build/auth/scope-utils.d.ts +70 -0
  52. package/build/auth/scope-utils.js +304 -0
  53. package/build/auth/token-verifier.d.ts +57 -0
  54. package/build/auth/token-verifier.js +172 -0
  55. package/build/config/environment.d.ts +61 -0
  56. package/build/config/environment.js +260 -0
  57. package/build/index.d.ts +1 -0
  58. package/build/index.js +98 -0
  59. package/build/schemas/account-management/account.d.ts +5324 -0
  60. package/build/schemas/account-management/account.js +366 -0
  61. package/build/schemas/analytics/analytics.d.ts +167 -0
  62. package/build/schemas/analytics/analytics.js +191 -0
  63. package/build/schemas/communication/messages.d.ts +1872 -0
  64. package/build/schemas/communication/messages.js +348 -0
  65. package/build/schemas/fulfillment/orders.d.ts +4655 -0
  66. package/build/schemas/fulfillment/orders.js +317 -0
  67. package/build/schemas/index.d.ts +2100 -0
  68. package/build/schemas/index.js +68 -0
  69. package/build/schemas/inventory-management/inventory.d.ts +6419 -0
  70. package/build/schemas/inventory-management/inventory.js +450 -0
  71. package/build/schemas/marketing/marketing.d.ts +14181 -0
  72. package/build/schemas/marketing/marketing.js +1088 -0
  73. package/build/schemas/metadata/metadata.d.ts +5259 -0
  74. package/build/schemas/metadata/metadata.js +614 -0
  75. package/build/schemas/other/other-apis.d.ts +257 -0
  76. package/build/schemas/other/other-apis.js +372 -0
  77. package/build/schemas/taxonomy/taxonomy.d.ts +215 -0
  78. package/build/schemas/taxonomy/taxonomy.js +571 -0
  79. package/build/scripts/auto-setup.d.ts +12 -0
  80. package/build/scripts/auto-setup.js +277 -0
  81. package/build/scripts/diagnostics.d.ts +8 -0
  82. package/build/scripts/diagnostics.js +299 -0
  83. package/build/scripts/download-specs.d.ts +1 -0
  84. package/build/scripts/download-specs.js +116 -0
  85. package/build/scripts/interactive-setup.d.ts +21 -0
  86. package/build/scripts/interactive-setup.js +723 -0
  87. package/build/server-http.d.ts +11 -0
  88. package/build/server-http.js +361 -0
  89. package/build/tools/definitions/account-with-schemas.d.ts +39 -0
  90. package/build/tools/definitions/account-with-schemas.js +170 -0
  91. package/build/tools/definitions/account.d.ts +12 -0
  92. package/build/tools/definitions/account.js +428 -0
  93. package/build/tools/definitions/analytics.d.ts +25 -0
  94. package/build/tools/definitions/analytics.js +66 -0
  95. package/build/tools/definitions/communication.d.ts +12 -0
  96. package/build/tools/definitions/communication.js +151 -0
  97. package/build/tools/definitions/fulfillment.d.ts +12 -0
  98. package/build/tools/definitions/fulfillment.js +326 -0
  99. package/build/tools/definitions/index.d.ts +25 -0
  100. package/build/tools/definitions/index.js +37 -0
  101. package/build/tools/definitions/inventory.d.ts +12 -0
  102. package/build/tools/definitions/inventory.js +429 -0
  103. package/build/tools/definitions/marketing.d.ts +12 -0
  104. package/build/tools/definitions/marketing.js +1095 -0
  105. package/build/tools/definitions/metadata.d.ts +12 -0
  106. package/build/tools/definitions/metadata.js +188 -0
  107. package/build/tools/definitions/other.d.ts +13 -0
  108. package/build/tools/definitions/other.js +309 -0
  109. package/build/tools/definitions/taxonomy.d.ts +25 -0
  110. package/build/tools/definitions/taxonomy.js +64 -0
  111. package/build/tools/definitions/token-management.d.ts +35 -0
  112. package/build/tools/definitions/token-management.js +103 -0
  113. package/build/tools/index.d.ts +11 -0
  114. package/build/tools/index.js +1003 -0
  115. package/build/tools/schemas.d.ts +14764 -0
  116. package/build/tools/schemas.js +667 -0
  117. package/build/tools/tool-definitions.d.ts +35 -0
  118. package/build/tools/tool-definitions.js +3534 -0
  119. package/build/types/application-settings/developerAnalyticsV1BetaOas3.d.ts +197 -0
  120. package/build/types/application-settings/developerAnalyticsV1BetaOas3.js +5 -0
  121. package/build/types/application-settings/developerClientRegistrationV1Oas3.d.ts +155 -0
  122. package/build/types/application-settings/developerClientRegistrationV1Oas3.js +5 -0
  123. package/build/types/application-settings/developerKeyManagementV1Oas3.d.ts +246 -0
  124. package/build/types/application-settings/developerKeyManagementV1Oas3.js +5 -0
  125. package/build/types/ebay-enums.d.ts +1204 -0
  126. package/build/types/ebay-enums.js +1330 -0
  127. package/build/types/ebay.d.ts +143 -0
  128. package/build/types/ebay.js +123 -0
  129. package/build/types/index.d.ts +6 -0
  130. package/build/types/index.js +10 -0
  131. package/build/types/sell-apps/account-management/sellAccountV1Oas3.d.ts +2579 -0
  132. package/build/types/sell-apps/account-management/sellAccountV1Oas3.js +5 -0
  133. package/build/types/sell-apps/analytics-and-report/sellAnalyticsV1Oas3.d.ts +446 -0
  134. package/build/types/sell-apps/analytics-and-report/sellAnalyticsV1Oas3.js +5 -0
  135. package/build/types/sell-apps/communication/commerceFeedbackV1BetaOas3.d.ts +705 -0
  136. package/build/types/sell-apps/communication/commerceFeedbackV1BetaOas3.js +5 -0
  137. package/build/types/sell-apps/communication/commerceMessageV1Oas3.d.ts +590 -0
  138. package/build/types/sell-apps/communication/commerceMessageV1Oas3.js +5 -0
  139. package/build/types/sell-apps/communication/commerceNotificationV1Oas3.d.ts +1276 -0
  140. package/build/types/sell-apps/communication/commerceNotificationV1Oas3.js +5 -0
  141. package/build/types/sell-apps/communication/sellNegotiationV1Oas3.d.ts +277 -0
  142. package/build/types/sell-apps/communication/sellNegotiationV1Oas3.js +5 -0
  143. package/build/types/sell-apps/listing-management/sellInventoryV1Oas3.d.ts +3133 -0
  144. package/build/types/sell-apps/listing-management/sellInventoryV1Oas3.js +5 -0
  145. package/build/types/sell-apps/listing-metadata/sellMetadataV1Oas3.d.ts +2289 -0
  146. package/build/types/sell-apps/listing-metadata/sellMetadataV1Oas3.js +5 -0
  147. package/build/types/sell-apps/markeitng-and-promotions/sellMarketingV1Oas3.d.ts +6650 -0
  148. package/build/types/sell-apps/markeitng-and-promotions/sellMarketingV1Oas3.js +5 -0
  149. package/build/types/sell-apps/markeitng-and-promotions/sellRecommendationV1Oas3.d.ts +172 -0
  150. package/build/types/sell-apps/markeitng-and-promotions/sellRecommendationV1Oas3.js +5 -0
  151. package/build/types/sell-apps/order-management/sellFulfillmentV1Oas3.d.ts +1869 -0
  152. package/build/types/sell-apps/order-management/sellFulfillmentV1Oas3.js +5 -0
  153. package/build/types/sell-apps/other-apis/commerceIdentityV1Oas3.d.ts +178 -0
  154. package/build/types/sell-apps/other-apis/commerceIdentityV1Oas3.js +5 -0
  155. package/build/types/sell-apps/other-apis/commerceTranslationV1BetaOas3.d.ts +128 -0
  156. package/build/types/sell-apps/other-apis/commerceTranslationV1BetaOas3.js +5 -0
  157. package/build/types/sell-apps/other-apis/commerceVeroV1Oas3.d.ts +417 -0
  158. package/build/types/sell-apps/other-apis/commerceVeroV1Oas3.js +5 -0
  159. package/build/types/sell-apps/other-apis/sellComplianceV1Oas3.d.ts +273 -0
  160. package/build/types/sell-apps/other-apis/sellComplianceV1Oas3.js +5 -0
  161. package/build/types/sell-apps/other-apis/sellEdeliveryInternationalShippingOas3.d.ts +2537 -0
  162. package/build/types/sell-apps/other-apis/sellEdeliveryInternationalShippingOas3.js +5 -0
  163. package/build/types/sell-apps/other-apis/sellMarketingV1Oas3.d.ts +6650 -0
  164. package/build/types/sell-apps/other-apis/sellMarketingV1Oas3.js +5 -0
  165. package/build/types/sell-apps/other-apis/sellRecommendationV1Oas3.d.ts +172 -0
  166. package/build/types/sell-apps/other-apis/sellRecommendationV1Oas3.js +5 -0
  167. package/build/utils/account-management/account.d.ts +1094 -0
  168. package/build/utils/account-management/account.js +831 -0
  169. package/build/utils/communication/feedback.d.ts +152 -0
  170. package/build/utils/communication/feedback.js +216 -0
  171. package/build/utils/communication/message.d.ts +174 -0
  172. package/build/utils/communication/message.js +242 -0
  173. package/build/utils/communication/negotiation.d.ts +123 -0
  174. package/build/utils/communication/negotiation.js +150 -0
  175. package/build/utils/communication/notification.d.ts +370 -0
  176. package/build/utils/communication/notification.js +369 -0
  177. package/build/utils/date-converter.d.ts +59 -0
  178. package/build/utils/date-converter.js +160 -0
  179. package/build/utils/llm-client-detector.d.ts +54 -0
  180. package/build/utils/llm-client-detector.js +318 -0
  181. package/build/utils/oauth-helper.d.ts +37 -0
  182. package/build/utils/oauth-helper.js +315 -0
  183. package/build/utils/order-management/dispute.d.ts +346 -0
  184. package/build/utils/order-management/dispute.js +369 -0
  185. package/build/utils/order-management/fulfillment.d.ts +200 -0
  186. package/build/utils/order-management/fulfillment.js +205 -0
  187. package/build/utils/other/compliance.d.ts +49 -0
  188. package/build/utils/other/compliance.js +76 -0
  189. package/build/utils/other/edelivery.d.ts +310 -0
  190. package/build/utils/other/edelivery.js +241 -0
  191. package/build/utils/other/identity.d.ts +13 -0
  192. package/build/utils/other/identity.js +13 -0
  193. package/build/utils/other/translation.d.ts +28 -0
  194. package/build/utils/other/translation.js +41 -0
  195. package/build/utils/other/vero.d.ts +61 -0
  196. package/build/utils/other/vero.js +90 -0
  197. package/build/utils/scope-helper.d.ts +49 -0
  198. package/build/utils/scope-helper.js +207 -0
  199. package/build/utils/security-checker.d.ts +46 -0
  200. package/build/utils/security-checker.js +248 -0
  201. package/build/utils/setup-validator.d.ts +25 -0
  202. package/build/utils/setup-validator.js +305 -0
  203. package/build/utils/token-utils.d.ts +40 -0
  204. package/build/utils/token-utils.js +40 -0
  205. 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;