customer-registration 0.0.130 → 0.0.133
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/store/customers/otp/shared/auth-identity-helpers.js +71 -0
- package/.medusa/server/src/utils/email-branding.js +3 -2
- package/.medusa/server/src/workflows/steps/__tests__/resolve-or-create-otp-auth-customer-step.test.js +197 -0
- package/.medusa/server/src/workflows/steps/resolve-or-create-email-auth-customer-step.js +10 -2
- package/.medusa/server/src/workflows/steps/resolve-or-create-phone-auth-customer-step.js +10 -2
- package/README.md +2 -0
- package/package.json +3 -3
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findAuthIdentityIdByCustomerId = findAuthIdentityIdByCustomerId;
|
|
4
|
+
exports.ensureProviderIdentity = ensureProviderIdentity;
|
|
5
|
+
exports.resolveCrossChannelOtpAuthIdentity = resolveCrossChannelOtpAuthIdentity;
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const config_1 = require("../../../../../config");
|
|
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
|
+
async function findAuthIdentityIdByCustomerId(scope, customerId) {
|
|
23
|
+
const knex = scope.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
|
|
24
|
+
const result = await knex.raw(`SELECT id FROM auth_identity WHERE app_metadata->>'customer_id' = ? LIMIT 1`, [customerId]);
|
|
25
|
+
const row = firstKnexRow(result);
|
|
26
|
+
return row?.id ?? null;
|
|
27
|
+
}
|
|
28
|
+
async function ensureProviderIdentity(scope, input) {
|
|
29
|
+
const knex = scope.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION);
|
|
30
|
+
const authService = scope.resolve(utils_1.Modules.AUTH);
|
|
31
|
+
const existing = await knex.raw(`SELECT pi.id FROM provider_identity pi
|
|
32
|
+
WHERE pi.auth_identity_id = ? AND pi.provider = ? LIMIT 1`, [input.authIdentityId, input.provider]);
|
|
33
|
+
if (firstKnexRow(existing)?.id) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
await authService.createProviderIdentities({
|
|
37
|
+
auth_identity_id: input.authIdentityId,
|
|
38
|
+
provider: input.provider,
|
|
39
|
+
entity_id: input.entityId,
|
|
40
|
+
provider_metadata: input.providerMetadata ?? {},
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function loginAllowsOtpProvider(loginIdentifier, provider) {
|
|
44
|
+
if (provider === "phoneotp") {
|
|
45
|
+
return loginIdentifier === "phone" || loginIdentifier === "both";
|
|
46
|
+
}
|
|
47
|
+
return loginIdentifier === "email" || loginIdentifier === "both";
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* When an existing customer has no OTP provider for the login channel, attach
|
|
51
|
+
* phoneotp/emailotp to their existing auth identity (from password registration).
|
|
52
|
+
*/
|
|
53
|
+
async function resolveCrossChannelOtpAuthIdentity(scope, params) {
|
|
54
|
+
const configModule = scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
|
|
55
|
+
const options = (0, config_1.resolveCustomerRegistrationOptions)(configModule);
|
|
56
|
+
if (!loginAllowsOtpProvider(options.login.identifier, params.provider)) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
const existingAuthId = await findAuthIdentityIdByCustomerId(scope, params.customerId);
|
|
60
|
+
if (!existingAuthId) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
await ensureProviderIdentity(scope, {
|
|
64
|
+
authIdentityId: existingAuthId,
|
|
65
|
+
provider: params.provider,
|
|
66
|
+
entityId: params.entityId,
|
|
67
|
+
providerMetadata: {},
|
|
68
|
+
});
|
|
69
|
+
return existingAuthId;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1pZGVudGl0eS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9zdG9yZS9jdXN0b21lcnMvb3RwL3NoYXJlZC9hdXRoLWlkZW50aXR5LWhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEyQkEsd0VBa0JDO0FBU0Qsd0RBbUNDO0FBa0JELGdGQWlDQztBQTNJRCxxREFHa0M7QUFDbEMsa0RBRzhCO0FBRTlCLFNBQVMsWUFBWSxDQUNuQixNQUFtQztJQUVuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakMsSUFBSSxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3pFLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxPQUFPLEtBQVUsQ0FBQTtRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFTSxLQUFLLFVBQVUsOEJBQThCLENBQ2xELEtBQXNCLEVBQ3RCLFVBQWtCO0lBRWxCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUtqRSxDQUFBO0lBRUQsTUFBTSxNQUFNLEdB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
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withEmailBranding = exports.getEmailBrandingFromDynamicConfig = void 0;
|
|
3
|
+
exports.withEmailBranding = exports.getEmailBrandingFromDynamicConfig = exports.resolveEmailLogoUrl = void 0;
|
|
4
4
|
var email_branding_1 = require("medusa-plugin-dynamic-config/utils/email-branding");
|
|
5
|
+
Object.defineProperty(exports, "resolveEmailLogoUrl", { enumerable: true, get: function () { return email_branding_1.resolveEmailLogoUrl; } });
|
|
5
6
|
Object.defineProperty(exports, "getEmailBrandingFromDynamicConfig", { enumerable: true, get: function () { return email_branding_1.getEmailBrandingFromDynamicConfig; } });
|
|
6
7
|
Object.defineProperty(exports, "withEmailBranding", { enumerable: true, get: function () { return email_branding_1.withEmailBranding; } });
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtYnJhbmRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvZW1haWwtYnJhbmRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0ZBSzBEO0FBSHhELHFIQUFBLG1CQUFtQixPQUFBO0FBQ25CLG1JQUFBLGlDQUFpQyxPQUFBO0FBQ2pDLG1IQUFBLGlCQUFpQixPQUFBIn0=
|
|
@@ -0,0 +1,197 @@
|
|
|
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 auth_identity_helpers_1 = require("../../../api/store/customers/otp/shared/auth-identity-helpers");
|
|
6
|
+
vitest_1.vi.mock("../../../config", () => ({
|
|
7
|
+
resolveCustomerRegistrationOptions: vitest_1.vi.fn(() => ({
|
|
8
|
+
login: { identifier: "both" },
|
|
9
|
+
registration: { identifier: "both", require_verification: true },
|
|
10
|
+
auth: {
|
|
11
|
+
email: { methods: ["otp"] },
|
|
12
|
+
phone: { methods: ["otp"] },
|
|
13
|
+
},
|
|
14
|
+
})),
|
|
15
|
+
}));
|
|
16
|
+
const config_1 = require("../../../config");
|
|
17
|
+
const mockedResolveOptions = vitest_1.vi.mocked(config_1.resolveCustomerRegistrationOptions);
|
|
18
|
+
(0, vitest_1.describe)("auth-identity-helpers table-driven tests", () => {
|
|
19
|
+
const createProviderIdentities = vitest_1.vi.fn().mockResolvedValue(undefined);
|
|
20
|
+
(0, vitest_1.beforeEach)(() => {
|
|
21
|
+
vitest_1.vi.clearAllMocks();
|
|
22
|
+
createProviderIdentities.mockClear();
|
|
23
|
+
});
|
|
24
|
+
const helperCases = [
|
|
25
|
+
{
|
|
26
|
+
title: "creates phoneotp when login.identifier is both",
|
|
27
|
+
loginIdentifier: "both",
|
|
28
|
+
customerId: "cus_1",
|
|
29
|
+
provider: "phoneotp",
|
|
30
|
+
entityId: "+15551234567",
|
|
31
|
+
authIdentityId: "auth_1",
|
|
32
|
+
existingProvider: false,
|
|
33
|
+
expected: "auth_1",
|
|
34
|
+
shouldCreateProvider: true,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
title: "creates phoneotp when login.identifier is phone",
|
|
38
|
+
loginIdentifier: "phone",
|
|
39
|
+
customerId: "cus_1",
|
|
40
|
+
provider: "phoneotp",
|
|
41
|
+
entityId: "+15551234567",
|
|
42
|
+
authIdentityId: "auth_1",
|
|
43
|
+
existingProvider: false,
|
|
44
|
+
expected: "auth_1",
|
|
45
|
+
shouldCreateProvider: true,
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
title: "skips phoneotp when login.identifier is email",
|
|
49
|
+
loginIdentifier: "email",
|
|
50
|
+
customerId: "cus_1",
|
|
51
|
+
provider: "phoneotp",
|
|
52
|
+
entityId: "+15551234567",
|
|
53
|
+
authIdentityId: "auth_1",
|
|
54
|
+
existingProvider: false,
|
|
55
|
+
expected: null,
|
|
56
|
+
shouldCreateProvider: false,
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
title: "creates emailotp when login.identifier is both",
|
|
60
|
+
loginIdentifier: "both",
|
|
61
|
+
customerId: "cus_2",
|
|
62
|
+
provider: "emailotp",
|
|
63
|
+
entityId: "user@example.com",
|
|
64
|
+
authIdentityId: "auth_2",
|
|
65
|
+
existingProvider: false,
|
|
66
|
+
expected: "auth_2",
|
|
67
|
+
shouldCreateProvider: true,
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
title: "creates emailotp when login.identifier is email",
|
|
71
|
+
loginIdentifier: "email",
|
|
72
|
+
customerId: "cus_2",
|
|
73
|
+
provider: "emailotp",
|
|
74
|
+
entityId: "user@example.com",
|
|
75
|
+
authIdentityId: "auth_2",
|
|
76
|
+
existingProvider: false,
|
|
77
|
+
expected: "auth_2",
|
|
78
|
+
shouldCreateProvider: true,
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
title: "skips emailotp when login.identifier is phone",
|
|
82
|
+
loginIdentifier: "phone",
|
|
83
|
+
customerId: "cus_2",
|
|
84
|
+
provider: "emailotp",
|
|
85
|
+
entityId: "user@example.com",
|
|
86
|
+
authIdentityId: "auth_2",
|
|
87
|
+
existingProvider: false,
|
|
88
|
+
expected: null,
|
|
89
|
+
shouldCreateProvider: false,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
title: "skips create when provider already exists",
|
|
93
|
+
loginIdentifier: "both",
|
|
94
|
+
customerId: "cus_1",
|
|
95
|
+
provider: "phoneotp",
|
|
96
|
+
entityId: "+15551234567",
|
|
97
|
+
authIdentityId: "auth_1",
|
|
98
|
+
existingProvider: true,
|
|
99
|
+
expected: "auth_1",
|
|
100
|
+
shouldCreateProvider: false,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
title: "returns null when no auth identity linked to customer",
|
|
104
|
+
loginIdentifier: "both",
|
|
105
|
+
customerId: "cus_missing",
|
|
106
|
+
provider: "phoneotp",
|
|
107
|
+
entityId: "+15551234567",
|
|
108
|
+
authIdentityId: null,
|
|
109
|
+
existingProvider: false,
|
|
110
|
+
expected: null,
|
|
111
|
+
shouldCreateProvider: false,
|
|
112
|
+
},
|
|
113
|
+
];
|
|
114
|
+
vitest_1.it.each(helperCases)("$title", async ({ loginIdentifier, customerId, provider, entityId, authIdentityId, existingProvider, expected, shouldCreateProvider, }) => {
|
|
115
|
+
mockedResolveOptions.mockReturnValue({
|
|
116
|
+
login: { identifier: loginIdentifier },
|
|
117
|
+
registration: { identifier: "both", require_verification: true },
|
|
118
|
+
auth: {
|
|
119
|
+
email: { methods: ["otp"] },
|
|
120
|
+
phone: { methods: ["otp"] },
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
const raw = vitest_1.vi
|
|
124
|
+
.fn()
|
|
125
|
+
.mockResolvedValueOnce({
|
|
126
|
+
rows: authIdentityId ? [{ id: authIdentityId }] : [],
|
|
127
|
+
})
|
|
128
|
+
.mockResolvedValueOnce({
|
|
129
|
+
rows: existingProvider ? [{ id: "pi_existing" }] : [],
|
|
130
|
+
});
|
|
131
|
+
const scope = {
|
|
132
|
+
resolve: (token) => {
|
|
133
|
+
if (token === utils_1.ContainerRegistrationKeys.CONFIG_MODULE) {
|
|
134
|
+
return {};
|
|
135
|
+
}
|
|
136
|
+
if (token === utils_1.ContainerRegistrationKeys.PG_CONNECTION) {
|
|
137
|
+
return { raw };
|
|
138
|
+
}
|
|
139
|
+
if (token === utils_1.Modules.AUTH) {
|
|
140
|
+
return { createProviderIdentities };
|
|
141
|
+
}
|
|
142
|
+
return undefined;
|
|
143
|
+
},
|
|
144
|
+
};
|
|
145
|
+
const result = await (0, auth_identity_helpers_1.resolveCrossChannelOtpAuthIdentity)(scope, {
|
|
146
|
+
customerId,
|
|
147
|
+
entityId,
|
|
148
|
+
provider,
|
|
149
|
+
});
|
|
150
|
+
(0, vitest_1.expect)(result).toBe(expected);
|
|
151
|
+
if (shouldCreateProvider) {
|
|
152
|
+
(0, vitest_1.expect)(createProviderIdentities).toHaveBeenCalledWith({
|
|
153
|
+
auth_identity_id: authIdentityId,
|
|
154
|
+
provider,
|
|
155
|
+
entity_id: entityId,
|
|
156
|
+
provider_metadata: {},
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
(0, vitest_1.expect)(createProviderIdentities).not.toHaveBeenCalled();
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
(0, vitest_1.it)("findAuthIdentityIdByCustomerId returns linked auth identity id", async () => {
|
|
164
|
+
const raw = vitest_1.vi.fn().mockResolvedValue({ rows: [{ id: "auth_linked" }] });
|
|
165
|
+
const scope = {
|
|
166
|
+
resolve: (token) => {
|
|
167
|
+
if (token === utils_1.ContainerRegistrationKeys.PG_CONNECTION) {
|
|
168
|
+
return { raw };
|
|
169
|
+
}
|
|
170
|
+
return undefined;
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
const id = await (0, auth_identity_helpers_1.findAuthIdentityIdByCustomerId)(scope, "cus_1");
|
|
174
|
+
(0, vitest_1.expect)(id).toBe("auth_linked");
|
|
175
|
+
});
|
|
176
|
+
(0, vitest_1.it)("ensureProviderIdentity skips when provider already exists", async () => {
|
|
177
|
+
const raw = vitest_1.vi.fn().mockResolvedValue({ rows: [{ id: "pi_1" }] });
|
|
178
|
+
const scope = {
|
|
179
|
+
resolve: (token) => {
|
|
180
|
+
if (token === utils_1.ContainerRegistrationKeys.PG_CONNECTION) {
|
|
181
|
+
return { raw };
|
|
182
|
+
}
|
|
183
|
+
if (token === utils_1.Modules.AUTH) {
|
|
184
|
+
return { createProviderIdentities };
|
|
185
|
+
}
|
|
186
|
+
return undefined;
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
await (0, auth_identity_helpers_1.ensureProviderIdentity)(scope, {
|
|
190
|
+
authIdentityId: "auth_1",
|
|
191
|
+
provider: "phoneotp",
|
|
192
|
+
entityId: "+15551234567",
|
|
193
|
+
});
|
|
194
|
+
(0, vitest_1.expect)(createProviderIdentities).not.toHaveBeenCalled();
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1vci1jcmVhdGUtb3RwLWF1dGgtY3VzdG9tZXItc3RlcC50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9fX3Rlc3RzX18vcmVzb2x2ZS1vci1jcmVhdGUtb3RwLWF1dGgtY3VzdG9tZXItc3RlcC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscURBQThFO0FBQzlFLG1DQUE2RDtBQUM3RCx5R0FJc0U7QUFFdEUsV0FBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLGtDQUFrQyxFQUFFLFdBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMvQyxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO1FBQzdCLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFO1FBQ2hFLElBQUksRUFBRTtZQUNKLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzNCLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1NBQzVCO0tBQ0YsQ0FBQyxDQUFDO0NBQ0osQ0FBQyxDQUFDLENBQUE7QUFFSCw0Q0FBb0U7QUFFcEUsTUFBTSxvQkFBb0IsR0FBRyxXQUFFLENBQUMsTUFBTSxDQUFDLDJDQUFrQyxDQUFDLENBQUE7QUFjMUUsSUFBQSxpQkFBUSxFQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtJQUN4RCxNQUFNLHdCQUF3QixHQUFHLFdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUVyRSxJQUFBLG1CQUFVLEVBQUMsR0FBRyxFQUFFO1FBQ2QsV0FBRSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ2xCLHdC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
|
|
@@ -4,6 +4,7 @@ exports.resolveOrCreateEmailAuthCustomerStep = void 0;
|
|
|
4
4
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
6
|
const core_flows_1 = require("@medusajs/core-flows");
|
|
7
|
+
const auth_identity_helpers_1 = require("../../api/store/customers/otp/shared/auth-identity-helpers");
|
|
7
8
|
const email_auth_helpers_1 = require("../../api/store/customers/otp/shared/email-auth-helpers");
|
|
8
9
|
const otp_verification_1 = require("../../modules/otp-verification");
|
|
9
10
|
exports.resolveOrCreateEmailAuthCustomerStep = (0, workflows_sdk_1.createStep)("resolve-or-create-email-auth-customer", async (input, stepContext) => {
|
|
@@ -40,7 +41,14 @@ exports.resolveOrCreateEmailAuthCustomerStep = (0, workflows_sdk_1.createStep)("
|
|
|
40
41
|
};
|
|
41
42
|
// Existing registered account — log in via existing auth identity
|
|
42
43
|
if (existingCustomer?.has_account) {
|
|
43
|
-
|
|
44
|
+
let authIdentityId = await (0, email_auth_helpers_1.findAuthIdentityIdByEmail)(container, normalizedEmail);
|
|
45
|
+
if (!authIdentityId) {
|
|
46
|
+
authIdentityId = await (0, auth_identity_helpers_1.resolveCrossChannelOtpAuthIdentity)(container, {
|
|
47
|
+
customerId: existingCustomer.id,
|
|
48
|
+
entityId: normalizedEmail,
|
|
49
|
+
provider: "emailotp",
|
|
50
|
+
});
|
|
51
|
+
}
|
|
44
52
|
if (!authIdentityId) {
|
|
45
53
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "No authentication identity found for this email");
|
|
46
54
|
}
|
|
@@ -122,4 +130,4 @@ exports.resolveOrCreateEmailAuthCustomerStep = (0, workflows_sdk_1.createStep)("
|
|
|
122
130
|
is_new_user: isNewUser,
|
|
123
131
|
});
|
|
124
132
|
});
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1vci1jcmVhdGUtZW1haWwtYXV0aC1jdXN0b21lci1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9yZXNvbHZlLW9yLWNyZWF0ZS1lbWFpbC1hdXRoLWN1c3RvbWVyLXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTRFO0FBRTVFLHFEQUtrQztBQUNsQyxxREFBb0U7QUFDcEUsc0dBQStHO0FBQy9HLGdHQUtnRTtBQUNoRSxxRUFBd0U7QUFnQjNELFFBQUEsb0NBQW9DLEdBQUcsSUFBQSwwQkFBVSxFQUM1RCx1Q0FBdUMsRUFDdkMsS0FBSyxFQUFFLEtBQW9DLEVBQUUsV0FBVyxFQUFFLEVBQUU7SUFDMUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFdBQVcsQ0FBQTtJQUNqQyxNQUFNLGVBQWUsR0FBRyxJQUFBLHVDQUFrQixFQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN2RCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNsQywwQ0FBdUIsQ0FDeEIsQ0FBQTtJQUNELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLElBQUksQ0FjakQsQ0FBQTtJQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFBLDBDQUFxQixFQUNsRCxTQUFTLEVBQ1QsZUFBZSxDQUNoQixDQUFBO0lBRUQsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQzlCLGNBQXNCLEVBQ3RCLFVBQWtCLEVBQ2xCLEVBQUU7UUFDRixNQUFNLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztZQUNyQyxFQUFFLEVBQUUsY0FBYztZQUNsQixZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFO1NBQzFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQTtJQUVELE1BQU0sZUFBZSxHQUFHLEtBQUssRUFBRSxVQUFrQixFQUFF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
|
|
@@ -4,6 +4,7 @@ exports.resolveOrCreatePhoneAuthCustomerStep = void 0;
|
|
|
4
4
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
5
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
6
|
const create_phone_only_customer_1 = require("../../api/store/customers/shared/create-phone-only-customer");
|
|
7
|
+
const auth_identity_helpers_1 = require("../../api/store/customers/otp/shared/auth-identity-helpers");
|
|
7
8
|
const phone_auth_helpers_1 = require("../../api/store/customers/otp/shared/phone-auth-helpers");
|
|
8
9
|
const otp_verification_1 = require("../../modules/otp-verification");
|
|
9
10
|
exports.resolveOrCreatePhoneAuthCustomerStep = (0, workflows_sdk_1.createStep)("resolve-or-create-phone-auth-customer", async (input, stepContext) => {
|
|
@@ -39,7 +40,14 @@ exports.resolveOrCreatePhoneAuthCustomerStep = (0, workflows_sdk_1.createStep)("
|
|
|
39
40
|
return customers[0];
|
|
40
41
|
};
|
|
41
42
|
if (existingCustomer?.has_account) {
|
|
42
|
-
|
|
43
|
+
let authIdentityId = await (0, phone_auth_helpers_1.findAuthIdentityIdByPhone)(container, normalizedPhone);
|
|
44
|
+
if (!authIdentityId) {
|
|
45
|
+
authIdentityId = await (0, auth_identity_helpers_1.resolveCrossChannelOtpAuthIdentity)(container, {
|
|
46
|
+
customerId: existingCustomer.id,
|
|
47
|
+
entityId: normalizedPhone,
|
|
48
|
+
provider: "phoneotp",
|
|
49
|
+
});
|
|
50
|
+
}
|
|
43
51
|
if (!authIdentityId) {
|
|
44
52
|
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "No authentication identity found for this phone");
|
|
45
53
|
}
|
|
@@ -109,4 +117,4 @@ exports.resolveOrCreatePhoneAuthCustomerStep = (0, workflows_sdk_1.createStep)("
|
|
|
109
117
|
is_new_user: isNewUser,
|
|
110
118
|
});
|
|
111
119
|
});
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS1vci1jcmVhdGUtcGhvbmUtYXV0aC1jdXN0b21lci1zdGVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9yZXNvbHZlLW9yLWNyZWF0ZS1waG9uZS1hdXRoLWN1c3RvbWVyLXN0ZXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTRFO0FBRTVFLHFEQUtrQztBQUNsQyw0R0FHb0U7QUFDcEUsc0dBQStHO0FBQy9HLGdHQUtnRTtBQUNoRSxxRUFBd0U7QUFnQjNELFFBQUEsb0NBQW9DLEdBQUcsSUFBQSwwQkFBVSxFQUM1RCx1Q0FBdUMsRUFDdkMsS0FBSyxFQUFFLEtBQW9DLEVBQUUsV0FBVyxFQUFFLEVBQUU7SUFDMUQsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLFdBQVcsQ0FBQTtJQUNqQyxNQUFNLGVBQWUsR0FBRyxJQUFBLHVDQUFrQixFQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUV2RCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUNsQywwQ0FBdUIsQ0FDeEIsQ0FBQTtJQUNELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLElBQUksQ0FjakQsQ0FBQTtJQUVELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxJQUFBLDBDQUFxQixFQUNsRCxTQUFTLEVBQ1QsZUFBZSxDQUNoQixDQUFBO0lBRUQsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQzlCLGNBQXNCLEVBQ3RCLFVBQWtCLEVBQ2xCLEVBQUU7UUFDRixNQUFNLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztZQUNyQyxFQUFFLEVBQUUsY0FBYztZQUNsQixZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFO1NBQzFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQTtJQUVELE1BQU0sZUFBZSxHQUFHLEtBQUssRUFBRSxVQUFrQixFQUFF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
|
package/README.md
CHANGED
|
@@ -324,6 +324,8 @@ Response:
|
|
|
324
324
|
|
|
325
325
|
For dual OTP stores use `registration.identifier: "both"`, `login.identifier: "both"`, `auth.email.methods` / `auth.phone.methods` including `"otp"`, plus `email_auth` and `phone_auth` channel config.
|
|
326
326
|
|
|
327
|
+
> **Cross-channel OTP login:** When `login.identifier` is `"both"`, a customer who registered with password on one channel (e.g. email) and added the other identifier on their profile can OTP-login on that channel without completing verification OTP first. The plugin auto-attaches `phoneotp` or `emailotp` to their existing auth identity on first OTP login.
|
|
328
|
+
|
|
327
329
|
### Store routes
|
|
328
330
|
|
|
329
331
|
#### `POST /store/customers`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "customer-registration",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.133",
|
|
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",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"@medusajs/medusa": "2.11.2",
|
|
42
42
|
"@types/bcrypt": "^5.0.2",
|
|
43
43
|
"@types/jsonwebtoken": "^9.0.10",
|
|
44
|
-
"medusa-plugin-dynamic-config": "^0.0.
|
|
44
|
+
"medusa-plugin-dynamic-config": "^0.0.36",
|
|
45
45
|
"ts-node": "^10.9.2",
|
|
46
46
|
"typescript": "^5.6.2",
|
|
47
47
|
"vitest": "^1.5.2"
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"@medusajs/cli": "2.11.2",
|
|
51
51
|
"@medusajs/framework": "2.11.2",
|
|
52
52
|
"@medusajs/medusa": "2.11.2",
|
|
53
|
-
"medusa-plugin-dynamic-config": ">=0.0.
|
|
53
|
+
"medusa-plugin-dynamic-config": ">=0.0.36"
|
|
54
54
|
},
|
|
55
55
|
"engines": {
|
|
56
56
|
"node": ">=20"
|