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