@burdenoff/microfe-devportal 2026.720.6 → 2026.720.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/components/MarkdownEditor.d.ts +24 -0
- package/dist/devportal/components/MarkdownEditor.d.ts.map +1 -0
- package/dist/devportal/components/MarkdownEditor.js +136 -0
- package/dist/devportal/components/MarkdownEditor.js.map +1 -0
- package/dist/devportal/components/index.d.ts +1 -0
- package/dist/devportal/components/index.d.ts.map +1 -1
- package/dist/devportal/components/index.js +1 -0
- package/dist/devportal/pages/ApplicationDetailPage.d.ts.map +1 -1
- package/dist/devportal/pages/ApplicationDetailPage.js +748 -746
- package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.d.ts.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.js +390 -374
- package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
- package/dist/devportal/pages/CreateApplicationPage.d.ts.map +1 -1
- package/dist/devportal/pages/CreateApplicationPage.js +185 -184
- package/dist/devportal/pages/CreateApplicationPage.js.map +1 -1
- package/dist/devportal/pages/EditApplicationPage.d.ts.map +1 -1
- package/dist/devportal/pages/EditApplicationPage.js +284 -283
- package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
- package/dist/devportal/pages/ListingPreviewPage.d.ts.map +1 -1
- package/dist/devportal/pages/ListingPreviewPage.js +162 -158
- package/dist/devportal/pages/ListingPreviewPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -7,19 +7,20 @@ import { PageLayout as r, PageSection as i } from "../components/PageLayout.js";
|
|
|
7
7
|
import { APP_TYPE_LABELS as a } from "../utils/constants.js";
|
|
8
8
|
import { StatusBadge as oe } from "../components/StatusBadge.js";
|
|
9
9
|
import { nativeImpact as se, nativeNotify as o } from "../../utils/nativeBridge.js";
|
|
10
|
-
import { CheckboxField as ce, InputField as s, SelectField as c, TagInput as l, TextareaField as
|
|
11
|
-
import { ConfirmDialog as
|
|
12
|
-
import { PermissionGuard as
|
|
10
|
+
import { CheckboxField as ce, InputField as s, SelectField as c, TagInput as l, TextareaField as le } from "../components/FormField.js";
|
|
11
|
+
import { ConfirmDialog as u } from "../components/ConfirmDialog.js";
|
|
12
|
+
import { PermissionGuard as ue } from "../components/PermissionGuard.js";
|
|
13
|
+
import { MarkdownEditor as de } from "../components/MarkdownEditor.js";
|
|
13
14
|
import "../components/index.js";
|
|
14
|
-
import { useDevportalPermission as
|
|
15
|
-
import { DEVPORTAL_PERMISSIONS as
|
|
16
|
-
import { useEffect as
|
|
17
|
-
import { useI18n as
|
|
18
|
-
import { AlertCircle as
|
|
19
|
-
import { useParams as
|
|
15
|
+
import { useDevportalPermission as d } from "../hooks/usePermission.js";
|
|
16
|
+
import { DEVPORTAL_PERMISSIONS as f } from "../constants/permissions.js";
|
|
17
|
+
import { useEffect as p, useState as m } from "react";
|
|
18
|
+
import { useI18n as fe } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
19
|
+
import { AlertCircle as pe, AlertTriangle as me, AppWindow as he, Archive as ge, Check as h, Copy as g, Eye as _e, EyeOff as ve, Power as ye, RefreshCw as _, Save as be, Send as xe, Trash2 as Se } from "lucide-react";
|
|
20
|
+
import { useParams as Ce } from "react-router-dom";
|
|
20
21
|
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
21
22
|
//#region src/devportal/pages/EditApplicationPage.tsx
|
|
22
|
-
var
|
|
23
|
+
var we = [
|
|
23
24
|
{
|
|
24
25
|
value: "fluidgrids",
|
|
25
26
|
label: "FluidGrids"
|
|
@@ -36,7 +37,7 @@ var Ce = [
|
|
|
36
37
|
value: "botlit",
|
|
37
38
|
label: "Botlit"
|
|
38
39
|
}
|
|
39
|
-
],
|
|
40
|
+
], Te = Object.entries(a).map(([e, t]) => ({
|
|
40
41
|
value: e,
|
|
41
42
|
label: t
|
|
42
43
|
})), x = [
|
|
@@ -52,10 +53,10 @@ var Ce = [
|
|
|
52
53
|
value: "INTERNAL",
|
|
53
54
|
label: "Internal — visible to your entire dev org"
|
|
54
55
|
}
|
|
55
|
-
],
|
|
56
|
+
], Ee = [...x, {
|
|
56
57
|
value: "UNLISTED",
|
|
57
58
|
label: "Unlisted — shareable via link, not listed in store"
|
|
58
|
-
}],
|
|
59
|
+
}], De = [
|
|
59
60
|
{
|
|
60
61
|
value: "ai",
|
|
61
62
|
label: "AI & Automation"
|
|
@@ -85,7 +86,7 @@ var Ce = [
|
|
|
85
86
|
label: "Triggers"
|
|
86
87
|
}
|
|
87
88
|
];
|
|
88
|
-
function
|
|
89
|
+
function Oe(e) {
|
|
89
90
|
return e ? {
|
|
90
91
|
id: e.id,
|
|
91
92
|
name: e.name,
|
|
@@ -129,20 +130,20 @@ function De(e) {
|
|
|
129
130
|
} : null;
|
|
130
131
|
}
|
|
131
132
|
var S = () => {
|
|
132
|
-
let { navigate: a, basePath: S } = e(), { appId: C } =
|
|
133
|
-
let n =
|
|
133
|
+
let { navigate: a, basePath: S } = e(), { appId: C } = Ce(), { t: ke } = fe(), { allowed: w } = d(f.APP_UPDATE), { allowed: T } = d(f.APP_DELETE), E = (e, t) => {
|
|
134
|
+
let n = ke(e);
|
|
134
135
|
return n === e ? t : n;
|
|
135
|
-
}, [
|
|
136
|
+
}, [D, O] = m(!1), [k, A] = m({}), [Ae, j] = m(!1), [je, M] = m(!1), [Me, N] = m(!1), [P, F] = m(!1), [I, L] = m(!1), [R, z] = m(!1), [B, Ne] = m(null), [Pe, V] = m(!1), { data: H, loading: Fe, error: U, refetch: Ie } = re({
|
|
136
137
|
variables: { id: C },
|
|
137
138
|
skip: !C
|
|
138
|
-
}), [
|
|
139
|
-
|
|
140
|
-
let e =
|
|
139
|
+
}), [W] = ae(), [Le] = ne(), [Re] = te(), [ze] = ie(), G = Oe(H?.application);
|
|
140
|
+
p(() => {
|
|
141
|
+
let e = G?.name;
|
|
141
142
|
if (!C || !e) return;
|
|
142
143
|
let t = window.__breadcrumbRegistry;
|
|
143
144
|
return t?.register(C, e), () => t?.unregister(C);
|
|
144
|
-
}, [C,
|
|
145
|
-
let [
|
|
145
|
+
}, [C, G?.name]);
|
|
146
|
+
let [K, q] = m({
|
|
146
147
|
name: "",
|
|
147
148
|
slug: "",
|
|
148
149
|
shortDescription: "",
|
|
@@ -161,277 +162,277 @@ var S = () => {
|
|
|
161
162
|
oauthAuthUrl: "",
|
|
162
163
|
oauthRevokeUrl: "",
|
|
163
164
|
requiresApproval: !1
|
|
164
|
-
}), [
|
|
165
|
-
|
|
166
|
-
if (
|
|
167
|
-
|
|
168
|
-
name:
|
|
169
|
-
slug:
|
|
170
|
-
shortDescription:
|
|
171
|
-
description:
|
|
172
|
-
appType:
|
|
173
|
-
visibility:
|
|
174
|
-
category:
|
|
175
|
-
tags:
|
|
176
|
-
keywords:
|
|
177
|
-
websiteUrl:
|
|
178
|
-
documentationUrl:
|
|
179
|
-
supportUrl:
|
|
180
|
-
privacyPolicyUrl:
|
|
181
|
-
termsOfServiceUrl:
|
|
182
|
-
githubUrl:
|
|
183
|
-
oauthAuthUrl:
|
|
184
|
-
oauthRevokeUrl:
|
|
185
|
-
requiresApproval:
|
|
165
|
+
}), [J, Y] = m([]);
|
|
166
|
+
p(() => {
|
|
167
|
+
if (G) {
|
|
168
|
+
q({
|
|
169
|
+
name: G.name,
|
|
170
|
+
slug: G.slug,
|
|
171
|
+
shortDescription: G.shortDescription || "",
|
|
172
|
+
description: G.description || "",
|
|
173
|
+
appType: G.appType,
|
|
174
|
+
visibility: G.visibility,
|
|
175
|
+
category: G.category || "",
|
|
176
|
+
tags: G.tags,
|
|
177
|
+
keywords: G.keywords,
|
|
178
|
+
websiteUrl: G.websiteUrl || "",
|
|
179
|
+
documentationUrl: G.documentationUrl || "",
|
|
180
|
+
supportUrl: G.supportUrl || "",
|
|
181
|
+
privacyPolicyUrl: G.privacyPolicyUrl || "",
|
|
182
|
+
termsOfServiceUrl: G.termsOfServiceUrl || "",
|
|
183
|
+
githubUrl: G.githubUrl || "",
|
|
184
|
+
oauthAuthUrl: G.oauthAuthUrl || "",
|
|
185
|
+
oauthRevokeUrl: G.oauthRevokeUrl || "",
|
|
186
|
+
requiresApproval: G.requiresApproval
|
|
186
187
|
});
|
|
187
|
-
let e =
|
|
188
|
-
|
|
188
|
+
let e = H?.application?.manifest?.compatibility;
|
|
189
|
+
Y(Array.isArray(e?.products) ? e.products : []), F(!1);
|
|
189
190
|
}
|
|
190
|
-
}, [
|
|
191
|
-
let
|
|
191
|
+
}, [H?.application]);
|
|
192
|
+
let X = (e) => {
|
|
192
193
|
a?.(`${S}${e}`);
|
|
193
|
-
},
|
|
194
|
-
|
|
194
|
+
}, Z = (e, t) => {
|
|
195
|
+
q((n) => ({
|
|
195
196
|
...n,
|
|
196
197
|
[e]: t
|
|
197
|
-
})),
|
|
198
|
+
})), F(!0), k[e] && A((t) => ({
|
|
198
199
|
...t,
|
|
199
200
|
[e]: void 0
|
|
200
201
|
}));
|
|
201
|
-
},
|
|
202
|
+
}, Q = async () => {
|
|
202
203
|
if (C) {
|
|
203
|
-
|
|
204
|
+
z(!0);
|
|
204
205
|
try {
|
|
205
|
-
let e = (await
|
|
206
|
-
e && (
|
|
206
|
+
let e = (await ze({ variables: { id: C } })).data?.rotateApplicationSigningSecret?.signingSecret;
|
|
207
|
+
e && (Ne(e), L(!0));
|
|
207
208
|
} catch {
|
|
208
209
|
o("error");
|
|
209
210
|
} finally {
|
|
210
|
-
|
|
211
|
+
z(!1);
|
|
211
212
|
}
|
|
212
213
|
}
|
|
213
|
-
}, Re = async (e) => {
|
|
214
|
-
await navigator.clipboard.writeText(e), H(!0), setTimeout(() => H(!1), 2e3);
|
|
215
|
-
}, ze = () => {
|
|
216
|
-
let e = {};
|
|
217
|
-
return q.name.trim() ? q.name.length < 3 ? e.name = D("devportal.appNameMinLength", "Name must be at least 3 characters") : q.name.length > 100 && (e.name = D("devportal.appNameMaxLength", "Name must be less than 100 characters")) : e.name = D("devportal.appNameRequired", "Application name is required"), q.slug.trim() ? /^[a-z0-9-]+$/.test(q.slug) || (e.slug = D("devportal.slugInvalidChars", "Slug can only contain lowercase letters, numbers, and hyphens")) : e.slug = D("devportal.slugRequired", "Slug is required"), q.shortDescription.trim() ? q.shortDescription.length > 200 && (e.shortDescription = D("devportal.shortDescriptionMaxLength", "Short description must be less than 200 characters")) : e.shortDescription = D("devportal.shortDescriptionRequired", "Short description is required"), q.appType || (e.appType = D("devportal.appTypeRequired", "Application type is required")), q.category || (e.category = D("devportal.categoryRequired", "Category is required")), j(e), Object.keys(e).length === 0;
|
|
218
214
|
}, Be = async (e) => {
|
|
219
|
-
|
|
220
|
-
|
|
215
|
+
await navigator.clipboard.writeText(e), V(!0), setTimeout(() => V(!1), 2e3);
|
|
216
|
+
}, Ve = () => {
|
|
217
|
+
let e = {};
|
|
218
|
+
return K.name.trim() ? K.name.length < 3 ? e.name = E("devportal.appNameMinLength", "Name must be at least 3 characters") : K.name.length > 100 && (e.name = E("devportal.appNameMaxLength", "Name must be less than 100 characters")) : e.name = E("devportal.appNameRequired", "Application name is required"), K.slug.trim() ? /^[a-z0-9-]+$/.test(K.slug) || (e.slug = E("devportal.slugInvalidChars", "Slug can only contain lowercase letters, numbers, and hyphens")) : e.slug = E("devportal.slugRequired", "Slug is required"), K.shortDescription.trim() ? K.shortDescription.length > 200 && (e.shortDescription = E("devportal.shortDescriptionMaxLength", "Short description must be less than 200 characters")) : e.shortDescription = E("devportal.shortDescriptionRequired", "Short description is required"), K.appType || (e.appType = E("devportal.appTypeRequired", "Application type is required")), K.category || (e.category = E("devportal.categoryRequired", "Category is required")), A(e), Object.keys(e).length === 0;
|
|
219
|
+
}, He = async (e) => {
|
|
220
|
+
if (e.preventDefault(), !(!Ve() || !G)) {
|
|
221
|
+
O(!0);
|
|
221
222
|
try {
|
|
222
|
-
await
|
|
223
|
-
id:
|
|
223
|
+
await W({ variables: {
|
|
224
|
+
id: G.id,
|
|
224
225
|
input: {
|
|
225
|
-
name:
|
|
226
|
-
shortDescription:
|
|
227
|
-
description:
|
|
228
|
-
appType:
|
|
229
|
-
visibility:
|
|
230
|
-
category:
|
|
231
|
-
tags:
|
|
232
|
-
keywords:
|
|
233
|
-
websiteUrl:
|
|
234
|
-
documentationUrl:
|
|
235
|
-
supportUrl:
|
|
236
|
-
privacyPolicyUrl:
|
|
237
|
-
termsOfServiceUrl:
|
|
238
|
-
githubUrl:
|
|
239
|
-
oauthAuthUrl:
|
|
240
|
-
oauthRevokeUrl:
|
|
241
|
-
compatibleProducts:
|
|
226
|
+
name: K.name,
|
|
227
|
+
shortDescription: K.shortDescription,
|
|
228
|
+
description: K.description,
|
|
229
|
+
appType: K.appType,
|
|
230
|
+
visibility: K.visibility,
|
|
231
|
+
category: K.category,
|
|
232
|
+
tags: K.tags,
|
|
233
|
+
keywords: K.keywords,
|
|
234
|
+
websiteUrl: K.websiteUrl || null,
|
|
235
|
+
documentationUrl: K.documentationUrl || null,
|
|
236
|
+
supportUrl: K.supportUrl || null,
|
|
237
|
+
privacyPolicyUrl: K.privacyPolicyUrl || null,
|
|
238
|
+
termsOfServiceUrl: K.termsOfServiceUrl || null,
|
|
239
|
+
githubUrl: K.githubUrl || null,
|
|
240
|
+
oauthAuthUrl: K.oauthAuthUrl || null,
|
|
241
|
+
oauthRevokeUrl: K.oauthRevokeUrl || null,
|
|
242
|
+
compatibleProducts: J
|
|
242
243
|
}
|
|
243
|
-
} }),
|
|
244
|
+
} }), F(!1);
|
|
244
245
|
} catch (e) {
|
|
245
246
|
console.error("Failed to update application:", e);
|
|
246
247
|
} finally {
|
|
247
|
-
|
|
248
|
+
O(!1);
|
|
248
249
|
}
|
|
249
250
|
}
|
|
250
|
-
},
|
|
251
|
-
if (
|
|
251
|
+
}, $ = async () => {
|
|
252
|
+
if (G) {
|
|
252
253
|
se("medium");
|
|
253
254
|
try {
|
|
254
|
-
await
|
|
255
|
+
await Le({ variables: { id: G.id } }), o("success"), X("/apps");
|
|
255
256
|
} catch (e) {
|
|
256
257
|
o("error"), console.error("Failed to delete application:", e);
|
|
257
258
|
}
|
|
258
259
|
}
|
|
259
|
-
},
|
|
260
|
-
if (
|
|
261
|
-
await
|
|
262
|
-
id:
|
|
260
|
+
}, Ue = async () => {
|
|
261
|
+
if (G) try {
|
|
262
|
+
await W({ variables: {
|
|
263
|
+
id: G.id,
|
|
263
264
|
input: { visibility: "PRIVATE" }
|
|
264
|
-
} }),
|
|
265
|
+
} }), M(!1);
|
|
265
266
|
} catch (e) {
|
|
266
267
|
console.error("Failed to deprecate application:", e);
|
|
267
268
|
}
|
|
268
|
-
},
|
|
269
|
-
if (
|
|
270
|
-
await
|
|
269
|
+
}, We = async () => {
|
|
270
|
+
if (G) try {
|
|
271
|
+
await Re({ variables: { id: G.id } }), N(!1), X("/apps");
|
|
271
272
|
} catch (e) {
|
|
272
273
|
console.error("Failed to deactivate application:", e);
|
|
273
274
|
}
|
|
274
275
|
};
|
|
275
|
-
if (
|
|
276
|
-
if (
|
|
277
|
-
title:
|
|
276
|
+
if (Fe) return /* @__PURE__ */ y(n, { message: E("devportal.loadingApplication", "Loading application...") });
|
|
277
|
+
if (U) return /* @__PURE__ */ y(r, {
|
|
278
|
+
title: E("devportal.error", "Error"),
|
|
278
279
|
backLink: `${S}/apps`,
|
|
279
|
-
backLabel:
|
|
280
|
+
backLabel: E("devportal.backToApplications", "Back to Applications"),
|
|
280
281
|
children: /* @__PURE__ */ b("div", {
|
|
281
282
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
282
283
|
children: [
|
|
283
|
-
/* @__PURE__ */ y(
|
|
284
|
+
/* @__PURE__ */ y(pe, {
|
|
284
285
|
size: 48,
|
|
285
286
|
className: "text-status-error-text mb-4"
|
|
286
287
|
}),
|
|
287
288
|
/* @__PURE__ */ y("h3", {
|
|
288
289
|
className: "text-lg font-semibold mb-2",
|
|
289
|
-
children:
|
|
290
|
+
children: E("devportal.failedToLoadApplication", "Failed to load application")
|
|
290
291
|
}),
|
|
291
292
|
/* @__PURE__ */ y("p", {
|
|
292
293
|
className: "text-sm text-text-secondary",
|
|
293
|
-
children:
|
|
294
|
+
children: U.message
|
|
294
295
|
})
|
|
295
296
|
]
|
|
296
297
|
})
|
|
297
298
|
});
|
|
298
|
-
if (!
|
|
299
|
-
title:
|
|
299
|
+
if (!G) return /* @__PURE__ */ y(r, {
|
|
300
|
+
title: E("devportal.notFound", "Not Found"),
|
|
300
301
|
backLink: `${S}/apps`,
|
|
301
|
-
backLabel:
|
|
302
|
+
backLabel: E("devportal.backToApplications", "Back to Applications"),
|
|
302
303
|
children: /* @__PURE__ */ y(ee, {
|
|
303
304
|
illustration: "empty-generic",
|
|
304
|
-
icon: /* @__PURE__ */ y(
|
|
305
|
-
title:
|
|
306
|
-
description:
|
|
305
|
+
icon: /* @__PURE__ */ y(he, { size: 48 }),
|
|
306
|
+
title: E("devportal.applicationNotFound", "Application not found"),
|
|
307
|
+
description: E("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
|
|
307
308
|
})
|
|
308
309
|
});
|
|
309
|
-
let
|
|
310
|
-
return /* @__PURE__ */ y(
|
|
310
|
+
let Ge = G.status === "DRAFT" || G.status === "REJECTED", Ke = G.status === "PUBLISHED", qe = G.status === "ACTIVE" || G.status === "PUBLISHED";
|
|
311
|
+
return /* @__PURE__ */ y(ue, {
|
|
311
312
|
authOnly: !0,
|
|
312
313
|
children: /* @__PURE__ */ b(r, {
|
|
313
|
-
title: `${
|
|
314
|
-
description:
|
|
315
|
-
purpose:
|
|
316
|
-
backLink: `${S}/apps/${
|
|
317
|
-
backLabel:
|
|
314
|
+
title: `${E("devportal.editAppTitlePrefix", "Edit:")} ${G.name}`,
|
|
315
|
+
description: E("devportal.editAppDescription", "Update your application settings"),
|
|
316
|
+
purpose: E("devportal.editAppPurpose", "Change how this app appears and behaves — its name, description, classification, links, and lifecycle settings. Use the danger zone at the bottom to deprecate or delete it when it is retired."),
|
|
317
|
+
backLink: `${S}/apps/${G.id}`,
|
|
318
|
+
backLabel: E("devportal.backToApplication", "Back to Application"),
|
|
318
319
|
actions: /* @__PURE__ */ y("div", {
|
|
319
320
|
className: "flex items-center gap-2",
|
|
320
321
|
children: /* @__PURE__ */ y(oe, {
|
|
321
|
-
status:
|
|
322
|
+
status: G.status,
|
|
322
323
|
type: "app"
|
|
323
324
|
})
|
|
324
325
|
}),
|
|
325
326
|
children: [
|
|
326
327
|
/* @__PURE__ */ b("form", {
|
|
327
|
-
onSubmit:
|
|
328
|
+
onSubmit: He,
|
|
328
329
|
className: "space-y-8 max-w-3xl",
|
|
329
330
|
children: [
|
|
330
|
-
|
|
331
|
+
G.status === "PUBLISHED" && /* @__PURE__ */ b("div", {
|
|
331
332
|
className: "rounded-lg border border-border-subtle bg-status-warning-bg-subtle p-4 flex gap-3",
|
|
332
|
-
children: [/* @__PURE__ */ y(
|
|
333
|
+
children: [/* @__PURE__ */ y(me, {
|
|
333
334
|
size: 20,
|
|
334
335
|
className: "text-status-warning-text flex-shrink-0 mt-0.5"
|
|
335
336
|
}), /* @__PURE__ */ b("div", {
|
|
336
337
|
className: "text-sm text-status-warning-text",
|
|
337
338
|
children: [/* @__PURE__ */ y("p", {
|
|
338
339
|
className: "font-medium",
|
|
339
|
-
children:
|
|
340
|
+
children: E("devportal.appIsPublished", "This application is published")
|
|
340
341
|
}), /* @__PURE__ */ y("p", {
|
|
341
342
|
className: "mt-1 text-status-warning-text",
|
|
342
|
-
children:
|
|
343
|
+
children: E("devportal.publishedAppChangesWarning", "Changes to published apps may require re-review. Major changes will put the app back into review status.")
|
|
343
344
|
})]
|
|
344
345
|
})]
|
|
345
346
|
}),
|
|
346
347
|
/* @__PURE__ */ y(i, {
|
|
347
|
-
title:
|
|
348
|
-
description:
|
|
348
|
+
title: E("devportal.basicInformation", "Basic Information"),
|
|
349
|
+
description: E("devportal.basicInformationDescription", "Core details about your application"),
|
|
349
350
|
children: /* @__PURE__ */ b("div", {
|
|
350
351
|
className: "space-y-4",
|
|
351
352
|
children: [
|
|
352
353
|
/* @__PURE__ */ y(s, {
|
|
353
|
-
label:
|
|
354
|
-
value:
|
|
355
|
-
onChange: (e) =>
|
|
356
|
-
placeholder:
|
|
354
|
+
label: E("devportal.applicationName", "Application Name"),
|
|
355
|
+
value: K.name,
|
|
356
|
+
onChange: (e) => Z("name", e.target.value),
|
|
357
|
+
placeholder: E("devportal.applicationNamePlaceholder", "My Awesome App"),
|
|
357
358
|
required: !0,
|
|
358
|
-
error:
|
|
359
|
+
error: k.name
|
|
359
360
|
}),
|
|
360
361
|
/* @__PURE__ */ y(s, {
|
|
361
|
-
label:
|
|
362
|
-
value:
|
|
363
|
-
onChange: (e) =>
|
|
364
|
-
placeholder:
|
|
362
|
+
label: E("devportal.slug", "Slug"),
|
|
363
|
+
value: K.slug,
|
|
364
|
+
onChange: (e) => Z("slug", e.target.value.toLowerCase()),
|
|
365
|
+
placeholder: E("devportal.slugPlaceholder", "my-awesome-app"),
|
|
365
366
|
required: !0,
|
|
366
|
-
error:
|
|
367
|
-
hint:
|
|
367
|
+
error: k.slug,
|
|
368
|
+
hint: E("devportal.slugChangeWarning", "Changing the slug may break existing integrations")
|
|
368
369
|
}),
|
|
369
|
-
/* @__PURE__ */ y(
|
|
370
|
-
label:
|
|
371
|
-
value:
|
|
372
|
-
onChange: (e) =>
|
|
373
|
-
placeholder:
|
|
370
|
+
/* @__PURE__ */ y(le, {
|
|
371
|
+
label: E("devportal.shortDescription", "Short Description"),
|
|
372
|
+
value: K.shortDescription,
|
|
373
|
+
onChange: (e) => Z("shortDescription", e.target.value),
|
|
374
|
+
placeholder: E("devportal.shortDescriptionPlaceholder", "A brief description of what your app does"),
|
|
374
375
|
required: !0,
|
|
375
|
-
error:
|
|
376
|
-
hint: `${
|
|
376
|
+
error: k.shortDescription,
|
|
377
|
+
hint: `${K.shortDescription.length}/200 ${E("devportal.characters", "characters")}`,
|
|
377
378
|
rows: 2
|
|
378
379
|
}),
|
|
379
|
-
/* @__PURE__ */ y(
|
|
380
|
-
label:
|
|
381
|
-
value:
|
|
382
|
-
onChange: (e) =>
|
|
383
|
-
placeholder:
|
|
380
|
+
/* @__PURE__ */ y(de, {
|
|
381
|
+
label: E("devportal.fullDescription", "Full Description"),
|
|
382
|
+
value: K.description,
|
|
383
|
+
onChange: (e) => Z("description", e),
|
|
384
|
+
placeholder: E("devportal.fullDescriptionPlaceholder", "Detailed description of your application, features, and use cases..."),
|
|
384
385
|
rows: 6,
|
|
385
|
-
hint:
|
|
386
|
+
hint: E("devportal.markdownSupported", "Markdown formatting is supported")
|
|
386
387
|
})
|
|
387
388
|
]
|
|
388
389
|
})
|
|
389
390
|
}),
|
|
390
391
|
/* @__PURE__ */ b(i, {
|
|
391
|
-
title:
|
|
392
|
-
description:
|
|
392
|
+
title: E("devportal.classification", "Classification"),
|
|
393
|
+
description: E("devportal.classificationDescription", "Categorize your application"),
|
|
393
394
|
children: [
|
|
394
395
|
/* @__PURE__ */ b("div", {
|
|
395
396
|
className: "grid gap-4 sm:grid-cols-2",
|
|
396
397
|
children: [
|
|
397
398
|
/* @__PURE__ */ y(c, {
|
|
398
|
-
label:
|
|
399
|
-
value:
|
|
400
|
-
onChange: (e) =>
|
|
401
|
-
options:
|
|
399
|
+
label: E("devportal.applicationType", "Application Type"),
|
|
400
|
+
value: K.appType,
|
|
401
|
+
onChange: (e) => Z("appType", e.target.value),
|
|
402
|
+
options: Te,
|
|
402
403
|
required: !0,
|
|
403
|
-
error:
|
|
404
|
+
error: k.appType
|
|
404
405
|
}),
|
|
405
406
|
/* @__PURE__ */ y(c, {
|
|
406
|
-
label:
|
|
407
|
-
value:
|
|
408
|
-
onChange: (e) =>
|
|
409
|
-
options:
|
|
407
|
+
label: E("devportal.category", "Category"),
|
|
408
|
+
value: K.category,
|
|
409
|
+
onChange: (e) => Z("category", e.target.value),
|
|
410
|
+
options: De,
|
|
410
411
|
required: !0,
|
|
411
|
-
error:
|
|
412
|
+
error: k.category
|
|
412
413
|
}),
|
|
413
414
|
/* @__PURE__ */ y(c, {
|
|
414
|
-
label:
|
|
415
|
-
value:
|
|
416
|
-
onChange: (e) =>
|
|
417
|
-
options:
|
|
418
|
-
hint:
|
|
415
|
+
label: E("devportal.visibility", "Visibility"),
|
|
416
|
+
value: K.visibility,
|
|
417
|
+
onChange: (e) => Z("visibility", e.target.value),
|
|
418
|
+
options: G?.appType === "WORKFLOW" ? Ee : x,
|
|
419
|
+
hint: K.visibility === "PUBLIC" ? E("devportal.visibilityHintPublic", "Listed in the marketplace after review approval — anyone can discover and install it") : K.visibility === "UNLISTED" ? E("devportal.visibilityHintUnlisted", "Not in the store, but accessible via a direct link. You can still submit for marketplace review") : K.visibility === "INTERNAL" ? E("devportal.visibilityHintInternal", "Visible to all members of your developer organization — no one outside can access it") : E("devportal.visibilityHintPrivate", "Only you (the creator) can see this — other org members cannot access it")
|
|
419
420
|
})
|
|
420
421
|
]
|
|
421
422
|
}),
|
|
422
423
|
/* @__PURE__ */ y(l, {
|
|
423
|
-
label:
|
|
424
|
-
value:
|
|
425
|
-
onChange: (e) =>
|
|
426
|
-
placeholder:
|
|
424
|
+
label: E("devportal.tags", "Tags"),
|
|
425
|
+
value: K.tags,
|
|
426
|
+
onChange: (e) => Z("tags", e),
|
|
427
|
+
placeholder: E("devportal.addTagsPlaceholder", "Add tags (press Enter)")
|
|
427
428
|
}),
|
|
428
429
|
/* @__PURE__ */ y(l, {
|
|
429
|
-
label:
|
|
430
|
-
value:
|
|
431
|
-
onChange: (e) =>
|
|
432
|
-
placeholder:
|
|
430
|
+
label: E("devportal.keywords", "Keywords"),
|
|
431
|
+
value: K.keywords,
|
|
432
|
+
onChange: (e) => Z("keywords", e),
|
|
433
|
+
placeholder: E("devportal.addKeywordsPlaceholder", "Add keywords (press Enter)")
|
|
433
434
|
}),
|
|
434
|
-
(
|
|
435
|
+
(K.appType === "NODE" || K.appType === "WORKFLOW") && /* @__PURE__ */ b("div", {
|
|
435
436
|
className: "space-y-2",
|
|
436
437
|
children: [
|
|
437
438
|
/* @__PURE__ */ y("label", {
|
|
@@ -442,15 +443,15 @@ var S = () => {
|
|
|
442
443
|
className: "text-xs text-text-secondary",
|
|
443
444
|
children: [
|
|
444
445
|
"Select which products this ",
|
|
445
|
-
|
|
446
|
+
K.appType.toLowerCase(),
|
|
446
447
|
" ",
|
|
447
448
|
"works with. Users will see it in those products' node stores."
|
|
448
449
|
]
|
|
449
450
|
}),
|
|
450
451
|
/* @__PURE__ */ y("div", {
|
|
451
452
|
className: "flex flex-wrap gap-3",
|
|
452
|
-
children:
|
|
453
|
-
let n =
|
|
453
|
+
children: we.map((e) => {
|
|
454
|
+
let n = J.includes(e.value);
|
|
454
455
|
return /* @__PURE__ */ b("label", {
|
|
455
456
|
className: t("flex items-center gap-2 cursor-pointer rounded-md border px-3 py-2 text-sm transition-colors", n ? "border-primary bg-primary/10 text-text-primary" : "border-border-subtle hover:border-border text-text-secondary hover:text-text-primary"),
|
|
456
457
|
children: [
|
|
@@ -459,10 +460,10 @@ var S = () => {
|
|
|
459
460
|
className: "sr-only",
|
|
460
461
|
checked: n,
|
|
461
462
|
onChange: () => {
|
|
462
|
-
|
|
463
|
+
Y((t) => n ? t.filter((t) => t !== e.value) : [...t, e.value]), F(!0);
|
|
463
464
|
}
|
|
464
465
|
}),
|
|
465
|
-
n && /* @__PURE__ */ y(
|
|
466
|
+
n && /* @__PURE__ */ y(h, {
|
|
466
467
|
size: 14,
|
|
467
468
|
className: "text-primary flex-shrink-0"
|
|
468
469
|
}),
|
|
@@ -476,57 +477,57 @@ var S = () => {
|
|
|
476
477
|
]
|
|
477
478
|
}),
|
|
478
479
|
/* @__PURE__ */ y(i, {
|
|
479
|
-
title:
|
|
480
|
-
description:
|
|
480
|
+
title: E("devportal.links", "Links"),
|
|
481
|
+
description: E("devportal.linksDescription", "External resources for your application"),
|
|
481
482
|
children: /* @__PURE__ */ b("div", {
|
|
482
483
|
className: "grid gap-4 sm:grid-cols-2",
|
|
483
484
|
children: [
|
|
484
485
|
/* @__PURE__ */ y(s, {
|
|
485
|
-
label:
|
|
486
|
+
label: E("devportal.websiteUrl", "Website URL"),
|
|
486
487
|
type: "url",
|
|
487
|
-
value:
|
|
488
|
-
onChange: (e) =>
|
|
489
|
-
placeholder:
|
|
488
|
+
value: K.websiteUrl,
|
|
489
|
+
onChange: (e) => Z("websiteUrl", e.target.value),
|
|
490
|
+
placeholder: E("devportal.websiteUrlPlaceholder", "https://example.com")
|
|
490
491
|
}),
|
|
491
492
|
/* @__PURE__ */ y(s, {
|
|
492
|
-
label:
|
|
493
|
+
label: E("devportal.documentationUrl", "Documentation URL"),
|
|
493
494
|
type: "url",
|
|
494
|
-
value:
|
|
495
|
-
onChange: (e) =>
|
|
496
|
-
placeholder:
|
|
495
|
+
value: K.documentationUrl,
|
|
496
|
+
onChange: (e) => Z("documentationUrl", e.target.value),
|
|
497
|
+
placeholder: E("devportal.documentationUrlPlaceholder", "https://docs.example.com")
|
|
497
498
|
}),
|
|
498
499
|
/* @__PURE__ */ y(s, {
|
|
499
|
-
label:
|
|
500
|
+
label: E("devportal.supportUrl", "Support URL"),
|
|
500
501
|
type: "url",
|
|
501
|
-
value:
|
|
502
|
-
onChange: (e) =>
|
|
503
|
-
placeholder:
|
|
502
|
+
value: K.supportUrl,
|
|
503
|
+
onChange: (e) => Z("supportUrl", e.target.value),
|
|
504
|
+
placeholder: E("devportal.supportUrlPlaceholder", "https://support.example.com")
|
|
504
505
|
}),
|
|
505
506
|
/* @__PURE__ */ y(s, {
|
|
506
|
-
label:
|
|
507
|
+
label: E("devportal.githubUrl", "GitHub URL"),
|
|
507
508
|
type: "url",
|
|
508
|
-
value:
|
|
509
|
-
onChange: (e) =>
|
|
510
|
-
placeholder:
|
|
509
|
+
value: K.githubUrl,
|
|
510
|
+
onChange: (e) => Z("githubUrl", e.target.value),
|
|
511
|
+
placeholder: E("devportal.githubUrlPlaceholder", "https://github.com/org/repo")
|
|
511
512
|
}),
|
|
512
513
|
/* @__PURE__ */ y(s, {
|
|
513
|
-
label:
|
|
514
|
+
label: E("devportal.privacyPolicyUrl", "Privacy Policy URL"),
|
|
514
515
|
type: "url",
|
|
515
|
-
value:
|
|
516
|
-
onChange: (e) =>
|
|
517
|
-
placeholder:
|
|
516
|
+
value: K.privacyPolicyUrl,
|
|
517
|
+
onChange: (e) => Z("privacyPolicyUrl", e.target.value),
|
|
518
|
+
placeholder: E("devportal.privacyPolicyUrlPlaceholder", "https://example.com/privacy")
|
|
518
519
|
}),
|
|
519
520
|
/* @__PURE__ */ y(s, {
|
|
520
|
-
label:
|
|
521
|
+
label: E("devportal.termsOfServiceUrl", "Terms of Service URL"),
|
|
521
522
|
type: "url",
|
|
522
|
-
value:
|
|
523
|
-
onChange: (e) =>
|
|
524
|
-
placeholder:
|
|
523
|
+
value: K.termsOfServiceUrl,
|
|
524
|
+
onChange: (e) => Z("termsOfServiceUrl", e.target.value),
|
|
525
|
+
placeholder: E("devportal.termsOfServiceUrlPlaceholder", "https://example.com/terms")
|
|
525
526
|
})
|
|
526
527
|
]
|
|
527
528
|
})
|
|
528
529
|
}),
|
|
529
|
-
(
|
|
530
|
+
(K.appType === "INTEGRATION" || K.appType === "API_INTEGRATION") && /* @__PURE__ */ y(i, {
|
|
530
531
|
title: "Integration Setup",
|
|
531
532
|
description: "Configure the endpoints for your integration. After a user installs, we redirect them to your callback URL so your server can complete the connection.",
|
|
532
533
|
children: /* @__PURE__ */ b("div", {
|
|
@@ -535,21 +536,21 @@ var S = () => {
|
|
|
535
536
|
/* @__PURE__ */ y(s, {
|
|
536
537
|
label: "Post-install Callback URL",
|
|
537
538
|
type: "url",
|
|
538
|
-
value:
|
|
539
|
-
onChange: (e) =>
|
|
539
|
+
value: K.oauthAuthUrl,
|
|
540
|
+
onChange: (e) => Z("oauthAuthUrl", e.target.value),
|
|
540
541
|
placeholder: "https://yourapp.com/callback",
|
|
541
542
|
hint: "Users land here after install with ?installation_id=xxx appended"
|
|
542
543
|
}),
|
|
543
544
|
/* @__PURE__ */ y(s, {
|
|
544
545
|
label: "Revoke URL",
|
|
545
546
|
type: "url",
|
|
546
|
-
value:
|
|
547
|
-
onChange: (e) =>
|
|
547
|
+
value: K.oauthRevokeUrl,
|
|
548
|
+
onChange: (e) => Z("oauthRevokeUrl", e.target.value),
|
|
548
549
|
placeholder: "https://yourapp.com/oauth/revoke",
|
|
549
550
|
hint: "We POST to this URL when a user uninstalls your integration"
|
|
550
551
|
}),
|
|
551
552
|
(() => {
|
|
552
|
-
let e =
|
|
553
|
+
let e = B ?? H?.application?.signingSecret, t = "boff_sk_" + "•".repeat(32);
|
|
553
554
|
return /* @__PURE__ */ b("div", {
|
|
554
555
|
className: "space-y-1.5",
|
|
555
556
|
children: [
|
|
@@ -577,48 +578,48 @@ var S = () => {
|
|
|
577
578
|
children: [
|
|
578
579
|
/* @__PURE__ */ y("code", {
|
|
579
580
|
className: "flex-1 px-3 py-2 text-xs font-mono text-text-primary truncate",
|
|
580
|
-
children:
|
|
581
|
+
children: I ? e : t
|
|
581
582
|
}),
|
|
582
583
|
/* @__PURE__ */ y("button", {
|
|
583
584
|
type: "button",
|
|
584
|
-
onClick: () =>
|
|
585
|
+
onClick: () => L((e) => !e),
|
|
585
586
|
className: "px-2 py-2 text-text-secondary hover:text-text-primary border-l border-border-default",
|
|
586
|
-
title:
|
|
587
|
-
children: y(
|
|
587
|
+
title: I ? "Hide" : "Reveal",
|
|
588
|
+
children: y(I ? ve : _e, { size: 14 })
|
|
588
589
|
}),
|
|
589
590
|
/* @__PURE__ */ y("button", {
|
|
590
591
|
type: "button",
|
|
591
|
-
onClick: () =>
|
|
592
|
+
onClick: () => Be(e),
|
|
592
593
|
className: "px-2 py-2 text-text-secondary hover:text-text-primary border-l border-border-default",
|
|
593
594
|
title: "Copy to clipboard",
|
|
594
|
-
children:
|
|
595
|
+
children: Pe ? /* @__PURE__ */ y(h, {
|
|
595
596
|
size: 14,
|
|
596
597
|
className: "text-green-500"
|
|
597
|
-
}) : /* @__PURE__ */ y(
|
|
598
|
+
}) : /* @__PURE__ */ y(g, { size: 14 })
|
|
598
599
|
})
|
|
599
600
|
]
|
|
600
601
|
}), /* @__PURE__ */ b("button", {
|
|
601
602
|
type: "button",
|
|
602
|
-
onClick:
|
|
603
|
-
disabled:
|
|
603
|
+
onClick: Q,
|
|
604
|
+
disabled: R,
|
|
604
605
|
className: "flex items-center gap-1.5 px-3 py-2 text-xs rounded-md border border-border-default bg-bg-default text-text-primary hover:bg-bg-subtle disabled:opacity-50",
|
|
605
606
|
title: "Rotate signing secret",
|
|
606
607
|
children: [/* @__PURE__ */ y(_, {
|
|
607
608
|
size: 12,
|
|
608
|
-
className:
|
|
609
|
+
className: R ? "animate-spin" : ""
|
|
609
610
|
}), "Rotate"]
|
|
610
611
|
})]
|
|
611
612
|
}) : /* @__PURE__ */ b("button", {
|
|
612
613
|
type: "button",
|
|
613
|
-
onClick:
|
|
614
|
-
disabled:
|
|
614
|
+
onClick: Q,
|
|
615
|
+
disabled: R,
|
|
615
616
|
className: "flex items-center gap-1.5 px-3 py-2 text-xs rounded-md border border-border-default bg-bg-default text-text-primary hover:bg-bg-subtle disabled:opacity-50",
|
|
616
617
|
children: [/* @__PURE__ */ y(_, {
|
|
617
618
|
size: 12,
|
|
618
|
-
className:
|
|
619
|
+
className: R ? "animate-spin" : ""
|
|
619
620
|
}), "Generate Signing Secret"]
|
|
620
621
|
}),
|
|
621
|
-
|
|
622
|
+
B && /* @__PURE__ */ y("p", {
|
|
622
623
|
className: "text-xs text-amber-600 dark:text-amber-400",
|
|
623
624
|
children: "New secret generated. Copy it now — the old secret is already invalidated."
|
|
624
625
|
})
|
|
@@ -629,51 +630,51 @@ var S = () => {
|
|
|
629
630
|
})
|
|
630
631
|
}),
|
|
631
632
|
/* @__PURE__ */ y(i, {
|
|
632
|
-
title:
|
|
633
|
-
description:
|
|
633
|
+
title: E("devportal.settings", "Settings"),
|
|
634
|
+
description: E("devportal.settingsDescription", "Additional configuration options"),
|
|
634
635
|
children: /* @__PURE__ */ y("div", {
|
|
635
636
|
className: "space-y-4",
|
|
636
637
|
children: /* @__PURE__ */ y(ce, {
|
|
637
|
-
label:
|
|
638
|
-
description:
|
|
639
|
-
checked:
|
|
640
|
-
onChange: (e) =>
|
|
638
|
+
label: E("devportal.requireWorkspaceAdminApproval", "Require workspace admin approval"),
|
|
639
|
+
description: E("devportal.requireWorkspaceAdminApprovalDescription", "When enabled, workspace admins must approve installations before users can access this app"),
|
|
640
|
+
checked: K.requiresApproval,
|
|
641
|
+
onChange: (e) => Z("requiresApproval", e.target.checked)
|
|
641
642
|
})
|
|
642
643
|
})
|
|
643
644
|
}),
|
|
644
|
-
|
|
645
|
+
Ge && /* @__PURE__ */ b("div", {
|
|
645
646
|
className: "rounded-lg border border-border-subtle bg-bg-sunken p-4 space-y-2",
|
|
646
647
|
children: [/* @__PURE__ */ b("p", {
|
|
647
648
|
className: "text-sm font-medium text-text-primary flex items-center gap-2",
|
|
648
|
-
children: [/* @__PURE__ */ y(
|
|
649
|
+
children: [/* @__PURE__ */ y(xe, { size: 14 }), E("devportal.submissionChecklist", "Submission Checklist")]
|
|
649
650
|
}), [
|
|
650
651
|
{
|
|
651
|
-
label:
|
|
652
|
-
ok: !!
|
|
652
|
+
label: E("devportal.checkName", "Name set"),
|
|
653
|
+
ok: !!K.name.trim()
|
|
653
654
|
},
|
|
654
655
|
{
|
|
655
|
-
label:
|
|
656
|
-
ok: !!
|
|
656
|
+
label: E("devportal.checkShortDesc", "Short description set"),
|
|
657
|
+
ok: !!K.shortDescription.trim()
|
|
657
658
|
},
|
|
658
659
|
{
|
|
659
|
-
label:
|
|
660
|
-
ok: !!
|
|
660
|
+
label: E("devportal.checkFullDesc", "Full description added"),
|
|
661
|
+
ok: !!K.description.trim()
|
|
661
662
|
},
|
|
662
663
|
{
|
|
663
|
-
label:
|
|
664
|
-
ok: !!
|
|
664
|
+
label: E("devportal.checkCategory", "Category selected"),
|
|
665
|
+
ok: !!K.category
|
|
665
666
|
},
|
|
666
667
|
{
|
|
667
|
-
label:
|
|
668
|
-
ok: !!
|
|
668
|
+
label: E("devportal.checkVisibility", "Visibility set to Public or Unlisted"),
|
|
669
|
+
ok: !!K.visibility && K.visibility !== "PRIVATE"
|
|
669
670
|
},
|
|
670
671
|
{
|
|
671
|
-
label:
|
|
672
|
-
ok: !
|
|
672
|
+
label: E("devportal.checkSaved", "All changes saved"),
|
|
673
|
+
ok: !P
|
|
673
674
|
},
|
|
674
|
-
...
|
|
675
|
-
label:
|
|
676
|
-
ok: (
|
|
675
|
+
...G?.appType === "NODE" || G?.appType === "WORKFLOW" ? [{
|
|
676
|
+
label: E("devportal.checkVersion", "At least one version uploaded"),
|
|
677
|
+
ok: (H?.application?.versions?.totalCount ?? 0) > 0
|
|
677
678
|
}] : []
|
|
678
679
|
].map((e) => /* @__PURE__ */ b("div", {
|
|
679
680
|
className: "flex items-center gap-2 text-sm",
|
|
@@ -695,44 +696,44 @@ var S = () => {
|
|
|
695
696
|
className: "flex items-center justify-end",
|
|
696
697
|
children: /* @__PURE__ */ y("button", {
|
|
697
698
|
type: "submit",
|
|
698
|
-
disabled:
|
|
699
|
-
"aria-disabled": !
|
|
699
|
+
disabled: D || !P || !w,
|
|
700
|
+
"aria-disabled": !w,
|
|
700
701
|
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",
|
|
701
|
-
children:
|
|
702
|
+
children: D ? /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }), E("devportal.saving", "Saving...")] }) : /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(be, { size: 16 }), E("devportal.saveChanges", "Save Changes")] })
|
|
702
703
|
})
|
|
703
704
|
}), /* @__PURE__ */ b("div", {
|
|
704
705
|
className: "rounded-lg border border-border-subtle bg-status-error-bg-subtle p-4",
|
|
705
706
|
children: [
|
|
706
707
|
/* @__PURE__ */ y("h3", {
|
|
707
708
|
className: "text-sm font-medium text-status-error-text",
|
|
708
|
-
children:
|
|
709
|
+
children: E("devportal.dangerZone", "Danger Zone")
|
|
709
710
|
}),
|
|
710
711
|
/* @__PURE__ */ y("p", {
|
|
711
712
|
className: "mt-1 text-sm text-status-error-text",
|
|
712
|
-
children:
|
|
713
|
+
children: E("devportal.dangerZoneWarning", "These actions are irreversible. Please proceed with caution.")
|
|
713
714
|
}),
|
|
714
715
|
/* @__PURE__ */ b("div", {
|
|
715
716
|
className: "mt-4 flex gap-3",
|
|
716
717
|
children: [
|
|
717
|
-
|
|
718
|
+
Ke && /* @__PURE__ */ b("button", {
|
|
718
719
|
type: "button",
|
|
719
|
-
onClick: () =>
|
|
720
|
+
onClick: () => M(!0),
|
|
720
721
|
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",
|
|
721
|
-
children: [/* @__PURE__ */ y(
|
|
722
|
+
children: [/* @__PURE__ */ y(ge, { size: 14 }), E("devportal.deprecateApp", "Deprecate App")]
|
|
722
723
|
}),
|
|
723
|
-
|
|
724
|
+
qe && /* @__PURE__ */ b("button", {
|
|
724
725
|
type: "button",
|
|
725
|
-
onClick: () =>
|
|
726
|
+
onClick: () => N(!0),
|
|
726
727
|
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",
|
|
727
|
-
children: [/* @__PURE__ */ y(
|
|
728
|
+
children: [/* @__PURE__ */ y(ye, { size: 14 }), E("devportal.deactivateApp", "Deactivate App")]
|
|
728
729
|
}),
|
|
729
730
|
/* @__PURE__ */ b("button", {
|
|
730
731
|
type: "button",
|
|
731
|
-
onClick: () =>
|
|
732
|
-
disabled: !
|
|
733
|
-
"aria-disabled": !
|
|
732
|
+
onClick: () => j(!0),
|
|
733
|
+
disabled: !T,
|
|
734
|
+
"aria-disabled": !T,
|
|
734
735
|
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",
|
|
735
|
-
children: [/* @__PURE__ */ y(
|
|
736
|
+
children: [/* @__PURE__ */ y(Se, { size: 14 }), E("devportal.deleteApp", "Delete App")]
|
|
736
737
|
})
|
|
737
738
|
]
|
|
738
739
|
})
|
|
@@ -741,32 +742,32 @@ var S = () => {
|
|
|
741
742
|
})
|
|
742
743
|
]
|
|
743
744
|
}),
|
|
744
|
-
/* @__PURE__ */ y(
|
|
745
|
-
open:
|
|
746
|
-
onOpenChange:
|
|
747
|
-
title:
|
|
748
|
-
description:
|
|
749
|
-
confirmLabel:
|
|
745
|
+
/* @__PURE__ */ y(u, {
|
|
746
|
+
open: Ae,
|
|
747
|
+
onOpenChange: j,
|
|
748
|
+
title: E("devportal.deleteApplication", "Delete Application"),
|
|
749
|
+
description: E("devportal.deleteApplicationConfirm", `Are you sure you want to delete "${G.name}"? This action cannot be undone. All OAuth clients, API keys, webhooks, and analytics data will be permanently deleted.`),
|
|
750
|
+
confirmLabel: E("devportal.deleteApplication", "Delete Application"),
|
|
750
751
|
variant: "destructive",
|
|
751
|
-
onConfirm:
|
|
752
|
+
onConfirm: $
|
|
752
753
|
}),
|
|
753
|
-
/* @__PURE__ */ y(
|
|
754
|
-
open:
|
|
755
|
-
onOpenChange:
|
|
756
|
-
title:
|
|
757
|
-
description:
|
|
758
|
-
confirmLabel:
|
|
754
|
+
/* @__PURE__ */ y(u, {
|
|
755
|
+
open: je,
|
|
756
|
+
onOpenChange: M,
|
|
757
|
+
title: E("devportal.deprecateApplication", "Deprecate Application"),
|
|
758
|
+
description: E("devportal.deprecateApplicationConfirm", `Are you sure you want to deprecate "${G.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.`),
|
|
759
|
+
confirmLabel: E("devportal.deprecateApplication", "Deprecate Application"),
|
|
759
760
|
variant: "warning",
|
|
760
|
-
onConfirm:
|
|
761
|
+
onConfirm: Ue
|
|
761
762
|
}),
|
|
762
|
-
/* @__PURE__ */ y(
|
|
763
|
-
open:
|
|
764
|
-
onOpenChange:
|
|
765
|
-
title:
|
|
766
|
-
description:
|
|
767
|
-
confirmLabel:
|
|
763
|
+
/* @__PURE__ */ y(u, {
|
|
764
|
+
open: Me,
|
|
765
|
+
onOpenChange: N,
|
|
766
|
+
title: E("devportal.deactivateApplication", "Deactivate Application"),
|
|
767
|
+
description: E("devportal.deactivateApplicationConfirm", `Are you sure you want to deactivate "${G.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.`),
|
|
768
|
+
confirmLabel: E("devportal.deactivateApplication", "Deactivate Application"),
|
|
768
769
|
variant: "destructive",
|
|
769
|
-
onConfirm:
|
|
770
|
+
onConfirm: We
|
|
770
771
|
})
|
|
771
772
|
]
|
|
772
773
|
})
|