@burdenoff/microfe-store 2026.514.1 → 2026.518.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.
package/dist/StoreRoot.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { StoreProvider as e } from "./providers/StoreProvider.js";
2
2
  import { STORE_PERMISSIONS as t, useStorePermissions as n } from "./hooks/useStorePermissions.js";
3
- import { useCart as r } from "./hooks/useCart.js";
4
- import { StoreRoutes as i } from "./StoreRoutes.js";
3
+ import { StoreRoutes as r } from "./StoreRoutes.js";
4
+ import { useCart as i } from "./hooks/useCart.js";
5
5
  import { useEffect as a, useMemo as o } from "react";
6
6
  import { ErrorBoundary as s } from "@burdenoff/fe-libs/shared/components";
7
7
  import { FeatureFlagProvider as c } from "@burdenoff/fe-libs/shared/feature-flags";
@@ -27,7 +27,7 @@ var x = (t) => {
27
27
  })
28
28
  });
29
29
  }, S = ({ registerNavItems: e, registerFooterItems: s, basePath: c = "/" }) => {
30
- let { itemCount: x } = r(), { permissions: S, hasPermission: C } = n(), { t: w } = l(), T = S.canPublish, E = C(t.EARNINGS_READ);
30
+ let { itemCount: x } = i(), { permissions: S, hasPermission: C } = n(), { t: w } = l(), T = S.canPublish, E = C(t.EARNINGS_READ);
31
31
  a(() => {
32
32
  if (!e) return;
33
33
  let t = (e, t) => (e.endsWith("/") ? e.slice(0, -1) : e) + (t.startsWith("/") ? t : `/${t}`), n = [
@@ -131,7 +131,7 @@ var x = (t) => {
131
131
  }], [w]);
132
132
  return a(() => {
133
133
  if (s) return s(D);
134
- }, [s, D]), /* @__PURE__ */ b(i, {});
134
+ }, [s, D]), /* @__PURE__ */ b(r, {});
135
135
  };
136
136
  //#endregion
137
137
  export { x as StoreRoot };
@@ -1,26 +1,25 @@
1
1
  import { useStore as e } from "./providers/StoreProvider.js";
2
2
  import { STORE_PERMISSIONS as t, useStorePermissions as n } from "./hooks/useStorePermissions.js";
3
3
  import { AccessDenied as r, PageLoadingFallback as i } from "./components/RouteGuards.js";
4
- import { MarketplaceHomePage as a } from "./pages/MarketplaceHomePage.js";
5
- import { Suspense as o, lazy as s } from "react";
6
- import { FeatureGate as c } from "@burdenoff/fe-libs/shared/feature-flags";
7
- import { jsx as l, jsxs as u } from "react/jsx-runtime";
8
- import { Navigate as d, Route as f, Routes as p } from "react-router-dom";
4
+ import { Suspense as a, lazy as o } from "react";
5
+ import { FeatureGate as s } from "@burdenoff/fe-libs/shared/feature-flags";
6
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
7
+ import { Navigate as u, Route as d, Routes as f } from "react-router-dom";
9
8
  //#region src/StoreRoutes.tsx
10
- var m = s(() => import("./pages/InstalledAppsPage.js").then((e) => ({ default: e.InstalledAppsPage }))), h = s(() => import("./pages/ProductDetailPage.js").then((e) => ({ default: e.ProductDetailPage }))), g = s(() => import("./pages/CartPage.js").then((e) => ({ default: e.CartPage }))), _ = s(() => import("./pages/OrdersPage.js").then((e) => ({ default: e.OrdersPage }))), v = s(() => import("./pages/PublisherSubmitPage.js").then((e) => ({ default: e.PublisherSubmitPage }))), y = s(() => import("./pages/MyLicensesPage.js").then((e) => ({ default: e.MyLicensesPage }))), b = s(() => import("./pages/OrderConfirmationPage.js").then((e) => ({ default: e.OrderConfirmationPage }))), x = s(() => import("./pages/PublisherDashboardPage.js").then((e) => ({ default: e.PublisherDashboardPage }))), S = s(() => import("./pages/PublisherSubmissionsPage.js").then((e) => ({ default: e.PublisherSubmissionsPage }))), C = s(() => import("./pages/PublisherRevenuePage.js").then((e) => ({ default: e.PublisherRevenuePage }))), w = s(() => import("./pages/ProductCategoryPage.js").then((e) => ({ default: e.ProductCategoryPage }))), T = s(() => import("./pages/SearchResultsPage.js").then((e) => ({ default: e.SearchResultsPage }))), E = s(() => import("./pages/AppDetailPage.js").then((e) => ({ default: e.AppDetailPage }))), D = s(() => import("./pages/AppSettingsPage.js").then((e) => ({ default: e.AppSettingsPage }))), O = s(() => import("./pages/ProductReviewsPage.js").then((e) => ({ default: e.ProductReviewsPage }))), k = s(() => import("./pages/StoresPage.js").then((e) => ({ default: e.StoresPage })));
9
+ var p = o(() => import("./pages/MarketplaceHomePage.js").then((e) => ({ default: e.MarketplaceHomePage }))), m = o(() => import("./pages/InstalledAppsPage.js").then((e) => ({ default: e.InstalledAppsPage }))), h = o(() => import("./pages/ProductDetailPage.js").then((e) => ({ default: e.ProductDetailPage }))), g = o(() => import("./pages/CartPage.js").then((e) => ({ default: e.CartPage }))), _ = o(() => import("./pages/OrdersPage.js").then((e) => ({ default: e.OrdersPage }))), v = o(() => import("./pages/PublisherSubmitPage.js").then((e) => ({ default: e.PublisherSubmitPage }))), y = o(() => import("./pages/MyLicensesPage.js").then((e) => ({ default: e.MyLicensesPage }))), b = o(() => import("./pages/OrderConfirmationPage.js").then((e) => ({ default: e.OrderConfirmationPage }))), x = o(() => import("./pages/PublisherDashboardPage.js").then((e) => ({ default: e.PublisherDashboardPage }))), S = o(() => import("./pages/PublisherSubmissionsPage.js").then((e) => ({ default: e.PublisherSubmissionsPage }))), C = o(() => import("./pages/PublisherRevenuePage.js").then((e) => ({ default: e.PublisherRevenuePage }))), w = o(() => import("./pages/ProductCategoryPage.js").then((e) => ({ default: e.ProductCategoryPage }))), T = o(() => import("./pages/SearchResultsPage.js").then((e) => ({ default: e.SearchResultsPage }))), E = o(() => import("./pages/AppDetailPage.js").then((e) => ({ default: e.AppDetailPage }))), D = o(() => import("./pages/AppSettingsPage.js").then((e) => ({ default: e.AppSettingsPage }))), O = o(() => import("./pages/ProductReviewsPage.js").then((e) => ({ default: e.ProductReviewsPage }))), k = o(() => import("./pages/StoresPage.js").then((e) => ({ default: e.StoresPage })));
11
10
  function A({ title: e, featureFlag: t }) {
12
- return /* @__PURE__ */ l("div", {
11
+ return /* @__PURE__ */ c("div", {
13
12
  className: "flex min-h-[400px] items-center justify-center p-6",
14
- children: /* @__PURE__ */ u("div", {
13
+ children: /* @__PURE__ */ l("div", {
15
14
  className: "max-w-md rounded-lg border border-border bg-card p-6 text-center shadow-sm",
16
- children: [/* @__PURE__ */ u("h2", {
15
+ children: [/* @__PURE__ */ l("h2", {
17
16
  className: "text-lg font-semibold text-foreground",
18
17
  children: [e, " is not enabled"]
19
- }), /* @__PURE__ */ u("p", {
18
+ }), /* @__PURE__ */ l("p", {
20
19
  className: "mt-2 text-sm text-muted-foreground",
21
20
  children: [
22
21
  "Ask an administrator to enable the ",
23
- /* @__PURE__ */ l("span", {
22
+ /* @__PURE__ */ c("span", {
24
23
  className: "font-mono",
25
24
  children: t
26
25
  }),
@@ -32,247 +31,250 @@ function A({ title: e, featureFlag: t }) {
32
31
  });
33
32
  }
34
33
  function j({ title: e, featureFlag: t, allowed: n, isLoading: a, children: o }) {
35
- return a ? /* @__PURE__ */ l(i, {}) : /* @__PURE__ */ l(c, {
34
+ return a ? /* @__PURE__ */ c(i, {}) : /* @__PURE__ */ c(s, {
36
35
  flag: t,
37
36
  defaultValue: !0,
38
- fallback: /* @__PURE__ */ l(A, {
37
+ fallback: /* @__PURE__ */ c(A, {
39
38
  title: e,
40
39
  featureFlag: t
41
40
  }),
42
- children: n ? o : /* @__PURE__ */ l(r, {})
41
+ children: n ? o : /* @__PURE__ */ c(r, {})
43
42
  });
44
43
  }
45
44
  var M = () => {
46
- let { basePath: r } = e(), { permissions: s, hasPermission: c, isLoading: A } = n();
47
- return /* @__PURE__ */ u(p, { children: [
48
- /* @__PURE__ */ l(f, {
45
+ let { basePath: r } = e(), { permissions: o, hasPermission: s, isLoading: A } = n();
46
+ return /* @__PURE__ */ l(f, { children: [
47
+ /* @__PURE__ */ c(d, {
49
48
  index: !0,
50
- element: /* @__PURE__ */ l(d, {
49
+ element: /* @__PURE__ */ c(u, {
51
50
  to: "marketplace",
52
51
  replace: !0
53
52
  })
54
53
  }),
55
- /* @__PURE__ */ l(f, {
54
+ /* @__PURE__ */ c(d, {
56
55
  path: "marketplace",
57
- element: /* @__PURE__ */ l(j, {
56
+ element: /* @__PURE__ */ c(j, {
58
57
  title: "Marketplace",
59
58
  featureFlag: "store.marketplace",
60
- allowed: s.canBrowse,
59
+ allowed: o.canBrowse,
61
60
  isLoading: A,
62
- children: /* @__PURE__ */ l(a, {})
61
+ children: /* @__PURE__ */ c(a, {
62
+ fallback: /* @__PURE__ */ c(i, {}),
63
+ children: /* @__PURE__ */ c(p, {})
64
+ })
63
65
  })
64
66
  }),
65
- /* @__PURE__ */ l(f, {
67
+ /* @__PURE__ */ c(d, {
66
68
  path: "marketplace/category/:categorySlug",
67
- element: /* @__PURE__ */ l(j, {
69
+ element: /* @__PURE__ */ c(j, {
68
70
  title: "Marketplace",
69
71
  featureFlag: "store.marketplace",
70
- allowed: s.canBrowse,
72
+ allowed: o.canBrowse,
71
73
  isLoading: A,
72
- children: /* @__PURE__ */ l(o, {
73
- fallback: /* @__PURE__ */ l(i, {}),
74
- children: /* @__PURE__ */ l(w, {})
74
+ children: /* @__PURE__ */ c(a, {
75
+ fallback: /* @__PURE__ */ c(i, {}),
76
+ children: /* @__PURE__ */ c(w, {})
75
77
  })
76
78
  })
77
79
  }),
78
- /* @__PURE__ */ l(f, {
80
+ /* @__PURE__ */ c(d, {
79
81
  path: "marketplace/search",
80
- element: /* @__PURE__ */ l(j, {
82
+ element: /* @__PURE__ */ c(j, {
81
83
  title: "Marketplace",
82
84
  featureFlag: "store.marketplace",
83
- allowed: s.canBrowse,
85
+ allowed: o.canBrowse,
84
86
  isLoading: A,
85
- children: /* @__PURE__ */ l(o, {
86
- fallback: /* @__PURE__ */ l(i, {}),
87
- children: /* @__PURE__ */ l(T, {})
87
+ children: /* @__PURE__ */ c(a, {
88
+ fallback: /* @__PURE__ */ c(i, {}),
89
+ children: /* @__PURE__ */ c(T, {})
88
90
  })
89
91
  })
90
92
  }),
91
- /* @__PURE__ */ l(f, {
93
+ /* @__PURE__ */ c(d, {
92
94
  path: "marketplace/product/:productId",
93
- element: /* @__PURE__ */ l(j, {
95
+ element: /* @__PURE__ */ c(j, {
94
96
  title: "Marketplace",
95
97
  featureFlag: "store.marketplace",
96
- allowed: s.canBrowse,
98
+ allowed: o.canBrowse,
97
99
  isLoading: A,
98
- children: /* @__PURE__ */ l(o, {
99
- fallback: /* @__PURE__ */ l(i, {}),
100
- children: /* @__PURE__ */ l(h, {})
100
+ children: /* @__PURE__ */ c(a, {
101
+ fallback: /* @__PURE__ */ c(i, {}),
102
+ children: /* @__PURE__ */ c(h, {})
101
103
  })
102
104
  })
103
105
  }),
104
- /* @__PURE__ */ l(f, {
106
+ /* @__PURE__ */ c(d, {
105
107
  path: "cart",
106
- element: /* @__PURE__ */ l(j, {
108
+ element: /* @__PURE__ */ c(j, {
107
109
  title: "Cart",
108
110
  featureFlag: "store.cart",
109
- allowed: s.canPurchase,
111
+ allowed: o.canPurchase,
110
112
  isLoading: A,
111
- children: /* @__PURE__ */ l(o, {
112
- fallback: /* @__PURE__ */ l(i, {}),
113
- children: /* @__PURE__ */ l(g, {})
113
+ children: /* @__PURE__ */ c(a, {
114
+ fallback: /* @__PURE__ */ c(i, {}),
115
+ children: /* @__PURE__ */ c(g, {})
114
116
  })
115
117
  })
116
118
  }),
117
- /* @__PURE__ */ l(f, {
119
+ /* @__PURE__ */ c(d, {
118
120
  path: "orders/:orderId/confirmation",
119
- element: /* @__PURE__ */ l(j, {
121
+ element: /* @__PURE__ */ c(j, {
120
122
  title: "Order confirmation",
121
123
  featureFlag: "store.orders",
122
- allowed: s.canPurchase,
124
+ allowed: o.canPurchase,
123
125
  isLoading: A,
124
- children: /* @__PURE__ */ l(o, {
125
- fallback: /* @__PURE__ */ l(i, {}),
126
- children: /* @__PURE__ */ l(b, {})
126
+ children: /* @__PURE__ */ c(a, {
127
+ fallback: /* @__PURE__ */ c(i, {}),
128
+ children: /* @__PURE__ */ c(b, {})
127
129
  })
128
130
  })
129
131
  }),
130
- /* @__PURE__ */ l(f, {
132
+ /* @__PURE__ */ c(d, {
131
133
  path: "orders",
132
- element: /* @__PURE__ */ l(j, {
134
+ element: /* @__PURE__ */ c(j, {
133
135
  title: "Orders",
134
136
  featureFlag: "store.orders",
135
- allowed: s.canPurchase,
137
+ allowed: o.canPurchase,
136
138
  isLoading: A,
137
- children: /* @__PURE__ */ l(o, {
138
- fallback: /* @__PURE__ */ l(i, {}),
139
- children: /* @__PURE__ */ l(_, {})
139
+ children: /* @__PURE__ */ c(a, {
140
+ fallback: /* @__PURE__ */ c(i, {}),
141
+ children: /* @__PURE__ */ c(_, {})
140
142
  })
141
143
  })
142
144
  }),
143
- /* @__PURE__ */ l(f, {
145
+ /* @__PURE__ */ c(d, {
144
146
  path: "installed",
145
- element: /* @__PURE__ */ l(j, {
147
+ element: /* @__PURE__ */ c(j, {
146
148
  title: "Installed apps",
147
149
  featureFlag: "store.installed",
148
- allowed: s.canInstall,
150
+ allowed: o.canInstall,
149
151
  isLoading: A,
150
- children: /* @__PURE__ */ l(o, {
151
- fallback: /* @__PURE__ */ l(i, {}),
152
- children: /* @__PURE__ */ l(m, {})
152
+ children: /* @__PURE__ */ c(a, {
153
+ fallback: /* @__PURE__ */ c(i, {}),
154
+ children: /* @__PURE__ */ c(m, {})
153
155
  })
154
156
  })
155
157
  }),
156
- /* @__PURE__ */ l(f, {
158
+ /* @__PURE__ */ c(d, {
157
159
  path: "installed/:installationId",
158
- element: /* @__PURE__ */ l(j, {
160
+ element: /* @__PURE__ */ c(j, {
159
161
  title: "Installed apps",
160
162
  featureFlag: "store.installed",
161
- allowed: s.canInstall,
163
+ allowed: o.canInstall,
162
164
  isLoading: A,
163
- children: /* @__PURE__ */ l(o, {
164
- fallback: /* @__PURE__ */ l(i, {}),
165
- children: /* @__PURE__ */ l(E, {})
165
+ children: /* @__PURE__ */ c(a, {
166
+ fallback: /* @__PURE__ */ c(i, {}),
167
+ children: /* @__PURE__ */ c(E, {})
166
168
  })
167
169
  })
168
170
  }),
169
- /* @__PURE__ */ l(f, {
171
+ /* @__PURE__ */ c(d, {
170
172
  path: "installed/:installationId/settings",
171
- element: /* @__PURE__ */ l(j, {
173
+ element: /* @__PURE__ */ c(j, {
172
174
  title: "Installed apps",
173
175
  featureFlag: "store.installed",
174
- allowed: s.canInstall,
176
+ allowed: o.canInstall,
175
177
  isLoading: A,
176
- children: /* @__PURE__ */ l(o, {
177
- fallback: /* @__PURE__ */ l(i, {}),
178
- children: /* @__PURE__ */ l(D, {})
178
+ children: /* @__PURE__ */ c(a, {
179
+ fallback: /* @__PURE__ */ c(i, {}),
180
+ children: /* @__PURE__ */ c(D, {})
179
181
  })
180
182
  })
181
183
  }),
182
- /* @__PURE__ */ l(f, {
184
+ /* @__PURE__ */ c(d, {
183
185
  path: "licenses",
184
- element: /* @__PURE__ */ l(j, {
186
+ element: /* @__PURE__ */ c(j, {
185
187
  title: "Licenses",
186
188
  featureFlag: "store.licenses",
187
- allowed: s.canManageLicenses,
189
+ allowed: o.canManageLicenses,
188
190
  isLoading: A,
189
- children: /* @__PURE__ */ l(o, {
190
- fallback: /* @__PURE__ */ l(i, {}),
191
- children: /* @__PURE__ */ l(y, {})
191
+ children: /* @__PURE__ */ c(a, {
192
+ fallback: /* @__PURE__ */ c(i, {}),
193
+ children: /* @__PURE__ */ c(y, {})
192
194
  })
193
195
  })
194
196
  }),
195
- /* @__PURE__ */ l(f, {
197
+ /* @__PURE__ */ c(d, {
196
198
  path: "stores",
197
- element: /* @__PURE__ */ l(j, {
199
+ element: /* @__PURE__ */ c(j, {
198
200
  title: "Stores",
199
201
  featureFlag: "store.stores",
200
- allowed: s.canBrowse,
202
+ allowed: o.canBrowse,
201
203
  isLoading: A,
202
- children: /* @__PURE__ */ l(o, {
203
- fallback: /* @__PURE__ */ l(i, {}),
204
- children: /* @__PURE__ */ l(k, {})
204
+ children: /* @__PURE__ */ c(a, {
205
+ fallback: /* @__PURE__ */ c(i, {}),
206
+ children: /* @__PURE__ */ c(k, {})
205
207
  })
206
208
  })
207
209
  }),
208
- /* @__PURE__ */ l(f, {
210
+ /* @__PURE__ */ c(d, {
209
211
  path: "publisher",
210
- element: /* @__PURE__ */ l(j, {
212
+ element: /* @__PURE__ */ c(j, {
211
213
  title: "Publisher portal",
212
214
  featureFlag: "store.publisher-portal",
213
- allowed: s.canPublish,
215
+ allowed: o.canPublish,
214
216
  isLoading: A,
215
- children: /* @__PURE__ */ l(o, {
216
- fallback: /* @__PURE__ */ l(i, {}),
217
- children: /* @__PURE__ */ l(x, {})
217
+ children: /* @__PURE__ */ c(a, {
218
+ fallback: /* @__PURE__ */ c(i, {}),
219
+ children: /* @__PURE__ */ c(x, {})
218
220
  })
219
221
  })
220
222
  }),
221
- /* @__PURE__ */ l(f, {
223
+ /* @__PURE__ */ c(d, {
222
224
  path: "publisher/submit",
223
- element: /* @__PURE__ */ l(j, {
225
+ element: /* @__PURE__ */ c(j, {
224
226
  title: "Publisher portal",
225
227
  featureFlag: "store.publisher-portal",
226
- allowed: s.canPublish,
228
+ allowed: o.canPublish,
227
229
  isLoading: A,
228
- children: /* @__PURE__ */ l(o, {
229
- fallback: /* @__PURE__ */ l(i, {}),
230
- children: /* @__PURE__ */ l(v, {})
230
+ children: /* @__PURE__ */ c(a, {
231
+ fallback: /* @__PURE__ */ c(i, {}),
232
+ children: /* @__PURE__ */ c(v, {})
231
233
  })
232
234
  })
233
235
  }),
234
- /* @__PURE__ */ l(f, {
236
+ /* @__PURE__ */ c(d, {
235
237
  path: "publisher/submissions",
236
- element: /* @__PURE__ */ l(j, {
238
+ element: /* @__PURE__ */ c(j, {
237
239
  title: "Publisher portal",
238
240
  featureFlag: "store.publisher-portal",
239
- allowed: s.canPublish,
241
+ allowed: o.canPublish,
240
242
  isLoading: A,
241
- children: /* @__PURE__ */ l(o, {
242
- fallback: /* @__PURE__ */ l(i, {}),
243
- children: /* @__PURE__ */ l(S, {})
243
+ children: /* @__PURE__ */ c(a, {
244
+ fallback: /* @__PURE__ */ c(i, {}),
245
+ children: /* @__PURE__ */ c(S, {})
244
246
  })
245
247
  })
246
248
  }),
247
- /* @__PURE__ */ l(f, {
249
+ /* @__PURE__ */ c(d, {
248
250
  path: "publisher/revenue",
249
- element: /* @__PURE__ */ l(j, {
251
+ element: /* @__PURE__ */ c(j, {
250
252
  title: "Publisher revenue",
251
253
  featureFlag: "store.publisher-portal.revenue",
252
- allowed: c(t.EARNINGS_READ),
254
+ allowed: s(t.EARNINGS_READ),
253
255
  isLoading: A,
254
- children: /* @__PURE__ */ l(o, {
255
- fallback: /* @__PURE__ */ l(i, {}),
256
- children: /* @__PURE__ */ l(C, {})
256
+ children: /* @__PURE__ */ c(a, {
257
+ fallback: /* @__PURE__ */ c(i, {}),
258
+ children: /* @__PURE__ */ c(C, {})
257
259
  })
258
260
  })
259
261
  }),
260
- /* @__PURE__ */ l(f, {
262
+ /* @__PURE__ */ c(d, {
261
263
  path: "publisher/product/:productId/reviews",
262
- element: /* @__PURE__ */ l(j, {
264
+ element: /* @__PURE__ */ c(j, {
263
265
  title: "Publisher portal",
264
266
  featureFlag: "store.publisher-portal",
265
- allowed: s.canPublish,
267
+ allowed: o.canPublish,
266
268
  isLoading: A,
267
- children: /* @__PURE__ */ l(o, {
268
- fallback: /* @__PURE__ */ l(i, {}),
269
- children: /* @__PURE__ */ l(O, {})
269
+ children: /* @__PURE__ */ c(a, {
270
+ fallback: /* @__PURE__ */ c(i, {}),
271
+ children: /* @__PURE__ */ c(O, {})
270
272
  })
271
273
  })
272
274
  }),
273
- /* @__PURE__ */ l(f, {
275
+ /* @__PURE__ */ c(d, {
274
276
  path: "*",
275
- element: /* @__PURE__ */ l(d, {
277
+ element: /* @__PURE__ */ c(u, {
276
278
  to: `${r}/marketplace`,
277
279
  replace: !0
278
280
  })
@@ -1 +1 @@
1
- {"version":3,"file":"StoreRoutes.js","names":[],"sources":["../src/StoreRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, type FC, type ReactNode } from 'react';\nimport { Routes, Route, Navigate } from 'react-router-dom';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useStore } from './providers/StoreProvider';\nimport { useStorePermissions, STORE_PERMISSIONS } from './hooks/useStorePermissions';\nimport { AccessDenied, PageLoadingFallback } from './components/RouteGuards';\n\n// Eager loaded - main entry point\nimport { MarketplaceHomePage } from './pages/MarketplaceHomePage';\n\n// Lazy loaded pages\nconst InstalledAppsPage = lazy(() =>\n import('./pages/InstalledAppsPage').then((m) => ({ default: m.InstalledAppsPage }))\n);\nconst ProductDetailPage = lazy(() =>\n import('./pages/ProductDetailPage').then((m) => ({ default: m.ProductDetailPage }))\n);\nconst CartPage = lazy(() => import('./pages/CartPage').then((m) => ({ default: m.CartPage })));\nconst OrdersPage = lazy(() =>\n import('./pages/OrdersPage').then((m) => ({ default: m.OrdersPage }))\n);\nconst PublisherSubmitPage = lazy(() =>\n import('./pages/PublisherSubmitPage').then((m) => ({ default: m.PublisherSubmitPage }))\n);\nconst MyLicensesPage = lazy(() =>\n import('./pages/MyLicensesPage').then((m) => ({ default: m.MyLicensesPage }))\n);\nconst OrderConfirmationPage = lazy(() =>\n import('./pages/OrderConfirmationPage').then((m) => ({ default: m.OrderConfirmationPage }))\n);\nconst PublisherDashboardPage = lazy(() =>\n import('./pages/PublisherDashboardPage').then((m) => ({ default: m.PublisherDashboardPage }))\n);\nconst PublisherSubmissionsPage = lazy(() =>\n import('./pages/PublisherSubmissionsPage').then((m) => ({ default: m.PublisherSubmissionsPage }))\n);\nconst PublisherRevenuePage = lazy(() =>\n import('./pages/PublisherRevenuePage').then((m) => ({ default: m.PublisherRevenuePage }))\n);\nconst ProductCategoryPage = lazy(() =>\n import('./pages/ProductCategoryPage').then((m) => ({ default: m.ProductCategoryPage }))\n);\nconst SearchResultsPage = lazy(() =>\n import('./pages/SearchResultsPage').then((m) => ({ default: m.SearchResultsPage }))\n);\nconst AppDetailPage = lazy(() =>\n import('./pages/AppDetailPage').then((m) => ({ default: m.AppDetailPage }))\n);\nconst AppSettingsPage = lazy(() =>\n import('./pages/AppSettingsPage').then((m) => ({ default: m.AppSettingsPage }))\n);\nconst ProductReviewsPage = lazy(() =>\n import('./pages/ProductReviewsPage').then((m) => ({ default: m.ProductReviewsPage }))\n);\nconst StoresPage = lazy(() =>\n import('./pages/StoresPage').then((m) => ({ default: m.StoresPage }))\n);\n\nfunction FeatureDisabled({ title, featureFlag }: { title: string; featureFlag: string }) {\n return (\n <div className=\"flex min-h-[400px] items-center justify-center p-6\">\n <div className=\"max-w-md rounded-lg border border-border bg-card p-6 text-center shadow-sm\">\n <h2 className=\"text-lg font-semibold text-foreground\">{title} is not enabled</h2>\n <p className=\"mt-2 text-sm text-muted-foreground\">\n Ask an administrator to enable the <span className=\"font-mono\">{featureFlag}</span>{' '}\n feature flag for this organization.\n </p>\n </div>\n </div>\n );\n}\n\ninterface StoreRouteGateProps {\n title: string;\n featureFlag: string;\n allowed: boolean;\n isLoading: boolean;\n children: ReactNode;\n}\n\nfunction StoreRouteGate({ title, featureFlag, allowed, isLoading, children }: StoreRouteGateProps) {\n if (isLoading) {\n return <PageLoadingFallback />;\n }\n return (\n <FeatureGate\n flag={featureFlag}\n defaultValue\n fallback={<FeatureDisabled title={title} featureFlag={featureFlag} />}\n >\n {allowed ? children : <AccessDenied />}\n </FeatureGate>\n );\n}\n\n/**\n * StoreRoutes component\n *\n * Internal routing for the Store microfrontend. Every route is gated by both\n * a live feature flag (via FeatureGate) and an RBAC permission check so that\n * features can be toggled per-org without a deployment.\n *\n * Flag namespace: store.*\n */\nexport const StoreRoutes: FC = () => {\n const { basePath } = useStore();\n const { permissions, hasPermission, isLoading } = useStorePermissions();\n\n return (\n <Routes>\n {/* Default redirect */}\n <Route index element={<Navigate to=\"marketplace\" replace />} />\n\n {/* Marketplace */}\n <Route\n path=\"marketplace\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <MarketplaceHomePage />\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/category/:categorySlug\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductCategoryPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/search\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <SearchResultsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/product/:productId\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductDetailPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Cart */}\n <Route\n path=\"cart\"\n element={\n <StoreRouteGate\n title=\"Cart\"\n featureFlag=\"store.cart\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <CartPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Orders */}\n <Route\n path=\"orders/:orderId/confirmation\"\n element={\n <StoreRouteGate\n title=\"Order confirmation\"\n featureFlag=\"store.orders\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <OrderConfirmationPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"orders\"\n element={\n <StoreRouteGate\n title=\"Orders\"\n featureFlag=\"store.orders\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <OrdersPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Installed Apps */}\n <Route\n path=\"installed\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <InstalledAppsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"installed/:installationId\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <AppDetailPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"installed/:installationId/settings\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <AppSettingsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Licenses */}\n <Route\n path=\"licenses\"\n element={\n <StoreRouteGate\n title=\"Licenses\"\n featureFlag=\"store.licenses\"\n allowed={permissions.canManageLicenses}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <MyLicensesPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Multi-store browsing */}\n <Route\n path=\"stores\"\n element={\n <StoreRouteGate\n title=\"Stores\"\n featureFlag=\"store.stores\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <StoresPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Publisher Portal */}\n <Route\n path=\"publisher\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherDashboardPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/submit\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherSubmitPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/submissions\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherSubmissionsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/revenue\"\n element={\n <StoreRouteGate\n title=\"Publisher revenue\"\n featureFlag=\"store.publisher-portal.revenue\"\n allowed={hasPermission(STORE_PERMISSIONS.EARNINGS_READ)}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherRevenuePage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/product/:productId/reviews\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductReviewsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Catch-all redirect */}\n <Route path=\"*\" element={<Navigate to={`${basePath}/marketplace`} replace />} />\n </Routes>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"StoreRoutes.js","names":[],"sources":["../src/StoreRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, type FC, type ReactNode } from 'react';\nimport { Routes, Route, Navigate } from 'react-router-dom';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useStore } from './providers/StoreProvider';\nimport { useStorePermissions, STORE_PERMISSIONS } from './hooks/useStorePermissions';\nimport { AccessDenied, PageLoadingFallback } from './components/RouteGuards';\n\n// Lazy loaded pages\nconst MarketplaceHomePage = lazy(() =>\n import('./pages/MarketplaceHomePage').then((m) => ({ default: m.MarketplaceHomePage }))\n);\nconst InstalledAppsPage = lazy(() =>\n import('./pages/InstalledAppsPage').then((m) => ({ default: m.InstalledAppsPage }))\n);\nconst ProductDetailPage = lazy(() =>\n import('./pages/ProductDetailPage').then((m) => ({ default: m.ProductDetailPage }))\n);\nconst CartPage = lazy(() => import('./pages/CartPage').then((m) => ({ default: m.CartPage })));\nconst OrdersPage = lazy(() =>\n import('./pages/OrdersPage').then((m) => ({ default: m.OrdersPage }))\n);\nconst PublisherSubmitPage = lazy(() =>\n import('./pages/PublisherSubmitPage').then((m) => ({ default: m.PublisherSubmitPage }))\n);\nconst MyLicensesPage = lazy(() =>\n import('./pages/MyLicensesPage').then((m) => ({ default: m.MyLicensesPage }))\n);\nconst OrderConfirmationPage = lazy(() =>\n import('./pages/OrderConfirmationPage').then((m) => ({ default: m.OrderConfirmationPage }))\n);\nconst PublisherDashboardPage = lazy(() =>\n import('./pages/PublisherDashboardPage').then((m) => ({ default: m.PublisherDashboardPage }))\n);\nconst PublisherSubmissionsPage = lazy(() =>\n import('./pages/PublisherSubmissionsPage').then((m) => ({ default: m.PublisherSubmissionsPage }))\n);\nconst PublisherRevenuePage = lazy(() =>\n import('./pages/PublisherRevenuePage').then((m) => ({ default: m.PublisherRevenuePage }))\n);\nconst ProductCategoryPage = lazy(() =>\n import('./pages/ProductCategoryPage').then((m) => ({ default: m.ProductCategoryPage }))\n);\nconst SearchResultsPage = lazy(() =>\n import('./pages/SearchResultsPage').then((m) => ({ default: m.SearchResultsPage }))\n);\nconst AppDetailPage = lazy(() =>\n import('./pages/AppDetailPage').then((m) => ({ default: m.AppDetailPage }))\n);\nconst AppSettingsPage = lazy(() =>\n import('./pages/AppSettingsPage').then((m) => ({ default: m.AppSettingsPage }))\n);\nconst ProductReviewsPage = lazy(() =>\n import('./pages/ProductReviewsPage').then((m) => ({ default: m.ProductReviewsPage }))\n);\nconst StoresPage = lazy(() =>\n import('./pages/StoresPage').then((m) => ({ default: m.StoresPage }))\n);\n\nfunction FeatureDisabled({ title, featureFlag }: { title: string; featureFlag: string }) {\n return (\n <div className=\"flex min-h-[400px] items-center justify-center p-6\">\n <div className=\"max-w-md rounded-lg border border-border bg-card p-6 text-center shadow-sm\">\n <h2 className=\"text-lg font-semibold text-foreground\">{title} is not enabled</h2>\n <p className=\"mt-2 text-sm text-muted-foreground\">\n Ask an administrator to enable the <span className=\"font-mono\">{featureFlag}</span>{' '}\n feature flag for this organization.\n </p>\n </div>\n </div>\n );\n}\n\ninterface StoreRouteGateProps {\n title: string;\n featureFlag: string;\n allowed: boolean;\n isLoading: boolean;\n children: ReactNode;\n}\n\nfunction StoreRouteGate({ title, featureFlag, allowed, isLoading, children }: StoreRouteGateProps) {\n if (isLoading) {\n return <PageLoadingFallback />;\n }\n return (\n <FeatureGate\n flag={featureFlag}\n defaultValue\n fallback={<FeatureDisabled title={title} featureFlag={featureFlag} />}\n >\n {allowed ? children : <AccessDenied />}\n </FeatureGate>\n );\n}\n\n/**\n * StoreRoutes component\n *\n * Internal routing for the Store microfrontend. Every route is gated by both\n * a live feature flag (via FeatureGate) and an RBAC permission check so that\n * features can be toggled per-org without a deployment.\n *\n * Flag namespace: store.*\n */\nexport const StoreRoutes: FC = () => {\n const { basePath } = useStore();\n const { permissions, hasPermission, isLoading } = useStorePermissions();\n\n return (\n <Routes>\n {/* Default redirect */}\n <Route index element={<Navigate to=\"marketplace\" replace />} />\n\n {/* Marketplace */}\n <Route\n path=\"marketplace\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <MarketplaceHomePage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/category/:categorySlug\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductCategoryPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/search\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <SearchResultsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"marketplace/product/:productId\"\n element={\n <StoreRouteGate\n title=\"Marketplace\"\n featureFlag=\"store.marketplace\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductDetailPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Cart */}\n <Route\n path=\"cart\"\n element={\n <StoreRouteGate\n title=\"Cart\"\n featureFlag=\"store.cart\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <CartPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Orders */}\n <Route\n path=\"orders/:orderId/confirmation\"\n element={\n <StoreRouteGate\n title=\"Order confirmation\"\n featureFlag=\"store.orders\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <OrderConfirmationPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"orders\"\n element={\n <StoreRouteGate\n title=\"Orders\"\n featureFlag=\"store.orders\"\n allowed={permissions.canPurchase}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <OrdersPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Installed Apps */}\n <Route\n path=\"installed\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <InstalledAppsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"installed/:installationId\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <AppDetailPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"installed/:installationId/settings\"\n element={\n <StoreRouteGate\n title=\"Installed apps\"\n featureFlag=\"store.installed\"\n allowed={permissions.canInstall}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <AppSettingsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Licenses */}\n <Route\n path=\"licenses\"\n element={\n <StoreRouteGate\n title=\"Licenses\"\n featureFlag=\"store.licenses\"\n allowed={permissions.canManageLicenses}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <MyLicensesPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Multi-store browsing */}\n <Route\n path=\"stores\"\n element={\n <StoreRouteGate\n title=\"Stores\"\n featureFlag=\"store.stores\"\n allowed={permissions.canBrowse}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <StoresPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Publisher Portal */}\n <Route\n path=\"publisher\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherDashboardPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/submit\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherSubmitPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/submissions\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherSubmissionsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/revenue\"\n element={\n <StoreRouteGate\n title=\"Publisher revenue\"\n featureFlag=\"store.publisher-portal.revenue\"\n allowed={hasPermission(STORE_PERMISSIONS.EARNINGS_READ)}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <PublisherRevenuePage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n <Route\n path=\"publisher/product/:productId/reviews\"\n element={\n <StoreRouteGate\n title=\"Publisher portal\"\n featureFlag=\"store.publisher-portal\"\n allowed={permissions.canPublish}\n isLoading={isLoading}\n >\n <Suspense fallback={<PageLoadingFallback />}>\n <ProductReviewsPage />\n </Suspense>\n </StoreRouteGate>\n }\n />\n\n {/* Catch-all redirect */}\n <Route path=\"*\" element={<Navigate to={`${basePath}/marketplace`} replace />} />\n </Routes>\n );\n};\n"],"mappings":"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"}