@burdenoff/microfe-devportal 2026.1026.3 → 2026.1031.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/devportal/DevportalRoutes.d.ts.map +1 -1
- package/dist/devportal/DevportalRoutes.js +127 -123
- package/dist/devportal/DevportalRoutes.js.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.d.ts.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.js +469 -454
- package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
- package/dist/devportal/pages/NodeLifecyclePage.d.ts +7 -0
- package/dist/devportal/pages/NodeLifecyclePage.d.ts.map +1 -0
- package/dist/devportal/pages/NodeLifecyclePage.js +649 -0
- package/dist/devportal/pages/NodeLifecyclePage.js.map +1 -0
- package/dist/devportal/utils/nodeLifecycle.d.ts +81 -0
- package/dist/devportal/utils/nodeLifecycle.d.ts.map +1 -0
- package/dist/devportal/utils/nodeLifecycle.js +280 -0
- package/dist/devportal/utils/nodeLifecycle.js.map +1 -0
- package/package.json +1 -1
|
@@ -3,27 +3,27 @@ import { EmptyState as t } from "../components/EmptyState.js";
|
|
|
3
3
|
import { useApproveApplicationVersionMutation as n, useCreateApplicationVersionMutation as r, useDeprecateApplicationVersionMutation as ee, useGetApplicationQuery as te, useGetApplicationVersionsQuery as ne, usePublishApplicationVersionMutation as re, usePublishApplicationVersionToOrganizationMutation as ie, useRejectApplicationVersionMutation as ae, useUpdateApplicationVersionMutation as oe } from "../../generated/global-operations.js";
|
|
4
4
|
import { PageLayout as se } from "../components/PageLayout.js";
|
|
5
5
|
import { StatusBadge as ce } from "../components/StatusBadge.js";
|
|
6
|
-
import { SelectionCheckbox as
|
|
7
|
-
import { DataTable as
|
|
8
|
-
import { InputField as
|
|
9
|
-
import { ConfirmDialog as
|
|
10
|
-
import { PermissionGuard as
|
|
11
|
-
import { MarkdownEditor as
|
|
12
|
-
import { ManifestViewer as
|
|
13
|
-
import { PackageValidationPanel as
|
|
6
|
+
import { SelectionCheckbox as i } from "../components/SelectionCheckbox.js";
|
|
7
|
+
import { DataTable as le } from "../components/DataTable.js";
|
|
8
|
+
import { InputField as ue } from "../components/FormField.js";
|
|
9
|
+
import { ConfirmDialog as a } from "../components/ConfirmDialog.js";
|
|
10
|
+
import { PermissionGuard as de } from "../components/PermissionGuard.js";
|
|
11
|
+
import { MarkdownEditor as o } from "../components/MarkdownEditor.js";
|
|
12
|
+
import { ManifestViewer as fe } from "../components/ManifestViewer.js";
|
|
13
|
+
import { PackageValidationPanel as pe, readPackageValidationState as s } from "../components/PackageValidationPanel.js";
|
|
14
14
|
import "../components/index.js";
|
|
15
|
-
import { useDevportalPermission as
|
|
15
|
+
import { useDevportalPermission as me } from "../hooks/usePermission.js";
|
|
16
16
|
import "../hooks/index.js";
|
|
17
|
-
import { DEVPORTAL_PERMISSIONS as
|
|
18
|
-
import
|
|
19
|
-
import { usePackageUpload as
|
|
20
|
-
import { useCallback as
|
|
21
|
-
import { AlertCircle as
|
|
22
|
-
import { useParams as
|
|
23
|
-
import { Fragment as
|
|
24
|
-
import { useI18n as
|
|
17
|
+
import { DEVPORTAL_PERMISSIONS as he } from "../constants/permissions.js";
|
|
18
|
+
import ge from "../../node_modules/date-fns/format.js";
|
|
19
|
+
import { usePackageUpload as _e } from "../hooks/usePackageUpload.js";
|
|
20
|
+
import { useCallback as c, useEffect as ve, useMemo as l, useRef as u, useState as d } from "react";
|
|
21
|
+
import { AlertCircle as f, Archive as ye, Building2 as be, CheckCircle as xe, Clock as Se, Loader2 as Ce, Package as we, Plus as Te, Rocket as Ee, Send as p, Upload as m, XCircle as De } from "lucide-react";
|
|
22
|
+
import { useParams as Oe } from "react-router";
|
|
23
|
+
import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
|
|
24
|
+
import { useI18n as ke } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
25
25
|
//#region src/devportal/pages/ApplicationVersionsPage.tsx
|
|
26
|
-
var
|
|
26
|
+
var v = (e) => {
|
|
27
27
|
if (e.trim()) try {
|
|
28
28
|
let t = JSON.parse(e);
|
|
29
29
|
if (typeof t.nodeVersion == "string" && t.nodeVersion.trim()) return t.nodeVersion.trim();
|
|
@@ -32,16 +32,16 @@ var y = (e) => {
|
|
|
32
32
|
if (typeof t.version == "string" && t.version.trim()) return t.version.trim();
|
|
33
33
|
} catch {}
|
|
34
34
|
};
|
|
35
|
-
function
|
|
35
|
+
function Ae(e) {
|
|
36
36
|
if (typeof e != "object" || !e) return !1;
|
|
37
37
|
let t = e.organizationPublish;
|
|
38
38
|
return typeof t == "object" && !!t;
|
|
39
39
|
}
|
|
40
|
-
var
|
|
41
|
-
let { t:
|
|
42
|
-
let n =
|
|
40
|
+
var je = () => {
|
|
41
|
+
let { t: je } = ke(), y = (e, t) => {
|
|
42
|
+
let n = je(e);
|
|
43
43
|
return n === e ? t : n;
|
|
44
|
-
}, { allowed:
|
|
44
|
+
}, { allowed: Me } = me(he.APP_VERSION_CREATE), { allowed: b } = me(he.APP_VERSION_PUBLISH), { allowed: x } = me(he.APP_VERSION_DEPRECATE), { appId: S } = Oe(), { workspacesGatewayUrl: Ne, authToken: Pe, workspaceId: C, getWorkspaceToken: Fe, navigate: Ie, basePath: Le } = e(), { upload: w, uploading: T, progress: Re, error: E } = _e(Ne, Pe, C, Fe), ze = u(null), Be = u(null), Ve = u(null), He = u(null), [Ue, We] = d(null), [Ge, D] = d(null), [Ke, O] = d(!1), [k, A] = d(null), [j, M] = d({
|
|
45
45
|
version: "",
|
|
46
46
|
releaseNotes: "",
|
|
47
47
|
changelog: "",
|
|
@@ -49,91 +49,94 @@ var ke = () => {
|
|
|
49
49
|
packageSize: "",
|
|
50
50
|
manifestJson: "",
|
|
51
51
|
requiredScopes: ""
|
|
52
|
-
}), [
|
|
52
|
+
}), [qe, N] = d(null), [Je, P] = d(null), [Ye, F] = d(null), [Xe, I] = d(null), [L, R] = d(/* @__PURE__ */ new Set()), [z, Ze] = d(null), [Qe, $e] = d(""), et = c((e) => {
|
|
53
53
|
let t = e.target.files?.[0];
|
|
54
54
|
if (!t) return;
|
|
55
55
|
let n = new FileReader();
|
|
56
56
|
n.onload = (e) => {
|
|
57
57
|
let n = e.target?.result;
|
|
58
58
|
if (typeof n == "string") {
|
|
59
|
-
let e =
|
|
60
|
-
|
|
59
|
+
let e = v(n);
|
|
60
|
+
M((t) => ({
|
|
61
61
|
...t,
|
|
62
62
|
manifestJson: n,
|
|
63
63
|
...e ? { version: e } : {}
|
|
64
|
-
})),
|
|
64
|
+
})), We(t.name);
|
|
65
65
|
}
|
|
66
66
|
}, n.readAsText(t), e.target.value = "";
|
|
67
|
-
}, []), [
|
|
68
|
-
variables: { id:
|
|
69
|
-
skip: !
|
|
67
|
+
}, []), [tt, B] = d(null), [nt, rt] = d(null), { data: V } = te({
|
|
68
|
+
variables: { id: S ?? "" },
|
|
69
|
+
skip: !S,
|
|
70
70
|
fetchPolicy: "cache-first"
|
|
71
71
|
}), H = V?.application?.appType === "WORKFLOW", U = V?.application?.appType === "NODE", W = [
|
|
72
72
|
"WORKFLOW",
|
|
73
73
|
"PARSER",
|
|
74
74
|
"WIDGET",
|
|
75
75
|
"DASHBOARD"
|
|
76
|
-
].includes(V?.application?.appType ?? ""),
|
|
77
|
-
|
|
76
|
+
].includes(V?.application?.appType ?? ""), it = !W && !U, at = U && V?.application?.visibility === "PRIVATE", G = V?.application, ot = G?.pricingDetails ?? {}, st = G?.pricingType === "FREE" || G?.pricingType === "PAID" && typeof ot.price == "number" && ot.price > 0, ct = !!G?.shortDescription?.trim() && !!G?.privacyPolicyUrl?.trim() && !!G?.termsOfServiceUrl?.trim(), K = st && ct, lt = [...ct ? [] : ["Complete your store listing (short description, privacy policy, terms of service)"], ...st ? [] : ["Set pricing in the Pricing tab"]];
|
|
77
|
+
ve(() => {
|
|
78
78
|
let e = V?.application?.name;
|
|
79
|
-
if (!
|
|
79
|
+
if (!S || !e) return;
|
|
80
80
|
let t = window.__breadcrumbRegistry;
|
|
81
|
-
return t?.register(
|
|
82
|
-
}, [
|
|
83
|
-
let { data: q, loading:
|
|
84
|
-
variables: { applicationId:
|
|
85
|
-
skip: !
|
|
81
|
+
return t?.register(S, e), () => t?.unregister(S);
|
|
82
|
+
}, [S, V?.application?.name]);
|
|
83
|
+
let { data: q, loading: ut, error: dt } = ne({
|
|
84
|
+
variables: { applicationId: S },
|
|
85
|
+
skip: !S,
|
|
86
86
|
fetchPolicy: "cache-and-network"
|
|
87
|
-
}), [
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
}), [ft, { loading: pt }] = r({ refetchQueries: ["GetApplicationVersions"] }), [mt, { loading: ht }] = oe({ refetchQueries: ["GetApplicationVersions"] }), [gt] = re({ refetchQueries: ["GetApplicationVersions"] }), [_t, { loading: vt }] = ie({ refetchQueries: ["GetApplicationVersions", "GetApplication"] }), [yt] = ee({ refetchQueries: ["GetApplicationVersions"] }), [bt] = n({ refetchQueries: ["GetApplicationVersions"] }), [xt] = ae({ refetchQueries: ["GetApplicationVersions"] }), J = l(() => q?.application?.versions?.edges?.map((e) => e.node) ?? [], [q?.application?.versions]), Y = l(() => J.filter((e) => L.has(e.id)), [J, L]), X = l(() => Y.filter((e) => e.status === "draft" || e.status === "rejected"), [Y]), Z = l(() => J.some((e) => e.status === "pending_review"), [J]), Q = l(() => Y.filter((e) => e.status?.toUpperCase() === "PUBLISHED" && !e.isLatest), [Y]), St = J.length > 0 && J.every((e) => L.has(e.id)), Ct = J.some((e) => L.has(e.id)) && !St, wt = (e) => {
|
|
88
|
+
Ie?.(`${Le}/apps/${S}/versions/${e}/lifecycle`);
|
|
89
|
+
}, Tt = async () => {
|
|
90
|
+
if (!S || !j.version.trim()) return;
|
|
91
|
+
F(null);
|
|
90
92
|
let e;
|
|
91
93
|
if (W) {
|
|
92
|
-
if (!
|
|
93
|
-
|
|
94
|
+
if (!j.manifestJson.trim()) {
|
|
95
|
+
F(H ? "Workflow Definition (JSON) is required — paste the {nodes, edges} object." : "Manifest (JSON) is required.");
|
|
94
96
|
return;
|
|
95
97
|
}
|
|
96
98
|
try {
|
|
97
|
-
e = JSON.parse(
|
|
99
|
+
e = JSON.parse(j.manifestJson);
|
|
98
100
|
} catch {
|
|
99
|
-
|
|
101
|
+
F(H ? "Invalid JSON in Workflow Definition — please check your input." : "Invalid JSON in Manifest — please check your input.");
|
|
100
102
|
return;
|
|
101
103
|
}
|
|
102
104
|
} else if (U) {
|
|
103
|
-
if (!
|
|
104
|
-
|
|
105
|
+
if (!j.packageUrl) {
|
|
106
|
+
F("Package zip is required for Node versions — upload a .zip file before creating.");
|
|
105
107
|
return;
|
|
106
108
|
}
|
|
107
|
-
if (!
|
|
108
|
-
|
|
109
|
+
if (!j.manifestJson.trim()) {
|
|
110
|
+
F("manifest.json is required for Node versions — upload or paste your manifest before creating.");
|
|
109
111
|
return;
|
|
110
112
|
}
|
|
111
113
|
try {
|
|
112
|
-
e = JSON.parse(
|
|
114
|
+
e = JSON.parse(j.manifestJson);
|
|
113
115
|
} catch {
|
|
114
|
-
|
|
116
|
+
F("Invalid JSON in manifest — please check your input.");
|
|
115
117
|
return;
|
|
116
118
|
}
|
|
117
|
-
} else if (
|
|
118
|
-
e = JSON.parse(
|
|
119
|
+
} else if (j.manifestJson.trim()) try {
|
|
120
|
+
e = JSON.parse(j.manifestJson);
|
|
119
121
|
} catch {
|
|
120
|
-
|
|
122
|
+
F("Invalid JSON in manifest — please check your input.");
|
|
121
123
|
return;
|
|
122
124
|
}
|
|
123
|
-
let t =
|
|
125
|
+
let t = it && j.requiredScopes.trim() ? j.requiredScopes.split(",").map((e) => e.trim()).filter(Boolean) : void 0;
|
|
124
126
|
try {
|
|
125
|
-
await
|
|
126
|
-
applicationId:
|
|
127
|
+
let n = await ft({ variables: {
|
|
128
|
+
applicationId: S,
|
|
127
129
|
input: {
|
|
128
|
-
version:
|
|
129
|
-
releaseNotes:
|
|
130
|
-
changelog:
|
|
131
|
-
packageUrl:
|
|
132
|
-
packageSize:
|
|
130
|
+
version: j.version,
|
|
131
|
+
releaseNotes: j.releaseNotes || void 0,
|
|
132
|
+
changelog: j.changelog || void 0,
|
|
133
|
+
packageUrl: j.packageUrl || void 0,
|
|
134
|
+
packageSize: j.packageSize || void 0,
|
|
133
135
|
manifest: e,
|
|
134
136
|
requiredScopes: t
|
|
135
137
|
}
|
|
136
|
-
} })
|
|
138
|
+
} });
|
|
139
|
+
O(!1), We(null), M({
|
|
137
140
|
version: "",
|
|
138
141
|
releaseNotes: "",
|
|
139
142
|
changelog: "",
|
|
@@ -141,411 +144,423 @@ var ke = () => {
|
|
|
141
144
|
packageSize: "",
|
|
142
145
|
manifestJson: "",
|
|
143
146
|
requiredScopes: ""
|
|
144
|
-
}),
|
|
147
|
+
}), P(y("devportal.versionCreatedSuccess", "Version created successfully"));
|
|
148
|
+
let r = n.data?.createApplicationVersion?.id;
|
|
149
|
+
U && r && wt(r);
|
|
145
150
|
} catch (e) {
|
|
146
|
-
|
|
151
|
+
N(e instanceof Error ? e.message : y("devportal.versionCreateFailed", "Failed to create version"));
|
|
147
152
|
}
|
|
148
|
-
},
|
|
153
|
+
}, Et = c(async (e) => {
|
|
149
154
|
let t = e.target.files?.[0];
|
|
150
155
|
if (t) {
|
|
151
156
|
e.target.value = "";
|
|
152
157
|
try {
|
|
153
|
-
let e = await
|
|
154
|
-
|
|
158
|
+
let e = await w(t);
|
|
159
|
+
M((n) => ({
|
|
155
160
|
...n,
|
|
156
161
|
packageUrl: e.downloadUrl,
|
|
157
162
|
packageSize: String(t.size)
|
|
158
163
|
}));
|
|
159
164
|
} catch {}
|
|
160
165
|
}
|
|
161
|
-
}, [
|
|
166
|
+
}, [w]), Dt = c(async (e) => {
|
|
162
167
|
let t = e.target.files?.[0];
|
|
163
168
|
if (t) {
|
|
164
169
|
e.target.value = "";
|
|
165
170
|
try {
|
|
166
|
-
let e = await
|
|
167
|
-
|
|
171
|
+
let e = await w(t);
|
|
172
|
+
A((n) => n && {
|
|
168
173
|
...n,
|
|
169
174
|
newPackageUrl: e.downloadUrl,
|
|
170
175
|
newPackageSize: String(t.size)
|
|
171
176
|
});
|
|
172
177
|
} catch {}
|
|
173
178
|
}
|
|
174
|
-
}, [
|
|
179
|
+
}, [w]), Ot = c((e) => {
|
|
175
180
|
let t = e.target.files?.[0];
|
|
176
181
|
if (!t) return;
|
|
177
182
|
let n = new FileReader();
|
|
178
183
|
n.onload = (e) => {
|
|
179
184
|
let n = e.target?.result;
|
|
180
|
-
typeof n == "string" && (
|
|
185
|
+
typeof n == "string" && (A((e) => e && {
|
|
181
186
|
...e,
|
|
182
187
|
manifestJson: n
|
|
183
|
-
}),
|
|
188
|
+
}), D(t.name));
|
|
184
189
|
}, n.readAsText(t), e.target.value = "";
|
|
185
|
-
}, []),
|
|
186
|
-
if (!
|
|
187
|
-
|
|
188
|
-
let e =
|
|
189
|
-
if (e &&
|
|
190
|
-
t = JSON.parse(
|
|
190
|
+
}, []), kt = async () => {
|
|
191
|
+
if (!k) return;
|
|
192
|
+
I(null);
|
|
193
|
+
let e = k.manifestJson.trim() !== k.originalManifestJson.trim(), t;
|
|
194
|
+
if (e && k.manifestJson.trim()) try {
|
|
195
|
+
t = JSON.parse(k.manifestJson);
|
|
191
196
|
} catch {
|
|
192
|
-
|
|
197
|
+
I("Invalid JSON in manifest — please check your input.");
|
|
193
198
|
return;
|
|
194
199
|
}
|
|
195
200
|
let n = {};
|
|
196
|
-
|
|
201
|
+
k.releaseNotes.trim() && (n.releaseNotes = k.releaseNotes), k.changelog.trim() && (n.changelog = k.changelog), k.newPackageUrl && (n.packageUrl = k.newPackageUrl, n.packageSize = k.newPackageSize), t && (n.manifest = t);
|
|
197
202
|
try {
|
|
198
|
-
await
|
|
199
|
-
id:
|
|
203
|
+
await mt({ variables: {
|
|
204
|
+
id: k.versionId,
|
|
200
205
|
input: n
|
|
201
|
-
} }),
|
|
206
|
+
} }), A(null), D(null), P(y("devportal.versionUpdatedSuccess", "Version updated successfully"));
|
|
202
207
|
} catch (e) {
|
|
203
|
-
|
|
208
|
+
N(e instanceof Error ? e.message : y("devportal.versionUpdateFailed", "Failed to update version"));
|
|
204
209
|
}
|
|
205
|
-
},
|
|
206
|
-
|
|
210
|
+
}, At = async (e) => {
|
|
211
|
+
N(null), P(null);
|
|
207
212
|
try {
|
|
208
|
-
await
|
|
213
|
+
let t = await gt({ variables: { id: e } });
|
|
214
|
+
if (t.error || !t.data?.publishApplicationVersion) throw t.error ?? Error(y("devportal.versionPublishFailed", "Failed to submit version for review"));
|
|
215
|
+
P(y("devportal.versionSubmittedSuccess", "Version submitted for review — you'll be notified when approved"));
|
|
209
216
|
} catch (e) {
|
|
210
|
-
|
|
217
|
+
N(e instanceof Error ? e.message : y("devportal.versionPublishFailed", "Failed to submit version for review"));
|
|
211
218
|
}
|
|
212
|
-
},
|
|
213
|
-
let e =
|
|
214
|
-
if (
|
|
215
|
-
|
|
219
|
+
}, jt = async () => {
|
|
220
|
+
let e = nt;
|
|
221
|
+
if (rt(null), !(!e || !C)) {
|
|
222
|
+
N(null), P(null);
|
|
216
223
|
try {
|
|
217
|
-
await
|
|
224
|
+
let t = await _t({ variables: {
|
|
218
225
|
id: e.id,
|
|
219
|
-
workspaceId:
|
|
220
|
-
} })
|
|
226
|
+
workspaceId: C
|
|
227
|
+
} });
|
|
228
|
+
if (t.error || !t.data?.publishApplicationVersionToOrganization) throw t.error ?? Error(y("devportal.versionPublishToOrganizationFailed", "Failed to publish the version to your organization"));
|
|
229
|
+
P(y("devportal.versionPublishedToOrganizationSuccess", "Version published to your organization. Workspace admins in your organization can now install it."));
|
|
221
230
|
} catch (e) {
|
|
222
|
-
|
|
231
|
+
N(e instanceof Error ? e.message : y("devportal.versionPublishToOrganizationFailed", "Failed to publish the version to your organization"));
|
|
223
232
|
}
|
|
224
233
|
}
|
|
225
|
-
},
|
|
226
|
-
|
|
234
|
+
}, Mt = async (e) => {
|
|
235
|
+
N(null), P(null);
|
|
227
236
|
try {
|
|
228
|
-
await
|
|
237
|
+
await yt({ variables: { id: e } }), P(y("devportal.versionDeprecatedSuccess", "Version deprecated successfully"));
|
|
229
238
|
} catch (e) {
|
|
230
|
-
|
|
239
|
+
N(e instanceof Error ? e.message : y("devportal.versionDeprecateFailed", "Failed to deprecate version"));
|
|
231
240
|
}
|
|
232
|
-
},
|
|
233
|
-
if (!(!z || !
|
|
234
|
-
|
|
241
|
+
}, Nt = async () => {
|
|
242
|
+
if (!(!z || !Qe.trim())) {
|
|
243
|
+
N(null), P(null);
|
|
235
244
|
try {
|
|
236
|
-
await
|
|
245
|
+
await xt({ variables: {
|
|
237
246
|
id: z.versionId,
|
|
238
|
-
reason:
|
|
239
|
-
} }),
|
|
247
|
+
reason: Qe
|
|
248
|
+
} }), P(y("devportal.versionRejectedSuccess", "Version rejected — developer has been notified")), Ze(null), $e("");
|
|
240
249
|
} catch (e) {
|
|
241
|
-
|
|
250
|
+
N(e instanceof Error ? e.message : y("devportal.versionRejectFailed", "Failed to reject version"));
|
|
242
251
|
}
|
|
243
252
|
}
|
|
244
|
-
},
|
|
253
|
+
}, Pt = (e) => e.status === "published" && e.isLatest ? /* @__PURE__ */ g(xe, {
|
|
245
254
|
size: 16,
|
|
246
255
|
className: "text-status-success-text"
|
|
247
|
-
}) : e.status === "pending_review" ? /* @__PURE__ */
|
|
256
|
+
}) : e.status === "pending_review" ? /* @__PURE__ */ g(p, {
|
|
248
257
|
size: 16,
|
|
249
258
|
className: "text-status-info-text"
|
|
250
|
-
}) : e.status === "rejected" ? /* @__PURE__ */
|
|
259
|
+
}) : e.status === "rejected" ? /* @__PURE__ */ g(De, {
|
|
251
260
|
size: 16,
|
|
252
261
|
className: "text-status-error-text"
|
|
253
|
-
}) : e.status === "draft" ? /* @__PURE__ */
|
|
262
|
+
}) : e.status === "draft" ? /* @__PURE__ */ g(Se, {
|
|
254
263
|
size: 16,
|
|
255
264
|
className: "text-status-warning-text"
|
|
256
|
-
}) : e.status === "deprecated" ? /* @__PURE__ */
|
|
265
|
+
}) : e.status === "deprecated" ? /* @__PURE__ */ g(ye, {
|
|
257
266
|
size: 16,
|
|
258
267
|
className: "text-text-secondary"
|
|
259
|
-
}) : /* @__PURE__ */
|
|
268
|
+
}) : /* @__PURE__ */ g(we, {
|
|
260
269
|
size: 16,
|
|
261
270
|
className: "text-accent-blue"
|
|
262
|
-
}),
|
|
263
|
-
|
|
271
|
+
}), Ft = (e, t) => {
|
|
272
|
+
R((n) => {
|
|
264
273
|
let r = new Set(n);
|
|
265
274
|
return t ? r.add(e) : r.delete(e), r;
|
|
266
275
|
});
|
|
267
|
-
},
|
|
268
|
-
|
|
276
|
+
}, It = (e) => {
|
|
277
|
+
R((t) => {
|
|
269
278
|
let n = new Set(t);
|
|
270
279
|
return J.forEach((t) => {
|
|
271
280
|
e ? n.add(t.id) : n.delete(t.id);
|
|
272
281
|
}), n;
|
|
273
282
|
});
|
|
274
|
-
},
|
|
283
|
+
}, $ = () => R(/* @__PURE__ */ new Set()), Lt = async () => {
|
|
275
284
|
if (X.length === 0) return;
|
|
276
|
-
|
|
277
|
-
let e = await Promise.allSettled(X.map((e) =>
|
|
278
|
-
|
|
279
|
-
},
|
|
285
|
+
N(null);
|
|
286
|
+
let e = await Promise.allSettled(X.map((e) => gt({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
287
|
+
P(`Published ${t} version${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), $(), B(null);
|
|
288
|
+
}, Rt = async () => {
|
|
280
289
|
if (Q.length === 0) return;
|
|
281
|
-
|
|
282
|
-
let e = await Promise.allSettled(Q.map((e) =>
|
|
283
|
-
|
|
284
|
-
},
|
|
285
|
-
return
|
|
286
|
-
title:
|
|
287
|
-
description:
|
|
288
|
-
backLink: `/apps/${
|
|
289
|
-
backLabel:
|
|
290
|
-
children: /* @__PURE__ */
|
|
290
|
+
N(null);
|
|
291
|
+
let e = await Promise.allSettled(Q.map((e) => yt({ variables: { id: e.id } }))), t = e.filter((e) => e.status === "fulfilled").length, n = e.length - t;
|
|
292
|
+
P(`Deprecated ${t} version${t === 1 ? "" : "s"}${n > 0 ? ` • ${n} failed` : ""}`), $(), B(null);
|
|
293
|
+
}, zt = v(j.manifestJson);
|
|
294
|
+
return ut && !q ? /* @__PURE__ */ g(se, {
|
|
295
|
+
title: y("devportal.versionManagement", "Version Management"),
|
|
296
|
+
description: y("devportal.versionManagementDescription", "Manage your application versions"),
|
|
297
|
+
backLink: `/apps/${S}`,
|
|
298
|
+
backLabel: y("devportal.backToApplication", "Back to Application"),
|
|
299
|
+
children: /* @__PURE__ */ g("div", {
|
|
291
300
|
className: "flex items-center justify-center py-16",
|
|
292
|
-
children: /* @__PURE__ */
|
|
301
|
+
children: /* @__PURE__ */ g(Ce, { className: "h-8 w-8 animate-spin text-text-secondary" })
|
|
293
302
|
})
|
|
294
|
-
}) :
|
|
295
|
-
title:
|
|
296
|
-
description:
|
|
297
|
-
backLink: `/apps/${
|
|
298
|
-
backLabel:
|
|
299
|
-
children: /* @__PURE__ */
|
|
300
|
-
icon: /* @__PURE__ */
|
|
303
|
+
}) : dt && !q ? /* @__PURE__ */ g(se, {
|
|
304
|
+
title: y("devportal.versionManagement", "Version Management"),
|
|
305
|
+
description: y("devportal.versionManagementDescription", "Manage your application versions"),
|
|
306
|
+
backLink: `/apps/${S}`,
|
|
307
|
+
backLabel: y("devportal.backToApplication", "Back to Application"),
|
|
308
|
+
children: /* @__PURE__ */ g(t, {
|
|
309
|
+
icon: /* @__PURE__ */ g(f, {
|
|
301
310
|
size: 32,
|
|
302
311
|
className: "text-status-error-text"
|
|
303
312
|
}),
|
|
304
|
-
title:
|
|
305
|
-
description:
|
|
313
|
+
title: y("devportal.failedToLoadVersions", "Failed to load versions"),
|
|
314
|
+
description: dt.message || y("devportal.versionsLoadError", "An error occurred while loading versions")
|
|
306
315
|
})
|
|
307
|
-
}) : /* @__PURE__ */
|
|
316
|
+
}) : /* @__PURE__ */ g(de, {
|
|
308
317
|
authOnly: !0,
|
|
309
|
-
children: /* @__PURE__ */
|
|
310
|
-
title:
|
|
311
|
-
description:
|
|
312
|
-
purpose: H ?
|
|
313
|
-
backLink: `/apps/${
|
|
314
|
-
backLabel:
|
|
315
|
-
actions: /* @__PURE__ */
|
|
318
|
+
children: /* @__PURE__ */ _(se, {
|
|
319
|
+
title: y("devportal.versionManagement", "Version Management"),
|
|
320
|
+
description: y("devportal.versionManagementDescription", "Manage your application versions"),
|
|
321
|
+
purpose: H ? y("devportal.versionManagementPurposeWorkflow", "Versions track releases of your workflow. Create a version for each significant change and paste the workflow definition JSON. No zip is needed — the manifest is the workflow.") : U ? y("devportal.versionManagementPurposeNode", "Versions are the releases of your node that users install. Upload a new zip whenever the node implementation changes, and update the manifest if the node's inputs, outputs, or operations change. Bump the version for any change users will see.") : W ? y("devportal.versionManagementPurposeManifestOnly", "Versions track releases of this item. Create a version for each significant change and paste the manifest JSON. No zip is needed.") : y("devportal.versionManagementPurposeIntegration", "Versions track permission and webhook changes for your integration. No zip or manifest is needed — create a new version whenever you add or change required scopes so users can review and accept the updated permissions."),
|
|
322
|
+
backLink: `/apps/${S}`,
|
|
323
|
+
backLabel: y("devportal.backToApplication", "Back to Application"),
|
|
324
|
+
actions: /* @__PURE__ */ _("button", {
|
|
316
325
|
onClick: () => {
|
|
317
|
-
|
|
326
|
+
F(null), O(!0);
|
|
318
327
|
},
|
|
319
|
-
disabled: !
|
|
320
|
-
"aria-disabled": !
|
|
328
|
+
disabled: !Me,
|
|
329
|
+
"aria-disabled": !Me,
|
|
321
330
|
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 disabled:opacity-50",
|
|
322
|
-
children: [/* @__PURE__ */
|
|
331
|
+
children: [/* @__PURE__ */ g(Te, { size: 16 }), y("devportal.newVersion", "New Version")]
|
|
323
332
|
}),
|
|
324
333
|
children: [
|
|
325
|
-
|
|
334
|
+
qe && /* @__PURE__ */ _("div", {
|
|
326
335
|
className: "rounded-lg border border-border-subtle bg-status-error-bg-subtle p-3 flex items-center gap-2 text-sm text-status-error-text",
|
|
327
336
|
children: [
|
|
328
|
-
/* @__PURE__ */
|
|
337
|
+
/* @__PURE__ */ g(f, {
|
|
329
338
|
size: 16,
|
|
330
339
|
className: "flex-shrink-0"
|
|
331
340
|
}),
|
|
332
|
-
|
|
333
|
-
/* @__PURE__ */
|
|
334
|
-
onClick: () =>
|
|
341
|
+
qe,
|
|
342
|
+
/* @__PURE__ */ g("button", {
|
|
343
|
+
onClick: () => N(null),
|
|
335
344
|
className: "ml-auto text-status-error-text hover:text-status-error-text",
|
|
336
|
-
children:
|
|
345
|
+
children: y("devportal.dismiss", "Dismiss")
|
|
337
346
|
})
|
|
338
347
|
]
|
|
339
348
|
}),
|
|
340
|
-
|
|
349
|
+
Je && /* @__PURE__ */ _("div", {
|
|
341
350
|
className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 flex items-center gap-2 text-sm text-status-success-text",
|
|
342
351
|
children: [
|
|
343
|
-
/* @__PURE__ */
|
|
352
|
+
/* @__PURE__ */ g(xe, {
|
|
344
353
|
size: 16,
|
|
345
354
|
className: "flex-shrink-0"
|
|
346
355
|
}),
|
|
347
|
-
|
|
348
|
-
/* @__PURE__ */
|
|
349
|
-
onClick: () =>
|
|
356
|
+
Je,
|
|
357
|
+
/* @__PURE__ */ g("button", {
|
|
358
|
+
onClick: () => P(null),
|
|
350
359
|
className: "ml-auto text-status-success-text hover:text-status-success-text",
|
|
351
|
-
children:
|
|
360
|
+
children: y("devportal.dismiss", "Dismiss")
|
|
352
361
|
})
|
|
353
362
|
]
|
|
354
363
|
}),
|
|
355
|
-
G && !K && /* @__PURE__ */
|
|
364
|
+
G && !K && /* @__PURE__ */ _("div", {
|
|
356
365
|
className: "flex items-start gap-3 rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle px-4 py-3 text-sm text-status-warning-text",
|
|
357
|
-
children: [/* @__PURE__ */
|
|
366
|
+
children: [/* @__PURE__ */ g(f, {
|
|
358
367
|
size: 16,
|
|
359
368
|
className: "mt-0.5 shrink-0"
|
|
360
|
-
}), /* @__PURE__ */
|
|
369
|
+
}), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
|
|
361
370
|
className: "font-medium",
|
|
362
371
|
children: "Complete your app setup before submitting for review"
|
|
363
|
-
}), /* @__PURE__ */
|
|
372
|
+
}), /* @__PURE__ */ g("ul", {
|
|
364
373
|
className: "mt-1 list-disc pl-4 text-xs opacity-80",
|
|
365
|
-
children:
|
|
374
|
+
children: lt.map((e) => /* @__PURE__ */ g("li", { children: e }, e))
|
|
366
375
|
})] })]
|
|
367
376
|
}),
|
|
368
|
-
G && G.status !== "PUBLISHED" && J.some((e) => e.status === "draft") && /* @__PURE__ */
|
|
377
|
+
G && G.status !== "PUBLISHED" && J.some((e) => e.status === "draft") && /* @__PURE__ */ _("div", {
|
|
369
378
|
className: "flex items-start gap-3 rounded-lg border border-status-info-bg bg-status-info-bg-subtle px-4 py-3 text-sm text-status-info-text",
|
|
370
|
-
children: [/* @__PURE__ */
|
|
379
|
+
children: [/* @__PURE__ */ g(p, {
|
|
371
380
|
size: 16,
|
|
372
381
|
className: "mt-0.5 shrink-0"
|
|
373
|
-
}), /* @__PURE__ */
|
|
382
|
+
}), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
|
|
374
383
|
className: "font-medium",
|
|
375
384
|
children: "Ready to submit? Go to the Submit tab"
|
|
376
|
-
}), /* @__PURE__ */
|
|
385
|
+
}), /* @__PURE__ */ _("p", {
|
|
377
386
|
className: "mt-1 text-xs opacity-80",
|
|
378
387
|
children: [
|
|
379
388
|
"For your first submission the app and its version are reviewed together. Head to the ",
|
|
380
|
-
/* @__PURE__ */
|
|
389
|
+
/* @__PURE__ */ g("strong", { children: "Submit" }),
|
|
381
390
|
" tab — your draft version will be included automatically. The per-version \"Submit for Review\" button is only for new versions after the app is already live in the marketplace."
|
|
382
391
|
]
|
|
383
392
|
})] })]
|
|
384
393
|
}),
|
|
385
|
-
G && Z && /* @__PURE__ */
|
|
394
|
+
G && Z && /* @__PURE__ */ _("div", {
|
|
386
395
|
className: "flex items-start gap-3 rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle px-4 py-3 text-sm text-status-warning-text",
|
|
387
|
-
children: [/* @__PURE__ */
|
|
396
|
+
children: [/* @__PURE__ */ g(p, {
|
|
388
397
|
size: 16,
|
|
389
398
|
className: "mt-0.5 shrink-0"
|
|
390
|
-
}), /* @__PURE__ */
|
|
399
|
+
}), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
|
|
391
400
|
className: "font-medium",
|
|
392
|
-
children:
|
|
393
|
-
}), /* @__PURE__ */
|
|
401
|
+
children: y("devportal.versionAlreadyPending", "A version is already pending review")
|
|
402
|
+
}), /* @__PURE__ */ g("p", {
|
|
394
403
|
className: "mt-1 text-xs opacity-80",
|
|
395
|
-
children:
|
|
404
|
+
children: y("devportal.versionAlreadyPendingDetail", "Submitting another version is disabled until it's approved or rejected.")
|
|
396
405
|
})] })]
|
|
397
406
|
}),
|
|
398
|
-
J.length > 0 && /* @__PURE__ */
|
|
407
|
+
J.length > 0 && /* @__PURE__ */ g("div", {
|
|
399
408
|
className: "rounded-card border border-border-seam bg-bg-surface p-4",
|
|
400
|
-
children: /* @__PURE__ */
|
|
409
|
+
children: /* @__PURE__ */ _("div", {
|
|
401
410
|
className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
|
|
402
|
-
children: [/* @__PURE__ */
|
|
411
|
+
children: [/* @__PURE__ */ _("div", {
|
|
403
412
|
className: "flex flex-wrap items-center gap-3",
|
|
404
|
-
children: [/* @__PURE__ */
|
|
413
|
+
children: [/* @__PURE__ */ _("div", {
|
|
405
414
|
className: "flex items-center gap-2",
|
|
406
|
-
children: [/* @__PURE__ */
|
|
407
|
-
checked:
|
|
408
|
-
indeterminate:
|
|
409
|
-
onChange:
|
|
415
|
+
children: [/* @__PURE__ */ g(i, {
|
|
416
|
+
checked: St,
|
|
417
|
+
indeterminate: Ct,
|
|
418
|
+
onChange: It,
|
|
410
419
|
ariaLabel: "Select all visible versions"
|
|
411
|
-
}), /* @__PURE__ */
|
|
420
|
+
}), /* @__PURE__ */ g("span", {
|
|
412
421
|
className: "text-sm font-medium",
|
|
413
|
-
children:
|
|
422
|
+
children: y("devportal.selectAllVisible", "Select all visible")
|
|
414
423
|
})]
|
|
415
|
-
}),
|
|
416
|
-
onClick:
|
|
424
|
+
}), L.size > 0 && /* @__PURE__ */ g("button", {
|
|
425
|
+
onClick: $,
|
|
417
426
|
className: "text-sm text-text-secondary hover:text-text-primary",
|
|
418
|
-
children:
|
|
427
|
+
children: y("devportal.clearSelection", "Clear selection")
|
|
419
428
|
})]
|
|
420
|
-
}), /* @__PURE__ */
|
|
429
|
+
}), /* @__PURE__ */ _("div", {
|
|
421
430
|
className: "flex flex-wrap items-center gap-2",
|
|
422
431
|
children: [
|
|
423
|
-
/* @__PURE__ */
|
|
432
|
+
/* @__PURE__ */ _("span", {
|
|
424
433
|
className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
|
|
425
|
-
children: [
|
|
434
|
+
children: [L.size, " selected"]
|
|
426
435
|
}),
|
|
427
|
-
/* @__PURE__ */
|
|
436
|
+
/* @__PURE__ */ _("button", {
|
|
428
437
|
onClick: () => B("publish"),
|
|
429
|
-
disabled: X.length === 0 || !
|
|
430
|
-
"aria-disabled": !
|
|
431
|
-
title: Z ?
|
|
438
|
+
disabled: X.length === 0 || !b || !K || Z,
|
|
439
|
+
"aria-disabled": !b || !K || Z,
|
|
440
|
+
title: Z ? y("devportal.versionAlreadyPending", "A version is already pending review") : K ? void 0 : lt.join(" · "),
|
|
432
441
|
className: "rounded-md border border-status-success-bg px-3 py-2 text-sm font-medium text-status-success-text hover:bg-status-success-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
|
|
433
|
-
children: [
|
|
442
|
+
children: [y("devportal.submitForReview", "Submit for Review"), X.length > 0 ? ` (${X.length})` : ""]
|
|
434
443
|
}),
|
|
435
|
-
/* @__PURE__ */
|
|
444
|
+
/* @__PURE__ */ _("button", {
|
|
436
445
|
onClick: () => B("deprecate"),
|
|
437
|
-
disabled: Q.length === 0 || !
|
|
438
|
-
"aria-disabled": !
|
|
446
|
+
disabled: Q.length === 0 || !x,
|
|
447
|
+
"aria-disabled": !x,
|
|
439
448
|
className: "rounded-md border border-status-warning-bg px-3 py-2 text-sm font-medium text-status-warning-text hover:bg-status-warning-bg-subtle disabled:cursor-not-allowed disabled:opacity-50",
|
|
440
|
-
children: [
|
|
449
|
+
children: [y("devportal.deprecateSelected", "Deprecate Selected"), Q.length > 0 ? ` (${Q.length})` : ""]
|
|
441
450
|
})
|
|
442
451
|
]
|
|
443
452
|
})]
|
|
444
453
|
})
|
|
445
454
|
}),
|
|
446
|
-
J.length > 0 ? /* @__PURE__ */
|
|
455
|
+
J.length > 0 ? /* @__PURE__ */ g(le, {
|
|
447
456
|
data: J,
|
|
448
457
|
keyField: "id",
|
|
449
458
|
columns: [
|
|
450
459
|
{
|
|
451
460
|
key: "select",
|
|
452
|
-
header: /* @__PURE__ */
|
|
453
|
-
checked:
|
|
454
|
-
indeterminate:
|
|
455
|
-
onChange:
|
|
461
|
+
header: /* @__PURE__ */ g(i, {
|
|
462
|
+
checked: St,
|
|
463
|
+
indeterminate: Ct,
|
|
464
|
+
onChange: It,
|
|
456
465
|
ariaLabel: "Select all visible versions"
|
|
457
466
|
}),
|
|
458
467
|
className: "w-12",
|
|
459
|
-
render: (e) => /* @__PURE__ */
|
|
468
|
+
render: (e) => /* @__PURE__ */ g("div", {
|
|
460
469
|
onClick: (e) => e.stopPropagation(),
|
|
461
|
-
children: /* @__PURE__ */
|
|
462
|
-
checked:
|
|
463
|
-
onChange: (t) =>
|
|
470
|
+
children: /* @__PURE__ */ g(i, {
|
|
471
|
+
checked: L.has(e.id),
|
|
472
|
+
onChange: (t) => Ft(e.id, t),
|
|
464
473
|
ariaLabel: `Select version ${e.version}`
|
|
465
474
|
})
|
|
466
475
|
})
|
|
467
476
|
},
|
|
468
477
|
{
|
|
469
478
|
key: "version",
|
|
470
|
-
header:
|
|
471
|
-
render: (e) => /* @__PURE__ */
|
|
479
|
+
header: y("devportal.version", "Version"),
|
|
480
|
+
render: (e) => /* @__PURE__ */ _("div", {
|
|
472
481
|
className: "flex items-center gap-2",
|
|
473
482
|
children: [
|
|
474
|
-
|
|
475
|
-
/* @__PURE__ */
|
|
483
|
+
Pt(e),
|
|
484
|
+
/* @__PURE__ */ g("span", {
|
|
476
485
|
className: "font-mono font-medium",
|
|
477
486
|
children: e.version
|
|
478
487
|
}),
|
|
479
|
-
e.isLatest && /* @__PURE__ */
|
|
488
|
+
e.isLatest && /* @__PURE__ */ g("span", {
|
|
480
489
|
className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text",
|
|
481
|
-
children:
|
|
490
|
+
children: y("devportal.latest", "Latest")
|
|
482
491
|
}),
|
|
483
|
-
!e.isStable && /* @__PURE__ */
|
|
492
|
+
!e.isStable && /* @__PURE__ */ g("span", {
|
|
484
493
|
className: "rounded-full bg-status-warning-bg-subtle px-2 py-0.5 text-xs text-status-warning-text",
|
|
485
|
-
children:
|
|
494
|
+
children: y("devportal.beta", "Beta")
|
|
486
495
|
})
|
|
487
496
|
]
|
|
488
497
|
})
|
|
489
498
|
},
|
|
490
499
|
{
|
|
491
500
|
key: "releaseNotes",
|
|
492
|
-
header:
|
|
493
|
-
render: (e) => /* @__PURE__ */
|
|
501
|
+
header: y("devportal.releaseNotes", "Release Notes"),
|
|
502
|
+
render: (e) => /* @__PURE__ */ g("p", {
|
|
494
503
|
className: "max-w-md truncate text-sm text-text-secondary",
|
|
495
|
-
children: e.releaseNotes ||
|
|
504
|
+
children: e.releaseNotes || y("devportal.noReleaseNotes", "No release notes")
|
|
496
505
|
})
|
|
497
506
|
},
|
|
498
507
|
{
|
|
499
508
|
key: "status",
|
|
500
|
-
header:
|
|
501
|
-
render: (e) => /* @__PURE__ */
|
|
509
|
+
header: y("devportal.status", "Status"),
|
|
510
|
+
render: (e) => /* @__PURE__ */ _("div", {
|
|
502
511
|
className: "space-y-1",
|
|
503
512
|
children: [
|
|
504
|
-
/* @__PURE__ */
|
|
505
|
-
e.status === "pending_review" && /* @__PURE__ */
|
|
513
|
+
/* @__PURE__ */ g(ce, { status: e.status === "pending_review" ? "In Review" : e.status }),
|
|
514
|
+
e.status === "pending_review" && /* @__PURE__ */ g("p", {
|
|
506
515
|
className: "text-xs text-status-info-text",
|
|
507
516
|
children: "Awaiting platform review"
|
|
508
517
|
}),
|
|
509
|
-
e.status === "rejected" && e.reviewNotes && /* @__PURE__ */
|
|
518
|
+
e.status === "rejected" && e.reviewNotes && /* @__PURE__ */ g("p", {
|
|
510
519
|
className: "text-xs text-status-error-text max-w-xs",
|
|
511
520
|
children: e.reviewNotes
|
|
512
521
|
}),
|
|
513
|
-
U && e.packageUrl && /* @__PURE__ */
|
|
514
|
-
|
|
522
|
+
U && e.packageUrl && /* @__PURE__ */ g(pe, { metadata: e.metadata }),
|
|
523
|
+
at && Ae(e.metadata) && /* @__PURE__ */ _("p", {
|
|
515
524
|
className: "inline-flex items-center gap-1 text-xs text-status-success-text",
|
|
516
|
-
children: [/* @__PURE__ */
|
|
525
|
+
children: [/* @__PURE__ */ g(be, { size: 11 }), y("devportal.publishedToOrganization", "Published to your organization")]
|
|
517
526
|
})
|
|
518
527
|
]
|
|
519
528
|
})
|
|
520
529
|
},
|
|
521
530
|
{
|
|
522
531
|
key: "publishedAt",
|
|
523
|
-
header:
|
|
524
|
-
render: (e) => e.publishedAt ?
|
|
532
|
+
header: y("devportal.published", "Published"),
|
|
533
|
+
render: (e) => e.publishedAt ? ge(new Date(e.publishedAt), "MMM d, yyyy") : "-"
|
|
525
534
|
},
|
|
526
535
|
{
|
|
527
536
|
key: "manifest",
|
|
528
|
-
header:
|
|
529
|
-
render: (e) => e.manifest ? /* @__PURE__ */
|
|
537
|
+
header: y("devportal.manifest", "Manifest"),
|
|
538
|
+
render: (e) => e.manifest ? /* @__PURE__ */ g(fe, {
|
|
530
539
|
manifest: e.manifest,
|
|
531
|
-
tr:
|
|
532
|
-
}) : /* @__PURE__ */
|
|
540
|
+
tr: y
|
|
541
|
+
}) : /* @__PURE__ */ g("span", {
|
|
533
542
|
className: "text-xs text-text-secondary",
|
|
534
|
-
children:
|
|
543
|
+
children: y("devportal.noManifest", "No manifest")
|
|
535
544
|
})
|
|
536
545
|
},
|
|
537
546
|
{
|
|
538
547
|
key: "actions",
|
|
539
548
|
header: "",
|
|
540
549
|
className: "w-48",
|
|
541
|
-
render: (e) => /* @__PURE__ */
|
|
550
|
+
render: (e) => /* @__PURE__ */ _("div", {
|
|
542
551
|
className: "flex flex-wrap gap-2",
|
|
543
552
|
children: [
|
|
544
|
-
|
|
553
|
+
U && /* @__PURE__ */ _("button", {
|
|
554
|
+
className: "inline-flex items-center gap-1 text-xs text-primary hover:underline",
|
|
555
|
+
"data-testid": `version-lifecycle-${e.id}`,
|
|
556
|
+
onClick: () => wt(e.id),
|
|
557
|
+
children: [/* @__PURE__ */ g(Ee, { size: 11 }), y("devportal.nodeLifecycle.open", "Lifecycle")]
|
|
558
|
+
}),
|
|
559
|
+
(e.status === "draft" || e.status === "rejected") && Me && /* @__PURE__ */ g("button", {
|
|
545
560
|
className: "inline-flex items-center gap-1 text-xs text-text-secondary hover:text-text-primary hover:underline",
|
|
546
561
|
onClick: () => {
|
|
547
562
|
let t = e.manifest ? JSON.stringify(e.manifest, null, 2) : "";
|
|
548
|
-
|
|
563
|
+
A({
|
|
549
564
|
versionId: e.id,
|
|
550
565
|
version: e.version,
|
|
551
566
|
hasExistingZip: !!e.packageUrl,
|
|
@@ -555,444 +570,444 @@ var ke = () => {
|
|
|
555
570
|
originalManifestJson: t,
|
|
556
571
|
releaseNotes: e.releaseNotes ?? "",
|
|
557
572
|
changelog: e.changelog ?? ""
|
|
558
|
-
}),
|
|
573
|
+
}), D(null), I(null);
|
|
559
574
|
},
|
|
560
575
|
children: "Edit"
|
|
561
576
|
}),
|
|
562
|
-
(e.status === "draft" || e.status === "rejected") && G?.status === "PUBLISHED" && /* @__PURE__ */
|
|
577
|
+
(e.status === "draft" || e.status === "rejected") && G?.status === "PUBLISHED" && /* @__PURE__ */ _("button", {
|
|
563
578
|
className: "inline-flex items-center gap-1 text-xs text-primary hover:underline disabled:opacity-50 disabled:cursor-not-allowed",
|
|
564
|
-
disabled: !
|
|
565
|
-
"aria-disabled": !
|
|
566
|
-
title: Z ?
|
|
567
|
-
onClick: () =>
|
|
568
|
-
children: [/* @__PURE__ */
|
|
579
|
+
disabled: !b || !K || Z,
|
|
580
|
+
"aria-disabled": !b || !K || Z,
|
|
581
|
+
title: Z ? y("devportal.versionAlreadyPending", "A version is already pending review") : K ? void 0 : lt.join(" · "),
|
|
582
|
+
onClick: () => At(e.id),
|
|
583
|
+
children: [/* @__PURE__ */ g(p, { size: 11 }), y("devportal.submitForReview", "Submit for Review")]
|
|
569
584
|
}),
|
|
570
|
-
|
|
585
|
+
at && (e.status === "draft" || e.status === "rejected") && /* @__PURE__ */ _("button", {
|
|
571
586
|
className: "inline-flex items-center gap-1 text-xs text-primary hover:underline disabled:opacity-50 disabled:cursor-not-allowed",
|
|
572
|
-
disabled: !
|
|
573
|
-
"aria-disabled": !
|
|
574
|
-
title:
|
|
575
|
-
onClick: () =>
|
|
576
|
-
children: [/* @__PURE__ */
|
|
587
|
+
disabled: !b || !C || vt || s(e.metadata).kind !== "passed",
|
|
588
|
+
"aria-disabled": !b || !C || vt || s(e.metadata).kind !== "passed",
|
|
589
|
+
title: s(e.metadata).kind === "passed" ? void 0 : y("devportal.publishToOrganizationNeedsValidation", "Upload a package that passes validation first"),
|
|
590
|
+
onClick: () => rt(e),
|
|
591
|
+
children: [/* @__PURE__ */ g(be, { size: 11 }), y("devportal.publishToOrganization", "Publish to my organization")]
|
|
577
592
|
}),
|
|
578
|
-
e.status === "published" && !e.isLatest && /* @__PURE__ */
|
|
593
|
+
e.status === "published" && !e.isLatest && /* @__PURE__ */ g("button", {
|
|
579
594
|
className: "text-xs text-status-warning-text hover:underline disabled:opacity-50",
|
|
580
|
-
disabled: !
|
|
581
|
-
"aria-disabled": !
|
|
582
|
-
onClick: () =>
|
|
583
|
-
children:
|
|
595
|
+
disabled: !x,
|
|
596
|
+
"aria-disabled": !x,
|
|
597
|
+
onClick: () => Mt(e.id),
|
|
598
|
+
children: y("devportal.deprecate", "Deprecate")
|
|
584
599
|
})
|
|
585
600
|
]
|
|
586
601
|
})
|
|
587
602
|
}
|
|
588
603
|
]
|
|
589
|
-
}) : /* @__PURE__ */
|
|
604
|
+
}) : /* @__PURE__ */ g(t, {
|
|
590
605
|
illustration: "empty-data",
|
|
591
|
-
title:
|
|
592
|
-
description:
|
|
593
|
-
action: /* @__PURE__ */
|
|
606
|
+
title: y("devportal.noVersionsYet", "No versions yet"),
|
|
607
|
+
description: y("devportal.noVersionsYetDescription", "Create your first version to start distributing your app"),
|
|
608
|
+
action: /* @__PURE__ */ _("button", {
|
|
594
609
|
onClick: () => {
|
|
595
|
-
|
|
610
|
+
F(null), O(!0);
|
|
596
611
|
},
|
|
597
612
|
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",
|
|
598
|
-
children: [/* @__PURE__ */
|
|
613
|
+
children: [/* @__PURE__ */ g(Te, { size: 16 }), y("devportal.createVersion", "Create Version")]
|
|
599
614
|
})
|
|
600
615
|
}),
|
|
601
|
-
|
|
602
|
-
open:
|
|
616
|
+
Ke && /* @__PURE__ */ g(a, {
|
|
617
|
+
open: Ke,
|
|
603
618
|
onOpenChange: (e) => {
|
|
604
|
-
|
|
619
|
+
O(e), e || F(null);
|
|
605
620
|
},
|
|
606
|
-
onConfirm:
|
|
607
|
-
title:
|
|
608
|
-
confirmLabel:
|
|
609
|
-
children: /* @__PURE__ */
|
|
621
|
+
onConfirm: Tt,
|
|
622
|
+
title: y("devportal.createNewVersion", "Create New Version"),
|
|
623
|
+
confirmLabel: pt ? y("devportal.creating", "Creating...") : y("devportal.createVersion", "Create Version"),
|
|
624
|
+
children: /* @__PURE__ */ _("div", {
|
|
610
625
|
className: "space-y-4",
|
|
611
626
|
children: [
|
|
612
|
-
|
|
627
|
+
Ye && /* @__PURE__ */ _("div", {
|
|
613
628
|
className: "rounded-lg border border-status-error-bg bg-status-error-bg-subtle p-3 flex items-center gap-2 text-sm text-status-error-text",
|
|
614
|
-
children: [/* @__PURE__ */
|
|
629
|
+
children: [/* @__PURE__ */ g(f, {
|
|
615
630
|
size: 14,
|
|
616
631
|
className: "flex-shrink-0"
|
|
617
|
-
}),
|
|
632
|
+
}), Ye]
|
|
618
633
|
}),
|
|
619
|
-
/* @__PURE__ */
|
|
620
|
-
label:
|
|
621
|
-
value:
|
|
622
|
-
onChange: (e) =>
|
|
623
|
-
...
|
|
634
|
+
/* @__PURE__ */ g(ue, {
|
|
635
|
+
label: y("devportal.versionNumber", "Version Number"),
|
|
636
|
+
value: j.version,
|
|
637
|
+
onChange: (e) => M({
|
|
638
|
+
...j,
|
|
624
639
|
version: e.target.value
|
|
625
640
|
}),
|
|
626
641
|
placeholder: "e.g., 2.2.0",
|
|
627
|
-
hint:
|
|
628
|
-
readOnly: !!
|
|
642
|
+
hint: zt ? y("devportal.versionHintAutoFilled", "Filled in from the manifest's version — edit it there if this is wrong.") : y("devportal.versionHint", "Use semantic versioning (major.minor.patch). Upload a manifest.json/manifest with a version to fill this in automatically."),
|
|
643
|
+
readOnly: !!zt,
|
|
629
644
|
required: !0
|
|
630
645
|
}),
|
|
631
|
-
W && /* @__PURE__ */
|
|
646
|
+
W && /* @__PURE__ */ _("div", {
|
|
632
647
|
className: "space-y-1",
|
|
633
648
|
children: [
|
|
634
|
-
/* @__PURE__ */
|
|
649
|
+
/* @__PURE__ */ _("label", {
|
|
635
650
|
className: "text-sm font-medium",
|
|
636
651
|
children: [
|
|
637
652
|
H ? "Workflow Definition (JSON)" : "Manifest (JSON)",
|
|
638
653
|
" ",
|
|
639
|
-
/* @__PURE__ */
|
|
654
|
+
/* @__PURE__ */ g("span", {
|
|
640
655
|
className: "text-status-error-text",
|
|
641
656
|
children: "*"
|
|
642
657
|
})
|
|
643
658
|
]
|
|
644
659
|
}),
|
|
645
|
-
/* @__PURE__ */
|
|
660
|
+
/* @__PURE__ */ g("textarea", {
|
|
646
661
|
rows: 10,
|
|
647
662
|
required: !0,
|
|
648
663
|
placeholder: H ? "{\n \"nodes\": [],\n \"edges\": []\n}" : "{\n \"manifestVersion\": \"1.0\",\n \"identity\": { \"name\": \"My Item\", \"version\": \"1.0.0\" }\n}",
|
|
649
|
-
value:
|
|
664
|
+
value: j.manifestJson,
|
|
650
665
|
onChange: (e) => {
|
|
651
|
-
let t =
|
|
652
|
-
|
|
653
|
-
...
|
|
666
|
+
let t = v(e.target.value);
|
|
667
|
+
M({
|
|
668
|
+
...j,
|
|
654
669
|
manifestJson: e.target.value,
|
|
655
670
|
...t ? { version: t } : {}
|
|
656
671
|
});
|
|
657
672
|
},
|
|
658
673
|
className: "w-full rounded-md border bg-transparent px-3 py-2 text-xs font-mono resize-y placeholder:text-text-secondary focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)]"
|
|
659
674
|
}),
|
|
660
|
-
/* @__PURE__ */
|
|
675
|
+
/* @__PURE__ */ g("p", {
|
|
661
676
|
className: "text-xs text-text-secondary",
|
|
662
|
-
children: H ? /* @__PURE__ */
|
|
677
|
+
children: H ? /* @__PURE__ */ _(h, { children: [
|
|
663
678
|
"Paste the full ",
|
|
664
|
-
/* @__PURE__ */
|
|
679
|
+
/* @__PURE__ */ g("code", { children: "{nodes, edges}" }),
|
|
665
680
|
" JSON. Saved as this version's manifest — no zip needed."
|
|
666
681
|
] }) : "Paste the manifest JSON for this version. No zip needed."
|
|
667
682
|
})
|
|
668
683
|
]
|
|
669
684
|
}),
|
|
670
|
-
U && /* @__PURE__ */
|
|
685
|
+
U && /* @__PURE__ */ _("div", {
|
|
671
686
|
className: "space-y-1",
|
|
672
687
|
children: [
|
|
673
|
-
/* @__PURE__ */
|
|
688
|
+
/* @__PURE__ */ _("label", {
|
|
674
689
|
className: "text-sm font-medium",
|
|
675
690
|
children: [
|
|
676
691
|
"Package (.zip)",
|
|
677
692
|
" ",
|
|
678
|
-
/* @__PURE__ */
|
|
693
|
+
/* @__PURE__ */ g("span", {
|
|
679
694
|
className: "text-status-error-text",
|
|
680
695
|
children: "*"
|
|
681
696
|
})
|
|
682
697
|
]
|
|
683
698
|
}),
|
|
684
|
-
/* @__PURE__ */
|
|
699
|
+
/* @__PURE__ */ _("div", {
|
|
685
700
|
className: "flex gap-2 items-center",
|
|
686
701
|
children: [
|
|
687
|
-
/* @__PURE__ */
|
|
688
|
-
ref:
|
|
702
|
+
/* @__PURE__ */ g("input", {
|
|
703
|
+
ref: ze,
|
|
689
704
|
type: "file",
|
|
690
705
|
accept: ".zip",
|
|
691
706
|
className: "hidden",
|
|
692
|
-
onChange:
|
|
707
|
+
onChange: Et
|
|
693
708
|
}),
|
|
694
|
-
/* @__PURE__ */
|
|
709
|
+
/* @__PURE__ */ g("button", {
|
|
695
710
|
type: "button",
|
|
696
|
-
disabled:
|
|
697
|
-
onClick: () =>
|
|
711
|
+
disabled: T,
|
|
712
|
+
onClick: () => ze.current?.click(),
|
|
698
713
|
className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-bg-sunken transition-colors disabled:opacity-50",
|
|
699
|
-
children:
|
|
700
|
-
/* @__PURE__ */
|
|
714
|
+
children: T ? /* @__PURE__ */ _(h, { children: [
|
|
715
|
+
/* @__PURE__ */ g(Ce, {
|
|
701
716
|
size: 14,
|
|
702
717
|
className: "animate-spin"
|
|
703
718
|
}),
|
|
704
719
|
" ",
|
|
705
720
|
"Uploading… ",
|
|
706
|
-
|
|
721
|
+
Re,
|
|
707
722
|
"%"
|
|
708
|
-
] }) : /* @__PURE__ */
|
|
709
|
-
/* @__PURE__ */
|
|
723
|
+
] }) : /* @__PURE__ */ _(h, { children: [
|
|
724
|
+
/* @__PURE__ */ g(m, { size: 14 }),
|
|
710
725
|
" ",
|
|
711
|
-
|
|
726
|
+
j.packageUrl ? "Replace zip" : "Upload zip"
|
|
712
727
|
] })
|
|
713
728
|
}),
|
|
714
|
-
|
|
729
|
+
j.packageUrl && !T && /* @__PURE__ */ g("span", {
|
|
715
730
|
className: "text-xs text-status-success-text",
|
|
716
731
|
children: "✓ Uploaded"
|
|
717
732
|
})
|
|
718
733
|
]
|
|
719
734
|
}),
|
|
720
|
-
|
|
735
|
+
E && /* @__PURE__ */ g("p", {
|
|
721
736
|
className: "text-xs text-status-error-text",
|
|
722
|
-
children:
|
|
737
|
+
children: E
|
|
723
738
|
}),
|
|
724
|
-
/* @__PURE__ */
|
|
739
|
+
/* @__PURE__ */ g("p", {
|
|
725
740
|
className: "text-xs text-text-tertiary",
|
|
726
741
|
children: "The zip is the node executable. Upload it before publishing — users install exactly this artifact."
|
|
727
742
|
})
|
|
728
743
|
]
|
|
729
744
|
}),
|
|
730
|
-
U && /* @__PURE__ */
|
|
745
|
+
U && /* @__PURE__ */ _("div", {
|
|
731
746
|
className: "space-y-2",
|
|
732
747
|
children: [
|
|
733
|
-
/* @__PURE__ */
|
|
748
|
+
/* @__PURE__ */ _("div", {
|
|
734
749
|
className: "flex items-center justify-between gap-2 flex-wrap",
|
|
735
|
-
children: [/* @__PURE__ */
|
|
750
|
+
children: [/* @__PURE__ */ _("label", {
|
|
736
751
|
className: "text-sm font-medium",
|
|
737
752
|
children: [
|
|
738
753
|
"manifest.json",
|
|
739
754
|
" ",
|
|
740
|
-
/* @__PURE__ */
|
|
755
|
+
/* @__PURE__ */ g("span", {
|
|
741
756
|
className: "text-status-error-text",
|
|
742
757
|
children: "*"
|
|
743
758
|
})
|
|
744
759
|
]
|
|
745
|
-
}), /* @__PURE__ */
|
|
760
|
+
}), /* @__PURE__ */ _("div", {
|
|
746
761
|
className: "flex items-center gap-2",
|
|
747
762
|
children: [
|
|
748
|
-
|
|
763
|
+
Ue && /* @__PURE__ */ _("span", {
|
|
749
764
|
className: "text-xs text-status-success-text",
|
|
750
|
-
children: ["✓ ",
|
|
765
|
+
children: ["✓ ", Ue]
|
|
751
766
|
}),
|
|
752
|
-
/* @__PURE__ */
|
|
753
|
-
ref:
|
|
767
|
+
/* @__PURE__ */ g("input", {
|
|
768
|
+
ref: Be,
|
|
754
769
|
type: "file",
|
|
755
770
|
accept: ".json,application/json",
|
|
756
771
|
className: "hidden",
|
|
757
|
-
onChange:
|
|
772
|
+
onChange: et
|
|
758
773
|
}),
|
|
759
|
-
/* @__PURE__ */
|
|
774
|
+
/* @__PURE__ */ _("button", {
|
|
760
775
|
type: "button",
|
|
761
|
-
onClick: () =>
|
|
776
|
+
onClick: () => Be.current?.click(),
|
|
762
777
|
className: "inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-2.5 py-1 text-xs font-medium hover:bg-bg-sunken transition-colors",
|
|
763
|
-
children: [/* @__PURE__ */
|
|
778
|
+
children: [/* @__PURE__ */ g(m, { size: 12 }), "Upload manifest.json"]
|
|
764
779
|
})
|
|
765
780
|
]
|
|
766
781
|
})]
|
|
767
782
|
}),
|
|
768
|
-
/* @__PURE__ */
|
|
783
|
+
/* @__PURE__ */ g("textarea", {
|
|
769
784
|
rows: 5,
|
|
770
785
|
placeholder: "{\n \"manifestVersion\": \"1.0\",\n \"itemType\": \"node\",\n \"identity\": { \"version\": \"1.0.0\", \"displayName\": \"My Node\" }\n}",
|
|
771
|
-
value:
|
|
786
|
+
value: j.manifestJson,
|
|
772
787
|
onChange: (e) => {
|
|
773
|
-
|
|
774
|
-
let t =
|
|
775
|
-
|
|
776
|
-
...
|
|
788
|
+
We(null);
|
|
789
|
+
let t = v(e.target.value);
|
|
790
|
+
M({
|
|
791
|
+
...j,
|
|
777
792
|
manifestJson: e.target.value,
|
|
778
793
|
...t ? { version: t } : {}
|
|
779
794
|
});
|
|
780
795
|
},
|
|
781
796
|
className: "w-full rounded-md border bg-transparent px-3 py-2 text-xs font-mono resize-y placeholder:text-text-secondary focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)]"
|
|
782
797
|
}),
|
|
783
|
-
/* @__PURE__ */
|
|
798
|
+
/* @__PURE__ */ _("p", {
|
|
784
799
|
className: "text-xs text-text-tertiary",
|
|
785
800
|
children: [
|
|
786
801
|
"Upload or paste your ",
|
|
787
|
-
/* @__PURE__ */
|
|
802
|
+
/* @__PURE__ */ g("code", { children: "manifest.json" }),
|
|
788
803
|
" — required so the platform knows your node's inputs, outputs, and operations. Not extracted from the zip automatically."
|
|
789
804
|
]
|
|
790
805
|
})
|
|
791
806
|
]
|
|
792
807
|
}),
|
|
793
|
-
|
|
808
|
+
it && /* @__PURE__ */ _("div", {
|
|
794
809
|
className: "space-y-1",
|
|
795
810
|
children: [
|
|
796
|
-
/* @__PURE__ */
|
|
811
|
+
/* @__PURE__ */ _("label", {
|
|
797
812
|
className: "text-sm font-medium",
|
|
798
813
|
children: [
|
|
799
814
|
"Required scopes",
|
|
800
815
|
" ",
|
|
801
|
-
/* @__PURE__ */
|
|
816
|
+
/* @__PURE__ */ g("span", {
|
|
802
817
|
className: "text-xs font-normal text-text-secondary",
|
|
803
818
|
children: "(optional)"
|
|
804
819
|
})
|
|
805
820
|
]
|
|
806
821
|
}),
|
|
807
|
-
/* @__PURE__ */
|
|
822
|
+
/* @__PURE__ */ g("input", {
|
|
808
823
|
type: "text",
|
|
809
|
-
value:
|
|
810
|
-
onChange: (e) =>
|
|
811
|
-
...
|
|
824
|
+
value: j.requiredScopes,
|
|
825
|
+
onChange: (e) => M({
|
|
826
|
+
...j,
|
|
812
827
|
requiredScopes: e.target.value
|
|
813
828
|
}),
|
|
814
829
|
placeholder: "e.g. read:contacts, write:messages",
|
|
815
830
|
className: "w-full rounded-md border bg-transparent px-3 py-2 text-sm placeholder:text-text-secondary focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)]"
|
|
816
831
|
}),
|
|
817
|
-
/* @__PURE__ */
|
|
832
|
+
/* @__PURE__ */ g("p", {
|
|
818
833
|
className: "text-xs text-text-tertiary",
|
|
819
834
|
children: "Comma-separated. List every permission this version needs — users will be prompted to accept any new or changed scopes on update."
|
|
820
835
|
})
|
|
821
836
|
]
|
|
822
837
|
}),
|
|
823
|
-
/* @__PURE__ */
|
|
824
|
-
label:
|
|
825
|
-
value:
|
|
826
|
-
onChange: (e) =>
|
|
827
|
-
...
|
|
838
|
+
/* @__PURE__ */ g(o, {
|
|
839
|
+
label: y("devportal.releaseNotes", "Release Notes"),
|
|
840
|
+
value: j.releaseNotes,
|
|
841
|
+
onChange: (e) => M({
|
|
842
|
+
...j,
|
|
828
843
|
releaseNotes: e
|
|
829
844
|
}),
|
|
830
|
-
placeholder:
|
|
845
|
+
placeholder: y("devportal.releaseNotesPlaceholder", "What changed in this release?"),
|
|
831
846
|
rows: 3
|
|
832
847
|
}),
|
|
833
|
-
/* @__PURE__ */
|
|
834
|
-
label:
|
|
835
|
-
value:
|
|
836
|
-
onChange: (e) =>
|
|
837
|
-
...
|
|
848
|
+
/* @__PURE__ */ g(o, {
|
|
849
|
+
label: y("devportal.changelog", "Changelog"),
|
|
850
|
+
value: j.changelog,
|
|
851
|
+
onChange: (e) => M({
|
|
852
|
+
...j,
|
|
838
853
|
changelog: e
|
|
839
854
|
}),
|
|
840
|
-
placeholder:
|
|
855
|
+
placeholder: y("devportal.changelogPlaceholder", "Detailed changelog for this version..."),
|
|
841
856
|
rows: 3
|
|
842
857
|
})
|
|
843
858
|
]
|
|
844
859
|
})
|
|
845
860
|
}),
|
|
846
|
-
z && /* @__PURE__ */
|
|
861
|
+
z && /* @__PURE__ */ g(a, {
|
|
847
862
|
open: !!z,
|
|
848
863
|
onOpenChange: (e) => {
|
|
849
|
-
e || (
|
|
864
|
+
e || (Ze(null), $e(""));
|
|
850
865
|
},
|
|
851
|
-
onConfirm:
|
|
866
|
+
onConfirm: Nt,
|
|
852
867
|
title: `Reject version ${z.version}`,
|
|
853
868
|
confirmLabel: "Reject Version",
|
|
854
|
-
cancelLabel:
|
|
869
|
+
cancelLabel: y("devportal.cancel", "Cancel"),
|
|
855
870
|
variant: "danger",
|
|
856
|
-
children: /* @__PURE__ */
|
|
871
|
+
children: /* @__PURE__ */ _("div", {
|
|
857
872
|
className: "space-y-3",
|
|
858
|
-
children: [/* @__PURE__ */
|
|
873
|
+
children: [/* @__PURE__ */ g("p", {
|
|
859
874
|
className: "text-sm text-text-secondary",
|
|
860
875
|
children: "The developer will be notified and can fix and resubmit. Please provide a clear reason."
|
|
861
|
-
}), /* @__PURE__ */
|
|
876
|
+
}), /* @__PURE__ */ _("div", {
|
|
862
877
|
className: "space-y-1",
|
|
863
|
-
children: [/* @__PURE__ */
|
|
878
|
+
children: [/* @__PURE__ */ _("label", {
|
|
864
879
|
className: "text-sm font-medium",
|
|
865
880
|
children: [
|
|
866
881
|
"Rejection reason",
|
|
867
882
|
" ",
|
|
868
|
-
/* @__PURE__ */
|
|
883
|
+
/* @__PURE__ */ g("span", {
|
|
869
884
|
className: "text-status-error-text",
|
|
870
885
|
children: "*"
|
|
871
886
|
})
|
|
872
887
|
]
|
|
873
|
-
}), /* @__PURE__ */
|
|
888
|
+
}), /* @__PURE__ */ g("textarea", {
|
|
874
889
|
rows: 3,
|
|
875
|
-
value:
|
|
876
|
-
onChange: (e) =>
|
|
890
|
+
value: Qe,
|
|
891
|
+
onChange: (e) => $e(e.target.value),
|
|
877
892
|
placeholder: "e.g. Manifest contains disallowed network calls to external domains...",
|
|
878
893
|
className: "w-full rounded-md border bg-transparent px-3 py-2 text-sm placeholder:text-text-secondary focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)]"
|
|
879
894
|
})]
|
|
880
895
|
})]
|
|
881
896
|
})
|
|
882
897
|
}),
|
|
883
|
-
|
|
884
|
-
open: !!
|
|
898
|
+
k && /* @__PURE__ */ g(a, {
|
|
899
|
+
open: !!k,
|
|
885
900
|
onOpenChange: (e) => {
|
|
886
|
-
e || (
|
|
901
|
+
e || (A(null), D(null), I(null));
|
|
887
902
|
},
|
|
888
|
-
onConfirm:
|
|
889
|
-
title: `Edit Version ${
|
|
890
|
-
confirmLabel:
|
|
891
|
-
children: /* @__PURE__ */
|
|
903
|
+
onConfirm: kt,
|
|
904
|
+
title: `Edit Version ${k.version}`,
|
|
905
|
+
confirmLabel: ht ? "Saving…" : "Save Changes",
|
|
906
|
+
children: /* @__PURE__ */ _("div", {
|
|
892
907
|
className: "space-y-4",
|
|
893
908
|
children: [
|
|
894
|
-
|
|
909
|
+
Xe && /* @__PURE__ */ _("div", {
|
|
895
910
|
className: "rounded-lg border border-status-error-bg bg-status-error-bg-subtle p-3 flex items-center gap-2 text-sm text-status-error-text",
|
|
896
|
-
children: [/* @__PURE__ */
|
|
911
|
+
children: [/* @__PURE__ */ g(f, {
|
|
897
912
|
size: 14,
|
|
898
913
|
className: "flex-shrink-0"
|
|
899
|
-
}),
|
|
914
|
+
}), Xe]
|
|
900
915
|
}),
|
|
901
|
-
/* @__PURE__ */
|
|
916
|
+
/* @__PURE__ */ g("div", {
|
|
902
917
|
className: "rounded-lg border border-status-info-bg bg-status-info-bg-subtle px-3 py-2 text-xs text-status-info-text",
|
|
903
918
|
children: "You can fix the zip, manifest, or release notes before submitting for review. Once submitted for review these fields are locked."
|
|
904
919
|
}),
|
|
905
|
-
U && /* @__PURE__ */
|
|
920
|
+
U && /* @__PURE__ */ _("div", {
|
|
906
921
|
className: "space-y-1",
|
|
907
922
|
children: [
|
|
908
|
-
/* @__PURE__ */
|
|
923
|
+
/* @__PURE__ */ g("label", {
|
|
909
924
|
className: "text-sm font-medium",
|
|
910
925
|
children: "Package (.zip)"
|
|
911
926
|
}),
|
|
912
|
-
/* @__PURE__ */
|
|
927
|
+
/* @__PURE__ */ _("div", {
|
|
913
928
|
className: "flex gap-2 items-center",
|
|
914
929
|
children: [
|
|
915
|
-
/* @__PURE__ */
|
|
916
|
-
ref:
|
|
930
|
+
/* @__PURE__ */ g("input", {
|
|
931
|
+
ref: Ve,
|
|
917
932
|
type: "file",
|
|
918
933
|
accept: ".zip",
|
|
919
934
|
className: "hidden",
|
|
920
|
-
onChange:
|
|
935
|
+
onChange: Dt
|
|
921
936
|
}),
|
|
922
|
-
/* @__PURE__ */
|
|
937
|
+
/* @__PURE__ */ g("button", {
|
|
923
938
|
type: "button",
|
|
924
|
-
disabled:
|
|
925
|
-
onClick: () =>
|
|
939
|
+
disabled: T,
|
|
940
|
+
onClick: () => Ve.current?.click(),
|
|
926
941
|
className: "inline-flex items-center gap-1.5 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-bg-sunken transition-colors disabled:opacity-50",
|
|
927
|
-
children:
|
|
928
|
-
/* @__PURE__ */
|
|
942
|
+
children: T ? /* @__PURE__ */ _(h, { children: [
|
|
943
|
+
/* @__PURE__ */ g(Ce, {
|
|
929
944
|
size: 14,
|
|
930
945
|
className: "animate-spin"
|
|
931
946
|
}),
|
|
932
947
|
" ",
|
|
933
948
|
"Uploading… ",
|
|
934
|
-
|
|
949
|
+
Re,
|
|
935
950
|
"%"
|
|
936
|
-
] }) : /* @__PURE__ */
|
|
951
|
+
] }) : /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(m, { size: 14 }), k.newPackageUrl ? "Replace zip again" : k.hasExistingZip ? "Replace zip" : "Upload zip"] })
|
|
937
952
|
}),
|
|
938
|
-
|
|
953
|
+
k.newPackageUrl && !T && /* @__PURE__ */ g("span", {
|
|
939
954
|
className: "text-xs text-status-success-text",
|
|
940
955
|
children: "✓ New zip ready"
|
|
941
956
|
}),
|
|
942
|
-
!
|
|
957
|
+
!k.newPackageUrl && k.hasExistingZip && /* @__PURE__ */ g("span", {
|
|
943
958
|
className: "text-xs text-text-secondary",
|
|
944
959
|
children: "Current zip kept"
|
|
945
960
|
})
|
|
946
961
|
]
|
|
947
962
|
}),
|
|
948
|
-
|
|
963
|
+
E && /* @__PURE__ */ g("p", {
|
|
949
964
|
className: "text-xs text-status-error-text",
|
|
950
|
-
children:
|
|
965
|
+
children: E
|
|
951
966
|
})
|
|
952
967
|
]
|
|
953
968
|
}),
|
|
954
|
-
U && /* @__PURE__ */
|
|
969
|
+
U && /* @__PURE__ */ _("div", {
|
|
955
970
|
className: "space-y-2",
|
|
956
|
-
children: [/* @__PURE__ */
|
|
971
|
+
children: [/* @__PURE__ */ _("div", {
|
|
957
972
|
className: "flex items-center justify-between gap-2 flex-wrap",
|
|
958
|
-
children: [/* @__PURE__ */
|
|
973
|
+
children: [/* @__PURE__ */ _("label", {
|
|
959
974
|
className: "text-sm font-medium",
|
|
960
975
|
children: [
|
|
961
976
|
"manifest.json",
|
|
962
977
|
" ",
|
|
963
|
-
/* @__PURE__ */
|
|
978
|
+
/* @__PURE__ */ g("span", {
|
|
964
979
|
className: "text-xs font-normal text-text-secondary",
|
|
965
980
|
children: "(edit below or upload a new file)"
|
|
966
981
|
})
|
|
967
982
|
]
|
|
968
|
-
}), /* @__PURE__ */
|
|
983
|
+
}), /* @__PURE__ */ _("div", {
|
|
969
984
|
className: "flex items-center gap-2",
|
|
970
985
|
children: [
|
|
971
|
-
|
|
986
|
+
Ge && /* @__PURE__ */ _("span", {
|
|
972
987
|
className: "text-xs text-status-success-text",
|
|
973
|
-
children: ["✓ ",
|
|
988
|
+
children: ["✓ ", Ge]
|
|
974
989
|
}),
|
|
975
|
-
/* @__PURE__ */
|
|
976
|
-
ref:
|
|
990
|
+
/* @__PURE__ */ g("input", {
|
|
991
|
+
ref: He,
|
|
977
992
|
type: "file",
|
|
978
993
|
accept: ".json,application/json",
|
|
979
994
|
className: "hidden",
|
|
980
|
-
onChange:
|
|
995
|
+
onChange: Ot
|
|
981
996
|
}),
|
|
982
|
-
/* @__PURE__ */
|
|
997
|
+
/* @__PURE__ */ _("button", {
|
|
983
998
|
type: "button",
|
|
984
|
-
onClick: () =>
|
|
999
|
+
onClick: () => He.current?.click(),
|
|
985
1000
|
className: "inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-2.5 py-1 text-xs font-medium hover:bg-bg-sunken transition-colors",
|
|
986
|
-
children: [/* @__PURE__ */
|
|
1001
|
+
children: [/* @__PURE__ */ g(m, { size: 12 }), " Upload manifest.json"]
|
|
987
1002
|
})
|
|
988
1003
|
]
|
|
989
1004
|
})]
|
|
990
|
-
}), /* @__PURE__ */
|
|
1005
|
+
}), /* @__PURE__ */ g("textarea", {
|
|
991
1006
|
rows: 5,
|
|
992
1007
|
placeholder: "{\n \"manifestVersion\": \"1.0\",\n \"itemType\": \"node\",\n \"identity\": { \"version\": \"1.0.0\", \"displayName\": \"My Node\" }\n}",
|
|
993
|
-
value:
|
|
1008
|
+
value: k.manifestJson,
|
|
994
1009
|
onChange: (e) => {
|
|
995
|
-
|
|
1010
|
+
D(null), A((t) => t && {
|
|
996
1011
|
...t,
|
|
997
1012
|
manifestJson: e.target.value
|
|
998
1013
|
});
|
|
@@ -1000,86 +1015,86 @@ var ke = () => {
|
|
|
1000
1015
|
className: "w-full rounded-md border bg-transparent px-3 py-2 text-xs font-mono resize-y placeholder:text-text-secondary focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)]"
|
|
1001
1016
|
})]
|
|
1002
1017
|
}),
|
|
1003
|
-
W && /* @__PURE__ */
|
|
1018
|
+
W && /* @__PURE__ */ _("div", {
|
|
1004
1019
|
className: "space-y-1",
|
|
1005
|
-
children: [/* @__PURE__ */
|
|
1020
|
+
children: [/* @__PURE__ */ _("label", {
|
|
1006
1021
|
className: "text-sm font-medium",
|
|
1007
1022
|
children: [
|
|
1008
1023
|
H ? "Workflow Definition (JSON)" : "Manifest (JSON)",
|
|
1009
1024
|
" ",
|
|
1010
|
-
/* @__PURE__ */
|
|
1025
|
+
/* @__PURE__ */ g("span", {
|
|
1011
1026
|
className: "text-xs font-normal text-text-secondary",
|
|
1012
1027
|
children: "(leave empty to keep existing)"
|
|
1013
1028
|
})
|
|
1014
1029
|
]
|
|
1015
|
-
}), /* @__PURE__ */
|
|
1030
|
+
}), /* @__PURE__ */ g("textarea", {
|
|
1016
1031
|
rows: 10,
|
|
1017
1032
|
placeholder: H ? "{\n \"nodes\": [],\n \"edges\": []\n}" : "{\n \"manifestVersion\": \"1.0\",\n \"identity\": { \"name\": \"My Item\", \"version\": \"1.0.0\" }\n}",
|
|
1018
|
-
value:
|
|
1019
|
-
onChange: (e) =>
|
|
1033
|
+
value: k.manifestJson,
|
|
1034
|
+
onChange: (e) => A((t) => t && {
|
|
1020
1035
|
...t,
|
|
1021
1036
|
manifestJson: e.target.value
|
|
1022
1037
|
}),
|
|
1023
1038
|
className: "w-full rounded-md border bg-transparent px-3 py-2 text-xs font-mono resize-y placeholder:text-text-secondary focus:outline-none focus:ring-1 focus:ring-[var(--color-focus-ring)]"
|
|
1024
1039
|
})]
|
|
1025
1040
|
}),
|
|
1026
|
-
/* @__PURE__ */
|
|
1027
|
-
label:
|
|
1028
|
-
value:
|
|
1029
|
-
onChange: (e) =>
|
|
1041
|
+
/* @__PURE__ */ g(o, {
|
|
1042
|
+
label: y("devportal.releaseNotes", "Release Notes"),
|
|
1043
|
+
value: k.releaseNotes,
|
|
1044
|
+
onChange: (e) => A((t) => t && {
|
|
1030
1045
|
...t,
|
|
1031
1046
|
releaseNotes: e
|
|
1032
1047
|
}),
|
|
1033
|
-
placeholder:
|
|
1048
|
+
placeholder: y("devportal.releaseNotesPlaceholder", "What changed in this release?"),
|
|
1034
1049
|
rows: 3
|
|
1035
1050
|
}),
|
|
1036
|
-
/* @__PURE__ */
|
|
1037
|
-
label:
|
|
1038
|
-
value:
|
|
1039
|
-
onChange: (e) =>
|
|
1051
|
+
/* @__PURE__ */ g(o, {
|
|
1052
|
+
label: y("devportal.changelog", "Changelog"),
|
|
1053
|
+
value: k.changelog,
|
|
1054
|
+
onChange: (e) => A((t) => t && {
|
|
1040
1055
|
...t,
|
|
1041
1056
|
changelog: e
|
|
1042
1057
|
}),
|
|
1043
|
-
placeholder:
|
|
1058
|
+
placeholder: y("devportal.changelogPlaceholder", "Detailed changelog for this version..."),
|
|
1044
1059
|
rows: 3
|
|
1045
1060
|
})
|
|
1046
1061
|
]
|
|
1047
1062
|
})
|
|
1048
1063
|
}),
|
|
1049
|
-
/* @__PURE__ */
|
|
1050
|
-
open:
|
|
1064
|
+
/* @__PURE__ */ g(a, {
|
|
1065
|
+
open: tt === "publish",
|
|
1051
1066
|
onOpenChange: (e) => {
|
|
1052
1067
|
e || B(null);
|
|
1053
1068
|
},
|
|
1054
|
-
onConfirm:
|
|
1055
|
-
title:
|
|
1069
|
+
onConfirm: Lt,
|
|
1070
|
+
title: y("devportal.submitSelectedVersions", "Submit selected versions for review"),
|
|
1056
1071
|
description: `Submit ${X.length} selected version${X.length === 1 ? "" : "s"} for platform review?`,
|
|
1057
|
-
confirmLabel:
|
|
1058
|
-
cancelLabel:
|
|
1072
|
+
confirmLabel: y("devportal.submitForReview", "Submit for Review"),
|
|
1073
|
+
cancelLabel: y("devportal.cancel", "Cancel"),
|
|
1059
1074
|
variant: "success"
|
|
1060
1075
|
}),
|
|
1061
|
-
/* @__PURE__ */
|
|
1062
|
-
open:
|
|
1076
|
+
/* @__PURE__ */ g(a, {
|
|
1077
|
+
open: nt !== null,
|
|
1063
1078
|
onOpenChange: (e) => {
|
|
1064
|
-
e ||
|
|
1079
|
+
e || rt(null);
|
|
1065
1080
|
},
|
|
1066
|
-
onConfirm:
|
|
1067
|
-
title:
|
|
1068
|
-
description: `${
|
|
1069
|
-
confirmLabel:
|
|
1070
|
-
cancelLabel:
|
|
1081
|
+
onConfirm: jt,
|
|
1082
|
+
title: y("devportal.publishToOrganizationTitle", "Publish to my organization"),
|
|
1083
|
+
description: `${y("devportal.publishToOrganizationDescription", "Version {version} goes live for the workspaces of your organization without platform review. It is never listed in the public Node Store. Workspace admins in your organization can install it from this app.").replace("{version}", nt?.version ?? "")}`,
|
|
1084
|
+
confirmLabel: y("devportal.publishToOrganization", "Publish to my organization"),
|
|
1085
|
+
cancelLabel: y("devportal.cancel", "Cancel"),
|
|
1071
1086
|
variant: "success"
|
|
1072
1087
|
}),
|
|
1073
|
-
/* @__PURE__ */
|
|
1074
|
-
open:
|
|
1088
|
+
/* @__PURE__ */ g(a, {
|
|
1089
|
+
open: tt === "deprecate",
|
|
1075
1090
|
onOpenChange: (e) => {
|
|
1076
1091
|
e || B(null);
|
|
1077
1092
|
},
|
|
1078
|
-
onConfirm:
|
|
1079
|
-
title:
|
|
1080
|
-
description: `${
|
|
1081
|
-
confirmLabel:
|
|
1082
|
-
cancelLabel:
|
|
1093
|
+
onConfirm: Rt,
|
|
1094
|
+
title: y("devportal.deprecateSelectedVersions", "Deprecate selected versions"),
|
|
1095
|
+
description: `${y("devportal.deprecate", "Deprecate")} ${Q.length} selected version${Q.length === 1 ? "" : "s"}? ${y("devportal.deprecateVersionsWarning", "Deprecated versions remain visible but should no longer be promoted.")}`,
|
|
1096
|
+
confirmLabel: y("devportal.deprecate", "Deprecate"),
|
|
1097
|
+
cancelLabel: y("devportal.cancel", "Cancel"),
|
|
1083
1098
|
variant: "warning"
|
|
1084
1099
|
})
|
|
1085
1100
|
]
|
|
@@ -1087,6 +1102,6 @@ var ke = () => {
|
|
|
1087
1102
|
});
|
|
1088
1103
|
};
|
|
1089
1104
|
//#endregion
|
|
1090
|
-
export {
|
|
1105
|
+
export { je as ApplicationVersionsPage };
|
|
1091
1106
|
|
|
1092
1107
|
//# sourceMappingURL=ApplicationVersionsPage.js.map
|