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.
- package/.medusa/server/src/api/middlewares/validate-customer-registration.js +17 -1
- package/.medusa/server/src/api/store/customers/me/route.js +25 -4
- package/.medusa/server/src/api/store/customers/route.js +45 -10
- package/.medusa/server/src/api/store/customers/shared/__tests__/is-social-pending-customer-registration.test.js +27 -0
- package/.medusa/server/src/api/store/customers/shared/is-social-pending-customer-registration.js +40 -0
- package/package.json +1 -1
|
@@ -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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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":
|
|
41
|
-
if (!
|
|
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
|
|
48
|
-
if (
|
|
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,
|
|
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
|
package/.medusa/server/src/api/store/customers/shared/is-social-pending-customer-registration.js
ADDED
|
@@ -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.
|
|
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",
|