medusa-dynamic-metadata 0.0.10 → 0.0.11

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.
@@ -1760,25 +1760,25 @@ const MetadataWidgetLoader = ({ data, entityType, queryKey }) => {
1760
1760
  }
1761
1761
  );
1762
1762
  };
1763
- const Widget$d = ({ data }) => {
1763
+ const Widget$f = ({ data }) => {
1764
1764
  return /* @__PURE__ */ jsxRuntime.jsx(UniversalMetadataWidget, { data, zone: "campaign.details.after" });
1765
1765
  };
1766
1766
  adminSdk.defineWidgetConfig({
1767
1767
  zone: "campaign.details.after"
1768
1768
  });
1769
- const Widget$c = ({ data }) => {
1769
+ const Widget$e = ({ data }) => {
1770
1770
  return /* @__PURE__ */ jsxRuntime.jsx(UniversalMetadataWidget, { data, zone: "product_category.details.after" });
1771
1771
  };
1772
1772
  adminSdk.defineWidgetConfig({
1773
1773
  zone: "product_category.details.after"
1774
1774
  });
1775
- const Widget$b = ({ data }) => {
1775
+ const Widget$d = ({ data }) => {
1776
1776
  return /* @__PURE__ */ jsxRuntime.jsx(UniversalMetadataWidget, { data, zone: "product_collection.details.after" });
1777
1777
  };
1778
1778
  adminSdk.defineWidgetConfig({
1779
1779
  zone: "product_collection.details.after"
1780
1780
  });
1781
- const Widget$a = ({ data }) => {
1781
+ const Widget$c = ({ data }) => {
1782
1782
  return /* @__PURE__ */ jsxRuntime.jsx(UniversalMetadataWidget, { data, zone: "customer.details.after" });
1783
1783
  };
1784
1784
  adminSdk.defineWidgetConfig({
@@ -1840,24 +1840,36 @@ const ProductHideDefaultMetadata = () => {
1840
1840
  adminSdk.defineWidgetConfig({
1841
1841
  zone: "product.details.side.before"
1842
1842
  });
1843
- const Widget$9 = ({ data }) => {
1843
+ const Widget$b = ({ data }) => {
1844
1844
  return /* @__PURE__ */ jsxRuntime.jsx(UniversalMetadataWidget, { data, zone: "inventory_item.details.after" });
1845
1845
  };
1846
1846
  adminSdk.defineWidgetConfig({
1847
1847
  zone: "inventory_item.details.after"
1848
1848
  });
1849
- const Widget$8 = ({ data }) => {
1849
+ const Widget$a = ({ data }) => {
1850
1850
  return /* @__PURE__ */ jsxRuntime.jsx(UniversalMetadataWidget, { data, zone: "order.details.after" });
1851
1851
  };
1852
1852
  adminSdk.defineWidgetConfig({
1853
1853
  zone: "order.details.after"
1854
1854
  });
1855
- const Widget$7 = ({ data }) => {
1855
+ const Widget$9 = ({ data }) => {
1856
1856
  return /* @__PURE__ */ jsxRuntime.jsx(UniversalMetadataWidget, { data, zone: "price_list.details.after" });
1857
1857
  };
1858
1858
  adminSdk.defineWidgetConfig({
1859
1859
  zone: "price_list.details.after"
1860
1860
  });
1861
+ const Widget$8 = ({ data }) => {
1862
+ return /* @__PURE__ */ jsxRuntime.jsx(UniversalMetadataWidget, { data, zone: "product_tag.details.after" });
1863
+ };
1864
+ adminSdk.defineWidgetConfig({
1865
+ zone: "product_tag.details.after"
1866
+ });
1867
+ const Widget$7 = ({ data }) => {
1868
+ return /* @__PURE__ */ jsxRuntime.jsx(UniversalMetadataWidget, { data, zone: "product_type.details.after" });
1869
+ };
1870
+ adminSdk.defineWidgetConfig({
1871
+ zone: "product_type.details.after"
1872
+ });
1861
1873
  const Widget$6 = ({ data }) => {
1862
1874
  return /* @__PURE__ */ jsxRuntime.jsx(UniversalMetadataWidget, { data, zone: "product_variant.details.after" });
1863
1875
  };
@@ -1902,19 +1914,19 @@ adminSdk.defineWidgetConfig({
1902
1914
  });
1903
1915
  const widgetModule = { widgets: [
1904
1916
  {
1905
- Component: Widget$d,
1917
+ Component: Widget$f,
1906
1918
  zone: ["campaign.details.after"]
1907
1919
  },
1908
1920
  {
1909
- Component: Widget$c,
1921
+ Component: Widget$e,
1910
1922
  zone: ["product_category.details.after"]
1911
1923
  },
1912
1924
  {
1913
- Component: Widget$b,
1925
+ Component: Widget$d,
1914
1926
  zone: ["product_collection.details.after"]
1915
1927
  },
1916
1928
  {
1917
- Component: Widget$a,
1929
+ Component: Widget$c,
1918
1930
  zone: ["customer.details.after"]
1919
1931
  },
1920
1932
  {
@@ -1922,17 +1934,25 @@ const widgetModule = { widgets: [
1922
1934
  zone: ["product.details.side.before"]
1923
1935
  },
1924
1936
  {
1925
- Component: Widget$9,
1937
+ Component: Widget$b,
1926
1938
  zone: ["inventory_item.details.after"]
1927
1939
  },
1928
1940
  {
1929
- Component: Widget$8,
1941
+ Component: Widget$a,
1930
1942
  zone: ["order.details.after"]
1931
1943
  },
1932
1944
  {
1933
- Component: Widget$7,
1945
+ Component: Widget$9,
1934
1946
  zone: ["price_list.details.after"]
1935
1947
  },
1948
+ {
1949
+ Component: Widget$8,
1950
+ zone: ["product_tag.details.after"]
1951
+ },
1952
+ {
1953
+ Component: Widget$7,
1954
+ zone: ["product_type.details.after"]
1955
+ },
1936
1956
  {
1937
1957
  Component: Widget$6,
1938
1958
  zone: ["product_variant.details.after"]
@@ -1759,25 +1759,25 @@ const MetadataWidgetLoader = ({ data, entityType, queryKey }) => {
1759
1759
  }
1760
1760
  );
1761
1761
  };
1762
- const Widget$d = ({ data }) => {
1762
+ const Widget$f = ({ data }) => {
1763
1763
  return /* @__PURE__ */ jsx(UniversalMetadataWidget, { data, zone: "campaign.details.after" });
1764
1764
  };
1765
1765
  defineWidgetConfig({
1766
1766
  zone: "campaign.details.after"
1767
1767
  });
1768
- const Widget$c = ({ data }) => {
1768
+ const Widget$e = ({ data }) => {
1769
1769
  return /* @__PURE__ */ jsx(UniversalMetadataWidget, { data, zone: "product_category.details.after" });
1770
1770
  };
1771
1771
  defineWidgetConfig({
1772
1772
  zone: "product_category.details.after"
1773
1773
  });
1774
- const Widget$b = ({ data }) => {
1774
+ const Widget$d = ({ data }) => {
1775
1775
  return /* @__PURE__ */ jsx(UniversalMetadataWidget, { data, zone: "product_collection.details.after" });
1776
1776
  };
1777
1777
  defineWidgetConfig({
1778
1778
  zone: "product_collection.details.after"
1779
1779
  });
1780
- const Widget$a = ({ data }) => {
1780
+ const Widget$c = ({ data }) => {
1781
1781
  return /* @__PURE__ */ jsx(UniversalMetadataWidget, { data, zone: "customer.details.after" });
1782
1782
  };
1783
1783
  defineWidgetConfig({
@@ -1839,24 +1839,36 @@ const ProductHideDefaultMetadata = () => {
1839
1839
  defineWidgetConfig({
1840
1840
  zone: "product.details.side.before"
1841
1841
  });
1842
- const Widget$9 = ({ data }) => {
1842
+ const Widget$b = ({ data }) => {
1843
1843
  return /* @__PURE__ */ jsx(UniversalMetadataWidget, { data, zone: "inventory_item.details.after" });
1844
1844
  };
1845
1845
  defineWidgetConfig({
1846
1846
  zone: "inventory_item.details.after"
1847
1847
  });
1848
- const Widget$8 = ({ data }) => {
1848
+ const Widget$a = ({ data }) => {
1849
1849
  return /* @__PURE__ */ jsx(UniversalMetadataWidget, { data, zone: "order.details.after" });
1850
1850
  };
1851
1851
  defineWidgetConfig({
1852
1852
  zone: "order.details.after"
1853
1853
  });
1854
- const Widget$7 = ({ data }) => {
1854
+ const Widget$9 = ({ data }) => {
1855
1855
  return /* @__PURE__ */ jsx(UniversalMetadataWidget, { data, zone: "price_list.details.after" });
1856
1856
  };
1857
1857
  defineWidgetConfig({
1858
1858
  zone: "price_list.details.after"
1859
1859
  });
1860
+ const Widget$8 = ({ data }) => {
1861
+ return /* @__PURE__ */ jsx(UniversalMetadataWidget, { data, zone: "product_tag.details.after" });
1862
+ };
1863
+ defineWidgetConfig({
1864
+ zone: "product_tag.details.after"
1865
+ });
1866
+ const Widget$7 = ({ data }) => {
1867
+ return /* @__PURE__ */ jsx(UniversalMetadataWidget, { data, zone: "product_type.details.after" });
1868
+ };
1869
+ defineWidgetConfig({
1870
+ zone: "product_type.details.after"
1871
+ });
1860
1872
  const Widget$6 = ({ data }) => {
1861
1873
  return /* @__PURE__ */ jsx(UniversalMetadataWidget, { data, zone: "product_variant.details.after" });
1862
1874
  };
@@ -1901,19 +1913,19 @@ defineWidgetConfig({
1901
1913
  });
1902
1914
  const widgetModule = { widgets: [
1903
1915
  {
1904
- Component: Widget$d,
1916
+ Component: Widget$f,
1905
1917
  zone: ["campaign.details.after"]
1906
1918
  },
1907
1919
  {
1908
- Component: Widget$c,
1920
+ Component: Widget$e,
1909
1921
  zone: ["product_category.details.after"]
1910
1922
  },
1911
1923
  {
1912
- Component: Widget$b,
1924
+ Component: Widget$d,
1913
1925
  zone: ["product_collection.details.after"]
1914
1926
  },
1915
1927
  {
1916
- Component: Widget$a,
1928
+ Component: Widget$c,
1917
1929
  zone: ["customer.details.after"]
1918
1930
  },
1919
1931
  {
@@ -1921,17 +1933,25 @@ const widgetModule = { widgets: [
1921
1933
  zone: ["product.details.side.before"]
1922
1934
  },
1923
1935
  {
1924
- Component: Widget$9,
1936
+ Component: Widget$b,
1925
1937
  zone: ["inventory_item.details.after"]
1926
1938
  },
1927
1939
  {
1928
- Component: Widget$8,
1940
+ Component: Widget$a,
1929
1941
  zone: ["order.details.after"]
1930
1942
  },
1931
1943
  {
1932
- Component: Widget$7,
1944
+ Component: Widget$9,
1933
1945
  zone: ["price_list.details.after"]
1934
1946
  },
1947
+ {
1948
+ Component: Widget$8,
1949
+ zone: ["product_tag.details.after"]
1950
+ },
1951
+ {
1952
+ Component: Widget$7,
1953
+ zone: ["product_type.details.after"]
1954
+ },
1935
1955
  {
1936
1956
  Component: Widget$6,
1937
1957
  zone: ["product_variant.details.after"]
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const metadata_options_1 = require("../../../config/metadata-options");
6
+ async function GET(req, res) {
7
+ const configModule = req.scope.resolve(utils_1.ContainerRegistrationKeys.CONFIG_MODULE);
8
+ const options = (0, metadata_options_1.resolveDynamicMetadataOptions)(configModule);
9
+ const entity = req.query?.entity;
10
+ if (typeof entity === "string" && entity.length > 0) {
11
+ const entityConfig = options.entities[entity];
12
+ if (!entityConfig || !entityConfig.expose_client_helpers) {
13
+ res.json({
14
+ metadataDescriptors: [],
15
+ });
16
+ return;
17
+ }
18
+ res.json({
19
+ metadataDescriptors: entityConfig.descriptors,
20
+ });
21
+ return;
22
+ }
23
+ const metadataDescriptorsByEntity = Object.fromEntries(Object.entries(options.entities)
24
+ .filter(([, config]) => config.expose_client_helpers)
25
+ .map(([entityType, config]) => [entityType, config.descriptors]));
26
+ res.json({
27
+ metadataDescriptorsByEntity,
28
+ });
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL21ldGFkYXRhLWNvbmZpZy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtCQWlDQztBQXJDRCxxREFBcUU7QUFFckUsdUVBQWdGO0FBRXpFLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDcEMsaUNBQXlCLENBQUMsYUFBYSxDQUN4QyxDQUFBO0lBRUQsTUFBTSxPQUFPLEdBQUcsSUFBQSxnREFBNkIsRUFBQyxZQUFZLENBQUMsQ0FBQTtJQUMzRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQTtJQUVoQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3BELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFN0MsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3pELEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQ1AsbUJBQW1CLEVBQUUsRUFBRTthQUN4QixDQUFDLENBQUE7WUFDRixPQUFNO1FBQ1IsQ0FBQztRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDUCxtQkFBbUIsRUFBRSxZQUFZLENBQUMsV0FBVztTQUM5QyxDQUFDLENBQUE7UUFDRixPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sMkJBQTJCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDcEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1NBQzdCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDO1NBQ3BELEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDbkUsQ0FBQTtJQUVELEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFDUCwyQkFBMkI7S0FDNUIsQ0FBQyxDQUFBO0FBQ0osQ0FBQyJ9
@@ -46,6 +46,26 @@ exports.DEFAULT_DYNAMIC_METADATA_OPTIONS = {
46
46
  entities: {},
47
47
  };
48
48
  const PLUGIN_NAME = "medusa-dynamic-metadata";
49
+ /**
50
+ * True when this plugin entry refers to medusa-dynamic-metadata, including
51
+ * absolute/relative paths and monorepo layouts (`.../medusa-dynamic-metadata/...`).
52
+ * Strict `resolve === "medusa-dynamic-metadata"` misses `file:` and `require.resolve()` paths.
53
+ */
54
+ function isDynamicMetadataPluginResolve(resolve) {
55
+ if (resolve === PLUGIN_NAME) {
56
+ return true;
57
+ }
58
+ const norm = resolve
59
+ .replace(/\\/g, "/")
60
+ .split("?")[0]
61
+ ?.split("#")[0] ?? "";
62
+ if (!norm.length) {
63
+ return false;
64
+ }
65
+ const segments = norm.split("/").filter(Boolean);
66
+ return (segments.includes(PLUGIN_NAME) ||
67
+ segments[segments.length - 1] === PLUGIN_NAME);
68
+ }
49
69
  function normalizeDynamicMetadataOptions(input) {
50
70
  const parsed = DynamicMetadataOptionsSchema.parse(input ?? {});
51
71
  const normalizedEntities = {};
@@ -83,14 +103,14 @@ function resolveDynamicMetadataOptions(configModule) {
83
103
  for (const plugin of plugins) {
84
104
  if ((0, utils_1.isString)(plugin)) {
85
105
  if (plugin === PLUGIN_NAME) {
86
- break;
106
+ return normalizeDynamicMetadataOptions({});
87
107
  }
88
108
  continue;
89
109
  }
90
- if (plugin?.resolve === PLUGIN_NAME) {
110
+ if (plugin?.resolve && isDynamicMetadataPluginResolve(plugin.resolve)) {
91
111
  return normalizeDynamicMetadataOptions(plugin.options);
92
112
  }
93
113
  }
94
114
  return exports.DEFAULT_DYNAMIC_METADATA_OPTIONS;
95
115
  }
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb25maWcvbWV0YWRhdGEtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrRkEsMEVBMkNDO0FBRUQsc0VBbUJDO0FBbEpELHFEQUFvRDtBQUNwRCw2QkFBdUI7QUFFdkIsb0RBSWlDO0FBQ2pDLG9EQUF1RTtBQUN2RSxtREFBZ0Y7QUFDaEYsdURBQXlEO0FBRXpELE1BQU0sa0JBQWtCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsQyxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEIsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDcEMsQ0FBQyxDQUFBO0FBRUYsTUFBTSx3QkFBd0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3hDLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzFCLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzFCLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQTtBQUVGLE1BQU0sd0JBQXdCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxHQUFHLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEIsS0FBSyxFQUFFLE9BQUM7U0FDTCxNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMs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
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGEtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb25maWcvbWV0YWRhdGEtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE2R0EsMEVBMkNDO0FBRUQsc0VBbUJDO0FBN0tELHFEQUFvRDtBQUNwRCw2QkFBdUI7QUFFdkIsb0RBSWlDO0FBQ2pDLG9EQUF1RTtBQUN2RSxtREFBZ0Y7QUFDaEYsdURBQXlEO0FBRXpELE1BQU0sa0JBQWtCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNsQyxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEIsS0FBSyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDcEMsQ0FBQyxDQUFBO0FBRUYsTUFBTSx3QkFBd0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3hDLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzFCLEdBQUcsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzFCLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzdCLENBQUMsQ0FBQTtBQUVGLE1BQU0sd0JBQXdCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN4QyxHQUFHLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEIsS0FBSyxFQUFFLE9BQUM7U0FDTCxNQUFNLEVBQUU7U0FDUixJQUFJLEVBQUU7U0FDTixTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMs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
package/README.md CHANGED
@@ -177,7 +177,42 @@ Environment variable usage found in plugin source:
177
177
  - Reads plugin config with `resolveDynamicMetadataOptions`.
178
178
  - Returns empty descriptor array when entity is not configured (no 404).
179
179
 
180
- ### 2) `POST /admin/product-variants/:id`
180
+ ### 2) `GET /store/metadata-config`
181
+
182
+ - **Auth:** Storefront (store route namespace)
183
+ - **Query params:**
184
+ - `entity` (`string`, optional)
185
+ - **Response (when `entity` is provided and exposed):**
186
+ ```json
187
+ {
188
+ "metadataDescriptors": [
189
+ {
190
+ "key": "brand",
191
+ "type": "text",
192
+ "label": "Brand"
193
+ }
194
+ ]
195
+ }
196
+ ```
197
+ - **Response (when `entity` is omitted):**
198
+ ```json
199
+ {
200
+ "metadataDescriptorsByEntity": {
201
+ "products": [
202
+ {
203
+ "key": "brand",
204
+ "type": "text",
205
+ "label": "Brand"
206
+ }
207
+ ]
208
+ }
209
+ }
210
+ ```
211
+ - **Behavior:**
212
+ - Returns only entities with `expose_client_helpers: true`.
213
+ - Returns empty descriptor array when the requested entity is hidden/not configured.
214
+
215
+ ### 3) `POST /admin/product-variants/:id`
181
216
 
182
217
  - **Auth:** Admin (admin route namespace)
183
218
  - **Path params:**
@@ -285,6 +320,8 @@ Each file is a minimal wrapper around `UniversalMetadataWidget` with a fixed zon
285
320
  | `shipping_profiles` | `shipping_profile.details.after` |
286
321
  | `inventory_items` | `inventory_item.details.after` |
287
322
  | `product_variants` | `product_variant.details.after` |
323
+ | `product_tags` | `product_tag.details.after` |
324
+ | `product_types` | `product_type.details.after` |
288
325
 
289
326
  ### Additional Widget
290
327
 
@@ -336,6 +373,13 @@ The plugin operates on existing Medusa entities by reading/writing their `metada
336
373
  - **Cause:** no descriptors configured for that entity.
337
374
  - **Fix:** add `entities.<entityType>.descriptors` in plugin options; rebuild/restart app.
338
375
 
376
+ ### Product type / tag / settings pages: config exists but widget never shows
377
+
378
+ - **Cause:** the admin UI only renders the dynamic table after `/admin/metadata-config?entity=…` returns descriptors. If the server cannot associate your `plugins[]` entry with this package (for example `resolve` is a filesystem path, `file:…`, or `require.resolve("medusa-dynamic-metadata")`), options were previously ignored and the widget hid itself (built-in **Metadata** can still show **0 keys**).
379
+ - **Fix:** use `resolve: "medusa-dynamic-metadata"` when possible, or any path whose segments include the folder `medusa-dynamic-metadata` (path-based `resolve` values are supported). Restart the server after changing config.
380
+ - **Verify:** `curl -sS "http://localhost:9000/admin/metadata-config?entity=product_types" -H "Authorization: Bearer <token>"` should return a non-empty `metadataDescriptors` array when `product_types` is configured.
381
+ - **Admin bundle:** after upgrading or developing the plugin locally, run `medusa plugin:build` (or `npm run build` in the package) and restart so Admin loads the latest widgets (for example `product-types-metadata-table`).
382
+
339
383
  ### “Unable to load metadata configuration”
340
384
 
341
385
  - **Cause:** admin can’t reach `/admin/metadata-config` or plugin not loaded.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "medusa-dynamic-metadata",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",