diff --git a/package-lock.json b/package-lock.json index 9a7823c6..8480fded 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1211,7 +1211,6 @@ "version": "7.9.6", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", - "dev": true, "requires": { "regenerator-runtime": "^0.13.4" }, @@ -1219,8 +1218,7 @@ "regenerator-runtime": { "version": "0.13.5", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" } } }, @@ -3516,7 +3514,6 @@ "version": "6.12.3", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz", "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==", - "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3700,7 +3697,6 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, "requires": { "safer-buffer": "~2.1.0" } @@ -3708,8 +3704,7 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" }, "assign-symbols": { "version": "1.0.0", @@ -3720,8 +3715,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { "version": "2.1.2", @@ -3732,14 +3726,12 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", - "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", - "dev": true + "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==" }, "babel-jest": { "version": "26.2.1", @@ -4108,7 +4100,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, "requires": { "tweetnacl": "^0.14.3" } @@ -4161,6 +4152,11 @@ "inherits": "~2.0.0" } }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -4530,8 +4526,7 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, "chalk": { "version": "2.4.2", @@ -4974,7 +4969,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -6225,7 +6219,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -6391,8 +6384,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { "version": "1.0.0", @@ -6544,7 +6536,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -6857,8 +6848,7 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { "version": "3.0.2", @@ -6994,20 +6984,17 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fast-levenshtein": { "version": "2.0.6", @@ -7142,14 +7129,12 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -7534,7 +7519,6 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -7764,14 +7748,12 @@ "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" }, "har-validator": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, "requires": { "ajv": "^6.5.5", "har-schema": "^2.0.0" @@ -7974,7 +7956,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -8505,8 +8486,7 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-utf8": { "version": "0.2.1", @@ -8556,8 +8536,7 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "istanbul-lib-coverage": { "version": "3.0.0", @@ -11569,6 +11548,16 @@ } } }, + "jira-client": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/jira-client/-/jira-client-6.18.0.tgz", + "integrity": "sha512-ecGSJJETF65wmp/rYjVVKGcRb4YBFG90jLWK9AQ/7D1ZFL8NfMn9omS5znD93q6+CX9wqWgzrm5FSwyTnXh6Vw==", + "requires": { + "@babel/runtime": "^7.6.0", + "request": "^2.88.0", + "request-promise": "^4.1.1" + } + }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -11587,8 +11576,7 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" }, "jsdom": { "version": "16.3.0", @@ -11644,20 +11632,17 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { "version": "1.0.1", @@ -11717,7 +11702,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -12760,8 +12744,7 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, "object-assign": { "version": "4.1.1", @@ -13073,8 +13056,7 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "picomatch": { "version": "2.2.2", @@ -13298,8 +13280,7 @@ "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "pstree.remy": { "version": "1.1.8", @@ -13319,8 +13300,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "pupa": { "version": "2.0.1", @@ -13694,7 +13674,6 @@ "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -13721,14 +13700,12 @@ "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -13737,8 +13714,29 @@ "uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, + "request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "requires": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } } } }, @@ -13746,7 +13744,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", - "dev": true, "requires": { "lodash": "^4.17.19" } @@ -14391,7 +14388,6 @@ "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -14632,8 +14628,7 @@ "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", - "dev": true + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" }, "streamsearch": { "version": "0.1.2", @@ -15161,7 +15156,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -15169,8 +15163,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" }, "type-check": { "version": "0.3.2", @@ -15555,7 +15548,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -15638,7 +15630,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", diff --git a/package.json b/package.json index bd627174..88225bc2 100644 --- a/package.json +++ b/package.json @@ -84,6 +84,7 @@ "dotenv": "^8.2.0", "express": "^4.17.1", "helmet": "^3.23.3", + "jira-client": "^6.18.0", "jsonwebtoken": "^8.5.1", "multer": "^1.4.2", "mysql": "^2.18.1", diff --git a/src/interfaces/jira/jira-attachment.interface.ts b/src/interfaces/jira/jira-attachment.interface.ts new file mode 100644 index 00000000..358b35b7 --- /dev/null +++ b/src/interfaces/jira/jira-attachment.interface.ts @@ -0,0 +1,10 @@ +import { JiraUser } from './jira-user.interface'; + +export interface Attachment { + id: number; + author: JiraUser; + filename: string; + size: number; + mimeType: string; + created: Date; +} diff --git a/src/interfaces/jira/jira-comment.interface.ts b/src/interfaces/jira/jira-comment.interface.ts new file mode 100644 index 00000000..44b7e97e --- /dev/null +++ b/src/interfaces/jira/jira-comment.interface.ts @@ -0,0 +1,10 @@ +import { JiraUser } from './jira-user.interface'; + +export interface Comment { + id: number; + body: string; + author: JiraUser; + created: Date; + updated: Date; + properties: any; +} diff --git a/src/interfaces/jira/jira-component.interface.ts b/src/interfaces/jira/jira-component.interface.ts new file mode 100644 index 00000000..0c7a6ffd --- /dev/null +++ b/src/interfaces/jira/jira-component.interface.ts @@ -0,0 +1,4 @@ +export interface Component { + id: number; + name: string; +} diff --git a/src/interfaces/jira/jira-issue-link-type.interface.ts b/src/interfaces/jira/jira-issue-link-type.interface.ts new file mode 100644 index 00000000..0e3b6f11 --- /dev/null +++ b/src/interfaces/jira/jira-issue-link-type.interface.ts @@ -0,0 +1,6 @@ +export interface IssueLinkType { + id: string; + name: string; + inward: string; + outward: string; +} diff --git a/src/interfaces/jira/jira-issue-link.interface.ts b/src/interfaces/jira/jira-issue-link.interface.ts new file mode 100644 index 00000000..09eeb4e2 --- /dev/null +++ b/src/interfaces/jira/jira-issue-link.interface.ts @@ -0,0 +1,11 @@ +import { IssueLinkType } from './jira-issue-link-type.interface'; +import { JiraIssue } from './jira-issue.interface'; + +export interface IssueLink { + id: number; + type: IssueLinkType; + direction: string; // Inward, Outward + outwardIssue: JiraIssue; + inwardIssue: JiraIssue; + linkedIssue: JiraIssue; +} diff --git a/src/interfaces/jira/jira-issue-priority.interface.ts b/src/interfaces/jira/jira-issue-priority.interface.ts new file mode 100644 index 00000000..ce51a51a --- /dev/null +++ b/src/interfaces/jira/jira-issue-priority.interface.ts @@ -0,0 +1,6 @@ +export interface JiraPriority { + id: number; + key: string; + name: string; + colorName: string; +} diff --git a/src/interfaces/jira/jira-issue-status.interface.ts b/src/interfaces/jira/jira-issue-status.interface.ts new file mode 100644 index 00000000..ed8c300e --- /dev/null +++ b/src/interfaces/jira/jira-issue-status.interface.ts @@ -0,0 +1,7 @@ +import { StatusCategory } from './jira-status-category.interface'; +export interface IssueStatus { + id: number; + name: string; + description: string; + category: StatusCategory; +} diff --git a/src/interfaces/jira/jira-issue-type.interface.ts b/src/interfaces/jira/jira-issue-type.interface.ts new file mode 100644 index 00000000..4b507e62 --- /dev/null +++ b/src/interfaces/jira/jira-issue-type.interface.ts @@ -0,0 +1,6 @@ +export interface IssueType { + id: number; + name: string; + description: string; + properties: any; +} diff --git a/src/interfaces/jira/jira-issue.interface.ts b/src/interfaces/jira/jira-issue.interface.ts new file mode 100644 index 00000000..9103f624 --- /dev/null +++ b/src/interfaces/jira/jira-issue.interface.ts @@ -0,0 +1,43 @@ +import { JiraProject } from './jira-project.interface'; +import { JiraPriority } from './jira-issue-priority.interface'; +import { JiraUser } from './jira-user.interface'; +import { IssueType } from './jira-issue-type.interface'; +import { IssueStatus } from './jira-issue-status.interface'; +import { Resolution } from './jira-resolution.interface'; +import { SecurityLevel } from './jira-security-level.interface'; +import { Version } from './jira-version.interface'; +import { Component } from './jira-component.interface'; +import { Attachment } from './jira-attachment.interface'; +import { IssueLink } from './jira-issue-link.interface'; +export interface JiraIssue { + id?: number; + key?: string; + summary?: string; + parent?: JiraIssue; + subtasks?: JiraIssue[]; + description?: string; + environment?: string; + project?: JiraProject; + priority?: JiraPriority; + assignee?: JiraUser; + reporter?: JiraUser; + creator?: JiraUser; + issueType?: IssueType; + issueStatus?: IssueStatus; + created?: Date; + updated?: Date; + dueDate?: Date; + resolution?: Resolution; + originalEstimate?: number; + remainingEstimate?: number; + timeSpent?: number; + securityLevel?: SecurityLevel; + labels?: string[]; + versions?: Version[]; + fixVersions?: Version[]; + components?: Component[]; + comments?: Comment[]; + attachments?: Attachment[]; + links?: IssueLink[]; + properties?: any; +} diff --git a/src/interfaces/jira/jira-project-role.interface.ts b/src/interfaces/jira/jira-project-role.interface.ts new file mode 100644 index 00000000..cc6258a0 --- /dev/null +++ b/src/interfaces/jira/jira-project-role.interface.ts @@ -0,0 +1,5 @@ +export interface ProjectRole { + id: number; + name: string; + description: string; +} diff --git a/src/interfaces/jira/jira-project.interface.ts b/src/interfaces/jira/jira-project.interface.ts new file mode 100644 index 00000000..4f5dd32b --- /dev/null +++ b/src/interfaces/jira/jira-project.interface.ts @@ -0,0 +1,8 @@ +export interface JiraProject { + id?: number; + key?: string; + style?: string; + name?: string; + projectTypeKey?: string; + properties?: any; +} diff --git a/src/interfaces/jira/jira-resolution.interface.ts b/src/interfaces/jira/jira-resolution.interface.ts new file mode 100644 index 00000000..4e6c2b23 --- /dev/null +++ b/src/interfaces/jira/jira-resolution.interface.ts @@ -0,0 +1,5 @@ +export interface Resolution { + id: number; + name: string; + description: string; +} diff --git a/src/interfaces/jira/jira-security-level.interface.ts b/src/interfaces/jira/jira-security-level.interface.ts new file mode 100644 index 00000000..133680bf --- /dev/null +++ b/src/interfaces/jira/jira-security-level.interface.ts @@ -0,0 +1,5 @@ +export interface SecurityLevel { + id: number; + name: string; + description: string; +} diff --git a/src/interfaces/jira/jira-status-category.interface.ts b/src/interfaces/jira/jira-status-category.interface.ts new file mode 100644 index 00000000..9ff99575 --- /dev/null +++ b/src/interfaces/jira/jira-status-category.interface.ts @@ -0,0 +1,6 @@ +export interface StatusCategory { + id: number, + key: string, + name: string, + colorName: string +} \ No newline at end of file diff --git a/src/interfaces/jira/jira-user.interface.ts b/src/interfaces/jira/jira-user.interface.ts new file mode 100644 index 00000000..9c8d4cfe --- /dev/null +++ b/src/interfaces/jira/jira-user.interface.ts @@ -0,0 +1,7 @@ +export interface JiraUser { + accountId: string; + displayName: string; + properties: any; + groups: string[]; + permissions: string[]; +} diff --git a/src/interfaces/jira/jira-version.interface.ts b/src/interfaces/jira/jira-version.interface.ts new file mode 100644 index 00000000..b771ccd2 --- /dev/null +++ b/src/interfaces/jira/jira-version.interface.ts @@ -0,0 +1,8 @@ +export interface Version { + id: number; + name: string; + description: string; + archived: boolean; + released: boolean; + releaseDate: Date; +} diff --git a/src/utilities/jira.utility.ts b/src/utilities/jira.utility.ts new file mode 100644 index 00000000..d818fc68 --- /dev/null +++ b/src/utilities/jira.utility.ts @@ -0,0 +1,54 @@ +import * as JiraApi from 'jira-client'; +import { JiraIssue } from 'src/interfaces/jira/jira-issue.interface'; +import { JiraProject } from 'src/interfaces/jira/jira-project.interface'; +import { IssueType } from 'src/interfaces/jira/jira-issue-type.interface'; + +// Initialize +const jira = new JiraApi({ + protocol: 'https', + host: process.env.JIRA_HOST, + username: process.env.JIRA_USERNAME, + password: process.env.JIRA_API_KEY, + apiVersion: '2', + strictSSL: true +}); + +export const addNewIssue = async (issue) => { + try { + const saved = await jira.addNewIssue(issue); + console.log(saved); + } catch (err) { + console.error(err.message); + } +}; + +const jiraProject: JiraProject = { + key: 'bul', + id: 10000 +}; + +const x = { + project: { + key: 'bul', + id: '10000' + }, + summary: 'REST ye merry gentlemen.', + description: 'Creating of an issue using project keys and issue type names using the REST API', + issuetype: { + name: 'Bug' + } +}; + +const jiraIssue: JiraIssue = { + key: 'First Test', + project: jiraProject, + summary: 'REST ye merry gentlemen.', + description: 'Creating of an issue using project keys and issue type names using the REST API', + issueType: { + name: 'Bug' + } as IssueType +}; + +console.log(jiraIssue); + +addNewIssue(jiraIssue);