@thorprovider/medusa-extended 1.11.3 → 1.11.6

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/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { GetChannelCustomersOptions, GetChannelCustomersResponse, GetChannelApiKeysResponse, GetChannelCategoriesOptions, GetChannelCategoriesResponse, GetCategorySalesChannelsResponse, AssignCategoriesToChannelsBody, AssignCategoriesToChannelsResponse, UnassignCategoriesFromChannelsBody, UnassignCategoriesFromChannelsResponse, GetCollectionSalesChannelsResponse, AssignCollectionsToChannelsBody, AssignCollectionsToChannelsResponse, UnassignCollectionsFromChannelsBody, UnassignCollectionsFromChannelsResponse, GetAdminStorefrontConfigResponse, UpdateStorefrontConfigBody, UpdateStorefrontConfigResponse, GetAdminSiteConfigResponse, UpdateSiteConfigBody, UpdateSiteConfigResponse, GetAdminSiteConfigHistoryOptions, GetAdminSiteConfigHistoryResponse, RestoreSiteConfigResponse, ChatIntent, ChatSource, DropshipperDashboardCapabilities, GetMyProfileResponse, ChatRequest, ChatResponse, GetNotificationsOptions, GetNotificationsResponse, OnboardDropshipperBody, OnboardDropshipperResponse, GetDropshipperProductsOptions, GetDropshipperProductsResponse, ValidateCheckoutItemsRequest, ValidateCheckoutItemsResponse, CostPriceChangesCheckResponse, CostPriceChangesResponse, AcknowledgeCostPriceChangesResponse, UpdateDropshipperProductStatusBody, UpdateDropshipperProductStatusResponse, GetProductAttributesResponse, GetDropshipperAttributesResponse, UpdateDropshipperPricesBody, UpdateDropshipperPricesResponse, GetDropshipperOrdersOptions, GetDropshipperOrdersResponse, GetDropshipperOrderDetailResponse, GetDropshipperShippingOptionsParams, GetDropshipperShippingOptionsResponse, ExtendedCreateDropshipperOrderBody, ExtendedCreateDropshipperOrderResponse, SetPaymentCollectorBody, SetPaymentCollectorResponse, SetPaymentMethodBody, SetPaymentMethodResponse, CancelDropshipperOrderResponse, CreateOrderEditBody, CreateOrderEditResponse, AddOrderEditItemBody, AddOrderEditItemResponse, ConfirmOrderEditResponse, GetOrderNotesResponse, CreateOrderNoteBody, CreateOrderNoteResponse, DeleteOrderNoteResponse, GetProviderCategoriesResponse, GetDropshipperCategoriesOptions, GetDropshipperCategoriesResponse, CreateDropshipperCategoryBody, DropshipperCategory, UpdateDropshipperCategoryBody, DeleteDropshipperCategoryResponse, GetCategoryMappingsOptions, GetCategoryMappingsResponse, CreateCategoryMappingBody, CreateCategoryMappingResponse, DeleteCategoryMappingResponse, GetDropshipperCustomersOptions, GetDropshipperCustomersResponse, GetDropshipperCustomerDetailResponse, CreateDropshipperCustomerBody, CreateDropshipperCustomerResponse, UpdateDropshipperCustomerBody, UpdateDropshipperCustomerResponse, GetDropshipperAddressesResponse, DropshipperAddressBody, DropshipperAddressResponse, GetDropshipperAccountResponse, GetDropshipperPayableResponse, GetDropshipperReceivableResponse, GetSettlementsOptions, GetSettlementsResponse, GetSettlementDetailResponse, GetDropshipperAccountBalanceResponse, GetDropshipperAccountOrdersOptions, GetDropshipperAccountOrdersResponse, CreateSettlementBody, CreateSettlementResponse, ConfirmSettlementBody, UpdateSettlementStatusResponse, CancelSettlementBody, GetAdminDropshipperAccountsResponse, GetAdminAccountBalanceResponse, GetAdminPriceListsResponse, GetUserChannelResponse, GetAdminDropshipperAccountOrdersResponse, GetAdminDropshipperAccountSettlementsOptions, GetAdminDropshipperAccountSettlementsResponse, ResolveGuaranteeBody, ResolveGuaranteeResponse, CreateCompensacionBody, CreateCompensacionResponse, CreateAjusteBody, CreateAjusteResponse, CreateCobroBody, CreateCobroResponse, CreatePagoBody, CreatePagoResponse, CreateReversoBody, CreateReversoResponse, ConfirmMovementBody, ConfirmMovementResponse, CancelMovementBody, CancelMovementResponse, GetFinancialAnalysisResponse, RegisterPaymentBody, RegisterPaymentResponse, GetDropshipperPromotionsOptions, GetDropshipperPromotionsResponse, CreateDropshipperPromotionBody, DropshipperPromotion, UpdateDropshipperPromotionBody, DeleteDropshipperPromotionResponse, GetDashboardStatsOptions, GetDashboardStatsResponse, GetStorefrontDropshipperCategoriesResponse, GetDropshipperDraftOrdersOptions, GetDropshipperDraftOrdersResponse, GetDropshipperDraftOrderDetailResponse, CreateDropshipperDraftOrderBody, CreateDropshipperDraftOrderResponse, UpdateDropshipperDraftOrderBody, UpdateDropshipperDraftOrderResponse, ConvertDropshipperDraftOrderBody, ConvertDropshipperDraftOrderResponse, DeleteDropshipperDraftOrderResponse, GetGeoCountriesResponse, GetGeoProvincesResponse, GetGeoCitiesResponse } from '@thorprovider/types';
1
+ import { GetChannelCustomersOptions, GetChannelCustomersResponse, GetChannelApiKeysResponse, GetChannelCategoriesOptions, GetChannelCategoriesResponse, GetCategorySalesChannelsResponse, AssignCategoriesToChannelsBody, AssignCategoriesToChannelsResponse, UnassignCategoriesFromChannelsBody, UnassignCategoriesFromChannelsResponse, GetCollectionSalesChannelsResponse, AssignCollectionsToChannelsBody, AssignCollectionsToChannelsResponse, UnassignCollectionsFromChannelsBody, UnassignCollectionsFromChannelsResponse, GetAdminStorefrontConfigResponse, UpdateStorefrontConfigBody, UpdateStorefrontConfigResponse, GetAdminSiteConfigResponse, UpdateSiteConfigBody, UpdateSiteConfigResponse, GetAdminSiteConfigHistoryOptions, GetAdminSiteConfigHistoryResponse, RestoreSiteConfigResponse, ChatIntent, ChatSource, DropshipperDashboardCapabilities, GetMyProfileResponse, ChatRequest, ChatResponse, ChatAssistantHealthResponse, GetNotificationsOptions, GetNotificationsResponse, OnboardDropshipperBody, OnboardDropshipperResponse, GetDropshipperProductsOptions, GetDropshipperProductsResponse, ValidateCheckoutItemsRequest, ValidateCheckoutItemsResponse, CostPriceChangesCheckResponse, CostPriceChangesResponse, AcknowledgeCostPriceChangesResponse, UpdateDropshipperProductStatusBody, UpdateDropshipperProductStatusResponse, GetProductAttributesResponse, GetDropshipperAttributesResponse, UpdateDropshipperPricesBody, UpdateDropshipperPricesResponse, GetDropshipperOrdersOptions, GetDropshipperOrdersResponse, GetDropshipperOrderDetailResponse, GetDropshipperShippingOptionsParams, GetDropshipperShippingOptionsResponse, ExtendedCreateDropshipperOrderBody, ExtendedCreateDropshipperOrderResponse, SetPaymentCollectorBody, SetPaymentCollectorResponse, SetPaymentMethodBody, SetPaymentMethodResponse, CancelDropshipperOrderResponse, CreateOrderEditBody, CreateOrderEditResponse, AddOrderEditItemBody, AddOrderEditItemResponse, ConfirmOrderEditResponse, GetOrderNotesResponse, CreateOrderNoteBody, CreateOrderNoteResponse, DeleteOrderNoteResponse, GetProviderCategoriesResponse, GetDropshipperCategoriesOptions, GetDropshipperCategoriesResponse, CreateDropshipperCategoryBody, DropshipperCategory, UpdateDropshipperCategoryBody, DeleteDropshipperCategoryResponse, GetCategoryMappingsOptions, GetCategoryMappingsResponse, CreateCategoryMappingBody, CreateCategoryMappingResponse, DeleteCategoryMappingResponse, GetDropshipperCustomersOptions, GetDropshipperCustomersResponse, GetDropshipperCustomerDetailResponse, CreateDropshipperCustomerBody, CreateDropshipperCustomerResponse, UpdateDropshipperCustomerBody, UpdateDropshipperCustomerResponse, GetDropshipperAddressesResponse, DropshipperAddressBody, DropshipperAddressResponse, GetDropshipperAccountResponse, GetDropshipperPayableResponse, GetDropshipperReceivableResponse, GetSettlementsOptions, GetSettlementsResponse, GetSettlementDetailResponse, GetDropshipperAccountBalanceResponse, GetDropshipperAccountOrdersOptions, GetDropshipperAccountOrdersResponse, CreateSettlementBody, CreateSettlementResponse, ConfirmSettlementBody, UpdateSettlementStatusResponse, CancelSettlementBody, GetAdminDropshipperAccountsResponse, GetAdminAccountBalanceResponse, GetAdminPriceListsResponse, GetUserChannelResponse, GetAdminDropshipperAccountOrdersResponse, GetAdminDropshipperAccountSettlementsOptions, GetAdminDropshipperAccountSettlementsResponse, ResolveGuaranteeBody, ResolveGuaranteeResponse, CreateCompensacionBody, CreateCompensacionResponse, CreateAjusteBody, CreateAjusteResponse, CreateCobroBody, CreateCobroResponse, CreatePagoBody, CreatePagoResponse, CreateReversoBody, CreateReversoResponse, ConfirmMovementBody, ConfirmMovementResponse, CancelMovementBody, CancelMovementResponse, GetFinancialAnalysisResponse, RegisterPaymentBody, RegisterPaymentResponse, GetDropshipperPromotionsOptions, GetDropshipperPromotionsResponse, CreateDropshipperPromotionBody, DropshipperPromotion, UpdateDropshipperPromotionBody, DeleteDropshipperPromotionResponse, GetDashboardStatsOptions, GetDashboardStatsResponse, GetStorefrontDropshipperCategoriesResponse, GetDropshipperDraftOrdersOptions, GetDropshipperDraftOrdersResponse, GetDropshipperDraftOrderDetailResponse, CreateDropshipperDraftOrderBody, CreateDropshipperDraftOrderResponse, UpdateDropshipperDraftOrderBody, UpdateDropshipperDraftOrderResponse, ConvertDropshipperDraftOrderBody, ConvertDropshipperDraftOrderResponse, DeleteDropshipperDraftOrderResponse, GetGeoCountriesResponse, GetGeoProvincesResponse, GetGeoCitiesResponse } from '@thorprovider/types';
2
2
 
3
3
  /**
4
4
  * @fileoverview Medusa Multi-Tenant Admin Client
@@ -167,8 +167,8 @@ declare class MedusaAdminClient {
167
167
  * One event from the streamed AI assistant chat (`chatAssistantStream`).
168
168
  *
169
169
  * The backend returns a UI-message stream (SSE over `text/event-stream`) for
170
- * catalog searches, and a plain JSON `ChatResponse` for greetings/other
171
- * intents. `chatAssistantStream` normalizes both into this single event type so
170
+ * catalog searches, and a plain JSON `ChatResponse` for `default` intents.
171
+ * `chatAssistantStream` normalizes both into this single event type so
172
172
  * consumers can render incremental text and update the "thinking" label as the
173
173
  * model progresses without knowing the transport details.
174
174
  */
@@ -183,7 +183,7 @@ type ChatStreamEvent = {
183
183
  } | {
184
184
  type: 'finish';
185
185
  intent: ChatIntent;
186
- /** Products referenced by the answer (empty for greetings/other). */
186
+ /** Products referenced by the answer (empty for `default` intents). */
187
187
  sources: ChatSource[];
188
188
  } | {
189
189
  type: 'error';
@@ -261,13 +261,30 @@ declare class DropshipperClient {
261
261
  *
262
262
  * Unlike `chatAssistant`, this surfaces the model's progress: the backend
263
263
  * resolves the intent first and then streams the answer token by token
264
- * (catalog searches) or returns the full answer in one shot (greetings/other).
264
+ * (catalog searches) or returns the full answer in one shot (`default`).
265
265
  * The response is normalized into a single `ReadableStream<ChatStreamEvent>`
266
266
  * so callers can show a live "thinking" label and render text incrementally.
267
267
  *
268
268
  * `POST /admin/thor/dropshipper/ai/chat`
269
269
  */
270
270
  chatAssistantStream(body: ChatRequest): Promise<ReadableStream<ChatStreamEvent>>;
271
+ /**
272
+ * Cheap liveness probe for the AI assistant.
273
+ *
274
+ * The backend performs no LLM or retrieval work, so this is safe to poll
275
+ * (e.g. from a dashboard availability indicator). Returns 200 with
276
+ * `available: true` when the assistant is configured; the backend answers
277
+ * HTTP 503 with `available: false` when `AI_GATEWAY_API_KEY` is missing.
278
+ *
279
+ * Deliberately does NOT go through `fetchBackendWithResilience`: that layer
280
+ * funnels every call through the SHARED `backendCircuitBreaker`, and the
281
+ * definitive 503 "not configured" answer would count as failures and could
282
+ * open the circuit, taking down all dropshipper API traffic. A health probe
283
+ * must stay isolated, with no retries and a short timeout.
284
+ *
285
+ * `GET /admin/thor/dropshipper/ai/health`
286
+ */
287
+ chatAssistantHealth(): Promise<ChatAssistantHealthResponse>;
271
288
  /**
272
289
  * List feed notifications for the authenticated dropshipper.
273
290
  *
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { GetChannelCustomersOptions, GetChannelCustomersResponse, GetChannelApiKeysResponse, GetChannelCategoriesOptions, GetChannelCategoriesResponse, GetCategorySalesChannelsResponse, AssignCategoriesToChannelsBody, AssignCategoriesToChannelsResponse, UnassignCategoriesFromChannelsBody, UnassignCategoriesFromChannelsResponse, GetCollectionSalesChannelsResponse, AssignCollectionsToChannelsBody, AssignCollectionsToChannelsResponse, UnassignCollectionsFromChannelsBody, UnassignCollectionsFromChannelsResponse, GetAdminStorefrontConfigResponse, UpdateStorefrontConfigBody, UpdateStorefrontConfigResponse, GetAdminSiteConfigResponse, UpdateSiteConfigBody, UpdateSiteConfigResponse, GetAdminSiteConfigHistoryOptions, GetAdminSiteConfigHistoryResponse, RestoreSiteConfigResponse, ChatIntent, ChatSource, DropshipperDashboardCapabilities, GetMyProfileResponse, ChatRequest, ChatResponse, GetNotificationsOptions, GetNotificationsResponse, OnboardDropshipperBody, OnboardDropshipperResponse, GetDropshipperProductsOptions, GetDropshipperProductsResponse, ValidateCheckoutItemsRequest, ValidateCheckoutItemsResponse, CostPriceChangesCheckResponse, CostPriceChangesResponse, AcknowledgeCostPriceChangesResponse, UpdateDropshipperProductStatusBody, UpdateDropshipperProductStatusResponse, GetProductAttributesResponse, GetDropshipperAttributesResponse, UpdateDropshipperPricesBody, UpdateDropshipperPricesResponse, GetDropshipperOrdersOptions, GetDropshipperOrdersResponse, GetDropshipperOrderDetailResponse, GetDropshipperShippingOptionsParams, GetDropshipperShippingOptionsResponse, ExtendedCreateDropshipperOrderBody, ExtendedCreateDropshipperOrderResponse, SetPaymentCollectorBody, SetPaymentCollectorResponse, SetPaymentMethodBody, SetPaymentMethodResponse, CancelDropshipperOrderResponse, CreateOrderEditBody, CreateOrderEditResponse, AddOrderEditItemBody, AddOrderEditItemResponse, ConfirmOrderEditResponse, GetOrderNotesResponse, CreateOrderNoteBody, CreateOrderNoteResponse, DeleteOrderNoteResponse, GetProviderCategoriesResponse, GetDropshipperCategoriesOptions, GetDropshipperCategoriesResponse, CreateDropshipperCategoryBody, DropshipperCategory, UpdateDropshipperCategoryBody, DeleteDropshipperCategoryResponse, GetCategoryMappingsOptions, GetCategoryMappingsResponse, CreateCategoryMappingBody, CreateCategoryMappingResponse, DeleteCategoryMappingResponse, GetDropshipperCustomersOptions, GetDropshipperCustomersResponse, GetDropshipperCustomerDetailResponse, CreateDropshipperCustomerBody, CreateDropshipperCustomerResponse, UpdateDropshipperCustomerBody, UpdateDropshipperCustomerResponse, GetDropshipperAddressesResponse, DropshipperAddressBody, DropshipperAddressResponse, GetDropshipperAccountResponse, GetDropshipperPayableResponse, GetDropshipperReceivableResponse, GetSettlementsOptions, GetSettlementsResponse, GetSettlementDetailResponse, GetDropshipperAccountBalanceResponse, GetDropshipperAccountOrdersOptions, GetDropshipperAccountOrdersResponse, CreateSettlementBody, CreateSettlementResponse, ConfirmSettlementBody, UpdateSettlementStatusResponse, CancelSettlementBody, GetAdminDropshipperAccountsResponse, GetAdminAccountBalanceResponse, GetAdminPriceListsResponse, GetUserChannelResponse, GetAdminDropshipperAccountOrdersResponse, GetAdminDropshipperAccountSettlementsOptions, GetAdminDropshipperAccountSettlementsResponse, ResolveGuaranteeBody, ResolveGuaranteeResponse, CreateCompensacionBody, CreateCompensacionResponse, CreateAjusteBody, CreateAjusteResponse, CreateCobroBody, CreateCobroResponse, CreatePagoBody, CreatePagoResponse, CreateReversoBody, CreateReversoResponse, ConfirmMovementBody, ConfirmMovementResponse, CancelMovementBody, CancelMovementResponse, GetFinancialAnalysisResponse, RegisterPaymentBody, RegisterPaymentResponse, GetDropshipperPromotionsOptions, GetDropshipperPromotionsResponse, CreateDropshipperPromotionBody, DropshipperPromotion, UpdateDropshipperPromotionBody, DeleteDropshipperPromotionResponse, GetDashboardStatsOptions, GetDashboardStatsResponse, GetStorefrontDropshipperCategoriesResponse, GetDropshipperDraftOrdersOptions, GetDropshipperDraftOrdersResponse, GetDropshipperDraftOrderDetailResponse, CreateDropshipperDraftOrderBody, CreateDropshipperDraftOrderResponse, UpdateDropshipperDraftOrderBody, UpdateDropshipperDraftOrderResponse, ConvertDropshipperDraftOrderBody, ConvertDropshipperDraftOrderResponse, DeleteDropshipperDraftOrderResponse, GetGeoCountriesResponse, GetGeoProvincesResponse, GetGeoCitiesResponse } from '@thorprovider/types';
1
+ import { GetChannelCustomersOptions, GetChannelCustomersResponse, GetChannelApiKeysResponse, GetChannelCategoriesOptions, GetChannelCategoriesResponse, GetCategorySalesChannelsResponse, AssignCategoriesToChannelsBody, AssignCategoriesToChannelsResponse, UnassignCategoriesFromChannelsBody, UnassignCategoriesFromChannelsResponse, GetCollectionSalesChannelsResponse, AssignCollectionsToChannelsBody, AssignCollectionsToChannelsResponse, UnassignCollectionsFromChannelsBody, UnassignCollectionsFromChannelsResponse, GetAdminStorefrontConfigResponse, UpdateStorefrontConfigBody, UpdateStorefrontConfigResponse, GetAdminSiteConfigResponse, UpdateSiteConfigBody, UpdateSiteConfigResponse, GetAdminSiteConfigHistoryOptions, GetAdminSiteConfigHistoryResponse, RestoreSiteConfigResponse, ChatIntent, ChatSource, DropshipperDashboardCapabilities, GetMyProfileResponse, ChatRequest, ChatResponse, ChatAssistantHealthResponse, GetNotificationsOptions, GetNotificationsResponse, OnboardDropshipperBody, OnboardDropshipperResponse, GetDropshipperProductsOptions, GetDropshipperProductsResponse, ValidateCheckoutItemsRequest, ValidateCheckoutItemsResponse, CostPriceChangesCheckResponse, CostPriceChangesResponse, AcknowledgeCostPriceChangesResponse, UpdateDropshipperProductStatusBody, UpdateDropshipperProductStatusResponse, GetProductAttributesResponse, GetDropshipperAttributesResponse, UpdateDropshipperPricesBody, UpdateDropshipperPricesResponse, GetDropshipperOrdersOptions, GetDropshipperOrdersResponse, GetDropshipperOrderDetailResponse, GetDropshipperShippingOptionsParams, GetDropshipperShippingOptionsResponse, ExtendedCreateDropshipperOrderBody, ExtendedCreateDropshipperOrderResponse, SetPaymentCollectorBody, SetPaymentCollectorResponse, SetPaymentMethodBody, SetPaymentMethodResponse, CancelDropshipperOrderResponse, CreateOrderEditBody, CreateOrderEditResponse, AddOrderEditItemBody, AddOrderEditItemResponse, ConfirmOrderEditResponse, GetOrderNotesResponse, CreateOrderNoteBody, CreateOrderNoteResponse, DeleteOrderNoteResponse, GetProviderCategoriesResponse, GetDropshipperCategoriesOptions, GetDropshipperCategoriesResponse, CreateDropshipperCategoryBody, DropshipperCategory, UpdateDropshipperCategoryBody, DeleteDropshipperCategoryResponse, GetCategoryMappingsOptions, GetCategoryMappingsResponse, CreateCategoryMappingBody, CreateCategoryMappingResponse, DeleteCategoryMappingResponse, GetDropshipperCustomersOptions, GetDropshipperCustomersResponse, GetDropshipperCustomerDetailResponse, CreateDropshipperCustomerBody, CreateDropshipperCustomerResponse, UpdateDropshipperCustomerBody, UpdateDropshipperCustomerResponse, GetDropshipperAddressesResponse, DropshipperAddressBody, DropshipperAddressResponse, GetDropshipperAccountResponse, GetDropshipperPayableResponse, GetDropshipperReceivableResponse, GetSettlementsOptions, GetSettlementsResponse, GetSettlementDetailResponse, GetDropshipperAccountBalanceResponse, GetDropshipperAccountOrdersOptions, GetDropshipperAccountOrdersResponse, CreateSettlementBody, CreateSettlementResponse, ConfirmSettlementBody, UpdateSettlementStatusResponse, CancelSettlementBody, GetAdminDropshipperAccountsResponse, GetAdminAccountBalanceResponse, GetAdminPriceListsResponse, GetUserChannelResponse, GetAdminDropshipperAccountOrdersResponse, GetAdminDropshipperAccountSettlementsOptions, GetAdminDropshipperAccountSettlementsResponse, ResolveGuaranteeBody, ResolveGuaranteeResponse, CreateCompensacionBody, CreateCompensacionResponse, CreateAjusteBody, CreateAjusteResponse, CreateCobroBody, CreateCobroResponse, CreatePagoBody, CreatePagoResponse, CreateReversoBody, CreateReversoResponse, ConfirmMovementBody, ConfirmMovementResponse, CancelMovementBody, CancelMovementResponse, GetFinancialAnalysisResponse, RegisterPaymentBody, RegisterPaymentResponse, GetDropshipperPromotionsOptions, GetDropshipperPromotionsResponse, CreateDropshipperPromotionBody, DropshipperPromotion, UpdateDropshipperPromotionBody, DeleteDropshipperPromotionResponse, GetDashboardStatsOptions, GetDashboardStatsResponse, GetStorefrontDropshipperCategoriesResponse, GetDropshipperDraftOrdersOptions, GetDropshipperDraftOrdersResponse, GetDropshipperDraftOrderDetailResponse, CreateDropshipperDraftOrderBody, CreateDropshipperDraftOrderResponse, UpdateDropshipperDraftOrderBody, UpdateDropshipperDraftOrderResponse, ConvertDropshipperDraftOrderBody, ConvertDropshipperDraftOrderResponse, DeleteDropshipperDraftOrderResponse, GetGeoCountriesResponse, GetGeoProvincesResponse, GetGeoCitiesResponse } from '@thorprovider/types';
2
2
 
3
3
  /**
4
4
  * @fileoverview Medusa Multi-Tenant Admin Client
@@ -167,8 +167,8 @@ declare class MedusaAdminClient {
167
167
  * One event from the streamed AI assistant chat (`chatAssistantStream`).
168
168
  *
169
169
  * The backend returns a UI-message stream (SSE over `text/event-stream`) for
170
- * catalog searches, and a plain JSON `ChatResponse` for greetings/other
171
- * intents. `chatAssistantStream` normalizes both into this single event type so
170
+ * catalog searches, and a plain JSON `ChatResponse` for `default` intents.
171
+ * `chatAssistantStream` normalizes both into this single event type so
172
172
  * consumers can render incremental text and update the "thinking" label as the
173
173
  * model progresses without knowing the transport details.
174
174
  */
@@ -183,7 +183,7 @@ type ChatStreamEvent = {
183
183
  } | {
184
184
  type: 'finish';
185
185
  intent: ChatIntent;
186
- /** Products referenced by the answer (empty for greetings/other). */
186
+ /** Products referenced by the answer (empty for `default` intents). */
187
187
  sources: ChatSource[];
188
188
  } | {
189
189
  type: 'error';
@@ -261,13 +261,30 @@ declare class DropshipperClient {
261
261
  *
262
262
  * Unlike `chatAssistant`, this surfaces the model's progress: the backend
263
263
  * resolves the intent first and then streams the answer token by token
264
- * (catalog searches) or returns the full answer in one shot (greetings/other).
264
+ * (catalog searches) or returns the full answer in one shot (`default`).
265
265
  * The response is normalized into a single `ReadableStream<ChatStreamEvent>`
266
266
  * so callers can show a live "thinking" label and render text incrementally.
267
267
  *
268
268
  * `POST /admin/thor/dropshipper/ai/chat`
269
269
  */
270
270
  chatAssistantStream(body: ChatRequest): Promise<ReadableStream<ChatStreamEvent>>;
271
+ /**
272
+ * Cheap liveness probe for the AI assistant.
273
+ *
274
+ * The backend performs no LLM or retrieval work, so this is safe to poll
275
+ * (e.g. from a dashboard availability indicator). Returns 200 with
276
+ * `available: true` when the assistant is configured; the backend answers
277
+ * HTTP 503 with `available: false` when `AI_GATEWAY_API_KEY` is missing.
278
+ *
279
+ * Deliberately does NOT go through `fetchBackendWithResilience`: that layer
280
+ * funnels every call through the SHARED `backendCircuitBreaker`, and the
281
+ * definitive 503 "not configured" answer would count as failures and could
282
+ * open the circuit, taking down all dropshipper API traffic. A health probe
283
+ * must stay isolated, with no retries and a short timeout.
284
+ *
285
+ * `GET /admin/thor/dropshipper/ai/health`
286
+ */
287
+ chatAssistantHealth(): Promise<ChatAssistantHealthResponse>;
271
288
  /**
272
289
  * List feed notifications for the authenticated dropshipper.
273
290
  *
package/dist/index.js CHANGED
@@ -481,7 +481,7 @@ var DropshipperClient = class {
481
481
  *
482
482
  * Unlike `chatAssistant`, this surfaces the model's progress: the backend
483
483
  * resolves the intent first and then streams the answer token by token
484
- * (catalog searches) or returns the full answer in one shot (greetings/other).
484
+ * (catalog searches) or returns the full answer in one shot (`default`).
485
485
  * The response is normalized into a single `ReadableStream<ChatStreamEvent>`
486
486
  * so callers can show a live "thinking" label and render text incrementally.
487
487
  *
@@ -501,7 +501,10 @@ var DropshipperClient = class {
501
501
  };
502
502
  let response;
503
503
  try {
504
- response = await fetchBackendWithResilience(url, init);
504
+ response = await fetchBackendWithResilience(url, init, {
505
+ timeoutMs: 6e4,
506
+ maxRetries: 1
507
+ });
505
508
  } catch (networkError) {
506
509
  throw new import_adapters3.ProviderAPIError(
507
510
  `[dropshipper] Network error on POST /admin/thor/dropshipper/ai/chat: ${networkError.message}`,
@@ -511,20 +514,36 @@ var DropshipperClient = class {
511
514
  }
512
515
  if (!response.ok) {
513
516
  let message = `HTTP ${response.status}`;
517
+ let errorCode;
518
+ let requestId;
519
+ let details;
514
520
  try {
515
521
  const json = await response.json();
516
522
  message = json?.message ?? message;
523
+ errorCode = json?.error_code ?? json?.type;
524
+ requestId = json?.request_id;
525
+ details = json?.details;
517
526
  } catch {
518
527
  }
528
+ this.logger.error(
529
+ `[dropshipper] POST /admin/thor/dropshipper/ai/chat failed status=${response.status} message=${message}` + (errorCode ? ` error_code=${errorCode}` : "") + (requestId ? ` request_id=${requestId}` : "") + (details ? ` details=${details}` : "")
530
+ );
519
531
  throw new import_adapters3.ProviderAPIError(
520
532
  `[dropshipper] POST /admin/thor/dropshipper/ai/chat failed: ${message}`,
521
533
  `DROPSHIPPER_API_${response.status}`,
522
- response.status
534
+ response.status,
535
+ {
536
+ message,
537
+ status: response.status,
538
+ errorCode,
539
+ requestId,
540
+ details
541
+ }
523
542
  );
524
543
  }
525
544
  const contentType = response.headers.get("content-type") ?? "";
526
545
  if (contentType.includes("text/event-stream") && response.body) {
527
- return mapUiMessageStreamToEvents(response.body);
546
+ return mapUiMessageStreamToEvents(response.body, this.logger);
528
547
  }
529
548
  const data = await response.json();
530
549
  return new ReadableStream({
@@ -540,6 +559,61 @@ var DropshipperClient = class {
540
559
  }
541
560
  });
542
561
  }
562
+ /**
563
+ * Cheap liveness probe for the AI assistant.
564
+ *
565
+ * The backend performs no LLM or retrieval work, so this is safe to poll
566
+ * (e.g. from a dashboard availability indicator). Returns 200 with
567
+ * `available: true` when the assistant is configured; the backend answers
568
+ * HTTP 503 with `available: false` when `AI_GATEWAY_API_KEY` is missing.
569
+ *
570
+ * Deliberately does NOT go through `fetchBackendWithResilience`: that layer
571
+ * funnels every call through the SHARED `backendCircuitBreaker`, and the
572
+ * definitive 503 "not configured" answer would count as failures and could
573
+ * open the circuit, taking down all dropshipper API traffic. A health probe
574
+ * must stay isolated, with no retries and a short timeout.
575
+ *
576
+ * `GET /admin/thor/dropshipper/ai/health`
577
+ */
578
+ async chatAssistantHealth() {
579
+ const url = `${this.baseUrl}/admin/thor/dropshipper/ai/health`;
580
+ const controller = new AbortController();
581
+ const timeoutId = setTimeout(() => controller.abort(), 5e3);
582
+ let response;
583
+ try {
584
+ response = await fetch(url, {
585
+ method: "GET",
586
+ headers: { Authorization: `Bearer ${this.token}` },
587
+ signal: controller.signal,
588
+ cache: "no-store"
589
+ });
590
+ } catch (error) {
591
+ clearTimeout(timeoutId);
592
+ throw new import_adapters3.ProviderAPIError(
593
+ `[dropshipper] Network error on GET /admin/thor/dropshipper/ai/health: ${error.message}`,
594
+ "NETWORK_ERROR",
595
+ 0
596
+ );
597
+ }
598
+ clearTimeout(timeoutId);
599
+ if (response.status === 503) {
600
+ try {
601
+ const body = await response.json();
602
+ if (body && typeof body.available === "boolean") {
603
+ return body;
604
+ }
605
+ } catch {
606
+ }
607
+ }
608
+ if (!response.ok) {
609
+ throw new import_adapters3.ProviderAPIError(
610
+ `[dropshipper] GET /admin/thor/dropshipper/ai/health failed: HTTP ${response.status}`,
611
+ `DROPSHIPPER_API_${response.status}`,
612
+ response.status
613
+ );
614
+ }
615
+ return response.json();
616
+ }
543
617
  // -------------------------------------------------------------------------
544
618
  // Notifications
545
619
  // -------------------------------------------------------------------------
@@ -1698,10 +1772,11 @@ var DropshipperClient = class {
1698
1772
  );
1699
1773
  }
1700
1774
  };
1701
- async function* parseSse(stream) {
1775
+ async function* parseSse(stream, logger) {
1702
1776
  const reader = stream.getReader();
1703
1777
  const decoder = new TextDecoder();
1704
1778
  let buffer = "";
1779
+ let frameIndex = 0;
1705
1780
  try {
1706
1781
  while (true) {
1707
1782
  const { done, value } = await reader.read();
@@ -1714,9 +1789,13 @@ async function* parseSse(stream) {
1714
1789
  if (!trimmed.startsWith("data:")) continue;
1715
1790
  const payload = trimmed.slice(5).trim();
1716
1791
  if (!payload || payload === "[DONE]") continue;
1792
+ frameIndex += 1;
1717
1793
  try {
1718
1794
  yield JSON.parse(payload);
1719
- } catch {
1795
+ } catch (err) {
1796
+ logger?.warn(
1797
+ `[dropshipper] sse-malformed-frame frame=${frameIndex} payload=${payload.slice(0, 200)}`
1798
+ );
1720
1799
  }
1721
1800
  }
1722
1801
  }
@@ -1724,9 +1803,13 @@ async function* parseSse(stream) {
1724
1803
  if (tail.startsWith("data:")) {
1725
1804
  const payload = tail.slice(5).trim();
1726
1805
  if (payload && payload !== "[DONE]") {
1806
+ frameIndex += 1;
1727
1807
  try {
1728
1808
  yield JSON.parse(payload);
1729
- } catch {
1809
+ } catch (err) {
1810
+ logger?.warn(
1811
+ `[dropshipper] sse-malformed-frame frame=${frameIndex} payload=${payload.slice(0, 200)}`
1812
+ );
1730
1813
  }
1731
1814
  }
1732
1815
  }
@@ -1734,10 +1817,11 @@ async function* parseSse(stream) {
1734
1817
  reader.releaseLock();
1735
1818
  }
1736
1819
  }
1737
- function mapUiMessageStreamToEvents(stream) {
1820
+ function mapUiMessageStreamToEvents(stream, logger) {
1738
1821
  return new ReadableStream({
1739
1822
  async start(controller) {
1740
- for await (const raw of parseSse(stream)) {
1823
+ let eventCount = 0;
1824
+ for await (const raw of parseSse(stream, logger)) {
1741
1825
  const chunk = raw;
1742
1826
  switch (chunk.type) {
1743
1827
  case "start":
@@ -1745,27 +1829,39 @@ function mapUiMessageStreamToEvents(stream) {
1745
1829
  type: "start",
1746
1830
  intent: chunk.messageMetadata?.intent
1747
1831
  });
1832
+ eventCount += 1;
1748
1833
  break;
1749
1834
  case "text-delta":
1750
1835
  if (chunk.delta !== void 0) {
1751
1836
  controller.enqueue({ type: "text-delta", delta: chunk.delta });
1837
+ eventCount += 1;
1752
1838
  }
1753
1839
  break;
1754
1840
  case "finish":
1755
1841
  controller.enqueue({
1756
1842
  type: "finish",
1757
- intent: chunk.messageMetadata?.intent ?? "other",
1843
+ intent: chunk.messageMetadata?.intent ?? "default",
1758
1844
  sources: chunk.messageMetadata?.sources ?? []
1759
1845
  });
1846
+ eventCount += 1;
1760
1847
  break;
1761
1848
  case "error":
1849
+ logger?.warn(
1850
+ `[dropshipper] chat-stream-error errorText=${chunk.errorText}`
1851
+ );
1762
1852
  controller.enqueue({
1763
1853
  type: "error",
1764
1854
  errorText: chunk.errorText ?? "Error inesperado del asistente."
1765
1855
  });
1856
+ eventCount += 1;
1766
1857
  break;
1858
+ default:
1859
+ logger?.debug(
1860
+ `[dropshipper] chat-stream-unknown-frame type=${chunk.type}`
1861
+ );
1767
1862
  }
1768
1863
  }
1864
+ logger?.debug(`[dropshipper] chat-stream-completed events=${eventCount}`);
1769
1865
  controller.close();
1770
1866
  },
1771
1867
  cancel() {