@burdenoff/microfe-auth 2026.520.1 → 2026.520.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/auth/AuthRoutes.js +1 -1
- package/dist/auth/AuthRoutes.js.map +1 -1
- package/dist/auth/components/AuthLayout.js +1 -1
- package/dist/auth/components/AuthLayout.js.map +1 -1
- package/dist/auth/hooks/useSessionOperations.d.ts.map +1 -1
- package/dist/auth/hooks/useSessionOperations.js +4 -1
- package/dist/auth/hooks/useSessionOperations.js.map +1 -1
- package/dist/auth/hooks/useUserOperations.d.ts.map +1 -1
- package/dist/auth/hooks/useUserOperations.js +26 -11
- package/dist/auth/hooks/useUserOperations.js.map +1 -1
- package/dist/auth/pages/LoginPage.d.ts.map +1 -1
- package/dist/auth/pages/LoginPage.js +3 -2
- package/dist/auth/pages/LoginPage.js.map +1 -1
- package/dist/auth/pages/PasswordResetPage.js +1 -1
- package/dist/auth/pages/PasswordResetPage.js.map +1 -1
- package/dist/auth/pages/ReactivatePage.js +1 -1
- package/dist/auth/pages/ReactivatePage.js.map +1 -1
- package/dist/auth/pages/RegisterPage.js +1 -1
- package/dist/auth/pages/RegisterPage.js.map +1 -1
- package/dist/auth/pages/SessionsPage.d.ts.map +1 -1
- package/dist/auth/pages/SessionsPage.js +185 -130
- package/dist/auth/pages/SessionsPage.js.map +1 -1
- package/dist/auth/pages/SsoCallbackPage.js +1 -1
- package/dist/auth/pages/SsoCallbackPage.js.map +1 -1
- package/dist/auth/pages/SsoConfigPage.d.ts.map +1 -1
- package/dist/auth/pages/SsoConfigPage.js +214 -190
- package/dist/auth/pages/SsoConfigPage.js.map +1 -1
- package/dist/auth/pages/SsoLoginPage.js +1 -1
- package/dist/auth/pages/SsoLoginPage.js.map +1 -1
- package/dist/auth/pages/UserProfilePage.d.ts.map +1 -1
- package/dist/auth/pages/UserProfilePage.js +246 -233
- package/dist/auth/pages/UserProfilePage.js.map +1 -1
- package/dist/auth/pages/UsersPage.d.ts.map +1 -1
- package/dist/auth/pages/UsersPage.js +0 -1
- package/dist/auth/pages/UsersPage.js.map +1 -1
- package/dist/auth/store/authStore.d.ts +20 -0
- package/dist/auth/store/authStore.d.ts.map +1 -1
- package/dist/auth/store/authStore.js.map +1 -1
- package/dist/microfe-auth.css +1 -1
- package/dist/translations/en.d.ts +12 -0
- package/dist/translations/en.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/auth/pages/AppsPage.d.ts +0 -5
- package/dist/auth/pages/AppsPage.d.ts.map +0 -1
|
@@ -3,283 +3,338 @@ import { useSessionOperations as t } from "../hooks/useSessionOperations.js";
|
|
|
3
3
|
import "../hooks/index.js";
|
|
4
4
|
import { AlertIcon as n, SpinnerIcon as r } from "../components/AuthIcons.js";
|
|
5
5
|
import { formatRelativeTime as i, parseBrowserName as a, parseDeviceName as o } from "../utils/formatters.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
6
|
+
import { useCreateAuthExportJobMutation as s } from "../../generated/wspace-operations.js";
|
|
7
|
+
import { ConfirmActionDialog as c } from "../components/ConfirmActionDialog.js";
|
|
8
|
+
import { useMemo as l, useState as u } from "react";
|
|
9
|
+
import { useI18n as d } from "@burdenoff/fe-libs/shared/providers/shell";
|
|
10
|
+
import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
10
11
|
//#region src/auth/pages/SessionsPage.tsx
|
|
11
|
-
function
|
|
12
|
-
let { t:
|
|
13
|
-
let n =
|
|
12
|
+
function h() {
|
|
13
|
+
let { t: h } = d(), g = (e, t) => {
|
|
14
|
+
let n = h(e);
|
|
14
15
|
return n === e ? t : n;
|
|
15
|
-
},
|
|
16
|
+
}, _ = e((e) => e.isAuthenticated), { activeSessions: v, revokeSession: y, revokeAllSessions: b, isLoading: x, page: S, totalPages: C, totalCount: w, hasMore: T, goToNextPage: E, goToPrevPage: D } = t({ disableTokenInfoQuery: !0 }), [O, k] = u(null), [A, j] = u(null), [M, N] = u(null), [P, F] = u(!1), [I, { loading: L }] = s(), [R, z] = u(null), B = async () => {
|
|
17
|
+
z(null);
|
|
18
|
+
try {
|
|
19
|
+
await I({ variables: { input: {
|
|
20
|
+
name: "Sessions Export",
|
|
21
|
+
entityTypes: ["auth_sessions"],
|
|
22
|
+
format: "CSV",
|
|
23
|
+
exportScope: "INDIVIDUAL",
|
|
24
|
+
includeMetadata: !0
|
|
25
|
+
} } });
|
|
26
|
+
} catch (e) {
|
|
27
|
+
z(e instanceof Error ? e.message : "Failed to start export");
|
|
28
|
+
}
|
|
29
|
+
}, V = l(() => {
|
|
16
30
|
let e = /* @__PURE__ */ new Map();
|
|
17
|
-
for (let t of
|
|
31
|
+
for (let t of v) {
|
|
18
32
|
let n = o(t.userAgent ?? ""), r = e.get(n);
|
|
19
33
|
(!r || new Date(t.lastActivityAt) > new Date(r.lastActivityAt)) && e.set(n, t);
|
|
20
34
|
}
|
|
21
35
|
return [...e.values()];
|
|
22
|
-
}, [
|
|
36
|
+
}, [v]), H = async (e) => {
|
|
23
37
|
try {
|
|
24
|
-
await
|
|
38
|
+
await y(e), j("Session revoked successfully"), N(null);
|
|
25
39
|
} catch (e) {
|
|
26
|
-
|
|
40
|
+
k(e instanceof Error ? e.message : "Failed to revoke session");
|
|
27
41
|
}
|
|
28
42
|
};
|
|
29
|
-
return
|
|
43
|
+
return _ ? /* @__PURE__ */ m("div", {
|
|
30
44
|
className: "max-w-4xl mx-auto p-6",
|
|
31
45
|
children: [
|
|
32
|
-
/* @__PURE__ */
|
|
33
|
-
open:
|
|
46
|
+
/* @__PURE__ */ p(c, {
|
|
47
|
+
open: M !== null,
|
|
34
48
|
onOpenChange: (e) => {
|
|
35
|
-
e ||
|
|
49
|
+
e || N(null);
|
|
36
50
|
},
|
|
37
51
|
title: "Revoke this session?",
|
|
38
52
|
description: "The selected device will be signed out immediately and will need to authenticate again.",
|
|
39
53
|
confirmText: "Revoke session",
|
|
40
54
|
variant: "danger",
|
|
41
|
-
isPending:
|
|
55
|
+
isPending: x,
|
|
42
56
|
onConfirm: async () => {
|
|
43
|
-
|
|
57
|
+
M && await H(M);
|
|
44
58
|
}
|
|
45
59
|
}),
|
|
46
|
-
/* @__PURE__ */
|
|
47
|
-
open:
|
|
48
|
-
onOpenChange:
|
|
60
|
+
/* @__PURE__ */ p(c, {
|
|
61
|
+
open: P,
|
|
62
|
+
onOpenChange: F,
|
|
49
63
|
title: "Revoke every other session?",
|
|
50
64
|
description: "All devices except your current one will be signed out immediately.",
|
|
51
65
|
confirmText: "Revoke all other sessions",
|
|
52
66
|
variant: "warning",
|
|
53
|
-
isPending:
|
|
67
|
+
isPending: x,
|
|
54
68
|
onConfirm: async () => {
|
|
55
69
|
try {
|
|
56
|
-
await
|
|
70
|
+
await b(), j("All other sessions have been revoked"), F(!1);
|
|
57
71
|
} catch (e) {
|
|
58
|
-
|
|
72
|
+
k(e instanceof Error ? e.message : "Failed to revoke all sessions");
|
|
59
73
|
}
|
|
60
74
|
}
|
|
61
75
|
}),
|
|
62
|
-
/* @__PURE__ */
|
|
76
|
+
/* @__PURE__ */ p("div", {
|
|
63
77
|
"aria-live": "polite",
|
|
64
78
|
"aria-atomic": "true",
|
|
65
79
|
className: "sr-only",
|
|
66
|
-
children:
|
|
80
|
+
children: A
|
|
67
81
|
}),
|
|
68
|
-
/* @__PURE__ */
|
|
82
|
+
/* @__PURE__ */ p("div", {
|
|
69
83
|
role: "alert",
|
|
70
84
|
"aria-live": "assertive",
|
|
71
85
|
"aria-atomic": "true",
|
|
72
86
|
className: "sr-only",
|
|
73
|
-
children:
|
|
87
|
+
children: O
|
|
74
88
|
}),
|
|
75
|
-
/* @__PURE__ */
|
|
89
|
+
/* @__PURE__ */ m("div", {
|
|
76
90
|
className: "flex items-center justify-between mb-8",
|
|
77
|
-
children: [/* @__PURE__ */
|
|
91
|
+
children: [/* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("h1", {
|
|
78
92
|
className: "text-3xl font-semibold text-text-primary",
|
|
79
|
-
children:
|
|
80
|
-
}), /* @__PURE__ */
|
|
93
|
+
children: g("auth.sessions.title", "Active Sessions")
|
|
94
|
+
}), /* @__PURE__ */ m("p", {
|
|
81
95
|
className: "text-text-secondary mt-2",
|
|
82
96
|
children: [
|
|
83
|
-
|
|
97
|
+
g("auth.sessions.sessionCount", "You have"),
|
|
84
98
|
" ",
|
|
85
|
-
|
|
99
|
+
w,
|
|
86
100
|
" ",
|
|
87
|
-
|
|
101
|
+
g(w === 1 ? "auth.sessions.sessionsSingular" : "auth.sessions.sessionsPlural", w === 1 ? "active session" : "active sessions")
|
|
88
102
|
]
|
|
89
|
-
})] }), /* @__PURE__ */
|
|
103
|
+
})] }), /* @__PURE__ */ m("div", {
|
|
90
104
|
className: "flex items-center gap-3",
|
|
91
|
-
children:
|
|
105
|
+
children: [/* @__PURE__ */ p("button", {
|
|
106
|
+
type: "button",
|
|
107
|
+
onClick: B,
|
|
108
|
+
disabled: L,
|
|
109
|
+
"aria-label": g("auth.sessions.exportAriaLabel", "Export sessions data"),
|
|
110
|
+
className: "flex items-center gap-2 px-4 py-2.5 rounded-xl border border-border-default text-text-primary font-medium hover:bg-bg-sunken disabled:opacity-50 disabled:cursor-not-allowed transition-colors duration-200",
|
|
111
|
+
children: L ? /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p(r, {
|
|
112
|
+
className: "w-4 h-4 animate-spin",
|
|
113
|
+
"aria-hidden": "true"
|
|
114
|
+
}), g("auth.sessions.exporting", "Exporting...")] }) : /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p("svg", {
|
|
115
|
+
className: "w-4 h-4",
|
|
116
|
+
fill: "none",
|
|
117
|
+
viewBox: "0 0 24 24",
|
|
118
|
+
stroke: "currentColor",
|
|
119
|
+
"aria-hidden": "true",
|
|
120
|
+
children: /* @__PURE__ */ p("path", {
|
|
121
|
+
strokeLinecap: "round",
|
|
122
|
+
strokeLinejoin: "round",
|
|
123
|
+
strokeWidth: 2,
|
|
124
|
+
d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"
|
|
125
|
+
})
|
|
126
|
+
}), g("auth.sessions.export", "Export")] })
|
|
127
|
+
}), w > 1 && /* @__PURE__ */ p("button", {
|
|
92
128
|
type: "button",
|
|
93
|
-
onClick: () =>
|
|
129
|
+
onClick: () => F(!0),
|
|
94
130
|
className: "px-4 py-2.5 rounded-xl border border-status-error-border text-status-error-text font-medium hover:bg-status-error-bg-subtle transition-colors duration-200",
|
|
95
|
-
children:
|
|
96
|
-
})
|
|
131
|
+
children: g("auth.sessions.revokeAll", "Revoke All Sessions")
|
|
132
|
+
})]
|
|
97
133
|
})]
|
|
98
134
|
}),
|
|
99
|
-
|
|
135
|
+
A && /* @__PURE__ */ m("div", {
|
|
100
136
|
role: "status",
|
|
101
137
|
className: "mb-6 p-4 rounded-xl bg-status-success-bg-subtle border border-status-success-border",
|
|
102
|
-
children: [/* @__PURE__ */
|
|
138
|
+
children: [/* @__PURE__ */ p("p", {
|
|
103
139
|
className: "text-status-success-text",
|
|
104
|
-
children:
|
|
105
|
-
}), /* @__PURE__ */
|
|
140
|
+
children: A
|
|
141
|
+
}), /* @__PURE__ */ p("button", {
|
|
106
142
|
type: "button",
|
|
107
|
-
onClick: () =>
|
|
143
|
+
onClick: () => j(null),
|
|
108
144
|
className: "mt-2 text-sm text-status-success-text hover:underline transition-colors duration-200",
|
|
109
145
|
children: "Dismiss"
|
|
110
146
|
})]
|
|
111
147
|
}),
|
|
112
|
-
|
|
148
|
+
R && /* @__PURE__ */ m("div", {
|
|
149
|
+
role: "alert",
|
|
150
|
+
className: "mb-6 flex items-start gap-3 p-4 rounded-xl bg-status-error-bg-subtle border border-status-error-border",
|
|
151
|
+
children: [/* @__PURE__ */ p(n, {
|
|
152
|
+
className: "w-5 h-5 text-status-error-text flex-shrink-0 mt-0.5",
|
|
153
|
+
"aria-hidden": "true"
|
|
154
|
+
}), /* @__PURE__ */ m("div", {
|
|
155
|
+
className: "flex-1",
|
|
156
|
+
children: [/* @__PURE__ */ p("p", {
|
|
157
|
+
className: "text-sm text-status-error-text",
|
|
158
|
+
children: R
|
|
159
|
+
}), /* @__PURE__ */ p("button", {
|
|
160
|
+
type: "button",
|
|
161
|
+
onClick: () => z(null),
|
|
162
|
+
className: "mt-2 text-sm text-status-error-text hover:underline transition-colors duration-200",
|
|
163
|
+
children: g("auth.sessions.dismiss", "Dismiss")
|
|
164
|
+
})]
|
|
165
|
+
})]
|
|
166
|
+
}),
|
|
167
|
+
O && /* @__PURE__ */ m("div", {
|
|
113
168
|
role: "alert",
|
|
114
169
|
className: "mb-6 flex items-start gap-3 p-4 rounded-xl bg-status-error-bg-subtle border border-status-error-border",
|
|
115
|
-
children: [/* @__PURE__ */
|
|
170
|
+
children: [/* @__PURE__ */ p(n, {
|
|
116
171
|
className: "w-5 h-5 text-status-error-text flex-shrink-0 mt-0.5",
|
|
117
172
|
"aria-hidden": "true"
|
|
118
|
-
}), /* @__PURE__ */
|
|
173
|
+
}), /* @__PURE__ */ m("div", {
|
|
119
174
|
className: "flex-1",
|
|
120
|
-
children: [/* @__PURE__ */
|
|
175
|
+
children: [/* @__PURE__ */ p("p", {
|
|
121
176
|
className: "text-sm text-status-error-text",
|
|
122
|
-
children:
|
|
123
|
-
}), /* @__PURE__ */
|
|
177
|
+
children: O
|
|
178
|
+
}), /* @__PURE__ */ p("button", {
|
|
124
179
|
type: "button",
|
|
125
|
-
onClick: () =>
|
|
180
|
+
onClick: () => k(null),
|
|
126
181
|
className: "mt-2 text-sm text-status-error-text hover:underline transition-colors duration-200",
|
|
127
182
|
children: "Dismiss"
|
|
128
183
|
})]
|
|
129
184
|
})]
|
|
130
185
|
}),
|
|
131
|
-
|
|
186
|
+
x ? /* @__PURE__ */ m("div", {
|
|
132
187
|
"aria-live": "polite",
|
|
133
188
|
"aria-busy": "true",
|
|
134
189
|
className: "flex items-center justify-center py-12",
|
|
135
|
-
children: [/* @__PURE__ */
|
|
190
|
+
children: [/* @__PURE__ */ p(r, {
|
|
136
191
|
className: "w-8 h-8 text-text-link animate-spin",
|
|
137
192
|
"aria-hidden": "true"
|
|
138
|
-
}), /* @__PURE__ */
|
|
193
|
+
}), /* @__PURE__ */ p("span", {
|
|
139
194
|
className: "ml-3 text-text-secondary",
|
|
140
|
-
children:
|
|
195
|
+
children: g("auth.sessions.loading", "Loading sessions...")
|
|
141
196
|
})]
|
|
142
|
-
}) :
|
|
197
|
+
}) : V.length === 0 ? /* @__PURE__ */ m("div", {
|
|
143
198
|
className: "text-center py-16 border-2 border-dashed border-border-subtle rounded-xl",
|
|
144
199
|
role: "status",
|
|
145
|
-
children: [/* @__PURE__ */
|
|
200
|
+
children: [/* @__PURE__ */ p("div", {
|
|
146
201
|
className: "w-16 h-16 mx-auto mb-4 rounded-full bg-bg-muted flex items-center justify-center",
|
|
147
|
-
children: /* @__PURE__ */
|
|
202
|
+
children: /* @__PURE__ */ p("svg", {
|
|
148
203
|
className: "w-8 h-8 text-text-tertiary",
|
|
149
204
|
fill: "none",
|
|
150
205
|
viewBox: "0 0 24 24",
|
|
151
206
|
stroke: "currentColor",
|
|
152
207
|
"aria-hidden": "true",
|
|
153
|
-
children: /* @__PURE__ */
|
|
208
|
+
children: /* @__PURE__ */ p("path", {
|
|
154
209
|
strokeLinecap: "round",
|
|
155
210
|
strokeLinejoin: "round",
|
|
156
211
|
strokeWidth: 1.5,
|
|
157
212
|
d: "M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
|
|
158
213
|
})
|
|
159
214
|
})
|
|
160
|
-
}), /* @__PURE__ */
|
|
215
|
+
}), /* @__PURE__ */ p("p", {
|
|
161
216
|
className: "text-text-secondary",
|
|
162
|
-
children:
|
|
217
|
+
children: g("auth.sessions.noSessions", "No active sessions found")
|
|
163
218
|
})]
|
|
164
|
-
}) : /* @__PURE__ */
|
|
219
|
+
}) : /* @__PURE__ */ p("div", {
|
|
165
220
|
className: "space-y-4",
|
|
166
221
|
"aria-live": "polite",
|
|
167
|
-
"aria-busy":
|
|
168
|
-
children:
|
|
222
|
+
"aria-busy": x,
|
|
223
|
+
children: V.map((e) => /* @__PURE__ */ p("div", {
|
|
169
224
|
className: "p-6 rounded-xl border border-border-default bg-bg-surface shadow-sm hover:shadow-md transition-shadow",
|
|
170
|
-
children: /* @__PURE__ */
|
|
225
|
+
children: /* @__PURE__ */ m("div", {
|
|
171
226
|
className: "flex items-start justify-between",
|
|
172
|
-
children: [/* @__PURE__ */
|
|
227
|
+
children: [/* @__PURE__ */ m("div", {
|
|
173
228
|
className: "flex items-start gap-4",
|
|
174
|
-
children: [/* @__PURE__ */
|
|
229
|
+
children: [/* @__PURE__ */ p("div", {
|
|
175
230
|
className: "w-12 h-12 rounded-xl bg-bg-accent flex items-center justify-center flex-shrink-0",
|
|
176
231
|
"aria-hidden": "true",
|
|
177
|
-
children: /* @__PURE__ */
|
|
232
|
+
children: /* @__PURE__ */ p("svg", {
|
|
178
233
|
className: "w-6 h-6 text-text-link",
|
|
179
234
|
fill: "none",
|
|
180
235
|
viewBox: "0 0 24 24",
|
|
181
236
|
stroke: "currentColor",
|
|
182
|
-
children: /* @__PURE__ */
|
|
237
|
+
children: /* @__PURE__ */ p("path", {
|
|
183
238
|
strokeLinecap: "round",
|
|
184
239
|
strokeLinejoin: "round",
|
|
185
240
|
strokeWidth: 1.5,
|
|
186
241
|
d: "M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
|
|
187
242
|
})
|
|
188
243
|
})
|
|
189
|
-
}), /* @__PURE__ */
|
|
244
|
+
}), /* @__PURE__ */ m("div", {
|
|
190
245
|
className: "flex-1",
|
|
191
246
|
children: [
|
|
192
|
-
/* @__PURE__ */
|
|
247
|
+
/* @__PURE__ */ m("div", {
|
|
193
248
|
className: "flex items-center gap-3 mb-1",
|
|
194
|
-
children: [/* @__PURE__ */
|
|
249
|
+
children: [/* @__PURE__ */ p("h3", {
|
|
195
250
|
className: "text-lg font-semibold text-text-primary",
|
|
196
|
-
children: e.isCurrent && o(e.userAgent) === "Unknown Device" ?
|
|
197
|
-
}), e.isCurrent && /* @__PURE__ */
|
|
251
|
+
children: e.isCurrent && o(e.userAgent) === "Unknown Device" ? g("auth.sessions.thisDevice", "This Device") : o(e.userAgent)
|
|
252
|
+
}), e.isCurrent && /* @__PURE__ */ p("span", {
|
|
198
253
|
role: "status",
|
|
199
254
|
className: "px-2.5 py-1 rounded-full bg-status-success-bg-subtle text-status-success-text text-xs font-medium",
|
|
200
|
-
children:
|
|
255
|
+
children: g("auth.sessions.currentSession", "Current Session")
|
|
201
256
|
})]
|
|
202
257
|
}),
|
|
203
|
-
/* @__PURE__ */
|
|
258
|
+
/* @__PURE__ */ p("p", {
|
|
204
259
|
className: "text-sm text-text-secondary mb-2",
|
|
205
|
-
children: a(e.userAgent) === "Unknown Browser" && e.isCurrent ?
|
|
260
|
+
children: a(e.userAgent) === "Unknown Browser" && e.isCurrent ? g("auth.sessions.currentBrowser", "Current Browser") : a(e.userAgent)
|
|
206
261
|
}),
|
|
207
|
-
/* @__PURE__ */
|
|
262
|
+
/* @__PURE__ */ m("dl", {
|
|
208
263
|
className: "flex flex-wrap gap-4 text-sm text-text-secondary",
|
|
209
264
|
children: [
|
|
210
|
-
e.ipAddress && e.ipAddress !== "unknown" && /* @__PURE__ */
|
|
265
|
+
e.ipAddress && e.ipAddress !== "unknown" && /* @__PURE__ */ m("div", {
|
|
211
266
|
className: "flex items-center gap-1.5",
|
|
212
267
|
children: [
|
|
213
|
-
/* @__PURE__ */
|
|
268
|
+
/* @__PURE__ */ p("svg", {
|
|
214
269
|
className: "w-4 h-4",
|
|
215
270
|
fill: "none",
|
|
216
271
|
viewBox: "0 0 24 24",
|
|
217
272
|
stroke: "currentColor",
|
|
218
273
|
"aria-hidden": "true",
|
|
219
|
-
children: /* @__PURE__ */
|
|
274
|
+
children: /* @__PURE__ */ p("path", {
|
|
220
275
|
strokeLinecap: "round",
|
|
221
276
|
strokeLinejoin: "round",
|
|
222
277
|
strokeWidth: 2,
|
|
223
278
|
d: "M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9"
|
|
224
279
|
})
|
|
225
280
|
}),
|
|
226
|
-
/* @__PURE__ */
|
|
281
|
+
/* @__PURE__ */ p("dt", {
|
|
227
282
|
className: "sr-only",
|
|
228
283
|
children: "IP address"
|
|
229
284
|
}),
|
|
230
|
-
/* @__PURE__ */
|
|
285
|
+
/* @__PURE__ */ p("dd", { children: e.ipAddress })
|
|
231
286
|
]
|
|
232
287
|
}),
|
|
233
|
-
e.location && /* @__PURE__ */
|
|
288
|
+
e.location && /* @__PURE__ */ m("div", {
|
|
234
289
|
className: "flex items-center gap-1.5",
|
|
235
290
|
children: [
|
|
236
|
-
/* @__PURE__ */
|
|
291
|
+
/* @__PURE__ */ m("svg", {
|
|
237
292
|
className: "w-4 h-4",
|
|
238
293
|
fill: "none",
|
|
239
294
|
viewBox: "0 0 24 24",
|
|
240
295
|
stroke: "currentColor",
|
|
241
296
|
"aria-hidden": "true",
|
|
242
|
-
children: [/* @__PURE__ */
|
|
297
|
+
children: [/* @__PURE__ */ p("path", {
|
|
243
298
|
strokeLinecap: "round",
|
|
244
299
|
strokeLinejoin: "round",
|
|
245
300
|
strokeWidth: 2,
|
|
246
301
|
d: "M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"
|
|
247
|
-
}), /* @__PURE__ */
|
|
302
|
+
}), /* @__PURE__ */ p("path", {
|
|
248
303
|
strokeLinecap: "round",
|
|
249
304
|
strokeLinejoin: "round",
|
|
250
305
|
strokeWidth: 2,
|
|
251
306
|
d: "M15 11a3 3 0 11-6 0 3 3 0 016 0z"
|
|
252
307
|
})]
|
|
253
308
|
}),
|
|
254
|
-
/* @__PURE__ */
|
|
309
|
+
/* @__PURE__ */ p("dt", {
|
|
255
310
|
className: "sr-only",
|
|
256
311
|
children: "Location"
|
|
257
312
|
}),
|
|
258
|
-
/* @__PURE__ */
|
|
313
|
+
/* @__PURE__ */ p("dd", { children: e.location })
|
|
259
314
|
]
|
|
260
315
|
}),
|
|
261
|
-
/* @__PURE__ */
|
|
316
|
+
/* @__PURE__ */ m("div", {
|
|
262
317
|
className: "flex items-center gap-1.5",
|
|
263
318
|
children: [
|
|
264
|
-
/* @__PURE__ */
|
|
319
|
+
/* @__PURE__ */ p("svg", {
|
|
265
320
|
className: "w-4 h-4",
|
|
266
321
|
fill: "none",
|
|
267
322
|
viewBox: "0 0 24 24",
|
|
268
323
|
stroke: "currentColor",
|
|
269
324
|
"aria-hidden": "true",
|
|
270
|
-
children: /* @__PURE__ */
|
|
325
|
+
children: /* @__PURE__ */ p("path", {
|
|
271
326
|
strokeLinecap: "round",
|
|
272
327
|
strokeLinejoin: "round",
|
|
273
328
|
strokeWidth: 2,
|
|
274
329
|
d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"
|
|
275
330
|
})
|
|
276
331
|
}),
|
|
277
|
-
/* @__PURE__ */
|
|
332
|
+
/* @__PURE__ */ p("dt", {
|
|
278
333
|
className: "sr-only",
|
|
279
334
|
children: "Last active"
|
|
280
335
|
}),
|
|
281
|
-
/* @__PURE__ */
|
|
282
|
-
|
|
336
|
+
/* @__PURE__ */ m("dd", { children: [
|
|
337
|
+
g("auth.sessions.lastActive", "Last active"),
|
|
283
338
|
" ",
|
|
284
339
|
i(e.lastActivityAt)
|
|
285
340
|
] })
|
|
@@ -289,70 +344,70 @@ function p() {
|
|
|
289
344
|
})
|
|
290
345
|
]
|
|
291
346
|
})]
|
|
292
|
-
}), !e.isCurrent && /* @__PURE__ */
|
|
347
|
+
}), !e.isCurrent && /* @__PURE__ */ p("button", {
|
|
293
348
|
type: "button",
|
|
294
|
-
onClick: () =>
|
|
295
|
-
"aria-label": `${
|
|
349
|
+
onClick: () => N(e.id),
|
|
350
|
+
"aria-label": `${g("auth.sessions.revoke", "Revoke")} ${o(e.userAgent)} session`,
|
|
296
351
|
className: "ml-4 px-4 py-2 rounded-lg text-sm font-medium border border-status-error-border text-status-error-text bg-bg-surface hover:bg-status-error-bg-subtle transition-colors duration-200",
|
|
297
|
-
children:
|
|
352
|
+
children: g("auth.sessions.revoke", "Revoke")
|
|
298
353
|
})]
|
|
299
354
|
})
|
|
300
355
|
}, e.id))
|
|
301
356
|
}),
|
|
302
|
-
!
|
|
357
|
+
!x && C > 1 && /* @__PURE__ */ m("div", {
|
|
303
358
|
className: "flex items-center justify-between mt-6 pt-4 border-t border-border-subtle",
|
|
304
359
|
children: [
|
|
305
|
-
/* @__PURE__ */
|
|
360
|
+
/* @__PURE__ */ m("button", {
|
|
306
361
|
type: "button",
|
|
307
|
-
onClick:
|
|
308
|
-
disabled:
|
|
362
|
+
onClick: D,
|
|
363
|
+
disabled: S === 0,
|
|
309
364
|
className: "flex items-center gap-2 px-4 py-2 rounded-lg border border-border-default text-text-primary bg-bg-surface hover:bg-bg-sunken disabled:opacity-40 disabled:cursor-not-allowed transition-colors font-medium text-sm",
|
|
310
|
-
"aria-label":
|
|
311
|
-
children: [/* @__PURE__ */
|
|
365
|
+
"aria-label": g("auth.sessions.prevPage", "Previous page"),
|
|
366
|
+
children: [/* @__PURE__ */ p("svg", {
|
|
312
367
|
className: "w-4 h-4",
|
|
313
368
|
fill: "none",
|
|
314
369
|
viewBox: "0 0 24 24",
|
|
315
370
|
stroke: "currentColor",
|
|
316
371
|
"aria-hidden": "true",
|
|
317
|
-
children: /* @__PURE__ */
|
|
372
|
+
children: /* @__PURE__ */ p("path", {
|
|
318
373
|
strokeLinecap: "round",
|
|
319
374
|
strokeLinejoin: "round",
|
|
320
375
|
strokeWidth: 2,
|
|
321
376
|
d: "M15 19l-7-7 7-7"
|
|
322
377
|
})
|
|
323
|
-
}),
|
|
378
|
+
}), g("auth.sessions.prev", "Previous")]
|
|
324
379
|
}),
|
|
325
|
-
/* @__PURE__ */
|
|
380
|
+
/* @__PURE__ */ m("span", {
|
|
326
381
|
className: "text-sm text-text-secondary",
|
|
327
382
|
children: [
|
|
328
|
-
|
|
383
|
+
g("auth.sessions.pageOf", "Page"),
|
|
329
384
|
" ",
|
|
330
|
-
/* @__PURE__ */
|
|
385
|
+
/* @__PURE__ */ p("span", {
|
|
331
386
|
className: "font-medium text-text-primary",
|
|
332
|
-
children:
|
|
387
|
+
children: S + 1
|
|
333
388
|
}),
|
|
334
389
|
" ",
|
|
335
|
-
|
|
390
|
+
g("auth.sessions.of", "of"),
|
|
336
391
|
" ",
|
|
337
|
-
/* @__PURE__ */
|
|
392
|
+
/* @__PURE__ */ p("span", {
|
|
338
393
|
className: "font-medium text-text-primary",
|
|
339
|
-
children:
|
|
394
|
+
children: C
|
|
340
395
|
})
|
|
341
396
|
]
|
|
342
397
|
}),
|
|
343
|
-
/* @__PURE__ */
|
|
398
|
+
/* @__PURE__ */ m("button", {
|
|
344
399
|
type: "button",
|
|
345
|
-
onClick:
|
|
346
|
-
disabled: !
|
|
400
|
+
onClick: E,
|
|
401
|
+
disabled: !T,
|
|
347
402
|
className: "flex items-center gap-2 px-4 py-2 rounded-lg border border-border-default text-text-primary bg-bg-surface hover:bg-bg-sunken disabled:opacity-40 disabled:cursor-not-allowed transition-colors font-medium text-sm",
|
|
348
|
-
"aria-label":
|
|
349
|
-
children: [
|
|
403
|
+
"aria-label": g("auth.sessions.nextPage", "Next page"),
|
|
404
|
+
children: [g("auth.sessions.next", "Next"), /* @__PURE__ */ p("svg", {
|
|
350
405
|
className: "w-4 h-4",
|
|
351
406
|
fill: "none",
|
|
352
407
|
viewBox: "0 0 24 24",
|
|
353
408
|
stroke: "currentColor",
|
|
354
409
|
"aria-hidden": "true",
|
|
355
|
-
children: /* @__PURE__ */
|
|
410
|
+
children: /* @__PURE__ */ p("path", {
|
|
356
411
|
strokeLinecap: "round",
|
|
357
412
|
strokeLinejoin: "round",
|
|
358
413
|
strokeWidth: 2,
|
|
@@ -363,31 +418,31 @@ function p() {
|
|
|
363
418
|
]
|
|
364
419
|
})
|
|
365
420
|
]
|
|
366
|
-
}) : /* @__PURE__ */
|
|
421
|
+
}) : /* @__PURE__ */ p("div", {
|
|
367
422
|
className: "max-w-4xl mx-auto p-6",
|
|
368
|
-
children: /* @__PURE__ */
|
|
423
|
+
children: /* @__PURE__ */ m("div", {
|
|
369
424
|
className: "text-center py-16 border-2 border-dashed border-border-subtle rounded-xl",
|
|
370
425
|
children: [
|
|
371
|
-
/* @__PURE__ */
|
|
426
|
+
/* @__PURE__ */ p("div", {
|
|
372
427
|
className: "w-16 h-16 mx-auto mb-4 rounded-full bg-status-warning-bg-subtle flex items-center justify-center",
|
|
373
|
-
children: /* @__PURE__ */
|
|
428
|
+
children: /* @__PURE__ */ p(n, {
|
|
374
429
|
className: "w-8 h-8 text-status-warning-text",
|
|
375
430
|
"aria-hidden": "true"
|
|
376
431
|
})
|
|
377
432
|
}),
|
|
378
|
-
/* @__PURE__ */
|
|
433
|
+
/* @__PURE__ */ p("h2", {
|
|
379
434
|
className: "text-xl font-semibold text-text-primary mb-2",
|
|
380
|
-
children:
|
|
435
|
+
children: g("auth.sessions.authRequired", "Authentication Required")
|
|
381
436
|
}),
|
|
382
|
-
/* @__PURE__ */
|
|
437
|
+
/* @__PURE__ */ p("p", {
|
|
383
438
|
className: "text-text-secondary",
|
|
384
|
-
children:
|
|
439
|
+
children: g("auth.sessions.signInToView", "Please sign in to view your active sessions")
|
|
385
440
|
})
|
|
386
441
|
]
|
|
387
442
|
})
|
|
388
443
|
});
|
|
389
444
|
}
|
|
390
445
|
//#endregion
|
|
391
|
-
export {
|
|
446
|
+
export { h as SessionsPage };
|
|
392
447
|
|
|
393
448
|
//# sourceMappingURL=SessionsPage.js.map
|