customer-registration 0.0.117 → 0.0.119

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.
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateCustomerRegistration = validateCustomerRegistration;
4
4
  const utils_1 = require("@medusajs/framework/utils");
5
5
  const config_1 = require("../../config");
6
+ const is_social_pending_customer_registration_1 = require("../store/customers/shared/is-social-pending-customer-registration");
6
7
  const VALID_IDENTIFIERS = ["email", "phone", "both"];
7
8
  const EMAIL_REGEX = /^\S+@\S+\.\S+$/;
8
9
  const PHONE_REGEX = /^\+?[0-9]{8,15}$/;
@@ -16,6 +17,10 @@ const PHONE_REGEX = /^\+?[0-9]{8,15}$/;
16
17
  *
17
18
  * Format validation applies to any field that is present, regardless of
18
19
  * whether it was required, so bad data is always rejected early.
20
+ *
21
+ * OAuth (e.g. Google) completes with the same route but an auth identity that
22
+ * only has social providers — presence rules for `registration.identifier` do
23
+ * not apply.
19
24
  */
20
25
  async function validateCustomerRegistration(req, res, next) {
21
26
  // Defensive guard — the matcher in middlewares.ts already limits to POST,
@@ -33,7 +38,18 @@ async function validateCustomerRegistration(req, res, next) {
33
38
  const { email, phone } = (req.body ?? {});
34
39
  const emailNormalized = email?.trim() || undefined;
35
40
  const phoneNormalized = phone?.trim() || undefined;
41
+ const authContext = req.auth_context;
42
+ const socialPending = await (0, is_social_pending_customer_registration_1.isSocialPendingCustomerRegistration)(req.scope, authContext?.auth_identity_id);
36
43
  // --- Presence checks (identifier-specific) ---
44
+ if (socialPending) {
45
+ if (emailNormalized && !EMAIL_REGEX.test(emailNormalized)) {
46
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid email format");
47
+ }
48
+ if (phoneNormalized && !PHONE_REGEX.test(phoneNormalized)) {
49
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid phone number format. Must be 8–15 digits, optionally prefixed with +");
50
+ }
51
+ return next();
52
+ }
37
53
  if (identifier === "email" && !emailNormalized) {
38
54
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Email is required for registration");
39
55
  }
@@ -57,4 +73,4 @@ async function validateCustomerRegistration(req, res, next) {
57
73
  }
58
74
  next();
59
75
  }
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtY3VzdG9tZXItcmVnaXN0cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9taWRkbGV3YXJlcy92YWxpZGF0ZS1jdXN0b21lci1yZWdpc3RyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEyQkEsb0VBaUZDO0FBdkdELHFEQUFrRjtBQUNsRix5Q0FHcUI7QUFFckIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFVLENBQUE7QUFFN0QsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUE7QUFDcEMsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUE7QUFFdEM7Ozs7Ozs7Ozs7R0FVRztBQUNJLEtBQUssVUFBVSw0QkFBNEIsQ0FDaEQsR0FBa0IsRUFDbEIsR0FBbUIsRUFDbkIsSUFBd0I7SUFFeEIsMEVBQTBFO0lBQzFFLG1EQUFtRDtJQUNuRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDMUIsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNmLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDcEMsaUNBQXlCLENBQUMsYUFBYSxDQUN4QyxDQUFBO0lBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBQSwyQ0FBa0MsRUFBQyxZQUFZLENBQUMsQ0FBQTtJQUNoRSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQTtJQUVsRCxpRUFBaUU7SUFDakUsSUFBSSxDQUFFLGlCQUF1QyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ25FLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG1EQUFtRCxVQUFVLHNCQUFzQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbEgsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBR3ZDLENBQUE7SUFFRCxNQUFNLGVBQWUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksU0FBUyxDQUFBO0lBQ2xELE1BQU0sZUFBZSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxTQUFTLENBQUE7SUFFbEQsZ0RBQWdEO0lBRWhELElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG9DQUFvQyxDQUNyQyxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG9DQUFvQyxDQUNyQyxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksVUFBVSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixvQ0FBb0MsQ0FDckMsQ0FBQTtRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsb0NBQW9DLENBQ3JDLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELCtEQUErRDtJQUUvRCxJQUFJLGVBQWUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUMxRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixzQkFBc0IsQ0FDdkIsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLGVBQWUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUMxRCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qiw4RUFBOEUsQ0FDL0UsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLEVBQUUsQ0FBQTtBQUNSLENBQUMifQ==
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtY3VzdG9tZXItcmVnaXN0cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9taWRkbGV3YXJlcy92YWxpZGF0ZS1jdXN0b21lci1yZWdpc3RyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQ0Esb0VBNEdDO0FBdklELHFEQUFrRjtBQUNsRix5Q0FHcUI7QUFDckIsK0hBQXVIO0FBRXZILE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBVSxDQUFBO0FBRTdELE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFBO0FBQ3BDLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFBO0FBRXRDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0ksS0FBSyxVQUFVLDRCQUE0QixDQUNoRCxHQUFrQixFQUNsQixHQUFtQixFQUNuQixJQUF3QjtJQUV4QiwwRUFBMEU7SUFDMUUsbURBQW1EO0lBQ25ELElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksRUFBRSxDQUFBO0lBQ2YsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNwQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQ3hDLENBQUE7SUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFBLDJDQUFrQyxFQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFBO0lBRWxELGlFQUFpRTtJQUNqRSxJQUFJLENBQUUsaUJBQXVDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDbkUsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsbURBQW1ELFVBQVUsc0JBQXNCLGlCQUFpQixDQUFDLElBQUks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
@@ -1,9 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PATCH = void 0;
3
+ exports.PATCH = exports.GET = void 0;
4
4
  const utils_1 = require("@medusajs/framework/utils");
5
+ const otp_verification_1 = require("../../../../modules/otp-verification");
5
6
  /**
6
- * Override of Medusa's built-in PATCH /store/customers/me.
7
+ * Override of Medusa's built-in GET /store/customers/me and PATCH /store/customers/me.
7
8
  *
8
9
  * Phone and email changes require OTP verification and must go through the
9
10
  * dedicated endpoint:
@@ -13,6 +14,13 @@ const utils_1 = require("@medusajs/framework/utils");
13
14
  * All other profile fields (first_name, last_name, etc.) are applied directly
14
15
  * via the customer service, matching Medusa's default behaviour.
15
16
  */
17
+ const GET = async (req, res) => {
18
+ const customerId = req.auth_context.actor_id;
19
+ const customer = await refetchCustomer(customerId, req.scope);
20
+ const payload = await withVerificationFlags(customer, customerId, req.scope);
21
+ return res.status(200).json({ customer: payload });
22
+ };
23
+ exports.GET = GET;
16
24
  const PATCH = async (req, res) => {
17
25
  const customerId = req.auth_context.actor_id;
18
26
  const body = (req.body ?? {});
@@ -27,9 +35,22 @@ const PATCH = async (req, res) => {
27
35
  await customerService.updateCustomers(customerId, body);
28
36
  }
29
37
  const updated = await refetchCustomer(customerId, req.scope);
30
- return res.status(200).json({ customer: updated });
38
+ const payload = await withVerificationFlags(updated, customerId, req.scope);
39
+ return res.status(200).json({ customer: payload });
31
40
  };
32
41
  exports.PATCH = PATCH;
42
+ async function withVerificationFlags(customer, customerId, scope) {
43
+ if (!customer) {
44
+ return undefined;
45
+ }
46
+ const otpService = scope.resolve(otp_verification_1.OTP_VERIFICATION_MODULE);
47
+ const status = await otpService.getCustomerVerificationByCustomerId(scope, customerId);
48
+ return {
49
+ ...customer,
50
+ email_verified: status.email_verified,
51
+ phone_verified: status.phone_verified,
52
+ };
53
+ }
33
54
  async function refetchCustomer(customerId, scope) {
34
55
  const remoteQuery = scope.resolve(utils_1.ContainerRegistrationKeys.REMOTE_QUERY);
35
56
  const queryObject = (0, utils_1.remoteQueryObjectFromString)({
@@ -50,4 +71,4 @@ async function refetchCustomer(customerId, scope) {
50
71
  const customers = await remoteQuery(queryObject);
51
72
  return customers[0];
52
73
  }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxxREFLa0M7QUFHbEM7Ozs7Ozs7Ozs7R0FVRztBQUNJLE1BQU0sS0FBSyxHQUFHLEtBQUssRUFDeEIsR0FBK0IsRUFDL0IsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFBO0lBQzVDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQTRCLENBQUE7SUFFeEQsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQzdCLG1HQUFtRyxDQUNwRyxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUM3QixtR0FBbUcsQ0FDcEcsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBeUIsZUFBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRW5GLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDakMsTUFBTSxlQUFlLENBQUMsZUFBZSxDQUNuQyxVQUFVLEVBQ1YsSUFBNkQsQ0FDOUQsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzVELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtBQUNwRCxDQUFDLENBQUE7QUFoQ1ksUUFBQSxLQUFLLFNBZ0NqQjtBQUVELEtBQUssVUFBVSxlQUFlLENBQUMsVUFBa0IsRUFBRSxLQUFzQjtJQUN2RSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ3pFLE1BQU0sV0FBVyxHQUFHLElBQUEsbUNBQTJCLEVBQUM7UUFDOUMsVUFBVSxFQUFFLFVBQVU7UUFDdEIsU0FBUyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFO1FBQzFDLE1BQU0sRUFBRTtZQUNOLElBQUk7WUFDSixPQUFPO1lBQ1AsWUFBWTtZQUNaLFdBQVc7WUFDWCxPQUFPO1lBQ1AsYUFBYTtZQUNiLFVBQVU7WUFDVixZQUFZO1lBQ1osWUFBWTtTQUNiO0tBQ0YsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxTQUFTLEdBQUcsTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDaEQsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDckIsQ0FBQyJ9
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxxREFLa0M7QUFDbEMsMkVBRzZDO0FBRTdDOzs7Ozs7Ozs7O0dBVUc7QUFDSSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQStCLEVBQy9CLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQTtJQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzdELE1BQU0sT0FBTyxHQUFHLE1BQU0scUJBQXFCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0FBQ3BELENBQUMsQ0FBQTtBQVJZLFFBQUEsR0FBRyxPQVFmO0FBRU0sTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUN4QixHQUErQixFQUMvQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUE7SUFDNUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBNEIsQ0FBQTtJQUV4RCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFDN0IsbUdBQW1HLENBQ3BHLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQzdCLG1HQUFtRyxDQUNwRyxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUF5QixlQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFbkYsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxNQUFNLGVBQWUsQ0FBQyxlQUFlLENBQ25DLFVBQVUsRUFDVixJQUE2RCxDQUM5RCxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMzRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDcEQsQ0FBQyxDQUFBO0FBakNZLFFBQUEsS0FBSyxTQWlDakI7QUFFRCxLQUFLLFVBQVUscUJBQXFCLENBQ2xDLFFBQXVCLEVBQ3ZCLFVBQWtCLEVBQ2xCLEtBQXNCO0lBSXRCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNkLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFDRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUF5QiwwQ0FBdUIsQ0FBQyxDQUFBO0lBQ2pGLE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxDQUFDLG1DQUFtQyxDQUNqRSxLQUErQixFQUMvQixVQUFVLENBQ1gsQ0FBQTtJQUNELE9BQU87UUFDTCxHQUFHLFFBQVE7UUFDWCxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7UUFDckMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjO0tBQ3RDLENBQUE7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLGVBQWUsQ0FBQyxVQUFrQixFQUFFLEtBQXNCO0lBQ3ZFLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDekUsTUFBTSxXQUFXLEdBQUcsSUFBQSxtQ0FBMkIsRUFBQztRQUM5QyxVQUFVLEVBQUUsVUFBVTtRQUN0QixTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUU7UUFDMUMsTUFBTSxFQUFFO1lBQ04sSUFBSTtZQUNKLE9BQU87WUFDUCxZQUFZO1lBQ1osV0FBVztZQUNYLE9BQU87WUFDUCxhQUFhO1lBQ2IsVUFBVTtZQUNWLFlBQVk7WUFDWixZQUFZO1NBQ2I7S0FDRixDQUFDLENBQUE7SUFDRixNQUFNLFNBQVMsR0FBRyxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUNoRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNyQixDQUFDIn0=
@@ -4,6 +4,22 @@ exports.POST = void 0;
4
4
  const utils_1 = require("@medusajs/framework/utils");
5
5
  const core_flows_1 = require("@medusajs/core-flows");
6
6
  const config_1 = require("../../../config");
7
+ const is_social_pending_customer_registration_1 = require("./shared/is-social-pending-customer-registration");
8
+ /** Medusa / Knex raw results may use `rows` (node-pg) or `result[0]` batch shape. */
9
+ function firstKnexRow(result) {
10
+ const fromRows = result.rows?.[0];
11
+ if (fromRows && typeof fromRows === "object" && !Array.isArray(fromRows)) {
12
+ return fromRows;
13
+ }
14
+ const batch = result[0];
15
+ if (Array.isArray(batch)) {
16
+ const first = batch[0];
17
+ if (first && typeof first === "object" && !Array.isArray(first)) {
18
+ return first;
19
+ }
20
+ }
21
+ return undefined;
22
+ }
7
23
  /**
8
24
  * Override of Medusa's built-in POST /store/customers.
9
25
  *
@@ -13,6 +29,11 @@ const config_1 = require("../../../config");
13
29
  *
14
30
  * For "email" and "both" we delegate to the built-in workflow so that all of
15
31
  * Medusa's existing validations (duplicate email check, etc.) are preserved.
32
+ * For "phone" and "both" we also reject when another customer already has this
33
+ * phone with has_account = true.
34
+ *
35
+ * OAuth-only pending identities (e.g. Google) use the workflow path like email
36
+ * so phone is not required for `identifier` "both" or "phone".
16
37
  */
17
38
  const POST = async (req, res) => {
18
39
  const authContext = req.auth_context;
@@ -24,9 +45,11 @@ const POST = async (req, res) => {
24
45
  const { identifier } = options.registration;
25
46
  const authIdentityId = authContext?.auth_identity_id;
26
47
  const customerData = (req.body ?? {});
27
- if (identifier !== "phone") {
28
- // "email" or "both": delegate to Medusa's built-in workflow which enforces
29
- // the email requirement and handles duplicate detection.
48
+ const socialPending = await (0, is_social_pending_customer_registration_1.isSocialPendingCustomerRegistration)(req.scope, authIdentityId);
49
+ const phoneNormalized = customerData.phone != null && String(customerData.phone).trim() !== ""
50
+ ? String(customerData.phone).trim()
51
+ : "";
52
+ if (identifier === "email" || socialPending) {
30
53
  const { result } = await (0, core_flows_1.createCustomerAccountWorkflow)(req.scope).run({
31
54
  input: {
32
55
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -37,20 +60,32 @@ const POST = async (req, res) => {
37
60
  const customer = await refetchCustomer(result.id, req.scope);
38
61
  return res.status(200).json({ customer });
39
62
  }
40
- // "phone": create customer without email validation.
41
- if (!customerData.phone) {
63
+ // "phone" and "both": require phone and block duplicate registered phones.
64
+ if (!phoneNormalized) {
42
65
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Phone is required for registration");
43
66
  }
44
- const customerService = req.scope.resolve(utils_1.Modules.CUSTOMER);
45
- // Check for duplicate phone
46
67
  const knex = req.scope.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
47
- const existing = await knex.raw(`SELECT id FROM customer WHERE phone = ? AND has_account = true LIMIT 1`, [customerData.phone]);
48
- if (existing.rows?.[0] ?? existing[0]?.[0]) {
68
+ const existingPhoneAccount = await knex.raw(`SELECT id FROM customer WHERE phone = ? AND has_account = true LIMIT 1`, [phoneNormalized]);
69
+ if (firstKnexRow(existingPhoneAccount)?.id) {
49
70
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.DUPLICATE_ERROR, "A customer with this phone number already has an account");
50
71
  }
72
+ if (identifier === "both") {
73
+ const { result } = await (0, core_flows_1.createCustomerAccountWorkflow)(req.scope).run({
74
+ input: {
75
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
+ customerData: { ...customerData, phone: phoneNormalized },
77
+ authIdentityId: authIdentityId ?? "",
78
+ },
79
+ });
80
+ const customer = await refetchCustomer(result.id, req.scope);
81
+ return res.status(200).json({ customer });
82
+ }
83
+ // "phone": create customer without email validation.
84
+ const customerService = req.scope.resolve(utils_1.Modules.CUSTOMER);
51
85
  const [customer] = await customerService.createCustomers([
52
86
  {
53
87
  ...customerData,
88
+ phone: phoneNormalized,
54
89
  has_account: !!authIdentityId,
55
90
  },
56
91
  ]);
@@ -86,4 +121,4 @@ async function refetchCustomer(customerId, scope) {
86
121
  const customers = await remoteQuery(queryObject);
87
122
  return customers[0];
88
123
  }
89
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxxREFLa0M7QUFDbEMscURBQW9FO0FBQ3BFLDRDQUd3QjtBQUV4Qjs7Ozs7Ozs7O0dBU0c7QUFDSSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDcEUsTUFBTSxXQUFXLEdBQ2YsR0FHRCxDQUFDLFlBQVksQ0FBQTtJQUVkLElBQUksV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDhDQUE4QyxDQUMvQyxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQy9FLE1BQU0sT0FBTyxHQUFHLElBQUEsMkNBQWtDLEVBQUMsWUFBaUMsQ0FBQyxDQUFBO0lBQ3JGLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFBO0lBRTNDLE1BQU0sY0FBYyxHQUFHLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQTtJQUNwRCxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUE0QixDQUFBO0lBRWhFLElBQUksVUFBVSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzNCLDJFQUEyRTtRQUMzRSx5REFBeUQ7UUFDekQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSwwQ0FBNkIsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3BFLEtBQUssRUFBRTtnQkFDTCw4REFBOEQ7Z0JBQzlELFlBQVksRUFBRSxZ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
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxxREFLa0M7QUFDbEMscURBQW9FO0FBQ3BFLDRDQUd3QjtBQUN4Qiw4R0FBc0c7QUFFdEcscUZBQXFGO0FBQ3JGLFNBQVMsWUFBWSxDQUNuQixNQUFtQztJQUVuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakMsSUFBSSxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3pFLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxPQUFPLEtBQVUsQ0FBQTtRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNJLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNwRSxNQUFNLFdBQVcsR0FDZixHQUdELENBQUMsWUFBWSxDQUFBO0lBRWQsSUFBSSxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLG1CQUFXLENB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
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const is_social_pending_customer_registration_1 = require("../is-social-pending-customer-registration");
5
+ (0, vitest_1.describe)("isSocialOnlyProviderList", () => {
6
+ const cases = [
7
+ { title: "google only", providers: ["google"], want: true },
8
+ { title: "github only", providers: ["github"], want: true },
9
+ { title: "empty list", providers: [], want: false },
10
+ { title: "emailpass only", providers: ["emailpass"], want: false },
11
+ { title: "phonepass only", providers: ["phonepass"], want: false },
12
+ {
13
+ title: "google and emailpass",
14
+ providers: ["google", "emailpass"],
15
+ want: false,
16
+ },
17
+ {
18
+ title: "multiple social",
19
+ providers: ["google", "facebook"],
20
+ want: true,
21
+ },
22
+ ];
23
+ vitest_1.it.each(cases)("$title", ({ providers, want }) => {
24
+ (0, vitest_1.expect)((0, is_social_pending_customer_registration_1.isSocialOnlyProviderList)(providers)).toBe(want);
25
+ });
26
+ });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtc29jaWFsLXBlbmRpbmctY3VzdG9tZXItcmVnaXN0cmF0aW9uLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9zaGFyZWQvX190ZXN0c19fL2lzLXNvY2lhbC1wZW5kaW5nLWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBQTZDO0FBQzdDLHdHQUFxRjtBQUVyRixJQUFBLGlCQUFRLEVBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO0lBQ3hDLE1BQU0sS0FBSyxHQUlOO1FBQ0gsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7UUFDM0QsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUU7UUFDM0QsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtRQUNuRCxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQ2xFLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7UUFDbEU7WUFDRSxLQUFLLEVBQUUsc0JBQXNCO1lBQzdCLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7WUFDbEMsSUFBSSxFQUFFLEtBQUs7U0FDWjtRQUNEO1lBQ0UsS0FBSyxFQUFFLGlCQUFpQjtZQUN4QixTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDO1lBQ2pDLElBQUksRUFBRSxJQUFJO1NBQ1g7S0FDRixDQUFBO0lBRUQsV0FBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1FBQy9DLElBQUEsZUFBTSxFQUFDLElBQUEsa0VBQXdCLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDeEQsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDLENBQUMsQ0FBQSJ9
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSocialOnlyProviderList = isSocialOnlyProviderList;
4
+ exports.isSocialPendingCustomerRegistration = isSocialPendingCustomerRegistration;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const PASSWORD_AUTH_PROVIDERS = new Set(["emailpass", "phonepass"]);
7
+ /**
8
+ * True when every provider on the identity is non-password (e.g. google only).
9
+ * Used for table-driven tests and for interpreting DB rows.
10
+ */
11
+ function isSocialOnlyProviderList(providers) {
12
+ if (providers.length === 0) {
13
+ return false;
14
+ }
15
+ return providers.every((p) => !PASSWORD_AUTH_PROVIDERS.has(p));
16
+ }
17
+ /**
18
+ * After OAuth callback the JWT has `auth_identity_id` but no `customer_id` yet.
19
+ * If the identity only has social providers (not emailpass/phonepass), plugin
20
+ * registration rules for email/phone must not apply the same way as password signup.
21
+ */
22
+ async function isSocialPendingCustomerRegistration(scope, authIdentityId) {
23
+ if (!authIdentityId) {
24
+ return false;
25
+ }
26
+ const knex = scope.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
27
+ const raw = await knex.raw(`SELECT provider FROM provider_identity WHERE auth_identity_id = ?`, [authIdentityId]);
28
+ const batch = raw;
29
+ const fromRows = batch.rows;
30
+ const rows = Array.isArray(fromRows)
31
+ ? fromRows
32
+ : Array.isArray(batch[0])
33
+ ? batch[0]
34
+ : [];
35
+ const providers = rows
36
+ .map((r) => (typeof r?.provider === "string" ? r.provider : ""))
37
+ .filter(Boolean);
38
+ return isSocialOnlyProviderList(providers);
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXMtc29jaWFsLXBlbmRpbmctY3VzdG9tZXItcmVnaXN0cmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9zdG9yZS9jdXN0b21lcnMvc2hhcmVkL2lzLXNvY2lhbC1wZW5kaW5nLWN1c3RvbWVyLXJlZ2lzdHJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVNBLDREQUtDO0FBT0Qsa0ZBdUJDO0FBM0NELHFEQUFxRTtBQUVyRSxNQUFNLHVCQUF1QixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUE7QUFFbkU7OztHQUdHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsU0FBNEI7SUFDbkUsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNoRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxtQ0FBbUMsQ0FDdkQsS0FBc0IsRUFDdEIsY0FBa0M7SUFFbEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDbkUsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUN4QixtRUFBbUUsRUFDbkUsQ0FBQyxjQUFjLENBQUMsQ0FDakIsQ0FBQTtJQUNELE1BQU0sS0FBSyxHQUFHLEdBQTJELENBQUE7SUFDekUsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtJQUMzQixNQUFNLElBQUksR0FBaUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDaEUsQ0FBQyxDQUFDLFFBQVE7UUFDVixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsQ0FBQyxDQUFFLEtBQUssQ0FBQyxDQUFDLENBQWtDO1lBQzVDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDUixNQUFNLFNBQVMsR0FBRyxJQUFJO1NBQ25CLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMvRCxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDbEIsT0FBTyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUM1QyxDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "customer-registration",
3
- "version": "0.0.117",
3
+ "version": "0.0.119",
4
4
  "description": "Medusa plugin that overrides store customer registration, enforces email/phone verification flags, and provides OTP management module.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",