type apiResponseEffect = Effect.Effect<
unknown,
Http.error.HttpClientError,
Http.client.Client.Default
>;
export class AuthService extends Context.Tag("AuthService")<
AuthService,
{
readonly logout: () => apiResponseEffect;
...
}
>() {}
export const AuthServiceLive = Layer.effect(
AuthService,
Effect.map(RemoteServiceConfig.config, cfg => ({
logout: () =>
Http.request
.get(`${cfg.webBookingServiceEndpoint}/logout`)
.pipe(Http.response.json),
getSessionByKey: key =>
Http.request
.post(`${cfg.webBookingServiceEndpoint}/sessions`)
.pipe(ClientRequest.textBody(key))
.pipe(Http.response.json),
deleteSession: () =>
Http.request
.del(`${cfg.webBookingServiceEndpoint}/sessions`)
.pipe(Http.response.json),
changePassword: (maybeToken, maybePayload) =>
pipe(
O.all([maybeToken, maybePayload]),
O.getOrThrow,
([token, [cId, payload]]) =>
pipe(
Http.request.put(
`${cfg.masterFilesServiceEndpoint}/client/${cId}/account/changePassword`,
),
ClientRequest.bearerToken(token),
ClientRequest.setBody(Http.body.raw(payload)),
Http.response.json,
),
),
})),
);
type apiResponseEffect = Effect.Effect<
unknown,
Http.error.HttpClientError,
Http.client.Client.Default
>;
export class AuthService extends Context.Tag("AuthService")<
AuthService,
{
readonly logout: () => apiResponseEffect;
...
}
>() {}
export const AuthServiceLive = Layer.effect(
AuthService,
Effect.map(RemoteServiceConfig.config, cfg => ({
logout: () =>
Http.request
.get(`${cfg.webBookingServiceEndpoint}/logout`)
.pipe(Http.response.json),
getSessionByKey: key =>
Http.request
.post(`${cfg.webBookingServiceEndpoint}/sessions`)
.pipe(ClientRequest.textBody(key))
.pipe(Http.response.json),
deleteSession: () =>
Http.request
.del(`${cfg.webBookingServiceEndpoint}/sessions`)
.pipe(Http.response.json),
changePassword: (maybeToken, maybePayload) =>
pipe(
O.all([maybeToken, maybePayload]),
O.getOrThrow,
([token, [cId, payload]]) =>
pipe(
Http.request.put(
`${cfg.masterFilesServiceEndpoint}/client/${cId}/account/changePassword`,
),
ClientRequest.bearerToken(token),
ClientRequest.setBody(Http.body.raw(payload)),
Http.response.json,
),
),
})),
);