@thorprovider/medusa-extended 1.11.6 → 1.11.8

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, 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';
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, QueryEntitiesInput, QueryResponse, 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, TokenVerifyResult, RecoveryConfirmResult } from '@thorprovider/types';
2
2
 
3
3
  /**
4
4
  * @fileoverview Medusa Multi-Tenant Admin Client
@@ -228,6 +228,28 @@ declare class DropshipperClient {
228
228
  private logger;
229
229
  constructor(config: DropshipperClientConfig);
230
230
  private request;
231
+ /**
232
+ * Resolve multiple entities in a single request.
233
+ *
234
+ * `POST /admin/thor/dropshipper/query`
235
+ *
236
+ * Entities are resolved in parallel (per layer) and errors are isolated per
237
+ * entity: `response.errors[key]` holds the per-entity error while the rest
238
+ * of `data` still resolves. `data[key]` is an array (list entities) or a
239
+ * single object (singular entities such as account, balance, me).
240
+ *
241
+ * @example
242
+ * ```typescript
243
+ * const { data } = await client.query({
244
+ * entities: [
245
+ * { entity: 'capabilities' },
246
+ * { entity: 'me' },
247
+ * { entity: 'account' },
248
+ * ],
249
+ * });
250
+ * ```
251
+ */
252
+ query(input: QueryEntitiesInput): Promise<QueryResponse>;
231
253
  /**
232
254
  * Fetch dashboard capabilities from the backend.
233
255
  *
@@ -808,4 +830,100 @@ declare class DropshipperClient {
808
830
  getGeoCities(code: string): Promise<GetGeoCitiesResponse>;
809
831
  }
810
832
 
811
- export { type ChatStreamEvent, DropshipperClient, type DropshipperClientConfig, MedusaAdminClient, type MedusaAdminClientConfig };
833
+ /**
834
+ * @fileoverview Recovery Client — Thor Commerce Extended
835
+ * @module @thorprovider/medusa-extended/recovery
836
+ *
837
+ * Public HTTP client for account-recovery flows (password reset + activation).
838
+ *
839
+ * Unlike `DropshipperClient`, this client does NOT require a JWT: it talks to
840
+ * public storefront endpoints so a user can recover access without being
841
+ * logged in. Backend URLs are owned here; the dashboard never builds them.
842
+ *
843
+ * Endpoints:
844
+ * - `POST /auth/user/emailpass/reset-password` (request reset, Medusa native)
845
+ * - `GET /store/dropshipper/auth/reset-password/verify` (verify reset token, no consume)
846
+ * - `POST /auth/user/emailpass/update` (confirm reset, consumes token)
847
+ * - `GET /store/dropshipper/applications/activate/verify`(verify activation token, no consume)
848
+ * - `POST /store/dropshipper/applications/activate` (confirm activation, consumes token)
849
+ *
850
+ * Confirm methods follow the two-phase contract: verify (no consume) first,
851
+ * then confirm (atomic consume). A re-verify after a failed confirm maps the
852
+ * TOCTOU state (used/expired/revoked) into `RecoveryConfirmResult.status`.
853
+ */
854
+
855
+ /**
856
+ * Configuration required to instantiate the recovery client.
857
+ */
858
+ interface RecoveryClientConfig {
859
+ /** Medusa backend base URL */
860
+ baseUrl: string;
861
+ /** Enable debug logging */
862
+ debug?: boolean;
863
+ }
864
+ /**
865
+ * HTTP client for account-recovery endpoints (public, no auth required).
866
+ *
867
+ * All methods throw `ProviderAPIError` on non-2xx responses except the
868
+ * confirm methods, which normalize failures into `RecoveryConfirmResult`.
869
+ *
870
+ * @example
871
+ * ```typescript
872
+ * const client = new RecoveryClient({
873
+ * baseUrl: process.env.MEDUSA_BACKEND_URL!,
874
+ * });
875
+ *
876
+ * await client.requestUserPasswordReset('juan@ejemplo.com');
877
+ * const result = await client.verifyUserPasswordResetToken(token);
878
+ * const confirm = await client.confirmUserPasswordReset(token, 'NuevaClave1');
879
+ * ```
880
+ */
881
+ declare class RecoveryClient {
882
+ private baseUrl;
883
+ private logger;
884
+ constructor(config: RecoveryClientConfig);
885
+ private request;
886
+ /**
887
+ * Decodes the `entity_id` (email) claim from a Medusa reset-password JWT.
888
+ *
889
+ * The JWT is unsigned-trust for this claim: the email is later sent to
890
+ * `POST /auth/user/emailpass/update`, where Medusa itself re-validates the
891
+ * token signature and payload before applying the change.
892
+ */
893
+ private decodeResetTokenEmail;
894
+ /**
895
+ * Solicita un email de reset de contraseña para el actor `user`
896
+ * (dropshippers). El backend responde de forma uniforme exista o no la
897
+ * cuenta (anti enumeración).
898
+ *
899
+ * `POST /auth/user/emailpass/reset-password`
900
+ */
901
+ requestUserPasswordReset(email: string): Promise<void>;
902
+ /**
903
+ * Verifica un token de reset de contraseña sin consumirlo. Devuelve el
904
+ * email enmascarado (p. ej. `j***@ejemplo.com`) solo cuando `status === 'valid'`.
905
+ *
906
+ * `GET /store/dropshipper/auth/reset-password/verify`
907
+ */
908
+ verifyUserPasswordResetToken(token: string): Promise<TokenVerifyResult>;
909
+ /**
910
+ * Confirma el reset: re-verifica el token (sin consumir), luego consume el
911
+ * token vía `POST /auth/user/emailpass/update`. El email se deriva del
912
+ * propio JWT. Nunca devuelve auto-login: al éxito, la UI redirige a /login.
913
+ */
914
+ confirmUserPasswordReset(token: string, password: string): Promise<RecoveryConfirmResult>;
915
+ /**
916
+ * Verifica un token de activación de cuenta dropshipper sin consumirlo.
917
+ *
918
+ * `GET /store/dropshipper/applications/activate/verify`
919
+ */
920
+ verifyActivationToken(token: string): Promise<TokenVerifyResult>;
921
+ /**
922
+ * Activa la cuenta: re-verifica el token (sin consumir), luego consume el
923
+ * token vía `POST /store/dropshipper/applications/activate` y establece la
924
+ * contraseña inicial. Al éxito, la UI redirige a /login sin auto-login.
925
+ */
926
+ activateAccount(token: string, password: string): Promise<RecoveryConfirmResult>;
927
+ }
928
+
929
+ export { type ChatStreamEvent, DropshipperClient, type DropshipperClientConfig, MedusaAdminClient, type MedusaAdminClientConfig, RecoveryClient, type RecoveryClientConfig };
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, 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';
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, QueryEntitiesInput, QueryResponse, 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, TokenVerifyResult, RecoveryConfirmResult } from '@thorprovider/types';
2
2
 
3
3
  /**
4
4
  * @fileoverview Medusa Multi-Tenant Admin Client
@@ -228,6 +228,28 @@ declare class DropshipperClient {
228
228
  private logger;
229
229
  constructor(config: DropshipperClientConfig);
230
230
  private request;
231
+ /**
232
+ * Resolve multiple entities in a single request.
233
+ *
234
+ * `POST /admin/thor/dropshipper/query`
235
+ *
236
+ * Entities are resolved in parallel (per layer) and errors are isolated per
237
+ * entity: `response.errors[key]` holds the per-entity error while the rest
238
+ * of `data` still resolves. `data[key]` is an array (list entities) or a
239
+ * single object (singular entities such as account, balance, me).
240
+ *
241
+ * @example
242
+ * ```typescript
243
+ * const { data } = await client.query({
244
+ * entities: [
245
+ * { entity: 'capabilities' },
246
+ * { entity: 'me' },
247
+ * { entity: 'account' },
248
+ * ],
249
+ * });
250
+ * ```
251
+ */
252
+ query(input: QueryEntitiesInput): Promise<QueryResponse>;
231
253
  /**
232
254
  * Fetch dashboard capabilities from the backend.
233
255
  *
@@ -808,4 +830,100 @@ declare class DropshipperClient {
808
830
  getGeoCities(code: string): Promise<GetGeoCitiesResponse>;
809
831
  }
810
832
 
811
- export { type ChatStreamEvent, DropshipperClient, type DropshipperClientConfig, MedusaAdminClient, type MedusaAdminClientConfig };
833
+ /**
834
+ * @fileoverview Recovery Client — Thor Commerce Extended
835
+ * @module @thorprovider/medusa-extended/recovery
836
+ *
837
+ * Public HTTP client for account-recovery flows (password reset + activation).
838
+ *
839
+ * Unlike `DropshipperClient`, this client does NOT require a JWT: it talks to
840
+ * public storefront endpoints so a user can recover access without being
841
+ * logged in. Backend URLs are owned here; the dashboard never builds them.
842
+ *
843
+ * Endpoints:
844
+ * - `POST /auth/user/emailpass/reset-password` (request reset, Medusa native)
845
+ * - `GET /store/dropshipper/auth/reset-password/verify` (verify reset token, no consume)
846
+ * - `POST /auth/user/emailpass/update` (confirm reset, consumes token)
847
+ * - `GET /store/dropshipper/applications/activate/verify`(verify activation token, no consume)
848
+ * - `POST /store/dropshipper/applications/activate` (confirm activation, consumes token)
849
+ *
850
+ * Confirm methods follow the two-phase contract: verify (no consume) first,
851
+ * then confirm (atomic consume). A re-verify after a failed confirm maps the
852
+ * TOCTOU state (used/expired/revoked) into `RecoveryConfirmResult.status`.
853
+ */
854
+
855
+ /**
856
+ * Configuration required to instantiate the recovery client.
857
+ */
858
+ interface RecoveryClientConfig {
859
+ /** Medusa backend base URL */
860
+ baseUrl: string;
861
+ /** Enable debug logging */
862
+ debug?: boolean;
863
+ }
864
+ /**
865
+ * HTTP client for account-recovery endpoints (public, no auth required).
866
+ *
867
+ * All methods throw `ProviderAPIError` on non-2xx responses except the
868
+ * confirm methods, which normalize failures into `RecoveryConfirmResult`.
869
+ *
870
+ * @example
871
+ * ```typescript
872
+ * const client = new RecoveryClient({
873
+ * baseUrl: process.env.MEDUSA_BACKEND_URL!,
874
+ * });
875
+ *
876
+ * await client.requestUserPasswordReset('juan@ejemplo.com');
877
+ * const result = await client.verifyUserPasswordResetToken(token);
878
+ * const confirm = await client.confirmUserPasswordReset(token, 'NuevaClave1');
879
+ * ```
880
+ */
881
+ declare class RecoveryClient {
882
+ private baseUrl;
883
+ private logger;
884
+ constructor(config: RecoveryClientConfig);
885
+ private request;
886
+ /**
887
+ * Decodes the `entity_id` (email) claim from a Medusa reset-password JWT.
888
+ *
889
+ * The JWT is unsigned-trust for this claim: the email is later sent to
890
+ * `POST /auth/user/emailpass/update`, where Medusa itself re-validates the
891
+ * token signature and payload before applying the change.
892
+ */
893
+ private decodeResetTokenEmail;
894
+ /**
895
+ * Solicita un email de reset de contraseña para el actor `user`
896
+ * (dropshippers). El backend responde de forma uniforme exista o no la
897
+ * cuenta (anti enumeración).
898
+ *
899
+ * `POST /auth/user/emailpass/reset-password`
900
+ */
901
+ requestUserPasswordReset(email: string): Promise<void>;
902
+ /**
903
+ * Verifica un token de reset de contraseña sin consumirlo. Devuelve el
904
+ * email enmascarado (p. ej. `j***@ejemplo.com`) solo cuando `status === 'valid'`.
905
+ *
906
+ * `GET /store/dropshipper/auth/reset-password/verify`
907
+ */
908
+ verifyUserPasswordResetToken(token: string): Promise<TokenVerifyResult>;
909
+ /**
910
+ * Confirma el reset: re-verifica el token (sin consumir), luego consume el
911
+ * token vía `POST /auth/user/emailpass/update`. El email se deriva del
912
+ * propio JWT. Nunca devuelve auto-login: al éxito, la UI redirige a /login.
913
+ */
914
+ confirmUserPasswordReset(token: string, password: string): Promise<RecoveryConfirmResult>;
915
+ /**
916
+ * Verifica un token de activación de cuenta dropshipper sin consumirlo.
917
+ *
918
+ * `GET /store/dropshipper/applications/activate/verify`
919
+ */
920
+ verifyActivationToken(token: string): Promise<TokenVerifyResult>;
921
+ /**
922
+ * Activa la cuenta: re-verifica el token (sin consumir), luego consume el
923
+ * token vía `POST /store/dropshipper/applications/activate` y establece la
924
+ * contraseña inicial. Al éxito, la UI redirige a /login sin auto-login.
925
+ */
926
+ activateAccount(token: string, password: string): Promise<RecoveryConfirmResult>;
927
+ }
928
+
929
+ export { type ChatStreamEvent, DropshipperClient, type DropshipperClientConfig, MedusaAdminClient, type MedusaAdminClientConfig, RecoveryClient, type RecoveryClientConfig };
package/dist/index.js CHANGED
@@ -21,7 +21,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var src_exports = {};
22
22
  __export(src_exports, {
23
23
  DropshipperClient: () => DropshipperClient,
24
- MedusaAdminClient: () => MedusaAdminClient
24
+ MedusaAdminClient: () => MedusaAdminClient,
25
+ RecoveryClient: () => RecoveryClient
25
26
  });
26
27
  module.exports = __toCommonJS(src_exports);
27
28
 
@@ -430,6 +431,37 @@ var DropshipperClient = class {
430
431
  return response.json();
431
432
  }
432
433
  // -------------------------------------------------------------------------
434
+ // Unified Query
435
+ // -------------------------------------------------------------------------
436
+ /**
437
+ * Resolve multiple entities in a single request.
438
+ *
439
+ * `POST /admin/thor/dropshipper/query`
440
+ *
441
+ * Entities are resolved in parallel (per layer) and errors are isolated per
442
+ * entity: `response.errors[key]` holds the per-entity error while the rest
443
+ * of `data` still resolves. `data[key]` is an array (list entities) or a
444
+ * single object (singular entities such as account, balance, me).
445
+ *
446
+ * @example
447
+ * ```typescript
448
+ * const { data } = await client.query({
449
+ * entities: [
450
+ * { entity: 'capabilities' },
451
+ * { entity: 'me' },
452
+ * { entity: 'account' },
453
+ * ],
454
+ * });
455
+ * ```
456
+ */
457
+ async query(input) {
458
+ return this.request(
459
+ "POST",
460
+ "/admin/thor/dropshipper/query",
461
+ input
462
+ );
463
+ }
464
+ // -------------------------------------------------------------------------
433
465
  // Capabilities
434
466
  // -------------------------------------------------------------------------
435
467
  /**
@@ -1869,9 +1901,180 @@ function mapUiMessageStreamToEvents(stream, logger) {
1869
1901
  }
1870
1902
  });
1871
1903
  }
1904
+
1905
+ // src/recovery.ts
1906
+ var import_adapters4 = require("@thorprovider/adapters");
1907
+ var RecoveryClient = class {
1908
+ baseUrl;
1909
+ logger;
1910
+ constructor(config) {
1911
+ this.baseUrl = config.baseUrl.replace(/\/$/, "");
1912
+ this.logger = (0, import_adapters4.createLogger)("RecoveryClient", config.debug);
1913
+ }
1914
+ // -------------------------------------------------------------------------
1915
+ // Private — HTTP helper
1916
+ // -------------------------------------------------------------------------
1917
+ async request(method, path, body) {
1918
+ const url = `${this.baseUrl}${path}`;
1919
+ this.logger.debug(`[recovery] ${method} ${path}`);
1920
+ const headers = {
1921
+ "Content-Type": "application/json"
1922
+ };
1923
+ const init = {
1924
+ method,
1925
+ headers,
1926
+ ...body !== void 0 ? { body: JSON.stringify(body) } : {}
1927
+ };
1928
+ let response;
1929
+ try {
1930
+ response = await fetchBackendWithResilience(url, init);
1931
+ } catch (networkError) {
1932
+ throw new import_adapters4.ProviderAPIError(
1933
+ `[recovery] Network error on ${method} ${path}: ${networkError.message}`,
1934
+ "NETWORK_ERROR",
1935
+ networkError
1936
+ );
1937
+ }
1938
+ if (!response.ok) {
1939
+ let message = `HTTP ${response.status}`;
1940
+ try {
1941
+ const json = await response.json();
1942
+ message = json?.message ?? message;
1943
+ } catch {
1944
+ }
1945
+ throw new import_adapters4.ProviderAPIError(
1946
+ `[recovery] ${method} ${path} failed: ${message}`,
1947
+ `RECOVERY_API_${response.status}`,
1948
+ response.status
1949
+ );
1950
+ }
1951
+ return response.json();
1952
+ }
1953
+ // -------------------------------------------------------------------------
1954
+ // Private — reset token helpers
1955
+ // -------------------------------------------------------------------------
1956
+ /**
1957
+ * Decodes the `entity_id` (email) claim from a Medusa reset-password JWT.
1958
+ *
1959
+ * The JWT is unsigned-trust for this claim: the email is later sent to
1960
+ * `POST /auth/user/emailpass/update`, where Medusa itself re-validates the
1961
+ * token signature and payload before applying the change.
1962
+ */
1963
+ decodeResetTokenEmail(token) {
1964
+ const parts = token.split(".");
1965
+ if (parts.length !== 3) return null;
1966
+ try {
1967
+ const payload = JSON.parse(Buffer.from(parts[1], "base64url").toString("utf8"));
1968
+ return typeof payload.entity_id === "string" && payload.entity_id.length > 0 ? payload.entity_id : null;
1969
+ } catch {
1970
+ return null;
1971
+ }
1972
+ }
1973
+ // -------------------------------------------------------------------------
1974
+ // Password reset
1975
+ // -------------------------------------------------------------------------
1976
+ /**
1977
+ * Solicita un email de reset de contraseña para el actor `user`
1978
+ * (dropshippers). El backend responde de forma uniforme exista o no la
1979
+ * cuenta (anti enumeración).
1980
+ *
1981
+ * `POST /auth/user/emailpass/reset-password`
1982
+ */
1983
+ async requestUserPasswordReset(email) {
1984
+ await this.request("POST", "/auth/user/emailpass/reset-password", {
1985
+ identifier: email
1986
+ });
1987
+ }
1988
+ /**
1989
+ * Verifica un token de reset de contraseña sin consumirlo. Devuelve el
1990
+ * email enmascarado (p. ej. `j***@ejemplo.com`) solo cuando `status === 'valid'`.
1991
+ *
1992
+ * `GET /store/dropshipper/auth/reset-password/verify`
1993
+ */
1994
+ async verifyUserPasswordResetToken(token) {
1995
+ return this.request("GET", `/store/dropshipper/auth/reset-password/verify?token=${encodeURIComponent(token)}`);
1996
+ }
1997
+ /**
1998
+ * Confirma el reset: re-verifica el token (sin consumir), luego consume el
1999
+ * token vía `POST /auth/user/emailpass/update`. El email se deriva del
2000
+ * propio JWT. Nunca devuelve auto-login: al éxito, la UI redirige a /login.
2001
+ */
2002
+ async confirmUserPasswordReset(token, password) {
2003
+ const verify = await this.verifyUserPasswordResetToken(token);
2004
+ if (verify.status !== "valid") {
2005
+ return { ok: false, status: verify.status };
2006
+ }
2007
+ const email = this.decodeResetTokenEmail(token);
2008
+ if (!email) {
2009
+ return { ok: false, status: "invalid" };
2010
+ }
2011
+ try {
2012
+ const headers = {
2013
+ Authorization: `Bearer ${token}`,
2014
+ "Content-Type": "application/json"
2015
+ };
2016
+ const response = await fetchBackendWithResilience(`${this.baseUrl}/auth/user/emailpass/update`, {
2017
+ method: "POST",
2018
+ headers,
2019
+ body: JSON.stringify({ email, password })
2020
+ });
2021
+ if (!response.ok) {
2022
+ throw new import_adapters4.ProviderAPIError(
2023
+ `[recovery] POST /auth/user/emailpass/update failed: HTTP ${response.status}`,
2024
+ "RECOVERY_API_" + response.status,
2025
+ response.status
2026
+ );
2027
+ }
2028
+ return { ok: true };
2029
+ } catch (error) {
2030
+ this.logger.warn("[recovery] confirmUserPasswordReset failed, re-verifying", error);
2031
+ try {
2032
+ const recheck = await this.verifyUserPasswordResetToken(token);
2033
+ return { ok: false, status: recheck.status };
2034
+ } catch {
2035
+ return { ok: false, status: "invalid" };
2036
+ }
2037
+ }
2038
+ }
2039
+ // -------------------------------------------------------------------------
2040
+ // Account activation
2041
+ // -------------------------------------------------------------------------
2042
+ /**
2043
+ * Verifica un token de activación de cuenta dropshipper sin consumirlo.
2044
+ *
2045
+ * `GET /store/dropshipper/applications/activate/verify`
2046
+ */
2047
+ async verifyActivationToken(token) {
2048
+ return this.request("GET", `/store/dropshipper/applications/activate/verify?token=${encodeURIComponent(token)}`);
2049
+ }
2050
+ /**
2051
+ * Activa la cuenta: re-verifica el token (sin consumir), luego consume el
2052
+ * token vía `POST /store/dropshipper/applications/activate` y establece la
2053
+ * contraseña inicial. Al éxito, la UI redirige a /login sin auto-login.
2054
+ */
2055
+ async activateAccount(token, password) {
2056
+ const verify = await this.verifyActivationToken(token);
2057
+ if (verify.status !== "valid") {
2058
+ return { ok: false, status: verify.status };
2059
+ }
2060
+ try {
2061
+ await this.request("POST", "/store/dropshipper/applications/activate", { token, password });
2062
+ return { ok: true };
2063
+ } catch (error) {
2064
+ this.logger.warn("[recovery] activateAccount failed, re-verifying", error);
2065
+ try {
2066
+ const recheck = await this.verifyActivationToken(token);
2067
+ return { ok: false, status: recheck.status };
2068
+ } catch {
2069
+ return { ok: false, status: "invalid" };
2070
+ }
2071
+ }
2072
+ }
2073
+ };
1872
2074
  // Annotate the CommonJS export names for ESM import in node:
1873
2075
  0 && (module.exports = {
1874
2076
  DropshipperClient,
1875
- MedusaAdminClient
2077
+ MedusaAdminClient,
2078
+ RecoveryClient
1876
2079
  });
1877
2080
  //# sourceMappingURL=index.js.map