@burdenoff/microfe-devportal 2026.1112.2 → 2026.1113.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.
- package/dist/devportal/DevportalRoot.js +65 -119
- package/dist/devportal/DevportalRoot.js.map +1 -1
- package/dist/devportal/components/AppCard.js +72 -69
- package/dist/devportal/components/AppCard.js.map +1 -1
- package/dist/devportal/components/DeveloperSettingsHub.d.ts +6 -0
- package/dist/devportal/components/DeveloperSettingsHub.js +59 -0
- package/dist/devportal/components/DeveloperSettingsHub.js.map +1 -0
- package/dist/devportal/components/ImageUploadField.js +82 -80
- package/dist/devportal/components/ImageUploadField.js.map +1 -1
- package/dist/devportal/components/SectionNav.d.ts +1 -1
- package/dist/devportal/components/SectionNav.js +60 -36
- package/dist/devportal/components/SectionNav.js.map +1 -1
- package/dist/devportal/components/StoreImage.d.ts +15 -0
- package/dist/devportal/components/StoreImage.js +30 -0
- package/dist/devportal/components/StoreImage.js.map +1 -0
- package/dist/devportal/components/index.d.ts +1 -0
- package/dist/devportal/components/index.js +17 -16
- package/dist/devportal/hooks/usePackageUpload.d.ts +46 -4
- package/dist/devportal/hooks/usePackageUpload.js +90 -36
- package/dist/devportal/hooks/usePackageUpload.js.map +1 -1
- package/dist/devportal/pages/AdminReviewPage.js +205 -202
- package/dist/devportal/pages/AdminReviewPage.js.map +1 -1
- package/dist/devportal/pages/AnalyticsDashboardPage.js +186 -179
- package/dist/devportal/pages/AnalyticsDashboardPage.js.map +1 -1
- package/dist/devportal/pages/ApiKeysPage.js +113 -111
- package/dist/devportal/pages/ApiKeysPage.js.map +1 -1
- package/dist/devportal/pages/AppLogsPage.js +80 -84
- package/dist/devportal/pages/AppLogsPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationDetailPage.js +529 -504
- package/dist/devportal/pages/ApplicationDetailPage.js.map +1 -1
- package/dist/devportal/pages/ApplicationsPage.js +186 -183
- package/dist/devportal/pages/ApplicationsPage.js.map +1 -1
- package/dist/devportal/pages/CreateApiKeyPage.js +163 -166
- package/dist/devportal/pages/CreateApiKeyPage.js.map +1 -1
- package/dist/devportal/pages/CreateOAuthClientPage.js +134 -130
- package/dist/devportal/pages/CreateOAuthClientPage.js.map +1 -1
- package/dist/devportal/pages/CreatePhysicalItemPage.js +2 -2
- package/dist/devportal/pages/CreatePhysicalItemPage.js.map +1 -1
- package/dist/devportal/pages/DelegationsPage.js +11 -11
- package/dist/devportal/pages/DocumentationPage.js +100 -94
- package/dist/devportal/pages/DocumentationPage.js.map +1 -1
- package/dist/devportal/pages/EditApplicationPage.js +379 -377
- package/dist/devportal/pages/EditApplicationPage.js.map +1 -1
- package/dist/devportal/pages/EditPhysicalItemPage.js +312 -307
- package/dist/devportal/pages/EditPhysicalItemPage.js.map +1 -1
- package/dist/devportal/pages/InvitationDecisionPage.js +83 -79
- package/dist/devportal/pages/InvitationDecisionPage.js.map +1 -1
- package/dist/devportal/pages/ListingPreviewPage.js +175 -171
- package/dist/devportal/pages/ListingPreviewPage.js.map +1 -1
- package/dist/devportal/pages/OAuthClientDetailPage.js +76 -76
- package/dist/devportal/pages/OAuthClientDetailPage.js.map +1 -1
- package/dist/devportal/pages/OAuthClientsPage.js +126 -124
- package/dist/devportal/pages/OAuthClientsPage.js.map +1 -1
- package/dist/devportal/pages/OrganizationDetailPage.js +19 -19
- package/dist/devportal/pages/OrganizationMembersPage.js +223 -204
- package/dist/devportal/pages/OrganizationMembersPage.js.map +1 -1
- package/dist/devportal/pages/ResourcesPage.d.ts +6 -0
- package/dist/devportal/pages/ResourcesPage.js +171 -155
- package/dist/devportal/pages/ResourcesPage.js.map +1 -1
- package/dist/devportal/pages/SellerDashboardPage.js +117 -115
- package/dist/devportal/pages/SellerDashboardPage.js.map +1 -1
- package/dist/devportal/pages/SellerItemsPage.js +202 -199
- package/dist/devportal/pages/SellerItemsPage.js.map +1 -1
- package/dist/devportal/pages/SettingsPage.js +330 -315
- package/dist/devportal/pages/SettingsPage.js.map +1 -1
- package/dist/devportal/pages/SetupPage.js +5 -5
- package/dist/devportal/pages/StoreSubmissionPage.js +133 -131
- package/dist/devportal/pages/StoreSubmissionPage.js.map +1 -1
- package/dist/devportal/pages/WebhookDetailPage.js +6 -6
- package/dist/devportal/pages/WebhooksPage.js +39 -39
- package/dist/devportal/pages/WebhooksPage.js.map +1 -1
- package/dist/devportal/utils/appDetailTabs.d.ts +73 -0
- package/dist/devportal/utils/appDetailTabs.js +62 -0
- package/dist/devportal/utils/appDetailTabs.js.map +1 -0
- package/dist/devportal/utils/developerNav.d.ts +39 -0
- package/dist/devportal/utils/developerNav.js +304 -0
- package/dist/devportal/utils/developerNav.js.map +1 -0
- package/package.json +2 -2
|
@@ -3,362 +3,377 @@ import { EmptyState as n } from "../components/EmptyState.js";
|
|
|
3
3
|
import { VerifiedBadge as r } from "../components/StatusBadge.js";
|
|
4
4
|
import { useGetDeveloperPortalSettingsOverviewQuery as i } from "../../generated/global-operations.js";
|
|
5
5
|
import { getErrorMessage as a } from "../hooks/useGraphQL.js";
|
|
6
|
-
import {
|
|
6
|
+
import { DeveloperSettingsHub as o } from "../components/DeveloperSettingsHub.js";
|
|
7
|
+
import { useDevportal as s, useIsFluidgridsVariant as c } from "../providers/DevportalProvider.js";
|
|
7
8
|
import "../hooks/index.js";
|
|
8
|
-
import { useTr as
|
|
9
|
-
import { AlertCircle as
|
|
10
|
-
import { jsx as
|
|
11
|
-
import { EmphasisPanel as
|
|
9
|
+
import { useTr as l } from "../utils/i18n.js";
|
|
10
|
+
import { AlertCircle as u, Building2 as d, ExternalLink as f, KeyRound as p, Loader2 as m, Mail as h, Settings as g, Shield as _, UserCircle2 as v, Webhook as y, Workflow as b } from "lucide-react";
|
|
11
|
+
import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
|
|
12
|
+
import { EmphasisPanel as w, OptionalFields as T } from "@burdenoff/fe-libs/ui";
|
|
12
13
|
// src/devportal/pages/SettingsPage.tsx
|
|
13
|
-
var
|
|
14
|
+
var E = (e, t) => {
|
|
14
15
|
if (!e) return t;
|
|
15
16
|
let n = new Date(e);
|
|
16
17
|
return Number.isNaN(n.getTime()) ? t : n.toLocaleDateString();
|
|
17
|
-
},
|
|
18
|
-
let
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
18
|
+
}, D = ({ fold: e, children: t }) => {
|
|
19
|
+
let n = l();
|
|
20
|
+
return e ? /* @__PURE__ */ S(T, {
|
|
21
|
+
storageKey: "devportal.settings.healthCheck",
|
|
22
|
+
title: n("devportal.developerSettings.healthTitle", "Account check"),
|
|
23
|
+
description: n("devportal.developerSettings.healthDescription", "Your developer profile, credentials, organizations and support options."),
|
|
24
|
+
children: t
|
|
25
|
+
}) : /* @__PURE__ */ S(x, { children: t });
|
|
26
|
+
}, O = () => {
|
|
27
|
+
let { navigate: x, basePath: T } = s(), O = l(), k = c(), { data: A, loading: j, error: M } = i({ fetchPolicy: "cache-and-network" }), N = (e) => {
|
|
28
|
+
x?.(`${T}${e}`);
|
|
29
|
+
}, P = O("devportal.settings.never", "Never"), F = k ? O("devportal.developerSettings.title", "Developer settings") : O("devportal.settings.title", "Settings"), I = k ? O("devportal.developerSettings.description", "API keys, OAuth apps, webhooks, apps acting for you, app logs, analytics and docs in one place") : O("devportal.settings.description", "Review your developer portal account, credentials, and support options"), L = k ? /* @__PURE__ */ S("div", {
|
|
30
|
+
className: "mb-6",
|
|
31
|
+
children: /* @__PURE__ */ S(o, {})
|
|
32
|
+
}) : null;
|
|
33
|
+
if (j && !A) return /* @__PURE__ */ C(e, {
|
|
34
|
+
title: F,
|
|
35
|
+
description: I,
|
|
36
|
+
children: [L, /* @__PURE__ */ S("div", {
|
|
25
37
|
className: "flex items-center justify-center py-16 text-text-secondary",
|
|
26
38
|
role: "status",
|
|
27
39
|
"aria-live": "polite",
|
|
28
|
-
"aria-label":
|
|
29
|
-
children: /* @__PURE__ */
|
|
30
|
-
})
|
|
40
|
+
"aria-label": O("devportal.common.loading", "Loading"),
|
|
41
|
+
children: /* @__PURE__ */ S(m, { className: "h-8 w-8 animate-spin" })
|
|
42
|
+
})]
|
|
31
43
|
});
|
|
32
|
-
if (
|
|
33
|
-
title:
|
|
34
|
-
description:
|
|
35
|
-
children: /* @__PURE__ */
|
|
36
|
-
icon: /* @__PURE__ */
|
|
44
|
+
if (M) return /* @__PURE__ */ C(e, {
|
|
45
|
+
title: F,
|
|
46
|
+
description: I,
|
|
47
|
+
children: [L, /* @__PURE__ */ S(n, {
|
|
48
|
+
icon: /* @__PURE__ */ S(u, {
|
|
37
49
|
size: 32,
|
|
38
50
|
className: "text-status-error-text"
|
|
39
51
|
}),
|
|
40
|
-
title:
|
|
41
|
-
description: a(
|
|
42
|
-
})
|
|
52
|
+
title: O("devportal.settings.errorTitle", "Unable to load settings"),
|
|
53
|
+
description: a(M)
|
|
54
|
+
})]
|
|
43
55
|
});
|
|
44
|
-
let
|
|
45
|
-
return /* @__PURE__ */
|
|
46
|
-
title:
|
|
47
|
-
description:
|
|
48
|
-
purpose:
|
|
49
|
-
children: /* @__PURE__ */
|
|
50
|
-
|
|
51
|
-
children:
|
|
52
|
-
className: "
|
|
53
|
-
children: [
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
children:
|
|
59
|
-
className: "
|
|
60
|
-
children: [
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
/* @__PURE__ */ y("h2", {
|
|
69
|
-
className: "text-lg font-semibold",
|
|
70
|
-
children: T("devportal.settings.developerProfile", "Developer profile")
|
|
71
|
-
}),
|
|
72
|
-
N?.isVerified && /* @__PURE__ */ y(r, { verified: !0 })
|
|
73
|
-
]
|
|
74
|
-
}),
|
|
75
|
-
/* @__PURE__ */ y("p", {
|
|
76
|
-
className: "text-sm text-text-secondary",
|
|
77
|
-
children: N?.companyName || T("devportal.settings.noCompanyName", "No company name set yet")
|
|
78
|
-
}),
|
|
79
|
-
N?.bio && /* @__PURE__ */ y("p", {
|
|
80
|
-
className: "max-w-2xl text-sm text-text-secondary",
|
|
81
|
-
children: N.bio
|
|
82
|
-
}),
|
|
83
|
-
/* @__PURE__ */ b("div", {
|
|
84
|
-
className: "flex flex-wrap gap-2 pt-1 text-xs text-text-secondary",
|
|
85
|
-
children: [
|
|
86
|
-
/* @__PURE__ */ b("span", {
|
|
87
|
-
className: "rounded-full bg-bg-sunken px-2.5 py-1",
|
|
88
|
-
children: [
|
|
89
|
-
N?.applicationCount ?? 0,
|
|
90
|
-
" ",
|
|
91
|
-
T("devportal.settings.publishedAssetsTracked", "published assets tracked")
|
|
92
|
-
]
|
|
93
|
-
}),
|
|
94
|
-
/* @__PURE__ */ b("span", {
|
|
95
|
-
className: "rounded-full bg-bg-sunken px-2.5 py-1",
|
|
96
|
-
children: [
|
|
97
|
-
N?.totalInstalls ?? 0,
|
|
98
|
-
" ",
|
|
99
|
-
T("devportal.settings.installs", "installs")
|
|
100
|
-
]
|
|
101
|
-
}),
|
|
102
|
-
/* @__PURE__ */ b("span", {
|
|
103
|
-
className: "rounded-full bg-bg-sunken px-2.5 py-1",
|
|
104
|
-
children: [
|
|
105
|
-
T("devportal.settings.emailUpdates", "Email updates"),
|
|
106
|
-
" ",
|
|
107
|
-
N?.emailNotifications ? T("devportal.common.enabled", "enabled") : T("devportal.common.disabled", "disabled")
|
|
108
|
-
]
|
|
109
|
-
})
|
|
110
|
-
]
|
|
111
|
-
})
|
|
112
|
-
]
|
|
113
|
-
}), /* @__PURE__ */ b("button", {
|
|
114
|
-
type: "button",
|
|
115
|
-
onClick: () => k("/publisher/profile"),
|
|
116
|
-
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 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
|
|
117
|
-
children: [/* @__PURE__ */ y(m, {
|
|
118
|
-
size: 16,
|
|
119
|
-
"aria-hidden": "true"
|
|
120
|
-
}), T("devportal.settings.manageProfile", "Manage profile")]
|
|
121
|
-
})]
|
|
122
|
-
}) })
|
|
123
|
-
}),
|
|
124
|
-
/* @__PURE__ */ b("div", {
|
|
125
|
-
className: "grid gap-6 lg:grid-cols-2",
|
|
126
|
-
children: [/* @__PURE__ */ y(t, {
|
|
127
|
-
title: T("devportal.settings.credentials", "Credentials"),
|
|
128
|
-
children: /* @__PURE__ */ y("div", {
|
|
129
|
-
className: "rounded-card border border-border-seam bg-bg-surface p-6",
|
|
130
|
-
children: /* @__PURE__ */ b("div", {
|
|
131
|
-
className: "grid gap-4 sm:grid-cols-2",
|
|
132
|
-
children: [/* @__PURE__ */ b("button", {
|
|
133
|
-
type: "button",
|
|
134
|
-
onClick: () => k("/api-keys"),
|
|
135
|
-
className: "rounded-card border border-border-seam bg-bg-surface p-4 text-left transition-colors hover:bg-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
|
|
136
|
-
children: [
|
|
137
|
-
/* @__PURE__ */ b("div", {
|
|
138
|
-
className: "flex items-center gap-2 text-primary",
|
|
139
|
-
children: [/* @__PURE__ */ y(d, {
|
|
140
|
-
size: 16,
|
|
141
|
-
"aria-hidden": "true"
|
|
142
|
-
}), /* @__PURE__ */ y("span", {
|
|
143
|
-
className: "font-medium",
|
|
144
|
-
children: T("devportal.apiKeys", "API Keys")
|
|
145
|
-
})]
|
|
146
|
-
}),
|
|
147
|
-
/* @__PURE__ */ y("p", {
|
|
148
|
-
className: "mt-2 text-2xl font-semibold",
|
|
149
|
-
children: I
|
|
150
|
-
}),
|
|
151
|
-
/* @__PURE__ */ y("p", {
|
|
152
|
-
className: "mt-1 text-sm text-text-secondary",
|
|
153
|
-
children: L ? `${T("devportal.settings.lastUsed", "Last used")} ${S(L.lastUsedAt, A)}` : T("devportal.settings.noApiKeys", "No API keys created yet")
|
|
154
|
-
})
|
|
155
|
-
]
|
|
156
|
-
}), /* @__PURE__ */ b("button", {
|
|
157
|
-
type: "button",
|
|
158
|
-
onClick: () => k("/oauth"),
|
|
159
|
-
className: "rounded-card border border-border-seam bg-bg-surface p-4 text-left transition-colors hover:bg-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
|
|
160
|
-
children: [
|
|
161
|
-
/* @__PURE__ */ b("div", {
|
|
162
|
-
className: "flex items-center gap-2 text-primary",
|
|
163
|
-
children: [/* @__PURE__ */ y(v, {
|
|
164
|
-
size: 16,
|
|
56
|
+
let R = A?.myDeveloperProfile, z = (A?.myDeveloperOrganizations ?? []).filter((e) => e.kind !== "PHYSICAL"), B = A?.myApiKeys?.apiKeys ?? [], V = A?.myApiKeys?.totalCount ?? B.length, H = B[0], U = z.reduce((e, t) => e + (t.totalRevenue ?? 0), 0);
|
|
57
|
+
return /* @__PURE__ */ C(e, {
|
|
58
|
+
title: F,
|
|
59
|
+
description: I,
|
|
60
|
+
purpose: O("devportal.settings.purpose", "A quick health-check of your developer account — your profile, how many API keys and organizations you have, and where to get support. Use it to spot missing setup before it blocks publishing or billing."),
|
|
61
|
+
children: [L, /* @__PURE__ */ S(D, {
|
|
62
|
+
fold: k,
|
|
63
|
+
children: /* @__PURE__ */ C("div", {
|
|
64
|
+
className: "grid gap-6 xl:grid-cols-[minmax(0,2fr)_minmax(320px,1fr)]",
|
|
65
|
+
children: [/* @__PURE__ */ C("div", {
|
|
66
|
+
className: "space-y-6",
|
|
67
|
+
children: [
|
|
68
|
+
/* @__PURE__ */ S(t, {
|
|
69
|
+
title: O("devportal.settings.profile", "Profile"),
|
|
70
|
+
children: /* @__PURE__ */ S(w, { children: /* @__PURE__ */ C("div", {
|
|
71
|
+
className: "flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",
|
|
72
|
+
children: [/* @__PURE__ */ C("div", {
|
|
73
|
+
className: "space-y-2",
|
|
74
|
+
children: [
|
|
75
|
+
/* @__PURE__ */ C("div", {
|
|
76
|
+
className: "flex items-center gap-2",
|
|
77
|
+
children: [
|
|
78
|
+
/* @__PURE__ */ S(v, {
|
|
79
|
+
className: "h-5 w-5 text-primary",
|
|
165
80
|
"aria-hidden": "true"
|
|
166
|
-
}),
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
81
|
+
}),
|
|
82
|
+
/* @__PURE__ */ S("h2", {
|
|
83
|
+
className: "text-lg font-semibold",
|
|
84
|
+
children: O("devportal.settings.developerProfile", "Developer profile")
|
|
85
|
+
}),
|
|
86
|
+
R?.isVerified && /* @__PURE__ */ S(r, { verified: !0 })
|
|
87
|
+
]
|
|
88
|
+
}),
|
|
89
|
+
/* @__PURE__ */ S("p", {
|
|
90
|
+
className: "text-sm text-text-secondary",
|
|
91
|
+
children: R?.companyName || O("devportal.settings.noCompanyName", "No company name set yet")
|
|
92
|
+
}),
|
|
93
|
+
R?.bio && /* @__PURE__ */ S("p", {
|
|
94
|
+
className: "max-w-2xl text-sm text-text-secondary",
|
|
95
|
+
children: R.bio
|
|
96
|
+
}),
|
|
97
|
+
/* @__PURE__ */ C("div", {
|
|
98
|
+
className: "flex flex-wrap gap-2 pt-1 text-xs text-text-secondary",
|
|
99
|
+
children: [
|
|
100
|
+
/* @__PURE__ */ C("span", {
|
|
101
|
+
className: "rounded-full bg-bg-sunken px-2.5 py-1",
|
|
102
|
+
children: [
|
|
103
|
+
R?.applicationCount ?? 0,
|
|
104
|
+
" ",
|
|
105
|
+
O("devportal.settings.publishedAssetsTracked", "published assets tracked")
|
|
106
|
+
]
|
|
107
|
+
}),
|
|
108
|
+
/* @__PURE__ */ C("span", {
|
|
109
|
+
className: "rounded-full bg-bg-sunken px-2.5 py-1",
|
|
110
|
+
children: [
|
|
111
|
+
R?.totalInstalls ?? 0,
|
|
112
|
+
" ",
|
|
113
|
+
O("devportal.settings.installs", "installs")
|
|
114
|
+
]
|
|
115
|
+
}),
|
|
116
|
+
/* @__PURE__ */ C("span", {
|
|
117
|
+
className: "rounded-full bg-bg-sunken px-2.5 py-1",
|
|
118
|
+
children: [
|
|
119
|
+
O("devportal.settings.emailUpdates", "Email updates"),
|
|
120
|
+
" ",
|
|
121
|
+
R?.emailNotifications ? O("devportal.common.enabled", "enabled") : O("devportal.common.disabled", "disabled")
|
|
122
|
+
]
|
|
123
|
+
})
|
|
124
|
+
]
|
|
125
|
+
})
|
|
126
|
+
]
|
|
127
|
+
}), /* @__PURE__ */ C("button", {
|
|
128
|
+
type: "button",
|
|
129
|
+
onClick: () => N("/publisher/profile"),
|
|
130
|
+
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 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
|
|
131
|
+
children: [/* @__PURE__ */ S(g, {
|
|
132
|
+
size: 16,
|
|
133
|
+
"aria-hidden": "true"
|
|
134
|
+
}), O("devportal.settings.manageProfile", "Manage profile")]
|
|
135
|
+
})]
|
|
136
|
+
}) })
|
|
137
|
+
}),
|
|
138
|
+
/* @__PURE__ */ C("div", {
|
|
139
|
+
className: "grid gap-6 lg:grid-cols-2",
|
|
140
|
+
children: [/* @__PURE__ */ S(t, {
|
|
141
|
+
title: O("devportal.settings.credentials", "Credentials"),
|
|
142
|
+
children: /* @__PURE__ */ S("div", {
|
|
143
|
+
className: "rounded-card border border-border-seam bg-bg-surface p-6",
|
|
144
|
+
children: /* @__PURE__ */ C("div", {
|
|
145
|
+
className: "grid gap-4 sm:grid-cols-2",
|
|
146
|
+
children: [/* @__PURE__ */ C("button", {
|
|
147
|
+
type: "button",
|
|
148
|
+
onClick: () => N("/api-keys"),
|
|
149
|
+
className: "rounded-card border border-border-seam bg-bg-surface p-4 text-left transition-colors hover:bg-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
|
|
150
|
+
children: [
|
|
151
|
+
/* @__PURE__ */ C("div", {
|
|
152
|
+
className: "flex items-center gap-2 text-primary",
|
|
153
|
+
children: [/* @__PURE__ */ S(p, {
|
|
154
|
+
size: 16,
|
|
155
|
+
"aria-hidden": "true"
|
|
156
|
+
}), /* @__PURE__ */ S("span", {
|
|
157
|
+
className: "font-medium",
|
|
158
|
+
children: O("devportal.apiKeys", "API Keys")
|
|
159
|
+
})]
|
|
160
|
+
}),
|
|
161
|
+
/* @__PURE__ */ S("p", {
|
|
162
|
+
className: "mt-2 text-2xl font-semibold",
|
|
163
|
+
children: V
|
|
164
|
+
}),
|
|
165
|
+
/* @__PURE__ */ S("p", {
|
|
166
|
+
className: "mt-1 text-sm text-text-secondary",
|
|
167
|
+
children: H ? `${O("devportal.settings.lastUsed", "Last used")} ${E(H.lastUsedAt, P)}` : O("devportal.settings.noApiKeys", "No API keys created yet")
|
|
168
|
+
})
|
|
169
|
+
]
|
|
170
|
+
}), /* @__PURE__ */ C("button", {
|
|
171
|
+
type: "button",
|
|
172
|
+
onClick: () => N("/oauth"),
|
|
173
|
+
className: "rounded-card border border-border-seam bg-bg-surface p-4 text-left transition-colors hover:bg-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
|
|
174
|
+
children: [
|
|
175
|
+
/* @__PURE__ */ C("div", {
|
|
176
|
+
className: "flex items-center gap-2 text-primary",
|
|
177
|
+
children: [/* @__PURE__ */ S(b, {
|
|
178
|
+
size: 16,
|
|
179
|
+
"aria-hidden": "true"
|
|
180
|
+
}), /* @__PURE__ */ S("span", {
|
|
181
|
+
className: "font-medium",
|
|
182
|
+
children: O("devportal.settings.oauthApps", "OAuth Apps")
|
|
183
|
+
})]
|
|
184
|
+
}),
|
|
185
|
+
/* @__PURE__ */ S("p", {
|
|
186
|
+
className: "mt-2 text-2xl font-semibold",
|
|
187
|
+
children: O("devportal.common.open", "Open")
|
|
188
|
+
}),
|
|
189
|
+
/* @__PURE__ */ S("p", {
|
|
190
|
+
className: "mt-1 text-sm text-text-secondary",
|
|
191
|
+
children: O("devportal.settings.oauthDescription", "Manage OAuth clients on the dedicated credentials page.")
|
|
192
|
+
})
|
|
193
|
+
]
|
|
194
|
+
})]
|
|
195
|
+
})
|
|
181
196
|
})
|
|
182
|
-
})
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
197
|
+
}), /* @__PURE__ */ S(t, {
|
|
198
|
+
title: O("devportal.settings.organizations", "Organizations"),
|
|
199
|
+
children: /* @__PURE__ */ C("div", {
|
|
200
|
+
className: "rounded-card border border-border-seam bg-bg-surface p-6",
|
|
201
|
+
children: [
|
|
202
|
+
/* @__PURE__ */ C("div", {
|
|
203
|
+
className: "flex items-center gap-2 text-primary",
|
|
204
|
+
children: [/* @__PURE__ */ S(d, {
|
|
205
|
+
size: 16,
|
|
206
|
+
"aria-hidden": "true"
|
|
207
|
+
}), /* @__PURE__ */ S("span", {
|
|
208
|
+
className: "font-medium",
|
|
209
|
+
children: O("devportal.settings.developerOrganizations", "Developer organizations")
|
|
210
|
+
})]
|
|
211
|
+
}),
|
|
212
|
+
/* @__PURE__ */ S("p", {
|
|
213
|
+
className: "mt-2 text-2xl font-semibold",
|
|
214
|
+
children: z.length
|
|
215
|
+
}),
|
|
216
|
+
/* @__PURE__ */ C("p", {
|
|
217
|
+
className: "mt-1 text-sm text-text-secondary",
|
|
218
|
+
children: [
|
|
219
|
+
"$",
|
|
220
|
+
U.toLocaleString(),
|
|
221
|
+
" ",
|
|
222
|
+
O("devportal.settings.lifetimeRevenue", "lifetime revenue across all teams")
|
|
223
|
+
]
|
|
224
|
+
}),
|
|
225
|
+
/* @__PURE__ */ C("button", {
|
|
226
|
+
type: "button",
|
|
227
|
+
onClick: () => N("/organizations"),
|
|
228
|
+
className: "mt-4 inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
|
|
229
|
+
children: [O("devportal.settings.viewOrganizations", "View organizations"), /* @__PURE__ */ S(f, {
|
|
230
|
+
size: 14,
|
|
231
|
+
"aria-hidden": "true"
|
|
232
|
+
})]
|
|
233
|
+
})
|
|
234
|
+
]
|
|
235
|
+
})
|
|
236
|
+
})]
|
|
237
|
+
}),
|
|
238
|
+
/* @__PURE__ */ S(t, {
|
|
239
|
+
title: O("devportal.settings.deliveryAutomation", "Delivery & automation"),
|
|
240
|
+
children: /* @__PURE__ */ S("div", {
|
|
186
241
|
className: "rounded-card border border-border-seam bg-bg-surface p-6",
|
|
187
|
-
children:
|
|
188
|
-
|
|
242
|
+
children: /* @__PURE__ */ C("div", {
|
|
243
|
+
className: "flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between",
|
|
244
|
+
children: [/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ C("div", {
|
|
189
245
|
className: "flex items-center gap-2 text-primary",
|
|
190
|
-
children: [/* @__PURE__ */ y
|
|
246
|
+
children: [/* @__PURE__ */ S(y, {
|
|
191
247
|
size: 16,
|
|
192
248
|
"aria-hidden": "true"
|
|
193
|
-
}), /* @__PURE__ */
|
|
249
|
+
}), /* @__PURE__ */ S("span", {
|
|
194
250
|
className: "font-medium",
|
|
195
|
-
children:
|
|
251
|
+
children: O("devportal.settings.webhookOperations", "Webhook operations")
|
|
196
252
|
})]
|
|
197
|
-
}),
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
}),
|
|
202
|
-
/* @__PURE__ */ b("p", {
|
|
203
|
-
className: "mt-1 text-sm text-text-secondary",
|
|
204
|
-
children: [
|
|
205
|
-
"$",
|
|
206
|
-
R.toLocaleString(),
|
|
207
|
-
" ",
|
|
208
|
-
T("devportal.settings.lifetimeRevenue", "lifetime revenue across all teams")
|
|
209
|
-
]
|
|
210
|
-
}),
|
|
211
|
-
/* @__PURE__ */ b("button", {
|
|
253
|
+
}), /* @__PURE__ */ S("p", {
|
|
254
|
+
className: "mt-2 text-sm text-text-secondary",
|
|
255
|
+
children: O("devportal.settings.webhookOperationsDescription", "Configure application webhooks from each application detail page. Delivery history and retry status are available per app.")
|
|
256
|
+
})] }), /* @__PURE__ */ C("button", {
|
|
212
257
|
type: "button",
|
|
213
|
-
onClick: () =>
|
|
214
|
-
className: "
|
|
215
|
-
children: [
|
|
258
|
+
onClick: () => N("/webhooks"),
|
|
259
|
+
className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
|
|
260
|
+
children: [O("devportal.settings.openWebhooks", "Open webhooks"), /* @__PURE__ */ S(f, {
|
|
216
261
|
size: 14,
|
|
217
262
|
"aria-hidden": "true"
|
|
218
263
|
})]
|
|
219
|
-
})
|
|
220
|
-
|
|
264
|
+
})]
|
|
265
|
+
})
|
|
221
266
|
})
|
|
222
|
-
})
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
267
|
+
})
|
|
268
|
+
]
|
|
269
|
+
}), /* @__PURE__ */ C("div", {
|
|
270
|
+
className: "space-y-6",
|
|
271
|
+
children: [
|
|
272
|
+
/* @__PURE__ */ S(t, {
|
|
273
|
+
title: O("devportal.settings.securitySupport", "Security & support"),
|
|
274
|
+
children: /* @__PURE__ */ C("div", {
|
|
275
|
+
className: "rounded-card border border-border-seam bg-bg-surface p-6",
|
|
276
|
+
children: [/* @__PURE__ */ C("div", {
|
|
231
277
|
className: "flex items-center gap-2 text-primary",
|
|
232
|
-
children: [/* @__PURE__ */
|
|
278
|
+
children: [/* @__PURE__ */ S(_, {
|
|
233
279
|
size: 16,
|
|
234
280
|
"aria-hidden": "true"
|
|
235
|
-
}), /* @__PURE__ */
|
|
281
|
+
}), /* @__PURE__ */ S("span", {
|
|
236
282
|
className: "font-medium",
|
|
237
|
-
children:
|
|
283
|
+
children: O("devportal.settings.securityPosture", "Security posture")
|
|
238
284
|
})]
|
|
239
|
-
}), /* @__PURE__ */
|
|
240
|
-
className: "mt-
|
|
241
|
-
children: T("devportal.settings.webhookOperationsDescription", "Configure application webhooks from each application detail page. Delivery history and retry status are available per app.")
|
|
242
|
-
})] }), /* @__PURE__ */ b("button", {
|
|
243
|
-
type: "button",
|
|
244
|
-
onClick: () => k("/webhooks"),
|
|
245
|
-
className: "inline-flex items-center gap-2 rounded-md border px-4 py-2 text-sm font-medium hover:bg-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
|
|
246
|
-
children: [T("devportal.settings.openWebhooks", "Open webhooks"), /* @__PURE__ */ y(u, {
|
|
247
|
-
size: 14,
|
|
248
|
-
"aria-hidden": "true"
|
|
249
|
-
})]
|
|
250
|
-
})]
|
|
251
|
-
})
|
|
252
|
-
})
|
|
253
|
-
})
|
|
254
|
-
]
|
|
255
|
-
}), /* @__PURE__ */ b("div", {
|
|
256
|
-
className: "space-y-6",
|
|
257
|
-
children: [
|
|
258
|
-
/* @__PURE__ */ y(t, {
|
|
259
|
-
title: T("devportal.settings.securitySupport", "Security & support"),
|
|
260
|
-
children: /* @__PURE__ */ b("div", {
|
|
261
|
-
className: "rounded-card border border-border-seam bg-bg-surface p-6",
|
|
262
|
-
children: [/* @__PURE__ */ b("div", {
|
|
263
|
-
className: "flex items-center gap-2 text-primary",
|
|
264
|
-
children: [/* @__PURE__ */ y(h, {
|
|
265
|
-
size: 16,
|
|
266
|
-
"aria-hidden": "true"
|
|
267
|
-
}), /* @__PURE__ */ y("span", {
|
|
268
|
-
className: "font-medium",
|
|
269
|
-
children: T("devportal.settings.securityPosture", "Security posture")
|
|
270
|
-
})]
|
|
271
|
-
}), /* @__PURE__ */ b("ul", {
|
|
272
|
-
className: "mt-4 space-y-3 text-sm text-text-secondary",
|
|
273
|
-
children: [
|
|
274
|
-
/* @__PURE__ */ y("li", {
|
|
275
|
-
className: "rounded-md bg-bg-sunken px-3 py-2",
|
|
276
|
-
children: T("devportal.settings.securityNote1", "API keys and OAuth apps are managed through the public global gateway.")
|
|
277
|
-
}),
|
|
278
|
-
/* @__PURE__ */ y("li", {
|
|
279
|
-
className: "rounded-md bg-bg-sunken px-3 py-2",
|
|
280
|
-
children: T("devportal.settings.securityNote2", "Webhook testing and delivery history are available per application.")
|
|
281
|
-
}),
|
|
282
|
-
/* @__PURE__ */ y("li", {
|
|
283
|
-
className: "rounded-md bg-bg-sunken px-3 py-2",
|
|
284
|
-
children: T("devportal.settings.securityNote3", "Profile verification status is reflected directly from your developer profile.")
|
|
285
|
-
})
|
|
286
|
-
]
|
|
287
|
-
})]
|
|
288
|
-
})
|
|
289
|
-
}),
|
|
290
|
-
/* @__PURE__ */ y(t, {
|
|
291
|
-
title: T("devportal.settings.recentCredentialActivity", "Recent credential activity"),
|
|
292
|
-
children: /* @__PURE__ */ y("div", {
|
|
293
|
-
className: "rounded-card border border-border-seam bg-bg-surface p-6",
|
|
294
|
-
children: L ? /* @__PURE__ */ b("div", {
|
|
295
|
-
className: "space-y-4 text-sm",
|
|
296
|
-
children: [/* @__PURE__ */ b("div", {
|
|
297
|
-
className: "flex items-center justify-between gap-3",
|
|
298
|
-
children: [/* @__PURE__ */ b("div", { children: [/* @__PURE__ */ y("p", {
|
|
299
|
-
className: "font-medium",
|
|
300
|
-
children: L.name
|
|
301
|
-
}), /* @__PURE__ */ y("p", {
|
|
302
|
-
className: "text-text-secondary",
|
|
303
|
-
children: L.prefix
|
|
304
|
-
})] }), /* @__PURE__ */ y("span", {
|
|
305
|
-
className: "inline-flex items-center rounded-full bg-status-success-bg-subtle px-2.5 py-1 text-xs font-medium text-status-success-text",
|
|
306
|
-
children: T("devportal.common.active", "Active")
|
|
307
|
-
})]
|
|
308
|
-
}), /* @__PURE__ */ b("dl", {
|
|
309
|
-
className: "grid gap-3 text-text-secondary",
|
|
285
|
+
}), /* @__PURE__ */ C("ul", {
|
|
286
|
+
className: "mt-4 space-y-3 text-sm text-text-secondary",
|
|
310
287
|
children: [
|
|
311
|
-
/* @__PURE__ */
|
|
312
|
-
className: "
|
|
313
|
-
children:
|
|
288
|
+
/* @__PURE__ */ S("li", {
|
|
289
|
+
className: "rounded-md bg-bg-sunken px-3 py-2",
|
|
290
|
+
children: O("devportal.settings.securityNote1", "API keys and OAuth apps are managed through the public global gateway.")
|
|
314
291
|
}),
|
|
315
|
-
/* @__PURE__ */
|
|
316
|
-
className: "
|
|
317
|
-
children:
|
|
292
|
+
/* @__PURE__ */ S("li", {
|
|
293
|
+
className: "rounded-md bg-bg-sunken px-3 py-2",
|
|
294
|
+
children: O("devportal.settings.securityNote2", "Webhook testing and delivery history are available per application.")
|
|
318
295
|
}),
|
|
319
|
-
/* @__PURE__ */
|
|
320
|
-
className: "
|
|
321
|
-
children:
|
|
296
|
+
/* @__PURE__ */ S("li", {
|
|
297
|
+
className: "rounded-md bg-bg-sunken px-3 py-2",
|
|
298
|
+
children: O("devportal.settings.securityNote3", "Profile verification status is reflected directly from your developer profile.")
|
|
322
299
|
})
|
|
323
300
|
]
|
|
324
301
|
})]
|
|
325
|
-
}) : /* @__PURE__ */ y(n, {
|
|
326
|
-
illustration: "empty-notifications",
|
|
327
|
-
icon: /* @__PURE__ */ y(d, { size: 24 }),
|
|
328
|
-
title: T("devportal.settings.noCredentialActivity", "No credential activity yet"),
|
|
329
|
-
description: T("devportal.settings.noCredentialActivityDescription", "Create an API key or OAuth app to manage credentials from here.")
|
|
330
302
|
})
|
|
331
|
-
})
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
"
|
|
352
|
-
|
|
303
|
+
}),
|
|
304
|
+
/* @__PURE__ */ S(t, {
|
|
305
|
+
title: O("devportal.settings.recentCredentialActivity", "Recent credential activity"),
|
|
306
|
+
children: /* @__PURE__ */ S("div", {
|
|
307
|
+
className: "rounded-card border border-border-seam bg-bg-surface p-6",
|
|
308
|
+
children: H ? /* @__PURE__ */ C("div", {
|
|
309
|
+
className: "space-y-4 text-sm",
|
|
310
|
+
children: [/* @__PURE__ */ C("div", {
|
|
311
|
+
className: "flex items-center justify-between gap-3",
|
|
312
|
+
children: [/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("p", {
|
|
313
|
+
className: "font-medium",
|
|
314
|
+
children: H.name
|
|
315
|
+
}), /* @__PURE__ */ S("p", {
|
|
316
|
+
className: "text-text-secondary",
|
|
317
|
+
children: H.prefix
|
|
318
|
+
})] }), /* @__PURE__ */ S("span", {
|
|
319
|
+
className: "inline-flex items-center rounded-full bg-status-success-bg-subtle px-2.5 py-1 text-xs font-medium text-status-success-text",
|
|
320
|
+
children: O("devportal.common.active", "Active")
|
|
321
|
+
})]
|
|
322
|
+
}), /* @__PURE__ */ C("dl", {
|
|
323
|
+
className: "grid gap-3 text-text-secondary",
|
|
324
|
+
children: [
|
|
325
|
+
/* @__PURE__ */ C("div", {
|
|
326
|
+
className: "flex items-center justify-between gap-3",
|
|
327
|
+
children: [/* @__PURE__ */ S("dt", { children: O("devportal.common.created", "Created") }), /* @__PURE__ */ S("dd", { children: E(H.createdAt, P) })]
|
|
328
|
+
}),
|
|
329
|
+
/* @__PURE__ */ C("div", {
|
|
330
|
+
className: "flex items-center justify-between gap-3",
|
|
331
|
+
children: [/* @__PURE__ */ S("dt", { children: O("devportal.common.expires", "Expires") }), /* @__PURE__ */ S("dd", { children: E(H.expiresAt, P) })]
|
|
332
|
+
}),
|
|
333
|
+
/* @__PURE__ */ C("div", {
|
|
334
|
+
className: "flex items-center justify-between gap-3",
|
|
335
|
+
children: [/* @__PURE__ */ S("dt", { children: O("devportal.settings.lastUsed", "Last used") }), /* @__PURE__ */ S("dd", { children: E(H.lastUsedAt, P) })]
|
|
336
|
+
})
|
|
337
|
+
]
|
|
338
|
+
})]
|
|
339
|
+
}) : /* @__PURE__ */ S(n, {
|
|
340
|
+
illustration: "empty-notifications",
|
|
341
|
+
icon: /* @__PURE__ */ S(p, { size: 24 }),
|
|
342
|
+
title: O("devportal.settings.noCredentialActivity", "No credential activity yet"),
|
|
343
|
+
description: O("devportal.settings.noCredentialActivityDescription", "Create an API key or OAuth app to manage credentials from here.")
|
|
353
344
|
})
|
|
354
|
-
|
|
345
|
+
})
|
|
346
|
+
}),
|
|
347
|
+
/* @__PURE__ */ S(t, {
|
|
348
|
+
title: O("devportal.settings.accountActions", "Account actions"),
|
|
349
|
+
children: /* @__PURE__ */ C("div", {
|
|
350
|
+
className: "rounded-lg border border-status-warning-border bg-status-warning-bg-subtle p-6",
|
|
351
|
+
children: [
|
|
352
|
+
/* @__PURE__ */ S("h2", {
|
|
353
|
+
className: "font-semibold text-status-warning-text",
|
|
354
|
+
children: O("devportal.settings.needHelpTitle", "Need help with account changes?")
|
|
355
|
+
}),
|
|
356
|
+
/* @__PURE__ */ S("p", {
|
|
357
|
+
className: "mt-2 text-sm text-status-warning-text",
|
|
358
|
+
children: O("devportal.settings.needHelpDescription", "Destructive account operations are handled through support so the team can verify ownership and preserve billing history, audit trails, and marketplace assets.")
|
|
359
|
+
}),
|
|
360
|
+
/* @__PURE__ */ C("a", {
|
|
361
|
+
href: "mailto:support@burdenoff.com?subject=Developer%20portal%20account%20support",
|
|
362
|
+
className: "mt-4 inline-flex items-center gap-2 rounded-md border border-status-warning-border bg-bg-surface px-4 py-2 text-sm font-medium text-text-primary hover:bg-accent focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary",
|
|
363
|
+
children: [/* @__PURE__ */ S(h, {
|
|
364
|
+
size: 16,
|
|
365
|
+
"aria-hidden": "true"
|
|
366
|
+
}), O("devportal.settings.contactSupport", "Contact support")]
|
|
367
|
+
})
|
|
368
|
+
]
|
|
369
|
+
})
|
|
355
370
|
})
|
|
356
|
-
|
|
357
|
-
]
|
|
358
|
-
})
|
|
359
|
-
})
|
|
371
|
+
]
|
|
372
|
+
})]
|
|
373
|
+
})
|
|
374
|
+
})]
|
|
360
375
|
});
|
|
361
376
|
};
|
|
362
|
-
export {
|
|
377
|
+
export { O as SettingsPage };
|
|
363
378
|
|
|
364
379
|
//# sourceMappingURL=SettingsPage.js.map
|