quickbooks-medusa-plugin 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/.medusa/server/src/admin/index.js +1832 -0
  2. package/.medusa/server/src/admin/index.mjs +1831 -0
  3. package/.medusa/server/src/api/admin/plugin/route.js +7 -0
  4. package/.medusa/server/src/api/admin/quickbooks/callback/route.js +95 -0
  5. package/.medusa/server/src/api/admin/quickbooks/connect/route.js +12 -0
  6. package/.medusa/server/src/api/admin/quickbooks/connection/route.js +32 -0
  7. package/.medusa/server/src/api/admin/quickbooks/disconnect/route.js +16 -0
  8. package/.medusa/server/src/api/admin/quickbooks/settings/route.js +33 -0
  9. package/.medusa/server/src/api/admin/quickbooks/webhooks/route.js +95 -0
  10. package/.medusa/server/src/api/store/plugin/route.js +7 -0
  11. package/.medusa/server/src/modules/quickbooks/index.js +13 -0
  12. package/.medusa/server/src/modules/quickbooks/migrations/Migration20260107000000.js +19 -0
  13. package/.medusa/server/src/modules/quickbooks/models/index.js +10 -0
  14. package/.medusa/server/src/modules/quickbooks/models/quickbooks-connection.js +20 -0
  15. package/.medusa/server/src/modules/quickbooks/models/quickbooks-settings.js +27 -0
  16. package/.medusa/server/src/modules/quickbooks/models/quickbooks-sync-mapping.js +20 -0
  17. package/.medusa/server/src/modules/quickbooks/services/quickbooks-service.js +425 -0
  18. package/.medusa/server/src/subscribers/quickbooks-order-sync.js +18 -0
  19. package/.medusa/server/src/subscribers/quickbooks-product-sync.js +26 -0
  20. package/.medusa/server/src/subscribers/quickbooks-sync.js +22 -0
  21. package/.medusa/server/src/workflows/index.js +23 -0
  22. package/.medusa/server/src/workflows/steps/order/sync-order-to-quickbooks.js +41 -0
  23. package/.medusa/server/src/workflows/steps/order/transform-order.js +78 -0
  24. package/.medusa/server/src/workflows/steps/order/update-order-mapping.js +17 -0
  25. package/.medusa/server/src/workflows/steps/order/validate-order-sync.js +23 -0
  26. package/.medusa/server/src/workflows/steps/reverse-sync/sync-customer-from-quickbooks.js +102 -0
  27. package/.medusa/server/src/workflows/steps/reverse-sync/sync-inventory-from-quickbooks.js +62 -0
  28. package/.medusa/server/src/workflows/steps/reverse-sync/sync-order-status-from-quickbooks.js +76 -0
  29. package/.medusa/server/src/workflows/steps/sync-customer-to-quickbooks.js +55 -0
  30. package/.medusa/server/src/workflows/steps/sync-product-to-quickbooks.js +59 -0
  31. package/.medusa/server/src/workflows/steps/transform-customer.js +41 -0
  32. package/.medusa/server/src/workflows/steps/transform-product.js +39 -0
  33. package/.medusa/server/src/workflows/steps/update-product-sync-mapping.js +17 -0
  34. package/.medusa/server/src/workflows/steps/update-sync-mapping.js +17 -0
  35. package/.medusa/server/src/workflows/steps/validate-customer-sync.js +17 -0
  36. package/.medusa/server/src/workflows/steps/validate-product-sync.js +17 -0
  37. package/.medusa/server/src/workflows/sync-customer-from-quickbooks.js +10 -0
  38. package/.medusa/server/src/workflows/sync-customer-to-quickbooks.js +32 -0
  39. package/.medusa/server/src/workflows/sync-inventory-from-quickbooks.js +10 -0
  40. package/.medusa/server/src/workflows/sync-order-status-from-quickbooks.js +10 -0
  41. package/.medusa/server/src/workflows/sync-order-to-quickbooks.js +28 -0
  42. package/.medusa/server/src/workflows/sync-product-to-quickbooks.js +31 -0
  43. package/README.md +104 -0
  44. package/package.json +75 -0
@@ -0,0 +1,425 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const models_1 = require("../models");
8
+ const node_quickbooks_1 = __importDefault(require("node-quickbooks"));
9
+ class QuickBooksModuleService extends (0, utils_1.MedusaService)({
10
+ QuickBooksConnection: models_1.QuickBooksConnection,
11
+ QuickBooksSyncMapping: models_1.QuickBooksSyncMapping,
12
+ QuickBooksSettings: models_1.QuickBooksSettings,
13
+ }) {
14
+ constructor(container, options) {
15
+ super(...arguments);
16
+ this.qboInstance = null;
17
+ this.options = options;
18
+ }
19
+ // ============================================
20
+ // OAUTH HELPERS
21
+ // ============================================
22
+ /**
23
+ * Generate OAuth authorization URL
24
+ */
25
+ getAuthorizationUrl(state) {
26
+ const scopes = "com.intuit.quickbooks.accounting";
27
+ const stateParam = state || Math.random().toString(36).substring(7);
28
+ return `https://appcenter.intuit.com/connect/oauth2?` +
29
+ `client_id=${this.options.clientId}` +
30
+ `&redirect_uri=${encodeURIComponent(this.options.redirectUri)}` +
31
+ `&scope=${encodeURIComponent(scopes)}` +
32
+ `&response_type=code` +
33
+ `&state=${stateParam}`;
34
+ }
35
+ /**
36
+ * Exchange authorization code for tokens
37
+ */
38
+ async exchangeCodeForTokens(code, realmId) {
39
+ const tokenUrl = "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer";
40
+ const auth = Buffer.from(`${this.options.clientId}:${this.options.clientSecret}`).toString("base64");
41
+ const response = await fetch(tokenUrl, {
42
+ method: "POST",
43
+ headers: {
44
+ "Authorization": `Basic ${auth}`,
45
+ "Content-Type": "application/x-www-form-urlencoded",
46
+ "Accept": "application/json",
47
+ },
48
+ body: new URLSearchParams({
49
+ grant_type: "authorization_code",
50
+ code,
51
+ redirect_uri: this.options.redirectUri,
52
+ }).toString(),
53
+ });
54
+ if (!response.ok) {
55
+ const error = await response.text();
56
+ throw new Error(`Token exchange failed: ${error}`);
57
+ }
58
+ const tokens = await response.json();
59
+ // Upsert connection
60
+ const existingConnections = await this.listQuickBooksConnections({ realm_id: realmId });
61
+ if (existingConnections.length > 0) {
62
+ const connection = existingConnections[0];
63
+ await this.updateQuickBooksConnections([{
64
+ selector: { id: connection.id },
65
+ data: {
66
+ access_token: tokens.access_token,
67
+ refresh_token: tokens.refresh_token,
68
+ token_expires_at: new Date(Date.now() + tokens.expires_in * 1000),
69
+ refresh_token_expires_at: new Date(Date.now() + (tokens.x_refresh_token_expires_in || 8726400) * 1000),
70
+ is_active: true,
71
+ }
72
+ }]);
73
+ return existingConnections[0];
74
+ }
75
+ // Create new connection
76
+ const [newConnection] = await this.createQuickBooksConnections([{
77
+ realm_id: realmId,
78
+ access_token: tokens.access_token,
79
+ refresh_token: tokens.refresh_token,
80
+ token_expires_at: new Date(Date.now() + tokens.expires_in * 1000),
81
+ refresh_token_expires_at: new Date(Date.now() + (tokens.x_refresh_token_expires_in || 8726400) * 1000),
82
+ is_active: true,
83
+ environment: this.options.environment,
84
+ }]);
85
+ return newConnection;
86
+ }
87
+ /**
88
+ * Refresh access token
89
+ */
90
+ async refreshAccessToken(connectionId) {
91
+ const [connection] = await this.listQuickBooksConnections({ id: connectionId });
92
+ if (!connection) {
93
+ throw new Error("Connection not found");
94
+ }
95
+ const tokenUrl = "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer";
96
+ const auth = Buffer.from(`${this.options.clientId}:${this.options.clientSecret}`).toString("base64");
97
+ const response = await fetch(tokenUrl, {
98
+ method: "POST",
99
+ headers: {
100
+ "Authorization": `Basic ${auth}`,
101
+ "Content-Type": "application/x-www-form-urlencoded",
102
+ "Accept": "application/json",
103
+ },
104
+ body: new URLSearchParams({
105
+ grant_type: "refresh_token",
106
+ refresh_token: connection.refresh_token,
107
+ }).toString(),
108
+ });
109
+ if (!response.ok) {
110
+ // Mark connection as inactive on refresh failure
111
+ await this.updateQuickBooksConnections([{
112
+ selector: { id: connectionId },
113
+ data: { is_active: false }
114
+ }]);
115
+ throw new Error("Refresh token expired - please reconnect");
116
+ }
117
+ const tokens = await response.json();
118
+ await this.updateQuickBooksConnections([{
119
+ selector: { id: connectionId },
120
+ data: {
121
+ access_token: tokens.access_token,
122
+ refresh_token: tokens.refresh_token,
123
+ token_expires_at: new Date(Date.now() + tokens.expires_in * 1000),
124
+ }
125
+ }]);
126
+ return tokens;
127
+ }
128
+ // ============================================
129
+ // NODE-QUICKBOOKS INSTANCE
130
+ // ============================================
131
+ /**
132
+ * Get or create QuickBooks instance
133
+ */
134
+ async getQboInstance() {
135
+ const connections = await this.listQuickBooksConnections({ is_active: true });
136
+ if (connections.length === 0) {
137
+ throw new Error("No active QuickBooks connection");
138
+ }
139
+ const connection = connections[0];
140
+ // Refresh token if expired
141
+ const now = new Date();
142
+ if (new Date(connection.token_expires_at) <= now) {
143
+ await this.refreshAccessToken(connection.id);
144
+ const [refreshedConnection] = await this.listQuickBooksConnections({ id: connection.id });
145
+ return this.createQboInstance(refreshedConnection);
146
+ }
147
+ return this.createQboInstance(connection);
148
+ }
149
+ createQboInstance(connection) {
150
+ const useSandbox = this.options.environment === "sandbox";
151
+ const minorVersion = this.options.minorVersion || 75;
152
+ return new node_quickbooks_1.default(this.options.clientId, this.options.clientSecret, connection.access_token, false, // no OAuth token secret for OAuth 2.0
153
+ connection.realm_id, useSandbox, true, // debug
154
+ minorVersion, "2.0", // OAuth version
155
+ connection.refresh_token);
156
+ }
157
+ // ============================================
158
+ // CUSTOMER OPERATIONS (using node-quickbooks)
159
+ // ============================================
160
+ async createCustomer(customerData) {
161
+ const qbo = await this.getQboInstance();
162
+ return new Promise((resolve, reject) => {
163
+ qbo.createCustomer(customerData, (err, customer) => {
164
+ if (err)
165
+ reject(err);
166
+ else
167
+ resolve(customer);
168
+ });
169
+ });
170
+ }
171
+ async updateCustomer(customer) {
172
+ const qbo = await this.getQboInstance();
173
+ return new Promise((resolve, reject) => {
174
+ qbo.updateCustomer(customer, (err, customer) => {
175
+ if (err)
176
+ reject(err);
177
+ else
178
+ resolve(customer);
179
+ });
180
+ });
181
+ }
182
+ async getCustomer(customerId) {
183
+ const qbo = await this.getQboInstance();
184
+ return new Promise((resolve, reject) => {
185
+ qbo.getCustomer(customerId, (err, customer) => {
186
+ if (err)
187
+ reject(err);
188
+ else
189
+ resolve(customer);
190
+ });
191
+ });
192
+ }
193
+ async findCustomerByEmail(email) {
194
+ const qbo = await this.getQboInstance();
195
+ return new Promise((resolve, reject) => {
196
+ qbo.findCustomers({
197
+ PrimaryEmailAddr: email,
198
+ fetchAll: true,
199
+ }, (err, customers) => {
200
+ if (err)
201
+ reject(err);
202
+ else
203
+ resolve(customers?.QueryResponse?.Customer || []);
204
+ });
205
+ });
206
+ }
207
+ // ============================================
208
+ // ITEM (PRODUCT) OPERATIONS
209
+ // ============================================
210
+ async createItem(itemData) {
211
+ const qbo = await this.getQboInstance();
212
+ return new Promise((resolve, reject) => {
213
+ qbo.createItem(itemData, (err, item) => {
214
+ if (err)
215
+ reject(err);
216
+ else
217
+ resolve(item);
218
+ });
219
+ });
220
+ }
221
+ async updateItem(item) {
222
+ const qbo = await this.getQboInstance();
223
+ return new Promise((resolve, reject) => {
224
+ qbo.updateItem(item, (err, item) => {
225
+ if (err)
226
+ reject(err);
227
+ else
228
+ resolve(item);
229
+ });
230
+ });
231
+ }
232
+ async getItem(itemId) {
233
+ const qbo = await this.getQboInstance();
234
+ return new Promise((resolve, reject) => {
235
+ qbo.getItem(itemId, (err, item) => {
236
+ if (err)
237
+ reject(err);
238
+ else
239
+ resolve(item);
240
+ });
241
+ });
242
+ }
243
+ async findItemBySku(sku) {
244
+ const qbo = await this.getQboInstance();
245
+ return new Promise((resolve, reject) => {
246
+ qbo.findItems({
247
+ Sku: sku,
248
+ fetchAll: true,
249
+ }, (err, items) => {
250
+ if (err)
251
+ reject(err);
252
+ else {
253
+ const itemList = items?.QueryResponse?.Item || [];
254
+ resolve(itemList[0] || null);
255
+ }
256
+ });
257
+ });
258
+ }
259
+ // ============================================
260
+ // INVOICE OPERATIONS
261
+ // ============================================
262
+ async createInvoice(invoiceData) {
263
+ const qbo = await this.getQboInstance();
264
+ return new Promise((resolve, reject) => {
265
+ qbo.createInvoice(invoiceData, (err, invoice) => {
266
+ if (err)
267
+ reject(err);
268
+ else
269
+ resolve(invoice);
270
+ });
271
+ });
272
+ }
273
+ async updateInvoice(invoice) {
274
+ const qbo = await this.getQboInstance();
275
+ return new Promise((resolve, reject) => {
276
+ qbo.updateInvoice(invoice, (err, invoice) => {
277
+ if (err)
278
+ reject(err);
279
+ else
280
+ resolve(invoice);
281
+ });
282
+ });
283
+ }
284
+ async getInvoice(invoiceId) {
285
+ const qbo = await this.getQboInstance();
286
+ return new Promise((resolve, reject) => {
287
+ qbo.getInvoice(invoiceId, (err, invoice) => {
288
+ if (err)
289
+ reject(err);
290
+ else
291
+ resolve(invoice);
292
+ });
293
+ });
294
+ }
295
+ // ============================================
296
+ // SALES RECEIPT OPERATIONS
297
+ // ============================================
298
+ async createSalesReceipt(salesReceiptData) {
299
+ const qbo = await this.getQboInstance();
300
+ return new Promise((resolve, reject) => {
301
+ qbo.createSalesReceipt(salesReceiptData, (err, salesReceipt) => {
302
+ if (err)
303
+ reject(err);
304
+ else
305
+ resolve(salesReceipt);
306
+ });
307
+ });
308
+ }
309
+ async updateSalesReceipt(salesReceipt) {
310
+ const qbo = await this.getQboInstance();
311
+ return new Promise((resolve, reject) => {
312
+ qbo.updateSalesReceipt(salesReceipt, (err, salesReceipt) => {
313
+ if (err)
314
+ reject(err);
315
+ else
316
+ resolve(salesReceipt);
317
+ });
318
+ });
319
+ }
320
+ async getSalesReceipt(salesReceiptId) {
321
+ const qbo = await this.getQboInstance();
322
+ return new Promise((resolve, reject) => {
323
+ qbo.getSalesReceipt(salesReceiptId, (err, salesReceipt) => {
324
+ if (err)
325
+ reject(err);
326
+ else
327
+ resolve(salesReceipt);
328
+ });
329
+ });
330
+ }
331
+ // ============================================
332
+ // COMPANY INFO
333
+ // ============================================
334
+ async getCompanyInfo() {
335
+ const connections = await this.listQuickBooksConnections({ is_active: true });
336
+ if (connections.length === 0) {
337
+ throw new Error("No active QuickBooks connection");
338
+ }
339
+ const connection = connections[0];
340
+ const qbo = await this.getQboInstance();
341
+ return new Promise((resolve, reject) => {
342
+ qbo.getCompanyInfo(connection.realm_id, (err, companyInfo) => {
343
+ if (err)
344
+ reject(err);
345
+ else {
346
+ // Update connection with company name
347
+ this.updateQuickBooksConnections([{
348
+ selector: { id: connection.id },
349
+ data: { company_name: companyInfo?.CompanyName || null }
350
+ }]).catch(console.error);
351
+ resolve(companyInfo);
352
+ }
353
+ });
354
+ });
355
+ }
356
+ // ============================================
357
+ // CONNECTION HELPERS
358
+ // ============================================
359
+ async getActiveConnection() {
360
+ const connections = await this.listQuickBooksConnections({ is_active: true });
361
+ return connections[0] || null;
362
+ }
363
+ async disconnect() {
364
+ const connections = await this.listQuickBooksConnections({ is_active: true });
365
+ if (connections.length > 0) {
366
+ await this.updateQuickBooksConnections([{
367
+ selector: { id: connections[0].id },
368
+ data: { is_active: false }
369
+ }]);
370
+ }
371
+ }
372
+ // ============================================
373
+ // SETTINGS HELPERS
374
+ // ============================================
375
+ async getOrCreateSettings() {
376
+ const settings = await this.listQuickBooksSettings({});
377
+ if (settings.length > 0) {
378
+ return settings[0];
379
+ }
380
+ const [newSettings] = await this.createQuickBooksSettings([{}]);
381
+ return newSettings;
382
+ }
383
+ // ============================================
384
+ // MAPPING HELPERS
385
+ // ============================================
386
+ async getMapping(medusaEntityId, medusaEntityType) {
387
+ const mappings = await this.listQuickBooksSyncMappings({
388
+ medusa_entity_id: medusaEntityId,
389
+ medusa_entity_type: medusaEntityType,
390
+ });
391
+ return mappings[0] || null;
392
+ }
393
+ async getMappingByQuickbooksId(quickbooksId, quickbooksEntityType) {
394
+ const mappings = await this.listQuickBooksSyncMappings({
395
+ quickbooks_entity_id: quickbooksId,
396
+ quickbooks_entity_type: quickbooksEntityType,
397
+ });
398
+ return mappings[0] || null;
399
+ }
400
+ async createOrUpdateMapping(data) {
401
+ const existing = await this.getMapping(data.medusa_entity_id, data.medusa_entity_type);
402
+ if (existing) {
403
+ return await this.updateQuickBooksSyncMappings([{
404
+ selector: { id: existing.id },
405
+ data: {
406
+ quickbooks_entity_id: data.quickbooks_entity_id,
407
+ sync_status: data.sync_status || "synced",
408
+ last_synced_at: new Date(),
409
+ error_message: data.error_message || null,
410
+ }
411
+ }]);
412
+ }
413
+ return await this.createQuickBooksSyncMappings([{
414
+ medusa_entity_id: data.medusa_entity_id,
415
+ medusa_entity_type: data.medusa_entity_type,
416
+ quickbooks_entity_id: data.quickbooks_entity_id,
417
+ quickbooks_entity_type: data.quickbooks_entity_type,
418
+ sync_status: data.sync_status || "synced",
419
+ last_synced_at: new Date(),
420
+ error_message: data.error_message || null,
421
+ }]);
422
+ }
423
+ }
424
+ exports.default = QuickBooksModuleService;
425
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tib29rcy1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcXVpY2tib29rcy9zZXJ2aWNlcy9xdWlja2Jvb2tzLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBeUQ7QUFDekQsc0NBQTJGO0FBQzNGLHNFQUF3QztBQVV4QyxNQUFNLHVCQUF3QixTQUFRLElBQUEscUJBQWEsRUFBQztJQUNoRCxvQkFBb0IsRUFBcEIsNkJBQW9CO0lBQ3BCLHFCQUFxQixFQUFyQiw4QkFBcUI7SUFDckIsa0JBQWtCLEVBQWxCLDJCQUFrQjtDQUNyQixDQUFDO0lBSUUsWUFBWSxTQUFjLEVBQUUsT0FBc0I7UUFDOUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUE7UUFIZixnQkFBVyxHQUFzQixJQUFJLENBQUE7UUFJekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7SUFDMUIsQ0FBQztJQUVELCtDQUErQztJQUMvQyxnQkFBZ0I7SUFDaEIsK0NBQStDO0lBRS9DOztPQUVHO0lBQ0gsbUJBQW1CLENBQUMsS0FBYztRQUM5QixNQUFNLE1BQU0sR0FBRyxrQ0FBa0MsQ0FBQTtRQUNqRCxNQUFNLFVBQVUsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFbkUsT0FBTyw4Q0FBOEM7WUFDakQsYUFBYSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUNwQyxpQkFBaUIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMvRCxVQUFVLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RDLHFCQUFxQjtZQUNyQixVQUFVLFVBQVUsRUFBRSxDQUFBO0lBQzlCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFZLEVBQUUsT0FBZTtRQUNyRCxNQUFNLFFBQVEsR0FBRywyREFBMkQsQ0FBQTtRQUU1RSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUNwQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQzFELENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRXBCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUNuQyxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRTtnQkFDTCxlQUFlLEVBQUUsU0FBUyxJQUFJLEVBQUU7Z0JBQ2hDLGNBQWMsRUFBRSxtQ0FBbUM7Z0JBQ25ELFFBQVEsRUFBRSxrQkFBa0I7YUFDL0I7WUFDRCxJQUFJLEVBQUUsSUFBSSxlQUFlLENBQUM7Z0JBQ3RCLFVBQVUsRUFBRSxvQkFBb0I7Z0JBQ2hDLElBQUk7Z0JBQ0osWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVzthQUN6QyxDQUFDLENBQUMsUUFBUSxFQUFFO1NBQ2hCLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDZixNQUFNLEtBQUssR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixLQUFLLEVBQUUsQ0FBQyxDQUFBO1FBQ3RELENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUVwQyxvQkFBb0I7UUFDcEIsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBRXZGLElBQUksbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ3pDLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7b0JBQ3BDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFO29CQUMvQixJQUFJLEVBQUU7d0JBQ0YsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO3dCQUNqQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7d0JBQ25DLGdCQUFnQixFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDakUsd0JBQXdCLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLDBCQUEwQixJQUFJLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQzt3QkFDdEcsU0FBUyxFQUFFLElBQUk7cUJBQ2xCO2lCQUNKLENBQUMsQ0FBQyxDQUFBO1lBQ0gsT0FBTyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqQyxDQUFDO1FBRUQsd0JBQXdCO1FBQ3hCLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2dCQUM1RCxRQUFRLEVBQUUsT0FBTztnQkFDakIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO2dCQUNqQyxhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWE7Z0JBQ25DLGdCQUFnQixFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDakUsd0JBQXdCLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLDBCQUEwQixJQUFJLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDdEcsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVzthQUN4QyxDQUFDLENBQUMsQ0FBQTtRQUVILE9BQU8sYUFBYSxDQUFBO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxZQUFvQjtRQUN6QyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQTtRQUMvRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUE7UUFDM0MsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLDJEQUEyRCxDQUFBO1FBQzVFLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ3BCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FDMUQsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7UUFFcEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ25DLE1BQU0sRUFBRSxNQUFNO1lBQ2QsT0FBTyxFQUFFO2dCQUNMLGVBQWUsRUFBRSxTQUFTLElBQUksRUFBRTtnQkFDaEMsY0FBYyxFQUFFLG1DQUFtQztnQkFDbkQsUUFBUSxFQUFFLGtCQUFrQjthQUMvQjtZQUNELElBQUksRUFBRSxJQUFJLGVBQWUsQ0FBQztnQkFDdEIsVUFBVSxFQUFFLGVBQWU7Z0JBQzNCLGFBQWEsRUFBRSxVQUFVLENBQUMsYUFBYTthQUMxQyxDQUFDLENBQUMsUUFBUSxFQUFFO1NBQ2hCLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDZixpREFBaUQ7WUFDakQsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztvQkFDcEMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRTtvQkFDOUIsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtpQkFDN0IsQ0FBQyxDQUFDLENBQUE7WUFDSCxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUE7UUFDL0QsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFBO1FBRXBDLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7Z0JBQ3BDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUU7Z0JBQzlCLElBQUksRUFBRTtvQkFDRixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7b0JBQ2pDLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtvQkFDbkMsZ0JBQWdCLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2lCQUNwRTthQUNKLENBQUMsQ0FBQyxDQUFBO1FBRUgsT0FBTyxNQUFNLENBQUE7SUFDakIsQ0FBQztJQUVELCtDQUErQztJQUMvQywyQkFBMkI7SUFDM0IsK0NBQStDO0lBRS9DOztPQUVHO0lBQ0ssS0FBSyxDQUFDLGNBQWM7UUFDeEIsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtRQUM3RSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO1FBQ3RELENBQUM7UUFFRCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFakMsMkJBQTJCO1FBQzNCLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUE7UUFDdEIsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDNUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMseUJBQXlCLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDekYsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtRQUN0RCxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFVBQWU7UUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFBO1FBQ3pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQTtRQUVwRCxPQUFPLElBQUkseUJBQVUsQ0FDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUN6QixVQUFVLENBQUMsWUFBWSxFQUN2QixLQUFLLEVBQUUsc0NBQXNDO1FBQzdDLFVBQVUsQ0FBQyxRQUFRLEVBQ25CLFVBQVUsRUFDVixJQUFJLEVBQUUsUUFBUTtRQUNkLFlBQVksRUFDWixLQUFLLEVBQUUsZ0JBQWdCO1FBQ3ZCLFVBQVUsQ0FBQyxhQUFhLENBQzNCLENBQUE7SUFDTCxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLDhDQUE4QztJQUM5QywrQ0FBK0M7SUFFL0MsS0FBSyxDQUFDLGNBQWMsQ0FBQyxZQUFpQjtRQUNsQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN2QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBaUIsRUFBRSxRQUFhLEVBQUUsRUFBRTtnQkFDbEUsSUFBSSxHQUFHO29CQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTs7b0JBQ2YsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQzFCLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFhO1FBQzlCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3ZDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFpQixFQUFFLFFBQWEsRUFBRSxFQUFFO2dCQUM5RCxJQUFJLEdBQUc7b0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBOztvQkFDZixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDMUIsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQWtCO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3ZDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFpQixFQUFFLFFBQWEsRUFBRSxFQUFFO2dCQUM3RCxJQUFJLEdBQUc7b0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBOztvQkFDZixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDMUIsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FBYTtRQUNuQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN2QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxhQUFhLENBQUM7Z0JBQ2QsZ0JBQWdCLEVBQUUsS0FBSztnQkFDdkIsUUFBUSxFQUFFLElBQUk7YUFDakIsRUFBRSxDQUFDLEdBQWlCLEVBQUUsU0FBYyxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksR0FBRztvQkFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7O29CQUNmLE9BQU8sQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQTtZQUMxRCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELCtDQUErQztJQUMvQyw0QkFBNEI7SUFDNUIsK0NBQStDO0lBRS9DLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBYTtRQUMxQixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN2QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBaUIsRUFBRSxJQUFTLEVBQUUsRUFBRTtnQkFDdEQsSUFBSSxHQUFHO29CQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTs7b0JBQ2YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3RCLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFTO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO1FBQ3ZDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFpQixFQUFFLElBQVMsRUFBRSxFQUFFO2dCQUNsRCxJQUFJLEdBQUc7b0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBOztvQkFDZixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDdEIsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQWM7UUFDeEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDdkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQWlCLEVBQUUsSUFBUyxFQUFFLEVBQUU7Z0JBQ2pELElBQUksR0FBRztvQkFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7O29CQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN0QixDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBVztRQUMzQixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN2QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxTQUFTLENBQUM7Z0JBQ1YsR0FBRyxFQUFFLEdBQUc7Z0JBQ1IsUUFBUSxFQUFFLElBQUk7YUFDakIsRUFBRSxDQUFDLEdBQWlCLEVBQUUsS0FBVSxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksR0FBRztvQkFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7cUJBQ2YsQ0FBQztvQkFDRixNQUFNLFFBQVEsR0FBRyxLQUFLLEVBQUUsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUE7b0JBQ2pELE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUE7Z0JBQ2hDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELCtDQUErQztJQUMvQyxxQkFBcUI7SUFDckIsK0NBQStDO0lBRS9DLEtBQUssQ0FBQyxhQUFhLENBQUMsV0FBZ0I7UUFDaEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDdkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxHQUFHLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQWlCLEVBQUUsT0FBWSxFQUFFLEVBQUU7Z0JBQy9ELElBQUksR0FBRztvQkFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7O29CQUNmLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUN6QixDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBWTtRQUM1QixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN2QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBaUIsRUFBRSxPQUFZLEVBQUUsRUFBRTtnQkFDM0QsSUFBSSxHQUFHO29CQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTs7b0JBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3pCLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFpQjtRQUM5QixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN2QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBaUIsRUFBRSxPQUFZLEVBQUUsRUFBRTtnQkFDMUQsSUFBSSxHQUFHO29CQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTs7b0JBQ2YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ3pCLENBQUMsQ0FBQyxDQUFBO1FBQ04sQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQsK0NBQStDO0lBQy9DLDJCQUEyQjtJQUMzQiwrQ0FBK0M7SUFFL0MsS0FBSyxDQUFDLGtCQUFrQixDQUFDLGdCQUFxQjtRQUMxQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUN2QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEdBQWlCLEVBQUUsWUFBaUIsRUFBRSxFQUFFO2dCQUM5RSxJQUFJLEdBQUc7b0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBOztvQkFDZixPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDOUIsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsWUFBaUI7UUFDdEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDdkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBaUIsRUFBRSxZQUFpQixFQUFFLEVBQUU7Z0JBQzFFLElBQUksR0FBRztvQkFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUE7O29CQUNmLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQTtZQUM5QixDQUFDLENBQUMsQ0FBQTtRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQUMsY0FBc0I7UUFDeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUE7UUFDdkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxHQUFHLENBQUMsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFDLEdBQWlCLEVBQUUsWUFBaUIsRUFBRSxFQUFFO2dCQUN6RSxJQUFJLEdBQUc7b0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBOztvQkFDZixPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7WUFDOUIsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MsZUFBZTtJQUNmLCtDQUErQztJQUUvQyxLQUFLLENBQUMsY0FBYztRQUNoQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQzdFLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7UUFDdEQsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUV2QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLEdBQUcsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQWlCLEVBQUUsV0FBZ0IsRUFBRSxFQUFFO2dCQUM1RSxJQUFJLEdBQUc7b0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO3FCQUNmLENBQUM7b0JBQ0Ysc0NBQXNDO29CQUN0QyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQzs0QkFDOUIsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUU7NEJBQy9CLElBQUksRUFBRSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxJQUFJLElBQUksRUFBRTt5QkFDM0QsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDeEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUN4QixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUE7UUFDTixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCwrQ0FBK0M7SUFDL0MscUJBQXFCO0lBQ3JCLCtDQUErQztJQUUvQyxLQUFLLENBQUMsbUJBQW1CO1FBQ3JCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDN0UsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFBO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVTtRQUNaLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDN0UsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7b0JBQ3BDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNuQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO2lCQUM3QixDQUFDLENBQUMsQ0FBQTtRQUNQLENBQUM7SUFDTCxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLG1CQUFtQjtJQUNuQiwrQ0FBK0M7SUFFL0MsS0FBSyxDQUFDLG1CQUFtQjtRQUNyQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUN0RCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDdEIsQ0FBQztRQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDL0QsT0FBTyxXQUFXLENBQUE7SUFDdEIsQ0FBQztJQUNELCtDQUErQztJQUMvQyxrQkFBa0I7SUFDbEIsK0NBQStDO0lBRS9DLEtBQUssQ0FBQyxVQUFVLENBQUMsY0FBc0IsRUFBRSxnQkFBd0I7UUFDN0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUM7WUFDbkQsZ0JBQWdCLEVBQUUsY0FBYztZQUNoQyxrQkFBa0IsRUFBRSxnQkFBZ0I7U0FDdkMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFBO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMsd0JBQXdCLENBQUMsWUFBb0IsRUFBRSxvQkFBNEI7UUFDN0UsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUM7WUFDbkQsb0JBQW9CLEVBQUUsWUFBWTtZQUNsQyxzQkFBc0IsRUFBRSxvQkFBb0I7U0FDL0MsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFBO0lBQzlCLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUMsSUFPM0I7UUFDRyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBRXRGLElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxPQUFPLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7b0JBQzVDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFO29CQUM3QixJQUFJLEVBQUU7d0JBQ0Ysb0JBQW9CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjt3QkFDL0MsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksUUFBUTt3QkFDekMsY0FBYyxFQUFFLElBQUksSUFBSSxFQUFFO3dCQUMxQixhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJO3FCQUM1QztpQkFDSixDQUFDLENBQUMsQ0FBQTtRQUNQLENBQUM7UUFFRCxPQUFPLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7Z0JBQzVDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ3ZDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7Z0JBQzNDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxvQkFBb0I7Z0JBQy9DLHNCQUFzQixFQUFFLElBQUksQ0FBQyxzQkFBc0I7Z0JBQ25ELFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLFFBQVE7Z0JBQ3pDLGNBQWMsRUFBRSxJQUFJLElBQUksRUFBRTtnQkFDMUIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSTthQUM1QyxDQUFDLENBQUMsQ0FBQTtJQUNQLENBQUM7Q0FDSjtBQUVELGtCQUFlLHVCQUF1QixDQUFBIn0=
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = quickbooksOrderSyncSubscriber;
5
+ const sync_order_to_quickbooks_1 = require("../workflows/sync-order-to-quickbooks");
6
+ async function quickbooksOrderSyncSubscriber({ event: { data }, container, }) {
7
+ const orderModuleService = container.resolve("orderModuleService");
8
+ const order = await orderModuleService.retrieveOrder(data.id, {
9
+ relations: ["items", "billing_address", "shipping_address"]
10
+ });
11
+ await (0, sync_order_to_quickbooks_1.syncOrderToQuickBooksWorkflow)(container).run({
12
+ input: { order },
13
+ });
14
+ }
15
+ exports.config = {
16
+ event: ["order.placed"],
17
+ };
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tib29rcy1vcmRlci1zeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL3F1aWNrYm9va3Mtb3JkZXItc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSxnREFhQztBQWZELG9GQUFxRjtBQUV0RSxLQUFLLFVBQVUsNkJBQTZCLENBQUMsRUFDeEQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUNvQjtJQUU3QixNQUFNLGtCQUFrQixHQUFRLFNBQVMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUN2RSxNQUFNLEtBQUssR0FBRyxNQUFNLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQzFELFNBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsQ0FBQztLQUM5RCxDQUFDLENBQUE7SUFFRixNQUFNLElBQUEsd0RBQTZCLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQy9DLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRTtLQUNuQixDQUFDLENBQUE7QUFDTixDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3BDLEtBQUssRUFBRSxDQUFDLGNBQWMsQ0FBQztDQUMxQixDQUFBIn0=
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = quickbooksProductSyncSubscriber;
5
+ const sync_product_to_quickbooks_1 = require("../workflows/sync-product-to-quickbooks");
6
+ async function quickbooksProductSyncSubscriber({ event: { data }, container, }) {
7
+ const productModuleService = container.resolve("productModuleService");
8
+ const product = await productModuleService.retrieveProduct(data.id, {
9
+ relations: ["variants"]
10
+ });
11
+ // Triggers workflow for each variant
12
+ if (product.variants && product.variants.length > 0) {
13
+ for (const variant of product.variants) {
14
+ await (0, sync_product_to_quickbooks_1.syncProductToQuickBooksWorkflow)(container).run({
15
+ input: {
16
+ product,
17
+ variant
18
+ },
19
+ });
20
+ }
21
+ }
22
+ }
23
+ exports.config = {
24
+ event: ["product.created", "product.updated"],
25
+ };
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tib29rcy1wcm9kdWN0LXN5bmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvcXVpY2tib29rcy1wcm9kdWN0LXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0Esa0RBcUJDO0FBdkJELHdGQUF5RjtBQUUxRSxLQUFLLFVBQVUsK0JBQStCLENBQUMsRUFDMUQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUNvQjtJQUU3QixNQUFNLG9CQUFvQixHQUFRLFNBQVMsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtJQUMzRSxNQUFNLE9BQU8sR0FBRyxNQUFNLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQ2hFLFNBQVMsRUFBRSxDQUFDLFVBQVUsQ0FBQztLQUMxQixDQUFDLENBQUE7SUFFRixxQ0FBcUM7SUFDckMsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xELEtBQUssTUFBTSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBQSw0REFBK0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQ2pELEtBQUssRUFBRTtvQkFDSCxPQUFPO29CQUNQLE9BQU87aUJBQ1Y7YUFDSixDQUFDLENBQUE7UUFDTixDQUFDO0lBQ0wsQ0FBQztBQUNMLENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBcUI7SUFDcEMsS0FBSyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUM7Q0FDaEQsQ0FBQSJ9
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = quickbooksSyncSubscriber;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const sync_customer_to_quickbooks_1 = require("../workflows/sync-customer-to-quickbooks");
7
+ async function quickbooksSyncSubscriber({ event: { data }, container, }) {
8
+ // Fetch customer details
9
+ // Note: We need to resolve Customer Module or Service to get customer details
10
+ // For now, Medusa v2 events pass entity ID.
11
+ const customerModuleService = container.resolve(utils_1.Modules.CUSTOMER);
12
+ const customer = await customerModuleService.retrieveCustomer(data.id, {
13
+ relations: ["billing_address", "shipping_addresses"]
14
+ });
15
+ await (0, sync_customer_to_quickbooks_1.syncCustomerToQuickBooksWorkflow)(container).run({
16
+ input: { customer },
17
+ });
18
+ }
19
+ exports.config = {
20
+ event: ["customer.created", "customer.updated"],
21
+ };
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tib29rcy1zeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL3F1aWNrYm9va3Mtc3luYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSwyQ0FnQkM7QUFuQkQscURBQW1EO0FBQ25ELDBGQUEyRjtBQUU1RSxLQUFLLFVBQVUsd0JBQXdCLENBQUMsRUFDbkQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUNvQjtJQUU3Qix5QkFBeUI7SUFDekIsOEVBQThFO0lBQzlFLDRDQUE0QztJQUM1QyxNQUFNLHFCQUFxQixHQUFRLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3RFLE1BQU0sUUFBUSxHQUFHLE1BQU0scUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNuRSxTQUFTLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxvQkFBb0IsQ0FBQztLQUN2RCxDQUFDLENBQUE7SUFFRixNQUFNLElBQUEsOERBQWdDLEVBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2xELEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRTtLQUN0QixDQUFDLENBQUE7QUFDTixDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3BDLEtBQUssRUFBRSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDO0NBQ2xELENBQUEifQ==
@@ -0,0 +1,23 @@
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("./sync-customer-to-quickbooks"), exports);
18
+ __exportStar(require("./sync-product-to-quickbooks"), exports);
19
+ __exportStar(require("./sync-order-to-quickbooks"), exports);
20
+ __exportStar(require("./sync-customer-from-quickbooks"), exports);
21
+ __exportStar(require("./sync-inventory-from-quickbooks"), exports);
22
+ __exportStar(require("./sync-order-status-from-quickbooks"), exports);
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxnRUFBNkM7QUFDN0MsK0RBQTRDO0FBQzVDLDZEQUEwQztBQUMxQyxrRUFBK0M7QUFDL0MsbUVBQWdEO0FBQ2hELHNFQUFtRCJ9
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.syncOrderToQuickBooksStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const quickbooks_1 = require("../../../modules/quickbooks");
6
+ exports.syncOrderToQuickBooksStep = (0, workflows_sdk_1.createStep)("sync-order-to-quickbooks", async (input, { container }) => {
7
+ const service = container.resolve(quickbooks_1.QUICKBOOKS_MODULE);
8
+ const mapping = await service.getMapping(input.medusaOrderId, "order");
9
+ let result;
10
+ if (mapping && mapping.quickbooks_entity_id) {
11
+ // Update existing?
12
+ // Updating Invoices is complex if payments attached.
13
+ // We'll try update.
14
+ try {
15
+ // Need to fetch current to get SyncToken
16
+ if (input.type === "Invoice") {
17
+ const current = await service.getInvoice(mapping.quickbooks_entity_id);
18
+ result = await service.updateInvoice({ ...input.qbData, Id: mapping.quickbooks_entity_id, SyncToken: current.SyncToken });
19
+ }
20
+ else {
21
+ const current = await service.getSalesReceipt(mapping.quickbooks_entity_id);
22
+ result = await service.updateSalesReceipt({ ...input.qbData, Id: mapping.quickbooks_entity_id, SyncToken: current.SyncToken });
23
+ }
24
+ }
25
+ catch (e) {
26
+ // Fallback
27
+ throw e;
28
+ }
29
+ }
30
+ else {
31
+ // Create
32
+ if (input.type === "Invoice") {
33
+ result = await service.createInvoice(input.qbData);
34
+ }
35
+ else {
36
+ result = await service.createSalesReceipt(input.qbData);
37
+ }
38
+ }
39
+ return new workflows_sdk_1.StepResponse(result);
40
+ });
41
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luYy1vcmRlci10by1xdWlja2Jvb2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGVwcy9vcmRlci9zeW5jLW9yZGVyLXRvLXF1aWNrYm9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTRFO0FBQzVFLDREQUErRDtBQVNsRCxRQUFBLHlCQUF5QixHQUFHLElBQUEsMEJBQVUsRUFDL0MsMEJBQTBCLEVBQzFCLEtBQUssRUFBRSxLQUFpQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUN2RCxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLDhCQUFpQixDQUE0QixDQUFBO0lBRS9FLE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRXRFLElBQUksTUFBTSxDQUFBO0lBQ1YsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDMUMsbUJBQW1CO1FBQ25CLHFEQUFxRDtRQUNyRCxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDO1lBQ0QseUNBQXlDO1lBQ3pDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO2dCQUN0RSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO1lBQzdILENBQUM7aUJBQU0sQ0FBQztnQkFDSixNQUFNLE9BQU8sR0FBRyxNQUFNLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUE7Z0JBQzNFLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtZQUNsSSxDQUFDO1FBQ0wsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDZCxXQUFXO1lBQ1gsTUFBTSxDQUFDLENBQUE7UUFDWCxDQUFDO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDSixTQUFTO1FBQ1QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3RELENBQUM7YUFBTSxDQUFDO1lBQ0osTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMzRCxDQUFDO0lBQ0wsQ0FBQztJQUVELE9BQU8sSUFBSSw0QkFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ25DLENBQUMsQ0FDSixDQUFBIn0=