@burdenoff/microfe-devportal 2026.611.1 → 2026.614.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.
- package/dist/devportal/components/SectionNav.js +105 -41
- package/dist/devportal/components/SectionNav.js.map +1 -1
- package/dist/devportal/hooks/useGraphQL.js +1 -1
- package/dist/devportal/pages/AdminReviewPage.js +36 -36
- package/dist/devportal/pages/AnalyticsDashboardPage.js +150 -150
- package/dist/devportal/pages/AnalyticsDashboardPage.js.map +1 -1
- package/dist/devportal/pages/ApiKeysPage.js +184 -172
- package/dist/devportal/pages/ApiKeysPage.js.map +1 -1
- package/dist/devportal/pages/AppLogsPage.js +9 -9
- package/dist/devportal/pages/ApplicationDetailPage.js +414 -414
- package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.js +44 -44
- package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationsPage.js +118 -118
- package/dist/devportal/pages/ApplicationsPage.js.map +1 -1
- package/dist/devportal/pages/CreateApiKeyPage.js +20 -20
- package/dist/devportal/pages/CreateApplicationPage.js +32 -32
- package/dist/devportal/pages/CreateOAuthClientPage.js +20 -20
- package/dist/devportal/pages/CreateOrganizationPage.js +109 -422
- package/dist/devportal/pages/CreateOrganizationPage.js.map +1 -1
- package/dist/devportal/pages/CreateWebhookPage.js +25 -25
- package/dist/devportal/pages/DashboardPage.js +160 -145
- package/dist/devportal/pages/DashboardPage.js.map +1 -1
- package/dist/devportal/pages/DelegationsPage.js +22 -22
- package/dist/devportal/pages/EditApplicationPage.js +283 -283
- package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
- package/dist/devportal/pages/ListingPreviewPage.js +9 -9
- package/dist/devportal/pages/OAuthClientDetailPage.js +17 -17
- package/dist/devportal/pages/OAuthClientsPage.js +16 -16
- package/dist/devportal/pages/OrganizationDetailPage.js +78 -78
- package/dist/devportal/pages/OrganizationMembersPage.js +260 -260
- package/dist/devportal/pages/OrganizationMembersPage.js.map +1 -1
- package/dist/devportal/pages/OrganizationsPage.js +18 -18
- package/dist/devportal/pages/PublishPage.js +16 -16
- package/dist/devportal/pages/PublisherProfilePage.js +156 -146
- package/dist/devportal/pages/PublisherProfilePage.js.map +1 -1
- package/dist/devportal/pages/RevenueDashboardPage.js +528 -322
- package/dist/devportal/pages/RevenueDashboardPage.js.map +1 -1
- package/dist/devportal/pages/SettingsPage.js +17 -17
- package/dist/devportal/pages/SetupPage.js +99 -99
- package/dist/devportal/pages/SetupPage.js.map +1 -1
- package/dist/devportal/pages/WebhookDetailPage.js +143 -143
- package/dist/devportal/pages/WebhookDetailPage.js.map +1 -1
- package/dist/devportal/pages/WebhooksPage.js +140 -140
- package/dist/devportal/pages/WebhooksPage.js.map +1 -1
- package/dist/devportal/providers/DevportalProvider.js +46 -33
- package/dist/devportal/providers/DevportalProvider.js.map +1 -1
- package/dist/devportal/types/index.js.map +1 -1
- package/dist/generated/global-operations.js +99 -59
- package/dist/generated/global-operations.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import { useDevportal as e } from "../providers/DevportalProvider.js";
|
|
2
2
|
import { LoadingState as t } from "../components/LoadingState.js";
|
|
3
3
|
import { EmptyState as n } from "../components/EmptyState.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
4
|
+
import { useDeactivateAppMutation as ee, useDeleteApplicationMutation as te, useGetApplicationQuery as ne, useSubmitApplicationMutation as r, useUpdateApplicationMutation as i } from "../../generated/global-operations.js";
|
|
5
|
+
import { PageLayout as a, PageSection as o } from "../components/PageLayout.js";
|
|
6
|
+
import { APP_TYPE_LABELS as s } from "../utils/constants.js";
|
|
7
|
+
import { StatusBadge as re } from "../components/StatusBadge.js";
|
|
8
|
+
import { nativeImpact as c, nativeNotify as l } from "../../utils/nativeBridge.js";
|
|
9
|
+
import { CheckboxField as u, InputField as d, SelectField as f, TagInput as p, TextareaField as m } from "../components/FormField.js";
|
|
10
|
+
import { ConfirmDialog as h } from "../components/ConfirmDialog.js";
|
|
11
11
|
import { PermissionGuard as g } from "../components/PermissionGuard.js";
|
|
12
12
|
import "../components/index.js";
|
|
13
13
|
import { DEVPORTAL_PERMISSIONS as _ } from "../constants/permissions.js";
|
|
14
14
|
import { useDevportalPermission as v } from "../hooks/usePermission.js";
|
|
15
15
|
import { useEffect as y, useState as b } from "react";
|
|
16
16
|
import { useI18n as x } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
17
|
-
import { AlertCircle as S, AlertTriangle as C, AppWindow as w, Archive as
|
|
18
|
-
import { useParams as
|
|
19
|
-
import { Fragment as
|
|
17
|
+
import { AlertCircle as S, AlertTriangle as C, AppWindow as w, Archive as T, Power as ie, Save as ae, Send as oe, Trash2 as se } from "lucide-react";
|
|
18
|
+
import { useParams as ce } from "react-router-dom";
|
|
19
|
+
import { Fragment as E, jsx as D, jsxs as O } from "react/jsx-runtime";
|
|
20
20
|
//#region src/devportal/pages/EditApplicationPage.tsx
|
|
21
|
-
var
|
|
21
|
+
var le = Object.entries(s).map(([e, t]) => ({
|
|
22
22
|
value: e,
|
|
23
23
|
label: t
|
|
24
|
-
})),
|
|
24
|
+
})), ue = [
|
|
25
25
|
{
|
|
26
26
|
value: "PUBLIC",
|
|
27
27
|
label: "Public - Visible to everyone"
|
|
@@ -38,7 +38,7 @@ var ue = Object.entries(a).map(([e, t]) => ({
|
|
|
38
38
|
value: "INTERNAL",
|
|
39
39
|
label: "Internal - Only visible within organization"
|
|
40
40
|
}
|
|
41
|
-
],
|
|
41
|
+
], de = [
|
|
42
42
|
{
|
|
43
43
|
value: "productivity",
|
|
44
44
|
label: "Productivity"
|
|
@@ -88,7 +88,7 @@ var ue = Object.entries(a).map(([e, t]) => ({
|
|
|
88
88
|
label: "Other"
|
|
89
89
|
}
|
|
90
90
|
];
|
|
91
|
-
function
|
|
91
|
+
function fe(e) {
|
|
92
92
|
return e ? {
|
|
93
93
|
id: e.id,
|
|
94
94
|
name: e.name,
|
|
@@ -129,21 +129,21 @@ function pe(e) {
|
|
|
129
129
|
updatedAt: e.updatedAt
|
|
130
130
|
} : null;
|
|
131
131
|
}
|
|
132
|
-
var
|
|
133
|
-
let { navigate:
|
|
134
|
-
let n =
|
|
132
|
+
var k = () => {
|
|
133
|
+
let { navigate: s, basePath: k } = e(), { appId: A } = ce(), { t: j } = x(), { allowed: M } = v(_.APP_UPDATE), { allowed: N } = v(_.APP_DELETE), P = (e, t) => {
|
|
134
|
+
let n = j(e);
|
|
135
135
|
return n === e ? t : n;
|
|
136
|
-
}, [
|
|
137
|
-
variables: { id:
|
|
138
|
-
skip: !
|
|
139
|
-
}), [
|
|
136
|
+
}, [F, I] = b(!1), [L, R] = b({}), [z, B] = b(!1), [V, H] = b(!1), [pe, U] = b(!1), [W, G] = b(!1), { data: K, loading: me, error: q } = ne({
|
|
137
|
+
variables: { id: A },
|
|
138
|
+
skip: !A
|
|
139
|
+
}), [J] = i(), [he] = te(), [ge] = r(), [_e] = ee(), Y = fe(K?.application);
|
|
140
140
|
y(() => {
|
|
141
|
-
let e =
|
|
142
|
-
if (!
|
|
141
|
+
let e = Y?.name;
|
|
142
|
+
if (!A || !e) return;
|
|
143
143
|
let t = window.__breadcrumbRegistry;
|
|
144
|
-
return t?.register(
|
|
145
|
-
}, [
|
|
146
|
-
let [
|
|
144
|
+
return t?.register(A, e), () => t?.unregister(A);
|
|
145
|
+
}, [A, Y?.name]);
|
|
146
|
+
let [X, Z] = b({
|
|
147
147
|
name: "",
|
|
148
148
|
slug: "",
|
|
149
149
|
shortDescription: "",
|
|
@@ -162,376 +162,376 @@ var O = () => {
|
|
|
162
162
|
requiresApproval: !1
|
|
163
163
|
});
|
|
164
164
|
y(() => {
|
|
165
|
-
|
|
166
|
-
name:
|
|
167
|
-
slug:
|
|
168
|
-
shortDescription:
|
|
169
|
-
description:
|
|
170
|
-
appType:
|
|
171
|
-
visibility:
|
|
172
|
-
category:
|
|
173
|
-
tags:
|
|
174
|
-
keywords:
|
|
175
|
-
websiteUrl:
|
|
176
|
-
documentationUrl:
|
|
177
|
-
supportUrl:
|
|
178
|
-
privacyPolicyUrl:
|
|
179
|
-
termsOfServiceUrl:
|
|
180
|
-
githubUrl:
|
|
181
|
-
requiresApproval:
|
|
182
|
-
}),
|
|
183
|
-
}, [
|
|
184
|
-
let
|
|
185
|
-
|
|
186
|
-
},
|
|
187
|
-
|
|
165
|
+
Y && (Z({
|
|
166
|
+
name: Y.name,
|
|
167
|
+
slug: Y.slug,
|
|
168
|
+
shortDescription: Y.shortDescription || "",
|
|
169
|
+
description: Y.description || "",
|
|
170
|
+
appType: Y.appType,
|
|
171
|
+
visibility: Y.visibility,
|
|
172
|
+
category: Y.category || "",
|
|
173
|
+
tags: Y.tags,
|
|
174
|
+
keywords: Y.keywords,
|
|
175
|
+
websiteUrl: Y.websiteUrl || "",
|
|
176
|
+
documentationUrl: Y.documentationUrl || "",
|
|
177
|
+
supportUrl: Y.supportUrl || "",
|
|
178
|
+
privacyPolicyUrl: Y.privacyPolicyUrl || "",
|
|
179
|
+
termsOfServiceUrl: Y.termsOfServiceUrl || "",
|
|
180
|
+
githubUrl: Y.githubUrl || "",
|
|
181
|
+
requiresApproval: Y.requiresApproval
|
|
182
|
+
}), G(!1));
|
|
183
|
+
}, [K?.application]);
|
|
184
|
+
let Q = (e) => {
|
|
185
|
+
s?.(`${k}${e}`);
|
|
186
|
+
}, $ = (e, t) => {
|
|
187
|
+
Z((n) => ({
|
|
188
188
|
...n,
|
|
189
189
|
[e]: t
|
|
190
|
-
})),
|
|
190
|
+
})), G(!0), L[e] && R((t) => ({
|
|
191
191
|
...t,
|
|
192
192
|
[e]: void 0
|
|
193
193
|
}));
|
|
194
|
-
},
|
|
194
|
+
}, ve = () => {
|
|
195
195
|
let e = {};
|
|
196
|
-
return
|
|
197
|
-
},
|
|
198
|
-
if (e.preventDefault(), !(!
|
|
199
|
-
|
|
196
|
+
return X.name.trim() ? X.name.length < 3 ? e.name = P("devportal.appNameMinLength", "Name must be at least 3 characters") : X.name.length > 100 && (e.name = P("devportal.appNameMaxLength", "Name must be less than 100 characters")) : e.name = P("devportal.appNameRequired", "Application name is required"), X.slug.trim() ? /^[a-z0-9-]+$/.test(X.slug) || (e.slug = P("devportal.slugInvalidChars", "Slug can only contain lowercase letters, numbers, and hyphens")) : e.slug = P("devportal.slugRequired", "Slug is required"), X.shortDescription.trim() ? X.shortDescription.length > 200 && (e.shortDescription = P("devportal.shortDescriptionMaxLength", "Short description must be less than 200 characters")) : e.shortDescription = P("devportal.shortDescriptionRequired", "Short description is required"), X.appType || (e.appType = P("devportal.appTypeRequired", "Application type is required")), X.category || (e.category = P("devportal.categoryRequired", "Category is required")), R(e), Object.keys(e).length === 0;
|
|
197
|
+
}, ye = async (e) => {
|
|
198
|
+
if (e.preventDefault(), !(!ve() || !Y)) {
|
|
199
|
+
I(!0);
|
|
200
200
|
try {
|
|
201
|
-
await
|
|
202
|
-
id:
|
|
201
|
+
await J({ variables: {
|
|
202
|
+
id: Y.id,
|
|
203
203
|
input: {
|
|
204
|
-
name:
|
|
205
|
-
shortDescription:
|
|
206
|
-
description:
|
|
207
|
-
appType:
|
|
208
|
-
visibility:
|
|
209
|
-
category:
|
|
210
|
-
tags:
|
|
211
|
-
keywords:
|
|
212
|
-
websiteUrl:
|
|
213
|
-
documentationUrl:
|
|
214
|
-
supportUrl:
|
|
215
|
-
privacyPolicyUrl:
|
|
216
|
-
termsOfServiceUrl:
|
|
217
|
-
githubUrl:
|
|
204
|
+
name: X.name,
|
|
205
|
+
shortDescription: X.shortDescription,
|
|
206
|
+
description: X.description,
|
|
207
|
+
appType: X.appType,
|
|
208
|
+
visibility: X.visibility,
|
|
209
|
+
category: X.category,
|
|
210
|
+
tags: X.tags,
|
|
211
|
+
keywords: X.keywords,
|
|
212
|
+
websiteUrl: X.websiteUrl || null,
|
|
213
|
+
documentationUrl: X.documentationUrl || null,
|
|
214
|
+
supportUrl: X.supportUrl || null,
|
|
215
|
+
privacyPolicyUrl: X.privacyPolicyUrl || null,
|
|
216
|
+
termsOfServiceUrl: X.termsOfServiceUrl || null,
|
|
217
|
+
githubUrl: X.githubUrl || null
|
|
218
218
|
}
|
|
219
|
-
} }),
|
|
219
|
+
} }), G(!1);
|
|
220
220
|
} catch (e) {
|
|
221
221
|
console.error("Failed to update application:", e);
|
|
222
222
|
} finally {
|
|
223
|
-
|
|
223
|
+
I(!1);
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
|
-
},
|
|
227
|
-
if (
|
|
228
|
-
|
|
226
|
+
}, be = async () => {
|
|
227
|
+
if (Y) {
|
|
228
|
+
c("medium");
|
|
229
229
|
try {
|
|
230
|
-
await
|
|
230
|
+
await he({ variables: { id: Y.id } }), l("success"), Q("/apps");
|
|
231
231
|
} catch (e) {
|
|
232
|
-
|
|
232
|
+
l("error"), console.error("Failed to delete application:", e);
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
|
-
},
|
|
236
|
-
if (
|
|
237
|
-
await
|
|
238
|
-
id:
|
|
235
|
+
}, xe = async () => {
|
|
236
|
+
if (Y) try {
|
|
237
|
+
await J({ variables: {
|
|
238
|
+
id: Y.id,
|
|
239
239
|
input: { visibility: "PRIVATE" }
|
|
240
|
-
} }),
|
|
240
|
+
} }), H(!1);
|
|
241
241
|
} catch (e) {
|
|
242
242
|
console.error("Failed to deprecate application:", e);
|
|
243
243
|
}
|
|
244
|
-
},
|
|
245
|
-
if (
|
|
246
|
-
await
|
|
244
|
+
}, Se = async () => {
|
|
245
|
+
if (Y) try {
|
|
246
|
+
await _e({ variables: { id: Y.id } }), U(!1), Q("/apps");
|
|
247
247
|
} catch (e) {
|
|
248
248
|
console.error("Failed to deactivate application:", e);
|
|
249
249
|
}
|
|
250
|
-
},
|
|
251
|
-
if (
|
|
252
|
-
|
|
250
|
+
}, Ce = async () => {
|
|
251
|
+
if (Y) try {
|
|
252
|
+
I(!0), await ge({ variables: { id: Y.id } });
|
|
253
253
|
} catch (e) {
|
|
254
254
|
console.error("Failed to submit for review:", e);
|
|
255
255
|
} finally {
|
|
256
|
-
|
|
256
|
+
I(!1);
|
|
257
257
|
}
|
|
258
258
|
};
|
|
259
|
-
if (
|
|
260
|
-
if (
|
|
261
|
-
title:
|
|
262
|
-
backLink: `${
|
|
263
|
-
backLabel:
|
|
264
|
-
children: /* @__PURE__ */
|
|
259
|
+
if (me) return /* @__PURE__ */ D(t, { message: P("devportal.loadingApplication", "Loading application...") });
|
|
260
|
+
if (q) return /* @__PURE__ */ D(a, {
|
|
261
|
+
title: P("devportal.error", "Error"),
|
|
262
|
+
backLink: `${k}/apps`,
|
|
263
|
+
backLabel: P("devportal.backToApplications", "Back to Applications"),
|
|
264
|
+
children: /* @__PURE__ */ O("div", {
|
|
265
265
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
266
266
|
children: [
|
|
267
|
-
/* @__PURE__ */
|
|
267
|
+
/* @__PURE__ */ D(S, {
|
|
268
268
|
size: 48,
|
|
269
269
|
className: "text-destructive mb-4"
|
|
270
270
|
}),
|
|
271
|
-
/* @__PURE__ */
|
|
271
|
+
/* @__PURE__ */ D("h3", {
|
|
272
272
|
className: "text-lg font-semibold mb-2",
|
|
273
|
-
children:
|
|
273
|
+
children: P("devportal.failedToLoadApplication", "Failed to load application")
|
|
274
274
|
}),
|
|
275
|
-
/* @__PURE__ */
|
|
275
|
+
/* @__PURE__ */ D("p", {
|
|
276
276
|
className: "text-sm text-muted-foreground",
|
|
277
|
-
children:
|
|
277
|
+
children: q.message
|
|
278
278
|
})
|
|
279
279
|
]
|
|
280
280
|
})
|
|
281
281
|
});
|
|
282
|
-
if (!
|
|
283
|
-
title:
|
|
284
|
-
backLink: `${
|
|
285
|
-
backLabel:
|
|
286
|
-
children: /* @__PURE__ */
|
|
287
|
-
icon: /* @__PURE__ */
|
|
288
|
-
title:
|
|
289
|
-
description:
|
|
282
|
+
if (!Y) return /* @__PURE__ */ D(a, {
|
|
283
|
+
title: P("devportal.notFound", "Not Found"),
|
|
284
|
+
backLink: `${k}/apps`,
|
|
285
|
+
backLabel: P("devportal.backToApplications", "Back to Applications"),
|
|
286
|
+
children: /* @__PURE__ */ D(n, {
|
|
287
|
+
icon: /* @__PURE__ */ D(w, { size: 48 }),
|
|
288
|
+
title: P("devportal.applicationNotFound", "Application not found"),
|
|
289
|
+
description: P("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
|
|
290
290
|
})
|
|
291
291
|
});
|
|
292
|
-
let we =
|
|
293
|
-
return /* @__PURE__ */
|
|
292
|
+
let we = Y.status === "DRAFT" || Y.status === "REJECTED", Te = Y.status === "PUBLISHED", Ee = Y.status === "ACTIVE" || Y.status === "PUBLISHED";
|
|
293
|
+
return /* @__PURE__ */ D(g, {
|
|
294
294
|
permission: _.APP_UPDATE,
|
|
295
|
-
children: /* @__PURE__ */
|
|
296
|
-
title: `${
|
|
297
|
-
description:
|
|
298
|
-
backLink: `${
|
|
299
|
-
backLabel:
|
|
300
|
-
actions: /* @__PURE__ */
|
|
295
|
+
children: /* @__PURE__ */ O(a, {
|
|
296
|
+
title: `${P("devportal.editAppTitlePrefix", "Edit:")} ${Y.name}`,
|
|
297
|
+
description: P("devportal.editAppDescription", "Update your application settings"),
|
|
298
|
+
backLink: `${k}/apps/${Y.id}`,
|
|
299
|
+
backLabel: P("devportal.backToApplication", "Back to Application"),
|
|
300
|
+
actions: /* @__PURE__ */ D("div", {
|
|
301
301
|
className: "flex items-center gap-2",
|
|
302
|
-
children: /* @__PURE__ */
|
|
303
|
-
status:
|
|
302
|
+
children: /* @__PURE__ */ D(re, {
|
|
303
|
+
status: Y.status,
|
|
304
304
|
type: "app"
|
|
305
305
|
})
|
|
306
306
|
}),
|
|
307
307
|
children: [
|
|
308
|
-
/* @__PURE__ */
|
|
309
|
-
onSubmit:
|
|
308
|
+
/* @__PURE__ */ O("form", {
|
|
309
|
+
onSubmit: ye,
|
|
310
310
|
className: "space-y-8 max-w-3xl",
|
|
311
311
|
children: [
|
|
312
|
-
|
|
312
|
+
Y.status === "PUBLISHED" && /* @__PURE__ */ O("div", {
|
|
313
313
|
className: "rounded-lg border border-border-subtle bg-status-warning-bg-subtle p-4 flex gap-3",
|
|
314
|
-
children: [/* @__PURE__ */
|
|
314
|
+
children: [/* @__PURE__ */ D(C, {
|
|
315
315
|
size: 20,
|
|
316
316
|
className: "text-status-warning-text flex-shrink-0 mt-0.5"
|
|
317
|
-
}), /* @__PURE__ */
|
|
317
|
+
}), /* @__PURE__ */ O("div", {
|
|
318
318
|
className: "text-sm text-status-warning-text",
|
|
319
|
-
children: [/* @__PURE__ */
|
|
319
|
+
children: [/* @__PURE__ */ D("p", {
|
|
320
320
|
className: "font-medium",
|
|
321
|
-
children:
|
|
322
|
-
}), /* @__PURE__ */
|
|
321
|
+
children: P("devportal.appIsPublished", "This application is published")
|
|
322
|
+
}), /* @__PURE__ */ D("p", {
|
|
323
323
|
className: "mt-1 text-status-warning-text",
|
|
324
|
-
children:
|
|
324
|
+
children: P("devportal.publishedAppChangesWarning", "Changes to published apps may require re-review. Major changes will put the app back into review status.")
|
|
325
325
|
})]
|
|
326
326
|
})]
|
|
327
327
|
}),
|
|
328
|
-
/* @__PURE__ */
|
|
329
|
-
title:
|
|
330
|
-
description:
|
|
331
|
-
children: /* @__PURE__ */
|
|
328
|
+
/* @__PURE__ */ D(o, {
|
|
329
|
+
title: P("devportal.basicInformation", "Basic Information"),
|
|
330
|
+
description: P("devportal.basicInformationDescription", "Core details about your application"),
|
|
331
|
+
children: /* @__PURE__ */ O("div", {
|
|
332
332
|
className: "space-y-4",
|
|
333
333
|
children: [
|
|
334
|
-
/* @__PURE__ */
|
|
335
|
-
label:
|
|
336
|
-
value:
|
|
337
|
-
onChange: (e) =>
|
|
338
|
-
placeholder:
|
|
334
|
+
/* @__PURE__ */ D(d, {
|
|
335
|
+
label: P("devportal.applicationName", "Application Name"),
|
|
336
|
+
value: X.name,
|
|
337
|
+
onChange: (e) => $("name", e.target.value),
|
|
338
|
+
placeholder: P("devportal.applicationNamePlaceholder", "My Awesome App"),
|
|
339
339
|
required: !0,
|
|
340
|
-
error:
|
|
340
|
+
error: L.name
|
|
341
341
|
}),
|
|
342
|
-
/* @__PURE__ */
|
|
343
|
-
label:
|
|
344
|
-
value:
|
|
345
|
-
onChange: (e) =>
|
|
346
|
-
placeholder:
|
|
342
|
+
/* @__PURE__ */ D(d, {
|
|
343
|
+
label: P("devportal.slug", "Slug"),
|
|
344
|
+
value: X.slug,
|
|
345
|
+
onChange: (e) => $("slug", e.target.value.toLowerCase()),
|
|
346
|
+
placeholder: P("devportal.slugPlaceholder", "my-awesome-app"),
|
|
347
347
|
required: !0,
|
|
348
|
-
error:
|
|
349
|
-
hint:
|
|
348
|
+
error: L.slug,
|
|
349
|
+
hint: P("devportal.slugChangeWarning", "Changing the slug may break existing integrations")
|
|
350
350
|
}),
|
|
351
|
-
/* @__PURE__ */
|
|
352
|
-
label:
|
|
353
|
-
value:
|
|
354
|
-
onChange: (e) =>
|
|
355
|
-
placeholder:
|
|
351
|
+
/* @__PURE__ */ D(m, {
|
|
352
|
+
label: P("devportal.shortDescription", "Short Description"),
|
|
353
|
+
value: X.shortDescription,
|
|
354
|
+
onChange: (e) => $("shortDescription", e.target.value),
|
|
355
|
+
placeholder: P("devportal.shortDescriptionPlaceholder", "A brief description of what your app does"),
|
|
356
356
|
required: !0,
|
|
357
|
-
error:
|
|
358
|
-
hint: `${
|
|
357
|
+
error: L.shortDescription,
|
|
358
|
+
hint: `${X.shortDescription.length}/200 ${P("devportal.characters", "characters")}`,
|
|
359
359
|
rows: 2
|
|
360
360
|
}),
|
|
361
|
-
/* @__PURE__ */
|
|
362
|
-
label:
|
|
363
|
-
value:
|
|
364
|
-
onChange: (e) =>
|
|
365
|
-
placeholder:
|
|
361
|
+
/* @__PURE__ */ D(m, {
|
|
362
|
+
label: P("devportal.fullDescription", "Full Description"),
|
|
363
|
+
value: X.description,
|
|
364
|
+
onChange: (e) => $("description", e.target.value),
|
|
365
|
+
placeholder: P("devportal.fullDescriptionPlaceholder", "Detailed description of your application, features, and use cases..."),
|
|
366
366
|
rows: 6,
|
|
367
|
-
hint:
|
|
367
|
+
hint: P("devportal.markdownSupported", "Markdown formatting is supported")
|
|
368
368
|
})
|
|
369
369
|
]
|
|
370
370
|
})
|
|
371
371
|
}),
|
|
372
|
-
/* @__PURE__ */
|
|
373
|
-
title:
|
|
374
|
-
description:
|
|
372
|
+
/* @__PURE__ */ O(o, {
|
|
373
|
+
title: P("devportal.classification", "Classification"),
|
|
374
|
+
description: P("devportal.classificationDescription", "Categorize your application"),
|
|
375
375
|
children: [
|
|
376
|
-
/* @__PURE__ */
|
|
376
|
+
/* @__PURE__ */ O("div", {
|
|
377
377
|
className: "grid gap-4 sm:grid-cols-2",
|
|
378
378
|
children: [
|
|
379
|
-
/* @__PURE__ */
|
|
380
|
-
label:
|
|
381
|
-
value:
|
|
382
|
-
onChange: (e) =>
|
|
383
|
-
options:
|
|
379
|
+
/* @__PURE__ */ D(f, {
|
|
380
|
+
label: P("devportal.applicationType", "Application Type"),
|
|
381
|
+
value: X.appType,
|
|
382
|
+
onChange: (e) => $("appType", e.target.value),
|
|
383
|
+
options: le,
|
|
384
384
|
required: !0,
|
|
385
|
-
error:
|
|
385
|
+
error: L.appType
|
|
386
386
|
}),
|
|
387
|
-
/* @__PURE__ */
|
|
388
|
-
label:
|
|
389
|
-
value:
|
|
390
|
-
onChange: (e) =>
|
|
391
|
-
options:
|
|
387
|
+
/* @__PURE__ */ D(f, {
|
|
388
|
+
label: P("devportal.category", "Category"),
|
|
389
|
+
value: X.category,
|
|
390
|
+
onChange: (e) => $("category", e.target.value),
|
|
391
|
+
options: de,
|
|
392
392
|
required: !0,
|
|
393
|
-
error:
|
|
393
|
+
error: L.category
|
|
394
394
|
}),
|
|
395
|
-
/* @__PURE__ */
|
|
396
|
-
label:
|
|
397
|
-
value:
|
|
398
|
-
onChange: (e) =>
|
|
399
|
-
options:
|
|
400
|
-
hint:
|
|
395
|
+
/* @__PURE__ */ D(f, {
|
|
396
|
+
label: P("devportal.visibility", "Visibility"),
|
|
397
|
+
value: X.visibility,
|
|
398
|
+
onChange: (e) => $("visibility", e.target.value),
|
|
399
|
+
options: ue,
|
|
400
|
+
hint: P("devportal.visibilityHint", "Controls who can see this app once published. Public apps still require admin review and approval before appearing in the store.")
|
|
401
401
|
})
|
|
402
402
|
]
|
|
403
403
|
}),
|
|
404
|
-
/* @__PURE__ */
|
|
405
|
-
label:
|
|
406
|
-
value:
|
|
407
|
-
onChange: (e) =>
|
|
408
|
-
placeholder:
|
|
404
|
+
/* @__PURE__ */ D(p, {
|
|
405
|
+
label: P("devportal.tags", "Tags"),
|
|
406
|
+
value: X.tags,
|
|
407
|
+
onChange: (e) => $("tags", e),
|
|
408
|
+
placeholder: P("devportal.addTagsPlaceholder", "Add tags (press Enter)")
|
|
409
409
|
}),
|
|
410
|
-
/* @__PURE__ */
|
|
411
|
-
label:
|
|
412
|
-
value:
|
|
413
|
-
onChange: (e) =>
|
|
414
|
-
placeholder:
|
|
410
|
+
/* @__PURE__ */ D(p, {
|
|
411
|
+
label: P("devportal.keywords", "Keywords"),
|
|
412
|
+
value: X.keywords,
|
|
413
|
+
onChange: (e) => $("keywords", e),
|
|
414
|
+
placeholder: P("devportal.addKeywordsPlaceholder", "Add keywords (press Enter)")
|
|
415
415
|
})
|
|
416
416
|
]
|
|
417
417
|
}),
|
|
418
|
-
/* @__PURE__ */
|
|
419
|
-
title:
|
|
420
|
-
description:
|
|
421
|
-
children: /* @__PURE__ */
|
|
418
|
+
/* @__PURE__ */ D(o, {
|
|
419
|
+
title: P("devportal.links", "Links"),
|
|
420
|
+
description: P("devportal.linksDescription", "External resources for your application"),
|
|
421
|
+
children: /* @__PURE__ */ O("div", {
|
|
422
422
|
className: "grid gap-4 sm:grid-cols-2",
|
|
423
423
|
children: [
|
|
424
|
-
/* @__PURE__ */
|
|
425
|
-
label:
|
|
424
|
+
/* @__PURE__ */ D(d, {
|
|
425
|
+
label: P("devportal.websiteUrl", "Website URL"),
|
|
426
426
|
type: "url",
|
|
427
|
-
value:
|
|
428
|
-
onChange: (e) =>
|
|
429
|
-
placeholder:
|
|
427
|
+
value: X.websiteUrl,
|
|
428
|
+
onChange: (e) => $("websiteUrl", e.target.value),
|
|
429
|
+
placeholder: P("devportal.websiteUrlPlaceholder", "https://example.com")
|
|
430
430
|
}),
|
|
431
|
-
/* @__PURE__ */
|
|
432
|
-
label:
|
|
431
|
+
/* @__PURE__ */ D(d, {
|
|
432
|
+
label: P("devportal.documentationUrl", "Documentation URL"),
|
|
433
433
|
type: "url",
|
|
434
|
-
value:
|
|
435
|
-
onChange: (e) =>
|
|
436
|
-
placeholder:
|
|
434
|
+
value: X.documentationUrl,
|
|
435
|
+
onChange: (e) => $("documentationUrl", e.target.value),
|
|
436
|
+
placeholder: P("devportal.documentationUrlPlaceholder", "https://docs.example.com")
|
|
437
437
|
}),
|
|
438
|
-
/* @__PURE__ */
|
|
439
|
-
label:
|
|
438
|
+
/* @__PURE__ */ D(d, {
|
|
439
|
+
label: P("devportal.supportUrl", "Support URL"),
|
|
440
440
|
type: "url",
|
|
441
|
-
value:
|
|
442
|
-
onChange: (e) =>
|
|
443
|
-
placeholder:
|
|
441
|
+
value: X.supportUrl,
|
|
442
|
+
onChange: (e) => $("supportUrl", e.target.value),
|
|
443
|
+
placeholder: P("devportal.supportUrlPlaceholder", "https://support.example.com")
|
|
444
444
|
}),
|
|
445
|
-
/* @__PURE__ */
|
|
446
|
-
label:
|
|
445
|
+
/* @__PURE__ */ D(d, {
|
|
446
|
+
label: P("devportal.githubUrl", "GitHub URL"),
|
|
447
447
|
type: "url",
|
|
448
|
-
value:
|
|
449
|
-
onChange: (e) =>
|
|
450
|
-
placeholder:
|
|
448
|
+
value: X.githubUrl,
|
|
449
|
+
onChange: (e) => $("githubUrl", e.target.value),
|
|
450
|
+
placeholder: P("devportal.githubUrlPlaceholder", "https://github.com/org/repo")
|
|
451
451
|
}),
|
|
452
|
-
/* @__PURE__ */
|
|
453
|
-
label:
|
|
452
|
+
/* @__PURE__ */ D(d, {
|
|
453
|
+
label: P("devportal.privacyPolicyUrl", "Privacy Policy URL"),
|
|
454
454
|
type: "url",
|
|
455
|
-
value:
|
|
456
|
-
onChange: (e) =>
|
|
457
|
-
placeholder:
|
|
455
|
+
value: X.privacyPolicyUrl,
|
|
456
|
+
onChange: (e) => $("privacyPolicyUrl", e.target.value),
|
|
457
|
+
placeholder: P("devportal.privacyPolicyUrlPlaceholder", "https://example.com/privacy")
|
|
458
458
|
}),
|
|
459
|
-
/* @__PURE__ */
|
|
460
|
-
label:
|
|
459
|
+
/* @__PURE__ */ D(d, {
|
|
460
|
+
label: P("devportal.termsOfServiceUrl", "Terms of Service URL"),
|
|
461
461
|
type: "url",
|
|
462
|
-
value:
|
|
463
|
-
onChange: (e) =>
|
|
464
|
-
placeholder:
|
|
462
|
+
value: X.termsOfServiceUrl,
|
|
463
|
+
onChange: (e) => $("termsOfServiceUrl", e.target.value),
|
|
464
|
+
placeholder: P("devportal.termsOfServiceUrlPlaceholder", "https://example.com/terms")
|
|
465
465
|
})
|
|
466
466
|
]
|
|
467
467
|
})
|
|
468
468
|
}),
|
|
469
|
-
/* @__PURE__ */
|
|
470
|
-
title:
|
|
471
|
-
description:
|
|
472
|
-
children: /* @__PURE__ */
|
|
469
|
+
/* @__PURE__ */ D(o, {
|
|
470
|
+
title: P("devportal.settings", "Settings"),
|
|
471
|
+
description: P("devportal.settingsDescription", "Additional configuration options"),
|
|
472
|
+
children: /* @__PURE__ */ D("div", {
|
|
473
473
|
className: "space-y-4",
|
|
474
|
-
children: /* @__PURE__ */
|
|
475
|
-
label:
|
|
476
|
-
description:
|
|
477
|
-
checked:
|
|
478
|
-
onChange: (e) =>
|
|
474
|
+
children: /* @__PURE__ */ D(u, {
|
|
475
|
+
label: P("devportal.requireWorkspaceAdminApproval", "Require workspace admin approval"),
|
|
476
|
+
description: P("devportal.requireWorkspaceAdminApprovalDescription", "When enabled, workspace admins must approve installations before users can access this app"),
|
|
477
|
+
checked: X.requiresApproval,
|
|
478
|
+
onChange: (e) => $("requiresApproval", e.target.checked)
|
|
479
479
|
})
|
|
480
480
|
})
|
|
481
481
|
}),
|
|
482
|
-
/* @__PURE__ */
|
|
482
|
+
/* @__PURE__ */ O("div", {
|
|
483
483
|
className: "flex flex-col gap-4 border-t pt-6",
|
|
484
|
-
children: [/* @__PURE__ */
|
|
484
|
+
children: [/* @__PURE__ */ O("div", {
|
|
485
485
|
className: "flex items-center justify-between",
|
|
486
|
-
children: [/* @__PURE__ */
|
|
486
|
+
children: [/* @__PURE__ */ D("div", {
|
|
487
487
|
className: "flex items-center gap-2",
|
|
488
|
-
children: we && /* @__PURE__ */
|
|
488
|
+
children: we && /* @__PURE__ */ O("button", {
|
|
489
489
|
type: "button",
|
|
490
|
-
onClick:
|
|
491
|
-
disabled:
|
|
490
|
+
onClick: Ce,
|
|
491
|
+
disabled: F || W,
|
|
492
492
|
className: "inline-flex items-center gap-2 rounded-md border border-primary bg-primary/10 px-4 py-2 text-sm font-medium text-primary hover:bg-primary/20 transition-colors disabled:opacity-50",
|
|
493
|
-
children: [/* @__PURE__ */
|
|
493
|
+
children: [/* @__PURE__ */ D(oe, { size: 16 }), P("devportal.submitForReview", "Submit for Review")]
|
|
494
494
|
})
|
|
495
|
-
}), /* @__PURE__ */
|
|
495
|
+
}), /* @__PURE__ */ D("button", {
|
|
496
496
|
type: "submit",
|
|
497
|
-
disabled:
|
|
498
|
-
"aria-disabled": !
|
|
497
|
+
disabled: F || !W || !M,
|
|
498
|
+
"aria-disabled": !M,
|
|
499
499
|
className: "inline-flex items-center gap-2 rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors disabled:opacity-50",
|
|
500
|
-
children:
|
|
500
|
+
children: F ? /* @__PURE__ */ O(E, { children: [/* @__PURE__ */ D("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }), P("devportal.saving", "Saving...")] }) : /* @__PURE__ */ O(E, { children: [/* @__PURE__ */ D(ae, { size: 16 }), P("devportal.saveChanges", "Save Changes")] })
|
|
501
501
|
})]
|
|
502
|
-
}), /* @__PURE__ */
|
|
502
|
+
}), /* @__PURE__ */ O("div", {
|
|
503
503
|
className: "rounded-lg border border-border-subtle bg-status-error-bg-subtle p-4",
|
|
504
504
|
children: [
|
|
505
|
-
/* @__PURE__ */
|
|
505
|
+
/* @__PURE__ */ D("h3", {
|
|
506
506
|
className: "text-sm font-medium text-status-error-text",
|
|
507
|
-
children:
|
|
507
|
+
children: P("devportal.dangerZone", "Danger Zone")
|
|
508
508
|
}),
|
|
509
|
-
/* @__PURE__ */
|
|
509
|
+
/* @__PURE__ */ D("p", {
|
|
510
510
|
className: "mt-1 text-sm text-status-error-text",
|
|
511
|
-
children:
|
|
511
|
+
children: P("devportal.dangerZoneWarning", "These actions are irreversible. Please proceed with caution.")
|
|
512
512
|
}),
|
|
513
|
-
/* @__PURE__ */
|
|
513
|
+
/* @__PURE__ */ O("div", {
|
|
514
514
|
className: "mt-4 flex gap-3",
|
|
515
515
|
children: [
|
|
516
|
-
Te && /* @__PURE__ */
|
|
516
|
+
Te && /* @__PURE__ */ O("button", {
|
|
517
517
|
type: "button",
|
|
518
|
-
onClick: () =>
|
|
518
|
+
onClick: () => H(!0),
|
|
519
519
|
className: "inline-flex items-center gap-2 rounded-md border border-accent-orange bg-bg-surface px-3 py-1.5 text-sm font-medium text-accent-orange hover:bg-accent-orange-subtle transition-colors",
|
|
520
|
-
children: [/* @__PURE__ */
|
|
520
|
+
children: [/* @__PURE__ */ D(T, { size: 14 }), P("devportal.deprecateApp", "Deprecate App")]
|
|
521
521
|
}),
|
|
522
|
-
Ee && /* @__PURE__ */
|
|
522
|
+
Ee && /* @__PURE__ */ O("button", {
|
|
523
523
|
type: "button",
|
|
524
|
-
onClick: () =>
|
|
524
|
+
onClick: () => U(!0),
|
|
525
525
|
className: "inline-flex items-center gap-2 rounded-md border border-accent-orange bg-bg-surface px-3 py-1.5 text-sm font-medium text-accent-orange hover:bg-accent-orange-subtle transition-colors",
|
|
526
|
-
children: [/* @__PURE__ */
|
|
526
|
+
children: [/* @__PURE__ */ D(ie, { size: 14 }), P("devportal.deactivateApp", "Deactivate App")]
|
|
527
527
|
}),
|
|
528
|
-
/* @__PURE__ */
|
|
528
|
+
/* @__PURE__ */ O("button", {
|
|
529
529
|
type: "button",
|
|
530
|
-
onClick: () =>
|
|
531
|
-
disabled: !
|
|
532
|
-
"aria-disabled": !
|
|
530
|
+
onClick: () => B(!0),
|
|
531
|
+
disabled: !N,
|
|
532
|
+
"aria-disabled": !N,
|
|
533
533
|
className: "inline-flex items-center gap-2 rounded-md border border-status-error-bg bg-bg-surface px-3 py-1.5 text-sm font-medium text-status-error-text hover:bg-status-error-bg-subtle transition-colors disabled:opacity-50",
|
|
534
|
-
children: [/* @__PURE__ */
|
|
534
|
+
children: [/* @__PURE__ */ D(se, { size: 14 }), P("devportal.deleteApp", "Delete App")]
|
|
535
535
|
})
|
|
536
536
|
]
|
|
537
537
|
})
|
|
@@ -540,38 +540,38 @@ var O = () => {
|
|
|
540
540
|
})
|
|
541
541
|
]
|
|
542
542
|
}),
|
|
543
|
-
/* @__PURE__ */
|
|
544
|
-
open:
|
|
545
|
-
onOpenChange:
|
|
546
|
-
title:
|
|
547
|
-
description:
|
|
548
|
-
confirmLabel:
|
|
543
|
+
/* @__PURE__ */ D(h, {
|
|
544
|
+
open: z,
|
|
545
|
+
onOpenChange: B,
|
|
546
|
+
title: P("devportal.deleteApplication", "Delete Application"),
|
|
547
|
+
description: P("devportal.deleteApplicationConfirm", `Are you sure you want to delete "${Y.name}"? This action cannot be undone. All OAuth clients, API keys, webhooks, and analytics data will be permanently deleted.`),
|
|
548
|
+
confirmLabel: P("devportal.deleteApplication", "Delete Application"),
|
|
549
549
|
variant: "destructive",
|
|
550
|
-
onConfirm:
|
|
550
|
+
onConfirm: be
|
|
551
551
|
}),
|
|
552
|
-
/* @__PURE__ */
|
|
553
|
-
open:
|
|
554
|
-
onOpenChange:
|
|
555
|
-
title:
|
|
556
|
-
description:
|
|
557
|
-
confirmLabel:
|
|
552
|
+
/* @__PURE__ */ D(h, {
|
|
553
|
+
open: V,
|
|
554
|
+
onOpenChange: H,
|
|
555
|
+
title: P("devportal.deprecateApplication", "Deprecate Application"),
|
|
556
|
+
description: P("devportal.deprecateApplicationConfirm", `Are you sure you want to deprecate "${Y.name}"? Existing users will still be able to use the app, but it will no longer be visible in the marketplace and new installations will be disabled.`),
|
|
557
|
+
confirmLabel: P("devportal.deprecateApplication", "Deprecate Application"),
|
|
558
558
|
variant: "warning",
|
|
559
|
-
onConfirm:
|
|
559
|
+
onConfirm: xe
|
|
560
560
|
}),
|
|
561
|
-
/* @__PURE__ */
|
|
562
|
-
open:
|
|
563
|
-
onOpenChange:
|
|
564
|
-
title:
|
|
565
|
-
description:
|
|
566
|
-
confirmLabel:
|
|
561
|
+
/* @__PURE__ */ D(h, {
|
|
562
|
+
open: pe,
|
|
563
|
+
onOpenChange: U,
|
|
564
|
+
title: P("devportal.deactivateApplication", "Deactivate Application"),
|
|
565
|
+
description: P("devportal.deactivateApplicationConfirm", `Are you sure you want to deactivate "${Y.name}"? This will revoke all active tokens and disable the app from the auth-svc layer. The app will no longer be able to authenticate or act on behalf of users.`),
|
|
566
|
+
confirmLabel: P("devportal.deactivateApplication", "Deactivate Application"),
|
|
567
567
|
variant: "destructive",
|
|
568
|
-
onConfirm:
|
|
568
|
+
onConfirm: Se
|
|
569
569
|
})
|
|
570
570
|
]
|
|
571
571
|
})
|
|
572
572
|
});
|
|
573
573
|
};
|
|
574
574
|
//#endregion
|
|
575
|
-
export {
|
|
575
|
+
export { k as EditApplicationPage };
|
|
576
576
|
|
|
577
577
|
//# sourceMappingURL=EditApplicationPage.js.map
|