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,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ async function GET(req, res) {
5
+ res.sendStatus(200);
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3BsdWdpbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUtDO0FBTE0sS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDIn0=
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const quickbooks_1 = require("../../../../modules/quickbooks");
5
+ const GET = async (req, res) => {
6
+ const quickBooksService = req.scope.resolve(quickbooks_1.QUICKBOOKS_MODULE);
7
+ try {
8
+ const { code, realmId, state, error } = req.query;
9
+ if (error) {
10
+ return res.send(renderErrorPage(`QuickBooks connection failed: ${error}`));
11
+ }
12
+ if (!code || !realmId) {
13
+ return res.send(renderErrorPage("Missing required parameters"));
14
+ }
15
+ // Exchange code for tokens
16
+ await quickBooksService.exchangeCodeForTokens(code, realmId);
17
+ // Fetch company info to update connection
18
+ await quickBooksService.getCompanyInfo();
19
+ return res.send(renderSuccessPage(realmId));
20
+ }
21
+ catch (error) {
22
+ console.error("QuickBooks OAuth callback error:", error);
23
+ return res.send(renderErrorPage(error.message || "Connection failed"));
24
+ }
25
+ };
26
+ exports.GET = GET;
27
+ function renderSuccessPage(realmId) {
28
+ return `
29
+ <!DOCTYPE html>
30
+ <html lang="en">
31
+ <head>
32
+ <meta charset="UTF-8">
33
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
34
+ <title>QuickBooks Connected</title>
35
+ <style>
36
+ body { font-family: -apple-system, sans-serif; margin: 0; padding: 40px; display: flex; align-items: center; justify-content: center; min-height: 100vh; background: #f8fafc; }
37
+ .container { text-align: center; background: white; padding: 40px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); max-width: 400px; }
38
+ .success { color: #059669; }
39
+ .check { width: 64px; height: 64px; background: #10b981; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 0 auto 20px; }
40
+ .check::after { content: '✓'; color: white; font-size: 32px; font-weight: bold; }
41
+ h1 { margin: 0 0 16px; font-size: 24px; }
42
+ p { margin: 0 0 24px; color: #64748b; }
43
+ .btn { background: #3b82f6; color: white; padding: 12px 24px; border: none; border-radius: 6px; cursor: pointer; }
44
+ .btn:hover { background: #2563eb; }
45
+ </style>
46
+ </head>
47
+ <body>
48
+ <div class="container">
49
+ <div class="check"></div>
50
+ <h1 class="success">QuickBooks Connected!</h1>
51
+ <p>Successfully connected to QuickBooks company.</p>
52
+ <p><strong>Company ID:</strong> ${realmId}</p>
53
+ <button class="btn" onclick="window.close()">Complete Setup</button>
54
+ </div>
55
+ <script>
56
+ window.opener?.postMessage({ type: 'quickbooks_oauth_success', realmId: '${realmId}' }, window.location.origin);
57
+ setTimeout(() => window.close(), 2000);
58
+ </script>
59
+ </body>
60
+ </html>
61
+ `;
62
+ }
63
+ function renderErrorPage(message) {
64
+ return `
65
+ <!DOCTYPE html>
66
+ <html lang="en">
67
+ <head>
68
+ <meta charset="UTF-8">
69
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
70
+ <title>Connection Failed</title>
71
+ <style>
72
+ body { font-family: -apple-system, sans-serif; margin: 0; padding: 40px; display: flex; align-items: center; justify-content: center; min-height: 100vh; background: #f8fafc; }
73
+ .container { text-align: center; background: white; padding: 40px; border-radius: 8px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); max-width: 400px; }
74
+ .error { color: #dc2626; }
75
+ h1 { margin: 0 0 16px; font-size: 24px; }
76
+ p { margin: 0 0 24px; color: #64748b; }
77
+ .btn { background: #3b82f6; color: white; padding: 12px 24px; border: none; border-radius: 6px; cursor: pointer; }
78
+ .btn:hover { background: #2563eb; }
79
+ </style>
80
+ </head>
81
+ <body>
82
+ <div class="container">
83
+ <h1 class="error">Connection Failed</h1>
84
+ <p>${message}</p>
85
+ <button class="btn" onclick="window.close()">Close Window</button>
86
+ </div>
87
+ <script>
88
+ window.opener?.postMessage({ type: 'quickbooks_oauth_error', error: '${message}' }, window.location.origin);
89
+ setTimeout(() => window.close(), 3000);
90
+ </script>
91
+ </body>
92
+ </html>
93
+ `;
94
+ }
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3F1aWNrYm9va3MvY2FsbGJhY2svcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0RBQWtFO0FBRTNELE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNqRSxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDhCQUFpQixDQUE0QixDQUFBO0lBRXpGLElBQUksQ0FBQztRQUNELE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFBO1FBRWpELElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLGlDQUFpQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDOUUsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQTtRQUNuRSxDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLE1BQU0saUJBQWlCLENBQUMscUJBQXFCLENBQUMsSUFBYyxFQUFFLE9BQWlCLENBQUMsQ0FBQTtRQUVoRiwwQ0FBMEM7UUFDMUMsTUFBTSxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUV4QyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBaUIsQ0FBQyxDQUFDLENBQUE7SUFFekQsQ0FBQztJQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7UUFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksbUJBQW1CLENBQUMsQ0FBQyxDQUFBO0lBQzFFLENBQUM7QUFDTCxDQUFDLENBQUE7QUExQlksUUFBQSxHQUFHLE9BMEJmO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxPQUFlO0lBQ3RDLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQ0F3QitCLE9BQU87Ozs7bUZBSWtDLE9BQU87Ozs7O0dBS3ZGLENBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsT0FBZTtJQUNwQyxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzthQW9CRSxPQUFPOzs7OytFQUkyRCxPQUFPOzs7OztHQUtuRixDQUFBO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const quickbooks_1 = require("../../../../modules/quickbooks");
5
+ const GET = async (req, res) => {
6
+ const quickBooksService = req.scope.resolve(quickbooks_1.QUICKBOOKS_MODULE);
7
+ const state = Math.random().toString(36).substring(7);
8
+ const authUrl = quickBooksService.getAuthorizationUrl(state);
9
+ res.json({ authUrl, state });
10
+ };
11
+ exports.GET = GET;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3F1aWNrYm9va3MvY29ubmVjdC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSwrREFBa0U7QUFFM0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ2pFLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsOEJBQWlCLENBQTRCLENBQUE7SUFFekYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDckQsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFNUQsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFBO0FBQ2hDLENBQUMsQ0FBQTtBQVBZLFFBQUEsR0FBRyxPQU9mIn0=
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const quickbooks_1 = require("../../../../modules/quickbooks");
5
+ const GET = async (req, res) => {
6
+ const quickBooksService = req.scope.resolve(quickbooks_1.QUICKBOOKS_MODULE);
7
+ try {
8
+ const connection = await quickBooksService.getActiveConnection();
9
+ if (!connection) {
10
+ return res.json({
11
+ connected: false,
12
+ connection: null,
13
+ });
14
+ }
15
+ res.json({
16
+ connected: true,
17
+ connection: {
18
+ realm_id: connection.realm_id,
19
+ company_name: connection.company_name,
20
+ environment: connection.environment,
21
+ is_active: connection.is_active,
22
+ last_sync_at: connection.last_sync_at,
23
+ token_expires_at: connection.token_expires_at,
24
+ },
25
+ });
26
+ }
27
+ catch (error) {
28
+ res.status(500).json({ error: error.message });
29
+ }
30
+ };
31
+ exports.GET = GET;
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3F1aWNrYm9va3MvY29ubmVjdGlvbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSwrREFBa0U7QUFFM0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ2pFLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsOEJBQWlCLENBQTRCLENBQUE7SUFFekYsSUFBSSxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1FBRWhFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNkLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDWixTQUFTLEVBQUUsS0FBSztnQkFDaEIsVUFBVSxFQUFFLElBQUk7YUFDbkIsQ0FBQyxDQUFBO1FBQ04sQ0FBQztRQUVELEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDTCxTQUFTLEVBQUUsSUFBSTtZQUNmLFVBQVUsRUFBRTtnQkFDUixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7Z0JBQzdCLFlBQVksRUFBRSxVQUFVLENBQUMsWUFBWTtnQkFDckMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO2dCQUNuQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7Z0JBQy9CLFlBQVksRUFBRSxVQUFVLENBQUMsWUFBWTtnQkFDckMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLGdCQUFnQjthQUNoRDtTQUNKLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ2xELENBQUM7QUFDTCxDQUFDLENBQUE7QUEzQlksUUFBQSxHQUFHLE9BMkJmIn0=
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = void 0;
4
+ const quickbooks_1 = require("../../../../modules/quickbooks");
5
+ const POST = async (req, res) => {
6
+ const quickBooksService = req.scope.resolve(quickbooks_1.QUICKBOOKS_MODULE);
7
+ try {
8
+ await quickBooksService.disconnect();
9
+ res.json({ success: true, message: "Disconnected from QuickBooks" });
10
+ }
11
+ catch (error) {
12
+ res.status(500).json({ success: false, error: error.message });
13
+ }
14
+ };
15
+ exports.POST = POST;
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3F1aWNrYm9va3MvZGlzY29ubmVjdC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSwrREFBa0U7QUFFM0QsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ2xFLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsOEJBQWlCLENBQTRCLENBQUE7SUFFekYsSUFBSSxDQUFDO1FBQ0QsTUFBTSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNwQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDbEUsQ0FBQztBQUNMLENBQUMsQ0FBQTtBQVRZLFFBQUEsSUFBSSxRQVNoQiJ9
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PUT = exports.GET = void 0;
4
+ const quickbooks_1 = require("../../../../modules/quickbooks");
5
+ const GET = async (req, res) => {
6
+ const quickBooksService = req.scope.resolve(quickbooks_1.QUICKBOOKS_MODULE);
7
+ try {
8
+ const settings = await quickBooksService.getOrCreateSettings();
9
+ res.json({ settings });
10
+ }
11
+ catch (error) {
12
+ res.status(500).json({ error: error.message });
13
+ }
14
+ };
15
+ exports.GET = GET;
16
+ const PUT = async (req, res) => {
17
+ const quickBooksService = req.scope.resolve(quickbooks_1.QUICKBOOKS_MODULE);
18
+ try {
19
+ const currentSettings = await quickBooksService.getOrCreateSettings();
20
+ await quickBooksService.updateQuickBooksSettings([{
21
+ selector: { id: currentSettings.id },
22
+ data: req.body,
23
+ }]);
24
+ const updatedSettings = await quickBooksService.getOrCreateSettings();
25
+ console.log("[QuickBooks Settings] Updated:", updatedSettings);
26
+ res.json({ settings: updatedSettings });
27
+ }
28
+ catch (error) {
29
+ res.status(500).json({ error: error.message });
30
+ }
31
+ };
32
+ exports.PUT = PUT;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3F1aWNrYm9va3Mvc2V0dGluZ3Mvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsK0RBQWtFO0FBRTNELE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNqRSxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDhCQUFpQixDQUE0QixDQUFBO0lBRXpGLElBQUksQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0saUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQTtRQUM5RCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUMxQixDQUFDO0lBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztRQUNsQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0FBQ0wsQ0FBQyxDQUFBO0FBVFksUUFBQSxHQUFHLE9BU2Y7QUFFTSxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQUUsR0FBa0IsRUFBRSxHQUFtQixFQUFFLEVBQUU7SUFDakUsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyw4QkFBaUIsQ0FBNEIsQ0FBQTtJQUV6RixJQUFJLENBQUM7UUFDRCxNQUFNLGVBQWUsR0FBRyxNQUFNLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFFckUsTUFBTSxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUM5QyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFXO2FBQ3hCLENBQUMsQ0FBQyxDQUFBO1FBRUgsTUFBTSxlQUFlLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBRSxDQUFBO1FBQ3JFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLEVBQUUsZUFBZSxDQUFDLENBQUE7UUFFOUQsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFBO0lBQzNDLENBQUM7SUFBQyxPQUFPLEtBQVUsRUFBRSxDQUFDO1FBQ2xCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ2xELENBQUM7QUFDTCxDQUFDLENBQUE7QUFsQlksUUFBQSxHQUFHLE9Ba0JmIn0=
@@ -0,0 +1,95 @@
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
+ exports.POST = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const quickbooks_1 = require("../../../../modules/quickbooks");
9
+ const utils_1 = require("@medusajs/framework/utils");
10
+ const workflows_1 = require("../../../../workflows");
11
+ /**
12
+ * QuickBooks Webhook Handler
13
+ * Receives real-time notifications from QuickBooks
14
+ */
15
+ const POST = async (req, res) => {
16
+ const quickBooksService = req.scope.resolve(quickbooks_1.QUICKBOOKS_MODULE);
17
+ const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
18
+ try {
19
+ // Verify webhook signature
20
+ const verifierToken = process.env.QUICKBOOKS_WEBHOOK_VERIFIER_TOKEN;
21
+ if (verifierToken) {
22
+ const signature = req.headers["intuit-signature"];
23
+ if (!signature) {
24
+ logger.warn("[QB Webhook] Missing intuit-signature header");
25
+ return res.status(401).json({ error: "Missing signature" });
26
+ }
27
+ const payload = JSON.stringify(req.body);
28
+ const hash = crypto_1.default
29
+ .createHmac("sha256", verifierToken)
30
+ .update(payload)
31
+ .digest("base64");
32
+ if (hash !== signature) {
33
+ logger.warn("[QB Webhook] Invalid signature");
34
+ return res.status(401).json({ error: "Invalid signature" });
35
+ }
36
+ }
37
+ const body = req.body;
38
+ logger.info(`[QB Webhook] Received event: ${JSON.stringify(body, null, 2)}`);
39
+ // Get settings to check which reverse syncs are enabled
40
+ const settings = await quickBooksService.getOrCreateSettings();
41
+ // Process each event notification
42
+ for (const notification of body.eventNotifications || []) {
43
+ const realmId = notification.realmId;
44
+ const events = notification.dataChangeEvent?.entities || [];
45
+ for (const event of events) {
46
+ const entityType = event.name;
47
+ const entityId = event.id;
48
+ const operation = event.operation;
49
+ logger.info(`[QB Webhook] ${operation} ${entityType} ${entityId} (realm: ${realmId})`);
50
+ switch (entityType) {
51
+ case "Customer":
52
+ if (settings.reverse_sync_customers) {
53
+ logger.info(`[QB Webhook] Syncing customer ${entityId} to Medusa`);
54
+ await (0, workflows_1.syncCustomerFromQuickBooksWorkflow)(req.scope).run({
55
+ input: { quickbooksCustomerId: entityId }
56
+ });
57
+ }
58
+ break;
59
+ case "Item":
60
+ if (settings.reverse_sync_inventory) {
61
+ logger.info(`[QB Webhook] Syncing item ${entityId} inventory to Medusa`);
62
+ await (0, workflows_1.syncInventoryFromQuickBooksWorkflow)(req.scope).run({
63
+ input: { quickbooksItemId: entityId }
64
+ });
65
+ }
66
+ break;
67
+ case "Invoice":
68
+ case "SalesReceipt":
69
+ if (settings.reverse_sync_order_status) {
70
+ logger.info(`[QB Webhook] Syncing ${entityType} ${entityId} status to Medusa`);
71
+ await (0, workflows_1.syncOrderStatusFromQuickBooksWorkflow)(req.scope).run({
72
+ input: {
73
+ quickbooksEntityId: entityId,
74
+ entityType: entityType
75
+ }
76
+ });
77
+ }
78
+ break;
79
+ case "Payment":
80
+ logger.info(`[QB Webhook] Payment event received for ${entityId}`);
81
+ break;
82
+ default:
83
+ logger.info(`[QB Webhook] Unhandled entity type: ${entityType}`);
84
+ }
85
+ }
86
+ }
87
+ res.status(200).json({ status: "received" });
88
+ }
89
+ catch (error) {
90
+ logger.error(`[QB Webhook] Error: ${error.message}`);
91
+ res.status(500).json({ error: error.message });
92
+ }
93
+ };
94
+ exports.POST = POST;
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3F1aWNrYm9va3Mvd2ViaG9va3Mvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0Esb0RBQTJCO0FBRTNCLCtEQUFrRTtBQUNsRSxxREFBcUU7QUFDckUscURBQXNKO0FBRXRKOzs7R0FHRztBQUNJLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNsRSxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLDhCQUFpQixDQUE0QixDQUFBO0lBQ3pGLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRWxFLElBQUksQ0FBQztRQUNELDJCQUEyQjtRQUMzQixNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUFBO1FBQ25FLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBVyxDQUFBO1lBQzNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDYixNQUFNLENBQUMsSUFBSSxDQUFDLDhDQUE4QyxDQUFDLENBQUE7Z0JBQzNELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFBO1lBQy9ELENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUN4QyxNQUFNLElBQUksR0FBRyxnQkFBTTtpQkFDZCxVQUFVLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQztpQkFD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
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = GET;
4
+ async function GET(req, res) {
5
+ res.sendStatus(200);
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3BsdWdpbi9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLGtCQUtDO0FBTE0sS0FBSyxVQUFVLEdBQUcsQ0FDdkIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixDQUFDIn0=
@@ -0,0 +1,13 @@
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
+ exports.QUICKBOOKS_MODULE = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const quickbooks_service_1 = __importDefault(require("./services/quickbooks-service"));
9
+ exports.QUICKBOOKS_MODULE = "quickbooksModuleService";
10
+ exports.default = (0, utils_1.Module)(exports.QUICKBOOKS_MODULE, {
11
+ service: quickbooks_service_1.default,
12
+ });
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9xdWlja2Jvb2tzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUFrRDtBQUNsRCx1RkFBbUU7QUFFdEQsUUFBQSxpQkFBaUIsR0FBRyx5QkFBeUIsQ0FBQTtBQUUxRCxrQkFBZSxJQUFBLGNBQU0sRUFBQyx5QkFBaUIsRUFBRTtJQUNyQyxPQUFPLEVBQUUsNEJBQXVCO0NBQ25DLENBQUMsQ0FBQSJ9
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Migration20260107000000 = void 0;
4
+ const migrations_1 = require("@mikro-orm/migrations");
5
+ class Migration20260107000000 extends migrations_1.Migration {
6
+ async up() {
7
+ this.addSql('CREATE TABLE "quickbooks_connection" ("id" text not null, "realm_id" text not null, "company_name" text null, "access_token" text not null, "refresh_token" text not null, "token_expires_at" timestamptz not null, "refresh_token_expires_at" timestamptz null, "is_active" boolean not null default false, "environment" text not null default \'sandbox\', "last_sync_at" timestamptz null, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), constraint "quickbooks_connection_pkey" primary key ("id"));');
8
+ this.addSql('ALTER TABLE "quickbooks_connection" ADD CONSTRAINT "quickbooks_connection_realm_id_unique" UNIQUE ("realm_id");');
9
+ this.addSql('CREATE TABLE "quickbooks_settings" ("id" text not null, "auto_sync_customers" boolean not null default true, "auto_sync_products" boolean not null default true, "auto_sync_orders" boolean not null default true, "reverse_sync_customers" boolean not null default false, "reverse_sync_inventory" boolean not null default false, "reverse_sync_order_status" boolean not null default false, "webhook_enabled" boolean not null default true, "income_account_id" text null, "cogs_account_id" text null, "asset_account_id" text null, "deposit_account_id" text null, "updated_by" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), constraint "quickbooks_settings_pkey" primary key ("id"));');
10
+ this.addSql('CREATE TABLE "quickbooks_sync_mapping" ("id" text not null, "medusa_entity_type" text not null, "medusa_entity_id" text not null, "quickbooks_entity_type" text not null, "quickbooks_entity_id" text not null, "sync_token" text null, "sync_status" text not null default \'pending\', "last_synced_at" timestamptz null, "error_message" text null, "retry_count" integer not null default 0, "metadata" jsonb null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), constraint "quickbooks_sync_mapping_pkey" primary key ("id"));');
11
+ }
12
+ async down() {
13
+ this.addSql('DROP TABLE "quickbooks_sync_mapping";');
14
+ this.addSql('DROP TABLE "quickbooks_settings";');
15
+ this.addSql('DROP TABLE "quickbooks_connection";');
16
+ }
17
+ }
18
+ exports.Migration20260107000000 = Migration20260107000000;
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjAxMDcwMDAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9xdWlja2Jvb2tzL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNjAxMDcwMDAwMDAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsc0RBQWtEO0FBRWxELE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFFbEQsS0FBSyxDQUFDLEVBQUU7UUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLHNqQkFBc2pCLENBQUMsQ0FBQztRQUNwa0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpSEFBaUgsQ0FBQyxDQUFDO1FBRS9ILElBQUksQ0FBQyxNQUFNLENBQUMsa3VCQUFrdUIsQ0FBQyxDQUFDO1FBRWh2QixJQUFJLENBQUMsTUFBTSxDQUFDLDBqQkFBMGpCLENBQUMsQ0FBQztJQUM1a0IsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztDQUVKO0FBakJELDBEQWlCQyJ9
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuickBooksSettings = exports.QuickBooksSyncMapping = exports.QuickBooksConnection = void 0;
4
+ var quickbooks_connection_1 = require("./quickbooks-connection");
5
+ Object.defineProperty(exports, "QuickBooksConnection", { enumerable: true, get: function () { return quickbooks_connection_1.QuickBooksConnection; } });
6
+ var quickbooks_sync_mapping_1 = require("./quickbooks-sync-mapping");
7
+ Object.defineProperty(exports, "QuickBooksSyncMapping", { enumerable: true, get: function () { return quickbooks_sync_mapping_1.QuickBooksSyncMapping; } });
8
+ var quickbooks_settings_1 = require("./quickbooks-settings");
9
+ Object.defineProperty(exports, "QuickBooksSettings", { enumerable: true, get: function () { return quickbooks_settings_1.QuickBooksSettings; } });
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9xdWlja2Jvb2tzL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRUFBOEQ7QUFBckQsNkhBQUEsb0JBQW9CLE9BQUE7QUFDN0IscUVBQWlFO0FBQXhELGdJQUFBLHFCQUFxQixPQUFBO0FBQzlCLDZEQUEwRDtBQUFqRCx5SEFBQSxrQkFBa0IsT0FBQSJ9
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuickBooksConnection = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ exports.QuickBooksConnection = utils_1.model.define("quickbooks_connection", {
6
+ id: utils_1.model.id().primaryKey(),
7
+ realm_id: utils_1.model.text().unique(),
8
+ company_name: utils_1.model.text().nullable(),
9
+ access_token: utils_1.model.text(),
10
+ refresh_token: utils_1.model.text(),
11
+ token_expires_at: utils_1.model.dateTime(),
12
+ refresh_token_expires_at: utils_1.model.dateTime().nullable(),
13
+ is_active: utils_1.model.boolean().default(false),
14
+ environment: utils_1.model.enum(["sandbox", "production"]).default("sandbox"),
15
+ last_sync_at: utils_1.model.dateTime().nullable(),
16
+ metadata: utils_1.model.json().nullable(),
17
+ created_at: utils_1.model.dateTime().default(new Date()),
18
+ updated_at: utils_1.model.dateTime().default(new Date()),
19
+ });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tib29rcy1jb25uZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcXVpY2tib29rcy9tb2RlbHMvcXVpY2tib29rcy1jb25uZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFEQUFpRDtBQUVwQyxRQUFBLG9CQUFvQixHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUU7SUFDdEUsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsUUFBUSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUU7SUFDL0IsWUFBWSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDckMsWUFBWSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDMUIsYUFBYSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDM0IsZ0JBQWdCLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRTtJQUNsQyx3QkFBd0IsRUFBRSxhQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3JELFNBQVMsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUN6QyxXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDckUsWUFBWSxFQUFFLGFBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDekMsUUFBUSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDakMsVUFBVSxFQUFFLGFBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNoRCxVQUFVLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0NBQ25ELENBQUMsQ0FBQSJ9
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuickBooksSettings = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ exports.QuickBooksSettings = utils_1.model.define("quickbooks_settings", {
6
+ id: utils_1.model.id().primaryKey(),
7
+ // Forward sync settings (Medusa → QB)
8
+ auto_sync_customers: utils_1.model.boolean().default(true),
9
+ auto_sync_products: utils_1.model.boolean().default(true),
10
+ auto_sync_orders: utils_1.model.boolean().default(true),
11
+ // Reverse sync settings (QB → Medusa)
12
+ reverse_sync_customers: utils_1.model.boolean().default(false),
13
+ reverse_sync_inventory: utils_1.model.boolean().default(false),
14
+ reverse_sync_order_status: utils_1.model.boolean().default(false),
15
+ // Webhook settings
16
+ webhook_enabled: utils_1.model.boolean().default(true),
17
+ // Account configuration (for product sync)
18
+ income_account_id: utils_1.model.text().nullable(),
19
+ cogs_account_id: utils_1.model.text().nullable(),
20
+ asset_account_id: utils_1.model.text().nullable(),
21
+ deposit_account_id: utils_1.model.text().nullable(),
22
+ // Audit
23
+ updated_by: utils_1.model.text().nullable(),
24
+ created_at: utils_1.model.dateTime().default(new Date()),
25
+ updated_at: utils_1.model.dateTime().default(new Date()),
26
+ });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tib29rcy1zZXR0aW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3F1aWNrYm9va3MvbW9kZWxzL3F1aWNrYm9va3Mtc2V0dGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBRXBDLFFBQUEsa0JBQWtCLEdBQUcsYUFBSyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRTtJQUNsRSxFQUFFLEVBQUUsYUFBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRTtJQUMzQixzQ0FBc0M7SUFDdEMsbUJBQW1CLEVBQUUsYUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDbEQsa0JBQWtCLEVBQUUsYUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDakQsZ0JBQWdCLEVBQUUsYUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDL0Msc0NBQXNDO0lBQ3RDLHNCQUFzQixFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3RELHNCQUFzQixFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3RELHlCQUF5QixFQUFFLGFBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3pELG1CQUFtQjtJQUNuQixlQUFlLEVBQUUsYUFBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDOUMsMkNBQTJDO0lBQzNDLGlCQUFpQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDMUMsZUFBZSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDeEMsZ0JBQWdCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN6QyxrQkFBa0IsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQzNDLFFBQVE7SUFDUixVQUFVLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNuQyxVQUFVLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ2hELFVBQVUsRUFBRSxhQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Q0FDbkQsQ0FBQyxDQUFBIn0=
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.QuickBooksSyncMapping = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ exports.QuickBooksSyncMapping = utils_1.model.define("quickbooks_sync_mapping", {
6
+ id: utils_1.model.id().primaryKey(),
7
+ medusa_entity_type: utils_1.model.enum(["customer", "order", "product"]),
8
+ medusa_entity_id: utils_1.model.text(),
9
+ quickbooks_entity_type: utils_1.model.enum(["Customer", "Invoice", "Item", "SalesReceipt"]),
10
+ quickbooks_entity_id: utils_1.model.text(),
11
+ sync_token: utils_1.model.text().nullable(),
12
+ sync_status: utils_1.model.enum(["pending", "synced", "failed", "retry"]).default("pending"),
13
+ last_synced_at: utils_1.model.dateTime().nullable(),
14
+ error_message: utils_1.model.text().nullable(),
15
+ retry_count: utils_1.model.number().default(0),
16
+ metadata: utils_1.model.json().nullable(),
17
+ created_at: utils_1.model.dateTime().default(new Date()),
18
+ updated_at: utils_1.model.dateTime().default(new Date()),
19
+ });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpY2tib29rcy1zeW5jLW1hcHBpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9xdWlja2Jvb2tzL21vZGVscy9xdWlja2Jvb2tzLXN5bmMtbWFwcGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxREFBaUQ7QUFFcEMsUUFBQSxxQkFBcUIsR0FBRyxhQUFLLENBQUMsTUFBTSxDQUFDLHlCQUF5QixFQUFFO0lBQ3pFLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLGtCQUFrQixFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hFLGdCQUFnQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDOUIsc0JBQXNCLEVBQUUsYUFBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ25GLG9CQUFvQixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDbEMsVUFBVSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDbkMsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7SUFDcEYsY0FBYyxFQUFFLGFBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDM0MsYUFBYSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdEMsV0FBVyxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ2pDLFVBQVUsRUFBRSxhQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7SUFDaEQsVUFBVSxFQUFFLGFBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztDQUNuRCxDQUFDLENBQUEifQ==