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