@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 +40 -2
- package/dist/index.d.ts +40 -2
- package/dist/index.js +180 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +180 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/dropshipper.test.ts +92 -0
- package/src/dropshipper.ts +259 -0
- package/src/index.ts +1 -1
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,
|