mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-04-08 02:52:39 -05:00
Moved @tryghost/email-events to @tryghost/email-service
fix https://linear.app/ghost/issue/86a4a3e1-a5b4-44f2-a2be-8513d59e0441 - this commit moves the lib code and tests to @tryghost/email-service so we can colocate code in one place rather than splitting it out across packages, which increases the cognitive load and overhead
This commit is contained in:
parent
c450a1dad7
commit
5186f833a9
28 changed files with 52 additions and 97 deletions
|
@ -81,7 +81,6 @@ COPY ghost/domain-events/package.json ghost/domain-events/package.json
|
|||
COPY ghost/donations/package.json ghost/donations/package.json
|
||||
COPY ghost/email-addresses/package.json ghost/email-addresses/package.json
|
||||
COPY ghost/email-content-generator/package.json ghost/email-content-generator/package.json
|
||||
COPY ghost/email-events/package.json ghost/email-events/package.json
|
||||
COPY ghost/email-service/package.json ghost/email-service/package.json
|
||||
COPY ghost/email-suppression-list/package.json ghost/email-suppression-list/package.json
|
||||
COPY ghost/express-dynamic-redirects/package.json ghost/express-dynamic-redirects/package.json
|
||||
|
|
|
@ -44,7 +44,6 @@ services:
|
|||
- node_modules_ghost_donations:/home/ghost/ghost/donations/node_modules:delegated
|
||||
- node_modules_ghost_email-addresses:/home/ghost/ghost/email-addresses/node_modules:delegated
|
||||
- node_modules_ghost_email-content-generator:/home/ghost/ghost/email-content-generator/node_modules:delegated
|
||||
- node_modules_ghost_email-events:/home/ghost/ghost/email-events/node_modules:delegated
|
||||
- node_modules_ghost_email-service:/home/ghost/ghost/email-service/node_modules:delegated
|
||||
- node_modules_ghost_email-suppression-list:/home/ghost/ghost/email-suppression-list/node_modules:delegated
|
||||
- node_modules_ghost_express-dynamic-redirects:/home/ghost/ghost/express-dynamic-redirects/node_modules:delegated
|
||||
|
@ -182,7 +181,6 @@ volumes:
|
|||
node_modules_ghost_donations: {}
|
||||
node_modules_ghost_email-addresses: {}
|
||||
node_modules_ghost_email-content-generator: {}
|
||||
node_modules_ghost_email-events: {}
|
||||
node_modules_ghost_email-service: {}
|
||||
node_modules_ghost_email-suppression-list: {}
|
||||
node_modules_ghost_express-dynamic-redirects: {}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
const {AbstractEmailSuppressionList, EmailSuppressionData, EmailSuppressedEvent} = require('@tryghost/email-suppression-list');
|
||||
const {SpamComplaintEvent, EmailBouncedEvent} = require('@tryghost/email-events');
|
||||
const {SpamComplaintEvent, EmailBouncedEvent} = require('@tryghost/email-service');
|
||||
const DomainEvents = require('@tryghost/domain-events');
|
||||
const logging = require('@tryghost/logging');
|
||||
const models = require('../../models');
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
const {MemberPageViewEvent, MemberCommentEvent, MemberLinkClickEvent} = require('@tryghost/member-events');
|
||||
const moment = require('moment-timezone');
|
||||
const {IncorrectUsageError} = require('@tryghost/errors');
|
||||
const {EmailOpenedEvent} = require('@tryghost/email-events');
|
||||
const {EmailOpenedEvent} = require('@tryghost/email-service');
|
||||
const logging = require('@tryghost/logging');
|
||||
const LastSeenAtCache = require('./LastSeenAtCache');
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ const LastSeenAtUpdater = require('../../../../../core/server/services/members-e
|
|||
const DomainEvents = require('@tryghost/domain-events');
|
||||
const {MemberPageViewEvent, MemberCommentEvent, MemberSubscribeEvent, MemberLinkClickEvent} = require('@tryghost/member-events');
|
||||
const moment = require('moment');
|
||||
const {EmailOpenedEvent} = require('@tryghost/email-events');
|
||||
const {EmailOpenedEvent} = require('@tryghost/email-service');
|
||||
const EventEmitter = require('events');
|
||||
const logging = require('@tryghost/logging');
|
||||
|
||||
|
|
|
@ -1,6 +0,0 @@
|
|||
module.exports = {
|
||||
plugins: ['ghost'],
|
||||
extends: [
|
||||
'plugin:ghost/node'
|
||||
]
|
||||
};
|
|
@ -1,21 +0,0 @@
|
|||
# Email Events
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
|
||||
## Develop
|
||||
|
||||
This is a monorepo package.
|
||||
|
||||
Follow the instructions for the top-level repo.
|
||||
1. `git clone` this repo & `cd` into it as usual
|
||||
2. Run `yarn` to install top-level dependencies.
|
||||
|
||||
|
||||
|
||||
## Test
|
||||
|
||||
- `yarn lint` run just eslint
|
||||
- `yarn test` run lint and tests
|
||||
|
|
@ -1,8 +0,0 @@
|
|||
module.exports = {
|
||||
SpamComplaintEvent: require('./lib/SpamComplaintEvent'),
|
||||
EmailBouncedEvent: require('./lib/EmailBouncedEvent'),
|
||||
EmailDeliveredEvent: require('./lib/EmailDeliveredEvent'),
|
||||
EmailOpenedEvent: require('./lib/EmailOpenedEvent'),
|
||||
EmailUnsubscribedEvent: require('./lib/EmailUnsubscribedEvent'),
|
||||
EmailTemporaryBouncedEvent: require('./lib/EmailTemporaryBouncedEvent')
|
||||
};
|
|
@ -1,27 +0,0 @@
|
|||
{
|
||||
"name": "@tryghost/email-events",
|
||||
"version": "0.0.0",
|
||||
"repository": "https://github.com/TryGhost/Ghost/tree/main/packages/email-events",
|
||||
"author": "Ghost Foundation",
|
||||
"private": true,
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"dev": "echo \"Implement me!\"",
|
||||
"test:unit": "NODE_ENV=testing c8 --all --check-coverage --reporter text --reporter cobertura -- mocha --reporter dot './test/**/*.test.js'",
|
||||
"test": "yarn test:unit",
|
||||
"lint:code": "eslint *.js lib/ --ext .js --cache",
|
||||
"lint": "yarn lint:code && yarn lint:test",
|
||||
"lint:test": "eslint -c test/.eslintrc.js test/ --ext .js --cache"
|
||||
},
|
||||
"files": [
|
||||
"index.js",
|
||||
"lib"
|
||||
],
|
||||
"devDependencies": {
|
||||
"bson-objectid": "2.0.4",
|
||||
"c8": "8.0.1",
|
||||
"mocha": "10.8.2",
|
||||
"sinon": "15.2.0"
|
||||
},
|
||||
"dependencies": {}
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
module.exports = {
|
||||
plugins: ['ghost'],
|
||||
extends: [
|
||||
'plugin:ghost/test'
|
||||
]
|
||||
};
|
|
@ -1,13 +0,0 @@
|
|||
const assert = require('assert/strict');
|
||||
const events = require('../');
|
||||
|
||||
describe('index.js', function () {
|
||||
it('exports SpamComplaintEvent', function () {
|
||||
assert(events.SpamComplaintEvent);
|
||||
assert(events.SpamComplaintEvent === require('../lib/SpamComplaintEvent'));
|
||||
});
|
||||
it('exports EmailBouncedEvent', function () {
|
||||
assert(events.EmailBouncedEvent);
|
||||
assert(events.EmailBouncedEvent === require('../lib/EmailBouncedEvent'));
|
||||
});
|
||||
});
|
|
@ -1,4 +1,11 @@
|
|||
module.exports = {
|
||||
EmailDeliveredEvent: require('./lib/events/EmailDeliveredEvent'),
|
||||
EmailOpenedEvent: require('./lib/events/EmailOpenedEvent'),
|
||||
EmailBouncedEvent: require('./lib/events/EmailBouncedEvent'),
|
||||
EmailTemporaryBouncedEvent: require('./lib/events/EmailTemporaryBouncedEvent'),
|
||||
EmailUnsubscribedEvent: require('./lib/events/EmailUnsubscribedEvent'),
|
||||
SpamComplaintEvent: require('./lib/events/SpamComplaintEvent'),
|
||||
|
||||
EmailService: require('./lib/EmailService'),
|
||||
EmailController: require('./lib/EmailController'),
|
||||
EmailRenderer: require('./lib/EmailRenderer'),
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
const {EmailDeliveredEvent, EmailOpenedEvent, EmailBouncedEvent, SpamComplaintEvent, EmailUnsubscribedEvent, EmailTemporaryBouncedEvent} = require('@tryghost/email-events');
|
||||
const logging = require('@tryghost/logging');
|
||||
|
||||
const EmailDeliveredEvent = require('./events/EmailDeliveredEvent');
|
||||
const EmailOpenedEvent = require('./events/EmailOpenedEvent');
|
||||
const EmailBouncedEvent = require('./events/EmailBouncedEvent');
|
||||
const EmailTemporaryBouncedEvent = require('./events/EmailTemporaryBouncedEvent');
|
||||
const EmailUnsubscribedEvent = require('./events/EmailUnsubscribedEvent');
|
||||
const SpamComplaintEvent = require('./events/SpamComplaintEvent');
|
||||
|
||||
async function waitForEvent() {
|
||||
return new Promise((resolve) => {
|
||||
setTimeout(resolve, 70);
|
||||
|
|
|
@ -67,7 +67,7 @@ class EmailEventStorage {
|
|||
/**
|
||||
* @private
|
||||
* @param {'temporary'|'permanent'} severity
|
||||
* @param {import('@tryghost/email-events').EmailTemporaryBouncedEvent|import('@tryghost/email-events').EmailBouncedEvent} event
|
||||
* @param {import('@tryghost/email-service').EmailTemporaryBouncedEvent|import('@tryghost/email-service').EmailBouncedEvent} event
|
||||
* @param {{transacting?: any}} options
|
||||
* @returns
|
||||
*/
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@tryghost/color-utils": "0.2.2",
|
||||
"@tryghost/email-events": "0.0.0",
|
||||
"@tryghost/errors": "1.3.5",
|
||||
"@tryghost/html-to-plaintext": "0.0.0",
|
||||
"@tryghost/kg-default-cards": "10.1.1",
|
||||
|
|
|
@ -1,10 +1,17 @@
|
|||
const EmailEventStorage = require('../lib/EmailEventStorage');
|
||||
const {EmailDeliveredEvent, EmailOpenedEvent, EmailBouncedEvent, EmailTemporaryBouncedEvent, EmailUnsubscribedEvent, SpamComplaintEvent} = require('@tryghost/email-events');
|
||||
|
||||
const sinon = require('sinon');
|
||||
const assert = require('assert/strict');
|
||||
const logging = require('@tryghost/logging');
|
||||
const {createDb, createPrometheusClient} = require('./utils');
|
||||
|
||||
const EmailDeliveredEvent = require('../lib/events/EmailDeliveredEvent');
|
||||
const EmailOpenedEvent = require('../lib/events/EmailOpenedEvent');
|
||||
const EmailBouncedEvent = require('../lib/events/EmailBouncedEvent');
|
||||
const EmailTemporaryBouncedEvent = require('../lib/events/EmailTemporaryBouncedEvent');
|
||||
const EmailUnsubscribedEvent = require('../lib/events/EmailUnsubscribedEvent');
|
||||
const SpamComplaintEvent = require('../lib/events/SpamComplaintEvent');
|
||||
|
||||
describe('Email Event Storage', function () {
|
||||
let logError;
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
const assert = require('assert/strict');
|
||||
const ObjectID = require('bson-objectid').default;
|
||||
const EmailBouncedEvent = require('../../lib/EmailBouncedEvent');
|
||||
const EmailBouncedEvent = require('../../lib/events/EmailBouncedEvent');
|
||||
|
||||
describe('EmailBouncedEvent', function () {
|
||||
it('exports a static create method to create instances', function () {
|
|
@ -1,6 +1,6 @@
|
|||
const assert = require('assert/strict');
|
||||
const ObjectID = require('bson-objectid').default;
|
||||
const EmailDeliveredEvent = require('../../lib/EmailDeliveredEvent');
|
||||
const EmailDeliveredEvent = require('../../lib/events/EmailDeliveredEvent');
|
||||
|
||||
describe('EmailDeliveredEvent', function () {
|
||||
it('exports a static create method to create instances', function () {
|
|
@ -1,6 +1,6 @@
|
|||
const assert = require('assert/strict');
|
||||
const ObjectID = require('bson-objectid').default;
|
||||
const EmailOpenedEvent = require('../../lib/EmailOpenedEvent');
|
||||
const EmailOpenedEvent = require('../../lib/events/EmailOpenedEvent');
|
||||
|
||||
describe('EmailOpenedEvent', function () {
|
||||
it('exports a static create method to create instances', function () {
|
|
@ -1,6 +1,6 @@
|
|||
const assert = require('assert/strict');
|
||||
const ObjectID = require('bson-objectid').default;
|
||||
const EmailTemporaryBouncedEvent = require('../../lib/EmailTemporaryBouncedEvent');
|
||||
const EmailTemporaryBouncedEvent = require('../../lib/events/EmailTemporaryBouncedEvent');
|
||||
|
||||
describe('EmailTemporaryBouncedEvent', function () {
|
||||
it('exports a static create method to create instances', function () {
|
|
@ -1,6 +1,6 @@
|
|||
const assert = require('assert/strict');
|
||||
const ObjectID = require('bson-objectid').default;
|
||||
const EmailUnsubscribedEvent = require('../../lib/EmailUnsubscribedEvent');
|
||||
const EmailUnsubscribedEvent = require('../../lib/events/EmailUnsubscribedEvent');
|
||||
|
||||
describe('EmailUnsubscribedEvent', function () {
|
||||
it('exports a static create method to create instances', function () {
|
||||
|
@ -12,4 +12,14 @@ describe('EmailUnsubscribedEvent', function () {
|
|||
});
|
||||
assert(event instanceof EmailUnsubscribedEvent);
|
||||
});
|
||||
|
||||
it('can create an instance without a timestamp', function () {
|
||||
const event = EmailUnsubscribedEvent.create({
|
||||
email: 'test@test.test',
|
||||
memberId: new ObjectID().toHexString(),
|
||||
emailId: new ObjectID().toHexString()
|
||||
});
|
||||
assert(event instanceof EmailUnsubscribedEvent);
|
||||
assert(event.timestamp instanceof Date);
|
||||
});
|
||||
});
|
|
@ -1,6 +1,6 @@
|
|||
const assert = require('assert/strict');
|
||||
const ObjectID = require('bson-objectid').default;
|
||||
const SpamComplaintEvent = require('../../lib/SpamComplaintEvent');
|
||||
const SpamComplaintEvent = require('../../lib/events/SpamComplaintEvent');
|
||||
|
||||
describe('SpamComplaintEvent', function () {
|
||||
it('exports a static create method to create instances', function () {
|
||||
|
@ -12,4 +12,14 @@ describe('SpamComplaintEvent', function () {
|
|||
});
|
||||
assert(event instanceof SpamComplaintEvent);
|
||||
});
|
||||
|
||||
it('can create an instance without a timestamp', function () {
|
||||
const event = SpamComplaintEvent.create({
|
||||
email: 'test@test.test',
|
||||
memberId: new ObjectID().toHexString(),
|
||||
emailId: new ObjectID().toHexString()
|
||||
});
|
||||
assert(event instanceof SpamComplaintEvent);
|
||||
assert(event.timestamp instanceof Date);
|
||||
});
|
||||
});
|
Loading…
Add table
Reference in a new issue