customer-registration 0.0.127 → 0.0.129

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.
Files changed (31) hide show
  1. package/.medusa/server/src/api/middlewares.js +2 -7
  2. package/.medusa/server/src/api/store/customers/otp/__tests__/send-route.test.js +240 -0
  3. package/.medusa/server/src/api/store/customers/otp/__tests__/verify-route.test.js +240 -0
  4. package/.medusa/server/src/api/store/customers/otp/send/route.js +45 -7
  5. package/.medusa/server/src/api/store/customers/otp/shared/email-auth-helpers.js +62 -0
  6. package/.medusa/server/src/api/store/customers/otp/shared/handle-send-email-auth-otp.js +45 -0
  7. package/.medusa/server/src/api/store/customers/otp/shared/handle-send-phone-auth-otp.js +45 -0
  8. package/.medusa/server/src/api/store/customers/otp/shared/handle-verify-email-auth-otp.js +54 -0
  9. package/.medusa/server/src/api/store/customers/otp/shared/handle-verify-phone-auth-otp.js +54 -0
  10. package/.medusa/server/src/api/{auth/customer/phoneotp → store/customers/otp}/shared/phone-auth-helpers.js +1 -1
  11. package/.medusa/server/src/api/store/customers/otp/shared/resolve-otp-token-purpose.js +27 -0
  12. package/.medusa/server/src/api/store/customers/otp/verify/route.js +22 -28
  13. package/.medusa/server/src/api/store/customers/route.js +10 -14
  14. package/.medusa/server/src/api/store/customers/shared/__tests__/create-phone-only-customer.test.js +67 -0
  15. package/.medusa/server/src/api/store/customers/shared/create-phone-only-customer.js +43 -0
  16. package/.medusa/server/src/config.js +3 -3
  17. package/.medusa/server/src/providers/emailotp/service.js +2 -2
  18. package/.medusa/server/src/providers/phoneotp/service.js +2 -2
  19. package/.medusa/server/src/workflows/steps/resolve-or-create-email-auth-customer-step.js +2 -2
  20. package/.medusa/server/src/workflows/steps/resolve-or-create-phone-auth-customer-step.js +8 -47
  21. package/README.md +76 -114
  22. package/package.json +1 -1
  23. package/.medusa/server/src/api/auth/customer/emailotp/__tests__/send-route.test.js +0 -151
  24. package/.medusa/server/src/api/auth/customer/emailotp/__tests__/verify-route.test.js +0 -171
  25. package/.medusa/server/src/api/auth/customer/emailotp/send/route.js +0 -51
  26. package/.medusa/server/src/api/auth/customer/emailotp/shared/email-auth-helpers.js +0 -62
  27. package/.medusa/server/src/api/auth/customer/emailotp/verify/route.js +0 -54
  28. package/.medusa/server/src/api/auth/customer/phoneotp/__tests__/send-route.test.js +0 -153
  29. package/.medusa/server/src/api/auth/customer/phoneotp/__tests__/verify-route.test.js +0 -158
  30. package/.medusa/server/src/api/auth/customer/phoneotp/send/route.js +0 -51
  31. package/.medusa/server/src/api/auth/customer/phoneotp/verify/route.js +0 -54
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeAuthEmail = normalizeAuthEmail;
4
+ exports.lookupCustomerByEmail = lookupCustomerByEmail;
5
+ exports.findAnyAuthIdentityIdByEmail = findAnyAuthIdentityIdByEmail;
6
+ exports.findAuthIdentityIdByEmail = findAuthIdentityIdByEmail;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ function firstKnexRow(result) {
9
+ const fromRows = result.rows?.[0];
10
+ if (fromRows && typeof fromRows === "object" && !Array.isArray(fromRows)) {
11
+ return fromRows;
12
+ }
13
+ const batch = result[0];
14
+ if (Array.isArray(batch)) {
15
+ const first = batch[0];
16
+ if (first && typeof first === "object" && !Array.isArray(first)) {
17
+ return first;
18
+ }
19
+ }
20
+ return undefined;
21
+ }
22
+ function normalizeAuthEmail(email) {
23
+ return email.toLowerCase().trim();
24
+ }
25
+ async function lookupCustomerByEmail(scope, email) {
26
+ const knex = scope.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
27
+ const normalized = normalizeAuthEmail(email);
28
+ const result = await knex.raw(`SELECT id, email, has_account, first_name, last_name
29
+ FROM customer
30
+ WHERE lower(email) = lower(?)
31
+ ORDER BY created_at DESC
32
+ LIMIT 1`, [normalized]);
33
+ const row = firstKnexRow(result);
34
+ if (!row?.id) {
35
+ return null;
36
+ }
37
+ return row;
38
+ }
39
+ async function findAnyAuthIdentityIdByEmail(scope, email) {
40
+ const knex = scope.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
41
+ const normalized = normalizeAuthEmail(email);
42
+ const result = await knex.raw(`SELECT pi.auth_identity_id
43
+ FROM provider_identity pi
44
+ WHERE lower(pi.entity_id) = lower(?)
45
+ ORDER BY pi.created_at DESC
46
+ LIMIT 1`, [normalized]);
47
+ const row = firstKnexRow(result);
48
+ return row?.auth_identity_id ?? null;
49
+ }
50
+ async function findAuthIdentityIdByEmail(scope, email) {
51
+ const knex = scope.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
52
+ const normalized = normalizeAuthEmail(email);
53
+ const result = await knex.raw(`SELECT pi.auth_identity_id
54
+ FROM provider_identity pi
55
+ WHERE lower(pi.entity_id) = lower(?)
56
+ AND pi.provider IN ('emailpass', 'emailotp')
57
+ ORDER BY pi.created_at DESC
58
+ LIMIT 1`, [normalized]);
59
+ const row = firstKnexRow(result);
60
+ return row?.auth_identity_id ?? null;
61
+ }
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtYXV0aC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9zdG9yZS9jdXN0b21lcnMvb3RwL3NoYXJlZC9lbWFpbC1hdXRoLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0QkEsZ0RBRUM7QUFFRCxzREEwQkM7QUFFRCxvRUF1QkM7QUFFRCw4REF3QkM7QUE1R0QscURBQXFFO0FBVXJFLFNBQVMsWUFBWSxDQUNuQixNQUFtQztJQUVuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakMsSUFBSSxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3pFLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxPQUFPLEtBQVUsQ0FBQTtRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxLQUFhO0lBQzlDLE9BQU8sS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ25DLENBQUM7QUFFTSxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLEtBQXNCLEVBQ3RCLEtBQWE7SUFFYixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLGFBQWEsQ0FLakUsQ0FBQTtJQUVELE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzVDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FDM0I7Ozs7YUFJUyxFQUNULENBQUMsVUFBVSxDQUFDLENBQ2IsQ0FBQTtJQUVELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBc0IsTUFBTSxDQUFDLENBQUE7SUFDckQsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUNiLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQztBQUVNLEtBQUssVUFBVSw0QkFBNEIsQ0FDaEQsS0FBc0IsRUFDdEIsS0FBYTtJQUViLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUtqRSxDQUFBO0lBRUQsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUMzQjs7OzthQUlTLEVBQ1QsQ0FBQyxVQUFVLENBQUMsQ0FDYixDQUFBO0lBRUQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFnQyxNQUFNLENBQUMsQ0FBQTtJQUMvRCxPQUFPLEdBQUcsRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUE7QUFDdEMsQ0FBQztBQUVNLEtBQUssVUFBVSx5QkFBeUIsQ0FDN0MsS0FBc0IsRUFDdEIsS0FBYTtJQUViLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUtqRSxDQUFBO0lBRUQsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUMzQjs7Ozs7YUFLUyxFQUNULENBQUMsVUFBVSxDQUFDLENBQ2IsQ0FBQTtJQUVELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBZ0MsTUFBTSxDQUFDLENBQUE7SUFDL0QsT0FBTyxHQUFHLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxDQUFBO0FBQ3RDLENBQUMifQ==
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleSendEmailAuthOtp = handleSendEmailAuthOtp;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const config_1 = require("../../../../../config");
9
+ const account_deletion_request_1 = require("../../../../../modules/account-deletion-request");
10
+ const send_email_auth_otp_workflow_1 = __importDefault(require("../../../../../workflows/send-email-auth-otp-workflow"));
11
+ const email_validation_1 = require("../../../../../utils/email-validation");
12
+ const email_auth_helpers_1 = require("./email-auth-helpers");
13
+ async function handleSendEmailAuthOtp(req, res, rawEmail) {
14
+ const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
15
+ const options = (0, config_1.resolveCustomerRegistrationOptions)(configModule);
16
+ if (!(0, config_1.isEmailOtpAuthEnabled)(options)) {
17
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Email OTP authentication is not enabled");
18
+ }
19
+ (0, email_validation_1.validateEmailFormat)(rawEmail);
20
+ const email = (0, email_auth_helpers_1.normalizeAuthEmail)(rawEmail);
21
+ const existingCustomer = await (0, email_auth_helpers_1.lookupCustomerByEmail)(req.scope, email);
22
+ const isNewUser = !existingCustomer?.has_account;
23
+ if (existingCustomer?.id) {
24
+ const accountDeletionService = req.scope.resolve(account_deletion_request_1.ACCOUNT_DELETION_REQUEST_MODULE);
25
+ if (await accountDeletionService.hasPendingRequest(existingCustomer.id)) {
26
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "This account has a pending deletion request");
27
+ }
28
+ }
29
+ const customerName = existingCustomer?.first_name ||
30
+ existingCustomer?.email ||
31
+ email;
32
+ const { result } = await (0, send_email_auth_otp_workflow_1.default)(req.scope).run({
33
+ input: {
34
+ email,
35
+ customer_id: existingCustomer?.id ?? null,
36
+ customer_name: customerName,
37
+ },
38
+ });
39
+ res.status(200).json({
40
+ token: result.token,
41
+ expires_at: result.expires_at,
42
+ is_new_user: isNewUser,
43
+ });
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLXNlbmQtZW1haWwtYXV0aC1vdHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9vdHAvc2hhcmVkL2hhbmRsZS1zZW5kLWVtYWlsLWF1dGgtb3RwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBZ0JBLHdEQXNEQztBQXJFRCxxREFBa0Y7QUFDbEYsa0RBSThCO0FBQzlCLDhGQUFpRztBQUVqRyx5SEFBNEY7QUFDNUYsNEVBQTJFO0FBQzNFLDZEQUc2QjtBQUV0QixLQUFLLFVBQVUsc0JBQXNCLENBQzFDLEdBQWtCLEVBQ2xCLEdBQW1CLEVBQ25CLFFBQWdCO0lBRWhCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQy9FLE1BQU0sT0FBTyxHQUFHLElBQUEsMkNBQWtDLEVBQ2hELFlBQWlDLENBQ2xDLENBQUE7SUFFRCxJQUFJLENBQUMsSUFBQSw4QkFBcUIsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQzdCLHlDQUF5QyxDQUMxQyxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUEsc0NBQW1CLEVBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBQSx1Q0FBa0IsRUFBQyxRQUFRLENBQUMsQ0FBQTtJQUUxQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBQSwwQ0FBcUIsRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sU0FBUyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFBO0lBRWhELElBQUksZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDekIsTUFBTSxzQkFBc0IsR0FDMUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ2YsMERBQStCLENBQ2hDLENBQUE7UUFDSCxJQUFJLE1BQU0sc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4RSxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUM3Qiw2Q0FBNkMsQ0FDOUMsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQ2hCLGdCQUFnQixFQUFFLFVBQVU7UUFDNUIsZ0JBQWdCLEVBQUUsS0FBSztRQUN2QixLQUFLLENBQUE7SUFFUCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLHNDQUF3QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDL0QsS0FBSyxFQUFFO1lBQ0wsS0FBSztZQUNMLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLElBQUksSUFBSTtZQUN6QyxhQUFhLEVBQUUsWUFBWTtTQUM1QjtLQUNGLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25CLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDN0IsV0FBVyxFQUFFLFNBQVM7S0FDdkIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleSendPhoneAuthOtp = handleSendPhoneAuthOtp;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const config_1 = require("../../../../../config");
9
+ const account_deletion_request_1 = require("../../../../../modules/account-deletion-request");
10
+ const send_phone_auth_otp_workflow_1 = __importDefault(require("../../../../../workflows/send-phone-auth-otp-workflow"));
11
+ const phone_validation_1 = require("../../../../../utils/phone-validation");
12
+ const phone_auth_helpers_1 = require("./phone-auth-helpers");
13
+ async function handleSendPhoneAuthOtp(req, res, rawPhone) {
14
+ const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
15
+ const options = (0, config_1.resolveCustomerRegistrationOptions)(configModule);
16
+ if (!(0, config_1.isPhoneOtpAuthEnabled)(options)) {
17
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Phone OTP authentication is not enabled");
18
+ }
19
+ (0, phone_validation_1.validatePhoneFormat)(rawPhone);
20
+ const phone = (0, phone_auth_helpers_1.normalizeAuthPhone)(rawPhone);
21
+ const existingCustomer = await (0, phone_auth_helpers_1.lookupCustomerByPhone)(req.scope, phone);
22
+ const isNewUser = !existingCustomer?.has_account;
23
+ if (existingCustomer?.id) {
24
+ const accountDeletionService = req.scope.resolve(account_deletion_request_1.ACCOUNT_DELETION_REQUEST_MODULE);
25
+ if (await accountDeletionService.hasPendingRequest(existingCustomer.id)) {
26
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "This account has a pending deletion request");
27
+ }
28
+ }
29
+ const customerName = existingCustomer?.first_name ||
30
+ existingCustomer?.phone ||
31
+ phone;
32
+ const { result } = await (0, send_phone_auth_otp_workflow_1.default)(req.scope).run({
33
+ input: {
34
+ phone,
35
+ customer_id: existingCustomer?.id ?? null,
36
+ customer_name: customerName,
37
+ },
38
+ });
39
+ res.status(200).json({
40
+ token: result.token,
41
+ expires_at: result.expires_at,
42
+ is_new_user: isNewUser,
43
+ });
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLXNlbmQtcGhvbmUtYXV0aC1vdHAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9vdHAvc2hhcmVkL2hhbmRsZS1zZW5kLXBob25lLWF1dGgtb3RwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBZ0JBLHdEQXNEQztBQXJFRCxxREFBa0Y7QUFDbEYsa0RBSThCO0FBQzlCLDhGQUFpRztBQUVqRyx5SEFBNEY7QUFDNUYsNEVBQTJFO0FBQzNFLDZEQUc2QjtBQUV0QixLQUFLLFVBQVUsc0JBQXNCLENBQzFDLEdBQWtCLEVBQ2xCLEdBQW1CLEVBQ25CLFFBQWdCO0lBRWhCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQy9FLE1BQU0sT0FBTyxHQUFHLElBQUEsMkNBQWtDLEVBQ2hELFlBQWlDLENBQ2xDLENBQUE7SUFFRCxJQUFJLENBQUMsSUFBQSw4QkFBcUIsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQzdCLHlDQUF5QyxDQUMxQyxDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUEsc0NBQW1CLEVBQUMsUUFBUSxDQUFDLENBQUE7SUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBQSx1Q0FBa0IsRUFBQyxRQUFRLENBQUMsQ0FBQTtJQUUxQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBQSwwQ0FBcUIsRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sU0FBUyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsV0FBVyxDQUFBO0lBRWhELElBQUksZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDekIsTUFBTSxzQkFBc0IsR0FDMUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ2YsMERBQStCLENBQ2hDLENBQUE7UUFDSCxJQUFJLE1BQU0sc0JBQXNCLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN4RSxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUM3Qiw2Q0FBNkMsQ0FDOUMsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQ2hCLGdCQUFnQixFQUFFLFVBQVU7UUFDNUIsZ0JBQWdCLEVBQUUsS0FBSztRQUN2QixLQUFLLENBQUE7SUFFUCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLHNDQUF3QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDL0QsS0FBSyxFQUFFO1lBQ0wsS0FBSztZQUNMLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLElBQUksSUFBSTtZQUN6QyxhQUFhLEVBQUUsWUFBWTtTQUM1QjtLQUNGLENBQUMsQ0FBQTtJQUVGLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25CLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDN0IsV0FBVyxFQUFFLFNBQVM7S0FDdkIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleVerifyEmailAuthOtp = handleVerifyEmailAuthOtp;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const config_1 = require("../../../../../config");
9
+ const otp_verification_1 = require("../../../../../modules/otp-verification");
10
+ const verify_email_auth_otp_workflow_1 = __importDefault(require("../../../../../workflows/verify-email-auth-otp-workflow"));
11
+ const complete_customer_login_1 = require("../../../../auth/customer/shared/complete-customer-login");
12
+ const referral_code_1 = require("../../shared/referral-code");
13
+ async function handleVerifyEmailAuthOtp(req, res, body) {
14
+ const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
15
+ const config = configModule;
16
+ const options = (0, config_1.resolveCustomerRegistrationOptions)(config);
17
+ if (!(0, config_1.isEmailOtpAuthEnabled)(options)) {
18
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Email OTP authentication is not enabled");
19
+ }
20
+ if (!body?.token) {
21
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "token is required");
22
+ }
23
+ if (!body?.code) {
24
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "code is required");
25
+ }
26
+ await (0, referral_code_1.assertReferralCodeReferrerExists)(req);
27
+ const jwtSecret = config.projectConfig?.http?.jwtSecret || "supersecret";
28
+ const otpService = req.scope.resolve(otp_verification_1.OTP_VERIFICATION_MODULE);
29
+ const verifyResult = await otpService.verifyEmailAuthOtp({ token: body.token, code: body.code }, jwtSecret);
30
+ const { result } = await (0, verify_email_auth_otp_workflow_1.default)(req.scope).run({
31
+ input: {
32
+ email: verifyResult.email,
33
+ customer_id: verifyResult.customer_id,
34
+ first_name: body.first_name,
35
+ last_name: body.last_name,
36
+ },
37
+ });
38
+ const customerId = typeof result.customer.id === "string" ? result.customer.id : "";
39
+ if (!customerId) {
40
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Customer id missing after email OTP verification");
41
+ }
42
+ if (result.is_new_user) {
43
+ await (0, referral_code_1.maybeCreateReferralLinkFromRequest)(req, customerId);
44
+ }
45
+ const token = await (0, complete_customer_login_1.issueCustomerJwtToken)(req, config, result.auth_identity, customerId);
46
+ res.status(200).json({
47
+ verified: true,
48
+ customer: result.customer,
49
+ is_new_user: result.is_new_user,
50
+ token,
51
+ needs_login: false,
52
+ });
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLXZlcmlmeS1lbWFpbC1hdXRoLW90cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvY3VzdG9tZXJzL290cC9zaGFyZWQvaGFuZGxlLXZlcmlmeS1lbWFpbC1hdXRoLW90cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQTJCQSw0REEyRUM7QUFyR0QscURBQWtGO0FBQ2xGLGtEQUk4QjtBQUM5Qiw4RUFBaUY7QUFFakYsNkhBQWdHO0FBQ2hHLHNHQUdpRTtBQUNqRSw4REFHbUM7QUFVNUIsS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxHQUFrQixFQUNsQixHQUFtQixFQUNuQixJQUE0QjtJQUU1QixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMvRSxNQUFNLE1BQU0sR0FBRyxZQUFzRCxDQUFBO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLElBQUEsMkNBQWtDLEVBQUMsTUFBTSxDQUFDLENBQUE7SUFFMUQsSUFBSSxDQUFDLElBQUEsOEJBQXFCLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUM3Qix5Q0FBeUMsQ0FDMUMsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO0lBQzNFLENBQUM7SUFFRCxNQUFNLElBQUEsZ0RBQWdDLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFFM0MsTUFBTSxTQUFTLEdBQ1osTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBZ0MsSUFBSSxhQUFhLENBQUE7SUFFaEYsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ2xDLDBDQUF1QixDQUN4QixDQUFBO0lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxVQUFVLENBQUMsa0JBQWtCLENBQ3RELEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFDdEMsU0FBUyxDQUNWLENBQUE7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLHdDQUEwQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDakUsS0FBSyxFQUFFO1lBQ0wsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO1lBQ3pCLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVztZQUNyQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsTUFBTSxVQUFVLEdBQ2QsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFbEUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsa0RBQWtELENBQ25ELENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFBLGtEQUFrQyxFQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLCtDQUFxQixFQUN2QyxHQUFHLEVBQ0gsTUFBTSxFQUNOLE1BQU0sQ0FBQyxhQUFhLEVBQ3BCLFVBQVUsQ0FDWCxDQUFBO0lBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkIsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQy9CLEtBQUs7UUFDTCxXQUFXLEVBQUUsS0FBSztLQUNuQixDQUFDLENBQUE7QUFDSixDQUFDIn0=
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleVerifyPhoneAuthOtp = handleVerifyPhoneAuthOtp;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const config_1 = require("../../../../../config");
9
+ const otp_verification_1 = require("../../../../../modules/otp-verification");
10
+ const verify_phone_auth_otp_workflow_1 = __importDefault(require("../../../../../workflows/verify-phone-auth-otp-workflow"));
11
+ const complete_customer_login_1 = require("../../../../auth/customer/shared/complete-customer-login");
12
+ const referral_code_1 = require("../../shared/referral-code");
13
+ async function handleVerifyPhoneAuthOtp(req, res, body) {
14
+ const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
15
+ const config = configModule;
16
+ const options = (0, config_1.resolveCustomerRegistrationOptions)(config);
17
+ if (!(0, config_1.isPhoneOtpAuthEnabled)(options)) {
18
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "Phone OTP authentication is not enabled");
19
+ }
20
+ if (!body?.token) {
21
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "token is required");
22
+ }
23
+ if (!body?.code) {
24
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "code is required");
25
+ }
26
+ await (0, referral_code_1.assertReferralCodeReferrerExists)(req);
27
+ const jwtSecret = config.projectConfig?.http?.jwtSecret || "supersecret";
28
+ const otpService = req.scope.resolve(otp_verification_1.OTP_VERIFICATION_MODULE);
29
+ const verifyResult = await otpService.verifyPhoneAuthOtp({ token: body.token, code: body.code }, jwtSecret);
30
+ const { result } = await (0, verify_phone_auth_otp_workflow_1.default)(req.scope).run({
31
+ input: {
32
+ phone: verifyResult.phone,
33
+ customer_id: verifyResult.customer_id,
34
+ first_name: body.first_name,
35
+ last_name: body.last_name,
36
+ },
37
+ });
38
+ const customerId = typeof result.customer.id === "string" ? result.customer.id : "";
39
+ if (!customerId) {
40
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Customer id missing after phone OTP verification");
41
+ }
42
+ if (result.is_new_user) {
43
+ await (0, referral_code_1.maybeCreateReferralLinkFromRequest)(req, customerId);
44
+ }
45
+ const token = await (0, complete_customer_login_1.issueCustomerJwtToken)(req, config, result.auth_identity, customerId);
46
+ res.status(200).json({
47
+ verified: true,
48
+ customer: result.customer,
49
+ is_new_user: result.is_new_user,
50
+ token,
51
+ needs_login: false,
52
+ });
53
+ }
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLXZlcmlmeS1waG9uZS1hdXRoLW90cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvY3VzdG9tZXJzL290cC9zaGFyZWQvaGFuZGxlLXZlcmlmeS1waG9uZS1hdXRoLW90cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQTJCQSw0REEyRUM7QUFyR0QscURBQWtGO0FBQ2xGLGtEQUk4QjtBQUM5Qiw4RUFBaUY7QUFFakYsNkhBQWdHO0FBQ2hHLHNHQUdpRTtBQUNqRSw4REFHbUM7QUFVNUIsS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxHQUFrQixFQUNsQixHQUFtQixFQUNuQixJQUE0QjtJQUU1QixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMvRSxNQUFNLE1BQU0sR0FBRyxZQUFzRCxDQUFBO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLElBQUEsMkNBQWtDLEVBQUMsTUFBTSxDQUFDLENBQUE7SUFFMUQsSUFBSSxDQUFDLElBQUEsOEJBQXFCLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUM3Qix5Q0FBeUMsQ0FDMUMsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ2pCLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO0lBQzNFLENBQUM7SUFFRCxNQUFNLElBQUEsZ0RBQWdDLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFFM0MsTUFBTSxTQUFTLEdBQ1osTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsU0FBZ0MsSUFBSSxhQUFhLENBQUE7SUFFaEYsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ2xDLDBDQUF1QixDQUN4QixDQUFBO0lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxVQUFVLENBQUMsa0JBQWtCLENBQ3RELEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFDdEMsU0FBUyxDQUNWLENBQUE7SUFFRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLHdDQUEwQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDakUsS0FBSyxFQUFFO1lBQ0wsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLO1lBQ3pCLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVztZQUNyQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1NBQzFCO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsTUFBTSxVQUFVLEdBQ2QsT0FBTyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFFbEUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsa0RBQWtELENBQ25ELENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFBLGtEQUFrQyxFQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLCtDQUFxQixFQUN2QyxHQUFHLEVBQ0gsTUFBTSxFQUNOLE1BQU0sQ0FBQyxhQUFhLEVBQ3BCLFVBQVUsQ0FDWCxDQUFBO0lBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkIsUUFBUSxFQUFFLElBQUk7UUFDZCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1FBQy9CLEtBQUs7UUFDTCxXQUFXLEVBQUUsS0FBSztLQUNuQixDQUFDLENBQUE7QUFDSixDQUFDIn0=
@@ -60,4 +60,4 @@ async function findAuthIdentityIdByPhone(scope, phone) {
60
60
  const row = firstKnexRow(result);
61
61
  return row?.auth_identity_id ?? null;
62
62
  }
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtYXV0aC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9hdXRoL2N1c3RvbWVyL3Bob25lb3RwL3NoYXJlZC9waG9uZS1hdXRoLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4QkEsZ0RBRUM7QUFFRCxzREEwQkM7QUFFRCxvRUF1QkM7QUFFRCw4REF3QkM7QUE5R0QscURBQXFFO0FBQ3JFLDRFQUE0RTtBQVc1RSxTQUFTLFlBQVksQ0FDbkIsTUFBbUM7SUFFbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLElBQUksUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN6RSxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN0QixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEUsT0FBTyxLQUFVLENBQUE7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsS0FBYTtJQUM5QyxPQUFPLElBQUEsdUNBQW9CLEVBQUMsS0FBSyxDQUFDLENBQUE7QUFDcEMsQ0FBQztBQUVNLEtBQUssVUFBVSxxQkFBcUIsQ0FDekMsS0FBc0IsRUFDdEIsS0FBYTtJQUViLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUtqRSxDQUFBO0lBRUQsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUMzQjs7OzthQUlTLEVBQ1QsQ0FBQyxVQUFVLENBQUMsQ0FDYixDQUFBO0lBRUQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFzQixNQUFNLENBQUMsQ0FBQTtJQUNyRCxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2IsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBRU0sS0FBSyxVQUFVLDRCQUE0QixDQUNoRCxLQUFzQixFQUN0QixLQUFhO0lBRWIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxhQUFhLENBS2pFLENBQUE7SUFFRCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQzNCOzs7O2FBSVMsRUFDVCxDQUFDLFVBQVUsQ0FBQyxDQUNiLENBQUE7SUFFRCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQWdDLE1BQU0sQ0FBQyxDQUFBO0lBQy9ELE9BQU8sR0FBRyxFQUFFLGdCQUFnQixJQUFJLElBQUksQ0FBQTtBQUN0QyxDQUFDO0FBRU0sS0FBSyxVQUFVLHlCQUF5QixDQUM3QyxLQUFzQixFQUN0QixLQUFhO0lBRWIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxhQUFhLENBS2pFLENBQUE7SUFFRCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQzNCOzs7OzthQUtTLEVBQ1QsQ0FBQyxVQUFVLENBQUMsQ0FDYixDQUFBO0lBRUQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFnQyxNQUFNLENBQUMsQ0FBQTtJQUMvRCxPQUFPLEdBQUcsRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUE7QUFDdEMsQ0FBQyJ9
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtYXV0aC1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9zdG9yZS9jdXN0b21lcnMvb3RwL3NoYXJlZC9waG9uZS1hdXRoLWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4QkEsZ0RBRUM7QUFFRCxzREEwQkM7QUFFRCxvRUF1QkM7QUFFRCw4REF3QkM7QUE5R0QscURBQXFFO0FBQ3JFLDRFQUE0RTtBQVc1RSxTQUFTLFlBQVksQ0FDbkIsTUFBbUM7SUFFbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLElBQUksUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN6RSxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN0QixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEUsT0FBTyxLQUFVLENBQUE7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCLENBQUMsS0FBYTtJQUM5QyxPQUFPLElBQUEsdUNBQW9CLEVBQUMsS0FBSyxDQUFDLENBQUE7QUFDcEMsQ0FBQztBQUVNLEtBQUssVUFBVSxxQkFBcUIsQ0FDekMsS0FBc0IsRUFDdEIsS0FBYTtJQUViLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUtqRSxDQUFBO0lBRUQsTUFBTSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUMzQjs7OzthQUlTLEVBQ1QsQ0FBQyxVQUFVLENBQUMsQ0FDYixDQUFBO0lBRUQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFzQixNQUFNLENBQUMsQ0FBQTtJQUNyRCxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2IsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBRU0sS0FBSyxVQUFVLDRCQUE0QixDQUNoRCxLQUFzQixFQUN0QixLQUFhO0lBRWIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxhQUFhLENBS2pFLENBQUE7SUFFRCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQzNCOzs7O2FBSVMsRUFDVCxDQUFDLFVBQVUsQ0FBQyxDQUNiLENBQUE7SUFFRCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQWdDLE1BQU0sQ0FBQyxDQUFBO0lBQy9ELE9BQU8sR0FBRyxFQUFFLGdCQUFnQixJQUFJLElBQUksQ0FBQTtBQUN0QyxDQUFDO0FBRU0sS0FBSyxVQUFVLHlCQUF5QixDQUM3QyxLQUFzQixFQUN0QixLQUFhO0lBRWIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxhQUFhLENBS2pFLENBQUE7SUFFRCxNQUFNLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQzNCOzs7OzthQUtTLEVBQ1QsQ0FBQyxVQUFVLENBQUMsQ0FDYixDQUFBO0lBRUQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFnQyxNQUFNLENBQUMsQ0FBQTtJQUMvRCxPQUFPLEdBQUcsRUFBRSxnQkFBZ0IsSUFBSSxJQUFJLENBQUE7QUFDdEMsQ0FBQyJ9
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resolveOtpTokenPurpose = resolveOtpTokenPurpose;
7
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
8
+ const utils_1 = require("@medusajs/framework/utils");
9
+ const otp_verification_1 = require("../../../../../modules/otp-verification/models/otp-verification");
10
+ function resolveOtpTokenPurpose(token, jwtSecret) {
11
+ try {
12
+ const decoded = jsonwebtoken_1.default.verify(token, jwtSecret);
13
+ const type = decoded.type;
14
+ if (typeof type !== "string" ||
15
+ !Object.values(otp_verification_1.OtpPurpose).includes(type)) {
16
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid token format.");
17
+ }
18
+ return type;
19
+ }
20
+ catch (error) {
21
+ if (error instanceof utils_1.MedusaError) {
22
+ throw error;
23
+ }
24
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid or expired token. Please request a new OTP.");
25
+ }
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1vdHAtdG9rZW4tcHVycG9zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvY3VzdG9tZXJzL290cC9zaGFyZWQvcmVzb2x2ZS1vdHAtdG9rZW4tcHVycG9zZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUlBLHdEQTZCQztBQWpDRCxnRUFBOEI7QUFDOUIscURBQXVEO0FBQ3ZELHNHQUE0RjtBQUU1RixTQUFnQixzQkFBc0IsQ0FDcEMsS0FBYSxFQUNiLFNBQWlCO0lBRWpCLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLHNCQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQTRCLENBQUE7UUFDdkUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQTtRQUV6QixJQUNFLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFDeEIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLDZCQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBa0IsQ0FBQyxFQUN2RCxDQUFDO1lBQ0QsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsdUJBQXVCLENBQ3hCLENBQUE7UUFDSCxDQUFDO1FBRUQsT0FBTyxJQUFrQixDQUFBO0lBQzNCLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVksbUJBQVcsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sS0FBSyxDQUFBO1FBQ2IsQ0FBQztRQUVELE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHFEQUFxRCxDQUN0RCxDQUFBO0lBQ0gsQ0FBQztBQUNILENBQUMifQ==
@@ -11,27 +11,35 @@ const otp_verification_2 = require("../../../../../modules/otp-verification/mode
11
11
  const verify_email_1 = __importDefault(require("../../../../../workflows/verify-email"));
12
12
  const verify_phone_1 = __importDefault(require("../../../../../workflows/verify-phone"));
13
13
  const config_1 = require("../../../../../config");
14
+ const handle_verify_email_auth_otp_1 = require("../shared/handle-verify-email-auth-otp");
15
+ const handle_verify_phone_auth_otp_1 = require("../shared/handle-verify-phone-auth-otp");
16
+ const resolve_otp_token_purpose_1 = require("../shared/resolve-otp-token-purpose");
17
+ function customerIdFromRecord(customer) {
18
+ const id = customer.id;
19
+ return typeof id === "string" ? id : "";
20
+ }
14
21
  const POST = async (req, res) => {
15
- const { token, code } = req.body;
22
+ const body = (req.body ?? {});
23
+ const { token, code } = body;
16
24
  if (!token) {
17
25
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Token is required");
18
26
  }
19
27
  if (!code) {
20
28
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "OTP code is required");
21
29
  }
22
- // Get OTP service from module
23
- const otpService = req.scope.resolve(otp_verification_1.OTP_VERIFICATION_MODULE);
24
- // Get JWT secret from config
25
30
  const config = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
26
31
  const { http } = config.projectConfig;
27
32
  const jwtSecret = http?.jwtSecret || "supersecret";
28
- // Verify OTP
29
- const verifyResult = await otpService.verifyOtp({
30
- token,
31
- code,
32
- }, jwtSecret);
33
+ const purpose = (0, resolve_otp_token_purpose_1.resolveOtpTokenPurpose)(token, jwtSecret);
34
+ if (purpose === otp_verification_2.OtpPurpose.EMAIL_AUTH) {
35
+ return (0, handle_verify_email_auth_otp_1.handleVerifyEmailAuthOtp)(req, res, body);
36
+ }
37
+ if (purpose === otp_verification_2.OtpPurpose.PHONE_AUTH) {
38
+ return (0, handle_verify_phone_auth_otp_1.handleVerifyPhoneAuthOtp)(req, res, body);
39
+ }
40
+ const otpService = req.scope.resolve(otp_verification_1.OTP_VERIFICATION_MODULE);
41
+ const verifyResult = await otpService.verifyOtp({ token, code }, jwtSecret);
33
42
  const loginOptions = (0, config_1.resolveCustomerRegistrationOptions)(config);
34
- // Execute workflow based on type
35
43
  let result;
36
44
  if (verifyResult.type === otp_verification_2.OtpPurpose.EMAIL_VERIFICATION) {
37
45
  const { result: workflowResult } = await (0, verify_email_1.default)(req.scope).run({
@@ -61,17 +69,14 @@ const POST = async (req, res) => {
61
69
  else {
62
70
  throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid verification type");
63
71
  }
64
- // When login.identifier is "both", automatically create the complementary
65
- // auth identity (phonepass <-> emailpass) so the customer can log in with
66
- // either provider without a separate registration step.
67
- await ensureComplementaryAuthIdentity(result.customer?.id ?? "", result.customer ?? {}, verifyResult.type, loginOptions.login.identifier, req.scope).catch(() => {
72
+ const customerId = customerIdFromRecord(result.customer);
73
+ await ensureComplementaryAuthIdentity(customerId, result.customer, verifyResult.type, loginOptions.login.identifier, req.scope).catch(() => {
68
74
  // Non-fatal — customer can still log in with their original provider.
69
- // The next successful OTP verification will retry.
70
75
  });
71
76
  let loginToken;
72
77
  try {
73
78
  const knex = req.scope.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
74
- const authRow = await knex.raw(`SELECT id FROM auth_identity WHERE app_metadata->>'customer_id' = ? LIMIT 1`, [result.customer?.id ?? ""]);
79
+ const authRow = await knex.raw(`SELECT id FROM auth_identity WHERE app_metadata->>'customer_id' = ? LIMIT 1`, [customerId]);
75
80
  const authIdentityId = (authRow.rows?.[0] ?? authRow[0]?.[0])?.id;
76
81
  if (authIdentityId && jwtSecret) {
77
82
  const authService = req.scope.resolve(utils_1.Modules.AUTH);
@@ -93,11 +98,6 @@ exports.POST = POST;
93
98
  * When `login.identifier` is "both", a customer who registered with one
94
99
  * provider (emailpass or phonepass) needs the complementary provider identity
95
100
  * created so both login methods work.
96
- *
97
- * Strategy: attach a new provider_identity to the EXISTING auth identity
98
- * (rather than creating a second auth identity) and copy the scrypt password
99
- * hash. Both emailpass and phonepass use the same scrypt-kdf format, so the
100
- * hash is portable between them as long as this plugin controls both providers.
101
101
  */
102
102
  async function ensureComplementaryAuthIdentity(customerId, customer, otpType, loginIdentifier, scope) {
103
103
  if (loginIdentifier !== "both")
@@ -106,19 +106,15 @@ async function ensureComplementaryAuthIdentity(customerId, customer, otpType, lo
106
106
  return;
107
107
  const knex = scope.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
108
108
  const authService = scope.resolve(utils_1.Modules.AUTH);
109
- // Find the customer's primary auth identity ID (used as the anchor for the
110
- // new provider identity).
111
109
  const authRow = await knex.raw(`SELECT id FROM auth_identity WHERE app_metadata->>'customer_id' = ? LIMIT 1`, [customerId]);
112
110
  const authIdentityId = (authRow.rows?.[0] ?? authRow[0]?.[0])?.id;
113
111
  if (!authIdentityId)
114
112
  return;
115
113
  if (otpType === otp_verification_2.OtpPurpose.PHONE_VERIFICATION && customer.phone) {
116
- // Check if phonepass provider identity already exists for this customer.
117
114
  const existing = await knex.raw(`SELECT pi.id FROM provider_identity pi
118
115
  WHERE pi.auth_identity_id = ? AND pi.provider = 'phonepass' LIMIT 1`, [authIdentityId]);
119
116
  if (existing.rows?.[0] ?? existing[0]?.[0])
120
117
  return;
121
- // Copy password hash from emailpass identity (same scrypt format).
122
118
  const hashRow = await knex.raw(`SELECT pi.provider_metadata FROM provider_identity pi
123
119
  WHERE pi.auth_identity_id = ? AND pi.provider = 'emailpass' LIMIT 1`, [authIdentityId]);
124
120
  const hash = (hashRow.rows?.[0] ?? hashRow[0]?.[0])?.provider_metadata?.password;
@@ -132,12 +128,10 @@ async function ensureComplementaryAuthIdentity(customerId, customer, otpType, lo
132
128
  });
133
129
  }
134
130
  if (otpType === otp_verification_2.OtpPurpose.EMAIL_VERIFICATION && customer.email) {
135
- // Check if emailpass provider identity already exists.
136
131
  const existing = await knex.raw(`SELECT pi.id FROM provider_identity pi
137
132
  WHERE pi.auth_identity_id = ? AND pi.provider = 'emailpass' LIMIT 1`, [authIdentityId]);
138
133
  if (existing.rows?.[0] ?? existing[0]?.[0])
139
134
  return;
140
- // Copy password hash from phonepass identity.
141
135
  const hashRow = await knex.raw(`SELECT pi.provider_metadata FROM provider_identity pi
142
136
  WHERE pi.auth_identity_id = ? AND pi.provider = 'phonepass' LIMIT 1`, [authIdentityId]);
143
137
  const hash = (hashRow.rows?.[0] ?? hashRow[0]?.[0])?.provider_metadata?.password;
@@ -151,4 +145,4 @@ async function ensureComplementaryAuthIdentity(customerId, customer, otpType, lo
151
145
  });
152
146
  }
153
147
  }
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9vdHAvdmVyaWZ5L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLHFEQUlrQztBQUNsQywyRkFBb0c7QUFDcEcsOEVBQWlGO0FBRWpGLHNHQUE0RjtBQUM1Rix5RkFBdUU7QUFDdkUseUZBQXVFO0FBQ3ZFLGtEQUc4QjtBQUV2QixNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDcEUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFHM0IsQ0FBQTtJQUVELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG1CQUFtQixDQUNwQixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHNCQUFzQixDQUN2QixDQUFBO0lBQ0gsQ0FBQztJQUVELDhCQUE4QjtJQUM5QixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDbEMsMENBQXVCLENBQ0UsQ0FBQTtJQUUzQiw2QkFBNkI7SUFDN0IsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDekUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUE7SUFDckMsTUFBTSxTQUFTLEdBQUksSUFBSSxFQUFFLFNBQWdDLElBQUksYUFBYSxDQUFBO0lBRTFFLGFBQWE7SUFDYixNQUFNLFlB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
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9vdHAvdmVyaWZ5L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLHFEQUlrQztBQUNsQywyRkFBb0c7QUFDcEcsOEVBQWlGO0FBRWpGLHNHQUE0RjtBQUM1Rix5RkFBdUU7QUFDdkUseUZBQXVFO0FBQ3ZFLGtEQUc4QjtBQUM5Qix5RkFBaUY7QUFDakYseUZBQWlGO0FBQ2pGLG1GQUE0RTtBQVM1RSxTQUFTLG9CQUFvQixDQUFDLFFBQWlDO0lBQzdELE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUE7SUFDdEIsT0FBTyxPQUFPLEVBQUUsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0FBQ3pDLENBQUM7QUFFTSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDcEUsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FNM0IsQ0FBQTtJQUVELE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFBO0lBRTVCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLG1CQUFtQixDQUNwQixDQUFBO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHNCQUFzQixDQUN2QixDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlD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
@@ -5,6 +5,7 @@ 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
7
  const is_social_pending_customer_registration_1 = require("./shared/is-social-pending-customer-registration");
8
+ const create_phone_only_customer_1 = require("./shared/create-phone-only-customer");
8
9
  const referral_code_1 = require("./shared/referral-code");
9
10
  /** Medusa / Knex raw results may use `rows` (node-pg) or `result[0]` batch shape. */
10
11
  function firstKnexRow(result) {
@@ -98,25 +99,20 @@ const POST = async (req, res) => {
98
99
  const customer = await refetchCustomer(result.id, req.scope);
99
100
  return res.status(200).json({ customer });
100
101
  }
101
- // "phone": create customer without email validation.
102
- const customerService = req.scope.resolve(utils_1.Modules.CUSTOMER);
103
- const [customer] = await customerService.createCustomers([
104
- {
105
- ...customerDataForCreate,
106
- phone: phoneNormalized,
107
- has_account: !!authIdentityId,
108
- },
109
- ]);
110
- // Link the auth identity to the new customer (same as setAuthAppMetadataStep)
102
+ const created = await (0, create_phone_only_customer_1.createPhoneOnlyCustomer)(req.scope, {
103
+ ...customerDataForCreate,
104
+ phone: phoneNormalized,
105
+ has_account: !!authIdentityId,
106
+ });
111
107
  if (authIdentityId) {
112
108
  const authService = req.scope.resolve(utils_1.Modules.AUTH);
113
109
  await authService.updateAuthIdentities({
114
110
  id: authIdentityId,
115
- app_metadata: { customer_id: customer.id },
111
+ app_metadata: { customer_id: created.id },
116
112
  });
117
113
  }
118
- await (0, referral_code_1.maybeCreateReferralLinkFromRequest)(req, customer.id);
119
- const fullCustomer = await refetchCustomer(customer.id, req.scope);
114
+ await (0, referral_code_1.maybeCreateReferralLinkFromRequest)(req, created.id);
115
+ const fullCustomer = await refetchCustomer(created.id, req.scope);
120
116
  return res.status(200).json({ customer: fullCustomer });
121
117
  };
122
118
  exports.POST = POST;
@@ -140,4 +136,4 @@ async function refetchCustomer(customerId, scope) {
140
136
  const customers = await remoteQuery(queryObject);
141
137
  return customers[0];
142
138
  }
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSxxREFLa0M7QUFDbEMscURBQW9FO0FBQ3BFLDRDQUd3QjtBQUN4Qiw4R0FBc0c7QUFDdEcsMERBRytCO0FBRS9CLHFGQUFxRjtBQUNyRixTQUFTLFlBQVksQ0FDbkIsTUFBbUM7SUFFbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLElBQUksUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN6RSxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN0QixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEUsT0FBTyxLQUFVLENBQUE7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDcEUsTUFBTSxXQUFXLEdBQ2YsR0FHRCxDQUFDLFlBQVksQ0FBQTtJQUVkLElBQUksV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDO1FBQzFCLE1BQU0s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
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxxREFLa0M7QUFDbEMscURBQW9FO0FBQ3BFLDRDQUd3QjtBQUN4Qiw4R0FBc0c7QUFDdEcsb0ZBQTZFO0FBQzdFLDBEQUcrQjtBQUUvQixxRkFBcUY7QUFDckYsU0FBUyxZQUFZLENBQ25CLE1BQW1DO0lBRW5DLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQyxJQUFJLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDekUsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN2QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdEIsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hFLE9BQU8sS0FBVSxDQUFBO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxTQUFTLENBQUE7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0ksTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ3BFLE1BQU0sV0FBVyxHQUNmLEdBR0QsQ0FBQyxZQUFZLENBQUE7SUFFZCxJQUFJLFdBQVcsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qiw4Q0FBOEMsQ0FDL0MsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMvRSxNQUFNLE9BQU8sR0FBRyxJQUFBLDJDQUFrQyxFQUFDLFlBQWlDLENBQUMsQ0FBQTtJQUNyRixNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQTtJQUUzQyxNQUFNLGNBQWMsR0FBRyxXQUFXLEVBQUUsZ0JBQWdCLENBQUE7SUFDcEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBNEIsQ0FBQTtJQUNoRSw2RUFBNkU7SUFDN0UsMkVBQTJFO0lBQzNFLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFBO0lBQ2pELE9BQU8scUJBQXFCLENBQUMsYUFBYSxDQUFBO0lBQzFDLDhGQUE4RjtJQUM5RixJQUNFLHFCQUFxQixDQUFDLFFBQVE7UUFDOUIsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEtBQUssUUFBUTtRQUNsRCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEVBQzlDLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRztZQUNmLEdBQUkscUJBQXFCLENBQUMsUUFBb0M7U0FDL0QsQ0FBQTtRQUNELE9BQU8sUUFBUSxDQUFDLGFBQWEsQ0FBQTtRQUM3QixxQkFBcUIsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO0lBQzNDLENBQUM7SUFFRCxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUEsNkVBQW1DLEVBQzdELEdBQUcsQ0FBQyxLQUFLLEVBQ1QsY0FBYyxDQUNmLENBQUE7SUFFRCxNQUFNLGVBQWUsR0FDbkIsWUFBWSxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1FBQ3BFLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRTtRQUNuQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRVIsTUFBTSxJQUFBLGdEQUFnQyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRTNDLElBQUksVUFBVSxLQUFLLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUM1QyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLDBDQUE2QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDcEUsS0FBSyxFQUFFO2dCQUNMLDhEQUE4RDtnQkFDOUQsWUFBWSxFQUFFLHFCQUE0QjtnQkFDMUMsY0FBYyxFQUFFLGNBQWMsSUFBSSxFQUFFO2FBQ3JDO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsTUFBTSxJQUFBLGtEQUFrQyxFQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDeEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDNUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsb0NBQW9DLENBQ3JDLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDdkUsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQ3pDLHdFQUF3RSxFQUN4RSxDQUFDLGVBQWUsQ0FBQyxDQUNsQixDQUFBO0lBQ0QsSUFBSSxZQUFZLENBQWtCLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDNUQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFDakMsMERBQTBELENBQzNELENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDMUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSwwQ0FBNkIsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3BFLEtBQUssRUFBRTtnQkFDTCw4REFBOEQ7Z0JBQzlELFlBQVksRUFBRSxFQUFFLEdBQUkscUJBQWdDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBUztnQkFDckYsY0FBYyxFQUFFLGNBQWMsSUFBSSxFQUFFO2FBQ3JDO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsTUFBTSxJQUFBLGtEQUFrQyxFQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDeEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDNUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDM0MsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBQSxvREFBdUIsRUFBQyxHQUFHLENBQUMsS0FBSyxFQUFFO1FBQ3ZELEdBQUkscUJBQWdDO1FBQ3BDLEtBQUssRUFBRSxlQUFlO1FBQ3RCLFdBQVcsRUFBRSxDQUFDLENBQUMsY0FBYztLQUM5QixDQUFDLENBQUE7SUFFRixJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQ25CLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNuRCxNQUFNLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztZQUNyQyxFQUFFLEVBQUUsY0FBYztZQUNsQixZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLEVBQUUsRUFBRTtTQUMxQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsTUFBTSxJQUFBLGtEQUFrQyxFQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDekQsTUFBTSxZQUFZLEdBQUcsTUFBTSxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDakUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFBO0FBQ3pELENBQUMsQ0FBQTtBQWxIWSxRQUFBLElBQUksUUFrSGhCO0FBRUQsS0FBSyxVQUFVLGVBQWUsQ0FBQyxVQUFrQixFQUFFLEtBQXNCO0lBQ3ZFLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDekUsTUFBTSxXQUFXLEdBQUcsSUFBQSxtQ0FBMkIsRUFBQztRQUM5QyxVQUFVLEVBQUUsVUFBVTtRQUN0QixTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUU7UUFDMUMsTUFBTSxFQUFFO1lBQ04sSUFBSTtZQUNKLE9BQU87WUFDUCxZQUFZO1lBQ1osV0FBVztZQUNYLE9BQU87WUFDUCxhQUFhO1lBQ2IsVUFBVTtZQUNWLFlBQVk7WUFDWixZQUFZO1NBQ2I7S0FDRixDQUFDLENBQUE7SUFDRixNQUFNLFNBQVMsR0FBRyxNQUFNLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUNoRCxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNyQixDQUFDIn0=
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ const vitest_1 = require("vitest");
5
+ const create_phone_only_customer_1 = require("../create-phone-only-customer");
6
+ (0, vitest_1.describe)("createPhoneOnlyCustomer table-driven tests", () => {
7
+ const cases = [
8
+ {
9
+ title: "rejects empty phone",
10
+ input: { phone: " " },
11
+ shouldThrow: true,
12
+ errorType: utils_1.MedusaError.Types.INVALID_DATA,
13
+ errorMessage: "Phone is required",
14
+ },
15
+ {
16
+ title: "rejects duplicate registered phone",
17
+ input: { phone: "+15551234567", has_account: true },
18
+ existingAccountId: "cus_existing",
19
+ shouldThrow: true,
20
+ errorType: utils_1.MedusaError.Types.DUPLICATE_ERROR,
21
+ },
22
+ {
23
+ title: "creates customer with phone only",
24
+ input: { phone: "+15559876543", has_account: true, first_name: "A" },
25
+ createdId: "cus_new",
26
+ shouldThrow: false,
27
+ },
28
+ ];
29
+ vitest_1.it.each(cases)("$title", async ({ input, existingAccountId, createdId, shouldThrow, errorType, errorMessage, }) => {
30
+ const createCustomers = vitest_1.vi.fn().mockResolvedValue([
31
+ { id: createdId ?? "cus_new", phone: input.phone },
32
+ ]);
33
+ const scope = {
34
+ resolve: (token) => {
35
+ if (String(token).includes("pg_connection")) {
36
+ return {
37
+ raw: vitest_1.vi.fn().mockResolvedValue({
38
+ rows: existingAccountId ? [{ id: existingAccountId }] : [],
39
+ }),
40
+ };
41
+ }
42
+ if (String(token).includes("customer")) {
43
+ return { createCustomers };
44
+ }
45
+ return undefined;
46
+ },
47
+ };
48
+ const exec = () => (0, create_phone_only_customer_1.createPhoneOnlyCustomer)(scope, input);
49
+ if (shouldThrow) {
50
+ await (0, vitest_1.expect)(exec()).rejects.toMatchObject({ type: errorType });
51
+ if (errorMessage) {
52
+ await (0, vitest_1.expect)(exec()).rejects.toThrow(errorMessage);
53
+ }
54
+ return;
55
+ }
56
+ const customer = await exec();
57
+ (0, vitest_1.expect)(customer.id).toBe(createdId);
58
+ (0, vitest_1.expect)(createCustomers).toHaveBeenCalledWith([
59
+ vitest_1.expect.objectContaining({
60
+ phone: input.phone,
61
+ has_account: true,
62
+ first_name: "A",
63
+ }),
64
+ ]);
65
+ });
66
+ });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXBob25lLW9ubHktY3VzdG9tZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvY3VzdG9tZXJzL3NoYXJlZC9fX3Rlc3RzX18vY3JlYXRlLXBob25lLW9ubHktY3VzdG9tZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUF1RDtBQUN2RCxtQ0FBaUQ7QUFDakQsOEVBQXVFO0FBWXZFLElBQUEsaUJBQVEsRUFBQyw0Q0FBNEMsRUFBRSxHQUFHLEVBQUU7SUFDMUQsTUFBTSxLQUFLLEdBQXNDO1FBQy9DO1lBQ0UsS0FBSyxFQUFFLHFCQUFxQjtZQUM1QixLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQ3ZCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFNBQVMsRUFBRSxtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZO1lBQ3pDLFlBQVksRUFBRSxtQkFBbUI7U0FDbEM7UUFDRDtZQUNFLEtBQUssRUFBRSxvQ0FBb0M7WUFDM0MsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO1lBQ25ELGlCQUFpQixFQUFFLGNBQWM7WUFDakMsV0FBVyxFQUFFLElBQUk7WUFDakIsU0FBUyxFQUFFLG1CQUFXLENBQUMsS0FBSyxDQUFDLGVBQWU7U0FDN0M7UUFDRDtZQUNFLEtBQUssRUFBRSxrQ0FBa0M7WUFDekMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUU7WUFDcEUsU0FBUyxFQUFFLFNBQVM7WUFDcEIsV0FBVyxFQUFFLEtBQUs7U0FDbkI7S0FDRixDQUFBO0lBRUQsV0FBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FDWixRQUFRLEVBQ1IsS0FBSyxFQUFFLEVBQ0wsS0FBSyxFQUNMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEdBQ2IsRUFBRSxFQUFFO1FBQ0gsTUFBTSxlQUFlLEdBQUcsV0FBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQ2hELEVBQUUsRUFBRSxFQUFFLFNBQVMsSUFBSSxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUU7U0FDbkQsQ0FBQyxDQUFBO1FBRUYsTUFBTSxLQUFLLEdBQUc7WUFDWixPQUFPLEVBQUUsQ0FBQyxLQUFjLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7b0JBQzVDLE9BQU87d0JBQ0wsR0FBRyxFQUFFLFdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQzs0QkFDN0IsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTt5QkFDM0QsQ0FBQztxQkFDSCxDQUFBO2dCQUNILENBQUM7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3ZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQTtnQkFDNUIsQ0FBQztnQkFDRCxPQUFPLFNBQVMsQ0FBQTtZQUNsQixDQUFDO1NBQ0YsQ0FBQTtRQUVELE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUNoQixJQUFBLG9EQUF1QixFQUFDLEtBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUVoRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBQSxlQUFNLEVBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7WUFDL0QsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxJQUFBLGVBQU0sRUFBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDcEQsQ0FBQztZQUNELE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQTtRQUM3QixJQUFBLGVBQU0sRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ25DLElBQUEsZUFBTSxFQUFDLGVBQWUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO1lBQzNDLGVBQU0sQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO2dCQUNsQixXQUFXLEVBQUUsSUFBSTtnQkFDakIsVUFBVSxFQUFFLEdBQUc7YUFDaEIsQ0FBQztTQUNILENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FDRixDQUFBO0FBQ0gsQ0FBQyxDQUFDLENBQUEifQ==