customer-registration 0.0.51 → 0.0.102

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 (44) hide show
  1. package/.medusa/server/src/api/store/customers/otp/send/route.js +36 -0
  2. package/.medusa/server/src/api/store/customers/otp/verify/route.js +75 -0
  3. package/.medusa/server/src/modules/customer-registration/index.js +8 -46
  4. package/.medusa/server/src/modules/customer-registration/migrations/Migration20250120000000AddCustomerVerificationColumns.js +42 -0
  5. package/.medusa/server/src/modules/customer-registration/service.js +11 -0
  6. package/.medusa/server/src/modules/otp-verification/index.js +29 -0
  7. package/.medusa/server/src/modules/otp-verification/migrations/Migration20250118001000CreateOtpVerificationTable.js +52 -0
  8. package/.medusa/server/src/modules/otp-verification/models/otp-verification.js +37 -0
  9. package/.medusa/server/src/modules/otp-verification/service.js +364 -0
  10. package/.medusa/server/src/modules/otp-verification/types.js +3 -0
  11. package/.medusa/server/src/modules/otp-verification/utils/template.js +78 -0
  12. package/.medusa/server/src/workflows/generate-password-reset-token.js +38 -0
  13. package/.medusa/server/src/workflows/send-otp-workflow.js +46 -0
  14. package/.medusa/server/src/workflows/steps/determine-contact-method-step.js +21 -0
  15. package/.medusa/server/src/workflows/steps/generate-otp-step.js +24 -0
  16. package/.medusa/server/src/workflows/steps/index.js +18 -0
  17. package/.medusa/server/src/workflows/steps/load-template-step.js +15 -0
  18. package/.medusa/server/src/workflows/steps/prepare-template-data-step.js +13 -0
  19. package/.medusa/server/src/workflows/steps/resolve-channel-config-step.js +18 -0
  20. package/.medusa/server/src/workflows/steps/retrieve-customer-step.js +16 -0
  21. package/.medusa/server/src/workflows/steps/send-notification-step.js +79 -0
  22. package/.medusa/server/src/workflows/verify-email.js +25 -0
  23. package/.medusa/server/src/workflows/verify-phone.js +25 -0
  24. package/README.md +140 -158
  25. package/package.json +6 -6
  26. package/.medusa/server/src/api/store/customers/email/otp/resend/route.js +0 -78
  27. package/.medusa/server/src/api/store/customers/email/otp/verify/route.js +0 -63
  28. package/.medusa/server/src/api/store/customers/forget-password/otp/resend/route.js +0 -52
  29. package/.medusa/server/src/api/store/customers/forget-password/otp/verify/route.js +0 -42
  30. package/.medusa/server/src/api/store/customers/phone/otp/resend/route.js +0 -81
  31. package/.medusa/server/src/api/store/customers/phone/otp/verify/route.js +0 -68
  32. package/.medusa/server/src/errors/otp-errors.js +0 -29
  33. package/.medusa/server/src/loaders/index.js +0 -32
  34. package/.medusa/server/src/modules/customer-registration/migrations/Migration20251122112915AddEmailPhoneVerifiedColumns.js +0 -67
  35. package/.medusa/server/src/modules/customer-registration/migrations/Migration20251122112916CreateCustomerOtpTable.js +0 -56
  36. package/.medusa/server/src/modules/customer-registration/models/customer-otp.js +0 -68
  37. package/.medusa/server/src/modules/customer-registration/services/otp-service.js +0 -236
  38. package/.medusa/server/src/services/notification-service.js +0 -81
  39. package/.medusa/server/src/subscribers/customer-created.js +0 -42
  40. package/.medusa/server/src/types/plugin-options.js +0 -30
  41. package/.medusa/server/src/utils/crypto.js +0 -52
  42. package/.medusa/server/src/utils/customer-update.js +0 -48
  43. package/.medusa/server/src/utils/otp-generator.js +0 -27
  44. package/.medusa/server/src/utils/token-generator.js +0 -11
@@ -0,0 +1,36 @@
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 otp_verification_1 = require("../../../../../modules/otp-verification/models/otp-verification");
9
+ const send_otp_workflow_1 = __importDefault(require("../../../../../workflows/send-otp-workflow"));
10
+ const POST = async (req, res) => {
11
+ const { customer_id, type } = req.body;
12
+ console.log("=== [otp/send] Route Called ===");
13
+ console.log("Request body:", { customer_id, type });
14
+ if (!customer_id) {
15
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "customer_id is required");
16
+ }
17
+ if (!type || !Object.values(otp_verification_1.OtpPurpose).includes(type)) {
18
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Type must be one of: ${Object.values(otp_verification_1.OtpPurpose).join(", ")}`);
19
+ }
20
+ console.log("=== [otp/send] Starting Workflow ===");
21
+ // Execute workflow
22
+ const { result } = await (0, send_otp_workflow_1.default)(req.scope).run({
23
+ input: {
24
+ customer_id,
25
+ type: type,
26
+ },
27
+ });
28
+ console.log("=== [otp/send] Workflow Completed ===");
29
+ console.log("Result:", { token: result.token, expires_at: result.expires_at });
30
+ return res.status(200).json({
31
+ token: result.token,
32
+ expires_at: result.expires_at,
33
+ });
34
+ };
35
+ exports.POST = POST;
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9vdHAvc2VuZC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxxREFBdUQ7QUFDdkQsc0dBQTRGO0FBQzVGLG1HQUF3RTtBQUVqRSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDcEUsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsSUFHakMsQ0FBQTtJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtJQUM5QyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBRW5ELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5QkFBeUIsQ0FDMUIsQ0FBQTtJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyw2QkFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQWtCLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLHdCQUF3QixNQUFNLENBQUMsTUFBTSxDQUFDLDZCQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDL0QsQ0FBQTtJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7SUFFbkQsbUJBQW1CO0lBQ25CLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsMkJBQWUsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3RELEtBQUssRUFBRTtZQUNMLFdBQVc7WUFDWCxJQUFJLEVBQUUsSUFBa0I7U0FDekI7S0FDRixDQUFDLENBQUE7SUFFRixPQUFPLENBQUMsR0FBRyxDQUFDLHVDQUF1QyxDQUFDLENBQUE7SUFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUE7SUFFOUUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUMxQixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO0tBQzlCLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQXhDWSxRQUFBLElBQUksUUF3Q2hCIn0=
@@ -0,0 +1,75 @@
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 otp_verification_1 = require("../../../../../modules/otp-verification");
9
+ const otp_verification_2 = require("../../../../../modules/otp-verification/models/otp-verification");
10
+ const verify_email_1 = __importDefault(require("../../../../../workflows/verify-email"));
11
+ const verify_phone_1 = __importDefault(require("../../../../../workflows/verify-phone"));
12
+ const generate_password_reset_token_1 = __importDefault(require("../../../../../workflows/generate-password-reset-token"));
13
+ const POST = async (req, res) => {
14
+ const { token, code } = req.body;
15
+ if (!token) {
16
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Token is required");
17
+ }
18
+ if (!code) {
19
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "OTP code is required");
20
+ }
21
+ // Get OTP service from module
22
+ const otpService = req.scope.resolve(otp_verification_1.OTP_VERIFICATION_MODULE);
23
+ // Get JWT secret from config
24
+ const config = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
25
+ const jwtSecret = config?.projectConfig?.http?.jwtSecret || "supersecret";
26
+ // Verify OTP
27
+ const verifyResult = await otpService.verifyOtp({
28
+ token,
29
+ code,
30
+ }, jwtSecret);
31
+ // Execute workflow based on type
32
+ let result;
33
+ if (verifyResult.type === otp_verification_2.OtpPurpose.EMAIL_VERIFICATION) {
34
+ const { result: workflowResult } = await (0, verify_email_1.default)(req.scope).run({
35
+ input: {
36
+ customer_id: verifyResult.customer_id,
37
+ },
38
+ });
39
+ result = {
40
+ verified: true,
41
+ customer: workflowResult.customer,
42
+ email_verified: workflowResult.email_verified,
43
+ };
44
+ }
45
+ else if (verifyResult.type === otp_verification_2.OtpPurpose.PHONE_VERIFICATION) {
46
+ const { result: workflowResult } = await (0, verify_phone_1.default)(req.scope).run({
47
+ input: {
48
+ customer_id: verifyResult.customer_id,
49
+ },
50
+ });
51
+ result = {
52
+ verified: true,
53
+ customer: workflowResult.customer,
54
+ phone_verified: workflowResult.phone_verified,
55
+ };
56
+ }
57
+ else if (verifyResult.type === otp_verification_2.OtpPurpose.FORGOT_PASSWORD) {
58
+ const { result: workflowResult } = await (0, generate_password_reset_token_1.default)(req.scope).run({
59
+ input: {
60
+ customer_id: verifyResult.customer_id,
61
+ },
62
+ });
63
+ result = {
64
+ verified: true,
65
+ reset_token: workflowResult.token,
66
+ expires_in: workflowResult.expires_in,
67
+ };
68
+ }
69
+ else {
70
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Invalid verification type");
71
+ }
72
+ return res.status(200).json(result);
73
+ };
74
+ exports.POST = POST;
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9vdHAvdmVyaWZ5L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLHFEQUdrQztBQUNsQyw4RUFBaUY7QUFFakYsc0dBQTRGO0FBQzVGLHlGQUF1RTtBQUN2RSx5RkFBdUU7QUFDdkUsMkhBQXVHO0FBRWhHLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNwRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUczQixDQUFBO0lBRUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsbUJBQW1CLENBQ3BCLENBQUE7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsc0JBQXNCLENBQ3ZCLENBQUE7SUFDSCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUNsQywwQ0FBdUIsQ0FDRSxDQUFBO0lBRTNCLDZCQUE2QjtJQUM3QixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUN6RSxNQUFNLFNBQVMsR0FBSSxNQUFNLEVBQUUsYUFBcUIsRUFBRSxJQUFJLEVBQUUsU0FBUyxJQUFJLGFBQWEsQ0FBQTtJQUVsRixhQUFhO0lBQ2IsTUFBTSxZQUFZLEdBQUcsTUFBTSxVQUFVLENBQUMsU0FBUyxDQUM3QztRQUNFLEtBQUs7UUFDTCxJQUFJO0tBQ0wsRUFDRCxTQUFTLENBQ1YsQ0FBQTtJQUVELGlDQUFpQztJQUNqQyxJQUFJLE1BQVcsQ0FBQTtJQUVmLElBQUksWUFBWSxDQUFDLElBQUksS0FBSyw2QkFBVSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDeEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLElBQUEsc0JBQW1CLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMxRSxLQUFLLEVBQUU7Z0JBQ0wsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO2FBQ3RDO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxHQUFHO1lBQ1AsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVE7WUFDakMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxjQUFjO1NBQzlDLENBQUE7SUFDSCxDQUFDO1NBQU0sSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLDZCQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvRCxNQUFNLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLE1BQU0sSUFBQSxzQkFBbUIsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzFFLEtBQUssRUFBRTtnQkFDTCxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7YUFDdEM7U0FDRixDQUFDLENBQUE7UUFDRixNQUFNLEdBQUc7WUFDUCxRQUFRLEVBQUUsSUFBSTtZQUNkLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtZQUNqQyxjQUFjLEVBQUUsY0FBYyxDQUFDLGNBQWM7U0FDOUMsQ0FBQTtJQUNILENBQUM7U0FBTSxJQUFJLFlBQVksQ0FBQyxJQUFJLEtBQUssNkJBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1RCxNQUFNLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLE1BQU0sSUFBQSx1Q0FBa0MsRUFBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQ3pGLEtBQUssRUFBRTtnQkFDTCxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7YUFDdEM7U0FDRixDQUFDLENBQUE7UUFDRixNQUFNLEdBQUc7WUFDUCxRQUFRLEVBQUUsSUFBSTtZQUNkLFdBQVcsRUFBRSxjQUFjLENBQUMsS0FBSztZQUNqQyxVQUFVLEVBQUUsY0FBYyxDQUFDLFVBQVU7U0FDdEMsQ0FBQTtJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksRUFDOUIsMkJBQTJCLENBQzVCLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNyQyxDQUFDLENBQUE7QUFsRlksUUFBQSxJQUFJLFFBa0ZoQiJ9
@@ -1,49 +1,11 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
2
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.OTPService = exports.CustomerOtp = exports.CUSTOMER_REGISTRATION_MODULE = void 0;
3
+ exports.CustomerRegistrationService = exports.CUSTOMER_REGISTRATION_MODULE = void 0;
18
4
  const utils_1 = require("@medusajs/framework/utils");
19
- const otp_service_1 = require("./services/otp-service");
20
- Object.defineProperty(exports, "OTPService", { enumerable: true, get: function () { return otp_service_1.OTPService; } });
21
- const customer_otp_1 = require("./models/customer-otp");
22
- Object.defineProperty(exports, "CustomerOtp", { enumerable: true, get: function () { return customer_otp_1.CustomerOtp; } });
23
- exports.CUSTOMER_REGISTRATION_MODULE = "customerRegistration";
24
- exports.default = {
25
- key: exports.CUSTOMER_REGISTRATION_MODULE,
26
- serviceName: exports.CUSTOMER_REGISTRATION_MODULE,
27
- service: otp_service_1.OTPService,
28
- load: (container, options) => {
29
- const config = options;
30
- container.register({
31
- [exports.CUSTOMER_REGISTRATION_MODULE]: {
32
- resolve: (cradle) => {
33
- const customerService = cradle[utils_1.Modules.CUSTOMER];
34
- const notificationService = cradle[utils_1.Modules.NOTIFICATION];
35
- const manager = cradle.manager;
36
- return new otp_service_1.OTPService({
37
- customerService,
38
- notificationService,
39
- manager,
40
- config,
41
- });
42
- },
43
- },
44
- });
45
- },
46
- };
47
- __exportStar(require("./migrations/Migration20251122112915AddEmailPhoneVerifiedColumns"), exports);
48
- __exportStar(require("./migrations/Migration20251122112916CreateCustomerOtpTable"), exports);
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jdXN0b21lci1yZWdpc3RyYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBbUQ7QUFDbkQsd0RBQW1EO0FBa0M3QiwyRkFsQ2Isd0JBQVUsT0FrQ2E7QUFqQ2hDLHdEQUFtRDtBQWlDMUMsNEZBakNBLDBCQUFXLE9BaUNBO0FBNUJQLFFBQUEsNEJBQTRCLEdBQUcsc0JBQXNCLENBQUE7QUFFbEUsa0JBQWU7SUFDYixHQUFHLEVBQUUsb0NBQTRCO0lBQ2pDLFdBQVcsRUFBRSxvQ0FBNEI7SUFDekMsT0FBTyxFQUFFLHdCQUFVO0lBQ25CLElBQUksRUFBRSxDQUFDLFNBQWMsRUFBRSxPQUFZLEVBQUUsRUFBRTtRQUNyQyxNQUFNLE1BQU0sR0FBRyxPQUFrQyxDQUFBO1FBRWpELFNBQVMsQ0FBQyxRQUFRLENBQUM7WUFDakIsQ0FBQyxvQ0FBNEIsQ0FBQyxFQUFFO2dCQUM5QixPQUFPLEVBQUUsQ0FBQyxNQUFXLEVBQUUsRUFBRTtvQkFDdkIsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGVBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDaEQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsZUFBTyxDQUFDLFlBQVksQ0FBQyxDQUFBO29CQUN4RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFBO29CQUU5QixPQUFPLElBQUksd0JBQVUsQ0FBQzt3QkFDcEIsZUFBZTt3QkFDZixtQkFBbUI7d0JBQ25CLE9BQU87d0JBQ1AsTUFBTTtxQkFDUCxDQUFDLENBQUE7Z0JBQ0osQ0FBQzthQUNGO1NBQ0YsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGLENBQUE7QUFHRCxtR0FBZ0Y7QUFDaEYsNkZBQTBFIn0=
5
+ const service_1 = require("./service");
6
+ Object.defineProperty(exports, "CustomerRegistrationService", { enumerable: true, get: function () { return service_1.CustomerRegistrationService; } });
7
+ exports.CUSTOMER_REGISTRATION_MODULE = "customer_registration";
8
+ exports.default = (0, utils_1.Module)(exports.CUSTOMER_REGISTRATION_MODULE, {
9
+ service: service_1.CustomerRegistrationService,
10
+ });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jdXN0b21lci1yZWdpc3RyYXRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWtEO0FBQ2xELHVDQUF1RDtBQVE5Qyw0R0FSQSxxQ0FBMkIsT0FRQTtBQU52QixRQUFBLDRCQUE0QixHQUFHLHVCQUF1QixDQUFBO0FBRW5FLGtCQUFlLElBQUEsY0FBTSxFQUFDLG9DQUE0QixFQUFFO0lBQ2xELE9BQU8sRUFBRSxxQ0FBMkI7Q0FDckMsQ0FBQyxDQUFBIn0=
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20250120000000AddCustomerVerificationColumns = void 0;
4
+ const migrations_1 = require("@mikro-orm/migrations");
5
+ class Migration20250120000000AddCustomerVerificationColumns extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`
8
+ ALTER TABLE "customer"
9
+ ADD COLUMN IF NOT EXISTS "email_verified" boolean NOT NULL DEFAULT false;
10
+ `);
11
+ this.addSql(`
12
+ ALTER TABLE "customer"
13
+ ADD COLUMN IF NOT EXISTS "phone_verified" boolean NOT NULL DEFAULT false;
14
+ `);
15
+ this.addSql(`
16
+ CREATE INDEX IF NOT EXISTS "IDX_customer_email_verified"
17
+ ON "customer" ("email_verified");
18
+ `);
19
+ this.addSql(`
20
+ CREATE INDEX IF NOT EXISTS "IDX_customer_phone_verified"
21
+ ON "customer" ("phone_verified");
22
+ `);
23
+ }
24
+ async down() {
25
+ this.addSql(`
26
+ DROP INDEX IF EXISTS "IDX_customer_phone_verified";
27
+ `);
28
+ this.addSql(`
29
+ DROP INDEX IF EXISTS "IDX_customer_email_verified";
30
+ `);
31
+ this.addSql(`
32
+ ALTER TABLE "customer"
33
+ DROP COLUMN IF EXISTS "phone_verified";
34
+ `);
35
+ this.addSql(`
36
+ ALTER TABLE "customer"
37
+ DROP COLUMN IF EXISTS "email_verified";
38
+ `);
39
+ }
40
+ }
41
+ exports.Migration20250120000000AddCustomerVerificationColumns = Migration20250120000000AddCustomerVerificationColumns;
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTAxMjAwMDAwMDBBZGRDdXN0b21lclZlcmlmaWNhdGlvbkNvbHVtbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jdXN0b21lci1yZWdpc3RyYXRpb24vbWlncmF0aW9ucy9NaWdyYXRpb24yMDI1MDEyMDAwMDAwMEFkZEN1c3RvbWVyVmVyaWZpY2F0aW9uQ29sdW1ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBaUQ7QUFFakQsTUFBYSxxREFBc0QsU0FBUSxzQkFBUztJQUNsRixLQUFLLENBQUMsRUFBRTtRQUNOLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLElBQUksQ0FBQyxNQUFNLENBQUM7O0tBRVgsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7S0FFWCxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUExQ0Qsc0hBMENDIn0=
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CustomerRegistrationService = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ class CustomerRegistrationService extends (0, utils_1.MedusaService)({}) {
6
+ constructor(container, moduleOptions, moduleDeclaration) {
7
+ super(container, moduleOptions, moduleDeclaration);
8
+ }
9
+ }
10
+ exports.CustomerRegistrationService = CustomerRegistrationService;
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2N1c3RvbWVyLXJlZ2lzdHJhdGlvbi9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUF5RDtBQUl6RCxNQUFhLDJCQUE0QixTQUFRLElBQUEscUJBQWEsRUFBQyxFQUFFLENBQUM7SUFDaEUsWUFDRSxTQUErQixFQUMvQixhQUF1QyxFQUN2QyxpQkFBeUQ7UUFFekQsS0FBSyxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0NBSUY7QUFYRCxrRUFXQyJ9
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.OtpVerificationService = exports.OTP_VERIFICATION_MODULE = void 0;
18
+ const utils_1 = require("@medusajs/framework/utils");
19
+ const service_1 = require("./service");
20
+ exports.OTP_VERIFICATION_MODULE = "otp_verification";
21
+ exports.default = (0, utils_1.Module)(exports.OTP_VERIFICATION_MODULE, {
22
+ service: service_1.OtpVerificationService,
23
+ });
24
+ __exportStar(require("./models/otp-verification"), exports);
25
+ __exportStar(require("./types"), exports);
26
+ __exportStar(require("./utils/template"), exports);
27
+ var service_2 = require("./service");
28
+ Object.defineProperty(exports, "OtpVerificationService", { enumerable: true, get: function () { return service_2.OtpVerificationService; } });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9vdHAtdmVyaWZpY2F0aW9uL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQWtEO0FBQ2xELHVDQUFrRDtBQUVyQyxRQUFBLHVCQUF1QixHQUFHLGtCQUFrQixDQUFBO0FBRXpELGtCQUFlLElBQUEsY0FBTSxFQUFDLCtCQUF1QixFQUFFO0lBQzdDLE9BQU8sRUFBRSxnQ0FBc0I7Q0FDaEMsQ0FBQyxDQUFBO0FBRUYsNERBQXlDO0FBQ3pDLDBDQUF1QjtBQUN2QixtREFBZ0M7QUFDaEMscUNBQWtEO0FBQXpDLGlIQUFBLHNCQUFzQixPQUFBIn0=
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20250118001000CreateOtpVerificationTable = void 0;
4
+ const migrations_1 = require("@mikro-orm/migrations");
5
+ class Migration20250118001000CreateOtpVerificationTable extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`
8
+ create table if not exists "otp_verification" (
9
+ "id" text not null,
10
+ "customer_id" text not null,
11
+ "purpose" text check ("purpose" in ('email_verification', 'phone_verification', 'forgot_password')) not null default 'email_verification',
12
+ "hashed_code" text not null,
13
+ "expires_at" timestamptz not null,
14
+ "attempts" integer not null default 0,
15
+ "verified_at" timestamptz null,
16
+ "created_at" timestamptz not null default now(),
17
+ "updated_at" timestamptz not null default now(),
18
+ "deleted_at" timestamptz null,
19
+ constraint "otp_verification_pkey" primary key ("id")
20
+ );
21
+ `);
22
+ this.addSql(`
23
+ create index if not exists "IDX_otp_verification_customer_id"
24
+ on "otp_verification" ("customer_id");
25
+ `);
26
+ this.addSql(`
27
+ create index if not exists "IDX_otp_verification_customer_id_purpose"
28
+ on "otp_verification" ("customer_id", "purpose");
29
+ `);
30
+ this.addSql(`
31
+ create index if not exists "IDX_otp_verification_expires_at"
32
+ on "otp_verification" ("expires_at");
33
+ `);
34
+ }
35
+ async down() {
36
+ // Migration rollback - drop indexes first, then table
37
+ this.addSql(`
38
+ drop index if exists "IDX_otp_verification_expires_at";
39
+ `);
40
+ this.addSql(`
41
+ drop index if exists "IDX_otp_verification_customer_id_purpose";
42
+ `);
43
+ this.addSql(`
44
+ drop index if exists "IDX_otp_verification_customer_id";
45
+ `);
46
+ this.addSql(`
47
+ drop table if exists "otp_verification";
48
+ `);
49
+ }
50
+ }
51
+ exports.Migration20250118001000CreateOtpVerificationTable = Migration20250118001000CreateOtpVerificationTable;
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTAxMTgwMDEwMDBDcmVhdGVPdHBWZXJpZmljYXRpb25UYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL290cC12ZXJpZmljYXRpb24vbWlncmF0aW9ucy9NaWdyYXRpb24yMDI1MDExODAwMTAwMENyZWF0ZU90cFZlcmlmaWNhdGlvblRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFpRDtBQUVqRCxNQUFhLGlEQUFrRCxTQUFRLHNCQUFTO0lBQzlFLEtBQUssQ0FBQyxFQUFFO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7S0FjWCxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7S0FFWCxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDOztLQUVYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7O0tBRVgsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7S0FFWCxDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0Y7QUFwREQsOEdBb0RDIn0=
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OtpVerification = exports.OtpPurpose = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ var OtpPurpose;
6
+ (function (OtpPurpose) {
7
+ OtpPurpose["EMAIL_VERIFICATION"] = "email_verification";
8
+ OtpPurpose["PHONE_VERIFICATION"] = "phone_verification";
9
+ OtpPurpose["FORGOT_PASSWORD"] = "forgot_password";
10
+ })(OtpPurpose || (exports.OtpPurpose = OtpPurpose = {}));
11
+ exports.OtpVerification = utils_1.model
12
+ .define("otp_verification", {
13
+ id: utils_1.model.id().primaryKey(),
14
+ customer_id: utils_1.model.text().searchable(),
15
+ purpose: utils_1.model
16
+ .enum(["email_verification", "phone_verification", "forgot_password"])
17
+ .default("email_verification"),
18
+ hashed_code: utils_1.model.text(),
19
+ expires_at: utils_1.model.dateTime(),
20
+ attempts: utils_1.model.number().default(0),
21
+ verified_at: utils_1.model.dateTime().nullable(),
22
+ })
23
+ .indexes([
24
+ {
25
+ name: "IDX_otp_verification_customer_id",
26
+ on: ["customer_id"],
27
+ },
28
+ {
29
+ name: "IDX_otp_verification_customer_id_purpose",
30
+ on: ["customer_id", "purpose"],
31
+ },
32
+ {
33
+ name: "IDX_otp_verification_expires_at",
34
+ on: ["expires_at"],
35
+ },
36
+ ]);
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3RwLXZlcmlmaWNhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL290cC12ZXJpZmljYXRpb24vbW9kZWxzL290cC12ZXJpZmljYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBRWpELElBQVksVUFJWDtBQUpELFdBQVksVUFBVTtJQUNwQix1REFBeUMsQ0FBQTtJQUN6Qyx1REFBeUMsQ0FBQTtJQUN6QyxpREFBbUMsQ0FBQTtBQUNyQyxDQUFDLEVBSlcsVUFBVSwwQkFBVixVQUFVLFFBSXJCO0FBRVksUUFBQSxlQUFlLEdBQUcsYUFBSztLQUNqQyxNQUFNLENBQUMsa0JBQWtCLEVBQUU7SUFDMUIsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDdEMsT0FBTyxFQUFFLGFBQUs7U0FDWCxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3JFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztJQUNoQyxXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRTtJQUN6QixVQUFVLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRTtJQUM1QixRQUFRLEVBQUUsYUFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbkMsV0FBVyxFQUFFLGFBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDekMsQ0FBQztLQUNELE9BQU8sQ0FBQztJQUNQO1FBQ0UsSUFBSSxFQUFFLGtDQUFrQztRQUN4QyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUM7S0FDcEI7SUFDRDtRQUNFLElBQUksRUFBRSwwQ0FBMEM7UUFDaEQsRUFBRSxFQUFFLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQztLQUMvQjtJQUNEO1FBQ0UsSUFBSSxFQUFFLGlDQUFpQztRQUN2QyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUM7S0FDbkI7Q0FDRixDQUFDLENBQUEifQ==