@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.
- package/.medusa/server/src/lib/payload-connection.js +53 -0
- package/.medusa/server/src/lib/payload-sync-guard.js +51 -0
- package/.medusa/server/src/modules/payload-sync/domain/errors.js +96 -2
- package/.medusa/server/src/modules/payload-sync/domain/options.js +28 -5
- package/.medusa/server/src/modules/payload-sync/domain/settings.js +44 -0
- package/.medusa/server/src/modules/payload-sync/loaders/register-payload-client.js +17 -12
- package/.medusa/server/src/modules/payload-sync/service.js +116 -55
- package/.medusa/server/src/modules/payload-sync/services/payload-rest-client.js +1 -1
- package/.medusa/server/src/plugin-actions.js +10 -0
- package/.medusa/server/src/plugin-features.js +49 -0
- package/.medusa/server/src/scripts/reconcile-payload-catalog.js +93 -13
- package/.medusa/server/src/subscribers/payload-sync-product-deleted.js +7 -4
- package/.medusa/server/src/subscribers/payload-sync-product-upserted.js +7 -4
- package/.medusa/server/src/subscribers/payload-sync-variant-deleted.js +7 -4
- package/.medusa/server/src/subscribers/payload-sync-variant-upserted.js +7 -4
- package/.medusa/server/src/workflows/payload-sync/authoritative-reconciliation.js +19 -14
- package/.medusa/server/src/workflows/payload-sync/external-step-failure.js +18 -1
- package/.medusa/server/src/workflows/payload-sync/reconcile-catalog.js +13 -10
- package/.medusa/server/src/workflows/payload-sync/reconcile-full-catalog.js +30 -0
- package/.medusa/server/src/workflows/payload-sync/sync-product.js +3 -11
- package/.medusa/server/src/workflows/payload-sync/sync-variant.js +4 -2
- package/README.md +197 -55
- 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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
10
|
-
exports.PAYLOAD_SYNC_REST_CLIENT
|
|
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
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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.
|
|
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,
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXItcGF5bG9hZC1jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wYXlsb2FkLXN5bmMvbG9hZGVycy9yZWdpc3Rlci1wYXlsb2FkLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE0QkEsa0RBNEJDO0FBU0Qsc0RBV0M7QUE1RUQsdURBQW9EO0FBVXBELDZDQUd5QjtBQUN6QiwrQ0FJMEI7QUFFMUIsc0NBQXFEO0FBQTVDLG1IQUFBLHdCQUF3QixPQUFBO0FBQ3BCLFFBQUEsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUE7QUFFeEQ7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxtQkFBbUIsQ0FDdkMsTUFBdUIsRUFDdkIsT0FBNkIsRUFDN0IsTUFBZTtJQUlmLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFBO1FBRXZDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUUxQyxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUE7SUFDdEMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEtBQUssQ0FBQTtRQUNiLENBQUM7UUFFRCxNQUFNLEVBQUUsSUFBSSxDQUNWLElBQUEsNkJBQW9CLEVBQ2xCLEtBQUssRUFDTCxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxFQUNsQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FDeEIsQ0FDRixDQUFBO1FBRUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ3RDLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0ks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
|