@lodashventure/medusa-login-provider 0.4.10 → 0.4.12

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.
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("@medusajs/framework/utils");
4
+ /**
5
+ * Example Medusa configuration with LINE auth provider
6
+ *
7
+ * Add this auth module configuration to your medusa-config.ts
8
+ */
9
+ exports.default = (0, utils_1.defineConfig)({
10
+ projectConfig: {
11
+ // ... your existing project config
12
+ databaseUrl: process.env.MEDUSA_DATABASE_URL,
13
+ http: {
14
+ storeCors: process.env.MEDUSA_STORE_CORS,
15
+ adminCors: process.env.MEDUSA_ADMIN_CORS,
16
+ authCors: process.env.MEDUSA_AUTH_CORS,
17
+ jwtSecret: process.env.MEDUSA_JWT_SECRET || "supersecret",
18
+ cookieSecret: process.env.MEDUSA_COOKIE_SECRET || "supersecret",
19
+ },
20
+ },
21
+ plugins: [
22
+ // Remove the LINE provider from plugins section if it's there
23
+ // ... other plugins
24
+ ],
25
+ modules: [
26
+ // ... other modules
27
+ {
28
+ resolve: "@medusajs/medusa/auth",
29
+ options: {
30
+ providers: [
31
+ // Keep existing providers like emailpass
32
+ {
33
+ resolve: "@medusajs/medusa/auth-emailpass",
34
+ id: "emailpass",
35
+ options: {
36
+ // emailpass options
37
+ },
38
+ },
39
+ // Add LINE provider here
40
+ {
41
+ resolve: "@lodashventure/medusa-login-provider/providers/line",
42
+ id: "line",
43
+ options: {
44
+ lineChannelId: process.env.LINE_CHANNEL_ID,
45
+ lineChannelSecret: process.env.LINE_CHANNEL_SECRET,
46
+ // Optional: specify callback URL if different from default
47
+ callbackUrl: process.env.LINE_CALLBACK_URL,
48
+ // Optional: auto-create customers
49
+ autoCreateCustomer: true,
50
+ syncProfileData: true,
51
+ },
52
+ },
53
+ ],
54
+ },
55
+ },
56
+ ],
57
+ });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkdXNhLWNvbmZpZy1hdXRoLmV4YW1wbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9tZWR1c2EtY29uZmlnLWF1dGguZXhhbXBsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUFrRTtBQUVsRTs7OztHQUlHO0FBQ0gsa0JBQWUsSUFBQSxvQkFBWSxFQUFDO0lBQzFCLGFBQWEsRUFBRTtRQUNiLG1DQUFtQztRQUNuQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUI7UUFDNUMsSUFBSSxFQUFFO1lBQ0osU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWtCO1lBQ3pDLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFrQjtZQUN6QyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBaUI7WUFDdkMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksYUFBYTtZQUN6RCxZQUFZLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsSUFBSSxhQUFhO1NBQ2hFO0tBQ0Y7SUFDRCxPQUFPLEVBQUU7SUFDUCw4REFBOEQ7SUFDOUQsb0JBQW9CO0tBQ3JCO0lBQ0QsT0FBTyxFQUFFO1FBQ1Asb0JBQW9CO1FBQ3BCO1lBQ0UsT0FBTyxFQUFFLHVCQUF1QjtZQUNoQyxPQUFPLEVBQUU7Z0JBQ1AsU0FBUyxFQUFFO29CQUNULHlDQUF5QztvQkFDekM7d0JBQ0UsT0FBTyxFQUFFLGlDQUFpQzt3QkFDMUMsRUFBRSxFQUFFLFdBQVc7d0JBQ2YsT0FBTyxFQUFFO3dCQUNQLG9CQUFvQjt5QkFDckI7cUJBQ0Y7b0JBQ0QseUJBQXlCO29CQUN6Qjt3QkFDRSxPQUFPLEVBQUUscURBQXFEO3dCQUM5RCxFQUFFLEVBQUUsTUFBTTt3QkFDVixPQUFPLEVBQUU7NEJBQ1AsYUFBYSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZTs0QkFDMUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUI7NEJBQ2xELDJEQUEyRDs0QkFDM0QsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCOzRCQUMxQyxrQ0FBa0M7NEJBQ2xDLGtCQUFrQixFQUFFLElBQUk7NEJBQ3hCLGVBQWUsRUFBRSxJQUFJO3lCQUN0QjtxQkFDRjtpQkFDRjthQUNGO1NBQ0Y7S0FDRjtDQUNGLENBQUMsQ0FBQyJ9
@@ -0,0 +1,222 @@
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 = POST;
7
+ exports.GET = GET;
8
+ const utils_1 = require("@medusajs/framework/utils");
9
+ const ioredis_1 = __importDefault(require("ioredis"));
10
+ const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
11
+ const line_create_customer_1 = require("../../../workflows/line-create-customer");
12
+ /**
13
+ * POST /store/line-pending-customers
14
+ * Creates a customer from pending LINE data stored in Redis
15
+ * Requires JWT with auth_identity_id
16
+ */
17
+ async function POST(req, res) {
18
+ const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
19
+ const customerService = req.scope.resolve(utils_1.Modules.CUSTOMER);
20
+ // Extract JWT from Authorization header
21
+ const authHeader = req.headers.authorization;
22
+ if (!authHeader || !authHeader.startsWith("Bearer ")) {
23
+ return res.status(401).json({
24
+ success: false,
25
+ error: "Authorization header with Bearer token is required",
26
+ });
27
+ }
28
+ const token = authHeader.substring(7);
29
+ let auth_identity_id;
30
+ try {
31
+ // Decode JWT to get auth_identity_id (no verification, just decode)
32
+ const decoded = jsonwebtoken_1.default.decode(token);
33
+ if (!decoded || !decoded.auth_identity_id) {
34
+ return res.status(401).json({
35
+ success: false,
36
+ error: "Invalid token: auth_identity_id not found",
37
+ });
38
+ }
39
+ auth_identity_id = decoded.auth_identity_id;
40
+ logger.info(`Extracted auth_identity_id from JWT: ${auth_identity_id}`);
41
+ }
42
+ catch (error) {
43
+ logger.error("Error decoding JWT:", error);
44
+ return res.status(401).json({
45
+ success: false,
46
+ error: "Invalid token",
47
+ });
48
+ }
49
+ // Get Redis URL from environment
50
+ const redisUrl = process.env.MEDUSA_REDIS_URL || process.env.REDIS_URL;
51
+ if (!redisUrl) {
52
+ return res.status(503).json({
53
+ success: false,
54
+ error: "Redis is not configured",
55
+ });
56
+ }
57
+ const redis = new ioredis_1.default(redisUrl);
58
+ const key = `line:pending_customer:${auth_identity_id}`;
59
+ try {
60
+ // Step 1: Retrieve pending customer data from Redis using auth_identity_id
61
+ const pendingDataStr = await redis.get(key);
62
+ if (!pendingDataStr) {
63
+ logger.warn(`No pending customer data found for auth_identity_id: ${auth_identity_id}`);
64
+ return res.status(404).json({
65
+ success: false,
66
+ error: "No pending customer data found for this auth_identity_id",
67
+ });
68
+ }
69
+ const pendingData = JSON.parse(pendingDataStr);
70
+ logger.info(`Retrieved pending customer data for LINE user: ${pendingData.line_user_id}`);
71
+ // Step 2: Check if customer already exists with this email
72
+ if (pendingData.email) {
73
+ const existingCustomers = await customerService.listCustomers({
74
+ email: pendingData.email,
75
+ });
76
+ if (existingCustomers?.length > 0) {
77
+ // Update existing customer with LINE data
78
+ const customer = existingCustomers[0];
79
+ const updated = await customerService.updateCustomers(customer.id, {
80
+ metadata: {
81
+ ...customer.metadata,
82
+ line_user_id: pendingData.line_user_id,
83
+ line_display_name: pendingData.display_name,
84
+ line_picture_url: pendingData.picture_url,
85
+ line_status_message: pendingData.status_message,
86
+ line_linked_at: new Date().toISOString(),
87
+ auth_identity_id: auth_identity_id,
88
+ },
89
+ });
90
+ // Step 3: Update auth identity with customer ID
91
+ const authService = req.scope.resolve(utils_1.Modules.AUTH);
92
+ await authService.updateAuthIdentities({
93
+ id: auth_identity_id,
94
+ app_metadata: {
95
+ customer_id: customer.id,
96
+ },
97
+ });
98
+ // Step 4: Delete from Redis after successful creation
99
+ await redis.del(key);
100
+ logger.info(`Linked existing customer ${customer.id} with LINE user ${pendingData.line_user_id}`);
101
+ return res.json({
102
+ success: true,
103
+ customer: updated,
104
+ message: "Existing customer linked with LINE account",
105
+ action: "linked",
106
+ });
107
+ }
108
+ }
109
+ // Step 3: Create new customer using workflow
110
+ logger.info(`Creating new customer for LINE user: ${pendingData.line_user_id}`);
111
+ const { result } = await (0, line_create_customer_1.lineCreateCustomerWorkflow)(req.scope).run({
112
+ input: {
113
+ data: {
114
+ email: pendingData.email || `line_${pendingData.line_user_id}@line.me`,
115
+ line_user_id: pendingData.line_user_id,
116
+ display_name: pendingData.display_name,
117
+ picture_url: pendingData.picture_url,
118
+ name: pendingData.name,
119
+ auth_identity_id: auth_identity_id,
120
+ },
121
+ },
122
+ });
123
+ // Step 4: Update auth identity with customer ID
124
+ const authService = req.scope.resolve(utils_1.Modules.AUTH);
125
+ await authService.updateAuthIdentities({
126
+ id: auth_identity_id,
127
+ app_metadata: {
128
+ customer_id: result.customer.id,
129
+ },
130
+ });
131
+ // Step 5: Delete from Redis after successful creation
132
+ await redis.del(key);
133
+ logger.info(`Created customer ${result.customer.id} from pending LINE data for auth_identity ${auth_identity_id}`);
134
+ return res.status(201).json({
135
+ success: true,
136
+ customer: result.customer,
137
+ message: "Customer created successfully from LINE data",
138
+ action: "created",
139
+ });
140
+ }
141
+ catch (error) {
142
+ logger.error("Error creating customer from pending LINE data:", error);
143
+ return res.status(500).json({
144
+ success: false,
145
+ error: error.message || "Failed to create customer",
146
+ });
147
+ }
148
+ finally {
149
+ await redis.quit();
150
+ }
151
+ }
152
+ /**
153
+ * GET /store/line-pending-customers
154
+ * Checks if pending customer data exists for the auth_identity_id in JWT
155
+ */
156
+ async function GET(req, res) {
157
+ const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
158
+ // Extract JWT from Authorization header
159
+ const authHeader = req.headers.authorization;
160
+ if (!authHeader || !authHeader.startsWith("Bearer ")) {
161
+ return res.status(401).json({
162
+ success: false,
163
+ error: "Authorization header with Bearer token is required",
164
+ });
165
+ }
166
+ const token = authHeader.substring(7);
167
+ let auth_identity_id;
168
+ try {
169
+ // Decode JWT to get auth_identity_id
170
+ const decoded = jsonwebtoken_1.default.decode(token);
171
+ if (!decoded || !decoded.auth_identity_id) {
172
+ return res.status(401).json({
173
+ success: false,
174
+ error: "Invalid token: auth_identity_id not found",
175
+ });
176
+ }
177
+ auth_identity_id = decoded.auth_identity_id;
178
+ }
179
+ catch (error) {
180
+ logger.error("Error decoding JWT:", error);
181
+ return res.status(401).json({
182
+ success: false,
183
+ error: "Invalid token",
184
+ });
185
+ }
186
+ const redisUrl = process.env.MEDUSA_REDIS_URL || process.env.REDIS_URL;
187
+ if (!redisUrl) {
188
+ return res.status(503).json({
189
+ success: false,
190
+ error: "Redis is not configured",
191
+ });
192
+ }
193
+ const redis = new ioredis_1.default(redisUrl);
194
+ const key = `line:pending_customer:${auth_identity_id}`;
195
+ try {
196
+ const pendingDataStr = await redis.get(key);
197
+ if (!pendingDataStr) {
198
+ return res.json({
199
+ success: true,
200
+ has_pending_data: false,
201
+ message: "No pending customer data found",
202
+ });
203
+ }
204
+ const pendingData = JSON.parse(pendingDataStr);
205
+ return res.json({
206
+ success: true,
207
+ has_pending_data: true,
208
+ pending_customer: pendingData,
209
+ });
210
+ }
211
+ catch (error) {
212
+ logger.error("Error retrieving pending customer data:", error);
213
+ return res.status(500).json({
214
+ success: false,
215
+ error: "Failed to retrieve pending customer data",
216
+ });
217
+ }
218
+ finally {
219
+ await redis.quit();
220
+ }
221
+ }
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2xpbmUtcGVuZGluZy1jdXN0b21lcnMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUE0QkEsb0JBc0tDO0FBTUQsa0JBMkVDO0FBbFJELHFEQUErRTtBQUMvRSxzREFBNEI7QUFDNUIsZ0VBQStCO0FBQy9CLGtGQUFxRjtBQW1CckY7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxJQUFJLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUNoRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRSxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFNUQsd0NBQXdDO0lBQ3hDLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQzdDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDckQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMxQixPQUFPLEVBQUUsS0FBSztZQUNkLEtBQUssRUFBRSxvREFBb0Q7U0FDNUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEMsSUFBSSxnQkFBd0IsQ0FBQztJQUU3QixJQUFJLENBQUM7UUFDSCxvRUFBb0U7UUFDcEUsTUFBTSxPQUFPLEdBQUcsc0JBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFlLENBQUM7UUFFaEQsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8s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
@@ -0,0 +1,31 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.LineProvider = void 0;
21
+ const utils_1 = require("@medusajs/framework/utils");
22
+ const service_1 = __importDefault(require("./providers/line/service"));
23
+ exports.default = (0, utils_1.ModuleProvider)(utils_1.Modules.AUTH, {
24
+ services: [service_1.default],
25
+ });
26
+ // Export the LINE provider for direct access
27
+ var service_2 = require("./providers/line/service");
28
+ Object.defineProperty(exports, "LineProvider", { enumerable: true, get: function () { return __importDefault(service_2).default; } });
29
+ __exportStar(require("./providers/line/customer-helper"), exports);
30
+ __exportStar(require("./providers/line/utils"), exports);
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBb0U7QUFDcEUsdUVBQTJEO0FBRTNELGtCQUFlLElBQUEsc0JBQWMsRUFBQyxlQUFPLENBQUMsSUFBSSxFQUFFO0lBQzFDLFFBQVEsRUFBRSxDQUFDLGlCQUFtQixDQUFDO0NBQ2hDLENBQUMsQ0FBQztBQUVILDZDQUE2QztBQUM3QyxvREFBbUU7QUFBMUQsd0hBQUEsT0FBTyxPQUFnQjtBQUNoQyxtRUFBaUQ7QUFDakQseURBQXVDIn0=
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createOrUpdateLineCustomer = createOrUpdateLineCustomer;
4
+ exports.extractCustomerData = extractCustomerData;
5
+ exports.shouldCreateCustomer = shouldCreateCustomer;
6
+ const core_flows_1 = require("@medusajs/medusa/core-flows");
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const CUSTOMER_ID_CONFLICT_TOKEN = "customer_id already exists";
9
+ function findCustomerIdConflictMessage(error) {
10
+ if (error === null || error === undefined) {
11
+ return undefined;
12
+ }
13
+ const stack = [error];
14
+ const visited = new Set();
15
+ while (stack.length) {
16
+ const current = stack.pop();
17
+ if (current === null || current === undefined) {
18
+ continue;
19
+ }
20
+ if (typeof current === "string") {
21
+ if (current.includes(CUSTOMER_ID_CONFLICT_TOKEN)) {
22
+ return current;
23
+ }
24
+ continue;
25
+ }
26
+ if (typeof current === "object") {
27
+ if (visited.has(current)) {
28
+ continue;
29
+ }
30
+ visited.add(current);
31
+ const message = current.message;
32
+ if (typeof message === "string" && message.includes(CUSTOMER_ID_CONFLICT_TOKEN)) {
33
+ return message;
34
+ }
35
+ const cause = current.cause;
36
+ if (cause) {
37
+ stack.push(cause);
38
+ }
39
+ const nestedError = current.error;
40
+ if (nestedError) {
41
+ stack.push(nestedError);
42
+ }
43
+ const nestedErrors = current.errors;
44
+ if (Array.isArray(nestedErrors)) {
45
+ for (const nested of nestedErrors) {
46
+ stack.push(nested);
47
+ }
48
+ }
49
+ }
50
+ }
51
+ return undefined;
52
+ }
53
+ /**
54
+ * Creates or updates a customer account for a LINE authenticated user
55
+ * Uses Medusa's createCustomerAccountWorkflow for proper integration
56
+ */
57
+ async function createOrUpdateLineCustomer(options) {
58
+ const { authIdentityId, userMetadata, container, logger } = options;
59
+ const customerService = container.resolve(utils_1.Modules.CUSTOMER);
60
+ const authService = container.resolve(utils_1.Modules.AUTH);
61
+ const email = userMetadata.email || `line_${userMetadata.line_user_id}@line.me`;
62
+ const firstName = userMetadata.first_name || userMetadata.display_name || "LINE User";
63
+ const lastName = userMetadata.last_name || "";
64
+ try {
65
+ // Check if customer already exists
66
+ const existingCustomers = await customerService.listCustomers({ email });
67
+ if (existingCustomers?.length > 0) {
68
+ // Update existing customer
69
+ const customer = existingCustomers[0];
70
+ await customerService.updateCustomers(customer.id, {
71
+ first_name: firstName,
72
+ last_name: lastName,
73
+ metadata: {
74
+ ...customer.metadata,
75
+ line_user_id: userMetadata.line_user_id,
76
+ line_display_name: userMetadata.display_name,
77
+ line_picture_url: userMetadata.picture_url,
78
+ line_status_message: userMetadata.status_message,
79
+ line_updated_at: new Date().toISOString(),
80
+ },
81
+ });
82
+ // Update auth identity with customer ID
83
+ await authService.updateAuthIdentities({
84
+ id: authIdentityId,
85
+ app_metadata: {
86
+ customer_id: customer.id,
87
+ },
88
+ });
89
+ if (logger) {
90
+ logger.info(`Updated existing customer ${customer.id} for LINE user ${userMetadata.line_user_id}`);
91
+ }
92
+ return { customer, created: false };
93
+ }
94
+ // Create new customer using workflow
95
+ const { result } = await (0, core_flows_1.createCustomerAccountWorkflow)(container).run({
96
+ input: {
97
+ authIdentityId,
98
+ customerData: {
99
+ email,
100
+ first_name: firstName,
101
+ last_name: lastName,
102
+ metadata: {
103
+ line_user_id: userMetadata.line_user_id,
104
+ line_display_name: userMetadata.display_name,
105
+ line_picture_url: userMetadata.picture_url,
106
+ line_status_message: userMetadata.status_message,
107
+ line_created_at: new Date().toISOString(),
108
+ },
109
+ },
110
+ },
111
+ });
112
+ if (logger) {
113
+ logger.info(`Created new customer ${result.id} for LINE user ${userMetadata.line_user_id}`);
114
+ }
115
+ return { customer: result, created: true };
116
+ }
117
+ catch (error) {
118
+ const conflictMessage = findCustomerIdConflictMessage(error);
119
+ if (conflictMessage) {
120
+ if (logger) {
121
+ logger.info(`customer_id already set in app_metadata, returning existing customer for LINE user ${userMetadata.line_user_id}`);
122
+ }
123
+ try {
124
+ const authIdentities = await authService.listAuthIdentities({
125
+ id: [authIdentityId],
126
+ });
127
+ const linkedCustomerId = authIdentities?.[0]?.app_metadata
128
+ ?.customer_id;
129
+ if (linkedCustomerId) {
130
+ try {
131
+ const customer = await customerService.retrieveCustomer(linkedCustomerId);
132
+ return { customer, created: false };
133
+ }
134
+ catch (retrieveError) {
135
+ if (logger) {
136
+ const reason = retrieveError instanceof Error
137
+ ? retrieveError.message
138
+ : String(retrieveError);
139
+ logger.warn(`Failed to retrieve customer ${linkedCustomerId} after metadata conflict: ${reason}`);
140
+ }
141
+ }
142
+ }
143
+ }
144
+ catch (authLookupError) {
145
+ if (logger) {
146
+ const reason = authLookupError instanceof Error
147
+ ? authLookupError.message
148
+ : String(authLookupError);
149
+ logger.warn(`Unable to verify auth identity metadata after conflict: ${reason}`);
150
+ }
151
+ }
152
+ const existingCustomers = await customerService.listCustomers({ email });
153
+ if (existingCustomers?.length > 0) {
154
+ return { customer: existingCustomers[0], created: false };
155
+ }
156
+ throw new Error(`Auth identity ${authIdentityId} is already linked to a customer, but the customer record could not be retrieved`);
157
+ }
158
+ if (logger) {
159
+ logger.error(`Failed to create/update customer for LINE user ${userMetadata.line_user_id}:`, error);
160
+ }
161
+ // Fallback: Try direct customer creation
162
+ try {
163
+ const customer = await customerService.createCustomers({
164
+ email,
165
+ first_name: firstName,
166
+ last_name: lastName,
167
+ metadata: {
168
+ line_user_id: userMetadata.line_user_id,
169
+ line_display_name: userMetadata.display_name,
170
+ line_picture_url: userMetadata.picture_url,
171
+ line_status_message: userMetadata.status_message,
172
+ line_created_at: new Date().toISOString(),
173
+ auth_identity_id: authIdentityId,
174
+ },
175
+ });
176
+ // Update auth identity with customer ID
177
+ await authService.updateAuthIdentities({
178
+ id: authIdentityId,
179
+ app_metadata: {
180
+ customer_id: customer.id,
181
+ },
182
+ });
183
+ if (logger) {
184
+ logger.info(`Created customer ${customer.id} via fallback method for LINE user ${userMetadata.line_user_id}`);
185
+ }
186
+ return { customer, created: true };
187
+ }
188
+ catch (fallbackError) {
189
+ if (logger) {
190
+ logger.error(`Fallback customer creation also failed:`, fallbackError);
191
+ }
192
+ throw fallbackError;
193
+ }
194
+ }
195
+ }
196
+ /**
197
+ * Extract customer data from LINE user metadata
198
+ */
199
+ function extractCustomerData(userMetadata) {
200
+ const email = userMetadata.email || `line_${userMetadata.line_user_id}@line.me`;
201
+ const displayName = userMetadata.name || userMetadata.display_name || "";
202
+ const nameParts = displayName.trim().split(" ");
203
+ return {
204
+ email,
205
+ first_name: userMetadata.first_name || nameParts[0] || "LINE User",
206
+ last_name: userMetadata.last_name || nameParts.slice(1).join(" ") || "",
207
+ metadata: {
208
+ line_user_id: userMetadata.line_user_id,
209
+ line_display_name: userMetadata.display_name,
210
+ line_picture_url: userMetadata.picture_url || userMetadata.picture,
211
+ line_status_message: userMetadata.status_message,
212
+ },
213
+ };
214
+ }
215
+ /**
216
+ * Check if a customer needs to be created based on auth identity
217
+ */
218
+ async function shouldCreateCustomer(authIdentity, container) {
219
+ // Check if customer creation flag is set
220
+ if (!authIdentity.user_metadata?.needs_customer_creation) {
221
+ return false;
222
+ }
223
+ // Check if customer already exists in app_metadata
224
+ if (authIdentity.app_metadata?.customer_id) {
225
+ const customerService = container.resolve(utils_1.Modules.CUSTOMER);
226
+ try {
227
+ await customerService.retrieveCustomer(authIdentity.app_metadata.customer_id);
228
+ return false; // Customer exists
229
+ }
230
+ catch {
231
+ // Customer doesn't exist, should create
232
+ return true;
233
+ }
234
+ }
235
+ return true;
236
+ }
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9saW5lL2N1c3RvbWVyLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFGQSxnRUE2S0M7QUFLRCxrREFnQkM7QUFLRCxvREFzQkM7QUFsVEQsNERBQTRFO0FBRTVFLHFEQUFvRDtBQUVwRCxNQUFNLDBCQUEwQixHQUFHLDRCQUE0QixDQUFDO0FBRWhFLFNBQVMsNkJBQTZCLENBQUMsS0FBYztJQUNuRCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFXLENBQUM7SUFFbkMsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRTVCLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDOUMsU0FBUztRQUNYLENBQUM7UUFFRCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELE9BQU8sT0FBTyxDQUFDO1lBQ2pCLENBQUM7WUFDRCxTQUFTO1FBQ1gsQ0FBQztRQUVELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLFNBQVM7WUFDWCxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FB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
@@ -0,0 +1,12 @@
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 service_1 = __importDefault(require("./service"));
8
+ const services = [service_1.default];
9
+ exports.default = (0, utils_1.ModuleProvider)(utils_1.Modules.AUTH, {
10
+ services,
11
+ });
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2xpbmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBb0U7QUFDcEUsd0RBQTRDO0FBRTVDLE1BQU0sUUFBUSxHQUFHLENBQUMsaUJBQW1CLENBQUMsQ0FBQztBQUV2QyxrQkFBZSxJQUFBLHNCQUFjLEVBQUMsZUFBTyxDQUFDLElBQUksRUFBRTtJQUMxQyxRQUFRO0NBQ1QsQ0FBQyxDQUFDIn0=