Initial commit: backend, storefront, vendor-panel added
This commit is contained in:
62
backend/packages/modules/resend/src/service.ts
Normal file
62
backend/packages/modules/resend/src/service.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import { Resend } from 'resend'
|
||||
|
||||
import {
|
||||
AbstractNotificationProviderService,
|
||||
MedusaError
|
||||
} from '@medusajs/framework/utils'
|
||||
import { ProviderSendNotificationDTO } from '@medusajs/types'
|
||||
|
||||
import { emailTemplates } from './email-templates'
|
||||
|
||||
type ResendOptions = {
|
||||
api_key: string
|
||||
from: string
|
||||
}
|
||||
|
||||
class ResendNotificationProviderService extends AbstractNotificationProviderService {
|
||||
static identifier = 'notification-resend'
|
||||
private resendClient: Resend
|
||||
private options: ResendOptions
|
||||
|
||||
constructor(_, options: ResendOptions) {
|
||||
super()
|
||||
this.validateModuleOptions(options)
|
||||
this.resendClient = new Resend(options.api_key)
|
||||
this.options = options
|
||||
}
|
||||
|
||||
validateModuleOptions(options: ResendOptions) {
|
||||
for (const key in options) {
|
||||
if (!options[key]) {
|
||||
throw new MedusaError(
|
||||
MedusaError.Types.INVALID_DATA,
|
||||
`No ${key} was provided in the ${ResendNotificationProviderService.identifier} options. Please add one.`
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async send(notification: ProviderSendNotificationDTO) {
|
||||
const { data, error } = await this.resendClient.emails.send({
|
||||
from: notification.from?.trim() || this.options.from,
|
||||
to: notification.to,
|
||||
subject: notification.content?.subject as string,
|
||||
react: emailTemplates[notification.template](notification.data)
|
||||
})
|
||||
|
||||
if (error) {
|
||||
throw new MedusaError(MedusaError.Types.UNEXPECTED_STATE, error.message)
|
||||
}
|
||||
|
||||
if (!data) {
|
||||
throw new MedusaError(
|
||||
MedusaError.Types.UNEXPECTED_STATE,
|
||||
'No data returned by resend client'
|
||||
)
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
}
|
||||
|
||||
export default ResendNotificationProviderService
|
||||
Reference in New Issue
Block a user