@hartl-services/medusa-payload-sync 0.1.0 → 0.2.1

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 (23) hide show
  1. package/.medusa/server/src/lib/payload-connection.js +53 -0
  2. package/.medusa/server/src/lib/payload-sync-guard.js +51 -0
  3. package/.medusa/server/src/modules/payload-sync/domain/errors.js +96 -2
  4. package/.medusa/server/src/modules/payload-sync/domain/options.js +28 -5
  5. package/.medusa/server/src/modules/payload-sync/domain/settings.js +44 -0
  6. package/.medusa/server/src/modules/payload-sync/loaders/register-payload-client.js +17 -12
  7. package/.medusa/server/src/modules/payload-sync/service.js +116 -55
  8. package/.medusa/server/src/modules/payload-sync/services/payload-rest-client.js +1 -1
  9. package/.medusa/server/src/plugin-actions.js +10 -0
  10. package/.medusa/server/src/plugin-features.js +49 -0
  11. package/.medusa/server/src/scripts/reconcile-payload-catalog.js +93 -13
  12. package/.medusa/server/src/subscribers/payload-sync-product-deleted.js +7 -4
  13. package/.medusa/server/src/subscribers/payload-sync-product-upserted.js +7 -4
  14. package/.medusa/server/src/subscribers/payload-sync-variant-deleted.js +7 -4
  15. package/.medusa/server/src/subscribers/payload-sync-variant-upserted.js +7 -4
  16. package/.medusa/server/src/workflows/payload-sync/authoritative-reconciliation.js +19 -14
  17. package/.medusa/server/src/workflows/payload-sync/external-step-failure.js +18 -1
  18. package/.medusa/server/src/workflows/payload-sync/reconcile-catalog.js +13 -10
  19. package/.medusa/server/src/workflows/payload-sync/reconcile-full-catalog.js +30 -0
  20. package/.medusa/server/src/workflows/payload-sync/sync-product.js +3 -11
  21. package/.medusa/server/src/workflows/payload-sync/sync-variant.js +4 -2
  22. package/README.md +197 -55
  23. package/package.json +7 -4
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.describePayloadSyncConfiguration = describePayloadSyncConfiguration;
4
+ exports.resolvePayloadConnection = resolvePayloadConnection;
5
+ const medusa_base_1 = require("@hartl-services/medusa-base");
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const errors_1 = require("../modules/payload-sync/domain/errors");
8
+ const settings_1 = require("../modules/payload-sync/domain/settings");
9
+ const plugin_features_1 = require("../plugin-features");
10
+ // Signature of the not-configured state that was last logged. One warning per
11
+ // process and state, not per event; a configured resolution re-arms it.
12
+ let reportedNotConfigured = null;
13
+ /**
14
+ * Reads URL, API key and auth collection from the base plugin's settings
15
+ * (stored value > default; there is no config or environment fallback)
16
+ * through the application container passed in (a workflow step's, a
17
+ * subscriber's, a script's) and validates them with the plugin's own schema.
18
+ * Logs the not-configured state once per process and state.
19
+ */
20
+ async function describePayloadSyncConfiguration(container) {
21
+ const settings = await (0, medusa_base_1.getPluginSettings)(container, plugin_features_1.payloadSyncPluginFeatures);
22
+ const check = (0, settings_1.toPayloadConnection)(settings.values);
23
+ reportConnectionState(container, check);
24
+ return check;
25
+ }
26
+ /**
27
+ * The currently effective Payload connection for the module service's
28
+ * Payload-facing methods. Settings can change at run time, so callers resolve
29
+ * it per use case, never once at boot. Throws the permanent
30
+ * `PayloadSyncNotConfiguredError` while a value is missing or invalid.
31
+ */
32
+ async function resolvePayloadConnection(container) {
33
+ const check = await describePayloadSyncConfiguration(container);
34
+ if (!check.configured) {
35
+ throw new errors_1.PayloadSyncNotConfiguredError(check);
36
+ }
37
+ return check.connection;
38
+ }
39
+ function reportConnectionState(container, check) {
40
+ if (check.configured) {
41
+ reportedNotConfigured = null;
42
+ return;
43
+ }
44
+ const signature = JSON.stringify([check.missing, check.invalid]);
45
+ if (signature === reportedNotConfigured) {
46
+ return;
47
+ }
48
+ reportedNotConfigured = signature;
49
+ container
50
+ .resolve(utils_1.ContainerRegistrationKeys.LOGGER)
51
+ .warn(`${(0, errors_1.describePayloadSyncNotConfigured)(check)} Bis die Einstellungen im Admin unter „Hartl Services Plugins“ → Payload-CMS-Sync gepflegt sind, wird nichts synchronisiert.`);
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC1jb25uZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9wYXlsb2FkLWNvbm5lY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE0QkEsNEVBU0M7QUFRRCw0REFVQztBQXZERCw2REFBK0Q7QUFFL0QscURBQXFFO0FBRXJFLGtFQUc4QztBQUU5QyxzRUFHZ0Q7QUFDaEQsd0RBQThEO0FBSTlELDhFQUE4RTtBQUM5RSx3RUFBd0U7QUFDeEUsSUFBSSxxQkFBcUIsR0FBa0IsSUFBSSxDQUFBO0FBRS9DOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSxnQ0FBZ0MsQ0FDcEQsU0FBMEI7SUFFMUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLCtCQUFpQixFQUFDLFNBQVMsRUFBRSwyQ0FBeUIsQ0FBQyxDQUFBO0lBQzlFLE1BQU0sS0FBSyxHQUFHLElBQUEsOEJBQW1CLEVBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRWxELHFCQUFxQixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUV2QyxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsU0FBMEI7SUFFMUIsTUFBTSxLQUFLLEdBQUcsTUFBTSxnQ0FBZ0MsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUUvRCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxzQ0FBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNoRCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFBO0FBQ3pCLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUM1QixTQUEwQixFQUMxQixLQUE2QjtJQUU3QixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNyQixxQkFBcUIsR0FBRyxJQUFJLENBQUE7UUFDNUIsT0FBTTtJQUNSLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUVoRSxJQUFJLFNBQVMsS0FBSyxxQkFBcUIsRUFBRSxDQUFDO1FBQ3hDLE9BQU07SUFDUixDQUFDO0lBRUQscUJBQXFCLEdBQUcsU0FBUyxDQUFBO0lBQ2pDLFNBQVM7U0FDTixPQUFPLENBQVMsaUNBQXlCLENBQUMsTUFBTSxDQUFDO1NBQ2pELElBQUksQ0FDSCxHQUFHLElBQUEseUNBQWdDLEVBQUMsS0FBSyxDQUFDLDhIQUE4SCxDQUN6SyxDQUFBO0FBQ0wsQ0FBQyJ9
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isPayloadSyncConfigured = isPayloadSyncConfigured;
4
+ exports.requirePayloadSyncConfigured = requirePayloadSyncConfigured;
5
+ exports.runPayloadSyncSubscriber = runPayloadSyncSubscriber;
6
+ const medusa_base_1 = require("@hartl-services/medusa-base");
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const errors_1 = require("../modules/payload-sync/domain/errors");
9
+ const plugin_features_1 = require("../plugin-features");
10
+ const payload_connection_1 = require("./payload-connection");
11
+ /**
12
+ * `false` while URL/API key are missing or invalid; the reason is logged once
13
+ * per process by `describePayloadSyncConfiguration`.
14
+ */
15
+ async function isPayloadSyncConfigured(container) {
16
+ return (await (0, payload_connection_1.describePayloadSyncConfiguration)(container)).configured;
17
+ }
18
+ /**
19
+ * For the Admin action: fails with `UNEXPECTED_STATE` and the not-configured
20
+ * description ("… nicht konfiguriert (fehlend: …)"), so the run ends `failed`
21
+ * with that message instead of "done" without doing anything.
22
+ */
23
+ async function requirePayloadSyncConfigured(container) {
24
+ const check = await (0, payload_connection_1.describePayloadSyncConfiguration)(container);
25
+ if (!check.configured) {
26
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, (0, errors_1.describePayloadSyncNotConfigured)(check));
27
+ }
28
+ }
29
+ /**
30
+ * Shared subscriber gate: plugin switch first, then the configuration. A
31
+ * not-configured failure that still surfaces from the workflow (settings
32
+ * cleared between check and run) is swallowed; everything else propagates so
33
+ * the Event Bus retries.
34
+ */
35
+ async function runPayloadSyncSubscriber(container, run) {
36
+ if (!(await (0, medusa_base_1.isPluginFeatureEnabled)(container, plugin_features_1.payloadSyncPluginFeatures))) {
37
+ return;
38
+ }
39
+ if (!(await isPayloadSyncConfigured(container))) {
40
+ return;
41
+ }
42
+ try {
43
+ await run();
44
+ }
45
+ catch (error) {
46
+ if (!(0, errors_1.isPayloadSyncNotConfiguredError)(error)) {
47
+ throw error;
48
+ }
49
+ }
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC1zeW5jLWd1YXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9wYXlsb2FkLXN5bmMtZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSwwREFJQztBQU9ELG9FQVVDO0FBUUQsNERBbUJDO0FBL0RELDZEQUFvRTtBQUVwRSxxREFBdUQ7QUFFdkQsa0VBRzhDO0FBQzlDLHdEQUE4RDtBQUM5RCw2REFBdUU7QUFFdkU7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLHVCQUF1QixDQUMzQyxTQUEwQjtJQUUxQixPQUFPLENBQUMsTUFBTSxJQUFBLHFEQUFnQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBO0FBQ3ZFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLDRCQUE0QixDQUNoRCxTQUEwQjtJQUUxQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUEscURBQWdDLEVBQUMsU0FBUyxDQUFDLENBQUE7SUFDL0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEVBQ2xDLElBQUEseUNBQWdDLEVBQUMsS0FBSyxDQUFDLENBQ3hDLENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxTQUEwQixFQUMxQixHQUEyQjtJQUUzQixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUEsb0NBQXNCLEVBQUMsU0FBUyxFQUFFLDJDQUF5QixDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFFLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxDQUFDLENBQUMsTUFBTSx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDaEQsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsRUFBRSxDQUFBO0lBQ2IsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsSUFBQSx3Q0FBK0IsRUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVDLE1BQU0sS0FBSyxDQUFBO1FBQ2IsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIn0=
@@ -1,8 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PayloadSyncError = void 0;
3
+ exports.PayloadSyncNotConfiguredError = exports.PAYLOAD_SYNC_NOT_CONFIGURED = exports.PayloadSyncError = void 0;
4
+ exports.describePayloadSyncNotConfigured = describePayloadSyncNotConfigured;
5
+ exports.isPayloadSyncNotConfiguredError = isPayloadSyncNotConfiguredError;
4
6
  exports.redactPayloadSyncText = redactPayloadSyncText;
5
7
  exports.formatPayloadSyncLog = formatPayloadSyncLog;
8
+ exports.describePayloadSyncFailureCause = describePayloadSyncFailureCause;
6
9
  class PayloadSyncError extends Error {
7
10
  constructor(message, options) {
8
11
  super(redactAuthorizationData(message));
@@ -15,6 +18,61 @@ class PayloadSyncError extends Error {
15
18
  }
16
19
  }
17
20
  exports.PayloadSyncError = PayloadSyncError;
21
+ exports.PAYLOAD_SYNC_NOT_CONFIGURED = "PAYLOAD_SYNC_NOT_CONFIGURED";
22
+ /**
23
+ * Thrown by `resolvePayloadConnection` (src/lib/payload-connection.ts) while
24
+ * URL, API key or auth collection are missing or invalid. Permanent: retrying
25
+ * cannot fix it.
26
+ */
27
+ class PayloadSyncNotConfiguredError extends PayloadSyncError {
28
+ constructor(input) {
29
+ super(describePayloadSyncNotConfigured(input), {
30
+ code: exports.PAYLOAD_SYNC_NOT_CONFIGURED,
31
+ retryable: false,
32
+ });
33
+ this.name = "PayloadSyncNotConfiguredError";
34
+ this.missing = [...input.missing];
35
+ this.invalid = [...input.invalid];
36
+ }
37
+ }
38
+ exports.PayloadSyncNotConfiguredError = PayloadSyncNotConfiguredError;
39
+ function describePayloadSyncNotConfigured(input) {
40
+ const parts = [
41
+ input.missing.length > 0 ? `fehlend: ${input.missing.join(", ")}` : null,
42
+ input.invalid.length > 0 ? `ungültig: ${input.invalid.join(", ")}` : null,
43
+ ].filter((part) => part !== null);
44
+ return `Payload-CMS-Sync ist nicht konfiguriert (${parts.join("; ")}).`;
45
+ }
46
+ /**
47
+ * Recognizes the not-configured failure directly or after a workflow step
48
+ * turned it into a permanent failure whose message is the structured log.
49
+ */
50
+ function isPayloadSyncNotConfiguredError(error) {
51
+ if (error instanceof PayloadSyncError) {
52
+ return error.code === exports.PAYLOAD_SYNC_NOT_CONFIGURED;
53
+ }
54
+ const message = error instanceof Error
55
+ ? error.message
56
+ : typeof error === "object" &&
57
+ error !== null &&
58
+ "message" in error &&
59
+ typeof error.message === "string"
60
+ ? error.message
61
+ : null;
62
+ if (message === null) {
63
+ return false;
64
+ }
65
+ try {
66
+ const parsed = JSON.parse(message);
67
+ return (typeof parsed === "object" &&
68
+ parsed !== null &&
69
+ "code" in parsed &&
70
+ parsed.code === exports.PAYLOAD_SYNC_NOT_CONFIGURED);
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ }
18
76
  function redactPayloadSyncText(value, sensitiveValues = []) {
19
77
  let redacted = redactAuthorizationData(value);
20
78
  for (const sensitiveValue of sensitiveValues) {
@@ -51,4 +109,40 @@ function formatPayloadSyncLog(error, context, sensitiveValues = []) {
51
109
  httpStatus: safeError.httpStatus,
52
110
  });
53
111
  }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcGF5bG9hZC1zeW5jL2RvbWFpbi9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBMEJBLHNEQWFDO0FBaUNELG9EQWVDO0FBL0VELE1BQWEsZ0JBQWlCLFNBQVEsS0FBSztJQU96QyxZQUFZLE9BQWUsRUFBRSxPQUFnQztRQUMzRCxLQUFLLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUN2QyxJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFBO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQTtRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUE7UUFDbEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFBO1FBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQTtRQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUE7SUFDbEMsQ0FBQztDQUNGO0FBaEJELDRDQWdCQztBQUVELFNBQWdCLHFCQUFxQixDQUNuQyxLQUFhLEVBQ2Isa0JBQXFDLEVBQUU7SUFFdkMsSUFBSSxRQUFRLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFN0MsS0FBSyxNQUFNLGNBQWMsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM3QyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFBO1FBQzlELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUE7QUFDakIsQ0FBQztBQWFELFNBQVMsdUJBQXVCLENBQUMsS0FBYTtJQUM1QyxPQUFPLEtBQUs7U0FDVCxPQUFPLENBQUMscUJBQXFCLEVBQUUsbUJBQW1CLENBQUM7U0FDbkQsT0FBTyxDQUFDLCtDQUErQyxFQUFFLHFCQUFxQixDQUFDO1NBQy9FLE9BQU8sQ0FBQyw4REFBOEQsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFBO0FBQzlGLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLEtBQWM7SUFDNUMsSUFBSSxLQUFLLFlBQVksZ0JBQWdCLEVBQUUsQ0FBQztRQUN0QyxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQTtJQUV0RixPQUFPLElBQUksZ0JBQWdCLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDMUQsSUFBSSxFQUFFLHVCQUF1QjtRQUM3QixTQUFTLEVBQUUsS0FBSztLQUNqQixDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQ2xDLEtBQWMsRUFDZCxPQUE4QixFQUM5QixrQkFBcUMsRUFBRTtJQUV2QyxNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUUvQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDcEIsR0FBRyxPQUFPO1FBQ1YsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQ3BCLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQztRQUNsRSxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7UUFDOUIsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVO1FBQ2hDLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVTtLQUNqQyxDQUFDLENBQUE7QUFDSixDQUFDIn0=
112
+ /**
113
+ * Short German cause of a sync failure for an Admin-facing message, e.g. a
114
+ * failed `sync_now` run. It names the classified code and never carries a
115
+ * Payload response excerpt, header, or credential.
116
+ */
117
+ function describePayloadSyncFailureCause(error) {
118
+ if (!(error instanceof PayloadSyncError)) {
119
+ const message = readMessage(error);
120
+ return message === null
121
+ ? "unbekannter Fehler"
122
+ : `unerwarteter Fehler: ${redactPayloadSyncText(message)}`;
123
+ }
124
+ switch (error.code) {
125
+ case "PAYLOAD_NETWORK_ERROR":
126
+ return "Payload nicht erreichbar, Netzwerkfehler [PAYLOAD_NETWORK_ERROR]";
127
+ case "PAYLOAD_TIMEOUT":
128
+ return "Payload nicht erreichbar, Zeitüberschreitung [PAYLOAD_TIMEOUT]";
129
+ case exports.PAYLOAD_SYNC_NOT_CONFIGURED:
130
+ return error.message;
131
+ }
132
+ if (error.httpStatus !== undefined) {
133
+ return `Payload antwortete mit HTTP ${error.httpStatus} [${error.code}]`;
134
+ }
135
+ return `Payload-Fehler [${error.code}]`;
136
+ }
137
+ function readMessage(value) {
138
+ if (value instanceof Error) {
139
+ return value.message;
140
+ }
141
+ return typeof value === "object" &&
142
+ value !== null &&
143
+ "message" in value &&
144
+ typeof value.message === "string"
145
+ ? value.message
146
+ : null;
147
+ }
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcGF5bG9hZC1zeW5jL2RvbWFpbi9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBZ0RBLDRFQVVDO0FBTUQsMEVBK0JDO0FBRUQsc0RBYUM7QUFpQ0Qsb0RBZUM7QUFPRCwwRUF1QkM7QUFwTEQsTUFBYSxnQkFBaUIsU0FBUSxLQUFLO0lBT3pDLFlBQVksT0FBZSxFQUFFLE9BQWdDO1FBQzNELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUE7UUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQTtRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUE7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFBO1FBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQTtJQUNsQyxDQUFDO0NBQ0Y7QUFoQkQsNENBZ0JDO0FBRVksUUFBQSwyQkFBMkIsR0FBRyw2QkFBNkIsQ0FBQTtBQUV4RTs7OztHQUlHO0FBQ0gsTUFBYSw2QkFBOEIsU0FBUSxnQkFBZ0I7SUFJakUsWUFBWSxLQUFpRTtRQUMzRSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxFQUFFLG1DQUEyQjtZQUNqQyxTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsSUFBSSxHQUFHLCtCQUErQixDQUFBO1FBQzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FB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
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PayloadSyncPluginOptionsSchema = void 0;
3
+ exports.PayloadSyncPluginOptionsSchema = exports.PayloadConnectionSchema = void 0;
4
4
  exports.normalizePayloadSyncOptions = normalizePayloadSyncOptions;
5
5
  const zod_1 = require("@medusajs/framework/zod");
6
6
  const slugSchema = zod_1.z
@@ -20,10 +20,21 @@ const payloadUrlSchema = zod_1.z
20
20
  }
21
21
  }, "Must be an http or https URL.")
22
22
  .transform((value) => value.replace(/\/$/, ""));
23
- exports.PayloadSyncPluginOptionsSchema = zod_1.z.object({
23
+ /**
24
+ * The connection to Payload. Resolved at run time from the base plugin's
25
+ * settings (stored value > default), never at boot and never from
26
+ * medusa-config or the environment.
27
+ */
28
+ exports.PayloadConnectionSchema = zod_1.z.object({
24
29
  payloadUrl: payloadUrlSchema,
25
30
  payloadApiKey: zod_1.z.string().trim().min(1, "Payload API key is required."),
26
- payloadAuthCollection: slugSchema.default("users"),
31
+ payloadAuthCollection: slugSchema,
32
+ });
33
+ /**
34
+ * Config-only options. The connection (URL, API key, auth collection) is not
35
+ * part of it: it lives only in the base plugin's settings.
36
+ */
37
+ exports.PayloadSyncPluginOptionsSchema = zod_1.z.object({
27
38
  collections: zod_1.z
28
39
  .object({
29
40
  product: slugSchema.default("medusa-products"),
@@ -37,7 +48,19 @@ exports.PayloadSyncPluginOptionsSchema = zod_1.z.object({
37
48
  backfillBatchSize: zod_1.z.number().int().min(1).max(500).default(50),
38
49
  backfillBatchDelayMs: zod_1.z.number().int().min(0).max(60_000).default(250),
39
50
  });
51
+ /** Former connection options; now Admin settings only. */
52
+ const REMOVED_CONNECTION_OPTIONS = [
53
+ "payloadUrl",
54
+ "payloadApiKey",
55
+ "payloadAuthCollection",
56
+ ];
40
57
  function normalizePayloadSyncOptions(options) {
41
- return exports.PayloadSyncPluginOptionsSchema.parse(options);
58
+ const removed = REMOVED_CONNECTION_OPTIONS.filter((key) => typeof options === "object" &&
59
+ options !== null &&
60
+ Reflect.get(options, key) !== undefined);
61
+ if (removed.length > 0) {
62
+ throw new Error(`@hartl-services/medusa-payload-sync no longer accepts ${removed.join(", ")} as plugin options. Store the Payload connection in the Admin under "Hartl Services Plugins" → Payload-CMS-Sync and remove these options from medusa-config.`);
63
+ }
64
+ return exports.PayloadSyncPluginOptionsSchema.parse(options ?? {});
42
65
  }
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3BheWxvYWQtc3luYy9kb21haW4vb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFnREEsa0VBSUM7QUFwREQsaURBQTJDO0FBSTNDLE1BQU0sVUFBVSxHQUFHLE9BQUM7S0FDakIsTUFBTSxFQUFFO0tBQ1IsSUFBSSxFQUFFO0tBQ04sS0FBSyxDQUFDLHVCQUF1QixFQUFFLDJCQUEyQixDQUFDLENBQUE7QUFFOUQsTUFBTSxnQkFBZ0IsR0FBRyxPQUFDO0tBQ3ZCLE1BQU0sRUFBRTtLQUNSLElBQUksRUFBRTtLQUNOLE1BQU0sQ0FDTCxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ1IsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFBO1FBRXhDLE9BQU8sUUFBUSxLQUFLLE9BQU8sSUFBSSxRQUFRLEtBQUssUUFBUSxDQUFBO0lBQ3RELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7QUFDSCxDQUFDLEVBQ0QsK0JBQStCLENBQ2hDO0tBQ0EsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBRXBDLFFBQUEsOEJBQThCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNyRCxVQUFVLEVBQUUsZ0JBQWdCO0lBQzVCLGFBQWEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSw4QkFBOEIsQ0FBQztJQUN2RSxxQkFBcUIsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUNsRCxXQUFXLEVBQUUsT0FBQztTQUNYLE1BQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQzlDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDO0tBQ3ZELENBQUM7U0FDRCxPQUFPLENBQUM7UUFDUCxPQUFPLEVBQUUsaUJBQWlCO1FBQzFCLE9BQU8sRUFBRSx5QkFBeUI7S0FDbkMsQ0FBQztJQUNKLGdCQUFnQixFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDeEUsaUJBQWlCLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUMvRCxvQkFBb0IsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0NBQ3ZFLENBQUMsQ0FBQTtBQU1GLFNBQWdCLDJCQUEyQixDQUN6QyxPQUFpQztJQUVqQyxPQUFPLHNDQUE4QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtBQUN0RCxDQUFDIn0=
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3BheWxvYWQtc3luYy9kb21haW4vb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF5RUEsa0VBaUJDO0FBMUZELGlEQUEyQztBQUkzQyxNQUFNLFVBQVUsR0FBRyxPQUFDO0tBQ2pCLE1BQU0sRUFBRTtLQUNSLElBQUksRUFBRTtLQUNOLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSwyQkFBMkIsQ0FBQyxDQUFBO0FBRTlELE1BQU0sZ0JBQWdCLEdBQUcsT0FBQztLQUN2QixNQUFNLEVBQUU7S0FDUixJQUFJLEVBQUU7S0FDTixNQUFNLENBQ0wsQ0FBQyxLQUFLLEVBQUUsRUFBRTtJQUNSLElBQUksQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQTtRQUV4QyxPQUFPLFFBQVEsS0FBSyxPQUFPLElBQUksUUFBUSxLQUFLLFFBQVEsQ0FBQTtJQUN0RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0FBQ0gsQ0FBQyxFQUNELCtCQUErQixDQUNoQztLQUNBLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUVqRDs7OztHQUlHO0FBQ1UsUUFBQSx1QkFBdUIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzlDLFVBQVUsRUFBRSxnQkFBZ0I7SUFDNUIsYUFBYSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLDhCQUE4QixDQUFDO0lBQ3ZFLHFCQUFxQixFQUFFLFVBQVU7Q0FDbEMsQ0FBQyxDQUFBO0FBSUY7OztHQUdHO0FBQ1UsUUFBQSw4QkFBOEIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3JELFdBQVcsRUFBRSxPQUFDO1NBQ1gsTUFBTSxDQUFDO1FBQ04sT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDOUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUM7S0FDdkQsQ0FBQztTQUNELE9BQU8sQ0FBQztRQUNQLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsT0FBTyxFQUFFLHlCQUF5QjtLQUNuQyxDQUFDO0lBQ0osZ0JBQWdCLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztJQUN4RSxpQkFBaUIsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQy9ELG9CQUFvQixFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7Q0FDdkUsQ0FBQyxDQUFBO0FBVUYsMERBQTBEO0FBQzFELE1BQU0sMEJBQTBCLEdBQUc7SUFDakMsWUFBWTtJQUNaLGVBQWU7SUFDZix1QkFBdUI7Q0FDZixDQUFBO0FBRVYsU0FBZ0IsMkJBQTJCLENBQ3pDLE9BQTZDO0lBRTdDLE1BQU0sT0FBTyxHQUFHLDBCQUEwQixDQUFDLE1BQU0sQ0FDL0MsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLE9BQU8sT0FBTyxLQUFLLFFBQVE7UUFDM0IsT0FBTyxLQUFLLElBQUk7UUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUMxQyxDQUFBO0lBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQ2IseURBQXlELE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDhKQUE4SixDQUMxTyxDQUFBO0lBQ0gsQ0FBQztJQUVELE9BQU8sc0NBQThCLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQTtBQUM1RCxDQUFDIn0=
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_PAYLOAD_AUTH_COLLECTION = exports.PAYLOAD_AUTH_COLLECTION_SETTING = exports.PAYLOAD_API_KEY_SETTING = exports.PAYLOAD_URL_SETTING = void 0;
4
+ exports.toPayloadConnection = toPayloadConnection;
5
+ const options_1 = require("./options");
6
+ exports.PAYLOAD_URL_SETTING = "payload_url";
7
+ exports.PAYLOAD_API_KEY_SETTING = "payload_api_key";
8
+ exports.PAYLOAD_AUTH_COLLECTION_SETTING = "payload_auth_collection";
9
+ exports.DEFAULT_PAYLOAD_AUTH_COLLECTION = "users";
10
+ const SETTING_TO_CONNECTION_FIELD = {
11
+ [exports.PAYLOAD_URL_SETTING]: "payloadUrl",
12
+ [exports.PAYLOAD_API_KEY_SETTING]: "payloadApiKey",
13
+ [exports.PAYLOAD_AUTH_COLLECTION_SETTING]: "payloadAuthCollection",
14
+ };
15
+ /**
16
+ * Validates resolved setting values with the plugin's own schema. A missing
17
+ * or invalid value makes the plugin "nicht konfiguriert"; only keys are
18
+ * reported, never values.
19
+ */
20
+ function toPayloadConnection(values) {
21
+ const missing = [];
22
+ const candidate = {};
23
+ for (const [setting, field] of Object.entries(SETTING_TO_CONNECTION_FIELD)) {
24
+ const value = values[setting];
25
+ if (value === undefined || value === null || value === "") {
26
+ missing.push(setting);
27
+ }
28
+ else {
29
+ candidate[field] = value;
30
+ }
31
+ }
32
+ const parsed = options_1.PayloadConnectionSchema.safeParse(candidate);
33
+ if (missing.length === 0 && parsed.success) {
34
+ return { configured: true, connection: parsed.data };
35
+ }
36
+ const invalid = parsed.success
37
+ ? []
38
+ : Object.entries(SETTING_TO_CONNECTION_FIELD)
39
+ .filter(([setting, field]) => !missing.includes(setting) &&
40
+ parsed.error.issues.some((issue) => issue.path[0] === field))
41
+ .map(([setting]) => setting);
42
+ return { configured: false, missing, invalid };
43
+ }
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wYXlsb2FkLXN5bmMvZG9tYWluL3NldHRpbmdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQThCQSxrREFpQ0M7QUEvREQsdUNBR2tCO0FBRUwsUUFBQSxtQkFBbUIsR0FBRyxhQUFhLENBQUE7QUFDbkMsUUFBQSx1QkFBdUIsR0FBRyxpQkFBaUIsQ0FBQTtBQUMzQyxRQUFBLCtCQUErQixHQUFHLHlCQUF5QixDQUFBO0FBQzNELFFBQUEsK0JBQStCLEdBQUcsT0FBTyxDQUFBO0FBT3RELE1BQU0sMkJBQTJCLEdBQUc7SUFDbEMsQ0FBQywyQkFBbUIsQ0FBQyxFQUFFLFlBQVk7SUFDbkMsQ0FBQywrQkFBdUIsQ0FBQyxFQUFFLGVBQWU7SUFDMUMsQ0FBQyx1Q0FBK0IsQ0FBQyxFQUFFLHVCQUF1QjtDQUNXLENBQUE7QUFNdkU7Ozs7R0FJRztBQUNILFNBQWdCLG1CQUFtQixDQUNqQyxNQUF5QztJQUV6QyxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUE7SUFDNUIsTUFBTSxTQUFTLEdBQTRCLEVBQUUsQ0FBQTtJQUU3QyxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7UUFDM0UsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRTdCLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ3ZCLENBQUM7YUFBTSxDQUFDO1lBQ04sU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQTtRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLGlDQUF1QixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUUzRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ3RELENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTztRQUM1QixDQUFDLENBQUMsRUFBRTtRQUNKLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDO2FBQ3hDLE1BQU0sQ0FDTCxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FDbkIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztZQUMxQixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQy9EO2FBQ0EsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUE7SUFFbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFBO0FBQ2hELENBQUMifQ==
@@ -6,9 +6,14 @@ exports.registerPayloadClient = registerPayloadClient;
6
6
  const awilix_1 = require("@medusajs/framework/awilix");
7
7
  const errors_1 = require("../domain/errors");
8
8
  const options_1 = require("../domain/options");
9
- const payload_rest_client_1 = require("../services/payload-rest-client");
10
- exports.PAYLOAD_SYNC_REST_CLIENT = "payloadSyncRestClient";
9
+ var service_1 = require("../service");
10
+ Object.defineProperty(exports, "PAYLOAD_SYNC_REST_CLIENT", { enumerable: true, get: function () { return service_1.PAYLOAD_SYNC_REST_CLIENT; } });
11
11
  exports.PAYLOAD_SYNC_OPTIONS = "payloadSyncOptions";
12
+ /**
13
+ * Checks that the Payload service user can read, create and update both
14
+ * mirror collections. Not run at boot; used by the Payload REST contract
15
+ * suite against a real Payload instance.
16
+ */
12
17
  async function runPayloadPreflight(client, options, logger) {
13
18
  try {
14
19
  const access = await client.getAccess();
@@ -23,17 +28,17 @@ async function runPayloadPreflight(client, options, logger) {
23
28
  return { ok: false, degraded: true };
24
29
  }
25
30
  }
26
- async function registerPayloadClient({ container, options, logger, dataLoaderOnly }) {
27
- const normalizedOptions = (0, options_1.normalizePayloadSyncOptions)(options);
28
- const client = new payload_rest_client_1.PayloadRestClient(normalizedOptions);
31
+ /**
32
+ * Registers the config-only options. The Payload connection is a runtime
33
+ * setting of the base plugin (see the module service), so there is nothing
34
+ * to preflight at boot: the plugin starts "nicht konfiguriert" until the
35
+ * settings are stored, and the first sync or the Admin action reports a
36
+ * connection problem.
37
+ */
38
+ async function registerPayloadClient({ container, options, }) {
29
39
  container.register({
30
- [exports.PAYLOAD_SYNC_REST_CLIENT]: (0, awilix_1.asValue)(client),
31
- [exports.PAYLOAD_SYNC_OPTIONS]: (0, awilix_1.asValue)(normalizedOptions),
40
+ [exports.PAYLOAD_SYNC_OPTIONS]: (0, awilix_1.asValue)((0, options_1.normalizePayloadSyncOptions)(options)),
32
41
  });
33
- if (dataLoaderOnly === true) {
34
- return;
35
- }
36
- await runPayloadPreflight(client, normalizedOptions, logger);
37
42
  }
38
43
  const REQUIRED_OPERATIONS = ["read", "create", "update"];
39
44
  function assertPayloadCapabilities(access, options) {
@@ -105,4 +110,4 @@ function isDegradedPayloadFailure(error) {
105
110
  (status !== undefined && status >= 500 && status < 600));
106
111
  }
107
112
  exports.default = registerPayloadClient;
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItcGF5bG9hZC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wYXlsb2FkLXN5bmMvbG9hZGVycy9yZWdpc3Rlci1wYXlsb2FkLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1QkEsa0RBNEJDO0FBRUQsc0RBa0JDO0FBdkVELHVEQUFvRDtBQVVwRCw2Q0FHeUI7QUFDekIsK0NBRzBCO0FBQzFCLHlFQUFtRTtBQUV0RCxRQUFBLHdCQUF3QixHQUFHLHVCQUF1QixDQUFBO0FBQ2xELFFBQUEsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUE7QUFFakQsS0FBSyxVQUFVLG1CQUFtQixDQUN2QyxNQUF1QixFQUN2QixPQUFxQyxFQUNyQyxNQUFlO0lBSWYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUE7UUFFdkMseUJBQXlCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBRTFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQTtJQUN0QyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxDQUFBO1FBQ2IsQ0FBQztRQUVELE1BQU0sRUFBRSxJQUFJLENBQ1YsSUFBQSw2QkFBb0IsRUFDbEIsS0FBSyxFQUNMLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLEVBQ2xDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUN4QixDQUNGLENBQUE7UUFFRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUE7SUFDdEMsQ0FBQztBQUNILENBQUM7QUFFTSxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUEyQztJQUV2RixNQUFNLGlCQUFpQixHQUFHLElBQUEscUNBQTJCLEVBQ25ELE9BQW1DLENBQ3BDLENBQUE7SUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLHVDQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFFdkQsU0FBUyxDQUFDLFFBQVEsQ0FBQztRQUNqQixDQUFDLGdDQUF3QixDQUFDLEVBQUUsSUFBQSxnQkFBTyxFQUFDLE1BQU0sQ0FBQztRQUMzQyxDQUFDLDRCQUFvQixDQUFDLEVBQUUsSUFBQSxnQkFBTyxFQUFDLGlCQUFpQixDQUFDO0tBQ25ELENBQUMsQ0FBQTtJQUVGLElBQUksY0FBYyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzVCLE9BQU07SUFDUixDQUFDO0lBRUQsTUFBTSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDOUQsQ0FBQztBQUVELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBVSxDQUFBO0FBR2pFLFNBQVMseUJBQXlCLENBQ2hDLE1BQTZCLEVBQzdCLE9BQXFDO0lBRXJDLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRTtRQUNoRSxVQUFVO1FBQ1YsT0FBTztRQUNQLFFBQVE7S0FDVCxDQUFDLENBQUE7SUFDRiw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUU7UUFDaEUsVUFBVTtRQUNWLE9BQU87UUFDUCxTQUFTO0tBQ1YsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQ25DLE1BQTZCLEVBQzdCLFVBQWtCLEVBQ2xCLGNBQWlDO0lBRWpDLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztRQUN4QyxNQUFNLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRXZELEtBQUssTUFBTSxTQUFTLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRCxNQUFNLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxHQUFHLFVBQVUsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBQ3hFLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDckMsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUN0QyxNQUFNLHNCQUFzQixDQUMxQixVQUFVLEVBQ1YsR0FBRyxVQUFVLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3JDLENBQUE7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFbEQsSUFBSSxXQUFXLEtBQUssU0FBUyxJQUFJLE9BQU8sV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xFLFNBQVE7UUFDVixDQUFDO1FBRUQsS0FBSyxNQUFNLFNBQVMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxzQkFBc0IsQ0FDMUIsVUFBVSxFQUNWLEdBQUcsVUFBVSxJQUFJLEtBQUssSUFBSSxTQUFTLEVBQUUsQ0FDdEMsQ0FBQTtZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUN6QixXQUErQixFQUMvQixTQUE0QjtJQUU1QixNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFekMsT0FBTyxVQUFVLEtBQUssU0FBUyxJQUFJLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtBQUM5RCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsVUFBeUM7SUFDOUQsT0FBTyxDQUNMLFVBQVUsS0FBSyxJQUFJO1FBQ25CLENBQUMsT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQ25FLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsVUFBa0IsRUFDbEIsVUFBa0I7SUFFbEIsT0FBTyxJQUFJLHlCQUFnQixDQUFDLHNCQUFzQixVQUFVLGNBQWMsRUFBRTtRQUMxRSxJQUFJLEVBQUUsNEJBQTRCO1FBQ2xDLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFVBQVU7S0FDWCxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsU0FBUyx3QkFBd0IsQ0FBQyxLQUFjO0lBQzlDLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSx5QkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQzdELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVELElBQ0UsS0FBSyxDQUFDLElBQUksS0FBSyx1QkFBdUI7UUFDdEMsS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFDaEMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUE7SUFFL0IsT0FBTyxDQUNMLE1BQU0sS0FBSyxHQUFHO1FBQ2QsTUFBTSxLQUFLLEdBQUc7UUFDZCxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQ3hELENBQUE7QUFDSCxDQUFDO0FBRUQsa0JBQWUscUJBQXFCLENBQUEifQ==
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItcGF5bG9hZC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wYXlsb2FkLXN5bmMvbG9hZGVycy9yZWdpc3Rlci1wYXlsb2FkLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE0QkEsa0RBNEJDO0FBU0Qsc0RBV0M7QUE1RUQsdURBQW9EO0FBVXBELDZDQUd5QjtBQUN6QiwrQ0FJMEI7QUFFMUIsc0NBQXFEO0FBQTVDLG1IQUFBLHdCQUF3QixPQUFBO0FBQ3BCLFFBQUEsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUE7QUFFeEQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsTUFBdUIsRUFDdkIsT0FBNkIsRUFDN0IsTUFBZTtJQUlmLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRXZDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUUxQyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUE7SUFDdEMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEtBQUssQ0FBQTtRQUNiLENBQUM7UUFFRCxNQUFNLEVBQUUsSUFBSSxDQUNWLElBQUEsNkJBQW9CLEVBQ2xCLEtBQUssRUFDTCxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxFQUNsQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FDeEIsQ0FDRixDQUFBO1FBRUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ3RDLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0ks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