diff --git a/package-lock.json b/package-lock.json index 925adfd..106d0bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -139,7 +139,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/@pushrocks/consolecolor/-/consolecolor-2.0.1.tgz", "integrity": "sha512-iOFCHVeFZ2OywbdwSxVI4/wokkcLrXVdHLgvMmkNhJ220eeLgjNZWx3EJo3vNW3zq5ybCSCUIq0878djBxrWpw==", - "dev": true, "requires": { "ansi-256-colors": "^1.1.0" } @@ -148,7 +147,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@pushrocks/early/-/early-3.0.3.tgz", "integrity": "sha512-71/nwxTpqdp1glmHz4YaGusNl/XOOcPelAxC9RA6rpS/6280QyY2u4yx+mRdMrCzn7ruLYF5awbkS8llNZ94Pg==", - "dev": true, "requires": { "@pushrocks/consolecolor": "^2.0.1", "@pushrocks/smartpromise": "^2.0.5" @@ -205,7 +203,6 @@ "version": "2.0.6", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartdelay/-/smartdelay-2.0.6.tgz", "integrity": "sha512-4wUnzWNhRPODpaaL5GuRaje/C5dg+TMhBxmr57PKc2fqYpy6azWJwonf/s5xpcbJLCPJRbj1x8M5MqgCFq2uvg==", - "dev": true, "requires": { "@pushrocks/smartpromise": "^3.0.6" }, @@ -213,8 +210,36 @@ "@pushrocks/smartpromise": { "version": "3.0.6", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-3.0.6.tgz", - "integrity": "sha512-vlQlBGNVIjfClgnsfgQBU6GIKcskYSFzEcKLt18ngPzPEcjKklXcxaqzLXpnoxR+KBh30QPE8255ncYHXuPPOg==", - "dev": true + "integrity": "sha512-vlQlBGNVIjfClgnsfgQBU6GIKcskYSFzEcKLt18ngPzPEcjKklXcxaqzLXpnoxR+KBh30QPE8255ncYHXuPPOg==" + } + } + }, + "@pushrocks/smartdns": { + "version": "4.0.3", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartdns/-/smartdns-4.0.3.tgz", + "integrity": "sha512-6PsRQ2ufoMwRzok2L6jRFBCNx0jYN9rtgq82jck3jzGdLGu3l/Elh3xNQ9K25wz+FjqpAK7kEVJX+TCwTH+Dlw==", + "requires": { + "@pushrocks/smartdelay": "^2.0.6", + "@pushrocks/smartpromise": "^3.0.6", + "@pushrocks/smartrequest": "^1.1.47", + "@tsclass/tsclass": "^3.0.6" + }, + "dependencies": { + "@pushrocks/smartpromise": { + "version": "3.0.6", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-3.0.6.tgz", + "integrity": "sha512-vlQlBGNVIjfClgnsfgQBU6GIKcskYSFzEcKLt18ngPzPEcjKklXcxaqzLXpnoxR+KBh30QPE8255ncYHXuPPOg==" + }, + "@pushrocks/smartrequest": { + "version": "1.1.47", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartrequest/-/smartrequest-1.1.47.tgz", + "integrity": "sha512-0AuqtAI14VeWeXl2WpJbgCybVlG03rOjdGchAqy5k5lg9ACLhN3Z4kmoLgpBysWO/L2SjlAKB489SRyV3acykg==", + "requires": { + "@pushrocks/smartpromise": "^3.0.5", + "@types/form-data": "^2.5.0", + "agentkeepalive": "^4.0.2", + "form-data": "^2.5.1" + } } } }, @@ -333,6 +358,30 @@ "ora": "^3.4.0" } }, + "@pushrocks/smartmime": { + "version": "1.0.3", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartmime/-/smartmime-1.0.3.tgz", + "integrity": "sha512-hLOZwwAzYOOFobUmYy4OyjJJgM3Cw4fQQySF0zqTjd7UIMuAi6cighCNB5M68YHmPr1+XZw/UtHDX8z3tYiehg==", + "requires": { + "@types/mime-types": "^2.1.0", + "mime-types": "^2.1.26" + }, + "dependencies": { + "mime-db": { + "version": "1.44.0", + "resolved": "https://verdaccio.lossless.one/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://verdaccio.lossless.one/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + } + } + }, "@pushrocks/smartmustache": { "version": "2.0.9", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartmustache/-/smartmustache-2.0.9.tgz", @@ -360,8 +409,7 @@ "@pushrocks/smartpromise": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@pushrocks/smartpromise/-/smartpromise-2.0.5.tgz", - "integrity": "sha512-9j/chLtIiNkR0MDw7Mpxg9slxAVvAQwUZuiaPYX5KpHdKxQaHLI1VZ8IN0vPhwlfgNO4i4vGXV0wB8BvSDj03g==", - "dev": true + "integrity": "sha512-9j/chLtIiNkR0MDw7Mpxg9slxAVvAQwUZuiaPYX5KpHdKxQaHLI1VZ8IN0vPhwlfgNO4i4vGXV0wB8BvSDj03g==" }, "@pushrocks/smartrequest": { "version": "1.1.36", @@ -473,17 +521,116 @@ } } }, + "@tsclass/tsclass": { + "version": "3.0.17", + "resolved": "https://verdaccio.lossless.one/@tsclass%2ftsclass/-/tsclass-3.0.17.tgz", + "integrity": "sha512-K0kv226gm5EZOmLaY10yvAmo23ule/oqDG2dMhqSYOsDFkZTOkAhi2owJB4zJMpWin8SSzuqj8dLqZyVRn1i6Q==", + "requires": { + "@pushrocks/tapbundle": "^3.2.1" + }, + "dependencies": { + "@pushrocks/smartfile": { + "version": "7.0.12", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartfile/-/smartfile-7.0.12.tgz", + "integrity": "sha512-/4T4K07WqOXGvQQ/VFyRMUd8kN1RdqQgmrqHjZE/vMDLz7RYsqU9FlEN6OGX1G1E6pR9IdHnT4ClXPlvzClHYg==", + "requires": { + "@pushrocks/smarthash": "^2.1.6", + "@pushrocks/smartmime": "^1.0.3", + "@pushrocks/smartpath": "^4.0.1", + "@pushrocks/smartpromise": "^3.0.6", + "@pushrocks/smartrequest": "^1.1.47", + "@types/fs-extra": "^8.1.0", + "fs-extra": "^8.1.0", + "glob": "^7.1.6", + "js-yaml": "^3.13.1" + } + }, + "@pushrocks/smarthash": { + "version": "2.1.6", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmarthash/-/smarthash-2.1.6.tgz", + "integrity": "sha512-TYa3wECYkeDoE8SomxcCJFg5Kt4+G4MtNMu3yATJCCoPLJIbyV1CwUvYuFYkkce2W4ZvH9h/N6dsHc69oI5Jcw==", + "requires": { + "@pushrocks/smartjson": "^3.0.10", + "@pushrocks/smartpromise": "^3.0.6", + "@types/through2": "^2.0.34", + "through2": "^3.0.1" + } + }, + "@pushrocks/smartjson": { + "version": "3.0.10", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartjson/-/smartjson-3.0.10.tgz", + "integrity": "sha512-0tBkET2yjmSSIf4DlgeyU8U/J2EshTmQGuMY28EjPq9VvuCFXLh72WmETpA4QqKRMqhWp1+P+RZgnQupW3GQxQ==", + "requires": { + "@types/fast-json-stable-stringify": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "lodash.clonedeep": "^4.5.0" + } + }, + "@pushrocks/smartpromise": { + "version": "3.0.6", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartpromise/-/smartpromise-3.0.6.tgz", + "integrity": "sha512-vlQlBGNVIjfClgnsfgQBU6GIKcskYSFzEcKLt18ngPzPEcjKklXcxaqzLXpnoxR+KBh30QPE8255ncYHXuPPOg==" + }, + "@pushrocks/smartrequest": { + "version": "1.1.47", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartrequest/-/smartrequest-1.1.47.tgz", + "integrity": "sha512-0AuqtAI14VeWeXl2WpJbgCybVlG03rOjdGchAqy5k5lg9ACLhN3Z4kmoLgpBysWO/L2SjlAKB489SRyV3acykg==", + "requires": { + "@pushrocks/smartpromise": "^3.0.5", + "@types/form-data": "^2.5.0", + "agentkeepalive": "^4.0.2", + "form-data": "^2.5.1" + } + }, + "@pushrocks/tapbundle": { + "version": "3.2.1", + "resolved": "https://verdaccio.lossless.one/@pushrocks%2ftapbundle/-/tapbundle-3.2.1.tgz", + "integrity": "sha512-D3o205SE+Viu8sukm+6CvGkXEwOiQiEEcga9eWyvjWS4vDx6FWwrO0pNZkQq6GqsKQ9xRpCmBtI7F3KsJR0+PA==", + "requires": { + "@pushrocks/early": "^3.0.3", + "@pushrocks/smartdelay": "^2.0.3", + "@pushrocks/smartfile": "^7.0.9", + "@pushrocks/smartpromise": "^3.0.2", + "smartchai": "^2.0.1" + } + }, + "@types/fs-extra": { + "version": "8.1.1", + "resolved": "https://verdaccio.lossless.one/@types%2ffs-extra/-/fs-extra-8.1.1.tgz", + "integrity": "sha512-TcUlBem321DFQzBNuz8p0CLLKp0VvF/XH9E4KHNmgwyp4E3AfgI5cjiIVZWlbfThBop2qxFIh4+LeY6hVWWZ2w==", + "requires": { + "@types/node": "*" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://verdaccio.lossless.one/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "glob": { + "version": "7.1.6", + "resolved": "https://verdaccio.lossless.one/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, "@types/chai": { "version": "4.2.7", "resolved": "https://verdaccio.lossless.one/@types%2fchai/-/chai-4.2.7.tgz", - "integrity": "sha512-luq8meHGYwvky0O7u0eQZdA7B4Wd9owUCqvbw2m3XCrCU8mplYOujMBbvyS547AxJkC+pGnd0Cm15eNxEUNU8g==", - "dev": true + "integrity": "sha512-luq8meHGYwvky0O7u0eQZdA7B4Wd9owUCqvbw2m3XCrCU8mplYOujMBbvyS547AxJkC+pGnd0Cm15eNxEUNU8g==" }, "@types/chai-as-promised": { "version": "7.1.2", "resolved": "https://verdaccio.lossless.one/@types%2fchai-as-promised/-/chai-as-promised-7.1.2.tgz", "integrity": "sha512-PO2gcfR3Oxa+u0QvECLe1xKXOqYTzCmWf0FhLhjREoW3fPAVamjihL7v1MOVLJLsnAMdLcjkfrs01yvDMwVK4Q==", - "dev": true, "requires": { "@types/chai": "*" } @@ -492,7 +639,6 @@ "version": "1.4.2", "resolved": "https://verdaccio.lossless.one/@types%2fchai-string/-/chai-string-1.4.2.tgz", "integrity": "sha512-ld/1hV5qcPRGuwlPdvRfvM3Ka/iofOk2pH4VkasK4b1JJP1LjNmWWn0LsISf6RRzyhVOvs93rb9tM09e+UuF8Q==", - "dev": true, "requires": { "@types/chai": "*" } @@ -543,6 +689,11 @@ "integrity": "sha512-zHPoyVrLvNaiMRYdhmh88Rn489ZgAgbc6iLxR5Yi0VCNfeNYHcszbhJV2vDHLNrVGy35BPtWBRn4OP2F9BBvFw==", "dev": true }, + "@types/mime-types": { + "version": "2.1.0", + "resolved": "https://verdaccio.lossless.one/@types%2fmime-types/-/mime-types-2.1.0.tgz", + "integrity": "sha1-nKUs2jY/aZxpRmwqbM2q2RPqenM=" + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://verdaccio.lossless.one/@types%2fminimatch/-/minimatch-3.0.3.tgz", @@ -587,8 +738,7 @@ "ansi-256-colors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-256-colors/-/ansi-256-colors-1.1.0.tgz", - "integrity": "sha1-kQ3lDvzHwJ49gvL4er1rcAwYgYo=", - "dev": true + "integrity": "sha1-kQ3lDvzHwJ49gvL4er1rcAwYgYo=" }, "ansi-regex": { "version": "3.0.0", @@ -622,8 +772,7 @@ "assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" }, "asynckit": { "version": "0.4.0", @@ -666,7 +815,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", @@ -680,7 +828,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", - "dev": true, "requires": { "check-error": "^1.0.2" } @@ -688,8 +835,7 @@ "chai-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/chai-string/-/chai-string-1.5.0.tgz", - "integrity": "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==", - "dev": true + "integrity": "sha512-sydDC3S3pNAQMYwJrs6dQX0oBQ6KfIPuOZ78n7rocW0eJJlsHPh2t3kwW7xfwYA/1Bf6/arGtSUo16rxR2JFlw==" }, "chalk": { "version": "2.4.2", @@ -705,8 +851,7 @@ "check-error": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "dev": true + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" }, "cli-cursor": { "version": "2.1.0", @@ -813,7 +958,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dev": true, "requires": { "type-detect": "^4.0.0" } @@ -949,8 +1093,7 @@ "get-func-name": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "dev": true + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" }, "get-stream": { "version": "4.1.0", @@ -1375,8 +1518,7 @@ "pathval": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", - "dev": true + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" }, "pump": { "version": "3.0.0", @@ -1480,7 +1622,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/smartchai/-/smartchai-2.0.1.tgz", "integrity": "sha512-9M+R56OhAHXScxgr2vzQqxGx0XMS0QXriNZuP7hjlbVbo2FUT+l60iEzbwPt9Ga+5u2cEEjSSoZEQVqlROaddA==", - "dev": true, "requires": { "@types/chai": "^4.1.2", "@types/chai-as-promised": "^7.1.0", @@ -1624,8 +1765,7 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" }, "typescript": { "version": "3.6.4", diff --git a/package.json b/package.json index 0ab8387..3b63715 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "tslint-config-prettier": "^1.18.0" }, "dependencies": { + "@pushrocks/smartdns": "^4.0.3", "@pushrocks/smartfile": "^7.0.6", "@pushrocks/smartmustache": "^2.0.9" }, diff --git a/test/test.ts b/test/test.ts index 350a1ab..b510b75 100644 --- a/test/test.ts +++ b/test/test.ts @@ -1,6 +1,17 @@ import { expect, tap } from '@pushrocks/tapbundle'; import * as smartmail from '../ts/index'; +let emailAddressValidatorInstance: smartmail.EmailAddressValidator; + +tap.test('should create an instance of EmailAddressValidator', async () => { + emailAddressValidatorInstance = new smartmail.EmailAddressValidator(); + expect(emailAddressValidatorInstance).to.be.instanceOf(smartmail.EmailAddressValidator); +}); + +tap.test('should validate an email', async () => { + const result = await emailAddressValidatorInstance.validate('sandbox@bleu.de'); +}); + tap.test('first test', async () => { const testSmartmail = new smartmail.Smartmail({ body: 'hi there', diff --git a/ts/index.ts b/ts/index.ts index 65aeb8d..d344f26 100644 --- a/ts/index.ts +++ b/ts/index.ts @@ -1 +1,2 @@ export * from './smartmail.classes.smartmail'; +export * from './smartmail.classes.emailaddressvalidator'; diff --git a/ts/smartmail.classes.emailaddressvalidator.ts b/ts/smartmail.classes.emailaddressvalidator.ts new file mode 100644 index 0000000..7ec09e4 --- /dev/null +++ b/ts/smartmail.classes.emailaddressvalidator.ts @@ -0,0 +1,19 @@ +import * as plugins from './smartmail.plugins'; + +export interface IEmailValidationResult { + valid: boolean; + reason: string; +} + +export class EmailAddressValidator { + public smartdns = new plugins.smartdns.Smartdns({}); + + public async validate(emailArg: string): Promise { + const emailArray = emailArg.split('@'); + const result = await this.smartdns.getRecord(emailArray[1], 'MX'); + return { + valid: !!result, + reason: 'todo' + }; + } +} diff --git a/ts/smartmail.plugins.ts b/ts/smartmail.plugins.ts index b2104ee..8d00fdb 100644 --- a/ts/smartmail.plugins.ts +++ b/ts/smartmail.plugins.ts @@ -1,4 +1,5 @@ +import * as smartdns from '@pushrocks/smartdns'; import * as smartfile from '@pushrocks/smartfile'; import * as smartmustache from '@pushrocks/smartmustache'; -export { smartfile, smartmustache }; +export { smartdns, smartfile, smartmustache };