| 278 | }); |
| 279 | |
| 280 | export const listUsersWithConnections = ( |
| 281 | admin: ExecutorAdmin, |
| 282 | options: AdminUsersListOptions, |
| 283 | directory?: AdminIdentityDirectory | AdminUserDirectory, |
| 284 | ): Effect.Effect<typeof AdminUsersWithConnectionsResponse.Type, AdminUsersError> => |
| 285 | Effect.gen(function* () { |
| 286 | const dir = asDirectory(directory); |
| 287 | const wanted = |
| 288 | options.email === undefined ? undefined : yield* resolveEmailFilter(dir, options.email); |
| 289 | const all = yield* admin |
| 290 | .listSubjectsWithConnections(options) |
| 291 | .pipe(Effect.mapError(readFailed("users"))); |
| 292 | const subjects = wanted === undefined ? all : filterToId(all, wanted); |
| 293 | const identities = yield* resolveIdentities( |
| 294 | dir.identities, |
| 295 | subjects.map((subject) => subject.externalId), |
| 296 | ); |
| 297 | return { users: subjects.map((subject) => toUserWithConnections(subject, identities)) }; |
| 298 | }); |
| 299 | |
| 300 | /** |
| 301 | * One user by `externalId` OR email, with connections. |