@burdenoff/microfe-devportal 2026.916.8 → 2026.917.2
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/ManifestViewer.d.ts +12 -0
- package/dist/devportal/components/ManifestViewer.d.ts.map +1 -0
- package/dist/devportal/components/ManifestViewer.js +58 -0
- package/dist/devportal/components/ManifestViewer.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/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/AdminReviewPage.d.ts.map +1 -1
- package/dist/devportal/pages/AdminReviewPage.js +54 -64
- package/dist/devportal/pages/AdminReviewPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.d.ts.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.js +304 -272
- 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 +137 -156
- 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 +271 -290
- 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/dist/translations/en.d.ts +4 -1
- package/dist/translations/en.d.ts.map +1 -1
- package/dist/translations/en.js +5 -2
- package/dist/translations/en.js.map +1 -1
- package/package.json +1 -1
|
@@ -13,38 +13,19 @@ import { PermissionGuard as ue } from "../components/PermissionGuard.js";
|
|
|
13
13
|
import { MarkdownEditor as de } from "../components/MarkdownEditor.js";
|
|
14
14
|
import "../components/index.js";
|
|
15
15
|
import { useDevportalPermission as d } from "../hooks/usePermission.js";
|
|
16
|
+
import { useProducts as fe } from "../hooks/useProducts.js";
|
|
17
|
+
import "../hooks/index.js";
|
|
16
18
|
import { DEVPORTAL_PERMISSIONS as f } from "../constants/permissions.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 h, Copy as _e, Eye as ve, EyeOff as ye, Power as be, RefreshCw as g, Save as xe, Send as Se, Trash2 as Ce } from "lucide-react";
|
|
21
|
+
import { useParams as we } from "react-router";
|
|
22
|
+
import { Fragment as _, jsx as v, jsxs as y } from "react/jsx-runtime";
|
|
23
|
+
import { useI18n as Te } 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 Ee = Object.entries(a).map(([e, t]) => ({
|
|
45
26
|
value: e,
|
|
46
27
|
label: t
|
|
47
|
-
})),
|
|
28
|
+
})), b = [
|
|
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
|
+
], De = [...b, {
|
|
61
42
|
value: "UNLISTED",
|
|
62
43
|
label: "Unlisted — shareable via link, not listed in store"
|
|
63
|
-
}],
|
|
44
|
+
}], Oe = [
|
|
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 ke(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 x = () => {
|
|
118
|
+
let { navigate: a, basePath: x } = e(), { appId: S } = we(), { t: Ae } = Te(), { products: C } = fe(), { allowed: w } = d(f.APP_UPDATE), { allowed: T } = d(f.APP_DELETE), E = (e, t) => {
|
|
119
|
+
let n = Ae(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 } = re({
|
|
122
|
+
variables: { id: S },
|
|
123
|
+
skip: !S
|
|
124
|
+
}), [G] = ae(), [Le] = ne(), [Re] = te(), [ze] = ie(), K = ke(U?.application);
|
|
144
125
|
p(() => {
|
|
145
|
-
let e =
|
|
146
|
-
if (!
|
|
126
|
+
let e = K?.name;
|
|
127
|
+
if (!S || !e) return;
|
|
147
128
|
let t = window.__breadcrumbRegistry;
|
|
148
|
-
return t?.register(
|
|
149
|
-
}, [
|
|
150
|
-
let [
|
|
129
|
+
return t?.register(S, e), () => t?.unregister(S);
|
|
130
|
+
}, [S, 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?.(`${x}${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 (S) {
|
|
189
|
+
B(!0);
|
|
209
190
|
try {
|
|
210
|
-
let e = (await ze({ variables: { id:
|
|
211
|
-
e && (Ne(e),
|
|
191
|
+
let e = (await ze({ variables: { id: S } })).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 (
|
|
236
|
+
}, Ue = async () => {
|
|
237
|
+
if (K) {
|
|
257
238
|
se("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__ */ v(n, { message: E("devportal.loadingApplication", "Loading application...") });
|
|
262
|
+
if (W) return /* @__PURE__ */ v(r, {
|
|
282
263
|
title: E("devportal.error", "Error"),
|
|
283
|
-
backLink: `${
|
|
264
|
+
backLink: `${x}/apps`,
|
|
284
265
|
backLabel: E("devportal.backToApplications", "Back to Applications"),
|
|
285
|
-
children: /* @__PURE__ */
|
|
266
|
+
children: /* @__PURE__ */ y("div", {
|
|
286
267
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
287
268
|
children: [
|
|
288
|
-
/* @__PURE__ */
|
|
269
|
+
/* @__PURE__ */ v(pe, {
|
|
289
270
|
size: 48,
|
|
290
271
|
className: "text-status-error-text mb-4"
|
|
291
272
|
}),
|
|
292
|
-
/* @__PURE__ */
|
|
273
|
+
/* @__PURE__ */ v("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__ */ v("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__ */ v(r, {
|
|
304
285
|
title: E("devportal.notFound", "Not Found"),
|
|
305
|
-
backLink: `${
|
|
286
|
+
backLink: `${x}/apps`,
|
|
306
287
|
backLabel: E("devportal.backToApplications", "Back to Applications"),
|
|
307
|
-
children: /* @__PURE__ */
|
|
288
|
+
children: /* @__PURE__ */ v(ee, {
|
|
308
289
|
illustration: "empty-generic",
|
|
309
|
-
icon: /* @__PURE__ */
|
|
290
|
+
icon: /* @__PURE__ */ v(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__ */ v(ue, {
|
|
316
297
|
authOnly: !0,
|
|
317
|
-
children: /* @__PURE__ */
|
|
318
|
-
title: `${E("devportal.editAppTitlePrefix", "Edit:")} ${
|
|
298
|
+
children: /* @__PURE__ */ y(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: `${x}/apps/${K.id}`,
|
|
322
303
|
backLabel: E("devportal.backToApplication", "Back to Application"),
|
|
323
|
-
actions: /* @__PURE__ */
|
|
304
|
+
actions: /* @__PURE__ */ v("div", {
|
|
324
305
|
className: "flex items-center gap-2",
|
|
325
|
-
children: /* @__PURE__ */
|
|
326
|
-
status:
|
|
306
|
+
children: /* @__PURE__ */ v(oe, {
|
|
307
|
+
status: K.status,
|
|
327
308
|
type: "app"
|
|
328
309
|
})
|
|
329
310
|
}),
|
|
330
311
|
children: [
|
|
331
|
-
/* @__PURE__ */
|
|
312
|
+
/* @__PURE__ */ y("form", {
|
|
332
313
|
onSubmit: He,
|
|
333
314
|
className: "space-y-8 max-w-3xl",
|
|
334
315
|
children: [
|
|
335
|
-
|
|
316
|
+
K.status === "PUBLISHED" && /* @__PURE__ */ y("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__ */ v(me, {
|
|
338
319
|
size: 20,
|
|
339
320
|
className: "text-status-warning-text flex-shrink-0 mt-0.5"
|
|
340
|
-
}), /* @__PURE__ */
|
|
321
|
+
}), /* @__PURE__ */ y("div", {
|
|
341
322
|
className: "text-sm text-status-warning-text",
|
|
342
|
-
children: [/* @__PURE__ */
|
|
323
|
+
children: [/* @__PURE__ */ v("p", {
|
|
343
324
|
className: "font-medium",
|
|
344
325
|
children: E("devportal.appIsPublished", "This application is published")
|
|
345
|
-
}), /* @__PURE__ */
|
|
326
|
+
}), /* @__PURE__ */ v("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__ */ v(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__ */ y("div", {
|
|
355
336
|
className: "space-y-4",
|
|
356
337
|
children: [
|
|
357
|
-
/* @__PURE__ */
|
|
338
|
+
/* @__PURE__ */ v(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__ */ v(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__ */ v(le, {
|
|
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__ */ v(de, {
|
|
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,182 @@ var S = () => {
|
|
|
392
373
|
]
|
|
393
374
|
})
|
|
394
375
|
}),
|
|
395
|
-
/* @__PURE__ */
|
|
376
|
+
/* @__PURE__ */ y(i, {
|
|
396
377
|
title: E("devportal.classification", "Classification"),
|
|
397
378
|
description: E("devportal.classificationDescription", "Categorize your application"),
|
|
398
379
|
children: [
|
|
399
|
-
/* @__PURE__ */
|
|
380
|
+
/* @__PURE__ */ y("div", {
|
|
400
381
|
className: "grid gap-4 sm:grid-cols-2",
|
|
401
382
|
children: [
|
|
402
|
-
/* @__PURE__ */
|
|
383
|
+
/* @__PURE__ */ v(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: Ee,
|
|
407
388
|
required: !0,
|
|
408
389
|
error: k.appType
|
|
409
390
|
}),
|
|
410
|
-
/* @__PURE__ */
|
|
391
|
+
/* @__PURE__ */ v(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: Oe,
|
|
415
396
|
required: !0,
|
|
416
397
|
error: k.category
|
|
417
398
|
}),
|
|
418
|
-
/* @__PURE__ */
|
|
399
|
+
/* @__PURE__ */ v(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" ? De : b,
|
|
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__ */ v(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__ */ v(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__ */ y("div", {
|
|
440
421
|
className: "space-y-2",
|
|
441
422
|
children: [
|
|
442
|
-
/* @__PURE__ */
|
|
423
|
+
/* @__PURE__ */ v("label", {
|
|
443
424
|
className: "block text-sm font-medium text-text-primary",
|
|
444
425
|
children: "Compatible Products"
|
|
445
426
|
}),
|
|
446
|
-
/* @__PURE__ */
|
|
427
|
+
/* @__PURE__ */ y("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__ */
|
|
436
|
+
/* @__PURE__ */ v("div", {
|
|
456
437
|
className: "flex flex-wrap gap-3",
|
|
457
|
-
children:
|
|
458
|
-
let n =
|
|
459
|
-
return /* @__PURE__ */
|
|
438
|
+
children: C.map((e) => {
|
|
439
|
+
let n = Y.includes(e.slug);
|
|
440
|
+
return /* @__PURE__ */ y("label", {
|
|
460
441
|
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"),
|
|
461
442
|
children: [
|
|
462
|
-
/* @__PURE__ */
|
|
443
|
+
/* @__PURE__ */ v("input", {
|
|
463
444
|
type: "checkbox",
|
|
464
445
|
className: "sr-only",
|
|
465
446
|
checked: n,
|
|
466
447
|
onChange: () => {
|
|
467
|
-
|
|
448
|
+
X((t) => n ? t.filter((t) => t !== e.slug) : [...t, e.slug]), I(!0);
|
|
468
449
|
}
|
|
469
450
|
}),
|
|
470
|
-
n && /* @__PURE__ */
|
|
451
|
+
n && /* @__PURE__ */ v(h, {
|
|
471
452
|
size: 14,
|
|
472
453
|
className: "text-primary flex-shrink-0"
|
|
473
454
|
}),
|
|
474
|
-
e.
|
|
455
|
+
e.name
|
|
475
456
|
]
|
|
476
|
-
}, e.
|
|
457
|
+
}, e.id);
|
|
477
458
|
})
|
|
478
459
|
})
|
|
479
460
|
]
|
|
480
461
|
})
|
|
481
462
|
]
|
|
482
463
|
}),
|
|
483
|
-
/* @__PURE__ */
|
|
464
|
+
/* @__PURE__ */ v(i, {
|
|
484
465
|
title: E("devportal.links", "Links"),
|
|
485
466
|
description: E("devportal.linksDescription", "External resources for your application"),
|
|
486
|
-
children: /* @__PURE__ */
|
|
467
|
+
children: /* @__PURE__ */ y("div", {
|
|
487
468
|
className: "grid gap-4 sm:grid-cols-2",
|
|
488
469
|
children: [
|
|
489
|
-
/* @__PURE__ */
|
|
470
|
+
/* @__PURE__ */ v(s, {
|
|
490
471
|
label: E("devportal.websiteUrl", "Website URL"),
|
|
491
472
|
type: "url",
|
|
492
|
-
value:
|
|
493
|
-
onChange: (e) =>
|
|
473
|
+
value: q.websiteUrl,
|
|
474
|
+
onChange: (e) => Q("websiteUrl", e.target.value),
|
|
494
475
|
placeholder: E("devportal.websiteUrlPlaceholder", "https://example.com")
|
|
495
476
|
}),
|
|
496
|
-
/* @__PURE__ */
|
|
477
|
+
/* @__PURE__ */ v(s, {
|
|
497
478
|
label: E("devportal.documentationUrl", "Documentation URL"),
|
|
498
479
|
type: "url",
|
|
499
|
-
value:
|
|
500
|
-
onChange: (e) =>
|
|
480
|
+
value: q.documentationUrl,
|
|
481
|
+
onChange: (e) => Q("documentationUrl", e.target.value),
|
|
501
482
|
placeholder: E("devportal.documentationUrlPlaceholder", "https://docs.example.com")
|
|
502
483
|
}),
|
|
503
|
-
/* @__PURE__ */
|
|
484
|
+
/* @__PURE__ */ v(s, {
|
|
504
485
|
label: E("devportal.supportUrl", "Support URL"),
|
|
505
486
|
type: "url",
|
|
506
|
-
value:
|
|
507
|
-
onChange: (e) =>
|
|
487
|
+
value: q.supportUrl,
|
|
488
|
+
onChange: (e) => Q("supportUrl", e.target.value),
|
|
508
489
|
placeholder: E("devportal.supportUrlPlaceholder", "https://support.example.com")
|
|
509
490
|
}),
|
|
510
|
-
/* @__PURE__ */
|
|
491
|
+
/* @__PURE__ */ v(s, {
|
|
511
492
|
label: E("devportal.githubUrl", "GitHub URL"),
|
|
512
493
|
type: "url",
|
|
513
|
-
value:
|
|
514
|
-
onChange: (e) =>
|
|
494
|
+
value: q.githubUrl,
|
|
495
|
+
onChange: (e) => Q("githubUrl", e.target.value),
|
|
515
496
|
placeholder: E("devportal.githubUrlPlaceholder", "https://github.com/org/repo")
|
|
516
497
|
}),
|
|
517
|
-
/* @__PURE__ */
|
|
498
|
+
/* @__PURE__ */ v(s, {
|
|
518
499
|
label: E("devportal.privacyPolicyUrl", "Privacy Policy URL"),
|
|
519
500
|
type: "url",
|
|
520
|
-
value:
|
|
521
|
-
onChange: (e) =>
|
|
501
|
+
value: q.privacyPolicyUrl,
|
|
502
|
+
onChange: (e) => Q("privacyPolicyUrl", e.target.value),
|
|
522
503
|
placeholder: E("devportal.privacyPolicyUrlPlaceholder", "https://example.com/privacy")
|
|
523
504
|
}),
|
|
524
|
-
/* @__PURE__ */
|
|
505
|
+
/* @__PURE__ */ v(s, {
|
|
525
506
|
label: E("devportal.termsOfServiceUrl", "Terms of Service URL"),
|
|
526
507
|
type: "url",
|
|
527
|
-
value:
|
|
528
|
-
onChange: (e) =>
|
|
508
|
+
value: q.termsOfServiceUrl,
|
|
509
|
+
onChange: (e) => Q("termsOfServiceUrl", e.target.value),
|
|
529
510
|
placeholder: E("devportal.termsOfServiceUrlPlaceholder", "https://example.com/terms")
|
|
530
511
|
})
|
|
531
512
|
]
|
|
532
513
|
})
|
|
533
514
|
}),
|
|
534
|
-
(
|
|
515
|
+
(q.appType === "INTEGRATION" || q.appType === "API_INTEGRATION") && /* @__PURE__ */ v(i, {
|
|
535
516
|
title: "Integration Setup",
|
|
536
517
|
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__ */
|
|
518
|
+
children: /* @__PURE__ */ y("div", {
|
|
538
519
|
className: "space-y-4",
|
|
539
520
|
children: [
|
|
540
|
-
/* @__PURE__ */
|
|
521
|
+
/* @__PURE__ */ v(s, {
|
|
541
522
|
label: "Post-install Callback URL",
|
|
542
523
|
type: "url",
|
|
543
|
-
value:
|
|
544
|
-
onChange: (e) =>
|
|
524
|
+
value: q.oauthAuthUrl,
|
|
525
|
+
onChange: (e) => Q("oauthAuthUrl", e.target.value),
|
|
545
526
|
placeholder: "https://yourapp.com/callback",
|
|
546
527
|
hint: "Users land here after install with ?installation_id=xxx appended"
|
|
547
528
|
}),
|
|
548
|
-
/* @__PURE__ */
|
|
529
|
+
/* @__PURE__ */ v(s, {
|
|
549
530
|
label: "Revoke URL",
|
|
550
531
|
type: "url",
|
|
551
|
-
value:
|
|
552
|
-
onChange: (e) =>
|
|
532
|
+
value: q.oauthRevokeUrl,
|
|
533
|
+
onChange: (e) => Q("oauthRevokeUrl", e.target.value),
|
|
553
534
|
placeholder: "https://yourapp.com/oauth/revoke",
|
|
554
535
|
hint: "We POST to this URL when a user uninstalls your integration"
|
|
555
536
|
}),
|
|
556
537
|
(() => {
|
|
557
|
-
let e =
|
|
558
|
-
return /* @__PURE__ */
|
|
538
|
+
let e = V ?? U?.application?.signingSecret, t = "boff_sk_" + "•".repeat(32);
|
|
539
|
+
return /* @__PURE__ */ y("div", {
|
|
559
540
|
className: "space-y-1.5",
|
|
560
541
|
children: [
|
|
561
|
-
/* @__PURE__ */
|
|
542
|
+
/* @__PURE__ */ v("label", {
|
|
562
543
|
className: "block text-sm font-medium text-text-primary",
|
|
563
544
|
children: "Signing Secret"
|
|
564
545
|
}),
|
|
565
|
-
/* @__PURE__ */
|
|
546
|
+
/* @__PURE__ */ y("p", {
|
|
566
547
|
className: "text-xs text-text-secondary",
|
|
567
548
|
children: [
|
|
568
549
|
"Use this secret to authenticate",
|
|
569
550
|
" ",
|
|
570
|
-
/* @__PURE__ */
|
|
551
|
+
/* @__PURE__ */ v("code", {
|
|
571
552
|
className: "font-mono text-xs bg-bg-sunken px-1 py-0.5 rounded",
|
|
572
553
|
children: "verifyInstallation"
|
|
573
554
|
}),
|
|
@@ -575,55 +556,55 @@ var S = () => {
|
|
|
575
556
|
"calls from your integration server. Store it securely — it is only shown immediately after generation or rotation."
|
|
576
557
|
]
|
|
577
558
|
}),
|
|
578
|
-
e ? /* @__PURE__ */
|
|
559
|
+
e ? /* @__PURE__ */ y("div", {
|
|
579
560
|
className: "flex items-center gap-2",
|
|
580
|
-
children: [/* @__PURE__ */
|
|
561
|
+
children: [/* @__PURE__ */ y("div", {
|
|
581
562
|
className: "flex-1 flex items-center gap-0 rounded-md border border-border-default bg-bg-sunken overflow-hidden",
|
|
582
563
|
children: [
|
|
583
|
-
/* @__PURE__ */
|
|
564
|
+
/* @__PURE__ */ v("code", {
|
|
584
565
|
className: "flex-1 px-3 py-2 text-xs font-mono text-text-primary truncate",
|
|
585
|
-
children:
|
|
566
|
+
children: L ? e : t
|
|
586
567
|
}),
|
|
587
|
-
/* @__PURE__ */
|
|
568
|
+
/* @__PURE__ */ v("button", {
|
|
588
569
|
type: "button",
|
|
589
|
-
onClick: () =>
|
|
570
|
+
onClick: () => R((e) => !e),
|
|
590
571
|
className: "px-2 py-2 text-text-secondary hover:text-text-primary border-l border-border-default",
|
|
591
|
-
title:
|
|
592
|
-
children:
|
|
572
|
+
title: L ? "Hide" : "Reveal",
|
|
573
|
+
children: v(L ? ye : ve, { size: 14 })
|
|
593
574
|
}),
|
|
594
|
-
/* @__PURE__ */
|
|
575
|
+
/* @__PURE__ */ v("button", {
|
|
595
576
|
type: "button",
|
|
596
577
|
onClick: () => Be(e),
|
|
597
578
|
className: "px-2 py-2 text-text-secondary hover:text-text-primary border-l border-border-default",
|
|
598
579
|
title: "Copy to clipboard",
|
|
599
|
-
children: Pe ? /* @__PURE__ */
|
|
580
|
+
children: Pe ? /* @__PURE__ */ v(h, {
|
|
600
581
|
size: 14,
|
|
601
582
|
className: "text-green-500"
|
|
602
|
-
}) : /* @__PURE__ */
|
|
583
|
+
}) : /* @__PURE__ */ v(_e, { size: 14 })
|
|
603
584
|
})
|
|
604
585
|
]
|
|
605
|
-
}), /* @__PURE__ */
|
|
586
|
+
}), /* @__PURE__ */ y("button", {
|
|
606
587
|
type: "button",
|
|
607
|
-
onClick:
|
|
608
|
-
disabled:
|
|
588
|
+
onClick: $,
|
|
589
|
+
disabled: z,
|
|
609
590
|
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
591
|
title: "Rotate signing secret",
|
|
611
|
-
children: [/* @__PURE__ */
|
|
592
|
+
children: [/* @__PURE__ */ v(g, {
|
|
612
593
|
size: 12,
|
|
613
|
-
className:
|
|
594
|
+
className: z ? "animate-spin" : ""
|
|
614
595
|
}), "Rotate"]
|
|
615
596
|
})]
|
|
616
|
-
}) : /* @__PURE__ */
|
|
597
|
+
}) : /* @__PURE__ */ y("button", {
|
|
617
598
|
type: "button",
|
|
618
|
-
onClick:
|
|
619
|
-
disabled:
|
|
599
|
+
onClick: $,
|
|
600
|
+
disabled: z,
|
|
620
601
|
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__ */
|
|
602
|
+
children: [/* @__PURE__ */ v(g, {
|
|
622
603
|
size: 12,
|
|
623
|
-
className:
|
|
604
|
+
className: z ? "animate-spin" : ""
|
|
624
605
|
}), "Generate Signing Secret"]
|
|
625
606
|
}),
|
|
626
|
-
|
|
607
|
+
V && /* @__PURE__ */ v("p", {
|
|
627
608
|
className: "text-xs text-amber-600 dark:text-amber-400",
|
|
628
609
|
children: "New secret generated. Copy it now — the old secret is already invalidated."
|
|
629
610
|
})
|
|
@@ -633,111 +614,111 @@ var S = () => {
|
|
|
633
614
|
]
|
|
634
615
|
})
|
|
635
616
|
}),
|
|
636
|
-
/* @__PURE__ */
|
|
617
|
+
/* @__PURE__ */ v(i, {
|
|
637
618
|
title: E("devportal.settings", "Settings"),
|
|
638
619
|
description: E("devportal.settingsDescription", "Additional configuration options"),
|
|
639
|
-
children: /* @__PURE__ */
|
|
620
|
+
children: /* @__PURE__ */ v("div", {
|
|
640
621
|
className: "space-y-4",
|
|
641
|
-
children: /* @__PURE__ */
|
|
622
|
+
children: /* @__PURE__ */ v(ce, {
|
|
642
623
|
label: E("devportal.requireWorkspaceAdminApproval", "Require workspace admin approval"),
|
|
643
624
|
description: E("devportal.requireWorkspaceAdminApprovalDescription", "When enabled, workspace admins must approve installations before users can access this app"),
|
|
644
|
-
checked:
|
|
645
|
-
onChange: (e) =>
|
|
625
|
+
checked: q.requiresApproval,
|
|
626
|
+
onChange: (e) => Q("requiresApproval", e.target.checked)
|
|
646
627
|
})
|
|
647
628
|
})
|
|
648
629
|
}),
|
|
649
|
-
|
|
630
|
+
Ke && /* @__PURE__ */ y("div", {
|
|
650
631
|
className: "rounded-lg border border-border-subtle bg-bg-sunken p-4 space-y-2",
|
|
651
|
-
children: [/* @__PURE__ */
|
|
632
|
+
children: [/* @__PURE__ */ y("p", {
|
|
652
633
|
className: "text-sm font-medium text-text-primary flex items-center gap-2",
|
|
653
|
-
children: [/* @__PURE__ */
|
|
634
|
+
children: [/* @__PURE__ */ v(Se, { size: 14 }), E("devportal.submissionChecklist", "Submission Checklist")]
|
|
654
635
|
}), [
|
|
655
636
|
{
|
|
656
637
|
label: E("devportal.checkName", "Name set"),
|
|
657
|
-
ok: !!
|
|
638
|
+
ok: !!q.name.trim()
|
|
658
639
|
},
|
|
659
640
|
{
|
|
660
641
|
label: E("devportal.checkShortDesc", "Short description set"),
|
|
661
|
-
ok: !!
|
|
642
|
+
ok: !!q.shortDescription.trim()
|
|
662
643
|
},
|
|
663
644
|
{
|
|
664
645
|
label: E("devportal.checkFullDesc", "Full description added"),
|
|
665
|
-
ok: !!
|
|
646
|
+
ok: !!q.description.trim()
|
|
666
647
|
},
|
|
667
648
|
{
|
|
668
649
|
label: E("devportal.checkCategory", "Category selected"),
|
|
669
|
-
ok: !!
|
|
650
|
+
ok: !!q.category
|
|
670
651
|
},
|
|
671
652
|
{
|
|
672
653
|
label: E("devportal.checkVisibility", "Visibility set to Public or Unlisted"),
|
|
673
|
-
ok: !!
|
|
654
|
+
ok: !!q.visibility && q.visibility !== "PRIVATE"
|
|
674
655
|
},
|
|
675
656
|
{
|
|
676
657
|
label: E("devportal.checkSaved", "All changes saved"),
|
|
677
|
-
ok: !
|
|
658
|
+
ok: !F
|
|
678
659
|
},
|
|
679
|
-
...
|
|
660
|
+
...K?.appType === "NODE" || K?.appType === "WORKFLOW" ? [{
|
|
680
661
|
label: E("devportal.checkVersion", "At least one version uploaded"),
|
|
681
|
-
ok: (
|
|
662
|
+
ok: (U?.application?.versions?.totalCount ?? 0) > 0
|
|
682
663
|
}] : []
|
|
683
|
-
].map((e) => /* @__PURE__ */
|
|
664
|
+
].map((e) => /* @__PURE__ */ y("div", {
|
|
684
665
|
className: "flex items-center gap-2 text-sm",
|
|
685
|
-
children: [e.ok ? /* @__PURE__ */
|
|
666
|
+
children: [e.ok ? /* @__PURE__ */ v("span", {
|
|
686
667
|
className: "text-status-success-text",
|
|
687
668
|
children: "✓"
|
|
688
|
-
}) : /* @__PURE__ */
|
|
669
|
+
}) : /* @__PURE__ */ v("span", {
|
|
689
670
|
className: "text-status-error-text",
|
|
690
671
|
children: "✗"
|
|
691
|
-
}), /* @__PURE__ */
|
|
672
|
+
}), /* @__PURE__ */ v("span", {
|
|
692
673
|
className: e.ok ? "text-text-secondary line-through" : "text-text-primary",
|
|
693
674
|
children: e.label
|
|
694
675
|
})]
|
|
695
676
|
}, e.label))]
|
|
696
677
|
}),
|
|
697
|
-
/* @__PURE__ */
|
|
678
|
+
/* @__PURE__ */ y("div", {
|
|
698
679
|
className: "flex flex-col gap-4 border-t pt-6",
|
|
699
|
-
children: [/* @__PURE__ */
|
|
680
|
+
children: [/* @__PURE__ */ v("div", {
|
|
700
681
|
className: "flex items-center justify-end",
|
|
701
|
-
children: /* @__PURE__ */
|
|
682
|
+
children: /* @__PURE__ */ v("button", {
|
|
702
683
|
type: "submit",
|
|
703
|
-
disabled: D || !
|
|
684
|
+
disabled: D || !F || !w,
|
|
704
685
|
"aria-disabled": !w,
|
|
705
686
|
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__ */
|
|
687
|
+
children: D ? /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v("span", { className: "h-4 w-4 animate-spin rounded-full border-2 border-current border-t-transparent" }), E("devportal.saving", "Saving...")] }) : /* @__PURE__ */ y(_, { children: [/* @__PURE__ */ v(xe, { size: 16 }), E("devportal.saveChanges", "Save Changes")] })
|
|
707
688
|
})
|
|
708
|
-
}), /* @__PURE__ */
|
|
689
|
+
}), /* @__PURE__ */ y("div", {
|
|
709
690
|
className: "rounded-lg border border-border-subtle bg-status-error-bg-subtle p-4",
|
|
710
691
|
children: [
|
|
711
|
-
/* @__PURE__ */
|
|
692
|
+
/* @__PURE__ */ v("h3", {
|
|
712
693
|
className: "text-sm font-medium text-status-error-text",
|
|
713
694
|
children: E("devportal.dangerZone", "Danger Zone")
|
|
714
695
|
}),
|
|
715
|
-
/* @__PURE__ */
|
|
696
|
+
/* @__PURE__ */ v("p", {
|
|
716
697
|
className: "mt-1 text-sm text-status-error-text",
|
|
717
698
|
children: E("devportal.dangerZoneWarning", "These actions are irreversible. Please proceed with caution.")
|
|
718
699
|
}),
|
|
719
|
-
/* @__PURE__ */
|
|
700
|
+
/* @__PURE__ */ y("div", {
|
|
720
701
|
className: "mt-4 flex gap-3",
|
|
721
702
|
children: [
|
|
722
|
-
|
|
703
|
+
qe && /* @__PURE__ */ y("button", {
|
|
723
704
|
type: "button",
|
|
724
705
|
onClick: () => M(!0),
|
|
725
706
|
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__ */
|
|
707
|
+
children: [/* @__PURE__ */ v(ge, { size: 14 }), E("devportal.deprecateApp", "Deprecate App")]
|
|
727
708
|
}),
|
|
728
|
-
|
|
709
|
+
Je && /* @__PURE__ */ y("button", {
|
|
729
710
|
type: "button",
|
|
730
|
-
onClick: () =>
|
|
711
|
+
onClick: () => P(!0),
|
|
731
712
|
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__ */
|
|
713
|
+
children: [/* @__PURE__ */ v(be, { size: 14 }), E("devportal.deactivateApp", "Deactivate App")]
|
|
733
714
|
}),
|
|
734
|
-
/* @__PURE__ */
|
|
715
|
+
/* @__PURE__ */ y("button", {
|
|
735
716
|
type: "button",
|
|
736
717
|
onClick: () => j(!0),
|
|
737
718
|
disabled: !T,
|
|
738
719
|
"aria-disabled": !T,
|
|
739
720
|
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__ */
|
|
721
|
+
children: [/* @__PURE__ */ v(Ce, { size: 14 }), E("devportal.deleteApp", "Delete App")]
|
|
741
722
|
})
|
|
742
723
|
]
|
|
743
724
|
})
|
|
@@ -746,38 +727,38 @@ var S = () => {
|
|
|
746
727
|
})
|
|
747
728
|
]
|
|
748
729
|
}),
|
|
749
|
-
/* @__PURE__ */
|
|
750
|
-
open:
|
|
730
|
+
/* @__PURE__ */ v(u, {
|
|
731
|
+
open: je,
|
|
751
732
|
onOpenChange: j,
|
|
752
733
|
title: E("devportal.deleteApplication", "Delete Application"),
|
|
753
|
-
description: E("devportal.deleteApplicationConfirm", `Are you sure you want to delete "${
|
|
734
|
+
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
735
|
confirmLabel: E("devportal.deleteApplication", "Delete Application"),
|
|
755
736
|
variant: "destructive",
|
|
756
|
-
onConfirm:
|
|
737
|
+
onConfirm: Ue
|
|
757
738
|
}),
|
|
758
|
-
/* @__PURE__ */
|
|
759
|
-
open:
|
|
739
|
+
/* @__PURE__ */ v(u, {
|
|
740
|
+
open: Me,
|
|
760
741
|
onOpenChange: M,
|
|
761
742
|
title: E("devportal.deprecateApplication", "Deprecate Application"),
|
|
762
|
-
description: E("devportal.deprecateApplicationConfirm", `Are you sure you want to deprecate "${
|
|
743
|
+
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
744
|
confirmLabel: E("devportal.deprecateApplication", "Deprecate Application"),
|
|
764
745
|
variant: "warning",
|
|
765
|
-
onConfirm:
|
|
746
|
+
onConfirm: We
|
|
766
747
|
}),
|
|
767
|
-
/* @__PURE__ */
|
|
768
|
-
open:
|
|
769
|
-
onOpenChange:
|
|
748
|
+
/* @__PURE__ */ v(u, {
|
|
749
|
+
open: N,
|
|
750
|
+
onOpenChange: P,
|
|
770
751
|
title: E("devportal.deactivateApplication", "Deactivate Application"),
|
|
771
|
-
description: E("devportal.deactivateApplicationConfirm", `Are you sure you want to deactivate "${
|
|
752
|
+
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
753
|
confirmLabel: E("devportal.deactivateApplication", "Deactivate Application"),
|
|
773
754
|
variant: "destructive",
|
|
774
|
-
onConfirm:
|
|
755
|
+
onConfirm: Ge
|
|
775
756
|
})
|
|
776
757
|
]
|
|
777
758
|
})
|
|
778
759
|
});
|
|
779
760
|
};
|
|
780
761
|
//#endregion
|
|
781
|
-
export {
|
|
762
|
+
export { x as EditApplicationPage };
|
|
782
763
|
|
|
783
764
|
//# sourceMappingURL=EditApplicationPage.js.map
|