@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.
Files changed (28) hide show
  1. package/.medusa/server/src/admin/index.js +26 -0
  2. package/.medusa/server/src/admin/index.mjs +27 -0
  3. package/.medusa/server/src/modules/payload-sync/domain/contracts.js +35 -0
  4. package/.medusa/server/src/modules/payload-sync/domain/errors.js +54 -0
  5. package/.medusa/server/src/modules/payload-sync/domain/options.js +43 -0
  6. package/.medusa/server/src/modules/payload-sync/domain/reconciliation.js +31 -0
  7. package/.medusa/server/src/modules/payload-sync/domain/status.js +7 -0
  8. package/.medusa/server/src/modules/payload-sync/index.js +15 -0
  9. package/.medusa/server/src/modules/payload-sync/loaders/register-payload-client.js +108 -0
  10. package/.medusa/server/src/modules/payload-sync/service.js +213 -0
  11. package/.medusa/server/src/modules/payload-sync/services/payload-rest-client.js +326 -0
  12. package/.medusa/server/src/scripts/reconcile-payload-catalog.js +160 -0
  13. package/.medusa/server/src/subscribers/payload-sync-product-deleted.js +18 -0
  14. package/.medusa/server/src/subscribers/payload-sync-product-upserted.js +18 -0
  15. package/.medusa/server/src/subscribers/payload-sync-variant-deleted.js +18 -0
  16. package/.medusa/server/src/subscribers/payload-sync-variant-upserted.js +21 -0
  17. package/.medusa/server/src/types/index.js +18 -0
  18. package/.medusa/server/src/types/public.js +3 -0
  19. package/.medusa/server/src/workflows/payload-sync/authoritative-reconciliation.js +357 -0
  20. package/.medusa/server/src/workflows/payload-sync/external-step-failure.js +14 -0
  21. package/.medusa/server/src/workflows/payload-sync/reconcile-catalog.js +103 -0
  22. package/.medusa/server/src/workflows/payload-sync/sync-product.js +78 -0
  23. package/.medusa/server/src/workflows/payload-sync/sync-variant.js +129 -0
  24. package/.medusa/server/src/workflows/payload-sync/unpublish-product.js +36 -0
  25. package/.medusa/server/src/workflows/payload-sync/unpublish-variant.js +36 -0
  26. package/LICENSE +21 -0
  27. package/README.md +507 -0
  28. package/package.json +52 -0
@@ -0,0 +1,326 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PayloadRestClient = void 0;
4
+ const zod_1 = require("@medusajs/framework/zod");
5
+ const contracts_1 = require("../domain/contracts");
6
+ const errors_1 = require("../domain/errors");
7
+ const MAX_RESPONSE_EXCERPT_LENGTH = 512;
8
+ const MAX_SUCCESS_RESPONSE_BYTES = 8 * 1024 * 1024;
9
+ const findByMedusaIdResponseSchema = zod_1.z.object({
10
+ docs: zod_1.z.array(contracts_1.MirrorDocumentSchema),
11
+ });
12
+ const mirrorWriteEnvelopeSchema = zod_1.z.object({
13
+ doc: contracts_1.MirrorDocumentSchema,
14
+ });
15
+ const mirrorWriteResponseSchema = zod_1.z.preprocess((response) => ({
16
+ representation: ownsDoc(response) ? "envelope" : "document",
17
+ response,
18
+ }), zod_1.z
19
+ .discriminatedUnion("representation", [
20
+ zod_1.z.object({
21
+ representation: zod_1.z.literal("envelope"),
22
+ response: mirrorWriteEnvelopeSchema,
23
+ }),
24
+ zod_1.z.object({
25
+ representation: zod_1.z.literal("document"),
26
+ response: contracts_1.MirrorDocumentSchema,
27
+ }),
28
+ ])
29
+ .transform((parsed) => parsed.representation === "envelope"
30
+ ? parsed.response.doc
31
+ : parsed.response));
32
+ const uniqueMedusaIdValidationErrorSchema = zod_1.z.object({
33
+ errors: zod_1.z.tuple([
34
+ zod_1.z.object({
35
+ name: zod_1.z.literal("ValidationError"),
36
+ data: zod_1.z.object({
37
+ collection: zod_1.z.string(),
38
+ errors: zod_1.z.tuple([
39
+ zod_1.z.object({
40
+ path: zod_1.z.literal("medusaId"),
41
+ }),
42
+ ]),
43
+ }),
44
+ }),
45
+ ]),
46
+ });
47
+ class PayloadRestClient {
48
+ constructor(options, fetchImpl = globalThis.fetch) {
49
+ this.options = options;
50
+ this.fetchImpl = fetchImpl;
51
+ this.origin = new URL(options.payloadUrl).origin;
52
+ }
53
+ async requestJson(path, init, schema) {
54
+ const controller = new AbortController();
55
+ let timedOut = false;
56
+ const timeout = setTimeout(() => {
57
+ timedOut = true;
58
+ controller.abort();
59
+ }, this.options.requestTimeoutMs);
60
+ const { body, headers: suppliedHeaders, signal: suppliedSignal, ...requestInit } = init;
61
+ const headers = new Headers(suppliedHeaders);
62
+ headers.set("Authorization", `${this.options.payloadAuthCollection} API-Key ${this.options.payloadApiKey}`);
63
+ headers.set("Accept", "application/json");
64
+ if (body === undefined || body === null) {
65
+ headers.delete("Content-Type");
66
+ }
67
+ else {
68
+ headers.set("Content-Type", "application/json");
69
+ }
70
+ const abortSuppliedRequest = () => controller.abort();
71
+ suppliedSignal?.addEventListener("abort", abortSuppliedRequest, { once: true });
72
+ try {
73
+ const url = this.urlFor(path);
74
+ const collection = this.collectionFor(url);
75
+ const response = await this.fetchImpl(url, {
76
+ ...requestInit,
77
+ body,
78
+ headers,
79
+ signal: controller.signal,
80
+ });
81
+ if (!response.ok) {
82
+ throw await this.httpError(response, collection);
83
+ }
84
+ const responseText = await this.successResponseText(response, collection);
85
+ let responseBody;
86
+ try {
87
+ responseBody = JSON.parse(responseText);
88
+ }
89
+ catch {
90
+ throw this.invalidResponseError(responseText, collection);
91
+ }
92
+ const parsed = schema.safeParse(responseBody);
93
+ if (!parsed.success) {
94
+ throw this.invalidResponseError(responseText, collection);
95
+ }
96
+ return parsed.data;
97
+ }
98
+ catch (error) {
99
+ if (error instanceof errors_1.PayloadSyncError) {
100
+ throw error;
101
+ }
102
+ if (timedOut || isAbortError(error)) {
103
+ throw new errors_1.PayloadSyncError("Payload request timed out.", {
104
+ code: "PAYLOAD_TIMEOUT",
105
+ retryable: true,
106
+ collection: this.collectionForPath(path),
107
+ });
108
+ }
109
+ throw new errors_1.PayloadSyncError("Payload network request failed.", {
110
+ code: "PAYLOAD_NETWORK_ERROR",
111
+ retryable: true,
112
+ collection: this.collectionForPath(path),
113
+ });
114
+ }
115
+ finally {
116
+ clearTimeout(timeout);
117
+ suppliedSignal?.removeEventListener("abort", abortSuppliedRequest);
118
+ }
119
+ }
120
+ async findByMedusaId(collection, medusaId) {
121
+ const query = new URLSearchParams();
122
+ query.set("depth", "0");
123
+ query.set("limit", "2");
124
+ query.set("where[medusaId][equals]", medusaId);
125
+ const response = await this.requestJson(this.collectionPath(collection, query), { method: "GET" }, findByMedusaIdResponseSchema);
126
+ if (response.docs.length >= 2) {
127
+ throw new errors_1.PayloadSyncError("Payload contains duplicate Medusa IDs.", {
128
+ code: "PAYLOAD_DUPLICATE_MEDUSA_ID",
129
+ retryable: false,
130
+ collection,
131
+ medusaId,
132
+ });
133
+ }
134
+ return response.docs[0] ?? null;
135
+ }
136
+ createDocument(collection, body) {
137
+ return this.requestJson(this.collectionPath(collection), { method: "POST", body: JSON.stringify(body) }, mirrorWriteResponseSchema);
138
+ }
139
+ updateDocument(collection, id, body) {
140
+ return this.requestJson(`${this.collectionPath(collection)}/${encodeURIComponent(String(id))}`, { method: "PATCH", body: JSON.stringify(body) }, mirrorWriteResponseSchema);
141
+ }
142
+ async listDocuments(input) {
143
+ const query = new URLSearchParams(input.where);
144
+ query.set("page", String(input.page));
145
+ query.set("limit", String(input.limit));
146
+ query.set("sort", input.sort);
147
+ return await this.requestJson(this.collectionPath(input.collection, query), { method: "GET" }, payloadPageSchema(input.schema));
148
+ }
149
+ getAccess() {
150
+ return this.requestJson("/api/access", { method: "GET" }, contracts_1.PayloadAccessResponseSchema);
151
+ }
152
+ collectionPath(collection, query) {
153
+ const path = `/api/${encodeURIComponent(collection)}`;
154
+ return query === undefined || query.size === 0 ? path : `${path}?${query.toString()}`;
155
+ }
156
+ urlFor(path) {
157
+ if (!path.startsWith("/api/")) {
158
+ throw invalidRequestPathError();
159
+ }
160
+ const url = new URL(path, this.origin);
161
+ if (url.origin !== this.origin || !url.pathname.startsWith("/api/")) {
162
+ throw invalidRequestPathError();
163
+ }
164
+ return url;
165
+ }
166
+ collectionFor(url) {
167
+ let collection;
168
+ try {
169
+ collection = decodeURIComponent(url.pathname.slice("/api/".length).split("/")[0]);
170
+ }
171
+ catch {
172
+ return undefined;
173
+ }
174
+ return collection === this.options.collections.product ||
175
+ collection === this.options.collections.variant
176
+ ? collection
177
+ : undefined;
178
+ }
179
+ collectionForPath(path) {
180
+ try {
181
+ return this.collectionFor(this.urlFor(path));
182
+ }
183
+ catch {
184
+ return undefined;
185
+ }
186
+ }
187
+ async httpError(response, collection) {
188
+ const responseText = await this.responseExcerptText(response);
189
+ const excerpt = this.safeExcerpt(responseText);
190
+ const status = response.status;
191
+ const retryable = status === 408 || status === 429 || status >= 500;
192
+ const suffix = excerpt.length > 0 ? ` Response: ${excerpt}` : "";
193
+ const code = status === 400 &&
194
+ collection !== undefined &&
195
+ isUniqueMedusaIdValidationError(responseText, collection)
196
+ ? "PAYLOAD_UNIQUE_MEDUSA_ID_CONFLICT"
197
+ : `PAYLOAD_HTTP_${status}`;
198
+ return new errors_1.PayloadSyncError(`Payload returned HTTP ${status}.${suffix}`, {
199
+ code,
200
+ retryable,
201
+ httpStatus: status,
202
+ collection,
203
+ });
204
+ }
205
+ invalidResponseError(responseText, collection) {
206
+ const excerpt = this.safeExcerpt(responseText);
207
+ const suffix = excerpt.length > 0 ? ` Response: ${excerpt}` : "";
208
+ return new errors_1.PayloadSyncError(`Payload returned an invalid response.${suffix}`, {
209
+ code: "PAYLOAD_INVALID_RESPONSE",
210
+ retryable: false,
211
+ collection,
212
+ });
213
+ }
214
+ async successResponseText(response, collection) {
215
+ if (response.body === null) {
216
+ return "";
217
+ }
218
+ const reader = response.body.getReader();
219
+ const chunks = [];
220
+ let length = 0;
221
+ try {
222
+ while (true) {
223
+ const { done, value } = await reader.read();
224
+ if (done) {
225
+ break;
226
+ }
227
+ if (length + value.byteLength > MAX_SUCCESS_RESPONSE_BYTES) {
228
+ throw new errors_1.PayloadSyncError("Payload response exceeded the allowed size.", {
229
+ code: "PAYLOAD_RESPONSE_TOO_LARGE",
230
+ retryable: false,
231
+ collection,
232
+ });
233
+ }
234
+ chunks.push(value);
235
+ length += value.byteLength;
236
+ }
237
+ }
238
+ catch (error) {
239
+ await reader.cancel().catch(() => undefined);
240
+ throw error;
241
+ }
242
+ const body = new Uint8Array(length);
243
+ let offset = 0;
244
+ for (const chunk of chunks) {
245
+ body.set(chunk, offset);
246
+ offset += chunk.byteLength;
247
+ }
248
+ return new TextDecoder().decode(body);
249
+ }
250
+ async responseExcerptText(response) {
251
+ if (response.body === null) {
252
+ return "";
253
+ }
254
+ const reader = response.body.getReader();
255
+ const limit = MAX_RESPONSE_EXCERPT_LENGTH + Buffer.byteLength(this.options.payloadApiKey);
256
+ const chunks = [];
257
+ let length = 0;
258
+ try {
259
+ while (length < limit) {
260
+ const { done, value } = await reader.read();
261
+ if (done) {
262
+ break;
263
+ }
264
+ const remaining = limit - length;
265
+ const chunk = value.byteLength > remaining ? value.slice(0, remaining) : value;
266
+ chunks.push(chunk);
267
+ length += chunk.byteLength;
268
+ if (chunk.byteLength < value.byteLength) {
269
+ break;
270
+ }
271
+ }
272
+ }
273
+ catch {
274
+ return "";
275
+ }
276
+ finally {
277
+ await reader.cancel().catch(() => undefined);
278
+ }
279
+ const excerptBytes = new Uint8Array(length);
280
+ let offset = 0;
281
+ for (const chunk of chunks) {
282
+ excerptBytes.set(chunk, offset);
283
+ offset += chunk.byteLength;
284
+ }
285
+ return new TextDecoder().decode(excerptBytes);
286
+ }
287
+ safeExcerpt(value) {
288
+ return (0, errors_1.redactPayloadSyncText)(value, [this.options.payloadApiKey]).slice(0, MAX_RESPONSE_EXCERPT_LENGTH);
289
+ }
290
+ }
291
+ exports.PayloadRestClient = PayloadRestClient;
292
+ function payloadPageSchema(schema) {
293
+ return zod_1.z.object({
294
+ docs: zod_1.z.array(schema),
295
+ page: zod_1.z.number(),
296
+ totalPages: zod_1.z.number(),
297
+ hasNextPage: zod_1.z.boolean(),
298
+ nextPage: zod_1.z.number().nullable(),
299
+ });
300
+ }
301
+ function ownsDoc(value) {
302
+ return (typeof value === "object" &&
303
+ value !== null &&
304
+ Object.prototype.hasOwnProperty.call(value, "doc"));
305
+ }
306
+ function invalidRequestPathError() {
307
+ return new errors_1.PayloadSyncError("Payload request path must stay within the configured API origin.", {
308
+ code: "PAYLOAD_INVALID_REQUEST_PATH",
309
+ retryable: false,
310
+ });
311
+ }
312
+ function isUniqueMedusaIdValidationError(responseText, collection) {
313
+ let body;
314
+ try {
315
+ body = JSON.parse(responseText);
316
+ }
317
+ catch {
318
+ return false;
319
+ }
320
+ const parsed = uniqueMedusaIdValidationErrorSchema.safeParse(body);
321
+ return parsed.success && parsed.data.errors[0].data.collection === collection;
322
+ }
323
+ function isAbortError(error) {
324
+ return error instanceof DOMException && error.name === "AbortError";
325
+ }
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC1yZXN0LWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3BheWxvYWQtc3luYy9zZXJ2aWNlcy9wYXlsb2FkLXJlc3QtY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLGlEQUEyQztBQUUzQyxtREFRNEI7QUFDNUIsNkNBQTBFO0FBRzFFLE1BQU0sMkJBQTJCLEdBQUcsR0FBRyxDQUFBO0FBQ3ZDLE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUE7QUFFbEQsTUFBTSw0QkFBNEIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQzVDLElBQUksRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLGdDQUFvQixDQUFDO0NBQ3BDLENBQUMsQ0FBQTtBQUNGLE1BQU0seUJBQXlCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN6QyxHQUFHLEVBQUUsZ0NBQW9CO0NBQzFCLENBQUMsQ0FBQTtBQUNGLE1BQU0seUJBQXlCLEdBQUcsT0FBQyxDQUFDLFVBQVUsQ0FDNUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDYixjQUFjLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVU7SUFDM0QsUUFBUTtDQUNULENBQUMsRUFDRixPQUFDO0tBQ0Usa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUU7SUFDcEMsT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNQLGNBQWMsRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxRQUFRLEVBQUUseUJBQXlCO0tBQ3BDLENBQUM7SUFDRixPQUFDLENBQUMsTUFBTSxDQUFDO1FBQ1AsY0FBYyxFQUFFLE9BQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3JDLFFBQVEsRUFBRSxnQ0FBb0I7S0FDL0IsQ0FBQztDQUNILENBQUM7S0FDRCxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNwQixNQUFNLENBQUMsY0FBYyxLQUFLLFVBQVU7SUFDbEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRztJQUNyQixDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDcEIsQ0FDSixDQUFBO0FBQ0QsTUFBTSxtQ0FBbUMsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDO0lBQ25ELE1BQU0sRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDO1FBQ2QsT0FBQyxDQUFDLE1BQU0sQ0FBQztZQUNQLElBQUksRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1lBQ2xDLElBQUksRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNiLFVBQVUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFO2dCQUN0QixNQUFNLEVBQUUsT0FBQyxDQUFDLEtBQUssQ0FBQztvQkFDZCxPQUFDLENBQUMsTUFBTSxDQUFDO3dCQUNQLElBQUksRUFBRSxPQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztxQkFDNUIsQ0FBQztpQkFDSCxDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUM7S0FDSCxDQUFDO0NBQ0gsQ0FBQyxDQUFBO0FBRUYsTUFBYSxpQkFBaUI7SUFHNUIsWUFDbUIsT0FBcUMsRUFDckMsWUFBcUMsVUFBVSxDQUFDLEtBQUs7UUFEckQsWUFBTyxHQUFQLE9BQU8sQ0FBOEI7UUFDckMsY0FBUyxHQUFULFNBQVMsQ0FBNEM7UUFFdEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFBO0lBQ2xELENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUNmLElBQVksRUFDWixJQUFpQixFQUNqQixNQUFvQjtRQUVwQixNQUFNLFVBQVUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFBO1FBQ3hDLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQTtRQUNwQixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQzlCLFFBQVEsR0FBRyxJQUFJLENBQUE7WUFDZixVQUFVLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDcEIsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUNqQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQTtRQUN2RixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQTtRQUU1QyxPQUFPLENBQUMsR0FBRyxDQUNULGVBQWUsRUFDZixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FDOUUsQ0FBQTtRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUE7UUFFekMsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUN4QyxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFBO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtRQUNqRCxDQUFDO1FBRUQsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUE7UUFDckQsY0FBYyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBRS9FLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUMxQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUN6QyxHQUFHLFdBQVc7Z0JBQ2QsSUFBSTtnQkFDSixPQUFPO2dCQUNQLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTthQUMxQixDQUFDLENBQUE7WUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNqQixNQUFNLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUE7WUFDbEQsQ0FBQztZQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQTtZQUN6RSxJQUFJLFlBQXFCLENBQUE7WUFFekIsSUFBSSxDQUFDO2dCQUNILFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBQ3pDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFBO1lBQzNELENBQUM7WUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFBO1lBRTdDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQTtZQUMzRCxDQUFDO1lBRUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFBO1FBQ3BCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxLQUFLLFlBQVkseUJBQWdCLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxLQUFLLENBQUE7WUFDYixDQUFDO1lBRUQsSUFBSSxRQUFRLElBQUksWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSx5QkFBZ0IsQ0FBQyw0QkFBNEIsRUFBRTtvQkFDdkQsSUFBSSxFQUFFLGlCQUFpQjtvQkFDdkIsU0FBUyxFQUFFLElBQUk7b0JBQ2YsVUFBVSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7aUJBQ3pDLENBQUMsQ0FBQTtZQUNKLENBQUM7WUFFRCxNQUFNLElBQUkseUJBQWdCLENBQUMsaUNBQWlDLEVBQUU7Z0JBQzVELElBQUksRUFBRSx1QkFBdUI7Z0JBQzdCLFNBQVMsRUFBRSxJQUFJO2dCQUNmLFVBQVUsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2FBQ3pDLENBQUMsQ0FBQTtRQUNKLENBQUM7Z0JBQVMsQ0FBQztZQUNULFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUNyQixjQUFjLEVBQUUsbUJBQW1CLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLENBQUE7UUFDcEUsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUNsQixVQUFrQixFQUNsQixRQUFnQjtRQUVoQixNQUFNLEtBQUssR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFBO1FBRW5DLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZCLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZCLEtBQUssQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFFOUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFDdEMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQ2pCLDRCQUE0QixDQUM3QixDQUFBO1FBRUQsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLElBQUkseUJBQWdCLENBQUMsd0NBQXdDLEVBQUU7Z0JBQ25FLElBQUksRUFBRSw2QkFBNkI7Z0JBQ25DLFNBQVMsRUFBRSxLQUFLO2dCQUNoQixVQUFVO2dCQUNWLFFBQVE7YUFDVCxDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQTtJQUNqQyxDQUFDO0lBRUQsY0FBYyxDQUNaLFVBQWtCLEVBQ2xCLElBQVc7UUFFWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQy9CLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUM5Qyx5QkFBeUIsQ0FDMUIsQ0FBQTtJQUNILENBQUM7SUFFRCxjQUFjLENBQ1osVUFBa0IsRUFDbEIsRUFBcUIsRUFDckIsSUFBVztRQUVYLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FDckIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQ3RFLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUMvQyx5QkFBeUIsQ0FDMUIsQ0FBQTtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFJLEtBT3RCO1FBQ0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBRTlDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNyQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDdkMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTdCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQzVDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUNqQixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQ2hDLENBQUE7SUFDSCxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsdUNBQTJCLENBQUMsQ0FBQTtJQUN4RixDQUFDO0lBRU8sY0FBYyxDQUFDLFVBQWtCLEVBQUUsS0FBdUI7UUFDaEUsTUFBTSxJQUFJLEdBQUcsUUFBUSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFBO1FBRXJELE9BQU8sS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQTtJQUN2RixDQUFDO0lBRU8sTUFBTSxDQUFDLElBQVk7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLHVCQUF1QixFQUFFLENBQUE7UUFDakMsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFFdEMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3BFLE1BQU0sdUJBQXVCLEVBQUUsQ0FBQTtRQUNqQyxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDO0lBRU8sYUFBYSxDQUFDLEdBQVE7UUFDNUIsSUFBSSxVQUFrQixDQUFBO1FBRXRCLElBQUksQ0FBQztZQUNILFVBQVUsR0FBRyxrQkFBa0IsQ0FDN0IsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDakQsQ0FBQTtRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLFNBQVMsQ0FBQTtRQUNsQixDQUFDO1FBRUQsT0FBTyxVQUFVLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTztZQUNwRCxVQUFVLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTztZQUMvQyxDQUFDLENBQUMsVUFBVTtZQUNaLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDZixDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBWTtRQUNwQyxJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQzlDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLFNBQVMsQ0FBQTtRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxTQUFTLENBQ3JCLFFBQWtCLEVBQ2xCLFVBQW1CO1FBRW5CLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzdELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDOUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQTtRQUM5QixNQUFNLFNBQVMsR0FBRyxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQTtRQUNuRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ2hFLE1BQU0sSUFBSSxHQUNSLE1BQU0sS0FBSyxHQUFHO1lBQ2QsVUFBVSxLQUFLLFNBQVM7WUFDeEIsK0JBQStCLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQztZQUN2RCxDQUFDLENBQUMsbUNBQW1DO1lBQ3JDLENBQUMsQ0FBQyxnQkFBZ0IsTUFBTSxFQUFFLENBQUE7UUFFOUIsT0FBTyxJQUFJLHlCQUFnQixDQUFDLHlCQUF5QixNQUFNLElBQUksTUFBTSxFQUFFLEVBQUU7WUFDdkUsSUFBSTtZQUNKLFNBQVM7WUFDVCxVQUFVLEVBQUUsTUFBTTtZQUNsQixVQUFVO1NBQ1gsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVPLG9CQUFvQixDQUMxQixZQUFvQixFQUNwQixVQUFtQjtRQUVuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzlDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFFaEUsT0FBTyxJQUFJLHlCQUFnQixDQUFDLHdDQUF3QyxNQUFNLEVBQUUsRUFBRTtZQUM1RSxJQUFJLEVBQUUsMEJBQTBCO1lBQ2hDLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFVBQVU7U0FDWCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQixDQUMvQixRQUFrQixFQUNsQixVQUFtQjtRQUVuQixJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0IsT0FBTyxFQUFFLENBQUE7UUFDWCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUN4QyxNQUFNLE1BQU0sR0FBaUIsRUFBRSxDQUFBO1FBQy9CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQTtRQUVkLElBQUksQ0FBQztZQUNILE9BQU8sSUFBSSxFQUFFLENBQUM7Z0JBQ1osTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFFM0MsSUFBSSxJQUFJLEVBQUUsQ0FBQztvQkFDVCxNQUFLO2dCQUNQLENBQUM7Z0JBRUQsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsR0FBRywwQkFBMEIsRUFBRSxDQUFDO29CQUMzRCxNQUFNLElBQUkseUJBQWdCLENBQUMsNkNBQTZDLEVBQUU7d0JBQ3hFLElBQUksRUFBRSw0QkFBNEI7d0JBQ2xDLFNBQVMsRUFBRSxLQUFLO3dCQUNoQixVQUFVO3FCQUNYLENBQUMsQ0FBQTtnQkFDSixDQUFDO2dCQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFBO1lBQzVCLENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUM1QyxNQUFNLEtBQUssQ0FBQTtRQUNiLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNuQyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUE7UUFFZCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFBO1FBQzVCLENBQUM7UUFFRCxPQUFPLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFTyxLQUFLLENBQUMsbUJBQW1CLENBQUMsUUFBa0I7UUFDbEQsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzNCLE9BQU8sRUFBRSxDQUFBO1FBQ1gsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDeEMsTUFBTSxLQUFLLEdBQUcsMkJBQTJCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ3pGLE1BQU0sTUFBTSxHQUFpQixFQUFFLENBQUE7UUFDL0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBRWQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBRTNDLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1QsTUFBSztnQkFDUCxDQUFDO2dCQUVELE1BQU0sU0FBUyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUE7Z0JBQ2hDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO2dCQUU5RSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQTtnQkFFMUIsSUFBSSxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDeEMsTUFBSztnQkFDUCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLEVBQUUsQ0FBQTtRQUNYLENBQUM7Z0JBQVMsQ0FBQztZQUNULE1BQU0sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUM5QyxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDM0MsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBRWQsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUMzQixZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtZQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQTtRQUM1QixDQUFDO1FBRUQsT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQWE7UUFDL0IsT0FBTyxJQUFBLDhCQUFxQixFQUFDLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQ3JFLENBQUMsRUFDRCwyQkFBMkIsQ0FDNUIsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQTlWRCw4Q0E4VkM7QUFFRCxTQUFTLGlCQUFpQixDQUFJLE1BQW9CO0lBQ2hELE9BQU8sT0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNkLElBQUksRUFBRSxPQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNyQixJQUFJLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtRQUNoQixVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtRQUN0QixXQUFXLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRTtRQUN4QixRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtLQUNoQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsU0FBUyxPQUFPLENBQUMsS0FBYztJQUM3QixPQUFPLENBQ0wsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixLQUFLLEtBQUssSUFBSTtRQUNkLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQ25ELENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyx1QkFBdUI7SUFDOUIsT0FBTyxJQUFJLHlCQUFnQixDQUFDLGtFQUFrRSxFQUFFO1FBQzlGLElBQUksRUFBRSw4QkFBOEI7UUFDcEMsU0FBUyxFQUFFLEtBQUs7S0FDakIsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELFNBQVMsK0JBQStCLENBQ3RDLFlBQW9CLEVBQ3BCLFVBQWtCO0lBRWxCLElBQUksSUFBYSxDQUFBO0lBRWpCLElBQUksQ0FBQztRQUNILElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxtQ0FBbUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFbEUsT0FBTyxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFBO0FBQy9FLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFjO0lBQ2xDLE9BQU8sS0FBSyxZQUFZLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQTtBQUNyRSxDQUFDIn0=
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reconcilePayloadCatalog = reconcilePayloadCatalog;
4
+ exports.default = reconcilePayloadCatalogScript;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const reconciliation_1 = require("../modules/payload-sync/domain/reconciliation");
7
+ const errors_1 = require("../modules/payload-sync/domain/errors");
8
+ const payload_sync_1 = require("../modules/payload-sync");
9
+ const sync_product_1 = require("../workflows/payload-sync/sync-product");
10
+ const reconcile_catalog_1 = require("../workflows/payload-sync/reconcile-catalog");
11
+ async function reconcilePayloadCatalog(args) {
12
+ const service = args.container.resolve(payload_sync_1.PAYLOAD_SYNC_MODULE);
13
+ const query = args.container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
14
+ const logger = args.container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
15
+ const defaults = service.getReconciliationOptions();
16
+ const batchSize = args.batchSize ?? defaults.batchSize;
17
+ const batchDelayMs = args.batchDelayMs ?? defaults.batchDelayMs;
18
+ const sleep = args.sleep ?? defaultSleep;
19
+ const summary = (0, reconciliation_1.emptyReconciliationSummary)();
20
+ let skip = 0;
21
+ while (true) {
22
+ const page = await query.graph({
23
+ entity: "product",
24
+ fields: ["id"],
25
+ pagination: {
26
+ skip,
27
+ take: batchSize,
28
+ order: { id: "ASC" },
29
+ },
30
+ });
31
+ const productIds = page.data.map(readId);
32
+ summary.scannedProducts += productIds.length;
33
+ for (const productId of productIds) {
34
+ try {
35
+ const { errors, result } = await (0, sync_product_1.syncProductToPayloadWorkflow)(args.container).run({
36
+ input: {
37
+ id: productId,
38
+ eventName: "payload-sync.reconciliation",
39
+ },
40
+ throwOnError: false,
41
+ });
42
+ if (errors.length > 0) {
43
+ throw readWorkflowFailure(errors[0]);
44
+ }
45
+ summary.syncedProducts += 1;
46
+ summary.syncedVariants += result.currentVariantIds.length;
47
+ }
48
+ catch (error) {
49
+ summary.failedProductIds.push(productId);
50
+ logger.error((0, errors_1.formatPayloadSyncLog)(error, {
51
+ operation: "reconcile-product",
52
+ entityType: "product",
53
+ medusaId: productId,
54
+ eventName: "payload-sync.reconciliation",
55
+ }));
56
+ }
57
+ }
58
+ const nextSkip = skip + productIds.length;
59
+ const hasNextPage = nextSkip < (page.metadata?.count ?? nextSkip);
60
+ if (!hasNextPage) {
61
+ break;
62
+ }
63
+ await sleep(batchDelayMs);
64
+ skip = nextSkip;
65
+ }
66
+ summary.draftedOrphanProducts = await reconcileMirrorPages(args.container, batchSize, reconcile_catalog_1.reconcileProductMirrorPageWorkflow);
67
+ summary.draftedOrphanVariants = await reconcileMirrorPages(args.container, batchSize, reconcile_catalog_1.reconcileVariantMirrorPageWorkflow);
68
+ summary.failedProductIds = [...new Set(summary.failedProductIds)].sort();
69
+ logger.info(JSON.stringify({ component: "payload-sync-reconciliation", ...summary }));
70
+ if (summary.failedProductIds.length > 0) {
71
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Payload catalog reconciliation failed for ${summary.failedProductIds.length} product(s).`);
72
+ }
73
+ return summary;
74
+ }
75
+ async function reconcileMirrorPages(container, limit, workflow) {
76
+ let drafted = 0;
77
+ let page = 1;
78
+ while (true) {
79
+ const { result } = await workflow(container).run({
80
+ input: { page, limit },
81
+ });
82
+ drafted += result.draftedIds.length;
83
+ if (result.nextPage === null) {
84
+ return drafted;
85
+ }
86
+ page = result.nextPage;
87
+ }
88
+ }
89
+ async function reconcilePayloadCatalogScript({ container, }) {
90
+ await reconcilePayloadCatalog({ container });
91
+ }
92
+ async function defaultSleep(milliseconds) {
93
+ await new Promise((resolve) => setTimeout(resolve, milliseconds));
94
+ }
95
+ function readId(value) {
96
+ if (typeof value !== "object" ||
97
+ value === null ||
98
+ !("id" in value) ||
99
+ typeof value.id !== "string" ||
100
+ value.id.length === 0) {
101
+ throw new Error("Medusa product query returned an invalid ID.");
102
+ }
103
+ return value.id;
104
+ }
105
+ function readWorkflowFailure(value) {
106
+ if (typeof value !== "object" || value === null || !("error" in value)) {
107
+ return value;
108
+ }
109
+ const error = value.error;
110
+ if (error instanceof errors_1.PayloadSyncError) {
111
+ return error;
112
+ }
113
+ const message = readErrorMessage(error);
114
+ if (message === null) {
115
+ return error;
116
+ }
117
+ try {
118
+ const parsed = JSON.parse(message);
119
+ return readPayloadSyncError(parsed) ?? error;
120
+ }
121
+ catch {
122
+ return error;
123
+ }
124
+ }
125
+ function readErrorMessage(value) {
126
+ if (value instanceof Error) {
127
+ return value.message;
128
+ }
129
+ if (typeof value === "object" &&
130
+ value !== null &&
131
+ "message" in value &&
132
+ typeof value.message === "string") {
133
+ return value.message;
134
+ }
135
+ return null;
136
+ }
137
+ function readPayloadSyncError(value) {
138
+ if (typeof value !== "object" ||
139
+ value === null ||
140
+ !("code" in value) ||
141
+ typeof value.code !== "string" ||
142
+ !("message" in value) ||
143
+ typeof value.message !== "string" ||
144
+ !("retryable" in value) ||
145
+ typeof value.retryable !== "boolean") {
146
+ return null;
147
+ }
148
+ const httpStatus = "httpStatus" in value ? readOptionalInteger(value.httpStatus) : undefined;
149
+ return new errors_1.PayloadSyncError(value.message, {
150
+ code: value.code,
151
+ retryable: value.retryable,
152
+ httpStatus,
153
+ });
154
+ }
155
+ function readOptionalInteger(value) {
156
+ return typeof value === "number" && Number.isInteger(value)
157
+ ? value
158
+ : undefined;
159
+ }
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb25jaWxlLXBheWxvYWQtY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zY3JpcHRzL3JlY29uY2lsZS1wYXlsb2FkLWNhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUE2QkEsMERBOEZDO0FBeUJELGdEQUlDO0FBdkpELHFEQUdtQztBQUVuQyxrRkFHdUQ7QUFDdkQsa0VBRytDO0FBQy9DLDBEQUE4RDtBQUU5RCx5RUFBc0Y7QUFDdEYsbUZBR3FEO0FBUzlDLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsSUFBaUM7SUFFakMsTUFBTSxPQUFPLEdBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQTJCLGtDQUFtQixDQUFDLENBQUM7SUFDeEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEUsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDcEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQ3ZELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQztJQUNoRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLFlBQVksQ0FBQztJQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFBLDJDQUEwQixHQUFFLENBQUM7SUFDN0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRWIsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUM3QixNQUFNLEVB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
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = payloadSyncProductDeletedSubscriber;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const zod_1 = require("@medusajs/framework/zod");
7
+ const unpublish_product_1 = require("../workflows/payload-sync/unpublish-product");
8
+ const EntityEventSchema = zod_1.z.object({ id: zod_1.z.string().trim().min(1) });
9
+ async function payloadSyncProductDeletedSubscriber({ event, container, }) {
10
+ const { id } = EntityEventSchema.parse(event.data);
11
+ await (0, unpublish_product_1.unpublishProductFromPayloadWorkflow)(container).run({
12
+ input: { id, eventName: event.name },
13
+ });
14
+ }
15
+ exports.config = {
16
+ event: utils_1.ProductWorkflowEvents.DELETED,
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC1zeW5jLXByb2R1Y3QtZGVsZXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9wYXlsb2FkLXN5bmMtcHJvZHVjdC1kZWxldGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVlBLHNEQVNDO0FBakJELHFEQUFrRTtBQUNsRSxpREFBNEM7QUFFNUMsbUZBQWtHO0FBRWxHLE1BQU0saUJBQWlCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUd0RCxLQUFLLFVBQVUsbUNBQW1DLENBQUMsRUFDaEUsS0FBSyxFQUNMLFNBQVMsR0FDbUI7SUFDNUIsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbkQsTUFBTSxJQUFBLHVEQUFtQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN2RCxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7S0FDckMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsNkJBQXFCLENBQUMsT0FBTztDQUNyQyxDQUFDIn0=
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = payloadSyncProductUpsertedSubscriber;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const zod_1 = require("@medusajs/framework/zod");
7
+ const sync_product_1 = require("../workflows/payload-sync/sync-product");
8
+ const EntityEventSchema = zod_1.z.object({ id: zod_1.z.string().trim().min(1) });
9
+ async function payloadSyncProductUpsertedSubscriber({ event, container, }) {
10
+ const { id } = EntityEventSchema.parse(event.data);
11
+ await (0, sync_product_1.syncProductToPayloadWorkflow)(container).run({
12
+ input: { id, eventName: event.name },
13
+ });
14
+ }
15
+ exports.config = {
16
+ event: [utils_1.ProductWorkflowEvents.CREATED, utils_1.ProductWorkflowEvents.UPDATED],
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC1zeW5jLXByb2R1Y3QtdXBzZXJ0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvcGF5bG9hZC1zeW5jLXByb2R1Y3QtdXBzZXJ0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBWUEsdURBU0M7QUFqQkQscURBQWtFO0FBQ2xFLGlEQUE0QztBQUU1Qyx5RUFBc0Y7QUFFdEYsTUFBTSxpQkFBaUIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBR3RELEtBQUssVUFBVSxvQ0FBb0MsQ0FBQyxFQUNqRSxLQUFLLEVBQ0wsU0FBUyxHQUNtQjtJQUM1QixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVuRCxNQUFNLElBQUEsMkNBQTRCLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2hELEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtLQUNyQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSxDQUFDLDZCQUFxQixDQUFDLE9BQU8sRUFBRSw2QkFBcUIsQ0FBQyxPQUFPLENBQUM7Q0FDdEUsQ0FBQyJ9
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = payloadSyncVariantDeletedSubscriber;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const zod_1 = require("@medusajs/framework/zod");
7
+ const unpublish_variant_1 = require("../workflows/payload-sync/unpublish-variant");
8
+ const EntityEventSchema = zod_1.z.object({ id: zod_1.z.string().trim().min(1) });
9
+ async function payloadSyncVariantDeletedSubscriber({ event, container, }) {
10
+ const { id } = EntityEventSchema.parse(event.data);
11
+ await (0, unpublish_variant_1.unpublishVariantFromPayloadWorkflow)(container).run({
12
+ input: { id, eventName: event.name },
13
+ });
14
+ }
15
+ exports.config = {
16
+ event: utils_1.ProductVariantWorkflowEvents.DELETED,
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC1zeW5jLXZhcmlhbnQtZGVsZXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9wYXlsb2FkLXN5bmMtdmFyaWFudC1kZWxldGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVlBLHNEQVNDO0FBakJELHFEQUF5RTtBQUN6RSxpREFBNEM7QUFFNUMsbUZBQWtHO0FBRWxHLE1BQU0saUJBQWlCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUd0RCxLQUFLLFVBQVUsbUNBQW1DLENBQUMsRUFDaEUsS0FBSyxFQUNMLFNBQVMsR0FDbUI7SUFDNUIsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFbkQsTUFBTSxJQUFBLHVEQUFtQyxFQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUN2RCxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7S0FDckMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsb0NBQTRCLENBQUMsT0FBTztDQUM1QyxDQUFDIn0=
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = payloadSyncVariantUpsertedSubscriber;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const zod_1 = require("@medusajs/framework/zod");
7
+ const sync_variant_1 = require("../workflows/payload-sync/sync-variant");
8
+ const EntityEventSchema = zod_1.z.object({ id: zod_1.z.string().trim().min(1) });
9
+ async function payloadSyncVariantUpsertedSubscriber({ event, container, }) {
10
+ const { id } = EntityEventSchema.parse(event.data);
11
+ await (0, sync_variant_1.syncVariantToPayloadWorkflow)(container).run({
12
+ input: { id, eventName: event.name },
13
+ });
14
+ }
15
+ exports.config = {
16
+ event: [
17
+ utils_1.ProductVariantWorkflowEvents.CREATED,
18
+ utils_1.ProductVariantWorkflowEvents.UPDATED,
19
+ ],
20
+ };
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC1zeW5jLXZhcmlhbnQtdXBzZXJ0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvcGF5bG9hZC1zeW5jLXZhcmlhbnQtdXBzZXJ0ZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBWUEsdURBU0M7QUFqQkQscURBQXlFO0FBQ3pFLGlEQUE0QztBQUU1Qyx5RUFBc0Y7QUFFdEYsTUFBTSxpQkFBaUIsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBR3RELEtBQUssVUFBVSxvQ0FBb0MsQ0FBQyxFQUNqRSxLQUFLLEVBQ0wsU0FBUyxHQUNtQjtJQUM1QixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVuRCxNQUFNLElBQUEsMkNBQTRCLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2hELEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRTtLQUNyQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRTtRQUNMLG9DQUE0QixDQUFDLE9BQU87UUFDcEMsb0NBQTRCLENBQUMsT0FBTztLQUNyQztDQUNGLENBQUMifQ==
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./public"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF3QiJ9
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3R5cGVzL3B1YmxpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=