@lodashventure/medusa-login-provider 4.1.3 → 4.1.5

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.
@@ -1,4 +1,18 @@
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
+ };
2
16
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
18
  };
@@ -12,4 +26,6 @@ exports.default = (0, utils_1.ModuleProvider)(utils_1.Modules.AUTH, {
12
26
  // Export the LINE provider for direct access
13
27
  var service_2 = require("./providers/line/service");
14
28
  Object.defineProperty(exports, "LineProvider", { enumerable: true, get: function () { return __importDefault(service_2).default; } });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEscURBQW9FO0FBQ3BFLHVFQUEyRDtBQUUzRCxrQkFBZSxJQUFBLHNCQUFjLEVBQUMsZUFBTyxDQUFDLElBQUksRUFBRTtJQUMxQyxRQUFRLEVBQUUsQ0FBQyxpQkFBbUIsQ0FBQztDQUNoQyxDQUFDLENBQUM7QUFFSCw2Q0FBNkM7QUFDN0Msb0RBQW1FO0FBQTFELHdIQUFBLE9BQU8sT0FBZ0IifQ==
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,152 @@
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
+ /**
9
+ * Creates or updates a customer account for a LINE authenticated user
10
+ * Uses Medusa's createCustomerAccountWorkflow for proper integration
11
+ */
12
+ async function createOrUpdateLineCustomer(options) {
13
+ const { authIdentityId, userMetadata, container, logger } = options;
14
+ const customerService = container.resolve(utils_1.Modules.CUSTOMER);
15
+ const authService = container.resolve(utils_1.Modules.AUTH);
16
+ const email = userMetadata.email || `line_${userMetadata.line_user_id}@line.me`;
17
+ const firstName = userMetadata.first_name || userMetadata.display_name || "LINE User";
18
+ const lastName = userMetadata.last_name || "";
19
+ try {
20
+ // Check if customer already exists
21
+ const existingCustomers = await customerService.listCustomers({ email });
22
+ if (existingCustomers?.length > 0) {
23
+ // Update existing customer
24
+ const customer = existingCustomers[0];
25
+ await customerService.updateCustomers(customer.id, {
26
+ first_name: firstName,
27
+ last_name: lastName,
28
+ metadata: {
29
+ ...customer.metadata,
30
+ line_user_id: userMetadata.line_user_id,
31
+ line_display_name: userMetadata.display_name,
32
+ line_picture_url: userMetadata.picture_url,
33
+ line_status_message: userMetadata.status_message,
34
+ line_updated_at: new Date().toISOString(),
35
+ },
36
+ });
37
+ // Update auth identity with customer ID
38
+ await authService.updateAuthIdentities({
39
+ id: authIdentityId,
40
+ app_metadata: {
41
+ customer_id: customer.id,
42
+ },
43
+ });
44
+ if (logger) {
45
+ logger.info(`Updated existing customer ${customer.id} for LINE user ${userMetadata.line_user_id}`);
46
+ }
47
+ return { customer, created: false };
48
+ }
49
+ // Create new customer using workflow
50
+ const { result } = await (0, core_flows_1.createCustomerAccountWorkflow)(container).run({
51
+ input: {
52
+ authIdentityId,
53
+ customerData: {
54
+ email,
55
+ first_name: firstName,
56
+ last_name: lastName,
57
+ metadata: {
58
+ line_user_id: userMetadata.line_user_id,
59
+ line_display_name: userMetadata.display_name,
60
+ line_picture_url: userMetadata.picture_url,
61
+ line_status_message: userMetadata.status_message,
62
+ line_created_at: new Date().toISOString(),
63
+ },
64
+ },
65
+ },
66
+ });
67
+ if (logger) {
68
+ logger.info(`Created new customer ${result.id} for LINE user ${userMetadata.line_user_id}`);
69
+ }
70
+ return { customer: result, created: true };
71
+ }
72
+ catch (error) {
73
+ if (logger) {
74
+ logger.error(`Failed to create/update customer for LINE user ${userMetadata.line_user_id}:`, error);
75
+ }
76
+ // Fallback: Try direct customer creation
77
+ try {
78
+ const customer = await customerService.createCustomers({
79
+ email,
80
+ first_name: firstName,
81
+ last_name: lastName,
82
+ metadata: {
83
+ line_user_id: userMetadata.line_user_id,
84
+ line_display_name: userMetadata.display_name,
85
+ line_picture_url: userMetadata.picture_url,
86
+ line_status_message: userMetadata.status_message,
87
+ line_created_at: new Date().toISOString(),
88
+ auth_identity_id: authIdentityId,
89
+ },
90
+ });
91
+ // Update auth identity with customer ID
92
+ await authService.updateAuthIdentities({
93
+ id: authIdentityId,
94
+ app_metadata: {
95
+ customer_id: customer.id,
96
+ },
97
+ });
98
+ if (logger) {
99
+ logger.info(`Created customer ${customer.id} via fallback method for LINE user ${userMetadata.line_user_id}`);
100
+ }
101
+ return { customer, created: true };
102
+ }
103
+ catch (fallbackError) {
104
+ if (logger) {
105
+ logger.error(`Fallback customer creation also failed:`, fallbackError);
106
+ }
107
+ throw fallbackError;
108
+ }
109
+ }
110
+ }
111
+ /**
112
+ * Extract customer data from LINE user metadata
113
+ */
114
+ function extractCustomerData(userMetadata) {
115
+ const email = userMetadata.email || `line_${userMetadata.line_user_id}@line.me`;
116
+ const displayName = userMetadata.name || userMetadata.display_name || "";
117
+ const nameParts = displayName.trim().split(" ");
118
+ return {
119
+ email,
120
+ first_name: userMetadata.first_name || nameParts[0] || "LINE User",
121
+ last_name: userMetadata.last_name || nameParts.slice(1).join(" ") || "",
122
+ metadata: {
123
+ line_user_id: userMetadata.line_user_id,
124
+ line_display_name: userMetadata.display_name,
125
+ line_picture_url: userMetadata.picture_url || userMetadata.picture,
126
+ line_status_message: userMetadata.status_message,
127
+ },
128
+ };
129
+ }
130
+ /**
131
+ * Check if a customer needs to be created based on auth identity
132
+ */
133
+ async function shouldCreateCustomer(authIdentity, container) {
134
+ // Check if customer creation flag is set
135
+ if (!authIdentity.user_metadata?.needs_customer_creation) {
136
+ return false;
137
+ }
138
+ // Check if customer already exists in app_metadata
139
+ if (authIdentity.app_metadata?.customer_id) {
140
+ const customerService = container.resolve(utils_1.Modules.CUSTOMER);
141
+ try {
142
+ await customerService.retrieveCustomer(authIdentity.app_metadata.customer_id);
143
+ return false; // Customer exists
144
+ }
145
+ catch {
146
+ // Customer doesn't exist, should create
147
+ return true;
148
+ }
149
+ }
150
+ return true;
151
+ }
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9saW5lL2N1c3RvbWVyLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTJCQSxnRUFnSEM7QUFLRCxrREFnQkM7QUFLRCxvREFzQkM7QUEzTEQsNERBQTRFO0FBRTVFLHFEQUFvRDtBQXFCcEQ7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLDBCQUEwQixDQUM5QyxPQUFrQztJQUVsQyxNQUFNLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3BFLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXBELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLElBQUksUUFBUSxZQUFZLENBQUMsWUFBWSxVQUFVLENBQUM7SUFDaEYsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFVBQVUsSUFBSSxZQUFZLENBQUMsWUFBWSxJQUFJLFdBQVcsQ0FBQztJQUN0RixNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUU5QyxJQUFJLENBQUM7UUFDSCxtQ0FBbUM7UUFDbkMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRXpFLElBQUksaUJBQWlCLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLDJCQUEyQjtZQUMzQixNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0QyxNQUFNLGVBQWUsQ0FBQyxlQUFlLENBQUMsUUFB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
@@ -5,7 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const utils_1 = require("@medusajs/framework/utils");
7
7
  const service_1 = __importDefault(require("./service"));
8
+ const services = [service_1.default];
8
9
  exports.default = (0, utils_1.ModuleProvider)(utils_1.Modules.AUTH, {
9
- services: [service_1.default],
10
+ services,
10
11
  });
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2xpbmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBb0U7QUFDcEUsd0RBQTRDO0FBRTVDLGtCQUFlLElBQUEsc0JBQWMsRUFBQyxlQUFPLENBQUMsSUFBSSxFQUFFO0lBQzFDLFFBQVEsRUFBRSxDQUFDLGlCQUFtQixDQUFDO0NBQ2hDLENBQUMsQ0FBQyJ9
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvcHJvdmlkZXJzL2xpbmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBb0U7QUFDcEUsd0RBQTRDO0FBRTVDLE1BQU0sUUFBUSxHQUFHLENBQUMsaUJBQW1CLENBQUMsQ0FBQztBQUV2QyxrQkFBZSxJQUFBLHNCQUFjLEVBQUMsZUFBTyxDQUFDLElBQUksRUFBRTtJQUMxQyxRQUFRO0NBQ1QsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,132 @@
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.LineRedisHelper = void 0;
7
+ const ioredis_1 = __importDefault(require("ioredis"));
8
+ class LineRedisHelper {
9
+ constructor(redisUrl, logger) {
10
+ this.PREFIX = "line:pending_customer:";
11
+ this.TTL_SECONDS = 86400; // 24 hours
12
+ this.redis = new ioredis_1.default(redisUrl);
13
+ this.logger = logger;
14
+ }
15
+ /**
16
+ * Store pending customer data in Redis with TTL
17
+ * Uses auth_identity_id as the key for easy retrieval
18
+ */
19
+ async storePendingCustomer(authIdentityId, data) {
20
+ const key = `${this.PREFIX}${authIdentityId}`;
21
+ const pendingData = {
22
+ ...data,
23
+ created_at: new Date().toISOString(),
24
+ expires_at: new Date(Date.now() + this.TTL_SECONDS * 1000).toISOString(),
25
+ };
26
+ try {
27
+ await this.redis.setex(key, this.TTL_SECONDS, JSON.stringify(pendingData));
28
+ this.logger.info(`Stored pending customer in Redis: ${key}`);
29
+ }
30
+ catch (error) {
31
+ this.logger.error(`Failed to store pending customer in Redis: ${error}`);
32
+ throw error;
33
+ }
34
+ }
35
+ /**
36
+ * Retrieve pending customer data from Redis by auth_identity_id
37
+ */
38
+ async getPendingCustomer(authIdentityId) {
39
+ const key = `${this.PREFIX}${authIdentityId}`;
40
+ try {
41
+ const data = await this.redis.get(key);
42
+ if (!data) {
43
+ return null;
44
+ }
45
+ return JSON.parse(data);
46
+ }
47
+ catch (error) {
48
+ this.logger.error(`Failed to get pending customer from Redis: ${error}`);
49
+ return null;
50
+ }
51
+ }
52
+ /**
53
+ * Delete pending customer data from Redis (after successful creation)
54
+ */
55
+ async deletePendingCustomer(authIdentityId) {
56
+ const key = `${this.PREFIX}${authIdentityId}`;
57
+ try {
58
+ await this.redis.del(key);
59
+ this.logger.info(`Deleted pending customer from Redis: ${key}`);
60
+ }
61
+ catch (error) {
62
+ this.logger.error(`Failed to delete pending customer from Redis: ${error}`);
63
+ }
64
+ }
65
+ /**
66
+ * Get all pending customers (for admin monitoring)
67
+ */
68
+ async getAllPendingCustomers() {
69
+ try {
70
+ const pattern = `${this.PREFIX}*`;
71
+ const keys = await this.redis.keys(pattern);
72
+ if (keys.length === 0) {
73
+ return [];
74
+ }
75
+ const pipeline = this.redis.pipeline();
76
+ keys.forEach(key => pipeline.get(key));
77
+ const results = await pipeline.exec();
78
+ const pendingCustomers = [];
79
+ results?.forEach(([err, data]) => {
80
+ if (!err && data) {
81
+ try {
82
+ pendingCustomers.push(JSON.parse(data));
83
+ }
84
+ catch (parseError) {
85
+ this.logger.error(`Failed to parse pending customer data: ${parseError}`);
86
+ }
87
+ }
88
+ });
89
+ return pendingCustomers;
90
+ }
91
+ catch (error) {
92
+ this.logger.error(`Failed to get all pending customers from Redis: ${error}`);
93
+ return [];
94
+ }
95
+ }
96
+ /**
97
+ * Check if customer data exists in Redis
98
+ */
99
+ async hasPendingCustomer(authIdentityId) {
100
+ const key = `${this.PREFIX}${authIdentityId}`;
101
+ try {
102
+ const exists = await this.redis.exists(key);
103
+ return exists === 1;
104
+ }
105
+ catch (error) {
106
+ this.logger.error(`Failed to check pending customer in Redis: ${error}`);
107
+ return false;
108
+ }
109
+ }
110
+ /**
111
+ * Update TTL for pending customer
112
+ */
113
+ async extendTTL(authIdentityId, additionalSeconds = 86400) {
114
+ const key = `${this.PREFIX}${authIdentityId}`;
115
+ try {
116
+ const result = await this.redis.expire(key, this.TTL_SECONDS + additionalSeconds);
117
+ return result === 1;
118
+ }
119
+ catch (error) {
120
+ this.logger.error(`Failed to extend TTL for pending customer: ${error}`);
121
+ return false;
122
+ }
123
+ }
124
+ /**
125
+ * Close Redis connection
126
+ */
127
+ async disconnect() {
128
+ await this.redis.quit();
129
+ }
130
+ }
131
+ exports.LineRedisHelper = LineRedisHelper;
132
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkaXMtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3Byb3ZpZGVycy9saW5lL3JlZGlzLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxzREFBMkI7QUFlM0IsTUFBYSxlQUFlO0lBTTFCLFlBQVksUUFBZ0IsRUFBRSxNQUFjO1FBSDNCLFdBQU0sR0FBRyx3QkFBd0IsQ0FBQTtRQUNqQyxnQkFBVyxHQUFHLEtBQUssQ0FBQSxDQUFDLFdBQVc7UUFHOUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLGlCQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxvQkFBb0IsQ0FDeEIsY0FBc0IsRUFDdEIsSUFBNEQ7UUFFNUQsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLGNBQWMsRUFBRSxDQUFBO1FBQzdDLE1BQU0sV0FBVyxHQUF3QjtZQUN2QyxHQUFHLElBQUk7WUFDUCxVQUFVLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7WUFDcEMsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRTtTQUN6RSxDQUFBO1FBRUQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FDcEIsR0FBRyxFQUNILElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQzVCLENBQUE7WUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtRQUM5RCxDQUFDO1FBQUMsT0FBTyxLQUFL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