@burdenoff/microfe-devportal 2026.1107.1 → 2026.1107.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,19 +14,20 @@ import { InputField as k, SelectField as re, TextareaField as ie } from "../comp
14
14
  import { ConfirmDialog as ae } from "../components/ConfirmDialog.js";
15
15
  import { GrantDelegationModal as oe } from "../components/GrantDelegationModal.js";
16
16
  import { MarkdownEditor as se } from "../components/MarkdownEditor.js";
17
- import { useDevportalPermission as ce } from "../hooks/usePermission.js";
18
- import { DEVPORTAL_PERMISSIONS as le } from "../constants/permissions.js";
19
- import { ImageUploadField as ue, ScreenshotGallery as de } from "../components/ImageUploadField.js";
20
- import { usePackageUpload as fe } from "../hooks/usePackageUpload.js";
21
- import { useCallback as A, useEffect as j, useMemo as M, useRef as pe, useState as N } from "react";
22
- import { Markdown as me } from "@burdenoff/fe-libs/shared/components";
23
- import { AlertCircle as P, AppWindow as he, BarChart3 as ge, Check as F, CheckCircle as _e, ChevronRight as ve, CircleDollarSign as ye, Clock as be, Copy as xe, Edit as Se, ExternalLink as I, FlaskConical as Ce, Gift as we, Info as Te, Key as Ee, Link as De, Loader2 as L, Lock as Oe, MoreHorizontal as ke, Package as Ae, Plus as R, Power as je, RefreshCw as Me, SendHorizontal as Ne, Shield as z, Store as Pe, TrendingUp as Fe, Upload as Ie, Users as B, Wallet as Le, Webhook as Re, X as ze, XCircle as Be } from "lucide-react";
24
- import { useParams as Ve } from "react-router";
17
+ import { DEVELOPER_LINKS as ce } from "../constants/developerLinks.js";
18
+ import { useDevportalPermission as le } from "../hooks/usePermission.js";
19
+ import { DEVPORTAL_PERMISSIONS as ue } from "../constants/permissions.js";
20
+ import { ImageUploadField as de, ScreenshotGallery as fe } from "../components/ImageUploadField.js";
21
+ import { usePackageUpload as A } from "../hooks/usePackageUpload.js";
22
+ import { useCallback as j, useEffect as pe, useMemo as M, useRef as me, useState as N } from "react";
23
+ import { Markdown as he } from "@burdenoff/fe-libs/shared/components";
24
+ import { AlertCircle as ge, AppWindow as _e, BarChart3 as ve, Check as P, CheckCircle as ye, ChevronRight as be, CircleDollarSign as F, Clock as xe, Copy as Se, Edit as Ce, ExternalLink as I, FlaskConical as we, Gift as Te, Info as Ee, Key as De, Link as Oe, Loader2 as L, Lock as ke, MoreHorizontal as Ae, Package as je, Plus as R, Power as Me, RefreshCw as Ne, SendHorizontal as Pe, Shield as z, Store as Fe, TrendingUp as Ie, Upload as B, Users as Le, Wallet as Re, Webhook as ze, X as Be, XCircle as Ve } from "lucide-react";
25
+ import { useParams as He } from "react-router";
25
26
  import { Fragment as V, jsx as H, jsxs as U } from "react/jsx-runtime";
26
27
  import { useI18n as W } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
27
- import { CTAOverflowMenu as He, EmphasisPanel as Ue, GlassCard as We } from "@burdenoff/fe-libs/ui";
28
+ import { CTAOverflowMenu as Ue, EmphasisPanel as We, GlassCard as Ge } from "@burdenoff/fe-libs/ui";
28
29
  //#region src/devportal/pages/ApplicationDetailPage.tsx
29
- function Ge(e) {
30
+ function Ke(e) {
30
31
  return e ? {
31
32
  id: e.id,
32
33
  name: e.name,
@@ -80,7 +81,7 @@ function Ge(e) {
80
81
  updatedAt: e.updatedAt
81
82
  } : null;
82
83
  }
83
- function Ke(e) {
84
+ function qe(e) {
84
85
  return {
85
86
  id: e.id,
86
87
  applicationId: e.applicationId,
@@ -104,7 +105,7 @@ function Ke(e) {
104
105
  updatedAt: e.updatedAt
105
106
  };
106
107
  }
107
- function qe(e) {
108
+ function Je(e) {
108
109
  return {
109
110
  id: e.id,
110
111
  applicationId: e.applicationId,
@@ -120,7 +121,7 @@ function qe(e) {
120
121
  createdAt: e.createdAt
121
122
  };
122
123
  }
123
- function Je(e) {
124
+ function Ye(e) {
124
125
  return {
125
126
  id: e.id,
126
127
  appId: e.appId,
@@ -142,31 +143,31 @@ function Je(e) {
142
143
  revokedBy: e.revokedBy || void 0
143
144
  };
144
145
  }
145
- var Ye = [
146
+ var Xe = [
146
147
  {
147
148
  id: "overview",
148
149
  label: "Overview",
149
- icon: he
150
+ icon: _e
150
151
  },
151
152
  {
152
153
  id: "analytics",
153
154
  label: "Analytics",
154
- icon: ge
155
+ icon: ve
155
156
  },
156
157
  {
157
158
  id: "store-listing",
158
159
  label: "Store Listing",
159
- icon: Pe
160
+ icon: Fe
160
161
  },
161
162
  {
162
163
  id: "versions",
163
164
  label: "Versions",
164
- icon: Ae
165
+ icon: je
165
166
  },
166
167
  {
167
168
  id: "pricing",
168
169
  label: "Pricing",
169
- icon: ye
170
+ icon: F
170
171
  },
171
172
  {
172
173
  id: "permissions",
@@ -176,12 +177,12 @@ var Ye = [
176
177
  {
177
178
  id: "webhooks",
178
179
  label: "Webhooks",
179
- icon: Re
180
+ icon: ze
180
181
  },
181
182
  {
182
183
  id: "delegations",
183
184
  label: "Delegations",
184
- icon: B
185
+ icon: Le
185
186
  },
186
187
  {
187
188
  id: "playground",
@@ -191,18 +192,18 @@ var Ye = [
191
192
  {
192
193
  id: "oauth",
193
194
  label: "OAuth",
194
- icon: Oe
195
+ icon: ke
195
196
  },
196
197
  {
197
198
  id: "api-keys",
198
199
  label: "API Keys",
199
- icon: Ee
200
+ icon: De
200
201
  }
201
- ], Xe = {
202
+ ], G = {
202
203
  ACTIVE: "bg-status-success-bg-subtle text-status-success-text",
203
204
  REVOKED: "bg-status-error-bg-subtle text-status-error-text",
204
205
  EXPIRED: "bg-bg-sunken text-text-secondary"
205
- }, G = ({ message: e = "Loading..." }) => /* @__PURE__ */ U("div", {
206
+ }, K = ({ message: e = "Loading..." }) => /* @__PURE__ */ U("div", {
206
207
  className: "flex items-center justify-center gap-3 py-12",
207
208
  children: [/* @__PURE__ */ H(L, {
208
209
  size: 20,
@@ -211,50 +212,50 @@ var Ye = [
211
212
  className: "text-sm text-text-secondary",
212
213
  children: e
213
214
  })]
214
- }), K = ({ message: e }) => /* @__PURE__ */ U("div", {
215
+ }), q = ({ message: e }) => /* @__PURE__ */ U("div", {
215
216
  className: "flex flex-col items-center justify-center gap-2 py-12 text-center",
216
- children: [/* @__PURE__ */ H(P, {
217
+ children: [/* @__PURE__ */ H(ge, {
217
218
  size: 32,
218
219
  className: "text-status-error-text"
219
220
  }), /* @__PURE__ */ H("p", {
220
221
  className: "text-sm text-text-secondary",
221
222
  children: e
222
223
  })]
223
- }), q = () => {
224
+ }), Ze = () => {
224
225
  let { navigate: i, basePath: o, workspaceId: c } = e(), { t: u } = W(), m = (e, t) => {
225
226
  let n = u(e);
226
227
  return n === e ? t : n;
227
- }, { allowed: g } = ce(le.APP_UPDATE), { allowed: y } = ce(le.APP_DELETE), { appId: b } = Ve(), [S, D] = N("overview"), [te, ne] = N(!1), [k, ie] = N(!1), [se, ue] = N(null), [de, fe] = N(!1), { data: j, loading: M, error: pe, refetch: me } = s({
228
+ }, { allowed: g } = le(ue.APP_UPDATE), { allowed: y } = le(ue.APP_DELETE), { appId: b } = He(), [S, D] = N("overview"), [te, ne] = N(!1), [k, ie] = N(!1), [se, ce] = N(null), [de, fe] = N(!1), { data: A, loading: pe, error: M, refetch: me } = s({
228
229
  variables: { id: b },
229
230
  skip: !b
230
- }), [ge, { loading: ye }] = h(), [xe, { loading: I }] = a(), [we, { loading: Te }] = _(), [Ee] = p(), [De, { loading: Oe }] = f(), [ke, { loading: Ae }] = v(), { data: R, refetch: z } = d({
231
+ }), [he, { loading: ve }] = h(), [F, { loading: Se }] = a(), [I, { loading: Te }] = _(), [Ee] = p(), [De, { loading: Oe }] = f(), [ke, { loading: Ae }] = v(), { data: je, refetch: R } = d({
231
232
  variables: {
232
233
  applicationId: b,
233
234
  workspaceId: c ?? void 0
234
235
  },
235
236
  skip: !c || !b,
236
237
  fetchPolicy: "cache-and-network"
237
- }), Fe = R?.appInstallations?.edges?.[0]?.node ?? null, { data: Ie } = l({
238
- variables: { id: j?.application?.developerOrganizationId ?? "" },
239
- skip: !j?.application?.developerOrganizationId,
238
+ }), z = je?.appInstallations?.edges?.[0]?.node ?? null, { data: Ie } = l({
239
+ variables: { id: A?.application?.developerOrganizationId ?? "" },
240
+ skip: !A?.application?.developerOrganizationId,
240
241
  fetchPolicy: "cache-first"
241
- }), B = A((e) => {
242
+ }), B = j((e) => {
242
243
  i?.(`${o}${e}`);
243
- }, [i, o]), Le = A(async () => {
244
- let e = j?.application?.appId;
244
+ }, [i, o]), Le = j(async () => {
245
+ let e = A?.application?.appId;
245
246
  if (e) try {
246
- let t = (await ge({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
247
- t && ue(t), ne(!1);
247
+ let t = (await he({ variables: { id: e } })).data?.rotateAppSecret.clientSecret;
248
+ t && ce(t), ne(!1);
248
249
  } catch {}
249
- }, [j?.application?.appId, ge]), Re = A(async () => {
250
+ }, [A?.application?.appId, he]), Re = j(async () => {
250
251
  if (b) try {
251
- await xe({ variables: { id: b } }), ie(!1), B("/apps");
252
+ await F({ variables: { id: b } }), ie(!1), B("/apps");
252
253
  } catch {}
253
254
  }, [
254
255
  b,
255
- xe,
256
+ F,
256
257
  B
257
- ]), ze = A(async (e) => {
258
+ ]), ze = j(async (e) => {
258
259
  if (!(!b || !c)) try {
259
260
  await De({ variables: { input: {
260
261
  applicationId: b,
@@ -262,7 +263,7 @@ var Ye = [
262
263
  workspaceId: c,
263
264
  autoUpdate: !1,
264
265
  ...e ? { version: e } : {}
265
- } } }), z(), O("success");
266
+ } } }), R(), O("success");
266
267
  } catch (e) {
267
268
  console.error("[DevPortal] Test in Workspace failed:", e), O("error");
268
269
  }
@@ -270,18 +271,18 @@ var Ye = [
270
271
  b,
271
272
  c,
272
273
  De,
273
- z
274
- ]), [Ue, We] = N(!1), [Ke, qe] = N(""), Je = A(async (e) => {
274
+ R
275
+ ]), [Be, We] = N(!1), [Ge, qe] = N(""), Je = j(async (e) => {
275
276
  try {
276
- await ke({ variables: { id: e } }), z(), O("success");
277
+ await ke({ variables: { id: e } }), R(), O("success");
277
278
  } catch {
278
279
  O("error");
279
280
  }
280
- }, [ke, z]), Xe = A(async () => {
281
+ }, [ke, R]), Ye = j(async () => {
281
282
  if (b) try {
282
- let e = (j?.application?.versions?.edges ?? []).map((e) => e.node).filter((e) => e.status === "draft");
283
+ let e = (A?.application?.versions?.edges ?? []).map((e) => e.node).filter((e) => e.status === "draft");
283
284
  for (let t of e) await Ee({ variables: { id: t.id } });
284
- await we({ variables: { id: b } }), O("success");
285
+ await I({ variables: { id: b } }), O("success");
285
286
  } catch (e) {
286
287
  console.error("[DevPortal] Submit failed:", e), O("error");
287
288
  } finally {
@@ -289,20 +290,20 @@ var Ye = [
289
290
  }
290
291
  }, [
291
292
  b,
292
- j?.application?.versions?.edges,
293
+ A?.application?.versions?.edges,
293
294
  Ee,
294
- we,
295
+ I,
295
296
  me
296
297
  ]);
297
- if (M && !j) return /* @__PURE__ */ H(n, { message: m("devportal.loadingApplication", "Loading application...") });
298
- if (pe) return /* @__PURE__ */ H(x, {
298
+ if (pe && !A) return /* @__PURE__ */ H(n, { message: m("devportal.loadingApplication", "Loading application...") });
299
+ if (M) return /* @__PURE__ */ H(x, {
299
300
  title: m("devportal.error", "Error"),
300
301
  backLink: `${o}/apps`,
301
302
  backLabel: m("devportal.backToApplications", "Back to Applications"),
302
303
  children: /* @__PURE__ */ U("div", {
303
304
  className: "flex flex-col items-center justify-center py-12 text-center",
304
305
  children: [
305
- /* @__PURE__ */ H(P, {
306
+ /* @__PURE__ */ H(ge, {
306
307
  size: 48,
307
308
  className: "text-status-error-text mb-4"
308
309
  }),
@@ -312,19 +313,19 @@ var Ye = [
312
313
  }),
313
314
  /* @__PURE__ */ H("p", {
314
315
  className: "text-sm text-text-secondary",
315
- children: pe.message
316
+ children: M.message
316
317
  })
317
318
  ]
318
319
  })
319
320
  });
320
- let G = Ge(j?.application);
321
+ let G = Ke(A?.application);
321
322
  if (!G) return /* @__PURE__ */ H(x, {
322
323
  title: m("devportal.notFound", "Not Found"),
323
324
  backLink: `${o}/apps`,
324
325
  backLabel: m("devportal.backToApplications", "Back to Applications"),
325
326
  children: /* @__PURE__ */ H(r, {
326
327
  illustration: "empty-generic",
327
- icon: /* @__PURE__ */ H(he, { size: 48 }),
328
+ icon: /* @__PURE__ */ H(_e, { size: 48 }),
328
329
  title: m("devportal.applicationNotFound", "Application not found"),
329
330
  description: m("devportal.applicationNotFoundDescription", "The application you're looking for doesn't exist or you don't have access to it.")
330
331
  })
@@ -335,33 +336,33 @@ var Ye = [
335
336
  "PARSER",
336
337
  "WIDGET",
337
338
  "DASHBOARD"
338
- ].includes(G.appType), q = G.appType === "API_INTEGRATION", J = j?.application?.versions?.totalCount ?? 0, $e = G.appType === "NODE", et = j?.application?.versions?.edges ?? [], st = et.find((e) => e.node.isLatest)?.node ?? et[0]?.node ?? null, ct = (st?.metadata ?? {}).sandboxBuildStatus, lt = $e && ct !== "READY", ut = lt ? ct === "FAILED" || ct === "DISPATCH_FAILED" ? m("devportal.testInWorkspaceBuildFailed", "Test in Workspace (sandbox build failed)") : m("devportal.testInWorkspaceBuilding", "Test in Workspace (building sandbox image…)") : m("devportal.testInWorkspace", "Test in Workspace"), Y = G.pricingType === "PAID", ft = Ie?.developerOrganization, pt = ft?.platformFeeRate ?? .3, X = !!ft?.billingAccountId, mt = G.pricingDetails ?? {}, Z = G.pricingType === "FREE" || G.pricingType === "PAID" && typeof mt.price == "number" && mt.price > 0, Q = !!G.description?.trim() && !!G.category && !!G.iconUrl && (G.visibility === "PUBLIC" || G.visibility === "UNLISTED") && (!K && !q || J > 0) && (!Y || X) && Z, $ = Q && G.status !== "PUBLISHED" && G.status !== "SUBMITTED" && G.status !== "INACTIVE" && G.status !== "REVOKED", gt = [
339
+ ].includes(G.appType), q = G.appType === "API_INTEGRATION", Ze = A?.application?.versions?.totalCount ?? 0, et = G.appType === "NODE", J = A?.application?.versions?.edges ?? [], tt = J.find((e) => e.node.isLatest)?.node ?? J[0]?.node ?? null, ct = (tt?.metadata ?? {}).sandboxBuildStatus, lt = et && ct !== "READY", ut = lt ? ct === "FAILED" || ct === "DISPATCH_FAILED" ? m("devportal.testInWorkspaceBuildFailed", "Test in Workspace (sandbox build failed)") : m("devportal.testInWorkspaceBuilding", "Test in Workspace (building sandbox image…)") : m("devportal.testInWorkspace", "Test in Workspace"), dt = G.pricingType === "PAID", pt = Ie?.developerOrganization, mt = pt?.platformFeeRate ?? .3, Y = !!pt?.billingAccountId, ht = G.pricingDetails ?? {}, X = G.pricingType === "FREE" || G.pricingType === "PAID" && typeof ht.price == "number" && ht.price > 0, Z = !!G.description?.trim() && !!G.category && !!G.iconUrl && (G.visibility === "PUBLIC" || G.visibility === "UNLISTED") && (!K && !q || Ze > 0) && (!dt || Y) && X, Q = Z && G.status !== "PUBLISHED" && G.status !== "SUBMITTED" && G.status !== "INACTIVE" && G.status !== "REVOKED", $ = [
339
340
  ...K ? [] : [{
340
341
  label: m("devportal.rotateSecret", "Rotate Secret"),
341
- icon: /* @__PURE__ */ H(Me, { size: 16 }),
342
+ icon: /* @__PURE__ */ H(Ne, { size: 16 }),
342
343
  disabled: !G.appId,
343
344
  onSelect: () => ne(!0)
344
345
  }],
345
- ...!K || $e ? Fe ? [{
346
+ ...!K || et ? z ? [{
346
347
  label: m("devportal.uninstallFromWorkspace", "Uninstall from Workspace"),
347
- icon: /* @__PURE__ */ H(Be, { size: 16 }),
348
+ icon: /* @__PURE__ */ H(Ve, { size: 16 }),
348
349
  disabled: Ae || !c,
349
- onSelect: () => void Je(Fe.id)
350
+ onSelect: () => void Je(z.id)
350
351
  }] : [{
351
352
  label: ut,
352
- icon: /* @__PURE__ */ H(Ce, { size: 16 }),
353
+ icon: /* @__PURE__ */ H(we, { size: 16 }),
353
354
  disabled: Oe || !c || lt,
354
355
  onSelect: () => {
355
- if (et.length <= 1) {
356
- ze(st?.version);
356
+ if (J.length <= 1) {
357
+ ze(tt?.version);
357
358
  return;
358
359
  }
359
- qe(st?.version ?? ""), We(!0);
360
+ qe(tt?.version ?? ""), We(!0);
360
361
  }
361
362
  }] : [],
362
363
  {
363
364
  label: m("devportal.deactivate", "Deactivate"),
364
- icon: /* @__PURE__ */ H(je, { size: 16 }),
365
+ icon: /* @__PURE__ */ H(Me, { size: 16 }),
365
366
  intent: "destructive",
366
367
  disabled: !y,
367
368
  onSelect: () => ie(!0)
@@ -377,33 +378,33 @@ var Ye = [
377
378
  className: "flex items-center gap-2",
378
379
  children: [G.status === "SUBMITTED" ? /* @__PURE__ */ U("div", {
379
380
  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",
380
- children: [/* @__PURE__ */ H(be, { size: 13 }), m("devportal.underReview", "Under Review")]
381
+ children: [/* @__PURE__ */ H(xe, { size: 13 }), m("devportal.underReview", "Under Review")]
381
382
  }) : G.status !== "PUBLISHED" && G.status !== "INACTIVE" && G.status !== "REVOKED" ? /* @__PURE__ */ H("button", {
382
383
  type: "button",
383
- onClick: () => void Xe(),
384
- disabled: !$ || Te,
385
- title: Q ? void 0 : [
384
+ onClick: () => void Ye(),
385
+ disabled: !Q || Te,
386
+ title: Z ? void 0 : [
386
387
  !G.description?.trim() && "Add full description",
387
388
  !G.category && "Select a category",
388
389
  !G.iconUrl && "Upload an app icon",
389
390
  (G.visibility === "PRIVATE" || G.visibility === "INTERNAL") && "Set visibility to Public (marketplace) or Unlisted (link sharing) — Private and Internal cannot be submitted for review",
390
- K && J === 0 && "Upload at least one version",
391
- !Z && "Set pricing (choose Free or Paid in the Pricing tab)",
392
- Y && !X && "Link a billing account to receive payments"
391
+ K && Ze === 0 && "Upload at least one version",
392
+ !X && "Set pricing (choose Free or Paid in the Pricing tab)",
393
+ dt && !Y && "Link a billing account to receive payments"
393
394
  ].filter(Boolean).join(" · "),
394
- className: t("inline-flex items-center gap-2 rounded-md px-5 py-2 text-sm font-medium whitespace-nowrap transition-colors", $ && !Te ? "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"),
395
+ className: t("inline-flex items-center gap-2 rounded-md px-5 py-2 text-sm font-medium whitespace-nowrap transition-colors", Q && !Te ? "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"),
395
396
  children: Te ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(L, {
396
397
  size: 15,
397
398
  className: "animate-spin"
398
- }), m("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(Ne, { size: 15 }), m("devportal.submitForReview", "Submit for Review")] })
399
- }) : null, /* @__PURE__ */ H(He, {
399
+ }), m("devportal.submitting", "Submitting…")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(Pe, { size: 15 }), m("devportal.submitForReview", "Submit for Review")] })
400
+ }) : null, /* @__PURE__ */ H(Ue, {
400
401
  primary: {
401
402
  label: m("devportal.editApp", "Edit App"),
402
- icon: /* @__PURE__ */ H(Se, { size: 16 }),
403
+ icon: /* @__PURE__ */ H(Ce, { size: 16 }),
403
404
  disabled: !g,
404
405
  onSelect: () => B(`/apps/${G.id}/edit`)
405
406
  },
406
- actions: gt
407
+ actions: $
407
408
  })]
408
409
  }),
409
410
  children: [
@@ -411,7 +412,7 @@ var Ye = [
411
412
  title: m("devportal.newAppSecretGenerated", "New App Secret Generated"),
412
413
  secret: se,
413
414
  description: m("devportal.appSecretRotatedDescription", "Your app secret has been rotated. The old secret is no longer valid."),
414
- onDismiss: () => ue(null)
415
+ onDismiss: () => ce(null)
415
416
  }),
416
417
  /* @__PURE__ */ U("div", {
417
418
  className: "flex flex-wrap items-center gap-2",
@@ -437,7 +438,7 @@ var Ye = [
437
438
  }),
438
439
  G.status === "SUBMITTED" && /* @__PURE__ */ U("div", {
439
440
  className: "flex items-start gap-3 rounded-lg border border-border-subtle bg-status-warning-bg-subtle p-4",
440
- children: [/* @__PURE__ */ H(be, {
441
+ children: [/* @__PURE__ */ H(xe, {
441
442
  size: 18,
442
443
  className: "text-status-warning-text mt-0.5 flex-shrink-0"
443
444
  }), /* @__PURE__ */ U("div", {
@@ -460,7 +461,7 @@ var Ye = [
460
461
  }),
461
462
  G.status === "REJECTED" && /* @__PURE__ */ U("div", {
462
463
  className: "flex items-start gap-3 rounded-lg border border-status-error-bg bg-status-error-bg-subtle p-4",
463
- children: [/* @__PURE__ */ H(Be, {
464
+ children: [/* @__PURE__ */ H(Ve, {
464
465
  size: 18,
465
466
  className: "text-status-error-text mt-0.5 flex-shrink-0"
466
467
  }), /* @__PURE__ */ U("div", {
@@ -485,7 +486,7 @@ var Ye = [
485
486
  }),
486
487
  G.status === "PUBLISHED" && /* @__PURE__ */ U("div", {
487
488
  className: "flex items-start gap-3 rounded-lg border border-status-success-bg bg-status-success-bg-subtle p-4",
488
- children: [/* @__PURE__ */ H(_e, {
489
+ children: [/* @__PURE__ */ H(ye, {
489
490
  size: 18,
490
491
  className: "text-status-success-text mt-0.5 flex-shrink-0"
491
492
  }), /* @__PURE__ */ U("div", {
@@ -501,7 +502,7 @@ var Ye = [
501
502
  }),
502
503
  G.status === "UNLISTED" && /* @__PURE__ */ U("div", {
503
504
  className: "flex items-start gap-3 rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle p-4",
504
- children: [/* @__PURE__ */ H(P, {
505
+ children: [/* @__PURE__ */ H(ge, {
505
506
  size: 18,
506
507
  className: "text-status-warning-text mt-0.5 flex-shrink-0"
507
508
  }), /* @__PURE__ */ U("div", {
@@ -526,8 +527,8 @@ var Ye = [
526
527
  ]
527
528
  })]
528
529
  }),
529
- (G.status === "DRAFT" || G.status === "REJECTED") && !Q && (() => {
530
- let e = !!G.description?.trim() && !!G.category && !!G.iconUrl && (G.visibility === "PUBLIC" || G.visibility === "UNLISTED"), n = !K && !q || J > 0, r = [
530
+ (G.status === "DRAFT" || G.status === "REJECTED") && !Z && (() => {
531
+ let e = !!G.description?.trim() && !!G.category && !!G.iconUrl && (G.visibility === "PUBLIC" || G.visibility === "UNLISTED"), n = !K && !q || Ze > 0, r = [
531
532
  !G.description?.trim() && "Add a full description",
532
533
  !G.category && "Select a category",
533
534
  !G.iconUrl && "Upload an app icon",
@@ -563,21 +564,21 @@ var Ye = [
563
564
  {
564
565
  id: "pricing",
565
566
  label: m("devportal.setupPricingStep", "Set Pricing"),
566
- hint: Z ? m("devportal.done", "Done") : m("devportal.pricingHint", "Choose Free or set a credit price in the Pricing tab"),
567
- done: Z,
567
+ hint: X ? m("devportal.done", "Done") : m("devportal.pricingHint", "Choose Free or set a credit price in the Pricing tab"),
568
+ done: X,
568
569
  onClick: () => D("pricing")
569
570
  },
570
- ...Y ? [{
571
+ ...dt ? [{
571
572
  id: "billing",
572
573
  label: m("devportal.setupBillingStep", "Link Billing Account"),
573
- hint: X ? m("devportal.done", "Done") : m("devportal.billingAccountHint", "Link a billing account to receive payouts — required for paid apps"),
574
- done: X,
574
+ hint: Y ? m("devportal.done", "Done") : m("devportal.billingAccountHint", "Link a billing account to receive payouts — required for paid apps"),
575
+ done: Y,
575
576
  onClick: () => D("pricing")
576
577
  }] : [],
577
578
  {
578
579
  id: "submit",
579
580
  label: m("devportal.submitForReview", "Submit for Review"),
580
- hint: Q ? m("devportal.readyToSubmit", "Ready — click Submit for Review above") : G.description?.trim() ? G.category ? G.iconUrl ? G.visibility === "PRIVATE" || G.visibility === "INTERNAL" ? m("devportal.hintPrivateVisibility", "Set visibility to Public (marketplace) or Unlisted (share via link) — Private and Internal cannot be submitted") : (K || q) && J === 0 ? m("devportal.hintMissingVersion", "Upload at least one version") : Z ? Y && !X ? m("devportal.hintMissingBilling", "Link a billing account in the Pricing tab to receive payouts") : m("devportal.completeStepsFirst", "Complete the steps above first") : m("devportal.hintMissingPricing", "Choose Free or set a credit price in the Pricing tab") : m("devportal.hintMissingIcon", "Upload an app icon on the Store Listing tab") : m("devportal.hintMissingCategory", "Select a category on the Store Listing tab") : m("devportal.hintMissingDescription", "Add a full description on the Store Listing tab"),
581
+ hint: Z ? m("devportal.readyToSubmit", "Ready — click Submit for Review above") : G.description?.trim() ? G.category ? G.iconUrl ? G.visibility === "PRIVATE" || G.visibility === "INTERNAL" ? m("devportal.hintPrivateVisibility", "Set visibility to Public (marketplace) or Unlisted (share via link) — Private and Internal cannot be submitted") : (K || q) && Ze === 0 ? m("devportal.hintMissingVersion", "Upload at least one version") : X ? dt && !Y ? m("devportal.hintMissingBilling", "Link a billing account in the Pricing tab to receive payouts") : m("devportal.completeStepsFirst", "Complete the steps above first") : m("devportal.hintMissingPricing", "Choose Free or set a credit price in the Pricing tab") : m("devportal.hintMissingIcon", "Upload an app icon on the Store Listing tab") : m("devportal.hintMissingCategory", "Select a category on the Store Listing tab") : m("devportal.hintMissingDescription", "Add a full description on the Store Listing tab"),
581
582
  done: !1,
582
583
  onClick: void 0
583
584
  }
@@ -590,7 +591,7 @@ var Ye = [
590
591
  className: "flex items-center gap-3",
591
592
  children: [/* @__PURE__ */ H("div", {
592
593
  className: "flex h-8 w-8 items-center justify-center rounded-full bg-action-primary-bg/10",
593
- children: /* @__PURE__ */ H(Pe, {
594
+ children: /* @__PURE__ */ H(Fe, {
594
595
  size: 16,
595
596
  className: "text-primary"
596
597
  })
@@ -619,7 +620,7 @@ var Ye = [
619
620
  children: [
620
621
  /* @__PURE__ */ H("div", {
621
622
  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"),
622
- children: e.done ? /* @__PURE__ */ H(F, { size: 13 }) : n + 1
623
+ children: e.done ? /* @__PURE__ */ H(P, { size: 13 }) : n + 1
623
624
  }),
624
625
  /* @__PURE__ */ U("div", {
625
626
  className: "flex-1 min-w-0",
@@ -631,7 +632,7 @@ var Ye = [
631
632
  children: e.hint
632
633
  })]
633
634
  }),
634
- e.onClick && !e.done && /* @__PURE__ */ H(ve, {
635
+ e.onClick && !e.done && /* @__PURE__ */ H(be, {
635
636
  size: 16,
636
637
  className: "flex-shrink-0 text-text-secondary"
637
638
  })
@@ -646,7 +647,7 @@ var Ye = [
646
647
  className: "-mb-px flex gap-4 overflow-x-auto",
647
648
  role: "tablist",
648
649
  "aria-label": m("devportal.applicationSections", "Application sections"),
649
- children: Ye.filter((e) => !(K && (e.id === "permissions" || e.id === "webhooks" || e.id === "delegations" || e.id === "playground" || e.id === "oauth" || e.id === "api-keys") || !K && !q && e.id === "versions" || !q && (e.id === "oauth" || e.id === "api-keys"))).map((e) => {
650
+ children: Xe.filter((e) => !(K && (e.id === "permissions" || e.id === "webhooks" || e.id === "delegations" || e.id === "playground" || e.id === "oauth" || e.id === "api-keys") || !K && !q && e.id === "versions" || !q && (e.id === "oauth" || e.id === "api-keys"))).map((e) => {
650
651
  let n = e.icon;
651
652
  return /* @__PURE__ */ U("button", {
652
653
  id: `application-tab-${e.id}`,
@@ -667,57 +668,57 @@ var Ye = [
667
668
  "aria-labelledby": `application-tab-${S}`,
668
669
  tabIndex: 0,
669
670
  children: [
670
- S === "overview" && /* @__PURE__ */ H(ot, {
671
+ S === "overview" && /* @__PURE__ */ H(st, {
671
672
  app: G,
672
673
  appId: b,
673
674
  refetch: () => void me()
674
675
  }),
675
- S === "permissions" && /* @__PURE__ */ H(xt, {
676
+ S === "permissions" && /* @__PURE__ */ H(St, {
676
677
  app: G,
677
- versionScopes: j?.application?.versions?.edges?.[0]?.node?.requiredScopes ?? [],
678
+ versionScopes: A?.application?.versions?.edges?.[0]?.node?.requiredScopes ?? [],
678
679
  locked: G.status === "PUBLISHED" || G.status === "APPROVED" || G.status === "ACTIVE",
679
680
  onNavigateToVersions: () => D("versions")
680
681
  }),
681
- S === "webhooks" && /* @__PURE__ */ H(rt, {
682
+ S === "webhooks" && /* @__PURE__ */ H(it, {
682
683
  appId: G.id,
683
684
  onNavigate: B
684
685
  }),
685
- S === "delegations" && /* @__PURE__ */ H(it, {
686
+ S === "delegations" && /* @__PURE__ */ H(at, {
686
687
  authAppId: G.appId || void 0,
687
688
  appName: G.name,
688
689
  onGrantDelegation: () => fe(!0),
689
690
  onNavigate: B
690
691
  }),
691
- S === "analytics" && /* @__PURE__ */ H(at, { appId: G.id }),
692
- S === "playground" && /* @__PURE__ */ H(dt, { app: G }),
693
- S === "oauth" && /* @__PURE__ */ H(Ze, {
692
+ S === "analytics" && /* @__PURE__ */ H(ot, { appId: G.id }),
693
+ S === "playground" && /* @__PURE__ */ H(ft, { app: G }),
694
+ S === "oauth" && /* @__PURE__ */ H(Qe, {
694
695
  appId: G.id,
695
696
  onNavigate: B
696
697
  }),
697
- S === "api-keys" && /* @__PURE__ */ H(Qe, {
698
+ S === "api-keys" && /* @__PURE__ */ H($e, {
698
699
  appId: G.id,
699
700
  onNavigate: B
700
701
  }),
701
- S === "store-listing" && /* @__PURE__ */ H(ht, {
702
+ S === "store-listing" && /* @__PURE__ */ H(gt, {
702
703
  app: G,
703
- versionCount: j?.application?.versions?.totalCount ?? 0,
704
+ versionCount: A?.application?.versions?.totalCount ?? 0,
704
705
  isPackageApp: K,
705
- pricingDone: Z,
706
+ pricingDone: X,
706
707
  onNavigateToVersions: K || q ? () => D("versions") : void 0,
707
708
  onNavigateToPricing: () => D("pricing"),
708
709
  onNavigateToSubmission: () => B(`/apps/${G.id}/store-submission`)
709
710
  }),
710
- S === "pricing" && /* @__PURE__ */ H(tt, {
711
+ S === "pricing" && /* @__PURE__ */ H(nt, {
711
712
  app: G,
712
- platformFeeRate: pt,
713
- billingAccountLinked: X,
713
+ platformFeeRate: mt,
714
+ billingAccountLinked: Y,
714
715
  onNavigateToRevenue: () => B("/revenue"),
715
- isReadyToSubmit: Q
716
+ isReadyToSubmit: Z
716
717
  }),
717
- S === "versions" && /* @__PURE__ */ H(nt, {
718
+ S === "versions" && /* @__PURE__ */ H(rt, {
718
719
  appId: G.id,
719
720
  onNavigate: B,
720
- pricingDone: Z,
721
+ pricingDone: X,
721
722
  onNavigateToPricing: () => D("pricing")
722
723
  })
723
724
  ]
@@ -731,7 +732,7 @@ var Ye = [
731
732
  confirmLabel: m("devportal.rotateSecret", "Rotate Secret"),
732
733
  cancelLabel: m("devportal.cancel", "Cancel"),
733
734
  variant: "warning",
734
- loading: ye
735
+ loading: ve
735
736
  }),
736
737
  /* @__PURE__ */ H(ae, {
737
738
  open: k,
@@ -742,12 +743,12 @@ var Ye = [
742
743
  confirmLabel: m("devportal.deactivate", "Deactivate"),
743
744
  cancelLabel: m("devportal.cancel", "Cancel"),
744
745
  variant: "destructive",
745
- loading: I
746
+ loading: Se
746
747
  }),
747
748
  /* @__PURE__ */ H(ae, {
748
- open: Ue,
749
+ open: Be,
749
750
  onOpenChange: We,
750
- onConfirm: () => ze(Ke || void 0),
751
+ onConfirm: () => ze(Ge || void 0),
751
752
  title: m("devportal.testInWorkspaceChooseVersion", "Test a Version"),
752
753
  description: m("devportal.testInWorkspaceChooseVersionDescription", "Choose which version to install into your test workspace. This does not affect what other users see — it only installs the selected version for you to try here."),
753
754
  confirmLabel: m("devportal.testInWorkspace", "Test in Workspace"),
@@ -755,9 +756,9 @@ var Ye = [
755
756
  loading: Oe,
756
757
  children: /* @__PURE__ */ H(re, {
757
758
  label: m("devportal.version", "Version"),
758
- value: Ke,
759
+ value: Ge,
759
760
  onChange: (e) => qe(e.target.value),
760
- options: et.map((e) => ({
761
+ options: J.map((e) => ({
761
762
  value: e.node.version,
762
763
  label: e.node.isLatest ? `${e.node.version} — ${m("devportal.latest", "latest")} (${e.node.status})` : `${e.node.version} (${e.node.status})`
763
764
  }))
@@ -775,7 +776,7 @@ var Ye = [
775
776
  })
776
777
  ]
777
778
  });
778
- }, Ze = ({ onNavigate: e }) => {
779
+ }, Qe = ({ onNavigate: e }) => {
779
780
  let { t } = W(), n = (e, n) => {
780
781
  let r = t(e);
781
782
  return r === e ? n : r;
@@ -799,7 +800,7 @@ var Ye = [
799
800
  })
800
801
  ]
801
802
  });
802
- }, Qe = ({ onNavigate: e }) => {
803
+ }, $e = ({ onNavigate: e }) => {
803
804
  let { t } = W(), n = (e, n) => {
804
805
  let r = t(e);
805
806
  return r === e ? n : r;
@@ -807,7 +808,7 @@ var Ye = [
807
808
  return /* @__PURE__ */ U("div", {
808
809
  className: "space-y-4 py-4 text-center",
809
810
  children: [
810
- /* @__PURE__ */ H(Ee, { className: "mx-auto h-10 w-10 text-text-secondary" }),
811
+ /* @__PURE__ */ H(De, { className: "mx-auto h-10 w-10 text-text-secondary" }),
811
812
  /* @__PURE__ */ H("h3", {
812
813
  className: "font-medium",
813
814
  children: n("devportal.apiKeys", "API Keys")
@@ -823,15 +824,15 @@ var Ye = [
823
824
  })
824
825
  ]
825
826
  });
826
- }, J = .01, $e = (e) => e * J, et = (e) => Math.round(e / J), tt = ({ app: e, platformFeeRate: n, billingAccountLinked: r, onNavigateToRevenue: i, isReadyToSubmit: a = !1 }) => {
827
+ }, et = .01, J = (e) => e * et, tt = (e) => Math.round(e / et), nt = ({ app: e, platformFeeRate: n, billingAccountLinked: r, onNavigateToRevenue: i, isReadyToSubmit: a = !1 }) => {
827
828
  let { t: o } = W(), s = (e, t) => {
828
829
  let n = o(e);
829
830
  return n === e ? t : n;
830
831
  }, c = e.pricingDetails ?? {}, [l, u] = N({
831
832
  pricingType: e.pricingType ?? "FREE",
832
833
  price: typeof c.price == "number" ? String(c.price) : ""
833
- }), [d, f] = N(!1), [p] = b(), m = pe(e);
834
- m.current = e, j(() => {
834
+ }), [d, f] = N(!1), [p] = b(), m = me(e);
835
+ m.current = e, pe(() => {
835
836
  let e = m.current.pricingDetails ?? {};
836
837
  u({
837
838
  pricingType: m.current.pricingType ?? "FREE",
@@ -863,7 +864,7 @@ var Ye = [
863
864
  } finally {
864
865
  f(!1);
865
866
  }
866
- }, _ = l.pricingType !== "FREE", v = parseInt(l.price, 10), y = _ && !isNaN(v) && v > 0, x = y ? $e(v) : 0, S = y ? Math.round(v * n) : 0, C = $e(S), w = y ? v - S : 0, T = $e(w), E = (e) => "$" + e.toLocaleString("en-US", {
867
+ }, _ = l.pricingType !== "FREE", v = parseInt(l.price, 10), y = _ && !isNaN(v) && v > 0, x = y ? J(v) : 0, S = y ? Math.round(v * n) : 0, C = J(S), w = y ? v - S : 0, T = J(w), E = (e) => "$" + e.toLocaleString("en-US", {
867
868
  minimumFractionDigits: 2,
868
869
  maximumFractionDigits: 2
869
870
  }), D = (e) => e.toLocaleString("en-US") + " cr";
@@ -872,7 +873,7 @@ var Ye = [
872
873
  children: [
873
874
  /* @__PURE__ */ U("div", {
874
875
  className: "flex items-start gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
875
- children: [/* @__PURE__ */ H(ye, {
876
+ children: [/* @__PURE__ */ H(F, {
876
877
  size: 16,
877
878
  className: "mt-0.5 shrink-0 text-primary"
878
879
  }), /* @__PURE__ */ U("p", {
@@ -889,7 +890,7 @@ var Ye = [
889
890
  className: "font-medium",
890
891
  children: [
891
892
  "1 credit = ",
892
- E(J),
893
+ E(et),
893
894
  " USD."
894
895
  ]
895
896
  }),
@@ -913,7 +914,7 @@ var Ye = [
913
914
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
914
915
  children: [/* @__PURE__ */ H("div", {
915
916
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-success-bg-subtle",
916
- children: /* @__PURE__ */ H(Fe, {
917
+ children: /* @__PURE__ */ H(Ie, {
917
918
  size: 18,
918
919
  className: "text-status-success-text"
919
920
  })
@@ -945,7 +946,7 @@ var Ye = [
945
946
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
946
947
  children: [/* @__PURE__ */ H("div", {
947
948
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-action-primary-bg/10",
948
- children: /* @__PURE__ */ H(Le, {
949
+ children: /* @__PURE__ */ H(Re, {
949
950
  size: 18,
950
951
  className: "text-primary"
951
952
  })
@@ -974,7 +975,7 @@ var Ye = [
974
975
  className: "rounded-xl border border-border-subtle bg-bg-surface p-5 space-y-3",
975
976
  children: [/* @__PURE__ */ H("div", {
976
977
  className: "flex h-9 w-9 items-center justify-center rounded-lg bg-status-warning-bg-subtle",
977
- children: /* @__PURE__ */ H(we, {
978
+ children: /* @__PURE__ */ H(Te, {
978
979
  size: 18,
979
980
  className: "text-status-warning-text"
980
981
  })
@@ -1008,7 +1009,7 @@ var Ye = [
1008
1009
  })] }),
1009
1010
  /* @__PURE__ */ H("div", {
1010
1011
  className: "flex flex-wrap gap-2",
1011
- children: ft.map((e) => /* @__PURE__ */ H("button", {
1012
+ children: mt.map((e) => /* @__PURE__ */ H("button", {
1012
1013
  type: "button",
1013
1014
  onClick: () => h("pricingType", e.value),
1014
1015
  className: t("rounded-md border px-4 py-2 text-sm font-medium transition-colors", l.pricingType === e.value ? "bg-action-primary-bg text-action-primary-text border-primary" : "hover:bg-bg-sunken border-border-subtle"),
@@ -1054,7 +1055,7 @@ var Ye = [
1054
1055
  E(x),
1055
1056
  " USD at the current credit rate (1 cr =",
1056
1057
  " ",
1057
- E(J),
1058
+ E(et),
1058
1059
  ")"
1059
1060
  ]
1060
1061
  }),
@@ -1073,13 +1074,13 @@ var Ye = [
1073
1074
  50
1074
1075
  ].map((e) => /* @__PURE__ */ U("button", {
1075
1076
  type: "button",
1076
- onClick: () => h("price", String(et(e))),
1077
+ onClick: () => h("price", String(tt(e))),
1077
1078
  className: "rounded border border-border-subtle px-2 py-0.5 hover:bg-bg-sunken transition-colors",
1078
1079
  children: [
1079
1080
  "$",
1080
1081
  e,
1081
1082
  " = ",
1082
- et(e).toLocaleString(),
1083
+ tt(e).toLocaleString(),
1083
1084
  " cr"
1084
1085
  ]
1085
1086
  }, e))]
@@ -1169,7 +1170,7 @@ var Ye = [
1169
1170
  }),
1170
1171
  !r && /* @__PURE__ */ U("div", {
1171
1172
  className: "flex items-start gap-3 rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle p-4",
1172
- children: [/* @__PURE__ */ H(P, {
1173
+ children: [/* @__PURE__ */ H(ge, {
1173
1174
  size: 16,
1174
1175
  className: "mt-0.5 shrink-0 text-status-warning-text"
1175
1176
  }), /* @__PURE__ */ U("div", {
@@ -1206,14 +1207,14 @@ var Ye = [
1206
1207
  children: [
1207
1208
  /* @__PURE__ */ U("li", {
1208
1209
  className: "flex items-start gap-2",
1209
- children: [/* @__PURE__ */ H(F, {
1210
+ children: [/* @__PURE__ */ H(P, {
1210
1211
  size: 14,
1211
1212
  className: "mt-0.5 shrink-0 text-status-success-text"
1212
1213
  }), /* @__PURE__ */ U("span", { children: [
1213
1214
  "By publishing to the marketplace you agree to the",
1214
1215
  " ",
1215
1216
  /* @__PURE__ */ H("a", {
1216
- href: "/legal/developer-terms",
1217
+ href: ce.developerAgreement,
1217
1218
  target: "_blank",
1218
1219
  rel: "noopener noreferrer",
1219
1220
  className: "text-primary underline-offset-2 hover:underline",
@@ -1224,21 +1225,21 @@ var Ye = [
1224
1225
  }),
1225
1226
  /* @__PURE__ */ U("li", {
1226
1227
  className: "flex items-start gap-2",
1227
- children: [/* @__PURE__ */ H(F, {
1228
+ children: [/* @__PURE__ */ H(P, {
1228
1229
  size: 14,
1229
1230
  className: "mt-0.5 shrink-0 text-status-success-text"
1230
1231
  }), /* @__PURE__ */ H("span", { children: "All prices are in platform credits. The USD equivalent is indicative only and may vary with the current credit rate." })]
1231
1232
  }),
1232
1233
  /* @__PURE__ */ U("li", {
1233
1234
  className: "flex items-start gap-2",
1234
- children: [/* @__PURE__ */ H(F, {
1235
+ children: [/* @__PURE__ */ H(P, {
1235
1236
  size: 14,
1236
1237
  className: "mt-0.5 shrink-0 text-status-success-text"
1237
1238
  }), /* @__PURE__ */ H("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." })]
1238
1239
  }),
1239
1240
  /* @__PURE__ */ U("li", {
1240
1241
  className: "flex items-start gap-2",
1241
- children: [/* @__PURE__ */ H(F, {
1242
+ children: [/* @__PURE__ */ H(P, {
1242
1243
  size: 14,
1243
1244
  className: "mt-0.5 shrink-0 text-status-success-text"
1244
1245
  }), /* @__PURE__ */ U("span", { children: [
@@ -1268,10 +1269,10 @@ var Ye = [
1268
1269
  children: d ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(L, {
1269
1270
  size: 16,
1270
1271
  className: "animate-spin"
1271
- }), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(ye, { size: 16 }), s("devportal.savePricing", "Save Pricing")] })
1272
+ }), s("devportal.saving", "Saving…")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(F, { size: 16 }), s("devportal.savePricing", "Save Pricing")] })
1272
1273
  }), a && /* @__PURE__ */ U("div", {
1273
1274
  className: "flex items-start gap-3 rounded-lg border border-status-success-bg bg-status-success-bg-subtle px-4 py-3",
1274
- children: [/* @__PURE__ */ H(F, {
1275
+ children: [/* @__PURE__ */ H(P, {
1275
1276
  size: 16,
1276
1277
  className: "mt-0.5 shrink-0 text-status-success-text"
1277
1278
  }), /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
@@ -1285,7 +1286,7 @@ var Ye = [
1285
1286
  })
1286
1287
  ]
1287
1288
  });
1288
- }, nt = ({ appId: e, onNavigate: n, pricingDone: i = !1, onNavigateToPricing: a }) => {
1289
+ }, rt = ({ appId: e, onNavigate: n, pricingDone: i = !1, onNavigateToPricing: a }) => {
1289
1290
  let { t: o } = W(), s = (e, t) => {
1290
1291
  let n = o(e);
1291
1292
  return n === e ? t : n;
@@ -1293,8 +1294,8 @@ var Ye = [
1293
1294
  variables: { applicationId: e },
1294
1295
  fetchPolicy: "cache-and-network"
1295
1296
  });
1296
- if (u) return /* @__PURE__ */ H(G, { message: s("devportal.loadingVersions", "Loading versions…") });
1297
- if (d) return /* @__PURE__ */ H(K, { message: d.message });
1297
+ if (u) return /* @__PURE__ */ H(K, { message: s("devportal.loadingVersions", "Loading versions…") });
1298
+ if (d) return /* @__PURE__ */ H(q, { message: d.message });
1298
1299
  let f = (l?.application?.versions?.edges ?? []).map((e) => e.node);
1299
1300
  return /* @__PURE__ */ U("div", {
1300
1301
  className: "space-y-4",
@@ -1311,7 +1312,7 @@ var Ye = [
1311
1312
  }), /* @__PURE__ */ U("button", {
1312
1313
  onClick: () => n(`/apps/${e}/versions`),
1313
1314
  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",
1314
- children: [/* @__PURE__ */ H(Ie, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1315
+ children: [/* @__PURE__ */ H(B, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1315
1316
  })]
1316
1317
  }),
1317
1318
  f.length > 0 ? /* @__PURE__ */ H("div", {
@@ -1404,19 +1405,19 @@ var Ye = [
1404
1405
  })
1405
1406
  }) : /* @__PURE__ */ H(r, {
1406
1407
  illustration: "empty-generic",
1407
- icon: /* @__PURE__ */ H(Ae, { size: 32 }),
1408
+ icon: /* @__PURE__ */ H(je, { size: 32 }),
1408
1409
  title: s("devportal.noVersions", "No versions yet"),
1409
1410
  description: s("devportal.noVersionsDescription", "Upload your first version to make this item available for review and distribution."),
1410
1411
  action: /* @__PURE__ */ U("button", {
1411
1412
  onClick: () => n(`/apps/${e}/versions`),
1412
1413
  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",
1413
- children: [/* @__PURE__ */ H(Ie, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1414
+ children: [/* @__PURE__ */ H(B, { size: 16 }), s("devportal.uploadVersion", "Upload Version")]
1414
1415
  })
1415
1416
  }),
1416
1417
  f.length > 0 && !i && a && /* @__PURE__ */ U("div", {
1417
1418
  className: "mt-4 flex items-center gap-3 rounded-lg border border-border-subtle bg-bg-sunken px-4 py-3",
1418
1419
  children: [
1419
- /* @__PURE__ */ H(ye, {
1420
+ /* @__PURE__ */ H(F, {
1420
1421
  size: 16,
1421
1422
  className: "shrink-0 text-primary"
1422
1423
  }),
@@ -1428,41 +1429,41 @@ var Ye = [
1428
1429
  type: "button",
1429
1430
  onClick: a,
1430
1431
  className: "inline-flex items-center gap-1 text-sm font-medium text-primary hover:underline underline-offset-2 whitespace-nowrap",
1431
- children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */ H(ve, { size: 15 })]
1432
+ children: [s("devportal.nextSetPricing", "Set Pricing"), /* @__PURE__ */ H(be, { size: 15 })]
1432
1433
  })
1433
1434
  ]
1434
1435
  })
1435
1436
  ]
1436
1437
  });
1437
- }, rt = ({ appId: e, onNavigate: t }) => {
1438
+ }, it = ({ appId: e, onNavigate: t }) => {
1438
1439
  let { t: n } = W(), r = (e, t) => {
1439
1440
  let r = n(e);
1440
1441
  return r === e ? t : r;
1441
1442
  }, { data: i, loading: a, error: o } = u({ variables: { applicationId: e } });
1442
- return a ? /* @__PURE__ */ H(G, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ H(K, { message: o.message }) : /* @__PURE__ */ H(st, {
1443
+ return a ? /* @__PURE__ */ H(K, { message: r("devportal.loadingWebhooks", "Loading webhooks...") }) : o ? /* @__PURE__ */ H(q, { message: o.message }) : /* @__PURE__ */ H(ct, {
1443
1444
  appId: e,
1444
- webhooks: (i?.webhooks ?? []).map(Ke),
1445
+ webhooks: (i?.webhooks ?? []).map(qe),
1445
1446
  onNavigate: t
1446
1447
  });
1447
- }, it = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: a }) => {
1448
+ }, at = ({ authAppId: e, appName: t, onGrantDelegation: n, onNavigate: a }) => {
1448
1449
  let { t: o } = W(), s = (e, t) => {
1449
1450
  let n = o(e);
1450
1451
  return n === e ? t : n;
1451
- }, { data: c, loading: l, error: u, refetch: d } = i(), [f] = m(), [p, h] = N([]), [g, _] = N(!1), [v, y] = N(/* @__PURE__ */ new Set()), [b, x] = N(null), S = M(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(Je) : [], [e, c]), C = M(() => S.filter((e) => e.status === "ACTIVE"), [S]), w = M(() => C.filter((e) => v.has(e.id)), [C, v]), T = C.length > 0 && C.every((e) => v.has(e.id)), E = C.some((e) => v.has(e.id)) && !T, D = A((e, t) => {
1452
+ }, { data: c, loading: l, error: u, refetch: d } = i(), [f] = m(), [p, h] = N([]), [g, _] = N(!1), [v, y] = N(/* @__PURE__ */ new Set()), [b, x] = N(null), S = M(() => c?.currentUserDelegations?.delegations ? c.currentUserDelegations.delegations.filter((t) => t.appId === e).map(Ye) : [], [e, c]), C = M(() => S.filter((e) => e.status === "ACTIVE"), [S]), w = M(() => C.filter((e) => v.has(e.id)), [C, v]), T = C.length > 0 && C.every((e) => v.has(e.id)), E = C.some((e) => v.has(e.id)) && !T, D = j((e, t) => {
1452
1453
  y((n) => {
1453
1454
  let r = new Set(n);
1454
1455
  return t ? r.add(e) : r.delete(e), r;
1455
1456
  });
1456
- }, []), O = A((e) => {
1457
+ }, []), O = j((e) => {
1457
1458
  y((t) => {
1458
1459
  let n = new Set(t);
1459
1460
  return C.forEach((t) => {
1460
1461
  e ? n.add(t.id) : n.delete(t.id);
1461
1462
  }), n;
1462
1463
  });
1463
- }, [C]), ee = A(() => {
1464
+ }, [C]), ee = j(() => {
1464
1465
  y(/* @__PURE__ */ new Set());
1465
- }, []), te = A(async (e) => {
1466
+ }, []), te = j(async (e) => {
1466
1467
  _(!0);
1467
1468
  try {
1468
1469
  let t = await Promise.allSettled(e.map((e) => f({ variables: { id: e } }))), n = t.filter((e) => e.status === "fulfilled").length, r = t.length - n;
@@ -1474,7 +1475,7 @@ var Ye = [
1474
1475
  _(!1);
1475
1476
  }
1476
1477
  }, [f, d]);
1477
- return e ? l ? /* @__PURE__ */ H(G, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : u ? /* @__PURE__ */ H(K, { message: u.message }) : /* @__PURE__ */ U(V, { children: [
1478
+ return e ? l ? /* @__PURE__ */ H(K, { message: s("devportal.loadingDelegations", "Loading delegations...") }) : u ? /* @__PURE__ */ H(q, { message: u.message }) : /* @__PURE__ */ U(V, { children: [
1478
1479
  b && /* @__PURE__ */ H("div", {
1479
1480
  className: "rounded-lg border border-border-subtle bg-status-success-bg-subtle p-3 text-sm text-status-success-text",
1480
1481
  children: /* @__PURE__ */ U("div", {
@@ -1486,7 +1487,7 @@ var Ye = [
1486
1487
  })]
1487
1488
  })
1488
1489
  }),
1489
- /* @__PURE__ */ H(ct, {
1490
+ /* @__PURE__ */ H(lt, {
1490
1491
  appName: t,
1491
1492
  delegations: S,
1492
1493
  onGrantDelegation: n,
@@ -1525,7 +1526,7 @@ var Ye = [
1525
1526
  children: [/* @__PURE__ */ H(I, { size: 16 }), s("devportal.manageOAuthApps", "Manage OAuth Apps")]
1526
1527
  })
1527
1528
  });
1528
- }, at = ({ appId: e }) => {
1529
+ }, ot = ({ appId: e }) => {
1529
1530
  let { t } = W(), n = (e, n) => {
1530
1531
  let r = t(e);
1531
1532
  return r === e ? n : r;
@@ -1538,8 +1539,8 @@ var Ye = [
1538
1539
  }, [r]).toISOString(),
1539
1540
  endDate: r.toISOString()
1540
1541
  } });
1541
- return a ? /* @__PURE__ */ H(G, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : s ? /* @__PURE__ */ H(K, { message: s.message }) : /* @__PURE__ */ H(lt, { analytics: (i?.applicationAnalytics ?? []).map(qe) });
1542
- }, ot = ({ app: e, appId: t, refetch: n }) => {
1542
+ return a ? /* @__PURE__ */ H(K, { message: n("devportal.loadingAnalytics", "Loading analytics...") }) : s ? /* @__PURE__ */ H(q, { message: s.message }) : /* @__PURE__ */ H(ut, { analytics: (i?.applicationAnalytics ?? []).map(Je) });
1543
+ }, st = ({ app: e, appId: t, refetch: n }) => {
1543
1544
  let { t: r } = W(), i = (e, t) => {
1544
1545
  let n = r(e);
1545
1546
  return n === e ? t : n;
@@ -1554,7 +1555,7 @@ var Ye = [
1554
1555
  className: "flex items-start gap-3",
1555
1556
  children: [/* @__PURE__ */ H("div", {
1556
1557
  className: "mt-0.5 flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-full bg-action-primary-bg-subtle",
1557
- children: /* @__PURE__ */ H(De, {
1558
+ children: /* @__PURE__ */ H(Oe, {
1558
1559
  size: 15,
1559
1560
  className: "text-action-primary-text"
1560
1561
  })
@@ -1585,7 +1586,7 @@ var Ye = [
1585
1586
  u(!0), setTimeout(() => u(!1), 2e3);
1586
1587
  });
1587
1588
  },
1588
- children: [H(l ? F : xe, { size: 12 }), l ? i("devportal.copied", "Copied!") : i("devportal.copyLink", "Copy Link")]
1589
+ children: [H(l ? P : Se, { size: 12 }), l ? i("devportal.copied", "Copied!") : i("devportal.copyLink", "Copy Link")]
1589
1590
  })]
1590
1591
  })
1591
1592
  ] })]
@@ -1608,7 +1609,7 @@ var Ye = [
1608
1609
  children: [/* @__PURE__ */ U("div", {
1609
1610
  className: "lg:col-span-2 space-y-6",
1610
1611
  children: [
1611
- /* @__PURE__ */ H(Ue, { children: /* @__PURE__ */ U("div", {
1612
+ /* @__PURE__ */ H(We, { children: /* @__PURE__ */ U("div", {
1612
1613
  className: "grid gap-4 sm:grid-cols-4",
1613
1614
  children: [
1614
1615
  /* @__PURE__ */ H(Z, {
@@ -1631,7 +1632,7 @@ var Ye = [
1631
1632
  }) }),
1632
1633
  /* @__PURE__ */ H(S, {
1633
1634
  title: i("devportal.description", "Description"),
1634
- children: e.description ? /* @__PURE__ */ H(me, {
1635
+ children: e.description ? /* @__PURE__ */ H(he, {
1635
1636
  className: "prose prose-sm max-w-none",
1636
1637
  children: e.description
1637
1638
  }) : /* @__PURE__ */ H("p", {
@@ -1743,7 +1744,7 @@ var Ye = [
1743
1744
  })]
1744
1745
  })]
1745
1746
  });
1746
- }, st = ({ appId: e, webhooks: t, onNavigate: n }) => {
1747
+ }, ct = ({ appId: e, webhooks: t, onNavigate: n }) => {
1747
1748
  let { t: i } = W(), a = (e, t) => {
1748
1749
  let n = i(e);
1749
1750
  return n === e ? t : n;
@@ -1788,7 +1789,7 @@ var Ye = [
1788
1789
  })] }), /* @__PURE__ */ H("button", {
1789
1790
  onClick: () => n(`/apps/${e}/webhooks/${t.id}`),
1790
1791
  className: "rounded-md p-1 hover:bg-bg-sunken",
1791
- children: /* @__PURE__ */ H(ke, { size: 20 })
1792
+ children: /* @__PURE__ */ H(Ae, { size: 20 })
1792
1793
  })]
1793
1794
  }),
1794
1795
  /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
@@ -1845,7 +1846,7 @@ var Ye = [
1845
1846
  }, t.id))
1846
1847
  }) : /* @__PURE__ */ H(r, {
1847
1848
  illustration: "empty-notifications",
1848
- icon: /* @__PURE__ */ H(Re, { size: 32 }),
1849
+ icon: /* @__PURE__ */ H(ze, { size: 32 }),
1849
1850
  title: a("devportal.noWebhooks", "No webhooks"),
1850
1851
  description: a("devportal.noWebhooksDescription", "Add a webhook to receive event notifications"),
1851
1852
  action: /* @__PURE__ */ U("button", {
@@ -1855,7 +1856,7 @@ var Ye = [
1855
1856
  })
1856
1857
  })]
1857
1858
  });
1858
- }, ct = ({ appName: e, delegations: n, onGrantDelegation: i, onRevokeDelegation: a, selectedDelegationIds: o, onToggleSelectDelegation: s, onToggleAllDelegations: c, onClearSelection: l, onRevokeSelected: u, allVisibleSelected: d, partiallySelected: f }) => {
1859
+ }, lt = ({ appName: e, delegations: n, onGrantDelegation: i, onRevokeDelegation: a, selectedDelegationIds: o, onToggleSelectDelegation: s, onToggleAllDelegations: c, onClearSelection: l, onRevokeSelected: u, allVisibleSelected: d, partiallySelected: f }) => {
1859
1860
  let { t: p } = W(), m = (e, t) => {
1860
1861
  let n = p(e);
1861
1862
  return n === e ? t : n;
@@ -1957,7 +1958,7 @@ var Ye = [
1957
1958
  className: "font-medium",
1958
1959
  children: ["Delegation #", e.id.slice(0, 8)]
1959
1960
  }), /* @__PURE__ */ H("span", {
1960
- className: t("rounded-full px-2 py-0.5 text-xs font-medium", Xe[e.status]),
1961
+ className: t("rounded-full px-2 py-0.5 text-xs font-medium", G[e.status]),
1961
1962
  children: e.status
1962
1963
  })]
1963
1964
  }), /* @__PURE__ */ U("p", {
@@ -1975,7 +1976,7 @@ var Ye = [
1975
1976
  }), e.status === "ACTIVE" && /* @__PURE__ */ U("button", {
1976
1977
  onClick: () => a(e.id),
1977
1978
  className: "inline-flex items-center gap-1.5 rounded-md border border-border-subtle px-3 py-1.5 text-xs font-medium text-status-error-text hover:bg-status-error-bg-subtle transition-colors",
1978
- children: [/* @__PURE__ */ H(Be, { size: 14 }), m("devportal.revoke", "Revoke")]
1979
+ children: [/* @__PURE__ */ H(Ve, { size: 14 }), m("devportal.revoke", "Revoke")]
1979
1980
  })]
1980
1981
  }),
1981
1982
  /* @__PURE__ */ U("div", { children: [/* @__PURE__ */ H("p", {
@@ -2004,7 +2005,7 @@ var Ye = [
2004
2005
  e.expiresAt && /* @__PURE__ */ U("span", {
2005
2006
  className: "flex items-center gap-1",
2006
2007
  children: [
2007
- /* @__PURE__ */ H(be, { size: 12 }),
2008
+ /* @__PURE__ */ H(xe, { size: 12 }),
2008
2009
  m("devportal.expires", "Expires"),
2009
2010
  " ",
2010
2011
  new Date(e.expiresAt).toLocaleDateString()
@@ -2012,7 +2013,7 @@ var Ye = [
2012
2013
  }),
2013
2014
  !e.expiresAt && e.status === "ACTIVE" && /* @__PURE__ */ U("span", {
2014
2015
  className: "flex items-center gap-1",
2015
- children: [/* @__PURE__ */ H(_e, {
2016
+ children: [/* @__PURE__ */ H(ye, {
2016
2017
  size: 12,
2017
2018
  className: "text-status-success-text"
2018
2019
  }), m("devportal.noExpiration", "No expiration")]
@@ -2020,7 +2021,7 @@ var Ye = [
2020
2021
  e.revokedAt && /* @__PURE__ */ U("span", {
2021
2022
  className: "flex items-center gap-1",
2022
2023
  children: [
2023
- /* @__PURE__ */ H(Be, {
2024
+ /* @__PURE__ */ H(Ve, {
2024
2025
  size: 12,
2025
2026
  className: "text-status-error-text"
2026
2027
  }),
@@ -2035,7 +2036,7 @@ var Ye = [
2035
2036
  }, e.id))
2036
2037
  }) : /* @__PURE__ */ H(r, {
2037
2038
  illustration: "empty-people",
2038
- icon: /* @__PURE__ */ H(B, { size: 32 }),
2039
+ icon: /* @__PURE__ */ H(Le, { size: 32 }),
2039
2040
  title: m("devportal.noDelegations", "No delegations"),
2040
2041
  description: m("devportal.noDelegationsDescription", "Grant a delegation to allow this app to act on your behalf"),
2041
2042
  action: /* @__PURE__ */ U("button", {
@@ -2046,7 +2047,7 @@ var Ye = [
2046
2047
  })
2047
2048
  ]
2048
2049
  });
2049
- }, lt = ({ analytics: e }) => {
2050
+ }, ut = ({ analytics: e }) => {
2050
2051
  let { t } = W(), n = (e, n) => {
2051
2052
  let r = t(e);
2052
2053
  return r === e ? n : r;
@@ -2121,17 +2122,17 @@ var Ye = [
2121
2122
  ]
2122
2123
  }) : /* @__PURE__ */ H(r, {
2123
2124
  illustration: "empty-data",
2124
- icon: /* @__PURE__ */ H(ge, { size: 32 }),
2125
+ icon: /* @__PURE__ */ H(ve, { size: 32 }),
2125
2126
  title: n("devportal.noAnalyticsData", "No analytics data"),
2126
2127
  description: n("devportal.noAnalyticsDataDescription", "Analytics data will appear here once the application starts receiving traffic.")
2127
2128
  })
2128
2129
  })]
2129
2130
  });
2130
- }, ut = "# Sample query — replace with your own\n# Note: introspection is disabled on this gateway for security.\n# Use a real query from your app's API schema instead.\nquery GetCurrentUser {\n currentUser {\n id\n email\n }\n}", dt = ({ app: t }) => {
2131
+ }, dt = "# Sample query — replace with your own\n# Note: introspection is disabled on this gateway for security.\n# Use a real query from your app's API schema instead.\nquery GetCurrentUser {\n currentUser {\n id\n email\n }\n}", ft = ({ app: t }) => {
2131
2132
  let { apiGatewayUrl: n, workspacesGatewayUrl: r, authToken: i } = e(), { t: a } = W(), o = (e, t) => {
2132
2133
  let n = a(e);
2133
2134
  return n === e ? t : n;
2134
- }, [s, c] = N(ut), [l, u] = N("{}"), [d, f] = N(""), [p, m] = N(!1), [h, g] = N(`${n || "https://gw-global.local.burdenoff.com"}/global/graphql`), [_, v] = N(i || ""), [y, b] = N(!1), x = A(async () => {
2135
+ }, [s, c] = N(dt), [l, u] = N("{}"), [d, f] = N(""), [p, m] = N(!1), [h, g] = N(`${n || "https://gw-global.local.burdenoff.com"}/global/graphql`), [_, v] = N(i || ""), [y, b] = N(!1), x = j(async () => {
2135
2136
  m(!0), f("");
2136
2137
  try {
2137
2138
  let e = {};
@@ -2162,7 +2163,7 @@ var Ye = [
2162
2163
  l,
2163
2164
  h,
2164
2165
  _
2165
- ]), S = A(() => {
2166
+ ]), S = j(() => {
2166
2167
  i && v(i), b(!0);
2167
2168
  }, [i]);
2168
2169
  return /* @__PURE__ */ U("div", {
@@ -2191,7 +2192,7 @@ var Ye = [
2191
2192
  })] }), /* @__PURE__ */ U("button", {
2192
2193
  onClick: S,
2193
2194
  className: "flex items-center gap-2 rounded-md border px-3 py-1.5 text-sm font-medium hover:bg-accent transition-colors",
2194
- children: [/* @__PURE__ */ H(Ee, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
2195
+ children: [/* @__PURE__ */ H(De, { size: 14 }), o("devportal.autoFillCredentials", "Auto-fill Credentials")]
2195
2196
  })]
2196
2197
  }),
2197
2198
  y && /* @__PURE__ */ U("div", {
@@ -2306,13 +2307,13 @@ var Ye = [
2306
2307
  })] })
2307
2308
  ]
2308
2309
  });
2309
- }, Y = new Set(["workflow", "template"]), ft = [{
2310
+ }, pt = new Set(["workflow", "template"]), mt = [{
2310
2311
  value: "FREE",
2311
2312
  label: "Free"
2312
2313
  }, {
2313
2314
  value: "PAID",
2314
2315
  label: "Paid"
2315
- }], pt = {
2316
+ }], Y = {
2316
2317
  NODE: [
2317
2318
  {
2318
2319
  value: "node",
@@ -2384,12 +2385,12 @@ var Ye = [
2384
2385
  label: "Plugin"
2385
2386
  }
2386
2387
  ]
2387
- }, X = {
2388
+ }, ht = {
2388
2389
  NODE: "node",
2389
2390
  WORKFLOW: "workflow",
2390
2391
  APP: "app"
2391
2392
  };
2392
- function mt(e) {
2393
+ function X(e) {
2393
2394
  let t = e.manifest ?? {}, n = t.identity ?? {}, r = (t.digital ?? {}).install ?? {}, i = t.compatibility ?? {}, a = Array.isArray(t.permissions) ? t.permissions : [], o = Array.isArray(e.screenshots) ? e.screenshots.join("\n") : "";
2394
2395
  return {
2395
2396
  iconUrl: e.iconUrl ?? "",
@@ -2404,7 +2405,7 @@ function mt(e) {
2404
2405
  supportUrl: e.supportUrl ?? "",
2405
2406
  privacyPolicyUrl: e.privacyPolicyUrl ?? "",
2406
2407
  termsOfServiceUrl: e.termsOfServiceUrl ?? "",
2407
- manifestItemType: typeof t.itemType == "string" ? t.itemType : X[e.appType] ?? "",
2408
+ manifestItemType: typeof t.itemType == "string" ? t.itemType : ht[e.appType] ?? "",
2408
2409
  manifestDisplayName: typeof n.displayName == "string" ? n.displayName : e.name ?? "",
2409
2410
  manifestVersion: typeof n.version == "string" ? n.version : "",
2410
2411
  manifestInstallType: typeof r.type == "string" ? r.type : "zip",
@@ -2415,15 +2416,15 @@ function mt(e) {
2415
2416
  manifestJsonContent: typeof t.jsonContent == "string" ? t.jsonContent : typeof t.content == "string" ? t.content : ""
2416
2417
  };
2417
2418
  }
2418
- var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i = !1, onNavigateToVersions: a, onNavigateToPricing: o, onNavigateToSubmission: s }) => {
2419
+ var gt = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i = !1, onNavigateToVersions: a, onNavigateToPricing: o, onNavigateToSubmission: s }) => {
2419
2420
  let { workspacesGatewayUrl: c, authToken: l, workspaceId: u, getWorkspaceToken: d } = e(), { t: f } = W(), p = (e, t) => {
2420
2421
  let n = f(e);
2421
2422
  return n === e ? t : n;
2422
- }, [m, h] = N(() => mt(t)), [g, _] = N(!1), [v, y] = N(null), x = pe(mt(t)), C = pe(t);
2423
+ }, [m, h] = N(() => X(t)), [g, _] = N(!1), [v, y] = N(null), x = me(X(t)), C = me(t);
2423
2424
  C.current = t;
2424
2425
  let w = JSON.stringify(m) !== JSON.stringify(x.current), [T] = b();
2425
- j(() => {
2426
- let e = mt(C.current);
2426
+ pe(() => {
2427
+ let e = X(C.current);
2427
2428
  h(e), x.current = e, y(null);
2428
2429
  }, [t.id]);
2429
2430
  let E = (e, t) => {
@@ -2434,7 +2435,7 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2434
2435
  }, D = m.shortDescription.trim().length > 0 && m.privacyPolicyUrl.trim().length > 0 && m.termsOfServiceUrl.trim().length > 0, ee = async () => {
2435
2436
  _(!0), y(null);
2436
2437
  try {
2437
- let e = m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean), n = m.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), r = Y.has(m.manifestItemType), i = t.manifest ?? {}, a = {
2438
+ let e = m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean), n = m.manifestPermissionsText.split("\n").map((e) => e.trim()).filter(Boolean), r = pt.has(m.manifestItemType), i = t.manifest ?? {}, a = {
2438
2439
  manifestVersion: typeof i.manifestVersion == "string" ? i.manifestVersion : "1.0",
2439
2440
  itemType: m.manifestItemType || void 0,
2440
2441
  identity: {
@@ -2471,13 +2472,13 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2471
2472
  } finally {
2472
2473
  _(!1);
2473
2474
  }
2474
- }, { upload: te, uploading: ne, progress: ae, error: oe } = fe(c, l, u, d, "/DevPortal/Assets"), { upload: ce, uploading: le, progress: A, error: M } = fe(c, l, u, d, "/DevPortal/Assets"), { upload: me, uploading: he, progress: ge, error: ye } = fe(c, l, u, d, "/DevPortal/Assets"), xe = Y.has(m.manifestItemType), Se = t.status === "SUBMITTED";
2475
+ }, { upload: te, uploading: ne, progress: ae, error: oe } = A(c, l, u, d, "/DevPortal/Assets"), { upload: ce, uploading: le, progress: ue, error: j } = A(c, l, u, d, "/DevPortal/Assets"), { upload: M, uploading: he, progress: _e, error: ve } = A(c, l, u, d, "/DevPortal/Assets"), F = pt.has(m.manifestItemType), Se = t.status === "SUBMITTED";
2475
2476
  return /* @__PURE__ */ U("div", {
2476
2477
  className: "space-y-8 max-w-3xl",
2477
2478
  children: [
2478
2479
  t.status === "PUBLISHED" ? /* @__PURE__ */ U("div", {
2479
2480
  className: "flex items-start gap-3 rounded-lg border border-success/30 bg-success/10 px-4 py-3",
2480
- children: [/* @__PURE__ */ H(_e, {
2481
+ children: [/* @__PURE__ */ H(ye, {
2481
2482
  size: 16,
2482
2483
  className: "text-success mt-0.5 shrink-0"
2483
2484
  }), /* @__PURE__ */ U("div", {
@@ -2498,7 +2499,7 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2498
2499
  className: "flex items-center justify-between gap-3 rounded-lg border border-primary/30 bg-action-primary-bg/5 px-4 py-3",
2499
2500
  children: [/* @__PURE__ */ U("div", {
2500
2501
  className: "flex items-start gap-3",
2501
- children: [/* @__PURE__ */ H(be, {
2502
+ children: [/* @__PURE__ */ H(xe, {
2502
2503
  size: 16,
2503
2504
  className: "text-primary mt-0.5 shrink-0"
2504
2505
  }), /* @__PURE__ */ U("div", {
@@ -2526,7 +2527,7 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2526
2527
  })]
2527
2528
  }) : /* @__PURE__ */ U("div", {
2528
2529
  className: "flex items-start gap-3 rounded-lg border border-warning/30 bg-warning/5 px-4 py-3",
2529
- children: [/* @__PURE__ */ H(P, {
2530
+ children: [/* @__PURE__ */ H(ge, {
2530
2531
  size: 16,
2531
2532
  className: "text-warning mt-0.5 shrink-0"
2532
2533
  }), /* @__PURE__ */ U("div", {
@@ -2551,9 +2552,9 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2551
2552
  value: m.manifestItemType,
2552
2553
  onChange: (e) => {
2553
2554
  let t = e.target.value;
2554
- E("manifestItemType", t), Y.has(t) ? E("manifestInstallType", "json") : m.manifestInstallType === "json" && E("manifestInstallType", "zip");
2555
+ E("manifestItemType", t), pt.has(t) ? E("manifestInstallType", "json") : m.manifestInstallType === "json" && E("manifestInstallType", "zip");
2555
2556
  },
2556
- options: pt[t.appType] ?? pt.APP,
2557
+ options: Y[t.appType] ?? Y.APP,
2557
2558
  placeholder: p("devportal.selectItemType", "Select item type…"),
2558
2559
  hint: p("devportal.storeItemTypeHint", "Sub-category shown in the marketplace (e.g. Node vs Agent vs Parser)")
2559
2560
  }),
@@ -2563,7 +2564,7 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2563
2564
  onChange: (e) => E("manifestDisplayName", e.target.value),
2564
2565
  placeholder: "My Awesome Node"
2565
2566
  }),
2566
- xe && /* @__PURE__ */ H(ie, {
2567
+ F && /* @__PURE__ */ H(ie, {
2567
2568
  label: t.appType === "WORKFLOW" ? p("devportal.workflowJsonContent", "Workflow Canvas Definition (JSON)") : p("devportal.jsonContent", "Template Definition (JSON)"),
2568
2569
  value: m.manifestJsonContent,
2569
2570
  onChange: (e) => E("manifestJsonContent", e.target.value),
@@ -2582,7 +2583,7 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2582
2583
  children: [
2583
2584
  /* @__PURE__ */ U("div", {
2584
2585
  className: "grid gap-5 sm:grid-cols-2",
2585
- children: [/* @__PURE__ */ H(ue, {
2586
+ children: [/* @__PURE__ */ H(de, {
2586
2587
  label: p("devportal.iconUrl", "Icon"),
2587
2588
  value: m.iconUrl,
2588
2589
  onChange: (e) => E("iconUrl", e),
@@ -2592,7 +2593,7 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2592
2593
  uploading: ne,
2593
2594
  progress: ae,
2594
2595
  error: oe
2595
- }), /* @__PURE__ */ H(ue, {
2596
+ }), /* @__PURE__ */ H(de, {
2596
2597
  label: p("devportal.bannerUrl", "Banner"),
2597
2598
  value: m.bannerUrl,
2598
2599
  onChange: (e) => E("bannerUrl", e),
@@ -2600,8 +2601,8 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2600
2601
  aspectClass: "aspect-square",
2601
2602
  upload: ce,
2602
2603
  uploading: le,
2603
- progress: A,
2604
- error: M
2604
+ progress: ue,
2605
+ error: j
2605
2606
  })]
2606
2607
  }),
2607
2608
  /* @__PURE__ */ H(k, {
@@ -2626,13 +2627,13 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2626
2627
  rows: 5,
2627
2628
  hint: p("devportal.fullDescHint", "Markdown supported")
2628
2629
  }),
2629
- /* @__PURE__ */ H(de, {
2630
+ /* @__PURE__ */ H(fe, {
2630
2631
  urls: m.screenshotsText.split("\n").map((e) => e.trim()).filter(Boolean),
2631
2632
  onChange: (e) => E("screenshotsText", e.join("\n")),
2632
- upload: me,
2633
+ upload: M,
2633
2634
  uploading: he,
2634
- progress: ge,
2635
- error: ye
2635
+ progress: _e,
2636
+ error: ve
2636
2637
  })
2637
2638
  ]
2638
2639
  })
@@ -2689,14 +2690,14 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2689
2690
  children: [
2690
2691
  v === "success" && /* @__PURE__ */ U("div", {
2691
2692
  className: "flex items-center gap-2 rounded-md border border-success/30 bg-success/10 px-3 py-2 text-sm text-success",
2692
- children: [/* @__PURE__ */ H(_e, {
2693
+ children: [/* @__PURE__ */ H(ye, {
2693
2694
  size: 15,
2694
2695
  className: "shrink-0"
2695
2696
  }), p("devportal.storeListing.savedSuccess", "Store listing saved successfully.")]
2696
2697
  }),
2697
2698
  v === "error" && /* @__PURE__ */ U("div", {
2698
2699
  className: "flex items-center gap-2 rounded-md border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive",
2699
- children: [/* @__PURE__ */ H(P, {
2700
+ children: [/* @__PURE__ */ H(ge, {
2700
2701
  size: 15,
2701
2702
  className: "shrink-0"
2702
2703
  }), p("devportal.storeListing.savedError", "Failed to save. Please try again.")]
@@ -2713,7 +2714,7 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2713
2714
  children: g ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(L, {
2714
2715
  size: 16,
2715
2716
  className: "animate-spin"
2716
- }), p("devportal.saving", "Saving…")] }) : w ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(Pe, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(F, { size: 16 }), p("devportal.saved", "Saved")] })
2717
+ }), p("devportal.saving", "Saving…")] }) : w ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(Fe, { size: 16 }), p("devportal.saveStoreListing", "Save Store Listing")] }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(P, { size: 16 }), p("devportal.saved", "Saved")] })
2717
2718
  }),
2718
2719
  !D && /* @__PURE__ */ H("p", {
2719
2720
  className: "text-xs text-text-secondary",
@@ -2723,13 +2724,13 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2723
2724
  type: "button",
2724
2725
  onClick: a,
2725
2726
  className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
2726
- children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */ H(ve, { size: 15 })]
2727
+ children: [p("devportal.nextUploadVersion", "Next: Upload a Version"), /* @__PURE__ */ H(be, { size: 15 })]
2727
2728
  }),
2728
2729
  (!r || n > 0) && !i && o && /* @__PURE__ */ U("button", {
2729
2730
  type: "button",
2730
2731
  onClick: o,
2731
2732
  className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline underline-offset-2",
2732
- children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */ H(ve, { size: 15 })]
2733
+ children: [p("devportal.nextSetPricing", "Next: Set Pricing"), /* @__PURE__ */ H(be, { size: 15 })]
2733
2734
  })
2734
2735
  ]
2735
2736
  })
@@ -2739,7 +2740,7 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2739
2740
  });
2740
2741
  }, Z = ({ label: e, value: n, trend: r }) => {
2741
2742
  let { t: i } = W();
2742
- return /* @__PURE__ */ U(We, {
2743
+ return /* @__PURE__ */ U(Ge, {
2743
2744
  treatment: "metric",
2744
2745
  className: "p-4",
2745
2746
  children: [
@@ -2828,8 +2829,8 @@ var ht = ({ app: t, versionCount: n = 0, isPackageApp: r = !1, pricingDone: i =
2828
2829
  label: "Roles & Permissions",
2829
2830
  description: "Access control configuration"
2830
2831
  }
2831
- }, gt = Object.keys($);
2832
- function _t(e) {
2832
+ }, _t = Object.keys($);
2833
+ function vt(e) {
2833
2834
  if (!e || !Array.isArray(e.permissions)) return [];
2834
2835
  let t = [];
2835
2836
  for (let n of e.permissions) n && typeof n == "object" && typeof n.resource == "string" && n.resource && t.push({
@@ -2838,7 +2839,7 @@ function _t(e) {
2838
2839
  });
2839
2840
  return t;
2840
2841
  }
2841
- function vt(e) {
2842
+ function yt(e) {
2842
2843
  let t = [];
2843
2844
  for (let n of e) {
2844
2845
  let e = n.indexOf(":");
@@ -2851,12 +2852,12 @@ function vt(e) {
2851
2852
  }
2852
2853
  return t;
2853
2854
  }
2854
- function yt(e, t) {
2855
+ function bt(e, t) {
2855
2856
  if (e.length > 0) return e;
2856
2857
  let n = /* @__PURE__ */ new Set();
2857
2858
  return t.filter((e) => n.has(e.resource) ? !1 : (n.add(e.resource), !0));
2858
2859
  }
2859
- var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ H("div", {
2860
+ var xt = ({ level: e, onChange: t }) => /* @__PURE__ */ H("div", {
2860
2861
  className: "flex items-center gap-0.5 rounded-md border border-border-subtle bg-bg-sunken/50 p-0.5",
2861
2862
  children: ["read", "write"].map((n) => /* @__PURE__ */ H("button", {
2862
2863
  type: "button",
@@ -2864,8 +2865,8 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ H("div", {
2864
2865
  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"}`,
2865
2866
  children: n === "read" ? "Read" : "Read & Write"
2866
2867
  }, n))
2867
- }), xt = ({ app: e, versionScopes: t, locked: n = !1, onNavigateToVersions: r }) => {
2868
- let i = e.manifest ?? {}, [a, o] = N(() => yt(_t(i), vt(t ?? []))), [s, c] = N(!1), [l, u] = N(""), [d, f] = N("read"), [p, m] = N(!1), [h, g] = N(!1), [_] = b(), v = (e, t) => {
2868
+ }), St = ({ app: e, versionScopes: t, locked: n = !1, onNavigateToVersions: r }) => {
2869
+ let i = e.manifest ?? {}, [a, o] = N(() => bt(vt(i), yt(t ?? []))), [s, c] = N(!1), [l, u] = N(""), [d, f] = N("read"), [p, m] = N(!1), [h, g] = N(!1), [_] = b(), v = (e, t) => {
2869
2870
  g(!1), o((n) => n.map((n) => n.resource === e ? {
2870
2871
  ...n,
2871
2872
  level: t
@@ -2917,7 +2918,7 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ H("div", {
2917
2918
  }), n ? /* @__PURE__ */ H("span", {
2918
2919
  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"}`,
2919
2920
  children: e.level === "write" ? "Read & Write" : "Read"
2920
- }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(bt, {
2921
+ }) : /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ H(xt, {
2921
2922
  level: e.level,
2922
2923
  onChange: (t) => v(e.resource, t)
2923
2924
  }), /* @__PURE__ */ H("button", {
@@ -2925,7 +2926,7 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ H("div", {
2925
2926
  onClick: () => y(e.resource),
2926
2927
  title: "Remove permission",
2927
2928
  className: "p-1.5 rounded text-text-tertiary hover:text-status-error-text hover:bg-status-error-bg-subtle transition-colors",
2928
- children: /* @__PURE__ */ H(ze, { size: 14 })
2929
+ children: /* @__PURE__ */ H(Be, { size: 14 })
2929
2930
  })] })]
2930
2931
  }, e.resource))
2931
2932
  });
@@ -2936,7 +2937,7 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ H("div", {
2936
2937
  className: "space-y-4",
2937
2938
  children: n ? /* @__PURE__ */ U(V, { children: [/* @__PURE__ */ U("div", {
2938
2939
  className: "rounded-lg border border-status-warning-bg bg-status-warning-bg-subtle p-3 flex gap-2 text-sm",
2939
- children: [/* @__PURE__ */ H(Te, {
2940
+ children: [/* @__PURE__ */ H(Ee, {
2940
2941
  size: 15,
2941
2942
  className: "flex-shrink-0 mt-0.5 text-status-warning-text"
2942
2943
  }), /* @__PURE__ */ U("span", {
@@ -2991,12 +2992,12 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ H("div", {
2991
2992
  }),
2992
2993
  /* @__PURE__ */ H("datalist", {
2993
2994
  id: "perm-resource-suggestions",
2994
- children: gt.filter((e) => !a.some((t) => t.resource === e)).map((e) => /* @__PURE__ */ H("option", {
2995
+ children: _t.filter((e) => !a.some((t) => t.resource === e)).map((e) => /* @__PURE__ */ H("option", {
2995
2996
  value: e,
2996
2997
  children: $[e].label
2997
2998
  }, e))
2998
2999
  }),
2999
- /* @__PURE__ */ H(bt, {
3000
+ /* @__PURE__ */ H(xt, {
3000
3001
  level: d,
3001
3002
  onChange: f
3002
3003
  }),
@@ -3013,7 +3014,7 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ H("div", {
3013
3014
  c(!1), u("");
3014
3015
  },
3015
3016
  className: "p-1.5 rounded text-text-secondary hover:text-text-primary transition-colors",
3016
- children: /* @__PURE__ */ H(ze, { size: 14 })
3017
+ children: /* @__PURE__ */ H(Be, { size: 14 })
3017
3018
  })
3018
3019
  ]
3019
3020
  }) : /* @__PURE__ */ U("button", {
@@ -3024,7 +3025,7 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ H("div", {
3024
3025
  }),
3025
3026
  /* @__PURE__ */ U("div", {
3026
3027
  className: "rounded-lg border border-border-subtle bg-bg-sunken/30 p-3 flex gap-2 text-xs text-text-secondary",
3027
- children: [/* @__PURE__ */ H(Te, {
3028
+ children: [/* @__PURE__ */ H(Ee, {
3028
3029
  size: 14,
3029
3030
  className: "flex-shrink-0 mt-0.5"
3030
3031
  }), /* @__PURE__ */ U("span", { children: [/* @__PURE__ */ H("strong", { children: "Read & Write" }), " implies Read. Request only what your app genuinely needs — fewer permissions build more user trust."] })]
@@ -3033,7 +3034,7 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ H("div", {
3033
3034
  className: "flex items-center justify-end gap-3",
3034
3035
  children: [h && /* @__PURE__ */ U("span", {
3035
3036
  className: "flex items-center gap-1.5 text-sm text-status-success-text",
3036
- children: [/* @__PURE__ */ H(_e, { size: 14 }), "Saved"]
3037
+ children: [/* @__PURE__ */ H(ye, { size: 14 }), "Saved"]
3037
3038
  }), /* @__PURE__ */ U("button", {
3038
3039
  type: "button",
3039
3040
  onClick: () => void C(),
@@ -3050,6 +3051,6 @@ var bt = ({ level: e, onChange: t }) => /* @__PURE__ */ H("div", {
3050
3051
  });
3051
3052
  };
3052
3053
  //#endregion
3053
- export { q as ApplicationDetailPage };
3054
+ export { Ze as ApplicationDetailPage };
3054
3055
 
3055
3056
  //# sourceMappingURL=ApplicationDetailPage.js.map