@burdenoff/microfe-devportal 2026.1026.4 → 2026.1101.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/hooks/useProducts.js +1 -1
- package/dist/devportal/hooks/useProducts.js.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.d.ts.map +1 -1
- package/dist/devportal/pages/ApplicationVersionsPage.js +468 -457
- 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/dist/generated/global-operations.d.ts +39 -39
- package/dist/generated/global-operations.d.ts.map +1 -1
- package/dist/generated/global-operations.js +26 -26
- package/dist/generated/global-operations.js.map +1 -1
- 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,415 +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
|
-
let t = await
|
|
209
|
-
if (t.error || !t.data?.publishApplicationVersion) throw t.error ?? Error(
|
|
210
|
-
|
|
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"));
|
|
211
216
|
} catch (e) {
|
|
212
|
-
|
|
217
|
+
N(e instanceof Error ? e.message : y("devportal.versionPublishFailed", "Failed to submit version for review"));
|
|
213
218
|
}
|
|
214
|
-
},
|
|
215
|
-
let e =
|
|
216
|
-
if (
|
|
217
|
-
|
|
219
|
+
}, jt = async () => {
|
|
220
|
+
let e = nt;
|
|
221
|
+
if (rt(null), !(!e || !C)) {
|
|
222
|
+
N(null), P(null);
|
|
218
223
|
try {
|
|
219
|
-
let t = await
|
|
224
|
+
let t = await _t({ variables: {
|
|
220
225
|
id: e.id,
|
|
221
|
-
workspaceId:
|
|
226
|
+
workspaceId: C
|
|
222
227
|
} });
|
|
223
|
-
if (t.error || !t.data?.publishApplicationVersionToOrganization) throw t.error ?? Error(
|
|
224
|
-
|
|
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."));
|
|
225
230
|
} catch (e) {
|
|
226
|
-
|
|
231
|
+
N(e instanceof Error ? e.message : y("devportal.versionPublishToOrganizationFailed", "Failed to publish the version to your organization"));
|
|
227
232
|
}
|
|
228
233
|
}
|
|
229
|
-
},
|
|
230
|
-
|
|
234
|
+
}, Mt = async (e) => {
|
|
235
|
+
N(null), P(null);
|
|
231
236
|
try {
|
|
232
|
-
await
|
|
237
|
+
await yt({ variables: { id: e } }), P(y("devportal.versionDeprecatedSuccess", "Version deprecated successfully"));
|
|
233
238
|
} catch (e) {
|
|
234
|
-
|
|
239
|
+
N(e instanceof Error ? e.message : y("devportal.versionDeprecateFailed", "Failed to deprecate version"));
|
|
235
240
|
}
|
|
236
|
-
},
|
|
237
|
-
if (!(!z || !
|
|
238
|
-
|
|
241
|
+
}, Nt = async () => {
|
|
242
|
+
if (!(!z || !Qe.trim())) {
|
|
243
|
+
N(null), P(null);
|
|
239
244
|
try {
|
|
240
|
-
await
|
|
245
|
+
await xt({ variables: {
|
|
241
246
|
id: z.versionId,
|
|
242
|
-
reason:
|
|
243
|
-
} }),
|
|
247
|
+
reason: Qe
|
|
248
|
+
} }), P(y("devportal.versionRejectedSuccess", "Version rejected — developer has been notified")), Ze(null), $e("");
|
|
244
249
|
} catch (e) {
|
|
245
|
-
|
|
250
|
+
N(e instanceof Error ? e.message : y("devportal.versionRejectFailed", "Failed to reject version"));
|
|
246
251
|
}
|
|
247
252
|
}
|
|
248
|
-
},
|
|
253
|
+
}, Pt = (e) => e.status === "published" && e.isLatest ? /* @__PURE__ */ g(xe, {
|
|
249
254
|
size: 16,
|
|
250
255
|
className: "text-status-success-text"
|
|
251
|
-
}) : e.status === "pending_review" ? /* @__PURE__ */
|
|
256
|
+
}) : e.status === "pending_review" ? /* @__PURE__ */ g(p, {
|
|
252
257
|
size: 16,
|
|
253
258
|
className: "text-status-info-text"
|
|
254
|
-
}) : e.status === "rejected" ? /* @__PURE__ */
|
|
259
|
+
}) : e.status === "rejected" ? /* @__PURE__ */ g(De, {
|
|
255
260
|
size: 16,
|
|
256
261
|
className: "text-status-error-text"
|
|
257
|
-
}) : e.status === "draft" ? /* @__PURE__ */
|
|
262
|
+
}) : e.status === "draft" ? /* @__PURE__ */ g(Se, {
|
|
258
263
|
size: 16,
|
|
259
264
|
className: "text-status-warning-text"
|
|
260
|
-
}) : e.status === "deprecated" ? /* @__PURE__ */
|
|
265
|
+
}) : e.status === "deprecated" ? /* @__PURE__ */ g(ye, {
|
|
261
266
|
size: 16,
|
|
262
267
|
className: "text-text-secondary"
|
|
263
|
-
}) : /* @__PURE__ */
|
|
268
|
+
}) : /* @__PURE__ */ g(we, {
|
|
264
269
|
size: 16,
|
|
265
270
|
className: "text-accent-blue"
|
|
266
|
-
}),
|
|
267
|
-
|
|
271
|
+
}), Ft = (e, t) => {
|
|
272
|
+
R((n) => {
|
|
268
273
|
let r = new Set(n);
|
|
269
274
|
return t ? r.add(e) : r.delete(e), r;
|
|
270
275
|
});
|
|
271
|
-
},
|
|
272
|
-
|
|
276
|
+
}, It = (e) => {
|
|
277
|
+
R((t) => {
|
|
273
278
|
let n = new Set(t);
|
|
274
279
|
return J.forEach((t) => {
|
|
275
280
|
e ? n.add(t.id) : n.delete(t.id);
|
|
276
281
|
}), n;
|
|
277
282
|
});
|
|
278
|
-
},
|
|
283
|
+
}, $ = () => R(/* @__PURE__ */ new Set()), Lt = async () => {
|
|
279
284
|
if (X.length === 0) return;
|
|
280
|
-
|
|
281
|
-
let e = await Promise.allSettled(X.map((e) =>
|
|
282
|
-
|
|
283
|
-
},
|
|
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 () => {
|
|
284
289
|
if (Q.length === 0) return;
|
|
285
|
-
|
|
286
|
-
let e = await Promise.allSettled(Q.map((e) =>
|
|
287
|
-
|
|
288
|
-
},
|
|
289
|
-
return
|
|
290
|
-
title:
|
|
291
|
-
description:
|
|
292
|
-
backLink: `/apps/${
|
|
293
|
-
backLabel:
|
|
294
|
-
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", {
|
|
295
300
|
className: "flex items-center justify-center py-16",
|
|
296
|
-
children: /* @__PURE__ */
|
|
301
|
+
children: /* @__PURE__ */ g(Ce, { className: "h-8 w-8 animate-spin text-text-secondary" })
|
|
297
302
|
})
|
|
298
|
-
}) :
|
|
299
|
-
title:
|
|
300
|
-
description:
|
|
301
|
-
backLink: `/apps/${
|
|
302
|
-
backLabel:
|
|
303
|
-
children: /* @__PURE__ */
|
|
304
|
-
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, {
|
|
305
310
|
size: 32,
|
|
306
311
|
className: "text-status-error-text"
|
|
307
312
|
}),
|
|
308
|
-
title:
|
|
309
|
-
description:
|
|
313
|
+
title: y("devportal.failedToLoadVersions", "Failed to load versions"),
|
|
314
|
+
description: dt.message || y("devportal.versionsLoadError", "An error occurred while loading versions")
|
|
310
315
|
})
|
|
311
|
-
}) : /* @__PURE__ */
|
|
316
|
+
}) : /* @__PURE__ */ g(de, {
|
|
312
317
|
authOnly: !0,
|
|
313
|
-
children: /* @__PURE__ */
|
|
314
|
-
title:
|
|
315
|
-
description:
|
|
316
|
-
purpose: H ?
|
|
317
|
-
backLink: `/apps/${
|
|
318
|
-
backLabel:
|
|
319
|
-
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", {
|
|
320
325
|
onClick: () => {
|
|
321
|
-
|
|
326
|
+
F(null), O(!0);
|
|
322
327
|
},
|
|
323
|
-
disabled: !
|
|
324
|
-
"aria-disabled": !
|
|
328
|
+
disabled: !Me,
|
|
329
|
+
"aria-disabled": !Me,
|
|
325
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",
|
|
326
|
-
children: [/* @__PURE__ */
|
|
331
|
+
children: [/* @__PURE__ */ g(Te, { size: 16 }), y("devportal.newVersion", "New Version")]
|
|
327
332
|
}),
|
|
328
333
|
children: [
|
|
329
|
-
|
|
334
|
+
qe && /* @__PURE__ */ _("div", {
|
|
330
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",
|
|
331
336
|
children: [
|
|
332
|
-
/* @__PURE__ */
|
|
337
|
+
/* @__PURE__ */ g(f, {
|
|
333
338
|
size: 16,
|
|
334
339
|
className: "flex-shrink-0"
|
|
335
340
|
}),
|
|
336
|
-
|
|
337
|
-
/* @__PURE__ */
|
|
338
|
-
onClick: () =>
|
|
341
|
+
qe,
|
|
342
|
+
/* @__PURE__ */ g("button", {
|
|
343
|
+
onClick: () => N(null),
|
|
339
344
|
className: "ml-auto text-status-error-text hover:text-status-error-text",
|
|
340
|
-
children:
|
|
345
|
+
children: y("devportal.dismiss", "Dismiss")
|
|
341
346
|
})
|
|
342
347
|
]
|
|
343
348
|
}),
|
|
344
|
-
|
|
349
|
+
Je && /* @__PURE__ */ _("div", {
|
|
345
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",
|
|
346
351
|
children: [
|
|
347
|
-
/* @__PURE__ */
|
|
352
|
+
/* @__PURE__ */ g(xe, {
|
|
348
353
|
size: 16,
|
|
349
354
|
className: "flex-shrink-0"
|
|
350
355
|
}),
|
|
351
|
-
|
|
352
|
-
/* @__PURE__ */
|
|
353
|
-
onClick: () =>
|
|
356
|
+
Je,
|
|
357
|
+
/* @__PURE__ */ g("button", {
|
|
358
|
+
onClick: () => P(null),
|
|
354
359
|
className: "ml-auto text-status-success-text hover:text-status-success-text",
|
|
355
|
-
children:
|
|
360
|
+
children: y("devportal.dismiss", "Dismiss")
|
|
356
361
|
})
|
|
357
362
|
]
|
|
358
363
|
}),
|
|
359
|
-
G && !K && /* @__PURE__ */
|
|
364
|
+
G && !K && /* @__PURE__ */ _("div", {
|
|
360
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",
|
|
361
|
-
children: [/* @__PURE__ */
|
|
366
|
+
children: [/* @__PURE__ */ g(f, {
|
|
362
367
|
size: 16,
|
|
363
368
|
className: "mt-0.5 shrink-0"
|
|
364
|
-
}), /* @__PURE__ */
|
|
369
|
+
}), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
|
|
365
370
|
className: "font-medium",
|
|
366
371
|
children: "Complete your app setup before submitting for review"
|
|
367
|
-
}), /* @__PURE__ */
|
|
372
|
+
}), /* @__PURE__ */ g("ul", {
|
|
368
373
|
className: "mt-1 list-disc pl-4 text-xs opacity-80",
|
|
369
|
-
children:
|
|
374
|
+
children: lt.map((e) => /* @__PURE__ */ g("li", { children: e }, e))
|
|
370
375
|
})] })]
|
|
371
376
|
}),
|
|
372
|
-
G && G.status !== "PUBLISHED" && J.some((e) => e.status === "draft") && /* @__PURE__ */
|
|
377
|
+
G && G.status !== "PUBLISHED" && J.some((e) => e.status === "draft") && /* @__PURE__ */ _("div", {
|
|
373
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",
|
|
374
|
-
children: [/* @__PURE__ */
|
|
379
|
+
children: [/* @__PURE__ */ g(p, {
|
|
375
380
|
size: 16,
|
|
376
381
|
className: "mt-0.5 shrink-0"
|
|
377
|
-
}), /* @__PURE__ */
|
|
382
|
+
}), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
|
|
378
383
|
className: "font-medium",
|
|
379
384
|
children: "Ready to submit? Go to the Submit tab"
|
|
380
|
-
}), /* @__PURE__ */
|
|
385
|
+
}), /* @__PURE__ */ _("p", {
|
|
381
386
|
className: "mt-1 text-xs opacity-80",
|
|
382
387
|
children: [
|
|
383
388
|
"For your first submission the app and its version are reviewed together. Head to the ",
|
|
384
|
-
/* @__PURE__ */
|
|
389
|
+
/* @__PURE__ */ g("strong", { children: "Submit" }),
|
|
385
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."
|
|
386
391
|
]
|
|
387
392
|
})] })]
|
|
388
393
|
}),
|
|
389
|
-
G && Z && /* @__PURE__ */
|
|
394
|
+
G && Z && /* @__PURE__ */ _("div", {
|
|
390
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",
|
|
391
|
-
children: [/* @__PURE__ */
|
|
396
|
+
children: [/* @__PURE__ */ g(p, {
|
|
392
397
|
size: 16,
|
|
393
398
|
className: "mt-0.5 shrink-0"
|
|
394
|
-
}), /* @__PURE__ */
|
|
399
|
+
}), /* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("p", {
|
|
395
400
|
className: "font-medium",
|
|
396
|
-
children:
|
|
397
|
-
}), /* @__PURE__ */
|
|
401
|
+
children: y("devportal.versionAlreadyPending", "A version is already pending review")
|
|
402
|
+
}), /* @__PURE__ */ g("p", {
|
|
398
403
|
className: "mt-1 text-xs opacity-80",
|
|
399
|
-
children:
|
|
404
|
+
children: y("devportal.versionAlreadyPendingDetail", "Submitting another version is disabled until it's approved or rejected.")
|
|
400
405
|
})] })]
|
|
401
406
|
}),
|
|
402
|
-
J.length > 0 && /* @__PURE__ */
|
|
407
|
+
J.length > 0 && /* @__PURE__ */ g("div", {
|
|
403
408
|
className: "rounded-card border border-border-seam bg-bg-surface p-4",
|
|
404
|
-
children: /* @__PURE__ */
|
|
409
|
+
children: /* @__PURE__ */ _("div", {
|
|
405
410
|
className: "flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between",
|
|
406
|
-
children: [/* @__PURE__ */
|
|
411
|
+
children: [/* @__PURE__ */ _("div", {
|
|
407
412
|
className: "flex flex-wrap items-center gap-3",
|
|
408
|
-
children: [/* @__PURE__ */
|
|
413
|
+
children: [/* @__PURE__ */ _("div", {
|
|
409
414
|
className: "flex items-center gap-2",
|
|
410
|
-
children: [/* @__PURE__ */
|
|
411
|
-
checked:
|
|
412
|
-
indeterminate:
|
|
413
|
-
onChange:
|
|
415
|
+
children: [/* @__PURE__ */ g(i, {
|
|
416
|
+
checked: St,
|
|
417
|
+
indeterminate: Ct,
|
|
418
|
+
onChange: It,
|
|
414
419
|
ariaLabel: "Select all visible versions"
|
|
415
|
-
}), /* @__PURE__ */
|
|
420
|
+
}), /* @__PURE__ */ g("span", {
|
|
416
421
|
className: "text-sm font-medium",
|
|
417
|
-
children:
|
|
422
|
+
children: y("devportal.selectAllVisible", "Select all visible")
|
|
418
423
|
})]
|
|
419
|
-
}),
|
|
420
|
-
onClick:
|
|
424
|
+
}), L.size > 0 && /* @__PURE__ */ g("button", {
|
|
425
|
+
onClick: $,
|
|
421
426
|
className: "text-sm text-text-secondary hover:text-text-primary",
|
|
422
|
-
children:
|
|
427
|
+
children: y("devportal.clearSelection", "Clear selection")
|
|
423
428
|
})]
|
|
424
|
-
}), /* @__PURE__ */
|
|
429
|
+
}), /* @__PURE__ */ _("div", {
|
|
425
430
|
className: "flex flex-wrap items-center gap-2",
|
|
426
431
|
children: [
|
|
427
|
-
/* @__PURE__ */
|
|
432
|
+
/* @__PURE__ */ _("span", {
|
|
428
433
|
className: "rounded-full bg-bg-sunken px-3 py-1 text-sm font-medium text-text-secondary",
|
|
429
|
-
children: [
|
|
434
|
+
children: [L.size, " selected"]
|
|
430
435
|
}),
|
|
431
|
-
/* @__PURE__ */
|
|
436
|
+
/* @__PURE__ */ _("button", {
|
|
432
437
|
onClick: () => B("publish"),
|
|
433
|
-
disabled: X.length === 0 || !
|
|
434
|
-
"aria-disabled": !
|
|
435
|
-
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(" · "),
|
|
436
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",
|
|
437
|
-
children: [
|
|
442
|
+
children: [y("devportal.submitForReview", "Submit for Review"), X.length > 0 ? ` (${X.length})` : ""]
|
|
438
443
|
}),
|
|
439
|
-
/* @__PURE__ */
|
|
444
|
+
/* @__PURE__ */ _("button", {
|
|
440
445
|
onClick: () => B("deprecate"),
|
|
441
|
-
disabled: Q.length === 0 || !
|
|
442
|
-
"aria-disabled": !
|
|
446
|
+
disabled: Q.length === 0 || !x,
|
|
447
|
+
"aria-disabled": !x,
|
|
443
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",
|
|
444
|
-
children: [
|
|
449
|
+
children: [y("devportal.deprecateSelected", "Deprecate Selected"), Q.length > 0 ? ` (${Q.length})` : ""]
|
|
445
450
|
})
|
|
446
451
|
]
|
|
447
452
|
})]
|
|
448
453
|
})
|
|
449
454
|
}),
|
|
450
|
-
J.length > 0 ? /* @__PURE__ */
|
|
455
|
+
J.length > 0 ? /* @__PURE__ */ g(le, {
|
|
451
456
|
data: J,
|
|
452
457
|
keyField: "id",
|
|
453
458
|
columns: [
|
|
454
459
|
{
|
|
455
460
|
key: "select",
|
|
456
|
-
header: /* @__PURE__ */
|
|
457
|
-
checked:
|
|
458
|
-
indeterminate:
|
|
459
|
-
onChange:
|
|
461
|
+
header: /* @__PURE__ */ g(i, {
|
|
462
|
+
checked: St,
|
|
463
|
+
indeterminate: Ct,
|
|
464
|
+
onChange: It,
|
|
460
465
|
ariaLabel: "Select all visible versions"
|
|
461
466
|
}),
|
|
462
467
|
className: "w-12",
|
|
463
|
-
render: (e) => /* @__PURE__ */
|
|
468
|
+
render: (e) => /* @__PURE__ */ g("div", {
|
|
464
469
|
onClick: (e) => e.stopPropagation(),
|
|
465
|
-
children: /* @__PURE__ */
|
|
466
|
-
checked:
|
|
467
|
-
onChange: (t) =>
|
|
470
|
+
children: /* @__PURE__ */ g(i, {
|
|
471
|
+
checked: L.has(e.id),
|
|
472
|
+
onChange: (t) => Ft(e.id, t),
|
|
468
473
|
ariaLabel: `Select version ${e.version}`
|
|
469
474
|
})
|
|
470
475
|
})
|
|
471
476
|
},
|
|
472
477
|
{
|
|
473
478
|
key: "version",
|
|
474
|
-
header:
|
|
475
|
-
render: (e) => /* @__PURE__ */
|
|
479
|
+
header: y("devportal.version", "Version"),
|
|
480
|
+
render: (e) => /* @__PURE__ */ _("div", {
|
|
476
481
|
className: "flex items-center gap-2",
|
|
477
482
|
children: [
|
|
478
|
-
|
|
479
|
-
/* @__PURE__ */
|
|
483
|
+
Pt(e),
|
|
484
|
+
/* @__PURE__ */ g("span", {
|
|
480
485
|
className: "font-mono font-medium",
|
|
481
486
|
children: e.version
|
|
482
487
|
}),
|
|
483
|
-
e.isLatest && /* @__PURE__ */
|
|
488
|
+
e.isLatest && /* @__PURE__ */ g("span", {
|
|
484
489
|
className: "rounded-full bg-status-success-bg-subtle px-2 py-0.5 text-xs text-status-success-text",
|
|
485
|
-
children:
|
|
490
|
+
children: y("devportal.latest", "Latest")
|
|
486
491
|
}),
|
|
487
|
-
!e.isStable && /* @__PURE__ */
|
|
492
|
+
!e.isStable && /* @__PURE__ */ g("span", {
|
|
488
493
|
className: "rounded-full bg-status-warning-bg-subtle px-2 py-0.5 text-xs text-status-warning-text",
|
|
489
|
-
children:
|
|
494
|
+
children: y("devportal.beta", "Beta")
|
|
490
495
|
})
|
|
491
496
|
]
|
|
492
497
|
})
|
|
493
498
|
},
|
|
494
499
|
{
|
|
495
500
|
key: "releaseNotes",
|
|
496
|
-
header:
|
|
497
|
-
render: (e) => /* @__PURE__ */
|
|
501
|
+
header: y("devportal.releaseNotes", "Release Notes"),
|
|
502
|
+
render: (e) => /* @__PURE__ */ g("p", {
|
|
498
503
|
className: "max-w-md truncate text-sm text-text-secondary",
|
|
499
|
-
children: e.releaseNotes ||
|
|
504
|
+
children: e.releaseNotes || y("devportal.noReleaseNotes", "No release notes")
|
|
500
505
|
})
|
|
501
506
|
},
|
|
502
507
|
{
|
|
503
508
|
key: "status",
|
|
504
|
-
header:
|
|
505
|
-
render: (e) => /* @__PURE__ */
|
|
509
|
+
header: y("devportal.status", "Status"),
|
|
510
|
+
render: (e) => /* @__PURE__ */ _("div", {
|
|
506
511
|
className: "space-y-1",
|
|
507
512
|
children: [
|
|
508
|
-
/* @__PURE__ */
|
|
509
|
-
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", {
|
|
510
515
|
className: "text-xs text-status-info-text",
|
|
511
516
|
children: "Awaiting platform review"
|
|
512
517
|
}),
|
|
513
|
-
e.status === "rejected" && e.reviewNotes && /* @__PURE__ */
|
|
518
|
+
e.status === "rejected" && e.reviewNotes && /* @__PURE__ */ g("p", {
|
|
514
519
|
className: "text-xs text-status-error-text max-w-xs",
|
|
515
520
|
children: e.reviewNotes
|
|
516
521
|
}),
|
|
517
|
-
U && e.packageUrl && /* @__PURE__ */
|
|
518
|
-
|
|
522
|
+
U && e.packageUrl && /* @__PURE__ */ g(pe, { metadata: e.metadata }),
|
|
523
|
+
at && Ae(e.metadata) && /* @__PURE__ */ _("p", {
|
|
519
524
|
className: "inline-flex items-center gap-1 text-xs text-status-success-text",
|
|
520
|
-
children: [/* @__PURE__ */
|
|
525
|
+
children: [/* @__PURE__ */ g(be, { size: 11 }), y("devportal.publishedToOrganization", "Published to your organization")]
|
|
521
526
|
})
|
|
522
527
|
]
|
|
523
528
|
})
|
|
524
529
|
},
|
|
525
530
|
{
|
|
526
531
|
key: "publishedAt",
|
|
527
|
-
header:
|
|
528
|
-
render: (e) => e.publishedAt ?
|
|
532
|
+
header: y("devportal.published", "Published"),
|
|
533
|
+
render: (e) => e.publishedAt ? ge(new Date(e.publishedAt), "MMM d, yyyy") : "-"
|
|
529
534
|
},
|
|
530
535
|
{
|
|
531
536
|
key: "manifest",
|
|
532
|
-
header:
|
|
533
|
-
render: (e) => e.manifest ? /* @__PURE__ */
|
|
537
|
+
header: y("devportal.manifest", "Manifest"),
|
|
538
|
+
render: (e) => e.manifest ? /* @__PURE__ */ g(fe, {
|
|
534
539
|
manifest: e.manifest,
|
|
535
|
-
tr:
|
|
536
|
-
}) : /* @__PURE__ */
|
|
540
|
+
tr: y
|
|
541
|
+
}) : /* @__PURE__ */ g("span", {
|
|
537
542
|
className: "text-xs text-text-secondary",
|
|
538
|
-
children:
|
|
543
|
+
children: y("devportal.noManifest", "No manifest")
|
|
539
544
|
})
|
|
540
545
|
},
|
|
541
546
|
{
|
|
542
547
|
key: "actions",
|
|
543
548
|
header: "",
|
|
544
549
|
className: "w-48",
|
|
545
|
-
render: (e) => /* @__PURE__ */
|
|
550
|
+
render: (e) => /* @__PURE__ */ _("div", {
|
|
546
551
|
className: "flex flex-wrap gap-2",
|
|
547
552
|
children: [
|
|
548
|
-
|
|
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", {
|
|
549
560
|
className: "inline-flex items-center gap-1 text-xs text-text-secondary hover:text-text-primary hover:underline",
|
|
550
561
|
onClick: () => {
|
|
551
562
|
let t = e.manifest ? JSON.stringify(e.manifest, null, 2) : "";
|
|
552
|
-
|
|
563
|
+
A({
|
|
553
564
|
versionId: e.id,
|
|
554
565
|
version: e.version,
|
|
555
566
|
hasExistingZip: !!e.packageUrl,
|
|
@@ -559,444 +570,444 @@ var ke = () => {
|
|
|
559
570
|
originalManifestJson: t,
|
|
560
571
|
releaseNotes: e.releaseNotes ?? "",
|
|
561
572
|
changelog: e.changelog ?? ""
|
|
562
|
-
}),
|
|
573
|
+
}), D(null), I(null);
|
|
563
574
|
},
|
|
564
575
|
children: "Edit"
|
|
565
576
|
}),
|
|
566
|
-
(e.status === "draft" || e.status === "rejected") && G?.status === "PUBLISHED" && /* @__PURE__ */
|
|
577
|
+
(e.status === "draft" || e.status === "rejected") && G?.status === "PUBLISHED" && /* @__PURE__ */ _("button", {
|
|
567
578
|
className: "inline-flex items-center gap-1 text-xs text-primary hover:underline disabled:opacity-50 disabled:cursor-not-allowed",
|
|
568
|
-
disabled: !
|
|
569
|
-
"aria-disabled": !
|
|
570
|
-
title: Z ?
|
|
571
|
-
onClick: () =>
|
|
572
|
-
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")]
|
|
573
584
|
}),
|
|
574
|
-
|
|
585
|
+
at && (e.status === "draft" || e.status === "rejected") && /* @__PURE__ */ _("button", {
|
|
575
586
|
className: "inline-flex items-center gap-1 text-xs text-primary hover:underline disabled:opacity-50 disabled:cursor-not-allowed",
|
|
576
|
-
disabled: !
|
|
577
|
-
"aria-disabled": !
|
|
578
|
-
title:
|
|
579
|
-
onClick: () =>
|
|
580
|
-
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")]
|
|
581
592
|
}),
|
|
582
|
-
e.status === "published" && !e.isLatest && /* @__PURE__ */
|
|
593
|
+
e.status === "published" && !e.isLatest && /* @__PURE__ */ g("button", {
|
|
583
594
|
className: "text-xs text-status-warning-text hover:underline disabled:opacity-50",
|
|
584
|
-
disabled: !
|
|
585
|
-
"aria-disabled": !
|
|
586
|
-
onClick: () =>
|
|
587
|
-
children:
|
|
595
|
+
disabled: !x,
|
|
596
|
+
"aria-disabled": !x,
|
|
597
|
+
onClick: () => Mt(e.id),
|
|
598
|
+
children: y("devportal.deprecate", "Deprecate")
|
|
588
599
|
})
|
|
589
600
|
]
|
|
590
601
|
})
|
|
591
602
|
}
|
|
592
603
|
]
|
|
593
|
-
}) : /* @__PURE__ */
|
|
604
|
+
}) : /* @__PURE__ */ g(t, {
|
|
594
605
|
illustration: "empty-data",
|
|
595
|
-
title:
|
|
596
|
-
description:
|
|
597
|
-
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", {
|
|
598
609
|
onClick: () => {
|
|
599
|
-
|
|
610
|
+
F(null), O(!0);
|
|
600
611
|
},
|
|
601
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",
|
|
602
|
-
children: [/* @__PURE__ */
|
|
613
|
+
children: [/* @__PURE__ */ g(Te, { size: 16 }), y("devportal.createVersion", "Create Version")]
|
|
603
614
|
})
|
|
604
615
|
}),
|
|
605
|
-
|
|
606
|
-
open:
|
|
616
|
+
Ke && /* @__PURE__ */ g(a, {
|
|
617
|
+
open: Ke,
|
|
607
618
|
onOpenChange: (e) => {
|
|
608
|
-
|
|
619
|
+
O(e), e || F(null);
|
|
609
620
|
},
|
|
610
|
-
onConfirm:
|
|
611
|
-
title:
|
|
612
|
-
confirmLabel:
|
|
613
|
-
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", {
|
|
614
625
|
className: "space-y-4",
|
|
615
626
|
children: [
|
|
616
|
-
|
|
627
|
+
Ye && /* @__PURE__ */ _("div", {
|
|
617
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",
|
|
618
|
-
children: [/* @__PURE__ */
|
|
629
|
+
children: [/* @__PURE__ */ g(f, {
|
|
619
630
|
size: 14,
|
|
620
631
|
className: "flex-shrink-0"
|
|
621
|
-
}),
|
|
632
|
+
}), Ye]
|
|
622
633
|
}),
|
|
623
|
-
/* @__PURE__ */
|
|
624
|
-
label:
|
|
625
|
-
value:
|
|
626
|
-
onChange: (e) =>
|
|
627
|
-
...
|
|
634
|
+
/* @__PURE__ */ g(ue, {
|
|
635
|
+
label: y("devportal.versionNumber", "Version Number"),
|
|
636
|
+
value: j.version,
|
|
637
|
+
onChange: (e) => M({
|
|
638
|
+
...j,
|
|
628
639
|
version: e.target.value
|
|
629
640
|
}),
|
|
630
641
|
placeholder: "e.g., 2.2.0",
|
|
631
|
-
hint:
|
|
632
|
-
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,
|
|
633
644
|
required: !0
|
|
634
645
|
}),
|
|
635
|
-
W && /* @__PURE__ */
|
|
646
|
+
W && /* @__PURE__ */ _("div", {
|
|
636
647
|
className: "space-y-1",
|
|
637
648
|
children: [
|
|
638
|
-
/* @__PURE__ */
|
|
649
|
+
/* @__PURE__ */ _("label", {
|
|
639
650
|
className: "text-sm font-medium",
|
|
640
651
|
children: [
|
|
641
652
|
H ? "Workflow Definition (JSON)" : "Manifest (JSON)",
|
|
642
653
|
" ",
|
|
643
|
-
/* @__PURE__ */
|
|
654
|
+
/* @__PURE__ */ g("span", {
|
|
644
655
|
className: "text-status-error-text",
|
|
645
656
|
children: "*"
|
|
646
657
|
})
|
|
647
658
|
]
|
|
648
659
|
}),
|
|
649
|
-
/* @__PURE__ */
|
|
660
|
+
/* @__PURE__ */ g("textarea", {
|
|
650
661
|
rows: 10,
|
|
651
662
|
required: !0,
|
|
652
663
|
placeholder: H ? "{\n \"nodes\": [],\n \"edges\": []\n}" : "{\n \"manifestVersion\": \"1.0\",\n \"identity\": { \"name\": \"My Item\", \"version\": \"1.0.0\" }\n}",
|
|
653
|
-
value:
|
|
664
|
+
value: j.manifestJson,
|
|
654
665
|
onChange: (e) => {
|
|
655
|
-
let t =
|
|
656
|
-
|
|
657
|
-
...
|
|
666
|
+
let t = v(e.target.value);
|
|
667
|
+
M({
|
|
668
|
+
...j,
|
|
658
669
|
manifestJson: e.target.value,
|
|
659
670
|
...t ? { version: t } : {}
|
|
660
671
|
});
|
|
661
672
|
},
|
|
662
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)]"
|
|
663
674
|
}),
|
|
664
|
-
/* @__PURE__ */
|
|
675
|
+
/* @__PURE__ */ g("p", {
|
|
665
676
|
className: "text-xs text-text-secondary",
|
|
666
|
-
children: H ? /* @__PURE__ */
|
|
677
|
+
children: H ? /* @__PURE__ */ _(h, { children: [
|
|
667
678
|
"Paste the full ",
|
|
668
|
-
/* @__PURE__ */
|
|
679
|
+
/* @__PURE__ */ g("code", { children: "{nodes, edges}" }),
|
|
669
680
|
" JSON. Saved as this version's manifest — no zip needed."
|
|
670
681
|
] }) : "Paste the manifest JSON for this version. No zip needed."
|
|
671
682
|
})
|
|
672
683
|
]
|
|
673
684
|
}),
|
|
674
|
-
U && /* @__PURE__ */
|
|
685
|
+
U && /* @__PURE__ */ _("div", {
|
|
675
686
|
className: "space-y-1",
|
|
676
687
|
children: [
|
|
677
|
-
/* @__PURE__ */
|
|
688
|
+
/* @__PURE__ */ _("label", {
|
|
678
689
|
className: "text-sm font-medium",
|
|
679
690
|
children: [
|
|
680
691
|
"Package (.zip)",
|
|
681
692
|
" ",
|
|
682
|
-
/* @__PURE__ */
|
|
693
|
+
/* @__PURE__ */ g("span", {
|
|
683
694
|
className: "text-status-error-text",
|
|
684
695
|
children: "*"
|
|
685
696
|
})
|
|
686
697
|
]
|
|
687
698
|
}),
|
|
688
|
-
/* @__PURE__ */
|
|
699
|
+
/* @__PURE__ */ _("div", {
|
|
689
700
|
className: "flex gap-2 items-center",
|
|
690
701
|
children: [
|
|
691
|
-
/* @__PURE__ */
|
|
692
|
-
ref:
|
|
702
|
+
/* @__PURE__ */ g("input", {
|
|
703
|
+
ref: ze,
|
|
693
704
|
type: "file",
|
|
694
705
|
accept: ".zip",
|
|
695
706
|
className: "hidden",
|
|
696
|
-
onChange:
|
|
707
|
+
onChange: Et
|
|
697
708
|
}),
|
|
698
|
-
/* @__PURE__ */
|
|
709
|
+
/* @__PURE__ */ g("button", {
|
|
699
710
|
type: "button",
|
|
700
|
-
disabled:
|
|
701
|
-
onClick: () =>
|
|
711
|
+
disabled: T,
|
|
712
|
+
onClick: () => ze.current?.click(),
|
|
702
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",
|
|
703
|
-
children:
|
|
704
|
-
/* @__PURE__ */
|
|
714
|
+
children: T ? /* @__PURE__ */ _(h, { children: [
|
|
715
|
+
/* @__PURE__ */ g(Ce, {
|
|
705
716
|
size: 14,
|
|
706
717
|
className: "animate-spin"
|
|
707
718
|
}),
|
|
708
719
|
" ",
|
|
709
720
|
"Uploading… ",
|
|
710
|
-
|
|
721
|
+
Re,
|
|
711
722
|
"%"
|
|
712
|
-
] }) : /* @__PURE__ */
|
|
713
|
-
/* @__PURE__ */
|
|
723
|
+
] }) : /* @__PURE__ */ _(h, { children: [
|
|
724
|
+
/* @__PURE__ */ g(m, { size: 14 }),
|
|
714
725
|
" ",
|
|
715
|
-
|
|
726
|
+
j.packageUrl ? "Replace zip" : "Upload zip"
|
|
716
727
|
] })
|
|
717
728
|
}),
|
|
718
|
-
|
|
729
|
+
j.packageUrl && !T && /* @__PURE__ */ g("span", {
|
|
719
730
|
className: "text-xs text-status-success-text",
|
|
720
731
|
children: "✓ Uploaded"
|
|
721
732
|
})
|
|
722
733
|
]
|
|
723
734
|
}),
|
|
724
|
-
|
|
735
|
+
E && /* @__PURE__ */ g("p", {
|
|
725
736
|
className: "text-xs text-status-error-text",
|
|
726
|
-
children:
|
|
737
|
+
children: E
|
|
727
738
|
}),
|
|
728
|
-
/* @__PURE__ */
|
|
739
|
+
/* @__PURE__ */ g("p", {
|
|
729
740
|
className: "text-xs text-text-tertiary",
|
|
730
741
|
children: "The zip is the node executable. Upload it before publishing — users install exactly this artifact."
|
|
731
742
|
})
|
|
732
743
|
]
|
|
733
744
|
}),
|
|
734
|
-
U && /* @__PURE__ */
|
|
745
|
+
U && /* @__PURE__ */ _("div", {
|
|
735
746
|
className: "space-y-2",
|
|
736
747
|
children: [
|
|
737
|
-
/* @__PURE__ */
|
|
748
|
+
/* @__PURE__ */ _("div", {
|
|
738
749
|
className: "flex items-center justify-between gap-2 flex-wrap",
|
|
739
|
-
children: [/* @__PURE__ */
|
|
750
|
+
children: [/* @__PURE__ */ _("label", {
|
|
740
751
|
className: "text-sm font-medium",
|
|
741
752
|
children: [
|
|
742
753
|
"manifest.json",
|
|
743
754
|
" ",
|
|
744
|
-
/* @__PURE__ */
|
|
755
|
+
/* @__PURE__ */ g("span", {
|
|
745
756
|
className: "text-status-error-text",
|
|
746
757
|
children: "*"
|
|
747
758
|
})
|
|
748
759
|
]
|
|
749
|
-
}), /* @__PURE__ */
|
|
760
|
+
}), /* @__PURE__ */ _("div", {
|
|
750
761
|
className: "flex items-center gap-2",
|
|
751
762
|
children: [
|
|
752
|
-
|
|
763
|
+
Ue && /* @__PURE__ */ _("span", {
|
|
753
764
|
className: "text-xs text-status-success-text",
|
|
754
|
-
children: ["✓ ",
|
|
765
|
+
children: ["✓ ", Ue]
|
|
755
766
|
}),
|
|
756
|
-
/* @__PURE__ */
|
|
757
|
-
ref:
|
|
767
|
+
/* @__PURE__ */ g("input", {
|
|
768
|
+
ref: Be,
|
|
758
769
|
type: "file",
|
|
759
770
|
accept: ".json,application/json",
|
|
760
771
|
className: "hidden",
|
|
761
|
-
onChange:
|
|
772
|
+
onChange: et
|
|
762
773
|
}),
|
|
763
|
-
/* @__PURE__ */
|
|
774
|
+
/* @__PURE__ */ _("button", {
|
|
764
775
|
type: "button",
|
|
765
|
-
onClick: () =>
|
|
776
|
+
onClick: () => Be.current?.click(),
|
|
766
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",
|
|
767
|
-
children: [/* @__PURE__ */
|
|
778
|
+
children: [/* @__PURE__ */ g(m, { size: 12 }), "Upload manifest.json"]
|
|
768
779
|
})
|
|
769
780
|
]
|
|
770
781
|
})]
|
|
771
782
|
}),
|
|
772
|
-
/* @__PURE__ */
|
|
783
|
+
/* @__PURE__ */ g("textarea", {
|
|
773
784
|
rows: 5,
|
|
774
785
|
placeholder: "{\n \"manifestVersion\": \"1.0\",\n \"itemType\": \"node\",\n \"identity\": { \"version\": \"1.0.0\", \"displayName\": \"My Node\" }\n}",
|
|
775
|
-
value:
|
|
786
|
+
value: j.manifestJson,
|
|
776
787
|
onChange: (e) => {
|
|
777
|
-
|
|
778
|
-
let t =
|
|
779
|
-
|
|
780
|
-
...
|
|
788
|
+
We(null);
|
|
789
|
+
let t = v(e.target.value);
|
|
790
|
+
M({
|
|
791
|
+
...j,
|
|
781
792
|
manifestJson: e.target.value,
|
|
782
793
|
...t ? { version: t } : {}
|
|
783
794
|
});
|
|
784
795
|
},
|
|
785
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)]"
|
|
786
797
|
}),
|
|
787
|
-
/* @__PURE__ */
|
|
798
|
+
/* @__PURE__ */ _("p", {
|
|
788
799
|
className: "text-xs text-text-tertiary",
|
|
789
800
|
children: [
|
|
790
801
|
"Upload or paste your ",
|
|
791
|
-
/* @__PURE__ */
|
|
802
|
+
/* @__PURE__ */ g("code", { children: "manifest.json" }),
|
|
792
803
|
" — required so the platform knows your node's inputs, outputs, and operations. Not extracted from the zip automatically."
|
|
793
804
|
]
|
|
794
805
|
})
|
|
795
806
|
]
|
|
796
807
|
}),
|
|
797
|
-
|
|
808
|
+
it && /* @__PURE__ */ _("div", {
|
|
798
809
|
className: "space-y-1",
|
|
799
810
|
children: [
|
|
800
|
-
/* @__PURE__ */
|
|
811
|
+
/* @__PURE__ */ _("label", {
|
|
801
812
|
className: "text-sm font-medium",
|
|
802
813
|
children: [
|
|
803
814
|
"Required scopes",
|
|
804
815
|
" ",
|
|
805
|
-
/* @__PURE__ */
|
|
816
|
+
/* @__PURE__ */ g("span", {
|
|
806
817
|
className: "text-xs font-normal text-text-secondary",
|
|
807
818
|
children: "(optional)"
|
|
808
819
|
})
|
|
809
820
|
]
|
|
810
821
|
}),
|
|
811
|
-
/* @__PURE__ */
|
|
822
|
+
/* @__PURE__ */ g("input", {
|
|
812
823
|
type: "text",
|
|
813
|
-
value:
|
|
814
|
-
onChange: (e) =>
|
|
815
|
-
...
|
|
824
|
+
value: j.requiredScopes,
|
|
825
|
+
onChange: (e) => M({
|
|
826
|
+
...j,
|
|
816
827
|
requiredScopes: e.target.value
|
|
817
828
|
}),
|
|
818
829
|
placeholder: "e.g. read:contacts, write:messages",
|
|
819
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)]"
|
|
820
831
|
}),
|
|
821
|
-
/* @__PURE__ */
|
|
832
|
+
/* @__PURE__ */ g("p", {
|
|
822
833
|
className: "text-xs text-text-tertiary",
|
|
823
834
|
children: "Comma-separated. List every permission this version needs — users will be prompted to accept any new or changed scopes on update."
|
|
824
835
|
})
|
|
825
836
|
]
|
|
826
837
|
}),
|
|
827
|
-
/* @__PURE__ */
|
|
828
|
-
label:
|
|
829
|
-
value:
|
|
830
|
-
onChange: (e) =>
|
|
831
|
-
...
|
|
838
|
+
/* @__PURE__ */ g(o, {
|
|
839
|
+
label: y("devportal.releaseNotes", "Release Notes"),
|
|
840
|
+
value: j.releaseNotes,
|
|
841
|
+
onChange: (e) => M({
|
|
842
|
+
...j,
|
|
832
843
|
releaseNotes: e
|
|
833
844
|
}),
|
|
834
|
-
placeholder:
|
|
845
|
+
placeholder: y("devportal.releaseNotesPlaceholder", "What changed in this release?"),
|
|
835
846
|
rows: 3
|
|
836
847
|
}),
|
|
837
|
-
/* @__PURE__ */
|
|
838
|
-
label:
|
|
839
|
-
value:
|
|
840
|
-
onChange: (e) =>
|
|
841
|
-
...
|
|
848
|
+
/* @__PURE__ */ g(o, {
|
|
849
|
+
label: y("devportal.changelog", "Changelog"),
|
|
850
|
+
value: j.changelog,
|
|
851
|
+
onChange: (e) => M({
|
|
852
|
+
...j,
|
|
842
853
|
changelog: e
|
|
843
854
|
}),
|
|
844
|
-
placeholder:
|
|
855
|
+
placeholder: y("devportal.changelogPlaceholder", "Detailed changelog for this version..."),
|
|
845
856
|
rows: 3
|
|
846
857
|
})
|
|
847
858
|
]
|
|
848
859
|
})
|
|
849
860
|
}),
|
|
850
|
-
z && /* @__PURE__ */
|
|
861
|
+
z && /* @__PURE__ */ g(a, {
|
|
851
862
|
open: !!z,
|
|
852
863
|
onOpenChange: (e) => {
|
|
853
|
-
e || (
|
|
864
|
+
e || (Ze(null), $e(""));
|
|
854
865
|
},
|
|
855
|
-
onConfirm:
|
|
866
|
+
onConfirm: Nt,
|
|
856
867
|
title: `Reject version ${z.version}`,
|
|
857
868
|
confirmLabel: "Reject Version",
|
|
858
|
-
cancelLabel:
|
|
869
|
+
cancelLabel: y("devportal.cancel", "Cancel"),
|
|
859
870
|
variant: "danger",
|
|
860
|
-
children: /* @__PURE__ */
|
|
871
|
+
children: /* @__PURE__ */ _("div", {
|
|
861
872
|
className: "space-y-3",
|
|
862
|
-
children: [/* @__PURE__ */
|
|
873
|
+
children: [/* @__PURE__ */ g("p", {
|
|
863
874
|
className: "text-sm text-text-secondary",
|
|
864
875
|
children: "The developer will be notified and can fix and resubmit. Please provide a clear reason."
|
|
865
|
-
}), /* @__PURE__ */
|
|
876
|
+
}), /* @__PURE__ */ _("div", {
|
|
866
877
|
className: "space-y-1",
|
|
867
|
-
children: [/* @__PURE__ */
|
|
878
|
+
children: [/* @__PURE__ */ _("label", {
|
|
868
879
|
className: "text-sm font-medium",
|
|
869
880
|
children: [
|
|
870
881
|
"Rejection reason",
|
|
871
882
|
" ",
|
|
872
|
-
/* @__PURE__ */
|
|
883
|
+
/* @__PURE__ */ g("span", {
|
|
873
884
|
className: "text-status-error-text",
|
|
874
885
|
children: "*"
|
|
875
886
|
})
|
|
876
887
|
]
|
|
877
|
-
}), /* @__PURE__ */
|
|
888
|
+
}), /* @__PURE__ */ g("textarea", {
|
|
878
889
|
rows: 3,
|
|
879
|
-
value:
|
|
880
|
-
onChange: (e) =>
|
|
890
|
+
value: Qe,
|
|
891
|
+
onChange: (e) => $e(e.target.value),
|
|
881
892
|
placeholder: "e.g. Manifest contains disallowed network calls to external domains...",
|
|
882
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)]"
|
|
883
894
|
})]
|
|
884
895
|
})]
|
|
885
896
|
})
|
|
886
897
|
}),
|
|
887
|
-
|
|
888
|
-
open: !!
|
|
898
|
+
k && /* @__PURE__ */ g(a, {
|
|
899
|
+
open: !!k,
|
|
889
900
|
onOpenChange: (e) => {
|
|
890
|
-
e || (
|
|
901
|
+
e || (A(null), D(null), I(null));
|
|
891
902
|
},
|
|
892
|
-
onConfirm:
|
|
893
|
-
title: `Edit Version ${
|
|
894
|
-
confirmLabel:
|
|
895
|
-
children: /* @__PURE__ */
|
|
903
|
+
onConfirm: kt,
|
|
904
|
+
title: `Edit Version ${k.version}`,
|
|
905
|
+
confirmLabel: ht ? "Saving…" : "Save Changes",
|
|
906
|
+
children: /* @__PURE__ */ _("div", {
|
|
896
907
|
className: "space-y-4",
|
|
897
908
|
children: [
|
|
898
|
-
|
|
909
|
+
Xe && /* @__PURE__ */ _("div", {
|
|
899
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",
|
|
900
|
-
children: [/* @__PURE__ */
|
|
911
|
+
children: [/* @__PURE__ */ g(f, {
|
|
901
912
|
size: 14,
|
|
902
913
|
className: "flex-shrink-0"
|
|
903
|
-
}),
|
|
914
|
+
}), Xe]
|
|
904
915
|
}),
|
|
905
|
-
/* @__PURE__ */
|
|
916
|
+
/* @__PURE__ */ g("div", {
|
|
906
917
|
className: "rounded-lg border border-status-info-bg bg-status-info-bg-subtle px-3 py-2 text-xs text-status-info-text",
|
|
907
918
|
children: "You can fix the zip, manifest, or release notes before submitting for review. Once submitted for review these fields are locked."
|
|
908
919
|
}),
|
|
909
|
-
U && /* @__PURE__ */
|
|
920
|
+
U && /* @__PURE__ */ _("div", {
|
|
910
921
|
className: "space-y-1",
|
|
911
922
|
children: [
|
|
912
|
-
/* @__PURE__ */
|
|
923
|
+
/* @__PURE__ */ g("label", {
|
|
913
924
|
className: "text-sm font-medium",
|
|
914
925
|
children: "Package (.zip)"
|
|
915
926
|
}),
|
|
916
|
-
/* @__PURE__ */
|
|
927
|
+
/* @__PURE__ */ _("div", {
|
|
917
928
|
className: "flex gap-2 items-center",
|
|
918
929
|
children: [
|
|
919
|
-
/* @__PURE__ */
|
|
920
|
-
ref:
|
|
930
|
+
/* @__PURE__ */ g("input", {
|
|
931
|
+
ref: Ve,
|
|
921
932
|
type: "file",
|
|
922
933
|
accept: ".zip",
|
|
923
934
|
className: "hidden",
|
|
924
|
-
onChange:
|
|
935
|
+
onChange: Dt
|
|
925
936
|
}),
|
|
926
|
-
/* @__PURE__ */
|
|
937
|
+
/* @__PURE__ */ g("button", {
|
|
927
938
|
type: "button",
|
|
928
|
-
disabled:
|
|
929
|
-
onClick: () =>
|
|
939
|
+
disabled: T,
|
|
940
|
+
onClick: () => Ve.current?.click(),
|
|
930
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",
|
|
931
|
-
children:
|
|
932
|
-
/* @__PURE__ */
|
|
942
|
+
children: T ? /* @__PURE__ */ _(h, { children: [
|
|
943
|
+
/* @__PURE__ */ g(Ce, {
|
|
933
944
|
size: 14,
|
|
934
945
|
className: "animate-spin"
|
|
935
946
|
}),
|
|
936
947
|
" ",
|
|
937
948
|
"Uploading… ",
|
|
938
|
-
|
|
949
|
+
Re,
|
|
939
950
|
"%"
|
|
940
|
-
] }) : /* @__PURE__ */
|
|
951
|
+
] }) : /* @__PURE__ */ _(h, { children: [/* @__PURE__ */ g(m, { size: 14 }), k.newPackageUrl ? "Replace zip again" : k.hasExistingZip ? "Replace zip" : "Upload zip"] })
|
|
941
952
|
}),
|
|
942
|
-
|
|
953
|
+
k.newPackageUrl && !T && /* @__PURE__ */ g("span", {
|
|
943
954
|
className: "text-xs text-status-success-text",
|
|
944
955
|
children: "✓ New zip ready"
|
|
945
956
|
}),
|
|
946
|
-
!
|
|
957
|
+
!k.newPackageUrl && k.hasExistingZip && /* @__PURE__ */ g("span", {
|
|
947
958
|
className: "text-xs text-text-secondary",
|
|
948
959
|
children: "Current zip kept"
|
|
949
960
|
})
|
|
950
961
|
]
|
|
951
962
|
}),
|
|
952
|
-
|
|
963
|
+
E && /* @__PURE__ */ g("p", {
|
|
953
964
|
className: "text-xs text-status-error-text",
|
|
954
|
-
children:
|
|
965
|
+
children: E
|
|
955
966
|
})
|
|
956
967
|
]
|
|
957
968
|
}),
|
|
958
|
-
U && /* @__PURE__ */
|
|
969
|
+
U && /* @__PURE__ */ _("div", {
|
|
959
970
|
className: "space-y-2",
|
|
960
|
-
children: [/* @__PURE__ */
|
|
971
|
+
children: [/* @__PURE__ */ _("div", {
|
|
961
972
|
className: "flex items-center justify-between gap-2 flex-wrap",
|
|
962
|
-
children: [/* @__PURE__ */
|
|
973
|
+
children: [/* @__PURE__ */ _("label", {
|
|
963
974
|
className: "text-sm font-medium",
|
|
964
975
|
children: [
|
|
965
976
|
"manifest.json",
|
|
966
977
|
" ",
|
|
967
|
-
/* @__PURE__ */
|
|
978
|
+
/* @__PURE__ */ g("span", {
|
|
968
979
|
className: "text-xs font-normal text-text-secondary",
|
|
969
980
|
children: "(edit below or upload a new file)"
|
|
970
981
|
})
|
|
971
982
|
]
|
|
972
|
-
}), /* @__PURE__ */
|
|
983
|
+
}), /* @__PURE__ */ _("div", {
|
|
973
984
|
className: "flex items-center gap-2",
|
|
974
985
|
children: [
|
|
975
|
-
|
|
986
|
+
Ge && /* @__PURE__ */ _("span", {
|
|
976
987
|
className: "text-xs text-status-success-text",
|
|
977
|
-
children: ["✓ ",
|
|
988
|
+
children: ["✓ ", Ge]
|
|
978
989
|
}),
|
|
979
|
-
/* @__PURE__ */
|
|
980
|
-
ref:
|
|
990
|
+
/* @__PURE__ */ g("input", {
|
|
991
|
+
ref: He,
|
|
981
992
|
type: "file",
|
|
982
993
|
accept: ".json,application/json",
|
|
983
994
|
className: "hidden",
|
|
984
|
-
onChange:
|
|
995
|
+
onChange: Ot
|
|
985
996
|
}),
|
|
986
|
-
/* @__PURE__ */
|
|
997
|
+
/* @__PURE__ */ _("button", {
|
|
987
998
|
type: "button",
|
|
988
|
-
onClick: () =>
|
|
999
|
+
onClick: () => He.current?.click(),
|
|
989
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",
|
|
990
|
-
children: [/* @__PURE__ */
|
|
1001
|
+
children: [/* @__PURE__ */ g(m, { size: 12 }), " Upload manifest.json"]
|
|
991
1002
|
})
|
|
992
1003
|
]
|
|
993
1004
|
})]
|
|
994
|
-
}), /* @__PURE__ */
|
|
1005
|
+
}), /* @__PURE__ */ g("textarea", {
|
|
995
1006
|
rows: 5,
|
|
996
1007
|
placeholder: "{\n \"manifestVersion\": \"1.0\",\n \"itemType\": \"node\",\n \"identity\": { \"version\": \"1.0.0\", \"displayName\": \"My Node\" }\n}",
|
|
997
|
-
value:
|
|
1008
|
+
value: k.manifestJson,
|
|
998
1009
|
onChange: (e) => {
|
|
999
|
-
|
|
1010
|
+
D(null), A((t) => t && {
|
|
1000
1011
|
...t,
|
|
1001
1012
|
manifestJson: e.target.value
|
|
1002
1013
|
});
|
|
@@ -1004,86 +1015,86 @@ var ke = () => {
|
|
|
1004
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)]"
|
|
1005
1016
|
})]
|
|
1006
1017
|
}),
|
|
1007
|
-
W && /* @__PURE__ */
|
|
1018
|
+
W && /* @__PURE__ */ _("div", {
|
|
1008
1019
|
className: "space-y-1",
|
|
1009
|
-
children: [/* @__PURE__ */
|
|
1020
|
+
children: [/* @__PURE__ */ _("label", {
|
|
1010
1021
|
className: "text-sm font-medium",
|
|
1011
1022
|
children: [
|
|
1012
1023
|
H ? "Workflow Definition (JSON)" : "Manifest (JSON)",
|
|
1013
1024
|
" ",
|
|
1014
|
-
/* @__PURE__ */
|
|
1025
|
+
/* @__PURE__ */ g("span", {
|
|
1015
1026
|
className: "text-xs font-normal text-text-secondary",
|
|
1016
1027
|
children: "(leave empty to keep existing)"
|
|
1017
1028
|
})
|
|
1018
1029
|
]
|
|
1019
|
-
}), /* @__PURE__ */
|
|
1030
|
+
}), /* @__PURE__ */ g("textarea", {
|
|
1020
1031
|
rows: 10,
|
|
1021
1032
|
placeholder: H ? "{\n \"nodes\": [],\n \"edges\": []\n}" : "{\n \"manifestVersion\": \"1.0\",\n \"identity\": { \"name\": \"My Item\", \"version\": \"1.0.0\" }\n}",
|
|
1022
|
-
value:
|
|
1023
|
-
onChange: (e) =>
|
|
1033
|
+
value: k.manifestJson,
|
|
1034
|
+
onChange: (e) => A((t) => t && {
|
|
1024
1035
|
...t,
|
|
1025
1036
|
manifestJson: e.target.value
|
|
1026
1037
|
}),
|
|
1027
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)]"
|
|
1028
1039
|
})]
|
|
1029
1040
|
}),
|
|
1030
|
-
/* @__PURE__ */
|
|
1031
|
-
label:
|
|
1032
|
-
value:
|
|
1033
|
-
onChange: (e) =>
|
|
1041
|
+
/* @__PURE__ */ g(o, {
|
|
1042
|
+
label: y("devportal.releaseNotes", "Release Notes"),
|
|
1043
|
+
value: k.releaseNotes,
|
|
1044
|
+
onChange: (e) => A((t) => t && {
|
|
1034
1045
|
...t,
|
|
1035
1046
|
releaseNotes: e
|
|
1036
1047
|
}),
|
|
1037
|
-
placeholder:
|
|
1048
|
+
placeholder: y("devportal.releaseNotesPlaceholder", "What changed in this release?"),
|
|
1038
1049
|
rows: 3
|
|
1039
1050
|
}),
|
|
1040
|
-
/* @__PURE__ */
|
|
1041
|
-
label:
|
|
1042
|
-
value:
|
|
1043
|
-
onChange: (e) =>
|
|
1051
|
+
/* @__PURE__ */ g(o, {
|
|
1052
|
+
label: y("devportal.changelog", "Changelog"),
|
|
1053
|
+
value: k.changelog,
|
|
1054
|
+
onChange: (e) => A((t) => t && {
|
|
1044
1055
|
...t,
|
|
1045
1056
|
changelog: e
|
|
1046
1057
|
}),
|
|
1047
|
-
placeholder:
|
|
1058
|
+
placeholder: y("devportal.changelogPlaceholder", "Detailed changelog for this version..."),
|
|
1048
1059
|
rows: 3
|
|
1049
1060
|
})
|
|
1050
1061
|
]
|
|
1051
1062
|
})
|
|
1052
1063
|
}),
|
|
1053
|
-
/* @__PURE__ */
|
|
1054
|
-
open:
|
|
1064
|
+
/* @__PURE__ */ g(a, {
|
|
1065
|
+
open: tt === "publish",
|
|
1055
1066
|
onOpenChange: (e) => {
|
|
1056
1067
|
e || B(null);
|
|
1057
1068
|
},
|
|
1058
|
-
onConfirm:
|
|
1059
|
-
title:
|
|
1069
|
+
onConfirm: Lt,
|
|
1070
|
+
title: y("devportal.submitSelectedVersions", "Submit selected versions for review"),
|
|
1060
1071
|
description: `Submit ${X.length} selected version${X.length === 1 ? "" : "s"} for platform review?`,
|
|
1061
|
-
confirmLabel:
|
|
1062
|
-
cancelLabel:
|
|
1072
|
+
confirmLabel: y("devportal.submitForReview", "Submit for Review"),
|
|
1073
|
+
cancelLabel: y("devportal.cancel", "Cancel"),
|
|
1063
1074
|
variant: "success"
|
|
1064
1075
|
}),
|
|
1065
|
-
/* @__PURE__ */
|
|
1066
|
-
open:
|
|
1076
|
+
/* @__PURE__ */ g(a, {
|
|
1077
|
+
open: nt !== null,
|
|
1067
1078
|
onOpenChange: (e) => {
|
|
1068
|
-
e ||
|
|
1079
|
+
e || rt(null);
|
|
1069
1080
|
},
|
|
1070
|
-
onConfirm:
|
|
1071
|
-
title:
|
|
1072
|
-
description: `${
|
|
1073
|
-
confirmLabel:
|
|
1074
|
-
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"),
|
|
1075
1086
|
variant: "success"
|
|
1076
1087
|
}),
|
|
1077
|
-
/* @__PURE__ */
|
|
1078
|
-
open:
|
|
1088
|
+
/* @__PURE__ */ g(a, {
|
|
1089
|
+
open: tt === "deprecate",
|
|
1079
1090
|
onOpenChange: (e) => {
|
|
1080
1091
|
e || B(null);
|
|
1081
1092
|
},
|
|
1082
|
-
onConfirm:
|
|
1083
|
-
title:
|
|
1084
|
-
description: `${
|
|
1085
|
-
confirmLabel:
|
|
1086
|
-
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"),
|
|
1087
1098
|
variant: "warning"
|
|
1088
1099
|
})
|
|
1089
1100
|
]
|
|
@@ -1091,6 +1102,6 @@ var ke = () => {
|
|
|
1091
1102
|
});
|
|
1092
1103
|
};
|
|
1093
1104
|
//#endregion
|
|
1094
|
-
export {
|
|
1105
|
+
export { je as ApplicationVersionsPage };
|
|
1095
1106
|
|
|
1096
1107
|
//# sourceMappingURL=ApplicationVersionsPage.js.map
|