@burdenoff/microfe-devportal 2026.705.2 → 2026.705.4
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.
|
@@ -18,7 +18,7 @@ import { useDevportalPermission as oe } from "../hooks/usePermission.js";
|
|
|
18
18
|
import { usePackageUpload as k } from "../hooks/usePackageUpload.js";
|
|
19
19
|
import { useCallback as A, useEffect as se, useMemo as j, useRef as M, useState as N } from "react";
|
|
20
20
|
import { useI18n as P } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
21
|
-
import { AlertCircle as ce, AppWindow as le, BarChart3 as
|
|
21
|
+
import { AlertCircle as ce, AppWindow as le, BarChart3 as ue, Check as F, CheckCircle as de, ChevronRight as fe, CircleDollarSign as I, Clock as pe, Edit as me, ExternalLink as L, FlaskConical as he, Gift as ge, Info as _e, Key as R, Loader2 as z, Lock as ve, MoreHorizontal as ye, Package as be, Plus as B, Power as xe, RefreshCw as Se, SendHorizontal as Ce, Shield as V, Store as we, TrendingUp as Te, Upload as H, Users as Ee, Wallet as De, Webhook as Oe, X as U, XCircle as ke } from "lucide-react";
|
|
22
22
|
import { useParams as Ae } from "react-router-dom";
|
|
23
23
|
import { Fragment as W, jsx as G, jsxs as K } from "react/jsx-runtime";
|
|
24
24
|
import { CTAOverflowMenu as je, EmphasisPanel as Me, GlassCard as Ne } from "@burdenoff/fe-libs/ui";
|
|
@@ -147,52 +147,52 @@ var Le = [
|
|
|
147
147
|
{
|
|
148
148
|
id: "analytics",
|
|
149
149
|
label: "Analytics",
|
|
150
|
-
icon:
|
|
150
|
+
icon: ue
|
|
151
151
|
},
|
|
152
152
|
{
|
|
153
153
|
id: "store-listing",
|
|
154
154
|
label: "Store Listing",
|
|
155
|
-
icon:
|
|
155
|
+
icon: we
|
|
156
156
|
},
|
|
157
157
|
{
|
|
158
158
|
id: "versions",
|
|
159
159
|
label: "Versions",
|
|
160
|
-
icon:
|
|
160
|
+
icon: be
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
id: "pricing",
|
|
164
164
|
label: "Pricing",
|
|
165
|
-
icon:
|
|
165
|
+
icon: I
|
|
166
166
|
},
|
|
167
167
|
{
|
|
168
168
|
id: "permissions",
|
|
169
169
|
label: "Permissions",
|
|
170
|
-
icon:
|
|
170
|
+
icon: V
|
|
171
171
|
},
|
|
172
172
|
{
|
|
173
173
|
id: "webhooks",
|
|
174
174
|
label: "Webhooks",
|
|
175
|
-
icon:
|
|
175
|
+
icon: Oe
|
|
176
176
|
},
|
|
177
177
|
{
|
|
178
178
|
id: "delegations",
|
|
179
179
|
label: "Delegations",
|
|
180
|
-
icon:
|
|
180
|
+
icon: Ee
|
|
181
181
|
},
|
|
182
182
|
{
|
|
183
183
|
id: "playground",
|
|
184
184
|
label: "API Playground",
|
|
185
|
-
icon:
|
|
185
|
+
icon: L
|
|
186
186
|
},
|
|
187
187
|
{
|
|
188
188
|
id: "oauth",
|
|
189
189
|
label: "OAuth",
|
|
190
|
-
icon:
|
|
190
|
+
icon: ve
|
|
191
191
|
},
|
|
192
192
|
{
|
|
193
193
|
id: "api-keys",
|
|
194
194
|
label: "API Keys",
|
|
195
|
-
icon:
|
|
195
|
+
icon: R
|
|
196
196
|
}
|
|
197
197
|
], Re = {
|
|
198
198
|
ACTIVE: "bg-status-success-bg-subtle text-status-success-text",
|
|
@@ -200,7 +200,7 @@ var Le = [
|
|
|
200
200
|
EXPIRED: "bg-bg-sunken text-text-secondary"
|
|
201
201
|
}, ze = ({ message: e = "Loading..." }) => /* @__PURE__ */ K("div", {
|
|
202
202
|
className: "flex items-center justify-center gap-3 py-12",
|
|
203
|
-
children: [/* @__PURE__ */ G(
|
|
203
|
+
children: [/* @__PURE__ */ G(z, {
|
|
204
204
|
size: 20,
|
|
205
205
|
className: "animate-spin text-text-secondary"
|
|
206
206
|
}), /* @__PURE__ */ G("p", {
|
|
@@ -220,73 +220,73 @@ var Le = [
|
|
|
220
220
|
let { navigate: i, basePath: o, workspaceId: c } = e(), { t: u } = P(), p = (e, t) => {
|
|
221
221
|
let n = u(e);
|
|
222
222
|
return n === e ? t : n;
|
|
223
|
-
}, { allowed: _ } = oe(ae.APP_UPDATE), { allowed: y } = oe(ae.APP_DELETE), { appId: w } = Ae(), [E, D] = N("overview"), [O, te] = N(!1), [ne, k] = N(!1), [se, j] = N(null), [M,
|
|
223
|
+
}, { allowed: _ } = oe(ae.APP_UPDATE), { allowed: y } = oe(ae.APP_DELETE), { appId: w } = Ae(), [E, D] = N("overview"), [O, te] = N(!1), [ne, k] = N(!1), [se, j] = N(null), [M, ue] = N(!1), { data: I, loading: L, error: ge, refetch: _e } = s({
|
|
224
224
|
variables: { id: w },
|
|
225
225
|
skip: !w
|
|
226
|
-
}), [
|
|
226
|
+
}), [R, { loading: ve }] = m(), [ye, { loading: be }] = a(), [B, { loading: V }] = h(), [Te, { loading: H }] = f(), [Ee, { loading: De }] = g(), { data: Oe, refetch: U } = d({
|
|
227
227
|
variables: {
|
|
228
228
|
applicationId: w,
|
|
229
229
|
workspaceId: c ?? void 0
|
|
230
230
|
},
|
|
231
231
|
skip: !c || !w,
|
|
232
232
|
fetchPolicy: "cache-and-network"
|
|
233
|
-
}), Me =
|
|
234
|
-
variables: { id:
|
|
235
|
-
skip: !
|
|
233
|
+
}), Me = Oe?.appInstallations?.edges?.[0]?.node ?? null, { data: Ne } = l({
|
|
234
|
+
variables: { id: I?.application?.developerOrganizationId ?? "" },
|
|
235
|
+
skip: !I?.application?.developerOrganizationId,
|
|
236
236
|
fetchPolicy: "cache-first"
|
|
237
237
|
}), q = A((e) => {
|
|
238
238
|
i?.(`${o}${e}`);
|
|
239
239
|
}, [i, o]), Fe = A(async () => {
|
|
240
|
-
let e =
|
|
240
|
+
let e = I?.application?.appId;
|
|
241
241
|
if (e) try {
|
|
242
|
-
let t = (await
|
|
242
|
+
let t = (await R({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
|
|
243
243
|
t && j(t), te(!1);
|
|
244
244
|
} catch {}
|
|
245
|
-
}, [
|
|
245
|
+
}, [I?.application?.appId, R]), Ie = A(async () => {
|
|
246
246
|
if (w) try {
|
|
247
|
-
await
|
|
247
|
+
await ye({ variables: { id: w } }), k(!1), q("/apps");
|
|
248
248
|
} catch {}
|
|
249
249
|
}, [
|
|
250
250
|
w,
|
|
251
|
-
|
|
251
|
+
ye,
|
|
252
252
|
q
|
|
253
253
|
]), Re = A(async () => {
|
|
254
254
|
if (!(!w || !c)) try {
|
|
255
|
-
await
|
|
255
|
+
await Te({ variables: { input: {
|
|
256
256
|
applicationId: w,
|
|
257
257
|
scope: "WORKSPACE",
|
|
258
258
|
workspaceId: c,
|
|
259
259
|
autoUpdate: !1
|
|
260
|
-
} } }),
|
|
260
|
+
} } }), U(), T("success");
|
|
261
261
|
} catch (e) {
|
|
262
262
|
console.error("[DevPortal] Test in Workspace failed:", e), T("error");
|
|
263
263
|
}
|
|
264
264
|
}, [
|
|
265
265
|
w,
|
|
266
266
|
c,
|
|
267
|
-
|
|
268
|
-
|
|
267
|
+
Te,
|
|
268
|
+
U
|
|
269
269
|
]), ze = A(async (e) => {
|
|
270
270
|
try {
|
|
271
|
-
await
|
|
271
|
+
await Ee({ variables: { id: e } }), U(), T("success");
|
|
272
272
|
} catch {
|
|
273
273
|
T("error");
|
|
274
274
|
}
|
|
275
|
-
}, [
|
|
275
|
+
}, [Ee, U]), Be = A(async () => {
|
|
276
276
|
if (w) try {
|
|
277
|
-
await
|
|
277
|
+
await B({ variables: { id: w } }), T("success");
|
|
278
278
|
} catch (e) {
|
|
279
279
|
console.error("[DevPortal] Submit failed:", e), T("error");
|
|
280
280
|
} finally {
|
|
281
|
-
|
|
281
|
+
_e();
|
|
282
282
|
}
|
|
283
283
|
}, [
|
|
284
284
|
w,
|
|
285
|
-
|
|
286
|
-
|
|
285
|
+
B,
|
|
286
|
+
_e
|
|
287
287
|
]);
|
|
288
|
-
if (
|
|
289
|
-
if (
|
|
288
|
+
if (L && !I) return /* @__PURE__ */ G(n, { message: p("devportal.loadingApplication", "Loading application...") });
|
|
289
|
+
if (ge) return /* @__PURE__ */ G(v, {
|
|
290
290
|
title: p("devportal.error", "Error"),
|
|
291
291
|
backLink: `${o}/apps`,
|
|
292
292
|
backLabel: p("devportal.backToApplications", "Back to Applications"),
|
|
@@ -303,12 +303,12 @@ var Le = [
|
|
|
303
303
|
}),
|
|
304
304
|
/* @__PURE__ */ G("p", {
|
|
305
305
|
className: "text-sm text-text-secondary",
|
|
306
|
-
children:
|
|
306
|
+
children: ge.message
|
|
307
307
|
})
|
|
308
308
|
]
|
|
309
309
|
})
|
|
310
310
|
});
|
|
311
|
-
let J = Pe(
|
|
311
|
+
let J = Pe(I?.application);
|
|
312
312
|
if (!J) return /* @__PURE__ */ G(v, {
|
|
313
313
|
title: p("devportal.notFound", "Not Found"),
|
|
314
314
|
backLink: `${o}/apps`,
|
|
@@ -320,27 +320,27 @@ var Le = [
|
|
|
320
320
|
description: p("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
|
|
321
321
|
})
|
|
322
322
|
});
|
|
323
|
-
let Y = J.appType === "NODE" || J.appType === "WORKFLOW", X = J.appType === "API_INTEGRATION", Ue =
|
|
323
|
+
let Y = J.appType === "NODE" || J.appType === "WORKFLOW", X = J.appType === "API_INTEGRATION", Ue = I?.application?.versions?.totalCount ?? 0, Xe = J.pricingType === "PAID", Ze = Ne?.developerOrganization, Qe = Ze?.platformFeeRate ?? .3, $e = !!Ze?.billingAccountId, tt = J.pricingDetails ?? {}, Z = J.pricingType === "FREE" || J.pricingType === "PAID" && typeof tt.price == "number" && tt.price > 0, Q = !!J.description?.trim() && !!J.category && !!J.iconUrl && (J.visibility === "PUBLIC" || J.visibility === "UNLISTED") && (!Y && !X || Ue > 0) && (!Xe || $e) && Z, nt = Q && J.status !== "PUBLISHED" && J.status !== "SUBMITTED", rt = [
|
|
324
324
|
...Y ? [] : [{
|
|
325
325
|
label: p("devportal.rotateSecret", "Rotate Secret"),
|
|
326
|
-
icon: /* @__PURE__ */ G(
|
|
326
|
+
icon: /* @__PURE__ */ G(Se, { size: 16 }),
|
|
327
327
|
disabled: !J.appId,
|
|
328
328
|
onSelect: () => te(!0)
|
|
329
329
|
}],
|
|
330
330
|
...Y ? [] : Me ? [{
|
|
331
331
|
label: p("devportal.uninstallFromWorkspace", "Uninstall from Workspace"),
|
|
332
332
|
icon: /* @__PURE__ */ G(ke, { size: 16 }),
|
|
333
|
-
disabled:
|
|
333
|
+
disabled: De || !c,
|
|
334
334
|
onSelect: () => void ze(Me.id)
|
|
335
335
|
}] : [{
|
|
336
336
|
label: p("devportal.testInWorkspace", "Test in Workspace"),
|
|
337
|
-
icon: /* @__PURE__ */ G(
|
|
338
|
-
disabled:
|
|
337
|
+
icon: /* @__PURE__ */ G(he, { size: 16 }),
|
|
338
|
+
disabled: H || !c,
|
|
339
339
|
onSelect: () => void Re()
|
|
340
340
|
}],
|
|
341
341
|
{
|
|
342
342
|
label: p("devportal.deactivate", "Deactivate"),
|
|
343
|
-
icon: /* @__PURE__ */ G(
|
|
343
|
+
icon: /* @__PURE__ */ G(xe, { size: 16 }),
|
|
344
344
|
intent: "destructive",
|
|
345
345
|
disabled: !y,
|
|
346
346
|
onSelect: () => k(!0)
|
|
@@ -356,11 +356,11 @@ var Le = [
|
|
|
356
356
|
className: "flex items-center gap-2",
|
|
357
357
|
children: [J.status === "SUBMITTED" ? /* @__PURE__ */ K("div", {
|
|
358
358
|
className: "flex items-center gap-1.5 rounded-full border border-status-warning-bg bg-status-warning-bg-subtle px-3 py-1.5 text-xs font-medium text-status-warning-text",
|
|
359
|
-
children: [/* @__PURE__ */ G(
|
|
359
|
+
children: [/* @__PURE__ */ G(pe, { size: 13 }), p("devportal.underReview", "Under Review")]
|
|
360
360
|
}) : J.status === "PUBLISHED" ? null : /* @__PURE__ */ G("button", {
|
|
361
361
|
type: "button",
|
|
362
362
|
onClick: () => void Be(),
|
|
363
|
-
disabled: !nt ||
|
|
363
|
+
disabled: !nt || V,
|
|
364
364
|
title: Q ? void 0 : [
|
|
365
365
|
!J.description?.trim() && "Add full description",
|
|
366
366
|
!J.category && "Select a category",
|
|
@@ -370,15 +370,15 @@ var Le = [
|
|
|
370
370
|
!Z && "Set pricing (choose Free or Paid in the Pricing tab)",
|
|
371
371
|
Xe && !$e && "Link a billing account to receive payments"
|
|
372
372
|
].filter(Boolean).join(" · "),
|
|
373
|
-
className: t("inline-flex items-center gap-2 rounded-md px-5 py-2 text-sm font-medium whitespace-nowrap transition-colors", nt && !
|
|
374
|
-
children:
|
|
373
|
+
className: t("inline-flex items-center gap-2 rounded-md px-5 py-2 text-sm font-medium whitespace-nowrap transition-colors", nt && !V ? "bg-action-primary-bg text-action-primary-text hover:bg-action-primary-bg/90 cursor-pointer" : "cursor-not-allowed bg-bg-muted text-text-tertiary ring-1 ring-border-subtle"),
|
|
374
|
+
children: V ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(z, {
|
|
375
375
|
size: 15,
|
|
376
376
|
className: "animate-spin"
|
|
377
|
-
}), p("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(
|
|
377
|
+
}), p("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(Ce, { size: 15 }), p("devportal.submitForReview", "Submit for Review")] })
|
|
378
378
|
}), /* @__PURE__ */ G(je, {
|
|
379
379
|
primary: {
|
|
380
380
|
label: p("devportal.editApp", "Edit App"),
|
|
381
|
-
icon: /* @__PURE__ */ G(
|
|
381
|
+
icon: /* @__PURE__ */ G(me, { size: 16 }),
|
|
382
382
|
disabled: !_,
|
|
383
383
|
onSelect: () => q(`/apps/${J.id}/edit`)
|
|
384
384
|
},
|
|
@@ -413,7 +413,7 @@ var Le = [
|
|
|
413
413
|
}),
|
|
414
414
|
J.status === "SUBMITTED" && /* @__PURE__ */ K("div", {
|
|
415
415
|
className: "flex items-start gap-3 rounded-lg border border-border-subtle bg-status-warning-bg-subtle p-4",
|
|
416
|
-
children: [/* @__PURE__ */ G(
|
|
416
|
+
children: [/* @__PURE__ */ G(pe, {
|
|
417
417
|
size: 18,
|
|
418
418
|
className: "text-status-warning-text mt-0.5 flex-shrink-0"
|
|
419
419
|
}), /* @__PURE__ */ K("div", {
|
|
@@ -461,7 +461,7 @@ var Le = [
|
|
|
461
461
|
}),
|
|
462
462
|
J.status === "PUBLISHED" && /* @__PURE__ */ K("div", {
|
|
463
463
|
className: "flex items-start gap-3 rounded-lg border border-status-success-bg bg-status-success-bg-subtle p-4",
|
|
464
|
-
children: [/* @__PURE__ */ G(
|
|
464
|
+
children: [/* @__PURE__ */ G(de, {
|
|
465
465
|
size: 18,
|
|
466
466
|
className: "text-status-success-text mt-0.5 flex-shrink-0"
|
|
467
467
|
}), /* @__PURE__ */ K("div", {
|
|
@@ -532,7 +532,7 @@ var Le = [
|
|
|
532
532
|
className: "flex items-center gap-3",
|
|
533
533
|
children: [/* @__PURE__ */ G("div", {
|
|
534
534
|
className: "flex h-8 w-8 items-center justify-center rounded-full bg-action-primary-bg/10",
|
|
535
|
-
children: /* @__PURE__ */ G(
|
|
535
|
+
children: /* @__PURE__ */ G(we, {
|
|
536
536
|
size: 16,
|
|
537
537
|
className: "text-primary"
|
|
538
538
|
})
|
|
@@ -561,7 +561,7 @@ var Le = [
|
|
|
561
561
|
children: [
|
|
562
562
|
/* @__PURE__ */ G("div", {
|
|
563
563
|
className: t("flex h-7 w-7 flex-shrink-0 items-center justify-center rounded-full text-xs font-bold", e.done ? "bg-status-success-bg text-status-success-text" : "border-2 border-border-subtle bg-bg-sunken text-text-secondary"),
|
|
564
|
-
children: e.done ? /* @__PURE__ */ G(
|
|
564
|
+
children: e.done ? /* @__PURE__ */ G(F, { size: 13 }) : n + 1
|
|
565
565
|
}),
|
|
566
566
|
/* @__PURE__ */ K("div", {
|
|
567
567
|
className: "flex-1 min-w-0",
|
|
@@ -573,7 +573,7 @@ var Le = [
|
|
|
573
573
|
children: e.hint
|
|
574
574
|
})]
|
|
575
575
|
}),
|
|
576
|
-
e.onClick && !e.done && /* @__PURE__ */ G(
|
|
576
|
+
e.onClick && !e.done && /* @__PURE__ */ G(fe, {
|
|
577
577
|
size: 16,
|
|
578
578
|
className: "flex-shrink-0 text-text-secondary"
|
|
579
579
|
})
|
|
@@ -610,9 +610,11 @@ var Le = [
|
|
|
610
610
|
tabIndex: 0,
|
|
611
611
|
children: [
|
|
612
612
|
E === "overview" && /* @__PURE__ */ G(Ye, { app: J }),
|
|
613
|
-
E === "permissions" && /* @__PURE__ */ G(
|
|
613
|
+
E === "permissions" && /* @__PURE__ */ G(mt, {
|
|
614
614
|
app: J,
|
|
615
|
-
versionScopes:
|
|
615
|
+
versionScopes: I?.application?.versions?.edges?.[0]?.node?.requiredScopes ?? [],
|
|
616
|
+
locked: J.status === "PUBLISHED" || J.status === "APPROVED" || J.status === "ACTIVE",
|
|
617
|
+
onNavigateToVersions: () => D("versions")
|
|
616
618
|
}),
|
|
617
619
|
E === "webhooks" && /* @__PURE__ */ G(Ke, {
|
|
618
620
|
appId: J.id,
|
|
@@ -621,7 +623,7 @@ var Le = [
|
|
|
621
623
|
E === "delegations" && /* @__PURE__ */ G(qe, {
|
|
622
624
|
authAppId: J.appId || void 0,
|
|
623
625
|
appName: J.name,
|
|
624
|
-
onGrantDelegation: () =>
|
|
626
|
+
onGrantDelegation: () => ue(!0),
|
|
625
627
|
onNavigate: q
|
|
626
628
|
}),
|
|
627
629
|
E === "analytics" && /* @__PURE__ */ G(Je, { appId: J.id }),
|
|
@@ -636,7 +638,7 @@ var Le = [
|
|
|
636
638
|
}),
|
|
637
639
|
E === "store-listing" && /* @__PURE__ */ G(ot, {
|
|
638
640
|
app: J,
|
|
639
|
-
versionCount:
|
|
641
|
+
versionCount: I?.application?.versions?.totalCount ?? 0,
|
|
640
642
|
isPackageApp: Y,
|
|
641
643
|
pricingDone: Z,
|
|
642
644
|
onNavigateToVersions: Y || X ? () => D("versions") : void 0,
|
|
@@ -667,7 +669,7 @@ var Le = [
|
|
|
667
669
|
confirmLabel: p("devportal.rotateSecret", "Rotate Secret"),
|
|
668
670
|
cancelLabel: p("devportal.cancel", "Cancel"),
|
|
669
671
|
variant: "warning",
|
|
670
|
-
loading:
|
|
672
|
+
loading: ve
|
|
671
673
|
}),
|
|
672
674
|
/* @__PURE__ */ G(re, {
|
|
673
675
|
open: ne,
|
|
@@ -678,16 +680,16 @@ var Le = [
|
|
|
678
680
|
confirmLabel: p("devportal.deactivate", "Deactivate"),
|
|
679
681
|
cancelLabel: p("devportal.cancel", "Cancel"),
|
|
680
682
|
variant: "destructive",
|
|
681
|
-
loading:
|
|
683
|
+
loading: be
|
|
682
684
|
}),
|
|
683
685
|
/* @__PURE__ */ G(ie, {
|
|
684
686
|
open: M,
|
|
685
|
-
onOpenChange:
|
|
687
|
+
onOpenChange: ue,
|
|
686
688
|
appId: J.appId || "",
|
|
687
689
|
appName: J.name,
|
|
688
690
|
appScopes: J.scopes?.map((e) => e.scope) ?? [],
|
|
689
691
|
onSuccess: () => {
|
|
690
|
-
|
|
692
|
+
ue(!1);
|
|
691
693
|
}
|
|
692
694
|
})
|
|
693
695
|
]
|
|
@@ -700,7 +702,7 @@ var Le = [
|
|
|
700
702
|
return /* @__PURE__ */ K("div", {
|
|
701
703
|
className: "space-y-4 py-4 text-center",
|
|
702
704
|
children: [
|
|
703
|
-
/* @__PURE__ */ G(
|
|
705
|
+
/* @__PURE__ */ G(V, { className: "mx-auto h-10 w-10 text-text-secondary" }),
|
|
704
706
|
/* @__PURE__ */ G("h3", {
|
|
705
707
|
className: "font-medium",
|
|
706
708
|
children: n("devportal.oauthApps", "OAuth Apps")
|
|
@@ -712,7 +714,7 @@ var Le = [
|
|
|
712
714
|
/* @__PURE__ */ K("button", {
|
|
713
715
|
onClick: () => e("/oauth"),
|
|
714
716
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
|
|
715
|
-
children: [/* @__PURE__ */ G(
|
|
717
|
+
children: [/* @__PURE__ */ G(L, { size: 16 }), n("devportal.manageOAuthApps", "Manage OAuth Apps")]
|
|
716
718
|
})
|
|
717
719
|
]
|
|
718
720
|
});
|
|
@@ -724,7 +726,7 @@ var Le = [
|
|
|
724
726
|
return /* @__PURE__ */ K("div", {
|
|
725
727
|
className: "space-y-4 py-4 text-center",
|
|
726
728
|
children: [
|
|
727
|
-
/* @__PURE__ */ G(
|
|
729
|
+
/* @__PURE__ */ G(R, { className: "mx-auto h-10 w-10 text-text-secondary" }),
|
|
728
730
|
/* @__PURE__ */ G("h3", {
|
|
729
731
|
className: "font-medium",
|
|
730
732
|
children: n("devportal.apiKeys", "API Keys")
|
|
@@ -736,7 +738,7 @@ var Le = [
|
|
|
736
738
|
/* @__PURE__ */ K("button", {
|
|
737
739
|
onClick: () => e("/api-keys"),
|
|
738
740
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
|
|
739
|
-
children: [/* @__PURE__ */ G(
|
|
741
|
+
children: [/* @__PURE__ */ G(L, { size: 16 }), n("devportal.manageApiKeys", "Manage API Keys")]
|
|
740
742
|
})
|
|
741
743
|
]
|
|
742
744
|
});
|
|
@@ -789,7 +791,7 @@ var Le = [
|
|
|
789
791
|
children: [
|
|
790
792
|
/* @__PURE__ */ K("div", {
|
|
791
793
|
className: "flex items-start gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
|
|
792
|
-
children: [/* @__PURE__ */ G(
|
|
794
|
+
children: [/* @__PURE__ */ G(I, {
|
|
793
795
|
size: 16,
|
|
794
796
|
className: "mt-0.5 shrink-0 text-primary"
|
|
795
797
|
}), /* @__PURE__ */ K("p", {
|
|
@@ -830,7 +832,7 @@ var Le = [
|
|
|
830
832
|
className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
|
|
831
833
|
children: [/* @__PURE__ */ G("div", {
|
|
832
834
|
className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-success-bg-subtle",
|
|
833
|
-
children: /* @__PURE__ */ G(
|
|
835
|
+
children: /* @__PURE__ */ G(Te, {
|
|
834
836
|
size: 18,
|
|
835
837
|
className: "text-status-success-text"
|
|
836
838
|
})
|
|
@@ -862,7 +864,7 @@ var Le = [
|
|
|
862
864
|
className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
|
|
863
865
|
children: [/* @__PURE__ */ G("div", {
|
|
864
866
|
className: "flex h-9 w-9 items-center justify-center rounded-lg bg-action-primary-bg/10",
|
|
865
|
-
children: /* @__PURE__ */ G(
|
|
867
|
+
children: /* @__PURE__ */ G(De, {
|
|
866
868
|
size: 18,
|
|
867
869
|
className: "text-primary"
|
|
868
870
|
})
|
|
@@ -891,7 +893,7 @@ var Le = [
|
|
|
891
893
|
className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
|
|
892
894
|
children: [/* @__PURE__ */ G("div", {
|
|
893
895
|
className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-warning-bg-subtle",
|
|
894
|
-
children: /* @__PURE__ */ G(
|
|
896
|
+
children: /* @__PURE__ */ G(ge, {
|
|
895
897
|
size: 18,
|
|
896
898
|
className: "text-status-warning-text"
|
|
897
899
|
})
|
|
@@ -1123,7 +1125,7 @@ var Le = [
|
|
|
1123
1125
|
children: [
|
|
1124
1126
|
/* @__PURE__ */ K("li", {
|
|
1125
1127
|
className: "flex items-start gap-2",
|
|
1126
|
-
children: [/* @__PURE__ */ G(
|
|
1128
|
+
children: [/* @__PURE__ */ G(F, {
|
|
1127
1129
|
size: 14,
|
|
1128
1130
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1129
1131
|
}), /* @__PURE__ */ K("span", { children: [
|
|
@@ -1141,21 +1143,21 @@ var Le = [
|
|
|
1141
1143
|
}),
|
|
1142
1144
|
/* @__PURE__ */ K("li", {
|
|
1143
1145
|
className: "flex items-start gap-2",
|
|
1144
|
-
children: [/* @__PURE__ */ G(
|
|
1146
|
+
children: [/* @__PURE__ */ G(F, {
|
|
1145
1147
|
size: 14,
|
|
1146
1148
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1147
1149
|
}), /* @__PURE__ */ G("span", { children: "All prices are in platform credits. The USD equivalent is indicative only and may vary with the current credit rate." })]
|
|
1148
1150
|
}),
|
|
1149
1151
|
/* @__PURE__ */ K("li", {
|
|
1150
1152
|
className: "flex items-start gap-2",
|
|
1151
|
-
children: [/* @__PURE__ */ G(
|
|
1153
|
+
children: [/* @__PURE__ */ G(F, {
|
|
1152
1154
|
size: 14,
|
|
1153
1155
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1154
1156
|
}), /* @__PURE__ */ G("span", { children: "Earnings are credited to your billing account per-sale. Cash withdrawals are subject to a minimum threshold and applicable taxes in your jurisdiction." })]
|
|
1155
1157
|
}),
|
|
1156
1158
|
/* @__PURE__ */ K("li", {
|
|
1157
1159
|
className: "flex items-start gap-2",
|
|
1158
|
-
children: [/* @__PURE__ */ G(
|
|
1160
|
+
children: [/* @__PURE__ */ G(F, {
|
|
1159
1161
|
size: 14,
|
|
1160
1162
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1161
1163
|
}), /* @__PURE__ */ K("span", { children: [
|
|
@@ -1182,13 +1184,13 @@ var Le = [
|
|
|
1182
1184
|
onClick: () => void g(),
|
|
1183
1185
|
disabled: d,
|
|
1184
1186
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50",
|
|
1185
|
-
children: d ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(
|
|
1187
|
+
children: d ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(z, {
|
|
1186
1188
|
size: 16,
|
|
1187
1189
|
className: "animate-spin"
|
|
1188
|
-
}), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(
|
|
1190
|
+
}), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(I, { size: 16 }), s("devportal.savePricing", "Save Pricing")] })
|
|
1189
1191
|
}), a && /* @__PURE__ */ K("div", {
|
|
1190
1192
|
className: "flex items-start gap-3 rounded-lg border border-status-success-bg bg-status-success-bg-subtle px-4 py-3",
|
|
1191
|
-
children: [/* @__PURE__ */ G(
|
|
1193
|
+
children: [/* @__PURE__ */ G(F, {
|
|
1192
1194
|
size: 16,
|
|
1193
1195
|
className: "mt-0.5 shrink-0 text-status-success-text"
|
|
1194
1196
|
}), /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
@@ -1228,7 +1230,7 @@ var Le = [
|
|
|
1228
1230
|
}), /* @__PURE__ */ K("button", {
|
|
1229
1231
|
onClick: () => n(`/apps/${e}/versions`),
|
|
1230
1232
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
|
|
1231
|
-
children: [/* @__PURE__ */ G(
|
|
1233
|
+
children: [/* @__PURE__ */ G(H, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
|
|
1232
1234
|
})]
|
|
1233
1235
|
}),
|
|
1234
1236
|
f.length > 0 ? /* @__PURE__ */ G("div", {
|
|
@@ -1321,19 +1323,19 @@ var Le = [
|
|
|
1321
1323
|
})
|
|
1322
1324
|
}) : /* @__PURE__ */ G(r, {
|
|
1323
1325
|
illustration: "empty-generic",
|
|
1324
|
-
icon: /* @__PURE__ */ G(
|
|
1326
|
+
icon: /* @__PURE__ */ G(be, { size: 32 }),
|
|
1325
1327
|
title: s("devportal.noVersions", "No versions yet"),
|
|
1326
1328
|
description: s("devportal.noVersionsDescription", "Upload your first version to make this item available for review and distribution."),
|
|
1327
1329
|
action: /* @__PURE__ */ K("button", {
|
|
1328
1330
|
onClick: () => n(`/apps/${e}/versions`),
|
|
1329
1331
|
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",
|
|
1330
|
-
children: [/* @__PURE__ */ G(
|
|
1332
|
+
children: [/* @__PURE__ */ G(H, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
|
|
1331
1333
|
})
|
|
1332
1334
|
}),
|
|
1333
1335
|
f.length > 0 && !i && a && /* @__PURE__ */ K("div", {
|
|
1334
1336
|
className: "mt-4 flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
|
|
1335
1337
|
children: [
|
|
1336
|
-
/* @__PURE__ */ G(
|
|
1338
|
+
/* @__PURE__ */ G(I, {
|
|
1337
1339
|
size: 16,
|
|
1338
1340
|
className: "shrink-0 text-primary"
|
|
1339
1341
|
}),
|
|
@@ -1345,7 +1347,7 @@ var Le = [
|
|
|
1345
1347
|
type: "button",
|
|
1346
1348
|
onClick: a,
|
|
1347
1349
|
className: "inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline underline-offset-2 whitespace-nowrap",
|
|
1348
|
-
children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */ G(
|
|
1350
|
+
children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */ G(fe, { size: 15 })]
|
|
1349
1351
|
})
|
|
1350
1352
|
]
|
|
1351
1353
|
})
|
|
@@ -1433,13 +1435,13 @@ var Le = [
|
|
|
1433
1435
|
})
|
|
1434
1436
|
] }) : /* @__PURE__ */ G(r, {
|
|
1435
1437
|
illustration: "empty-generic",
|
|
1436
|
-
icon: /* @__PURE__ */ G(
|
|
1438
|
+
icon: /* @__PURE__ */ G(V, { size: 32 }),
|
|
1437
1439
|
title: s("devportal.linkAuthAppFirst", "Link an auth app first"),
|
|
1438
1440
|
description: s("devportal.linkAuthAppFirstDescription", "Delegations are managed through auth apps. Create or link an auth app before granting app-as-user access."),
|
|
1439
1441
|
action: /* @__PURE__ */ K("button", {
|
|
1440
1442
|
onClick: () => a("/oauth"),
|
|
1441
1443
|
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",
|
|
1442
|
-
children: [/* @__PURE__ */ G(
|
|
1444
|
+
children: [/* @__PURE__ */ G(L, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
|
|
1443
1445
|
})
|
|
1444
1446
|
});
|
|
1445
1447
|
}, Je = ({ appId: e }) => {
|
|
@@ -1621,7 +1623,7 @@ var Le = [
|
|
|
1621
1623
|
}), /* @__PURE__ */ K("button", {
|
|
1622
1624
|
onClick: () => n(`/apps/${e}/webhooks/new`),
|
|
1623
1625
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
|
|
1624
|
-
children: [/* @__PURE__ */ G(
|
|
1626
|
+
children: [/* @__PURE__ */ G(B, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
|
|
1625
1627
|
})]
|
|
1626
1628
|
}), t.length > 0 ? /* @__PURE__ */ G("div", {
|
|
1627
1629
|
className: "space-y-4",
|
|
@@ -1645,7 +1647,7 @@ var Le = [
|
|
|
1645
1647
|
})] }), /* @__PURE__ */ G("button", {
|
|
1646
1648
|
onClick: () => n(`/apps/${e}/webhooks/${t.id}`),
|
|
1647
1649
|
className: "rounded-md p-1 hover:bg-bg-sunken",
|
|
1648
|
-
children: /* @__PURE__ */ G(
|
|
1650
|
+
children: /* @__PURE__ */ G(ye, { size: 20 })
|
|
1649
1651
|
})]
|
|
1650
1652
|
}),
|
|
1651
1653
|
/* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("p", {
|
|
@@ -1702,13 +1704,13 @@ var Le = [
|
|
|
1702
1704
|
}, t.id))
|
|
1703
1705
|
}) : /* @__PURE__ */ G(r, {
|
|
1704
1706
|
illustration: "empty-notifications",
|
|
1705
|
-
icon: /* @__PURE__ */ G(
|
|
1707
|
+
icon: /* @__PURE__ */ G(Oe, { size: 32 }),
|
|
1706
1708
|
title: a("devportal.noWebhooks", "No webhooks"),
|
|
1707
1709
|
description: a("devportal.noWebhooksDescription", "Add a webhook to receive event notifications"),
|
|
1708
1710
|
action: /* @__PURE__ */ K("button", {
|
|
1709
1711
|
onClick: () => n(`/apps/${e}/webhooks/new`),
|
|
1710
1712
|
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",
|
|
1711
|
-
children: [/* @__PURE__ */ G(
|
|
1713
|
+
children: [/* @__PURE__ */ G(B, { size: 16 }), a("devportal.addWebhook", "Add Webhook")]
|
|
1712
1714
|
})
|
|
1713
1715
|
})]
|
|
1714
1716
|
});
|
|
@@ -1748,7 +1750,7 @@ var Le = [
|
|
|
1748
1750
|
})] }), /* @__PURE__ */ K("button", {
|
|
1749
1751
|
onClick: i,
|
|
1750
1752
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors",
|
|
1751
|
-
children: [/* @__PURE__ */ G(
|
|
1753
|
+
children: [/* @__PURE__ */ G(B, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
|
|
1752
1754
|
})]
|
|
1753
1755
|
}),
|
|
1754
1756
|
h.length > 0 && /* @__PURE__ */ G("div", {
|
|
@@ -1861,7 +1863,7 @@ var Le = [
|
|
|
1861
1863
|
e.expiresAt && /* @__PURE__ */ K("span", {
|
|
1862
1864
|
className: "flex items-center gap-1",
|
|
1863
1865
|
children: [
|
|
1864
|
-
/* @__PURE__ */ G(
|
|
1866
|
+
/* @__PURE__ */ G(pe, { size: 12 }),
|
|
1865
1867
|
m("devportal.expires", "Expires"),
|
|
1866
1868
|
" ",
|
|
1867
1869
|
new Date(e.expiresAt).toLocaleDateString()
|
|
@@ -1869,7 +1871,7 @@ var Le = [
|
|
|
1869
1871
|
}),
|
|
1870
1872
|
!e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ K("span", {
|
|
1871
1873
|
className: "flex items-center gap-1",
|
|
1872
|
-
children: [/* @__PURE__ */ G(
|
|
1874
|
+
children: [/* @__PURE__ */ G(de, {
|
|
1873
1875
|
size: 12,
|
|
1874
1876
|
className: "text-status-success-text"
|
|
1875
1877
|
}), m("devportal.noExpiration", "No expiration")]
|
|
@@ -1892,13 +1894,13 @@ var Le = [
|
|
|
1892
1894
|
}, e.id))
|
|
1893
1895
|
}) : /* @__PURE__ */ G(r, {
|
|
1894
1896
|
illustration: "empty-people",
|
|
1895
|
-
icon: /* @__PURE__ */ G(
|
|
1897
|
+
icon: /* @__PURE__ */ G(Ee, { size: 32 }),
|
|
1896
1898
|
title: m("devportal.noDelegations", "No delegations"),
|
|
1897
1899
|
description: m("devportal.noDelegationsDescription", "Grant a delegation to allow this app to act on your behalf"),
|
|
1898
1900
|
action: /* @__PURE__ */ K("button", {
|
|
1899
1901
|
onClick: i,
|
|
1900
1902
|
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",
|
|
1901
|
-
children: [/* @__PURE__ */ G(
|
|
1903
|
+
children: [/* @__PURE__ */ G(B, { size: 16 }), m("devportal.grantDelegation", "Grant Delegation")]
|
|
1902
1904
|
})
|
|
1903
1905
|
})
|
|
1904
1906
|
]
|
|
@@ -1978,7 +1980,7 @@ var Le = [
|
|
|
1978
1980
|
]
|
|
1979
1981
|
}) : /* @__PURE__ */ G(r, {
|
|
1980
1982
|
illustration: "empty-data",
|
|
1981
|
-
icon: /* @__PURE__ */ G(
|
|
1983
|
+
icon: /* @__PURE__ */ G(ue, { size: 32 }),
|
|
1982
1984
|
title: n("devportal.noAnalyticsData", "No analytics data"),
|
|
1983
1985
|
description: n("devportal.noAnalyticsDataDescription", "Analytics data will appear here once the application starts receiving traffic.")
|
|
1984
1986
|
})
|
|
@@ -2048,7 +2050,7 @@ var Le = [
|
|
|
2048
2050
|
})] }), /* @__PURE__ */ K("button", {
|
|
2049
2051
|
onClick: S,
|
|
2050
2052
|
className: "flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-accent transition-colors",
|
|
2051
|
-
children: [/* @__PURE__ */ G(
|
|
2053
|
+
children: [/* @__PURE__ */ G(R, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
|
|
2052
2054
|
})]
|
|
2053
2055
|
}),
|
|
2054
2056
|
y && /* @__PURE__ */ K("div", {
|
|
@@ -2149,10 +2151,10 @@ var Le = [
|
|
|
2149
2151
|
onClick: x,
|
|
2150
2152
|
disabled: p,
|
|
2151
2153
|
className: "flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50",
|
|
2152
|
-
children: [p ? /* @__PURE__ */ G(
|
|
2154
|
+
children: [p ? /* @__PURE__ */ G(z, {
|
|
2153
2155
|
size: 16,
|
|
2154
2156
|
className: "animate-spin"
|
|
2155
|
-
}) : /* @__PURE__ */ G(
|
|
2157
|
+
}) : /* @__PURE__ */ G(L, { size: 16 }), p ? o("devportal.executing", "Executing...") : o("devportal.executeQuery", "Execute Query")]
|
|
2156
2158
|
}),
|
|
2157
2159
|
d && /* @__PURE__ */ K("div", { children: [/* @__PURE__ */ G("label", {
|
|
2158
2160
|
className: "block text-sm font-medium mb-1",
|
|
@@ -2187,12 +2189,12 @@ var Le = [
|
|
|
2187
2189
|
alt: e,
|
|
2188
2190
|
className: "w-full h-full object-cover",
|
|
2189
2191
|
onError: () => p(!0)
|
|
2190
|
-
}) : /* @__PURE__ */ G(
|
|
2192
|
+
}) : /* @__PURE__ */ G(H, {
|
|
2191
2193
|
size: 18,
|
|
2192
2194
|
className: "text-text-secondary opacity-40"
|
|
2193
2195
|
}), c && /* @__PURE__ */ K("div", {
|
|
2194
2196
|
className: "absolute inset-0 bg-bg-overlay flex flex-col items-center justify-center gap-1",
|
|
2195
|
-
children: [/* @__PURE__ */ G(
|
|
2197
|
+
children: [/* @__PURE__ */ G(z, {
|
|
2196
2198
|
size: 14,
|
|
2197
2199
|
className: "animate-spin text-white"
|
|
2198
2200
|
}), /* @__PURE__ */ K("span", {
|
|
@@ -2225,7 +2227,7 @@ var Le = [
|
|
|
2225
2227
|
disabled: c,
|
|
2226
2228
|
onClick: () => d.current?.click(),
|
|
2227
2229
|
className: "inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium hover:bg-bg-sunken transition-colors disabled:opacity-50",
|
|
2228
|
-
children: [/* @__PURE__ */ G(
|
|
2230
|
+
children: [/* @__PURE__ */ G(H, { size: 11 }), c ? `Uploading… ${l}%` : "Upload image"]
|
|
2229
2231
|
}),
|
|
2230
2232
|
u && /* @__PURE__ */ G("p", {
|
|
2231
2233
|
className: "text-xs text-status-error-text",
|
|
@@ -2281,20 +2283,20 @@ var Le = [
|
|
|
2281
2283
|
type: "button",
|
|
2282
2284
|
onClick: () => f(t),
|
|
2283
2285
|
className: "absolute top-1 right-1 rounded-full bg-bg-overlay text-white p-0.5 opacity-0 group-hover:opacity-100 transition-opacity",
|
|
2284
|
-
children: /* @__PURE__ */ G(
|
|
2286
|
+
children: /* @__PURE__ */ G(U, { size: 12 })
|
|
2285
2287
|
})]
|
|
2286
2288
|
}, t)), /* @__PURE__ */ G("button", {
|
|
2287
2289
|
type: "button",
|
|
2288
2290
|
disabled: i,
|
|
2289
2291
|
onClick: () => s.current?.click(),
|
|
2290
2292
|
className: t("w-36 aspect-video rounded-lg border-2 border-dashed border-border-subtle flex flex-col items-center justify-center gap-1.5 text-text-secondary hover:border-border-strong hover:bg-bg-sunken transition-colors disabled:opacity-50"),
|
|
2291
|
-
children: i ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(
|
|
2293
|
+
children: i ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(z, {
|
|
2292
2294
|
size: 18,
|
|
2293
2295
|
className: "animate-spin text-primary"
|
|
2294
2296
|
}), /* @__PURE__ */ K("span", {
|
|
2295
2297
|
className: "text-xs",
|
|
2296
2298
|
children: [a, "%"]
|
|
2297
|
-
})] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(
|
|
2299
|
+
})] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(H, { size: 18 }), /* @__PURE__ */ G("span", {
|
|
2298
2300
|
className: "text-xs",
|
|
2299
2301
|
children: "Add screenshot"
|
|
2300
2302
|
})] })
|
|
@@ -2500,13 +2502,13 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2500
2502
|
} finally {
|
|
2501
2503
|
v(!1);
|
|
2502
2504
|
}
|
|
2503
|
-
}, { upload: ie, uploading: ae, progress: oe, error: A } = k(c, l, u, d, "/DevPortal/Assets"), { upload: j, uploading: le, progress:
|
|
2505
|
+
}, { upload: ie, uploading: ae, progress: oe, error: A } = k(c, l, u, d, "/DevPortal/Assets"), { upload: j, uploading: le, progress: ue, error: I } = k(c, l, u, d, "/DevPortal/Assets"), { upload: me, uploading: he, progress: ge, error: _e } = k(c, l, u, d, "/DevPortal/Assets"), R = Q.has(m.manifestItemType), ve = t.status === "SUBMITTED";
|
|
2504
2506
|
return /* @__PURE__ */ K("div", {
|
|
2505
2507
|
className: "space-y-8 max-w-3xl",
|
|
2506
2508
|
children: [
|
|
2507
2509
|
t.status === "PUBLISHED" ? /* @__PURE__ */ K("div", {
|
|
2508
2510
|
className: "flex items-start gap-3 rounded-lg border border-success/30 bg-success/10 px-4 py-3",
|
|
2509
|
-
children: [/* @__PURE__ */ G(
|
|
2511
|
+
children: [/* @__PURE__ */ G(de, {
|
|
2510
2512
|
size: 16,
|
|
2511
2513
|
className: "text-success mt-0.5 shrink-0"
|
|
2512
2514
|
}), /* @__PURE__ */ K("div", {
|
|
@@ -2523,11 +2525,11 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2523
2525
|
]
|
|
2524
2526
|
})]
|
|
2525
2527
|
})]
|
|
2526
|
-
}) :
|
|
2528
|
+
}) : ve ? /* @__PURE__ */ K("div", {
|
|
2527
2529
|
className: "flex items-center justify-between gap-3 rounded-lg border border-primary/30 bg-action-primary-bg/5 px-4 py-3",
|
|
2528
2530
|
children: [/* @__PURE__ */ K("div", {
|
|
2529
2531
|
className: "flex items-start gap-3",
|
|
2530
|
-
children: [/* @__PURE__ */ G(
|
|
2532
|
+
children: [/* @__PURE__ */ G(pe, {
|
|
2531
2533
|
size: 16,
|
|
2532
2534
|
className: "text-primary mt-0.5 shrink-0"
|
|
2533
2535
|
}), /* @__PURE__ */ K("div", {
|
|
@@ -2551,7 +2553,7 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2551
2553
|
type: "button",
|
|
2552
2554
|
onClick: s,
|
|
2553
2555
|
className: "shrink-0 text-xs text-primary hover:underline font-medium flex items-center gap-1",
|
|
2554
|
-
children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */ G(
|
|
2556
|
+
children: [p("devportal.viewStatus", "View Status"), /* @__PURE__ */ G(L, { size: 12 })]
|
|
2555
2557
|
})]
|
|
2556
2558
|
}) : /* @__PURE__ */ K("div", {
|
|
2557
2559
|
className: "flex items-start gap-3 rounded-lg border border-warning/30 bg-warning/5 px-4 py-3",
|
|
@@ -2592,7 +2594,7 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2592
2594
|
onChange: (e) => E("manifestDisplayName", e.target.value),
|
|
2593
2595
|
placeholder: "My Awesome Node"
|
|
2594
2596
|
}),
|
|
2595
|
-
|
|
2597
|
+
R && t.appType !== "WORKFLOW" && /* @__PURE__ */ G(ne, {
|
|
2596
2598
|
label: p("devportal.jsonContent", "Template Definition (JSON)"),
|
|
2597
2599
|
value: m.manifestJsonContent,
|
|
2598
2600
|
onChange: (e) => E("manifestJsonContent", e.target.value),
|
|
@@ -2600,7 +2602,7 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2600
2602
|
placeholder: "{\n \"nodes\": [],\n \"edges\": []\n}",
|
|
2601
2603
|
hint: p("devportal.jsonContentHint", "Paste the full JSON definition. Stored and applied directly — no zip needed.")
|
|
2602
2604
|
}),
|
|
2603
|
-
|
|
2605
|
+
R && t.appType === "WORKFLOW" && /* @__PURE__ */ K("p", {
|
|
2604
2606
|
className: "text-sm text-text-secondary rounded-md bg-bg-sunken px-3 py-2",
|
|
2605
2607
|
children: [
|
|
2606
2608
|
"The Workflow Definition (JSON) is set per version. Go to the",
|
|
@@ -2638,8 +2640,8 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2638
2640
|
aspectClass: "aspect-square",
|
|
2639
2641
|
upload: j,
|
|
2640
2642
|
uploading: le,
|
|
2641
|
-
progress:
|
|
2642
|
-
error:
|
|
2643
|
+
progress: ue,
|
|
2644
|
+
error: I
|
|
2643
2645
|
})]
|
|
2644
2646
|
}),
|
|
2645
2647
|
/* @__PURE__ */ G(O, {
|
|
@@ -2667,10 +2669,10 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2667
2669
|
/* @__PURE__ */ G(Z, {
|
|
2668
2670
|
urls: m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean),
|
|
2669
2671
|
onChange: (e) => E("screenshotsText", e.join("\n")),
|
|
2670
|
-
upload:
|
|
2671
|
-
uploading:
|
|
2672
|
-
progress:
|
|
2673
|
-
error:
|
|
2672
|
+
upload: me,
|
|
2673
|
+
uploading: he,
|
|
2674
|
+
progress: ge,
|
|
2675
|
+
error: _e
|
|
2674
2676
|
})
|
|
2675
2677
|
]
|
|
2676
2678
|
})
|
|
@@ -2727,7 +2729,7 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2727
2729
|
children: [
|
|
2728
2730
|
b === "success" && /* @__PURE__ */ K("div", {
|
|
2729
2731
|
className: "flex items-center gap-2 rounded-md border border-success/30 bg-success/10 px-3 py-2 text-sm text-success",
|
|
2730
|
-
children: [/* @__PURE__ */ G(
|
|
2732
|
+
children: [/* @__PURE__ */ G(de, {
|
|
2731
2733
|
size: 15,
|
|
2732
2734
|
className: "shrink-0"
|
|
2733
2735
|
}), p("devportal.storeListing.savedSuccess", "Store listing saved successfully.")]
|
|
@@ -2748,10 +2750,10 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2748
2750
|
disabled: g || !D || !w,
|
|
2749
2751
|
title: D ? w ? void 0 : p("devportal.storeListing.noChanges", "All changes saved — edit any field to save again") : p("devportal.storeListing.requiredFieldsHint", "Fill in Short Description, Privacy Policy URL, and Terms of Service URL to save"),
|
|
2750
2752
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed",
|
|
2751
|
-
children: g ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(
|
|
2753
|
+
children: g ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(z, {
|
|
2752
2754
|
size: 16,
|
|
2753
2755
|
className: "animate-spin"
|
|
2754
|
-
}), p("devportal.saving", "Saving…")] }) : w ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(
|
|
2756
|
+
}), p("devportal.saving", "Saving…")] }) : w ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(we, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] }) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(F, { size: 16 }), p("devportal.saved", "Saved")] })
|
|
2755
2757
|
}),
|
|
2756
2758
|
!D && /* @__PURE__ */ G("p", {
|
|
2757
2759
|
className: "text-xs text-text-secondary",
|
|
@@ -2761,13 +2763,13 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2761
2763
|
type: "button",
|
|
2762
2764
|
onClick: a,
|
|
2763
2765
|
className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
|
|
2764
|
-
children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */ G(
|
|
2766
|
+
children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */ G(fe, { size: 15 })]
|
|
2765
2767
|
}),
|
|
2766
2768
|
(!r || n > 0) && !i && o && /* @__PURE__ */ K("button", {
|
|
2767
2769
|
type: "button",
|
|
2768
2770
|
onClick: o,
|
|
2769
2771
|
className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
|
|
2770
|
-
children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */ G(
|
|
2772
|
+
children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */ G(fe, { size: 15 })]
|
|
2771
2773
|
})
|
|
2772
2774
|
]
|
|
2773
2775
|
})
|
|
@@ -2808,199 +2810,282 @@ var ot = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
|
|
|
2808
2810
|
target: "_blank",
|
|
2809
2811
|
rel: "noopener noreferrer",
|
|
2810
2812
|
className: "flex items-center gap-2 text-sm text-primary hover:underline",
|
|
2811
|
-
children: [/* @__PURE__ */ G(
|
|
2812
|
-
}), ct =
|
|
2813
|
-
{
|
|
2814
|
-
id: "auth",
|
|
2813
|
+
children: [/* @__PURE__ */ G(L, { size: 14 }), e]
|
|
2814
|
+
}), ct = {
|
|
2815
|
+
auth: {
|
|
2815
2816
|
label: "Authentication",
|
|
2816
2817
|
description: "User identity and session management"
|
|
2817
2818
|
},
|
|
2818
|
-
{
|
|
2819
|
-
id: "billing",
|
|
2819
|
+
billing: {
|
|
2820
2820
|
label: "Billing",
|
|
2821
2821
|
description: "Billing accounts and subscriptions"
|
|
2822
2822
|
},
|
|
2823
|
-
{
|
|
2824
|
-
id: "files",
|
|
2823
|
+
files: {
|
|
2825
2824
|
label: "Files",
|
|
2826
2825
|
description: "File storage and management"
|
|
2827
2826
|
},
|
|
2828
|
-
{
|
|
2829
|
-
id: "tags",
|
|
2827
|
+
tags: {
|
|
2830
2828
|
label: "Tags",
|
|
2831
2829
|
description: "Tags and labels on resources"
|
|
2832
2830
|
},
|
|
2833
|
-
{
|
|
2834
|
-
id: "calendar",
|
|
2831
|
+
calendar: {
|
|
2835
2832
|
label: "Calendar",
|
|
2836
2833
|
description: "Events and scheduling"
|
|
2837
2834
|
},
|
|
2838
|
-
{
|
|
2839
|
-
id: "workflows",
|
|
2835
|
+
workflows: {
|
|
2840
2836
|
label: "Workflows",
|
|
2841
2837
|
description: "Automation workflows"
|
|
2842
2838
|
},
|
|
2843
|
-
{
|
|
2844
|
-
id: "channels",
|
|
2839
|
+
channels: {
|
|
2845
2840
|
label: "Channels",
|
|
2846
2841
|
description: "Messaging channels"
|
|
2847
2842
|
},
|
|
2848
|
-
{
|
|
2849
|
-
id: "notifications",
|
|
2843
|
+
notifications: {
|
|
2850
2844
|
label: "Notifications",
|
|
2851
2845
|
description: "Platform notifications"
|
|
2852
2846
|
},
|
|
2853
|
-
{
|
|
2854
|
-
id: "users",
|
|
2847
|
+
users: {
|
|
2855
2848
|
label: "Users & Members",
|
|
2856
2849
|
description: "Workspace members and profiles"
|
|
2857
2850
|
},
|
|
2858
|
-
{
|
|
2859
|
-
id: "workspaces",
|
|
2851
|
+
workspaces: {
|
|
2860
2852
|
label: "Workspaces",
|
|
2861
2853
|
description: "Workspace settings and metadata"
|
|
2862
2854
|
},
|
|
2863
|
-
{
|
|
2864
|
-
id: "content",
|
|
2855
|
+
content: {
|
|
2865
2856
|
label: "Content",
|
|
2866
2857
|
description: "Pages, documents, and content"
|
|
2867
2858
|
},
|
|
2868
|
-
{
|
|
2869
|
-
id: "analytics",
|
|
2859
|
+
analytics: {
|
|
2870
2860
|
label: "Analytics",
|
|
2871
2861
|
description: "Usage analytics and reporting"
|
|
2872
2862
|
},
|
|
2873
|
-
{
|
|
2874
|
-
id: "webhooks",
|
|
2863
|
+
webhooks: {
|
|
2875
2864
|
label: "Webhooks",
|
|
2876
2865
|
description: "Webhook subscriptions"
|
|
2877
2866
|
},
|
|
2878
|
-
{
|
|
2879
|
-
id: "rbac",
|
|
2867
|
+
rbac: {
|
|
2880
2868
|
label: "Roles & Permissions",
|
|
2881
2869
|
description: "Access control configuration"
|
|
2882
2870
|
}
|
|
2883
|
-
|
|
2884
|
-
function
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
for (let n of e.permissions) n && typeof n == "object" && n.resource
|
|
2871
|
+
}, lt = Object.keys(ct);
|
|
2872
|
+
function ut(e) {
|
|
2873
|
+
if (!e || !Array.isArray(e.permissions)) return [];
|
|
2874
|
+
let t = [];
|
|
2875
|
+
for (let n of e.permissions) n && typeof n == "object" && typeof n.resource == "string" && n.resource && t.push({
|
|
2876
|
+
resource: n.resource,
|
|
2877
|
+
level: n.level === "write" ? "write" : "read"
|
|
2878
|
+
});
|
|
2888
2879
|
return t;
|
|
2889
2880
|
}
|
|
2890
|
-
function
|
|
2891
|
-
let t =
|
|
2881
|
+
function dt(e) {
|
|
2882
|
+
let t = [];
|
|
2892
2883
|
for (let n of e) {
|
|
2893
|
-
let
|
|
2894
|
-
|
|
2884
|
+
let e = n.indexOf(":");
|
|
2885
|
+
if (e === -1) continue;
|
|
2886
|
+
let r = n.slice(0, e), i = n.slice(e + 1);
|
|
2887
|
+
i && t.push({
|
|
2888
|
+
resource: i,
|
|
2889
|
+
level: r === "write" ? "write" : "read"
|
|
2890
|
+
});
|
|
2895
2891
|
}
|
|
2896
2892
|
return t;
|
|
2897
2893
|
}
|
|
2898
|
-
function
|
|
2899
|
-
|
|
2894
|
+
function ft(e, t) {
|
|
2895
|
+
if (e.length > 0) return e;
|
|
2896
|
+
let n = /* @__PURE__ */ new Set();
|
|
2897
|
+
return t.filter((e) => n.has(e.resource) ? !1 : (n.add(e.resource), !0));
|
|
2900
2898
|
}
|
|
2901
|
-
var
|
|
2902
|
-
|
|
2903
|
-
|
|
2899
|
+
var pt = ({ level: e, onChange: t }) => /* @__PURE__ */ G("div", {
|
|
2900
|
+
className: "flex items-center gap-0.5 rounded-md border border-border-subtle bg-bg-sunken/50 p-0.5",
|
|
2901
|
+
children: ["read", "write"].map((n) => /* @__PURE__ */ G("button", {
|
|
2902
|
+
type: "button",
|
|
2903
|
+
onClick: () => t(n),
|
|
2904
|
+
className: `rounded px-2.5 py-1 text-xs font-medium transition-colors whitespace-nowrap ${e === n ? "bg-bg-base text-text-primary shadow-sm" : "text-text-secondary hover:text-text-primary"}`,
|
|
2905
|
+
children: n === "read" ? "Read" : "Read & Write"
|
|
2906
|
+
}, n))
|
|
2907
|
+
}), mt = ({ app: e, versionScopes: t, locked: n = !1, onNavigateToVersions: r }) => {
|
|
2908
|
+
let i = e.manifest ?? {}, [a, o] = N(() => ft(ut(i), dt(t ?? []))), [s, c] = N(!1), [l, u] = N(""), [d, f] = N("read"), [p, m] = N(!1), [h, g] = N(!1), [v] = _(), b = (e, t) => {
|
|
2909
|
+
g(!1), o((n) => n.map((n) => n.resource === e ? {
|
|
2904
2910
|
...n,
|
|
2905
|
-
|
|
2906
|
-
}));
|
|
2907
|
-
},
|
|
2908
|
-
|
|
2911
|
+
level: t
|
|
2912
|
+
} : n));
|
|
2913
|
+
}, x = (e) => {
|
|
2914
|
+
g(!1), o((t) => t.filter((t) => t.resource !== e));
|
|
2915
|
+
}, S = () => {
|
|
2916
|
+
let e = l.trim().toLowerCase().replace(/\s+/g, "-");
|
|
2917
|
+
!e || a.some((t) => t.resource === e) || (o((t) => [...t, {
|
|
2918
|
+
resource: e,
|
|
2919
|
+
level: d
|
|
2920
|
+
}]), u(""), f("read"), c(!1), g(!1));
|
|
2921
|
+
}, C = async () => {
|
|
2922
|
+
m(!0);
|
|
2909
2923
|
try {
|
|
2910
|
-
|
|
2911
|
-
resource: e,
|
|
2912
|
-
level: t
|
|
2913
|
-
}));
|
|
2914
|
-
await l({ variables: {
|
|
2924
|
+
await v({ variables: {
|
|
2915
2925
|
id: e.id,
|
|
2916
2926
|
input: { manifest: {
|
|
2917
|
-
...
|
|
2918
|
-
permissions: t
|
|
2927
|
+
...i,
|
|
2928
|
+
permissions: a.map(({ resource: e, level: t }) => ({
|
|
2929
|
+
resource: e,
|
|
2930
|
+
level: t
|
|
2931
|
+
}))
|
|
2919
2932
|
} }
|
|
2920
|
-
} }),
|
|
2933
|
+
} }), g(!0);
|
|
2921
2934
|
} finally {
|
|
2922
|
-
|
|
2935
|
+
m(!1);
|
|
2923
2936
|
}
|
|
2924
|
-
},
|
|
2925
|
-
|
|
2926
|
-
|
|
2927
|
-
|
|
2928
|
-
|
|
2929
|
-
|
|
2930
|
-
|
|
2931
|
-
|
|
2932
|
-
|
|
2937
|
+
}, w = /* @__PURE__ */ G("div", {
|
|
2938
|
+
className: "rounded-lg border border-border-subtle divide-y divide-border-subtle",
|
|
2939
|
+
children: a.map((e) => /* @__PURE__ */ K("div", {
|
|
2940
|
+
className: "flex items-center gap-3 px-4 py-3 hover:bg-bg-sunken/30 transition-colors",
|
|
2941
|
+
children: [/* @__PURE__ */ K("div", {
|
|
2942
|
+
className: "flex-1 min-w-0",
|
|
2943
|
+
children: [
|
|
2944
|
+
/* @__PURE__ */ G("p", {
|
|
2945
|
+
className: "text-sm font-medium text-text-primary",
|
|
2946
|
+
children: ct[e.resource]?.label ?? e.resource
|
|
2947
|
+
}),
|
|
2948
|
+
ct[e.resource]?.description && /* @__PURE__ */ G("p", {
|
|
2949
|
+
className: "text-xs text-text-secondary",
|
|
2950
|
+
children: ct[e.resource].description
|
|
2951
|
+
}),
|
|
2952
|
+
!ct[e.resource] && /* @__PURE__ */ G("p", {
|
|
2953
|
+
className: "text-xs text-text-tertiary font-mono",
|
|
2954
|
+
children: "custom scope"
|
|
2955
|
+
})
|
|
2956
|
+
]
|
|
2957
|
+
}), n ? /* @__PURE__ */ G("span", {
|
|
2958
|
+
className: `rounded-full px-2.5 py-0.5 text-xs font-medium ${e.level === "write" ? "bg-status-warning-bg text-status-warning-text" : "bg-bg-sunken text-text-secondary"}`,
|
|
2959
|
+
children: e.level === "write" ? "Read & Write" : "Read"
|
|
2960
|
+
}) : /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ G(pt, {
|
|
2961
|
+
level: e.level,
|
|
2962
|
+
onChange: (t) => b(e.resource, t)
|
|
2963
|
+
}), /* @__PURE__ */ G("button", {
|
|
2964
|
+
type: "button",
|
|
2965
|
+
onClick: () => x(e.resource),
|
|
2966
|
+
title: "Remove permission",
|
|
2967
|
+
className: "p-1.5 rounded text-text-tertiary hover:text-status-error-text hover:bg-status-error-bg-subtle transition-colors",
|
|
2968
|
+
children: /* @__PURE__ */ G(U, { size: 14 })
|
|
2969
|
+
})] })]
|
|
2970
|
+
}, e.resource))
|
|
2971
|
+
});
|
|
2933
2972
|
return /* @__PURE__ */ G(y, {
|
|
2934
2973
|
title: "Permissions",
|
|
2935
|
-
description: "
|
|
2936
|
-
children: /* @__PURE__ */
|
|
2974
|
+
description: "These are the permissions your app requests from users. Users see exactly this list when authorizing your app.",
|
|
2975
|
+
children: /* @__PURE__ */ G("div", {
|
|
2937
2976
|
className: "space-y-4",
|
|
2938
|
-
children: [
|
|
2939
|
-
|
|
2940
|
-
|
|
2941
|
-
|
|
2942
|
-
|
|
2943
|
-
|
|
2944
|
-
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
|
|
2948
|
-
|
|
2949
|
-
|
|
2950
|
-
|
|
2951
|
-
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
|
|
2955
|
-
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
2971
|
-
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
|
|
2975
|
-
|
|
2976
|
-
|
|
2977
|
-
|
|
2978
|
-
|
|
2977
|
+
children: n ? /* @__PURE__ */ K(W, { children: [/* @__PURE__ */ K("div", {
|
|
2978
|
+
className: "rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle p-3 flex gap-2 text-sm",
|
|
2979
|
+
children: [/* @__PURE__ */ G(_e, {
|
|
2980
|
+
size: 15,
|
|
2981
|
+
className: "flex-shrink-0 mt-0.5 text-status-warning-text"
|
|
2982
|
+
}), /* @__PURE__ */ K("span", {
|
|
2983
|
+
className: "text-status-warning-text",
|
|
2984
|
+
children: [
|
|
2985
|
+
/* @__PURE__ */ G("strong", { children: "Permission changes require a new version." }),
|
|
2986
|
+
" Your app is live and users have already consented to the permissions below. To request new or fewer permissions, publish a new version — existing users will be shown what changed and asked to re-consent before the new version takes effect.",
|
|
2987
|
+
" ",
|
|
2988
|
+
r && /* @__PURE__ */ G("button", {
|
|
2989
|
+
type: "button",
|
|
2990
|
+
onClick: r,
|
|
2991
|
+
className: "underline font-medium hover:opacity-80 transition-opacity",
|
|
2992
|
+
children: "Go to Versions →"
|
|
2993
|
+
})
|
|
2994
|
+
]
|
|
2995
|
+
})]
|
|
2996
|
+
}), a.length === 0 ? /* @__PURE__ */ G("div", {
|
|
2997
|
+
className: "rounded-lg border border-border-subtle border-dashed p-6 text-center text-sm text-text-secondary",
|
|
2998
|
+
children: "No permissions configured for this version."
|
|
2999
|
+
}) : w] }) : /* @__PURE__ */ K(W, { children: [
|
|
3000
|
+
a.length === 0 ? /* @__PURE__ */ K("div", {
|
|
3001
|
+
className: "rounded-lg border border-border-subtle border-dashed p-8 flex flex-col items-center gap-2 text-center text-text-secondary",
|
|
3002
|
+
children: [
|
|
3003
|
+
/* @__PURE__ */ G(V, {
|
|
3004
|
+
size: 28,
|
|
3005
|
+
className: "opacity-25"
|
|
3006
|
+
}),
|
|
3007
|
+
/* @__PURE__ */ G("p", {
|
|
3008
|
+
className: "text-sm font-medium text-text-primary",
|
|
3009
|
+
children: "No permissions configured"
|
|
3010
|
+
}),
|
|
3011
|
+
/* @__PURE__ */ G("p", {
|
|
3012
|
+
className: "text-xs",
|
|
3013
|
+
children: "Add the permissions your app needs to request from users."
|
|
3014
|
+
})
|
|
3015
|
+
]
|
|
3016
|
+
}) : w,
|
|
3017
|
+
s ? /* @__PURE__ */ K("div", {
|
|
3018
|
+
className: "rounded-lg border border-border-subtle p-3 flex items-center gap-2 flex-wrap",
|
|
3019
|
+
children: [
|
|
3020
|
+
/* @__PURE__ */ G("input", {
|
|
3021
|
+
type: "text",
|
|
3022
|
+
value: l,
|
|
3023
|
+
onChange: (e) => u(e.target.value),
|
|
3024
|
+
onKeyDown: (e) => {
|
|
3025
|
+
e.key === "Enter" && S(), e.key === "Escape" && c(!1);
|
|
3026
|
+
},
|
|
3027
|
+
placeholder: "Resource (e.g. auth, files, widgets)",
|
|
3028
|
+
list: "perm-resource-suggestions",
|
|
3029
|
+
autoFocus: !0,
|
|
3030
|
+
className: "flex-1 min-w-40 rounded-md border border-border-subtle bg-bg-base px-3 py-1.5 text-sm focus:outline-none focus:ring-1 focus:ring-primary"
|
|
3031
|
+
}),
|
|
3032
|
+
/* @__PURE__ */ G("datalist", {
|
|
3033
|
+
id: "perm-resource-suggestions",
|
|
3034
|
+
children: lt.filter((e) => !a.some((t) => t.resource === e)).map((e) => /* @__PURE__ */ G("option", {
|
|
3035
|
+
value: e,
|
|
3036
|
+
children: ct[e].label
|
|
3037
|
+
}, e))
|
|
3038
|
+
}),
|
|
3039
|
+
/* @__PURE__ */ G(pt, {
|
|
3040
|
+
level: d,
|
|
3041
|
+
onChange: f
|
|
3042
|
+
}),
|
|
3043
|
+
/* @__PURE__ */ G("button", {
|
|
3044
|
+
type: "button",
|
|
3045
|
+
onClick: S,
|
|
3046
|
+
disabled: !l.trim(),
|
|
3047
|
+
className: "px-3 py-1.5 rounded-md bg-action-primary-bg text-action-primary-text text-xs font-medium hover:bg-action-primary-bg/90 disabled:opacity-50 transition-colors",
|
|
3048
|
+
children: "Add"
|
|
3049
|
+
}),
|
|
3050
|
+
/* @__PURE__ */ G("button", {
|
|
3051
|
+
type: "button",
|
|
3052
|
+
onClick: () => {
|
|
3053
|
+
c(!1), u("");
|
|
3054
|
+
},
|
|
3055
|
+
className: "p-1.5 rounded text-text-secondary hover:text-text-primary transition-colors",
|
|
3056
|
+
children: /* @__PURE__ */ G(U, { size: 14 })
|
|
3057
|
+
})
|
|
3058
|
+
]
|
|
3059
|
+
}) : /* @__PURE__ */ K("button", {
|
|
3060
|
+
type: "button",
|
|
3061
|
+
onClick: () => c(!0),
|
|
3062
|
+
className: "flex items-center gap-1.5 text-sm text-text-secondary hover:text-text-primary transition-colors",
|
|
3063
|
+
children: [/* @__PURE__ */ G(B, { size: 14 }), "Add permission"]
|
|
2979
3064
|
}),
|
|
2980
3065
|
/* @__PURE__ */ K("div", {
|
|
2981
3066
|
className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-3 flex gap-2 text-xs text-text-secondary",
|
|
2982
|
-
children: [/* @__PURE__ */ G(
|
|
3067
|
+
children: [/* @__PURE__ */ G(_e, {
|
|
2983
3068
|
size: 14,
|
|
2984
3069
|
className: "flex-shrink-0 mt-0.5"
|
|
2985
3070
|
}), /* @__PURE__ */ K("span", { children: [/* @__PURE__ */ G("strong", { children: "Read & Write" }), " implies Read. Request only what your app genuinely needs — fewer permissions build more user trust."] })]
|
|
2986
3071
|
}),
|
|
2987
3072
|
/* @__PURE__ */ K("div", {
|
|
2988
3073
|
className: "flex items-center justify-end gap-3",
|
|
2989
|
-
children: [
|
|
3074
|
+
children: [h && /* @__PURE__ */ K("span", {
|
|
2990
3075
|
className: "flex items-center gap-1.5 text-sm text-status-success-text",
|
|
2991
|
-
children: [/* @__PURE__ */ G(
|
|
3076
|
+
children: [/* @__PURE__ */ G(de, { size: 14 }), "Saved"]
|
|
2992
3077
|
}), /* @__PURE__ */ K("button", {
|
|
2993
3078
|
type: "button",
|
|
2994
|
-
onClick: () => void
|
|
2995
|
-
disabled:
|
|
3079
|
+
onClick: () => void C(),
|
|
3080
|
+
disabled: p,
|
|
2996
3081
|
className: "inline-flex items-center gap-2 rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 transition-colors disabled:opacity-50",
|
|
2997
|
-
children: [
|
|
3082
|
+
children: [p ? /* @__PURE__ */ G(z, {
|
|
2998
3083
|
size: 14,
|
|
2999
3084
|
className: "animate-spin"
|
|
3000
|
-
}) : /* @__PURE__ */ G(
|
|
3085
|
+
}) : /* @__PURE__ */ G(V, { size: 14 }), "Save Permissions"]
|
|
3001
3086
|
})]
|
|
3002
3087
|
})
|
|
3003
|
-
]
|
|
3088
|
+
] })
|
|
3004
3089
|
})
|
|
3005
3090
|
});
|
|
3006
3091
|
};
|