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
@@ -1,153 +0,0 @@
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
- const utils_1 = require("@medusajs/framework/utils");
7
- const vitest_1 = require("vitest");
8
- const config_1 = require("../../../../../config");
9
- const send_phone_auth_otp_workflow_1 = __importDefault(require("../../../../../workflows/send-phone-auth-otp-workflow"));
10
- const phone_auth_helpers_1 = require("../shared/phone-auth-helpers");
11
- const route_1 = require("../send/route");
12
- vitest_1.vi.mock("../../../../../config", async (importOriginal) => {
13
- const actual = await importOriginal();
14
- return {
15
- ...actual,
16
- resolveCustomerRegistrationOptions: vitest_1.vi.fn(),
17
- isPhoneOtpAuthEnabled: vitest_1.vi.fn(),
18
- };
19
- });
20
- vitest_1.vi.mock("../shared/phone-auth-helpers", () => ({
21
- lookupCustomerByPhone: vitest_1.vi.fn(),
22
- normalizeAuthPhone: (phone) => phone.trim(),
23
- }));
24
- vitest_1.vi.mock("../../../../../workflows/send-phone-auth-otp-workflow", () => ({
25
- default: vitest_1.vi.fn(),
26
- }));
27
- const mockedResolveOptions = vitest_1.vi.mocked(config_1.resolveCustomerRegistrationOptions);
28
- const mockedIsOtpEnabled = vitest_1.vi.mocked(config_1.isPhoneOtpAuthEnabled);
29
- const mockedLookupCustomer = vitest_1.vi.mocked(phone_auth_helpers_1.lookupCustomerByPhone);
30
- const mockedWorkflow = vitest_1.vi.mocked(send_phone_auth_otp_workflow_1.default);
31
- (0, vitest_1.describe)("POST /auth/customer/phoneotp/send table-driven tests", () => {
32
- (0, vitest_1.beforeEach)(() => {
33
- vitest_1.vi.clearAllMocks();
34
- mockedResolveOptions.mockReturnValue({
35
- ...(0, config_1.resolveCustomerRegistrationOptions)(undefined),
36
- auth: {
37
- email: { methods: ["password"] },
38
- phone: { methods: ["otp"] },
39
- },
40
- });
41
- mockedIsOtpEnabled.mockImplementation((opts) => opts.auth.phone.methods.includes("otp"));
42
- mockedWorkflow.mockReturnValue({
43
- run: vitest_1.vi.fn().mockResolvedValue({
44
- result: {
45
- token: "otp_token",
46
- expires_at: new Date("2025-06-03T12:00:00.000Z"),
47
- },
48
- }),
49
- });
50
- });
51
- const cases = [
52
- {
53
- title: "rejects when OTP auth is disabled",
54
- body: { phone: "+15551234567" },
55
- otpEnabled: false,
56
- customer: null,
57
- pendingDeletion: false,
58
- shouldThrow: true,
59
- errorType: utils_1.MedusaError.Types.NOT_ALLOWED,
60
- },
61
- {
62
- title: "rejects invalid phone format",
63
- body: { phone: "abc" },
64
- otpEnabled: true,
65
- customer: null,
66
- pendingDeletion: false,
67
- shouldThrow: true,
68
- errorType: utils_1.MedusaError.Types.INVALID_DATA,
69
- },
70
- {
71
- title: "blocks when pending account deletion",
72
- body: { phone: "+15551234567" },
73
- otpEnabled: true,
74
- customer: {
75
- id: "cus_1",
76
- email: null,
77
- phone: "+15551234567",
78
- has_account: true,
79
- first_name: "A",
80
- last_name: null,
81
- },
82
- pendingDeletion: true,
83
- shouldThrow: true,
84
- errorType: utils_1.MedusaError.Types.NOT_ALLOWED,
85
- },
86
- {
87
- title: "returns token for new user",
88
- body: { phone: "+15559876543" },
89
- otpEnabled: true,
90
- customer: null,
91
- pendingDeletion: false,
92
- shouldThrow: false,
93
- expectedStatus: 200,
94
- expectedJson: {
95
- token: "otp_token",
96
- expires_at: new Date("2025-06-03T12:00:00.000Z"),
97
- is_new_user: true,
98
- },
99
- },
100
- {
101
- title: "returns is_new_user false for existing account",
102
- body: { phone: "+15551112222" },
103
- otpEnabled: true,
104
- customer: {
105
- id: "cus_2",
106
- email: null,
107
- phone: "+15551112222",
108
- has_account: true,
109
- first_name: "P",
110
- last_name: "U",
111
- },
112
- pendingDeletion: false,
113
- shouldThrow: false,
114
- expectedStatus: 200,
115
- expectedJson: {
116
- token: "otp_token",
117
- expires_at: new Date("2025-06-03T12:00:00.000Z"),
118
- is_new_user: false,
119
- },
120
- },
121
- ];
122
- vitest_1.test.each(cases)("$title", async ({ body, otpEnabled, customer, pendingDeletion, shouldThrow, errorType, expectedStatus, expectedJson, }) => {
123
- mockedIsOtpEnabled.mockReturnValue(otpEnabled);
124
- mockedLookupCustomer.mockResolvedValue(customer);
125
- const hasPendingRequest = vitest_1.vi.fn().mockResolvedValue(pendingDeletion);
126
- const req = {
127
- body,
128
- scope: {
129
- resolve: (token) => {
130
- if (token === utils_1.ContainerRegistrationKeys.CONFIG_MODULE) {
131
- return {};
132
- }
133
- if (String(token).includes("account_deletion")) {
134
- return { hasPendingRequest };
135
- }
136
- return undefined;
137
- },
138
- },
139
- };
140
- const status = vitest_1.vi.fn().mockReturnThis();
141
- const json = vitest_1.vi.fn();
142
- const res = { status, json };
143
- const exec = () => (0, route_1.POST)(req, res);
144
- if (shouldThrow) {
145
- await (0, vitest_1.expect)(exec()).rejects.toMatchObject({ type: errorType });
146
- return;
147
- }
148
- await exec();
149
- (0, vitest_1.expect)(status).toHaveBeenCalledWith(expectedStatus);
150
- (0, vitest_1.expect)(json).toHaveBeenCalledWith(expectedJson);
151
- });
152
- });
153
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VuZC1yb3V0ZS50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9hdXRoL2N1c3RvbWVyL3Bob25lb3RwL19fdGVzdHNfXy9zZW5kLXJvdXRlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxxREFBa0Y7QUFDbEYsbUNBQStEO0FBQy9ELGtEQUc4QjtBQUM5Qix5SEFBNEY7QUFDNUYscUVBQW9FO0FBQ3BFLHlDQUFvQztBQUVwQyxXQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRTtJQUN4RCxNQUFNLE1BQU0sR0FBRyxNQUFNLGNBQWMsRUFBMEMsQ0FBQTtJQUM3RSxPQUFPO1FBQ0wsR0FBRyxNQUFNO1FBQ1Qsa0NBQWtDLEVBQUUsV0FBRSxDQUFDLEVBQUUsRUFBRTtRQUMzQyxxQkFBcUIsRUFBRSxXQUFFLENBQUMsRUFBRSxFQUFFO0tBQy9CLENBQUE7QUFDSCxDQUFDLENBQUMsQ0FBQTtBQUVGLFdBQUUsQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM3QyxxQkFBcUIsRUFBRSxXQUFFLENBQUMsRUFBRSxFQUFFO0lBQzlCLGtCQUFrQixFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO0NBQ3BELENBQUMsQ0FBQyxDQUFBO0FBRUgsV0FBRSxDQUFDLElBQUksQ0FBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLE9BQU8sRUFBRSxXQUFFLENBQUMsRUFBRSxFQUFFO0NBQ2pCLENBQUMsQ0FBQyxDQUFBO0FBRUgsTUFBTSxvQkFBb0IsR0FBRyxXQUFFLENBQUMsTUFBTSxDQUFDLDJDQUFrQyxDQUFDLENBQUE7QUFDMUUsTUFBTSxrQkFBa0IsR0FBRyxXQUFFLENBQUMsTUFBTSxDQUFDLDhCQUFxQixD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
@@ -1,158 +0,0 @@
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
- const utils_1 = require("@medusajs/framework/utils");
7
- const vitest_1 = require("vitest");
8
- const config_1 = require("../../../../../config");
9
- const otp_verification_1 = require("../../../../../modules/otp-verification/models/otp-verification");
10
- const otp_verification_2 = require("../../../../../modules/otp-verification");
11
- const verify_phone_auth_otp_workflow_1 = __importDefault(require("../../../../../workflows/verify-phone-auth-otp-workflow"));
12
- const complete_customer_login_1 = require("../../shared/complete-customer-login");
13
- const route_1 = require("../verify/route");
14
- vitest_1.vi.mock("../../../../../config", async (importOriginal) => {
15
- const actual = await importOriginal();
16
- return {
17
- ...actual,
18
- isPhoneOtpAuthEnabled: vitest_1.vi.fn(),
19
- };
20
- });
21
- vitest_1.vi.mock("../../../../../workflows/verify-phone-auth-otp-workflow", () => ({
22
- default: vitest_1.vi.fn(),
23
- }));
24
- vitest_1.vi.mock("../../shared/complete-customer-login", () => ({
25
- issueCustomerJwtToken: vitest_1.vi.fn(),
26
- }));
27
- vitest_1.vi.mock("../../../../store/customers/shared/referral-code", () => ({
28
- assertReferralCodeReferrerExists: vitest_1.vi.fn().mockResolvedValue(undefined),
29
- maybeCreateReferralLinkFromRequest: vitest_1.vi.fn().mockResolvedValue(undefined),
30
- }));
31
- const mockedIsOtpEnabled = vitest_1.vi.mocked(config_1.isPhoneOtpAuthEnabled);
32
- const mockedWorkflow = vitest_1.vi.mocked(verify_phone_auth_otp_workflow_1.default);
33
- const mockedIssueJwt = vitest_1.vi.mocked(complete_customer_login_1.issueCustomerJwtToken);
34
- (0, vitest_1.describe)("POST /auth/customer/phoneotp/verify table-driven tests", () => {
35
- (0, vitest_1.beforeEach)(() => {
36
- vitest_1.vi.clearAllMocks();
37
- mockedIsOtpEnabled.mockReturnValue(true);
38
- mockedIssueJwt.mockResolvedValue("customer_jwt");
39
- mockedWorkflow.mockReturnValue({
40
- run: vitest_1.vi.fn().mockResolvedValue({
41
- result: {
42
- customer: { id: "cus_new", phone: "+15559876543" },
43
- auth_identity: { id: "auth_1" },
44
- is_new_user: true,
45
- },
46
- }),
47
- });
48
- });
49
- const cases = [
50
- {
51
- title: "rejects when OTP auth is disabled",
52
- body: { token: "t", code: "123456" },
53
- otpEnabled: false,
54
- shouldThrow: true,
55
- errorType: utils_1.MedusaError.Types.NOT_ALLOWED,
56
- },
57
- {
58
- title: "requires token",
59
- body: { code: "123456" },
60
- otpEnabled: true,
61
- shouldThrow: true,
62
- errorType: utils_1.MedusaError.Types.INVALID_DATA,
63
- },
64
- {
65
- title: "requires code",
66
- body: { token: "t" },
67
- otpEnabled: true,
68
- shouldThrow: true,
69
- errorType: utils_1.MedusaError.Types.INVALID_DATA,
70
- },
71
- {
72
- title: "rejects invalid OTP",
73
- body: { token: "t", code: "000000" },
74
- otpEnabled: true,
75
- verifyOtpThrows: new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid OTP code"),
76
- shouldThrow: true,
77
- errorType: utils_1.MedusaError.Types.INVALID_DATA,
78
- },
79
- {
80
- title: "returns JWT and customer for new user",
81
- body: { token: "t", code: "123456", first_name: "New" },
82
- otpEnabled: true,
83
- workflowResult: {
84
- customer: { id: "cus_new", phone: "+15559876543", first_name: "New" },
85
- auth_identity: { id: "auth_1" },
86
- is_new_user: true,
87
- },
88
- shouldThrow: false,
89
- expectedStatus: 200,
90
- expectedJson: {
91
- token: "customer_jwt",
92
- customer: { id: "cus_new", phone: "+15559876543", first_name: "New" },
93
- is_new_user: true,
94
- },
95
- },
96
- {
97
- title: "returns JWT for existing phonepass user login",
98
- body: { token: "t", code: "123456" },
99
- otpEnabled: true,
100
- workflowResult: {
101
- customer: { id: "cus_existing", phone: "+15551112222" },
102
- auth_identity: { id: "auth_existing" },
103
- is_new_user: false,
104
- },
105
- shouldThrow: false,
106
- expectedStatus: 200,
107
- expectedJson: {
108
- token: "customer_jwt",
109
- customer: { id: "cus_existing", phone: "+15551112222" },
110
- is_new_user: false,
111
- },
112
- },
113
- ];
114
- vitest_1.test.each(cases)("$title", async ({ body, otpEnabled, verifyOtpThrows, workflowResult, shouldThrow, errorType, expectedStatus, expectedJson, }) => {
115
- mockedIsOtpEnabled.mockReturnValue(otpEnabled);
116
- const verifyPhoneAuthOtp = verifyOtpThrows
117
- ? vitest_1.vi.fn().mockRejectedValue(verifyOtpThrows)
118
- : vitest_1.vi.fn().mockResolvedValue({
119
- verified: true,
120
- phone: "+15559876543",
121
- customer_id: null,
122
- type: otp_verification_1.OtpPurpose.PHONE_AUTH,
123
- });
124
- if (workflowResult) {
125
- mockedWorkflow.mockReturnValue({
126
- run: vitest_1.vi.fn().mockResolvedValue({ result: workflowResult }),
127
- });
128
- }
129
- const req = {
130
- body,
131
- scope: {
132
- resolve: (token) => {
133
- if (token === utils_1.ContainerRegistrationKeys.CONFIG_MODULE) {
134
- return {
135
- projectConfig: { http: { jwtSecret: "secret", jwtExpiresIn: "7d" } },
136
- };
137
- }
138
- if (token === otp_verification_2.OTP_VERIFICATION_MODULE) {
139
- return { verifyPhoneAuthOtp };
140
- }
141
- return undefined;
142
- },
143
- },
144
- };
145
- const status = vitest_1.vi.fn().mockReturnThis();
146
- const json = vitest_1.vi.fn();
147
- const res = { status, json };
148
- const exec = () => (0, route_1.POST)(req, res);
149
- if (shouldThrow) {
150
- await (0, vitest_1.expect)(exec()).rejects.toMatchObject({ type: errorType });
151
- return;
152
- }
153
- await exec();
154
- (0, vitest_1.expect)(status).toHaveBeenCalledWith(expectedStatus);
155
- (0, vitest_1.expect)(json).toHaveBeenCalledWith(expectedJson);
156
- });
157
- });
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LXJvdXRlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2F1dGgvY3VzdG9tZXIvcGhvbmVvdHAvX190ZXN0c19fL3ZlcmlmeS1yb3V0ZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EscURBQWtGO0FBQ2xGLG1DQUErRDtBQUMvRCxrREFBNkQ7QUFDN0Qsc0dBQTRGO0FBQzVGLDhFQUFpRjtBQUNqRiw2SEFBZ0c7QUFDaEcsa0ZBQTRFO0FBQzVFLDJDQUFzQztBQUV0QyxXQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRTtJQUN4RCxNQUFNLE1BQU0sR0FBRyxNQUFNLGNBQWMsRUFBMEMsQ0FBQTtJQUM3RSxPQUFPO1FBQ0wsR0FBRyxNQUFNO1FBQ1QscUJBQXFCLEVBQUUsV0FBRSxDQUFDLEVBQUUsRUFBRTtLQUMvQixDQUFBO0FBQ0gsQ0FBQyxDQUFDLENBQUE7QUFFRixXQUFFLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDeEUsT0FBTyxFQUFFLFdBQUUsQ0FBQyxFQUFFLEVBQUU7Q0FDakIsQ0FBQyxDQUFDLENBQUE7QUFFSCxXQUFFLENBQUMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDckQscUJBQXFCLEVBQUUsV0FBRSxDQUFDLEVBQUUsRUFBRTtDQUMvQixDQUFDLENBQUMsQ0FBQTtBQUVILFdBQUUsQ0FBQyxJQUFJLENBQUMsa0RBQWtELEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqRSxnQ0FBZ0MsRUFBRSxXQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDO0lBQ3RFLGtDQUFrQyxFQUFFLFdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7Q0FDekUsQ0FBQyxDQUFDLENBQUE7QUFFSCxNQUFNLGtCQUFrQixHQUFHLFdBQUUsQ0FBQyxNQUFNLENBQUMsOEJBQXFCLENBQUMsQ0FBQTtBQUMzRCxNQUFNLGNBQWMsR0FBRyxXQUFFLENBQUMsTUFBTSxDQUFDLHdDQUEwQixDQUFDLENBQUE7QUFDNUQsTUFBTSxjQUFjLEdBQUcsV0FBRSxDQUFDLE1BQU0sQ0FBQywrQ0FBcUIsQ0FBQyxDQUFBO0FBa0J2RCxJQUFBLGlCQUFRLEVBQUMsd0RBQXdELEVBQUUsR0FBRyxFQUFFO0lBQ3RFLElBQUEsbUJBQVUsRUFBQyxHQUFHLEVBQUU7UUFDZCxXQUFFLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDbEIsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNoRCxjQUFjLENBQUMsZUFBZSxDQUFDO1lBQzdCLEdBQUcsRUFBRSxXQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUM7Z0JBQzdCLE1BQU0sRUFBRTtvQkFDTixRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUU7b0JBQ2xELGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUU7b0JBQy9CLFdBQVcsRUFBRSxJQUFJO2lCQUNsQjthQUNGLENBQUM7U0FDeUQsQ0FBQyxDQUFBO0lBQ2hFLENBQUMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxLQUFLLEdBQTBCO1FBQ25DO1lBQ0UsS0FBSyxFQUFFLG1DQUFtQztZQUMxQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDcEMsVUFBVSxFQUFFLEtBQUs7WUFDakIsV0FBVyxFQUFFLElBQUk7WUFDakIsU0FBUyxFQUFFLG1CQUFXLENBQUMsS0FBSyxDQUFDLFdBQVc7U0FDekM7UUFDRDtZQUNFLEtBQUssRUFBRSxnQkFBZ0I7WUFDdkIsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUN4QixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUUsSUFBSTtZQUNqQixTQUFTLEVBQUUsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWTtTQUMxQztRQUNEO1lBQ0UsS0FBSyxFQUFFLGVBQWU7WUFDdEIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNwQixVQUFVLEVBQUUsSUFBSTtZQUNoQixXQUFXLEVBQUUsSUFBSTtZQUNqQixTQUFTLEVBQUUsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWTtTQUMxQztRQUNEO1lBQ0UsS0FBSyxFQUFFLHFCQUFxQjtZQUM1QixJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDcEMsVUFBVSxFQUFFLElBQUk7WUFDaEIsZUFBZSxFQUFFLElBQUksbUJBQVcsQ0FDOUIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QixrQkFBa0IsQ0FDbkI7WUFDRCxXQUFXLEVBQUUsSUFBSTtZQUNqQixTQUFTLEVBQUUsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWTtTQUMxQztRQUNEO1lBQ0UsS0FBSyxFQUFFLHVDQUF1QztZQUM5QyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRTtZQUN2RCxVQUFVLEVBQUUsSUFBSTtZQUNoQixjQUFjLEVBQUU7Z0JBQ2QsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7Z0JBQ3JFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUU7Z0JBQy9CLFdBQVcsRUFBRSxJQUFJO2FBQ2xCO1lBQ0QsV0FBVyxFQUFFLEtBQUs7WUFDbEIsY0FBYyxFQUFFLEdBQUc7WUFDbkIsWUFBWSxFQUFFO2dCQUNaLEtBQUssRUFBRSxjQUFjO2dCQUNyQixRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRTtnQkFDckUsV0FBVyxFQUFFLElBQUk7YUFDbEI7U0FDRjtRQUNEO1lBQ0UsS0FBSyxFQUFFLCtDQUErQztZQUN0RCxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDcEMsVUFBVSxFQUFFLElBQUk7WUFDaEIsY0FBYyxFQUFFO2dCQUNkLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDdkQsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRTtnQkFDdEMsV0FBVyxFQUFFLEtBQUs7YUFDbkI7WUFDRCxXQUFXLEVBQUUsS0FBSztZQUNsQixjQUFjLEVBQUUsR0FBRztZQUNuQixZQUFZLEVBQUU7Z0JBQ1osS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDdkQsV0FBVyxFQUFFLEtBQUs7YUFDbkI7U0FDRjtLQUNGLENBQUE7SUFFRCxhQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUNkLFFBQVEsRUFDUixLQUFLLEVBQUUsRUFDTCxJQUFJLEVBQ0osVUFBVSxFQUNWLGVBQWUsRUFDZixjQUFjLEVBQ2QsV0FBVyxFQUNYLFNBQVMsRUFDVCxjQUFjLEVBQ2QsWUFBWSxHQUNiLEVBQUUsRUFBRTtRQUNILGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUU5QyxNQUFNLGtCQUFrQixHQUFHLGVBQWU7WUFDeEMsQ0FBQyxDQUFDLFdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7WUFDNUMsQ0FBQyxDQUFDLFdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDeEIsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixJQUFJLEVBQUUsNkJBQVUsQ0FBQyxVQUFVO2FBQzVCLENBQUMsQ0FBQTtRQUVOLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsY0FBYyxDQUFDLGVBQWUsQ0FBQztnQkFDN0IsR0FBRyxFQUFFLFdBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQzthQUNDLENBQUMsQ0FBQTtRQUNoRSxDQUFDO1FBRUQsTUFBTSxHQUFHLEdBQUc7WUFDVixJQUFJO1lBQ0osS0FBSyxFQUFFO2dCQUNMLE9BQU8sRUFBRSxDQUFDLEtBQWMsRUFBRSxFQUFFO29CQUMxQixJQUFJLEtBQUssS0FBSyxpQ0FBeUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDdEQsT0FBTzs0QkFDTCxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRTt5QkFDckUsQ0FBQTtvQkFDSCxDQUFDO29CQUNELElBQUksS0FBSyxLQUFLLDBDQUF1QixFQUFFLENBQUM7d0JBQ3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxDQUFBO29CQUMvQixDQUFDO29CQUNELE9BQU8sU0FBUyxDQUFBO2dCQUNsQixDQUFDO2FBQ0Y7U0FDdUMsQ0FBQTtRQUUxQyxNQUFNLE1BQU0sR0FBRyxXQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDdkMsTUFBTSxJQUFJLEdBQUcsV0FBRSxDQUFDLEVBQUUsRUFBRSxDQUFBO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBK0IsQ0FBQTtRQUV6RCxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFBLFlBQUksRUFBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFFakMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUEsZUFBTSxFQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFBO1lBQy9ELE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxJQUFJLEVBQUUsQ0FBQTtRQUVaLElBQUEsZUFBTSxFQUFDLE1BQU0sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ25ELElBQUEsZUFBTSxFQUFDLElBQUksQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ2pELENBQUMsQ0FDRixDQUFBO0FBQ0gsQ0FBQyxDQUFDLENBQUEifQ==
@@ -1,51 +0,0 @@
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.POST = void 0;
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("../shared/phone-auth-helpers");
13
- const POST = async (req, res) => {
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
- const body = req.body;
20
- const rawPhone = body?.phone;
21
- if (!rawPhone || typeof rawPhone !== "string") {
22
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "phone is required");
23
- }
24
- (0, phone_validation_1.validatePhoneFormat)(rawPhone);
25
- const phone = (0, phone_auth_helpers_1.normalizeAuthPhone)(rawPhone);
26
- const existingCustomer = await (0, phone_auth_helpers_1.lookupCustomerByPhone)(req.scope, phone);
27
- const isNewUser = !existingCustomer?.has_account;
28
- if (existingCustomer?.id) {
29
- const accountDeletionService = req.scope.resolve(account_deletion_request_1.ACCOUNT_DELETION_REQUEST_MODULE);
30
- if (await accountDeletionService.hasPendingRequest(existingCustomer.id)) {
31
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_ALLOWED, "This account has a pending deletion request");
32
- }
33
- }
34
- const customerName = existingCustomer?.first_name ||
35
- existingCustomer?.phone ||
36
- phone;
37
- const { result } = await (0, send_phone_auth_otp_workflow_1.default)(req.scope).run({
38
- input: {
39
- phone,
40
- customer_id: existingCustomer?.id ?? null,
41
- customer_name: customerName,
42
- },
43
- });
44
- return res.status(200).json({
45
- token: result.token,
46
- expires_at: result.expires_at,
47
- is_new_user: isNewUser,
48
- });
49
- };
50
- exports.POST = POST;
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2F1dGgvY3VzdG9tZXIvcGhvbmVvdHAvc2VuZC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxxREFBa0Y7QUFDbEYsa0RBSThCO0FBQzlCLDhGQUFpRztBQUVqRyx5SEFBNEY7QUFDNUYsNEVBQTJFO0FBQzNFLHFFQUdxQztBQUU5QixNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDcEUsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDL0UsTUFBTSxPQUFPLEdBQUcsSUFBQSwyQ0FBa0MsRUFDaEQsWUFBaUMsQ0FDbEMsQ0FBQTtJQUVELElBQUksQ0FBQyxJQUFBLDhCQUFxQixFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDcEMsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFDN0IseUNBQXlDLENBQzFDLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQTBCLENBQUE7SUFDM0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQTtJQUU1QixJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzlDLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFFRCxJQUFBLHNDQUFtQixFQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUEsdUNBQWtCLEVBQUMsUUFBUSxDQUFDLENBQUE7SUFFMUMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUEsMENBQXFCLEVBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUN0RSxNQUFNLFNBQVMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLFdBQVcsQ0FBQTtJQUVoRCxJQUFJLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sc0JBQXNCLEdBQzFCLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNmLDBEQUErQixDQUNoQyxDQUFBO1FBQ0gsSUFBSSxNQUFNLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDeEUsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFDN0IsNkNBQTZDLENBQzlDLENBQUE7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUNoQixnQkFBZ0IsRUFBRSxVQUFVO1FBQzVCLGdCQUFnQixFQUFFLEtBQUs7UUFDdkIsS0FBSyxDQUFBO0lBRVAsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSxzQ0FBd0IsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQy9ELEtBQUssRUFBRTtZQUNMLEtBQUs7WUFDTCxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLElBQUk7WUFDekMsYUFBYSxFQUFFLFlBQVk7U0FDNUI7S0FDRixDQUFDLENBQUE7SUFFRixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzFCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDN0IsV0FBVyxFQUFFLFNBQVM7S0FDdkIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBekRZLFFBQUEsSUFBSSxRQXlEaEIifQ==
@@ -1,54 +0,0 @@
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.POST = void 0;
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 referral_code_1 = require("../../../../store/customers/shared/referral-code");
12
- const complete_customer_login_1 = require("../../shared/complete-customer-login");
13
- const POST = async (req, res) => {
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
- const body = req.body;
21
- if (!body?.token) {
22
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "token is required");
23
- }
24
- if (!body?.code) {
25
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "code is required");
26
- }
27
- await (0, referral_code_1.assertReferralCodeReferrerExists)(req);
28
- const jwtSecret = config.projectConfig?.http?.jwtSecret || "supersecret";
29
- const otpService = req.scope.resolve(otp_verification_1.OTP_VERIFICATION_MODULE);
30
- const verifyResult = await otpService.verifyPhoneAuthOtp({ token: body.token, code: body.code }, jwtSecret);
31
- const { result } = await (0, verify_phone_auth_otp_workflow_1.default)(req.scope).run({
32
- input: {
33
- phone: verifyResult.phone,
34
- customer_id: verifyResult.customer_id,
35
- first_name: body.first_name,
36
- last_name: body.last_name,
37
- },
38
- });
39
- const customerId = typeof result.customer.id === "string" ? result.customer.id : "";
40
- if (!customerId) {
41
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Customer id missing after phone OTP verification");
42
- }
43
- if (result.is_new_user) {
44
- await (0, referral_code_1.maybeCreateReferralLinkFromRequest)(req, customerId);
45
- }
46
- const token = await (0, complete_customer_login_1.issueCustomerJwtToken)(req, config, result.auth_identity, customerId);
47
- return res.status(200).json({
48
- token,
49
- customer: result.customer,
50
- is_new_user: result.is_new_user,
51
- });
52
- };
53
- exports.POST = POST;
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2F1dGgvY3VzdG9tZXIvcGhvbmVvdHAvdmVyaWZ5L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLHFEQUFrRjtBQUNsRixrREFJOEI7QUFDOUIsOEVBQWlGO0FBRWpGLDZIQUFnRztBQUNoRyxvRkFHeUQ7QUFDekQsa0ZBRzZDO0FBRXRDLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNwRSxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUMvRSxNQUFNLE1BQU0sR0FBRyxZQUFzRCxDQUFBO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLElBQUEsMkNBQWtDLEVBQUMsTUFBTSxDQUFDLENBQUE7SUFFMUQsSUFBSSxDQUFDLElBQUEsOEJBQXFCLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUM3Qix5Q0FBeUMsQ0FDMUMsQ0FBQTtJQUNILENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFNaEIsQ0FBQTtJQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLG1CQUFXLENBQUMsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLG1CQUFtQixDQUFDLENBQUE7SUFDNUUsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLG1CQUFXLENBQUMsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLENBQUE7SUFDM0UsQ0FBQztJQUVELE1BQU0sSUFBQSxnREFBZ0MsRUFBQyxHQUFHLENBQUMsQ0FBQTtJQUUzQyxNQUFNLFNBQVMsR0FDWixNQUFNLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFnQyxJQUFJLGFBQWEsQ0FBQTtJQUVoRixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDbEMsMENBQXVCLENBQ3hCLENBQUE7SUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLFVBQVUsQ0FBQyxrQkFBa0IsQ0FDdEQsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUN0QyxTQUFTLENBQ1YsQ0FBQTtJQUVELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsd0NBQTBCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNqRSxLQUFLLEVBQUU7WUFDTCxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUs7WUFDekIsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO1lBQ3JDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDMUI7S0FDRixDQUFDLENBQUE7SUFFRixNQUFNLFVBQVUsR0FDZCxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUVsRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxrREFBa0QsQ0FDbkQsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QixNQUFNLElBQUEsa0RBQWtDLEVBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQzNELENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUEsK0NBQXFCLEVBQ3ZDLEdBQUcsRUFDSCxNQUFNLEVBQ04sTUFBTSxDQUFDLGFBQWEsRUFDcEIsVUFBVSxDQUNYLENBQUE7SUFFRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzFCLEtBQUs7UUFDTCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7UUFDekIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO0tBQ2hDLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQTdFWSxRQUFBLElBQUksUUE2RWhCIn0=