@thorprovider/medusa-extended 1.11.7 → 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, 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 } 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
@@ -830,4 +830,100 @@ declare class DropshipperClient {
830
830
  getGeoCities(code: string): Promise<GetGeoCitiesResponse>;
831
831
  }
832
832
 
833
- 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, 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 } 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
@@ -830,4 +830,100 @@ declare class DropshipperClient {
830
830
  getGeoCities(code: string): Promise<GetGeoCitiesResponse>;
831
831
  }
832
832
 
833
- 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
 
@@ -1900,9 +1901,180 @@ function mapUiMessageStreamToEvents(stream, logger) {
1900
1901
  }
1901
1902
  });
1902
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
+ };
1903
2074
  // Annotate the CommonJS export names for ESM import in node:
1904
2075
  0 && (module.exports = {
1905
2076
  DropshipperClient,
1906
- MedusaAdminClient
2077
+ MedusaAdminClient,
2078
+ RecoveryClient
1907
2079
  });
1908
2080
  //# sourceMappingURL=index.js.map