Vue Storefront is now Alokai! Learn More
RegisterCustomer

RegisterCustomer

Implements RegisterCustomer Unified Method.

Source

import "./extended";
import { getNormalizers } from "@alokai/connect/integration-kit";

import { defineApi, getCartFromContext } from "@vsf-enterprise/unified-api-sapcc";

export const registerCustomer = defineApi.registerCustomer(async (context, args) => {
  const { api } = await context.getApiClient();
  const { email, firstName, lastName, password } = args;
  const { normalizeCustomer } = getNormalizers(context);
  const cart = await getCartFromContext(context);
  const authUserIdCookieName = context.config.headersNames!.authUserIdCookie!;
  const authUserTokenCookieName = context.config.headersNames!.authUserTokenCookie!;

  const { data: user } = await api.createUser({
    userSignUp: {
      firstName: firstName,
      lastName: lastName,
      password: password,
      uid: email,
    },
  });

  if (context.req.cookies[authUserTokenCookieName]) {
    // ASM agent is logged in and will start emulating registered user
    context.res.cookie(authUserIdCookieName, user.customerId);
  } else {
    const loginData = await context.extendedApi.auth.OAuthUserAuthorization({
      password: password,
      username: email,
    });
    context.req.cookies[authUserTokenCookieName] = JSON.stringify(loginData.token);
  }

  const shouldCreateNewCartBasedOnGuestCart = cart.totalItems && cart.guid;

  if (shouldCreateNewCartBasedOnGuestCart) {
    await api.createCart({
      oldCartId: cart.guid,
    });
  }

  return {
    customer: normalizeCustomer(user),
  };
});