diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..a8e99aa --- /dev/null +++ b/.gitattributes @@ -0,0 +1,17 @@ +# Set the default behavior (used when a rule below doesn't match) +* text=auto + +*.sln -text +*.ico -text +*.bmp -text +*.png -text +*.snk -text +*.mht -text +*.pickle -text + +# Some Windows-specific files should always be CRLF +*.bat eol=crlf + +# Shell scripts +*.sh eol=lf +*.completion eol=lf diff --git a/.gitignore b/.gitignore index ad46b30..84f2691 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,5 @@ typings/ # next.js build output .next +/.rpt2_cache/** +/dist/** diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..6331f60 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,547 @@ +{ + "name": "coderr.apiclient", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/crypto-js": { + "version": "3.1.43", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-3.1.43.tgz", + "integrity": "sha512-EHe/YKctU3IYNBsDmSOPX/7jLHPRlx8WaiDKSY9JCTnJ8XJeM4c0ZJvx+9Gxmr2s2ihI92R+3U/gNL1sq5oRuQ==", + "dev": true + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "dev": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "dev": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "dev": true + }, + "@types/node": { + "version": "12.6.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.6.6.tgz", + "integrity": "sha512-SMgj3x28MkJyHdWaMv/g/ca3LYDi5gR7O8mX0VKazvFOnmlDXctSEdd/8jfSqozjKFK1R9If1QZWkafX7yQTpA==", + "dev": true + }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "dev": true + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "acorn": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.0.tgz", + "integrity": "sha512-8oe72N3WPMjA+2zVG71Ia0nXZ8DpQH+QyyHO+p06jT8eg8FGG3FbcUIi8KziHlAfheJQZeoqbvq1mQSQHXKYLw==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "axios": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", + "requires": { + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "crypto-js": { + "version": "3.1.9-1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.9-1.tgz", + "integrity": "sha1-/aGedh/Ad+Af+/3G6f38WeiAbNg=" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + } + }, + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "requires": { + "debug": "=3.1.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "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" + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", + "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "magic-string": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.3.tgz", + "integrity": "sha512-6QK0OpF/phMz0Q2AxILkX2mFhi7m+WMwTRg0LQKq/WBB0cDP4rYH3Wp4/d3OTXlrPLVJT/RFqj8tFeAR4nk8AA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "resolve": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.17.0.tgz", + "integrity": "sha512-k/j1m0NIsI4SYgCJR4MWPstGJOWfJyd6gycKoMhyoKPVXxm+L49XtbUwZyFsrSU2YXsOkM4u1ll9CS/ZgJBUpw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "@types/node": "^12.6.2", + "acorn": "^6.2.0" + } + }, + "rollup-plugin-commonjs": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.3.4.tgz", + "integrity": "sha512-DTZOvRoiVIHHLFBCL4pFxOaJt8pagxsVldEXBOn6wl3/V21wVaj17HFfyzTsQUuou3sZL3lEJZVWKPFblJfI6w==", + "dev": true, + "requires": { + "estree-walker": "^0.6.0", + "magic-string": "^0.25.2", + "resolve": "^1.10.0", + "rollup-pluginutils": "^2.6.0" + } + }, + "rollup-plugin-delete": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-delete/-/rollup-plugin-delete-1.0.0.tgz", + "integrity": "sha512-mDLpMZgqQJRxuU4MlhSwc7ePv8dNNEaxaWd0T/EAXezOZZrtzDBlyLWbISiVOtQiCQdtzjmma+AB2nJpnqqdXg==", + "dev": true, + "requires": { + "del": "^4.1.1" + } + }, + "rollup-plugin-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz", + "integrity": "sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow==", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.5.0" + } + }, + "rollup-plugin-node-resolve": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", + "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", + "dev": true, + "requires": { + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.11.1", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-sourcemaps": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.4.2.tgz", + "integrity": "sha1-YhJaqUCHqt97g+9N+vYptHMTXoc=", + "dev": true, + "requires": { + "rollup-pluginutils": "^2.0.1", + "source-map-resolve": "^0.5.0" + } + }, + "rollup-plugin-typescript2": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.22.0.tgz", + "integrity": "sha512-jkccBtzTFLdZK7SoVlSDmaRiDgoq+P8n41pVSFYrrGq/OMR2fVW+O4Tnx7h39Ige0sGHKs2HuqJ8K6Ap0n785Q==", + "dev": true, + "requires": { + "fs-extra": "8.1.0", + "resolve": "1.11.1", + "rollup-pluginutils": "2.8.1", + "tslib": "1.10.0" + } + }, + "rollup-pluginutils": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.1.tgz", + "integrity": "sha512-J5oAoysWar6GuZo0s+3bZ6sVZAC0pfqKz68De7ZgDi5z63jOVZn1uJL/+z1jeKHNbGII8kAyHF5q8LnxSX5lQg==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.6.tgz", + "integrity": "sha512-1ZooVLYFxC448piVLBbtOxFcXwnymH9oUF8nRd3CuYDVvkRBxRl6pB4Mtas5a4drtL+E8LDgFkQNcgIw6tc8Hg==", + "dev": true + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true + }, + "typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1c53d85 --- /dev/null +++ b/package.json @@ -0,0 +1,41 @@ +{ + "name": "coderr.apiclient", + "version": "1.0.0", + "description": "Client for the Coderr Server API", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/coderrio/coderr.apiclient.js.git" + }, + "keywords": [ + "coderr", + "error-handling" + ], + "author": "1TCompany AB", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/coderrio/coderr.apiclient.js/issues" + }, + "homepage": "https://github.com/coderrio/coderr.apiclient.js#readme", + "devDependencies": { + "@types/crypto-js": "^3.1.43", + "@types/mocha": "^5.2.7", + "@types/node": "^12.6.6", + "@types/q": "^1.5.2", + "rollup": "^1.16.7", + "rollup-plugin-commonjs": "^9.1.8", + "rollup-plugin-delete": "^1.0.0", + "rollup-plugin-json": "^4.0.0", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-sourcemaps": "^0.4.2", + "rollup-plugin-typescript2": "^0.22.0", + "typescript": "^3.5.3" + }, + "dependencies": { + "axios": "^0.19.0", + "crypto-js": "^3.1.9-1" + } +} diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..8b4d6a2 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,62 @@ +import resolve from 'rollup-plugin-node-resolve'; +import commonjs from 'rollup-plugin-commonjs'; +import sourceMaps from 'rollup-plugin-sourcemaps'; +import json from 'rollup-plugin-json'; +import typescript from 'rollup-plugin-typescript2'; +import del from 'rollup-plugin-delete'; + +export default [ + { + input: `src/index.ts`, + output: [ + { + name: 'coderr', + file: 'dist/coderr.apiclient.browser.js', + format: 'iife', + }, + { + file: 'dist/coderr.apiclient.browser.min.js', + format: 'es', + sourcemap: true, + }, + ], + plugins: [ + json(), + del({ targets: 'dist/*' }), + typescript({ useTsconfigDeclarationDir: true }), + commonjs(), // so Rollup can convert `ms` to an ES module + resolve(), // so Rollup can find `ms` + sourceMaps(), + ], + }, + { + input: `src/index.ts`, + output: [ + { + file: 'dist/coderr.apiclient.umd.js', + name: 'aaa', + format: 'umd', + sourcemap: true, + }, + { file: 'dist/coderr.apiclient.umd.min.js', format: 'es', sourcemap: true }, + ], + // Indicate here external modules you don't wanna include in your bundle (i.e.: 'lodash') + external: [], + watch: { + include: 'src/**', + }, + plugins: [ + json(), + typescript({ useTsconfigDeclarationDir: true }), + // Allow bundling cjs modules (unlike webpack, rollup doesn't understand cjs) + commonjs(), + // Allow node_modules resolution, so you can use 'external' to control + // which external modules to include in the bundle + // https://github.com/rollup/rollup-plugin-node-resolve#usage + resolve(), + + // Resolve source maps to the original source + sourceMaps(), + ], + }, +]; diff --git a/src/ApiClient.ts b/src/ApiClient.ts new file mode 100644 index 0000000..51295c1 --- /dev/null +++ b/src/ApiClient.ts @@ -0,0 +1,147 @@ +import Axios from "axios"; +import { AxiosRequestConfig, AxiosPromise, Method } from "axios"; +import hmacSHA256 from "crypto-js/hmac-sha256"; +import base64 from "crypto-js/enc-base64"; + +export interface IHttpResponse { + statusCode: number; + statusReason: string; + contentType: string | null; + body: any; + charset: string | null; +} + +export class HttpError extends Error { + message: string; + reponse: IHttpResponse; + + constructor(response: IHttpResponse) { + super(response.statusReason); + this.message = response.statusReason; + this.reponse = response; + } +} + +class QueryString { + static parse(str: string): any { + str = str.trim().replace(/^(\?|#)/, ""); + if (!str) { + return null; + } + + const data = str + .trim() + .split("&") + .reduce((ret: any, param) => { + var parts = param.replace(/\+/g, " ").split("="); + var key = parts[0]; + var val: string | null = parts[1]; + + key = decodeURIComponent(key); + val = val === undefined ? null : decodeURIComponent(val); + if (!ret.hasOwnProperty(key)) { + ret[key] = val; + } else if (Array.isArray(ret[key])) { + ret[key].push(val); + } else { + ret[key] = [ret[key], val]; + } + + return ret; + }, {}); + + return data; + } + + static stringify(data: any): string { + return data + ? Object.keys(data) + .map(key => { + var val = data[key]; + + if (Array.isArray(val)) { + return val + .map( + val2 => + encodeURIComponent(key) + "=" + encodeURIComponent(val2) + ) + .join("&"); + } + + return encodeURIComponent(key) + "=" + encodeURIComponent(val); + }) + .join("&") + : ""; + } +} + +export class ApiClient { + constructor( + private url: string, + private apiKey: string, + private sharedSecret: string + ) { + if (this.url[url.length - 1] !== "/") { + this.url += "/"; + } + this.url += "api/cqs/"; + } + + async command(message: any) { + await this.request("POST", message, null); + } + + async query(query: any): Promise { + return await this.request("GET", null, query); + } + + private createSignature(sharedSecret: string, message: string): string { + var hash = hmacSHA256(message, sharedSecret); + var hashInBase64 = base64.stringify(hash); + return hashInBase64; + } + + private async request( + method: Method, + message: any, + queryParameters: any + ): Promise { + var json = JSON.stringify(message); + var signature = this.createSignature(this.sharedSecret, json); + + var config: AxiosRequestConfig = { + url: this.url, + method: method, + data: json, + headers: { + Accept: "application/json", + Authorization: `ApiKey ${this.apiKey} ${signature}`, + "X-Api-Signature": signature, + "X-Api-Key": this.apiKey, + "X-Cqs-Name": message.constructor.TYPE_NAME + } + }; + if (queryParameters != null) { + config.url += "?" + QueryString.stringify(queryParameters); + } + + var result = await Axios.request(config); + + // no data + if (result.status == 204) { + return null; + } + + if (result.status >= 400) { + throw new HttpError({ + body: result.data, + charset: result.headers.charset, + contentType: result.request.contentType, + statusCode: result.status, + statusReason: result.statusText + }); + } + + return result.data; + } +} diff --git a/src/api/Common/Mine.ts b/src/api/Common/Mine.ts new file mode 100644 index 0000000..77be56c --- /dev/null +++ b/src/api/Common/Mine.ts @@ -0,0 +1,38 @@ +export class ListMyIncidents +{ + public static TYPE_NAME: string = 'ListMyIncidents'; + public ApplicationId: number|null; +} +export class ListMyIncidentsResult +{ + public static TYPE_NAME: string = 'ListMyIncidentsResult'; + public Items: ListMyIncidentsResultItem[]; + public Suggestions: ListMySuggestedItem[]; +} +export class ListMyIncidentsResultItem +{ + public static TYPE_NAME: string = 'ListMyIncidentsResultItem'; + public ApplicationId: number; + public ApplicationName: string; + public AssignedAtUtc: Date; + public CreatedAtUtc: Date; + public Id: number; + public LastReportAtUtc: Date; + public Name: string; + public ReportCount: number; +} +export class ListMySuggestedItem +{ + public static TYPE_NAME: string = 'ListMySuggestedItem'; + public ApplicationId: number; + public ApplicationName: string; + public CreatedAtUtc: Date; + public ExceptionTypeName: string; + public Id: number; + public LastReportAtUtc: Date; + public Name: string; + public Weight: number; + public ReportCount: number; + public StackTrace: string; + public Motivation: string; +} diff --git a/src/api/Common/Partitions.ts b/src/api/Common/Partitions.ts new file mode 100644 index 0000000..3aaa884 --- /dev/null +++ b/src/api/Common/Partitions.ts @@ -0,0 +1,51 @@ +export class CreatePartition { + public static TYPE_NAME: string = 'CreatePartition'; + ApplicationId: number; + Name: string; + PartitionKey: string; + NumberOfItems: number; + Weight: number; +} +export class UpdatePartition { + public static TYPE_NAME: string = 'UpdatePartition'; + Id: number; + Name: string; + NumberOfItems: number; + Weight: number; +} +export class DeletePartition { + public static TYPE_NAME: string = 'DeletePartition'; + Id: number; +} + +export class GetPartitions { + public static TYPE_NAME: string = 'GetPartitions'; + ApplicationId: number; +} + +export class GetPartitionsResult { + Items: GetPartitionsResultItem[]; +} + +export class GetPartitionsResultItem { + Id: number; + ApplicationId: number; + Name: string; + PartitionKey: string; + NumberOfItems: number; + Weight: number; +} + +export class GetPartition { + public static TYPE_NAME: string = 'GetPartition'; + Id: number; +} + +export class GetPartitionResult { + Id: number; + ApplicationId: number; + Name: string; + PartitionKey: string; + NumberOfItems: number; + Weight: number; +} diff --git a/src/api/Core/Accounts.ts b/src/api/Core/Accounts.ts new file mode 100644 index 0000000..13c2458 --- /dev/null +++ b/src/api/Core/Accounts.ts @@ -0,0 +1,120 @@ +// ReSharper disable InconsistentNaming +export class RegisterSimple +{ + public static TYPE_NAME: string = 'RegisterSimple'; + public EmailAddress: string; +} +export class AcceptInvitation +{ + public static TYPE_NAME: string = 'AcceptInvitation'; + public AcceptedEmail: string; + public AccountId: number; + public EmailUsedForTheInvitation: string; + public FirstName: string; + public InvitationKey: string; + public LastName: string; + public Password: string; + public UserName: string; +} +export class ChangePassword +{ + public static TYPE_NAME: string = 'ChangePassword'; + public CurrentPassword: string; + public NewPassword: string; +} +export class ValidateNewLoginReply +{ + public static TYPE_NAME: string = 'ValidateNewLoginReply'; + public EmailIsTaken: boolean; + public UserNameIsTaken: boolean; +} +export class AccountDTO +{ + public static TYPE_NAME: string = 'AccountDTO'; + public CreatedAtUtc: Date; + public Email: string; + public Id: number; + public LastLoginAtUtc: Date; + public State: AccountState; + public UpdatedAtUtc: Date; + public UserName: string; +} +export enum AccountState +{ + VerificationRequired = 0, + Active = 1, + Locked = 2, + ResetPassword = 3, +} +export class FindAccountByUserName +{ + public static TYPE_NAME: string = 'FindAccountByUserName'; + public UserName: string; +} +export class FindAccountByUserNameResult +{ + public static TYPE_NAME: string = 'FindAccountByUserNameResult'; + public AccountId: number; + public DisplayName: string; +} +export class GetAccountById +{ + public static TYPE_NAME: string = 'GetAccountById'; + public AccountId: number; +} +export class GetAccountEmailById +{ + public static TYPE_NAME: string = 'GetAccountEmailById'; + public AccountId: number; +} +export class AccountActivated +{ + public static TYPE_NAME: string = 'AccountActivated'; + public AccountId: number; + public EmailAddress: string; + public UserName: string; +} +export class AccountRegistered +{ + public static TYPE_NAME: string = 'AccountRegistered'; + public AccountId: number; + public IsSysAdmin: boolean; + public UserName: string; +} +export class InvitationAccepted +{ + public static TYPE_NAME: string = 'InvitationAccepted'; + public AcceptedEmailAddress: string; + public AccountId: number; + public ApplicationIds: number[]; + public InvitedByUserName: string; + public InvitedEmailAddress: string; + public UserName: string; +} +export class LoginFailed +{ + public static TYPE_NAME: string = 'LoginFailed'; + public InvalidLogin: boolean; + public IsActivated: boolean; + public IsLocked: boolean; + public UserName: string; +} +export class DeclineInvitation +{ + public static TYPE_NAME: string = 'DeclineInvitation'; + public InvitationId: string; +} +export class RegisterAccount +{ + public static TYPE_NAME: string = 'RegisterAccount'; + public AccountId: number; + public ActivateDirectly: boolean; + public Email: string; + public Password: string; + public UserName: string; +} +export class RequestPasswordReset +{ + public static TYPE_NAME: string = 'RequestPasswordReset'; + public EmailAddress: string; +} diff --git a/src/api/Core/ApiKeys.ts b/src/api/Core/ApiKeys.ts new file mode 100644 index 0000000..4586f1a --- /dev/null +++ b/src/api/Core/ApiKeys.ts @@ -0,0 +1,76 @@ +// ReSharper disable InconsistentNaming + +export class GetApiKey +{ + public static TYPE_NAME: string = 'GetApiKey'; + public ApiKey: string; + public Id: number; +} +export class GetApiKeyResult +{ + public static TYPE_NAME: string = 'GetApiKeyResult'; + public AllowedApplications: GetApiKeyResultApplication[]; + public ApplicationName: string; + public CreatedAtUtc: Date; + public CreatedById: number; + public GeneratedKey: string; + public Id: number; + public SharedSecret: string; +} +export class GetApiKeyResultApplication +{ + public static TYPE_NAME: string = 'GetApiKeyResultApplication'; + public ApplicationId: number; + public ApplicationName: string; +} +export class ListApiKeys +{ + public static TYPE_NAME: string = 'ListApiKeys'; +} +export class ListApiKeysResult +{ + public static TYPE_NAME: string = 'ListApiKeysResult'; + public Keys: ListApiKeysResultItem[]; +} +export class ListApiKeysResultItem +{ + public static TYPE_NAME: string = 'ListApiKeysResultItem'; + public ApiKey: string; + public ApplicationName: string; + public Id: number; +} +export class ApiKeyCreated +{ + public static TYPE_NAME: string = 'ApiKeyCreated'; + public ApiKey: string; + public ApplicationIds: number[]; + public ApplicationNameForTheAppUsingTheKey: string; + public CreatedById: number; + public SharedSecret: string; +} +export class ApiKeyRemoved +{ + public static TYPE_NAME: string = 'ApiKeyRemoved'; +} +export class CreateApiKey +{ + public static TYPE_NAME: string = 'CreateApiKey'; + public AccountId: number; + public ApiKey: string; + public ApplicationIds: number[]; + public ApplicationName: string; + public SharedSecret: string; +} +export class DeleteApiKey +{ + public static TYPE_NAME: string = 'DeleteApiKey'; + public ApiKey: string; + public Id: number; +} +export class EditApiKey +{ + public static TYPE_NAME: string = 'EditApiKey'; + public ApplicationIds: number[]; + public ApplicationName: string; + public Id: number; +} diff --git a/src/api/Core/Applications.ts b/src/api/Core/Applications.ts new file mode 100644 index 0000000..3a92904 --- /dev/null +++ b/src/api/Core/Applications.ts @@ -0,0 +1,145 @@ +export class ApplicationListItem { + public static TYPE_NAME: string = 'ApplicationListItem'; + public Id: number; + public Name: string; + public IsAdmin: boolean; +} +export enum TypeOfApplication { + Mobile = 0, + DesktopApplication = 1, + Server = 2, +} +export class GetApplicationIdByKey { + public static TYPE_NAME: string = 'GetApplicationIdByKey'; + public ApplicationKey: string; +} +export class GetApplicationIdByKeyResult { + public static TYPE_NAME: string = 'GetApplicationIdByKeyResult'; + public Id: number; +} +export class GetApplicationInfo { + public static TYPE_NAME: string = 'GetApplicationInfo'; + public AppKey: string; + public ApplicationId: number; +} +export class GetApplicationInfoResult { + public static TYPE_NAME: string = 'GetApplicationInfoResult'; + public AppKey: string; + public ApplicationType: TypeOfApplication; + public Id: number; + public Name: string; + public SharedSecret: string; + public TotalIncidentCount: number; + public Versions: string[]; + public ShowStatsQuestion: boolean; +} +export class GetApplicationList { + public static TYPE_NAME: string = 'GetApplicationList'; + public AccountId: number; + public FilterAsAdmin: boolean; +} +export class GetApplicationOverview { + public static TYPE_NAME: string = 'GetApplicationOverview'; + public ApplicationId: number; + public NumberOfDays: number; + public Version: string; +} +export class GetApplicationOverviewResult { + public static TYPE_NAME: string = 'GetApplicationOverviewResult'; + public Days: number; + public ErrorReports: number[]; + public Incidents: number[]; + public StatSummary: OverviewStatSummary; + public TimeAxisLabels: string[]; +} +export class GetApplicationTeam { + public static TYPE_NAME: string = 'GetApplicationTeam'; + public ApplicationId: number; +} +export class GetApplicationTeamMember { + public static TYPE_NAME: string = 'GetApplicationTeamMember'; + public JoinedAtUtc: Date; + public UserId: number; + public UserName: string; + public IsAdmin: boolean; +} +export class GetApplicationTeamResult { + public static TYPE_NAME: string = 'GetApplicationTeamResult'; + public Invited: GetApplicationTeamResultInvitation[]; + public Members: GetApplicationTeamMember[]; +} +export class GetApplicationTeamResultInvitation { + public static TYPE_NAME: string = 'GetApplicationTeamResultInvitation'; + public EmailAddress: string; + public InvitedAtUtc: Date; + public InvitedByUserName: string; +} +export class OverviewStatSummary { + public static TYPE_NAME: string = 'OverviewStatSummary'; + public Followers: number; + public Incidents: number; + public Reports: number; + public UserFeedback: number; +} +export class ApplicationCreated { + public static TYPE_NAME: string = 'ApplicationCreated'; + public AppKey: string; + public ApplicationId: number; + public ApplicationName: string; + public CreatedById: number; + public SharedSecret: string; +} +export class ApplicationDeleted { + public static TYPE_NAME: string = 'ApplicationDeleted'; + public AppKey: string; + public ApplicationId: number; + public ApplicationName: string; +} +export class UserAddedToApplication { + public static TYPE_NAME: string = 'UserAddedToApplication'; + public AccountId: number; + public ApplicationId: number; +} +export class UserInvitedToApplication { + public static TYPE_NAME: string = 'UserInvitedToApplication'; + public ApplicationId: number; + public ApplicationName: string; + public EmailAddress: string; + public InvitationKey: string; + public InvitedBy: string; +} +export class CreateApplication { + public static TYPE_NAME: string = 'CreateApplication'; + public ApplicationKey: string; + public Name: string; + public TypeOfApplication: TypeOfApplication; + public NumberOfDevelopers?: number; + public NumberOfErrors?: number; +} +export class DeleteApplication { + public static TYPE_NAME: string = 'DeleteApplication'; + public Id: number; +} +export class RemoveTeamMember { + public static TYPE_NAME: string = 'RemoveTeamMember'; + public ApplicationId: number; + public UserToRemove: number; +} +export class UpdateApplication { + public static TYPE_NAME: string = 'UpdateApplication'; + public ApplicationId: number; + public Name: string; + public TypeOfApplication: TypeOfApplication | null; +} +export class AddTeamMember { + public static TYPE_NAME: string = 'AddTeamMember'; + public ApplicationId: number; + public UserToAdd: number; + public Roles: string[]; +} +export class UpdateRoles { + public static TYPE_NAME: string = 'UpdateRoles'; + public ApplicationId: number; + public UserToUpdate: number; + public Roles: string[]; +} \ No newline at end of file diff --git a/src/api/Core/Environments.ts b/src/api/Core/Environments.ts new file mode 100644 index 0000000..7032e69 --- /dev/null +++ b/src/api/Core/Environments.ts @@ -0,0 +1,21 @@ +export class GetEnvironments +{ + public static TYPE_NAME: string = 'GetEnvironments'; + public ApplicationId?: number; +} +export class GetEnvironmentsResult +{ + public static TYPE_NAME: string = 'GetEnvironments'; + public Items: GetEnvironmentsResultItem[]; +} +export class GetEnvironmentsResultItem +{ + public static TYPE_NAME: string = 'GetEnvironmentsResultItem'; + public Id: number; + public Name: string; +} +export class ResetEnvironment { + public static TYPE_NAME: string = 'ResetEnvironment'; + public EnvironmentId: number; + public ApplicationId: number; +} diff --git a/src/api/Core/Feedback.ts b/src/api/Core/Feedback.ts new file mode 100644 index 0000000..a398645 --- /dev/null +++ b/src/api/Core/Feedback.ts @@ -0,0 +1,17 @@ +export class FeedbackAttachedToIncident +{ + public static TYPE_NAME: string = 'FeedbackAttachedToIncident'; + public IncidentId: number; + public Message: string; + public UserEmailAddress: string; +} +export class SubmitFeedback +{ + public static TYPE_NAME: string = 'SubmitFeedback'; + public CreatedAtUtc: Date; + public Email: string; + public ErrorId: string; + public Feedback: string; + public RemoteAddress: string; + public ReportId: number; +} diff --git a/src/api/Core/Incidents.ts b/src/api/Core/Incidents.ts new file mode 100644 index 0000000..beae4df --- /dev/null +++ b/src/api/Core/Incidents.ts @@ -0,0 +1,223 @@ +import {ReportDTO} from './Reports' +// ReSharper disable InconsistentNaming + +export enum IncidentOrder +{ + Newest = 0, + MostReports = 1, + MostFeedback = 2, +} +export class IncidentSummaryDTO +{ + public static TYPE_NAME: string = 'IncidentSummaryDTO'; + public ApplicationId: number; + public ApplicationName: string; + public CreatedAtUtc: Date; + public Id: number; + public IsReOpened: boolean; + public AssignedToUserId: number|null; + public LastUpdateAtUtc: Date; + public Name: string; + public ReportCount: number; +} +export class FindIncidents +{ + public static TYPE_NAME: string = 'FindIncidents'; + public ApplicationIds: number[]; + public FreeText: string; + public IsAssigned: boolean; + public IsClosed: boolean; + public IsIgnored: boolean; + public IsNew: boolean; + public ItemsPerPage: number; + public MaxDate: Date; + public MinDate: Date; + public PageNumber: number; + public ReOpened: boolean; + public SortAscending: boolean; + public SortType: IncidentOrder; + public Version: string; + public Tags: string[]; + public AssignedToId: number; + public ContextCollectionName: string; + public ContextCollectionPropertyName: string; + public ContextCollectionPropertyValue: string; +} +export class FindIncidentsResult +{ + public static TYPE_NAME: string = 'FindIncidentsResult'; + public Items: FindIncidentsResultItem[]; + public PageNumber: number; + public PageSize: number; + public TotalCount: number; +} +export class FindIncidentsResultItem +{ + public static TYPE_NAME: string = 'FindIncidentsResultItem'; + public ApplicationId: number; + public ApplicationName: string; + public AssignedAtUtc: Date|null; + public CreatedAtUtc: Date; + public Id: number; + public IsReOpened: boolean; + public LastUpdateAtUtc: Date; + public Name: string; + public ReportCount: number; + public LastReportReceivedAtUtc: Date; +} +export class GetIncident +{ + public static TYPE_NAME: string = 'GetIncident'; + public IncidentId: number; +} +export class GetIncidentForClosePage +{ + public static TYPE_NAME: string = 'GetIncidentForClosePage'; + public IncidentId: number; +} +export class GetIncidentForClosePageResult +{ + public static TYPE_NAME: string = 'GetIncidentForClosePageResult'; + public Description: string; + public SubscriberCount: number; +} +export class GetIncidentResult +{ + public static TYPE_NAME: string = 'GetIncidentResult'; + public ApplicationId: number; + public AssignedAtUtc: Date|null; + public AssignedTo: string; + public AssignedToId: number|null; + public ContextCollections: string[]; + public CreatedAtUtc: Date; + public DayStatistics: ReportDay[]; + public Description: string; + public Facts: QuickFact[]; + public FullName: string; + public HashCodeIdentifier: string; + public Id: number; + public IncidentState: number; + public IsIgnored: boolean; + public IsReOpened: boolean; + public IsSolutionShared: boolean; + public IsSolved: boolean; + public LastReportReceivedAtUtc: Date; + public PreviousSolutionAtUtc: Date; + public ReOpenedAtUtc: Date; + public ReportCount: number; + public ReportHashCode: string; + public Solution: string; + public SolvedAtUtc: Date; + public StackTrace: string; + public Tags: string[]; + public UpdatedAtUtc: Date; + public SuggestedSolutions: SuggestedIncidentSolution[]; + public HighlightedContextData: HighlightedContextData[]; +} +export class GetIncidentStatistics +{ + public static TYPE_NAME: string = 'GetIncidentStatistics'; + public IncidentId: number; + public NumberOfDays: number; +} +export class GetIncidentStatisticsResult +{ + public static TYPE_NAME: string = 'GetIncidentStatisticsResult'; + public Labels: string[]; + public Values: number[]; +} +export class HighlightedContextData +{ + public static TYPE_NAME: string = 'HighlightedContextData'; + public Description: string; + public Name: string; + public Url: string; + public Value: string[]; +} +export class QuickFact +{ + public static TYPE_NAME: string = 'QuickFact'; + public Description: string; + public Title: string; + public Url: string; + public Value: string; +} +export class ReportDay +{ + public static TYPE_NAME: string = 'ReportDay'; + public Count: number; + public Date: Date; +} +export class SuggestedIncidentSolution +{ + public static TYPE_NAME: string = 'SuggestedIncidentSolution'; + public Reason: string; + public SuggestedSolution: string; +} +export class IncidentAssigned +{ + public static TYPE_NAME: string = 'IncidentAssigned'; + public AssignedById: number; + public AssignedToId: number; + public IncidentId: number; +} +export class IncidentIgnored +{ + public static TYPE_NAME: string = 'IncidentIgnored'; + public AccountId: number; + public IncidentId: number; + public UserName: string; +} +export class IncidentReOpened +{ + public static TYPE_NAME: string = 'IncidentReOpened'; + public ApplicationId: number; + public CreatedAtUtc: Date; + public IncidentId: number; +} +export class ReportAddedToIncident +{ + public static TYPE_NAME: string = 'ReportAddedToIncident'; + public Incident: IncidentSummaryDTO; + public IsReOpened: boolean; + public Report: ReportDTO; +} +export class AssignIncident +{ + public static TYPE_NAME: string = 'AssignIncident'; + public AssignedBy: number; + public AssignedTo: number; + public IncidentId: number; +} +export class CloseIncident +{ + public static TYPE_NAME: string = 'CloseIncident'; + public CanSendNotification: boolean; + public IncidentId: number; + public NotificationText: string; + public NotificationTitle: string; + public ShareSolution: boolean; + public Solution: string; + public UserId: number; + public ApplicationVersion: string; +} +export class IgnoreIncident +{ + public static TYPE_NAME: string = 'IgnoreIncident'; + public IncidentId: number; + public UserId: number; +} +export class ReOpenIncident +{ + public static TYPE_NAME: string = 'ReOpenIncident'; + public IncidentId: number; + public UserId: number; +} + +export class NotifySubscribers +{ + public static TYPE_NAME: string = 'NotifySubscribers'; + public IncidentId: number; + public Body: string; + public Title: string; +} diff --git a/src/api/Core/Invitations.ts b/src/api/Core/Invitations.ts new file mode 100644 index 0000000..8e4f4de --- /dev/null +++ b/src/api/Core/Invitations.ts @@ -0,0 +1,23 @@ +export class GetInvitationByKey +{ + public static TYPE_NAME: string = 'GetInvitationByKey'; + public InvitationKey: string; +} +export class GetInvitationByKeyResult +{ + public static TYPE_NAME: string = 'GetInvitationByKeyResult'; + public EmailAddress: string; +} +export class InviteUser +{ + public static TYPE_NAME: string = 'InviteUser'; + public ApplicationId: number; + public EmailAddress: string; + public Text: string; +} +export class DeleteInvitation +{ + public static TYPE_NAME: string = 'DeleteInvitation'; + public ApplicationId: number; + public InvitedEmailAddress: string; +} diff --git a/src/api/Core/Messaging.ts b/src/api/Core/Messaging.ts new file mode 100644 index 0000000..954ae5b --- /dev/null +++ b/src/api/Core/Messaging.ts @@ -0,0 +1,33 @@ +export class EmailAddress +{ + public static TYPE_NAME: string = 'EmailAddress'; + public Address: string; + public Name: string; +} +export class EmailMessage +{ + public static TYPE_NAME: string = 'EmailMessage'; + public HtmlBody: string; + public Recipients: EmailAddress[]; + public ReplyTo: EmailAddress; + public Resources: EmailResource[]; + public Subject: string; + public TextBody: string; +} +export class EmailResource +{ + public static TYPE_NAME: string = 'EmailResource'; + public Content: string /*base64 encoded data*/; + public Name: string; +} +export class SendEmail +{ + public static TYPE_NAME: string = 'SendEmail'; + public EmailMessage: EmailMessage; +} +export class SendSms +{ + public static TYPE_NAME: string = 'SendSms'; + public Message: string; + public PhoneNumber: string; +} diff --git a/src/api/Core/Notifications.ts b/src/api/Core/Notifications.ts new file mode 100644 index 0000000..32e4bd0 --- /dev/null +++ b/src/api/Core/Notifications.ts @@ -0,0 +1,9 @@ +export class AddNotification +{ + public static TYPE_NAME: string = 'AddNotification'; + public AccountId: number|null; + public HoldbackInterval: string|null; + public Message: string; + public NotificationType: string; + public RoleName: string; +} diff --git a/src/api/Core/Reports.ts b/src/api/Core/Reports.ts new file mode 100644 index 0000000..8decfa3 --- /dev/null +++ b/src/api/Core/Reports.ts @@ -0,0 +1,100 @@ +export class ContextCollectionDTO +{ + public static TYPE_NAME: string = 'ContextCollectionDTO'; + public Name: string; + public Properties: string[]; +} +export class ReportDTO +{ + public static TYPE_NAME: string = 'ReportDTO'; + public ApplicationId: number; + public ContextCollections: ContextCollectionDTO[]; + public CreatedAtUtc: Date; + public Exception: ReportExeptionDTO; + public Id: number; + public IncidentId: number; + public RemoteAddress: string; + public ReportId: string; + public ReportVersion: string; +} +export class ReportExeptionDTO +{ + public static TYPE_NAME: string = 'ReportExeptionDTO'; + public AssemblyName: string; + public BaseClasses: string[]; + public Everything: string; + public FullName: string; + public InnerException: ReportExeptionDTO; + public Message: string; + public Name: string; + public Namespace: string; + public Properties: string[]; + public StackTrace: string; +} +export class GetReport +{ + public static TYPE_NAME: string = 'GetReport'; + public ReportId: number; +} +export class GetReportException +{ + public static TYPE_NAME: string = 'GetReportException'; + public AssemblyName: string; + public BaseClasses: string[]; + public Everything: string; + public FullName: string; + public InnerException: GetReportException; + public Message: string; + public Name: string; + public Namespace: string; + public StackTrace: string; +} +export class GetReportList +{ + public static TYPE_NAME: string = 'GetReportList'; + public IncidentId: number; + public PageNumber: number; + public PageSize: number; +} +export class GetReportListResult +{ + public static TYPE_NAME: string = 'GetReportListResult'; + public Items: GetReportListResultItem[]; + public PageNumber: number; + public PageSize: number; + public TotalCount: number; +} +export class GetReportListResultItem +{ + public static TYPE_NAME: string = 'GetReportListResultItem'; + public CreatedAtUtc: Date; + public Id: number; + public Message: string; + public RemoteAddress: string; +} +export class GetReportResult +{ + public static TYPE_NAME: string = 'GetReportResult'; + public ContextCollections: GetReportResultContextCollection[]; + public CreatedAtUtc: Date; + public EmailAddress: string; + public ErrorId: string; + public Exception: GetReportException; + public Id: string; + public IncidentId: string; + public Message: string; + public StackTrace: string; + public UserFeedback: string; +} +export class GetReportResultContextCollection +{ + public static TYPE_NAME: string = 'GetReportResultContextCollection'; + public Name: string; + public Properties: KeyValuePair[]; +} +export class KeyValuePair +{ + public static TYPE_NAME: string = 'KeyValuePair'; + public Key: string; + public Value: string; +} diff --git a/src/api/Core/Support.ts b/src/api/Core/Support.ts new file mode 100644 index 0000000..4ae24f3 --- /dev/null +++ b/src/api/Core/Support.ts @@ -0,0 +1,7 @@ +export class SendSupportRequest +{ + public static TYPE_NAME: string = 'SendSupportRequest'; + public Message: string; + public Subject: string; + public Url: string; +} diff --git a/src/api/Core/Users.ts b/src/api/Core/Users.ts new file mode 100644 index 0000000..fcfb8b4 --- /dev/null +++ b/src/api/Core/Users.ts @@ -0,0 +1,49 @@ +export class NotificationSettings +{ + public static TYPE_NAME: string = 'NotificationSettings'; + public NotifyOnNewIncidents: NotificationState; + public NotifyOnNewReport: NotificationState; + public NotifyOnPeaks: NotificationState; + public NotifyOnReOpenedIncident: NotificationState; + public NotifyOnUserFeedback: NotificationState; +} +export enum NotificationState +{ + UseGlobalSetting = 0, + Disabled = 1, + Cellphone = 2, + Email = 3, +} +export class GetUserSettings +{ + public static TYPE_NAME: string = 'GetUserSettings'; + public ApplicationId: number; +} +export class GetUserSettingsResult +{ + public static TYPE_NAME: string = 'GetUserSettingsResult'; + public EmailAddress: string; + public FirstName: string; + public LastName: string; + public MobileNumber: string; + public Notifications: NotificationSettings; +} +export class UpdateNotifications +{ + public static TYPE_NAME: string = 'UpdateNotifications'; + public ApplicationId: number; + public NotifyOnNewIncidents: NotificationState; + public NotifyOnNewReport: NotificationState; + public NotifyOnPeaks: NotificationState; + public NotifyOnReOpenedIncident: NotificationState; + public NotifyOnUserFeedback: NotificationState; + public UserId: number; +} +export class UpdatePersonalSettings +{ + public static TYPE_NAME: string = 'UpdatePersonalSettings'; + public EmailAddress: string; + public FirstName: string; + public LastName: string; + public MobileNumber: string; +} diff --git a/src/api/Core/Whitelist.ts b/src/api/Core/Whitelist.ts new file mode 100644 index 0000000..5aba423 --- /dev/null +++ b/src/api/Core/Whitelist.ts @@ -0,0 +1,29 @@ +// ReSharper disable InconsistentNaming + +export class GetWhitelistEntries +{ + public static TYPE_NAME: string = 'GetWhitelistEntries'; + public DomainName: string; + public ApplicationId: number|null; +} +export class GetWhitelistEntriesResult +{ + public Entries: GetWhitelistEntriesResultItem[]; +} +export class GetWhitelistEntriesResultItem +{ + public Id: number; + public ApplicationId: number|null; + public DomainName: string; +} +export class AddDomain +{ + public static TYPE_NAME: string = 'AddDomain'; + public ApplicationId: number | null; + public DomainName: string; +} +export class RemoveEntry +{ + public static TYPE_NAME: string = 'RemoveEntry'; + public Id: Number; +} diff --git a/src/api/Modules/ContextData.ts b/src/api/Modules/ContextData.ts new file mode 100644 index 0000000..8efe886 --- /dev/null +++ b/src/api/Modules/ContextData.ts @@ -0,0 +1,29 @@ +export class GetSimilarities +{ + public static TYPE_NAME: string = 'GetSimilarities'; + public IncidentId: number; +} +export class GetSimilaritiesCollection +{ + public static TYPE_NAME: string = 'GetSimilaritiesCollection'; + public Name: string; + public Similarities: GetSimilaritiesSimilarity[]; +} +export class GetSimilaritiesResult +{ + public static TYPE_NAME: string = 'GetSimilaritiesResult'; + public Collections: GetSimilaritiesCollection[]; +} +export class GetSimilaritiesSimilarity +{ + public static TYPE_NAME: string = 'GetSimilaritiesSimilarity'; + public Name: string; + public Values: GetSimilaritiesValue[]; +} +export class GetSimilaritiesValue +{ + public static TYPE_NAME: string = 'GetSimilaritiesValue'; + public Count: number; + public Percentage: number; + public Value: string; +} diff --git a/src/api/Modules/ErrorOrigins.ts b/src/api/Modules/ErrorOrigins.ts new file mode 100644 index 0000000..d1ce0ac --- /dev/null +++ b/src/api/Modules/ErrorOrigins.ts @@ -0,0 +1,17 @@ +export class GetOriginsForIncident +{ + public static TYPE_NAME: string = 'GetOriginsForIncident'; + public IncidentId: number; +} +export class GetOriginsForIncidentResult +{ + public static TYPE_NAME: string = 'GetOriginsForIncidentResult'; + public Items: GetOriginsForIncidentResultItem[]; +} +export class GetOriginsForIncidentResultItem +{ + public static TYPE_NAME: string = 'GetOriginsForIncidentResultItem'; + public Latitude: number; + public Longitude: number; + public NumberOfErrorReports: number; +} diff --git a/src/api/Modules/History.ts b/src/api/Modules/History.ts new file mode 100644 index 0000000..9062045 --- /dev/null +++ b/src/api/Modules/History.ts @@ -0,0 +1,29 @@ +export class GetIncidentStateSummary { + static TYPE_NAME: string = "GetIncidentStateSummary"; + ApplicationId: number; + ApplicationVersion: string; +} + +export class GetIncidentStateSummaryResult { + ReOpenedCount: number; + NewCount: number; + ClosedCount: number; +} + +export class GetIncidentsForStates { + static TYPE_NAME: string = "GetIncidentsForStates"; + ApplicationId: number; + ApplicationVersion: string; +} + +export class GetIncidentsForStatesResult { + Items: GetIncidentsForStatesResultItem[]; +} +export class GetIncidentsForStatesResultItem { + IncidentId: number; + IncidentName: string; + CreatedAtUtc: Date; + IsClosed: boolean; + IsNew: boolean; + IsReopened: boolean; +} diff --git a/src/api/Modules/Tagging.ts b/src/api/Modules/Tagging.ts new file mode 100644 index 0000000..8284654 --- /dev/null +++ b/src/api/Modules/Tagging.ts @@ -0,0 +1,28 @@ +export class TagDTO +{ + public static TYPE_NAME: string = 'TagDTO'; + public Name: string; + public OrderNumber: number; +} +export class GetTagsForApplication +{ + public static TYPE_NAME: string = 'GetTagsForApplication'; + public ApplicationId: number; +} +export class GetTags +{ + public static TYPE_NAME: string = 'GetTags'; + public ApplicationId?: number; + public IncidentId?: number; +} +export class GetTagsForIncident +{ + public static TYPE_NAME: string = 'GetTagsForIncident'; + public IncidentId: number; +} +export class TagAttachedToIncident +{ + public static TYPE_NAME: string = 'TagAttachedToIncident'; + public IncidentId: number; + public Tags: TagDTO[]; +} diff --git a/src/api/Modules/Triggers.ts b/src/api/Modules/Triggers.ts new file mode 100644 index 0000000..ba25e29 --- /dev/null +++ b/src/api/Modules/Triggers.ts @@ -0,0 +1,123 @@ +export enum LastTriggerActionDTO +{ + ExecuteActions = 0, + AbortTrigger = 1, +} +export class TriggerActionDataDTO +{ + public static TYPE_NAME: string = 'TriggerActionDataDTO'; + public ActionContext: string; + public ActionName: string; +} +export class TriggerContextRule +{ + public static TYPE_NAME: string = 'TriggerContextRule'; + public ContextName: string; + public PropertyName: string; + public PropertyValue: string; + public Filter: TriggerFilterCondition; + public ResultToUse: TriggerRuleAction; +} +export class TriggerDTO +{ + public static TYPE_NAME: string = 'TriggerDTO'; + public Description: string; + public Id: string; + public Name: string; + public Summary: string; +} +export class TriggerExceptionRule +{ + public static TYPE_NAME: string = 'TriggerExceptionRule'; + public FieldName: string; + public Value: string; + public Filter: TriggerFilterCondition; + public ResultToUse: TriggerRuleAction; +} +export enum TriggerFilterCondition +{ + StartsWith = 0, + EndsWith = 1, + Contains = 2, + DoNotContain = 3, + Equals = 4, +} +export enum TriggerRuleAction +{ + AbortTrigger = 0, + ContinueWithNextRule = 1, + ExecuteActions = 2, +} +export class TriggerRuleBase +{ + public static TYPE_NAME: string = 'TriggerRuleBase'; + public Filter: TriggerFilterCondition; + public ResultToUse: TriggerRuleAction; +} +export class GetContextCollectionMetadata +{ + public static TYPE_NAME: string = 'GetContextCollectionMetadata'; + public ApplicationId: number; +} +export class GetContextCollectionMetadataItem +{ + public static TYPE_NAME: string = 'GetContextCollectionMetadataItem'; + public Name: string; + public Properties: string[]; +} +export class GetTrigger +{ + public static TYPE_NAME: string = 'GetTrigger'; + public Id: number; +} +export class GetTriggerDTO +{ + public static TYPE_NAME: string = 'GetTriggerDTO'; + public Actions: TriggerActionDataDTO[]; + public ApplicationId: number; + public Description: string; + public Id: number; + public LastTriggerAction: LastTriggerActionDTO; + public Name: string; + public Rules: TriggerRuleBase[]; + public RunForExistingIncidents: boolean; + public RunForNewIncidents: boolean; + public RunForReOpenedIncidents: boolean; +} +export class GetTriggersForApplication +{ + public static TYPE_NAME: string = 'GetTriggersForApplication'; + public ApplicationId: number; +} +export class CreateTrigger +{ + public static TYPE_NAME: string = 'CreateTrigger'; + public Actions: TriggerActionDataDTO[]; + public ApplicationId: number; + public Description: string; + public Id: number; + public LastTriggerAction: LastTriggerActionDTO; + public Name: string; + public Rules: TriggerRuleBase[]; + public RunForExistingIncidents: boolean; + public RunForNewIncidents: boolean; + public RunForReOpenedIncidents: boolean; +} +export class DeleteTrigger +{ + public static TYPE_NAME: string = 'DeleteTrigger'; + public Id: number; +} +export class UpdateTrigger +{ + public static TYPE_NAME: string = 'UpdateTrigger'; + public Actions: TriggerActionDataDTO[]; + public Description: string; + public Id: number; + public LastTriggerAction: LastTriggerActionDTO; + public Name: string; + public Rules: TriggerRuleBase[]; + public RunForExistingIncidents: boolean; + public RunForNewIncidents: boolean; + public RunForReOpenedIncidents: boolean; +} diff --git a/src/api/Modules/Versions.ts b/src/api/Modules/Versions.ts new file mode 100644 index 0000000..37532a3 --- /dev/null +++ b/src/api/Modules/Versions.ts @@ -0,0 +1,36 @@ +export class GetApplicationVersions +{ + public static TYPE_NAME: string = 'GetApplicationVersions'; + public ApplicationId: number; +} +export class GetApplicationVersionsResult +{ + public static TYPE_NAME: string = 'GetApplicationVersionsResult'; + public Items: GetApplicationVersionsResultItem[]; +} +export class GetApplicationVersionsResultItem +{ + public static TYPE_NAME: string = 'GetApplicationVersionsResultItem'; + public FirstReportReceivedAtUtc: Date; + public IncidentCount: number; + public LastReportReceivedAtUtc: Date; + public ReportCount: number; + public Version: string; +} +export class GetVersionHistory +{ + public static TYPE_NAME: string = 'GetVersionHistory'; + public ApplicationId: number; + public FromDate: Date; + public ToDate: Date; +} +export class GetVersionHistoryResult +{ + public Dates: string[]; + public IncidentCounts: GetVersionHistorySeries[]; + public ReportCounts: GetVersionHistorySeries[]; +} +export class GetVersionHistorySeries { + Name: string; + Values: number[]; +} diff --git a/src/api/Web/Feedback.ts b/src/api/Web/Feedback.ts new file mode 100644 index 0000000..78a171e --- /dev/null +++ b/src/api/Web/Feedback.ts @@ -0,0 +1,59 @@ +export class GetFeedbackForApplicationPage +{ + public static TYPE_NAME: string = 'GetFeedbackForApplicationPage'; + public ApplicationId: number; +} +export class GetFeedbackForApplicationPageResult +{ + public static TYPE_NAME: string = 'GetFeedbackForApplicationPageResult'; + public Emails: string[]; + public Items: GetFeedbackForApplicationPageResultItem[]; + public TotalCount: number; +} +export class GetFeedbackForApplicationPageResultItem +{ + public static TYPE_NAME: string = 'GetFeedbackForApplicationPageResultItem'; + public EmailAddress: string; + public IncidentId: number; + public IncidentName: string; + public Message: string; + public WrittenAtUtc: Date; +} +export class GetFeedbackForDashboardPage +{ + public static TYPE_NAME: string = 'GetFeedbackForDashboardPage'; +} +export class GetFeedbackForDashboardPageResult +{ + public static TYPE_NAME: string = 'GetFeedbackForDashboardPageResult'; + public Emails: string[]; + public Items: GetFeedbackForDashboardPageResultItem[]; + public TotalCount: number; +} +export class GetFeedbackForDashboardPageResultItem +{ + public static TYPE_NAME: string = 'GetFeedbackForDashboardPageResultItem'; + public ApplicationId: number; + public ApplicationName: string; + public EmailAddress: string; + public Message: string; + public WrittenAtUtc: Date; +} +export class GetIncidentFeedback +{ + public static TYPE_NAME: string = 'GetIncidentFeedback'; + public IncidentId: number; +} +export class GetIncidentFeedbackResult +{ + public static TYPE_NAME: string = 'GetIncidentFeedbackResult'; + public Emails: string[]; + public Items: GetIncidentFeedbackResultItem[]; +} +export class GetIncidentFeedbackResultItem +{ + public static TYPE_NAME: string = 'GetIncidentFeedbackResultItem'; + public EmailAddress: string; + public Message: string; + public WrittenAtUtc: Date; +} diff --git a/src/api/Web/Overview.ts b/src/api/Web/Overview.ts new file mode 100644 index 0000000..b7e4fde --- /dev/null +++ b/src/api/Web/Overview.ts @@ -0,0 +1,28 @@ +export class GetOverview +{ + public static TYPE_NAME: string = 'GetOverview'; + public NumberOfDays: number; +} +export class GetOverviewApplicationResult +{ + public static TYPE_NAME: string = 'GetOverviewApplicationResult'; + public Label: string; + public Values: number[]; +} +export class GetOverviewResult +{ + public static TYPE_NAME: string = 'GetOverviewResult'; + public Days: number; + public IncidentsPerApplication: GetOverviewApplicationResult[]; + public StatSummary: OverviewStatSummary; + public TimeAxisLabels: string[]; + public MissedReports?: number; +} +export class OverviewStatSummary +{ + public static TYPE_NAME: string = 'OverviewStatSummary'; + public Followers: number; + public Incidents: number; + public Reports: number; + public UserFeedback: number; +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..3c261f1 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,2 @@ +export * from './api/Core/Accounts'; +export {IHttpResponse, HttpError, ApiClient } from './ApiClient' diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..4f62bf4 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,44 @@ +{ + "compilerOptions": { + "declarationDir": "dist/types", + "outDir": "./dist/lib", + "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ + "module": "es2015", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ + "lib": [ + "es2015", + "dom" + ], + // "lib": [], /* Specify library files to be included in the compilation. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + // "outDir": "./", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* Enable strict null checks. */ + "strictPropertyInitialization": false, /* Enable strict checking of property initialization in classes. */ + "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + + "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + }, + "include": [ + "src/**/*" + ] + +} diff --git a/use.txt b/use.txt new file mode 100644 index 0000000..bdee736 --- /dev/null +++ b/use.txt @@ -0,0 +1 @@ +request-promise \ No newline at end of file