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