@mercurjs/magento2-connector-plugin 0.0.0-stage → 2.3.9-canary.2

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 (134) hide show
  1. package/.medusa/server/src/admin/index.js +810 -0
  2. package/.medusa/server/src/admin/index.mjs +787 -0
  3. package/.medusa/server/src/api/admin/magento/middlewares.d.ts +2 -0
  4. package/.medusa/server/src/api/admin/magento/middlewares.js +96 -0
  5. package/.medusa/server/src/api/admin/magento/order-groups/[id]/payments/cancel/route.d.ts +4 -0
  6. package/.medusa/server/src/api/admin/magento/order-groups/[id]/payments/cancel/route.js +24 -0
  7. package/.medusa/server/src/api/admin/magento/order-groups/[id]/payments/capture/route.d.ts +4 -0
  8. package/.medusa/server/src/api/admin/magento/order-groups/[id]/payments/capture/route.js +24 -0
  9. package/.medusa/server/src/api/admin/magento/order-groups/payment-fields.d.ts +1 -0
  10. package/.medusa/server/src/api/admin/magento/order-groups/payment-fields.js +16 -0
  11. package/.medusa/server/src/api/admin/magento/order-groups/validators.d.ts +9 -0
  12. package/.medusa/server/src/api/admin/magento/order-groups/validators.js +15 -0
  13. package/.medusa/server/src/api/admin/magento/orders/[id]/refunds/external/route.d.ts +4 -0
  14. package/.medusa/server/src/api/admin/magento/orders/[id]/refunds/external/route.js +24 -0
  15. package/.medusa/server/src/api/admin/magento/orders/validators.d.ts +7 -0
  16. package/.medusa/server/src/api/admin/magento/orders/validators.js +12 -0
  17. package/.medusa/server/src/api/admin/magento/status/route.d.ts +3 -0
  18. package/.medusa/server/src/api/admin/magento/status/route.js +46 -0
  19. package/.medusa/server/src/api/admin/magento/webhooks/[id]/deliveries/[delivery_id]/redeliver/route.d.ts +4 -0
  20. package/.medusa/server/src/api/admin/magento/webhooks/[id]/deliveries/[delivery_id]/redeliver/route.js +23 -0
  21. package/.medusa/server/src/api/admin/magento/webhooks/[id]/deliveries/route.d.ts +4 -0
  22. package/.medusa/server/src/api/admin/magento/webhooks/[id]/deliveries/route.js +21 -0
  23. package/.medusa/server/src/api/admin/magento/webhooks/[id]/route.d.ts +6 -0
  24. package/.medusa/server/src/api/admin/magento/webhooks/[id]/route.js +40 -0
  25. package/.medusa/server/src/api/admin/magento/webhooks/query-config.d.ts +22 -0
  26. package/.medusa/server/src/api/admin/magento/webhooks/query-config.js +36 -0
  27. package/.medusa/server/src/api/admin/magento/webhooks/route.d.ts +5 -0
  28. package/.medusa/server/src/api/admin/magento/webhooks/route.js +37 -0
  29. package/.medusa/server/src/api/admin/magento/webhooks/validators.d.ts +117 -0
  30. package/.medusa/server/src/api/admin/magento/webhooks/validators.js +46 -0
  31. package/.medusa/server/src/api/middlewares.d.ts +2 -0
  32. package/.medusa/server/src/api/middlewares.js +8 -0
  33. package/.medusa/server/src/index.d.ts +4 -0
  34. package/.medusa/server/src/index.js +24 -0
  35. package/.medusa/server/src/jobs/prune-magento-webhook-deliveries.d.ts +6 -0
  36. package/.medusa/server/src/jobs/prune-magento-webhook-deliveries.js +16 -0
  37. package/.medusa/server/src/jobs/retry-magento-webhook-deliveries.d.ts +6 -0
  38. package/.medusa/server/src/jobs/retry-magento-webhook-deliveries.js +20 -0
  39. package/.medusa/server/src/modules/magento-webhook/index.d.ts +36 -0
  40. package/.medusa/server/src/modules/magento-webhook/index.js +14 -0
  41. package/.medusa/server/src/modules/magento-webhook/migrations/Migration20261021155148.d.ts +5 -0
  42. package/.medusa/server/src/modules/magento-webhook/migrations/Migration20261021155148.js +22 -0
  43. package/.medusa/server/src/modules/magento-webhook/models/index.d.ts +2 -0
  44. package/.medusa/server/src/modules/magento-webhook/models/index.js +11 -0
  45. package/.medusa/server/src/modules/magento-webhook/models/magento-webhook-delivery.d.ts +22 -0
  46. package/.medusa/server/src/modules/magento-webhook/models/magento-webhook-delivery.js +38 -0
  47. package/.medusa/server/src/modules/magento-webhook/models/magento-webhook-endpoint.d.ts +22 -0
  48. package/.medusa/server/src/modules/magento-webhook/models/magento-webhook-endpoint.js +23 -0
  49. package/.medusa/server/src/modules/magento-webhook/services/magento-webhook-module-service.d.ts +48 -0
  50. package/.medusa/server/src/modules/magento-webhook/services/magento-webhook-module-service.js +10 -0
  51. package/.medusa/server/src/modules/magento-webhook/utils/index.d.ts +2 -0
  52. package/.medusa/server/src/modules/magento-webhook/utils/index.js +19 -0
  53. package/.medusa/server/src/modules/magento-webhook/utils/retry.d.ts +1 -0
  54. package/.medusa/server/src/modules/magento-webhook/utils/retry.js +16 -0
  55. package/.medusa/server/src/modules/magento-webhook/utils/signature.d.ts +2 -0
  56. package/.medusa/server/src/modules/magento-webhook/utils/signature.js +13 -0
  57. package/.medusa/server/src/providers/payment-external/index.d.ts +4 -0
  58. package/.medusa/server/src/providers/payment-external/index.js +13 -0
  59. package/.medusa/server/src/providers/payment-external/service.d.ts +26 -0
  60. package/.medusa/server/src/providers/payment-external/service.js +87 -0
  61. package/.medusa/server/src/subscribers/magento-refund-requested.d.ts +5 -0
  62. package/.medusa/server/src/subscribers/magento-refund-requested.js +16 -0
  63. package/.medusa/server/src/subscribers/magento-webhook-deliver-on-create.d.ts +5 -0
  64. package/.medusa/server/src/subscribers/magento-webhook-deliver-on-create.js +16 -0
  65. package/.medusa/server/src/subscribers/magento-webhook-fan-out.d.ts +3 -0
  66. package/.medusa/server/src/subscribers/magento-webhook-fan-out.js +27 -0
  67. package/.medusa/server/src/types/common.d.ts +107 -0
  68. package/.medusa/server/src/types/common.js +43 -0
  69. package/.medusa/server/src/types/http.d.ts +129 -0
  70. package/.medusa/server/src/types/http.js +3 -0
  71. package/.medusa/server/src/types/index.d.ts +3 -0
  72. package/.medusa/server/src/types/index.js +20 -0
  73. package/.medusa/server/src/types/service.d.ts +17 -0
  74. package/.medusa/server/src/types/service.js +3 -0
  75. package/.medusa/server/src/workflows/external-payment/index.d.ts +2 -0
  76. package/.medusa/server/src/workflows/external-payment/index.js +19 -0
  77. package/.medusa/server/src/workflows/external-payment/steps/build-refund-requested-event.d.ts +32 -0
  78. package/.medusa/server/src/workflows/external-payment/steps/build-refund-requested-event.js +37 -0
  79. package/.medusa/server/src/workflows/external-payment/steps/cancel-order-group-orders.d.ts +6 -0
  80. package/.medusa/server/src/workflows/external-payment/steps/cancel-order-group-orders.js +27 -0
  81. package/.medusa/server/src/workflows/external-payment/steps/index.d.ts +5 -0
  82. package/.medusa/server/src/workflows/external-payment/steps/index.js +22 -0
  83. package/.medusa/server/src/workflows/external-payment/steps/resolve-external-cart-payment.d.ts +16 -0
  84. package/.medusa/server/src/workflows/external-payment/steps/resolve-external-cart-payment.js +45 -0
  85. package/.medusa/server/src/workflows/external-payment/steps/validate-external-payment-cancelable.d.ts +7 -0
  86. package/.medusa/server/src/workflows/external-payment/steps/validate-external-payment-cancelable.js +13 -0
  87. package/.medusa/server/src/workflows/external-payment/steps/validate-external-payment.d.ts +13 -0
  88. package/.medusa/server/src/workflows/external-payment/steps/validate-external-payment.js +22 -0
  89. package/.medusa/server/src/workflows/external-payment/workflows/cancel-external-payment.d.ts +12 -0
  90. package/.medusa/server/src/workflows/external-payment/workflows/cancel-external-payment.js +39 -0
  91. package/.medusa/server/src/workflows/external-payment/workflows/capture-external-payment.d.ts +12 -0
  92. package/.medusa/server/src/workflows/external-payment/workflows/capture-external-payment.js +43 -0
  93. package/.medusa/server/src/workflows/external-payment/workflows/emit-refund-requested.d.ts +10 -0
  94. package/.medusa/server/src/workflows/external-payment/workflows/emit-refund-requested.js +45 -0
  95. package/.medusa/server/src/workflows/external-payment/workflows/index.d.ts +4 -0
  96. package/.medusa/server/src/workflows/external-payment/workflows/index.js +21 -0
  97. package/.medusa/server/src/workflows/external-payment/workflows/record-external-refund.d.ts +14 -0
  98. package/.medusa/server/src/workflows/external-payment/workflows/record-external-refund.js +58 -0
  99. package/.medusa/server/src/workflows/index.d.ts +2 -0
  100. package/.medusa/server/src/workflows/index.js +19 -0
  101. package/.medusa/server/src/workflows/magento-webhook/index.d.ts +2 -0
  102. package/.medusa/server/src/workflows/magento-webhook/index.js +19 -0
  103. package/.medusa/server/src/workflows/magento-webhook/steps/create-magento-webhook-deliveries.d.ts +6 -0
  104. package/.medusa/server/src/workflows/magento-webhook/steps/create-magento-webhook-deliveries.js +30 -0
  105. package/.medusa/server/src/workflows/magento-webhook/steps/create-magento-webhook-endpoints.d.ts +4 -0
  106. package/.medusa/server/src/workflows/magento-webhook/steps/create-magento-webhook-endpoints.js +18 -0
  107. package/.medusa/server/src/workflows/magento-webhook/steps/delete-magento-webhook-deliveries.d.ts +6 -0
  108. package/.medusa/server/src/workflows/magento-webhook/steps/delete-magento-webhook-deliveries.js +15 -0
  109. package/.medusa/server/src/workflows/magento-webhook/steps/delete-magento-webhook-endpoints.d.ts +3 -0
  110. package/.medusa/server/src/workflows/magento-webhook/steps/delete-magento-webhook-endpoints.js +18 -0
  111. package/.medusa/server/src/workflows/magento-webhook/steps/index.d.ts +7 -0
  112. package/.medusa/server/src/workflows/magento-webhook/steps/index.js +24 -0
  113. package/.medusa/server/src/workflows/magento-webhook/steps/send-magento-webhook-delivery.d.ts +7 -0
  114. package/.medusa/server/src/workflows/magento-webhook/steps/send-magento-webhook-delivery.js +74 -0
  115. package/.medusa/server/src/workflows/magento-webhook/steps/update-magento-webhook-endpoints.d.ts +4 -0
  116. package/.medusa/server/src/workflows/magento-webhook/steps/update-magento-webhook-endpoints.js +29 -0
  117. package/.medusa/server/src/workflows/magento-webhook/steps/validate-magento-webhook-delivery.d.ts +10 -0
  118. package/.medusa/server/src/workflows/magento-webhook/steps/validate-magento-webhook-delivery.js +19 -0
  119. package/.medusa/server/src/workflows/magento-webhook/workflows/create-magento-webhook-endpoints.d.ts +8 -0
  120. package/.medusa/server/src/workflows/magento-webhook/workflows/create-magento-webhook-endpoints.js +16 -0
  121. package/.medusa/server/src/workflows/magento-webhook/workflows/delete-magento-webhook-endpoints.d.ts +5 -0
  122. package/.medusa/server/src/workflows/magento-webhook/workflows/delete-magento-webhook-endpoints.js +11 -0
  123. package/.medusa/server/src/workflows/magento-webhook/workflows/deliver-magento-webhook.d.ts +7 -0
  124. package/.medusa/server/src/workflows/magento-webhook/workflows/deliver-magento-webhook.js +12 -0
  125. package/.medusa/server/src/workflows/magento-webhook/workflows/enqueue-magento-webhook-deliveries.d.ts +6 -0
  126. package/.medusa/server/src/workflows/magento-webhook/workflows/enqueue-magento-webhook-deliveries.js +17 -0
  127. package/.medusa/server/src/workflows/magento-webhook/workflows/index.d.ts +6 -0
  128. package/.medusa/server/src/workflows/magento-webhook/workflows/index.js +23 -0
  129. package/.medusa/server/src/workflows/magento-webhook/workflows/prune-magento-webhook-deliveries.d.ts +6 -0
  130. package/.medusa/server/src/workflows/magento-webhook/workflows/prune-magento-webhook-deliveries.js +11 -0
  131. package/.medusa/server/src/workflows/magento-webhook/workflows/update-magento-webhook-endpoints.d.ts +6 -0
  132. package/.medusa/server/src/workflows/magento-webhook/workflows/update-magento-webhook-endpoints.js +11 -0
  133. package/README.md +64 -2
  134. package/package.json +96 -4
@@ -0,0 +1,810 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
19
+ value: mod,
20
+ enumerable: true
21
+ }) : target, mod));
22
+ //#endregion
23
+ let _medusajs_icons = require("@medusajs/icons");
24
+ let _mercurjs_dashboard_shared = require("@mercurjs/dashboard-shared");
25
+ let _mercurjs_dashboard_sdk = require("@mercurjs/dashboard-sdk");
26
+ let react = require("react");
27
+ let _medusajs_ui = require("@medusajs/ui");
28
+ let _tanstack_react_query = require("@tanstack/react-query");
29
+ let react_jsx_runtime = require("react/jsx-runtime");
30
+ let _mercurjs_client = require("@mercurjs/client");
31
+ let _tanstack_react_table = require("@tanstack/react-table");
32
+ let react_router_dom = require("react-router-dom");
33
+ let _hookform_resolvers_zod = require("@hookform/resolvers/zod");
34
+ let react_hook_form = require("react-hook-form");
35
+ let zod = require("zod");
36
+ zod = __toESM(zod);
37
+ //#region src/admin/providers/settings-providers.tsx
38
+ /** Settings routes mount outside the host dashboard's React providers, so each one supplies its own. */
39
+ var SettingsProviders = ({ children }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_tanstack_react_query.QueryClientProvider, {
40
+ client: _mercurjs_dashboard_shared.queryClient,
41
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.TooltipProvider, { children })
42
+ });
43
+ //#endregion
44
+ //#region src/admin/lib/client.ts
45
+ var client = (0, _mercurjs_client.createClient)({
46
+ baseUrl: "http://localhost:9000",
47
+ fetchOptions: { credentials: "omit" },
48
+ auth: (0, _mercurjs_client.adminAuth)()
49
+ });
50
+ //#endregion
51
+ //#region src/admin/hooks/api/magento.tsx
52
+ var magentoStatusQueryKeys = (0, _mercurjs_dashboard_shared.queryKeysFactory)("admin_magento_status");
53
+ var magentoWebhookQueryKeys = (0, _mercurjs_dashboard_shared.queryKeysFactory)("admin_magento_webhooks");
54
+ var magentoDeliveryQueryKeys = (0, _mercurjs_dashboard_shared.queryKeysFactory)("admin_magento_deliveries");
55
+ var useMagentoStatus = (options) => {
56
+ const { data, ...rest } = (0, _tanstack_react_query.useQuery)({
57
+ queryKey: magentoStatusQueryKeys.all,
58
+ queryFn: () => client.admin.magento.status.query({}),
59
+ ...options
60
+ });
61
+ return {
62
+ connection: data,
63
+ ...rest
64
+ };
65
+ };
66
+ var useMagentoWebhooks = (query = {}, options) => {
67
+ const { data, ...rest } = (0, _tanstack_react_query.useQuery)({
68
+ queryKey: magentoWebhookQueryKeys.list(query),
69
+ queryFn: () => client.admin.magento.webhooks.query(query),
70
+ ...options
71
+ });
72
+ return {
73
+ webhooks: data?.webhooks,
74
+ count: data?.count,
75
+ ...rest
76
+ };
77
+ };
78
+ var useMagentoWebhook = (id, options) => {
79
+ const { data, ...rest } = (0, _tanstack_react_query.useQuery)({
80
+ queryKey: magentoWebhookQueryKeys.detail(id),
81
+ queryFn: () => client.admin.magento.webhooks.$id.query({ $id: id }),
82
+ ...options
83
+ });
84
+ return {
85
+ webhook: data?.webhook,
86
+ ...rest
87
+ };
88
+ };
89
+ var useMagentoWebhookDeliveries = (id, query = {}, options) => {
90
+ const { data, ...rest } = (0, _tanstack_react_query.useQuery)({
91
+ queryKey: magentoDeliveryQueryKeys.list({
92
+ id,
93
+ ...query
94
+ }),
95
+ queryFn: () => client.admin.magento.webhooks.$id.deliveries.query({
96
+ $id: id,
97
+ ...query
98
+ }),
99
+ ...options
100
+ });
101
+ return {
102
+ deliveries: data?.deliveries,
103
+ count: data?.count,
104
+ ...rest
105
+ };
106
+ };
107
+ var useInvalidateMagento = () => {
108
+ const queryClient = (0, _tanstack_react_query.useQueryClient)();
109
+ return (id) => {
110
+ queryClient.invalidateQueries({ queryKey: magentoStatusQueryKeys.all });
111
+ queryClient.invalidateQueries({ queryKey: magentoWebhookQueryKeys.lists() });
112
+ queryClient.invalidateQueries({ queryKey: magentoDeliveryQueryKeys.lists() });
113
+ if (id) queryClient.invalidateQueries({ queryKey: magentoWebhookQueryKeys.detail(id) });
114
+ };
115
+ };
116
+ var useCreateMagentoWebhook = (options) => {
117
+ const invalidate = useInvalidateMagento();
118
+ return (0, _tanstack_react_query.useMutation)({
119
+ mutationFn: (payload) => client.admin.magento.webhooks.mutate(payload),
120
+ ...options,
121
+ onSuccess: (data, variables, context) => {
122
+ invalidate();
123
+ options?.onSuccess?.(data, variables, context);
124
+ }
125
+ });
126
+ };
127
+ var useUpdateMagentoWebhook = (id, options) => {
128
+ const invalidate = useInvalidateMagento();
129
+ return (0, _tanstack_react_query.useMutation)({
130
+ mutationFn: (payload) => client.admin.magento.webhooks.$id.mutate({
131
+ $id: id,
132
+ ...payload
133
+ }),
134
+ ...options,
135
+ onSuccess: (data, variables, context) => {
136
+ invalidate(id);
137
+ options?.onSuccess?.(data, variables, context);
138
+ }
139
+ });
140
+ };
141
+ var useDeleteMagentoWebhook = (id, options) => {
142
+ const invalidate = useInvalidateMagento();
143
+ return (0, _tanstack_react_query.useMutation)({
144
+ mutationFn: () => client.admin.magento.webhooks.$id.delete({ $id: id }),
145
+ ...options,
146
+ onSuccess: (data, variables, context) => {
147
+ invalidate(id);
148
+ options?.onSuccess?.(data, variables, context);
149
+ }
150
+ });
151
+ };
152
+ var useRedeliverMagentoWebhook = (id, options) => {
153
+ const invalidate = useInvalidateMagento();
154
+ return (0, _tanstack_react_query.useMutation)({
155
+ mutationFn: (deliveryId) => client.admin.magento.webhooks.$id.deliveries.$delivery_id.redeliver.mutate({
156
+ $id: id,
157
+ $delivery_id: deliveryId
158
+ }),
159
+ ...options,
160
+ onSuccess: (data, variables, context) => {
161
+ invalidate(id);
162
+ options?.onSuccess?.(data, variables, context);
163
+ }
164
+ });
165
+ };
166
+ //#endregion
167
+ //#region src/admin/routes/settings/magento/components/magento-status-section.tsx
168
+ var formatDate = (value) => value ? new Date(value).toLocaleString() : "Never";
169
+ var MagentoStatusSection = () => {
170
+ const { connection: status, isPending, isError, error } = useMagentoStatus({ refetchInterval: 3e4 });
171
+ if (isError) throw error;
172
+ const connected = !!status?.payment_provider.installed && (status?.webhooks.active ?? 0) > 0;
173
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_medusajs_ui.Container, {
174
+ className: "divide-y p-0",
175
+ "data-testid": "magento-status-section",
176
+ children: [
177
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
178
+ className: "flex items-center justify-between px-6 py-4",
179
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Heading, { children: "Magento" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Text, {
180
+ size: "small",
181
+ className: "text-ui-fg-subtle",
182
+ children: "Connection between this marketplace and your Magento 2 storefront."
183
+ })] }), isPending || !status ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.StatusBadge, {
184
+ color: "grey",
185
+ children: "Checking"
186
+ }) : connected ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.StatusBadge, {
187
+ color: "green",
188
+ children: "Connected"
189
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.StatusBadge, {
190
+ color: "orange",
191
+ children: "Not configured"
192
+ })]
193
+ }),
194
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SectionRow, {
195
+ title: "Payment provider",
196
+ value: status ? status.payment_provider.installed ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.StatusBadge, {
197
+ color: "green",
198
+ children: status.payment_provider.id
199
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.StatusBadge, {
200
+ color: "red",
201
+ children: "Missing from payment module"
202
+ }) : "-"
203
+ }),
204
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SectionRow, {
205
+ title: "Webhooks",
206
+ value: status ? `${status.webhooks.active} active of ${status.webhooks.total}` : "-"
207
+ }),
208
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SectionRow, {
209
+ title: `Deliveries (last ${status?.deliveries.window_hours ?? 24}h)`,
210
+ value: status ? [
211
+ `${status.deliveries.delivered} delivered`,
212
+ status.deliveries.failed ? `${status.deliveries.failed} retrying` : null,
213
+ status.deliveries.dead ? `${status.deliveries.dead} gave up` : null,
214
+ status.deliveries.pending ? `${status.deliveries.pending} queued` : null
215
+ ].filter(Boolean).join(" · ") : "-"
216
+ }),
217
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SectionRow, {
218
+ title: "Last delivery",
219
+ value: status ? formatDate(status.deliveries.last_delivered_at) : "-"
220
+ }),
221
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SectionRow, {
222
+ title: "Orders from Magento (24h)",
223
+ value: status ? String(status.orders.last_24h) : "-"
224
+ })
225
+ ]
226
+ });
227
+ };
228
+ //#endregion
229
+ //#region src/admin/hooks/use-action-blocker.ts
230
+ var useActionBlocker = (key, right) => {
231
+ const allowed = (0, _mercurjs_dashboard_shared.useCan)(key, right);
232
+ return (0, react.useMemo)(() => allowed ? { disabled: false } : {
233
+ disabled: true,
234
+ disabledTooltip: "You do not have permission to do this"
235
+ }, [allowed]);
236
+ };
237
+ //#endregion
238
+ //#region src/admin/routes/settings/magento/components/magento-webhook-table.tsx
239
+ var PAGE_SIZE$1 = 20;
240
+ var MagentoWebhookTable = () => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_medusajs_ui.Container, {
241
+ className: "divide-y p-0",
242
+ "data-testid": "magento-webhook-table",
243
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MagentoWebhookHeader, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MagentoWebhookDataTable, {})]
244
+ });
245
+ var MagentoWebhookHeader = () => {
246
+ const createBlocker = useActionBlocker("integrations", "manage");
247
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
248
+ className: "flex items-center justify-between px-6 py-4",
249
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Heading, { children: "Webhooks" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Text, {
250
+ size: "small",
251
+ className: "text-ui-fg-subtle",
252
+ children: "Endpoints in Magento that receive offer, seller, product and order events."
253
+ })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Button, {
254
+ size: "small",
255
+ variant: "secondary",
256
+ asChild: true,
257
+ disabled: createBlocker.disabled,
258
+ "data-testid": "magento-webhook-create-button",
259
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_router_dom.Link, {
260
+ to: "create",
261
+ children: "Add endpoint"
262
+ })
263
+ })]
264
+ });
265
+ };
266
+ var MagentoWebhookDataTable = () => {
267
+ const raw = (0, _mercurjs_dashboard_shared.useQueryParams)(["offset"]);
268
+ const { webhooks, count, isPending, isError, error } = useMagentoWebhooks({
269
+ limit: PAGE_SIZE$1,
270
+ offset: raw.offset ? Number(raw.offset) : 0
271
+ }, { placeholderData: _tanstack_react_query.keepPreviousData });
272
+ const data = (0, react.useMemo)(() => webhooks ?? [], [webhooks]);
273
+ const columns = useColumns$1();
274
+ const { table } = (0, _mercurjs_dashboard_shared.useDataTable)({
275
+ data,
276
+ columns,
277
+ count: count ?? 0,
278
+ enablePagination: true,
279
+ getRowId: (row) => row.id,
280
+ pageSize: PAGE_SIZE$1
281
+ });
282
+ if (isError) throw error;
283
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared._DataTable, {
284
+ table,
285
+ columns,
286
+ count: count ?? 0,
287
+ pageSize: PAGE_SIZE$1,
288
+ isLoading: isPending,
289
+ queryObject: raw,
290
+ pagination: true,
291
+ navigateTo: (row) => row.original.id,
292
+ noRecords: {
293
+ title: "No webhook endpoints yet",
294
+ message: "Add the endpoint your Magento connector exposes to start receiving events."
295
+ }
296
+ });
297
+ };
298
+ var columnHelper$1 = (0, _tanstack_react_table.createColumnHelper)();
299
+ var useColumns$1 = () => (0, react.useMemo)(() => [
300
+ columnHelper$1.accessor("url", {
301
+ header: () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextHeader, { text: "URL" }),
302
+ cell: ({ getValue }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextCell, { text: getValue() })
303
+ }),
304
+ columnHelper$1.accessor("events", {
305
+ header: () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextHeader, { text: "Events" }),
306
+ cell: ({ getValue }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextCell, { text: `${getValue().length} events` })
307
+ }),
308
+ columnHelper$1.accessor("is_active", {
309
+ header: () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextHeader, { text: "Status" }),
310
+ cell: ({ getValue }) => getValue() ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.StatusCell, {
311
+ color: "green",
312
+ children: "Active"
313
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.StatusCell, {
314
+ color: "grey",
315
+ children: "Paused"
316
+ })
317
+ }),
318
+ columnHelper$1.accessor("created_at", {
319
+ header: () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextHeader, { text: "Created" }),
320
+ cell: ({ getValue }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.DateCell, { date: getValue() })
321
+ })
322
+ ], []);
323
+ //#endregion
324
+ //#region src/admin/routes/settings/magento/page.tsx
325
+ var MagentoPage = ({ children }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingsProviders, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SingleColumnPage, {
326
+ hasOutlet: true,
327
+ "data-testid": "magento-page",
328
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.WidgetZone, {
329
+ id: "magento.list",
330
+ children: react.Children.count(children) > 0 ? children : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MagentoStatusSection, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MagentoWebhookTable, {})] })
331
+ })
332
+ }) });
333
+ var config = (0, _mercurjs_dashboard_sdk.defineRouteConfig)({
334
+ label: "Magento",
335
+ icon: _medusajs_icons.ShoppingBag,
336
+ rank: 60,
337
+ group: "developer",
338
+ permissions: ["integrations:view"]
339
+ });
340
+ var handle$1 = {
341
+ breadcrumb: () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "Magento" }),
342
+ permissions: "integrations:view"
343
+ };
344
+ //#endregion
345
+ //#region src/admin/routes/settings/magento/create/page.tsx
346
+ var EVENT_GROUPS = [
347
+ {
348
+ label: "Offers",
349
+ events: [
350
+ "offer.created",
351
+ "offer.updated",
352
+ "offer.deleted"
353
+ ]
354
+ },
355
+ {
356
+ label: "Sellers",
357
+ events: [
358
+ "seller.updated",
359
+ "seller.approved",
360
+ "seller.suspended",
361
+ "seller.unsuspended",
362
+ "seller.terminated",
363
+ "seller.unterminated"
364
+ ]
365
+ },
366
+ {
367
+ label: "Products",
368
+ events: ["product.published", "product.rejected"]
369
+ },
370
+ {
371
+ label: "Orders",
372
+ events: [
373
+ "order_group.created",
374
+ "order.updated",
375
+ "order.canceled",
376
+ "order.fulfillment_created",
377
+ "order.fulfillment_canceled",
378
+ "shipment.created",
379
+ "delivery.created"
380
+ ]
381
+ },
382
+ {
383
+ label: "Returns and refunds",
384
+ events: [
385
+ "order.return_requested",
386
+ "order.return_received",
387
+ "order.refund_requested",
388
+ "order.refund_recorded"
389
+ ]
390
+ }
391
+ ];
392
+ var ALL_EVENTS = EVENT_GROUPS.flatMap((group) => group.events);
393
+ var CreateMagentoWebhookSchema = zod.object({
394
+ url: zod.string().url("Enter a full URL including https://"),
395
+ description: zod.string().optional(),
396
+ events: zod.array(zod.string()).min(1, "Pick at least one event")
397
+ });
398
+ var CreateMagentoWebhookForm = () => {
399
+ const { handleSuccess } = (0, _mercurjs_dashboard_shared.useRouteModal)();
400
+ const [secret, setSecret] = (0, react.useState)(null);
401
+ const [createdId, setCreatedId] = (0, react.useState)(null);
402
+ const form = (0, react_hook_form.useForm)({
403
+ defaultValues: {
404
+ url: "",
405
+ description: "",
406
+ events: ALL_EVENTS
407
+ },
408
+ resolver: (0, _hookform_resolvers_zod.zodResolver)(CreateMagentoWebhookSchema)
409
+ });
410
+ const { mutateAsync, isPending } = useCreateMagentoWebhook({
411
+ onSuccess: ({ webhook }) => {
412
+ setSecret(webhook.secret);
413
+ setCreatedId(webhook.id);
414
+ },
415
+ onError: (e) => _medusajs_ui.toast.error(e.message)
416
+ });
417
+ const handleSubmit = form.handleSubmit(async (data) => {
418
+ await mutateAsync({
419
+ url: data.url,
420
+ events: data.events,
421
+ description: data.description || null
422
+ });
423
+ });
424
+ if (secret && createdId) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.RouteDrawer.Body, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
425
+ className: "flex flex-col gap-y-4",
426
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Heading, {
427
+ level: "h2",
428
+ children: "Signing secret"
429
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Text, {
430
+ size: "small",
431
+ className: "text-ui-fg-subtle",
432
+ children: "Paste this into the Magento connector configuration. It is shown only once."
433
+ })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Input, {
434
+ readOnly: true,
435
+ value: secret,
436
+ "data-testid": "magento-webhook-secret-input"
437
+ })]
438
+ }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.RouteDrawer.Footer, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
439
+ className: "flex items-center gap-x-2",
440
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Button, {
441
+ size: "small",
442
+ variant: "secondary",
443
+ onClick: () => navigator.clipboard?.writeText(secret).then(() => _medusajs_ui.toast.success("Copied")),
444
+ children: "Copy"
445
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Button, {
446
+ size: "small",
447
+ onClick: () => handleSuccess(`/settings/magento/${createdId}`),
448
+ children: "Done"
449
+ })]
450
+ }) })] });
451
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.RouteDrawer.Form, {
452
+ form,
453
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mercurjs_dashboard_shared.KeyboundForm, {
454
+ onSubmit: handleSubmit,
455
+ className: "flex flex-1 flex-col overflow-hidden",
456
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mercurjs_dashboard_shared.RouteDrawer.Body, {
457
+ className: "flex flex-1 flex-col gap-y-6 overflow-y-auto",
458
+ children: [
459
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.Form.Field, {
460
+ control: form.control,
461
+ name: "url",
462
+ render: ({ field }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mercurjs_dashboard_shared.Form.Item, { children: [
463
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.Form.Label, { children: "Endpoint URL" }),
464
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.Form.Control, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Input, {
465
+ placeholder: "https://shop.example.com/mercur/webhook",
466
+ autoComplete: "off",
467
+ "data-testid": "magento-webhook-url-input",
468
+ ...field
469
+ }) }),
470
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.Form.Hint, { children: "The route the Magento connector exposes for Mercur events." }),
471
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.Form.ErrorMessage, {})
472
+ ] })
473
+ }),
474
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.Form.Field, {
475
+ control: form.control,
476
+ name: "description",
477
+ render: ({ field }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mercurjs_dashboard_shared.Form.Item, { children: [
478
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.Form.Label, {
479
+ optional: true,
480
+ children: "Description"
481
+ }),
482
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.Form.Control, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Textarea, {
483
+ rows: 2,
484
+ "data-testid": "magento-webhook-description-input",
485
+ ...field
486
+ }) }),
487
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.Form.ErrorMessage, {})
488
+ ] })
489
+ }),
490
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.Form.Field, {
491
+ control: form.control,
492
+ name: "events",
493
+ render: ({ field }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mercurjs_dashboard_shared.Form.Item, { children: [
494
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.Form.Label, { children: "Events" }),
495
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
496
+ className: "flex flex-col gap-y-4",
497
+ children: EVENT_GROUPS.map((group) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
498
+ className: "flex flex-col gap-y-2",
499
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Text, {
500
+ size: "small",
501
+ weight: "plus",
502
+ children: group.label
503
+ }), group.events.map((event) => {
504
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
505
+ className: "flex items-center gap-x-2",
506
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Checkbox, {
507
+ checked: field.value.includes(event),
508
+ onCheckedChange: (next) => field.onChange(next === true ? [...field.value, event] : field.value.filter((e) => e !== event)),
509
+ "data-testid": `magento-webhook-event-${event}`
510
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Text, {
511
+ size: "small",
512
+ leading: "compact",
513
+ children: event
514
+ })]
515
+ }, event);
516
+ })]
517
+ }, group.label))
518
+ }),
519
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.Form.ErrorMessage, {})
520
+ ] })
521
+ })
522
+ ]
523
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.RouteDrawer.Footer, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
524
+ className: "flex items-center gap-x-2",
525
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.RouteDrawer.Close, {
526
+ asChild: true,
527
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Button, {
528
+ size: "small",
529
+ variant: "secondary",
530
+ children: "Cancel"
531
+ })
532
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Button, {
533
+ size: "small",
534
+ type: "submit",
535
+ isLoading: isPending,
536
+ "data-testid": "magento-webhook-save-button",
537
+ children: "Create"
538
+ })]
539
+ }) })]
540
+ })
541
+ });
542
+ };
543
+ var CreateMagentoWebhookPage = () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingsProviders, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mercurjs_dashboard_shared.RouteDrawer, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mercurjs_dashboard_shared.RouteDrawer.Header, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.RouteDrawer.Title, {
544
+ asChild: true,
545
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Heading, { children: "Add webhook endpoint" })
546
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.RouteDrawer.Description, {
547
+ className: "sr-only",
548
+ children: "Register a Magento endpoint that receives Mercur events."
549
+ })] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CreateMagentoWebhookForm, {})] }) });
550
+ //#endregion
551
+ //#region src/admin/routes/settings/magento/[id]/breadcrumb.tsx
552
+ var MagentoWebhookDetailBreadcrumb = (props) => {
553
+ const { id } = props.params || {};
554
+ const { webhook } = useMagentoWebhook(id, { enabled: Boolean(id) });
555
+ if (!webhook) return null;
556
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: webhook.description || webhook.url });
557
+ };
558
+ //#endregion
559
+ //#region src/admin/routes/settings/magento/lib/delivery-state.ts
560
+ var DELIVERY_STATE_COLOR = {
561
+ pending: "orange",
562
+ delivered: "green",
563
+ failed: "orange",
564
+ dead: "red"
565
+ };
566
+ var DELIVERY_STATE_LABEL = {
567
+ pending: "Queued",
568
+ delivered: "Delivered",
569
+ failed: "Retrying",
570
+ dead: "Gave up"
571
+ };
572
+ var LIVE_DELIVERY_STATES = ["pending", "failed"];
573
+ //#endregion
574
+ //#region src/admin/routes/settings/magento/[id]/components/magento-delivery-list-section.tsx
575
+ var PAGE_SIZE = 10;
576
+ var MagentoDeliveryListSection = ({ webhookId }) => {
577
+ const { deliveries, count, isPending, isError, error } = useMagentoWebhookDeliveries(webhookId, { limit: PAGE_SIZE }, {
578
+ placeholderData: _tanstack_react_query.keepPreviousData,
579
+ refetchInterval: (query) => query.state.data?.deliveries?.some((d) => LIVE_DELIVERY_STATES.includes(d.status)) ? 3e3 : false
580
+ });
581
+ const { mutateAsync: redeliver } = useRedeliverMagentoWebhook(webhookId, {
582
+ onSuccess: ({ delivery }) => delivery.status === "delivered" ? _medusajs_ui.toast.success("Delivered") : _medusajs_ui.toast.error(`Delivery failed with status ${delivery.response_status ?? "n/a"}`),
583
+ onError: (e) => _medusajs_ui.toast.error(e.message)
584
+ });
585
+ const data = (0, react.useMemo)(() => deliveries ?? [], [deliveries]);
586
+ const columns = useColumns(redeliver);
587
+ const { table } = (0, _mercurjs_dashboard_shared.useDataTable)({
588
+ data,
589
+ columns,
590
+ count: count ?? 0,
591
+ enablePagination: true,
592
+ getRowId: (row) => row.id,
593
+ pageSize: PAGE_SIZE
594
+ });
595
+ if (isError) throw error;
596
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_medusajs_ui.Container, {
597
+ className: "divide-y p-0",
598
+ "data-testid": "magento-delivery-list-section",
599
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
600
+ className: "px-6 py-4",
601
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Heading, {
602
+ level: "h2",
603
+ children: "Deliveries"
604
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Text, {
605
+ size: "small",
606
+ className: "text-ui-fg-subtle",
607
+ children: "Most recent attempts to reach this endpoint."
608
+ })]
609
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared._DataTable, {
610
+ table,
611
+ columns,
612
+ count: count ?? 0,
613
+ pageSize: PAGE_SIZE,
614
+ isLoading: isPending,
615
+ pagination: true,
616
+ noRecords: {
617
+ title: "No deliveries yet",
618
+ message: "Deliveries appear here once a subscribed event fires."
619
+ }
620
+ })]
621
+ });
622
+ };
623
+ var columnHelper = (0, _tanstack_react_table.createColumnHelper)();
624
+ var useColumns = (redeliver) => {
625
+ const redeliverBlocker = useActionBlocker("integrations", "edit");
626
+ return (0, react.useMemo)(() => [
627
+ columnHelper.accessor("event", {
628
+ header: () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextHeader, { text: "Event" }),
629
+ cell: ({ getValue }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextCell, { text: getValue() })
630
+ }),
631
+ columnHelper.accessor("status", {
632
+ header: () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextHeader, { text: "Status" }),
633
+ cell: ({ getValue }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.StatusCell, {
634
+ color: DELIVERY_STATE_COLOR[getValue()],
635
+ children: DELIVERY_STATE_LABEL[getValue()]
636
+ })
637
+ }),
638
+ columnHelper.accessor("response_status", {
639
+ header: () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextHeader, { text: "Response" }),
640
+ cell: ({ getValue }) => getValue() === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.PlaceholderCell, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextCell, { text: String(getValue()) })
641
+ }),
642
+ columnHelper.accessor("attempts", {
643
+ header: () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextHeader, { text: "Attempts" }),
644
+ cell: ({ getValue }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextCell, { text: String(getValue()) })
645
+ }),
646
+ columnHelper.accessor("next_attempt_at", {
647
+ header: () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextHeader, { text: "Next attempt" }),
648
+ cell: ({ getValue }) => {
649
+ const value = getValue();
650
+ return value ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.DateCell, { date: value }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.PlaceholderCell, {});
651
+ }
652
+ }),
653
+ columnHelper.accessor("created_at", {
654
+ header: () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.TextHeader, { text: "Created" }),
655
+ cell: ({ getValue }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.DateCell, { date: getValue() })
656
+ }),
657
+ columnHelper.display({
658
+ id: "actions",
659
+ cell: ({ row }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.ActionMenu, { groups: [{ actions: [{
660
+ label: "Redeliver",
661
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_icons.ArrowPath, {}),
662
+ onClick: () => redeliver(row.original.id),
663
+ ...redeliverBlocker
664
+ }] }] })
665
+ })
666
+ ], [redeliver, redeliverBlocker]);
667
+ };
668
+ //#endregion
669
+ //#region src/admin/routes/settings/magento/[id]/components/magento-webhook-general-section.tsx
670
+ var MagentoWebhookGeneralSection = ({ webhook }) => {
671
+ const navigate = (0, react_router_dom.useNavigate)();
672
+ const prompt = (0, _medusajs_ui.usePrompt)();
673
+ const editBlocker = useActionBlocker("integrations", "edit");
674
+ const deleteBlocker = useActionBlocker("integrations", "manage");
675
+ const { mutateAsync: update } = useUpdateMagentoWebhook(webhook.id, { onError: (e) => _medusajs_ui.toast.error(e.message) });
676
+ const { mutateAsync: remove } = useDeleteMagentoWebhook(webhook.id, {
677
+ onSuccess: () => {
678
+ _medusajs_ui.toast.success("Webhook endpoint deleted");
679
+ navigate("/settings/magento", { replace: true });
680
+ },
681
+ onError: (e) => _medusajs_ui.toast.error(e.message)
682
+ });
683
+ const handleDelete = async () => {
684
+ if (await prompt({
685
+ title: "Delete webhook endpoint?",
686
+ description: "Magento will stop receiving events at this URL. Delivery history for it is removed.",
687
+ confirmText: "Delete",
688
+ cancelText: "Cancel"
689
+ })) await remove();
690
+ };
691
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_medusajs_ui.Container, {
692
+ className: "divide-y p-0",
693
+ "data-testid": "magento-webhook-general-section",
694
+ children: [
695
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
696
+ className: "flex items-center justify-between px-6 py-4",
697
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Heading, { children: webhook.description || "Webhook endpoint" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
698
+ className: "flex items-center gap-x-2",
699
+ children: [webhook.is_active ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.StatusBadge, {
700
+ color: "green",
701
+ children: "Active"
702
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.StatusBadge, {
703
+ color: "grey",
704
+ children: "Paused"
705
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.ActionMenu, { groups: [{ actions: [webhook.is_active ? {
706
+ label: "Pause",
707
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_icons.PauseSolid, {}),
708
+ onClick: () => update({ is_active: false }),
709
+ ...editBlocker
710
+ } : {
711
+ label: "Resume",
712
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_icons.PlaySolid, {}),
713
+ onClick: () => update({ is_active: true }),
714
+ ...editBlocker
715
+ }] }, { actions: [{
716
+ label: "Delete",
717
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_icons.Trash, {}),
718
+ onClick: handleDelete,
719
+ ...deleteBlocker
720
+ }] }] })]
721
+ })]
722
+ }),
723
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SectionRow, {
724
+ title: "ID",
725
+ value: webhook.id
726
+ }),
727
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SectionRow, {
728
+ title: "URL",
729
+ value: webhook.url
730
+ }),
731
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SectionRow, {
732
+ title: "Events",
733
+ value: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
734
+ className: "flex flex-wrap gap-1",
735
+ children: webhook.events.map((event) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_medusajs_ui.Badge, {
736
+ size: "2xsmall",
737
+ children: event
738
+ }, event))
739
+ })
740
+ }),
741
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SectionRow, {
742
+ title: "Signature",
743
+ value: "HMAC-SHA256 in the x-mercur-signature header"
744
+ }),
745
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SectionRow, {
746
+ title: "Created",
747
+ value: new Date(webhook.created_at).toLocaleString()
748
+ })
749
+ ]
750
+ });
751
+ };
752
+ //#endregion
753
+ //#region src/admin/routes/settings/magento/[id]/page.tsx
754
+ var MagentoWebhookDetailPage = () => {
755
+ const { id } = (0, react_router_dom.useParams)();
756
+ const { webhook, isLoading, isError, error } = useMagentoWebhook(id);
757
+ if (isError) throw error;
758
+ if (isLoading || !webhook) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SingleColumnPageSkeleton, { sections: 2 });
759
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_mercurjs_dashboard_shared.SingleColumnPage, {
760
+ data: webhook,
761
+ "data-testid": "magento-webhook-detail-page",
762
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_mercurjs_dashboard_shared.WidgetZone, {
763
+ id: "magento.detail.main",
764
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(MagentoWebhookGeneralSection, { webhook }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MagentoDeliveryListSection, { webhookId: webhook.id })]
765
+ })
766
+ });
767
+ };
768
+ var MagentoWebhookDetailRoute = () => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingsProviders, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MagentoWebhookDetailPage, {}) });
769
+ //#endregion
770
+ //#region src/admin/__dashboard-extensions__.js
771
+ var __layer0 = {
772
+ routeModule: { routes: [
773
+ {
774
+ Component: MagentoPage,
775
+ path: "/settings/magento",
776
+ handle: handle$1
777
+ },
778
+ {
779
+ Component: CreateMagentoWebhookPage,
780
+ path: "/settings/magento/create"
781
+ },
782
+ {
783
+ Component: MagentoWebhookDetailRoute,
784
+ path: "/settings/magento/:id",
785
+ handle: {
786
+ breadcrumb: (match) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MagentoWebhookDetailBreadcrumb, { ...match }),
787
+ permissions: "integrations:view"
788
+ }
789
+ }
790
+ ] },
791
+ menuItemModule: { menuItems: [{
792
+ label: config.label,
793
+ icon: config.icon,
794
+ path: "/settings/magento",
795
+ rank: 60,
796
+ nested: void 0,
797
+ group: "developer",
798
+ translationNs: void 0,
799
+ permissions: config.permissions,
800
+ requireAll: void 0
801
+ }] },
802
+ widgetModule: { widgets: [] },
803
+ customFieldsModule: { configs: [] },
804
+ layoutModule: { layouts: [] },
805
+ i18nModule: {},
806
+ navigationModule: {},
807
+ preferenceModule: {}
808
+ };
809
+ //#endregion
810
+ module.exports = __layer0;