@gorgo/medusa-integration 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +15 -23
- package/.medusa/server/src/admin/index.mjs +15 -23
- package/.medusa/server/src/api/admin/integrations/_helpers.js +1 -3
- package/.medusa/server/src/jobs/test-integration-connections.js +2 -2
- package/.medusa/server/src/modules/integration/descriptor/__tests__/introspect.unit.spec.js +8 -8
- package/.medusa/server/src/modules/integration/descriptor/__tests__/validate.unit.spec.js +2 -2
- package/.medusa/server/src/modules/integration/descriptor/define.d.ts +9 -3
- package/.medusa/server/src/modules/integration/descriptor/define.js +1 -1
- package/.medusa/server/src/modules/integration/descriptor/introspect.d.ts +1 -1
- package/.medusa/server/src/modules/integration/descriptor/introspect.js +7 -8
- package/.medusa/server/src/modules/integration/loaders/load-providers.js +58 -1
- package/.medusa/server/src/modules/integration/migrations/Migration20260716110756.d.ts +5 -0
- package/.medusa/server/src/modules/integration/migrations/Migration20260716110756.js +16 -0
- package/.medusa/server/src/modules/integration/migrations/Migration20260716132041.d.ts +5 -0
- package/.medusa/server/src/modules/integration/migrations/Migration20260716132041.js +14 -0
- package/.medusa/server/src/modules/integration/models/integration.d.ts +17 -5
- package/.medusa/server/src/modules/integration/models/integration.js +4 -9
- package/.medusa/server/src/modules/integration/services/__tests__/integration-provider.unit.spec.js +19 -18
- package/.medusa/server/src/modules/integration/services/integration-module.d.ts +24 -15
- package/.medusa/server/src/modules/integration/services/integration-module.js +20 -22
- package/.medusa/server/src/modules/integration/services/integration-provider.d.ts +11 -11
- package/.medusa/server/src/modules/integration/services/integration-provider.js +17 -17
- package/.medusa/server/src/modules/integration/utils/abstract-integration-provider.d.ts +8 -11
- package/.medusa/server/src/modules/integration/utils/abstract-integration-provider.js +6 -7
- package/.medusa/server/src/modules/integration/utils/integration.d.ts +21 -0
- package/.medusa/server/src/modules/integration/utils/integration.js +23 -0
- package/.medusa/server/src/types/http/integration/admin/entities.d.ts +2 -5
- package/.medusa/server/src/types/integration/common.d.ts +8 -11
- package/.medusa/server/src/workflows/integration/steps/apply-integration-section.d.ts +0 -1
- package/.medusa/server/src/workflows/integration/steps/apply-integration-section.js +1 -5
- package/.medusa/server/src/workflows/integration/steps/run-test-connection.js +1 -3
- package/.medusa/server/src/workflows/integration/steps/set-integration-enabled.d.ts +1 -4
- package/.medusa/server/src/workflows/integration/steps/upsert-integration-record.d.ts +0 -1
- package/.medusa/server/src/workflows/integration/steps/upsert-integration-record.js +1 -1
- package/.medusa/server/src/workflows/integration/workflows/set-integration-enabled.d.ts +1 -4
- package/.medusa/server/src/workflows/integration/workflows/upsert-integration.js +1 -2
- package/package.json +10 -3
|
@@ -66,8 +66,8 @@ const IntegrationsPage = () => {
|
|
|
66
66
|
i.instance_id && /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { size: "2xsmall", color: "grey", children: i.instance_id })
|
|
67
67
|
] }),
|
|
68
68
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
69
|
-
i.last_test_status === "
|
|
70
|
-
i.last_test_status === "
|
|
69
|
+
i.last_test_status === "passed" && /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "green", size: "2xsmall", children: t("integration.list.tested") }),
|
|
70
|
+
i.last_test_status === "failed" && /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "red", size: "2xsmall", children: t("integration.list.testFailed") }),
|
|
71
71
|
i.is_configured && !i.is_complete ? /* @__PURE__ */ jsxRuntime.jsx(ui.StatusBadge, { color: "orange", children: t("integration.status.incomplete") }) : /* @__PURE__ */ jsxRuntime.jsx(ui.StatusBadge, { color: configured ? "green" : "grey", children: !i.is_configured ? t("integration.status.notConfigured") : i.is_enabled ? t("integration.status.enabled") : t("integration.status.disabled") })
|
|
72
72
|
] })
|
|
73
73
|
]
|
|
@@ -98,7 +98,6 @@ const IntegrationFieldValue = ({
|
|
|
98
98
|
}) => {
|
|
99
99
|
var _a;
|
|
100
100
|
const { t } = reactI18next.useTranslation();
|
|
101
|
-
if (field.readonly && (value == null || value === "")) value = field.readonlyValue;
|
|
102
101
|
if (field.secret || field.control === "secret") {
|
|
103
102
|
return secretConfigured ? /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", leading: "compact", children: "••••••••" }) : /* @__PURE__ */ jsxRuntime.jsx(Dash, {});
|
|
104
103
|
}
|
|
@@ -1810,11 +1809,10 @@ function isFieldVisible(field, values) {
|
|
|
1810
1809
|
function sectionDefaults(section, values) {
|
|
1811
1810
|
const out = {};
|
|
1812
1811
|
for (const f of section.fields) {
|
|
1813
|
-
if (f.
|
|
1814
|
-
else if (f.
|
|
1815
|
-
else if (f.control === "
|
|
1816
|
-
else
|
|
1817
|
-
else out[f.name] = (values == null ? void 0 : values[f.name]) ?? "";
|
|
1812
|
+
if (f.secret || f.control === "secret") out[f.name] = "";
|
|
1813
|
+
else if (f.control === "switch") out[f.name] = (values == null ? void 0 : values[f.name]) ?? f.default ?? false;
|
|
1814
|
+
else if (f.control === "json") out[f.name] = (values == null ? void 0 : values[f.name]) ?? f.default;
|
|
1815
|
+
else out[f.name] = (values == null ? void 0 : values[f.name]) ?? f.default ?? "";
|
|
1818
1816
|
}
|
|
1819
1817
|
return out;
|
|
1820
1818
|
}
|
|
@@ -1872,7 +1870,7 @@ const EditSectionDrawer = ({
|
|
|
1872
1870
|
] })
|
|
1873
1871
|
] }) });
|
|
1874
1872
|
};
|
|
1875
|
-
const testColor = (s) => s === "
|
|
1873
|
+
const testColor = (s) => s === "passed" ? "green" : s === "failed" ? "red" : "grey";
|
|
1876
1874
|
const Row = ({ label, children }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "text-ui-fg-subtle grid grid-cols-2 px-6 py-4", children: [
|
|
1877
1875
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", weight: "plus", leading: "compact", children: label }),
|
|
1878
1876
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-x-2", children })
|
|
@@ -1902,7 +1900,7 @@ const EditPage = () => {
|
|
|
1902
1900
|
{ method: "POST" }
|
|
1903
1901
|
),
|
|
1904
1902
|
onSuccess: (r) => {
|
|
1905
|
-
r.status === "
|
|
1903
|
+
r.status === "passed" ? ui.toast.success(t("integration.toast.connectionOk")) : ui.toast.warning(r.message ?? r.status);
|
|
1906
1904
|
invalidate();
|
|
1907
1905
|
},
|
|
1908
1906
|
onError: (e) => ui.toast.error((e == null ? void 0 : e.message) ?? t("integration.toast.testFailed"))
|
|
@@ -1950,7 +1948,7 @@ const EditPage = () => {
|
|
|
1950
1948
|
const editing = descriptor.sections.find((s) => s.id === editingSection) ?? null;
|
|
1951
1949
|
const sectionData = {
|
|
1952
1950
|
providerId: provider_id,
|
|
1953
|
-
|
|
1951
|
+
identifier: descriptor.identifier,
|
|
1954
1952
|
values: (record == null ? void 0 : record.values) ?? {},
|
|
1955
1953
|
isComplete
|
|
1956
1954
|
};
|
|
@@ -2014,13 +2012,7 @@ const EditPage = () => {
|
|
|
2014
2012
|
] }),
|
|
2015
2013
|
/* @__PURE__ */ jsxRuntime.jsx(Row, { label: t("integration.labels.status"), children: !isConfigured ? /* @__PURE__ */ jsxRuntime.jsx(ui.StatusBadge, { color: "grey", children: t("integration.status.notConfigured") }) : !isComplete ? /* @__PURE__ */ jsxRuntime.jsx(ui.StatusBadge, { color: "orange", children: t("integration.status.incomplete") }) : /* @__PURE__ */ jsxRuntime.jsx(ui.StatusBadge, { color: record.is_enabled ? "green" : "grey", children: record.is_enabled ? t("integration.status.enabled") : t("integration.status.disabled") }) }),
|
|
2016
2014
|
/* @__PURE__ */ jsxRuntime.jsx(Row, { label: t("integration.labels.module"), children: /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { size: "2xsmall", color: "grey", children: t(`integration.modules.${descriptor.module}`) }) }),
|
|
2017
|
-
/* @__PURE__ */ jsxRuntime.jsx(Row, { label: t("integration.labels.lastTest"), children: (record == null ? void 0 : record.last_test_status) ? /* @__PURE__ */ jsxRuntime.
|
|
2018
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.StatusBadge, { color: testColor(record.last_test_status), children: t(`integration.testStatus.${record.last_test_status}`) }),
|
|
2019
|
-
/* @__PURE__ */ jsxRuntime.jsxs(ui.Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: [
|
|
2020
|
-
record.last_test_at && new Date(record.last_test_at).toLocaleString(),
|
|
2021
|
-
record.last_test_message ? ` · ${record.last_test_message}` : ""
|
|
2022
|
-
] })
|
|
2023
|
-
] }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: t("integration.labels.neverTested") }) })
|
|
2015
|
+
/* @__PURE__ */ jsxRuntime.jsx(Row, { label: t("integration.labels.lastTest"), children: (record == null ? void 0 : record.last_test_status) ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(ui.StatusBadge, { color: testColor(record.last_test_status), children: t(`integration.testStatus.${record.last_test_status}`) }) }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: t("integration.labels.neverTested") }) })
|
|
2024
2016
|
] }) }),
|
|
2025
2017
|
mainSections.map(renderSection),
|
|
2026
2018
|
editing && /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2040,7 +2032,7 @@ const EditPage = () => {
|
|
|
2040
2032
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2041
2033
|
components.LayoutComposer,
|
|
2042
2034
|
{
|
|
2043
|
-
widgetsZonePrefix: `gorgo.integration.${descriptor.
|
|
2035
|
+
widgetsZonePrefix: `gorgo.integration.${descriptor.identifier}`,
|
|
2044
2036
|
preferredLayoutId: descriptor.preferredLayoutId,
|
|
2045
2037
|
sections: { main, side },
|
|
2046
2038
|
data: sectionData,
|
|
@@ -2097,8 +2089,8 @@ const integration$1 = {
|
|
|
2097
2089
|
other: "Other"
|
|
2098
2090
|
},
|
|
2099
2091
|
testStatus: {
|
|
2100
|
-
|
|
2101
|
-
|
|
2092
|
+
passed: "Passed",
|
|
2093
|
+
failed: "Failed",
|
|
2102
2094
|
skipped: "Skipped"
|
|
2103
2095
|
},
|
|
2104
2096
|
actions: {
|
|
@@ -2170,8 +2162,8 @@ const integration = {
|
|
|
2170
2162
|
other: "Прочее"
|
|
2171
2163
|
},
|
|
2172
2164
|
testStatus: {
|
|
2173
|
-
|
|
2174
|
-
|
|
2165
|
+
passed: "Пройдено",
|
|
2166
|
+
failed: "Ошибка",
|
|
2175
2167
|
skipped: "Пропущено"
|
|
2176
2168
|
},
|
|
2177
2169
|
actions: {
|
|
@@ -62,8 +62,8 @@ const IntegrationsPage = () => {
|
|
|
62
62
|
i.instance_id && /* @__PURE__ */ jsx(Badge, { size: "2xsmall", color: "grey", children: i.instance_id })
|
|
63
63
|
] }),
|
|
64
64
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
65
|
-
i.last_test_status === "
|
|
66
|
-
i.last_test_status === "
|
|
65
|
+
i.last_test_status === "passed" && /* @__PURE__ */ jsx(Badge, { color: "green", size: "2xsmall", children: t("integration.list.tested") }),
|
|
66
|
+
i.last_test_status === "failed" && /* @__PURE__ */ jsx(Badge, { color: "red", size: "2xsmall", children: t("integration.list.testFailed") }),
|
|
67
67
|
i.is_configured && !i.is_complete ? /* @__PURE__ */ jsx(StatusBadge, { color: "orange", children: t("integration.status.incomplete") }) : /* @__PURE__ */ jsx(StatusBadge, { color: configured ? "green" : "grey", children: !i.is_configured ? t("integration.status.notConfigured") : i.is_enabled ? t("integration.status.enabled") : t("integration.status.disabled") })
|
|
68
68
|
] })
|
|
69
69
|
]
|
|
@@ -94,7 +94,6 @@ const IntegrationFieldValue = ({
|
|
|
94
94
|
}) => {
|
|
95
95
|
var _a;
|
|
96
96
|
const { t } = useTranslation();
|
|
97
|
-
if (field.readonly && (value == null || value === "")) value = field.readonlyValue;
|
|
98
97
|
if (field.secret || field.control === "secret") {
|
|
99
98
|
return secretConfigured ? /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", children: "••••••••" }) : /* @__PURE__ */ jsx(Dash, {});
|
|
100
99
|
}
|
|
@@ -1806,11 +1805,10 @@ function isFieldVisible(field, values) {
|
|
|
1806
1805
|
function sectionDefaults(section, values) {
|
|
1807
1806
|
const out = {};
|
|
1808
1807
|
for (const f of section.fields) {
|
|
1809
|
-
if (f.
|
|
1810
|
-
else if (f.
|
|
1811
|
-
else if (f.control === "
|
|
1812
|
-
else
|
|
1813
|
-
else out[f.name] = (values == null ? void 0 : values[f.name]) ?? "";
|
|
1808
|
+
if (f.secret || f.control === "secret") out[f.name] = "";
|
|
1809
|
+
else if (f.control === "switch") out[f.name] = (values == null ? void 0 : values[f.name]) ?? f.default ?? false;
|
|
1810
|
+
else if (f.control === "json") out[f.name] = (values == null ? void 0 : values[f.name]) ?? f.default;
|
|
1811
|
+
else out[f.name] = (values == null ? void 0 : values[f.name]) ?? f.default ?? "";
|
|
1814
1812
|
}
|
|
1815
1813
|
return out;
|
|
1816
1814
|
}
|
|
@@ -1868,7 +1866,7 @@ const EditSectionDrawer = ({
|
|
|
1868
1866
|
] })
|
|
1869
1867
|
] }) });
|
|
1870
1868
|
};
|
|
1871
|
-
const testColor = (s) => s === "
|
|
1869
|
+
const testColor = (s) => s === "passed" ? "green" : s === "failed" ? "red" : "grey";
|
|
1872
1870
|
const Row = ({ label, children }) => /* @__PURE__ */ jsxs("div", { className: "text-ui-fg-subtle grid grid-cols-2 px-6 py-4", children: [
|
|
1873
1871
|
/* @__PURE__ */ jsx(Text, { size: "small", weight: "plus", leading: "compact", children: label }),
|
|
1874
1872
|
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-x-2", children })
|
|
@@ -1898,7 +1896,7 @@ const EditPage = () => {
|
|
|
1898
1896
|
{ method: "POST" }
|
|
1899
1897
|
),
|
|
1900
1898
|
onSuccess: (r) => {
|
|
1901
|
-
r.status === "
|
|
1899
|
+
r.status === "passed" ? toast.success(t("integration.toast.connectionOk")) : toast.warning(r.message ?? r.status);
|
|
1902
1900
|
invalidate();
|
|
1903
1901
|
},
|
|
1904
1902
|
onError: (e) => toast.error((e == null ? void 0 : e.message) ?? t("integration.toast.testFailed"))
|
|
@@ -1946,7 +1944,7 @@ const EditPage = () => {
|
|
|
1946
1944
|
const editing = descriptor.sections.find((s) => s.id === editingSection) ?? null;
|
|
1947
1945
|
const sectionData = {
|
|
1948
1946
|
providerId: provider_id,
|
|
1949
|
-
|
|
1947
|
+
identifier: descriptor.identifier,
|
|
1950
1948
|
values: (record == null ? void 0 : record.values) ?? {},
|
|
1951
1949
|
isComplete
|
|
1952
1950
|
};
|
|
@@ -2010,13 +2008,7 @@ const EditPage = () => {
|
|
|
2010
2008
|
] }),
|
|
2011
2009
|
/* @__PURE__ */ jsx(Row, { label: t("integration.labels.status"), children: !isConfigured ? /* @__PURE__ */ jsx(StatusBadge, { color: "grey", children: t("integration.status.notConfigured") }) : !isComplete ? /* @__PURE__ */ jsx(StatusBadge, { color: "orange", children: t("integration.status.incomplete") }) : /* @__PURE__ */ jsx(StatusBadge, { color: record.is_enabled ? "green" : "grey", children: record.is_enabled ? t("integration.status.enabled") : t("integration.status.disabled") }) }),
|
|
2012
2010
|
/* @__PURE__ */ jsx(Row, { label: t("integration.labels.module"), children: /* @__PURE__ */ jsx(Badge, { size: "2xsmall", color: "grey", children: t(`integration.modules.${descriptor.module}`) }) }),
|
|
2013
|
-
/* @__PURE__ */ jsx(Row, { label: t("integration.labels.lastTest"), children: (record == null ? void 0 : record.last_test_status) ? /* @__PURE__ */
|
|
2014
|
-
/* @__PURE__ */ jsx(StatusBadge, { color: testColor(record.last_test_status), children: t(`integration.testStatus.${record.last_test_status}`) }),
|
|
2015
|
-
/* @__PURE__ */ jsxs(Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: [
|
|
2016
|
-
record.last_test_at && new Date(record.last_test_at).toLocaleString(),
|
|
2017
|
-
record.last_test_message ? ` · ${record.last_test_message}` : ""
|
|
2018
|
-
] })
|
|
2019
|
-
] }) : /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: t("integration.labels.neverTested") }) })
|
|
2011
|
+
/* @__PURE__ */ jsx(Row, { label: t("integration.labels.lastTest"), children: (record == null ? void 0 : record.last_test_status) ? /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(StatusBadge, { color: testColor(record.last_test_status), children: t(`integration.testStatus.${record.last_test_status}`) }) }) : /* @__PURE__ */ jsx(Text, { size: "small", leading: "compact", className: "text-ui-fg-subtle", children: t("integration.labels.neverTested") }) })
|
|
2020
2012
|
] }) }),
|
|
2021
2013
|
mainSections.map(renderSection),
|
|
2022
2014
|
editing && /* @__PURE__ */ jsx(
|
|
@@ -2036,7 +2028,7 @@ const EditPage = () => {
|
|
|
2036
2028
|
return /* @__PURE__ */ jsx(
|
|
2037
2029
|
LayoutComposer,
|
|
2038
2030
|
{
|
|
2039
|
-
widgetsZonePrefix: `gorgo.integration.${descriptor.
|
|
2031
|
+
widgetsZonePrefix: `gorgo.integration.${descriptor.identifier}`,
|
|
2040
2032
|
preferredLayoutId: descriptor.preferredLayoutId,
|
|
2041
2033
|
sections: { main, side },
|
|
2042
2034
|
data: sectionData,
|
|
@@ -2093,8 +2085,8 @@ const integration$1 = {
|
|
|
2093
2085
|
other: "Other"
|
|
2094
2086
|
},
|
|
2095
2087
|
testStatus: {
|
|
2096
|
-
|
|
2097
|
-
|
|
2088
|
+
passed: "Passed",
|
|
2089
|
+
failed: "Failed",
|
|
2098
2090
|
skipped: "Skipped"
|
|
2099
2091
|
},
|
|
2100
2092
|
actions: {
|
|
@@ -2166,8 +2158,8 @@ const integration = {
|
|
|
2166
2158
|
other: "Прочее"
|
|
2167
2159
|
},
|
|
2168
2160
|
testStatus: {
|
|
2169
|
-
|
|
2170
|
-
|
|
2161
|
+
passed: "Пройдено",
|
|
2162
|
+
failed: "Ошибка",
|
|
2171
2163
|
skipped: "Пропущено"
|
|
2172
2164
|
},
|
|
2173
2165
|
actions: {
|
|
@@ -43,10 +43,8 @@ function maskedView(record, secretKeys) {
|
|
|
43
43
|
title: record.title ?? null,
|
|
44
44
|
is_enabled: record.is_enabled,
|
|
45
45
|
has_secrets,
|
|
46
|
-
last_test_at: record.last_test_at ?? null,
|
|
47
46
|
last_test_status: record.last_test_status ?? null,
|
|
48
|
-
last_test_message: record.last_test_message ?? null,
|
|
49
47
|
values,
|
|
50
48
|
};
|
|
51
49
|
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiX2hlbHBlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludGVncmF0aW9ucy9faGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU1BLDBCQUVDO0FBTUQsMENBSUM7QUFRRCxnQ0FzQkM7QUEvQ0QscURBQXVEO0FBQ3ZELDhEQUFpRTtBQUlqRSxTQUFnQixPQUFPLENBQUMsR0FBa0I7SUFDeEMsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQ0FBa0IsQ0FBQyxDQUFBO0FBQzlDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixlQUFlLENBQUMsR0FBNkIsRUFBRSxVQUFrQjtJQUMvRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxtQkFBVyxDQUFDLG1CQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx3QkFBd0IsVUFBVSxHQUFHLENBQUMsQ0FBQTtJQUMzRixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsVUFBVSxDQUFDLE1BQVcsRUFBRSxVQUFvQjtJQUMxRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUNsQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUE0QixDQUFBO0lBQ2hFLE1BQU0sTUFBTSxHQUE0QixFQUFFLENBQUE7SUFDMUMsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFBO0lBQ3ZCLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDNUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUFFLFdBQVcsR0FBRyxJQUFJLENBQUE7WUFDN0MsU0FBUTtRQUNWLENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2YsQ0FBQztJQUNELE9BQU87UUFDTCxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7UUFDYixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7UUFDL0IsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUk7UUFDM0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLFdBQVc7UUFDWCxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCLElBQUksSUFBSTtRQUNqRCxNQUFNO0tBQ1AsQ0FBQTtBQUNILENBQUMifQ==
|
|
@@ -32,7 +32,7 @@ async function testIntegrationConnectionsJob(container) {
|
|
|
32
32
|
});
|
|
33
33
|
counts[result.status]++;
|
|
34
34
|
const line = `[integration] ${target.provider_id} → ${result.status}${result.message ? `: ${result.message}` : ""}`;
|
|
35
|
-
if (result.status === "
|
|
35
|
+
if (result.status === "failed")
|
|
36
36
|
logger.warn(line);
|
|
37
37
|
else
|
|
38
38
|
logger.info(line);
|
|
@@ -50,4 +50,4 @@ exports.config = {
|
|
|
50
50
|
// Once a day, off-peak (03:00). Cron: minute hour day-of-month month day-of-week.
|
|
51
51
|
schedule: "0 3 * * *",
|
|
52
52
|
};
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1pbnRlZ3JhdGlvbi1jb25uZWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9qb2JzL3Rlc3QtaW50ZWdyYXRpb24tY29ubmVjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZUEsZ0RBdUNDO0FBckRELHdEQUEyRDtBQUUzRCwwREFBNEU7QUFFNUU7Ozs7Ozs7OztHQVNHO0FBQ1ksS0FBSyxVQUFVLDZCQUE2QixDQUFDLFNBQTBCO0lBQ3BGLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQVMsUUFBUSxDQUFDLENBQUE7SUFDbEQsTUFBTSxPQUFPLEdBQTZCLFNBQVMsQ0FBQyxPQUFPLENBQUMsZ0NBQWtCLENBQUMsQ0FBQTtJQUUvRSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxDQUFBO0lBQ3pELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQzdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLG1CQUFtQixDQUNoRSxDQUFBO0lBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUVBQXVFLENBQUMsQ0FBQTtRQUNwRixPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsOENBQThDLE9BQU8sQ0FBQyxNQUFNLGlCQUFpQixDQUFDLENBQUE7SUFFMUYsTUFBTSxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUE7SUFFekQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLCtDQUFpQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDeEUsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUU7YUFDM0MsQ0FBQyxDQUFBO1lBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFBO1lBQ3ZCLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixNQUFNLENBQUMsV0FBVyxNQUFNLE1BQU0sQ0FBQyxNQUFNLEdBQ2pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUMzQyxFQUFFLENBQUE7WUFDRixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUTtnQkFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBOztnQkFDNUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN4QixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUE7WUFDaEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsTUFBTSxDQUFDLFdBQVcsa0JBQWtCLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN0RixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFJLENBQ1QsZ0RBQWdELE1BQU0sQ0FBQyxFQUFFLFdBQVcsTUFBTSxDQUFDLElBQUksSUFBSTtRQUNqRixZQUFZLE1BQU0sQ0FBQyxPQUFPLGNBQWMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUMzRCxDQUFBO0FBQ0gsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFHO0lBQ3BCLElBQUksRUFBRSxvQ0FBb0M7SUFDMUMsa0ZBQWtGO0lBQ2xGLFFBQVEsRUFBRSxXQUFXO0NBQ3RCLENBQUEifQ==
|
|
@@ -26,7 +26,7 @@ const base = (0, define_1.defineIntegration)({
|
|
|
26
26
|
{ id: "behavior", title: "demo.sections.behavior", options: ["test_mode", "region", "webhooks"] },
|
|
27
27
|
],
|
|
28
28
|
});
|
|
29
|
-
const descriptor = { ...base,
|
|
29
|
+
const descriptor = { ...base, identifier: "demo", instanceId: null };
|
|
30
30
|
(0, globals_1.describe)("introspect", () => {
|
|
31
31
|
(0, globals_1.it)("groups referenced options by section, omits catalog-only options", () => {
|
|
32
32
|
const ui = (0, introspect_1.introspectDescriptor)(descriptor);
|
|
@@ -69,25 +69,25 @@ const descriptor = { ...base, pluginId: "demo", instanceId: null };
|
|
|
69
69
|
},
|
|
70
70
|
apiSecret: {
|
|
71
71
|
type: "string",
|
|
72
|
-
readonly: true,
|
|
73
72
|
secret: true,
|
|
73
|
+
readonly: true,
|
|
74
74
|
default: "shh",
|
|
75
75
|
label: "demo.fields.apiSecret",
|
|
76
76
|
},
|
|
77
77
|
},
|
|
78
78
|
sections: [{ id: "s", title: "t", options: ["endpoint", "apiSecret"] }],
|
|
79
79
|
});
|
|
80
|
-
const roDescriptor = { ...base,
|
|
81
|
-
(0, globals_1.it)("
|
|
80
|
+
const roDescriptor = { ...base, identifier: "demo", instanceId: null };
|
|
81
|
+
(0, globals_1.it)("marks a readonly field disabled and surfaces its default for display", () => {
|
|
82
82
|
const f = (0, introspect_1.introspectDescriptor)(roDescriptor).sections[0].fields.find((x) => x.name === "endpoint");
|
|
83
83
|
(0, globals_1.expect)(f.readonly).toBe(true);
|
|
84
|
-
(0, globals_1.expect)(f.
|
|
84
|
+
(0, globals_1.expect)(f.default).toBe("https://api.example.com/hook");
|
|
85
85
|
});
|
|
86
|
-
(0, globals_1.it)("never exposes a secret readonly
|
|
86
|
+
(0, globals_1.it)("never exposes a secret's default (readonly or not)", () => {
|
|
87
87
|
const f = (0, introspect_1.introspectDescriptor)(roDescriptor).sections[0].fields.find((x) => x.name === "apiSecret");
|
|
88
88
|
(0, globals_1.expect)(f.readonly).toBe(true);
|
|
89
89
|
(0, globals_1.expect)(f.secret).toBe(true);
|
|
90
|
-
(0, globals_1.expect)(f.
|
|
90
|
+
(0, globals_1.expect)(f.default).toBeUndefined();
|
|
91
91
|
});
|
|
92
92
|
});
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50cm9zcGVjdC51bml0LnNwZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9kZXNjcmlwdG9yL19fdGVzdHNfXy9pbnRyb3NwZWN0LnVuaXQuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUFvRDtBQUNwRCw4Q0FBc0U7QUFDdEUsc0NBQTZDO0FBRzdDLE1BQU0sSUFBSSxHQUFHLElBQUEsMEJBQWlCLEVBQUM7SUFDN0IsTUFBTSxFQUFFLFNBQVM7SUFDakIsV0FBVyxFQUFFLFdBQVc7SUFDeEIsT0FBTyxFQUFFO1FBQ1AsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUU7UUFDcEcsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRTtRQUMxSCxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUU7UUFDakcsTUFBTSxFQUFFO1lBQ04sSUFBSSxFQUFFLE1BQU07WUFDWixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO1lBQ3BCLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUU7WUFDM0QsT0FBTyxFQUFFLFFBQVE7WUFDakIsS0FBSyxFQUFFLG9CQUFvQjtZQUMzQixXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7U0FDbEQ7UUFDRCxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUU7UUFDdkYsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSx5QkFBeUIsRUFBRTtLQUNoRjtJQUNELFFBQVEsRUFBRTtRQUNSLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQ2pGLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsRUFBRTtLQUNsRztDQUNGLENBQUMsQ0FBQTtBQUNGLE1BQU0sVUFBVSxHQUEwQixFQUFFLEdBQUcsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFBO0FBRTNGLElBQUEsa0JBQVEsRUFBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO0lBQzFCLElBQUEsWUFBRSxFQUFDLGtFQUFrRSxFQUFFLEdBQUcsRUFBRTtRQUMxRSxNQUFNLEVBQUUsR0FBRyxJQUFBLGlDQUFvQixFQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzNDLElBQUEsZ0JBQU0sRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFDckUsSUFBQSxnQkFBTSxFQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQzdGLElBQUEsZ0JBQU0sRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQTtJQUM5RixDQUFDLENBQUMsQ0FBQTtJQUVGLElBQUEsWUFBRSxFQUFDLHNFQUFzRSxFQUFFLEdBQUcsRUFBRTtRQUM5RSxNQUFNLEVBQUUsR0FBRyxJQUFBLGlDQUFvQixFQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQzNDLElBQUEsZ0JBQU0sRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2xGLElBQUEsZ0JBQU0sRUFBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUMsY0FBYztJQUN4RyxDQUFDLENBQUMsQ0FBQTtJQUVGLElBQUEsWUFBRSxFQUFDLG9FQUFvRSxFQUFFLEdBQUcsRUFBRTtRQUM1RSxNQUFNLEVBQUUsR0FBRyxJQUFB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
|
|
@@ -27,7 +27,7 @@ const base = (0, define_1.defineIntegration)({
|
|
|
27
27
|
ctx.addIssue({ path: ["terminalKey"], message: "terminalKey required when capture is on" });
|
|
28
28
|
},
|
|
29
29
|
});
|
|
30
|
-
const descriptor = { ...base,
|
|
30
|
+
const descriptor = { ...base, identifier: "demo", instanceId: null };
|
|
31
31
|
(0, globals_1.describe)("validateOptions", () => {
|
|
32
32
|
(0, globals_1.it)("validates only the submitted ids and applies their defaults", () => {
|
|
33
33
|
const res = (0, validate_1.validateOptions)(descriptor, ["capture"], { capture: undefined });
|
|
@@ -61,4 +61,4 @@ const descriptor = { ...base, pluginId: "demo", instanceId: null };
|
|
|
61
61
|
(0, globals_1.expect)(issues.some((i) => i.path === "terminalKey")).toBe(true);
|
|
62
62
|
});
|
|
63
63
|
});
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUudW5pdC5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvaW50ZWdyYXRpb24vZGVzY3JpcHRvci9fX3Rlc3RzX18vdmFsaWRhdGUudW5pdC5zcGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQW9EO0FBQ3BELHNDQUE2QztBQUU3QywwQ0FBNEY7QUFFNUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLENBQVUsRUFBRSxDQUFNLEVBQUUsRUFBRTtJQUNqRCxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxDQUFDLENBQUE7QUFDMUcsQ0FBQyxDQUFBO0FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBQSwwQkFBaUIsRUFBQztJQUM3QixNQUFNLEVBQUUsU0FBUztJQUNqQixXQUFXLEVBQUUsV0FBVztJQUN4QixPQUFPLEVBQUU7UUFDUCxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFO1FBQ3pFLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtRQUNwRixPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtRQUN2RCxxREFBcUQ7UUFDckQsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVB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
|
|
@@ -26,7 +26,6 @@ export type IntegrationValidateContext = {
|
|
|
26
26
|
type DescriptorBase = {
|
|
27
27
|
/** Which Medusa module this integration configures (payment, fulfillment, …). */
|
|
28
28
|
module: ModuleKind;
|
|
29
|
-
optionsVersion?: number;
|
|
30
29
|
displayName: I18nKey;
|
|
31
30
|
description?: I18nKey;
|
|
32
31
|
icon?: string;
|
|
@@ -42,17 +41,19 @@ type CrossSectionRules = {
|
|
|
42
41
|
*/
|
|
43
42
|
validate?: (full: Record<string, unknown>, ctx: IntegrationValidateContext) => void;
|
|
44
43
|
};
|
|
45
|
-
/** What `defineIntegration` returns (and what a provider's `
|
|
44
|
+
/** What `defineIntegration` returns (and what a provider's `descriptor` getter returns). */
|
|
46
45
|
export type IntegrationDescriptorInput = DescriptorBase & CrossSectionRules & {
|
|
47
46
|
/** Flat catalog: single source of truth for every option (type/validation/UI/secret). */
|
|
48
47
|
options: Record<string, OptionDef>;
|
|
49
48
|
/** Composed from `options` by `defineIntegration` — for `z.infer`, defaults, full validation. */
|
|
50
49
|
optionsSchema: z.ZodType<any>;
|
|
51
50
|
sections: readonly IntegrationSection[];
|
|
51
|
+
/** Optional connection check; runs against the resolved options. Omit if unsupported. */
|
|
52
|
+
testConnection?(ctx: TestConnectionContext): Promise<TestConnectionResult>;
|
|
52
53
|
};
|
|
53
54
|
export type IntegrationDescriptor = IntegrationDescriptorInput & {
|
|
54
55
|
/** Stamped by the registry from the provider's `static identifier`. */
|
|
55
|
-
|
|
56
|
+
identifier: string;
|
|
56
57
|
/** Stamped from the registration id (null = single/default instance). */
|
|
57
58
|
instanceId?: string | null;
|
|
58
59
|
};
|
|
@@ -67,8 +68,13 @@ export type IntegrationDescriptor = IntegrationDescriptorInput & {
|
|
|
67
68
|
export declare function defineIntegration<const O extends Record<string, OptionDef>>(input: DescriptorBase & CrossSectionRules & {
|
|
68
69
|
options: O;
|
|
69
70
|
sections: readonly IntegrationSection[];
|
|
71
|
+
/** Connection check with fully-typed, resolved options. */
|
|
72
|
+
testConnection?(ctx: {
|
|
73
|
+
options: Settings<O>;
|
|
74
|
+
}): Promise<TestConnectionResult>;
|
|
70
75
|
}): DescriptorBase & CrossSectionRules & {
|
|
71
76
|
options: O;
|
|
72
77
|
optionsSchema: z.ZodType<Settings<O>>;
|
|
73
78
|
sections: readonly IntegrationSection[];
|
|
79
|
+
testConnection?(ctx: TestConnectionContext): Promise<TestConnectionResult>;
|
|
74
80
|
};
|
|
@@ -28,4 +28,4 @@ function defineIntegration(input) {
|
|
|
28
28
|
const optionsSchema = zod_1.z.object(shape);
|
|
29
29
|
return { ...input, optionsSchema };
|
|
30
30
|
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvaW50ZWdyYXRpb24vZGVzY3JpcHRvci9kZWZpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBd0VBLDhDQTJCQztBQW5HRCw0Q0FBc0M7QUFNN0Isa0ZBTkEsT0FBQyxPQU1BO0FBSFYsMkNBQXlDO0FBNkR6Qzs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsaUJBQWlCLENBQy9CLEtBTUc7SUFRSCxnRUFBZ0U7SUFDaEUsS0FBSyxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDckMsS0FBSyxNQUFNLEVBQUUsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzdELE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxPQUFPLENBQUMsRUFBRSxnQ0FBZ0MsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUM5RSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLEtBQUssR0FBOEIsRUFBRSxDQUFBO0lBQzNDLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBQSx1QkFBVyxFQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ25GLE1BQU0sYUFBYSxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFzQyxDQUFBO0lBQzFFLE9BQU8sRUFBRSxHQUFHLEtBQUssRUFBRSxhQUFhLEVBQUUsQ0FBQTtBQUNwQyxDQUFDIn0=
|
|
@@ -2,4 +2,4 @@ import type { IntegrationDescriptor } from "./define";
|
|
|
2
2
|
import type { UiField, UiSection, UiDescriptor } from "../../../types";
|
|
3
3
|
export type { UiField, UiSection, UiDescriptor };
|
|
4
4
|
export declare function secretFieldNames(descriptor: Pick<IntegrationDescriptor, "options">): string[];
|
|
5
|
-
export declare function introspectDescriptor(descriptor: IntegrationDescriptor
|
|
5
|
+
export declare function introspectDescriptor(descriptor: IntegrationDescriptor): UiDescriptor;
|
|
@@ -26,10 +26,10 @@ function introspectField(name, def) {
|
|
|
26
26
|
placeholder: def.placeholder,
|
|
27
27
|
options: def.type === "enum" ? [...def.values] : undefined,
|
|
28
28
|
optionLabels: def.type === "enum" ? def.valueLabels : undefined,
|
|
29
|
+
default: def.secret !== true ? def.default : undefined,
|
|
29
30
|
visibleWhen: def.visibleWhen,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
readonlyValue: def.readonly && def.secret !== true ? def.default : undefined,
|
|
31
|
+
// UI-only: render the control disabled. The displayed/persisted value is the field's `default`.
|
|
32
|
+
readonly: def.readonly === true,
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
35
|
function introspectSection(section, options) {
|
|
@@ -48,20 +48,19 @@ function secretFieldNames(descriptor) {
|
|
|
48
48
|
.filter(([, def]) => def.secret === true)
|
|
49
49
|
.map(([name]) => name);
|
|
50
50
|
}
|
|
51
|
-
function introspectDescriptor(descriptor
|
|
51
|
+
function introspectDescriptor(descriptor) {
|
|
52
52
|
return {
|
|
53
53
|
module: descriptor.module,
|
|
54
|
-
|
|
54
|
+
identifier: descriptor.identifier,
|
|
55
55
|
instanceId: descriptor.instanceId ?? null,
|
|
56
|
-
optionsVersion: descriptor.optionsVersion ?? 1,
|
|
57
56
|
displayName: descriptor.displayName,
|
|
58
57
|
description: descriptor.description,
|
|
59
58
|
icon: descriptor.icon,
|
|
60
59
|
docsUrl: descriptor.docsUrl,
|
|
61
60
|
supportsMultipleInstances: descriptor.supportsMultipleInstances ?? false,
|
|
62
61
|
preferredLayoutId: descriptor.preferredLayoutId ?? "core:single-column",
|
|
63
|
-
hasTestConnection,
|
|
62
|
+
hasTestConnection: typeof descriptor.testConnection === "function",
|
|
64
63
|
sections: descriptor.sections.map((s) => introspectSection(s, descriptor.options)),
|
|
65
64
|
};
|
|
66
65
|
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50cm9zcGVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2ludGVncmF0aW9uL2Rlc2NyaXB0b3IvaW50cm9zcGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQW1EQSw0Q0FJQztBQUVELG9EQWNDO0FBL0RELFNBQVMsVUFBVSxDQUFDLEdBQWM7SUFDaEMsSUFBSSxHQUFHLENBQUMsT0FBTztRQUFFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQTtJQUNuQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixLQUFLLFNBQVMsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFBO1FBQy9CLEtBQUssUUFBUSxDQUFDLENBQUMsT0FBTyxRQUFRLENBQUE7UUFDOUIsS0FBSyxNQUFNLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQTtRQUM1QixLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFBO1FBQzFCLEtBQUssS0FBSyxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUE7UUFDeEIsT0FBTyxDQUFDLENBQUMsT0FBTyxNQUFNLENBQUE7SUFDeEIsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFZLEVBQUUsR0FBYztJQUNuRCxPQUFPO1FBQ0wsSUFBSTtRQUNKLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQ3hCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxLQUFLLElBQUk7UUFDM0IsZ0dBQWdHO1FBQ2hHLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLFNBQVM7UUFDNUQsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1FBQ2hCLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtRQUNkLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVztRQUM1QixPQUFPLEVBQUUsR0FBRyxDQUFDLElBQUks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
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
3
7
|
const awilix_1 = require("@medusajs/framework/awilix");
|
|
4
8
|
const modules_sdk_1 = require("@medusajs/framework/modules-sdk");
|
|
9
|
+
const telemetry_1 = require("@gorgo/telemetry");
|
|
5
10
|
const types_1 = require("../types");
|
|
11
|
+
const integration_provider_1 = __importDefault(require("../services/integration-provider"));
|
|
6
12
|
/**
|
|
7
13
|
* Registers each integration-provider class into the module container under
|
|
8
14
|
* `int_<identifier>[_<id>]`, mirroring how the payment/fulfillment modules load
|
|
@@ -22,6 +28,55 @@ const registrationFn = async (klass, container, pluginOptions) => {
|
|
|
22
28
|
});
|
|
23
29
|
container.registerAdd(types_1.IntegrationProviderRegistrationKey, (0, awilix_1.asValue)(key));
|
|
24
30
|
};
|
|
31
|
+
const trackStarted = async (container, providers) => {
|
|
32
|
+
try {
|
|
33
|
+
const telemetry = (0, telemetry_1.createTelemetryClient)({ packageDir: __dirname });
|
|
34
|
+
// Map each provider's static identifier → its npm package (name/version), resolved from the
|
|
35
|
+
// `resolve` specifier. identifier↔package is 1:1, so this keys the lookup below no matter
|
|
36
|
+
// how many instances share the same class.
|
|
37
|
+
const pkgByIdentifier = new Map();
|
|
38
|
+
for (const entry of providers) {
|
|
39
|
+
const spec = entry.resolve;
|
|
40
|
+
if (!spec)
|
|
41
|
+
continue;
|
|
42
|
+
try {
|
|
43
|
+
const pkg = await (0, telemetry_1.findPackageJson)(node_path_1.default.dirname(require.resolve(spec)));
|
|
44
|
+
if (!pkg)
|
|
45
|
+
continue;
|
|
46
|
+
const mod = require(spec);
|
|
47
|
+
const services = (mod?.default ?? mod)?.services ?? [];
|
|
48
|
+
for (const svc of services) {
|
|
49
|
+
if (svc?.identifier)
|
|
50
|
+
pkgByIdentifier.set(svc.identifier, pkg);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// a single unresolvable provider must not sink the whole event
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
let machineId = "";
|
|
58
|
+
try {
|
|
59
|
+
machineId = (0, telemetry_1.getMachineId)();
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// hash without a salt rather than dropping the event
|
|
63
|
+
}
|
|
64
|
+
const providerService = new integration_provider_1.default(container.cradle);
|
|
65
|
+
const list = providerService.listRegistrations().map((r) => {
|
|
66
|
+
const pkg = pkgByIdentifier.get(r.identifier);
|
|
67
|
+
return {
|
|
68
|
+
module: r.provider.descriptor.module,
|
|
69
|
+
id: r.identifier,
|
|
70
|
+
package_name: pkg?.name ?? null,
|
|
71
|
+
package_version: pkg?.version ?? null,
|
|
72
|
+
};
|
|
73
|
+
});
|
|
74
|
+
telemetry.track("plugin.started", { providers: list, provider_count: list.length });
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// never throw from telemetry
|
|
78
|
+
}
|
|
79
|
+
};
|
|
25
80
|
exports.default = async ({ container, options, }) => {
|
|
26
81
|
container.register({
|
|
27
82
|
[types_1.INTEGRATION_OPTIONS_KEY]: (0, awilix_1.asValue)(options ?? {}),
|
|
@@ -31,5 +86,7 @@ exports.default = async ({ container, options, }) => {
|
|
|
31
86
|
providers: options?.providers || [],
|
|
32
87
|
registerServiceFn: registrationFn,
|
|
33
88
|
});
|
|
89
|
+
// Providers are now registered — announce them (guarded; never throws).
|
|
90
|
+
await trackStarted(container, options?.providers ?? []);
|
|
34
91
|
};
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9sb2FkZXJzL2xvYWQtcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsMERBQTRCO0FBQzVCLHVEQUEwRTtBQUMxRSxpRUFBc0U7QUFNdEUsZ0RBQXVGO0FBQ3ZGLG9DQUlpQjtBQUNqQiw0RkFBeUU7QUFFekU7Ozs7OztHQU1HO0FBQ0gsTUFBTSxjQUFjLEdBQUcsS0FBSyxFQUMxQixLQUFVLEVBQ1YsU0FBYyxFQUNkLGFBQWlFLEVBQ2pFLEVBQUU7SUFDRixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQTtJQUMzQyxNQUFNLEdBQUcsR0FBRyxHQUFHLDZDQUFxQyxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQ3JFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFDbEMsRUFBRSxDQUFBO0lBRUYsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQixtRkFBbUY7UUFDbkYsdUZBQXVGO1FBQ3ZGLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBQSxtQkFBVSxFQUFDLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsRUFBRTtZQUN2RixRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsSUFBSSxpQkFBUSxDQUFDLFNBQVM7U0FDaEQsQ0FBQztLQUNILENBQUMsQ0FBQTtJQUVGLFNBQVMsQ0FBQyxXQUFXLENBQUMsMENBQWtDLEVBQUUsSUFBQSxnQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDekUsQ0FBQyxDQUFBO0FBU0QsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUFFLFNBQWMsRUFBRSxTQUEyQixFQUFpQixF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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260716110756 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260716110756 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`alter table if exists "integration" drop constraint if exists "integration_last_test_status_check";`);
|
|
8
|
+
this.addSql(`alter table if exists "integration" add constraint "integration_last_test_status_check" check("last_test_status" in ('passed', 'failed', 'skipped'));`);
|
|
9
|
+
}
|
|
10
|
+
async down() {
|
|
11
|
+
this.addSql(`alter table if exists "integration" drop constraint if exists "integration_last_test_status_check";`);
|
|
12
|
+
this.addSql(`alter table if exists "integration" add constraint "integration_last_test_status_check" check("last_test_status" in ('ok', 'fail', 'skipped'));`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.Migration20260716110756 = Migration20260716110756;
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA3MTYxMTA3NTYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnRlZ3JhdGlvbi9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYwNzE2MTEwNzU2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFxRTtBQUVyRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxR0FBcUcsQ0FBQyxDQUFDO1FBRW5ILElBQUksQ0FBQyxNQUFNLENBQUMsdUpBQXVKLENBQUMsQ0FBQztJQUN2SyxDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxR0FBcUcsQ0FBQyxDQUFDO1FBRW5ILElBQUksQ0FBQyxNQUFNLENBQUMsaUpBQWlKLENBQUMsQ0FBQztJQUNqSyxDQUFDO0NBRUY7QUFkRCwwREFjQyJ9
|