@burdenoff/microfe-billing 2026.530.3 → 2026.531.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/billing/BillingAdminRoutes.js +87 -61
  2. package/dist/billing/BillingAdminRoutes.js.map +1 -1
  3. package/dist/billing/BillingRoot.js +81 -73
  4. package/dist/billing/BillingRoot.js.map +1 -1
  5. package/dist/billing/modules/addons/pages/AddonDetailPage.js +85 -84
  6. package/dist/billing/modules/addons/pages/AddonDetailPage.js.map +1 -1
  7. package/dist/billing/modules/addons/pages/AddonEditPage.js +176 -195
  8. package/dist/billing/modules/addons/pages/AddonEditPage.js.map +1 -1
  9. package/dist/billing/modules/addons/pages/AddonsBrowsePage.js +173 -172
  10. package/dist/billing/modules/addons/pages/AddonsBrowsePage.js.map +1 -1
  11. package/dist/billing/modules/addons/pages/AddonsListPage.js +216 -215
  12. package/dist/billing/modules/addons/pages/AddonsListPage.js.map +1 -1
  13. package/dist/billing/modules/checkout/hooks/useCheckout.js +165 -161
  14. package/dist/billing/modules/checkout/hooks/useCheckout.js.map +1 -1
  15. package/dist/billing/modules/coupons/pages/CreateCouponPage.js +344 -167
  16. package/dist/billing/modules/coupons/pages/CreateCouponPage.js.map +1 -1
  17. package/dist/billing/modules/dashboard/components/RecommendedAddonsSection.js +79 -78
  18. package/dist/billing/modules/dashboard/components/RecommendedAddonsSection.js.map +1 -1
  19. package/dist/billing/modules/plans/pages/PlanEditPage.js +29 -20
  20. package/dist/billing/modules/plans/pages/PlanEditPage.js.map +1 -1
  21. package/dist/billing/modules/promotions/index.js +4 -0
  22. package/dist/billing/modules/promotions/pages/CreatePromotionPage.js +289 -0
  23. package/dist/billing/modules/promotions/pages/CreatePromotionPage.js.map +1 -0
  24. package/dist/billing/modules/promotions/pages/PromotionsListPage.js +168 -0
  25. package/dist/billing/modules/promotions/pages/PromotionsListPage.js.map +1 -0
  26. package/dist/billing/modules/promotions/pages/index.js +2 -0
  27. package/dist/generated/global-operations.js +182 -75
  28. package/dist/generated/global-operations.js.map +1 -1
  29. package/dist/generated/global-types.js.map +1 -1
  30. package/package.json +1 -1
@@ -8,20 +8,20 @@ import { FeatureGate as s } from "@burdenoff/fe-libs/shared/feature-flags";
8
8
  import { Navigate as c, Route as l, Routes as u, useNavigate as d } from "react-router-dom";
9
9
  import { jsx as f, jsxs as p } from "react/jsx-runtime";
10
10
  //#region src/billing/BillingAdminRoutes.tsx
11
- var m = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlansListPage }))), h = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanDetailPage }))), g = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanEditPage }))), _ = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanCreatePage }))), v = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanAssignFreePage }))), y = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonsListPage }))), b = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonDetailPage }))), x = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonEditPage }))), S = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonCreatePage }))), C = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplatesListPage }))), w = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplateDetailPage }))), T = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplateCreatePage }))), E = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplateEditPage }))), D = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CouponsListPage }))), O = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CreateCouponPage }))), k = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.EditCouponPage }))), A = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CouponDetailPage }))), j = a(() => import("./modules/discounts/index.js").then((e) => ({ default: e.DiscountsListPage }))), M = a(() => import("./modules/billing/index.js").then((e) => ({ default: e.RefundsPage }))), N = a(() => import("./modules/credits/index.js").then((e) => ({ default: e.AdminCreditsPage }))), P = a(() => import("./modules/analytics/index.js").then((e) => ({ default: e.AnalyticsPage }))), F = a(() => import("./modules/earnings/index.js").then((e) => ({ default: e.PayoutAdminPage })));
12
- function I() {
11
+ var m = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlansListPage }))), h = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanDetailPage }))), g = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanEditPage }))), _ = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanCreatePage }))), v = a(() => import("./modules/plans/index.js").then((e) => ({ default: e.PlanAssignFreePage }))), y = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonsListPage }))), b = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonDetailPage }))), x = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonEditPage }))), S = a(() => import("./modules/addons/index.js").then((e) => ({ default: e.AddonCreatePage }))), C = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplatesListPage }))), w = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplateDetailPage }))), T = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplateCreatePage }))), E = a(() => import("./modules/quota/index.js").then((e) => ({ default: e.QuotaTemplateEditPage }))), D = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CouponsListPage }))), O = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CreateCouponPage }))), k = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.EditCouponPage }))), A = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CouponDetailPage }))), j = a(() => import("./modules/promotions/index.js").then((e) => ({ default: e.PromotionsListPage }))), M = a(() => import("./modules/promotions/index.js").then((e) => ({ default: e.CreatePromotionPage }))), N = a(() => import("./modules/discounts/index.js").then((e) => ({ default: e.DiscountsListPage }))), P = a(() => import("./modules/billing/index.js").then((e) => ({ default: e.RefundsPage }))), F = a(() => import("./modules/credits/index.js").then((e) => ({ default: e.AdminCreditsPage }))), I = a(() => import("./modules/analytics/index.js").then((e) => ({ default: e.AnalyticsPage }))), L = a(() => import("./modules/earnings/index.js").then((e) => ({ default: e.PayoutAdminPage })));
12
+ function R() {
13
13
  let { basePath: t } = e(), n = d(), r = t && t !== "/" ? t.replace(/\/$/, "") : "";
14
14
  return o(() => {
15
15
  n(`${r}/plans`, { replace: !0 });
16
16
  }, [r, n]), null;
17
17
  }
18
- function L() {
18
+ function z() {
19
19
  return /* @__PURE__ */ f("div", {
20
20
  className: "flex min-h-[400px] items-center justify-center",
21
21
  children: /* @__PURE__ */ f("div", { className: "size-8 animate-spin rounded-full border-4 border-primary border-t-transparent" })
22
22
  });
23
23
  }
24
- function R({ title: e, featureFlag: t }) {
24
+ function B({ title: e, featureFlag: t }) {
25
25
  return /* @__PURE__ */ f("div", {
26
26
  className: "flex min-h-[400px] items-center justify-center p-6",
27
27
  children: /* @__PURE__ */ p("div", {
@@ -44,7 +44,7 @@ function R({ title: e, featureFlag: t }) {
44
44
  })
45
45
  });
46
46
  }
47
- function z({ title: e, featureFlag: i, permission: a, eventName: c, children: l }) {
47
+ function V({ title: e, featureFlag: i, permission: a, eventName: c, children: l }) {
48
48
  let u = r(), { emit: d } = n(), p = !!u[a];
49
49
  return o(() => {
50
50
  p && d(c, { source: "BillingAdminRoutes" });
@@ -52,20 +52,20 @@ function z({ title: e, featureFlag: i, permission: a, eventName: c, children: l
52
52
  d,
53
53
  c,
54
54
  p
55
- ]), u.isLoading ? /* @__PURE__ */ f(L, {}) : /* @__PURE__ */ f(s, {
55
+ ]), u.isLoading ? /* @__PURE__ */ f(z, {}) : /* @__PURE__ */ f(s, {
56
56
  flag: i,
57
57
  defaultValue: !0,
58
- fallback: /* @__PURE__ */ f(R, {
58
+ fallback: /* @__PURE__ */ f(B, {
59
59
  title: e,
60
60
  featureFlag: i
61
61
  }),
62
62
  children: p ? l : /* @__PURE__ */ f(t, { message: `You don't have permission to access ${e}.` })
63
63
  });
64
64
  }
65
- function B(e) {
66
- return /* @__PURE__ */ f(z, { ...e });
65
+ function H(e) {
66
+ return /* @__PURE__ */ f(V, { ...e });
67
67
  }
68
- function V() {
68
+ function U() {
69
69
  return /* @__PURE__ */ p(u, { children: [
70
70
  /* @__PURE__ */ f(l, {
71
71
  index: !0,
@@ -76,297 +76,323 @@ function V() {
76
76
  }),
77
77
  /* @__PURE__ */ f(l, {
78
78
  path: "plans",
79
- element: B({
79
+ element: H({
80
80
  title: "Plans",
81
81
  featureFlag: "billing.plans",
82
82
  permission: "canViewPlans",
83
83
  eventName: "billing.plan.viewed",
84
84
  children: /* @__PURE__ */ f(i, {
85
- fallback: /* @__PURE__ */ f(L, {}),
85
+ fallback: /* @__PURE__ */ f(z, {}),
86
86
  children: /* @__PURE__ */ f(m, {})
87
87
  })
88
88
  })
89
89
  }),
90
90
  /* @__PURE__ */ f(l, {
91
91
  path: "plans/new",
92
- element: B({
92
+ element: H({
93
93
  title: "Create plan",
94
94
  featureFlag: "billing.plans.manage",
95
95
  permission: "canManagePlans",
96
96
  eventName: "billing.plan.viewed",
97
97
  children: /* @__PURE__ */ f(i, {
98
- fallback: /* @__PURE__ */ f(L, {}),
98
+ fallback: /* @__PURE__ */ f(z, {}),
99
99
  children: /* @__PURE__ */ f(_, {})
100
100
  })
101
101
  })
102
102
  }),
103
103
  /* @__PURE__ */ f(l, {
104
104
  path: "plans/assign-free",
105
- element: B({
105
+ element: H({
106
106
  title: "Assign plan for free",
107
107
  featureFlag: "billing.plans.manage",
108
108
  permission: "canManagePlans",
109
109
  eventName: "billing.plan.viewed",
110
110
  children: /* @__PURE__ */ f(i, {
111
- fallback: /* @__PURE__ */ f(L, {}),
111
+ fallback: /* @__PURE__ */ f(z, {}),
112
112
  children: /* @__PURE__ */ f(v, {})
113
113
  })
114
114
  })
115
115
  }),
116
116
  /* @__PURE__ */ f(l, {
117
117
  path: "plans/:planId",
118
- element: B({
118
+ element: H({
119
119
  title: "Plan details",
120
120
  featureFlag: "billing.plans",
121
121
  permission: "canViewPlans",
122
122
  eventName: "billing.plan.viewed",
123
123
  children: /* @__PURE__ */ f(i, {
124
- fallback: /* @__PURE__ */ f(L, {}),
124
+ fallback: /* @__PURE__ */ f(z, {}),
125
125
  children: /* @__PURE__ */ f(h, {})
126
126
  })
127
127
  })
128
128
  }),
129
129
  /* @__PURE__ */ f(l, {
130
130
  path: "plans/:planId/edit",
131
- element: B({
131
+ element: H({
132
132
  title: "Edit plan",
133
133
  featureFlag: "billing.plans.manage",
134
134
  permission: "canManagePlans",
135
135
  eventName: "billing.plan.viewed",
136
136
  children: /* @__PURE__ */ f(i, {
137
- fallback: /* @__PURE__ */ f(L, {}),
137
+ fallback: /* @__PURE__ */ f(z, {}),
138
138
  children: /* @__PURE__ */ f(g, {})
139
139
  })
140
140
  })
141
141
  }),
142
142
  /* @__PURE__ */ f(l, {
143
143
  path: "addons",
144
- element: B({
144
+ element: H({
145
145
  title: "Addons",
146
146
  featureFlag: "billing.addons",
147
147
  permission: "canViewAddons",
148
148
  eventName: "billing.addon.viewed",
149
149
  children: /* @__PURE__ */ f(i, {
150
- fallback: /* @__PURE__ */ f(L, {}),
150
+ fallback: /* @__PURE__ */ f(z, {}),
151
151
  children: /* @__PURE__ */ f(y, {})
152
152
  })
153
153
  })
154
154
  }),
155
155
  /* @__PURE__ */ f(l, {
156
156
  path: "addons/new",
157
- element: B({
157
+ element: H({
158
158
  title: "Create addon",
159
159
  featureFlag: "billing.addons.manage",
160
160
  permission: "canManageAddons",
161
161
  eventName: "billing.addon.viewed",
162
162
  children: /* @__PURE__ */ f(i, {
163
- fallback: /* @__PURE__ */ f(L, {}),
163
+ fallback: /* @__PURE__ */ f(z, {}),
164
164
  children: /* @__PURE__ */ f(S, {})
165
165
  })
166
166
  })
167
167
  }),
168
168
  /* @__PURE__ */ f(l, {
169
169
  path: "addons/:addonId",
170
- element: B({
170
+ element: H({
171
171
  title: "Addon details",
172
172
  featureFlag: "billing.addons",
173
173
  permission: "canViewAddons",
174
174
  eventName: "billing.addon.viewed",
175
175
  children: /* @__PURE__ */ f(i, {
176
- fallback: /* @__PURE__ */ f(L, {}),
176
+ fallback: /* @__PURE__ */ f(z, {}),
177
177
  children: /* @__PURE__ */ f(b, {})
178
178
  })
179
179
  })
180
180
  }),
181
181
  /* @__PURE__ */ f(l, {
182
182
  path: "addons/:addonId/edit",
183
- element: B({
183
+ element: H({
184
184
  title: "Edit addon",
185
185
  featureFlag: "billing.addons.manage",
186
186
  permission: "canManageAddons",
187
187
  eventName: "billing.addon.viewed",
188
188
  children: /* @__PURE__ */ f(i, {
189
- fallback: /* @__PURE__ */ f(L, {}),
189
+ fallback: /* @__PURE__ */ f(z, {}),
190
190
  children: /* @__PURE__ */ f(x, {})
191
191
  })
192
192
  })
193
193
  }),
194
194
  /* @__PURE__ */ f(l, {
195
195
  path: "quotas",
196
- element: B({
196
+ element: H({
197
197
  title: "Quota templates",
198
198
  featureFlag: "billing.quotas",
199
199
  permission: "canViewQuotas",
200
200
  eventName: "billing.quota.viewed",
201
201
  children: /* @__PURE__ */ f(i, {
202
- fallback: /* @__PURE__ */ f(L, {}),
202
+ fallback: /* @__PURE__ */ f(z, {}),
203
203
  children: /* @__PURE__ */ f(C, {})
204
204
  })
205
205
  })
206
206
  }),
207
207
  /* @__PURE__ */ f(l, {
208
208
  path: "quotas/new",
209
- element: B({
209
+ element: H({
210
210
  title: "Create quota template",
211
211
  featureFlag: "billing.quotas.manage",
212
212
  permission: "canManageQuotas",
213
213
  eventName: "billing.quota.viewed",
214
214
  children: /* @__PURE__ */ f(i, {
215
- fallback: /* @__PURE__ */ f(L, {}),
215
+ fallback: /* @__PURE__ */ f(z, {}),
216
216
  children: /* @__PURE__ */ f(T, {})
217
217
  })
218
218
  })
219
219
  }),
220
220
  /* @__PURE__ */ f(l, {
221
221
  path: "quotas/:quotaId",
222
- element: B({
222
+ element: H({
223
223
  title: "Quota template details",
224
224
  featureFlag: "billing.quotas",
225
225
  permission: "canViewQuotas",
226
226
  eventName: "billing.quota.viewed",
227
227
  children: /* @__PURE__ */ f(i, {
228
- fallback: /* @__PURE__ */ f(L, {}),
228
+ fallback: /* @__PURE__ */ f(z, {}),
229
229
  children: /* @__PURE__ */ f(w, {})
230
230
  })
231
231
  })
232
232
  }),
233
233
  /* @__PURE__ */ f(l, {
234
234
  path: "quotas/:quotaId/edit",
235
- element: B({
235
+ element: H({
236
236
  title: "Edit quota template",
237
237
  featureFlag: "billing.quotas.manage",
238
238
  permission: "canManageQuotas",
239
239
  eventName: "billing.quota.viewed",
240
240
  children: /* @__PURE__ */ f(i, {
241
- fallback: /* @__PURE__ */ f(L, {}),
241
+ fallback: /* @__PURE__ */ f(z, {}),
242
242
  children: /* @__PURE__ */ f(E, {})
243
243
  })
244
244
  })
245
245
  }),
246
246
  /* @__PURE__ */ f(l, {
247
247
  path: "coupons",
248
- element: B({
248
+ element: H({
249
249
  title: "Coupons",
250
250
  featureFlag: "billing.discounts",
251
251
  permission: "canManageDiscounts",
252
252
  eventName: "billing.transaction.viewed",
253
253
  children: /* @__PURE__ */ f(i, {
254
- fallback: /* @__PURE__ */ f(L, {}),
254
+ fallback: /* @__PURE__ */ f(z, {}),
255
255
  children: /* @__PURE__ */ f(D, {})
256
256
  })
257
257
  })
258
258
  }),
259
259
  /* @__PURE__ */ f(l, {
260
260
  path: "coupons/create",
261
- element: B({
261
+ element: H({
262
262
  title: "Create coupon",
263
263
  featureFlag: "billing.discounts",
264
264
  permission: "canManageDiscounts",
265
265
  eventName: "billing.transaction.viewed",
266
266
  children: /* @__PURE__ */ f(i, {
267
- fallback: /* @__PURE__ */ f(L, {}),
267
+ fallback: /* @__PURE__ */ f(z, {}),
268
268
  children: /* @__PURE__ */ f(O, {})
269
269
  })
270
270
  })
271
271
  }),
272
272
  /* @__PURE__ */ f(l, {
273
273
  path: "coupons/:id",
274
- element: B({
274
+ element: H({
275
275
  title: "Coupon details",
276
276
  featureFlag: "billing.discounts",
277
277
  permission: "canManageDiscounts",
278
278
  eventName: "billing.transaction.viewed",
279
279
  children: /* @__PURE__ */ f(i, {
280
- fallback: /* @__PURE__ */ f(L, {}),
280
+ fallback: /* @__PURE__ */ f(z, {}),
281
281
  children: /* @__PURE__ */ f(A, {})
282
282
  })
283
283
  })
284
284
  }),
285
285
  /* @__PURE__ */ f(l, {
286
286
  path: "coupons/:id/edit",
287
- element: B({
287
+ element: H({
288
288
  title: "Edit coupon",
289
289
  featureFlag: "billing.discounts",
290
290
  permission: "canManageDiscounts",
291
291
  eventName: "billing.transaction.viewed",
292
292
  children: /* @__PURE__ */ f(i, {
293
- fallback: /* @__PURE__ */ f(L, {}),
293
+ fallback: /* @__PURE__ */ f(z, {}),
294
294
  children: /* @__PURE__ */ f(k, {})
295
295
  })
296
296
  })
297
297
  }),
298
+ /* @__PURE__ */ f(l, {
299
+ path: "promotions",
300
+ element: H({
301
+ title: "Promotions",
302
+ featureFlag: "billing.plans.manage",
303
+ permission: "canManagePlans",
304
+ eventName: "billing.plan.viewed",
305
+ children: /* @__PURE__ */ f(i, {
306
+ fallback: /* @__PURE__ */ f(z, {}),
307
+ children: /* @__PURE__ */ f(j, {})
308
+ })
309
+ })
310
+ }),
311
+ /* @__PURE__ */ f(l, {
312
+ path: "promotions/create",
313
+ element: H({
314
+ title: "Create Promotion",
315
+ featureFlag: "billing.plans.manage",
316
+ permission: "canManagePlans",
317
+ eventName: "billing.plan.viewed",
318
+ children: /* @__PURE__ */ f(i, {
319
+ fallback: /* @__PURE__ */ f(z, {}),
320
+ children: /* @__PURE__ */ f(M, {})
321
+ })
322
+ })
323
+ }),
298
324
  /* @__PURE__ */ f(l, {
299
325
  path: "discounts",
300
- element: B({
326
+ element: H({
301
327
  title: "Discounts",
302
328
  featureFlag: "billing.discounts",
303
329
  permission: "canManageDiscounts",
304
330
  eventName: "billing.transaction.viewed",
305
331
  children: /* @__PURE__ */ f(i, {
306
- fallback: /* @__PURE__ */ f(L, {}),
307
- children: /* @__PURE__ */ f(j, {})
332
+ fallback: /* @__PURE__ */ f(z, {}),
333
+ children: /* @__PURE__ */ f(N, {})
308
334
  })
309
335
  })
310
336
  }),
311
337
  /* @__PURE__ */ f(l, {
312
338
  path: "credits",
313
- element: B({
339
+ element: H({
314
340
  title: "Credit grants",
315
341
  featureFlag: "billing.credits.grants",
316
342
  permission: "canGrantCredits",
317
343
  eventName: "billing.credit.viewed",
318
344
  children: /* @__PURE__ */ f(i, {
319
- fallback: /* @__PURE__ */ f(L, {}),
320
- children: /* @__PURE__ */ f(N, {})
345
+ fallback: /* @__PURE__ */ f(z, {}),
346
+ children: /* @__PURE__ */ f(F, {})
321
347
  })
322
348
  })
323
349
  }),
324
350
  /* @__PURE__ */ f(l, {
325
351
  path: "refunds",
326
- element: B({
352
+ element: H({
327
353
  title: "Refunds",
328
354
  featureFlag: "billing.refunds",
329
355
  permission: "canProcessRefund",
330
356
  eventName: "billing.transaction.viewed",
331
357
  children: /* @__PURE__ */ f(i, {
332
- fallback: /* @__PURE__ */ f(L, {}),
333
- children: /* @__PURE__ */ f(M, {})
358
+ fallback: /* @__PURE__ */ f(z, {}),
359
+ children: /* @__PURE__ */ f(P, {})
334
360
  })
335
361
  })
336
362
  }),
337
363
  /* @__PURE__ */ f(l, {
338
364
  path: "analytics",
339
- element: B({
365
+ element: H({
340
366
  title: "Billing analytics",
341
367
  featureFlag: "billing.analytics",
342
368
  permission: "canViewAnalytics",
343
369
  eventName: "billing.usage.viewed",
344
370
  children: /* @__PURE__ */ f(i, {
345
- fallback: /* @__PURE__ */ f(L, {}),
346
- children: /* @__PURE__ */ f(P, {})
371
+ fallback: /* @__PURE__ */ f(z, {}),
372
+ children: /* @__PURE__ */ f(I, {})
347
373
  })
348
374
  })
349
375
  }),
350
376
  /* @__PURE__ */ f(l, {
351
377
  path: "payouts",
352
- element: B({
378
+ element: H({
353
379
  title: "Payout administration",
354
380
  featureFlag: "billing.payouts.admin",
355
381
  permission: "isBillingAdmin",
356
382
  eventName: "billing.payout.viewed",
357
383
  children: /* @__PURE__ */ f(i, {
358
- fallback: /* @__PURE__ */ f(L, {}),
359
- children: /* @__PURE__ */ f(F, {})
384
+ fallback: /* @__PURE__ */ f(z, {}),
385
+ children: /* @__PURE__ */ f(L, {})
360
386
  })
361
387
  })
362
388
  }),
363
389
  /* @__PURE__ */ f(l, {
364
390
  path: "*",
365
- element: /* @__PURE__ */ f(I, {})
391
+ element: /* @__PURE__ */ f(R, {})
366
392
  })
367
393
  ] });
368
394
  }
369
395
  //#endregion
370
- export { V as BillingAdminRoutes };
396
+ export { U as BillingAdminRoutes };
371
397
 
372
398
  //# sourceMappingURL=BillingAdminRoutes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BillingAdminRoutes.js","names":[],"sources":["../../src/billing/BillingAdminRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, useEffect, type ReactNode } from 'react';\nimport { Navigate, Route, Routes, useNavigate } from 'react-router-dom';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useBillingEventEmitter, type BillingDomainEvent } from './hooks/useBillingEventEmitter';\nimport { useBillingPermissions } from './hooks/useBillingPermissions';\nimport { useBilling } from './providers/BillingProvider';\nimport { AccessDenied } from './shared/components';\n\n// Lazy loaded pages - Plans (full CRUD)\nconst PlansListPage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlansListPage }))\n);\nconst PlanDetailPage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanDetailPage }))\n);\nconst PlanEditPage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanEditPage }))\n);\nconst PlanCreatePage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanCreatePage }))\n);\nconst PlanAssignFreePage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanAssignFreePage }))\n);\n\n// Lazy loaded pages - Addons (full CRUD)\nconst AddonsListPage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonsListPage }))\n);\nconst AddonDetailPage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonDetailPage }))\n);\nconst AddonEditPage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonEditPage }))\n);\nconst AddonCreatePage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonCreatePage }))\n);\n\n// Lazy loaded pages - Quota Templates (full CRUD)\nconst QuotaTemplatesListPage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplatesListPage }))\n);\nconst QuotaTemplateDetailPage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplateDetailPage }))\n);\nconst QuotaTemplateCreatePage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplateCreatePage }))\n);\nconst QuotaTemplateEditPage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplateEditPage }))\n);\n\n// Lazy loaded pages - Coupons\nconst CouponsListPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.CouponsListPage }))\n);\nconst CreateCouponPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.CreateCouponPage }))\n);\nconst EditCouponPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.EditCouponPage }))\n);\nconst CouponDetailPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.CouponDetailPage }))\n);\n\n// Lazy loaded pages - Discounts\nconst DiscountsListPage = lazy(() =>\n import('./modules/discounts').then((m) => ({ default: m.DiscountsListPage }))\n);\n\n// Lazy loaded pages - Refunds\nconst RefundsPage = lazy(() =>\n import('./modules/billing').then((m) => ({ default: m.RefundsPage }))\n);\n\n// Lazy loaded pages - Credits admin\nconst AdminCreditsPage = lazy(() =>\n import('./modules/credits').then((m) => ({ default: m.AdminCreditsPage }))\n);\n\n// Lazy loaded pages - Analytics\nconst AnalyticsPage = lazy(() =>\n import('./modules/analytics').then((m) => ({ default: m.AnalyticsPage }))\n);\nconst PayoutAdminPage = lazy(() =>\n import('./modules/earnings').then((m) => ({ default: m.PayoutAdminPage }))\n);\n\nfunction DefaultRedirect() {\n const { basePath } = useBilling();\n const routerNavigate = useNavigate();\n const base = basePath && basePath !== '/' ? basePath.replace(/\\/$/, '') : '';\n useEffect(() => {\n routerNavigate(`${base}/plans`, { replace: true });\n }, [base, routerNavigate]);\n return null;\n}\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <div className=\"size-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n </div>\n );\n}\n\ntype BillingPermissions = ReturnType<typeof useBillingPermissions>;\ntype BillingPermissionKey = Exclude<\n {\n [K in keyof BillingPermissions]: BillingPermissions[K] extends boolean ? K : never;\n }[keyof BillingPermissions],\n 'isLoading'\n>;\n\ninterface BillingAdminRouteGateProps {\n title: string;\n featureFlag: string;\n permission: BillingPermissionKey;\n eventName: BillingDomainEvent;\n children: ReactNode;\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\nfunction BillingAdminRouteGate({\n title,\n featureFlag,\n permission,\n eventName,\n children,\n}: BillingAdminRouteGateProps) {\n const permissions = useBillingPermissions();\n const { emit } = useBillingEventEmitter();\n const hasPermission = Boolean(permissions[permission]);\n\n useEffect(() => {\n if (hasPermission) {\n emit(eventName, { source: 'BillingAdminRoutes' });\n }\n }, [emit, eventName, hasPermission]);\n\n if (permissions.isLoading) {\n return <PageLoader />;\n }\n\n return (\n <FeatureGate\n flag={featureFlag}\n defaultValue\n fallback={<FeatureDisabled title={title} featureFlag={featureFlag} />}\n >\n {hasPermission ? (\n children\n ) : (\n <AccessDenied message={`You don't have permission to access ${title}.`} />\n )}\n </FeatureGate>\n );\n}\n\nfunction adminPage(props: BillingAdminRouteGateProps): ReactNode {\n return <BillingAdminRouteGate {...props} />;\n}\n\n/**\n * Admin-only billing routes.\n * Includes plans/addons/quota-templates CRUD, coupons, discounts, refunds, and analytics.\n */\nexport function BillingAdminRoutes() {\n return (\n <Routes>\n <Route index element={<Navigate to=\"plans\" replace />} />\n\n {/* Plans - full CRUD */}\n <Route\n path=\"plans\"\n element={adminPage({\n title: 'Plans',\n featureFlag: 'billing.plans',\n permission: 'canViewPlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlansListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/new\"\n element={adminPage({\n title: 'Create plan',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanCreatePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/assign-free\"\n element={adminPage({\n title: 'Assign plan for free',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanAssignFreePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/:planId\"\n element={adminPage({\n title: 'Plan details',\n featureFlag: 'billing.plans',\n permission: 'canViewPlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/:planId/edit\"\n element={adminPage({\n title: 'Edit plan',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanEditPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Addons - full CRUD */}\n <Route\n path=\"addons\"\n element={adminPage({\n title: 'Addons',\n featureFlag: 'billing.addons',\n permission: 'canViewAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonsListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"addons/new\"\n element={adminPage({\n title: 'Create addon',\n featureFlag: 'billing.addons.manage',\n permission: 'canManageAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonCreatePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"addons/:addonId\"\n element={adminPage({\n title: 'Addon details',\n featureFlag: 'billing.addons',\n permission: 'canViewAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"addons/:addonId/edit\"\n element={adminPage({\n title: 'Edit addon',\n featureFlag: 'billing.addons.manage',\n permission: 'canManageAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonEditPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Quota Templates - full CRUD */}\n <Route\n path=\"quotas\"\n element={adminPage({\n title: 'Quota templates',\n featureFlag: 'billing.quotas',\n permission: 'canViewQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplatesListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"quotas/new\"\n element={adminPage({\n title: 'Create quota template',\n featureFlag: 'billing.quotas.manage',\n permission: 'canManageQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplateCreatePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"quotas/:quotaId\"\n element={adminPage({\n title: 'Quota template details',\n featureFlag: 'billing.quotas',\n permission: 'canViewQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplateDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"quotas/:quotaId/edit\"\n element={adminPage({\n title: 'Edit quota template',\n featureFlag: 'billing.quotas.manage',\n permission: 'canManageQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplateEditPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Coupons */}\n <Route\n path=\"coupons\"\n element={adminPage({\n title: 'Coupons',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CouponsListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"coupons/create\"\n element={adminPage({\n title: 'Create coupon',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CreateCouponPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"coupons/:id\"\n element={adminPage({\n title: 'Coupon details',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CouponDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"coupons/:id/edit\"\n element={adminPage({\n title: 'Edit coupon',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <EditCouponPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Discounts */}\n <Route\n path=\"discounts\"\n element={adminPage({\n title: 'Discounts',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <DiscountsListPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Credit grants */}\n <Route\n path=\"credits\"\n element={adminPage({\n title: 'Credit grants',\n featureFlag: 'billing.credits.grants',\n permission: 'canGrantCredits',\n eventName: 'billing.credit.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AdminCreditsPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Refunds */}\n <Route\n path=\"refunds\"\n element={adminPage({\n title: 'Refunds',\n featureFlag: 'billing.refunds',\n permission: 'canProcessRefund',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <RefundsPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Analytics */}\n <Route\n path=\"analytics\"\n element={adminPage({\n title: 'Billing analytics',\n featureFlag: 'billing.analytics',\n permission: 'canViewAnalytics',\n eventName: 'billing.usage.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AnalyticsPage />\n </Suspense>\n ),\n })}\n />\n\n <Route\n path=\"payouts\"\n element={adminPage({\n title: 'Payout administration',\n featureFlag: 'billing.payouts.admin',\n permission: 'isBillingAdmin',\n eventName: 'billing.payout.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PayoutAdminPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Catch-all — uses absolute path to avoid relative-navigation loop */}\n <Route path=\"*\" element={<DefaultRedirect />} />\n </Routes>\n );\n}\n"],"mappings":";;;;;;;;;;AASA,IAAM,IAAgB,QACpB,OAAO,4BAAmB,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CACtE,EACK,IAAiB,QACrB,OAAO,4BAAmB,MAAM,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CACvE,EACK,IAAe,QACnB,OAAO,4BAAmB,MAAM,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CACrE,EACK,IAAiB,QACrB,OAAO,4BAAmB,MAAM,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CACvE,EACK,IAAqB,QACzB,OAAO,4BAAmB,MAAM,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAC3E,EAGK,IAAiB,QACrB,OAAO,6BAAoB,MAAM,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CACxE,EACK,IAAkB,QACtB,OAAO,6BAAoB,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CACzE,EACK,IAAgB,QACpB,OAAO,6BAAoB,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CACvE,EACK,IAAkB,QACtB,OAAO,6BAAoB,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CACzE,EAGK,IAAyB,QAC7B,OAAO,4BAAmB,MAAM,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,CAC/E,EACK,IAA0B,QAC9B,OAAO,4BAAmB,MAAM,OAAO,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAChF,EACK,IAA0B,QAC9B,OAAO,4BAAmB,MAAM,OAAO,EAAE,SAAS,EAAE,yBAAyB,EAAE,CAChF,EACK,IAAwB,QAC5B,OAAO,4BAAmB,MAAM,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAC9E,EAGK,IAAkB,QACtB,OAAO,8BAAqB,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAC1E,EACK,IAAmB,QACvB,OAAO,8BAAqB,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAC3E,EACK,IAAiB,QACrB,OAAO,8BAAqB,MAAM,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,CACzE,EACK,IAAmB,QACvB,OAAO,8BAAqB,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAC3E,EAGK,IAAoB,QACxB,OAAO,gCAAuB,MAAM,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAC9E,EAGK,IAAc,QAClB,OAAO,8BAAqB,MAAM,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CACtE,EAGK,IAAmB,QACvB,OAAO,8BAAqB,MAAM,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAC3E,EAGK,IAAgB,QACpB,OAAO,gCAAuB,MAAM,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,CAC1E,EACK,IAAkB,QACtB,OAAO,+BAAsB,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAC3E;AAED,SAAS,IAAkB;CACzB,IAAM,EAAE,gBAAa,GAAY,EAC3B,IAAiB,GAAa,EAC9B,IAAO,KAAY,MAAa,MAAM,EAAS,QAAQ,OAAO,GAAG,GAAG;AAI1E,QAHA,QAAgB;AACd,IAAe,GAAG,EAAK,SAAS,EAAE,SAAS,IAAM,CAAC;IACjD,CAAC,GAAM,EAAe,CAAC,EACnB;;AAGT,SAAS,IAAa;AACpB,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD,EAAK,WAAU,iFAAkF,CAAA;EAC7F,CAAA;;AAoBV,SAAS,EAAgB,EAAE,UAAO,kBAAuD;AACvF,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cAAd,CAAuD,GAAM,kBAAoB;OACjF,kBAAC,KAAD;IAAG,WAAU;cAAb;KAAkD;KACb,kBAAC,QAAD;MAAM,WAAU;gBAAa;MAAmB,CAAA;KAAC;KAAI;KAEtF;MACA;;EACF,CAAA;;AAIV,SAAS,EAAsB,EAC7B,UACA,gBACA,eACA,cACA,eAC6B;CAC7B,IAAM,IAAc,GAAuB,EACrC,EAAE,YAAS,GAAwB,EACnC,IAAgB,EAAQ,EAAY;AAY1C,QAVA,QAAgB;AACd,EAAI,KACF,EAAK,GAAW,EAAE,QAAQ,sBAAsB,CAAC;IAElD;EAAC;EAAM;EAAW;EAAc,CAAC,EAEhC,EAAY,YACP,kBAAC,GAAD,EAAc,CAAA,GAIrB,kBAAC,GAAD;EACE,MAAM;EACN,cAAA;EACA,UAAU,kBAAC,GAAD;GAAwB;GAAoB;GAAe,CAAA;YAEpE,IACC,IAEA,kBAAC,GAAD,EAAc,SAAS,uCAAuC,EAAM,IAAM,CAAA;EAEhE,CAAA;;AAIlB,SAAS,EAAU,GAA8C;AAC/D,QAAO,kBAAC,GAAD,EAAuB,GAAI,GAAS,CAAA;;AAO7C,SAAgB,IAAqB;AACnC,QACE,kBAAC,GAAD,EAAA,UAAA;EACE,kBAAC,GAAD;GAAO,OAAA;GAAM,SAAS,kBAAC,GAAD;IAAU,IAAG;IAAQ,SAAA;IAAU,CAAA;GAAI,CAAA;EAGzD,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAiB,CAAA;KACR,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAkB,CAAA;KACT,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAsB,CAAA;KACb,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAkB,CAAA;KACT,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAgB,CAAA;KACP,CAAA;IAEd,CAAC;GACF,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAkB,CAAA;KACT,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAmB,CAAA;KACV,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAmB,CAAA;KACV,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAiB,CAAA;KACR,CAAA;IAEd,CAAC;GACF,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAA0B,CAAA;KACjB,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAA2B,CAAA;KAClB,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAA2B,CAAA;KAClB,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAyB,CAAA;KAChB,CAAA;IAEd,CAAC;GACF,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAmB,CAAA;KACV,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAoB,CAAA;KACX,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAoB,CAAA;KACX,CAAA;IAEd,CAAC;GACF,CAAA;EACF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAkB,CAAA;KACT,CAAA;IAEd,CAAC;GACF,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAqB,CAAA;KACZ,CAAA;IAEd,CAAC;GACF,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAoB,CAAA;KACX,CAAA;IAEd,CAAC;GACF,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAe,CAAA;KACN,CAAA;IAEd,CAAC;GACF,CAAA;EAGF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAiB,CAAA;KACR,CAAA;IAEd,CAAC;GACF,CAAA;EAEF,kBAAC,GAAD;GACE,MAAK;GACL,SAAS,EAAU;IACjB,OAAO;IACP,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UACE,kBAAC,GAAD;KAAU,UAAU,kBAAC,GAAD,EAAc,CAAA;eAChC,kBAAC,GAAD,EAAmB,CAAA;KACV,CAAA;IAEd,CAAC;GACF,CAAA;EAGF,kBAAC,GAAD;GAAO,MAAK;GAAI,SAAS,kBAAC,GAAD,EAAmB,CAAA;GAAI,CAAA;EACzC,EAAA,CAAA"}
1
+ {"version":3,"file":"BillingAdminRoutes.js","names":[],"sources":["../../src/billing/BillingAdminRoutes.tsx"],"sourcesContent":["import { lazy, Suspense, useEffect, type ReactNode } from 'react';\nimport { Navigate, Route, Routes, useNavigate } from 'react-router-dom';\nimport { FeatureGate } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { useBillingEventEmitter, type BillingDomainEvent } from './hooks/useBillingEventEmitter';\nimport { useBillingPermissions } from './hooks/useBillingPermissions';\nimport { useBilling } from './providers/BillingProvider';\nimport { AccessDenied } from './shared/components';\n\n// Lazy loaded pages - Plans (full CRUD)\nconst PlansListPage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlansListPage }))\n);\nconst PlanDetailPage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanDetailPage }))\n);\nconst PlanEditPage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanEditPage }))\n);\nconst PlanCreatePage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanCreatePage }))\n);\nconst PlanAssignFreePage = lazy(() =>\n import('./modules/plans').then((m) => ({ default: m.PlanAssignFreePage }))\n);\n\n// Lazy loaded pages - Addons (full CRUD)\nconst AddonsListPage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonsListPage }))\n);\nconst AddonDetailPage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonDetailPage }))\n);\nconst AddonEditPage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonEditPage }))\n);\nconst AddonCreatePage = lazy(() =>\n import('./modules/addons').then((m) => ({ default: m.AddonCreatePage }))\n);\n\n// Lazy loaded pages - Quota Templates (full CRUD)\nconst QuotaTemplatesListPage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplatesListPage }))\n);\nconst QuotaTemplateDetailPage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplateDetailPage }))\n);\nconst QuotaTemplateCreatePage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplateCreatePage }))\n);\nconst QuotaTemplateEditPage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaTemplateEditPage }))\n);\n\n// Lazy loaded pages - Coupons\nconst CouponsListPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.CouponsListPage }))\n);\nconst CreateCouponPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.CreateCouponPage }))\n);\nconst EditCouponPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.EditCouponPage }))\n);\nconst CouponDetailPage = lazy(() =>\n import('./modules/coupons').then((m) => ({ default: m.CouponDetailPage }))\n);\n\n// Lazy loaded pages - Promotions\nconst PromotionsListPage = lazy(() =>\n import('./modules/promotions').then((m) => ({ default: m.PromotionsListPage }))\n);\nconst CreatePromotionPage = lazy(() =>\n import('./modules/promotions').then((m) => ({ default: m.CreatePromotionPage }))\n);\n\n// Lazy loaded pages - Discounts\nconst DiscountsListPage = lazy(() =>\n import('./modules/discounts').then((m) => ({ default: m.DiscountsListPage }))\n);\n\n// Lazy loaded pages - Refunds\nconst RefundsPage = lazy(() =>\n import('./modules/billing').then((m) => ({ default: m.RefundsPage }))\n);\n\n// Lazy loaded pages - Credits admin\nconst AdminCreditsPage = lazy(() =>\n import('./modules/credits').then((m) => ({ default: m.AdminCreditsPage }))\n);\n\n// Lazy loaded pages - Analytics\nconst AnalyticsPage = lazy(() =>\n import('./modules/analytics').then((m) => ({ default: m.AnalyticsPage }))\n);\nconst PayoutAdminPage = lazy(() =>\n import('./modules/earnings').then((m) => ({ default: m.PayoutAdminPage }))\n);\n\nfunction DefaultRedirect() {\n const { basePath } = useBilling();\n const routerNavigate = useNavigate();\n const base = basePath && basePath !== '/' ? basePath.replace(/\\/$/, '') : '';\n useEffect(() => {\n routerNavigate(`${base}/plans`, { replace: true });\n }, [base, routerNavigate]);\n return null;\n}\n\nfunction PageLoader() {\n return (\n <div className=\"flex min-h-[400px] items-center justify-center\">\n <div className=\"size-8 animate-spin rounded-full border-4 border-primary border-t-transparent\" />\n </div>\n );\n}\n\ntype BillingPermissions = ReturnType<typeof useBillingPermissions>;\ntype BillingPermissionKey = Exclude<\n {\n [K in keyof BillingPermissions]: BillingPermissions[K] extends boolean ? K : never;\n }[keyof BillingPermissions],\n 'isLoading'\n>;\n\ninterface BillingAdminRouteGateProps {\n title: string;\n featureFlag: string;\n permission: BillingPermissionKey;\n eventName: BillingDomainEvent;\n children: ReactNode;\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\nfunction BillingAdminRouteGate({\n title,\n featureFlag,\n permission,\n eventName,\n children,\n}: BillingAdminRouteGateProps) {\n const permissions = useBillingPermissions();\n const { emit } = useBillingEventEmitter();\n const hasPermission = Boolean(permissions[permission]);\n\n useEffect(() => {\n if (hasPermission) {\n emit(eventName, { source: 'BillingAdminRoutes' });\n }\n }, [emit, eventName, hasPermission]);\n\n if (permissions.isLoading) {\n return <PageLoader />;\n }\n\n return (\n <FeatureGate\n flag={featureFlag}\n defaultValue\n fallback={<FeatureDisabled title={title} featureFlag={featureFlag} />}\n >\n {hasPermission ? (\n children\n ) : (\n <AccessDenied message={`You don't have permission to access ${title}.`} />\n )}\n </FeatureGate>\n );\n}\n\nfunction adminPage(props: BillingAdminRouteGateProps): ReactNode {\n return <BillingAdminRouteGate {...props} />;\n}\n\n/**\n * Admin-only billing routes.\n * Includes plans/addons/quota-templates CRUD, coupons, discounts, refunds, and analytics.\n */\nexport function BillingAdminRoutes() {\n return (\n <Routes>\n <Route index element={<Navigate to=\"plans\" replace />} />\n\n {/* Plans - full CRUD */}\n <Route\n path=\"plans\"\n element={adminPage({\n title: 'Plans',\n featureFlag: 'billing.plans',\n permission: 'canViewPlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlansListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/new\"\n element={adminPage({\n title: 'Create plan',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanCreatePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/assign-free\"\n element={adminPage({\n title: 'Assign plan for free',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanAssignFreePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/:planId\"\n element={adminPage({\n title: 'Plan details',\n featureFlag: 'billing.plans',\n permission: 'canViewPlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"plans/:planId/edit\"\n element={adminPage({\n title: 'Edit plan',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PlanEditPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Addons - full CRUD */}\n <Route\n path=\"addons\"\n element={adminPage({\n title: 'Addons',\n featureFlag: 'billing.addons',\n permission: 'canViewAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonsListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"addons/new\"\n element={adminPage({\n title: 'Create addon',\n featureFlag: 'billing.addons.manage',\n permission: 'canManageAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonCreatePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"addons/:addonId\"\n element={adminPage({\n title: 'Addon details',\n featureFlag: 'billing.addons',\n permission: 'canViewAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"addons/:addonId/edit\"\n element={adminPage({\n title: 'Edit addon',\n featureFlag: 'billing.addons.manage',\n permission: 'canManageAddons',\n eventName: 'billing.addon.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AddonEditPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Quota Templates - full CRUD */}\n <Route\n path=\"quotas\"\n element={adminPage({\n title: 'Quota templates',\n featureFlag: 'billing.quotas',\n permission: 'canViewQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplatesListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"quotas/new\"\n element={adminPage({\n title: 'Create quota template',\n featureFlag: 'billing.quotas.manage',\n permission: 'canManageQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplateCreatePage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"quotas/:quotaId\"\n element={adminPage({\n title: 'Quota template details',\n featureFlag: 'billing.quotas',\n permission: 'canViewQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplateDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"quotas/:quotaId/edit\"\n element={adminPage({\n title: 'Edit quota template',\n featureFlag: 'billing.quotas.manage',\n permission: 'canManageQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaTemplateEditPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Coupons */}\n <Route\n path=\"coupons\"\n element={adminPage({\n title: 'Coupons',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CouponsListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"coupons/create\"\n element={adminPage({\n title: 'Create coupon',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CreateCouponPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"coupons/:id\"\n element={adminPage({\n title: 'Coupon details',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CouponDetailPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"coupons/:id/edit\"\n element={adminPage({\n title: 'Edit coupon',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <EditCouponPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Promotions */}\n <Route\n path=\"promotions\"\n element={adminPage({\n title: 'Promotions',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PromotionsListPage />\n </Suspense>\n ),\n })}\n />\n <Route\n path=\"promotions/create\"\n element={adminPage({\n title: 'Create Promotion',\n featureFlag: 'billing.plans.manage',\n permission: 'canManagePlans',\n eventName: 'billing.plan.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <CreatePromotionPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Discounts */}\n <Route\n path=\"discounts\"\n element={adminPage({\n title: 'Discounts',\n featureFlag: 'billing.discounts',\n permission: 'canManageDiscounts',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <DiscountsListPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Credit grants */}\n <Route\n path=\"credits\"\n element={adminPage({\n title: 'Credit grants',\n featureFlag: 'billing.credits.grants',\n permission: 'canGrantCredits',\n eventName: 'billing.credit.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AdminCreditsPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Refunds */}\n <Route\n path=\"refunds\"\n element={adminPage({\n title: 'Refunds',\n featureFlag: 'billing.refunds',\n permission: 'canProcessRefund',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <RefundsPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Analytics */}\n <Route\n path=\"analytics\"\n element={adminPage({\n title: 'Billing analytics',\n featureFlag: 'billing.analytics',\n permission: 'canViewAnalytics',\n eventName: 'billing.usage.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <AnalyticsPage />\n </Suspense>\n ),\n })}\n />\n\n <Route\n path=\"payouts\"\n element={adminPage({\n title: 'Payout administration',\n featureFlag: 'billing.payouts.admin',\n permission: 'isBillingAdmin',\n eventName: 'billing.payout.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <PayoutAdminPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Catch-all — uses absolute path to avoid relative-navigation loop */}\n <Route path=\"*\" element={<DefaultRedirect />} />\n </Routes>\n );\n}\n"],"mappings":"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"}