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