customer-registration 0.0.19 → 0.0.22
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/admin/index.js +1 -2
- package/.medusa/server/src/admin/index.mjs +1 -2
- package/.medusa/server/src/api/store/customers/route.js +1 -1
- package/.medusa/server/src/modules/customer-registration/migrations/Migration20250118000000AddEmailVerifiedColumn.js +21 -0
- package/README.md +14 -20
- package/package.json +6 -31
- package/.medusa/server/src/api/admin/plugin/route.js +0 -7
- package/.medusa/server/src/api/store/plugin/route.js +0 -7
- package/.medusa/server/src/migrations/Migration20250118000000AddEmailVerifiedColumn.js +0 -21
- package/.medusa/server/src/subscribers/customer-created.js +0 -60
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
const i18nTranslations0 = {};
|
|
3
2
|
const widgetModule = { widgets: [] };
|
|
4
3
|
const routeModule = {
|
|
5
4
|
routes: []
|
|
@@ -11,7 +10,7 @@ const formModule = { customFields: {} };
|
|
|
11
10
|
const displayModule = {
|
|
12
11
|
displays: {}
|
|
13
12
|
};
|
|
14
|
-
const i18nModule = { resources:
|
|
13
|
+
const i18nModule = { resources: {} };
|
|
15
14
|
const plugin = {
|
|
16
15
|
widgetModule,
|
|
17
16
|
routeModule,
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
const i18nTranslations0 = {};
|
|
2
1
|
const widgetModule = { widgets: [] };
|
|
3
2
|
const routeModule = {
|
|
4
3
|
routes: []
|
|
@@ -10,7 +9,7 @@ const formModule = { customFields: {} };
|
|
|
10
9
|
const displayModule = {
|
|
11
10
|
displays: {}
|
|
12
11
|
};
|
|
13
|
-
const i18nModule = { resources:
|
|
12
|
+
const i18nModule = { resources: {} };
|
|
14
13
|
const plugin = {
|
|
15
14
|
widgetModule,
|
|
16
15
|
routeModule,
|
|
@@ -47,4 +47,4 @@ async function POST(req, res) {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1CQSxvQkE0REM7QUE3RUQscURBQW1EO0FBaUI1QyxLQUFLLFVBQVUsSUFBSSxDQUN4QixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixNQUFNLHFCQUFxQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNqRSxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBaUMsQ0FBQTtJQUVsRCxJQUFJLENBQUM7UUFDSCwwQ0FBMEM7UUFDMUMsTUFBTSxFQUNKLEtBQUssRUFDTCxVQUFVLEVBQ1YsU0FBUyxFQUNULEtBQUssRUFDTCxZQUFZLEVBQ1osUUFBUSxFQUNSLGNBQWMsRUFBRSxzQkFBc0IsRUFDdEMsY0FBYyxFQUFFLHNCQUFzQixFQUN0QyxHQUFHLElBQUksRUFDUixHQUFHLElBQUksQ0FBQTtRQUVSLDREQUE0RDtRQUM1RCxNQUFNLFlBQVksR0FBOEI7WUFDOUMsR0FBRyxJQUFJO1lBQ1AsS0FBSztZQUNMLFVBQVU7WUFDVixTQUFTO1lBQ1QsS0FBSztZQUNMLFlBQVk7WUFDWixRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUU7WUFDeEIsY0FBYyxFQUFFLEtBQUs7WUFDckIsY0FBYyxFQUFFLEtBQUs7U0FDdEIsQ0FBQTtRQUVELHdEQUF3RDtRQUN4RCxtQ0FBbUM7UUFDbkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFBO1FBQzdFLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUU3QiwwQ0FBMEM7UUFDMUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUE4QixDQUFBO1FBRTlHLDZDQUE2QztRQUM3QyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuQixRQUFRLEVBQUUsZUFBZTtTQUMxQixDQUFDLENBQUE7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNwQiw4QkFBOEI7UUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDdEYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSwyQ0FBMkM7Z0JBQ3BELElBQUksRUFBRSxpQkFBaUI7YUFDeEIsQ0FBQyxDQUFBO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbkIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLElBQUksMkJBQTJCO2dCQUNyRCxJQUFJLEVBQUUsY0FBYzthQUNyQixDQUFDLENBQUE7UUFDSixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20250118000000 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
const TABLE_NAME = "customer";
|
|
6
|
+
const EMAIL_COLUMN = "email_verified";
|
|
7
|
+
const PHONE_COLUMN = "phone_verified";
|
|
8
|
+
class Migration20250118000000 extends migrations_1.Migration {
|
|
9
|
+
async up() {
|
|
10
|
+
this.addSql(`alter table "${TABLE_NAME}"
|
|
11
|
+
add column if not exists "${EMAIL_COLUMN}" boolean not null default false,
|
|
12
|
+
add column if not exists "${PHONE_COLUMN}" boolean not null default false;`);
|
|
13
|
+
}
|
|
14
|
+
async down() {
|
|
15
|
+
this.addSql(`alter table "${TABLE_NAME}"
|
|
16
|
+
drop column if exists "${EMAIL_COLUMN}",
|
|
17
|
+
drop column if exists "${PHONE_COLUMN}";`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.Migration20250118000000 = Migration20250118000000;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTAxMTgwMDAwMDBBZGRFbWFpbFZlcmlmaWVkQ29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvY3VzdG9tZXItcmVnaXN0cmF0aW9uL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTAxMTgwMDAwMDBBZGRFbWFpbFZlcmlmaWVkQ29sdW1uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFvRTtBQUVwRSxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUE7QUFDN0IsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUE7QUFDckMsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUE7QUFFckMsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUNwRCxLQUFLLENBQUMsRUFBRTtRQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLFVBQVU7a0NBQ1IsWUFBWTtrQ0FDWixZQUFZLG1DQUFtQyxDQUFDLENBQUE7SUFDaEYsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsVUFBVTsrQkFDWCxZQUFZOytCQUNaLFlBQVksSUFBSSxDQUFDLENBQUE7SUFDOUMsQ0FBQztDQUNGO0FBWkQsMERBWUMifQ==
|
package/README.md
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
# Medusa Plugin: Customer
|
|
1
|
+
# Medusa Plugin: Customer Registration Guard
|
|
2
2
|
|
|
3
|
-
A Medusa v2 plugin that overrides the customer registration endpoint
|
|
3
|
+
A lean Medusa v2 plugin that overrides the store customer registration endpoint and guarantees both `email_verified` and `phone_verified` start as `false`.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- Overrides
|
|
8
|
-
- Forces `email_verified = false` and `phone_verified = false` for every new customer
|
|
9
|
-
-
|
|
10
|
-
-
|
|
7
|
+
- Overrides `POST /store/customers` with a drop-in route handler.
|
|
8
|
+
- Forces `email_verified = false` and `phone_verified = false` for every new customer, regardless of the request payload.
|
|
9
|
+
- Ships a lightweight Medusa module (`customer-registration`) so the bundled Mikro-ORM migration automatically runs during `npx medusa db:migrate`.
|
|
10
|
+
- Adds both verification columns if they’re missing, ensuring downstream logic can rely on them.
|
|
11
|
+
- No custom modules, admin extensions, subscribers, or providers — just the pieces required for registration hardening.
|
|
11
12
|
|
|
12
13
|
## Installation
|
|
13
14
|
|
|
@@ -52,28 +53,21 @@ yarn dev
|
|
|
52
53
|
|
|
53
54
|
## Usage
|
|
54
55
|
|
|
55
|
-
### Registration
|
|
56
|
+
### Registration override
|
|
56
57
|
|
|
57
|
-
When a
|
|
58
|
-
|
|
59
|
-
### Welcome email subscriber
|
|
60
|
-
|
|
61
|
-
- A subscriber listening on `customer.created` collects the newly created customer(s) and calls the Notification Module to dispatch an email using the template ID stored in `CUSTOMER_REGISTRATION_WELCOME_TEMPLATE_ID` (defaults to `customer-registration-success`).
|
|
62
|
-
- Configure the Notification Module in your Medusa project and ensure at least one provider handles the `email` channel for the template ID above.
|
|
63
|
-
- The notification payload includes the customer's `email`, `first_name`, `last_name`, and `full_name`, so templates can be fully personalized.
|
|
58
|
+
When a shopper registers via `POST /store/customers`, the plugin intercepts the request, normalizes the payload, and always persists `email_verified = false` and `phone_verified = false`. The rest of Medusa’s default behavior is preserved by deferring to the Customer Module service.
|
|
64
59
|
|
|
65
60
|
### Database migration
|
|
66
61
|
|
|
67
|
-
-
|
|
68
|
-
- After installing or updating the plugin, run `npx medusa db:migrate`
|
|
62
|
+
- A module-scoped migration (`Migration20250118000000AddEmailVerifiedColumn`) lives under `src/modules/customer-registration/migrations`. Medusa automatically discovers it when the plugin is registered.
|
|
63
|
+
- After installing or updating the plugin, run `npx medusa db:migrate` in your Medusa project so the columns exist before handling registrations.
|
|
69
64
|
|
|
70
65
|
## Requirements
|
|
71
66
|
|
|
72
67
|
- Medusa v2.11.2 or higher
|
|
73
|
-
- Customer table must have `email_verified` and `phone_verified` boolean columns (default: `false`)
|
|
74
|
-
- Run
|
|
75
|
-
-
|
|
76
|
-
- `CUSTOMER_REGISTRATION_WELCOME_TEMPLATE_ID` set in your `.env`/deployment (optional – falls back to `customer-registration-success`)
|
|
68
|
+
- Customer table must have `email_verified` and `phone_verified` boolean columns (default: `false`) — the provided migration handles this.
|
|
69
|
+
- Run `npx medusa db:migrate` after installation so the module migration is applied.
|
|
70
|
+
- No additional providers, subscribers, or admin extensions are required.
|
|
77
71
|
|
|
78
72
|
## Development
|
|
79
73
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "customer-registration",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"description": "Medusa plugin
|
|
3
|
+
"version": "0.0.22",
|
|
4
|
+
"description": "Medusa plugin that overrides store customer registration and enforces email/phone verification flags.",
|
|
5
5
|
"author": "Medusa (https://medusajs.com)",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"files": [
|
|
@@ -9,16 +9,9 @@
|
|
|
9
9
|
],
|
|
10
10
|
"exports": {
|
|
11
11
|
"./package.json": "./package.json",
|
|
12
|
-
"./workflows": "./.medusa/server/src/workflows/index.js",
|
|
13
12
|
"./.medusa/server/src/modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
14
13
|
"./modules/*": "./.medusa/server/src/modules/*/index.js",
|
|
15
|
-
"
|
|
16
|
-
"./*": "./.medusa/server/src/*.js",
|
|
17
|
-
"./admin": {
|
|
18
|
-
"import": "./.medusa/server/src/admin/index.mjs",
|
|
19
|
-
"require": "./.medusa/server/src/admin/index.js",
|
|
20
|
-
"default": "./.medusa/server/src/admin/index.js"
|
|
21
|
-
}
|
|
14
|
+
"./*": "./.medusa/server/src/*.js"
|
|
22
15
|
},
|
|
23
16
|
"keywords": [
|
|
24
17
|
"medusa",
|
|
@@ -30,37 +23,19 @@
|
|
|
30
23
|
"scripts": {
|
|
31
24
|
"build": "medusa plugin:build",
|
|
32
25
|
"dev": "medusa plugin:develop",
|
|
33
|
-
"prepublishOnly": "medusa plugin:build"
|
|
34
|
-
"publish": "npm version patch && npm publish"
|
|
26
|
+
"prepublishOnly": "medusa plugin:build"
|
|
35
27
|
},
|
|
36
28
|
"devDependencies": {
|
|
37
|
-
"@medusajs/admin-sdk": "2.11.2",
|
|
38
29
|
"@medusajs/cli": "2.11.2",
|
|
39
30
|
"@medusajs/framework": "2.11.2",
|
|
40
31
|
"@medusajs/medusa": "2.11.2",
|
|
41
|
-
"@medusajs/test-utils": "2.11.2",
|
|
42
|
-
"@medusajs/ui": "4.0.25",
|
|
43
|
-
"@medusajs/icons": "2.11.2",
|
|
44
|
-
"@swc/core": "1.5.7",
|
|
45
|
-
"@types/node": "^20.0.0",
|
|
46
|
-
"@types/react": "^18.3.2",
|
|
47
|
-
"@types/react-dom": "^18.2.25",
|
|
48
|
-
"prop-types": "^15.8.1",
|
|
49
|
-
"react": "^18.2.0",
|
|
50
|
-
"react-dom": "^18.2.0",
|
|
51
32
|
"ts-node": "^10.9.2",
|
|
52
|
-
"typescript": "^5.6.2"
|
|
53
|
-
"vite": "^5.2.11",
|
|
54
|
-
"yalc": "^1.0.0-pre.53"
|
|
33
|
+
"typescript": "^5.6.2"
|
|
55
34
|
},
|
|
56
35
|
"peerDependencies": {
|
|
57
|
-
"@medusajs/admin-sdk": "2.11.2",
|
|
58
36
|
"@medusajs/cli": "2.11.2",
|
|
59
37
|
"@medusajs/framework": "2.11.2",
|
|
60
|
-
"@medusajs/
|
|
61
|
-
"@medusajs/medusa": "2.11.2",
|
|
62
|
-
"@medusajs/ui": "4.0.25",
|
|
63
|
-
"@medusajs/icons": "2.11.2"
|
|
38
|
+
"@medusajs/medusa": "2.11.2"
|
|
64
39
|
},
|
|
65
40
|
"engines": {
|
|
66
41
|
"node": ">=20"
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GET = GET;
|
|
4
|
-
async function GET(req, res) {
|
|
5
|
-
res.sendStatus(200);
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BsdWdpbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUtDO0FBTE0sS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDIn0=
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.GET = GET;
|
|
4
|
-
async function GET(req, res) {
|
|
5
|
-
res.sendStatus(200);
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3BsdWdpbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUtDO0FBTE0sS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDIn0=
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Migration20250118000000 = void 0;
|
|
4
|
-
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
-
const TABLE_NAME = "customer";
|
|
6
|
-
const EMAIL_COLUMN = "email_verified";
|
|
7
|
-
const PHONE_COLUMN = "phone_verified";
|
|
8
|
-
class Migration20250118000000 extends migrations_1.Migration {
|
|
9
|
-
async up() {
|
|
10
|
-
this.addSql(`alter table "${TABLE_NAME}"
|
|
11
|
-
add column if not exists "${EMAIL_COLUMN}" boolean not null default false,
|
|
12
|
-
add column if not exists "${PHONE_COLUMN}" boolean not null default false;`);
|
|
13
|
-
}
|
|
14
|
-
async down() {
|
|
15
|
-
this.addSql(`alter table "${TABLE_NAME}"
|
|
16
|
-
drop column if exists "${EMAIL_COLUMN}",
|
|
17
|
-
drop column if exists "${PHONE_COLUMN}";`);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
exports.Migration20250118000000 = Migration20250118000000;
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTAxMTgwMDAwMDBBZGRFbWFpbFZlcmlmaWVkQ29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTAxMTgwMDAwMDBBZGRFbWFpbFZlcmlmaWVkQ29sdW1uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFvRTtBQUVwRSxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUE7QUFDN0IsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUE7QUFDckMsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUE7QUFFckMsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUMzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQ1QsZ0JBQWdCLFVBQVU7b0NBQ0ksWUFBWTtvQ0FDWixZQUFZLG1DQUFtQyxDQUM5RSxDQUFBO0lBQ0gsQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQ1QsZ0JBQWdCLFVBQVU7aUNBQ0MsWUFBWTtpQ0FDWixZQUFZLElBQUksQ0FDNUMsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQWhCRCwwREFnQkMifQ==
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.config = void 0;
|
|
4
|
-
exports.default = handleCustomerCreated;
|
|
5
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
-
const WELCOME_TEMPLATE_ID = process.env.CUSTOMER_REGISTRATION_WELCOME_TEMPLATE_ID ||
|
|
7
|
-
"customer-registration-success";
|
|
8
|
-
async function handleCustomerCreated({ event: { data }, container, }) {
|
|
9
|
-
const logger = container.hasRegistration(utils_1.ContainerRegistrationKeys.LOGGER)
|
|
10
|
-
? container.resolve(utils_1.ContainerRegistrationKeys.LOGGER)
|
|
11
|
-
: null;
|
|
12
|
-
if (!Array.isArray(data) || !data.length) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
const customerIds = data
|
|
16
|
-
.map((payload) => payload?.id)
|
|
17
|
-
.filter((id) => typeof id === "string" && !!id);
|
|
18
|
-
if (!customerIds.length) {
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
try {
|
|
22
|
-
const customerModuleService = container.resolve(utils_1.Modules.CUSTOMER);
|
|
23
|
-
const customers = await customerModuleService.listCustomers({
|
|
24
|
-
id: customerIds,
|
|
25
|
-
});
|
|
26
|
-
if (!customers.length) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
if (!container.hasRegistration(utils_1.Modules.NOTIFICATION)) {
|
|
30
|
-
logger?.warn?.("[customer-registration] Notification module is not configured. Skipping welcome email.");
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
const notificationModuleService = container.resolve(utils_1.Modules.NOTIFICATION);
|
|
34
|
-
await notificationModuleService.createNotifications(customers.map((customer) => ({
|
|
35
|
-
to: customer.email,
|
|
36
|
-
channel: "email",
|
|
37
|
-
template: WELCOME_TEMPLATE_ID,
|
|
38
|
-
resource_id: customer.id,
|
|
39
|
-
resource_type: "customer",
|
|
40
|
-
receiver_id: customer.id,
|
|
41
|
-
trigger_type: "customer-registration",
|
|
42
|
-
data: {
|
|
43
|
-
email: customer.email,
|
|
44
|
-
first_name: customer.first_name,
|
|
45
|
-
last_name: customer.last_name,
|
|
46
|
-
full_name: [customer.first_name, customer.last_name]
|
|
47
|
-
.filter(Boolean)
|
|
48
|
-
.join(" ")
|
|
49
|
-
.trim(),
|
|
50
|
-
},
|
|
51
|
-
})));
|
|
52
|
-
}
|
|
53
|
-
catch (error) {
|
|
54
|
-
logger?.error?.("[customer-registration] Failed to send welcome email", error);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
exports.config = {
|
|
58
|
-
event: utils_1.CustomerWorkflowEvents.CREATED,
|
|
59
|
-
};
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItY3JlYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9jdXN0b21lci1jcmVhdGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQW1CQSx3Q0FvRUM7QUFsRkQscURBSWtDO0FBTWxDLE1BQU0sbUJBQW1CLEdBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMseUNBQXlDO0lBQ3JELCtCQUErQixDQUFBO0FBRWxCLEtBQUssVUFBVSxxQkFBcUIsQ0FBQyxFQUNsRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFDZixTQUFTLEdBQzhCO0lBQ3ZDLE1BQU0sTUFBTSxHQUFrQixTQUFTLENBQUMsZUFBZSxDQUNyRCxpQ0FBeUIsQ0FBQyxNQUFNLENBQ2pDO1FBQ0MsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDO1FBQ3JELENBQUMsQ0FBQyxJQUFJLENBQUE7SUFFUixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6QyxPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sV0FBVyxHQUFHLElBQUk7U0FDckIsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1NBQzdCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBZ0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFL0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QixPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0scUJBQXFCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFakUsTUFBTSxTQUFTLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxhQUFhLENBQUM7WUFDMUQsRUFBRSxFQUFFLFdBQVc7U0FDaEIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixPQUFNO1FBQ1IsQ0FBQztRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLGVBQU8sQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FDWix3RkFBd0YsQ0FDekYsQ0FBQTtZQUNELE9BQU07UUFDUixDQUFDO1FBRUQsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGVBQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUV6RSxNQUFNLHlCQUF5QixDQUFDLG1CQUFtQixDQUNqRCxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNCLEVBQUUsRUFBRSxRQUFRLENBQUMsS0FBSztZQUNsQixPQUFPLEVBQUUsT0FBTztZQUNoQixRQUFRLEVBQUUsbUJBQW1CO1lBQzdCLFdBQVcsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUN4QixhQUFhLEVBQUUsVUFBVTtZQUN6QixXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDeEIsWUFBWSxFQUFFLHVCQUF1QjtZQUNyQyxJQUFJLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNyQixVQUFVLEVBQUUsUUFBUSxDQUFDLFVBQVU7Z0JBQy9CLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDN0IsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDO3FCQUNqRCxNQUFNLENBQUMsT0FBTyxDQUFDO3FCQUNmLElBQUksQ0FBQyxHQUFHLENBQUM7cUJBQ1QsSUFBSSxFQUFFO2FBQ1Y7U0FDRixDQUFDLENBQUMsQ0FDSixDQUFBO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLEVBQUUsS0FBSyxFQUFFLENBQ2Isc0RBQXNELEVBQ3RELEtBQUssQ0FDTixDQUFBO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBcUI7SUFDdEMsS0FBSyxFQUFFLDhCQUFzQixDQUFDLE9BQU87Q0FDdEMsQ0FBQSJ9
|