async notifyMilestoneReceived({milestone, meta}) {
        if (meta?.reason === 'skipped' || meta?.reason === 'initial') {
            return;
        }
        const hasImportedMembers = meta?.reason === 'import' ? 'has imported members' : null;
        const lastEmailTooSoon = meta?.reason === 'email' ? 'last email too recent' : null;
        const emailNotSentReason = hasImportedMembers || lastEmailTooSoon;
        const milestoneTypePretty = milestone.type === 'arr' ? 'ARR' : 'Members';
        const valueFormatted = this.#getFormattedAmount({amount: milestone.value, currency: milestone?.currency});
        const emailSentText = milestone?.emailSentAt ? this.#getFormattedDate(milestone?.emailSentAt) : `no / ${emailNotSentReason}`;
        const title = `:tada: ${milestoneTypePretty} Milestone ${valueFormatted} reached!`;

        let valueSection;

        if (milestone.type === 'arr') {
            valueSection = {
                type: 'section',
                fields: [
                    {
                        type: 'mrkdwn',
                        text: `*Milestone:*\n${valueFormatted}`
                    }

                ]
            };

            if (meta?.currentValue) {
                valueSection.fields.push({
                    type: 'mrkdwn',
                    text: `*Current ARR:*\n${this.#getFormattedAmount({amount: meta.currentValue, currency: milestone?.currency})}`
                });
            }
        } else {
            valueSection = {
                type: 'section',
                fields: [
                    {
                        type: 'mrkdwn',
                        text: `*Milestone:*\n${valueFormatted}`
                    }
                ]
            };
            if (meta?.currentValue) {
                valueSection.fields.push({
                    type: 'mrkdwn',
                    text: `*Current Members:*\n${this.#getFormattedAmount({amount: meta.currentValue})}`
                });
            }
        }

        const blocks = [
            {
                type: 'header',
                text: {
                    type: 'plain_text',
                    text: title,
                    emoji: true
                }
            },
            {
                type: 'section',
                text: {
                    type: 'mrkdwn',
                    text: `New *${milestoneTypePretty} Milestone* achieved for <${this.#siteUrl}|${this.#siteUrl}>`
                }
            },
            {
                type: 'divider'
            },
            valueSection,
            {
                type: 'section',
                text: {
                    type: 'mrkdwn',
                    text: `*Email sent:*\n${emailSentText}`
                }
            }
        ];

        const slackData = {
            unfurl_links: false,
            username: 'Ghost Milestone Service',
            attachments: [
                {
                    color: '#36a64f',
                    blocks
                }
            ]
        };

        await this.send(slackData, this.#webhookUrl);
    }
@param {object} eventData
@param {import('../milestones/Milestone')} eventData.milestone
@param {object} [eventData.meta]
@param {'import'|'email'|'skipped'|'initial'} [eventData.meta.reason]
@param {number} [eventData.meta.currentValue]

@returns {Promise<void>}