@aiquants/auth-react-router 0.15.0 → 0.16.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/README.md +100 -7
- package/dist/admin.d.mts +13 -436
- package/dist/admin.d.ts +13 -436
- package/dist/admin.js +1 -2
- package/dist/admin.mjs +1 -2
- package/dist/client.d.mts +1 -10
- package/dist/client.d.ts +1 -10
- package/dist/client.js +0 -1
- package/dist/client.mjs +0 -1
- package/dist/server.d.mts +6 -146
- package/dist/server.d.ts +6 -146
- package/dist/server.js +0 -1
- package/dist/server.mjs +0 -1
- package/package.json +12 -16
- package/dist/admin.js.map +0 -1
- package/dist/admin.mjs.map +0 -1
- package/dist/client.js.map +0 -1
- package/dist/client.mjs.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/server.mjs.map +0 -1
- package/src/admin/app.ts +0 -9
- package/src/admin/format.ts +0 -58
- package/src/admin/labels.ts +0 -838
- package/src/admin/server.ts +0 -1143
- package/src/admin/ui.tsx +0 -276
- package/src/admin/views.tsx +0 -2120
- package/src/admin.ts +0 -5
- package/src/client/GoogleForm.tsx +0 -47
- package/src/client.ts +0 -6
- package/src/server/auth-server.ts +0 -69
- package/src/server/authenticate-in-loader.ts +0 -243
- package/src/server/authenticate.ts +0 -224
- package/src/server/google-strategy-impl.ts +0 -154
- package/src/server/google-strategy.ts +0 -183
- package/src/server/handlers.ts +0 -139
- package/src/server/logger.ts +0 -14
- package/src/server/ports.ts +0 -113
- package/src/server/session.ts +0 -132
- package/src/server.ts +0 -14
- package/src/styles/standalone.entry.css +0 -6
package/dist/admin.d.ts
CHANGED
|
@@ -1,33 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* Labels and i18n strings for the user administration UI.
|
|
7
|
-
* ユーザー管理 UI で使用するラベルと i18n 文字列の定義。
|
|
8
|
-
*
|
|
9
|
-
* パッケージ既定は **英語** ([defaultUserAdminLabels])。日本語で使う場合はアプリ側が
|
|
10
|
-
* [jaUserAdminLabels] を明示的に注入する (認可管理 `@aiquants/authz-react-router` と同じ規約)。
|
|
11
|
-
* UI 文字列はすべて本モジュールに集約し、コンポーネント側へ直書きしないこと — 直書きすると
|
|
12
|
-
* 日本語以外の利用者がその箇所を差し替えられなくなる。
|
|
13
|
-
*/
|
|
1
|
+
import { VirtualScrollLocale } from "@aiquants/virtualscroll";
|
|
2
|
+
import * as react_router from "react-router";
|
|
3
|
+
import { AuthUser, AuthGroup, AuthGroupMember, AuthAllowlistEntry, AuthDirectoryMembershipMode, AuthDirectoryStatus, AuthDirectoryCatalogSnapshot, AuthDirectoryCatalogGroup } from "@aiquants/auth-core";
|
|
4
|
+
import React__default from "react";
|
|
5
|
+
type UserAdminLocale = VirtualScrollLocale;
|
|
14
6
|
type UserAdminLabels = {
|
|
15
7
|
title: string;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
*
|
|
19
|
-
* 実行環境任せにするとサーバーとブラウザで別の文字列になり、水和が壊れる。
|
|
20
|
-
*/
|
|
21
|
-
locale: string;
|
|
22
|
-
/** IANA time zone used to format dates. 日付整形に使う IANA タイムゾーン。 */
|
|
8
|
+
locale: UserAdminLocale;
|
|
9
|
+
formatLocale: string;
|
|
23
10
|
timeZone: string;
|
|
24
|
-
/**
|
|
25
|
-
* Strings shared by more than one view. 複数のビューが共有する文言。
|
|
26
|
-
*
|
|
27
|
-
* ビューごとに同じ語を持たせると、ある画面の「削除」だけを言い換えることが **できなく
|
|
28
|
-
* なる** (実装がどのビューのキーを読んでいるかは呼び出し側から見えない)。共有する語は
|
|
29
|
-
* ここ 1 か所に置く。
|
|
30
|
-
*/
|
|
31
11
|
common: {
|
|
32
12
|
create: string;
|
|
33
13
|
edit: string;
|
|
@@ -37,70 +17,30 @@ type UserAdminLabels = {
|
|
|
37
17
|
actions: string;
|
|
38
18
|
status: string;
|
|
39
19
|
id: string;
|
|
40
|
-
/** 変更不能な供給元 (環境変数など) 由来の行に出す表示。 */
|
|
41
20
|
readOnly: string;
|
|
42
|
-
/** 上流所有のグループに出す編集不可の表示。 */
|
|
43
21
|
managedUpstream: string;
|
|
44
|
-
/** `#{id}` の表示。記号の位置は言語で変わる。 */
|
|
45
22
|
idTemplate: string;
|
|
46
|
-
/** 値が無いことの表示 (説明欄など)。 */
|
|
47
23
|
none: string;
|
|
48
24
|
};
|
|
49
|
-
/** アクションが拒否・失敗したときの文言。 */
|
|
50
25
|
errors: {
|
|
51
|
-
/** 一覧に無い上流キーを指定した。`{key}` に受け取った値。 */
|
|
52
26
|
unknownUpstream: string;
|
|
53
|
-
/** その上流グループは既に別のローカルグループへ連携している。`{key}` / `{group}`。 */
|
|
54
27
|
alreadyLinked: string;
|
|
55
|
-
/** ディレクトリ未設定の配備で連携を求められたときの説明。 */
|
|
56
28
|
directoryDisabled: string;
|
|
57
|
-
/** 必須欄が欠けている、または読めない値だったことの説明。 */
|
|
58
29
|
invalidField: string;
|
|
59
|
-
/**
|
|
60
|
-
* Shown for an intent this screen does not perform. この画面が行わない intent への文言。
|
|
61
|
-
*
|
|
62
|
-
* ⚠️ 受け取った値を含めない。認可より手前で返るため、認証を通っていない相手にも届く。
|
|
63
|
-
*/
|
|
64
30
|
unknownIntent: string;
|
|
65
|
-
/**
|
|
66
|
-
* Operator-facing names for the form fields. 欄の、操作者に見える名前。
|
|
67
|
-
*
|
|
68
|
-
* ⚠️ `invalidField` の `{field}` に **通信上のキー** を差し込まない。日本語の文の中に
|
|
69
|
-
* `membershipMode` のような識別子が現れ、画面のどの欄を指すのか操作者には判らない。
|
|
70
|
-
* 表に無い欄はキーのまま出す (出さないより、判りにくくても出すほうがよい)。
|
|
71
|
-
*/
|
|
72
31
|
fieldNames: Record<string, string>;
|
|
73
|
-
/** 許可リストの種別が既定の 2 値でなかったことの説明。 */
|
|
74
32
|
invalidAllowlistType: string;
|
|
75
|
-
/** 想定外の失敗 (原文はサーバーのログにだけ残す)。 */
|
|
76
33
|
unexpected: string;
|
|
77
|
-
/**
|
|
78
|
-
* Shown when the actor lacks permission for the attempted operation.
|
|
79
|
-
* 操作の権限が無いときに出す文言。
|
|
80
|
-
*
|
|
81
|
-
* ガードの例外メッセージをそのまま返してはならない。テナント ID・アプリキー・
|
|
82
|
-
* 拒否理由といった内部の語彙が、権限を持たない相手にそのまま渡る。
|
|
83
|
-
*/
|
|
84
34
|
forbidden: string;
|
|
85
|
-
/**
|
|
86
|
-
* Shown when the request body exceeds the ceiling. 本文が上限を越えたときの文言。
|
|
87
|
-
*
|
|
88
|
-
* この画面が送るのは短い文字列だけなので、越えるのは誤操作か攻撃である。どちらにも
|
|
89
|
-
* 同じ文言を返す (どこで弾かれたかを細かく教えない)。
|
|
90
|
-
*/
|
|
91
35
|
requestTooLarge: string;
|
|
92
36
|
};
|
|
93
|
-
/** シェル (タブ枠) の見出し。 */
|
|
94
37
|
heading: string;
|
|
95
|
-
/** シェルが描く自己権限バッジの文言。 */
|
|
96
38
|
permissions: {
|
|
97
39
|
label: string;
|
|
98
40
|
canWrite: string;
|
|
99
41
|
canRead: string;
|
|
100
|
-
/** 削除だけを持つ主体の表示 (読み書きが無いことを「権限なし」と描かない)。 */
|
|
101
42
|
canDelete: string;
|
|
102
43
|
none: string;
|
|
103
|
-
/** 未結線・取得失敗・付与ゼロのいずれも「不明」であり、許可ではない。 */
|
|
104
44
|
unknown: string;
|
|
105
45
|
};
|
|
106
46
|
tabs: {
|
|
@@ -112,10 +52,8 @@ type UserAdminLabels = {
|
|
|
112
52
|
};
|
|
113
53
|
usersView: {
|
|
114
54
|
title: string;
|
|
115
|
-
/** 並べ替えの読み上げ名。`{column}` は列名。 */
|
|
116
55
|
sortBy: string;
|
|
117
56
|
searchPlaceholder: string;
|
|
118
|
-
/** 検索欄の読み上げ名。プレースホルダは入力すると消えるため名前にならない。 */
|
|
119
57
|
searchLabel: string;
|
|
120
58
|
addUser: string;
|
|
121
59
|
editUser: string;
|
|
@@ -125,58 +63,33 @@ type UserAdminLabels = {
|
|
|
125
63
|
inactive: string;
|
|
126
64
|
activate: string;
|
|
127
65
|
deactivate: string;
|
|
128
|
-
/** 行ごとの読み上げ名。`{user}` を利用者名へ置換する。 */
|
|
129
66
|
editUserAria: string;
|
|
130
67
|
activateAria: string;
|
|
131
68
|
deactivateAria: string;
|
|
132
|
-
/** 無効化はサインインを止める。確認を取る。 */
|
|
133
|
-
/** 検索で 0 件になったときの文言 (「登録が無い」と区別する)。 */
|
|
134
69
|
emptyFiltered: string;
|
|
135
|
-
/** 一覧の絞り込み結果を読み上げるための文言。 */
|
|
136
70
|
listSummary: string;
|
|
137
|
-
/** 昇順で並べ替え中の列の読み上げ名。 */
|
|
138
71
|
sortedAscending: string;
|
|
139
|
-
/** 降順で並べ替え中の列の読み上げ名。 */
|
|
140
72
|
sortedDescending: string;
|
|
141
73
|
confirmDeactivate: string;
|
|
142
74
|
empty: string;
|
|
143
75
|
};
|
|
144
76
|
groupsView: {
|
|
145
|
-
/** 検索語に一致しないときの説明。空状態と混ぜると「消えた」と誤読される。 */
|
|
146
77
|
emptyFiltered: string;
|
|
147
|
-
/** 作成方法の切替。ローカルに作るか、上流のグループから作るか。 */
|
|
148
|
-
/** 作成方法を選ぶ操作群の読み上げ名。 */
|
|
149
78
|
createModeLabel: string;
|
|
150
79
|
createModeLocal: string;
|
|
151
80
|
createModeUpstream: string;
|
|
152
|
-
/** 上流グループを選ぶ欄。 */
|
|
153
81
|
pickUpstream: string;
|
|
154
82
|
pickUpstreamPlaceholder: string;
|
|
155
|
-
/** 選択肢 1 件の副題。`{count}` はメンバー数。 */
|
|
156
83
|
upstreamOptionMembers: string;
|
|
157
|
-
/** すでに連携済みの選択肢に付ける表示。 */
|
|
158
84
|
upstreamAlreadyLinked: string;
|
|
159
|
-
/** 候補一覧が引けなかったときの説明。`{reason}` に理由。 */
|
|
160
|
-
/** 候補は引けたが、この配備の連携プロバイダ名が決まっていないことの説明。 */
|
|
161
85
|
providerUnset: string;
|
|
162
|
-
/** 候補を選ぶまで作成できないことの説明 (押せないボタンの理由)。 */
|
|
163
86
|
pickUpstreamFirst: string;
|
|
164
|
-
/**
|
|
165
|
-
* Shown when every upstream group is already linked. 上流のすべてが連携済みのときの文言。
|
|
166
|
-
*
|
|
167
|
-
* ⚠️ この場面で「先に選べ」と言ってはならない。従いようのない指示になる。
|
|
168
|
-
*/
|
|
169
87
|
allUpstreamLinked: string;
|
|
170
|
-
/** 上流を読めたが 1 件も無かったことの説明。 */
|
|
171
88
|
catalogEmpty: string;
|
|
172
89
|
catalogUnavailable: string;
|
|
173
|
-
/** 上流へ届かないときの案内 (作成対話向け — この対話にアドレス欄は無い)。 */
|
|
174
90
|
catalogUnavailableHere: string;
|
|
175
|
-
/** 候補一覧をいつ観測したか。 */
|
|
176
91
|
catalogObservedAt: string;
|
|
177
|
-
/** 観測が配備の許す鮮度を越えている旨。 */
|
|
178
92
|
catalogStale: string;
|
|
179
|
-
/** 候補一覧を引けなかった理由の文言 (上流の例外文は使わない)。 */
|
|
180
93
|
catalogFailures: {
|
|
181
94
|
denied: string;
|
|
182
95
|
rateLimited: string;
|
|
@@ -184,9 +97,7 @@ type UserAdminLabels = {
|
|
|
184
97
|
neverObserved: string;
|
|
185
98
|
unknown: string;
|
|
186
99
|
};
|
|
187
|
-
/** 上流から作る場合の説明 (何が起きるかを先に伝える)。 */
|
|
188
100
|
createUpstreamNotice: string;
|
|
189
|
-
/** グループのメンバー面へ移動する操作。 */
|
|
190
101
|
openMembers: string;
|
|
191
102
|
openMembersAria: string;
|
|
192
103
|
title: string;
|
|
@@ -197,12 +108,9 @@ type UserAdminLabels = {
|
|
|
197
108
|
groupKey: string;
|
|
198
109
|
name: string;
|
|
199
110
|
description: string;
|
|
200
|
-
/** 所属人数。`{count}` を人数へ置換する。 */
|
|
201
111
|
memberCountTemplate: string;
|
|
202
112
|
confirmDelete: string;
|
|
203
|
-
/** 連携付きで作る前の確認。`{group}` / `{upstream}`。委譲は元に戻しづらい。 */
|
|
204
113
|
confirmCreateLinked: string;
|
|
205
|
-
/** 行ごとの読み上げ名。`{group}` をグループ名へ置換する。 */
|
|
206
114
|
editGroupAria: string;
|
|
207
115
|
deleteGroupAria: string;
|
|
208
116
|
noDescription: string;
|
|
@@ -212,33 +120,22 @@ type UserAdminLabels = {
|
|
|
212
120
|
};
|
|
213
121
|
groupMembersView: {
|
|
214
122
|
title: string;
|
|
215
|
-
/** 利用者の絞り込み。数百人の一覧を目で追わせない。 */
|
|
216
123
|
searchLabel: string;
|
|
217
124
|
searchPlaceholder: string;
|
|
218
|
-
/** 所属している人だけに絞る切替。`{count}` は該当数。 */
|
|
219
125
|
onlyMembers: string;
|
|
220
|
-
/** 絞り込み結果が空のときの説明。 */
|
|
221
126
|
emptyFiltered: string;
|
|
222
|
-
/** 一覧の要約。`{shown}` / `{total}` / `{members}`。 */
|
|
223
127
|
summary: string;
|
|
224
128
|
selectGroup: string;
|
|
225
129
|
selectPrompt: string;
|
|
226
|
-
/** グループが 1 つも無い配備での説明 (「選べ」は従えない指示になる)。 */
|
|
227
130
|
noGroups: string;
|
|
228
|
-
/** 所属だけに絞った結果 0 件になったときの説明。 */
|
|
229
131
|
emptyNoMembers: string;
|
|
230
|
-
/** 利用者が 1 人も登録されていない配備での説明。 */
|
|
231
132
|
noUsers: string;
|
|
232
|
-
/** 深いリンクが指すグループが見つからず、代替を出していることの説明。 */
|
|
233
133
|
deepLinkMissed: string;
|
|
234
134
|
actionAdd: string;
|
|
235
135
|
actionRemove: string;
|
|
236
|
-
/** 行ごとの読み上げ名。`{user}` を利用者名へ置換する。 */
|
|
237
136
|
actionAddAria: string;
|
|
238
137
|
actionRemoveAria: string;
|
|
239
|
-
/** 上流所有グループで編集を出さない理由。押せない理由を書かないと故障に見える。 */
|
|
240
138
|
upstreamNotice: string;
|
|
241
|
-
/** 見出し。`{group}` をグループ名へ置換する。語順が言語で変わるため位置指定にする。 */
|
|
242
139
|
membersOfTemplate: string;
|
|
243
140
|
groupKeyLabel: string;
|
|
244
141
|
};
|
|
@@ -249,19 +146,13 @@ type UserAdminLabels = {
|
|
|
249
146
|
type: string;
|
|
250
147
|
emailType: string;
|
|
251
148
|
domainType: string;
|
|
252
|
-
/** 一覧のバッジ表示 (短縮形)。 */
|
|
253
149
|
emailTypeShort: string;
|
|
254
150
|
domainTypeShort: string;
|
|
255
|
-
/** グループ単位の許可。上流ディレクトリの所属で判定される。 */
|
|
256
151
|
groupTypeShort: string;
|
|
257
|
-
/** 対象列の見出し。パターンとグループが混在するため「パターン」ではない。 */
|
|
258
152
|
target: string;
|
|
259
153
|
description: string;
|
|
260
|
-
/** 配備全体が所有する行 (環境変数由来) の所有者表示。 */
|
|
261
154
|
deploymentOwner: string;
|
|
262
|
-
/** 許可の取り消しはサインインを止める。確認を取る。 */
|
|
263
155
|
confirmDelete: string;
|
|
264
|
-
/** 行ごとの読み上げ名。`{target}` を対象へ置換する。 */
|
|
265
156
|
deleteAria: string;
|
|
266
157
|
empty: string;
|
|
267
158
|
};
|
|
@@ -272,38 +163,24 @@ type UserAdminLabels = {
|
|
|
272
163
|
transitiveMode: string;
|
|
273
164
|
lastSynced: string;
|
|
274
165
|
neverSynced: string;
|
|
275
|
-
/** 上流に居るがローカルユーザーへ解決できていない人数。`{count}` を人数へ置換する。 */
|
|
276
166
|
unresolvedTemplate: string;
|
|
277
167
|
syncPaused: string;
|
|
278
168
|
syncEnabled: string;
|
|
279
169
|
syncNow: string;
|
|
280
170
|
syncQueued: string;
|
|
281
|
-
/** 同じ範囲の要求が既に待っていて、積まれなかったことの説明。 */
|
|
282
171
|
syncAlreadyPending: string;
|
|
283
|
-
/** 連携は作れたが、その直後の同期要求を積めなかったときの告知。 */
|
|
284
172
|
linkSyncNotQueued: string;
|
|
285
|
-
/** 同期が滞っていることの警告。停止はセキュリティ事象である。 */
|
|
286
173
|
staleWarning: string;
|
|
287
174
|
disabledWarning: string;
|
|
288
|
-
/** 停止件数。`{paused}` / `{total}` を件数へ置換する。 */
|
|
289
175
|
pausedTemplate: string;
|
|
290
|
-
/** 失敗したグループの列挙。`{groups}` を名前の並びへ置換する。 */
|
|
291
176
|
erroredTemplate: string;
|
|
292
|
-
/** 失敗理由付きの 1 件。`{group}` / `{reason}`。 */
|
|
293
177
|
erroredItemTemplate: string;
|
|
294
|
-
/** 列挙の区切り。言語で変わる。 */
|
|
295
178
|
listSeparator: string;
|
|
296
|
-
/** 滞留警告に添える最終成功時刻。`{at}`。 */
|
|
297
179
|
oldestSyncedTemplate: string;
|
|
298
|
-
/** 未処理の同期要求。`{count}`。 */
|
|
299
180
|
pendingTemplate: string;
|
|
300
|
-
/** 連携先が 1 つも残っていないときの説明。 */
|
|
301
181
|
nothingToLink: string;
|
|
302
|
-
/** グループが 1 つも無い配備での説明 (「全部が連携済み」と区別する)。 */
|
|
303
182
|
noGroupsToLink: string;
|
|
304
|
-
/** 未結線の配備で操作を出さない理由。 */
|
|
305
183
|
notWiredNotice: string;
|
|
306
|
-
/** 行ごとの読み上げ名。`{group}` をグループ名へ置換する。 */
|
|
307
184
|
syncNowAria: string;
|
|
308
185
|
syncQueuedAria: string;
|
|
309
186
|
pauseAria: string;
|
|
@@ -311,54 +188,34 @@ type UserAdminLabels = {
|
|
|
311
188
|
allowGroupAria: string;
|
|
312
189
|
disallowGroupAria: string;
|
|
313
190
|
unlinkAria: string;
|
|
314
|
-
/** グループ単位のサインイン許可を外す確認。 */
|
|
315
191
|
confirmDisallow: string;
|
|
316
192
|
link: string;
|
|
317
193
|
unlink: string;
|
|
318
194
|
externalKey: string;
|
|
319
195
|
empty: string;
|
|
320
|
-
/** 連携するグループを選ぶ欄。 */
|
|
321
196
|
selectGroup: string;
|
|
322
|
-
/** 選択欄が自前で持つ文言。渡さないと英語のまま出る。 */
|
|
323
|
-
/** 選択欄の入力の手引き。 */
|
|
324
197
|
pickUpstreamPlaceholder: string;
|
|
325
198
|
pickerNoOptions: string;
|
|
326
199
|
pickerClear: string;
|
|
327
200
|
pickerToggle: string;
|
|
328
|
-
/** 選択中の値の読み上げ。`{value}`。 */
|
|
329
201
|
pickerSelected: string;
|
|
330
|
-
/** 候補件数の読み上げ。`{count}`。 */
|
|
331
202
|
pickerAvailable: string;
|
|
332
|
-
/** 上流グループのアドレス入力。 */
|
|
333
203
|
externalKeyPlaceholder: string;
|
|
334
|
-
/** 連携解除の確認。台帳と許可設定が消える。 */
|
|
335
|
-
/** 連携を作る前の確認 (元へ戻すには連携解除という別の操作が要る)。 */
|
|
336
204
|
confirmLink: string;
|
|
337
205
|
confirmUnlink: string;
|
|
338
|
-
/** 同期の一時停止・再開。 */
|
|
339
206
|
pause: string;
|
|
340
207
|
resume: string;
|
|
341
|
-
/** 許可グループに加える / 外す。 */
|
|
342
208
|
allowGroup: string;
|
|
343
209
|
disallowGroup: string;
|
|
344
|
-
/** グループ名と鍵の併記。`{name}` / `{key}`。 */
|
|
345
210
|
groupOptionTemplate: string;
|
|
346
211
|
};
|
|
347
212
|
};
|
|
348
|
-
/**
|
|
349
|
-
* Package default labels (English).
|
|
350
|
-
* パッケージ既定ラベル (英語)。
|
|
351
|
-
*/
|
|
352
213
|
declare const defaultUserAdminLabels: UserAdminLabels;
|
|
353
|
-
/**
|
|
354
|
-
* Standard Japanese labels for user administration (opt-in).
|
|
355
|
-
* ユーザー管理の標準日本語ラベル (アプリ側で明示注入して使う)。
|
|
356
|
-
*/
|
|
357
214
|
declare const jaUserAdminLabels: UserAdminLabels;
|
|
358
|
-
/** セクション単位の部分上書き。 */
|
|
359
215
|
type PartialUserAdminLabels = {
|
|
360
216
|
title?: string;
|
|
361
|
-
locale?:
|
|
217
|
+
locale?: UserAdminLocale;
|
|
218
|
+
formatLocale?: string;
|
|
362
219
|
timeZone?: string;
|
|
363
220
|
common?: Partial<UserAdminLabels["common"]>;
|
|
364
221
|
errors?: Partial<UserAdminLabels["errors"]>;
|
|
@@ -371,16 +228,7 @@ type PartialUserAdminLabels = {
|
|
|
371
228
|
allowlistView?: Partial<UserAdminLabels["allowlistView"]>;
|
|
372
229
|
directoryView?: Partial<UserAdminLabels["directoryView"]>;
|
|
373
230
|
};
|
|
374
|
-
/**
|
|
375
|
-
* Shallow per-section merge over the English defaults.
|
|
376
|
-
* 英語既定に対してセクション単位で浅くマージする処理。
|
|
377
|
-
*/
|
|
378
231
|
declare function resolveUserAdminLabels(over?: PartialUserAdminLabels): UserAdminLabels;
|
|
379
|
-
|
|
380
|
-
/**
|
|
381
|
-
* Server store interface for managing users, groups, memberships, and allowlists.
|
|
382
|
-
* ユーザー・グループ・所属・アロワリストを管理するサーバー層ストアのインターフェース。
|
|
383
|
-
*/
|
|
384
232
|
type UserAdminStore = {
|
|
385
233
|
listUsers: () => Promise<AuthUser[]>;
|
|
386
234
|
createUser: (data: {
|
|
@@ -413,35 +261,14 @@ type UserAdminStore = {
|
|
|
413
261
|
description?: string;
|
|
414
262
|
}) => Promise<AuthAllowlistEntry>;
|
|
415
263
|
removeAllowlistEntry: (id: number) => Promise<void>;
|
|
416
|
-
/**
|
|
417
|
-
* Allows every member of an externally-sourced group to sign in.
|
|
418
|
-
* 外部供給グループのメンバー全員にサインインを許可する処理。
|
|
419
|
-
*
|
|
420
|
-
* 判定は上流メンバー台帳を読むため、ローカル管理のグループを渡しても誰にも何も与えない。
|
|
421
|
-
* ストアはそれを拒否すること (無言の no-op を作らない)。
|
|
422
|
-
*/
|
|
423
264
|
addAllowlistGroup: (groupId: number, description?: string) => Promise<void>;
|
|
424
265
|
removeAllowlistGroup: (id: number) => Promise<void>;
|
|
425
|
-
/**
|
|
426
|
-
* Links a local group to a group in the upstream directory.
|
|
427
|
-
* ローカルグループを上流ディレクトリのグループへ結び付ける処理。
|
|
428
|
-
*
|
|
429
|
-
* リンク後、そのグループの名称と所属は上流が所有する。ロール割当はローカルのままである。
|
|
430
|
-
*/
|
|
431
266
|
linkDirectoryGroup: (groupId: number, data: {
|
|
432
267
|
provider: string;
|
|
433
268
|
externalId: string;
|
|
434
269
|
externalKey: string;
|
|
435
270
|
membershipMode: AuthDirectoryMembershipMode;
|
|
436
271
|
}) => Promise<void>;
|
|
437
|
-
/**
|
|
438
|
-
* Creates a local group and links it to an upstream group as one indivisible step.
|
|
439
|
-
* ローカルグループの作成と上流への連携を、分割不可能な 1 手として行う処理。
|
|
440
|
-
*
|
|
441
|
-
* ⚠️ **途中で失敗したら何も残してはならない。** 作成だけが成功すると、運用者には「連携に
|
|
442
|
-
* 失敗した」ではなく「知らないグループが増えた」と見える。実装は 1 つのトランザクションで
|
|
443
|
-
* 行うこと (作成 → 連携の順に別々の書込を並べると、この不可分性は成立しない)。
|
|
444
|
-
*/
|
|
445
272
|
createLinkedGroup: (data: {
|
|
446
273
|
groupKey: string;
|
|
447
274
|
name: string;
|
|
@@ -451,161 +278,45 @@ type UserAdminStore = {
|
|
|
451
278
|
externalKey: string;
|
|
452
279
|
membershipMode: AuthDirectoryMembershipMode;
|
|
453
280
|
}) => Promise<AuthGroup>;
|
|
454
|
-
/** Stops following the upstream, keeping the memberships already projected. 連携の解除。 */
|
|
455
281
|
unlinkDirectoryGroup: (groupId: number) => Promise<void>;
|
|
456
|
-
/** Pauses or resumes synchronization for one group. 1 グループの同期を停止・再開する処理。 */
|
|
457
282
|
setDirectorySyncEnabled: (groupId: number, isSyncEnabled: boolean) => Promise<void>;
|
|
458
|
-
/**
|
|
459
|
-
* Queues a "sync now" request. 「今すぐ同期」の要求を積む処理。
|
|
460
|
-
*
|
|
461
|
-
* ⚠️ 戻り値を `void` にしてはならない。同じ範囲の要求が既に待っているとき、積み増さないのは
|
|
462
|
-
* 正しい (押した数だけ上流への全件走査が並ぶ) が、それを成功と区別せずに返すと、押しても
|
|
463
|
-
* 反応しない画面ができる — しかも詰まった 1 行が以後の押下すべてを飲み込む。
|
|
464
|
-
*
|
|
465
|
-
* @param groupId Target group, or `null` for the whole tenant. 対象グループ (`null` でテナント全件)。
|
|
466
|
-
* @param actor Who asked, for the audit record. 要求した主体 (監査記録用)。
|
|
467
|
-
* @returns Whether it was queued or already waiting. 積んだか、既に待っていたか。
|
|
468
|
-
*/
|
|
469
283
|
requestDirectorySync: (groupId: number | null, actor: string) => Promise<UserAdminSyncRequestOutcome>;
|
|
470
|
-
/** Health of the synchronization, for the header warning. 同期の健全性 (警告表示用)。 */
|
|
471
284
|
getDirectoryStatus: () => Promise<AuthDirectoryStatus>;
|
|
472
285
|
};
|
|
473
|
-
/**
|
|
474
|
-
* Creates an in-memory UserAdminStore initialized with optional seed data.
|
|
475
|
-
* シードデータで初期化されるメモリ上の UserAdminStore を作成する。
|
|
476
|
-
*/
|
|
477
286
|
declare function createInMemoryUserAdminStore(initial?: {
|
|
478
287
|
users?: AuthUser[];
|
|
479
288
|
groups?: AuthGroup[];
|
|
480
289
|
groupMembers?: AuthGroupMember[];
|
|
481
290
|
allowlist?: AuthAllowlistEntry[];
|
|
482
291
|
}): UserAdminStore;
|
|
483
|
-
/**
|
|
484
|
-
* Normalizes an upstream key for comparison. 上流キーを比較用に正規化する処理。
|
|
485
|
-
*
|
|
486
|
-
* 前後の空白と大文字小文字を同一視する。**画面と実装で正規化がずれると**、選択欄は「未連携」と
|
|
487
|
-
* 見なすキーをサーバーが「連携済み」と見なす、といった食い違いが生まれる。1 か所に置く。
|
|
488
|
-
*
|
|
489
|
-
* @param key Raw upstream key. 生の上流キー。
|
|
490
|
-
* @returns The comparable form. 比較可能な形。
|
|
491
|
-
*/
|
|
492
292
|
declare function normalizeUpstreamKey(key: string): string;
|
|
493
|
-
/**
|
|
494
|
-
* An error whose own text is meant for the operator to read.
|
|
495
|
-
* 文面を **運用者に読ませるつもりで** 投げるエラー。
|
|
496
|
-
*
|
|
497
|
-
* ⚠️ ストアの例外文をそのまま画面へ返してはならない。ドライバの例外はスキーマ名・表名・制約名・
|
|
498
|
-
* 衝突した値・接続先をそのまま含み、それが閲覧権限しか持たない主体の画面に出る。一方で
|
|
499
|
-
* 「最後の管理者は外せません」のような業務上の拒否理由は、読めなければ操作そのものが行き詰まる。
|
|
500
|
-
* 両者は文面からは区別できないので、**投げる側が宣言する**。宣言の無い例外は一般的な文言になる。
|
|
501
|
-
*
|
|
502
|
-
* ホストのストアは、この class を継承しても `operatorFacing: true` を持たせてもよい
|
|
503
|
-
* (別パッケージのエラー型を継承できない事情に配慮した二経路である)。
|
|
504
|
-
*/
|
|
505
293
|
declare class UserAdminOperatorError extends Error {
|
|
506
|
-
/** 運用者向けであることの印。継承できない場合はこの属性だけでもよい。 */
|
|
507
294
|
readonly operatorFacing = true;
|
|
508
295
|
constructor(message: string);
|
|
509
296
|
}
|
|
510
|
-
/**
|
|
511
|
-
* An input problem the operator can fix, carrying a label key instead of a sentence.
|
|
512
|
-
* 運用者が直せる入力の問題。文ではなく **ラベルのキー** を運ぶ。
|
|
513
|
-
*
|
|
514
|
-
* ⚠️ メッセージを実装側で組むと、既定 (英語) の配備に日本語が出る。文言はラベルに集約し、
|
|
515
|
-
* ここでは「どの文言か」と差し替え値だけを運ぶ。
|
|
516
|
-
*/
|
|
517
297
|
declare class UserAdminInputError extends Error {
|
|
518
298
|
readonly labelKey: keyof UserAdminLabels["errors"];
|
|
519
299
|
readonly values: Record<string, string | number>;
|
|
520
300
|
constructor(labelKey: keyof UserAdminLabels["errors"], values?: Record<string, string | number>);
|
|
521
301
|
}
|
|
522
|
-
/**
|
|
523
|
-
* The only route-args field this module reads. React Router's full `LoaderFunctionArgs` satisfies it, so
|
|
524
|
-
* route wiring is unchanged — but declaring the minimum keeps callers (and tests) from fabricating fields
|
|
525
|
-
* that are never looked at.
|
|
526
|
-
* このモジュールが実際に読むルート引数の全て。React Router の完全な引数はこれを満たすため結線は不変。
|
|
527
|
-
*/
|
|
528
302
|
type RouteArgs = {
|
|
529
303
|
request: Request;
|
|
530
304
|
};
|
|
531
|
-
/**
|
|
532
|
-
* The CRUD verb an operation performs. Deliberately a plain string union so this package stays
|
|
533
|
-
* independent of any particular authorization library.
|
|
534
|
-
* 操作が行う CRUD 種別。特定の認可ライブラリに依存しないよう素の文字列 union で表現する。
|
|
535
|
-
*/
|
|
536
305
|
type UserAdminAccess = "read" | "create" | "update" | "delete";
|
|
537
|
-
/**
|
|
538
|
-
* Access guard the user-admin surface is mounted behind. Deny by throwing
|
|
539
|
-
* (a `Response`/`redirect` or an `Error`); returning normally means "allow".
|
|
540
|
-
*
|
|
541
|
-
* ユーザー管理面をマウントする際の必須アクセスガード。拒否は throw で表現する
|
|
542
|
-
* (`Response` / `redirect` / `Error`)。正常 return は「許可」を意味する。
|
|
543
|
-
*
|
|
544
|
-
* 操作ごとの CRUD 種別を受け取るため、呼び出し側は「削除だけ別権限」といった細分化ができる。
|
|
545
|
-
* `intent` は監査ログ用の補助情報(認可判断は `action` で行うこと)。
|
|
546
|
-
*/
|
|
547
306
|
type UserAdminGuards = {
|
|
548
|
-
/**
|
|
549
|
-
* 許可は「正常 return」、拒否は「throw」で表す。返り値は判定に使わない (`void` 契約)。
|
|
550
|
-
* 述語のつもりで `false` を返す実装を書くと素通りするため、返り値型で明示的に禁じる。
|
|
551
|
-
*/
|
|
552
307
|
requireAccess: (request: Request, context: {
|
|
553
308
|
action: UserAdminAccess;
|
|
554
309
|
intent: string;
|
|
555
310
|
}) => Promise<void> | void;
|
|
556
|
-
/**
|
|
557
|
-
* Observes a denial that was converted into an in-page error. 画面内エラーへ変換した拒否の観測点。
|
|
558
|
-
*
|
|
559
|
-
* 拒否を画面内に返すと、既定のエラー経路が拾っていたログが消える。管理面への総当たりが
|
|
560
|
-
* 200 番台の列に紛れて見えなくなるため、宿主が記録できる口を開けておく。
|
|
561
|
-
*/
|
|
562
311
|
onDenied?: (context: {
|
|
563
312
|
intent: string;
|
|
564
313
|
actions: readonly UserAdminAccess[];
|
|
565
314
|
error: unknown;
|
|
566
315
|
}) => void;
|
|
567
316
|
};
|
|
568
|
-
/**
|
|
569
|
-
* Every intent the permission table knows. 権限表が知っている intent すべて。
|
|
570
|
-
*
|
|
571
|
-
* ⚠️ 消費側の網羅性検査のために公開する。検査側が intent を手書きで並べる形しか無いと、
|
|
572
|
-
* 実装に intent が増えても表は勝手には伸びず、**最も権限の重い新しい intent** だけが
|
|
573
|
-
* 無検査で通る状態が静かに生まれる。突き合わせる相手を実装側から提供する。
|
|
574
|
-
*
|
|
575
|
-
* @returns Intent names, in declaration order. 宣言順の intent 名。
|
|
576
|
-
*/
|
|
577
317
|
declare function userAdminIntents(): string[];
|
|
578
|
-
/**
|
|
579
|
-
* The CRUD verbs one intent requires. 1 つの intent が要求する CRUD 種別。
|
|
580
|
-
*
|
|
581
|
-
* ⚠️ 消費側が権限表を検査できるようにするために公開する。表そのものは公開しない — 書き換え
|
|
582
|
-
* 可能な参照を渡すと、検査の対象が実行時に差し替えられる形になる。
|
|
583
|
-
*
|
|
584
|
-
* @param intent - Intent name. intent 名。
|
|
585
|
-
* @returns The required verbs, or an empty list for an unknown intent. 要求する種別 (未知なら空)。
|
|
586
|
-
*/
|
|
587
318
|
declare function userAdminAccessFor(intent: string): readonly UserAdminAccess[];
|
|
588
|
-
/**
|
|
589
|
-
* One upstream group as the picker shows it. 選択欄に出す上流グループ 1 件。
|
|
590
|
-
*
|
|
591
|
-
* ⚠️ **別名ではなく `@aiquants/auth-core` の型そのものである。** この形は上流アダプタ・永続化層・
|
|
592
|
-
* 管理 UI の 3 層を通る。層ごとに「同じ意味の別の型」を宣言すると、構造的部分型のせいでどの境界も
|
|
593
|
-
* 通ってしまい、上流へ足した欄が途中で黙って捨てられる (実測: 別々に宣言していた間は、必須欄を
|
|
594
|
-
* 足しても読み手側の境界で `tsc --strict` が 0 を返した)。欄の集合は `auth-core` の型テストが固定
|
|
595
|
-
* しているので、足すときは 3 層すべての受け渡しを見直すことになる。
|
|
596
|
-
*
|
|
597
|
-
* 特定のディレクトリ実装 (Google 等) の型は依然として import しない — `auth-core` は上流に依存
|
|
598
|
-
* しない語彙のパッケージであり、`AuthDirectoryStatus` などを既にここから受け取っている。
|
|
599
|
-
*/
|
|
600
319
|
type UserAdminCatalogGroup = AuthDirectoryCatalogGroup;
|
|
601
|
-
/**
|
|
602
|
-
* The upstream catalog as the loader hands it to the views. loader がビューへ渡す上流の候補一覧。
|
|
603
|
-
*
|
|
604
|
-
* ⚠️ **これは利便性のための読み取りである。** 上流へ届かなくても画面は開かなければならない
|
|
605
|
-
* (グループ一覧や許可リストの閲覧は、選択欄の可否とは無関係である)。したがって失敗は
|
|
606
|
-
* `reason` として **描画可能な状態** に変換し、例外にしない。認可やサインイン判定のように
|
|
607
|
-
* 「判らないなら拒否」であるべき経路とは、意図的に扱いを変えている。
|
|
608
|
-
*/
|
|
609
320
|
type UserAdminCatalog = {
|
|
610
321
|
kind: "ready";
|
|
611
322
|
groups: UserAdminCatalogGroup[];
|
|
@@ -617,48 +328,10 @@ type UserAdminCatalog = {
|
|
|
617
328
|
} | {
|
|
618
329
|
kind: "not-wired";
|
|
619
330
|
};
|
|
620
|
-
/**
|
|
621
|
-
* What the catalog port answers: the groups, and when the upstream was actually observed.
|
|
622
|
-
* 候補一覧ポートの答え。グループと、上流を実際に観測した時刻。
|
|
623
|
-
*
|
|
624
|
-
* ⚠️ `observedAt` は省略できない。この一覧は上流を直に叩いた結果とは限らず、資格情報を持つ別の
|
|
625
|
-
* プロセスが書いた写しであることが多い。時刻を伴わない一覧は「上流の現在」と区別できず、運用者は
|
|
626
|
-
* 既に消えたグループを選ぶ。`null` は **一度も観測していない** ことを意味する (空の答えではない)。
|
|
627
|
-
*/
|
|
628
331
|
type UserAdminCatalogSnapshot = AuthDirectoryCatalogSnapshot;
|
|
629
|
-
/**
|
|
630
|
-
* What a "sync now" request did. 「今すぐ同期」の要求が行ったこと。
|
|
631
|
-
*
|
|
632
|
-
* `already-pending` は失敗ではない — 同じ範囲の要求が既に待っている。ただし **成功でもない**:
|
|
633
|
-
* 何も積まれていないので、待っている行が誰にも拾われなければ何も起きない。
|
|
634
|
-
*/
|
|
635
332
|
type UserAdminSyncRequestOutcome = "queued" | "already-pending";
|
|
636
|
-
/**
|
|
637
|
-
* What the sync request made right after a link was created did.
|
|
638
|
-
* 連携の直後に積む同期要求が行ったこと。
|
|
639
|
-
*
|
|
640
|
-
* `not-queued` は **連携は成功したが要求は積めなかった** ことを表す。要求の失敗を連携の失敗として
|
|
641
|
-
* 投げると、運用者には「連携に失敗した」と伝わる一方で上流所有のグループは既に増えている。
|
|
642
|
-
* 連携の結果と要求の結果は別の事実なので、別の値で運ぶ。
|
|
643
|
-
*/
|
|
644
333
|
type UserAdminLinkSyncOutcome = UserAdminSyncRequestOutcome | "not-queued";
|
|
645
|
-
/**
|
|
646
|
-
* Why the upstream catalog could not be listed, classified for display.
|
|
647
|
-
* 上流の候補一覧を引けなかった理由を、表示のために分類したもの。
|
|
648
|
-
*
|
|
649
|
-
* ⚠️ **上流の例外文をそのまま画面へ出してはならない。** サービスアカウントのアドレス、借用先、
|
|
650
|
-
* 内部 URL、資格情報の断片が混じり得る。管理面を開けるだけの主体に、それらを読ませる理由は無い。
|
|
651
|
-
* 原文は `console.error` へ出し、画面にはこの分類に対応する自前の文言を出す。
|
|
652
|
-
*/
|
|
653
334
|
type UserAdminCatalogFailure = "denied" | "rateLimited" | "upstreamError" | "neverObserved" | "unknown";
|
|
654
|
-
/**
|
|
655
|
-
* Neutral per-resource permission summary the admin shell renders in its header badge.
|
|
656
|
-
* 管理シェルのヘッダーバッジが描画する、リソース単位の中立な権限サマリ。
|
|
657
|
-
*
|
|
658
|
-
* この形はこのパッケージ自身の契約であり、特定の認可ライブラリの型を import しない
|
|
659
|
-
* (`AGENTS.md` のクロスパッケージ・ハードコード禁止)。`canRead` / `canWrite` / `canDelete` を持つ
|
|
660
|
-
* ビューであれば構造的にそのまま渡せる。
|
|
661
|
-
*/
|
|
662
335
|
type UserAdminPermission = {
|
|
663
336
|
canRead: boolean;
|
|
664
337
|
canWrite: boolean;
|
|
@@ -666,55 +339,15 @@ type UserAdminPermission = {
|
|
|
666
339
|
};
|
|
667
340
|
type UserAdminAppConfig = {
|
|
668
341
|
store: UserAdminStore;
|
|
669
|
-
/** セクション単位の部分上書き。既定は英語 (`defaultUserAdminLabels`)。 */
|
|
670
342
|
labels?: PartialUserAdminLabels;
|
|
671
|
-
/**
|
|
672
|
-
* Required — omitting a guard would expose the whole user directory and its write actions.
|
|
673
|
-
* 必須。省略を許すとユーザー名簿と全更新操作が無防備に露出するため、型で強制する。
|
|
674
|
-
*/
|
|
675
343
|
guards: UserAdminGuards;
|
|
676
|
-
/**
|
|
677
|
-
* Names who is acting, for audit columns. 監査列に残す「誰が」を解決する処理。
|
|
678
|
-
*
|
|
679
|
-
* ⚠️ 省略すると、要求を積んだ主体が記録されない。同期要求の表は「誰がいつ何を要求し、結果が
|
|
680
|
-
* どうだったか」を残すために在り、その `requested_by` が定数だと、乱発を疑ったときに誰の
|
|
681
|
-
* ものか判らない — 乱発こそがこの intent に `update` を要求した理由である。
|
|
682
|
-
*/
|
|
683
344
|
resolveActor?: (request: Request) => Promise<string> | string;
|
|
684
|
-
/**
|
|
685
|
-
* Lists the upstream groups the operator may link to. 連携先の候補を列挙するポート。
|
|
686
|
-
*
|
|
687
|
-
* 任意である。注入しない配備では選択欄を出さず、上流キーの手入力に留まる — 上流へ問い合わせる
|
|
688
|
-
* 資格情報を web 側へ置かない構成を選べるようにするためである (同期ジョブだけが鍵を持つ形)。
|
|
689
|
-
*
|
|
690
|
-
* ⚠️ **失敗しても画面を落としてはならない。** 例外は loader が捕まえて
|
|
691
|
-
* `{ kind: "unavailable" }` へ写す。ここが落ちると、グループ一覧すら開けなくなる。
|
|
692
|
-
*/
|
|
693
345
|
directoryCatalog?: {
|
|
694
346
|
listGroups: (request: Request) => Promise<UserAdminCatalogSnapshot>;
|
|
695
347
|
};
|
|
696
|
-
/**
|
|
697
|
-
* Per-request self-permission lookup for the header annotation. Resolving to a map of
|
|
698
|
-
* {@link UserAdminPermission} shows the badge; rejecting shows an explicit "unknown" badge — never a
|
|
699
|
-
* permissive one. Any authz library whose view carries `canRead` / `canWrite` / `canDelete` satisfies it.
|
|
700
|
-
* ヘッダー注釈に自分の実効権限を表示するためのリクエスト別権限取得関数。失敗時は「権限不明」表示。
|
|
701
|
-
*/
|
|
702
348
|
getMyPermissions?: (request: Request) => Promise<Record<string, UserAdminPermission | undefined>>;
|
|
703
|
-
/**
|
|
704
|
-
* Display names for the resource keys the badge shows, e.g. `{ authz_admin: "ユーザー管理 UI" }`.
|
|
705
|
-
* バッジに出すリソースキーの表示名。未指定のキーはキー文字列をそのまま表示。
|
|
706
|
-
*
|
|
707
|
-
* 表示名をこのパッケージ側に埋め込むと、別パッケージのリソースキーを名指しすることになる
|
|
708
|
-
* (`AGENTS.md` のクロスパッケージ・ハードコード禁止)。中立な差し込み口として受け取る。
|
|
709
|
-
*/
|
|
710
349
|
resourceLabels?: Record<string, string>;
|
|
711
350
|
};
|
|
712
|
-
/**
|
|
713
|
-
* Creates React Router loader & action handler for user administration.
|
|
714
|
-
* ユーザー管理用 React Router の loader および action ハンドラーを作成する。
|
|
715
|
-
*
|
|
716
|
-
* `config.guards` は必須。loader / action の双方が、処理を始める前にガードを通過させる。
|
|
717
|
-
*/
|
|
718
351
|
declare function createUserAdminApp(config: UserAdminAppConfig): {
|
|
719
352
|
loader: ({ request }: RouteArgs) => Promise<{
|
|
720
353
|
resourceLabels: Record<string, string> | undefined;
|
|
@@ -742,26 +375,10 @@ declare function createUserAdminApp(config: UserAdminAppConfig): {
|
|
|
742
375
|
error: string;
|
|
743
376
|
}>;
|
|
744
377
|
};
|
|
745
|
-
|
|
746
|
-
/**
|
|
747
|
-
* How the console keeps itself current while "sync now" requests are waiting for the job.
|
|
748
|
-
* 「今すぐ同期」の要求がジョブを待っている間、画面が自分を最新に保つ間隔と上限。
|
|
749
|
-
*
|
|
750
|
-
* The loader only re-runs after the console's own submissions, so a request the job finishes a few
|
|
751
|
-
* seconds later would stay invisible until a reload. While at least one request is pending the
|
|
752
|
-
* console re-validates every `intervalMs`, and gives up after `maxMs` so a deployment with no job
|
|
753
|
-
* consuming the queue does not poll forever from every open tab.
|
|
754
|
-
* ローダーは自分の送信のあとにしか再実行されないため、ジョブが数秒後に終えた要求はリロードまで
|
|
755
|
-
* 見えない。未処理の要求が 1 件でもある間は `intervalMs` ごとに再検証し、`maxMs` で諦める
|
|
756
|
-
* (キューを消化するジョブが居ない配備で、開いている全タブが永久に叩き続けないため)。
|
|
757
|
-
*/
|
|
758
378
|
type PendingSyncPolling = {
|
|
759
|
-
/** Milliseconds between re-validations. 再検証の間隔 (ミリ秒)。 */
|
|
760
379
|
intervalMs: number;
|
|
761
|
-
/** Milliseconds after which polling stops for an unchanged pending count. 件数が変わらないまま諦めるまでの時間 (ミリ秒)。 */
|
|
762
380
|
maxMs: number;
|
|
763
381
|
};
|
|
764
|
-
/** Defaults: every 3 seconds, for up to 5 minutes. 既定値 (3 秒ごと、最長 5 分)。 */
|
|
765
382
|
declare const DEFAULT_PENDING_SYNC_POLLING: PendingSyncPolling;
|
|
766
383
|
type UserAdminShellProps = {
|
|
767
384
|
children?: React__default.ReactNode;
|
|
@@ -769,24 +386,10 @@ type UserAdminShellProps = {
|
|
|
769
386
|
title: string;
|
|
770
387
|
annotation: React__default.ReactNode;
|
|
771
388
|
}) => React__default.ReactNode;
|
|
772
|
-
|
|
389
|
+
basePath: string;
|
|
773
390
|
pendingSyncPolling?: PendingSyncPolling;
|
|
774
391
|
};
|
|
775
|
-
|
|
776
|
-
* Shell layout for user administration pages with header annotation delegation.
|
|
777
|
-
* ヘッダー注釈委譲を備えたユーザー管理ページのシェルレイアウト。
|
|
778
|
-
*/
|
|
779
|
-
declare function UserAdminShell({ children, renderHeader, pendingSyncPolling }: UserAdminShellProps): React__default.JSX.Element;
|
|
780
|
-
|
|
781
|
-
/**
|
|
782
|
-
* @module admin/views
|
|
783
|
-
* @description The five tab views of the user administration screen.
|
|
784
|
-
* ユーザー管理画面を構成する 5 つのタブビュー。
|
|
785
|
-
*
|
|
786
|
-
* 一覧・検索・所属・許可リスト・ディレクトリ連携を描く。データはすべて loader から渡され、
|
|
787
|
-
* 書き込みはビュー唯一の fetcher (`useSubmitThen`) を通す。
|
|
788
|
-
*/
|
|
789
|
-
|
|
392
|
+
declare function UserAdminShell({ children, renderHeader, pendingSyncPolling, basePath }: UserAdminShellProps): React__default.JSX.Element;
|
|
790
393
|
type UserAdminLoaderData = {
|
|
791
394
|
segment: string;
|
|
792
395
|
users: AuthUser[];
|
|
@@ -794,40 +397,14 @@ type UserAdminLoaderData = {
|
|
|
794
397
|
groupMembers: AuthGroupMember[];
|
|
795
398
|
allowlist: AuthAllowlistEntry[];
|
|
796
399
|
directoryStatus: AuthDirectoryStatus;
|
|
797
|
-
/** 上流の候補一覧。選択欄を出す面でのみ `ready` になる。 */
|
|
798
400
|
catalog: UserAdminCatalog;
|
|
799
401
|
labels?: UserAdminLabels;
|
|
800
402
|
};
|
|
801
403
|
declare function UsersView(): React__default.JSX.Element;
|
|
802
|
-
/**
|
|
803
|
-
* View for managing user groups (create, edit, delete).
|
|
804
|
-
* ユーザーグループ管理ビュー (作成・編集・削除)。
|
|
805
|
-
*/
|
|
806
404
|
declare function GroupsView(): React__default.JSX.Element;
|
|
807
|
-
/**
|
|
808
|
-
* View for managing group member assignments.
|
|
809
|
-
* グループメンバー割り当て管理ビュー。
|
|
810
|
-
*/
|
|
811
405
|
declare function GroupMembersView(): React__default.JSX.Element;
|
|
812
|
-
/**
|
|
813
|
-
* View for managing authentication allowlist entries.
|
|
814
|
-
* アクセス許可リスト (Allowlist) 管理ビュー。
|
|
815
|
-
*/
|
|
816
406
|
declare function AllowlistView(): React__default.JSX.Element;
|
|
817
|
-
/**
|
|
818
|
-
* View for the upstream directory: what is linked, how fresh it is, and the controls that change it.
|
|
819
|
-
* 上流ディレクトリのビュー。何が連携され、どれだけ新しく、それを変える操作を提供する。
|
|
820
|
-
*
|
|
821
|
-
* このタブが無いと、連携の作成・解除・一時停止・即時同期・グループ単位のサインイン許可という
|
|
822
|
-
* 5 つの操作にどこからも到達できない。実装されているのに押せる場所が無い状態は、実装が無いのと
|
|
823
|
-
* 変わらないうえ、「許可を消せるが作れない」という片肺の運用を強いる。
|
|
824
|
-
*/
|
|
825
407
|
declare function DirectoryView(): React__default.JSX.Element;
|
|
826
408
|
type AuthUserAdminAppViewProps = UserAdminShellProps;
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
* ユーザー管理 UI 全体を描画するトップレベルコンポーネント。
|
|
830
|
-
*/
|
|
831
|
-
declare function AuthUserAdminAppView({ renderHeader, pendingSyncPolling }?: AuthUserAdminAppViewProps): React__default.JSX.Element;
|
|
832
|
-
|
|
833
|
-
export { AllowlistView, AuthUserAdminAppView, type AuthUserAdminAppViewProps, DEFAULT_PENDING_SYNC_POLLING, DirectoryView, GroupMembersView, GroupsView, type PartialUserAdminLabels, type PendingSyncPolling, type UserAdminAccess, type UserAdminAppConfig, type UserAdminCatalog, type UserAdminCatalogFailure, type UserAdminCatalogGroup, type UserAdminCatalogSnapshot, type UserAdminGuards, UserAdminInputError, type UserAdminLabels, type UserAdminLinkSyncOutcome, type UserAdminLoaderData, UserAdminOperatorError, type UserAdminPermission, UserAdminShell, type UserAdminShellProps, type UserAdminStore, type UserAdminSyncRequestOutcome, UsersView, createInMemoryUserAdminStore, createUserAdminApp, defaultUserAdminLabels, jaUserAdminLabels, normalizeUpstreamKey, resolveUserAdminLabels, userAdminAccessFor, userAdminIntents };
|
|
409
|
+
declare function AuthUserAdminAppView({ renderHeader, pendingSyncPolling, basePath }: AuthUserAdminAppViewProps): React__default.JSX.Element;
|
|
410
|
+
export { AllowlistView, AuthUserAdminAppView, type AuthUserAdminAppViewProps, DEFAULT_PENDING_SYNC_POLLING, DirectoryView, GroupMembersView, GroupsView, type PartialUserAdminLabels, type PendingSyncPolling, type UserAdminAccess, type UserAdminAppConfig, type UserAdminCatalog, type UserAdminCatalogFailure, type UserAdminCatalogGroup, type UserAdminCatalogSnapshot, type UserAdminGuards, UserAdminInputError, type UserAdminLabels, type UserAdminLinkSyncOutcome, type UserAdminLoaderData, type UserAdminLocale, UserAdminOperatorError, type UserAdminPermission, UserAdminShell, type UserAdminShellProps, type UserAdminStore, type UserAdminSyncRequestOutcome, UsersView, createInMemoryUserAdminStore, createUserAdminApp, defaultUserAdminLabels, jaUserAdminLabels, normalizeUpstreamKey, resolveUserAdminLabels, userAdminAccessFor, userAdminIntents };
|