@burdenoff/microfe-devportal 2026.623.5 → 2026.623.7
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/DevportalRoutes.js +123 -108
- package/dist/devportal/DevportalRoutes.js.map +1 -1
- package/dist/devportal/components/SectionNav.js +71 -5
- package/dist/devportal/components/SectionNav.js.map +1 -0
- package/dist/devportal/components/index.js +1 -1
- package/dist/devportal/hooks/useGraphQL.js +1 -1
- package/dist/devportal/pages/AdminReviewPage.js +39 -39
- package/dist/devportal/pages/AnalyticsDashboardPage.js +54 -54
- package/dist/devportal/pages/AnalyticsDashboardPage.js.map +1 -1
- package/dist/devportal/pages/ApiKeysPage.js +53 -53
- package/dist/devportal/pages/ApiKeysPage.js.map +1 -1
- package/dist/devportal/pages/AppLogsPage.js +9 -9
- package/dist/devportal/pages/ApplicationDetailPage.js +462 -462
- package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.js +120 -120
- package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationsPage.js +73 -73
- 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 +18 -18
- package/dist/devportal/pages/CreateOrganizationPage.js +12 -12
- package/dist/devportal/pages/CreateWebhookPage.js +23 -23
- package/dist/devportal/pages/DashboardPage.js +23 -23
- 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 +15 -15
- package/dist/devportal/pages/OAuthClientsPage.js +14 -14
- package/dist/devportal/pages/OrganizationDetailPage.js +84 -84
- package/dist/devportal/pages/OrganizationMembersPage.js +260 -260
- package/dist/devportal/pages/OrganizationMembersPage.js.map +1 -1
- package/dist/devportal/pages/OrganizationsPage.js +16 -16
- package/dist/devportal/pages/PublishPage.js +16 -16
- package/dist/devportal/pages/PublisherProfilePage.js +18 -18
- package/dist/devportal/pages/RevenueDashboardPage.js +29 -29
- 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 +133 -133
- package/dist/devportal/pages/WebhooksPage.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: "ai",
|
|
44
44
|
label: "AI & Automation"
|
|
@@ -68,7 +68,7 @@ var ue = Object.entries(a).map(([e, t]) => ({
|
|
|
68
68
|
label: "Triggers"
|
|
69
69
|
}
|
|
70
70
|
];
|
|
71
|
-
function
|
|
71
|
+
function fe(e) {
|
|
72
72
|
return e ? {
|
|
73
73
|
id: e.id,
|
|
74
74
|
name: e.name,
|
|
@@ -109,21 +109,21 @@ function pe(e) {
|
|
|
109
109
|
updatedAt: e.updatedAt
|
|
110
110
|
} : null;
|
|
111
111
|
}
|
|
112
|
-
var
|
|
113
|
-
let { navigate:
|
|
114
|
-
let n =
|
|
112
|
+
var k = () => {
|
|
113
|
+
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) => {
|
|
114
|
+
let n = j(e);
|
|
115
115
|
return n === e ? t : n;
|
|
116
|
-
}, [
|
|
117
|
-
variables: { id:
|
|
118
|
-
skip: !
|
|
119
|
-
}), [
|
|
116
|
+
}, [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({
|
|
117
|
+
variables: { id: A },
|
|
118
|
+
skip: !A
|
|
119
|
+
}), [J] = i(), [he] = te(), [ge] = r(), [_e] = ee(), Y = fe(K?.application);
|
|
120
120
|
y(() => {
|
|
121
|
-
let e =
|
|
122
|
-
if (!
|
|
121
|
+
let e = Y?.name;
|
|
122
|
+
if (!A || !e) return;
|
|
123
123
|
let t = window.__breadcrumbRegistry;
|
|
124
|
-
return t?.register(
|
|
125
|
-
}, [
|
|
126
|
-
let [
|
|
124
|
+
return t?.register(A, e), () => t?.unregister(A);
|
|
125
|
+
}, [A, Y?.name]);
|
|
126
|
+
let [X, Z] = b({
|
|
127
127
|
name: "",
|
|
128
128
|
slug: "",
|
|
129
129
|
shortDescription: "",
|
|
@@ -142,376 +142,376 @@ var O = () => {
|
|
|
142
142
|
requiresApproval: !1
|
|
143
143
|
});
|
|
144
144
|
y(() => {
|
|
145
|
-
|
|
146
|
-
name:
|
|
147
|
-
slug:
|
|
148
|
-
shortDescription:
|
|
149
|
-
description:
|
|
150
|
-
appType:
|
|
151
|
-
visibility:
|
|
152
|
-
category:
|
|
153
|
-
tags:
|
|
154
|
-
keywords:
|
|
155
|
-
websiteUrl:
|
|
156
|
-
documentationUrl:
|
|
157
|
-
supportUrl:
|
|
158
|
-
privacyPolicyUrl:
|
|
159
|
-
termsOfServiceUrl:
|
|
160
|
-
githubUrl:
|
|
161
|
-
requiresApproval:
|
|
162
|
-
}),
|
|
163
|
-
}, [
|
|
164
|
-
let
|
|
165
|
-
|
|
166
|
-
},
|
|
167
|
-
|
|
145
|
+
Y && (Z({
|
|
146
|
+
name: Y.name,
|
|
147
|
+
slug: Y.slug,
|
|
148
|
+
shortDescription: Y.shortDescription || "",
|
|
149
|
+
description: Y.description || "",
|
|
150
|
+
appType: Y.appType,
|
|
151
|
+
visibility: Y.visibility,
|
|
152
|
+
category: Y.category || "",
|
|
153
|
+
tags: Y.tags,
|
|
154
|
+
keywords: Y.keywords,
|
|
155
|
+
websiteUrl: Y.websiteUrl || "",
|
|
156
|
+
documentationUrl: Y.documentationUrl || "",
|
|
157
|
+
supportUrl: Y.supportUrl || "",
|
|
158
|
+
privacyPolicyUrl: Y.privacyPolicyUrl || "",
|
|
159
|
+
termsOfServiceUrl: Y.termsOfServiceUrl || "",
|
|
160
|
+
githubUrl: Y.githubUrl || "",
|
|
161
|
+
requiresApproval: Y.requiresApproval
|
|
162
|
+
}), G(!1));
|
|
163
|
+
}, [K?.application]);
|
|
164
|
+
let Q = (e) => {
|
|
165
|
+
s?.(`${k}${e}`);
|
|
166
|
+
}, $ = (e, t) => {
|
|
167
|
+
Z((n) => ({
|
|
168
168
|
...n,
|
|
169
169
|
[e]: t
|
|
170
|
-
})),
|
|
170
|
+
})), G(!0), L[e] && R((t) => ({
|
|
171
171
|
...t,
|
|
172
172
|
[e]: void 0
|
|
173
173
|
}));
|
|
174
|
-
},
|
|
174
|
+
}, ve = () => {
|
|
175
175
|
let e = {};
|
|
176
|
-
return
|
|
177
|
-
},
|
|
178
|
-
if (e.preventDefault(), !(!
|
|
179
|
-
|
|
176
|
+
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;
|
|
177
|
+
}, ye = async (e) => {
|
|
178
|
+
if (e.preventDefault(), !(!ve() || !Y)) {
|
|
179
|
+
I(!0);
|
|
180
180
|
try {
|
|
181
|
-
await
|
|
182
|
-
id:
|
|
181
|
+
await J({ variables: {
|
|
182
|
+
id: Y.id,
|
|
183
183
|
input: {
|
|
184
|
-
name:
|
|
185
|
-
shortDescription:
|
|
186
|
-
description:
|
|
187
|
-
appType:
|
|
188
|
-
visibility:
|
|
189
|
-
category:
|
|
190
|
-
tags:
|
|
191
|
-
keywords:
|
|
192
|
-
websiteUrl:
|
|
193
|
-
documentationUrl:
|
|
194
|
-
supportUrl:
|
|
195
|
-
privacyPolicyUrl:
|
|
196
|
-
termsOfServiceUrl:
|
|
197
|
-
githubUrl:
|
|
184
|
+
name: X.name,
|
|
185
|
+
shortDescription: X.shortDescription,
|
|
186
|
+
description: X.description,
|
|
187
|
+
appType: X.appType,
|
|
188
|
+
visibility: X.visibility,
|
|
189
|
+
category: X.category,
|
|
190
|
+
tags: X.tags,
|
|
191
|
+
keywords: X.keywords,
|
|
192
|
+
websiteUrl: X.websiteUrl || null,
|
|
193
|
+
documentationUrl: X.documentationUrl || null,
|
|
194
|
+
supportUrl: X.supportUrl || null,
|
|
195
|
+
privacyPolicyUrl: X.privacyPolicyUrl || null,
|
|
196
|
+
termsOfServiceUrl: X.termsOfServiceUrl || null,
|
|
197
|
+
githubUrl: X.githubUrl || null
|
|
198
198
|
}
|
|
199
|
-
} }),
|
|
199
|
+
} }), G(!1);
|
|
200
200
|
} catch (e) {
|
|
201
201
|
console.error("Failed to update application:", e);
|
|
202
202
|
} finally {
|
|
203
|
-
|
|
203
|
+
I(!1);
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
|
-
},
|
|
207
|
-
if (
|
|
208
|
-
|
|
206
|
+
}, be = async () => {
|
|
207
|
+
if (Y) {
|
|
208
|
+
c("medium");
|
|
209
209
|
try {
|
|
210
|
-
await
|
|
210
|
+
await he({ variables: { id: Y.id } }), l("success"), Q("/apps");
|
|
211
211
|
} catch (e) {
|
|
212
|
-
|
|
212
|
+
l("error"), console.error("Failed to delete application:", e);
|
|
213
213
|
}
|
|
214
214
|
}
|
|
215
|
-
},
|
|
216
|
-
if (
|
|
217
|
-
await
|
|
218
|
-
id:
|
|
215
|
+
}, xe = async () => {
|
|
216
|
+
if (Y) try {
|
|
217
|
+
await J({ variables: {
|
|
218
|
+
id: Y.id,
|
|
219
219
|
input: { visibility: "PRIVATE" }
|
|
220
|
-
} }),
|
|
220
|
+
} }), H(!1);
|
|
221
221
|
} catch (e) {
|
|
222
222
|
console.error("Failed to deprecate application:", e);
|
|
223
223
|
}
|
|
224
|
-
},
|
|
225
|
-
if (
|
|
226
|
-
await
|
|
224
|
+
}, Se = async () => {
|
|
225
|
+
if (Y) try {
|
|
226
|
+
await _e({ variables: { id: Y.id } }), U(!1), Q("/apps");
|
|
227
227
|
} catch (e) {
|
|
228
228
|
console.error("Failed to deactivate application:", e);
|
|
229
229
|
}
|
|
230
|
-
},
|
|
231
|
-
if (
|
|
232
|
-
|
|
230
|
+
}, Ce = async () => {
|
|
231
|
+
if (Y) try {
|
|
232
|
+
I(!0), await ge({ variables: { id: Y.id } });
|
|
233
233
|
} catch (e) {
|
|
234
234
|
console.error("Failed to submit for review:", e);
|
|
235
235
|
} finally {
|
|
236
|
-
|
|
236
|
+
I(!1);
|
|
237
237
|
}
|
|
238
238
|
};
|
|
239
|
-
if (
|
|
240
|
-
if (
|
|
241
|
-
title:
|
|
242
|
-
backLink: `${
|
|
243
|
-
backLabel:
|
|
244
|
-
children: /* @__PURE__ */
|
|
239
|
+
if (me) return /* @__PURE__ */ D(t, { message: P("devportal.loadingApplication", "Loading application...") });
|
|
240
|
+
if (q) return /* @__PURE__ */ D(a, {
|
|
241
|
+
title: P("devportal.error", "Error"),
|
|
242
|
+
backLink: `${k}/apps`,
|
|
243
|
+
backLabel: P("devportal.backToApplications", "Back to Applications"),
|
|
244
|
+
children: /* @__PURE__ */ O("div", {
|
|
245
245
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
246
246
|
children: [
|
|
247
|
-
/* @__PURE__ */
|
|
247
|
+
/* @__PURE__ */ D(S, {
|
|
248
248
|
size: 48,
|
|
249
249
|
className: "text-destructive mb-4"
|
|
250
250
|
}),
|
|
251
|
-
/* @__PURE__ */
|
|
251
|
+
/* @__PURE__ */ D("h3", {
|
|
252
252
|
className: "text-lg font-semibold mb-2",
|
|
253
|
-
children:
|
|
253
|
+
children: P("devportal.failedToLoadApplication", "Failed to load application")
|
|
254
254
|
}),
|
|
255
|
-
/* @__PURE__ */
|
|
255
|
+
/* @__PURE__ */ D("p", {
|
|
256
256
|
className: "text-sm text-muted-foreground",
|
|
257
|
-
children:
|
|
257
|
+
children: q.message
|
|
258
258
|
})
|
|
259
259
|
]
|
|
260
260
|
})
|
|
261
261
|
});
|
|
262
|
-
if (!
|
|
263
|
-
title:
|
|
264
|
-
backLink: `${
|
|
265
|
-
backLabel:
|
|
266
|
-
children: /* @__PURE__ */
|
|
267
|
-
icon: /* @__PURE__ */
|
|
268
|
-
title:
|
|
269
|
-
description:
|
|
262
|
+
if (!Y) return /* @__PURE__ */ D(a, {
|
|
263
|
+
title: P("devportal.notFound", "Not Found"),
|
|
264
|
+
backLink: `${k}/apps`,
|
|
265
|
+
backLabel: P("devportal.backToApplications", "Back to Applications"),
|
|
266
|
+
children: /* @__PURE__ */ D(n, {
|
|
267
|
+
icon: /* @__PURE__ */ D(w, { size: 48 }),
|
|
268
|
+
title: P("devportal.applicationNotFound", "Application not found"),
|
|
269
|
+
description: P("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
|
|
270
270
|
})
|
|
271
271
|
});
|
|
272
|
-
let we =
|
|
273
|
-
return /* @__PURE__ */
|
|
272
|
+
let we = Y.status === "DRAFT" || Y.status === "REJECTED", Te = Y.status === "PUBLISHED", Ee = Y.status === "ACTIVE" || Y.status === "PUBLISHED";
|
|
273
|
+
return /* @__PURE__ */ D(g, {
|
|
274
274
|
permission: _.APP_UPDATE,
|
|
275
|
-
children: /* @__PURE__ */
|
|
276
|
-
title: `${
|
|
277
|
-
description:
|
|
278
|
-
backLink: `${
|
|
279
|
-
backLabel:
|
|
280
|
-
actions: /* @__PURE__ */
|
|
275
|
+
children: /* @__PURE__ */ O(a, {
|
|
276
|
+
title: `${P("devportal.editAppTitlePrefix", "Edit:")} ${Y.name}`,
|
|
277
|
+
description: P("devportal.editAppDescription", "Update your application settings"),
|
|
278
|
+
backLink: `${k}/apps/${Y.id}`,
|
|
279
|
+
backLabel: P("devportal.backToApplication", "Back to Application"),
|
|
280
|
+
actions: /* @__PURE__ */ D("div", {
|
|
281
281
|
className: "flex items-center gap-2",
|
|
282
|
-
children: /* @__PURE__ */
|
|
283
|
-
status:
|
|
282
|
+
children: /* @__PURE__ */ D(re, {
|
|
283
|
+
status: Y.status,
|
|
284
284
|
type: "app"
|
|
285
285
|
})
|
|
286
286
|
}),
|
|
287
287
|
children: [
|
|
288
|
-
/* @__PURE__ */
|
|
289
|
-
onSubmit:
|
|
288
|
+
/* @__PURE__ */ O("form", {
|
|
289
|
+
onSubmit: ye,
|
|
290
290
|
className: "space-y-8 max-w-3xl",
|
|
291
291
|
children: [
|
|
292
|
-
|
|
292
|
+
Y.status === "PUBLISHED" && /* @__PURE__ */ O("div", {
|
|
293
293
|
className: "rounded-lg border border-border-subtle bg-status-warning-bg-subtle p-4 flex gap-3",
|
|
294
|
-
children: [/* @__PURE__ */
|
|
294
|
+
children: [/* @__PURE__ */ D(C, {
|
|
295
295
|
size: 20,
|
|
296
296
|
className: "text-status-warning-text flex-shrink-0 mt-0.5"
|
|
297
|
-
}), /* @__PURE__ */
|
|
297
|
+
}), /* @__PURE__ */ O("div", {
|
|
298
298
|
className: "text-sm text-status-warning-text",
|
|
299
|
-
children: [/* @__PURE__ */
|
|
299
|
+
children: [/* @__PURE__ */ D("p", {
|
|
300
300
|
className: "font-medium",
|
|
301
|
-
children:
|
|
302
|
-
}), /* @__PURE__ */
|
|
301
|
+
children: P("devportal.appIsPublished", "This application is published")
|
|
302
|
+
}), /* @__PURE__ */ D("p", {
|
|
303
303
|
className: "mt-1 text-status-warning-text",
|
|
304
|
-
children:
|
|
304
|
+
children: P("devportal.publishedAppChangesWarning", "Changes to published apps may require re-review. Major changes will put the app back into review status.")
|
|
305
305
|
})]
|
|
306
306
|
})]
|
|
307
307
|
}),
|
|
308
|
-
/* @__PURE__ */
|
|
309
|
-
title:
|
|
310
|
-
description:
|
|
311
|
-
children: /* @__PURE__ */
|
|
308
|
+
/* @__PURE__ */ D(o, {
|
|
309
|
+
title: P("devportal.basicInformation", "Basic Information"),
|
|
310
|
+
description: P("devportal.basicInformationDescription", "Core details about your application"),
|
|
311
|
+
children: /* @__PURE__ */ O("div", {
|
|
312
312
|
className: "space-y-4",
|
|
313
313
|
children: [
|
|
314
|
-
/* @__PURE__ */
|
|
315
|
-
label:
|
|
316
|
-
value:
|
|
317
|
-
onChange: (e) =>
|
|
318
|
-
placeholder:
|
|
314
|
+
/* @__PURE__ */ D(d, {
|
|
315
|
+
label: P("devportal.applicationName", "Application Name"),
|
|
316
|
+
value: X.name,
|
|
317
|
+
onChange: (e) => $("name", e.target.value),
|
|
318
|
+
placeholder: P("devportal.applicationNamePlaceholder", "My Awesome App"),
|
|
319
319
|
required: !0,
|
|
320
|
-
error:
|
|
320
|
+
error: L.name
|
|
321
321
|
}),
|
|
322
|
-
/* @__PURE__ */
|
|
323
|
-
label:
|
|
324
|
-
value:
|
|
325
|
-
onChange: (e) =>
|
|
326
|
-
placeholder:
|
|
322
|
+
/* @__PURE__ */ D(d, {
|
|
323
|
+
label: P("devportal.slug", "Slug"),
|
|
324
|
+
value: X.slug,
|
|
325
|
+
onChange: (e) => $("slug", e.target.value.toLowerCase()),
|
|
326
|
+
placeholder: P("devportal.slugPlaceholder", "my-awesome-app"),
|
|
327
327
|
required: !0,
|
|
328
|
-
error:
|
|
329
|
-
hint:
|
|
328
|
+
error: L.slug,
|
|
329
|
+
hint: P("devportal.slugChangeWarning", "Changing the slug may break existing integrations")
|
|
330
330
|
}),
|
|
331
|
-
/* @__PURE__ */
|
|
332
|
-
label:
|
|
333
|
-
value:
|
|
334
|
-
onChange: (e) =>
|
|
335
|
-
placeholder:
|
|
331
|
+
/* @__PURE__ */ D(m, {
|
|
332
|
+
label: P("devportal.shortDescription", "Short Description"),
|
|
333
|
+
value: X.shortDescription,
|
|
334
|
+
onChange: (e) => $("shortDescription", e.target.value),
|
|
335
|
+
placeholder: P("devportal.shortDescriptionPlaceholder", "A brief description of what your app does"),
|
|
336
336
|
required: !0,
|
|
337
|
-
error:
|
|
338
|
-
hint: `${
|
|
337
|
+
error: L.shortDescription,
|
|
338
|
+
hint: `${X.shortDescription.length}/200 ${P("devportal.characters", "characters")}`,
|
|
339
339
|
rows: 2
|
|
340
340
|
}),
|
|
341
|
-
/* @__PURE__ */
|
|
342
|
-
label:
|
|
343
|
-
value:
|
|
344
|
-
onChange: (e) =>
|
|
345
|
-
placeholder:
|
|
341
|
+
/* @__PURE__ */ D(m, {
|
|
342
|
+
label: P("devportal.fullDescription", "Full Description"),
|
|
343
|
+
value: X.description,
|
|
344
|
+
onChange: (e) => $("description", e.target.value),
|
|
345
|
+
placeholder: P("devportal.fullDescriptionPlaceholder", "Detailed description of your application, features, and use cases..."),
|
|
346
346
|
rows: 6,
|
|
347
|
-
hint:
|
|
347
|
+
hint: P("devportal.markdownSupported", "Markdown formatting is supported")
|
|
348
348
|
})
|
|
349
349
|
]
|
|
350
350
|
})
|
|
351
351
|
}),
|
|
352
|
-
/* @__PURE__ */
|
|
353
|
-
title:
|
|
354
|
-
description:
|
|
352
|
+
/* @__PURE__ */ O(o, {
|
|
353
|
+
title: P("devportal.classification", "Classification"),
|
|
354
|
+
description: P("devportal.classificationDescription", "Categorize your application"),
|
|
355
355
|
children: [
|
|
356
|
-
/* @__PURE__ */
|
|
356
|
+
/* @__PURE__ */ O("div", {
|
|
357
357
|
className: "grid gap-4 sm:grid-cols-2",
|
|
358
358
|
children: [
|
|
359
|
-
/* @__PURE__ */
|
|
360
|
-
label:
|
|
361
|
-
value:
|
|
362
|
-
onChange: (e) =>
|
|
363
|
-
options:
|
|
359
|
+
/* @__PURE__ */ D(f, {
|
|
360
|
+
label: P("devportal.applicationType", "Application Type"),
|
|
361
|
+
value: X.appType,
|
|
362
|
+
onChange: (e) => $("appType", e.target.value),
|
|
363
|
+
options: le,
|
|
364
364
|
required: !0,
|
|
365
|
-
error:
|
|
365
|
+
error: L.appType
|
|
366
366
|
}),
|
|
367
|
-
/* @__PURE__ */
|
|
368
|
-
label:
|
|
369
|
-
value:
|
|
370
|
-
onChange: (e) =>
|
|
371
|
-
options:
|
|
367
|
+
/* @__PURE__ */ D(f, {
|
|
368
|
+
label: P("devportal.category", "Category"),
|
|
369
|
+
value: X.category,
|
|
370
|
+
onChange: (e) => $("category", e.target.value),
|
|
371
|
+
options: de,
|
|
372
372
|
required: !0,
|
|
373
|
-
error:
|
|
373
|
+
error: L.category
|
|
374
374
|
}),
|
|
375
|
-
/* @__PURE__ */
|
|
376
|
-
label:
|
|
377
|
-
value:
|
|
378
|
-
onChange: (e) =>
|
|
379
|
-
options:
|
|
380
|
-
hint:
|
|
375
|
+
/* @__PURE__ */ D(f, {
|
|
376
|
+
label: P("devportal.visibility", "Visibility"),
|
|
377
|
+
value: X.visibility,
|
|
378
|
+
onChange: (e) => $("visibility", e.target.value),
|
|
379
|
+
options: ue,
|
|
380
|
+
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.")
|
|
381
381
|
})
|
|
382
382
|
]
|
|
383
383
|
}),
|
|
384
|
-
/* @__PURE__ */
|
|
385
|
-
label:
|
|
386
|
-
value:
|
|
387
|
-
onChange: (e) =>
|
|
388
|
-
placeholder:
|
|
384
|
+
/* @__PURE__ */ D(p, {
|
|
385
|
+
label: P("devportal.tags", "Tags"),
|
|
386
|
+
value: X.tags,
|
|
387
|
+
onChange: (e) => $("tags", e),
|
|
388
|
+
placeholder: P("devportal.addTagsPlaceholder", "Add tags (press Enter)")
|
|
389
389
|
}),
|
|
390
|
-
/* @__PURE__ */
|
|
391
|
-
label:
|
|
392
|
-
value:
|
|
393
|
-
onChange: (e) =>
|
|
394
|
-
placeholder:
|
|
390
|
+
/* @__PURE__ */ D(p, {
|
|
391
|
+
label: P("devportal.keywords", "Keywords"),
|
|
392
|
+
value: X.keywords,
|
|
393
|
+
onChange: (e) => $("keywords", e),
|
|
394
|
+
placeholder: P("devportal.addKeywordsPlaceholder", "Add keywords (press Enter)")
|
|
395
395
|
})
|
|
396
396
|
]
|
|
397
397
|
}),
|
|
398
|
-
/* @__PURE__ */
|
|
399
|
-
title:
|
|
400
|
-
description:
|
|
401
|
-
children: /* @__PURE__ */
|
|
398
|
+
/* @__PURE__ */ D(o, {
|
|
399
|
+
title: P("devportal.links", "Links"),
|
|
400
|
+
description: P("devportal.linksDescription", "External resources for your application"),
|
|
401
|
+
children: /* @__PURE__ */ O("div", {
|
|
402
402
|
className: "grid gap-4 sm:grid-cols-2",
|
|
403
403
|
children: [
|
|
404
|
-
/* @__PURE__ */
|
|
405
|
-
label:
|
|
404
|
+
/* @__PURE__ */ D(d, {
|
|
405
|
+
label: P("devportal.websiteUrl", "Website URL"),
|
|
406
406
|
type: "url",
|
|
407
|
-
value:
|
|
408
|
-
onChange: (e) =>
|
|
409
|
-
placeholder:
|
|
407
|
+
value: X.websiteUrl,
|
|
408
|
+
onChange: (e) => $("websiteUrl", e.target.value),
|
|
409
|
+
placeholder: P("devportal.websiteUrlPlaceholder", "https://example.com")
|
|
410
410
|
}),
|
|
411
|
-
/* @__PURE__ */
|
|
412
|
-
label:
|
|
411
|
+
/* @__PURE__ */ D(d, {
|
|
412
|
+
label: P("devportal.documentationUrl", "Documentation URL"),
|
|
413
413
|
type: "url",
|
|
414
|
-
value:
|
|
415
|
-
onChange: (e) =>
|
|
416
|
-
placeholder:
|
|
414
|
+
value: X.documentationUrl,
|
|
415
|
+
onChange: (e) => $("documentationUrl", e.target.value),
|
|
416
|
+
placeholder: P("devportal.documentationUrlPlaceholder", "https://docs.example.com")
|
|
417
417
|
}),
|
|
418
|
-
/* @__PURE__ */
|
|
419
|
-
label:
|
|
418
|
+
/* @__PURE__ */ D(d, {
|
|
419
|
+
label: P("devportal.supportUrl", "Support URL"),
|
|
420
420
|
type: "url",
|
|
421
|
-
value:
|
|
422
|
-
onChange: (e) =>
|
|
423
|
-
placeholder:
|
|
421
|
+
value: X.supportUrl,
|
|
422
|
+
onChange: (e) => $("supportUrl", e.target.value),
|
|
423
|
+
placeholder: P("devportal.supportUrlPlaceholder", "https://support.example.com")
|
|
424
424
|
}),
|
|
425
|
-
/* @__PURE__ */
|
|
426
|
-
label:
|
|
425
|
+
/* @__PURE__ */ D(d, {
|
|
426
|
+
label: P("devportal.githubUrl", "GitHub URL"),
|
|
427
427
|
type: "url",
|
|
428
|
-
value:
|
|
429
|
-
onChange: (e) =>
|
|
430
|
-
placeholder:
|
|
428
|
+
value: X.githubUrl,
|
|
429
|
+
onChange: (e) => $("githubUrl", e.target.value),
|
|
430
|
+
placeholder: P("devportal.githubUrlPlaceholder", "https://github.com/org/repo")
|
|
431
431
|
}),
|
|
432
|
-
/* @__PURE__ */
|
|
433
|
-
label:
|
|
432
|
+
/* @__PURE__ */ D(d, {
|
|
433
|
+
label: P("devportal.privacyPolicyUrl", "Privacy Policy URL"),
|
|
434
434
|
type: "url",
|
|
435
|
-
value:
|
|
436
|
-
onChange: (e) =>
|
|
437
|
-
placeholder:
|
|
435
|
+
value: X.privacyPolicyUrl,
|
|
436
|
+
onChange: (e) => $("privacyPolicyUrl", e.target.value),
|
|
437
|
+
placeholder: P("devportal.privacyPolicyUrlPlaceholder", "https://example.com/privacy")
|
|
438
438
|
}),
|
|
439
|
-
/* @__PURE__ */
|
|
440
|
-
label:
|
|
439
|
+
/* @__PURE__ */ D(d, {
|
|
440
|
+
label: P("devportal.termsOfServiceUrl", "Terms of Service URL"),
|
|
441
441
|
type: "url",
|
|
442
|
-
value:
|
|
443
|
-
onChange: (e) =>
|
|
444
|
-
placeholder:
|
|
442
|
+
value: X.termsOfServiceUrl,
|
|
443
|
+
onChange: (e) => $("termsOfServiceUrl", e.target.value),
|
|
444
|
+
placeholder: P("devportal.termsOfServiceUrlPlaceholder", "https://example.com/terms")
|
|
445
445
|
})
|
|
446
446
|
]
|
|
447
447
|
})
|
|
448
448
|
}),
|
|
449
|
-
/* @__PURE__ */
|
|
450
|
-
title:
|
|
451
|
-
description:
|
|
452
|
-
children: /* @__PURE__ */
|
|
449
|
+
/* @__PURE__ */ D(o, {
|
|
450
|
+
title: P("devportal.settings", "Settings"),
|
|
451
|
+
description: P("devportal.settingsDescription", "Additional configuration options"),
|
|
452
|
+
children: /* @__PURE__ */ D("div", {
|
|
453
453
|
className: "space-y-4",
|
|
454
|
-
children: /* @__PURE__ */
|
|
455
|
-
label:
|
|
456
|
-
description:
|
|
457
|
-
checked:
|
|
458
|
-
onChange: (e) =>
|
|
454
|
+
children: /* @__PURE__ */ D(u, {
|
|
455
|
+
label: P("devportal.requireWorkspaceAdminApproval", "Require workspace admin approval"),
|
|
456
|
+
description: P("devportal.requireWorkspaceAdminApprovalDescription", "When enabled, workspace admins must approve installations before users can access this app"),
|
|
457
|
+
checked: X.requiresApproval,
|
|
458
|
+
onChange: (e) => $("requiresApproval", e.target.checked)
|
|
459
459
|
})
|
|
460
460
|
})
|
|
461
461
|
}),
|
|
462
|
-
/* @__PURE__ */
|
|
462
|
+
/* @__PURE__ */ O("div", {
|
|
463
463
|
className: "flex flex-col gap-4 border-t pt-6",
|
|
464
|
-
children: [/* @__PURE__ */
|
|
464
|
+
children: [/* @__PURE__ */ O("div", {
|
|
465
465
|
className: "flex items-center justify-between",
|
|
466
|
-
children: [/* @__PURE__ */
|
|
466
|
+
children: [/* @__PURE__ */ D("div", {
|
|
467
467
|
className: "flex items-center gap-2",
|
|
468
|
-
children: we && /* @__PURE__ */
|
|
468
|
+
children: we && /* @__PURE__ */ O("button", {
|
|
469
469
|
type: "button",
|
|
470
|
-
onClick:
|
|
471
|
-
disabled:
|
|
470
|
+
onClick: Ce,
|
|
471
|
+
disabled: F || W,
|
|
472
472
|
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",
|
|
473
|
-
children: [/* @__PURE__ */
|
|
473
|
+
children: [/* @__PURE__ */ D(oe, { size: 16 }), P("devportal.submitForReview", "Submit for Review")]
|
|
474
474
|
})
|
|
475
|
-
}), /* @__PURE__ */
|
|
475
|
+
}), /* @__PURE__ */ D("button", {
|
|
476
476
|
type: "submit",
|
|
477
|
-
disabled:
|
|
478
|
-
"aria-disabled": !
|
|
477
|
+
disabled: F || !W || !M,
|
|
478
|
+
"aria-disabled": !M,
|
|
479
479
|
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",
|
|
480
|
-
children:
|
|
480
|
+
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")] })
|
|
481
481
|
})]
|
|
482
|
-
}), /* @__PURE__ */
|
|
482
|
+
}), /* @__PURE__ */ O("div", {
|
|
483
483
|
className: "rounded-lg border border-border-subtle bg-status-error-bg-subtle p-4",
|
|
484
484
|
children: [
|
|
485
|
-
/* @__PURE__ */
|
|
485
|
+
/* @__PURE__ */ D("h3", {
|
|
486
486
|
className: "text-sm font-medium text-status-error-text",
|
|
487
|
-
children:
|
|
487
|
+
children: P("devportal.dangerZone", "Danger Zone")
|
|
488
488
|
}),
|
|
489
|
-
/* @__PURE__ */
|
|
489
|
+
/* @__PURE__ */ D("p", {
|
|
490
490
|
className: "mt-1 text-sm text-status-error-text",
|
|
491
|
-
children:
|
|
491
|
+
children: P("devportal.dangerZoneWarning", "These actions are irreversible. Please proceed with caution.")
|
|
492
492
|
}),
|
|
493
|
-
/* @__PURE__ */
|
|
493
|
+
/* @__PURE__ */ O("div", {
|
|
494
494
|
className: "mt-4 flex gap-3",
|
|
495
495
|
children: [
|
|
496
|
-
Te && /* @__PURE__ */
|
|
496
|
+
Te && /* @__PURE__ */ O("button", {
|
|
497
497
|
type: "button",
|
|
498
|
-
onClick: () =>
|
|
498
|
+
onClick: () => H(!0),
|
|
499
499
|
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",
|
|
500
|
-
children: [/* @__PURE__ */
|
|
500
|
+
children: [/* @__PURE__ */ D(T, { size: 14 }), P("devportal.deprecateApp", "Deprecate App")]
|
|
501
501
|
}),
|
|
502
|
-
Ee && /* @__PURE__ */
|
|
502
|
+
Ee && /* @__PURE__ */ O("button", {
|
|
503
503
|
type: "button",
|
|
504
|
-
onClick: () =>
|
|
504
|
+
onClick: () => U(!0),
|
|
505
505
|
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",
|
|
506
|
-
children: [/* @__PURE__ */
|
|
506
|
+
children: [/* @__PURE__ */ D(ie, { size: 14 }), P("devportal.deactivateApp", "Deactivate App")]
|
|
507
507
|
}),
|
|
508
|
-
/* @__PURE__ */
|
|
508
|
+
/* @__PURE__ */ O("button", {
|
|
509
509
|
type: "button",
|
|
510
|
-
onClick: () =>
|
|
511
|
-
disabled: !
|
|
512
|
-
"aria-disabled": !
|
|
510
|
+
onClick: () => B(!0),
|
|
511
|
+
disabled: !N,
|
|
512
|
+
"aria-disabled": !N,
|
|
513
513
|
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",
|
|
514
|
-
children: [/* @__PURE__ */
|
|
514
|
+
children: [/* @__PURE__ */ D(se, { size: 14 }), P("devportal.deleteApp", "Delete App")]
|
|
515
515
|
})
|
|
516
516
|
]
|
|
517
517
|
})
|
|
@@ -520,38 +520,38 @@ var O = () => {
|
|
|
520
520
|
})
|
|
521
521
|
]
|
|
522
522
|
}),
|
|
523
|
-
/* @__PURE__ */
|
|
524
|
-
open:
|
|
525
|
-
onOpenChange:
|
|
526
|
-
title:
|
|
527
|
-
description:
|
|
528
|
-
confirmLabel:
|
|
523
|
+
/* @__PURE__ */ D(h, {
|
|
524
|
+
open: z,
|
|
525
|
+
onOpenChange: B,
|
|
526
|
+
title: P("devportal.deleteApplication", "Delete Application"),
|
|
527
|
+
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.`),
|
|
528
|
+
confirmLabel: P("devportal.deleteApplication", "Delete Application"),
|
|
529
529
|
variant: "destructive",
|
|
530
|
-
onConfirm:
|
|
530
|
+
onConfirm: be
|
|
531
531
|
}),
|
|
532
|
-
/* @__PURE__ */
|
|
533
|
-
open:
|
|
534
|
-
onOpenChange:
|
|
535
|
-
title:
|
|
536
|
-
description:
|
|
537
|
-
confirmLabel:
|
|
532
|
+
/* @__PURE__ */ D(h, {
|
|
533
|
+
open: V,
|
|
534
|
+
onOpenChange: H,
|
|
535
|
+
title: P("devportal.deprecateApplication", "Deprecate Application"),
|
|
536
|
+
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.`),
|
|
537
|
+
confirmLabel: P("devportal.deprecateApplication", "Deprecate Application"),
|
|
538
538
|
variant: "warning",
|
|
539
|
-
onConfirm:
|
|
539
|
+
onConfirm: xe
|
|
540
540
|
}),
|
|
541
|
-
/* @__PURE__ */
|
|
542
|
-
open:
|
|
543
|
-
onOpenChange:
|
|
544
|
-
title:
|
|
545
|
-
description:
|
|
546
|
-
confirmLabel:
|
|
541
|
+
/* @__PURE__ */ D(h, {
|
|
542
|
+
open: pe,
|
|
543
|
+
onOpenChange: U,
|
|
544
|
+
title: P("devportal.deactivateApplication", "Deactivate Application"),
|
|
545
|
+
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.`),
|
|
546
|
+
confirmLabel: P("devportal.deactivateApplication", "Deactivate Application"),
|
|
547
547
|
variant: "destructive",
|
|
548
|
-
onConfirm:
|
|
548
|
+
onConfirm: Se
|
|
549
549
|
})
|
|
550
550
|
]
|
|
551
551
|
})
|
|
552
552
|
});
|
|
553
553
|
};
|
|
554
554
|
//#endregion
|
|
555
|
-
export {
|
|
555
|
+
export { k as EditApplicationPage };
|
|
556
556
|
|
|
557
557
|
//# sourceMappingURL=EditApplicationPage.js.map
|