const provideEntities = () =>
Effect.provide(
pipe(fetchCredentials(), Effect.map(configureEntities)),
Context.make(iSecretsManagerClient, SecretsManagerClient)
);
const provideSearchService = () =>
pipe(
SEARCH_CLIENT_OPTS,
configureIndexClient,
Effect.flatMap((index) =>
Effect.provide(
SearchService,
Context.make(iIndexClient, index)
)
)
);
const provideUser =
(tokenString: string) =>
({ entities }: { entities: EntityClient }) =>
Effect.provide(
pipe(tokenString, parseToken, Effect.flatMap(fetchUser)),
pipe(
Context.make(iEntityClient, entities),
Context.add(iModelsService, Models)
)
);
const provideServices = ({ authorizorToken }: ParsedParameters) =>
pipe(
Effect.Do,
Effect.bind('entities', provideEntities),
Effect.bind('user', provideUser(authorizorToken)),
Effect.bind('search', provideSearchService),
Effect.map(({ entities, search, user }) =>
pipe(
Context.make(iUserInstance, user),
Context.add(iEntityClient, entities),
Context.add(iSearchService, search)
)
)
);
const handler = (params: ParsedParameters) =>
pipe(
params,
provideServices,
Effect.flatMap((context) => Effect.provide(searchHandler(params), context))
);
const provideEntities = () =>
Effect.provide(
pipe(fetchCredentials(), Effect.map(configureEntities)),
Context.make(iSecretsManagerClient, SecretsManagerClient)
);
const provideSearchService = () =>
pipe(
SEARCH_CLIENT_OPTS,
configureIndexClient,
Effect.flatMap((index) =>
Effect.provide(
SearchService,
Context.make(iIndexClient, index)
)
)
);
const provideUser =
(tokenString: string) =>
({ entities }: { entities: EntityClient }) =>
Effect.provide(
pipe(tokenString, parseToken, Effect.flatMap(fetchUser)),
pipe(
Context.make(iEntityClient, entities),
Context.add(iModelsService, Models)
)
);
const provideServices = ({ authorizorToken }: ParsedParameters) =>
pipe(
Effect.Do,
Effect.bind('entities', provideEntities),
Effect.bind('user', provideUser(authorizorToken)),
Effect.bind('search', provideSearchService),
Effect.map(({ entities, search, user }) =>
pipe(
Context.make(iUserInstance, user),
Context.add(iEntityClient, entities),
Context.add(iSearchService, search)
)
)
);
const handler = (params: ParsedParameters) =>
pipe(
params,
provideServices,
Effect.flatMap((context) => Effect.provide(searchHandler(params), context))
);