@codee-sh/medusa-plugin-automations 1.0.7 → 1.0.9

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.
Files changed (63) hide show
  1. package/.medusa/server/src/admin/_chunks/{__admin-extensions__-Cc5RhzDh → __admin-extensions__-BV7n9V1I} +210 -120
  2. package/.medusa/server/src/admin/_chunks/{__admin-extensions__-BgrPyL-G → __admin-extensions__-BZrUHl9N} +211 -121
  3. package/.medusa/server/src/admin/_chunks/{base-config-D8uDn9uc → base-config-CbWD1XMk} +1 -1
  4. package/.medusa/server/src/admin/_chunks/{base-config-zK3z6k14 → base-config-D0IqhDVr} +1 -1
  5. package/.medusa/server/src/admin/index.js +1 -1
  6. package/.medusa/server/src/admin/index.mjs +1 -1
  7. package/.medusa/server/src/api/middlewares.js +1 -1
  8. package/.medusa/server/src/modules/mpn-automation/migrations/Migration20251222121805.js +14 -0
  9. package/.medusa/server/src/modules/mpn-automation/models/mpn_automation_trigger.js +2 -2
  10. package/.medusa/server/src/modules/mpn-automation/services/base-action-service.js +1 -1
  11. package/.medusa/server/src/modules/mpn-automation/services/email-action-service.js +20 -7
  12. package/.medusa/server/src/modules/mpn-automation/services/slack-action-service.js +27 -18
  13. package/.medusa/server/src/modules/mpn-automation/types/modules/index.js +148 -1
  14. package/.medusa/server/src/modules/mpn-automation/types/modules/inventory/inventory.js +48 -2
  15. package/.medusa/server/src/modules/mpn-automation/types/modules/order/helpers.js +28 -0
  16. package/.medusa/server/src/{templates/slack/product-variant → modules/mpn-automation/types/modules/order}/index.js +2 -2
  17. package/.medusa/server/src/modules/mpn-automation/types/modules/order/order.js +561 -0
  18. package/.medusa/server/src/modules/mpn-automation/types/modules/product/helpers.js +9 -0
  19. package/.medusa/server/src/modules/mpn-automation/types/modules/product/product.js +89 -2
  20. package/.medusa/server/src/modules/mpn-automation/types/modules/product-category/product-category.js +31 -2
  21. package/.medusa/server/src/modules/mpn-automation/types/modules/product-tag/product-tag.js +19 -2
  22. package/.medusa/server/src/modules/mpn-automation/types/modules/product-type/product-type.js +19 -2
  23. package/.medusa/server/src/modules/mpn-automation/types/modules/product-variant/product-variant.js +51 -2
  24. package/.medusa/server/src/modules/mpn-automation/types/types.js +1 -1
  25. package/.medusa/server/src/providers/slack/service.js +26 -16
  26. package/.medusa/server/src/subscribers/inventory-level-updated.js +2 -2
  27. package/.medusa/server/src/subscribers/mpn.automation.action.email.executed.js +1 -2
  28. package/.medusa/server/src/subscribers/order-updated.js +36 -0
  29. package/.medusa/server/src/utils/types/index.js +1 -2
  30. package/.medusa/server/src/workflows/index.js +2 -1
  31. package/.medusa/server/src/workflows/inventory/steps/get-inventory-level-by-id.js +3 -3
  32. package/.medusa/server/src/workflows/mpn-automation/index.js +2 -2
  33. package/.medusa/server/src/workflows/mpn-automation/run-automation.js +53 -10
  34. package/.medusa/server/src/workflows/mpn-automation/steps/create-automation.js +1 -1
  35. package/.medusa/server/src/workflows/mpn-automation/steps/edit-automation.js +1 -1
  36. package/.medusa/server/src/workflows/mpn-automation/steps/index.js +3 -2
  37. package/.medusa/server/src/workflows/mpn-automation/steps/retrieve-automation-triggers-by-event.js +1 -1
  38. package/.medusa/server/src/workflows/mpn-automation/steps/run-automation-actions.js +1 -1
  39. package/.medusa/server/src/workflows/mpn-automation/steps/validate-trigger-throttle.js +78 -0
  40. package/.medusa/server/src/workflows/mpn-automation/steps/validate-triggers-rules.js +31 -0
  41. package/.medusa/server/src/workflows/mpn-automation/validate-triggers-by-event.js +38 -0
  42. package/.medusa/server/src/workflows/notifications/steps/send-slack.js +1 -1
  43. package/.medusa/server/src/workflows/order/get-order-by-id.js +23 -0
  44. package/.medusa/server/src/{templates/slack/product → workflows/order}/index.js +2 -2
  45. package/.medusa/server/src/workflows/order/steps/get-order-by-id.js +40 -0
  46. package/.medusa/server/src/{templates/slack/inventory-level → workflows/order/steps}/index.js +2 -2
  47. package/.medusa/server/src/workflows/product/steps/get-product-by-id.js +3 -3
  48. package/package.json +2 -2
  49. package/.medusa/server/src/templates/slack/inventory-level/inventory-level.js +0 -95
  50. package/.medusa/server/src/templates/slack/inventory-level/translations/en.json +0 -18
  51. package/.medusa/server/src/templates/slack/inventory-level/translations/index.js +0 -15
  52. package/.medusa/server/src/templates/slack/inventory-level/translations/pl.json +0 -18
  53. package/.medusa/server/src/templates/slack/product/product.js +0 -54
  54. package/.medusa/server/src/templates/slack/product/translations/en.json +0 -18
  55. package/.medusa/server/src/templates/slack/product/translations/index.js +0 -15
  56. package/.medusa/server/src/templates/slack/product/translations/pl.json +0 -13
  57. package/.medusa/server/src/templates/slack/product-variant/product-variant.js +0 -54
  58. package/.medusa/server/src/templates/slack/product-variant/translations/en.json +0 -18
  59. package/.medusa/server/src/templates/slack/product-variant/translations/index.js +0 -15
  60. package/.medusa/server/src/templates/slack/product-variant/translations/pl.json +0 -13
  61. package/.medusa/server/src/templates/slack/types.js +0 -3
  62. package/.medusa/server/src/workflows/mpn-automation/steps/validate-automation-triggers.js +0 -31
  63. package/.medusa/server/src/workflows/mpn-automation/validate-automation-triggers-by-event.js +0 -38
@@ -4,7 +4,7 @@ import { ListBullet, ArrowUpRightOnBox, XMarkMini, TriangleDownMini, Check, Squa
4
4
  import * as React from "react";
5
5
  import React__default, { createContext, useContext, useReducer, useEffect, Fragment, useState, useMemo, useRef, forwardRef, createElement, isValidElement, cloneElement, Children, Suspense, useId, useInsertionEffect, useCallback, useLayoutEffect, Component, useImperativeHandle } from "react";
6
6
  import { Outlet } from "react-router-dom";
7
- import { Container as Container$1, Heading, Badge, Drawer, IconButton, Kbd, Label, Input, Select, Checkbox, FocusModal, Button, ProgressTabs, toast, clx, usePrompt, createDataTableColumnHelper, Tooltip, useDataTable, DataTable } from "@medusajs/ui";
7
+ import { Container as Container$1, Heading, Badge, Drawer, IconButton, Kbd, Label, Input, Select, Checkbox, Text, FocusModal, Button, ProgressTabs, toast, clx, Hint, usePrompt, createDataTableColumnHelper, Tooltip, useDataTable, DataTable } from "@medusajs/ui";
8
8
  import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
9
9
  import Medusa from "@medusajs/js-sdk";
10
10
  const NotificationsPage = () => {
@@ -709,8 +709,14 @@ var NestedClose = (props) => {
709
709
  keyName,
710
710
  parentValue
711
711
  });
712
- if (expands[expandKey] === void 0 && !shouldExpand) {
713
- return null;
712
+ if (shouldExpandNodeInitially && collapsed === false) {
713
+ if (expands[expandKey] === void 0 && !shouldExpand) {
714
+ return null;
715
+ }
716
+ } else {
717
+ if (expands[expandKey] === void 0 && shouldExpand) {
718
+ return null;
719
+ }
714
720
  }
715
721
  var len = Object.keys(value).length;
716
722
  if (isExpanded || len === 0) {
@@ -1681,8 +1687,14 @@ var KeyValues = (props) => {
1681
1687
  keyName,
1682
1688
  parentValue
1683
1689
  });
1684
- if (expands[expandKey] === void 0 && !shouldExpand) {
1685
- return null;
1690
+ if (shouldExpandNodeInitially && collapsed === false) {
1691
+ if (expands[expandKey] === void 0 && !shouldExpand) {
1692
+ return null;
1693
+ }
1694
+ } else {
1695
+ if (expands[expandKey] === void 0 && shouldExpand) {
1696
+ return null;
1697
+ }
1686
1698
  }
1687
1699
  if (isExpanded) {
1688
1700
  return null;
@@ -2270,7 +2282,7 @@ var JsonView = /* @__PURE__ */ forwardRef((props, ref) => {
2270
2282
  value,
2271
2283
  children,
2272
2284
  collapsed = false,
2273
- shouldExpandNodeInitially = () => true,
2285
+ shouldExpandNodeInitially,
2274
2286
  indentWidth = 15,
2275
2287
  displayObjectSize = true,
2276
2288
  shortenTextAfterLength = 30,
@@ -2296,7 +2308,7 @@ var JsonView = /* @__PURE__ */ forwardRef((props, ref) => {
2296
2308
  value,
2297
2309
  objectSortKeys,
2298
2310
  indentWidth,
2299
- shouldExpandNodeInitially: collapsed === false ? shouldExpandNodeInitially : () => false,
2311
+ shouldExpandNodeInitially: collapsed === false ? shouldExpandNodeInitially : void 0,
2300
2312
  displayObjectSize,
2301
2313
  collapsed,
2302
2314
  enableClipboard,
@@ -5319,6 +5331,11 @@ function AutomationsGeneralForm({
5319
5331
  useMemo(() => {
5320
5332
  return (availableActionsData == null ? void 0 : availableActionsData.actions) || [];
5321
5333
  }, [availableActionsData]);
5334
+ const triggerType = useWatch({
5335
+ control: form.control,
5336
+ name: "general.trigger_type"
5337
+ });
5338
+ const showIntervalField = triggerType === "event" || triggerType === "schedule";
5322
5339
  return /* @__PURE__ */ jsx("div", { className: "w-full", children: /* @__PURE__ */ jsx("div", { className: "p-6 max-w-2xl mx-auto", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
5323
5340
  /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
5324
5341
  /* @__PURE__ */ jsx(Label, { htmlFor: "name", className: "block", children: "Name" }),
@@ -5463,6 +5480,50 @@ function AutomationsGeneralForm({
5463
5480
  ] })
5464
5481
  }
5465
5482
  )
5483
+ ] }),
5484
+ showIntervalField && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
5485
+ /* @__PURE__ */ jsx(
5486
+ Label,
5487
+ {
5488
+ htmlFor: "interval_seconds",
5489
+ className: "block",
5490
+ children: triggerType === "schedule" ? "Interval (seconds)" : "Throttle (seconds)"
5491
+ }
5492
+ ),
5493
+ /* @__PURE__ */ jsx(
5494
+ Controller,
5495
+ {
5496
+ name: "general.interval_seconds",
5497
+ control: form.control,
5498
+ render: ({ field, fieldState }) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
5499
+ /* @__PURE__ */ jsx(
5500
+ Input,
5501
+ {
5502
+ ...field,
5503
+ type: "number",
5504
+ min: 0,
5505
+ placeholder: triggerType === "schedule" ? "Run every X seconds" : "Minimum seconds between executions",
5506
+ value: field.value ?? "",
5507
+ onChange: (e2) => {
5508
+ const value = e2.target.value;
5509
+ field.onChange(
5510
+ value === "" ? null : Number(value)
5511
+ );
5512
+ }
5513
+ }
5514
+ ),
5515
+ /* @__PURE__ */ jsx(
5516
+ Text,
5517
+ {
5518
+ size: "small",
5519
+ className: "text-ui-fg-subtle",
5520
+ children: triggerType === "schedule" ? "How often to run this automation" : "Optional: Limit how often this automation can run for the same target (e.g., 3600 = max once per hour)"
5521
+ }
5522
+ ),
5523
+ fieldState.error && /* @__PURE__ */ jsx("span", { className: "text-red-500 text-sm", children: fieldState.error.message })
5524
+ ] })
5525
+ }
5526
+ )
5466
5527
  ] })
5467
5528
  ] }) }) });
5468
5529
  }
@@ -9108,7 +9169,7 @@ const baseAutomationFormSchema = objectType({
9108
9169
  description: stringType().min(1, "Description is required").min(3, "Description must be at least 3 characters"),
9109
9170
  trigger_type: enumType(["event", "schedule", "manual"]),
9110
9171
  event_name: stringType().min(1, "Event name is required"),
9111
- interval_minutes: numberType().nullable(),
9172
+ interval_seconds: numberType().nullable(),
9112
9173
  active: booleanType()
9113
9174
  }),
9114
9175
  rules: objectType({
@@ -9233,7 +9294,7 @@ function AutomationsCreateForm() {
9233
9294
  description: "",
9234
9295
  trigger_type: "event",
9235
9296
  event_name: "",
9236
- interval_minutes: null,
9297
+ interval_seconds: null,
9237
9298
  active: false
9238
9299
  },
9239
9300
  rules: {
@@ -9252,7 +9313,7 @@ function AutomationsCreateForm() {
9252
9313
  description: "",
9253
9314
  trigger_type: "event",
9254
9315
  event_name: "",
9255
- interval_minutes: null,
9316
+ interval_seconds: null,
9256
9317
  active: false
9257
9318
  },
9258
9319
  rules: {
@@ -9271,7 +9332,7 @@ function AutomationsCreateForm() {
9271
9332
  description: data.general.description,
9272
9333
  trigger_type: data.general.trigger_type,
9273
9334
  event_name: data.general.event_name,
9274
- interval_minutes: data.general.interval_minutes,
9335
+ interval_seconds: data.general.interval_seconds,
9275
9336
  active: data.general.active
9276
9337
  };
9277
9338
  await createAutomation({
@@ -17061,6 +17122,133 @@ function RuleValueInput({
17061
17122
  }
17062
17123
  );
17063
17124
  }
17125
+ function RuleItem({
17126
+ control,
17127
+ index,
17128
+ eventAttributes,
17129
+ onRemove
17130
+ }) {
17131
+ const selectedAttributeValue = useWatch({
17132
+ control,
17133
+ name: `rules.items.${index}.attribute`
17134
+ });
17135
+ const operatorValue = useWatch({
17136
+ control,
17137
+ name: `rules.items.${index}.operator`
17138
+ });
17139
+ const selectedAttribute = selectedAttributeValue && eventAttributes.length ? eventAttributes.find(
17140
+ (attr) => attr.value === selectedAttributeValue
17141
+ ) : null;
17142
+ return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2 p-4 border rounded-lg", children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4", children: [
17143
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col gap-2", children: [
17144
+ /* @__PURE__ */ jsx(
17145
+ Controller,
17146
+ {
17147
+ name: `rules.items.${index}.attribute`,
17148
+ control,
17149
+ render: ({ field, fieldState }) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
17150
+ /* @__PURE__ */ jsx(Label, { children: "Attribute" }),
17151
+ /* @__PURE__ */ jsxs(
17152
+ Select,
17153
+ {
17154
+ value: field.value ?? "",
17155
+ onValueChange: (value) => {
17156
+ field.onChange(value);
17157
+ },
17158
+ children: [
17159
+ /* @__PURE__ */ jsx(Select.Trigger, { children: /* @__PURE__ */ jsx(Select.Value, { placeholder: "Select the attribute" }) }),
17160
+ /* @__PURE__ */ jsx(Select.Content, { children: eventAttributes.map((attribute, attrIndex) => /* @__PURE__ */ jsxs(
17161
+ Select.Item,
17162
+ {
17163
+ value: attribute.value || "",
17164
+ children: [
17165
+ attribute.label,
17166
+ " ",
17167
+ /* @__PURE__ */ jsxs("span", { className: "text-xs text-gray-500", children: [
17168
+ "(",
17169
+ attribute.value,
17170
+ ")"
17171
+ ] })
17172
+ ]
17173
+ },
17174
+ attribute.value || `attr-${index}-${attrIndex}`
17175
+ )) })
17176
+ ]
17177
+ },
17178
+ `attribute-${index}-${eventAttributes.length}`
17179
+ ),
17180
+ fieldState.error && /* @__PURE__ */ jsx("span", { className: "text-red-500 text-sm", children: fieldState.error.message }),
17181
+ (selectedAttribute == null ? void 0 : selectedAttribute.description) && /* @__PURE__ */ jsx(Hint, { className: "mt-1", children: selectedAttribute.description })
17182
+ ] })
17183
+ }
17184
+ ),
17185
+ /* @__PURE__ */ jsx(
17186
+ Controller,
17187
+ {
17188
+ name: `rules.items.${index}.operator`,
17189
+ control,
17190
+ render: ({ field, fieldState }) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
17191
+ /* @__PURE__ */ jsx(Label, { children: "Operator" }),
17192
+ /* @__PURE__ */ jsxs(
17193
+ Select,
17194
+ {
17195
+ value: field.value ?? "",
17196
+ onValueChange: (value) => {
17197
+ field.onChange(value);
17198
+ },
17199
+ children: [
17200
+ /* @__PURE__ */ jsx(Select.Trigger, { children: /* @__PURE__ */ jsx(Select.Value, { placeholder: "Select the operator" }) }),
17201
+ /* @__PURE__ */ jsx(Select.Content, { children: OPERATOR_TYPES.map((operator, opIndex) => /* @__PURE__ */ jsx(
17202
+ Select.Item,
17203
+ {
17204
+ value: operator.value,
17205
+ children: operator.label
17206
+ },
17207
+ operator.value || `op-${opIndex}`
17208
+ )) })
17209
+ ]
17210
+ },
17211
+ `operator-${index}-${eventAttributes.length}-${field.value ?? ""}`
17212
+ ),
17213
+ fieldState.error && /* @__PURE__ */ jsx("span", { className: "text-red-500 text-sm", children: fieldState.error.message })
17214
+ ] })
17215
+ }
17216
+ ),
17217
+ /* @__PURE__ */ jsx(
17218
+ RuleValueInput,
17219
+ {
17220
+ control,
17221
+ name: `rules.items.${index}.rule_values.0.value`,
17222
+ operator: operatorValue
17223
+ }
17224
+ ),
17225
+ (selectedAttribute == null ? void 0 : selectedAttribute.examples) && selectedAttribute.examples.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mt-0", children: [
17226
+ /* @__PURE__ */ jsx(Text, { size: "xsmall", className: "text-gray-600 mb-1", children: "Examples:" }),
17227
+ /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1", children: selectedAttribute.examples.map(
17228
+ (example, exampleIndex) => /* @__PURE__ */ jsx(
17229
+ "span",
17230
+ {
17231
+ className: "inline-flex items-center px-2 py-1 rounded-md bg-gray-100 text-xs text-gray-700",
17232
+ children: example
17233
+ },
17234
+ `example-${index}-${exampleIndex}`
17235
+ )
17236
+ ) })
17237
+ ] })
17238
+ ] }),
17239
+ /* @__PURE__ */ jsx(
17240
+ Button,
17241
+ {
17242
+ type: "button",
17243
+ variant: "secondary",
17244
+ size: "small",
17245
+ onClick: onRemove,
17246
+ className: "mt-2",
17247
+ children: /* @__PURE__ */ jsx(Trash, {})
17248
+ }
17249
+ )
17250
+ ] }) });
17251
+ }
17064
17252
  function AutomationsRulesForm({
17065
17253
  form,
17066
17254
  isOpen
@@ -17111,110 +17299,12 @@ function AutomationsRulesForm({
17111
17299
  return /* @__PURE__ */ jsx("div", { className: "w-full", children: /* @__PURE__ */ jsx("div", { className: "p-6 max-w-2xl mx-auto", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4", children: [
17112
17300
  fields.length === 0 && /* @__PURE__ */ jsx("div", { className: "text-sm text-gray-500 text-center py-4", children: 'No rules added yet. Click "Add Item" to create a new rule.' }),
17113
17301
  fields.map((field, index) => /* @__PURE__ */ jsx(
17114
- "div",
17302
+ RuleItem,
17115
17303
  {
17116
- className: "flex flex-col gap-2 p-4 border rounded-lg",
17117
- children: /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between gap-4", children: [
17118
- /* @__PURE__ */ jsxs("div", { className: "flex-1 flex flex-col gap-2", children: [
17119
- /* @__PURE__ */ jsx(
17120
- Controller,
17121
- {
17122
- name: `rules.items.${index}.attribute`,
17123
- control: form.control,
17124
- render: ({ field: field2, fieldState }) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
17125
- /* @__PURE__ */ jsx(Label, { children: "Attribute" }),
17126
- /* @__PURE__ */ jsxs(
17127
- Select,
17128
- {
17129
- value: field2.value ?? "",
17130
- onValueChange: (value) => {
17131
- field2.onChange(value);
17132
- },
17133
- children: [
17134
- /* @__PURE__ */ jsx(Select.Trigger, { children: /* @__PURE__ */ jsx(Select.Value, { placeholder: "Select the attribute" }) }),
17135
- /* @__PURE__ */ jsx(Select.Content, { children: eventAttributes.map(
17136
- (attribute, attrIndex) => /* @__PURE__ */ jsxs(
17137
- Select.Item,
17138
- {
17139
- value: attribute.value || "ss",
17140
- children: [
17141
- attribute.label,
17142
- " ",
17143
- /* @__PURE__ */ jsxs("span", { className: "text-xs text-gray-500", children: [
17144
- "(",
17145
- attribute.value,
17146
- ")"
17147
- ] })
17148
- ]
17149
- },
17150
- attribute.value || `attr-${index}-${attrIndex}`
17151
- )
17152
- ) })
17153
- ]
17154
- },
17155
- `attribute-${index}-${eventAttributes.length}`
17156
- ),
17157
- fieldState.error && /* @__PURE__ */ jsx("span", { className: "text-red-500 text-sm", children: fieldState.error.message })
17158
- ] })
17159
- }
17160
- ),
17161
- /* @__PURE__ */ jsx(
17162
- Controller,
17163
- {
17164
- name: `rules.items.${index}.operator`,
17165
- control: form.control,
17166
- render: ({ field: field2, fieldState }) => /* @__PURE__ */ jsxs(Fragment$1, { children: [
17167
- /* @__PURE__ */ jsx(Label, { children: "Operator" }),
17168
- /* @__PURE__ */ jsxs(
17169
- Select,
17170
- {
17171
- value: field2.value ?? "",
17172
- onValueChange: (value) => {
17173
- field2.onChange(value);
17174
- },
17175
- children: [
17176
- /* @__PURE__ */ jsx(Select.Trigger, { children: /* @__PURE__ */ jsx(Select.Value, { placeholder: "Select the operator" }) }),
17177
- /* @__PURE__ */ jsx(Select.Content, { children: OPERATOR_TYPES.map(
17178
- (operator, opIndex) => /* @__PURE__ */ jsx(
17179
- Select.Item,
17180
- {
17181
- value: operator.value,
17182
- children: operator.label
17183
- },
17184
- operator.value || `op-${opIndex}`
17185
- )
17186
- ) })
17187
- ]
17188
- },
17189
- `operator-${index}-${eventAttributes.length}-${field2.value ?? ""}`
17190
- ),
17191
- fieldState.error && /* @__PURE__ */ jsx("span", { className: "text-red-500 text-sm", children: fieldState.error.message })
17192
- ] })
17193
- }
17194
- ),
17195
- /* @__PURE__ */ jsx(
17196
- RuleValueInput,
17197
- {
17198
- control: form.control,
17199
- name: `rules.items.${index}.rule_values.0.value`,
17200
- operator: form.watch(
17201
- `rules.items.${index}.operator`
17202
- )
17203
- }
17204
- )
17205
- ] }),
17206
- /* @__PURE__ */ jsx(
17207
- Button,
17208
- {
17209
- type: "button",
17210
- variant: "secondary",
17211
- size: "small",
17212
- onClick: () => handleRemoveRule(index),
17213
- className: "mt-2",
17214
- children: /* @__PURE__ */ jsx(Trash, {})
17215
- }
17216
- )
17217
- ] })
17304
+ control: form.control,
17305
+ index,
17306
+ eventAttributes,
17307
+ onRemove: () => handleRemoveRule(index)
17218
17308
  },
17219
17309
  (field == null ? void 0 : field.id) ?? `rule-${index}`
17220
17310
  )),
@@ -17234,7 +17324,7 @@ function AutomationsRulesForm({
17234
17324
  ] }) }) });
17235
17325
  }
17236
17326
  const templateLoaders = {
17237
- BaseConfigComponent: () => import("./base-config-zK3z6k14")
17327
+ BaseConfigComponent: () => import("./base-config-D0IqhDVr")
17238
17328
  };
17239
17329
  async function loadTemplateComponent(key) {
17240
17330
  const loader = templateLoaders[key];
@@ -17545,7 +17635,7 @@ function AutomationsEditForm({
17545
17635
  description: "",
17546
17636
  trigger_type: "event",
17547
17637
  event_name: "",
17548
- interval_minutes: null,
17638
+ interval_seconds: null,
17549
17639
  active: false
17550
17640
  },
17551
17641
  rules: {
@@ -17569,7 +17659,7 @@ function AutomationsEditForm({
17569
17659
  description: trigger.description || "",
17570
17660
  trigger_type: trigger.trigger_type || "event",
17571
17661
  event_name: trigger.event_name || "",
17572
- interval_minutes: trigger.interval_minutes || null,
17662
+ interval_seconds: trigger.interval_seconds || null,
17573
17663
  active: trigger.active || false
17574
17664
  },
17575
17665
  rules: {
@@ -17613,7 +17703,7 @@ function AutomationsEditForm({
17613
17703
  description: "",
17614
17704
  trigger_type: "event",
17615
17705
  event_name: "",
17616
- interval_minutes: null,
17706
+ interval_seconds: null,
17617
17707
  active: false
17618
17708
  },
17619
17709
  rules: {
@@ -17634,7 +17724,7 @@ function AutomationsEditForm({
17634
17724
  description: data.general.description,
17635
17725
  trigger_type: data.general.trigger_type,
17636
17726
  event_name: data.general.event_name,
17637
- interval_minutes: data.general.interval_minutes,
17727
+ interval_seconds: data.general.interval_seconds,
17638
17728
  active: data.general.active
17639
17729
  };
17640
17730
  await editAutomation({
@@ -17877,7 +17967,7 @@ const AutomationsList = () => {
17877
17967
  const columns = useMemo(
17878
17968
  () => [
17879
17969
  columnHelper.accessor("to", {
17880
- header: "Name and description",
17970
+ header: "Name and descriptions",
17881
17971
  cell: ({ row }) => {
17882
17972
  var _a, _b, _c;
17883
17973
  const tooltip = `Device (DB) ID:
@@ -17901,7 +17991,7 @@ const AutomationsList = () => {
17901
17991
  }
17902
17992
  )
17903
17993
  ] }),
17904
- /* @__PURE__ */ jsx("div", { className: "min-w-[180px] whitespace-normal text-xs", children: /* @__PURE__ */ jsx("span", { children: (_c = row == null ? void 0 : row.original) == null ? void 0 : _c.description }) })
17994
+ /* @__PURE__ */ jsx("div", { className: "whitespace-normal text-xs max-w-[180px] min-w-[180px]", children: /* @__PURE__ */ jsx("span", { children: (_c = row == null ? void 0 : row.original) == null ? void 0 : _c.description }) })
17905
17995
  ] }) });
17906
17996
  }
17907
17997
  }),
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const jsxRuntime = require("react/jsx-runtime");
4
- const __adminExtensions__ = require("./__admin-extensions__-Cc5RhzDh");
4
+ const __adminExtensions__ = require("./__admin-extensions__-BV7n9V1I");
5
5
  const ui = require("@medusajs/ui");
6
6
  const TextField = ({
7
7
  label,
@@ -1,5 +1,5 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
- import { C as Controller, a as ChipInput } from "./__admin-extensions__-BgrPyL-G";
2
+ import { C as Controller, a as ChipInput } from "./__admin-extensions__-BZrUHl9N";
3
3
  import { Input, Textarea, Select, Checkbox, Label } from "@medusajs/ui";
4
4
  const TextField = ({
5
5
  label,
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
- const __adminExtensions__ = require("./_chunks/__admin-extensions__-Cc5RhzDh");
2
+ const __adminExtensions__ = require("./_chunks/__admin-extensions__-BV7n9V1I");
3
3
  module.exports = __adminExtensions__.plugin;
@@ -1,4 +1,4 @@
1
- import { p } from "./_chunks/__admin-extensions__-BgrPyL-G";
1
+ import { p } from "./_chunks/__admin-extensions__-BZrUHl9N";
2
2
  export {
3
3
  p as default
4
4
  };
@@ -106,7 +106,7 @@ exports.default = (0, http_1.defineMiddlewares)({
106
106
  "trigger_id",
107
107
  "trigger_type",
108
108
  "event_name",
109
- "interval_minutes",
109
+ "interval_seconds",
110
110
  "channels",
111
111
  "metadata",
112
112
  "active",
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20251222121805 = void 0;
4
+ const migrations_1 = require("@mikro-orm/migrations");
5
+ class Migration20251222121805 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql(`alter table if exists "mpn_automation_trigger" rename column "interval_minutes" to "interval_seconds";`);
8
+ }
9
+ async down() {
10
+ this.addSql(`alter table if exists "mpn_automation_trigger" rename column "interval_seconds" to "interval_minutes";`);
11
+ }
12
+ }
13
+ exports.Migration20251222121805 = Migration20251222121805;
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTEyMjIxMjE4MDUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9tcG4tYXV0b21hdGlvbi9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjUxMjIyMTIxODA1LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFpRDtBQUVqRCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBQzNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FDVCx3R0FBd0csQ0FDekcsQ0FBQTtJQUNILENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUNULHdHQUF3RyxDQUN6RyxDQUFBO0lBQ0gsQ0FBQztDQUNGO0FBWkQsMERBWUMifQ==
@@ -20,8 +20,8 @@ exports.MpnAutomationTrigger = utils_1.model
20
20
  ]),
21
21
  // Event name — only when trigger_type = "event"
22
22
  event_name: utils_1.model.text().nullable(),
23
- // Interval in minutes — only when trigger_type = "schedule"
24
- interval_minutes: utils_1.model.number().nullable(),
23
+ // Interval in seconds — only when trigger_type = "schedule"
24
+ interval_seconds: utils_1.model.number().nullable(),
25
25
  // Whether the trigger is enabled
26
26
  active: utils_1.model.boolean().default(true),
27
27
  // Delivery channels — JSON
@@ -95,4 +95,4 @@ class BaseActionService {
95
95
  }
96
96
  }
97
97
  exports.BaseActionService = BaseActionService;
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hY3Rpb24tc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL21wbi1hdXRvbWF0aW9uL3NlcnZpY2VzL2Jhc2UtYWN0aW9uLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEscURBQW1EO0FBRW5EOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSxpQkFBaUI7SUFBOUI7UUFDRSxPQUFFLEdBQUcsTUFBTSxDQUFBO1FBQ1gsVUFBSyxHQUFHLE1BQU0sQ0FBQTtRQUNkLGdCQUFXLEdBQUcsRUFBRSxDQUFBO1FBRWhCLHVCQUFrQixHQUFHLHFCQUFxQixDQUFBO1FBRTFDLGtHQUFrRztRQUNsRyxXQUFNLEdBQWtCLEVBQUUsQ0FBQTtRQUUxQiw2REFBNkQ7UUFDbkQsZUFBVSxHQUNsQixJQUFJLEdBQUcsRUFBRSxDQUFBO0lBcUdiLENBQUM7SUFuR0M7Ozs7T0FJRztJQUNILGdCQUFnQixDQUNkLElBQVksRUFDWixRQUEwQjtRQUUxQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxXQUFXLENBQUMsSUFBWTtRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDTyxtQkFBbUI7UUFDM0IsdURBQXVEO0lBQ3pELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sb0JBQW9CLENBQzVCLFVBQWtELEVBQUUsRUFDcEQsWUFBcUI7UUFFckIsT0FBTztZQUNMLElBQUksRUFBRSxjQUFjO1lBQ3BCLEdBQUcsRUFBRSxjQUFjO1lBQ25CLEtBQUssRUFBRSxlQUFlO1lBQ3RCLElBQUksRUFBRSxRQUFpQjtZQUN2QixRQUFRLEVBQUUsSUFBSTtZQUNkLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFlBQVksRUFBRSxZQUFZO1NBQzNCLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsRUFDbEIsT0FBTyxFQUNQLE1BQU0sRUFDTixPQUFPLEVBQ1AsU0FBUyxFQUNULFNBQVMsRUFDVCxXQUFXLEdBUVo7UUFDQyxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUN2QyxlQUFPLENBQUMsU0FBUyxDQUNsQixDQUFBO1FBRUQsTUFBTSxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3pCLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFO2dCQUNKLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixNQUFNLEVBQUUsTUFBTTtnQkFDZCxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ25CLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixXQUFXLEVBQUUsV0FBVzthQUN6QjtTQUNGLENBQUMsQ0FBQTtRQUVGLE9BQU87WUFDTCxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDbkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQzlCLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQWpIRCw4Q0FpSEMifQ==
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1hY3Rpb24tc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL21wbi1hdXRvbWF0aW9uL3NlcnZpY2VzL2Jhc2UtYWN0aW9uLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEscURBQW1EO0FBRW5EOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSxpQkFBaUI7SUFBOUI7UUFDRSxPQUFFLEdBQUcsTUFBTSxDQUFBO1FBQ1gsVUFBSyxHQUFHLE1BQU0sQ0FBQTtRQUNkLGdCQUFXLEdBQUcsRUFBRSxDQUFBO1FBRWhCLHVCQUFrQixHQUFHLHFCQUFxQixDQUFBO1FBRTFDLGtHQUFrRztRQUNsRyxXQUFNLEdBQWtCLEVBQUUsQ0FBQTtRQUUxQiw2REFBNkQ7UUFDbkQsZUFBVSxHQUNsQixJQUFJLEdBQUcsRUFBRSxDQUFBO0lBcUdiLENBQUM7SUFuR0M7Ozs7T0FJRztJQUNILGdCQUFnQixDQUNkLElBQVksRUFDWixRQUFhO1FBRWIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVyxDQUFDLElBQVk7UUFDdEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sbUJBQW1CO1FBQzNCLHVEQUF1RDtJQUN6RCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNPLG9CQUFvQixDQUM1QixVQUFrRCxFQUFFLEVBQ3BELFlBQXFCO1FBRXJCLE9BQU87WUFDTCxJQUFJLEVBQUUsY0FBYztZQUNwQixHQUFHLEVBQUUsY0FBYztZQUNuQixLQUFLLEVBQUUsZUFBZTtZQUN0QixJQUFJLEVBQUUsUUFBaUI7WUFDdkIsUUFBUSxFQUFFLElBQUk7WUFDZCxPQUFPLEVBQUUsT0FBTztZQUNoQixZQUFZLEVBQUUsWUFBWTtTQUMzQixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQ2xCLE9BQU8sRUFDUCxNQUFNLEVBQ04sT0FBTyxFQUNQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsV0FBVyxHQVFaO1FBQ0MsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FDdkMsZUFBTyxDQUFDLFNBQVMsQ0FDbEIsQ0FBQTtRQUVELE1BQU0sZUFBZSxDQUFDLElBQUksQ0FBQztZQUN6QixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRTtnQkFDSixTQUFTLEVBQUUsU0FBUztnQkFDcEIsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNuQixPQUFPLEVBQUUsT0FBTztnQkFDaEIsV0FBVyxFQUFFLFdBQVc7YUFDekI7U0FDRixDQUFDLENBQUE7UUFFRixPQUFPO1lBQ0wsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ25CLFVBQVUsRUFBRSxNQUFNLENBQUMsV0FBVztZQUM5QixPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUFqSEQsOENBaUhDIn0=
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EmailActionService = void 0;
4
4
  const base_action_service_1 = require("./base-action-service");
5
5
  const emails_1 = require("@codee-sh/medusa-plugin-notification-emails/templates/emails");
6
+ const utils_1 = require("@codee-sh/medusa-plugin-notification-emails/utils");
6
7
  class EmailActionService extends base_action_service_1.BaseActionService {
7
8
  constructor() {
8
9
  super();
@@ -62,8 +63,12 @@ class EmailActionService extends base_action_service_1.BaseActionService {
62
63
  * This method can be used to register custom templates if needed
63
64
  */
64
65
  initializeTemplates() {
65
- // Email templates are handled by external plugin
66
- // Custom templates can be registered here if needed
66
+ // Email engine already has all prebuild templates registered
67
+ // You can register custom templates here if needed:
68
+ // emailEngine.registerTemplate("custom-template", {
69
+ // ...emailEngine.getBaseTemplate(),
70
+ // getConfig: () => ({ blocks: [...], translations: {...} })
71
+ // })
67
72
  }
68
73
  /**
69
74
  * Render email template using external plugin
@@ -71,11 +76,19 @@ class EmailActionService extends base_action_service_1.BaseActionService {
71
76
  * @returns Rendered email template with html, text, and subject
72
77
  */
73
78
  async renderTemplate(params) {
74
- const { templateName, context, options, customTemplateFunction, } = params;
75
- // Use external plugin's renderTemplate function
76
- const result = await (0, emails_1.renderTemplate)(templateName, context, options || {}, customTemplateFunction);
77
- return result;
79
+ const { templateName, context, contextType, options = {} } = params;
80
+ const transformedContext = (0, utils_1.transformContext)(contextType, context);
81
+ const result = await emails_1.emailService.render({
82
+ templateName,
83
+ data: transformedContext,
84
+ options: options || {},
85
+ });
86
+ return {
87
+ html: result.html,
88
+ text: result.text,
89
+ subject: result.subject,
90
+ };
78
91
  }
79
92
  }
80
93
  exports.EmailActionService = EmailActionService;
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtYWN0aW9uLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9tcG4tYXV0b21hdGlvbi9zZXJ2aWNlcy9lbWFpbC1hY3Rpb24tc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrREFBeUQ7QUFDekQseUZBQTZGO0FBTzdGLE1BQWEsa0JBQW1CLFNBQVEsdUNBQWlCO0lBSXZEO1FBQ0UsS0FBSyxFQUFFLENBQUE7UUFKVCxPQUFFLEdBQUcsT0FBTyxDQUFBO1FBQ1osVUFBSyxHQUFHLE9BQU8sQ0FBQTtRQU9mLFdBQU0sR0FBa0I7WUFDdEI7Z0JBQ0UsSUFBSSxFQUFFLElBQUk7Z0JBQ1YsR0FBRyxFQUFFLElBQUk7Z0JBQ1QsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsSUFBSSxFQUFFLE9BQWdCO2dCQUN0QixRQUFRLEVBQUUsSUFBSTthQUNmO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsR0FBRyxFQUFFLFNBQVM7Z0JBQ2QsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLElBQUksRUFBRSxNQUFlO2dCQUNyQixRQUFRLEVBQUUsSUFBSTthQUNmO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLE1BQU07Z0JBQ1osR0FBRyxFQUFFLE1BQU07Z0JBQ1gsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsSUFBSSxFQUFFLFVBQW1CO2dCQUN6QixRQUFRLEVBQUUsSUFBSTthQUNmO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsR0FBRyxFQUFFLEtBQUs7Z0JBQ1YsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osSUFBSSxFQUFFLE9BQWdCO2dCQUN0QixRQUFRLEVBQUUsS0FBSzthQUNoQjtZQUNEO2dCQUNFLElBQUksRUFBRSxJQUFJO2dCQUNWLEdBQUcsRUFBRSxJQUFJO2dCQUNULEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxPQUFnQjtnQkFDdEIsUUFBUSxFQUFFLEtBQUs7YUFDaEI7WUFDRDtnQkFDRSxJQUFJLEVBQUUsU0FBUztnQkFDZixHQUFHLEVBQUUsU0FBUztnQkFDZCxLQUFLLEVBQUUsVUFBVTtnQkFDakIsSUFBSSxFQUFFLE9BQWdCO2dCQUN0QixRQUFRLEVBQUUsS0FBSzthQUNoQjtZQUNELCtGQUErRjtZQUMvRixJQUFJLENBQUMsb0JBQW9CLEVBQUU7U0FDNUIsQ0FBQTtRQWhEQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtJQUM1QixDQUFDO0lBaUREOzs7O09BSUc7SUFDTyxtQkFBbUI7UUFDM0IsaURBQWlEO1FBQ2pELG9EQUFvRDtJQUN0RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsTUFTcEI7UUFLQyxNQUFNLEVBQ0osWUFBWSxFQUNaLE9BQU8sRUFDUCxPQUFPLEVBQ1Asc0JBQXNCLEdBQ3ZCLEdBQUcsTUFBTSxDQUFBO1FBRVYsZ0RBQWdEO1FBQ2hELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSx1QkFBYyxFQUNqQyxZQUFZLEVBQ1osT0FBTyxFQUNQLE9BQU8sSUFBSSxFQUFFLEVBQ2Isc0JBQXNCLENBQ3ZCLENBQUE7UUFFRCxPQUFPLE1BQU0sQ0FBQTtJQUNmLENBQUM7Q0FDRjtBQXRHRCxnREFzR0MifQ==
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtYWN0aW9uLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9tcG4tYXV0b21hdGlvbi9zZXJ2aWNlcy9lbWFpbC1hY3Rpb24tc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrREFBeUQ7QUFDekQseUZBQTJGO0FBQzNGLDZFQUFvRjtBQVFwRixNQUFhLGtCQUFtQixTQUFRLHVDQUFpQjtJQUl2RDtRQUNFLEtBQUssRUFBRSxDQUFBO1FBSlQsT0FBRSxHQUFHLE9BQU8sQ0FBQTtRQUNaLFVBQUssR0FBRyxPQUFPLENBQUE7UUFPZixXQUFNLEdBQWtCO1lBQ3RCO2dCQUNFLElBQUksRUFBRSxJQUFJO2dCQUNWLEdBQUcsRUFBRSxJQUFJO2dCQUNULEtBQUssRUFBRSxJQUFJO2dCQUNYLElBQUksRUFBRSxPQUFnQjtnQkFDdEIsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNEO2dCQUNFLElBQUksRUFBRSxTQUFTO2dCQUNmLEdBQUcsRUFBRSxTQUFTO2dCQUNkLEtBQUssRUFBRSxTQUFTO2dCQUNoQixJQUFJLEVBQUUsTUFBZTtnQkFDckIsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNEO2dCQUNFLElBQUksRUFBRSxNQUFNO2dCQUNaLEdBQUcsRUFBRSxNQUFNO2dCQUNYLEtBQUssRUFBRSxNQUFNO2dCQUNiLElBQUksRUFBRSxVQUFtQjtnQkFDekIsUUFBUSxFQUFFLElBQUk7YUFDZjtZQUNEO2dCQUNFLElBQUksRUFBRSxLQUFLO2dCQUNYLEdBQUcsRUFBRSxLQUFLO2dCQUNWLEtBQUssRUFBRSxLQUFLO2dCQUNaLElBQUksRUFBRSxPQUFnQjtnQkFDdEIsUUFBUSxFQUFFLEtBQUs7YUFDaEI7WUFDRDtnQkFDRSxJQUFJLEVBQUUsSUFBSTtnQkFDVixHQUFHLEVBQUUsSUFBSTtnQkFDVCxLQUFLLEVBQUUsSUFBSTtnQkFDWCxJQUFJLEVBQUUsT0FBZ0I7Z0JBQ3RCLFFBQVEsRUFBRSxLQUFLO2FBQ2hCO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsR0FBRyxFQUFFLFNBQVM7Z0JBQ2QsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLElBQUksRUFBRSxPQUFnQjtnQkFDdEIsUUFBUSxFQUFFLEtBQUs7YUFDaEI7WUFDRCwrRkFBK0Y7WUFDL0YsSUFBSSxDQUFDLG9CQUFvQixFQUFFO1NBQzVCLENBQUE7UUFoREMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7SUFDNUIsQ0FBQztJQWlERDs7OztPQUlHO0lBQ08sbUJBQW1CO1FBQzNCLDZEQUE2RDtRQUM3RCxvREFBb0Q7UUFDcEQsb0RBQW9EO1FBQ3BELHNDQUFzQztRQUN0Qyw4REFBOEQ7UUFDOUQsS0FBSztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUtwQjtRQUtDLE1BQU0sRUFDSixZQUFZLEVBQ1osT0FBTyxFQUNQLFdBQVcsRUFDWCxPQUFPLEdBQUcsRUFBRSxFQUNiLEdBQUcsTUFBTSxDQUFBO1FBRVYsTUFBTSxrQkFBa0IsR0FBRyxJQUFBLHdCQUFnQixFQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUVqRSxNQUFNLE1BQU0sR0FBRyxNQUFNLHFCQUFZLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLFlBQVk7WUFDWixJQUFJLEVBQUUsa0JBQWtCO1lBQ3hCLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRTtTQUN2QixDQUFDLENBQUE7UUFFRixPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDeEIsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQTFHRCxnREEwR0MifQ==