@lodashventure/medusa-membership 0.1.2 → 0.1.3
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,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = void 0;
|
|
4
|
+
const framework_1 = require("@medusajs/framework");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const promotion_cache_1 = require("../../../../../modules/promotion-cache");
|
|
7
|
+
const usable_promo_1 = require("../../../../../modules/usable-promo");
|
|
8
|
+
/**
|
|
9
|
+
* POST handler for collecting/claiming a specific promotion code by ID
|
|
10
|
+
*
|
|
11
|
+
* Allows authenticated customers to collect a promotion to their account.
|
|
12
|
+
* Once collected, the promotion code can be used during checkout.
|
|
13
|
+
*
|
|
14
|
+
* Validation:
|
|
15
|
+
* - Promotion must exist and be enabled for collection
|
|
16
|
+
* - Customer must be authenticated
|
|
17
|
+
* - Customer cannot collect the same promotion twice
|
|
18
|
+
*/
|
|
19
|
+
const POST = async (req, res) => {
|
|
20
|
+
const { id: promotion_id } = req.params;
|
|
21
|
+
if (!promotion_id) {
|
|
22
|
+
return res.status(400).json({
|
|
23
|
+
message: "promotion_id is required",
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const customerId = req.auth_context.actor_id;
|
|
27
|
+
if (!customerId) {
|
|
28
|
+
return res.status(401).json({
|
|
29
|
+
message: "Customer must be authenticated",
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
// Check if promotion exists and is enabled for collection
|
|
34
|
+
const usablePromoService = framework_1.container.resolve(usable_promo_1.USABLE_PROMO_MODULE);
|
|
35
|
+
const [usablePromotion] = await usablePromoService.listUsablePromotions({
|
|
36
|
+
promotion_id: promotion_id,
|
|
37
|
+
});
|
|
38
|
+
if (!usablePromotion) {
|
|
39
|
+
return res.status(404).json({
|
|
40
|
+
message: "Promotion not found or not available for collection",
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if (!usablePromotion.enabled) {
|
|
44
|
+
return res.status(400).json({
|
|
45
|
+
message: "This promotion is not enabled for collection",
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// Verify promotion exists in the system
|
|
49
|
+
const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
|
|
50
|
+
const promotion = await promotionService.retrievePromotion(promotion_id, {
|
|
51
|
+
relations: [
|
|
52
|
+
"campaign",
|
|
53
|
+
"application_method",
|
|
54
|
+
],
|
|
55
|
+
});
|
|
56
|
+
if (!promotion) {
|
|
57
|
+
return res.status(404).json({
|
|
58
|
+
message: "Promotion not found",
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// Check if customer already has this promotion
|
|
62
|
+
const promoCacheService = framework_1.container.resolve(promotion_cache_1.PROMOTION_CACHE_MODULE);
|
|
63
|
+
const cacheKey = `user:${customerId}:promotion:${promotion_id}`;
|
|
64
|
+
const alreadyCollected = await promoCacheService.exists(cacheKey);
|
|
65
|
+
if (alreadyCollected) {
|
|
66
|
+
return res.status(400).json({
|
|
67
|
+
message: "You have already collected this promotion",
|
|
68
|
+
promotion: {
|
|
69
|
+
id: promotion.id,
|
|
70
|
+
code: promotion.code,
|
|
71
|
+
type: promotion.type,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// Add promotion to customer's cache
|
|
76
|
+
await promoCacheService.set(cacheKey, promotion_id);
|
|
77
|
+
// Return detailed promotion information
|
|
78
|
+
const applicationMethod = promotion.application_method;
|
|
79
|
+
const campaign = promotion.campaign;
|
|
80
|
+
res.status(201).json({
|
|
81
|
+
message: "Promotion collected successfully",
|
|
82
|
+
promotion: {
|
|
83
|
+
id: promotion.id,
|
|
84
|
+
code: promotion.code,
|
|
85
|
+
type: promotion.type,
|
|
86
|
+
is_automatic: promotion.is_automatic,
|
|
87
|
+
campaign: campaign
|
|
88
|
+
? {
|
|
89
|
+
id: campaign.id,
|
|
90
|
+
name: campaign.name,
|
|
91
|
+
description: campaign.description,
|
|
92
|
+
starts_at: campaign.campaign_identifier?.starts_at,
|
|
93
|
+
ends_at: campaign.campaign_identifier?.ends_at,
|
|
94
|
+
}
|
|
95
|
+
: null,
|
|
96
|
+
application_method: applicationMethod
|
|
97
|
+
? {
|
|
98
|
+
type: applicationMethod.type,
|
|
99
|
+
target_type: applicationMethod.target_type,
|
|
100
|
+
allocation: applicationMethod.allocation,
|
|
101
|
+
value: applicationMethod.value,
|
|
102
|
+
}
|
|
103
|
+
: null,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
console.error("Error collecting promotion:", error);
|
|
109
|
+
res.status(500).json({
|
|
110
|
+
message: "Failed to collect promotion",
|
|
111
|
+
error: error instanceof Error ? error.message : String(error),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
exports.POST = POST;
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb21vdGlvbi1jb2Rlcy9baWRdL2NvbGxlY3Qvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBSTZCO0FBQzdCLHFEQUFvRDtBQUNwRCw0RUFBZ0Y7QUFFaEYsc0VBQTBFO0FBRzFFOzs7Ozs7Ozs7O0dBVUc7QUFDSSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQStCLEVBQy9CLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFFeEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsT0FBTyxFQUFFLDBCQUEwQjtTQUNwQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDN0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsT0FBTyxFQUFFLGdDQUFnQztTQUMxQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsMERBQTBEO1FBQzFELE1BQU0sa0JBQWtCLEdBQ3RCLHFCQUFTLENBQUMsT0FBTyxDQUEyQixrQ0FBbUIsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDO1lBQ3RFLFlBQVksRUFBRSxZQUFZO1NBQzNCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixP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
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const framework_1 = require("@medusajs/framework");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const promotion_cache_1 = require("../../../../modules/promotion-cache");
|
|
7
|
+
const usable_promo_1 = require("../../../../modules/usable-promo");
|
|
8
|
+
/**
|
|
9
|
+
* GET handler for fetching a single promotion by ID with full information
|
|
10
|
+
*
|
|
11
|
+
* Returns detailed promotion information including:
|
|
12
|
+
* - Basic promotion details (id, code, type, is_automatic)
|
|
13
|
+
* - Campaign information (name, description, start/end dates)
|
|
14
|
+
* - Application method details (type, value, allocation, rules)
|
|
15
|
+
* - Promotion rules with attributes, operators, and values
|
|
16
|
+
* - Collection status (is_collected flag)
|
|
17
|
+
* - Timestamps (created_at, updated_at)
|
|
18
|
+
*/
|
|
19
|
+
const GET = async (req, res) => {
|
|
20
|
+
const { id } = req.params;
|
|
21
|
+
if (!id) {
|
|
22
|
+
return res.status(400).json({
|
|
23
|
+
message: "Promotion ID is required",
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const customerId = req.auth_context.actor_id;
|
|
27
|
+
if (!customerId) {
|
|
28
|
+
return res.status(401).json({
|
|
29
|
+
message: "Customer must be authenticated",
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
// Check if promotion exists and is enabled for collection
|
|
34
|
+
const usablePromoService = framework_1.container.resolve(usable_promo_1.USABLE_PROMO_MODULE);
|
|
35
|
+
const [usablePromotion] = await usablePromoService.listUsablePromotions({
|
|
36
|
+
promotion_id: id,
|
|
37
|
+
});
|
|
38
|
+
if (!usablePromotion) {
|
|
39
|
+
return res.status(404).json({
|
|
40
|
+
message: "Promotion not found or not available for collection",
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if (!usablePromotion.enabled) {
|
|
44
|
+
return res.status(404).json({
|
|
45
|
+
message: "This promotion is not enabled for collection",
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// Get full promotion details with all relations
|
|
49
|
+
const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
|
|
50
|
+
const promotion = await promotionService.retrievePromotion(id, {
|
|
51
|
+
relations: [
|
|
52
|
+
"campaign",
|
|
53
|
+
"application_method",
|
|
54
|
+
"application_method.target_rules",
|
|
55
|
+
"application_method.buy_rules",
|
|
56
|
+
"rules",
|
|
57
|
+
"rules.values",
|
|
58
|
+
],
|
|
59
|
+
});
|
|
60
|
+
if (!promotion) {
|
|
61
|
+
return res.status(404).json({
|
|
62
|
+
message: "Promotion not found",
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Check if customer has already collected this promotion
|
|
66
|
+
const promoCacheService = framework_1.container.resolve(promotion_cache_1.PROMOTION_CACHE_MODULE);
|
|
67
|
+
const cacheKey = `user:${customerId}:promotion:${id}`;
|
|
68
|
+
const isCollected = await promoCacheService.exists(cacheKey);
|
|
69
|
+
// Extract detailed information
|
|
70
|
+
const applicationMethod = promotion.application_method;
|
|
71
|
+
const rules = promotion.rules || [];
|
|
72
|
+
const campaign = promotion.campaign;
|
|
73
|
+
const promotionWithFullInfo = {
|
|
74
|
+
id: promotion.id,
|
|
75
|
+
code: promotion.code,
|
|
76
|
+
type: promotion.type,
|
|
77
|
+
is_automatic: promotion.is_automatic,
|
|
78
|
+
campaign: campaign
|
|
79
|
+
? {
|
|
80
|
+
id: campaign.id,
|
|
81
|
+
name: campaign.name,
|
|
82
|
+
description: campaign.description,
|
|
83
|
+
starts_at: campaign.campaign_identifier?.starts_at,
|
|
84
|
+
ends_at: campaign.campaign_identifier?.ends_at,
|
|
85
|
+
}
|
|
86
|
+
: null,
|
|
87
|
+
application_method: applicationMethod
|
|
88
|
+
? {
|
|
89
|
+
type: applicationMethod.type,
|
|
90
|
+
target_type: applicationMethod.target_type,
|
|
91
|
+
allocation: applicationMethod.allocation,
|
|
92
|
+
value: applicationMethod.value,
|
|
93
|
+
max_quantity: applicationMethod.max_quantity,
|
|
94
|
+
apply_to_quantity: applicationMethod.apply_to_quantity,
|
|
95
|
+
buy_rules_min_quantity: applicationMethod.buy_rules_min_quantity,
|
|
96
|
+
target_rules: applicationMethod.target_rules || [],
|
|
97
|
+
buy_rules: applicationMethod.buy_rules || [],
|
|
98
|
+
}
|
|
99
|
+
: null,
|
|
100
|
+
rules: rules.map((rule) => ({
|
|
101
|
+
id: rule.id,
|
|
102
|
+
attribute: rule.attribute,
|
|
103
|
+
operator: rule.operator,
|
|
104
|
+
values: rule.values || [],
|
|
105
|
+
})),
|
|
106
|
+
is_collected: isCollected,
|
|
107
|
+
created_at: promotion.created_at,
|
|
108
|
+
updated_at: promotion.updated_at,
|
|
109
|
+
};
|
|
110
|
+
res.status(200).json({
|
|
111
|
+
promotion: promotionWithFullInfo,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.error("Error fetching promotion:", error);
|
|
116
|
+
res.status(500).json({
|
|
117
|
+
message: "Failed to fetch promotion",
|
|
118
|
+
error: error instanceof Error ? error.message : String(error),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
exports.GET = GET;
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb21vdGlvbi1jb2Rlcy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG1EQUk2QjtBQUM3QixxREFBb0Q7QUFDcEQseUVBQTZFO0FBRTdFLG1FQUF1RTtBQUd2RTs7Ozs7Ozs7OztHQVVHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUErQixFQUMvQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFFMUIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1IsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMxQixPQUFPLEVBQUUsMEJBQTBCO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUM3QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMxQixPQUFPLEVBQUUsZ0NBQWdDO1NBQzFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCwwREFBMEQ7UUFDMUQsTUFBTSxrQkFBa0IsR0FDdEIscUJBQVMsQ0FBQyxPQUFPLENBQTJCLGtDQUFtQixDQUFDLENBQUM7UUFDbkUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sa0JBQWtCLENBQUMsb0JBQW9CLENBQUM7WUFDdEUsWUFBWSxFQUFFLEVBQUU7U0FDakIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FB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
|
|
@@ -75,8 +75,17 @@ const POST = async (req, res) => {
|
|
|
75
75
|
};
|
|
76
76
|
exports.POST = POST;
|
|
77
77
|
/**
|
|
78
|
-
* GET handler for listing all available promotions for collection
|
|
79
|
-
*
|
|
78
|
+
* GET handler for listing all available promotions for collection with full information
|
|
79
|
+
*
|
|
80
|
+
* Returns promotions with comprehensive details including:
|
|
81
|
+
* - Basic promotion details (id, code, type, is_automatic)
|
|
82
|
+
* - Campaign information (name, description, start/end dates)
|
|
83
|
+
* - Application method details (type, value, allocation, rules)
|
|
84
|
+
* - Promotion rules with attributes, operators, and values
|
|
85
|
+
* - Collection status (is_collected flag)
|
|
86
|
+
* - Timestamps (created_at, updated_at)
|
|
87
|
+
*
|
|
88
|
+
* Only returns promotions that are enabled for collection but not yet collected by the customer
|
|
80
89
|
*/
|
|
81
90
|
const GET = async (req, res) => {
|
|
82
91
|
const customerId = req.auth_context.actor_id;
|
|
@@ -98,30 +107,74 @@ const GET = async (req, res) => {
|
|
|
98
107
|
});
|
|
99
108
|
}
|
|
100
109
|
const promotionIds = usablePromotions.map((up) => up.promotion_id);
|
|
101
|
-
// Get full promotion details
|
|
110
|
+
// Get full promotion details with all relations
|
|
102
111
|
const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
|
|
103
112
|
const promotions = await promotionService.listPromotions({
|
|
104
113
|
id: promotionIds,
|
|
105
114
|
}, {
|
|
106
|
-
relations: [
|
|
115
|
+
relations: [
|
|
116
|
+
"campaign",
|
|
117
|
+
"application_method",
|
|
118
|
+
"application_method.target_rules",
|
|
119
|
+
"application_method.buy_rules",
|
|
120
|
+
"rules",
|
|
121
|
+
"rules.values",
|
|
122
|
+
],
|
|
107
123
|
});
|
|
108
124
|
// Check which ones the customer has already collected
|
|
109
125
|
const promoCacheService = framework_1.container.resolve(promotion_cache_1.PROMOTION_CACHE_MODULE);
|
|
110
|
-
const
|
|
126
|
+
const promotionsWithFullInfo = await Promise.all(promotions.map(async (promotion) => {
|
|
111
127
|
const cacheKey = `user:${customerId}:promotion:${promotion.id}`;
|
|
112
128
|
const isCollected = await promoCacheService.exists(cacheKey);
|
|
129
|
+
// Extract detailed information
|
|
130
|
+
const applicationMethod = promotion.application_method;
|
|
131
|
+
const rules = promotion.rules || [];
|
|
132
|
+
const campaign = promotion.campaign;
|
|
113
133
|
return {
|
|
114
|
-
|
|
134
|
+
id: promotion.id,
|
|
135
|
+
code: promotion.code,
|
|
136
|
+
type: promotion.type,
|
|
137
|
+
is_automatic: promotion.is_automatic,
|
|
138
|
+
campaign: campaign
|
|
139
|
+
? {
|
|
140
|
+
id: campaign.id,
|
|
141
|
+
name: campaign.name,
|
|
142
|
+
description: campaign.description,
|
|
143
|
+
starts_at: campaign.campaign_identifier?.starts_at,
|
|
144
|
+
ends_at: campaign.campaign_identifier?.ends_at,
|
|
145
|
+
}
|
|
146
|
+
: null,
|
|
147
|
+
application_method: applicationMethod
|
|
148
|
+
? {
|
|
149
|
+
type: applicationMethod.type,
|
|
150
|
+
target_type: applicationMethod.target_type,
|
|
151
|
+
allocation: applicationMethod.allocation,
|
|
152
|
+
value: applicationMethod.value,
|
|
153
|
+
max_quantity: applicationMethod.max_quantity,
|
|
154
|
+
apply_to_quantity: applicationMethod.apply_to_quantity,
|
|
155
|
+
buy_rules_min_quantity: applicationMethod.buy_rules_min_quantity,
|
|
156
|
+
target_rules: applicationMethod.target_rules || [],
|
|
157
|
+
buy_rules: applicationMethod.buy_rules || [],
|
|
158
|
+
}
|
|
159
|
+
: null,
|
|
160
|
+
rules: rules.map((rule) => ({
|
|
161
|
+
id: rule.id,
|
|
162
|
+
attribute: rule.attribute,
|
|
163
|
+
operator: rule.operator,
|
|
164
|
+
values: rule.values || [],
|
|
165
|
+
})),
|
|
115
166
|
is_collected: isCollected,
|
|
167
|
+
created_at: promotion.created_at,
|
|
168
|
+
updated_at: promotion.updated_at,
|
|
116
169
|
};
|
|
117
170
|
}));
|
|
118
171
|
// Filter to only show uncollected promotions (optional - depends on UX requirements)
|
|
119
172
|
// You can remove this filter if you want to show all promotions with collected status
|
|
120
|
-
const availablePromotions =
|
|
173
|
+
const availablePromotions = promotionsWithFullInfo.filter((p) => !p.is_collected);
|
|
121
174
|
res.status(200).json({
|
|
122
175
|
promotions: availablePromotions,
|
|
123
176
|
count: availablePromotions.length,
|
|
124
|
-
total:
|
|
177
|
+
total: promotionsWithFullInfo.length,
|
|
125
178
|
});
|
|
126
179
|
}
|
|
127
180
|
catch (error) {
|
|
@@ -133,4 +186,4 @@ const GET = async (req, res) => {
|
|
|
133
186
|
}
|
|
134
187
|
};
|
|
135
188
|
exports.GET = GET;
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb21vdGlvbi1jb2Rlcy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFLNkI7QUFDN0IscURBQW9EO0FBQ3BELHNFQUEwRTtBQUUxRSxnRUFBb0U7QUFHcEU7OztHQUdHO0FBQ0ksTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUN2QixHQUErQixFQUMvQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFnQyxDQUFDO0lBRTlELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLE9BQU8sRUFBRSwwQkFBMEI7U0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBRTdDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLE9BQU8sRUFBRSxnQ0FBZ0M7U0FDMUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILDBEQUEwRDtRQUMxRCxNQUFNLGtCQUFrQixHQUN0QixxQkFBUyxDQUFDLE9BQU8sQ0FBMkIsa0NBQW1CLENBQUMsQ0FBQztRQUVuRSxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQztZQUN0RSxZQUFZLEVBQUUsWUFBWTtTQUMzQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodashventure/medusa-membership",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "A starter for Medusa plugins.",
|
|
5
5
|
"author": "Medusa (https://medusajs.com)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -25,8 +25,7 @@
|
|
|
25
25
|
],
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "medusa plugin:build",
|
|
28
|
-
"dev": "medusa plugin:develop"
|
|
29
|
-
"prepublishOnly": "medusa plugin:build"
|
|
28
|
+
"dev": "medusa plugin:develop"
|
|
30
29
|
},
|
|
31
30
|
"devDependencies": {
|
|
32
31
|
"@medusajs/admin-sdk": "2.10.0",
|
|
@@ -83,4 +82,4 @@
|
|
|
83
82
|
"thai-address-autocomplete-react": "^1.2.2",
|
|
84
83
|
"zod": "^4.1.12"
|
|
85
84
|
}
|
|
86
|
-
}
|
|
85
|
+
}
|