@burdenoff/microfe-billing 2026.912.2 → 2026.912.3

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.
@@ -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";
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/quota/index.js").then((e) => ({ default: e.QuotaAssignFreePage }))), O = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CouponsListPage }))), k = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CreateCouponPage }))), A = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.EditCouponPage }))), j = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CouponDetailPage }))), M = a(() => import("./modules/promotions/index.js").then((e) => ({ default: e.PromotionsListPage }))), N = a(() => import("./modules/promotions/index.js").then((e) => ({ default: e.CreatePromotionPage }))), P = a(() => import("./modules/discounts/index.js").then((e) => ({ default: e.DiscountsListPage }))), F = a(() => import("./modules/billing/index.js").then((e) => ({ default: e.RefundsPage }))), I = a(() => import("./modules/billing/index.js").then((e) => ({ default: e.BillingWebhookLogsPage }))), L = a(() => import("./modules/credits/index.js").then((e) => ({ default: e.AdminCreditsPage }))), R = a(() => import("./modules/analytics/index.js").then((e) => ({ default: e.AnalyticsPage }))), z = a(() => import("./modules/earnings/index.js").then((e) => ({ default: e.DeveloperRevenueAdminPage }))), B = a(() => import("./modules/earnings/index.js").then((e) => ({ default: e.PayoutAdminPage })));
12
- function V() {
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/quota/index.js").then((e) => ({ default: e.QuotaAssignFreePage }))), O = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CouponsListPage }))), k = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CreateCouponPage }))), A = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.EditCouponPage }))), j = a(() => import("./modules/coupons/index.js").then((e) => ({ default: e.CouponDetailPage }))), M = a(() => import("./modules/promotions/index.js").then((e) => ({ default: e.PromotionsListPage }))), N = a(() => import("./modules/promotions/index.js").then((e) => ({ default: e.CreatePromotionPage }))), P = a(() => import("./modules/discounts/index.js").then((e) => ({ default: e.DiscountsListPage }))), F = a(() => import("./modules/billing/index.js").then((e) => ({ default: e.RefundsPage }))), I = a(() => import("./modules/billing/index.js").then((e) => ({ default: e.BillingWebhookLogsPage }))), L = a(() => import("./modules/billing/index.js").then((e) => ({ default: e.OrderCallbackLogsPage }))), R = a(() => import("./modules/credits/index.js").then((e) => ({ default: e.AdminCreditsPage }))), z = a(() => import("./modules/analytics/index.js").then((e) => ({ default: e.AnalyticsPage }))), B = a(() => import("./modules/earnings/index.js").then((e) => ({ default: e.DeveloperRevenueAdminPage }))), V = a(() => import("./modules/earnings/index.js").then((e) => ({ default: e.PayoutAdminPage })));
12
+ function H() {
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 H() {
18
+ function U() {
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-action-primary-bg border-t-transparent" })
22
22
  });
23
23
  }
24
- function U({ title: e, featureFlag: t }) {
24
+ function W({ 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", {
@@ -45,7 +45,7 @@ function U({ title: e, featureFlag: t }) {
45
45
  })
46
46
  });
47
47
  }
48
- function W({ title: e, featureFlag: i, permission: a, eventName: c, children: l }) {
48
+ function G({ title: e, featureFlag: i, permission: a, eventName: c, children: l }) {
49
49
  let u = r(), { emit: d } = n(), p = !!u[a];
50
50
  return o(() => {
51
51
  p && d(c, { source: "BillingAdminRoutes" });
@@ -53,20 +53,20 @@ function W({ title: e, featureFlag: i, permission: a, eventName: c, children: l
53
53
  d,
54
54
  c,
55
55
  p
56
- ]), u.isLoading ? /* @__PURE__ */ f(H, {}) : /* @__PURE__ */ f(s, {
56
+ ]), u.isLoading ? /* @__PURE__ */ f(U, {}) : /* @__PURE__ */ f(s, {
57
57
  flag: i,
58
58
  defaultValue: !0,
59
- fallback: /* @__PURE__ */ f(U, {
59
+ fallback: /* @__PURE__ */ f(W, {
60
60
  title: e,
61
61
  featureFlag: i
62
62
  }),
63
63
  children: p ? l : /* @__PURE__ */ f(t, { message: `You don't have permission to access ${e}.` })
64
64
  });
65
65
  }
66
- function G(e) {
67
- return /* @__PURE__ */ f(W, { ...e });
66
+ function K(e) {
67
+ return /* @__PURE__ */ f(G, { ...e });
68
68
  }
69
- function K() {
69
+ function q() {
70
70
  return /* @__PURE__ */ p(u, { children: [
71
71
  /* @__PURE__ */ f(l, {
72
72
  index: !0,
@@ -77,362 +77,375 @@ function K() {
77
77
  }),
78
78
  /* @__PURE__ */ f(l, {
79
79
  path: "plans",
80
- element: G({
80
+ element: K({
81
81
  title: "Plans",
82
82
  featureFlag: "billing.plans",
83
83
  permission: "canViewPlans",
84
84
  eventName: "billing.plan.viewed",
85
85
  children: /* @__PURE__ */ f(i, {
86
- fallback: /* @__PURE__ */ f(H, {}),
86
+ fallback: /* @__PURE__ */ f(U, {}),
87
87
  children: /* @__PURE__ */ f(m, {})
88
88
  })
89
89
  })
90
90
  }),
91
91
  /* @__PURE__ */ f(l, {
92
92
  path: "plans/new",
93
- element: G({
93
+ element: K({
94
94
  title: "Create plan",
95
95
  featureFlag: "billing.plans.manage",
96
96
  permission: "canManagePlans",
97
97
  eventName: "billing.plan.viewed",
98
98
  children: /* @__PURE__ */ f(i, {
99
- fallback: /* @__PURE__ */ f(H, {}),
99
+ fallback: /* @__PURE__ */ f(U, {}),
100
100
  children: /* @__PURE__ */ f(_, {})
101
101
  })
102
102
  })
103
103
  }),
104
104
  /* @__PURE__ */ f(l, {
105
105
  path: "plans/assign-free",
106
- element: G({
106
+ element: K({
107
107
  title: "Assign plan for free",
108
108
  featureFlag: "billing.plans.manage",
109
109
  permission: "canManagePlans",
110
110
  eventName: "billing.plan.viewed",
111
111
  children: /* @__PURE__ */ f(i, {
112
- fallback: /* @__PURE__ */ f(H, {}),
112
+ fallback: /* @__PURE__ */ f(U, {}),
113
113
  children: /* @__PURE__ */ f(v, {})
114
114
  })
115
115
  })
116
116
  }),
117
117
  /* @__PURE__ */ f(l, {
118
118
  path: "plans/:planId",
119
- element: G({
119
+ element: K({
120
120
  title: "Plan details",
121
121
  featureFlag: "billing.plans",
122
122
  permission: "canViewPlans",
123
123
  eventName: "billing.plan.viewed",
124
124
  children: /* @__PURE__ */ f(i, {
125
- fallback: /* @__PURE__ */ f(H, {}),
125
+ fallback: /* @__PURE__ */ f(U, {}),
126
126
  children: /* @__PURE__ */ f(h, {})
127
127
  })
128
128
  })
129
129
  }),
130
130
  /* @__PURE__ */ f(l, {
131
131
  path: "plans/:planId/edit",
132
- element: G({
132
+ element: K({
133
133
  title: "Edit plan",
134
134
  featureFlag: "billing.plans.manage",
135
135
  permission: "canManagePlans",
136
136
  eventName: "billing.plan.viewed",
137
137
  children: /* @__PURE__ */ f(i, {
138
- fallback: /* @__PURE__ */ f(H, {}),
138
+ fallback: /* @__PURE__ */ f(U, {}),
139
139
  children: /* @__PURE__ */ f(g, {})
140
140
  })
141
141
  })
142
142
  }),
143
143
  /* @__PURE__ */ f(l, {
144
144
  path: "addons",
145
- element: G({
145
+ element: K({
146
146
  title: "Addons",
147
147
  featureFlag: "billing.addons",
148
148
  permission: "canViewAddons",
149
149
  eventName: "billing.addon.viewed",
150
150
  children: /* @__PURE__ */ f(i, {
151
- fallback: /* @__PURE__ */ f(H, {}),
151
+ fallback: /* @__PURE__ */ f(U, {}),
152
152
  children: /* @__PURE__ */ f(y, {})
153
153
  })
154
154
  })
155
155
  }),
156
156
  /* @__PURE__ */ f(l, {
157
157
  path: "addons/new",
158
- element: G({
158
+ element: K({
159
159
  title: "Create addon",
160
160
  featureFlag: "billing.addons.manage",
161
161
  permission: "canManageAddons",
162
162
  eventName: "billing.addon.viewed",
163
163
  children: /* @__PURE__ */ f(i, {
164
- fallback: /* @__PURE__ */ f(H, {}),
164
+ fallback: /* @__PURE__ */ f(U, {}),
165
165
  children: /* @__PURE__ */ f(S, {})
166
166
  })
167
167
  })
168
168
  }),
169
169
  /* @__PURE__ */ f(l, {
170
170
  path: "addons/:addonId",
171
- element: G({
171
+ element: K({
172
172
  title: "Addon details",
173
173
  featureFlag: "billing.addons",
174
174
  permission: "canViewAddons",
175
175
  eventName: "billing.addon.viewed",
176
176
  children: /* @__PURE__ */ f(i, {
177
- fallback: /* @__PURE__ */ f(H, {}),
177
+ fallback: /* @__PURE__ */ f(U, {}),
178
178
  children: /* @__PURE__ */ f(b, {})
179
179
  })
180
180
  })
181
181
  }),
182
182
  /* @__PURE__ */ f(l, {
183
183
  path: "addons/:addonId/edit",
184
- element: G({
184
+ element: K({
185
185
  title: "Edit addon",
186
186
  featureFlag: "billing.addons.manage",
187
187
  permission: "canManageAddons",
188
188
  eventName: "billing.addon.viewed",
189
189
  children: /* @__PURE__ */ f(i, {
190
- fallback: /* @__PURE__ */ f(H, {}),
190
+ fallback: /* @__PURE__ */ f(U, {}),
191
191
  children: /* @__PURE__ */ f(x, {})
192
192
  })
193
193
  })
194
194
  }),
195
195
  /* @__PURE__ */ f(l, {
196
196
  path: "quotas",
197
- element: G({
197
+ element: K({
198
198
  title: "Quota templates",
199
199
  featureFlag: "billing.quotas",
200
200
  permission: "canViewQuotas",
201
201
  eventName: "billing.quota.viewed",
202
202
  children: /* @__PURE__ */ f(i, {
203
- fallback: /* @__PURE__ */ f(H, {}),
203
+ fallback: /* @__PURE__ */ f(U, {}),
204
204
  children: /* @__PURE__ */ f(C, {})
205
205
  })
206
206
  })
207
207
  }),
208
208
  /* @__PURE__ */ f(l, {
209
209
  path: "quotas/new",
210
- element: G({
210
+ element: K({
211
211
  title: "Create quota template",
212
212
  featureFlag: "billing.quotas.manage",
213
213
  permission: "canManageQuotas",
214
214
  eventName: "billing.quota.viewed",
215
215
  children: /* @__PURE__ */ f(i, {
216
- fallback: /* @__PURE__ */ f(H, {}),
216
+ fallback: /* @__PURE__ */ f(U, {}),
217
217
  children: /* @__PURE__ */ f(T, {})
218
218
  })
219
219
  })
220
220
  }),
221
221
  /* @__PURE__ */ f(l, {
222
222
  path: "quotas/:quotaId",
223
- element: G({
223
+ element: K({
224
224
  title: "Quota template details",
225
225
  featureFlag: "billing.quotas",
226
226
  permission: "canViewQuotas",
227
227
  eventName: "billing.quota.viewed",
228
228
  children: /* @__PURE__ */ f(i, {
229
- fallback: /* @__PURE__ */ f(H, {}),
229
+ fallback: /* @__PURE__ */ f(U, {}),
230
230
  children: /* @__PURE__ */ f(w, {})
231
231
  })
232
232
  })
233
233
  }),
234
234
  /* @__PURE__ */ f(l, {
235
235
  path: "quotas/:quotaId/edit",
236
- element: G({
236
+ element: K({
237
237
  title: "Edit quota template",
238
238
  featureFlag: "billing.quotas.manage",
239
239
  permission: "canManageQuotas",
240
240
  eventName: "billing.quota.viewed",
241
241
  children: /* @__PURE__ */ f(i, {
242
- fallback: /* @__PURE__ */ f(H, {}),
242
+ fallback: /* @__PURE__ */ f(U, {}),
243
243
  children: /* @__PURE__ */ f(E, {})
244
244
  })
245
245
  })
246
246
  }),
247
247
  /* @__PURE__ */ f(l, {
248
248
  path: "quotas/assign-free",
249
- element: G({
249
+ element: K({
250
250
  title: "Assign quota for free",
251
251
  featureFlag: "billing.quotas.manage",
252
252
  permission: "canManageQuotas",
253
253
  eventName: "billing.quota.viewed",
254
254
  children: /* @__PURE__ */ f(i, {
255
- fallback: /* @__PURE__ */ f(H, {}),
255
+ fallback: /* @__PURE__ */ f(U, {}),
256
256
  children: /* @__PURE__ */ f(D, {})
257
257
  })
258
258
  })
259
259
  }),
260
260
  /* @__PURE__ */ f(l, {
261
261
  path: "coupons",
262
- element: G({
262
+ element: K({
263
263
  title: "Coupons",
264
264
  featureFlag: "billing.discounts",
265
265
  permission: "canManageDiscounts",
266
266
  eventName: "billing.transaction.viewed",
267
267
  children: /* @__PURE__ */ f(i, {
268
- fallback: /* @__PURE__ */ f(H, {}),
268
+ fallback: /* @__PURE__ */ f(U, {}),
269
269
  children: /* @__PURE__ */ f(O, {})
270
270
  })
271
271
  })
272
272
  }),
273
273
  /* @__PURE__ */ f(l, {
274
274
  path: "coupons/create",
275
- element: G({
275
+ element: K({
276
276
  title: "Create coupon",
277
277
  featureFlag: "billing.discounts",
278
278
  permission: "canManageDiscounts",
279
279
  eventName: "billing.transaction.viewed",
280
280
  children: /* @__PURE__ */ f(i, {
281
- fallback: /* @__PURE__ */ f(H, {}),
281
+ fallback: /* @__PURE__ */ f(U, {}),
282
282
  children: /* @__PURE__ */ f(k, {})
283
283
  })
284
284
  })
285
285
  }),
286
286
  /* @__PURE__ */ f(l, {
287
287
  path: "coupons/:id",
288
- element: G({
288
+ element: K({
289
289
  title: "Coupon details",
290
290
  featureFlag: "billing.discounts",
291
291
  permission: "canManageDiscounts",
292
292
  eventName: "billing.transaction.viewed",
293
293
  children: /* @__PURE__ */ f(i, {
294
- fallback: /* @__PURE__ */ f(H, {}),
294
+ fallback: /* @__PURE__ */ f(U, {}),
295
295
  children: /* @__PURE__ */ f(j, {})
296
296
  })
297
297
  })
298
298
  }),
299
299
  /* @__PURE__ */ f(l, {
300
300
  path: "coupons/:id/edit",
301
- element: G({
301
+ element: K({
302
302
  title: "Edit coupon",
303
303
  featureFlag: "billing.discounts",
304
304
  permission: "canManageDiscounts",
305
305
  eventName: "billing.transaction.viewed",
306
306
  children: /* @__PURE__ */ f(i, {
307
- fallback: /* @__PURE__ */ f(H, {}),
307
+ fallback: /* @__PURE__ */ f(U, {}),
308
308
  children: /* @__PURE__ */ f(A, {})
309
309
  })
310
310
  })
311
311
  }),
312
312
  /* @__PURE__ */ f(l, {
313
313
  path: "promotions",
314
- element: G({
314
+ element: K({
315
315
  title: "Promotions",
316
316
  featureFlag: "billing.plans.manage",
317
317
  permission: "canManagePlans",
318
318
  eventName: "billing.plan.viewed",
319
319
  children: /* @__PURE__ */ f(i, {
320
- fallback: /* @__PURE__ */ f(H, {}),
320
+ fallback: /* @__PURE__ */ f(U, {}),
321
321
  children: /* @__PURE__ */ f(M, {})
322
322
  })
323
323
  })
324
324
  }),
325
325
  /* @__PURE__ */ f(l, {
326
326
  path: "promotions/create",
327
- element: G({
327
+ element: K({
328
328
  title: "Create Promotion",
329
329
  featureFlag: "billing.plans.manage",
330
330
  permission: "canManagePlans",
331
331
  eventName: "billing.plan.viewed",
332
332
  children: /* @__PURE__ */ f(i, {
333
- fallback: /* @__PURE__ */ f(H, {}),
333
+ fallback: /* @__PURE__ */ f(U, {}),
334
334
  children: /* @__PURE__ */ f(N, {})
335
335
  })
336
336
  })
337
337
  }),
338
338
  /* @__PURE__ */ f(l, {
339
339
  path: "discounts",
340
- element: G({
340
+ element: K({
341
341
  title: "Discounts",
342
342
  featureFlag: "billing.discounts",
343
343
  permission: "canManageDiscounts",
344
344
  eventName: "billing.transaction.viewed",
345
345
  children: /* @__PURE__ */ f(i, {
346
- fallback: /* @__PURE__ */ f(H, {}),
346
+ fallback: /* @__PURE__ */ f(U, {}),
347
347
  children: /* @__PURE__ */ f(P, {})
348
348
  })
349
349
  })
350
350
  }),
351
351
  /* @__PURE__ */ f(l, {
352
352
  path: "credits",
353
- element: G({
353
+ element: K({
354
354
  title: "Credit grants",
355
355
  featureFlag: "billing.credits.grants",
356
356
  permission: "canGrantCredits",
357
357
  eventName: "billing.credit.viewed",
358
358
  children: /* @__PURE__ */ f(i, {
359
- fallback: /* @__PURE__ */ f(H, {}),
360
- children: /* @__PURE__ */ f(L, {})
359
+ fallback: /* @__PURE__ */ f(U, {}),
360
+ children: /* @__PURE__ */ f(R, {})
361
361
  })
362
362
  })
363
363
  }),
364
364
  /* @__PURE__ */ f(l, {
365
365
  path: "refunds",
366
- element: G({
366
+ element: K({
367
367
  title: "Refunds",
368
368
  featureFlag: "billing.refunds",
369
369
  permission: "canProcessRefund",
370
370
  eventName: "billing.transaction.viewed",
371
371
  children: /* @__PURE__ */ f(i, {
372
- fallback: /* @__PURE__ */ f(H, {}),
372
+ fallback: /* @__PURE__ */ f(U, {}),
373
373
  children: /* @__PURE__ */ f(F, {})
374
374
  })
375
375
  })
376
376
  }),
377
377
  /* @__PURE__ */ f(l, {
378
378
  path: "webhook-logs",
379
- element: G({
379
+ element: K({
380
380
  title: "Billing webhook logs",
381
381
  featureFlag: "billing.webhook-logs",
382
382
  permission: "isBillingAdmin",
383
383
  eventName: "billing.transaction.viewed",
384
384
  children: /* @__PURE__ */ f(i, {
385
- fallback: /* @__PURE__ */ f(H, {}),
385
+ fallback: /* @__PURE__ */ f(U, {}),
386
386
  children: /* @__PURE__ */ f(I, {})
387
387
  })
388
388
  })
389
389
  }),
390
+ /* @__PURE__ */ f(l, {
391
+ path: "order-callback-logs",
392
+ element: K({
393
+ title: "Order callback logs",
394
+ featureFlag: "billing.order-callback-logs",
395
+ permission: "isBillingAdmin",
396
+ eventName: "billing.transaction.viewed",
397
+ children: /* @__PURE__ */ f(i, {
398
+ fallback: /* @__PURE__ */ f(U, {}),
399
+ children: /* @__PURE__ */ f(L, {})
400
+ })
401
+ })
402
+ }),
390
403
  /* @__PURE__ */ f(l, {
391
404
  path: "analytics",
392
- element: G({
405
+ element: K({
393
406
  title: "Billing analytics",
394
407
  featureFlag: "billing.analytics",
395
408
  permission: "canViewAnalytics",
396
409
  eventName: "billing.usage.viewed",
397
410
  children: /* @__PURE__ */ f(i, {
398
- fallback: /* @__PURE__ */ f(H, {}),
399
- children: /* @__PURE__ */ f(R, {})
411
+ fallback: /* @__PURE__ */ f(U, {}),
412
+ children: /* @__PURE__ */ f(z, {})
400
413
  })
401
414
  })
402
415
  }),
403
416
  /* @__PURE__ */ f(l, {
404
417
  path: "developer-revenue",
405
- element: G({
418
+ element: K({
406
419
  title: "Developer revenue",
407
420
  featureFlag: "billing.payouts.admin",
408
421
  permission: "isBillingAdmin",
409
422
  eventName: "billing.payout.viewed",
410
423
  children: /* @__PURE__ */ f(i, {
411
- fallback: /* @__PURE__ */ f(H, {}),
412
- children: /* @__PURE__ */ f(z, {})
424
+ fallback: /* @__PURE__ */ f(U, {}),
425
+ children: /* @__PURE__ */ f(B, {})
413
426
  })
414
427
  })
415
428
  }),
416
429
  /* @__PURE__ */ f(l, {
417
430
  path: "payouts",
418
- element: G({
431
+ element: K({
419
432
  title: "Payout administration",
420
433
  featureFlag: "billing.payouts.admin",
421
434
  permission: "isBillingAdmin",
422
435
  eventName: "billing.payout.viewed",
423
436
  children: /* @__PURE__ */ f(i, {
424
- fallback: /* @__PURE__ */ f(H, {}),
425
- children: /* @__PURE__ */ f(B, {})
437
+ fallback: /* @__PURE__ */ f(U, {}),
438
+ children: /* @__PURE__ */ f(V, {})
426
439
  })
427
440
  })
428
441
  }),
429
442
  /* @__PURE__ */ f(l, {
430
443
  path: "*",
431
- element: /* @__PURE__ */ f(V, {})
444
+ element: /* @__PURE__ */ f(H, {})
432
445
  })
433
446
  ] });
434
447
  }
435
448
  //#endregion
436
- export { K as BillingAdminRoutes };
449
+ export { q as BillingAdminRoutes };
437
450
 
438
451
  //# 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';\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);\nconst QuotaAssignFreePage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaAssignFreePage }))\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 - Billing webhook logs\nconst BillingWebhookLogsPage = lazy(() =>\n import('./modules/billing').then((m) => ({ default: m.BillingWebhookLogsPage }))\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 DeveloperRevenueAdminPage = lazy(() =>\n import('./modules/earnings').then((m) => ({ default: m.DeveloperRevenueAdminPage }))\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-action-primary-bg 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-card border border-border-seam bg-bg-surface p-6 text-center shadow-[var(--shadow-elevation-1)]\">\n <h2 className=\"text-base font-semibold text-text-primary\">{title} is not enabled</h2>\n <p className=\"mt-2 text-sm text-text-secondary\">\n Ask an administrator to enable the{' '}\n <span className=\"font-mono text-xs text-text-secondary bg-bg-sunken/60 rounded px-1.5 py-0.5\">\n {featureFlag}\n </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 <Route\n path=\"quotas/assign-free\"\n element={adminPage({\n title: 'Assign quota for free',\n featureFlag: 'billing.quotas.manage',\n permission: 'canManageQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaAssignFreePage />\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 {/* Billing webhook logs */}\n <Route\n path=\"webhook-logs\"\n element={adminPage({\n title: 'Billing webhook logs',\n featureFlag: 'billing.webhook-logs',\n permission: 'isBillingAdmin',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <BillingWebhookLogsPage />\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=\"developer-revenue\"\n element={adminPage({\n title: 'Developer revenue',\n featureFlag: 'billing.payouts.admin',\n permission: 'isBillingAdmin',\n eventName: 'billing.payout.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <DeveloperRevenueAdminPage />\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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"}
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';\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);\nconst QuotaAssignFreePage = lazy(() =>\n import('./modules/quota').then((m) => ({ default: m.QuotaAssignFreePage }))\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 - Billing webhook logs\nconst BillingWebhookLogsPage = lazy(() =>\n import('./modules/billing').then((m) => ({ default: m.BillingWebhookLogsPage }))\n);\n\n// Lazy loaded pages - Order callback logs\nconst OrderCallbackLogsPage = lazy(() =>\n import('./modules/billing').then((m) => ({ default: m.OrderCallbackLogsPage }))\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 DeveloperRevenueAdminPage = lazy(() =>\n import('./modules/earnings').then((m) => ({ default: m.DeveloperRevenueAdminPage }))\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-action-primary-bg 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-card border border-border-seam bg-bg-surface p-6 text-center shadow-[var(--shadow-elevation-1)]\">\n <h2 className=\"text-base font-semibold text-text-primary\">{title} is not enabled</h2>\n <p className=\"mt-2 text-sm text-text-secondary\">\n Ask an administrator to enable the{' '}\n <span className=\"font-mono text-xs text-text-secondary bg-bg-sunken/60 rounded px-1.5 py-0.5\">\n {featureFlag}\n </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 <Route\n path=\"quotas/assign-free\"\n element={adminPage({\n title: 'Assign quota for free',\n featureFlag: 'billing.quotas.manage',\n permission: 'canManageQuotas',\n eventName: 'billing.quota.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <QuotaAssignFreePage />\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 {/* Billing webhook logs */}\n <Route\n path=\"webhook-logs\"\n element={adminPage({\n title: 'Billing webhook logs',\n featureFlag: 'billing.webhook-logs',\n permission: 'isBillingAdmin',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <BillingWebhookLogsPage />\n </Suspense>\n ),\n })}\n />\n\n {/* Order callback logs */}\n <Route\n path=\"order-callback-logs\"\n element={adminPage({\n title: 'Order callback logs',\n featureFlag: 'billing.order-callback-logs',\n permission: 'isBillingAdmin',\n eventName: 'billing.transaction.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <OrderCallbackLogsPage />\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=\"developer-revenue\"\n element={adminPage({\n title: 'Developer revenue',\n featureFlag: 'billing.payouts.admin',\n permission: 'isBillingAdmin',\n eventName: 'billing.payout.viewed',\n children: (\n <Suspense fallback={<PageLoader />}>\n <DeveloperRevenueAdminPage />\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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"}