@thorprovider/medusa-extended 1.11.8 → 1.12.0
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 +29 -4
- package/dist/index.d.ts +29 -4
- package/dist/index.js +73 -14
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +73 -14
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/dropshipper.live-smoke.test.ts +127 -73
- package/src/dropshipper.test.ts +90 -36
- package/src/dropshipper.ts +11 -14
- package/src/recovery.ts +85 -4
- package/src/request-resilience.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, 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,
|
|
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, GetDropshipperShippingOptionsBody, 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, SubmitApplicationBody, SubmitApplicationResult } from '@thorprovider/types';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @fileoverview Medusa Multi-Tenant Admin Client
|
|
@@ -395,11 +395,11 @@ declare class DropshipperClient {
|
|
|
395
395
|
*/
|
|
396
396
|
getOrder(orderId: string): Promise<GetDropshipperOrderDetailResponse>;
|
|
397
397
|
/**
|
|
398
|
-
* List shipping options for a manual dropshipper order.
|
|
398
|
+
* List shipping groups and their valid options for a manual dropshipper order.
|
|
399
399
|
*
|
|
400
|
-
* `
|
|
400
|
+
* `POST /admin/thor/dropshipper/orders/shipping-options`
|
|
401
401
|
*/
|
|
402
|
-
getOrderShippingOptions(
|
|
402
|
+
getOrderShippingOptions(body: GetDropshipperShippingOptionsBody): Promise<GetDropshipperShippingOptionsResponse>;
|
|
403
403
|
/**
|
|
404
404
|
* Manually create an order on behalf of a customer.
|
|
405
405
|
*
|
|
@@ -846,10 +846,16 @@ declare class DropshipperClient {
|
|
|
846
846
|
* - `POST /auth/user/emailpass/update` (confirm reset, consumes token)
|
|
847
847
|
* - `GET /store/dropshipper/applications/activate/verify`(verify activation token, no consume)
|
|
848
848
|
* - `POST /store/dropshipper/applications/activate` (confirm activation, consumes token)
|
|
849
|
+
* - `POST /public/dropshipper/applications` (submit application, no auth)
|
|
849
850
|
*
|
|
850
851
|
* Confirm methods follow the two-phase contract: verify (no consume) first,
|
|
851
852
|
* then confirm (atomic consume). A re-verify after a failed confirm maps the
|
|
852
853
|
* TOCTOU state (used/expired/revoked) into `RecoveryConfirmResult.status`.
|
|
854
|
+
*
|
|
855
|
+
* `submitApplication` returns a discriminated `SubmitApplicationResult` instead
|
|
856
|
+
* of throwing on 400/409/429 so the caller can surface the backend's structured
|
|
857
|
+
* payload (existing application on 409, retry window on 429). Network/5xx
|
|
858
|
+
* errors are re-thrown as `ProviderAPIError`.
|
|
853
859
|
*/
|
|
854
860
|
|
|
855
861
|
/**
|
|
@@ -924,6 +930,25 @@ declare class RecoveryClient {
|
|
|
924
930
|
* contraseña inicial. Al éxito, la UI redirige a /login sin auto-login.
|
|
925
931
|
*/
|
|
926
932
|
activateAccount(token: string, password: string): Promise<RecoveryConfirmResult>;
|
|
933
|
+
/**
|
|
934
|
+
* Envía una solicitud de acceso dropshipper al endpoint público.
|
|
935
|
+
*
|
|
936
|
+
* `POST /public/dropshipper/applications`
|
|
937
|
+
*
|
|
938
|
+
* No requiere autenticación. Devuelve un resultado discriminado:
|
|
939
|
+
* - `{ ok: true }` → 201, solicitud creada (`application.number`).
|
|
940
|
+
* - `{ ok: false, reason: 'conflict' }` → 409, email ya registrado; la
|
|
941
|
+
* solicitud existente incluye `status_label`/`reason` para la UI.
|
|
942
|
+
* - `{ ok: false, reason: 'rate_limited' }` → 429, se respetó el límite del
|
|
943
|
+
* backend; `retryAfterSeconds` indica cuándo reintentar.
|
|
944
|
+
* - `{ ok: false, reason: 'invalid_data' }` → 400, validación del backend.
|
|
945
|
+
*
|
|
946
|
+
* Los errores de red/5xx se re-lanzan como `ProviderAPIError` para que el
|
|
947
|
+
* llamador los categorice (p. ej. con `parseError`). El 429 no se reintenta
|
|
948
|
+
* (`retryableStatusCodes` sin 429) para que el caller reciba de inmediato el
|
|
949
|
+
* `retry_after_seconds` del backend y pueda bloquear el envío.
|
|
950
|
+
*/
|
|
951
|
+
submitApplication(body: SubmitApplicationBody): Promise<SubmitApplicationResult>;
|
|
927
952
|
}
|
|
928
953
|
|
|
929
954
|
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,
|
|
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, GetDropshipperShippingOptionsBody, 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, SubmitApplicationBody, SubmitApplicationResult } from '@thorprovider/types';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @fileoverview Medusa Multi-Tenant Admin Client
|
|
@@ -395,11 +395,11 @@ declare class DropshipperClient {
|
|
|
395
395
|
*/
|
|
396
396
|
getOrder(orderId: string): Promise<GetDropshipperOrderDetailResponse>;
|
|
397
397
|
/**
|
|
398
|
-
* List shipping options for a manual dropshipper order.
|
|
398
|
+
* List shipping groups and their valid options for a manual dropshipper order.
|
|
399
399
|
*
|
|
400
|
-
* `
|
|
400
|
+
* `POST /admin/thor/dropshipper/orders/shipping-options`
|
|
401
401
|
*/
|
|
402
|
-
getOrderShippingOptions(
|
|
402
|
+
getOrderShippingOptions(body: GetDropshipperShippingOptionsBody): Promise<GetDropshipperShippingOptionsResponse>;
|
|
403
403
|
/**
|
|
404
404
|
* Manually create an order on behalf of a customer.
|
|
405
405
|
*
|
|
@@ -846,10 +846,16 @@ declare class DropshipperClient {
|
|
|
846
846
|
* - `POST /auth/user/emailpass/update` (confirm reset, consumes token)
|
|
847
847
|
* - `GET /store/dropshipper/applications/activate/verify`(verify activation token, no consume)
|
|
848
848
|
* - `POST /store/dropshipper/applications/activate` (confirm activation, consumes token)
|
|
849
|
+
* - `POST /public/dropshipper/applications` (submit application, no auth)
|
|
849
850
|
*
|
|
850
851
|
* Confirm methods follow the two-phase contract: verify (no consume) first,
|
|
851
852
|
* then confirm (atomic consume). A re-verify after a failed confirm maps the
|
|
852
853
|
* TOCTOU state (used/expired/revoked) into `RecoveryConfirmResult.status`.
|
|
854
|
+
*
|
|
855
|
+
* `submitApplication` returns a discriminated `SubmitApplicationResult` instead
|
|
856
|
+
* of throwing on 400/409/429 so the caller can surface the backend's structured
|
|
857
|
+
* payload (existing application on 409, retry window on 429). Network/5xx
|
|
858
|
+
* errors are re-thrown as `ProviderAPIError`.
|
|
853
859
|
*/
|
|
854
860
|
|
|
855
861
|
/**
|
|
@@ -924,6 +930,25 @@ declare class RecoveryClient {
|
|
|
924
930
|
* contraseña inicial. Al éxito, la UI redirige a /login sin auto-login.
|
|
925
931
|
*/
|
|
926
932
|
activateAccount(token: string, password: string): Promise<RecoveryConfirmResult>;
|
|
933
|
+
/**
|
|
934
|
+
* Envía una solicitud de acceso dropshipper al endpoint público.
|
|
935
|
+
*
|
|
936
|
+
* `POST /public/dropshipper/applications`
|
|
937
|
+
*
|
|
938
|
+
* No requiere autenticación. Devuelve un resultado discriminado:
|
|
939
|
+
* - `{ ok: true }` → 201, solicitud creada (`application.number`).
|
|
940
|
+
* - `{ ok: false, reason: 'conflict' }` → 409, email ya registrado; la
|
|
941
|
+
* solicitud existente incluye `status_label`/`reason` para la UI.
|
|
942
|
+
* - `{ ok: false, reason: 'rate_limited' }` → 429, se respetó el límite del
|
|
943
|
+
* backend; `retryAfterSeconds` indica cuándo reintentar.
|
|
944
|
+
* - `{ ok: false, reason: 'invalid_data' }` → 400, validación del backend.
|
|
945
|
+
*
|
|
946
|
+
* Los errores de red/5xx se re-lanzan como `ProviderAPIError` para que el
|
|
947
|
+
* llamador los categorice (p. ej. con `parseError`). El 429 no se reintenta
|
|
948
|
+
* (`retryableStatusCodes` sin 429) para que el caller reciba de inmediato el
|
|
949
|
+
* `retry_after_seconds` del backend y pueda bloquear el envío.
|
|
950
|
+
*/
|
|
951
|
+
submitApplication(body: SubmitApplicationBody): Promise<SubmitApplicationResult>;
|
|
927
952
|
}
|
|
928
953
|
|
|
929
954
|
export { type ChatStreamEvent, DropshipperClient, type DropshipperClientConfig, MedusaAdminClient, type MedusaAdminClientConfig, RecoveryClient, type RecoveryClientConfig };
|
package/dist/index.js
CHANGED
|
@@ -845,20 +845,18 @@ var DropshipperClient = class {
|
|
|
845
845
|
);
|
|
846
846
|
}
|
|
847
847
|
/**
|
|
848
|
-
* List shipping options for a manual dropshipper order.
|
|
848
|
+
* List shipping groups and their valid options for a manual dropshipper order.
|
|
849
849
|
*
|
|
850
|
-
* `
|
|
850
|
+
* `POST /admin/thor/dropshipper/orders/shipping-options`
|
|
851
851
|
*/
|
|
852
|
-
async getOrderShippingOptions(
|
|
853
|
-
const qs = new URLSearchParams({
|
|
854
|
-
currency_code: params.currency_code.toLowerCase(),
|
|
855
|
-
...params.country_code ? { country_code: params.country_code.toLowerCase() } : {},
|
|
856
|
-
...params.province ? { province: params.province } : {},
|
|
857
|
-
...params.city ? { city: params.city } : {}
|
|
858
|
-
});
|
|
852
|
+
async getOrderShippingOptions(body) {
|
|
859
853
|
return this.request(
|
|
860
|
-
"
|
|
861
|
-
|
|
854
|
+
"POST",
|
|
855
|
+
"/admin/thor/dropshipper/orders/shipping-options",
|
|
856
|
+
{
|
|
857
|
+
...body,
|
|
858
|
+
currency_code: body.currency_code.toLowerCase()
|
|
859
|
+
}
|
|
862
860
|
);
|
|
863
861
|
}
|
|
864
862
|
/**
|
|
@@ -1914,7 +1912,7 @@ var RecoveryClient = class {
|
|
|
1914
1912
|
// -------------------------------------------------------------------------
|
|
1915
1913
|
// Private — HTTP helper
|
|
1916
1914
|
// -------------------------------------------------------------------------
|
|
1917
|
-
async request(method, path, body) {
|
|
1915
|
+
async request(method, path, body, retryConfig) {
|
|
1918
1916
|
const url = `${this.baseUrl}${path}`;
|
|
1919
1917
|
this.logger.debug(`[recovery] ${method} ${path}`);
|
|
1920
1918
|
const headers = {
|
|
@@ -1927,7 +1925,7 @@ var RecoveryClient = class {
|
|
|
1927
1925
|
};
|
|
1928
1926
|
let response;
|
|
1929
1927
|
try {
|
|
1930
|
-
response = await fetchBackendWithResilience(url, init);
|
|
1928
|
+
response = await fetchBackendWithResilience(url, init, retryConfig);
|
|
1931
1929
|
} catch (networkError) {
|
|
1932
1930
|
throw new import_adapters4.ProviderAPIError(
|
|
1933
1931
|
`[recovery] Network error on ${method} ${path}: ${networkError.message}`,
|
|
@@ -1937,15 +1935,18 @@ var RecoveryClient = class {
|
|
|
1937
1935
|
}
|
|
1938
1936
|
if (!response.ok) {
|
|
1939
1937
|
let message = `HTTP ${response.status}`;
|
|
1938
|
+
let details;
|
|
1940
1939
|
try {
|
|
1941
1940
|
const json = await response.json();
|
|
1942
1941
|
message = json?.message ?? message;
|
|
1942
|
+
details = json && typeof json === "object" ? json : void 0;
|
|
1943
1943
|
} catch {
|
|
1944
1944
|
}
|
|
1945
1945
|
throw new import_adapters4.ProviderAPIError(
|
|
1946
1946
|
`[recovery] ${method} ${path} failed: ${message}`,
|
|
1947
1947
|
`RECOVERY_API_${response.status}`,
|
|
1948
|
-
response.status
|
|
1948
|
+
response.status,
|
|
1949
|
+
details
|
|
1949
1950
|
);
|
|
1950
1951
|
}
|
|
1951
1952
|
return response.json();
|
|
@@ -2070,6 +2071,64 @@ var RecoveryClient = class {
|
|
|
2070
2071
|
}
|
|
2071
2072
|
}
|
|
2072
2073
|
}
|
|
2074
|
+
// -------------------------------------------------------------------------
|
|
2075
|
+
// Dropshipper application submission
|
|
2076
|
+
// -------------------------------------------------------------------------
|
|
2077
|
+
/**
|
|
2078
|
+
* Envía una solicitud de acceso dropshipper al endpoint público.
|
|
2079
|
+
*
|
|
2080
|
+
* `POST /public/dropshipper/applications`
|
|
2081
|
+
*
|
|
2082
|
+
* No requiere autenticación. Devuelve un resultado discriminado:
|
|
2083
|
+
* - `{ ok: true }` → 201, solicitud creada (`application.number`).
|
|
2084
|
+
* - `{ ok: false, reason: 'conflict' }` → 409, email ya registrado; la
|
|
2085
|
+
* solicitud existente incluye `status_label`/`reason` para la UI.
|
|
2086
|
+
* - `{ ok: false, reason: 'rate_limited' }` → 429, se respetó el límite del
|
|
2087
|
+
* backend; `retryAfterSeconds` indica cuándo reintentar.
|
|
2088
|
+
* - `{ ok: false, reason: 'invalid_data' }` → 400, validación del backend.
|
|
2089
|
+
*
|
|
2090
|
+
* Los errores de red/5xx se re-lanzan como `ProviderAPIError` para que el
|
|
2091
|
+
* llamador los categorice (p. ej. con `parseError`). El 429 no se reintenta
|
|
2092
|
+
* (`retryableStatusCodes` sin 429) para que el caller reciba de inmediato el
|
|
2093
|
+
* `retry_after_seconds` del backend y pueda bloquear el envío.
|
|
2094
|
+
*/
|
|
2095
|
+
async submitApplication(body) {
|
|
2096
|
+
try {
|
|
2097
|
+
const response = await this.request(
|
|
2098
|
+
"POST",
|
|
2099
|
+
"/public/dropshipper/applications",
|
|
2100
|
+
body,
|
|
2101
|
+
{ retryableStatusCodes: [408, 500, 502, 503, 504] }
|
|
2102
|
+
);
|
|
2103
|
+
return { ok: true, application: response.application };
|
|
2104
|
+
} catch (error) {
|
|
2105
|
+
if (error instanceof import_adapters4.ProviderAPIError) {
|
|
2106
|
+
const details = error.details ?? {};
|
|
2107
|
+
if (error.status === 409 && details.application) {
|
|
2108
|
+
return {
|
|
2109
|
+
ok: false,
|
|
2110
|
+
reason: "conflict",
|
|
2111
|
+
application: details.application
|
|
2112
|
+
};
|
|
2113
|
+
}
|
|
2114
|
+
if (error.status === 429 && typeof details.retry_after_seconds === "number") {
|
|
2115
|
+
return {
|
|
2116
|
+
ok: false,
|
|
2117
|
+
reason: "rate_limited",
|
|
2118
|
+
retryAfterSeconds: details.retry_after_seconds
|
|
2119
|
+
};
|
|
2120
|
+
}
|
|
2121
|
+
if (error.status === 400) {
|
|
2122
|
+
return {
|
|
2123
|
+
ok: false,
|
|
2124
|
+
reason: "invalid_data",
|
|
2125
|
+
fields: details.fields
|
|
2126
|
+
};
|
|
2127
|
+
}
|
|
2128
|
+
}
|
|
2129
|
+
throw error;
|
|
2130
|
+
}
|
|
2131
|
+
}
|
|
2073
2132
|
};
|
|
2074
2133
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2075
2134
|
0 && (module.exports = {
|