@hartl-services/medusa-base 0.3.0 → 0.4.0

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 (94) hide show
  1. package/.medusa/server/src/admin/index.js +741 -36
  2. package/.medusa/server/src/admin/index.mjs +743 -38
  3. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/actions/[action_key]/route.js +31 -0
  4. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/actions/[action_key]/runs/route.js +16 -0
  5. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/route.js +14 -0
  6. package/.medusa/server/src/api/admin/plugin-features/[plugin_key]/settings/route.js +22 -0
  7. package/.medusa/server/src/api/admin/plugin-features/route.js +6 -4
  8. package/.medusa/server/src/api/middlewares.js +22 -8
  9. package/.medusa/server/src/api/plugin-actions.js +221 -0
  10. package/.medusa/server/src/api/plugin-features-http.js +67 -8
  11. package/.medusa/server/src/modules/plugin-features/domain/plugin-action-runs.js +92 -0
  12. package/.medusa/server/src/modules/plugin-features/domain/plugin-settings.js +213 -0
  13. package/.medusa/server/src/modules/plugin-features/domain/secret-box.js +56 -0
  14. package/.medusa/server/src/modules/plugin-features/migrations/Migration20260928205031.js +16 -0
  15. package/.medusa/server/src/modules/plugin-features/migrations/Migration20260928215428.js +17 -0
  16. package/.medusa/server/src/modules/plugin-features/models/plugin-action-run.js +43 -0
  17. package/.medusa/server/src/modules/plugin-features/models/plugin-setting-state.js +32 -0
  18. package/.medusa/server/src/modules/plugin-features/service.js +419 -17
  19. package/.medusa/server/src/public/action-progress.js +67 -0
  20. package/.medusa/server/src/public/descriptor.js +199 -2
  21. package/.medusa/server/src/public/effective-features.js +9 -5
  22. package/.medusa/server/src/public/enforcement.js +18 -8
  23. package/.medusa/server/src/public/index.js +10 -2
  24. package/.medusa/server/src/public/module-access.js +14 -0
  25. package/.medusa/server/src/public/settings.js +17 -0
  26. package/.medusa/server/src/public/shop-master-data.js +95 -0
  27. package/.medusa/server/src/utils/discover-complete-cart-participants.js +9 -2
  28. package/.medusa/server/src/utils/discover-plugin-features.js +47 -9
  29. package/.medusa/server/src/workflows/hooks/complete-cart-participants.js +28 -16
  30. package/README.md +393 -12
  31. package/dist/admin-components/features/plugin-features/components/PluginActionsSection.d.ts +6 -0
  32. package/dist/admin-components/features/plugin-features/components/PluginActionsSection.js +66 -0
  33. package/dist/admin-components/features/plugin-features/components/PluginDetailPage.d.ts +2 -0
  34. package/dist/admin-components/features/plugin-features/components/PluginDetailPage.js +9 -0
  35. package/dist/admin-components/features/plugin-features/components/PluginFeatureGate.d.ts +22 -0
  36. package/dist/admin-components/features/plugin-features/components/PluginFeatureGate.js +18 -0
  37. package/dist/admin-components/features/plugin-features/components/PluginFeatureSections.d.ts +11 -0
  38. package/dist/admin-components/features/plugin-features/components/PluginFeatureSections.js +19 -0
  39. package/dist/admin-components/features/plugin-features/components/PluginFeaturesCard.d.ts +12 -0
  40. package/dist/admin-components/features/plugin-features/components/PluginFeaturesCard.js +34 -0
  41. package/dist/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.d.ts +5 -0
  42. package/dist/admin-components/features/plugin-features/components/PluginFeaturesSettingsPage.js +16 -0
  43. package/dist/admin-components/features/plugin-features/components/PluginHubCard.d.ts +7 -0
  44. package/dist/admin-components/features/plugin-features/components/PluginHubCard.js +21 -0
  45. package/dist/admin-components/features/plugin-features/components/PluginPageShell.d.ts +13 -0
  46. package/dist/admin-components/features/plugin-features/components/PluginPageShell.js +20 -0
  47. package/dist/admin-components/features/plugin-features/components/PluginSettingsForm.d.ts +7 -0
  48. package/dist/admin-components/features/plugin-features/components/PluginSettingsForm.js +39 -0
  49. package/dist/admin-components/features/plugin-features/components/PluginStatusChips.d.ts +5 -0
  50. package/dist/admin-components/features/plugin-features/components/PluginStatusChips.js +8 -0
  51. package/dist/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.d.ts +114 -0
  52. package/dist/admin-components/features/plugin-features/hooks/usePluginFeatureEnabled.js +40 -0
  53. package/dist/admin-components/features/plugin-features/hooks/usePluginFeatures.d.ts +392 -0
  54. package/dist/admin-components/features/plugin-features/hooks/usePluginFeatures.js +128 -0
  55. package/dist/admin-components/features/plugin-features/hooks/usePluginSettingsForm.d.ts +93 -0
  56. package/dist/admin-components/features/plugin-features/hooks/usePluginSettingsForm.js +44 -0
  57. package/dist/admin-components/features/plugin-features/lib/action-runs.d.ts +19 -0
  58. package/dist/admin-components/features/plugin-features/lib/action-runs.js +74 -0
  59. package/dist/admin-components/features/plugin-features/lib/plugin-features-admin-client.d.ts +363 -0
  60. package/dist/admin-components/features/plugin-features/lib/plugin-features-admin-client.js +9 -0
  61. package/dist/admin-components/features/plugin-features/lib/plugin-paths.d.ts +4 -0
  62. package/dist/admin-components/features/plugin-features/lib/plugin-paths.js +4 -0
  63. package/dist/admin-components/features/plugin-features/lib/settings-draft.d.ts +28 -0
  64. package/dist/admin-components/features/plugin-features/lib/settings-draft.js +86 -0
  65. package/dist/admin-components/features/plugin-features/queries/pluginFeatureKeys.d.ts +7 -0
  66. package/dist/admin-components/features/plugin-features/queries/pluginFeatureKeys.js +7 -0
  67. package/dist/admin-components/i18n/texts.d.ts +90 -0
  68. package/dist/admin-components/i18n/texts.js +90 -0
  69. package/dist/admin-components/index.d.ts +14 -0
  70. package/dist/admin-components/index.js +14 -0
  71. package/dist/admin-components/lib/errors.d.ts +6 -0
  72. package/dist/admin-components/lib/errors.js +27 -0
  73. package/dist/admin-components/lib/sdk.d.ts +2 -0
  74. package/dist/admin-components/lib/sdk.js +13 -0
  75. package/dist/public/action-progress.d.ts +25 -0
  76. package/dist/public/action-progress.js +66 -0
  77. package/dist/public/descriptor.d.ts +3 -2
  78. package/dist/public/descriptor.js +198 -1
  79. package/dist/public/effective-features.d.ts +2 -1
  80. package/dist/public/effective-features.js +8 -4
  81. package/dist/public/enforcement.d.ts +7 -0
  82. package/dist/public/enforcement.js +17 -7
  83. package/dist/public/index.d.ts +5 -2
  84. package/dist/public/index.js +9 -1
  85. package/dist/public/module-access.d.ts +3 -0
  86. package/dist/public/module-access.js +13 -0
  87. package/dist/public/settings.d.ts +11 -0
  88. package/dist/public/settings.js +16 -0
  89. package/dist/public/shop-master-data.d.ts +25 -0
  90. package/dist/public/shop-master-data.js +94 -0
  91. package/dist/public/types.d.ts +97 -1
  92. package/dist/utils/discover-plugin-features.d.ts +28 -0
  93. package/dist/utils/discover-plugin-features.js +96 -0
  94. package/package.json +7 -3
@@ -4,10 +4,190 @@ exports.validatePluginFeatureDescriptor = validatePluginFeatureDescriptor;
4
4
  exports.definePluginFeatures = definePluginFeatures;
5
5
  const utils_1 = require("@medusajs/framework/utils");
6
6
  const KEY_PATTERN = /^[a-z][a-z0-9_]{0,62}$/;
7
+ const SETTING_TYPES = new Set([
8
+ "string",
9
+ "url",
10
+ "number",
11
+ "boolean",
12
+ "secret",
13
+ "select",
14
+ ]);
15
+ const ACTION_MODES = new Set(["sync", "background"]);
16
+ const ADMIN_PAGE_PREFIX = "/settings/hartl-services/";
17
+ const BASE_PAGE_PREFIX = "/settings/hartl-services/plugin/";
18
+ const ADMIN_PAGE_PATTERN = /^\/settings\/hartl-services(\/[a-z0-9][a-z0-9_-]*)+$/;
19
+ const isHttpUrl = (value) => {
20
+ try {
21
+ const url = new URL(value);
22
+ return url.protocol === "http:" || url.protocol === "https:";
23
+ }
24
+ catch {
25
+ return false;
26
+ }
27
+ };
7
28
  const invalid = (pluginKey, message) => new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Ungültige Funktionsschalter für Plugin "${pluginKey}": ${message}`);
29
+ const hasText = (value) => typeof value === "string" && value.trim().length > 0;
30
+ const defaultMatchesType = (setting) => {
31
+ const value = setting.default;
32
+ switch (setting.type) {
33
+ case "string":
34
+ return hasText(value);
35
+ case "url":
36
+ return typeof value === "string" && isHttpUrl(value);
37
+ case "number":
38
+ return typeof value === "number" && Number.isFinite(value);
39
+ case "boolean":
40
+ return typeof value === "boolean";
41
+ case "select":
42
+ return (typeof value === "string" &&
43
+ (setting.options ?? []).some((option) => option.value === value));
44
+ default:
45
+ return false;
46
+ }
47
+ };
48
+ const withinBounds = (setting) => typeof setting.default !== "number" ||
49
+ ((setting.min === undefined || setting.default >= setting.min) &&
50
+ (setting.max === undefined || setting.default <= setting.max));
51
+ const isFiniteNumber = (value) => typeof value === "number" && Number.isFinite(value);
52
+ /** `options` only (and required) for select, `min`/`max` only for number. */
53
+ const validateTypeExtras = (pluginKey, setting) => {
54
+ if (setting.type === "select") {
55
+ const options = setting.options;
56
+ if (!Array.isArray(options) || options.length === 0) {
57
+ throw invalid(pluginKey, `Auswahl "${setting.key}" braucht mindestens eine Option.`);
58
+ }
59
+ const values = new Set();
60
+ for (const option of options) {
61
+ if (!hasText(option?.value) || !hasText(option?.label)) {
62
+ throw invalid(pluginKey, `Auswahl "${setting.key}" hat eine Option ohne value oder label.`);
63
+ }
64
+ if (values.has(option.value)) {
65
+ throw invalid(pluginKey, `Auswahl "${setting.key}" hat die Option "${option.value}" doppelt.`);
66
+ }
67
+ values.add(option.value);
68
+ }
69
+ }
70
+ else if (setting.options !== undefined) {
71
+ throw invalid(pluginKey, `Einstellung "${setting.key}": options gibt es nur bei "select".`);
72
+ }
73
+ if (setting.type !== "number") {
74
+ if (setting.min !== undefined || setting.max !== undefined) {
75
+ throw invalid(pluginKey, `Einstellung "${setting.key}": min/max gibt es nur bei "number".`);
76
+ }
77
+ return;
78
+ }
79
+ for (const [name, bound] of [
80
+ ["min", setting.min],
81
+ ["max", setting.max],
82
+ ]) {
83
+ if (bound !== undefined && !isFiniteNumber(bound)) {
84
+ throw invalid(pluginKey, `Einstellung "${setting.key}": ${name} muss eine endliche Zahl sein.`);
85
+ }
86
+ }
87
+ if (setting.min !== undefined &&
88
+ setting.max !== undefined &&
89
+ setting.min > setting.max) {
90
+ throw invalid(pluginKey, `Einstellung "${setting.key}": min ist größer als max.`);
91
+ }
92
+ };
93
+ /**
94
+ * `invalidates` lists secrets of the same plugin that a change of this
95
+ * setting deletes (e.g. an API key that must not go to a new URL).
96
+ */
97
+ const validateInvalidates = (pluginKey, setting, settings) => {
98
+ const invalidates = setting.invalidates;
99
+ if (invalidates === undefined) {
100
+ return;
101
+ }
102
+ if (!Array.isArray(invalidates) || invalidates.length === 0) {
103
+ throw invalid(pluginKey, `Einstellung "${setting.key}": invalidates muss eine nicht-leere Liste sein.`);
104
+ }
105
+ const seen = new Set();
106
+ for (const key of invalidates) {
107
+ const target = settings.find((candidate) => candidate.key === key);
108
+ if (typeof key !== "string" || !target || target.type !== "secret") {
109
+ throw invalid(pluginKey, `Einstellung "${setting.key}": invalidates nennt "${String(key)}", das keine geheime Einstellung dieses Plugins ist.`);
110
+ }
111
+ if (key === setting.key || seen.has(key)) {
112
+ throw invalid(pluginKey, `Einstellung "${setting.key}": invalidates nennt "${key}" doppelt oder sich selbst.`);
113
+ }
114
+ seen.add(key);
115
+ }
116
+ };
117
+ const validateSettings = (pluginKey, settings) => {
118
+ const seen = new Set();
119
+ for (const setting of settings) {
120
+ if (!KEY_PATTERN.test(setting.key)) {
121
+ throw invalid(pluginKey, `Einstellungs-Key "${setting.key}" hat ein ungültiges Format.`);
122
+ }
123
+ if (seen.has(setting.key)) {
124
+ throw invalid(pluginKey, `Einstellungs-Key "${setting.key}" ist doppelt.`);
125
+ }
126
+ seen.add(setting.key);
127
+ if (!hasText(setting.label)) {
128
+ throw invalid(pluginKey, `Einstellung "${setting.key}" hat kein label.`);
129
+ }
130
+ if (!SETTING_TYPES.has(setting.type)) {
131
+ throw invalid(pluginKey, `Einstellung "${setting.key}" hat einen unbekannten Typ.`);
132
+ }
133
+ if (setting.required !== undefined && typeof setting.required !== "boolean") {
134
+ throw invalid(pluginKey, `Einstellung "${setting.key}": required muss boolean sein.`);
135
+ }
136
+ validateTypeExtras(pluginKey, setting);
137
+ validateInvalidates(pluginKey, setting, settings);
138
+ if (setting.default === undefined) {
139
+ continue;
140
+ }
141
+ if (setting.type === "secret") {
142
+ throw invalid(pluginKey, `Geheime Einstellung "${setting.key}" darf keinen Standardwert haben.`);
143
+ }
144
+ if (!defaultMatchesType(setting)) {
145
+ throw invalid(pluginKey, `Standardwert von Einstellung "${setting.key}" passt nicht zum Typ "${setting.type}".`);
146
+ }
147
+ if (!withinBounds(setting)) {
148
+ throw invalid(pluginKey, `Standardwert von Einstellung "${setting.key}" liegt außerhalb von min/max.`);
149
+ }
150
+ }
151
+ };
152
+ const validateActions = (pluginKey, actions) => {
153
+ const seen = new Set();
154
+ for (const action of actions) {
155
+ if (!KEY_PATTERN.test(action.key)) {
156
+ throw invalid(pluginKey, `Aktions-Key "${action.key}" hat ein ungültiges Format.`);
157
+ }
158
+ if (seen.has(action.key)) {
159
+ throw invalid(pluginKey, `Aktions-Key "${action.key}" ist doppelt.`);
160
+ }
161
+ seen.add(action.key);
162
+ if (!hasText(action.label)) {
163
+ throw invalid(pluginKey, `Aktion "${action.key}" hat kein label.`);
164
+ }
165
+ if (!hasText(action.workflow_id)) {
166
+ throw invalid(pluginKey, `Aktion "${action.key}" hat keine workflow_id.`);
167
+ }
168
+ if (!ACTION_MODES.has(action.mode)) {
169
+ throw invalid(pluginKey, `Aktion "${action.key}" hat einen unbekannten Modus.`);
170
+ }
171
+ if (action.confirm !== undefined && !hasText(action.confirm)) {
172
+ throw invalid(pluginKey, `Aktion "${action.key}": confirm ist leer.`);
173
+ }
174
+ }
175
+ };
176
+ const validateAdminPage = (pluginKey, path) => {
177
+ if (path === undefined) {
178
+ return;
179
+ }
180
+ if (typeof path !== "string" ||
181
+ !path.startsWith(ADMIN_PAGE_PREFIX) ||
182
+ path.startsWith(BASE_PAGE_PREFIX) ||
183
+ !ADMIN_PAGE_PATTERN.test(path)) {
184
+ throw invalid(pluginKey, `admin_page "${String(path)}" muss unter "${ADMIN_PAGE_PREFIX}<plugin>" liegen und darf nicht mit "${BASE_PAGE_PREFIX}" beginnen.`);
185
+ }
186
+ };
8
187
  /**
9
188
  * Checks key format, unique feature keys, existing parents and the single
10
- * allowed nesting level. Throws `INVALID_DATA`.
189
+ * allowed nesting level, plus the optional settings, actions and Admin page.
190
+ * Throws `INVALID_DATA`.
11
191
  */
12
192
  function validatePluginFeatureDescriptor(descriptor) {
13
193
  const pluginKey = String(descriptor.plugin_key);
@@ -17,6 +197,17 @@ function validatePluginFeatureDescriptor(descriptor) {
17
197
  if (typeof descriptor.label !== "string" || !descriptor.label.trim()) {
18
198
  throw invalid(pluginKey, "label fehlt.");
19
199
  }
200
+ if (descriptor.switchable !== undefined &&
201
+ typeof descriptor.switchable !== "boolean") {
202
+ throw invalid(pluginKey, "switchable muss boolean sein.");
203
+ }
204
+ if (descriptor.default_enabled !== undefined &&
205
+ typeof descriptor.default_enabled !== "boolean") {
206
+ throw invalid(pluginKey, "default_enabled muss boolean sein.");
207
+ }
208
+ if (descriptor.switchable === false && descriptor.default_enabled === false) {
209
+ throw invalid(pluginKey, "Ein nicht abschaltbares Plugin (switchable: false) kann nicht default_enabled: false haben.");
210
+ }
20
211
  const byKey = new Map();
21
212
  for (const feature of descriptor.features) {
22
213
  if (!KEY_PATTERN.test(feature.key)) {
@@ -28,6 +219,9 @@ function validatePluginFeatureDescriptor(descriptor) {
28
219
  if (typeof feature.label !== "string" || !feature.label.trim()) {
29
220
  throw invalid(pluginKey, `Feature "${feature.key}" hat kein label.`);
30
221
  }
222
+ if (typeof feature.default_enabled !== "boolean") {
223
+ throw invalid(pluginKey, `Feature "${feature.key}": default_enabled muss boolean sein.`);
224
+ }
31
225
  byKey.set(feature.key, feature);
32
226
  }
33
227
  for (const feature of descriptor.features) {
@@ -42,6 +236,9 @@ function validatePluginFeatureDescriptor(descriptor) {
42
236
  throw invalid(pluginKey, `Feature "${feature.key}" ist zu tief verschachtelt; erlaubt ist eine Ebene.`);
43
237
  }
44
238
  }
239
+ validateSettings(pluginKey, descriptor.settings ?? []);
240
+ validateActions(pluginKey, descriptor.actions ?? []);
241
+ validateAdminPage(pluginKey, descriptor.admin_page);
45
242
  }
46
243
  /**
47
244
  * Declares a plugin's feature switches. Validates at import time so a broken
@@ -51,4 +248,4 @@ function definePluginFeatures(descriptor) {
51
248
  validatePluginFeatureDescriptor(descriptor);
52
249
  return descriptor;
53
250
  }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wdWJsaWMvZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWdCQSwwRUE0Q0M7QUFNRCxvREFLQztBQXZFRCxxREFBdUQ7QUFJdkQsTUFBTSxXQUFXLEdBQUcsd0JBQXdCLENBQUE7QUFFNUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxTQUFpQixFQUFFLE9BQWUsRUFBZSxFQUFFLENBQ2xFLElBQUksbUJBQVcsQ0FDYixtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQzlCLDJDQUEyQyxTQUFTLE1BQU0sT0FBTyxFQUFFLENBQ3BFLENBQUE7QUFFSDs7O0dBR0c7QUFDSCxTQUFnQiwrQkFBK0IsQ0FDN0MsVUFBbUM7SUFFbkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUUvQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2pDLE1BQU0sT0FBTyxDQUFDLFNBQVMsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFDRCxJQUFJLE9BQU8sVUFBVSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDckUsTUFBTSxPQUFPLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQzFDLENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBdUQsQ0FBQTtJQUM1RSxLQUFLLE1BQU0sT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxNQUFNLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLDhCQUE4QixDQUFDLENBQUE7UUFDckYsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUE7UUFDdkUsQ0FBQztRQUNELElBQUksT0FBTyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUMvRCxNQUFNLE9BQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxPQUFPLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxDQUFBO1FBQ3RFLENBQUM7UUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDakMsQ0FBQztJQUVELEtBQUssTUFBTSxPQUFPLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFDLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxTQUFRO1FBQ1YsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzVDLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDMUMsTUFBTSxPQUFPLENBQ1gsU0FBUyxFQUNULFdBQVcsT0FBTyxDQUFDLFVBQVUsa0JBQWtCLE9BQU8sQ0FBQyxHQUFHLG9CQUFvQixDQUMvRSxDQUFBO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxNQUFNLE9BQU8sQ0FDWCxTQUFTLEVBQ1QsWUFBWSxPQUFPLENBQUMsR0FBRyxzREFBc0QsQ0FDOUUsQ0FBQTtRQUNILENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLG9CQUFvQixDQUNsQyxVQUFzQztJQUV0QywrQkFBK0IsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUMzQyxPQUFPLFVBQVUsQ0FBQTtBQUNuQixDQUFDIn0=
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzY3JpcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wdWJsaWMvZGVzY3JpcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWtRQSwwRUF5RUM7QUFNRCxvREFTQztBQTFWRCxxREFBdUQ7QUFRdkQsTUFBTSxXQUFXLEdBQUcsd0JBQXdCLENBQUE7QUFDNUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDNUIsUUFBUTtJQUNSLEtBQUs7SUFDTCxRQUFRO0lBQ1IsU0FBUztJQUNULFFBQVE7SUFDUixRQUFRO0NBQ1QsQ0FBQyxDQUFBO0FBQ0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQTtBQUNwRCxNQUFNLGlCQUFpQixHQUFHLDJCQUEyQixDQUFBO0FBQ3JELE1BQU0sZ0JBQWdCLEdBQUcsa0NBQWtDLENBQUE7QUFDM0QsTUFBTSxrQkFBa0IsR0FBRyxzREFBc0QsQ0FBQTtBQUVqRixNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQWEsRUFBVyxFQUFFO0lBQzNDLElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQzFCLE9BQU8sR0FBRyxDQUFDLFFBQVEsS0FBSyxPQUFPLElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUE7SUFDOUQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztBQUNILENBQUMsQ0FBQTtBQUVELE1BQU0sT0FBTyxHQUFHLENBQUMsU0FBaUIsRUFBRSxPQUFlLEVBQWUsRUFBRSxDQUNsRSxJQUFJLG1CQUFXLENBQ2IsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5QiwyQ0FBMkMsU0FBUyxNQUFNLE9BQU8sRUFBRSxDQUNwRSxDQUFBO0FBRUgsTUFBTSxPQUFPLEdBQUcsQ0FB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
@@ -5,15 +5,19 @@ exports.resolveEffectivePluginFeatures = resolveEffectivePluginFeatures;
5
5
  exports.validateFeatureUpdate = validateFeatureUpdate;
6
6
  const utils_1 = require("@medusajs/framework/utils");
7
7
  /**
8
- * Configured and effective values of every declared feature.
8
+ * Configured and effective values of every declared feature. A descriptor
9
+ * with `switchable: false` is always enabled.
9
10
  * `effective(f) = pluginEnabled && configured(f) && effective(parent(f))`.
10
11
  * Stored keys the descriptor no longer declares are ignored; declared keys
11
12
  * without a stored value fall back to their default.
12
13
  */
13
14
  function resolvePluginFeatureStates(descriptor, stored) {
14
- const pluginEnabled = stored
15
- ? stored.enabled
16
- : descriptor.default_enabled ?? true;
15
+ // A plugin that cannot be switched off is always on, whatever is stored.
16
+ const pluginEnabled = descriptor.switchable === false
17
+ ? true
18
+ : stored
19
+ ? stored.enabled
20
+ : descriptor.default_enabled ?? true;
17
21
  const configured = new Map();
18
22
  for (const feature of descriptor.features) {
19
23
  const value = stored?.features[feature.key];
@@ -71,4 +75,4 @@ function validateFeatureUpdate(descriptor, features) {
71
75
  }
72
76
  return result;
73
77
  }
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0aXZlLWZlYXR1cmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3B1YmxpYy9lZmZlY3RpdmUtZmVhdHVyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE2QkEsZ0VBb0NDO0FBR0Qsd0VBZUM7QUFPRCxzREFzQkM7QUFoSEQscURBQXVEO0FBdUJ2RDs7Ozs7R0FLRztBQUNILFNBQWdCLDBCQUEwQixDQUN4QyxVQUFtQyxFQUNuQyxNQUFtQztJQUVuQyxNQUFNLGFBQWEsR0FBRyxNQUFNO1FBQzFCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTztRQUNoQixDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUE7SUFFdEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUE7SUFDN0MsS0FBSyxNQUFNLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDM0MsVUFBVSxDQUFDLEdBQUcsQ0FDWixPQUFPLENBQUMsR0FBRyxFQUNYLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUM3RCxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBZ0MsRUFBVyxFQUFFO1FBQzlELElBQUksQ0FBQyxhQUFhLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0QsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFBO1FBQ2IsQ0FBQztRQUNELDBFQUEwRTtRQUMxRSxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQTtJQUNwRCxDQUFDLENBQUE7SUFFRCxPQUFPO1FBQ0wsT0FBTyxFQUFFLGFBQWE7UUFDdEIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pELFVBQVU7WUFDVixPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSTtZQUNoRCxpQkFBaUIsRUFBRSxTQUFTLENBQUMsVUFBVSxDQUFDO1NBQ3pDLENBQUMsQ0FBQztLQUNKLENBQUE7QUFDSCxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLFNBQWdCLDhCQUE4QixDQUM1QyxVQUFtQyxFQUNuQyxNQUFtQztJQUVuQyxNQUFNLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDN0QsTUFBTSxRQUFRLEdBQTRCLEVBQUUsQ0FBQTtJQUM1QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUE7SUFDMUQsQ0FBQztJQUVELE9BQU87UUFDTCxVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7UUFDakMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1FBQ3ZCLFFBQVE7S0FDVCxDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsVUFBbUMsRUFDbkMsUUFBaUM7SUFFakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzNFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUV6RSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNuQixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qiw0Q0FBNEMsVUFBVSxDQUFDLFVBQVUsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQzdGLENBQUE7SUFDSCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQTRCLEVBQUUsQ0FBQTtJQUMxQyxLQUFLLE1BQU0sT0FBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ25DLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUMifQ==
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0aXZlLWZlYXR1cmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3B1YmxpYy9lZmZlY3RpdmUtZmVhdHVyZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE4QkEsZ0VBd0NDO0FBR0Qsd0VBZUM7QUFPRCxzREFzQkM7QUFySEQscURBQXVEO0FBdUJ2RDs7Ozs7O0dBTUc7QUFDSCxTQUFnQiwwQkFBMEIsQ0FDeEMsVUFBbUMsRUFDbkMsTUFBbUM7SUFFbkMseUVBQXlFO0lBQ3pFLE1BQU0sYUFBYSxHQUNqQixVQUFVLENBQUMsVUFBVSxLQUFLLEtBQUs7UUFDN0IsQ0FBQyxDQUFDLElBQUk7UUFDTixDQUFDLENBQUMsTUFBTTtZQUNOLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTztZQUNoQixDQUFDLENBQUMsVUFBVSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUE7SUFFMUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUE7SUFDN0MsS0FBSyxNQUFNLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDM0MsVUFBVSxDQUFDLEdBQUcsQ0FDWixPQUFPLENBQUMsR0FBRyxFQUNYLE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUM3RCxDQUFBO0lBQ0gsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBZ0MsRUFBVyxFQUFFO1FBQzlELElBQUksQ0FBQyxhQUFhLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0QsT0FBTyxLQUFLLENBQUE7UUFDZCxDQUFDO1FBQ0QsSUFBSSxPQUFPLENB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
@@ -1,15 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isPluginFeatureEnabled = isPluginFeatureEnabled;
4
+ exports.isPluginFeatureEnabledByKey = isPluginFeatureEnabledByKey;
4
5
  exports.requirePluginFeature = requirePluginFeature;
5
6
  const utils_1 = require("@medusajs/framework/utils");
6
- const constants_1 = require("./constants");
7
- const resolveReader = (container) => {
8
- if (!container.hasRegistration(constants_1.PLUGIN_FEATURES_MODULE)) {
9
- throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "@hartl-services/medusa-base ist nicht in medusa-config registriert.");
10
- }
11
- return container.resolve(constants_1.PLUGIN_FEATURES_MODULE);
12
- };
7
+ const discover_plugin_features_1 = require("../utils/discover-plugin-features");
8
+ const module_access_1 = require("./module-access");
9
+ const resolveReader = (container) => (0, module_access_1.resolveBaseModule)(container);
13
10
  const allEnabled = (effective, keys) => effective.enabled && keys.every((key) => effective.features[key] === true);
14
11
  /**
15
12
  * For subscribers, jobs and workflow steps. No keys = plugin switch only;
@@ -19,6 +16,19 @@ async function isPluginFeatureEnabled(container, descriptor, ...keys) {
19
16
  const effective = await resolveReader(container).retrieveEffectiveFeatures(descriptor);
20
17
  return allEnabled(effective, keys);
21
18
  }
19
+ /**
20
+ * Like `isPluginFeatureEnabled`, for another plugin known only by its key
21
+ * (no import of that plugin): finds its descriptor among the registered
22
+ * modules. An unknown or uninstalled plugin key is `false`, as is an
23
+ * undeclared feature key. Read failures propagate.
24
+ */
25
+ async function isPluginFeatureEnabledByKey(container, pluginKey, ...featureKeys) {
26
+ const descriptor = (0, discover_plugin_features_1.findPluginFeatureDescriptor)(container, pluginKey);
27
+ if (!descriptor) {
28
+ return false;
29
+ }
30
+ return isPluginFeatureEnabled(container, descriptor, ...featureKeys);
31
+ }
22
32
  // Keyed by the request object, so one request reads each plugin's toggles once
23
33
  // even when several gate middlewares match it.
24
34
  const requestMemo = new WeakMap();
@@ -48,4 +58,4 @@ function requirePluginFeature(descriptor, ...keys) {
48
58
  next();
49
59
  };
50
60
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5mb3JjZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHVibGljL2VuZm9yY2VtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBdUNBLHdEQVFDO0FBK0JELG9EQW9CQztBQTNGRCxxREFBdUQ7QUFFdkQsMkNBQW9EO0FBVXBELE1BQU0sYUFBYSxHQUFHLENBQUMsU0FBMEIsRUFBdUIsRUFBRTtJQUN4RSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxrQ0FBc0IsQ0FBQyxFQUFFLENBQUM7UUFDdkQsTUFBTSxJQUFJLG1CQUFXLENBQ25CLG1CQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUNsQyxxRUFBcUUsQ0FDdEUsQ0FBQTtJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQXNCLGtDQUFzQixDQUFDLENBQUE7QUFDdkUsQ0FBQyxDQUFBO0FBRUQsTUFBTSxVQUFVLEdBQUcsQ0FDakIsU0FBa0MsRUFDbEMsSUFBdUIsRUFDZCxFQUFFLENBQ1gsU0FBUyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFBO0FBRTVFOzs7R0FHRztBQUNJLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsU0FBMEIsRUFDMUIsVUFBc0MsRUFDdEMsR0FBRyxJQUFTO0lBRVosTUFBTSxTQUFTLEdBQ2IsTUFBTSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMseUJBQXlCLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDdEUsT0FBTyxVQUFVLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQ3BDLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsK0NBQStDO0FBQy9DLE1BQU0sV0FBVyxHQUFHLElBQUksT0FBTyxFQUc1QixDQUFBO0FBRUgsTUFBTSxtQkFBbUIsR0FBRyxDQUMxQixHQUFrQixFQUNsQixVQUFtQyxFQUNELEVBQUU7SUFDcEMsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNyQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsVUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDdEIsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVELElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ25ELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3hFLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQyxDQUFBO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLFVBQXNDLEVBQ3RDLEdBQUcsSUFBUztJQUVaLE9BQU8sS0FBSyxFQUNWLEdBQWtCLEVBQ2xCLElBQW9CLEVBQ3BCLElBQXdCLEVBQ1QsRUFBRTtRQUNqQixNQUFNLFNBQVMsR0FBRyxNQUFNLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQTtRQUU1RCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLG9EQUFvRCxDQUNyRCxDQUFBO1FBQ0gsQ0FBQztRQUVELElBQUksRUFBRSxDQUFBO0lBQ1IsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyJ9
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5mb3JjZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHVibGljL2VuZm9yY2VtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaUNBLHdEQVFDO0FBUUQsa0VBVUM7QUErQkQsb0RBb0JDO0FBdkdELHFEQUF1RDtBQUV2RCxnRkFBK0U7QUFDL0UsbURBQW1EO0FBVW5ELE1BQU0sYUFBYSxHQUFHLENBQUMsU0FBMEIsRUFBdUIsRUFBRSxDQUN4RSxJQUFBLGlDQUFpQixFQUFzQixTQUFTLENBQUMsQ0FBQTtBQUVuRCxNQUFNLFVBQVUsR0FBRyxDQUNqQixTQUFrQyxFQUNsQyxJQUF1QixFQUNkLEVBQUUsQ0FDWCxTQUFTLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUE7QUFFNUU7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLHNCQUFzQixDQUMxQyxTQUEwQixFQUMxQixVQUFzQyxFQUN0QyxHQUFHLElBQVM7SUFFWixNQUFNLFNBQVMsR0FDYixNQUFNLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN0RSxPQUFPLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDcEMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLDJCQUEyQixDQUMvQyxTQUEwQixFQUMxQixTQUFpQixFQUNqQixHQUFHLFdBQXFCO0lBRXhCLE1BQU0sVUFBVSxHQUFHLElBQUEsc0RBQTJCLEVBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ3BFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFDRCxPQUFPLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQTtBQUN0RSxDQUFDO0FBRUQsK0VBQStFO0FBQy9FLCtDQUErQztBQUMvQyxNQUFNLFdBQVcsR0FBRyxJQUFJLE9BQU8sRUFHNUIsQ0FBQTtBQUVILE1BQU0sbUJBQW1CLEdBQUcsQ0FDMUIsR0FBa0IsRUFDbEIsVUFBbUMsRUFDRCxFQUFFO0lBQ3BDLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDckMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ3RCLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRCxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNuRCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUN4RSxVQUFVLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMsQ0FBQTtBQUVEOzs7R0FHRztBQUNILFNBQWdCLG9CQUFvQixDQUNsQyxVQUFzQyxFQUN0QyxHQUFHLElBQVM7SUFFWixPQUFPLEtBQUssRUFDVixHQUFrQixFQUNsQixJQUFvQixFQUNwQixJQUF3QixFQUNULEVBQUU7UUFDakIsTUFBTSxTQUFTLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFFNUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUMzQixvREFBb0QsQ0FDckQsQ0FBQTtRQUNILENBQUM7UUFFRCxJQUFJLEVBQUUsQ0FBQTtJQUNSLENBQUMsQ0FBQTtBQUNILENBQUMifQ==
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.requirePluginFeature = exports.isPluginFeatureEnabled = exports.resolveEffectivePluginFeatures = exports.definePluginFeatures = exports.PLUGIN_FEATURES_MODULE = void 0;
3
+ exports.reportPluginActionProgress = exports.shopMasterDataDescriptor = exports.getShopMasterData = exports.getPluginSettings = exports.requirePluginFeature = exports.isPluginFeatureEnabledByKey = exports.isPluginFeatureEnabled = exports.resolveEffectivePluginFeatures = exports.definePluginFeatures = exports.PLUGIN_FEATURES_MODULE = void 0;
4
4
  var constants_1 = require("./constants");
5
5
  Object.defineProperty(exports, "PLUGIN_FEATURES_MODULE", { enumerable: true, get: function () { return constants_1.PLUGIN_FEATURES_MODULE; } });
6
6
  var descriptor_1 = require("./descriptor");
@@ -9,5 +9,13 @@ var effective_features_1 = require("./effective-features");
9
9
  Object.defineProperty(exports, "resolveEffectivePluginFeatures", { enumerable: true, get: function () { return effective_features_1.resolveEffectivePluginFeatures; } });
10
10
  var enforcement_1 = require("./enforcement");
11
11
  Object.defineProperty(exports, "isPluginFeatureEnabled", { enumerable: true, get: function () { return enforcement_1.isPluginFeatureEnabled; } });
12
+ Object.defineProperty(exports, "isPluginFeatureEnabledByKey", { enumerable: true, get: function () { return enforcement_1.isPluginFeatureEnabledByKey; } });
12
13
  Object.defineProperty(exports, "requirePluginFeature", { enumerable: true, get: function () { return enforcement_1.requirePluginFeature; } });
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHVibGljL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFvRDtBQUEzQyxtSEFBQSxzQkFBc0IsT0FBQTtBQUMvQiwyQ0FBbUQ7QUFBMUMsa0hBQUEsb0JBQW9CLE9BQUE7QUFDN0IsMkRBQXFFO0FBQTVELG9JQUFBLDhCQUE4QixPQUFBO0FBQ3ZDLDZDQUE0RTtBQUFuRSxxSEFBQSxzQkFBc0IsT0FBQTtBQUFFLG1IQUFBLG9CQUFvQixPQUFBIn0=
14
+ var settings_1 = require("./settings");
15
+ Object.defineProperty(exports, "getPluginSettings", { enumerable: true, get: function () { return settings_1.getPluginSettings; } });
16
+ var shop_master_data_1 = require("./shop-master-data");
17
+ Object.defineProperty(exports, "getShopMasterData", { enumerable: true, get: function () { return shop_master_data_1.getShopMasterData; } });
18
+ Object.defineProperty(exports, "shopMasterDataDescriptor", { enumerable: true, get: function () { return shop_master_data_1.shopMasterDataDescriptor; } });
19
+ var action_progress_1 = require("./action-progress");
20
+ Object.defineProperty(exports, "reportPluginActionProgress", { enumerable: true, get: function () { return action_progress_1.reportPluginActionProgress; } });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHVibGljL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFvRDtBQUEzQyxtSEFBQSxzQkFBc0IsT0FBQTtBQUMvQiwyQ0FBbUQ7QUFBMUMsa0hBQUEsb0JBQW9CLE9BQUE7QUFDN0IsMkRBQXFFO0FBQTVELG9JQUFBLDhCQUE4QixPQUFBO0FBQ3ZDLDZDQUlzQjtBQUhwQixxSEFBQSxzQkFBc0IsT0FBQTtBQUN0QiwwSEFBQSwyQkFBMkIsT0FBQTtBQUMzQixtSEFBQSxvQkFBb0IsT0FBQTtBQUV0Qix1Q0FBOEM7QUFBckMsNkdBQUEsaUJBQWlCLE9BQUE7QUFDMUIsdURBTTJCO0FBTHpCLHFIQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDRIQUFBLHdCQUF3QixPQUFBO0FBSzFCLHFEQUcwQjtBQUZ4Qiw2SEFBQSwwQkFBMEIsT0FBQSJ9
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveBaseModule = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const constants_1 = require("./constants");
6
+ /** Resolves the base module or fails with a clear `UNEXPECTED_STATE`. */
7
+ const resolveBaseModule = (container) => {
8
+ if (!container.hasRegistration(constants_1.PLUGIN_FEATURES_MODULE)) {
9
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "@hartl-services/medusa-base ist nicht in medusa-config registriert.");
10
+ }
11
+ return container.resolve(constants_1.PLUGIN_FEATURES_MODULE);
12
+ };
13
+ exports.resolveBaseModule = resolveBaseModule;
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLWFjY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wdWJsaWMvbW9kdWxlLWFjY2Vzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFBdUQ7QUFFdkQsMkNBQW9EO0FBRXBELHlFQUF5RTtBQUNsRSxNQUFNLGlCQUFpQixHQUFHLENBQUksU0FBMEIsRUFBSyxFQUFFO0lBQ3BFLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLGtDQUFzQixDQUFDLEVBQUUsQ0FBQztRQUN2RCxNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLHFFQUFxRSxDQUN0RSxDQUFBO0lBQ0gsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBSSxrQ0FBc0IsQ0FBQyxDQUFBO0FBQ3JELENBQUMsQ0FBQTtBQVJZLFFBQUEsaUJBQWlCLHFCQVE3QiJ9
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPluginSettings = getPluginSettings;
4
+ const module_access_1 = require("./module-access");
5
+ /**
6
+ * Current settings of a plugin for server-side code (subscribers, workflow
7
+ * steps, jobs, scripts, module services via the global container). Secrets
8
+ * are DECRYPTED; never send the result to a client. Precedence per key:
9
+ * stored in the Admin > `fallback` (medusa-config) > declared default.
10
+ * A missing base plugin fails with `UNEXPECTED_STATE`; read failures
11
+ * propagate.
12
+ */
13
+ async function getPluginSettings(container, descriptor, fallback) {
14
+ const resolved = await (0, module_access_1.resolveBaseModule)(container).resolvePluginSettings(descriptor, fallback);
15
+ return resolved;
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcHVibGljL3NldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeUJBLDhDQWdCQztBQXZDRCxtREFBbUQ7QUFlbkQ7Ozs7Ozs7R0FPRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FLckMsU0FBMEIsRUFDMUIsVUFBNEMsRUFDNUMsUUFBb0M7SUFFcEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLGlDQUFpQixFQUN0QyxTQUFTLENBQ1YsQ0FBQyxxQkFBcUIsQ0FDckIsVUFBVSxFQUNWLFFBQThDLENBQy9DLENBQUE7SUFDRCxPQUFPLFFBQXFDLENBQUE7QUFDOUMsQ0FBQyJ9
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.shopMasterDataDescriptor = void 0;
4
+ exports.getShopMasterData = getShopMasterData;
5
+ const descriptor_1 = require("./descriptor");
6
+ const settings_1 = require("./settings");
7
+ /**
8
+ * The base's own descriptor: the shop's master data (Firmenangaben), edited
9
+ * on the generic plugin page like any plugin's settings. It cannot be
10
+ * switched off and declares no features.
11
+ */
12
+ exports.shopMasterDataDescriptor = (0, descriptor_1.definePluginFeatures)({
13
+ plugin_key: "shop",
14
+ label: "Shop-Stammdaten",
15
+ description: "Firmenangaben des Shops für Rechnungen, Dokumente und Steuerprüfungen.",
16
+ switchable: false,
17
+ features: [],
18
+ settings: [
19
+ { key: "legal_name", label: "Firmenname", type: "string", required: true },
20
+ { key: "address_line1", label: "Adresse", type: "string", required: true },
21
+ { key: "address_line2", label: "Adresszusatz", type: "string" },
22
+ { key: "postal_code", label: "Postleitzahl", type: "string", required: true },
23
+ { key: "city", label: "Ort", type: "string", required: true },
24
+ {
25
+ key: "country_code",
26
+ label: "Land",
27
+ type: "select",
28
+ required: true,
29
+ // EU-27 plus CH, GB, NO, IS, LI (ISO 3166-1 alpha-2, lowercase),
30
+ // sorted by German label.
31
+ options: [
32
+ { value: "be", label: "Belgien" },
33
+ { value: "bg", label: "Bulgarien" },
34
+ { value: "dk", label: "Dänemark" },
35
+ { value: "de", label: "Deutschland" },
36
+ { value: "ee", label: "Estland" },
37
+ { value: "fi", label: "Finnland" },
38
+ { value: "fr", label: "Frankreich" },
39
+ { value: "gr", label: "Griechenland" },
40
+ { value: "ie", label: "Irland" },
41
+ { value: "is", label: "Island" },
42
+ { value: "it", label: "Italien" },
43
+ { value: "hr", label: "Kroatien" },
44
+ { value: "lv", label: "Lettland" },
45
+ { value: "li", label: "Liechtenstein" },
46
+ { value: "lt", label: "Litauen" },
47
+ { value: "lu", label: "Luxemburg" },
48
+ { value: "mt", label: "Malta" },
49
+ { value: "nl", label: "Niederlande" },
50
+ { value: "no", label: "Norwegen" },
51
+ { value: "at", label: "Österreich" },
52
+ { value: "pl", label: "Polen" },
53
+ { value: "pt", label: "Portugal" },
54
+ { value: "ro", label: "Rumänien" },
55
+ { value: "se", label: "Schweden" },
56
+ { value: "ch", label: "Schweiz" },
57
+ { value: "sk", label: "Slowakei" },
58
+ { value: "si", label: "Slowenien" },
59
+ { value: "es", label: "Spanien" },
60
+ { value: "cz", label: "Tschechien" },
61
+ { value: "hu", label: "Ungarn" },
62
+ { value: "gb", label: "Vereinigtes Königreich" },
63
+ { value: "cy", label: "Zypern" },
64
+ ],
65
+ },
66
+ { key: "vat_number", label: "UID-Nummer", type: "string", required: true },
67
+ { key: "email", label: "E-Mail", type: "string" },
68
+ { key: "phone", label: "Telefon", type: "string" },
69
+ { key: "website", label: "Website", type: "url" },
70
+ { key: "iban", label: "IBAN", type: "string" },
71
+ { key: "bic", label: "BIC", type: "string" },
72
+ { key: "company_register_number", label: "Firmenbuchnummer", type: "string" },
73
+ { key: "company_register_court", label: "Firmenbuchgericht", type: "string" },
74
+ ],
75
+ });
76
+ /**
77
+ * The shop's master data for server-side code. Precedence per key: stored in
78
+ * the Admin > `fallback` (e.g. a plugin's own medusa-config option). A
79
+ * missing base plugin fails with `UNEXPECTED_STATE`; read failures propagate.
80
+ */
81
+ async function getShopMasterData(container, fallback) {
82
+ const resolved = await (0, settings_1.getPluginSettings)(container, exports.shopMasterDataDescriptor, fallback);
83
+ const values = {};
84
+ for (const [key, value] of Object.entries(resolved.values)) {
85
+ if (typeof value === "string") {
86
+ values[key] = value;
87
+ }
88
+ }
89
+ return {
90
+ values,
91
+ configured: resolved.configured,
92
+ missing: resolved.missing,
93
+ };
94
+ }
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvcC1tYXN0ZXItZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wdWJsaWMvc2hvcC1tYXN0ZXItZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE4R0EsOENBb0JDO0FBaElELDZDQUFtRDtBQUNuRCx5Q0FBOEM7QUFHOUM7Ozs7R0FJRztBQUNVLFFBQUEsd0JBQXdCLEdBQUcsSUFBQSxpQ0FBb0IsRUFBQztJQUMzRCxVQUFVLEVBQUUsTUFBTTtJQUNsQixLQUFLLEVBQUUsaUJBQWlCO0lBQ3hCLFdBQVcsRUFDVCx3RUFBd0U7SUFDMUUsVUFBVSxFQUFFLEtBQUs7SUFDakIsUUFBUSxFQUFFLEVBQUU7SUFDWixRQUFRLEVBQUU7UUFDUixFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDMUUsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQzFFLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7UUFDL0QsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO1FBQzdFLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUM3RDtZQUNFLEdBQUcsRUFBRSxjQUFjO1lBQ25CLEtBQUssRUFBRSxNQUFNO1lBQ2IsSUFBSSxFQUFFLFFBQVE7WUFDZCxRQUFRLEVBQUUsSUFBSTtZQUNkLGlFQUFpRTtZQUNqRSwwQkFBMEI7WUFDMUIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUNqQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtnQkFDbkMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBQ2xDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO2dCQUNyQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFDakMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBQ2xDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO2dCQUNwQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDdEMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBQ2hDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO2dCQUNoQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFDakMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBQ2xDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUNsQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTtnQkFDdkMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBQ2pDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO2dCQUNuQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtnQkFDL0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7Z0JBQ3JDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUNsQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtnQkFDcEMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7Z0JBQy9CLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUNsQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtnQkFDbEMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUU7Z0JBQ2xDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUNqQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtnQkFDbEMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7Z0JBQ25DLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUNqQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRTtnQkFDcEMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBQ2hDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUU7Z0JBQ2hELEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO2FBQ2pDO1NBQ0Y7UUFDRCxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7UUFDMUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtRQUNqRCxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1FBQ2xELEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7UUFDakQsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtRQUM5QyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1FBQzVDLEVBQUUsR0FBRyxFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1FBQzdFLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0tBQzlFO0NBQ0YsQ0FBQyxDQUFBO0FBOEJGOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLFNBQTBCLEVBQzFCLFFBQW9EO0lBRXBELE1BQU0sUUFBUSxHQUFtQyxNQUFNLElBQUEsNEJBQWlCLEVBQ3RFLFNBQVMsRUFDVCxnQ0FBd0IsRUFDeEIsUUFBUSxDQUNULENBQUE7SUFDRCxNQUFNLE1BQU0sR0FBbUIsRUFBRSxDQUFBO0lBQ2pDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQzNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLEdBQXdCLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPO1FBQ0wsTUFBTTtRQUNOLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtRQUMvQixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQThCO0tBQ2pELENBQUE7QUFDSCxDQUFDIn0=
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.selectCompleteCartParticipants = selectCompleteCartParticipants;
4
4
  exports.listCompleteCartParticipants = listCompleteCartParticipants;
5
5
  const utils_1 = require("@medusajs/framework/utils");
6
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
6
7
  const discover_plugin_features_1 = require("./discover-plugin-features");
7
8
  const HOOK_NAMES = [
8
9
  "validate",
@@ -46,12 +47,18 @@ const validateStep = (moduleKey, hook, step) => {
46
47
  !Number.isFinite(candidate.order)) {
47
48
  throw invalid(moduleKey, `"${hook}" braucht eine workflow_id (String) und eine endliche order (Zahl).`);
48
49
  }
50
+ // Fails closed at discovery with the module named, instead of a
51
+ // customer-facing 404 from the engine that exposes an internal id.
52
+ if (!workflows_sdk_1.MedusaWorkflow.getWorkflow(candidate.workflow_id)) {
53
+ throw invalid(moduleKey, `Workflow "${candidate.workflow_id}" für "${hook}" ist nicht registriert.`);
54
+ }
49
55
  return { workflow_id: candidate.workflow_id, order: candidate.order };
50
56
  };
51
57
  /**
52
58
  * Selects the participants of one hook from the given modules: every service
53
59
  * with a `completeCartHooks()` function. Fails closed: an invalid declaration
54
- * (for any hook) is `UNEXPECTED_STATE`, never skipped. Sorted by `order`,
60
+ * (for any hook), including a workflow id that is not registered, is
61
+ * `UNEXPECTED_STATE`, never skipped. Sorted by `order`,
55
62
  * then module key, then workflow id.
56
63
  */
57
64
  function selectCompleteCartParticipants(modules, hook) {
@@ -87,4 +94,4 @@ function selectCompleteCartParticipants(modules, hook) {
87
94
  function listCompleteCartParticipants(container, hook) {
88
95
  return selectCompleteCartParticipants((0, discover_plugin_features_1.listRegisteredModules)(container), hook);
89
96
  }
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY292ZXItY29tcGxldGUtY2FydC1wYXJ0aWNpcGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvZGlzY292ZXItY29tcGxldGUtY2FydC1wYXJ0aWNpcGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0RkEsd0VBc0NDO0FBR0Qsb0VBS0M7QUF6SUQscURBQXVEO0FBR3ZELHlFQUdtQztBQVFuQyxNQUFNLFVBQVUsR0FBc0I7SUFDcEMsVUFBVTtJQUNWLGNBQWM7Q0FDa0IsQ0FBQTtBQUVsQyxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQVksRUFBRSxLQUFhLEVBQVUsRUFBRSxDQUN0RCxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFMUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxTQUFpQixFQUFFLE1BQWMsRUFBZSxFQUFFLENBQ2pFLElBQUksbUJBQVcsQ0FDYixtQkFBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFDbEMsVUFBVSxTQUFTLCtDQUErQyxNQUFNLEVBQUUsQ0FDM0UsQ0FBQTtBQUVILE1BQU0sZ0JBQWdCLEdBQUcsQ0FDdkIsU0FBaUIsRUFDakIsT0FBZ0IsRUFDcUIsRUFBRTtJQUN2QyxJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDcEQsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUNELE1BQU0sT0FBTyxHQUFJLE9BQTJDO1NBQ3pELGlCQUFpQixDQUFBO0lBQ3BCLElBQUksT0FBTyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDbEMsT0FBTyxTQUFTLENBQUE7SUFDbEIsQ0FBQztJQUVELElBQUksWUFBcUIsQ0FBQTtJQUN6QixJQUFJLENB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
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzY292ZXItY29tcGxldGUtY2FydC1wYXJ0aWNpcGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbHMvZGlzY292ZXItY29tcGxldGUtY2FydC1wYXJ0aWNpcGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEwR0Esd0VBc0NDO0FBR0Qsb0VBS0M7QUF2SkQscURBQXVEO0FBQ3ZELHFFQUFrRTtBQUdsRSx5RUFHbUM7QUFRbkMsTUFBTSxVQUFVLEdBQXNCO0lBQ3BDLFVBQVU7SUFDVixjQUFjO0NBQ2tCLENBQUE7QUFFbEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBYSxFQUFVLEVBQUUsQ0FDdEQsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRTFDLE1BQU0sT0FBTyxHQUFHLENBQUMsU0FBaUIsRUFBRSxNQUFjLEVBQWUsRUFBRSxDQUNqRSxJQUFJLG1CQUFXLENBQ2IsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLFVBQVUsU0FBUywrQ0FBK0MsTUFBTSxFQUFFLENBQzNFLENBQUE7QUFFSCxNQUFNLGdCQUFnQixHQUFHLENBQ3ZCLFNBQWlCLEVBQ2pCLE9BQWdCLEVBQ3FCLEVBQUU7SUFDdkMsSUFBSSxPQUFPLEtBQUssSUFBSSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3BELE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBSSxPQUEyQztTQUN6RCxpQkFBaUIsQ0FBQTtJQUNwQixJQUFJLE9BQU8sT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sU0FBUyxDQUFBO0lBQ2xCLENBQUM7SUFFRCxJQUFJLFlBQXFCLENBQUE7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