GetAvailableShippingMethods
Implements GetAvailableShippingMethods Unified Method.
Source
import { getNormalizers } from "@alokai/connect/integration-kit";
import { HttpStatusCode } from "@alokai/connect/middleware";
import type { Context } from "@vsf-enterprise/magento-api";
import { defineApi, getCartId, query } from "@vsf-enterprise/unified-api-magento";
import type { NormalizersTypes } from "@vsf-enterprise/unified-api-magento";
export const getAvailableShippingMethods = defineApi.getAvailableShippingMethods(
async (context) => {
const customerToken = context.config.state.getCustomerToken();
const getShippingMethodsPromise = customerToken
? getCustomerShippingMethods
: getGuestShippingMethods;
const shippingMethods = await getShippingMethodsPromise(context);
if (shippingMethods.length === 0) {
throw context.createHttpError({
message: "No shipping methods available",
statusCode: HttpStatusCode.NOT_FOUND,
});
}
const { normalizeShippingMethod } = getNormalizers(context);
return {
methods:
shippingMethods
.filter(Boolean)
.map((method) =>
normalizeShippingMethod(method as NormalizersTypes.NormalizeShippingMethodInput),
) || [],
};
},
);
async function getCustomerShippingMethods(context: Context) {
const { api } = await context.getApiClient();
const data = await query(api.getAvailableCustomerShippingMethods());
return data?.customerCart?.shipping_addresses?.[0]?.available_shipping_methods ?? [];
}
async function getGuestShippingMethods(context: Context) {
const { api } = await context.getApiClient();
const cartId = getCartId(context);
const data = await query(api.getAvailableShippingMethods({ cart_id: cartId }));
return data?.cart?.shipping_addresses?.[0]?.available_shipping_methods || [];
}