Files
speckle-server/packages/server/modules/auth/services/mailchimp.ts
T
2023-06-22 16:35:49 +01:00

53 lines
1.6 KiB
TypeScript

/* eslint-disable camelcase */
import mailchimp from '@mailchimp/mailchimp_marketing'
import { logger } from '@/logging/logging'
import { md5 } from '@/modules/shared/helpers/cryptoHelper'
import {
getMailchimpConfig,
getMailchimpStatus
} from '@/modules/shared/helpers/envHelper'
import { getUserById } from '@/modules/core/services/users'
async function addToMailchimpAudience(userId: string) {
// Do not do anything (inc. logging) if we do not explicitely enable it
if (!getMailchimpStatus()) return
// Note: fails here should not block registration at any cost
try {
const config = getMailchimpConfig() // Note: throws an error if not configured
mailchimp.setConfig({
apiKey: config.apiKey,
server: config.serverPrefix
})
const user = await getUserById({ userId })
if (!user) {
throw new Error(
'Could not register user for newsletter - no db user record found.'
)
}
const [first, second] = user.name.split(' ')
const subscriberHash = md5(user.email.toLowerCase())
// NOTE: using setListMember (NOT addListMember) to prevent errors for previously
// registered members.
await mailchimp.lists.setListMember(config.listId, subscriberHash, {
status_if_new: 'subscribed',
email_address: user.email,
merge_fields: {
EMAIL: user.email,
FNAME: first,
LNAME: second,
FULLNAME: user.name // NOTE: this field needs to be set in the audience merge fields
}
})
} catch (e) {
logger.warn(e, 'Failed to register user to newsletter.')
}
}
export { addToMailchimpAudience }