@devx-commerce/plugin-form-responses 0.0.2-beta.11 β†’ 0.0.2-beta.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.
@@ -5,6 +5,8 @@ const validators_1 = require("./store/form-response/validators");
5
5
  const query_config_1 = require("./admin/form-response/query-config");
6
6
  const validators_2 = require("./admin/form-response/validators");
7
7
  const validators_3 = require("./store/newsletter-signup/validators");
8
+ const validators_4 = require("./store/slot-listing/validators");
9
+ const query_config_2 = require("./store/slot-listing/query-config");
8
10
  exports.default = (0, framework_1.defineMiddlewares)({
9
11
  routes: [
10
12
  {
@@ -15,6 +17,11 @@ exports.default = (0, framework_1.defineMiddlewares)({
15
17
  (0, framework_1.validateAndTransformBody)(validators_1.createFormResponseSchema),
16
18
  ],
17
19
  },
20
+ {
21
+ matcher: "/store/slot-listing",
22
+ method: "GET",
23
+ middlewares: [(0, framework_1.validateAndTransformQuery)(validators_4.GetSlotParams, query_config_2.slotListingQueryConfig.list)],
24
+ },
18
25
  {
19
26
  matcher: "/admin/form-response",
20
27
  method: "GET",
@@ -47,4 +54,4 @@ exports.default = (0, framework_1.defineMiddlewares)({
47
54
  },
48
55
  ],
49
56
  });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBSTZCO0FBQzdCLGlFQUE0RTtBQUM1RSxxRUFHNEM7QUFDNUMsaUVBRzBDO0FBQzFDLHFFQUFvRjtBQUVwRixrQkFBZSxJQUFBLDZCQUFpQixFQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOO1lBQ0UsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUUsc0JBQXNCO1lBQy9CLFdBQVcsRUFBRTtnQkFDWCxZQUFZO2dCQUNaLElBQUEsb0NBQXdCLEVBQUMscUNBQXdCLENBQUM7YUFDbkQ7U0FDRjtRQUNEO1lBQ0UsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixNQUFNLEVBQUUsS0FBSztZQUNiLFdBQVcsRUFBRTtnQkFDWCxJQUFBLHFDQUF5QixFQUN2QixrQ0FBcUIsRUFDckIsbUNBQW9CLENBQUMsSUFBSSxDQUMxQjtnQkFDRCxxQ0FBc0I7YUFDdkI7U0FDRjtRQUNEO1lBQ0UsT0FBTyxFQUFFLDBCQUEwQjtZQUNuQyxNQUFNLEVBQUUsS0FBSztZQUNiLFdBQVcsRUFBRTtnQkFDWCxJQUFBLHFDQUF5QixFQUN2QixrQ0FBcUIsRUFDckIsbUNBQW9CLENBQUMsUUFBUSxDQUM5QjthQUNGO1NBQ0Y7UUFDRDtZQUNFLE9BQU8sRUFBRSwwQkFBMEI7WUFDbkMsTUFBTSxFQUFFLEtBQUs7WUFDYixXQUFXLEVBQUUsQ0FBQyxJQUFBLG9DQUF3QixFQUFDLG1DQUFzQixDQUFDLENBQUM7U0FDaEU7UUFDRDtZQUNFLE9BQU8sRUFBRSwwQkFBMEI7WUFDbkMsTUFBTSxFQUFFLE1BQU07WUFDZCxXQUFXLEVBQUUsQ0FBQyxJQUFBLG9DQUF3QixFQUFDLHlDQUE0QixDQUFDLENBQUM7U0FDdEU7UUFDRDtZQUNFLE9BQU8sRUFBRSwwQkFBMEI7WUFDbkMsTUFBTSxFQUFFLEtBQUs7WUFDYixXQUFXLEVBQUUsQ0FBQyxxQ0FBc0IsQ0FBQztTQUN0QztLQUNGO0NBQ0YsQ0FBQyxDQUFDIn0=
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBSTZCO0FBQzdCLGlFQUE0RTtBQUM1RSxxRUFHNEM7QUFDNUMsaUVBRzBDO0FBQzFDLHFFQUFvRjtBQUNwRixnRUFBOEQ7QUFDOUQsb0VBQXlFO0FBRXpFLGtCQUFlLElBQUEsNkJBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ047WUFDRSxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsV0FBVyxFQUFFO2dCQUNYLFlBQVk7Z0JBQ1osSUFBQSxvQ0FBd0IsRUFBQyxxQ0FBd0IsQ0FBQzthQUNuRDtTQUNGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUscUJBQXFCO1lBQzlCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsV0FBVyxFQUFFLENBQUMsSUFBQSxxQ0FBeUIsRUFBQywwQkFBYSxFQUFDLHFDQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsc0JBQXNCO1lBQy9CLE1BQU0sRUFBRSxLQUFLO1lBQ2IsV0FBVyxFQUFFO2dCQUNYLElBQUEscUNBQXlCLEVBQ3ZCLGtDQUFxQixFQUNyQixtQ0FBb0IsQ0FBQyxJQUFJLENBQzFCO2dCQUNELHFDQUFzQjthQUN2QjtTQUNGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsMEJBQTBCO1lBQ25DLE1BQU0sRUFBRSxLQUFLO1lBQ2IsV0FBVyxFQUFFO2dCQUNYLElBQUEscUNBQXlCLEVBQ3ZCLGtDQUFxQixFQUNyQixtQ0FBb0IsQ0FBQyxRQUFRLENBQzlCO2FBQ0Y7U0FDRjtRQUNEO1lBQ0UsT0FBTyxFQUFFLDBCQUEwQjtZQUNuQyxNQUFNLEVBQUUsS0FBSztZQUNiLFdBQVcsRUFBRSxDQUFDLElBQUEsb0NBQXdCLEVBQUMsbUNBQXNCLENBQUMsQ0FBQztTQUNoRTtRQUNEO1lBQ0UsT0FBTyxFQUFFLDBCQUEwQjtZQUNuQyxNQUFNLEVBQUUsTUFBTTtZQUNkLFdBQVcsRUFBRSxDQUFDLElBQUEsb0NBQXdCLEVBQUMseUNBQTRCLENBQUMsQ0FBQztTQUN0RTtRQUNEO1lBQ0UsT0FBTyxFQUFFLDBCQUEwQjtZQUNuQyxNQUFNLEVBQUUsS0FBSztZQUNiLFdBQVcsRUFBRSxDQUFDLHFDQUFzQixDQUFDO1NBQ3RDO0tBQ0Y7Q0FDRixDQUFDLENBQUMifQ==
@@ -11,8 +11,8 @@ async function POST(req, res) {
11
11
  return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({ formResponse }, `Form ${formResponse.id} created successfully`));
12
12
  }
13
13
  catch (error) {
14
- logger.error("Error creating form response", error.message);
14
+ console.log(error);
15
15
  return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error.message, 500, error));
16
16
  }
17
17
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2Zvcm0tcmVzcG9uc2Uvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxvQkF1QkM7QUE5QkQsb0VBQThFO0FBQzlFLDREQUltQztBQUU1QixLQUFLLFVBQVUsSUFBSSxDQUN4QixHQUF1RCxFQUN2RCxHQUFtQjtJQUVuQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ3RCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxJQUFBLDBDQUEwQixFQUMvRCxHQUFHLENBQUMsS0FBSyxDQUNWLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFdkIsT0FBTyxJQUFBLDhCQUFlLEVBQ3BCLEdBQUcsRUFDSCxJQUFBLG9DQUFxQixFQUNuQixFQUFFLFlBQVksRUFBRSxFQUNoQixRQUFRLFlBQVksQ0FBQyxFQUFFLHVCQUF1QixDQUMvQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVELE9BQU8sSUFBQSw4QkFBZSxFQUFDLEdBQUcsRUFBRSxJQUFBLGtDQUFtQixFQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztBQUNILENBQUMifQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2Zvcm0tcmVzcG9uc2Uvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxvQkF1QkM7QUE5QkQsb0VBQThFO0FBQzlFLDREQUltQztBQUU1QixLQUFLLFVBQVUsSUFBSSxDQUN4QixHQUF1RCxFQUN2RCxHQUFtQjtJQUVuQixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ3RCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxJQUFBLDBDQUEwQixFQUMvRCxHQUFHLENBQUMsS0FBSyxDQUNWLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFdkIsT0FBTyxJQUFBLDhCQUFlLEVBQ3BCLEdBQUcsRUFDSCxJQUFBLG9DQUFxQixFQUNuQixFQUFFLFlBQVksRUFBRSxFQUNoQixRQUFRLFlBQVksQ0FBQyxFQUFFLHVCQUF1QixDQUMvQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkIsT0FBTyxJQUFBLDhCQUFlLEVBQUMsR0FBRyxFQUFFLElBQUEsa0NBQW1CLEVBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RSxDQUFDO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Nsb3QtbGlzdGluZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.slotListingQueryConfig = void 0;
4
+ exports.slotListingQueryConfig = {
5
+ list: {
6
+ defaults: [], // or [] since we’re not fetching from DB
7
+ isList: true,
8
+ },
9
+ retrieve: {
10
+ defaults: [],
11
+ isList: false,
12
+ },
13
+ };
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9zdG9yZS9zbG90LWxpc3RpbmcvcXVlcnktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsc0JBQXNCLEdBQUc7SUFDcEMsSUFBSSxFQUFFO1FBQ0osUUFBUSxFQUFFLEVBQUUsRUFBRSx5Q0FBeUM7UUFDdkQsTUFBTSxFQUFFLElBQUk7S0FDYjtJQUNELFFBQVEsRUFBRTtRQUNSLFFBQVEsRUFBRSxFQUFFO1FBQ1osTUFBTSxFQUFFLEtBQUs7S0FDZDtDQUNGLENBQUMifQ==
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const api_response_1 = require("../../../lib/api-response");
5
+ const form_response_1 = require("../../../modules/form-response");
6
+ const generateSlots = (type, date, now) => {
7
+ const slots = [];
8
+ const selectedDate = new Date(date);
9
+ if (type === "try_at_home") {
10
+ let start = new Date(date + "T11:30:00");
11
+ const end = new Date(date + "T19:30:00");
12
+ while (start <= end && slots.length < 4) {
13
+ slots.push(start.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }));
14
+ start.setHours(start.getHours() + 2);
15
+ }
16
+ }
17
+ if (type === "virtual_call") {
18
+ let start = new Date(date + "T11:30:00");
19
+ const end = new Date(date + "T20:00:00");
20
+ while (start <= end) {
21
+ if (selectedDate.toDateString() === now.toDateString()) {
22
+ const slotTime = new Date(start);
23
+ if (slotTime.getTime() <= now.getTime() + 60 * 60 * 1000) {
24
+ start.setMinutes(start.getMinutes() + 30);
25
+ continue;
26
+ }
27
+ }
28
+ slots.push(start.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }));
29
+ start.setMinutes(start.getMinutes() + 30);
30
+ }
31
+ }
32
+ if (type === "store_visit") {
33
+ let start = new Date(date + "T11:30:00");
34
+ const end = new Date(date + "T20:30:00");
35
+ while (start <= end) {
36
+ slots.push(start.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" }));
37
+ start.setMinutes(start.getMinutes() + 30);
38
+ }
39
+ }
40
+ return slots;
41
+ };
42
+ const GET = async (req, res) => {
43
+ try {
44
+ const { date, type, store_id } = req.validatedQuery;
45
+ if (!date || !type) {
46
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({ slots: [], booking: [] }, "Please provide both date and type"));
47
+ }
48
+ const now = new Date();
49
+ let slots = generateSlots(type, date, now);
50
+ // πŸ”Ž Get existing bookings for this date + type
51
+ const formService = req.scope.resolve(form_response_1.FORM_RESPONSE_MODULE);
52
+ const startOfDay = new Date(date);
53
+ startOfDay.setHours(0, 0, 0, 0);
54
+ const endOfDay = new Date(date);
55
+ endOfDay.setHours(23, 59, 59, 999);
56
+ const existing = await formService.listFormResponses({
57
+ type: type === "virtual_call"
58
+ ? "VIRTUAL_CALL"
59
+ : type === "store_visit"
60
+ ? "STORE_VISIT"
61
+ : type === "try_at_home"
62
+ ? "BOOK_YOUR_TRIAL"
63
+ : "",
64
+ scheduled_date_time: {
65
+ $gte: startOfDay.toISOString(),
66
+ $lte: endOfDay.toISOString(),
67
+ },
68
+ store_id: store_id,
69
+ });
70
+ // β›” Remove already booked slots
71
+ const bookedTimes = existing.map((b) => new Date(b.scheduled_date_time || "").toLocaleTimeString([], {
72
+ hour: "2-digit",
73
+ minute: "2-digit",
74
+ }));
75
+ slots = slots.filter((slot) => !bookedTimes.includes(slot));
76
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({ date, type, slots }, "Fetched appointment slots"));
77
+ }
78
+ catch (e) {
79
+ return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({ slots: [], booking: [] }, `Error generating slots: ${e.message}`));
80
+ }
81
+ };
82
+ exports.GET = GET;
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Nsb3QtbGlzdGluZy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSw0REFHbUM7QUFDbkMsa0VBQXNFO0FBS3RFLE1BQU0sYUFBYSxHQUFHLENBQUMsSUFBYyxFQUFFLElBQVksRUFBRSxHQUFTLEVBQUUsRUFBRTtJQUNoRSxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFDM0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFcEMsSUFBSSxJQUFJLEtBQUssYUFBYSxFQUFFLENBQUM7UUFDM0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQztRQUV6QyxPQUFPLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxLQUFLLENBQUMsSUFBSSxDQUNSLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUNyRSxDQUFDO1lBQ0YsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLElBQUksS0FBSyxjQUFjLEVBQUUsQ0FBQztRQUM1QixJQUFJLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBRXpDLE9BQU8sS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLElBQUksWUFBWSxDQUFDLFlBQVksRUFBRSxLQUFLLEdBQUcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO2dCQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakMsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7b0JBQ3pELEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUMxQyxTQUFTO2dCQUNYLENBQUM7WUFDSCxDQUFDO1lBRUQsS0FBSyxDQUFDLElBQUksQ0FDUixLQUFLLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FDckUsQ0FBQztZQUNGLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxJQUFJLEtBQUssYUFBYSxFQUFFLENBQUM7UUFDM0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsQ0FBQztRQUV6QyxPQUFPLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNwQixLQUFLLENBQUMsSUFBSSxDQUNSLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUNyRSxDQUFDO1lBQ0YsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVLLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFDLFFBQVEsRUFBRSxHQUFHLEdBQUcsQ0FBQyxjQUluQyxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBQSw4QkFBZSxFQUNwQixHQUFHLEVBQ0gsSUFBQSxvQ0FBcUIsRUFDbkIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFDMUIsbUNBQW1DLENBQ3BDLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLElBQUksS0FBSyxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRTNDLGdEQUFnRDtRQUNoRCxNQUFNLFdBQVcsR0FDZixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0IsQ0FBQyxDQUFDO1FBRTFDLE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQztZQUNuRCxJQUFJLEVBQ0YsSUFBSSxLQUFLLGNBQWM7Z0JBQ3JCLENBQUMsQ0FBQyxjQUFjO2dCQUNoQixDQUFDLENBQUMsSUFBSSxLQUFLLGFBQWE7b0JBQ3RCLENBQUMsQ0FBQyxhQUFhO29CQUNmLENBQUMsQ0FBQyxJQUFJLEtBQUssYUFBYTt3QkFDdEIsQ0FBQyxDQUFDLGlCQUFpQjt3QkFDbkIsQ0FBQyxDQUFDLEVBQUU7WUFDWixtQkFBbUIsRUFBRTtnQkFDbkIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxXQUFXLEVBQUU7Z0JBQzlCLElBQUksRUFBRSxRQUFRLENBQUMsV0FBVyxFQUFFO2FBQzdCO1lBQ0QsUUFBUSxFQUFDLFFBQVE7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsZ0NBQWdDO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNyQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFO1lBQzNELElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFLFNBQVM7U0FDbEIsQ0FBQyxDQUNILENBQUM7UUFFRixLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFNUQsT0FBTyxJQUFBLDhCQUFlLEVBQ3BCLEdBQUcsRUFDSCxJQUFBLG9DQUFxQixFQUNuQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQ3JCLDJCQUEyQixDQUM1QixDQUNGLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztRQUNoQixPQUFPLElBQUEsOEJBQWUsRUFDcEIsR0FBRyxFQUNILElBQUEsb0NBQXFCLEVBQ25CLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQzFCLDJCQUEyQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQ3ZDLENBQ0YsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUM7QUE1RVcsUUFBQSxHQUFHLE9BNEVkIn0=
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetSlotParams = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.GetSlotParams = zod_1.z.object({
6
+ date: zod_1.z
7
+ .string()
8
+ .regex(/^\d{4}-\d{2}-\d{2}$/, "Date must be in YYYY-MM-DD format"),
9
+ type: zod_1.z.enum(["try_at_home", "virtual_call", "store_visit"]),
10
+ store_id: zod_1.z.string()
11
+ });
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvc2xvdC1saXN0aW5nL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXdCO0FBRVgsUUFBQSxhQUFhLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNwQyxJQUFJLEVBQUUsT0FBQztTQUNKLE1BQU0sRUFBRTtTQUNSLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxtQ0FBbUMsQ0FBQztJQUNwRSxJQUFJLEVBQUUsT0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDNUQsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7Q0FDckIsQ0FBQyxDQUFDIn0=
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatDateToDDMMYYYY = void 0;
4
+ const formatDateToDDMMYYYY = (date) => {
5
+ const d = new Date(date);
6
+ const day = String(d.getDate()).padStart(2, "0");
7
+ const month = String(d.getMonth() + 1).padStart(2, "0");
8
+ const year = d.getFullYear();
9
+ return `${day}-${month}-${year}`;
10
+ };
11
+ exports.formatDateToDDMMYYYY = formatDateToDDMMYYYY;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQU8sTUFBTSxvQkFBb0IsR0FBRyxDQUFDLElBQW1CLEVBQUUsRUFBRTtJQUMxRCxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDeEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdCLE9BQU8sR0FBRyxHQUFHLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ25DLENBQUMsQ0FBQTtBQU5ZLFFBQUEsb0JBQW9CLHdCQU1oQyJ9
@@ -3,12 +3,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createFormResponseStep = void 0;
4
4
  const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
5
  const form_response_1 = require("../../../modules/form-response");
6
+ const helper_1 = require("../../../lib/helper");
6
7
  exports.createFormResponseStep = (0, workflows_sdk_1.createStep)("create-form-response-step", async (data, { container }) => {
7
8
  const formService = container.resolve(form_response_1.FORM_RESPONSE_MODULE);
9
+ // find all records with same mobile
10
+ const existing = await formService.listFormResponses({
11
+ mobile_number: data.mobile_number,
12
+ });
13
+ if (existing.length > 0) {
14
+ // check if any record has the same date + same type
15
+ const sameDate = existing.find((res) => (0, helper_1.formatDateToDDMMYYYY)(res.scheduled_date_time || "") ===
16
+ (0, helper_1.formatDateToDDMMYYYY)(data.scheduled_date_time || "") &&
17
+ res.type === data.type);
18
+ if (sameDate) {
19
+ throw new Error(`❌ Your booking already exists for ${sameDate.scheduled_date_time}`);
20
+ }
21
+ const formResponse = await formService.createFormResponses(data);
22
+ return new workflows_sdk_1.StepResponse({ ...formResponse, __operation: "booking" }, formResponse.id);
23
+ }
8
24
  const formResponse = await formService.createFormResponses(data);
9
- return new workflows_sdk_1.StepResponse(formResponse, formResponse.id);
25
+ return new workflows_sdk_1.StepResponse({ ...formResponse, __operation: "create" }, formResponse.id);
10
26
  }, async (id, { container }) => {
11
27
  const formService = container.resolve(form_response_1.FORM_RESPONSE_MODULE);
12
28
  await formService.deleteFormResponses([id]);
13
29
  });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWZvcm0tcmVzcG9uc2Utc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvZm9ybS1yZXNwb25zZS9zdGVwcy9jcmVhdGUtZm9ybS1yZXNwb25zZS1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUU3RSxrRUFBc0U7QUFJekQsUUFBQSxzQkFBc0IsR0FBRyxJQUFBLDBCQUFVLEVBQzlDLDJCQUEyQixFQUMzQixLQUFLLEVBQUUsSUFBNEIsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDcEQsTUFBTSxXQUFXLEdBQ2YsU0FBUyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0IsQ0FBQyxDQUFDO0lBRTFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWpFLE9BQU8sSUFBSSw0QkFBWSxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsQ0FBQyxFQUNELEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQzFCLE1BQU0sV0FBVyxHQUNmLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0NBQW9CLENBQUMsQ0FBQztJQUMxQyxNQUFNLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUNGLENBQUMifQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWZvcm0tcmVzcG9uc2Utc3RlcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvZm9ybS1yZXNwb25zZS9zdGVwcy9jcmVhdGUtZm9ybS1yZXNwb25zZS1zdGVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUE2RTtBQUU3RSxrRUFBc0U7QUFFdEUsZ0RBQTJEO0FBRTlDLFFBQUEsc0JBQXNCLEdBQUcsSUFBQSwwQkFBVSxFQUM5QywyQkFBMkIsRUFDM0IsS0FBSyxFQUFFLElBQTRCLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFO0lBQ3BELE1BQU0sV0FBVyxHQUNmLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0NBQW9CLENBQUMsQ0FBQztJQUUxQyxvQ0FBb0M7SUFDcEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFXLENBQUMsaUJBQWlCLENBQUM7UUFDbkQsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO0tBQ2xDLENBQUMsQ0FBQztJQUVILElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QixvREFBb0Q7UUFDcEQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FDNUIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLElBQUEsNkJBQW9CLEVBQUMsR0FBRyxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztZQUNuRCxJQUFBLDZCQUFvQixFQUFDLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUM7WUFDcEQsR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUN6QixDQUFDO1FBRUYsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQ2IscUNBQXFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUNwRSxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpFLE9BQU8sSUFBSSw0QkFBWSxDQUNyQixFQUFFLEdBQUcsWUFBWSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFDM0MsWUFBWSxDQUFDLEVBQUUsQ0FDaEIsQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLFlBQVksR0FBRyxNQUFNLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVqRSxPQUFPLElBQUksNEJBQVksQ0FDckIsRUFBRSxHQUFHLFlBQVksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEVBQzFDLFlBQVksQ0FBQyxFQUFFLENBQ2hCLENBQUM7QUFDSixDQUFDLEVBRUQsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDMUIsTUFBTSxXQUFXLEdBQ2YsU0FBUyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0IsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQ0YsQ0FBQyJ9
@@ -7,11 +7,14 @@ const core_flows_1 = require("@medusajs/medusa/core-flows");
7
7
  exports.createFormResponseWorkflow = (0, workflows_sdk_1.createWorkflow)("create-form-response-workflow", (input) => {
8
8
  const formResponse = (0, steps_1.createFormResponseStep)(input);
9
9
  (0, core_flows_1.emitEventStep)({
10
- eventName: "form-response.created",
10
+ eventName: "form-response",
11
11
  data: {
12
- formResponse,
12
+ operation: formResponse.__operation, // "create" or "booking"
13
+ data: formResponse,
13
14
  },
15
+ }).config({
16
+ name: "form-response-event",
14
17
  });
15
18
  return new workflows_sdk_1.WorkflowResponse(formResponse);
16
19
  });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWZvcm0tcmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Zvcm0tcmVzcG9uc2Uvd29ya2Zsb3dzL2NyZWF0ZS1mb3JtLXJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUcyQztBQUMzQyxvQ0FBa0Q7QUFFbEQsNERBQTREO0FBRS9DLFFBQUEsMEJBQTBCLEdBQUcsSUFBQSw4QkFBYyxFQUN0RCwrQkFBK0IsRUFDL0IsQ0FBQyxLQUE2QixFQUFFLEVBQUU7SUFDaEMsTUFBTSxZQUFZLEdBQUcsSUFBQSw4QkFBc0IsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUVuRCxJQUFBLDBCQUFhLEVBQUM7UUFDWixTQUFTLEVBQUUsdUJBQXVCO1FBQ2xDLElBQUksRUFBRTtZQUNKLFlBQVk7U0FDYjtLQUNGLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQ0YsQ0FBQyJ9
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWZvcm0tcmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2Zvcm0tcmVzcG9uc2Uvd29ya2Zsb3dzL2NyZWF0ZS1mb3JtLXJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUcyQztBQUMzQyxvQ0FBa0Q7QUFFbEQsNERBQTREO0FBRS9DLFFBQUEsMEJBQTBCLEdBQUcsSUFBQSw4QkFBYyxFQUN0RCwrQkFBK0IsRUFDL0IsQ0FBQyxLQUE2QixFQUFFLEVBQUU7SUFDaEMsTUFBTSxZQUFZLEdBQUcsSUFBQSw4QkFBc0IsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUVuRCxJQUFBLDBCQUFhLEVBQUM7UUFDWixTQUFTLEVBQUUsZUFBZTtRQUMxQixJQUFJLEVBQUU7WUFDSixTQUFTLEVBQUUsWUFBWSxDQUFDLFdBQVcsRUFBRSx3QkFBd0I7WUFDN0QsSUFBSSxFQUFFLFlBQVk7U0FDbkI7S0FDRixDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ1IsSUFBSSxFQUFFLHFCQUFxQjtLQUM1QixDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksZ0NBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUNGLENBQUMifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devx-commerce/plugin-form-responses",
3
- "version": "0.0.2-beta.11",
3
+ "version": "0.0.2-beta.12",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",