| 315 | }); |
| 316 | |
| 317 | export const listUsersWithConnections = ( |
| 318 | admin: ExecutorAdmin, |
| 319 | options: AdminUsersListOptions, |
| 320 | directory?: AdminIdentityDirectory | AdminUserDirectory, |
| 321 | ): Effect.Effect<typeof AdminUsersWithConnectionsResponse.Type, AdminUsersError> => |
| 322 | Effect.gen(function* () { |
| 323 | const dir = asDirectory(directory); |
| 324 | const subjects = |
| 325 | options.email === undefined |
| 326 | ? yield* admin |
| 327 | .listSubjectsWithConnections(options) |
| 328 | .pipe(Effect.mapError(readFailed("users"))) |
| 329 | : yield* selectByEmail(dir, options.email, options, (externalId) => |
| 330 | admin.getSubjectWithConnections(externalId).pipe(Effect.mapError(readFailed("users"))), |
| 331 | ); |
| 332 | const identities = yield* resolveIdentities( |
| 333 | dir.identities, |
| 334 | subjects.map((subject) => subject.externalId), |
| 335 | ); |
| 336 | return { users: subjects.map((subject) => toUserWithConnections(subject, identities)) }; |
| 337 | }); |
| 338 | |
| 339 | /** |
| 340 | * One user by `externalId` OR email, with connections. |