@fuzdev/fuz_app 0.60.0 → 0.61.0
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/ui/AccountSessions.svelte +21 -6
- package/dist/ui/AccountSessions.svelte.d.ts.map +1 -1
- package/dist/ui/AdminAccounts.svelte +32 -25
- package/dist/ui/AdminAccounts.svelte.d.ts.map +1 -1
- package/dist/ui/AdminAuditLog.svelte +3 -3
- package/dist/ui/AdminInvites.svelte +20 -15
- package/dist/ui/AdminOverview.svelte +19 -21
- package/dist/ui/AdminOverview.svelte.d.ts.map +1 -1
- package/dist/ui/AdminRoleGrantHistory.svelte +3 -3
- package/dist/ui/AdminSessions.svelte +19 -21
- package/dist/ui/AdminSessions.svelte.d.ts.map +1 -1
- package/dist/ui/AdminSettings.svelte +1 -3
- package/dist/ui/AdminSettings.svelte.d.ts.map +1 -1
- package/dist/ui/CLAUDE.md +123 -69
- package/dist/ui/ConfirmButton.svelte +82 -24
- package/dist/ui/ConfirmButton.svelte.d.ts +8 -34
- package/dist/ui/ConfirmButton.svelte.d.ts.map +1 -1
- package/dist/ui/OpenSignupToggle.svelte +6 -4
- package/dist/ui/OpenSignupToggle.svelte.d.ts.map +1 -1
- package/dist/ui/RoleGrantOfferForm.svelte +4 -4
- package/dist/ui/RoleGrantOfferHistory.svelte +3 -3
- package/dist/ui/RoleGrantOfferInbox.svelte +10 -6
- package/dist/ui/RoleGrantOfferInbox.svelte.d.ts.map +1 -1
- package/dist/ui/account_sessions_state.svelte.d.ts +17 -7
- package/dist/ui/account_sessions_state.svelte.d.ts.map +1 -1
- package/dist/ui/account_sessions_state.svelte.js +32 -33
- package/dist/ui/admin_accounts_state.svelte.d.ts +48 -17
- package/dist/ui/admin_accounts_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_accounts_state.svelte.js +58 -76
- package/dist/ui/admin_invites_state.svelte.d.ts +14 -7
- package/dist/ui/admin_invites_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_invites_state.svelte.js +32 -48
- package/dist/ui/admin_sessions_state.svelte.d.ts +15 -8
- package/dist/ui/admin_sessions_state.svelte.d.ts.map +1 -1
- package/dist/ui/admin_sessions_state.svelte.js +30 -47
- package/dist/ui/app_settings_state.svelte.d.ts +8 -3
- package/dist/ui/app_settings_state.svelte.d.ts.map +1 -1
- package/dist/ui/app_settings_state.svelte.js +19 -27
- package/dist/ui/async_slot.svelte.d.ts +173 -0
- package/dist/ui/async_slot.svelte.d.ts.map +1 -0
- package/dist/ui/async_slot.svelte.js +241 -0
- package/dist/ui/audit_log_state.svelte.d.ts +8 -2
- package/dist/ui/audit_log_state.svelte.d.ts.map +1 -1
- package/dist/ui/audit_log_state.svelte.js +19 -18
- package/dist/ui/keyed_async_slot.svelte.d.ts +139 -0
- package/dist/ui/keyed_async_slot.svelte.d.ts.map +1 -0
- package/dist/ui/keyed_async_slot.svelte.js +177 -0
- package/dist/ui/role_grant_offers_state.svelte.d.ts +39 -7
- package/dist/ui/role_grant_offers_state.svelte.d.ts.map +1 -1
- package/dist/ui/role_grant_offers_state.svelte.js +34 -15
- package/dist/ui/table_state.svelte.d.ts +10 -7
- package/dist/ui/table_state.svelte.d.ts.map +1 -1
- package/dist/ui/table_state.svelte.js +11 -8
- package/package.json +1 -1
- package/dist/ui/loadable.svelte.d.ts +0 -60
- package/dist/ui/loadable.svelte.d.ts.map +0 -1
- package/dist/ui/loadable.svelte.js +0 -80
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
void account_sessions.fetch();
|
|
26
26
|
|
|
27
27
|
const handle_revoke_all = async (): Promise<void> => {
|
|
28
|
-
await account_sessions.
|
|
29
|
-
if (!account_sessions.error) {
|
|
28
|
+
await account_sessions.submit_revoke_all();
|
|
29
|
+
if (!account_sessions.revoke_all.error) {
|
|
30
30
|
auth_state.verified = false;
|
|
31
31
|
}
|
|
32
32
|
};
|
|
@@ -48,11 +48,15 @@
|
|
|
48
48
|
{/if}
|
|
49
49
|
</h2>
|
|
50
50
|
|
|
51
|
-
{#if account_sessions.loading}
|
|
51
|
+
{#if account_sessions.list.loading}
|
|
52
52
|
<p class="text_50">loading sessions...</p>
|
|
53
|
-
{:else if account_sessions.error}
|
|
54
|
-
<p class="color_c_50">{account_sessions.error}</p>
|
|
53
|
+
{:else if account_sessions.list.error}
|
|
54
|
+
<p class="color_c_50">{account_sessions.list.error}</p>
|
|
55
55
|
{:else}
|
|
56
|
+
{@const revoke_all_error = account_sessions.revoke_all.error}
|
|
57
|
+
{#if revoke_all_error}
|
|
58
|
+
<p class="color_c_50">{revoke_all_error}</p>
|
|
59
|
+
{/if}
|
|
56
60
|
{#if account_sessions.active_count > 1}
|
|
57
61
|
<div class="mb_md">
|
|
58
62
|
<button type="button" onclick={() => handle_revoke_all()}>revoke all</button>
|
|
@@ -76,7 +80,18 @@
|
|
|
76
80
|
{format_relative_time(row.expires_at)}
|
|
77
81
|
</span>
|
|
78
82
|
{:else if column.key === 'account_id'}
|
|
79
|
-
|
|
83
|
+
{@const revoking = account_sessions.revoke.loading(row.id)}
|
|
84
|
+
{@const revoke_error = account_sessions.revoke.error(row.id)}
|
|
85
|
+
<button
|
|
86
|
+
type="button"
|
|
87
|
+
disabled={revoking}
|
|
88
|
+
onclick={() => account_sessions.submit_revoke(row.id)}
|
|
89
|
+
>
|
|
90
|
+
{revoking ? 'revoking…' : 'revoke'}
|
|
91
|
+
</button>
|
|
92
|
+
{#if revoke_error}
|
|
93
|
+
<span class="color_c_50 font_size_sm">{revoke_error}</span>
|
|
94
|
+
{/if}
|
|
80
95
|
{:else if column.format}
|
|
81
96
|
{column.format(row[column.key], row)}
|
|
82
97
|
{:else}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccountSessions.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AccountSessions.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AccountSessions.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AccountSessions.svelte"],"names":[],"mappings":"AAiHA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,eAAe;;kBAA+E,CAAC;AACnF,KAAK,eAAe,GAAG,YAAY,CAAC,OAAO,eAAe,CAAC,CAAC;AAC9D,eAAe,eAAe,CAAC"}
|
|
@@ -9,7 +9,11 @@
|
|
|
9
9
|
* @module
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
AdminAccountsState,
|
|
14
|
+
admin_accounts_rpc_context,
|
|
15
|
+
grant_key,
|
|
16
|
+
} from './admin_accounts_state.svelte.js';
|
|
13
17
|
import ConfirmButton from './ConfirmButton.svelte';
|
|
14
18
|
import Datatable from './Datatable.svelte';
|
|
15
19
|
import type {DatatableColumn} from './datatable.js';
|
|
@@ -45,10 +49,10 @@
|
|
|
45
49
|
</p>
|
|
46
50
|
{/if}
|
|
47
51
|
|
|
48
|
-
{#if admin_accounts.loading}
|
|
52
|
+
{#if admin_accounts.list.loading}
|
|
49
53
|
<p class="text_50">loading accounts...</p>
|
|
50
|
-
{:else if admin_accounts.error}
|
|
51
|
-
<p class="color_c_50">{admin_accounts.error}</p>
|
|
54
|
+
{:else if admin_accounts.list.error}
|
|
55
|
+
<p class="color_c_50">{admin_accounts.list.error}</p>
|
|
52
56
|
{:else}
|
|
53
57
|
<Datatable {columns} rows={admin_accounts.accounts} height="400px">
|
|
54
58
|
{#snippet cell(column, row)}
|
|
@@ -92,16 +96,17 @@
|
|
|
92
96
|
{/if}
|
|
93
97
|
{#if admin_accounts.has_rpc && row.actor}
|
|
94
98
|
{@const actor_id = row.actor.id}
|
|
99
|
+
{@const revoke_error = admin_accounts.revoke.error(role_grant.id)}
|
|
95
100
|
<ConfirmButton
|
|
96
|
-
onconfirm={() => admin_accounts.
|
|
101
|
+
onconfirm={() => admin_accounts.submit_revoke(actor_id, role_grant.id)}
|
|
97
102
|
title="revoke {role_grant.role}"
|
|
98
103
|
class="sm"
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
{
|
|
104
|
-
|
|
104
|
+
label="revoke"
|
|
105
|
+
pending={admin_accounts.revoke.loading(role_grant.id)}
|
|
106
|
+
/>
|
|
107
|
+
{#if revoke_error}
|
|
108
|
+
<span class="color_c_50 font_size_sm">{revoke_error}</span>
|
|
109
|
+
{/if}
|
|
105
110
|
{/if}
|
|
106
111
|
</div>
|
|
107
112
|
{/each}
|
|
@@ -120,16 +125,17 @@
|
|
|
120
125
|
</span>
|
|
121
126
|
{/if}
|
|
122
127
|
{#if admin_accounts.has_rpc}
|
|
128
|
+
{@const retract_error = admin_accounts.retract.error(offer.id)}
|
|
123
129
|
<ConfirmButton
|
|
124
|
-
onconfirm={() => admin_accounts.
|
|
130
|
+
onconfirm={() => admin_accounts.submit_retract(offer.id)}
|
|
125
131
|
title="retract offer"
|
|
126
132
|
class="sm"
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
{
|
|
132
|
-
|
|
133
|
+
label="retract"
|
|
134
|
+
pending={admin_accounts.retract.loading(offer.id)}
|
|
135
|
+
/>
|
|
136
|
+
{#if retract_error}
|
|
137
|
+
<span class="color_c_50 font_size_sm">{retract_error}</span>
|
|
138
|
+
{/if}
|
|
133
139
|
{/if}
|
|
134
140
|
</div>
|
|
135
141
|
{/each}
|
|
@@ -139,24 +145,25 @@
|
|
|
139
145
|
{:else if column.key === 'actor'}
|
|
140
146
|
{#if admin_accounts.has_rpc}
|
|
141
147
|
{#each admin_accounts.grantable_roles as role (role)}
|
|
148
|
+
{@const key = grant_key(row.account.id, role)}
|
|
149
|
+
{@const grant_error = admin_accounts.grant.error(key)}
|
|
142
150
|
{#if !row.role_grants.some((p) => p.role === role) && !row.pending_offers.some((o) => o.role === role)}
|
|
143
151
|
<ConfirmButton
|
|
144
|
-
onconfirm={() => admin_accounts.
|
|
152
|
+
onconfirm={() => admin_accounts.submit_grant(row.account.id, role)}
|
|
145
153
|
title="offer {role}"
|
|
146
154
|
class="sm"
|
|
147
|
-
|
|
155
|
+
label={`+ ${role}`}
|
|
156
|
+
pending={admin_accounts.grant.loading(key)}
|
|
148
157
|
>
|
|
149
|
-
{#snippet children(_popover, _confirm)}
|
|
150
|
-
{admin_accounts.granting_keys.has(`${row.account.id}:${role}`)
|
|
151
|
-
? 'offering…'
|
|
152
|
-
: `+ ${role}`}
|
|
153
|
-
{/snippet}
|
|
154
158
|
{#snippet popover_content(_popover, do_confirm)}
|
|
155
159
|
<button type="button" class="color_b bg_100" onclick={() => do_confirm()}>
|
|
156
160
|
<span class="py_sm">offer '{role}' to @{row.account.username}</span>
|
|
157
161
|
</button>
|
|
158
162
|
{/snippet}
|
|
159
163
|
</ConfirmButton>
|
|
164
|
+
{#if grant_error}
|
|
165
|
+
<span class="color_c_50 font_size_sm">{grant_error}</span>
|
|
166
|
+
{/if}
|
|
160
167
|
{/if}
|
|
161
168
|
{/each}
|
|
162
169
|
{/if}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminAccounts.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminAccounts.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdminAccounts.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminAccounts.svelte"],"names":[],"mappings":"AAmKA,QAAA,MAAM,aAAa,2DAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
@@ -98,10 +98,10 @@
|
|
|
98
98
|
{/if}
|
|
99
99
|
</div>
|
|
100
100
|
|
|
101
|
-
{#if audit_log.loading}
|
|
101
|
+
{#if audit_log.list.loading}
|
|
102
102
|
<p class="text_50">loading audit log...</p>
|
|
103
|
-
{:else if audit_log.error}
|
|
104
|
-
<p class="color_c_50">{audit_log.error}</p>
|
|
103
|
+
{:else if audit_log.list.error}
|
|
104
|
+
<p class="color_c_50">{audit_log.list.error}</p>
|
|
105
105
|
{:else}
|
|
106
106
|
<Datatable {columns} rows={audit_log.events} height="500px">
|
|
107
107
|
{#snippet cell(column, row)}
|
|
@@ -25,12 +25,12 @@
|
|
|
25
25
|
let invite_username = $state.raw('');
|
|
26
26
|
|
|
27
27
|
const can_create = $derived(
|
|
28
|
-
(invite_email.trim() || invite_username.trim()) && !admin_invites.
|
|
28
|
+
(invite_email.trim() || invite_username.trim()) && !admin_invites.create.loading,
|
|
29
29
|
);
|
|
30
30
|
|
|
31
31
|
const handle_create = async (): Promise<void> => {
|
|
32
32
|
if (!can_create) return;
|
|
33
|
-
const success = await admin_invites.
|
|
33
|
+
const success = await admin_invites.submit_create(
|
|
34
34
|
invite_email.trim() || undefined,
|
|
35
35
|
invite_username.trim() || undefined,
|
|
36
36
|
);
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
type="email"
|
|
81
81
|
bind:value={invite_email}
|
|
82
82
|
placeholder="email (optional)"
|
|
83
|
-
disabled={admin_invites.
|
|
83
|
+
disabled={admin_invites.create.loading}
|
|
84
84
|
/>
|
|
85
85
|
</label>
|
|
86
86
|
<label class="grow">
|
|
@@ -89,20 +89,24 @@
|
|
|
89
89
|
type="text"
|
|
90
90
|
bind:value={invite_username}
|
|
91
91
|
placeholder="username (optional)"
|
|
92
|
-
disabled={admin_invites.
|
|
92
|
+
disabled={admin_invites.create.loading}
|
|
93
93
|
/>
|
|
94
94
|
</label>
|
|
95
95
|
</fieldset>
|
|
96
|
-
<PendingButton
|
|
96
|
+
<PendingButton
|
|
97
|
+
pending={admin_invites.create.loading}
|
|
98
|
+
disabled={!can_create}
|
|
99
|
+
onclick={handle_create}
|
|
100
|
+
>
|
|
97
101
|
create invite
|
|
98
102
|
</PendingButton>
|
|
99
103
|
</form>
|
|
100
104
|
|
|
101
|
-
{#if admin_invites.error}
|
|
102
|
-
<p class="color_c_50">{admin_invites.error}</p>
|
|
105
|
+
{#if admin_invites.list.error || admin_invites.create.error}
|
|
106
|
+
<p class="color_c_50">{admin_invites.list.error ?? admin_invites.create.error}</p>
|
|
103
107
|
{/if}
|
|
104
108
|
|
|
105
|
-
{#if admin_invites.loading}
|
|
109
|
+
{#if admin_invites.list.loading}
|
|
106
110
|
<p class="text_50">loading invites...</p>
|
|
107
111
|
{:else}
|
|
108
112
|
<Datatable {columns} rows={admin_invites.invites} height="400px">
|
|
@@ -129,16 +133,17 @@
|
|
|
129
133
|
</span>
|
|
130
134
|
{:else if column.key === 'id'}
|
|
131
135
|
{#if !row.claimed_at}
|
|
136
|
+
{@const remove_error = admin_invites.remove.error(row.id)}
|
|
132
137
|
<ConfirmButton
|
|
133
|
-
onconfirm={() => admin_invites.
|
|
138
|
+
onconfirm={() => admin_invites.submit_delete(row.id)}
|
|
134
139
|
title="delete invite"
|
|
135
140
|
class="sm"
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
{
|
|
141
|
-
|
|
141
|
+
label="delete"
|
|
142
|
+
pending={admin_invites.remove.loading(row.id)}
|
|
143
|
+
/>
|
|
144
|
+
{#if remove_error}
|
|
145
|
+
<span class="color_c_50 font_size_sm">{remove_error}</span>
|
|
146
|
+
{/if}
|
|
142
147
|
{:else}
|
|
143
148
|
<span class="text_50">-</span>
|
|
144
149
|
{/if}
|
|
@@ -89,10 +89,10 @@
|
|
|
89
89
|
<h3>accounts</h3>
|
|
90
90
|
<a href={resolve('/admin/accounts' as any)} class="text_50 font_size_sm">view all →</a>
|
|
91
91
|
</div>
|
|
92
|
-
{#if accounts.loading}
|
|
92
|
+
{#if accounts.list.loading}
|
|
93
93
|
<p class="text_50">loading...</p>
|
|
94
|
-
{:else if accounts.error}
|
|
95
|
-
<p class="color_c_50">{accounts.error}</p>
|
|
94
|
+
{:else if accounts.list.error}
|
|
95
|
+
<p class="color_c_50">{accounts.list.error}</p>
|
|
96
96
|
{:else}
|
|
97
97
|
<div class="baseline-row gap_xs">
|
|
98
98
|
<strong class="font_size_lg">{accounts.account_count}</strong>
|
|
@@ -131,10 +131,10 @@
|
|
|
131
131
|
<h3>sessions</h3>
|
|
132
132
|
<a href={resolve('/admin/sessions' as any)} class="text_50 font_size_sm">view all →</a>
|
|
133
133
|
</div>
|
|
134
|
-
{#if sessions.loading}
|
|
134
|
+
{#if sessions.list.loading}
|
|
135
135
|
<p class="text_50">loading...</p>
|
|
136
|
-
{:else if sessions.error}
|
|
137
|
-
<p class="color_c_50">{sessions.error}</p>
|
|
136
|
+
{:else if sessions.list.error}
|
|
137
|
+
<p class="color_c_50">{sessions.list.error}</p>
|
|
138
138
|
{:else}
|
|
139
139
|
<div class="baseline-row gap_xs">
|
|
140
140
|
<strong class="font_size_lg">{sessions.active_count}</strong>
|
|
@@ -161,10 +161,10 @@
|
|
|
161
161
|
<h3>invites</h3>
|
|
162
162
|
<a href={resolve('/admin/invites' as any)} class="text_50 font_size_sm">view all →</a>
|
|
163
163
|
</div>
|
|
164
|
-
{#if invites.loading}
|
|
164
|
+
{#if invites.list.loading}
|
|
165
165
|
<p class="text_50">loading...</p>
|
|
166
|
-
{:else if invites.error}
|
|
167
|
-
<p class="color_c_50">{invites.error}</p>
|
|
166
|
+
{:else if invites.list.error}
|
|
167
|
+
<p class="color_c_50">{invites.list.error}</p>
|
|
168
168
|
{:else}
|
|
169
169
|
<div class="baseline-row gap_sm">
|
|
170
170
|
<span class="text_50">public signup</span>
|
|
@@ -206,10 +206,10 @@
|
|
|
206
206
|
<h3>recent activity</h3>
|
|
207
207
|
<a href={resolve('/admin/audit-log' as any)} class="text_50 font_size_sm">view all →</a>
|
|
208
208
|
</div>
|
|
209
|
-
{#if audit_log.loading}
|
|
209
|
+
{#if audit_log.list.loading}
|
|
210
210
|
<p class="text_50">loading...</p>
|
|
211
|
-
{:else if audit_log.error}
|
|
212
|
-
<p class="color_c_50">{audit_log.error}</p>
|
|
211
|
+
{:else if audit_log.list.error}
|
|
212
|
+
<p class="color_c_50">{audit_log.list.error}</p>
|
|
213
213
|
{:else if recent_events.length === 0}
|
|
214
214
|
<p class="text_50">no events</p>
|
|
215
215
|
{:else}
|
|
@@ -234,10 +234,10 @@
|
|
|
234
234
|
<h3>security</h3>
|
|
235
235
|
<a href={resolve('/admin/audit-log' as any)} class="text_50 font_size_sm">audit log →</a>
|
|
236
236
|
</div>
|
|
237
|
-
{#if audit_log.loading}
|
|
237
|
+
{#if audit_log.list.loading}
|
|
238
238
|
<p class="text_50">loading...</p>
|
|
239
|
-
{:else if audit_log.error}
|
|
240
|
-
<p class="color_c_50">{audit_log.error}</p>
|
|
239
|
+
{:else if audit_log.list.error}
|
|
240
|
+
<p class="color_c_50">{audit_log.list.error}</p>
|
|
241
241
|
{:else}
|
|
242
242
|
<div class="baseline-row gap_xs">
|
|
243
243
|
<strong class="font_size_lg" class:color_c_50={failed_logins.length > 0}>
|
|
@@ -271,10 +271,10 @@
|
|
|
271
271
|
<div class="panel-header">
|
|
272
272
|
<h3>system</h3>
|
|
273
273
|
</div>
|
|
274
|
-
{#if app_settings.loading}
|
|
274
|
+
{#if app_settings.list.loading}
|
|
275
275
|
<p class="text_50">loading...</p>
|
|
276
|
-
{:else if app_settings.error}
|
|
277
|
-
<p class="color_c_50">{app_settings.error}</p>
|
|
276
|
+
{:else if app_settings.list.error}
|
|
277
|
+
<p class="color_c_50">{app_settings.list.error}</p>
|
|
278
278
|
{:else}
|
|
279
279
|
<div class="baseline-row gap_sm">
|
|
280
280
|
<span class="text_50">public signup</span>
|
|
@@ -308,10 +308,8 @@
|
|
|
308
308
|
await auth_state.logout();
|
|
309
309
|
}}
|
|
310
310
|
title="log out"
|
|
311
|
+
label="log out"
|
|
311
312
|
>
|
|
312
|
-
{#snippet children(_popover, _confirm)}
|
|
313
|
-
log out
|
|
314
|
-
{/snippet}
|
|
315
313
|
{#snippet popover_button_content()}
|
|
316
314
|
<span class="p_md"> log out </span>
|
|
317
315
|
{/snippet}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminOverview.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminOverview.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdminOverview.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminOverview.svelte"],"names":[],"mappings":"AA2UA,QAAA,MAAM,aAAa,2DAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
<section>
|
|
41
41
|
<h1>role_grant history</h1>
|
|
42
42
|
|
|
43
|
-
{#if audit_log.loading}
|
|
43
|
+
{#if audit_log.role_grant_history.loading}
|
|
44
44
|
<p class="text_50">loading role_grant history...</p>
|
|
45
|
-
{:else if audit_log.error}
|
|
46
|
-
<p class="color_c_50">{audit_log.error}</p>
|
|
45
|
+
{:else if audit_log.role_grant_history.error}
|
|
46
|
+
<p class="color_c_50">{audit_log.role_grant_history.error}</p>
|
|
47
47
|
{:else}
|
|
48
48
|
<Datatable {columns} rows={audit_log.role_grant_history_events} height="400px" row_key="id">
|
|
49
49
|
{#snippet cell(column, row)}
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
</p>
|
|
41
41
|
{/if}
|
|
42
42
|
|
|
43
|
-
{#if admin_sessions.loading}
|
|
43
|
+
{#if admin_sessions.list.loading}
|
|
44
44
|
<p class="text_50">loading sessions...</p>
|
|
45
|
-
{:else if admin_sessions.error}
|
|
46
|
-
<p class="color_c_50">{admin_sessions.error}</p>
|
|
45
|
+
{:else if admin_sessions.list.error}
|
|
46
|
+
<p class="color_c_50">{admin_sessions.list.error}</p>
|
|
47
47
|
{:else}
|
|
48
48
|
<Datatable {columns} rows={admin_sessions.sessions} height="400px">
|
|
49
49
|
{#snippet cell(column, row)}
|
|
@@ -63,30 +63,28 @@
|
|
|
63
63
|
</span>
|
|
64
64
|
{:else if column.key === 'account_id'}
|
|
65
65
|
{#if admin_sessions.has_rpc}
|
|
66
|
+
{@const revoke_sessions_error = admin_sessions.revoke_sessions.error(row.account_id)}
|
|
67
|
+
{@const revoke_tokens_error = admin_sessions.revoke_tokens.error(row.account_id)}
|
|
66
68
|
<ConfirmButton
|
|
67
|
-
onconfirm={() => admin_sessions.
|
|
69
|
+
onconfirm={() => admin_sessions.submit_revoke_sessions(row.account_id)}
|
|
68
70
|
title="revoke all sessions for {row.username}"
|
|
69
71
|
class="sm"
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
{/snippet}
|
|
77
|
-
</ConfirmButton>
|
|
72
|
+
label="revoke sessions"
|
|
73
|
+
pending={admin_sessions.revoke_sessions.loading(row.account_id)}
|
|
74
|
+
/>
|
|
75
|
+
{#if revoke_sessions_error}
|
|
76
|
+
<span class="color_c_50 font_size_sm">{revoke_sessions_error}</span>
|
|
77
|
+
{/if}
|
|
78
78
|
<ConfirmButton
|
|
79
|
-
onconfirm={() => admin_sessions.
|
|
79
|
+
onconfirm={() => admin_sessions.submit_revoke_tokens(row.account_id)}
|
|
80
80
|
title="revoke all tokens for {row.username}"
|
|
81
81
|
class="sm"
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
{/snippet}
|
|
89
|
-
</ConfirmButton>
|
|
82
|
+
label="revoke tokens"
|
|
83
|
+
pending={admin_sessions.revoke_tokens.loading(row.account_id)}
|
|
84
|
+
/>
|
|
85
|
+
{#if revoke_tokens_error}
|
|
86
|
+
<span class="color_c_50 font_size_sm">{revoke_tokens_error}</span>
|
|
87
|
+
{/if}
|
|
90
88
|
{/if}
|
|
91
89
|
{:else if column.format}
|
|
92
90
|
{column.format(row[column.key], row)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminSessions.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminSessions.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdminSessions.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminSessions.svelte"],"names":[],"mappings":"AAoGA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,aAAa;;kBAA+E,CAAC;AACjF,KAAK,aAAa,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAC1D,eAAe,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdminSettings.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminSettings.svelte"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AdminSettings.svelte.d.ts","sourceRoot":"../src/lib/","sources":["../../src/lib/ui/AdminSettings.svelte"],"names":[],"mappings":"AA8CA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,aAAa;;kBAA+E,CAAC;AACjF,KAAK,aAAa,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAC1D,eAAe,aAAa,CAAC"}
|