Compare commits

..

1 Commits

Author SHA1 Message Date
946e862b1c 1.0.18 2020-01-13 14:06:34 +00:00
8 changed files with 163 additions and 196 deletions

View File

@ -3,14 +3,14 @@ image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
cache: cache:
paths: paths:
- .npmci_cache/ - .npmci_cache/
key: '$CI_BUILD_STAGE' key: "$CI_BUILD_STAGE"
stages: stages:
- security - security
- test - test
- release - release
- metadata - metadata
# ==================== # ====================
# security stage # security stage
@ -18,23 +18,21 @@ stages:
mirror: mirror:
stage: security stage: security
script: script:
- npmci git mirror - npmci git mirror
tags: tags:
- lossless - docker
- docker - notpriv
- notpriv
snyk: snyk:
image: registry.gitlab.com/hosttoday/ht-docker-node:snyk
stage: security stage: security
script: script:
- npmci npm prepare - npmci npm prepare
- npmci command npm install -g snyk
- npmci command npm install --ignore-scripts - npmci command npm install --ignore-scripts
- npmci command snyk test - npmci command snyk test
tags: tags:
- lossless - docker
- docker - notpriv
- notpriv
# ==================== # ====================
# test stage # test stage
@ -43,40 +41,37 @@ snyk:
testStable: testStable:
stage: test stage: test
script: script:
- npmci npm prepare - npmci npm prepare
- npmci node install stable - npmci node install stable
- npmci npm install - npmci npm install
- npmci npm test - npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- lossless - docker
- docker - priv
- priv
testBuild: testBuild:
stage: test stage: test
script: script:
- npmci npm prepare - npmci npm prepare
- npmci node install stable - npmci node install stable
- npmci npm install - npmci npm install
- npmci command npm run build - npmci command npm run build
coverage: /\d+.?\d+?\%\s*coverage/ coverage: /\d+.?\d+?\%\s*coverage/
tags: tags:
- lossless - docker
- docker - notpriv
- notpriv
release: release:
stage: release stage: release
script: script:
- npmci node install stable - npmci node install stable
- npmci npm publish - npmci npm publish
only: only:
- tags - tags
tags: tags:
- lossless - docker
- docker - notpriv
- notpriv
# ==================== # ====================
# metadata stage # metadata stage
@ -90,20 +85,18 @@ codequality:
- npmci npm install - npmci npm install
- npmci command "tslint -c tslint.json ./ts/**/*.ts" - npmci command "tslint -c tslint.json ./ts/**/*.ts"
tags: tags:
- lossless - docker
- docker - priv
- priv
trigger: trigger:
stage: metadata stage: metadata
script: script:
- npmci trigger - npmci trigger
only: only:
- tags - tags
tags: tags:
- lossless - docker
- docker - notpriv
- notpriv
pages: pages:
stage: metadata stage: metadata
@ -114,7 +107,6 @@ pages:
- npmci npm install - npmci npm install
- npmci command tsdoc - npmci command tsdoc
tags: tags:
- lossless
- docker - docker
- notpriv - notpriv
only: only:
@ -122,5 +114,5 @@ pages:
artifacts: artifacts:
expire_in: 1 week expire_in: 1 week
paths: paths:
- public - public
allow_failure: true allow_failure: true

4
.snyk
View File

@ -1,4 +0,0 @@
# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities.
version: v1.13.5
ignore: {}
patch: {}

202
package-lock.json generated
View File

@ -1,28 +1,28 @@
{ {
"name": "@mojoio/mailgun", "name": "@mojoio/mailgun",
"version": "1.0.24", "version": "1.0.18",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
"@apiglobal/typedrequest-interfaces": { "@apiglobal/typedrequest-interfaces": {
"version": "1.0.10", "version": "1.0.7",
"resolved": "https://verdaccio.lossless.one/@apiglobal%2ftypedrequest-interfaces/-/typedrequest-interfaces-1.0.10.tgz", "resolved": "https://verdaccio.lossless.one/@apiglobal%2ftypedrequest-interfaces/-/typedrequest-interfaces-1.0.7.tgz",
"integrity": "sha512-RGG7s/mP7MGVz3g+y/kvH0ZrVWY/vJy3BignsUv3DLtoFvfWnvxqT2WWqSJhyXCOSeR/nzVsGxFgKAI/ZVZKdg==", "integrity": "sha512-yPl0UcLFMwSQL7bK52wVjkgvadC+x2YS3+7T15V1A1dXNxa96yd4WX1fqcKqwnBrvYexq/8FaxWGi98tZ0oNwg==",
"dev": true "dev": true
}, },
"@babel/code-frame": { "@babel/code-frame": {
"version": "7.8.3", "version": "7.5.5",
"resolved": "https://verdaccio.lossless.one/@babel%2fcode-frame/-/code-frame-7.8.3.tgz", "resolved": "https://verdaccio.lossless.one/@babel%2fcode-frame/-/code-frame-7.5.5.tgz",
"integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/highlight": "^7.8.3" "@babel/highlight": "^7.0.0"
} }
}, },
"@babel/highlight": { "@babel/highlight": {
"version": "7.8.3", "version": "7.5.0",
"resolved": "https://verdaccio.lossless.one/@babel%2fhighlight/-/highlight-7.8.3.tgz", "resolved": "https://verdaccio.lossless.one/@babel%2fhighlight/-/highlight-7.5.0.tgz",
"integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"chalk": "^2.0.0", "chalk": "^2.0.0",
@ -99,14 +99,14 @@
} }
}, },
"@pushrocks/lik": { "@pushrocks/lik": {
"version": "3.0.13", "version": "3.0.11",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2flik/-/lik-3.0.13.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2flik/-/lik-3.0.11.tgz",
"integrity": "sha512-YDxYoh2UksEfUxcjSjTwLsW5j852E5FrMG62CUi1I7ZpBxf96b7P1t2pRWsQsNnHRz6FHckW/A1V6XKASB+jZA==", "integrity": "sha512-SDKRPj9+xBTqozlDPcA7O6BcccM1Tw/sXPVP+OnhNxCubDZ/L2kGNpPpqm43NJUoNxSSo5wdBw4N7MAFYCGdVg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@pushrocks/smartdelay": "^2.0.6", "@pushrocks/smartdelay": "^2.0.3",
"@pushrocks/smartpromise": "^3.0.6", "@pushrocks/smartpromise": "^3.0.2",
"@pushrocks/smartrx": "^2.0.5", "@pushrocks/smartrx": "^2.0.3",
"@pushrocks/smarttime": "^3.0.12", "@pushrocks/smarttime": "^3.0.12",
"@types/minimatch": "^3.0.3", "@types/minimatch": "^3.0.3",
"minimatch": "^3.0.4", "minimatch": "^3.0.4",
@ -147,12 +147,12 @@
} }
}, },
"@pushrocks/smartdelay": { "@pushrocks/smartdelay": {
"version": "2.0.6", "version": "2.0.3",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartdelay/-/smartdelay-2.0.6.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartdelay/-/smartdelay-2.0.3.tgz",
"integrity": "sha512-4wUnzWNhRPODpaaL5GuRaje/C5dg+TMhBxmr57PKc2fqYpy6azWJwonf/s5xpcbJLCPJRbj1x8M5MqgCFq2uvg==", "integrity": "sha512-TXKDDqsc7sBTLl+oiYNaF6IdNk1n70i8ur8QfwcUU6tegTnrEkvMWy9h5Zdty/fq1ioCNpKLvuXoA+fgYVwKGQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"@pushrocks/smartpromise": "^3.0.6" "@pushrocks/smartpromise": "^3.0.2"
} }
}, },
"@pushrocks/smartevent": { "@pushrocks/smartevent": {
@ -248,9 +248,9 @@
} }
}, },
"@pushrocks/smartmail": { "@pushrocks/smartmail": {
"version": "1.0.12", "version": "1.0.8",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartmail/-/smartmail-1.0.12.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartmail/-/smartmail-1.0.8.tgz",
"integrity": "sha512-Fv0r8w4w94jKvIuRddFKZZ5OY+jqxFyjWmUaeZFYGXkXyCIUpNbmnJgK0AwZlchPs4N4gH8BDx75QtjuhcHdbw==", "integrity": "sha512-ILUmtrJ0TlBe183/LXmJYAq268NueB6A0vA75qqR9+DeZjBAuYOcIAJxLOXyxtMcG/pSnr+AKTDBzsRn/RMz1g==",
"requires": { "requires": {
"@pushrocks/smartfile": "^7.0.6", "@pushrocks/smartfile": "^7.0.6",
"@pushrocks/smartmustache": "^2.0.9" "@pushrocks/smartmustache": "^2.0.9"
@ -330,11 +330,11 @@
} }
}, },
"@pushrocks/smartstring": { "@pushrocks/smartstring": {
"version": "3.0.18", "version": "3.0.17",
"resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartstring/-/smartstring-3.0.18.tgz", "resolved": "https://verdaccio.lossless.one/@pushrocks%2fsmartstring/-/smartstring-3.0.17.tgz",
"integrity": "sha512-34Ca5HW6w8fcG2sdbRVDViOZ0vdOHXc/1Qof2KhM5bvWFajU6VASlJjCYNJBrjGg9VCeC2rH6bGIgvd7prSRkg==", "integrity": "sha512-60JQptpgw+PjxoC5Gx+Y9m3/dtMstHC5ElpdJhIlbJ7dQV7LkCGSonLAG+NZhPbvrhow2KZ3fob8stW0Iuy3JQ==",
"requires": { "requires": {
"crypto-random-string": "^3.1.0", "crypto-random-string": "^3.0.1",
"js-base64": "^2.5.1", "js-base64": "^2.5.1",
"normalize-newline": "^3.0.0", "normalize-newline": "^3.0.0",
"randomatic": "^3.1.1", "randomatic": "^3.1.1",
@ -432,9 +432,9 @@
} }
}, },
"@types/luxon": { "@types/luxon": {
"version": "1.21.0", "version": "1.15.2",
"resolved": "https://verdaccio.lossless.one/@types%2fluxon/-/luxon-1.21.0.tgz", "resolved": "https://verdaccio.lossless.one/@types%2fluxon/-/luxon-1.15.2.tgz",
"integrity": "sha512-Zhrf65tpjOlVIYrUhX9eu1VzRo8iixQDLFPbfqFxPpG4pBTNNPZ2BFhYE0IAsDfW9GWg+RcrUqiLwrGJH4rq4w==", "integrity": "sha512-zHPoyVrLvNaiMRYdhmh88Rn489ZgAgbc6iLxR5Yi0VCNfeNYHcszbhJV2vDHLNrVGy35BPtWBRn4OP2F9BBvFw==",
"dev": true "dev": true
}, },
"@types/minimatch": { "@types/minimatch": {
@ -444,9 +444,9 @@
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
"version": "13.1.8", "version": "13.1.6",
"resolved": "https://verdaccio.lossless.one/@types%2fnode/-/node-13.1.8.tgz", "resolved": "https://verdaccio.lossless.one/@types%2fnode/-/node-13.1.6.tgz",
"integrity": "sha512-6XzyyNM9EKQW4HKuzbo/CkOIjn/evtCmsU+MUM1xDfJ+3/rNjBttM1NgN7AOQvN6tP1Sl1D1PIKMreTArnxM9A==" "integrity": "sha512-Jg1F+bmxcpENHP23sVKkNuU3uaxPnsBMW0cLjleiikFKomJQbsn0Cqk2yDvQArqzZN6ABfBkZ0To7pQ8sLdWDg=="
}, },
"@types/through2": { "@types/through2": {
"version": "2.0.34", "version": "2.0.34",
@ -463,9 +463,9 @@
"dev": true "dev": true
}, },
"@types/yargs": { "@types/yargs": {
"version": "12.0.15", "version": "12.0.13",
"resolved": "https://verdaccio.lossless.one/@types%2fyargs/-/yargs-12.0.15.tgz", "resolved": "https://verdaccio.lossless.one/@types%2fyargs/-/yargs-12.0.13.tgz",
"integrity": "sha512-stWBBTD1IX7iMc/L38Azs0P5vHl6AcuiV8fuuXXgQVLmlXJ7igykYuroMHgpGrD1vwrk56yEBD6dIM5or1Robw==", "integrity": "sha512-CXlavd8Q7ZQkB7sMpx9QKC/B7gUsjtftxMHNr7qGJaDiZZ+Qmhwe4Zt3aS9aXF7cn6BYQuFlKU1UlrebyKsh9g==",
"dev": true "dev": true
}, },
"agentkeepalive": { "agentkeepalive": {
@ -500,9 +500,9 @@
} }
}, },
"arg": { "arg": {
"version": "4.1.2", "version": "4.1.1",
"resolved": "https://verdaccio.lossless.one/arg/-/arg-4.1.2.tgz", "resolved": "https://verdaccio.lossless.one/arg/-/arg-4.1.1.tgz",
"integrity": "sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg==", "integrity": "sha512-SlmP3fEA88MBv0PypnXZ8ZfJhwmDeIE3SP71j37AiXQBXYosPV0x6uISAaHYSlSVhmHOVkomen0tbGk6Anlebw==",
"dev": true "dev": true
}, },
"argparse": { "argparse": {
@ -674,9 +674,9 @@
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
}, },
"cron": { "cron": {
"version": "1.8.1", "version": "1.7.2",
"resolved": "https://verdaccio.lossless.one/cron/-/cron-1.8.1.tgz", "resolved": "https://verdaccio.lossless.one/cron/-/cron-1.7.2.tgz",
"integrity": "sha512-T60noGxx/2h4FDRBf6449FrINbitSCwIZEcDIwbIPX+mkNkNH0t/4yw0RBGpOiA5yveM4koNHcAuIFopp7vbuA==", "integrity": "sha512-+SaJ2OfeRvfQqwXQ2kgr0Y5pzBR/lijf5OpnnaruwWnmI799JfWr2jN2ItOV9s3A/+TFOt6mxvKzQq5F0Jp6VQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"moment-timezone": "^0.5.x" "moment-timezone": "^0.5.x"
@ -696,11 +696,11 @@
} }
}, },
"crypto-random-string": { "crypto-random-string": {
"version": "3.1.0", "version": "3.0.1",
"resolved": "https://verdaccio.lossless.one/crypto-random-string/-/crypto-random-string-3.1.0.tgz", "resolved": "https://verdaccio.lossless.one/crypto-random-string/-/crypto-random-string-3.0.1.tgz",
"integrity": "sha512-Tip3yGB+bA7B0W8E4K4mNf2rZhu5r2G5Tb89/utEl5tP1QuLjTF/S9a1b8ifDrR4ORc9Utf6tscpSEtBY3YcPQ==", "integrity": "sha512-dUL0cJ4PBLanJGJQBHQUkvZ3C4q13MXzl54oRqAIiJGiNkOZ4JDwkg/SBo7daGghzlJv16yW1p/4lIQukmbedA==",
"requires": { "requires": {
"type-fest": "^0.8.1" "type-fest": "^0.5.2"
} }
}, },
"debug": { "debug": {
@ -746,9 +746,9 @@
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
}, },
"diff": { "diff": {
"version": "4.0.2", "version": "4.0.1",
"resolved": "https://verdaccio.lossless.one/diff/-/diff-4.0.2.tgz", "resolved": "https://verdaccio.lossless.one/diff/-/diff-4.0.1.tgz",
"integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==",
"dev": true "dev": true
}, },
"end-of-stream": { "end-of-stream": {
@ -862,9 +862,9 @@
} }
}, },
"glob": { "glob": {
"version": "7.1.6", "version": "7.1.5",
"resolved": "https://verdaccio.lossless.one/glob/-/glob-7.1.6.tgz", "resolved": "https://verdaccio.lossless.one/glob/-/glob-7.1.5.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "integrity": "sha512-J9dlskqUXK1OeTOYBEn5s8aMukWMwWfs+rPTn/jn50Ux4MNXVhubL1wu/j2t+H4NVI+cXEcCaYellqaPVGXNqQ==",
"requires": { "requires": {
"fs.realpath": "^1.0.0", "fs.realpath": "^1.0.0",
"inflight": "^1.0.4", "inflight": "^1.0.4",
@ -880,9 +880,9 @@
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
}, },
"handlebars": { "handlebars": {
"version": "4.7.2", "version": "4.7.1",
"resolved": "https://verdaccio.lossless.one/handlebars/-/handlebars-4.7.2.tgz", "resolved": "https://verdaccio.lossless.one/handlebars/-/handlebars-4.7.1.tgz",
"integrity": "sha512-4PwqDL2laXtTWZghzzCtunQUTLbo31pcCJrd/B/9JP8XbhVzpS5ZXuKqlOzsd1rtcaLo4KqAn8nl8mkknS4MHw==", "integrity": "sha512-2dd6soo60cwKNJ90VewNLIzdZPR/E2YhszOTgHpN9V0YuwZk7x33/iZoIBnASwDFVHMY7iJ6NPL8d9f/DWYCTA==",
"requires": { "requires": {
"neo-async": "^2.6.0", "neo-async": "^2.6.0",
"optimist": "^0.6.1", "optimist": "^0.6.1",
@ -982,9 +982,9 @@
} }
}, },
"kind-of": { "kind-of": {
"version": "6.0.3", "version": "6.0.2",
"resolved": "https://verdaccio.lossless.one/kind-of/-/kind-of-6.0.3.tgz", "resolved": "https://verdaccio.lossless.one/kind-of/-/kind-of-6.0.2.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA=="
}, },
"lcid": { "lcid": {
"version": "2.0.0", "version": "2.0.0",
@ -1020,9 +1020,9 @@
} }
}, },
"luxon": { "luxon": {
"version": "1.21.3", "version": "1.19.3",
"resolved": "https://verdaccio.lossless.one/luxon/-/luxon-1.21.3.tgz", "resolved": "https://verdaccio.lossless.one/luxon/-/luxon-1.19.3.tgz",
"integrity": "sha512-lLRwNcNnkZLuv13A1FUuZRZmTWF7ro2ricYvb0L9cvBYHPvZhQdKwrYnZzi103D2XKmlVmxWpdn2wfIiOt2YEw==", "integrity": "sha512-YwTDjGRQC0QC9Iya2g2eKZfgEFqRId4ZoLHORQcfTMB/5xrTx427V7ZPjQJ1vzvhA2vJfG2bh1Kv8V8IFMWCUA==",
"dev": true "dev": true
}, },
"make-error": { "make-error": {
@ -1089,9 +1089,9 @@
} }
}, },
"minimist": { "minimist": {
"version": "0.0.10", "version": "0.0.8",
"resolved": "https://verdaccio.lossless.one/minimist/-/minimist-0.0.10.tgz", "resolved": "https://verdaccio.lossless.one/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
}, },
"mkdirp": { "mkdirp": {
"version": "0.5.1", "version": "0.5.1",
@ -1100,14 +1100,6 @@
"dev": true, "dev": true,
"requires": { "requires": {
"minimist": "0.0.8" "minimist": "0.0.8"
},
"dependencies": {
"minimist": {
"version": "0.0.8",
"resolved": "https://verdaccio.lossless.one/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
"dev": true
}
} }
}, },
"moment": { "moment": {
@ -1256,9 +1248,9 @@
"dev": true "dev": true
}, },
"p-limit": { "p-limit": {
"version": "2.2.2", "version": "2.2.1",
"resolved": "https://verdaccio.lossless.one/p-limit/-/p-limit-2.2.2.tgz", "resolved": "https://verdaccio.lossless.one/p-limit/-/p-limit-2.2.1.tgz",
"integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==",
"dev": true, "dev": true,
"requires": { "requires": {
"p-try": "^2.0.0" "p-try": "^2.0.0"
@ -1329,9 +1321,9 @@
} }
}, },
"readable-stream": { "readable-stream": {
"version": "3.5.0", "version": "3.4.0",
"resolved": "https://verdaccio.lossless.one/readable-stream/-/readable-stream-3.5.0.tgz", "resolved": "https://verdaccio.lossless.one/readable-stream/-/readable-stream-3.4.0.tgz",
"integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==", "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==",
"requires": { "requires": {
"inherits": "^2.0.3", "inherits": "^2.0.3",
"string_decoder": "^1.1.1", "string_decoder": "^1.1.1",
@ -1351,9 +1343,9 @@
"dev": true "dev": true
}, },
"resolve": { "resolve": {
"version": "1.15.0", "version": "1.14.2",
"resolved": "https://verdaccio.lossless.one/resolve/-/resolve-1.15.0.tgz", "resolved": "https://verdaccio.lossless.one/resolve/-/resolve-1.14.2.tgz",
"integrity": "sha512-+hTmAldEGE80U2wJJDC1lebb5jWqvTYAfm3YZ1ckk1gBr0MnCqUKlwK1e+anaFljIl+F5tR5IoZcm4ZDA1zMQw==", "integrity": "sha512-EjlOBLBO1kxsUxsKjLt7TAECyKW6fOh1VRkykQkKGzcBbjjPIxBqGh0jf7GJ3k/f5mxMqW3htMD3WdTUVtW8HQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"path-parse": "^1.0.6" "path-parse": "^1.0.6"
@ -1370,9 +1362,9 @@
} }
}, },
"rxjs": { "rxjs": {
"version": "6.5.4", "version": "6.5.3",
"resolved": "https://verdaccio.lossless.one/rxjs/-/rxjs-6.5.4.tgz", "resolved": "https://verdaccio.lossless.one/rxjs/-/rxjs-6.5.3.tgz",
"integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==",
"dev": true, "dev": true,
"requires": { "requires": {
"tslib": "^1.9.0" "tslib": "^1.9.0"
@ -1436,9 +1428,9 @@
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
}, },
"source-map-support": { "source-map-support": {
"version": "0.5.16", "version": "0.5.13",
"resolved": "https://verdaccio.lossless.one/source-map-support/-/source-map-support-0.5.16.tgz", "resolved": "https://verdaccio.lossless.one/source-map-support/-/source-map-support-0.5.13.tgz",
"integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true, "dev": true,
"requires": { "requires": {
"buffer-from": "^1.0.0", "buffer-from": "^1.0.0",
@ -1515,16 +1507,16 @@
} }
}, },
"ts-node": { "ts-node": {
"version": "8.6.2", "version": "8.4.1",
"resolved": "https://verdaccio.lossless.one/ts-node/-/ts-node-8.6.2.tgz", "resolved": "https://verdaccio.lossless.one/ts-node/-/ts-node-8.4.1.tgz",
"integrity": "sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg==", "integrity": "sha512-5LpRN+mTiCs7lI5EtbXmF/HfMeCjzt7DH9CZwtkr6SywStrNQC723wG+aOWFiLNn7zT3kD/RnFqi3ZUfr4l5Qw==",
"dev": true, "dev": true,
"requires": { "requires": {
"arg": "^4.1.0", "arg": "^4.1.0",
"diff": "^4.0.1", "diff": "^4.0.1",
"make-error": "^1.1.1", "make-error": "^1.1.1",
"source-map-support": "^0.5.6", "source-map-support": "^0.5.6",
"yn": "3.1.1" "yn": "^3.0.0"
} }
}, },
"tslib": { "tslib": {
@ -1534,9 +1526,9 @@
"dev": true "dev": true
}, },
"tslint": { "tslint": {
"version": "6.0.0", "version": "5.20.1",
"resolved": "https://verdaccio.lossless.one/tslint/-/tslint-6.0.0.tgz", "resolved": "https://verdaccio.lossless.one/tslint/-/tslint-5.20.1.tgz",
"integrity": "sha512-9nLya8GBtlFmmFMW7oXXwoXS1NkrccqTqAtwXzdPV9e2mqSEvCki6iHL/Fbzi5oqbugshzgGPk7KBb2qNP1DSA==", "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==",
"dev": true, "dev": true,
"requires": { "requires": {
"@babel/code-frame": "^7.0.0", "@babel/code-frame": "^7.0.0",
@ -1550,7 +1542,7 @@
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
"resolve": "^1.3.2", "resolve": "^1.3.2",
"semver": "^5.3.0", "semver": "^5.3.0",
"tslib": "^1.10.0", "tslib": "^1.8.0",
"tsutils": "^2.29.0" "tsutils": "^2.29.0"
} }
}, },
@ -1576,20 +1568,20 @@
"dev": true "dev": true
}, },
"type-fest": { "type-fest": {
"version": "0.8.1", "version": "0.5.2",
"resolved": "https://verdaccio.lossless.one/type-fest/-/type-fest-0.8.1.tgz", "resolved": "https://verdaccio.lossless.one/type-fest/-/type-fest-0.5.2.tgz",
"integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw=="
}, },
"typescript": { "typescript": {
"version": "3.7.5", "version": "3.6.4",
"resolved": "https://verdaccio.lossless.one/typescript/-/typescript-3.7.5.tgz", "resolved": "https://verdaccio.lossless.one/typescript/-/typescript-3.6.4.tgz",
"integrity": "sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==", "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==",
"dev": true "dev": true
}, },
"uglify-js": { "uglify-js": {
"version": "3.7.6", "version": "3.7.5",
"resolved": "https://verdaccio.lossless.one/uglify-js/-/uglify-js-3.7.6.tgz", "resolved": "https://verdaccio.lossless.one/uglify-js/-/uglify-js-3.7.5.tgz",
"integrity": "sha512-yYqjArOYSxvqeeiYH2VGjZOqq6SVmhxzaPjJC1W2F9e+bqvFL9QXQ2osQuKUFjM2hGjKG2YclQnRKWQSt/nOTQ==", "integrity": "sha512-GFZ3EXRptKGvb/C1Sq6nO1iI7AGcjyqmIyOw0DrD0675e+NNbGO72xmMM2iEBdFbxaTLo70NbjM/Wy54uZIlsg==",
"optional": true, "optional": true,
"requires": { "requires": {
"commander": "~2.20.3", "commander": "~2.20.3",

View File

@ -1,6 +1,6 @@
{ {
"name": "@mojoio/mailgun", "name": "@mojoio/mailgun",
"version": "1.0.24", "version": "1.0.18",
"private": false, "private": false,
"description": "an api abstraction package for mailgun", "description": "an api abstraction package for mailgun",
"main": "dist/index.js", "main": "dist/index.js",
@ -18,14 +18,14 @@
"@pushrocks/qenv": "^4.0.6", "@pushrocks/qenv": "^4.0.6",
"@pushrocks/tapbundle": "^3.2.0", "@pushrocks/tapbundle": "^3.2.0",
"@types/node": "^13.1.6", "@types/node": "^13.1.6",
"tslint": "^6.0.0", "tslint": "^5.20.1",
"tslint-config-prettier": "^1.15.0" "tslint-config-prettier": "^1.15.0"
}, },
"dependencies": { "dependencies": {
"@pushrocks/smartfile": "^7.0.6", "@pushrocks/smartfile": "^7.0.6",
"@pushrocks/smartmail": "^1.0.11", "@pushrocks/smartmail": "^1.0.8",
"@pushrocks/smartrequest": "^1.1.47", "@pushrocks/smartrequest": "^1.1.47",
"@pushrocks/smartstring": "^3.0.18" "@pushrocks/smartstring": "^3.0.17"
}, },
"files": [ "files": [
"ts/**/*", "ts/**/*",

View File

@ -5,13 +5,12 @@ import * as smartmail from '@pushrocks/smartmail';
const testQenv = new Qenv('./', './.nogit'); const testQenv = new Qenv('./', './.nogit');
import * as mailgun from '../ts/index'; import * as mailgun from '../ts/index';
import { IMailgunMessage } from '../ts/index';
let testMailgunAccount: mailgun.MailgunAccount; let testMailgunAccount: mailgun.MailgunAccount;
let testSmartmail: smartmail.Smartmail<IMailgunMessage>; let testSmartmail: smartmail.Smartmail;
tap.test('should create a mailgun account', async () => { tap.test('first test', async () => {
testMailgunAccount = new mailgun.MailgunAccount(testQenv.getEnvVarOnDemand('MAILGUN_API_TOKEN')); testMailgunAccount = new mailgun.MailgunAccount(testQenv.getEnvVarOnDemand('MAILGUN_API_TOKEN'));
expect(testMailgunAccount).to.be.instanceOf(mailgun.MailgunAccount); expect(testMailgunAccount).to.be.instanceOf(mailgun.MailgunAccount);
}); });
@ -31,11 +30,9 @@ tap.test('should send a smartmail', async () => {
tap.test('should retrieve a mail using a retrieval url', async () => { tap.test('should retrieve a mail using a retrieval url', async () => {
const result = await testMailgunAccount.retrieveSmartMailFromMessageUrl('https://sw.api.mailgun.net/v3/domains/mail.lossless.one/messages/AgMFnnnAKC8xp_dDa79LyoxhloxtaVmnRA=='); const result = await testMailgunAccount.retrieveSmartMailFromMessageUrl('https://sw.api.mailgun.net/v3/domains/mail.lossless.one/messages/AgMFnnnAKC8xp_dDa79LyoxhloxtaVmnRA==');
if (result) { result.options.subject = 'hi there. This is a testmail with attachment';
result.options.subject = 'hi there. This is a testmail with attachment'; result.options.from = 'noreply@mail.lossless.com';
result.options.from = 'noreply@mail.lossless.com'; testMailgunAccount.sendSmartMail(result, 'sandbox@mail.git.zone');
testMailgunAccount.sendSmartMail(result, 'sandbox@mail.git.zone');
}
}); });
tap.start(); tap.start();

View File

@ -15,14 +15,14 @@ export interface IMailgunMessage {
'X-Gm-Message-State': string; 'X-Gm-Message-State': string;
'body-plain': string; 'body-plain': string;
attachments: Array<{ attachments: Array<{
url: string; url: string,
'content-type': string; 'content-type': string,
name: string; name: string,
size: number; size: number
}>; }>;
'body-html': string; 'body-html': string;
'Mime-Version': string; 'Mime-Version': string;
Date: string; Date: string,
'Message-Id': string; 'Message-Id': string;
'Content-Type': string; 'Content-Type': string;
'X-Google-Smtp-Source': string; 'X-Google-Smtp-Source': string;

View File

@ -11,8 +11,8 @@ export interface IMailgunNotification {
'X-Google-Dkim-Signature': string; 'X-Google-Dkim-Signature': string;
To: string; To: string;
'Dkim-Signature': string; 'Dkim-Signature': string;
subject: string; subject: 'Booking confirmation (Order 12PN8P)';
from: string; from: 'buchungsbestaetigung@bahn.de';
'X-Received': string[]; 'X-Received': string[];
'Ironport-Sdr': string; 'Ironport-Sdr': string;
'Arc-Authentication-Results': string[]; 'Arc-Authentication-Results': string[];
@ -32,16 +32,13 @@ export interface IMailgunNotification {
'X-Forwarded-For': string; 'X-Forwarded-For': string;
'X-Gm-Message-State': string; 'X-Gm-Message-State': string;
'X-Google-Smtp-Source': string; 'X-Google-Smtp-Source': string;
'X-Envelope-From': string; 'X-Envelope-From': '<phil+caf_=invoiceinbox=mail.lossless.one@lossless.com>';
'Content-Type': string; 'Content-Type': 'multipart/mixed; boundary="----=_Part_220882_156025801.1578848484963"';
'X-Forwarded-To': string; 'X-Forwarded-To': 'invoiceinbox@mail.lossless.one';
Subject: string; Subject: string;
attachments: string; attachments: string;
'body-plain': string; 'body-plain': string;
'stripped-text': string; 'stripped-text': string;
'stripped-html': string; 'stripped-html': string;
'stripped-signature': string; 'stripped-signature': string;
// Lossless specific
"X-Lossless-Auth": string;
} }

View File

@ -51,7 +51,7 @@ export class MailgunAccount {
/** /**
* sends a SmartMail * sends a SmartMail
*/ */
public async sendSmartMail(smartmailArg: plugins.smartmail.Smartmail<interfaces.IMailgunMessage>, toArg: string, dataArg = {}) { public async sendSmartMail(smartmailArg: plugins.smartmail.Smartmail, toArg: string, dataArg = {}) {
const domain = smartmailArg.options.from.split('@')[1]; const domain = smartmailArg.options.from.split('@')[1];
const formFields: plugins.smartrequest.IFormField[] = [ const formFields: plugins.smartrequest.IFormField[] = [
{ {
@ -98,29 +98,22 @@ export class MailgunAccount {
public async retrieveSmartMailFromMessageUrl(messageUrlArg: string) { public async retrieveSmartMailFromMessageUrl(messageUrlArg: string) {
const response = await this.getRequest(messageUrlArg); const response = await this.getRequest(messageUrlArg);
if (response.statusCode === 404) {
console.log(response.body.message);
return null;
}
const responseBody: interfaces.IMailgunMessage = response.body; const responseBody: interfaces.IMailgunMessage = response.body;
const smartmail = new plugins.smartmail.Smartmail<interfaces.IMailgunMessage>({ const smartmail = new plugins.smartmail.Smartmail({
from: responseBody.From, from: responseBody.From,
body: responseBody["body-html"], body: responseBody["body-html"],
subject: responseBody.Subject, subject: responseBody.Subject,
creationObjectRef: responseBody
}); });
// lets care about attachments // lets care about attachments
if (responseBody.attachments && responseBody.attachments instanceof Array) { for (const attachmentInfo of responseBody.attachments) {
for (const attachmentInfo of responseBody.attachments) { const attachmentName = attachmentInfo.name;
const attachmentName = attachmentInfo.name; const attachmentContents = await this.getRequest(attachmentInfo.url, true);
const attachmentContents = await this.getRequest(attachmentInfo.url, true); smartmail.addAttachment(new plugins.smartfile.Smartfile({
smartmail.addAttachment(new plugins.smartfile.Smartfile({ path: `./${attachmentName}`,
path: `./${attachmentName}`, base: `./${attachmentName}`,
base: `./${attachmentName}`, contentBuffer: attachmentContents.body
contentBuffer: attachmentContents.body }));
}));
}
} }
return smartmail; return smartmail;