@burdenoff/microfe-devportal 2026.830.1 → 2026.831.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 (104) hide show
  1. package/dist/devportal/AdminDevportalRoot.d.ts.map +1 -1
  2. package/dist/devportal/AdminDevportalRoot.js +16 -19
  3. package/dist/devportal/AdminDevportalRoot.js.map +1 -1
  4. package/dist/devportal/DevportalRoot.d.ts.map +1 -1
  5. package/dist/devportal/DevportalRoot.js +36 -39
  6. package/dist/devportal/DevportalRoot.js.map +1 -1
  7. package/dist/devportal/components/AppCard.js +41 -41
  8. package/dist/devportal/components/ConfirmDialog.d.ts.map +1 -1
  9. package/dist/devportal/components/ConfirmDialog.js +19 -22
  10. package/dist/devportal/components/ConfirmDialog.js.map +1 -1
  11. package/dist/devportal/components/DataTable.d.ts.map +1 -1
  12. package/dist/devportal/components/DataTable.js +31 -34
  13. package/dist/devportal/components/DataTable.js.map +1 -1
  14. package/dist/devportal/components/FeatureFlaggedRoute.js +8 -8
  15. package/dist/devportal/components/FormField.d.ts.map +1 -1
  16. package/dist/devportal/components/FormField.js +26 -32
  17. package/dist/devportal/components/FormField.js.map +1 -1
  18. package/dist/devportal/components/GrantDelegationModal.js +64 -64
  19. package/dist/devportal/components/GrantDelegationModal.js.map +1 -1
  20. package/dist/devportal/components/LoadingState.d.ts.map +1 -1
  21. package/dist/devportal/components/LoadingState.js +5 -8
  22. package/dist/devportal/components/LoadingState.js.map +1 -1
  23. package/dist/devportal/components/PageLayout.d.ts.map +1 -1
  24. package/dist/devportal/components/PageLayout.js +10 -13
  25. package/dist/devportal/components/PageLayout.js.map +1 -1
  26. package/dist/devportal/components/PermissionGuard.d.ts.map +1 -1
  27. package/dist/devportal/components/PermissionGuard.js +11 -14
  28. package/dist/devportal/components/PermissionGuard.js.map +1 -1
  29. package/dist/devportal/components/SecretDisplay.d.ts.map +1 -1
  30. package/dist/devportal/components/SecretDisplay.js +24 -30
  31. package/dist/devportal/components/SecretDisplay.js.map +1 -1
  32. package/dist/devportal/components/SectionNav.d.ts.map +1 -1
  33. package/dist/devportal/components/SectionNav.js +24 -27
  34. package/dist/devportal/components/SectionNav.js.map +1 -1
  35. package/dist/devportal/components/StatusBadge.d.ts.map +1 -1
  36. package/dist/devportal/components/StatusBadge.js +24 -33
  37. package/dist/devportal/components/StatusBadge.js.map +1 -1
  38. package/dist/devportal/index.d.ts +1 -0
  39. package/dist/devportal/index.d.ts.map +1 -1
  40. package/dist/devportal/index.js +1 -0
  41. package/dist/devportal/pages/AdminReviewPage.js +172 -172
  42. package/dist/devportal/pages/AnalyticsDashboardPage.js +43 -43
  43. package/dist/devportal/pages/AnalyticsDashboardPage.js.map +1 -1
  44. package/dist/devportal/pages/ApiKeysPage.js +119 -119
  45. package/dist/devportal/pages/ApiKeysPage.js.map +1 -1
  46. package/dist/devportal/pages/AppLogsPage.js +45 -45
  47. package/dist/devportal/pages/ApplicationDetailPage.js +607 -607
  48. package/dist/devportal/pages/ApplicationVersionsPage.js +13 -13
  49. package/dist/devportal/pages/ApplicationsPage.d.ts.map +1 -1
  50. package/dist/devportal/pages/ApplicationsPage.js +104 -101
  51. package/dist/devportal/pages/ApplicationsPage.js.map +1 -1
  52. package/dist/devportal/pages/CreateApiKeyPage.js +45 -45
  53. package/dist/devportal/pages/CreateApplicationPage.js +38 -38
  54. package/dist/devportal/pages/CreateApplicationPage.js.map +1 -1
  55. package/dist/devportal/pages/CreateOAuthClientPage.js +52 -52
  56. package/dist/devportal/pages/CreateOrganizationPage.js +26 -26
  57. package/dist/devportal/pages/CreateWebhookPage.d.ts.map +1 -1
  58. package/dist/devportal/pages/CreateWebhookPage.js +48 -48
  59. package/dist/devportal/pages/CreateWebhookPage.js.map +1 -1
  60. package/dist/devportal/pages/DashboardPage.d.ts.map +1 -1
  61. package/dist/devportal/pages/DashboardPage.js +66 -72
  62. package/dist/devportal/pages/DashboardPage.js.map +1 -1
  63. package/dist/devportal/pages/DelegationsPage.js +174 -174
  64. package/dist/devportal/pages/DocumentationPage.js +93 -93
  65. package/dist/devportal/pages/EditApplicationPage.js +14 -14
  66. package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
  67. package/dist/devportal/pages/ListingPreviewPage.js +76 -76
  68. package/dist/devportal/pages/OAuthClientDetailPage.js +75 -75
  69. package/dist/devportal/pages/OAuthClientDetailPage.js.map +1 -1
  70. package/dist/devportal/pages/OAuthClientsPage.js +64 -64
  71. package/dist/devportal/pages/OrganizationDetailPage.js +189 -189
  72. package/dist/devportal/pages/OrganizationDetailPage.js.map +1 -1
  73. package/dist/devportal/pages/OrganizationMembersPage.js +10 -10
  74. package/dist/devportal/pages/OrganizationsPage.d.ts.map +1 -1
  75. package/dist/devportal/pages/OrganizationsPage.js +163 -154
  76. package/dist/devportal/pages/OrganizationsPage.js.map +1 -1
  77. package/dist/devportal/pages/PublishPage.js +104 -104
  78. package/dist/devportal/pages/PublishPage.js.map +1 -1
  79. package/dist/devportal/pages/PublisherProfilePage.js +55 -55
  80. package/dist/devportal/pages/ResourcesPage.js +60 -60
  81. package/dist/devportal/pages/RevenueDashboardPage.js +60 -60
  82. package/dist/devportal/pages/RevenueDashboardPage.js.map +1 -1
  83. package/dist/devportal/pages/SellerDashboardPage.js +83 -83
  84. package/dist/devportal/pages/SellerItemsPage.js +163 -163
  85. package/dist/devportal/pages/SellerItemsPage.js.map +1 -1
  86. package/dist/devportal/pages/SellerOrdersPage.js +63 -63
  87. package/dist/devportal/pages/SettingsPage.js +21 -21
  88. package/dist/devportal/pages/SetupPage.js +183 -183
  89. package/dist/devportal/pages/SetupPage.js.map +1 -1
  90. package/dist/devportal/pages/StoreSubmissionPage.js +5 -5
  91. package/dist/devportal/pages/WebhookDetailPage.js +123 -123
  92. package/dist/devportal/pages/WebhookDetailPage.js.map +1 -1
  93. package/dist/devportal/pages/WebhooksPage.js +118 -118
  94. package/dist/devportal/pages/WebhooksPage.js.map +1 -1
  95. package/dist/devportal/utils/i18n.d.ts +9 -2
  96. package/dist/devportal/utils/i18n.d.ts.map +1 -1
  97. package/dist/devportal/utils/i18n.js +13 -10
  98. package/dist/devportal/utils/i18n.js.map +1 -1
  99. package/dist/index.js +2 -1
  100. package/dist/translations/en.d.ts +1251 -0
  101. package/dist/translations/en.d.ts.map +1 -0
  102. package/dist/translations/en.js +1235 -0
  103. package/dist/translations/en.js.map +1 -0
  104. package/package.json +2 -2
@@ -9,13 +9,13 @@ import { PermissionGuard as f } from "../components/PermissionGuard.js";
9
9
  import "../components/index.js";
10
10
  import "../hooks/index.js";
11
11
  import { useState as p } from "react";
12
- import { useI18n as m } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
13
- import { Plus as h, Save as g, Trash2 as _, X as v } from "lucide-react";
14
- import { jsx as y, jsxs as b } from "react/jsx-runtime";
12
+ import { Plus as m, Save as h, Trash2 as g, X as _ } from "lucide-react";
13
+ import { jsx as v, jsxs as y } from "react/jsx-runtime";
14
+ import { useI18n as b } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
15
15
  import { OptionalFields as x } from "@burdenoff/fe-libs/ui";
16
16
  //#region src/devportal/pages/CreateOAuthClientPage.tsx
17
17
  var S = () => {
18
- let { navigate: S, basePath: C } = e(), { t: w } = m(), T = (e, t) => {
18
+ let { navigate: S, basePath: C } = e(), { t: w } = b(), T = (e, t) => {
19
19
  let n = w(e);
20
20
  return n === e ? t : n;
21
21
  }, [E, D] = p(""), [O, k] = p(""), [A, j] = p("CONFIDENTIAL"), [M, N] = p([]), [P, F] = p(""), [I, L] = p([]), [R, z] = p(""), [B, V] = p(null), [H, U] = p(null), [W, { loading: G, error: K }] = n(), q = (e) => {
@@ -31,47 +31,47 @@ var S = () => {
31
31
  }, Z = (e) => {
32
32
  L(I.filter((t) => t !== e));
33
33
  };
34
- return B ? /* @__PURE__ */ y(i, {
34
+ return B ? /* @__PURE__ */ v(i, {
35
35
  title: T("devportal.appCreated", "App Created!"),
36
36
  description: T("devportal.appCreatedDescription", "Save the client secret below. It will not be shown again."),
37
37
  backLink: "/oauth",
38
38
  backLabel: T("devportal.backToOAuthApps", "Back to OAuth Apps"),
39
- children: /* @__PURE__ */ b("div", {
39
+ children: /* @__PURE__ */ y("div", {
40
40
  className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-6",
41
41
  children: [
42
- /* @__PURE__ */ y("h3", {
42
+ /* @__PURE__ */ v("h3", {
43
43
  className: "font-medium text-status-success-text",
44
44
  children: T("devportal.oauthAppCreated", "Your OAuth App has been created")
45
45
  }),
46
- /* @__PURE__ */ b("div", {
46
+ /* @__PURE__ */ y("div", {
47
47
  className: "mt-4 space-y-3",
48
- children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("label", {
48
+ children: [/* @__PURE__ */ y("div", { children: [/* @__PURE__ */ v("label", {
49
49
  className: "text-xs font-medium text-status-success-text",
50
50
  children: T("devportal.clientSecret", "Client Secret")
51
- }), /* @__PURE__ */ b("div", {
51
+ }), /* @__PURE__ */ y("div", {
52
52
  className: "mt-1 flex items-center gap-2",
53
- children: [/* @__PURE__ */ y("code", {
53
+ children: [/* @__PURE__ */ v("code", {
54
54
  className: "flex-1 rounded border bg-bg-surface px-3 py-2 text-sm font-mono break-all",
55
55
  children: B
56
- }), /* @__PURE__ */ y("button", {
56
+ }), /* @__PURE__ */ v("button", {
57
57
  onClick: async () => {
58
58
  s("light"), c(await o(B) ? "success" : "error");
59
59
  },
60
60
  className: "rounded bg-status-success-bg-subtle px-3 py-2 text-sm font-medium text-status-success-text hover:bg-status-success-bg-subtle transition-colors",
61
61
  children: T("devportal.copy", "Copy")
62
62
  })]
63
- })] }), /* @__PURE__ */ y("p", {
63
+ })] }), /* @__PURE__ */ v("p", {
64
64
  className: "text-sm text-status-success-text",
65
65
  children: T("devportal.storeSecretSecurely", "Store this secret securely. You will not be able to see it again.")
66
66
  })]
67
67
  }),
68
- /* @__PURE__ */ b("div", {
68
+ /* @__PURE__ */ y("div", {
69
69
  className: "mt-6 flex gap-3",
70
- children: [H && /* @__PURE__ */ y("button", {
70
+ children: [H && /* @__PURE__ */ v("button", {
71
71
  onClick: () => q(`/oauth/${H}`),
72
72
  className: "rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
73
73
  children: T("devportal.viewAppDetails", "View App Details")
74
- }), /* @__PURE__ */ y("button", {
74
+ }), /* @__PURE__ */ v("button", {
75
75
  onClick: () => q("/oauth"),
76
76
  className: "rounded-md border px-4 py-2 text-sm font-medium hover:bg-bg-sunken transition-colors",
77
77
  children: T("devportal.backToOAuthApps", "Back to OAuth Apps")
@@ -79,15 +79,15 @@ var S = () => {
79
79
  })
80
80
  ]
81
81
  })
82
- }) : /* @__PURE__ */ y(f, {
82
+ }) : /* @__PURE__ */ v(f, {
83
83
  authOnly: !0,
84
- children: /* @__PURE__ */ y(i, {
84
+ children: /* @__PURE__ */ v(i, {
85
85
  title: T("devportal.createOAuthApp", "Create OAuth App"),
86
86
  description: T("devportal.createOAuthAppDescription", "Register a new OAuth application for authentication"),
87
87
  purpose: T("devportal.createOAuthAppPurpose", "Register an OAuth app so an external service can let users sign in with their account and call the API on their behalf. Set its redirect URIs and request only the scopes it needs — you will receive a client ID and secret to finish the integration."),
88
88
  backLink: "/oauth",
89
89
  backLabel: T("devportal.backToOAuthApps", "Back to OAuth Apps"),
90
- children: /* @__PURE__ */ b("form", {
90
+ children: /* @__PURE__ */ y("form", {
91
91
  onSubmit: async (e) => {
92
92
  if (e.preventDefault(), E.trim()) try {
93
93
  let e = await W({ variables: { input: {
@@ -102,30 +102,30 @@ var S = () => {
102
102
  },
103
103
  className: "space-y-6 max-w-2xl",
104
104
  children: [
105
- K && /* @__PURE__ */ y("div", {
105
+ K && /* @__PURE__ */ v("div", {
106
106
  className: "rounded-lg border border-status-error-border/50 bg-status-error-bg/10 p-4",
107
- children: /* @__PURE__ */ y("p", {
107
+ children: /* @__PURE__ */ v("p", {
108
108
  className: "text-sm text-status-error-text",
109
109
  children: r(K)
110
110
  })
111
111
  }),
112
- /* @__PURE__ */ b(a, {
112
+ /* @__PURE__ */ y(a, {
113
113
  title: T("devportal.basicInformation", "Basic Information"),
114
114
  children: [
115
- /* @__PURE__ */ y(l, {
115
+ /* @__PURE__ */ v(l, {
116
116
  label: T("devportal.appName", "App Name"),
117
117
  value: E,
118
118
  onChange: (e) => D(e.target.value),
119
119
  placeholder: T("devportal.myOAuthAppPlaceholder", "My OAuth App"),
120
120
  required: !0
121
121
  }),
122
- /* @__PURE__ */ y(d, {
122
+ /* @__PURE__ */ v(d, {
123
123
  label: T("devportal.description", "Description"),
124
124
  value: O,
125
125
  onChange: (e) => k(e.target.value),
126
126
  placeholder: T("devportal.appDescriptionPlaceholder", "Brief description of what this app does...")
127
127
  }),
128
- /* @__PURE__ */ y(u, {
128
+ /* @__PURE__ */ v(u, {
129
129
  label: T("devportal.appType", "App Type"),
130
130
  value: A,
131
131
  onChange: (e) => j(e.target.value),
@@ -154,16 +154,16 @@ var S = () => {
154
154
  })
155
155
  ]
156
156
  }),
157
- /* @__PURE__ */ b(x, {
157
+ /* @__PURE__ */ y(x, {
158
158
  title: T("devportal.advancedOAuthSettings", "Advanced settings"),
159
159
  description: T("devportal.advancedOAuthSettingsDescription", "Advanced grant types, PKCE-required toggles, scope tuning, and redirect URIs."),
160
- children: [/* @__PURE__ */ y(a, {
160
+ children: [/* @__PURE__ */ v(a, {
161
161
  title: T("devportal.scopes", "Scopes"),
162
- children: /* @__PURE__ */ b("div", {
162
+ children: /* @__PURE__ */ y("div", {
163
163
  className: "space-y-3",
164
- children: [/* @__PURE__ */ b("div", {
164
+ children: [/* @__PURE__ */ y("div", {
165
165
  className: "flex items-center gap-2",
166
- children: [/* @__PURE__ */ y("input", {
166
+ children: [/* @__PURE__ */ v("input", {
167
167
  type: "text",
168
168
  value: P,
169
169
  onChange: (e) => F(e.target.value),
@@ -172,32 +172,32 @@ var S = () => {
172
172
  },
173
173
  placeholder: "e.g. workspace:read",
174
174
  className: "flex-1 rounded-md border bg-bg-surface px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary"
175
- }), /* @__PURE__ */ y("button", {
175
+ }), /* @__PURE__ */ v("button", {
176
176
  type: "button",
177
177
  onClick: J,
178
178
  className: "rounded-md bg-action-primary-bg/10 p-2 text-primary hover:bg-action-primary-bg/20 transition-colors",
179
- children: /* @__PURE__ */ y(h, { size: 16 })
179
+ children: /* @__PURE__ */ v(m, { size: 16 })
180
180
  })]
181
- }), M.length > 0 && /* @__PURE__ */ y("div", {
181
+ }), M.length > 0 && /* @__PURE__ */ v("div", {
182
182
  className: "flex flex-wrap gap-2",
183
- children: M.map((e) => /* @__PURE__ */ b("span", {
183
+ children: M.map((e) => /* @__PURE__ */ y("span", {
184
184
  className: "inline-flex items-center gap-1 rounded-full bg-action-primary-bg/10 px-3 py-1 text-xs font-medium text-primary",
185
- children: [e, /* @__PURE__ */ y("button", {
185
+ children: [e, /* @__PURE__ */ v("button", {
186
186
  type: "button",
187
187
  onClick: () => Y(e),
188
188
  className: "hover:text-status-error-text",
189
- children: /* @__PURE__ */ y(v, { size: 12 })
189
+ children: /* @__PURE__ */ v(_, { size: 12 })
190
190
  })]
191
191
  }, e))
192
192
  })]
193
193
  })
194
- }), /* @__PURE__ */ y(a, {
194
+ }), /* @__PURE__ */ v(a, {
195
195
  title: T("devportal.redirectUris", "Redirect URIs"),
196
- children: /* @__PURE__ */ b("div", {
196
+ children: /* @__PURE__ */ y("div", {
197
197
  className: "space-y-3",
198
- children: [/* @__PURE__ */ b("div", {
198
+ children: [/* @__PURE__ */ y("div", {
199
199
  className: "flex items-center gap-2",
200
- children: [/* @__PURE__ */ y("input", {
200
+ children: [/* @__PURE__ */ v("input", {
201
201
  type: "url",
202
202
  value: R,
203
203
  onChange: (e) => z(e.target.value),
@@ -206,42 +206,42 @@ var S = () => {
206
206
  },
207
207
  placeholder: "https://example.com/callback",
208
208
  className: "flex-1 rounded-md border bg-bg-surface px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-primary"
209
- }), /* @__PURE__ */ y("button", {
209
+ }), /* @__PURE__ */ v("button", {
210
210
  type: "button",
211
211
  onClick: X,
212
212
  className: "rounded-md bg-action-primary-bg/10 p-2 text-primary hover:bg-action-primary-bg/20 transition-colors",
213
- children: /* @__PURE__ */ y(h, { size: 16 })
213
+ children: /* @__PURE__ */ v(m, { size: 16 })
214
214
  })]
215
- }), I.length > 0 && /* @__PURE__ */ y("div", {
215
+ }), I.length > 0 && /* @__PURE__ */ v("div", {
216
216
  className: "space-y-2",
217
- children: I.map((e) => /* @__PURE__ */ b("div", {
217
+ children: I.map((e) => /* @__PURE__ */ y("div", {
218
218
  className: "flex items-center gap-2",
219
- children: [/* @__PURE__ */ y("code", {
219
+ children: [/* @__PURE__ */ v("code", {
220
220
  className: "flex-1 rounded bg-bg-sunken px-3 py-1.5 text-sm font-mono",
221
221
  children: e
222
- }), /* @__PURE__ */ y("button", {
222
+ }), /* @__PURE__ */ v("button", {
223
223
  type: "button",
224
224
  onClick: () => Z(e),
225
225
  className: "rounded p-1 text-text-secondary hover:text-status-error-text transition-colors",
226
- children: /* @__PURE__ */ y(_, { size: 14 })
226
+ children: /* @__PURE__ */ v(g, { size: 14 })
227
227
  })]
228
228
  }, e))
229
229
  })]
230
230
  })
231
231
  })]
232
232
  }),
233
- /* @__PURE__ */ b("div", {
233
+ /* @__PURE__ */ y("div", {
234
234
  className: "flex items-center gap-3 pt-4 border-t",
235
- children: [/* @__PURE__ */ b("button", {
235
+ children: [/* @__PURE__ */ y("button", {
236
236
  type: "submit",
237
237
  disabled: G || !E.trim(),
238
238
  className: t("inline-flex items-center gap-2 rounded-md px-4 py-2 text-sm font-medium transition-colors", "bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90", "disabled:opacity-50 disabled:cursor-not-allowed"),
239
- children: [/* @__PURE__ */ y(g, { size: 16 }), G ? T("devportal.creating", "Creating...") : T("devportal.createOAuthApp", "Create OAuth App")]
240
- }), /* @__PURE__ */ b("button", {
239
+ children: [/* @__PURE__ */ v(h, { size: 16 }), G ? T("devportal.creating", "Creating...") : T("devportal.createOAuthApp", "Create OAuth App")]
240
+ }), /* @__PURE__ */ y("button", {
241
241
  type: "button",
242
242
  onClick: () => q("/oauth"),
243
243
  className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-bg-sunken transition-colors",
244
- children: [/* @__PURE__ */ y(v, { size: 16 }), T("devportal.cancel", "Cancel")]
244
+ children: [/* @__PURE__ */ v(_, { size: 16 }), T("devportal.cancel", "Cancel")]
245
245
  })]
246
246
  })
247
247
  ]
@@ -7,12 +7,12 @@ import { PermissionGuard as l } from "../components/PermissionGuard.js";
7
7
  import "../components/index.js";
8
8
  import "../hooks/index.js";
9
9
  import { useState as u } from "react";
10
- import { useI18n as d } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
11
- import { Building2 as f, Info as p, X as m } from "lucide-react";
12
- import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
10
+ import { Building2 as d, Info as f, X as p } from "lucide-react";
11
+ import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
12
+ import { useI18n as _ } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
13
13
  //#region src/devportal/pages/CreateOrganizationPage.tsx
14
14
  var v = () => {
15
- let { navigate: v, basePath: y, currentUser: b } = e(), { t: x } = d(), S = (e, t) => {
15
+ let { navigate: v, basePath: y, currentUser: b } = e(), { t: x } = _(), S = (e, t) => {
16
16
  let n = x(e);
17
17
  return n === e ? t : n;
18
18
  }, [C, w] = u({}), [T, { loading: E }] = r(), [D] = n(), [O] = i(), k = t(), [A, j] = u({
@@ -46,15 +46,15 @@ var v = () => {
46
46
  let e = {};
47
47
  return A.name.trim() ? A.name.length < 2 ? e.name = S("devportal.orgNameTooShort", "Name must be at least 2 characters") : A.name.length > 100 && (e.name = S("devportal.nameTooLong", "Name must be less than 100 characters")) : e.name = S("devportal.orgNameRequired", "Organization name is required"), A.slug.trim() ? /^[a-z0-9-]+$/.test(A.slug) || (e.slug = S("devportal.slugInvalid", "Slug can only contain lowercase letters, numbers, and hyphens")) : e.slug = S("devportal.slugRequired", "Slug is required"), A.contactEmail && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(A.contactEmail) && (e.contactEmail = S("devportal.invalidEmailAddress", "Invalid email address")), A.supportEmail && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(A.supportEmail) && (e.supportEmail = S("devportal.invalidEmailAddress", "Invalid email address")), w(e), Object.keys(e).length === 0;
48
48
  };
49
- return /* @__PURE__ */ g(l, {
49
+ return /* @__PURE__ */ h(l, {
50
50
  authOnly: !0,
51
- children: /* @__PURE__ */ g(a, {
51
+ children: /* @__PURE__ */ h(a, {
52
52
  title: S("devportal.createOrganization", "Create Organization"),
53
53
  description: S("devportal.createOrganizationDescription", "Set up a developer organization to collaborate with your team"),
54
54
  purpose: S("devportal.createOrganizationPurpose", "An organization is the shared owner of your apps, members, and revenue. Create one here so your team works under a single identity — pick a name and tier now; you can invite members and verify it afterwards."),
55
55
  backLink: `${y}/organizations`,
56
56
  backLabel: S("devportal.backToOrganizations", "Back to Organizations"),
57
- children: /* @__PURE__ */ _("form", {
57
+ children: /* @__PURE__ */ g("form", {
58
58
  onSubmit: async (e) => {
59
59
  if (e.preventDefault(), I()) try {
60
60
  let e = (await T({ variables: { input: {
@@ -88,13 +88,13 @@ var v = () => {
88
88
  },
89
89
  className: "space-y-8 max-w-3xl",
90
90
  children: [
91
- /* @__PURE__ */ g(o, {
91
+ /* @__PURE__ */ h(o, {
92
92
  title: S("devportal.organizationDetails", "Organization Details"),
93
93
  description: S("devportal.organizationDetailsDescription", "Basic information about your organization"),
94
- children: /* @__PURE__ */ _("div", {
94
+ children: /* @__PURE__ */ g("div", {
95
95
  className: "space-y-4",
96
96
  children: [
97
- /* @__PURE__ */ g(s, {
97
+ /* @__PURE__ */ h(s, {
98
98
  label: S("devportal.organizationName", "Organization Name"),
99
99
  value: A.name,
100
100
  onChange: P,
@@ -103,7 +103,7 @@ var v = () => {
103
103
  error: C.name,
104
104
  hint: S("devportal.organizationNameHint", "Your organization's display name")
105
105
  }),
106
- /* @__PURE__ */ g(s, {
106
+ /* @__PURE__ */ h(s, {
107
107
  label: S("devportal.slug", "Slug"),
108
108
  value: A.slug,
109
109
  onChange: (e) => F("slug", e.target.value.toLowerCase()),
@@ -112,30 +112,30 @@ var v = () => {
112
112
  error: C.slug,
113
113
  hint: S("devportal.slugHint", "URL-friendly identifier (auto-generated from name)")
114
114
  }),
115
- /* @__PURE__ */ g(c, {
115
+ /* @__PURE__ */ h(c, {
116
116
  label: S("devportal.description", "Description"),
117
117
  value: A.description,
118
118
  onChange: (e) => F("description", e.target.value),
119
119
  placeholder: S("devportal.orgDescriptionPlaceholder", "Tell us about your organization..."),
120
120
  rows: 3
121
121
  }),
122
- /* @__PURE__ */ g(s, {
122
+ /* @__PURE__ */ h(s, {
123
123
  label: S("devportal.websiteUrl", "Website URL"),
124
124
  type: "url",
125
125
  value: A.websiteUrl,
126
126
  onChange: (e) => F("websiteUrl", e.target.value),
127
127
  placeholder: "https://example.com"
128
128
  }),
129
- /* @__PURE__ */ _("div", {
129
+ /* @__PURE__ */ g("div", {
130
130
  className: "grid gap-4 sm:grid-cols-2",
131
- children: [/* @__PURE__ */ g(s, {
131
+ children: [/* @__PURE__ */ h(s, {
132
132
  label: S("devportal.contactEmail", "Contact Email"),
133
133
  type: "email",
134
134
  value: A.contactEmail,
135
135
  onChange: (e) => F("contactEmail", e.target.value),
136
136
  placeholder: "contact@example.com",
137
137
  error: C.contactEmail
138
- }), /* @__PURE__ */ g(s, {
138
+ }), /* @__PURE__ */ h(s, {
139
139
  label: S("devportal.supportEmail", "Support Email"),
140
140
  type: "email",
141
141
  value: A.supportEmail,
@@ -147,37 +147,37 @@ var v = () => {
147
147
  ]
148
148
  })
149
149
  }),
150
- /* @__PURE__ */ _("div", {
150
+ /* @__PURE__ */ g("div", {
151
151
  className: "rounded-lg border border-border-subtle bg-status-info-bg-subtle p-4 flex gap-3",
152
- children: [/* @__PURE__ */ g(p, {
152
+ children: [/* @__PURE__ */ h(f, {
153
153
  size: 20,
154
154
  className: "text-accent-blue flex-shrink-0 mt-0.5"
155
- }), /* @__PURE__ */ _("div", {
155
+ }), /* @__PURE__ */ g("div", {
156
156
  className: "text-sm text-status-info-text",
157
- children: [/* @__PURE__ */ g("p", {
157
+ children: [/* @__PURE__ */ h("p", {
158
158
  className: "font-medium",
159
159
  children: S("devportal.billingAutoSetup", "A billing account will be automatically set up")
160
- }), /* @__PURE__ */ g("p", {
160
+ }), /* @__PURE__ */ h("p", {
161
161
  className: "mt-1",
162
162
  children: S("devportal.billingAutoSetupNote", "Revenue from app sales will be credited to it. You can complete legal and tax details for payouts later in Organization Settings.")
163
163
  })]
164
164
  })]
165
165
  }),
166
- /* @__PURE__ */ _("div", {
166
+ /* @__PURE__ */ g("div", {
167
167
  className: "flex items-center justify-end gap-3 border-t pt-6",
168
- children: [/* @__PURE__ */ _("button", {
168
+ children: [/* @__PURE__ */ g("button", {
169
169
  type: "button",
170
170
  onClick: () => {
171
171
  M("/organizations");
172
172
  },
173
173
  disabled: E,
174
174
  className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-bg-sunken transition-colors disabled:opacity-50",
175
- children: [/* @__PURE__ */ g(m, { size: 16 }), S("devportal.cancel", "Cancel")]
176
- }), /* @__PURE__ */ g("button", {
175
+ children: [/* @__PURE__ */ h(p, { size: 16 }), S("devportal.cancel", "Cancel")]
176
+ }), /* @__PURE__ */ h("button", {
177
177
  type: "submit",
178
178
  disabled: E,
179
179
  className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50",
180
- children: E ? /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }), S("devportal.creating", "Creating...")] }) : /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(f, { size: 16 }), S("devportal.createOrganization", "Create Organization")] })
180
+ children: E ? /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }), S("devportal.creating", "Creating...")] }) : /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h(d, { size: 16 }), S("devportal.createOrganization", "Create Organization")] })
181
181
  })]
182
182
  })
183
183
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"CreateWebhookPage.d.ts","sourceRoot":"","sources":["../../../src/devportal/pages/CreateWebhookPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAa,MAAM,OAAO,CAAC;AAwD3C,eAAO,MAAM,iBAAiB,EAAE,EA6gB/B,CAAC"}
1
+ {"version":3,"file":"CreateWebhookPage.d.ts","sourceRoot":"","sources":["../../../src/devportal/pages/CreateWebhookPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAa,MAAM,OAAO,CAAC;AAwD3C,eAAO,MAAM,iBAAiB,EAAE,EAghB/B,CAAC"}
@@ -1,17 +1,17 @@
1
1
  import { useDevportal as e } from "../providers/DevportalProvider.js";
2
- import { useDevportalEventBus as t } from "../events/index.js";
3
- import { useCreateWebhookMutation as n, useGetApplicationQuery as r, useGetApplicationsQuery as i } from "../../generated/global-operations.js";
4
- import { getErrorMessage as a } from "../hooks/useGraphQL.js";
5
- import { PageLayout as o, PageSection as s } from "../components/PageLayout.js";
6
- import { CheckboxField as c, InputField as l, TextareaField as u } from "../components/FormField.js";
7
- import { Alert as d } from "../components/ConfirmDialog.js";
8
- import { PermissionGuard as f } from "../components/PermissionGuard.js";
2
+ import { useTr as t } from "../utils/i18n.js";
3
+ import { useDevportalEventBus as n } from "../events/index.js";
4
+ import { useCreateWebhookMutation as r, useGetApplicationQuery as i, useGetApplicationsQuery as a } from "../../generated/global-operations.js";
5
+ import { getErrorMessage as o } from "../hooks/useGraphQL.js";
6
+ import { PageLayout as s, PageSection as c } from "../components/PageLayout.js";
7
+ import { CheckboxField as l, InputField as u, TextareaField as d } from "../components/FormField.js";
8
+ import { Alert as f } from "../components/ConfirmDialog.js";
9
+ import { PermissionGuard as p } from "../components/PermissionGuard.js";
9
10
  import "../components/index.js";
10
- import { useDevportalPermission as p } from "../hooks/usePermission.js";
11
+ import { useDevportalPermission as m } from "../hooks/usePermission.js";
11
12
  import "../hooks/index.js";
12
- import { WEBHOOK_EVENTS as m } from "../types/index.js";
13
- import { DEVPORTAL_PERMISSIONS as h } from "../constants/permissions.js";
14
- import { useTr as g } from "../utils/i18n.js";
13
+ import { WEBHOOK_EVENTS as h } from "../types/index.js";
14
+ import { DEVPORTAL_PERMISSIONS as g } from "../constants/permissions.js";
15
15
  import { useEffect as _, useMemo as v, useState as y } from "react";
16
16
  import { Loader2 as b, Webhook as x } from "lucide-react";
17
17
  import { useParams as S } from "react-router";
@@ -19,40 +19,40 @@ import { jsx as C, jsxs as w } from "react/jsx-runtime";
19
19
  import { ShowMore as T } from "@burdenoff/fe-libs/ui";
20
20
  //#region src/devportal/pages/CreateWebhookPage.tsx
21
21
  var E = {
22
- Application: m.filter((e) => e.startsWith("application.")),
23
- Installation: m.filter((e) => e.startsWith("installation.")),
24
- User: m.filter((e) => e.startsWith("user.")),
25
- Workspace: m.filter((e) => e.startsWith("workspace.")),
26
- Project: m.filter((e) => e.startsWith("project.")),
27
- Task: m.filter((e) => e.startsWith("task.")),
28
- Comment: m.filter((e) => e.startsWith("comment.")),
29
- File: m.filter((e) => e.startsWith("file.")),
30
- Member: m.filter((e) => e.startsWith("member."))
22
+ Application: h.filter((e) => e.startsWith("application.")),
23
+ Installation: h.filter((e) => e.startsWith("installation.")),
24
+ User: h.filter((e) => e.startsWith("user.")),
25
+ Workspace: h.filter((e) => e.startsWith("workspace.")),
26
+ Project: h.filter((e) => e.startsWith("project.")),
27
+ Task: h.filter((e) => e.startsWith("task.")),
28
+ Comment: h.filter((e) => e.startsWith("comment.")),
29
+ File: h.filter((e) => e.startsWith("file.")),
30
+ Member: h.filter((e) => e.startsWith("member."))
31
31
  }, D = () => {
32
- let { appId: m } = S(), { navigate: D, basePath: O } = e(), [k, A] = y({
33
- applicationId: m || "",
32
+ let { appId: h } = S(), { navigate: D, basePath: O } = e(), [k, A] = y({
33
+ applicationId: h || "",
34
34
  name: "",
35
35
  description: "",
36
36
  url: "",
37
37
  events: [],
38
38
  retryEnabled: !0,
39
39
  maxRetries: 3
40
- }), [j, M] = y({}), [N, P] = y(null), { data: F } = r({
41
- variables: { id: m ?? "" },
42
- skip: !m,
40
+ }), [j, M] = y({}), [N, P] = y(null), { data: F } = i({
41
+ variables: { id: h ?? "" },
42
+ skip: !h,
43
43
  fetchPolicy: "cache-first"
44
44
  });
45
45
  _(() => {
46
46
  let e = F?.application?.name;
47
- if (!m || !e) return;
47
+ if (!h || !e) return;
48
48
  let t = window.__breadcrumbRegistry;
49
- return t?.register(m, e), () => t?.unregister(m);
50
- }, [m, F?.application?.name]);
51
- let { data: I, loading: L, error: R } = i({
49
+ return t?.register(h, e), () => t?.unregister(h);
50
+ }, [h, F?.application?.name]);
51
+ let { data: I, loading: L, error: R } = a({
52
52
  variables: { limit: 100 },
53
- skip: !!m,
53
+ skip: !!h,
54
54
  fetchPolicy: "cache-and-network"
55
- }), [z, { loading: B }] = n(), V = t(), H = g(), U = p(h.WEBHOOK_CREATE), W = v(() => I?.applications?.edges?.map((e) => e.node).map((e) => ({
55
+ }), [z, { loading: B }] = r(), V = n(), H = t(), U = m(g.WEBHOOK_CREATE), W = v(() => I?.applications?.edges?.map((e) => e.node).map((e) => ({
56
56
  id: e.id,
57
57
  name: e.name,
58
58
  slug: e.slug
@@ -80,9 +80,9 @@ var E = {
80
80
  let e = {};
81
81
  return k.applicationId || (e.applicationId = H("devportal.createWebhook.errors.appRequired", "Select an application")), k.name.trim() || (e.name = H("devportal.createWebhook.errors.nameRequired", "Name is required")), k.url.trim() ? /^https:\/\//i.test(k.url) || (e.url = H("devportal.createWebhook.errors.urlHttps", "Endpoint URL must use HTTPS")) : e.url = H("devportal.createWebhook.errors.urlRequired", "Endpoint URL is required"), k.events.length === 0 && (e.events = H("devportal.createWebhook.errors.eventsRequired", "Select at least one event")), k.retryEnabled && (k.maxRetries < 1 || k.maxRetries > 10) && (e.maxRetries = H("devportal.createWebhook.errors.retriesRange", "Retry count must be between 1 and 10")), M(e), Object.keys(e).length === 0;
82
82
  };
83
- return /* @__PURE__ */ C(f, {
83
+ return /* @__PURE__ */ C(p, {
84
84
  authOnly: !0,
85
- children: /* @__PURE__ */ C(o, {
85
+ children: /* @__PURE__ */ C(s, {
86
86
  title: H("devportal.createWebhook.title", "Create Webhook"),
87
87
  description: H("devportal.createWebhook.description", "Set up a real webhook endpoint to receive platform events through the public gateway"),
88
88
  purpose: H("devportal.createWebhook.purpose", "Point a webhook at a URL you host so the platform pushes events (installs, payments, app updates) to your backend in real time. Choose which events to subscribe to; you will get a signing secret to verify that deliveries genuinely came from us."),
@@ -114,24 +114,24 @@ var E = {
114
114
  },
115
115
  className: "space-y-6",
116
116
  children: [
117
- /* @__PURE__ */ C(d, {
117
+ /* @__PURE__ */ C(f, {
118
118
  variant: "info",
119
119
  children: H("devportal.createWebhook.info", "Webhook deliveries are signed and sent through the public global gateway. Use an HTTPS endpoint that accepts POST requests and returns a 2xx response for successful deliveries.")
120
120
  }),
121
- N && /* @__PURE__ */ C(d, {
121
+ N && /* @__PURE__ */ C(f, {
122
122
  variant: "error",
123
123
  children: N
124
124
  }),
125
- R && !m && /* @__PURE__ */ C(d, {
125
+ R && !h && /* @__PURE__ */ C(f, {
126
126
  variant: "error",
127
- children: a(R)
127
+ children: o(R)
128
128
  }),
129
- /* @__PURE__ */ C(s, {
129
+ /* @__PURE__ */ C(c, {
130
130
  title: H("devportal.createWebhook.basicInfo", "Basic Information"),
131
131
  children: /* @__PURE__ */ w("div", {
132
132
  className: "space-y-4 rounded-card border border-border-seam bg-bg-surface p-4",
133
133
  children: [
134
- !m && /* @__PURE__ */ w("label", {
134
+ !h && /* @__PURE__ */ w("label", {
135
135
  className: "grid gap-2 text-sm font-medium",
136
136
  children: [
137
137
  /* @__PURE__ */ C("span", { children: H("devportal.createWebhook.application", "Application") }),
@@ -155,7 +155,7 @@ var E = {
155
155
  })
156
156
  ]
157
157
  }),
158
- L && !m && /* @__PURE__ */ w("div", {
158
+ L && !h && /* @__PURE__ */ w("div", {
159
159
  className: "flex items-center gap-2 text-sm text-text-secondary",
160
160
  role: "status",
161
161
  "aria-live": "polite",
@@ -175,7 +175,7 @@ var E = {
175
175
  })
176
176
  ]
177
177
  }),
178
- /* @__PURE__ */ C(l, {
178
+ /* @__PURE__ */ C(u, {
179
179
  label: H("devportal.createWebhook.webhookName", "Webhook Name"),
180
180
  value: k.name,
181
181
  onChange: (e) => K("name", e.target.value),
@@ -183,19 +183,19 @@ var E = {
183
183
  error: j.name,
184
184
  required: !0
185
185
  }),
186
- /* @__PURE__ */ C(u, {
186
+ /* @__PURE__ */ C(d, {
187
187
  label: H("devportal.createWebhook.descriptionLabel", "Description"),
188
188
  value: k.description,
189
189
  onChange: (e) => K("description", e.target.value),
190
190
  placeholder: H("devportal.createWebhook.descriptionPlaceholder", "What this webhook is used for"),
191
191
  rows: 2
192
192
  }),
193
- /* @__PURE__ */ C(l, {
193
+ /* @__PURE__ */ C(u, {
194
194
  label: H("devportal.createWebhook.endpointUrl", "Endpoint URL"),
195
195
  type: "url",
196
196
  value: k.url,
197
197
  onChange: (e) => K("url", e.target.value),
198
- placeholder: "https://your-app.example.com/webhooks/burdenoff",
198
+ placeholder: H("devportal.createWebhook.endpointPlaceholder", "https://your-app.example.com/webhooks/burdenoff"),
199
199
  hint: H("devportal.createWebhook.httpsOnly", "HTTPS only"),
200
200
  error: j.url,
201
201
  required: !0
@@ -203,7 +203,7 @@ var E = {
203
203
  ]
204
204
  })
205
205
  }),
206
- /* @__PURE__ */ C(s, {
206
+ /* @__PURE__ */ C(c, {
207
207
  title: H("devportal.createWebhook.subscribedEvents", "Subscribed Events"),
208
208
  children: /* @__PURE__ */ w("div", {
209
209
  className: "rounded-card border border-border-seam bg-bg-surface p-4",
@@ -250,16 +250,16 @@ var E = {
250
250
  })]
251
251
  })
252
252
  }),
253
- /* @__PURE__ */ C(s, {
253
+ /* @__PURE__ */ C(c, {
254
254
  title: H("devportal.createWebhook.retrySettings", "Retry Settings"),
255
255
  children: /* @__PURE__ */ w("div", {
256
256
  className: "space-y-4 rounded-card border border-border-seam bg-bg-surface p-4",
257
- children: [/* @__PURE__ */ C(c, {
257
+ children: [/* @__PURE__ */ C(l, {
258
258
  label: H("devportal.createWebhook.enableRetries", "Enable retries"),
259
259
  description: H("devportal.createWebhook.enableRetriesDesc", "Retry failed deliveries automatically"),
260
260
  checked: k.retryEnabled,
261
261
  onChange: (e) => K("retryEnabled", e.target.checked)
262
- }), k.retryEnabled && /* @__PURE__ */ C(l, {
262
+ }), k.retryEnabled && /* @__PURE__ */ C(u, {
263
263
  label: H("devportal.createWebhook.maxRetries", "Maximum retries"),
264
264
  type: "number",
265
265
  value: k.maxRetries,