@thorprovider/medusa-extended 1.11.2 → 1.11.5

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, 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, 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
@@ -163,6 +163,32 @@ declare class MedusaAdminClient {
163
163
  * Endpoint reference: `dropshipping-api-contract.md`
164
164
  */
165
165
 
166
+ /**
167
+ * One event from the streamed AI assistant chat (`chatAssistantStream`).
168
+ *
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
172
+ * consumers can render incremental text and update the "thinking" label as the
173
+ * model progresses without knowing the transport details.
174
+ */
175
+ type ChatStreamEvent = {
176
+ type: 'start';
177
+ /** Semantic intent as soon as the backend resolves it. */
178
+ intent?: ChatIntent;
179
+ } | {
180
+ type: 'text-delta';
181
+ /** A chunk of the assistant's answer, appended to the bubble. */
182
+ delta: string;
183
+ } | {
184
+ type: 'finish';
185
+ intent: ChatIntent;
186
+ /** Products referenced by the answer (empty for greetings/other). */
187
+ sources: ChatSource[];
188
+ } | {
189
+ type: 'error';
190
+ errorText: string;
191
+ };
166
192
  /**
167
193
  * Configuration required to instantiate the dropshipper client.
168
194
  */
@@ -230,6 +256,18 @@ declare class DropshipperClient {
230
256
  * ```
231
257
  */
232
258
  chatAssistant(body: ChatRequest): Promise<ChatResponse>;
259
+ /**
260
+ * Stream the AI assistant's reply.
261
+ *
262
+ * Unlike `chatAssistant`, this surfaces the model's progress: the backend
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).
265
+ * The response is normalized into a single `ReadableStream<ChatStreamEvent>`
266
+ * so callers can show a live "thinking" label and render text incrementally.
267
+ *
268
+ * `POST /admin/thor/dropshipper/ai/chat`
269
+ */
270
+ chatAssistantStream(body: ChatRequest): Promise<ReadableStream<ChatStreamEvent>>;
233
271
  /**
234
272
  * List feed notifications for the authenticated dropshipper.
235
273
  *
@@ -753,4 +791,4 @@ declare class DropshipperClient {
753
791
  getGeoCities(code: string): Promise<GetGeoCitiesResponse>;
754
792
  }
755
793
 
756
- export { DropshipperClient, type DropshipperClientConfig, MedusaAdminClient, type MedusaAdminClientConfig };
794
+ export { type ChatStreamEvent, DropshipperClient, type DropshipperClientConfig, MedusaAdminClient, type MedusaAdminClientConfig };
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, 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, 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
@@ -163,6 +163,32 @@ declare class MedusaAdminClient {
163
163
  * Endpoint reference: `dropshipping-api-contract.md`
164
164
  */
165
165
 
166
+ /**
167
+ * One event from the streamed AI assistant chat (`chatAssistantStream`).
168
+ *
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
172
+ * consumers can render incremental text and update the "thinking" label as the
173
+ * model progresses without knowing the transport details.
174
+ */
175
+ type ChatStreamEvent = {
176
+ type: 'start';
177
+ /** Semantic intent as soon as the backend resolves it. */
178
+ intent?: ChatIntent;
179
+ } | {
180
+ type: 'text-delta';
181
+ /** A chunk of the assistant's answer, appended to the bubble. */
182
+ delta: string;
183
+ } | {
184
+ type: 'finish';
185
+ intent: ChatIntent;
186
+ /** Products referenced by the answer (empty for greetings/other). */
187
+ sources: ChatSource[];
188
+ } | {
189
+ type: 'error';
190
+ errorText: string;
191
+ };
166
192
  /**
167
193
  * Configuration required to instantiate the dropshipper client.
168
194
  */
@@ -230,6 +256,18 @@ declare class DropshipperClient {
230
256
  * ```
231
257
  */
232
258
  chatAssistant(body: ChatRequest): Promise<ChatResponse>;
259
+ /**
260
+ * Stream the AI assistant's reply.
261
+ *
262
+ * Unlike `chatAssistant`, this surfaces the model's progress: the backend
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).
265
+ * The response is normalized into a single `ReadableStream<ChatStreamEvent>`
266
+ * so callers can show a live "thinking" label and render text incrementally.
267
+ *
268
+ * `POST /admin/thor/dropshipper/ai/chat`
269
+ */
270
+ chatAssistantStream(body: ChatRequest): Promise<ReadableStream<ChatStreamEvent>>;
233
271
  /**
234
272
  * List feed notifications for the authenticated dropshipper.
235
273
  *
@@ -753,4 +791,4 @@ declare class DropshipperClient {
753
791
  getGeoCities(code: string): Promise<GetGeoCitiesResponse>;
754
792
  }
755
793
 
756
- export { DropshipperClient, type DropshipperClientConfig, MedusaAdminClient, type MedusaAdminClientConfig };
794
+ export { type ChatStreamEvent, DropshipperClient, type DropshipperClientConfig, MedusaAdminClient, type MedusaAdminClientConfig };
package/dist/index.js CHANGED
@@ -476,6 +476,89 @@ var DropshipperClient = class {
476
476
  body
477
477
  );
478
478
  }
479
+ /**
480
+ * Stream the AI assistant's reply.
481
+ *
482
+ * Unlike `chatAssistant`, this surfaces the model's progress: the backend
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).
485
+ * The response is normalized into a single `ReadableStream<ChatStreamEvent>`
486
+ * so callers can show a live "thinking" label and render text incrementally.
487
+ *
488
+ * `POST /admin/thor/dropshipper/ai/chat`
489
+ */
490
+ async chatAssistantStream(body) {
491
+ const url = `${this.baseUrl}/admin/thor/dropshipper/ai/chat`;
492
+ this.logger.debug("[dropshipper] POST /admin/thor/dropshipper/ai/chat (stream)");
493
+ const init = {
494
+ method: "POST",
495
+ headers: {
496
+ Authorization: `Bearer ${this.token}`,
497
+ "Content-Type": "application/json",
498
+ Accept: "text/event-stream"
499
+ },
500
+ body: JSON.stringify(body)
501
+ };
502
+ let response;
503
+ try {
504
+ response = await fetchBackendWithResilience(url, init, {
505
+ timeoutMs: 6e4,
506
+ maxRetries: 1
507
+ });
508
+ } catch (networkError) {
509
+ throw new import_adapters3.ProviderAPIError(
510
+ `[dropshipper] Network error on POST /admin/thor/dropshipper/ai/chat: ${networkError.message}`,
511
+ "NETWORK_ERROR",
512
+ networkError
513
+ );
514
+ }
515
+ if (!response.ok) {
516
+ let message = `HTTP ${response.status}`;
517
+ let errorCode;
518
+ let requestId;
519
+ let details;
520
+ try {
521
+ const json = await response.json();
522
+ message = json?.message ?? message;
523
+ errorCode = json?.error_code ?? json?.type;
524
+ requestId = json?.request_id;
525
+ details = json?.details;
526
+ } catch {
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
+ );
531
+ throw new import_adapters3.ProviderAPIError(
532
+ `[dropshipper] POST /admin/thor/dropshipper/ai/chat failed: ${message}`,
533
+ `DROPSHIPPER_API_${response.status}`,
534
+ response.status,
535
+ {
536
+ message,
537
+ status: response.status,
538
+ errorCode,
539
+ requestId,
540
+ details
541
+ }
542
+ );
543
+ }
544
+ const contentType = response.headers.get("content-type") ?? "";
545
+ if (contentType.includes("text/event-stream") && response.body) {
546
+ return mapUiMessageStreamToEvents(response.body, this.logger);
547
+ }
548
+ const data = await response.json();
549
+ return new ReadableStream({
550
+ start(controller) {
551
+ controller.enqueue({ type: "start", intent: data.intent });
552
+ controller.enqueue({ type: "text-delta", delta: data.answer });
553
+ controller.enqueue({
554
+ type: "finish",
555
+ intent: data.intent,
556
+ sources: data.sources ?? []
557
+ });
558
+ controller.close();
559
+ }
560
+ });
561
+ }
479
562
  // -------------------------------------------------------------------------
480
563
  // Notifications
481
564
  // -------------------------------------------------------------------------
@@ -1634,6 +1717,103 @@ var DropshipperClient = class {
1634
1717
  );
1635
1718
  }
1636
1719
  };
1720
+ async function* parseSse(stream, logger) {
1721
+ const reader = stream.getReader();
1722
+ const decoder = new TextDecoder();
1723
+ let buffer = "";
1724
+ let frameIndex = 0;
1725
+ try {
1726
+ while (true) {
1727
+ const { done, value } = await reader.read();
1728
+ if (done) break;
1729
+ buffer += decoder.decode(value, { stream: true });
1730
+ const lines = buffer.split(/\r?\n/);
1731
+ buffer = lines.pop() ?? "";
1732
+ for (const line of lines) {
1733
+ const trimmed = line.trim();
1734
+ if (!trimmed.startsWith("data:")) continue;
1735
+ const payload = trimmed.slice(5).trim();
1736
+ if (!payload || payload === "[DONE]") continue;
1737
+ frameIndex += 1;
1738
+ try {
1739
+ yield JSON.parse(payload);
1740
+ } catch (err) {
1741
+ logger?.warn(
1742
+ `[dropshipper] sse-malformed-frame frame=${frameIndex} payload=${payload.slice(0, 200)}`
1743
+ );
1744
+ }
1745
+ }
1746
+ }
1747
+ const tail = buffer.trim();
1748
+ if (tail.startsWith("data:")) {
1749
+ const payload = tail.slice(5).trim();
1750
+ if (payload && payload !== "[DONE]") {
1751
+ frameIndex += 1;
1752
+ try {
1753
+ yield JSON.parse(payload);
1754
+ } catch (err) {
1755
+ logger?.warn(
1756
+ `[dropshipper] sse-malformed-frame frame=${frameIndex} payload=${payload.slice(0, 200)}`
1757
+ );
1758
+ }
1759
+ }
1760
+ }
1761
+ } finally {
1762
+ reader.releaseLock();
1763
+ }
1764
+ }
1765
+ function mapUiMessageStreamToEvents(stream, logger) {
1766
+ return new ReadableStream({
1767
+ async start(controller) {
1768
+ let eventCount = 0;
1769
+ for await (const raw of parseSse(stream, logger)) {
1770
+ const chunk = raw;
1771
+ switch (chunk.type) {
1772
+ case "start":
1773
+ controller.enqueue({
1774
+ type: "start",
1775
+ intent: chunk.messageMetadata?.intent
1776
+ });
1777
+ eventCount += 1;
1778
+ break;
1779
+ case "text-delta":
1780
+ if (chunk.delta !== void 0) {
1781
+ controller.enqueue({ type: "text-delta", delta: chunk.delta });
1782
+ eventCount += 1;
1783
+ }
1784
+ break;
1785
+ case "finish":
1786
+ controller.enqueue({
1787
+ type: "finish",
1788
+ intent: chunk.messageMetadata?.intent ?? "other",
1789
+ sources: chunk.messageMetadata?.sources ?? []
1790
+ });
1791
+ eventCount += 1;
1792
+ break;
1793
+ case "error":
1794
+ logger?.warn(
1795
+ `[dropshipper] chat-stream-error errorText=${chunk.errorText}`
1796
+ );
1797
+ controller.enqueue({
1798
+ type: "error",
1799
+ errorText: chunk.errorText ?? "Error inesperado del asistente."
1800
+ });
1801
+ eventCount += 1;
1802
+ break;
1803
+ default:
1804
+ logger?.debug(
1805
+ `[dropshipper] chat-stream-unknown-frame type=${chunk.type}`
1806
+ );
1807
+ }
1808
+ }
1809
+ logger?.debug(`[dropshipper] chat-stream-completed events=${eventCount}`);
1810
+ controller.close();
1811
+ },
1812
+ cancel() {
1813
+ stream.cancel?.();
1814
+ }
1815
+ });
1816
+ }
1637
1817
  // Annotate the CommonJS export names for ESM import in node:
1638
1818
  0 && (module.exports = {
1639
1819
  DropshipperClient,