@hartl-services/medusa-payload-sync 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/admin/index.js +26 -0
- package/.medusa/server/src/admin/index.mjs +27 -0
- package/.medusa/server/src/modules/payload-sync/domain/contracts.js +35 -0
- package/.medusa/server/src/modules/payload-sync/domain/errors.js +54 -0
- package/.medusa/server/src/modules/payload-sync/domain/options.js +43 -0
- package/.medusa/server/src/modules/payload-sync/domain/reconciliation.js +31 -0
- package/.medusa/server/src/modules/payload-sync/domain/status.js +7 -0
- package/.medusa/server/src/modules/payload-sync/index.js +15 -0
- package/.medusa/server/src/modules/payload-sync/loaders/register-payload-client.js +108 -0
- package/.medusa/server/src/modules/payload-sync/service.js +213 -0
- package/.medusa/server/src/modules/payload-sync/services/payload-rest-client.js +326 -0
- package/.medusa/server/src/scripts/reconcile-payload-catalog.js +160 -0
- package/.medusa/server/src/subscribers/payload-sync-product-deleted.js +18 -0
- package/.medusa/server/src/subscribers/payload-sync-product-upserted.js +18 -0
- package/.medusa/server/src/subscribers/payload-sync-variant-deleted.js +18 -0
- package/.medusa/server/src/subscribers/payload-sync-variant-upserted.js +21 -0
- package/.medusa/server/src/types/index.js +18 -0
- package/.medusa/server/src/types/public.js +3 -0
- package/.medusa/server/src/workflows/payload-sync/authoritative-reconciliation.js +357 -0
- package/.medusa/server/src/workflows/payload-sync/external-step-failure.js +14 -0
- package/.medusa/server/src/workflows/payload-sync/reconcile-catalog.js +103 -0
- package/.medusa/server/src/workflows/payload-sync/sync-product.js +78 -0
- package/.medusa/server/src/workflows/payload-sync/sync-variant.js +129 -0
- package/.medusa/server/src/workflows/payload-sync/unpublish-product.js +36 -0
- package/.medusa/server/src/workflows/payload-sync/unpublish-variant.js +36 -0
- package/LICENSE +21 -0
- package/README.md +507 -0
- package/package.json +52 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withPayloadSyncCatalogLock = withPayloadSyncCatalogLock;
|
|
4
|
+
exports.reconcileAuthoritativeProduct = reconcileAuthoritativeProduct;
|
|
5
|
+
exports.reconcileAuthoritativeVariant = reconcileAuthoritativeVariant;
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const zod_1 = require("@medusajs/framework/zod");
|
|
8
|
+
const node_crypto_1 = require("node:crypto");
|
|
9
|
+
const payload_sync_1 = require("../../modules/payload-sync");
|
|
10
|
+
const errors_1 = require("../../modules/payload-sync/domain/errors");
|
|
11
|
+
const PAYLOAD_SYNC_CATALOG_LOCK_KEY = "payload-sync:catalog";
|
|
12
|
+
const PAYLOAD_SYNC_LOCK_ACQUISITION_TIMEOUT_MILLISECONDS = 15_000;
|
|
13
|
+
const PAYLOAD_SYNC_LOCK_ACQUISITION_RETRY_MILLISECONDS = 100;
|
|
14
|
+
const PAYLOAD_SYNC_LOCK_LEASE_SECONDS = 30;
|
|
15
|
+
const PAYLOAD_SYNC_LOCK_LEASE_MILLISECONDS = PAYLOAD_SYNC_LOCK_LEASE_SECONDS * 1_000;
|
|
16
|
+
const PAYLOAD_SYNC_LOCK_RENEWAL_INTERVAL_MILLISECONDS = 10_000;
|
|
17
|
+
const PAYLOAD_SYNC_LOCK_PROVIDER_CALL_TIMEOUT_MILLISECONDS = 10_000;
|
|
18
|
+
const ProductAggregateSchema = zod_1.z.object({
|
|
19
|
+
id: zod_1.z.string().min(1),
|
|
20
|
+
title: zod_1.z.string(),
|
|
21
|
+
handle: zod_1.z.string(),
|
|
22
|
+
status: zod_1.z.enum(["draft", "proposed", "published", "rejected"]),
|
|
23
|
+
variants: zod_1.z.array(zod_1.z.object({
|
|
24
|
+
id: zod_1.z.string().min(1),
|
|
25
|
+
title: zod_1.z.string(),
|
|
26
|
+
})),
|
|
27
|
+
});
|
|
28
|
+
const VariantParentSchema = zod_1.z.object({
|
|
29
|
+
id: zod_1.z.string().min(1),
|
|
30
|
+
title: zod_1.z.string(),
|
|
31
|
+
product: zod_1.z
|
|
32
|
+
.object({
|
|
33
|
+
id: zod_1.z.string().min(1),
|
|
34
|
+
title: zod_1.z.string(),
|
|
35
|
+
handle: zod_1.z.string(),
|
|
36
|
+
status: zod_1.z.enum(["draft", "proposed", "published", "rejected"]),
|
|
37
|
+
})
|
|
38
|
+
.nullable(),
|
|
39
|
+
});
|
|
40
|
+
async function withPayloadSyncCatalogLock(container, job) {
|
|
41
|
+
const firstAttempt = await runPayloadSyncCatalogLockAttempt(container, job);
|
|
42
|
+
if (firstAttempt.lifecycleFailure === null) {
|
|
43
|
+
return unwrapCatalogLockJobOutcome(firstAttempt.jobOutcome);
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
await runPayloadSyncCatalogLockAttempt(container, job);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
throw firstAttempt.lifecycleFailure;
|
|
50
|
+
}
|
|
51
|
+
throw firstAttempt.lifecycleFailure;
|
|
52
|
+
}
|
|
53
|
+
async function runPayloadSyncCatalogLockAttempt(container, job) {
|
|
54
|
+
const locking = container.resolve(utils_1.Modules.LOCKING);
|
|
55
|
+
const ownerId = `payload-sync:${(0, node_crypto_1.randomUUID)()}`;
|
|
56
|
+
const confirmedLeaseDeadline = await acquirePayloadSyncCatalogLock(locking, ownerId);
|
|
57
|
+
const renewalController = new AbortController();
|
|
58
|
+
let attemptFinished = false;
|
|
59
|
+
let renewalFailure = null;
|
|
60
|
+
const renewal = renewPayloadSyncCatalogLock(locking, ownerId, confirmedLeaseDeadline, renewalController.signal, () => attemptFinished).then((failure) => {
|
|
61
|
+
renewalFailure = failure;
|
|
62
|
+
});
|
|
63
|
+
let jobOutcome;
|
|
64
|
+
try {
|
|
65
|
+
jobOutcome = await Promise.resolve()
|
|
66
|
+
.then(async () => {
|
|
67
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
68
|
+
const service = container.resolve(payload_sync_1.PAYLOAD_SYNC_MODULE);
|
|
69
|
+
return await job({ query, service });
|
|
70
|
+
})
|
|
71
|
+
.then((value) => ({ succeeded: true, value }), (error) => ({ succeeded: false, error }));
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
renewalController.abort();
|
|
75
|
+
await renewal;
|
|
76
|
+
attemptFinished = true;
|
|
77
|
+
const releaseFailure = await releasePayloadSyncCatalogLock(locking, ownerId);
|
|
78
|
+
renewalFailure ??= releaseFailure;
|
|
79
|
+
}
|
|
80
|
+
if (renewalFailure !== null) {
|
|
81
|
+
return {
|
|
82
|
+
jobOutcome: requireCatalogLockJobOutcome(jobOutcome),
|
|
83
|
+
lifecycleFailure: renewalFailure,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
jobOutcome: requireCatalogLockJobOutcome(jobOutcome),
|
|
88
|
+
lifecycleFailure: null,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
function requireCatalogLockJobOutcome(jobOutcome) {
|
|
92
|
+
if (jobOutcome !== undefined) {
|
|
93
|
+
return jobOutcome;
|
|
94
|
+
}
|
|
95
|
+
throw lockLifecycleError("PAYLOAD_SYNC_LOCK_JOB_STATE_INVALID", "Payload sync catalog lock job did not produce an outcome.");
|
|
96
|
+
}
|
|
97
|
+
function unwrapCatalogLockJobOutcome(jobOutcome) {
|
|
98
|
+
if (!jobOutcome.succeeded) {
|
|
99
|
+
throw jobOutcome.error;
|
|
100
|
+
}
|
|
101
|
+
return jobOutcome.value;
|
|
102
|
+
}
|
|
103
|
+
async function acquirePayloadSyncCatalogLock(locking, ownerId) {
|
|
104
|
+
const deadline = Date.now() + PAYLOAD_SYNC_LOCK_ACQUISITION_TIMEOUT_MILLISECONDS;
|
|
105
|
+
while (true) {
|
|
106
|
+
const remainingMilliseconds = deadline - Date.now();
|
|
107
|
+
if (remainingMilliseconds <= 0) {
|
|
108
|
+
throw lockLifecycleError("PAYLOAD_SYNC_LOCK_ACQUISITION_FAILED", "Timed out acquiring the Payload sync catalog lock.");
|
|
109
|
+
}
|
|
110
|
+
const providerCallStartedAt = Date.now();
|
|
111
|
+
const acquisition = await observeLockProviderCall(async () => await locking.acquire(PAYLOAD_SYNC_CATALOG_LOCK_KEY, {
|
|
112
|
+
ownerId,
|
|
113
|
+
expire: PAYLOAD_SYNC_LOCK_LEASE_SECONDS,
|
|
114
|
+
}), remainingMilliseconds, async () => {
|
|
115
|
+
await releaseLateOwnerLock(locking, ownerId);
|
|
116
|
+
});
|
|
117
|
+
if (acquisition.status === "fulfilled") {
|
|
118
|
+
return providerCallStartedAt + PAYLOAD_SYNC_LOCK_LEASE_MILLISECONDS;
|
|
119
|
+
}
|
|
120
|
+
if (acquisition.status === "timed-out" ||
|
|
121
|
+
!isLockContentionError(acquisition.error)) {
|
|
122
|
+
throw lockLifecycleError("PAYLOAD_SYNC_LOCK_ACQUISITION_FAILED", acquisition.status === "timed-out"
|
|
123
|
+
? "Timed out acquiring the Payload sync catalog lock."
|
|
124
|
+
: "The Payload sync catalog locking provider failed during acquisition.");
|
|
125
|
+
}
|
|
126
|
+
const retryRemainingMilliseconds = deadline - Date.now();
|
|
127
|
+
if (retryRemainingMilliseconds <= 0) {
|
|
128
|
+
throw lockLifecycleError("PAYLOAD_SYNC_LOCK_ACQUISITION_FAILED", "Timed out acquiring the Payload sync catalog lock.");
|
|
129
|
+
}
|
|
130
|
+
await waitForLockLifecycle(Math.min(PAYLOAD_SYNC_LOCK_ACQUISITION_RETRY_MILLISECONDS, retryRemainingMilliseconds));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async function renewPayloadSyncCatalogLock(locking, ownerId, initialConfirmedLeaseDeadline, signal, isAttemptFinished) {
|
|
134
|
+
let confirmedLeaseDeadline = initialConfirmedLeaseDeadline;
|
|
135
|
+
while (await waitForLockLifecycle(PAYLOAD_SYNC_LOCK_RENEWAL_INTERVAL_MILLISECONDS, signal)) {
|
|
136
|
+
const providerCallStartedAt = Date.now();
|
|
137
|
+
if (providerCallStartedAt >= confirmedLeaseDeadline) {
|
|
138
|
+
return renewalLifecycleError();
|
|
139
|
+
}
|
|
140
|
+
const renewal = await observeLockProviderCall(async () => await locking.acquire(PAYLOAD_SYNC_CATALOG_LOCK_KEY, {
|
|
141
|
+
ownerId,
|
|
142
|
+
expire: PAYLOAD_SYNC_LOCK_LEASE_SECONDS,
|
|
143
|
+
}), PAYLOAD_SYNC_LOCK_PROVIDER_CALL_TIMEOUT_MILLISECONDS, async () => {
|
|
144
|
+
if (isAttemptFinished()) {
|
|
145
|
+
await releaseLateOwnerLock(locking, ownerId);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
if (renewal.status !== "fulfilled") {
|
|
149
|
+
return renewalLifecycleError();
|
|
150
|
+
}
|
|
151
|
+
if (Date.now() >= confirmedLeaseDeadline) {
|
|
152
|
+
await releaseLateOwnerLock(locking, ownerId);
|
|
153
|
+
return renewalLifecycleError();
|
|
154
|
+
}
|
|
155
|
+
confirmedLeaseDeadline =
|
|
156
|
+
providerCallStartedAt + PAYLOAD_SYNC_LOCK_LEASE_MILLISECONDS;
|
|
157
|
+
}
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
async function releasePayloadSyncCatalogLock(locking, ownerId) {
|
|
161
|
+
const release = await observeLockProviderCall(async () => await locking.release(PAYLOAD_SYNC_CATALOG_LOCK_KEY, {
|
|
162
|
+
ownerId,
|
|
163
|
+
}), PAYLOAD_SYNC_LOCK_PROVIDER_CALL_TIMEOUT_MILLISECONDS);
|
|
164
|
+
if (release.status === "fulfilled" && release.value) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
return lockLifecycleError("PAYLOAD_SYNC_LOCK_RELEASE_FAILED", "Failed to release the Payload sync catalog lock for its owner.");
|
|
168
|
+
}
|
|
169
|
+
function observeLockProviderCall(operation, timeoutMilliseconds, onLateSuccess) {
|
|
170
|
+
return new Promise((resolve) => {
|
|
171
|
+
let timedOut = false;
|
|
172
|
+
const timer = setTimeout(() => {
|
|
173
|
+
timedOut = true;
|
|
174
|
+
resolve({ status: "timed-out" });
|
|
175
|
+
}, timeoutMilliseconds);
|
|
176
|
+
timer.unref();
|
|
177
|
+
void Promise.resolve()
|
|
178
|
+
.then(operation)
|
|
179
|
+
.then((value) => {
|
|
180
|
+
if (timedOut) {
|
|
181
|
+
if (onLateSuccess !== undefined) {
|
|
182
|
+
void onLateSuccess(value).catch(() => undefined);
|
|
183
|
+
}
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
clearTimeout(timer);
|
|
187
|
+
resolve({ status: "fulfilled", value });
|
|
188
|
+
}, (error) => {
|
|
189
|
+
if (timedOut) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
clearTimeout(timer);
|
|
193
|
+
resolve({ status: "rejected", error });
|
|
194
|
+
});
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
async function releaseLateOwnerLock(locking, ownerId) {
|
|
198
|
+
await observeLockProviderCall(async () => await locking.release(PAYLOAD_SYNC_CATALOG_LOCK_KEY, { ownerId }), PAYLOAD_SYNC_LOCK_PROVIDER_CALL_TIMEOUT_MILLISECONDS);
|
|
199
|
+
}
|
|
200
|
+
function renewalLifecycleError() {
|
|
201
|
+
return lockLifecycleError("PAYLOAD_SYNC_LOCK_RENEWAL_FAILED", "Failed to renew the Payload sync catalog lock.");
|
|
202
|
+
}
|
|
203
|
+
function isLockContentionError(error) {
|
|
204
|
+
if (error instanceof utils_1.MedusaError &&
|
|
205
|
+
error.type === utils_1.MedusaError.Types.CONFLICT) {
|
|
206
|
+
return true;
|
|
207
|
+
}
|
|
208
|
+
if (!(error instanceof Error)) {
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
211
|
+
return (error.message ===
|
|
212
|
+
`Failed to acquire lock for key "${PAYLOAD_SYNC_CATALOG_LOCK_KEY}"` ||
|
|
213
|
+
error.message === `"${PAYLOAD_SYNC_CATALOG_LOCK_KEY}" is already locked.`);
|
|
214
|
+
}
|
|
215
|
+
function waitForLockLifecycle(milliseconds, signal) {
|
|
216
|
+
if (signal?.aborted) {
|
|
217
|
+
return Promise.resolve(false);
|
|
218
|
+
}
|
|
219
|
+
return new Promise((resolve) => {
|
|
220
|
+
const timer = setTimeout(() => {
|
|
221
|
+
signal?.removeEventListener("abort", stopWaiting);
|
|
222
|
+
resolve(true);
|
|
223
|
+
}, milliseconds);
|
|
224
|
+
timer.unref();
|
|
225
|
+
const stopWaiting = () => {
|
|
226
|
+
clearTimeout(timer);
|
|
227
|
+
signal?.removeEventListener("abort", stopWaiting);
|
|
228
|
+
resolve(false);
|
|
229
|
+
};
|
|
230
|
+
signal?.addEventListener("abort", stopWaiting, { once: true });
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
function lockLifecycleError(code, message) {
|
|
234
|
+
return new errors_1.PayloadSyncError(message, {
|
|
235
|
+
code,
|
|
236
|
+
retryable: true,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
async function reconcileAuthoritativeProduct(container, input) {
|
|
240
|
+
return await withPayloadSyncCatalogLock(container, async ({ query, service }) => {
|
|
241
|
+
const snapshot = await queryProductSnapshot(query, input.medusaId);
|
|
242
|
+
if (snapshot !== null) {
|
|
243
|
+
return await service.syncProductSnapshot(snapshot);
|
|
244
|
+
}
|
|
245
|
+
const drafted = await service.draftProductMirror(input.medusaId);
|
|
246
|
+
if (drafted !== null || input.fallbackSnapshot === undefined) {
|
|
247
|
+
return drafted;
|
|
248
|
+
}
|
|
249
|
+
return await service.syncProductSnapshot({
|
|
250
|
+
...input.fallbackSnapshot,
|
|
251
|
+
status: "draft",
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
async function reconcileAuthoritativeVariant(container, input) {
|
|
256
|
+
return await withPayloadSyncCatalogLock(container, async ({ query, service }) => {
|
|
257
|
+
const snapshot = await queryVariantSnapshot(query, input.medusaId);
|
|
258
|
+
if (snapshot === null) {
|
|
259
|
+
return await draftMissingVariant(query, service, input.medusaId, input.fallbackSnapshot);
|
|
260
|
+
}
|
|
261
|
+
let payloadParent = await service.findProductMirror(snapshot.product.id);
|
|
262
|
+
if (payloadParent === null) {
|
|
263
|
+
const parentSnapshot = await queryProductSnapshot(query, snapshot.product.id);
|
|
264
|
+
if (parentSnapshot === null) {
|
|
265
|
+
return await draftMissingVariant(query, service, input.medusaId, input.fallbackSnapshot);
|
|
266
|
+
}
|
|
267
|
+
const parentResult = await service.syncProductSnapshot(parentSnapshot);
|
|
268
|
+
payloadParent = parentResult.product;
|
|
269
|
+
}
|
|
270
|
+
return await service.syncVariantSnapshot({
|
|
271
|
+
variant: snapshot.variant,
|
|
272
|
+
payloadProductId: payloadParent.id,
|
|
273
|
+
productStatus: snapshot.product.status,
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
async function draftMissingVariant(query, service, medusaId, fallbackSnapshot) {
|
|
278
|
+
const drafted = await service.draftVariantMirror(medusaId);
|
|
279
|
+
if (drafted !== null || fallbackSnapshot === undefined) {
|
|
280
|
+
return drafted;
|
|
281
|
+
}
|
|
282
|
+
let payloadParent = await service.findProductMirror(fallbackSnapshot.product.id);
|
|
283
|
+
if (payloadParent === null) {
|
|
284
|
+
const currentParent = await queryProductSnapshot(query, fallbackSnapshot.product.id);
|
|
285
|
+
const parentResult = await service.syncProductSnapshot(currentParent ?? {
|
|
286
|
+
...fallbackSnapshot.product,
|
|
287
|
+
status: "draft",
|
|
288
|
+
variants: [],
|
|
289
|
+
});
|
|
290
|
+
payloadParent = parentResult.product;
|
|
291
|
+
}
|
|
292
|
+
return await service.syncVariantSnapshot({
|
|
293
|
+
variant: fallbackSnapshot.variant,
|
|
294
|
+
payloadProductId: payloadParent.id,
|
|
295
|
+
productStatus: "draft",
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
async function queryProductSnapshot(query, medusaId) {
|
|
299
|
+
const result = await query.graph({
|
|
300
|
+
entity: "product",
|
|
301
|
+
fields: [
|
|
302
|
+
"id",
|
|
303
|
+
"title",
|
|
304
|
+
"handle",
|
|
305
|
+
"status",
|
|
306
|
+
"variants.id",
|
|
307
|
+
"variants.title",
|
|
308
|
+
],
|
|
309
|
+
filters: { id: medusaId },
|
|
310
|
+
});
|
|
311
|
+
const candidate = result.data[0];
|
|
312
|
+
if (candidate === undefined) {
|
|
313
|
+
return null;
|
|
314
|
+
}
|
|
315
|
+
const parsed = ProductAggregateSchema.safeParse(candidate);
|
|
316
|
+
if (!parsed.success) {
|
|
317
|
+
throw invalidMedusaAggregateError("product", medusaId);
|
|
318
|
+
}
|
|
319
|
+
return parsed.data;
|
|
320
|
+
}
|
|
321
|
+
async function queryVariantSnapshot(query, medusaId) {
|
|
322
|
+
const result = await query.graph({
|
|
323
|
+
entity: "product_variant",
|
|
324
|
+
fields: [
|
|
325
|
+
"id",
|
|
326
|
+
"title",
|
|
327
|
+
"product.id",
|
|
328
|
+
"product.title",
|
|
329
|
+
"product.handle",
|
|
330
|
+
"product.status",
|
|
331
|
+
],
|
|
332
|
+
filters: { id: medusaId },
|
|
333
|
+
});
|
|
334
|
+
const candidate = result.data[0];
|
|
335
|
+
if (candidate === undefined) {
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
338
|
+
const parsed = VariantParentSchema.safeParse(candidate);
|
|
339
|
+
if (!parsed.success || parsed.data.product === null) {
|
|
340
|
+
throw invalidMedusaAggregateError("variant", medusaId);
|
|
341
|
+
}
|
|
342
|
+
return {
|
|
343
|
+
variant: {
|
|
344
|
+
id: parsed.data.id,
|
|
345
|
+
title: parsed.data.title,
|
|
346
|
+
},
|
|
347
|
+
product: parsed.data.product,
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
function invalidMedusaAggregateError(entityType, medusaId) {
|
|
351
|
+
return new errors_1.PayloadSyncError(`Medusa returned an invalid authoritative ${entityType} aggregate.`, {
|
|
352
|
+
code: "PAYLOAD_INVALID_MEDUSA_AGGREGATE",
|
|
353
|
+
retryable: false,
|
|
354
|
+
medusaId,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXRhdGl2ZS1yZWNvbmNpbGlhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvcGF5bG9hZC1zeW5jL2F1dGhvcml0YXRpdmUtcmVjb25jaWxpYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFvRkEsZ0VBaUJDO0FBaVdELHNFQTRCQztBQWVELHNFQWlEQztBQTdoQkQscURBSW1DO0FBQ25DLGlEQUE0QztBQUM1Qyw2Q0FBeUM7QUFFekMsNkRBQWlFO0FBTWpFLHFFQUE0RTtBQUc1RSxNQUFNLDZCQUE2QixHQUFHLHNCQUFzQixDQUFDO0FBQzdELE1BQU0sa0RBQWtELEdBQUcsTUFBTSxDQUFDO0FBQ2xFLE1BQU0sZ0RBQWdELEdBQUcsR0FBRyxDQUFDO0FBQzdELE1BQU0sK0JBQStCLEdBQUcsRUFBRSxDQUFDO0FBQzNDLE1BQU0sb0NBQW9DLEdBQ3hDLCtCQUErQixHQUFHLEtBQUssQ0FBQztBQUMxQyxNQUFNLCtDQUErQyxHQUFHLE1BQU0sQ0FBQztBQUMvRCxNQUFNLG9EQUFvRCxHQUFHLE1BQU0sQ0FBQztBQUVwRSxNQUFNLHNCQUFzQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDdEMsRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3JCLEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2pCLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO0lBQ2xCLE1BQU0sRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUQsUUFBUSxFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQ2YsT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFD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
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handlePayloadSyncExternalStepFailure = handlePayloadSyncExternalStepFailure;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const errors_1 = require("../../modules/payload-sync/domain/errors");
|
|
6
|
+
function handlePayloadSyncExternalStepFailure(error, logger, context) {
|
|
7
|
+
const safeLog = (0, errors_1.formatPayloadSyncLog)(error, context);
|
|
8
|
+
logger.error(safeLog);
|
|
9
|
+
if (error instanceof errors_1.PayloadSyncError && !error.retryable) {
|
|
10
|
+
return workflows_sdk_1.StepResponse.permanentFailure(safeLog);
|
|
11
|
+
}
|
|
12
|
+
throw error;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXh0ZXJuYWwtc3RlcC1mYWlsdXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9wYXlsb2FkLXN5bmMvZXh0ZXJuYWwtc3RlcC1mYWlsdXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBU0Esb0ZBYUM7QUFyQkQscUVBQWlFO0FBRWpFLHFFQUlrRDtBQUVsRCxTQUFnQixvQ0FBb0MsQ0FDbEQsS0FBYyxFQUNkLE1BQTZCLEVBQzdCLE9BQThCO0lBRTlCLE1BQU0sT0FBTyxHQUFHLElBQUEsNkJBQW9CLEVBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFdEIsSUFBSSxLQUFLLFlBQVkseUJBQWdCLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDMUQsT0FBTyw0QkFBWSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLEtBQUssQ0FBQztBQUNkLENBQUMifQ==
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reconcileVariantMirrorPageWorkflow = exports.reconcileProductMirrorPageWorkflow = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const reconciliation_1 = require("../../modules/payload-sync/domain/reconciliation");
|
|
7
|
+
const authoritative_reconciliation_1 = require("./authoritative-reconciliation");
|
|
8
|
+
const external_step_failure_1 = require("./external-step-failure");
|
|
9
|
+
const reconcileProductMirrorPageStep = (0, workflows_sdk_1.createStep)({
|
|
10
|
+
name: "payload-sync-reconcile-product-mirror-page-step",
|
|
11
|
+
maxRetries: 1,
|
|
12
|
+
retryInterval: 2,
|
|
13
|
+
noCompensation: true,
|
|
14
|
+
}, async (input, context) => {
|
|
15
|
+
const logger = context.container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
16
|
+
try {
|
|
17
|
+
return new workflows_sdk_1.StepResponse(await (0, authoritative_reconciliation_1.withPayloadSyncCatalogLock)(context.container, async ({ service, query }) => await reconcileMirrorPage(input, service, query, "product")));
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
(0, external_step_failure_1.handlePayloadSyncExternalStepFailure)(error, logger, {
|
|
21
|
+
operation: "reconcile-product-orphans",
|
|
22
|
+
entityType: "product",
|
|
23
|
+
workflowName: "payload-sync-reconcile-product-mirror-page",
|
|
24
|
+
workflowId: context.workflowId,
|
|
25
|
+
attempt: context.attempt,
|
|
26
|
+
idempotencyKey: context.idempotencyKey,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
const reconcileVariantMirrorPageStep = (0, workflows_sdk_1.createStep)({
|
|
31
|
+
name: "payload-sync-reconcile-variant-mirror-page-step",
|
|
32
|
+
maxRetries: 1,
|
|
33
|
+
retryInterval: 2,
|
|
34
|
+
noCompensation: true,
|
|
35
|
+
}, async (input, context) => {
|
|
36
|
+
const logger = context.container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
37
|
+
try {
|
|
38
|
+
return new workflows_sdk_1.StepResponse(await (0, authoritative_reconciliation_1.withPayloadSyncCatalogLock)(context.container, async ({ service, query }) => await reconcileMirrorPage(input, service, query, "variant")));
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
(0, external_step_failure_1.handlePayloadSyncExternalStepFailure)(error, logger, {
|
|
42
|
+
operation: "reconcile-variant-orphans",
|
|
43
|
+
entityType: "variant",
|
|
44
|
+
workflowName: "payload-sync-reconcile-variant-mirror-page",
|
|
45
|
+
workflowId: context.workflowId,
|
|
46
|
+
attempt: context.attempt,
|
|
47
|
+
idempotencyKey: context.idempotencyKey,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
exports.reconcileProductMirrorPageWorkflow = (0, workflows_sdk_1.createWorkflow)("payload-sync-reconcile-product-mirror-page", function (input) {
|
|
52
|
+
const result = reconcileProductMirrorPageStep(input);
|
|
53
|
+
return new workflows_sdk_1.WorkflowResponse(result);
|
|
54
|
+
});
|
|
55
|
+
exports.reconcileVariantMirrorPageWorkflow = (0, workflows_sdk_1.createWorkflow)("payload-sync-reconcile-variant-mirror-page", function (input) {
|
|
56
|
+
const result = reconcileVariantMirrorPageStep(input);
|
|
57
|
+
return new workflows_sdk_1.WorkflowResponse(result);
|
|
58
|
+
});
|
|
59
|
+
async function reconcileMirrorPage(input, service, query, mirrorType) {
|
|
60
|
+
const page = await listMirrorPage(service, mirrorType, input);
|
|
61
|
+
const mirroredIds = page.docs.map(({ medusaId }) => medusaId);
|
|
62
|
+
const currentIds = new Set();
|
|
63
|
+
if (mirroredIds.length > 0) {
|
|
64
|
+
const current = await query.graph({
|
|
65
|
+
entity: mirrorType === "product" ? "product" : "product_variant",
|
|
66
|
+
fields: ["id"],
|
|
67
|
+
filters: { id: mirroredIds },
|
|
68
|
+
});
|
|
69
|
+
for (const document of current.data) {
|
|
70
|
+
currentIds.add(readId(document));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const staleIds = new Set((0, reconciliation_1.findStaleIds)(mirroredIds, currentIds));
|
|
74
|
+
const draftedIds = page.docs
|
|
75
|
+
.filter(({ medusaId, _status }) => _status === "published" && staleIds.has(medusaId))
|
|
76
|
+
.map(({ medusaId }) => medusaId);
|
|
77
|
+
if (mirrorType === "product") {
|
|
78
|
+
await service.draftProductMirrorIds(draftedIds);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
await service.draftVariantMirrorIds(draftedIds);
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
nextPage: page.nextPage,
|
|
85
|
+
draftedIds,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function listMirrorPage(service, mirrorType, input) {
|
|
89
|
+
return mirrorType === "product"
|
|
90
|
+
? service.listProductMirrorPage(input.page, input.limit)
|
|
91
|
+
: service.listVariantMirrorPage(input.page, input.limit);
|
|
92
|
+
}
|
|
93
|
+
function readId(value) {
|
|
94
|
+
if (typeof value !== "object" ||
|
|
95
|
+
value === null ||
|
|
96
|
+
!("id" in value) ||
|
|
97
|
+
typeof value.id !== "string" ||
|
|
98
|
+
value.id.length === 0) {
|
|
99
|
+
throw new Error("Medusa mirror reconciliation query returned an invalid ID.");
|
|
100
|
+
}
|
|
101
|
+
return value.id;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb25jaWxlLWNhdGFsb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3BheWxvYWQtc3luYy9yZWNvbmNpbGUtY2F0YWxvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxRUFLMkM7QUFDM0MscURBQXNFO0FBTXRFLHFGQUFnRjtBQUVoRixpRkFBNEU7QUFDNUUsbUVBQStFO0FBYy9FLE1BQU0sOEJBQThCLEdBQUcsSUFBQSwwQkFBVSxFQUMvQztJQUNFLElBQUksRUFBRSxpREFBaUQ7SUFDdkQsVUFBVSxFQUFFLENBQUM7SUFDYixhQUFhLEVBQUUsQ0FBQztJQUNoQixjQUFjLEVBQUUsSUFBSTtDQUNyQixFQUNELEtBQUssRUFBRSxLQUErQixFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ2pELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTNFLElBQUksQ0FBQztRQUNILE9BQU8sSUFBSSw0QkFBWSxDQUNyQixNQUFNLElBQUEseURBQTBCLEVBQzlCLE9BQU8sQ0FBQyxTQUFTLEVBQ2pCLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQzNCLE1BQU0sbUJBQW1CLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQzlELENBQ0YsQ0FBQztJQUNKLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBQSw0REFBb0MsRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO1lBQ2xELFNBQVMsRUFBRSwyQkFBMkI7WUFDdEMsVUFBVSxFQUFFLFNBQVM7WUFDckIsWUFBWSxFQUFFLDRDQUE0QztZQUMxRCxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7WUFDOUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLGNB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
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.syncProductToPayloadWorkflow = void 0;
|
|
4
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
5
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const errors_1 = require("../../modules/payload-sync/domain/errors");
|
|
8
|
+
const authoritative_reconciliation_1 = require("./authoritative-reconciliation");
|
|
9
|
+
const syncProductMirrorStep = (0, workflows_sdk_1.createStep)({
|
|
10
|
+
name: "payload-sync-sync-product-mirror",
|
|
11
|
+
maxRetries: 1,
|
|
12
|
+
retryInterval: 2,
|
|
13
|
+
noCompensation: true,
|
|
14
|
+
}, async (input, { container, workflowId, attempt, idempotencyKey }) => {
|
|
15
|
+
const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
16
|
+
try {
|
|
17
|
+
return new workflows_sdk_1.StepResponse(await (0, authoritative_reconciliation_1.reconcileAuthoritativeProduct)(container, {
|
|
18
|
+
medusaId: input.snapshot.id,
|
|
19
|
+
fallbackSnapshot: input.snapshot,
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
const safeLog = (0, errors_1.formatPayloadSyncLog)(error, {
|
|
24
|
+
operation: "sync-product",
|
|
25
|
+
entityType: "product",
|
|
26
|
+
medusaId: input.snapshot.id,
|
|
27
|
+
eventName: input.eventName,
|
|
28
|
+
workflowName: "payload-sync-sync-product",
|
|
29
|
+
workflowId,
|
|
30
|
+
attempt,
|
|
31
|
+
idempotencyKey,
|
|
32
|
+
});
|
|
33
|
+
logger.error(safeLog);
|
|
34
|
+
if (isPermanentPayloadSyncError(error)) {
|
|
35
|
+
return workflows_sdk_1.StepResponse.permanentFailure(safeLog);
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
exports.syncProductToPayloadWorkflow = (0, workflows_sdk_1.createWorkflow)("payload-sync-sync-product", function (input) {
|
|
41
|
+
const { data: products } = (0, core_flows_1.useQueryGraphStep)({
|
|
42
|
+
entity: "product",
|
|
43
|
+
fields: [
|
|
44
|
+
"id",
|
|
45
|
+
"title",
|
|
46
|
+
"handle",
|
|
47
|
+
"status",
|
|
48
|
+
"variants.id",
|
|
49
|
+
"variants.title",
|
|
50
|
+
],
|
|
51
|
+
filters: { id: input.id },
|
|
52
|
+
}).config({ name: "payload-sync-query-product-aggregate" });
|
|
53
|
+
const snapshot = (0, workflows_sdk_1.transform)({ productId: input.id, products }, ({ productId, products }) => {
|
|
54
|
+
const product = products[0];
|
|
55
|
+
if (product === undefined) {
|
|
56
|
+
return workflows_sdk_1.StepResponse.permanentFailure(`No current Medusa product found for ID ${productId}.`);
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
id: product.id,
|
|
60
|
+
title: product.title,
|
|
61
|
+
handle: product.handle,
|
|
62
|
+
status: product.status,
|
|
63
|
+
variants: product.variants.map((variant) => ({
|
|
64
|
+
id: variant.id,
|
|
65
|
+
title: variant.title,
|
|
66
|
+
})),
|
|
67
|
+
};
|
|
68
|
+
});
|
|
69
|
+
const result = syncProductMirrorStep({
|
|
70
|
+
snapshot,
|
|
71
|
+
eventName: input.eventName,
|
|
72
|
+
});
|
|
73
|
+
return new workflows_sdk_1.WorkflowResponse(result);
|
|
74
|
+
});
|
|
75
|
+
function isPermanentPayloadSyncError(error) {
|
|
76
|
+
return error instanceof errors_1.PayloadSyncError && !error.retryable;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1wcm9kdWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9wYXlsb2FkLXN5bmMvc3luYy1wcm9kdWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDREQUFnRTtBQUNoRSxxRUFNMkM7QUFDM0MscURBQXNFO0FBTXRFLHFFQUdrRDtBQUNsRCxpRkFBK0U7QUF1Qi9FLE1BQU0scUJBQXFCLEdBQUcsSUFBQSwwQkFBVSxFQUN0QztJQUNFLElBQUksRUFBRSxrQ0FBa0M7SUFDeEMsVUFBVSxFQUFFLENBQUM7SUFDYixhQUFhLEVBQUUsQ0FBQztJQUNoQixjQUFjLEVBQUUsSUFBSTtDQUNyQixFQUNELEtBQUssRUFDSCxLQUFpQyxFQUNqQyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUNsRCxFQUFFO0lBQ0YsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVuRSxJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksNEJBQVksQ0FDckIsTUFBTSxJQUFBLDREQUE2QixFQUFDLFNBQVMsRUFBRTtZQUM3QyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxRQUFRO1NBQ2pDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixNQUFNLE9BQU8sR0FBRyxJQUFBLDZCQUFvQixFQUFDLEtBQUssRUFBRTtZQUMxQyxTQUFTLEVBQUUsY0FBYztZQUN6QixVQUFVLEVBQUUsU0FBUztZQUNyQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixZQUFZLEVBQUUsMkJBQTJCO1lBQ3pDLFVBQVU7WUFDVixPQUFPO1lBQ1AsY0FBYztTQUNmLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEIsSUFBSSwyQkFBMkIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sNEJBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsTUFBTSxLQUFLLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQyxDQUNGLENBQUM7QUFFVyxRQUFBLDRCQUE0QixHQUFHLElBQUEsOEJBQWMsRUFJeEQsMkJBQTJCLEVBQUUsVUFBVSxLQUFLO0lBQzVDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBQSw4QkFBaUIsRUFBQztRQUMzQyxNQUFNLEVBQUUsU0FBUztRQUNqQixNQUFNLEVBQUU7WUFDTixJQUFJO1lBQ0osT0FBTztZQUNQLFFBQVE7WUFDUixRQUFRO1lBQ1IsYUFBYTtZQUNiLGdCQUFnQjtTQUNqQjtRQUNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO0tBQzFCLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQyxDQUFDO0lBRTVELE1BQU0sUUFBUSxHQUFHLElBQUEseUJBQVMsRUFPeEIsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFDakMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBeUIsRUFBRTtRQUNqRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUIsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUIsT0FBTyw0QkFBWSxDQUFDLGdCQUFnQixDQUNsQywwQ0FBMEMsU0FBUyxHQUFHLENBQ3ZELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTztZQUNMLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNkLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztZQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDM0MsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO2dCQUNkLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSzthQUNyQixDQUFDLENBQUM7U0FDSixDQUFDO0lBQ0osQ0FBQyxDQUNGLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQztRQUNuQyxRQUFRO1FBQ1IsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO0tBQzNCLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsQ0FBQztBQUVILFNBQVMsMkJBQTJCLENBQUMsS0FBYztJQUNqRCxPQUFPLEtBQUssWUFBWSx5QkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7QUFDL0QsQ0FBQyJ9
|