imports....
@Injectable()
export class MessageService {
private readonly logger = new LoggerService('messageService')
postMessage({
title,
body,
tags,
webhookURL,
}: {
title: string
body: string
tags: string
webhookURL: string
}): EF.Effect<void, HttpClientError.HttpClientError, never> {
return EF.gen(this, function* () {
const message = `### ${title}\n\n
${body}\n
**When:** ${this.getFormattedTime(DateTime.unsafeNow())}\n
**Environment:** ${this.getCurrentEnvironment()}\n
**Tags:** ${tags}\n`
yield* pipe(
HttpClientRequest.post(webhookURL),
HttpClientRequest.setHeader('Content-Type', 'application/json'),
HttpClientRequest.unsafeJsonBody({ text: message }),
HttpClient.fetchOk,
EF.scoped,
EF.tapBoth({
onSuccess: () =>
EF.sync(() => this.logger.info('[MessageService: postMessage]: Message was sent.')),
onFailure: (error) =>
EF.sync(() =>
this.logger.error(
'[MessageService: postMessage]: Error while posting message',
{ error, message }
)
),
})
)
})
}
getFormattedTime(date: DateTime.Utc): string {
return pipe(date, DateTime.formatUtc({ dateStyle: 'medium', timeStyle: 'short' }))
}
getCurrentEnvironment = (): string => {
return pipe(
getSSMParameter('APP_ROOT_DOMAIN'),
S.split('.sella'),
A.head,
O.getOrElse(() => "Couldn't get environment")
)
}
}
imports....
@Injectable()
export class MessageService {
private readonly logger = new LoggerService('messageService')
postMessage({
title,
body,
tags,
webhookURL,
}: {
title: string
body: string
tags: string
webhookURL: string
}): EF.Effect<void, HttpClientError.HttpClientError, never> {
return EF.gen(this, function* () {
const message = `### ${title}\n\n
${body}\n
**When:** ${this.getFormattedTime(DateTime.unsafeNow())}\n
**Environment:** ${this.getCurrentEnvironment()}\n
**Tags:** ${tags}\n`
yield* pipe(
HttpClientRequest.post(webhookURL),
HttpClientRequest.setHeader('Content-Type', 'application/json'),
HttpClientRequest.unsafeJsonBody({ text: message }),
HttpClient.fetchOk,
EF.scoped,
EF.tapBoth({
onSuccess: () =>
EF.sync(() => this.logger.info('[MessageService: postMessage]: Message was sent.')),
onFailure: (error) =>
EF.sync(() =>
this.logger.error(
'[MessageService: postMessage]: Error while posting message',
{ error, message }
)
),
})
)
})
}
getFormattedTime(date: DateTime.Utc): string {
return pipe(date, DateTime.formatUtc({ dateStyle: 'medium', timeStyle: 'short' }))
}
getCurrentEnvironment = (): string => {
return pipe(
getSSMParameter('APP_ROOT_DOMAIN'),
S.split('.sella'),
A.head,
O.getOrElse(() => "Couldn't get environment")
)
}
}