From 41d160f557941e6544adbad1d428a6f990c82e3d Mon Sep 17 00:00:00 2001 From: Ernest Okot Date: Sat, 16 Feb 2019 19:19:45 +0300 Subject: [PATCH 1/2] fix: attach transaction to error if available --- README.md | 45 ++-- package-lock.json | 477 ++++++++++++++++++++++++++----------------- package.json | 4 +- src/collections.ts | 11 +- src/disbursements.ts | 11 +- src/errors.ts | 15 +- src/index.ts | 5 + 7 files changed, 343 insertions(+), 225 deletions(-) diff --git a/README.md b/README.md index 85f50ed..06890bf 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,9 @@ As an example, you might configure the library like this: ```js const momo = require("mtn-momo"); -const { Collections, Disbursements } = momo.create({ callbackHost: process.env.CALLBACK_HOST }); +const { Collections, Disbursements } = momo.create({ + callbackHost: process.env.CALLBACK_HOST +}); ``` ## Collections @@ -76,28 +78,22 @@ const collections = Collections({ #### Methods -1. `requestToPay(request: PaymentRequest): Promise` - - This operation is used to request a payment from a consumer (Payer). The payer will be asked to authorize the payment. The transaction is executed once the payer has authorized the payment. The transaction will be in status PENDING until it is authorized or declined by the payer or it is timed out by the system. Status of the transaction can be validated by using `getTransaction` - -2. `getTransaction(transactionId: string): Promise` - - This method is used to get the payment including status and all information from the request. Use the `transactionId` returned from `requestToPay` +1. `requestToPay(request: PaymentRequest): Promise`: This operation is used to request a payment from a consumer (Payer). The payer will be asked to authorize the payment. The transaction is executed once the payer has authorized the payment. The transaction will be in status PENDING until it is authorized or declined by the payer or it is timed out by the system. Status of the transaction can be validated by using `getTransaction` -3. `getBalance(): Promise` +2. `getTransaction(transactionId: string): Promise`: Retrieve transaction information using the `transactionId` returned by `requestToPay`. You can invoke it at intervals until the transaction fails or succeeds. If the transaction has failed, it will throw an appropriate error. The error will be a subclass of `MtnMoMoError`. Check [`src/error.ts`](https://github.com/sparkplug/momoapi-node/blob/master/src/errors.ts) for the various errors that can be thrown - Get the balance of the account. +3. `getBalance(): Promise`: Get the balance of the account. -4. `isPayerActive(id: string, type: PartyIdType = "MSISDN"): Promise` - - This method is used to check if an account holder is registered and active in the system. +4. `isPayerActive(id: string, type: PartyIdType = "MSISDN"): Promise`: check if an account holder is registered and active in the system. #### Sample Code ```js const momo = require("mtn-momo"); -const { Collections } = momo.create({ callbackHost: process.env.CALLBACK_HOST }); +const { Collections } = momo.create({ + callbackHost: process.env.CALLBACK_HOST +}); const collections = Collections({ userSecret: process.env.COLLECTIONS_USER_SECRET, @@ -162,19 +158,13 @@ const disbursements = Disbursements({ 1. `transfer(request: TransferRequest): Promise` - Used to transfer an amount from the owner’s account to a payee account. Status of the transaction can be validated by using the - -2. `getTransaction(transactionId: string): Promise` +Used to transfer an amount from the owner’s account to a payee account. Status of the transaction can be validated by using the - This method is used to get the transfer object including status and all information from the request. Use the reference id returned from `transfer` +2. `getTransaction(transactionId: string): Promise`: Retrieve transaction information using the `transactionId` returned by `transfer`. You can invoke it at intervals until the transaction fails or succeeds. If the transaction has failed, it will throw an appropriate error. The error will be a subclass of `MtnMoMoError`. Check [`src/error.ts`](https://github.com/sparkplug/momoapi-node/blob/master/src/errors.ts) for the various errors that can be thrown -3. `getBalance(): Promise` +3. `getBalance(): Promise`: Get your account balance. - Get the balance of the account. - -4. `isPayerActive(id: string, type: PartyIdType = "MSISDN"): Promise` - - This method is used to check if an account holder is registered and active in the system. +4. `isPayerActive(id: string, type: PartyIdType = "MSISDN"): Promise`: This method is used to check if an account holder is registered and active in the system. #### Sample Code @@ -182,7 +172,9 @@ const disbursements = Disbursements({ const momo = require("mtn-momo"); // initialise momo library -const { Disbursements } = momo.create({ callbackHost: process.env.CALLBACK_HOST }); +const { Disbursements } = momo.create({ + callbackHost: process.env.CALLBACK_HOST +}); // initialise disbursements const disbursements = Disbursements({ @@ -225,7 +217,4 @@ disbursements console.log(error.message); }); - ``` - - diff --git a/package-lock.json b/package-lock.json index 289d3df..4354d66 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,18 +8,20 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/generator": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.2.tgz", - "integrity": "sha512-f3QCuPppXxtZOEm5GWPra/uYUjmNQlu9pbAD8D/9jze4pTY83rTtB1igTBSwvkeNlC5gR24zFFkz+2WHLFQhqQ==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.3.tgz", + "integrity": "sha512-aEADYwRRZjJyMnKN7llGIlircxTCofm3dtV5pmY6ob18MSIuipHpA2yZWkPlycwu5HJcx/pADS3zssd8eY7/6A==", + "dev": true, "requires": { - "@babel/types": "^7.3.2", + "@babel/types": "^7.3.3", "jsesc": "^2.5.1", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "source-map": "^0.5.0", "trim-right": "^1.0.1" } @@ -28,6 +30,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.0.0", "@babel/template": "^7.1.0", @@ -38,6 +41,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "dev": true, "requires": { "@babel/types": "^7.0.0" } @@ -46,6 +50,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz", "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==", + "dev": true, "requires": { "@babel/types": "^7.0.0" } @@ -54,6 +59,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "dev": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", @@ -63,19 +69,22 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true } } }, "@babel/parser": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.2.tgz", - "integrity": "sha512-QzNUC2RO1gadg+fs21fi0Uu0OuGNzRKEmgCxoLNzbCdoprLwjfmZwzUrpUNfJPaVRwBpDY47A17yYEGWyRelnQ==" + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.3.tgz", + "integrity": "sha512-xsH1CJoln2r74hR+y7cg2B5JCPaTh+Hd+EbBRk9nWGSNspuo6krjhX0Om6RnRQuIvFq8wVXCLKH3kwKDYhanSg==", + "dev": true }, "@babel/template": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz", "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.2.2", @@ -86,6 +95,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.2.3.tgz", "integrity": "sha512-Z31oUD/fJvEWVR0lNZtfgvVt512ForCTNKYcJBGbPb1QZfve4WGH8Wsy7+Mev33/45fhP/hwQtvgusNdcCMgSw==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "@babel/generator": "^7.2.2", @@ -102,6 +112,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -109,17 +120,19 @@ "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, "@babel/types": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.2.tgz", - "integrity": "sha512-3Y6H8xlUlpbGR+XvawiH0UXehqydTmNmEpozWcXymqwcrwYAl5KMvKtQ+TF6f6E08V6Jur7v/ykdDSF+WDEIXQ==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.3.tgz", + "integrity": "sha512-2tACZ80Wg09UnPg5uGAOUvvInaqLk3l/IAhQzlxLQOIXacr6bMsra5SH6AWw/hIDRCSbCdHP2KzSOD+cT7TzMQ==", + "dev": true, "requires": { "esutils": "^2.0.2", - "lodash": "^4.17.10", + "lodash": "^4.17.11", "to-fast-properties": "^2.0.0" } }, @@ -740,11 +753,6 @@ "@types/node": "*" } }, - "D": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/D/-/D-1.0.0.tgz", - "integrity": "sha512-nQvrCBu7K2pSSEtIM0EEF03FVjcczCXInMt3moLNFbjlWx6bZrX72uT6/1uAXDbnzGUAx9gTyDiQ+vrFi663oA==" - }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -755,12 +763,6 @@ "through": ">=2.2.7 <3" } }, - "acorn": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", - "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=", - "dev": true - }, "agent-base": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", @@ -802,6 +804,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -918,12 +921,12 @@ "dev": true }, "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "asynckit": { @@ -1111,28 +1114,6 @@ "integrity": "sha512-zyPgY5dgbf99c0uGUjhY4w+mxqEGxPKg9RQDl34VvrVh2bM31lFN+mwR1ZHepq/KA3VCPk1gwJZL6IIJqjLy2w==", "dev": true }, - "blanket": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/blanket/-/blanket-1.2.3.tgz", - "integrity": "sha1-FRtJh8O9hFUrtfA7kO9fflkx5HM=", - "dev": true, - "requires": { - "acorn": "^1.0.3", - "falafel": "~1.2.0", - "foreach": "^2.0.5", - "isarray": "0.0.1", - "object-keys": "^1.0.6", - "xtend": "~4.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, "bluebird": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", @@ -1323,6 +1304,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "dev": true, "requires": { "ansi-styles": "^3.2.0", "escape-string-regexp": "^1.0.5", @@ -1443,6 +1425,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -1450,7 +1433,8 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "colors": { "version": "1.0.3", @@ -1883,7 +1867,8 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "esprima": { "version": "4.0.1", @@ -1894,7 +1879,8 @@ "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "execa": { "version": "0.10.0", @@ -2053,26 +2039,6 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, - "falafel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz", - "integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=", - "dev": true, - "requires": { - "acorn": "^1.0.3", - "foreach": "^2.0.5", - "isarray": "0.0.1", - "object-keys": "^1.0.6" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } - } - }, "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", @@ -2201,12 +2167,6 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -2369,7 +2329,8 @@ "globals": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", - "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==" + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", + "dev": true }, "globby": { "version": "9.0.0", @@ -2407,9 +2368,9 @@ "dev": true }, "handlebars": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", - "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", + "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", "dev": true, "requires": { "async": "^2.5.0", @@ -2454,7 +2415,8 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "has-value": { "version": "1.0.0", @@ -2865,12 +2827,14 @@ "istanbul-lib-coverage": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==" + "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", + "dev": true }, "istanbul-lib-instrument": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz", "integrity": "sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA==", + "dev": true, "requires": { "@babel/generator": "^7.0.0", "@babel/parser": "^7.0.0", @@ -2912,7 +2876,8 @@ "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true }, "json-parse-better-errors": { "version": "1.0.2", @@ -3017,7 +2982,8 @@ "lodash": { "version": "4.17.11", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true }, "lodash._reinterpolate": { "version": "3.0.0", @@ -6699,9 +6665,10 @@ "dev": true }, "nyc": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.2.0.tgz", - "integrity": "sha512-gQBlOqvfpYt9b2PZ7qElrHWt8x4y8ApNfbMBoDPdl3sY4/4RJwCxDGTSqhA9RnaguZjS5nW7taW8oToe86JLgQ==", + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.3.0.tgz", + "integrity": "sha512-P+FwIuro2aFG6B0Esd9ZDWUd51uZrAEoGutqZxzrVmYl3qSfkLgcQpBPBjtDFsUQLFY1dvTQJPOyeqr8S9GF8w==", + "dev": true, "requires": { "archy": "^1.0.0", "arrify": "^1.0.1", @@ -6713,10 +6680,10 @@ "glob": "^7.1.3", "istanbul-lib-coverage": "^2.0.3", "istanbul-lib-hook": "^2.0.3", - "istanbul-lib-instrument": "^3.0.1", + "istanbul-lib-instrument": "^3.1.0", "istanbul-lib-report": "^2.0.4", "istanbul-lib-source-maps": "^3.0.2", - "istanbul-reports": "^2.1.0", + "istanbul-reports": "^2.1.1", "make-dir": "^1.3.0", "merge-source-map": "^1.1.0", "resolve-from": "^4.0.0", @@ -6731,49 +6698,53 @@ "dependencies": { "ansi-regex": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "append-transform": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "default-require-extensions": "^2.0.0" } }, "archy": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "arrify": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "async": { - "version": "2.6.1", + "version": "2.6.2", "bundled": true, + "dev": true, "requires": { - "lodash": "^4.17.10" + "lodash": "^4.17.11" } }, "balanced-match": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "builtin-modules": { - "version": "1.1.1", - "bundled": true - }, "caching-transform": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "hasha": "^3.0.0", "make-dir": "^1.3.0", @@ -6783,11 +6754,13 @@ }, "camelcase": { "version": "5.0.0", - "bundled": true + "bundled": true, + "dev": true }, "cliui": { "version": "4.1.0", "bundled": true, + "dev": true, "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0", @@ -6796,24 +6769,29 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "commander": { "version": "2.17.1", "bundled": true, + "dev": true, "optional": true }, "commondir": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "dev": true }, "convert-source-map": { "version": "1.6.0", "bundled": true, + "dev": true, "requires": { "safe-buffer": "~5.1.1" } @@ -6821,6 +6799,7 @@ "cross-spawn": { "version": "4.0.2", "bundled": true, + "dev": true, "requires": { "lru-cache": "^4.0.1", "which": "^1.2.9" @@ -6829,17 +6808,20 @@ "debug": { "version": "4.1.1", "bundled": true, + "dev": true, "requires": { "ms": "^2.1.1" } }, "decamelize": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "default-require-extensions": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "strip-bom": "^3.0.0" } @@ -6847,6 +6829,7 @@ "end-of-stream": { "version": "1.4.1", "bundled": true, + "dev": true, "requires": { "once": "^1.4.0" } @@ -6854,17 +6837,20 @@ "error-ex": { "version": "1.3.2", "bundled": true, + "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es6-error": { "version": "4.1.1", - "bundled": true + "bundled": true, + "dev": true }, "execa": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "cross-spawn": "^6.0.0", "get-stream": "^4.0.0", @@ -6878,6 +6864,7 @@ "cross-spawn": { "version": "6.0.5", "bundled": true, + "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -6891,6 +6878,7 @@ "find-cache-dir": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "commondir": "^1.0.1", "make-dir": "^1.0.0", @@ -6900,6 +6888,7 @@ "find-up": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "locate-path": "^3.0.0" } @@ -6907,6 +6896,7 @@ "foreground-child": { "version": "1.5.6", "bundled": true, + "dev": true, "requires": { "cross-spawn": "^4", "signal-exit": "^3.0.0" @@ -6914,15 +6904,18 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "get-caller-file": { "version": "1.0.3", - "bundled": true + "bundled": true, + "dev": true }, "get-stream": { "version": "4.1.0", "bundled": true, + "dev": true, "requires": { "pump": "^3.0.0" } @@ -6930,6 +6923,7 @@ "glob": { "version": "7.1.3", "bundled": true, + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6941,11 +6935,13 @@ }, "graceful-fs": { "version": "4.1.15", - "bundled": true + "bundled": true, + "dev": true }, "handlebars": { - "version": "4.0.12", + "version": "4.1.0", "bundled": true, + "dev": true, "requires": { "async": "^2.5.0", "optimist": "^0.6.1", @@ -6955,32 +6951,38 @@ "dependencies": { "source-map": { "version": "0.6.1", - "bundled": true + "bundled": true, + "dev": true } } }, "has-flag": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "hasha": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "is-stream": "^1.0.1" } }, "hosted-git-info": { "version": "2.7.1", - "bundled": true + "bundled": true, + "dev": true }, "imurmurhash": { "version": "0.1.4", - "bundled": true + "bundled": true, + "dev": true }, "inflight": { "version": "1.0.6", "bundled": true, + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -6988,42 +6990,43 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "dev": true }, "invert-kv": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "is-arrayish": { "version": "0.2.1", - "bundled": true - }, - "is-builtin-module": { - "version": "1.0.0", "bundled": true, - "requires": { - "builtin-modules": "^1.0.0" - } + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "is-stream": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "isexe": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "istanbul-lib-coverage": { "version": "2.0.3", - "bundled": true + "bundled": true, + "dev": true }, "istanbul-lib-hook": { "version": "2.0.3", "bundled": true, + "dev": true, "requires": { "append-transform": "^1.0.0" } @@ -7031,6 +7034,7 @@ "istanbul-lib-report": { "version": "2.0.4", "bundled": true, + "dev": true, "requires": { "istanbul-lib-coverage": "^2.0.3", "make-dir": "^1.3.0", @@ -7040,6 +7044,7 @@ "supports-color": { "version": "6.1.0", "bundled": true, + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -7049,6 +7054,7 @@ "istanbul-lib-source-maps": { "version": "3.0.2", "bundled": true, + "dev": true, "requires": { "debug": "^4.1.1", "istanbul-lib-coverage": "^2.0.3", @@ -7059,24 +7065,28 @@ "dependencies": { "source-map": { "version": "0.6.1", - "bundled": true + "bundled": true, + "dev": true } } }, "istanbul-reports": { - "version": "2.1.0", + "version": "2.1.1", "bundled": true, + "dev": true, "requires": { - "handlebars": "^4.0.11" + "handlebars": "^4.1.0" } }, "json-parse-better-errors": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "lcid": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "invert-kv": "^2.0.0" } @@ -7084,6 +7094,7 @@ "load-json-file": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -7094,6 +7105,7 @@ "locate-path": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -7101,15 +7113,18 @@ }, "lodash": { "version": "4.17.11", - "bundled": true + "bundled": true, + "dev": true }, "lodash.flattendeep": { "version": "4.4.0", - "bundled": true + "bundled": true, + "dev": true }, "lru-cache": { "version": "4.1.5", "bundled": true, + "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -7118,6 +7133,7 @@ "make-dir": { "version": "1.3.0", "bundled": true, + "dev": true, "requires": { "pify": "^3.0.0" } @@ -7125,74 +7141,86 @@ "map-age-cleaner": { "version": "0.1.3", "bundled": true, + "dev": true, "requires": { "p-defer": "^1.0.0" } }, "mem": { - "version": "4.0.0", + "version": "4.1.0", "bundled": true, + "dev": true, "requires": { "map-age-cleaner": "^0.1.1", "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "p-is-promise": "^2.0.0" } }, "merge-source-map": { "version": "1.1.0", "bundled": true, + "dev": true, "requires": { "source-map": "^0.6.1" }, "dependencies": { "source-map": { "version": "0.6.1", - "bundled": true + "bundled": true, + "dev": true } } }, "mimic-fn": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "minimatch": { "version": "3.0.4", "bundled": true, + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.10", - "bundled": true + "bundled": true, + "dev": true }, "mkdirp": { "version": "0.5.1", "bundled": true, + "dev": true, "requires": { "minimist": "0.0.8" }, "dependencies": { "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "dev": true } } }, "ms": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "nice-try": { "version": "1.0.5", - "bundled": true + "bundled": true, + "dev": true }, "normalize-package-data": { - "version": "2.4.0", + "version": "2.5.0", "bundled": true, + "dev": true, "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" } @@ -7200,17 +7228,20 @@ "npm-run-path": { "version": "2.0.2", "bundled": true, + "dev": true, "requires": { "path-key": "^2.0.0" } }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "once": { "version": "1.4.0", "bundled": true, + "dev": true, "requires": { "wrappy": "1" } @@ -7218,6 +7249,7 @@ "optimist": { "version": "0.6.1", "bundled": true, + "dev": true, "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -7225,11 +7257,13 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "os-locale": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "execa": "^1.0.0", "lcid": "^2.0.0", @@ -7238,19 +7272,23 @@ }, "p-defer": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "p-finally": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "p-is-promise": { - "version": "1.1.0", - "bundled": true + "version": "2.0.0", + "bundled": true, + "dev": true }, "p-limit": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "p-try": "^2.0.0" } @@ -7258,17 +7296,20 @@ "p-locate": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "p-limit": "^2.0.0" } }, "p-try": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "package-hash": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.15", "hasha": "^3.0.0", @@ -7279,6 +7320,7 @@ "parse-json": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -7286,41 +7328,54 @@ }, "path-exists": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "path-is-absolute": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "path-key": { "version": "2.0.1", - "bundled": true + "bundled": true, + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "bundled": true, + "dev": true }, "path-type": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "pify": "^3.0.0" } }, "pify": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "pkg-dir": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "find-up": "^3.0.0" } }, "pseudomap": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "pump": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -7329,6 +7384,7 @@ "read-pkg": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -7338,6 +7394,7 @@ "read-pkg-up": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "find-up": "^3.0.0", "read-pkg": "^3.0.0" @@ -7346,59 +7403,79 @@ "release-zalgo": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "es6-error": "^4.0.1" } }, "require-directory": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "require-main-filename": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true + }, + "resolve": { + "version": "1.10.0", + "bundled": true, + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } }, "resolve-from": { "version": "4.0.0", - "bundled": true + "bundled": true, + "dev": true }, "rimraf": { "version": "2.6.3", "bundled": true, + "dev": true, "requires": { "glob": "^7.1.3" } }, "safe-buffer": { "version": "5.1.2", - "bundled": true + "bundled": true, + "dev": true }, "semver": { "version": "5.6.0", - "bundled": true + "bundled": true, + "dev": true }, "set-blocking": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "shebang-command": { "version": "1.2.0", "bundled": true, + "dev": true, "requires": { "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "signal-exit": { "version": "3.0.2", - "bundled": true + "bundled": true, + "dev": true }, "spawn-wrap": { "version": "1.4.2", "bundled": true, + "dev": true, "requires": { "foreground-child": "^1.5.6", "mkdirp": "^0.5.0", @@ -7411,6 +7488,7 @@ "spdx-correct": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -7418,11 +7496,13 @@ }, "spdx-exceptions": { "version": "2.2.0", - "bundled": true + "bundled": true, + "dev": true }, "spdx-expression-parse": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -7430,11 +7510,13 @@ }, "spdx-license-ids": { "version": "3.0.3", - "bundled": true + "bundled": true, + "dev": true }, "string-width": { "version": "2.1.1", "bundled": true, + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -7443,21 +7525,25 @@ "strip-ansi": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^3.0.0" } }, "strip-bom": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "strip-eof": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "test-exclude": { "version": "5.1.0", "bundled": true, + "dev": true, "requires": { "arrify": "^1.0.1", "minimatch": "^3.0.4", @@ -7468,6 +7554,7 @@ "uglify-js": { "version": "3.4.9", "bundled": true, + "dev": true, "optional": true, "requires": { "commander": "~2.17.1", @@ -7477,17 +7564,20 @@ "source-map": { "version": "0.6.1", "bundled": true, + "dev": true, "optional": true } } }, "uuid": { "version": "3.3.2", - "bundled": true + "bundled": true, + "dev": true }, "validate-npm-package-license": { "version": "3.0.4", "bundled": true, + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -7496,21 +7586,25 @@ "which": { "version": "1.3.1", "bundled": true, + "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "wordwrap": { "version": "0.0.3", - "bundled": true + "bundled": true, + "dev": true }, "wrap-ansi": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -7518,11 +7612,13 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -7530,6 +7626,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -7539,6 +7636,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -7547,11 +7645,13 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "write-file-atomic": { "version": "2.4.2", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -7560,15 +7660,18 @@ }, "y18n": { "version": "4.0.0", - "bundled": true + "bundled": true, + "dev": true }, "yallist": { "version": "2.1.2", - "bundled": true + "bundled": true, + "dev": true }, "yargs": { "version": "12.0.5", "bundled": true, + "dev": true, "requires": { "cliui": "^4.0.0", "decamelize": "^1.2.0", @@ -7587,6 +7690,7 @@ "yargs-parser": { "version": "11.1.1", "bundled": true, + "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -7631,12 +7735,6 @@ } } }, - "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", - "dev": true - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -8380,7 +8478,8 @@ "semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true }, "semver-regex": { "version": "2.0.0", @@ -8611,7 +8710,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "source-map-resolve": { "version": "0.5.2", @@ -8826,6 +8926,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -8879,7 +8980,8 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true }, "to-object-path": { "version": "0.3.0", @@ -8962,7 +9064,8 @@ "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true }, "ts-node": { "version": "7.0.1", diff --git a/package.json b/package.json index cf465d3..dd7a2fc 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "reporter": [ "lcov" ], - "all": true + "all": true }, "keywords": [ "MTN", @@ -57,9 +57,9 @@ "coveralls": "^3.0.2", "cz-conventional-changelog": "^2.1.0", "husky": "^0.14.3", - "nyc": "^13.2.0", "mocha": "^5.2.0", "mocha-lcov-reporter": "^1.3.0", + "nyc": "^13.3.0", "semantic-release": "^15.1.7", "sinon": "^7.2.3", "ts-node": "^7.0.1", diff --git a/src/collections.ts b/src/collections.ts index b8528ed..4b608ba 100644 --- a/src/collections.ts +++ b/src/collections.ts @@ -1,7 +1,7 @@ import { AxiosInstance } from "axios"; import uuid from "uuid/v4"; -import { getError } from "./errors"; +import { getTransactionError } from "./errors"; import { validateRequestToPay } from "./validate"; import { @@ -139,7 +139,12 @@ export default class Collections { } /** - * This method is used to get the Transaction object. + * This method is used to retrieve transaction information. You can invoke it + * at intervals until your transaction fails or succeeds. + * + * If the transaction has failed, it will throw an appropriate error. The error will be a subclass + * of `MtnMoMoError`. Check [`src/error.ts`](https://github.com/sparkplug/momoapi-node/blob/master/src/errors.ts) + * for the various errors that can be thrown * * @param referenceId the value returned from `requestToPay` */ @@ -149,7 +154,7 @@ export default class Collections { .then(response => response.data) .then(transaction => { if (transaction.status === TransactionStatus.FAILED) { - return Promise.reject(getError(transaction.reason as FailureReason)); + return Promise.reject(getTransactionError(transaction)); } return Promise.resolve(transaction); diff --git a/src/disbursements.ts b/src/disbursements.ts index 9a50fe8..7cbf955 100644 --- a/src/disbursements.ts +++ b/src/disbursements.ts @@ -1,7 +1,7 @@ import { AxiosInstance } from "axios"; import uuid from "uuid/v4"; -import { getError } from "./errors"; +import { getTransactionError } from "./errors"; import { validateTransfer } from "./validate"; import { @@ -130,7 +130,12 @@ export default class Disbursements { } /** - * This method is used to get the Transaction object. + * This method is used to retrieve the transaction. You can invoke this method + * to at intervals until your transaction fails or succeeds. + * + * If the transaction has failed, it will throw an appropriate error. The error will be a subclass + * of `MtnMoMoError`. Check [`src/error.ts`](https://github.com/sparkplug/momoapi-node/blob/master/src/errors.ts) + * for the various errors that can be thrown * * @param referenceId the value returned from `transfer` */ @@ -140,7 +145,7 @@ export default class Disbursements { .then(response => response.data) .then(transaction => { if (transaction.status === TransactionStatus.FAILED) { - return Promise.reject(getError(transaction.reason as FailureReason)); + return Promise.reject(getTransactionError(transaction)); } return Promise.resolve(transaction); diff --git a/src/errors.ts b/src/errors.ts index 701b6b2..742fb15 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -1,5 +1,7 @@ import { AxiosError } from "axios"; +import { Payment } from "./collections"; import { FailureReason } from "./common"; +import { Transfer } from "./disbursements"; interface ErrorBody { code: FailureReason; @@ -7,6 +9,8 @@ interface ErrorBody { } export class MtnMoMoError extends Error { + public transaction?: Payment | Transfer; + constructor(message?: string) { super(message); Object.setPrototypeOf(this, new.target.prototype); @@ -74,7 +78,7 @@ export class ResourceNotFoundError extends MtnMoMoError { } export class ServiceUnavailableError extends MtnMoMoError { - public name = "NotAllowedTargetEnvironment"; + public name = "ServiceUnavailableError"; } export class TransactionCancelledError extends MtnMoMoError { @@ -82,7 +86,7 @@ export class TransactionCancelledError extends MtnMoMoError { } export class UnspecifiedError extends MtnMoMoError { - public name = "ResourceAlreadyExistError"; + public name = "UnspecifiedError"; } export function handleError(error: AxiosError): Error { @@ -166,3 +170,10 @@ export function getError(code: FailureReason, message?: string) { return new UnspecifiedError(); } + +export function getTransactionError(transaction: Payment | Transfer) { + const error: MtnMoMoError = getError(transaction.reason as FailureReason); + error.transaction = transaction; + + return error; +} diff --git a/src/index.ts b/src/index.ts index 1fe9349..6d4fbb0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -49,6 +49,11 @@ const defaultGlobalConfig: GlobalConfig = { environment: Environment.SANDBOX }; +/** + * Initialise the library + * + * @param globalConfig Global configuration required to use any product + */ export function create(globalConfig: GlobalConfig): MomoClient { validateGlobalConfig(globalConfig); From 60f46c6e2af8ba0c8d4dc784078ff0bd283dcf93 Mon Sep 17 00:00:00 2001 From: Ernest Okot Date: Wed, 20 Feb 2019 03:59:17 +0300 Subject: [PATCH 2/2] chore: add tests for error classes --- src/errors.ts | 2 +- test/errors.test.ts | 113 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 test/errors.test.ts diff --git a/src/errors.ts b/src/errors.ts index 742fb15..abf47fb 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -99,7 +99,7 @@ export function handleError(error: AxiosError): Error { return getError(code, message); } -export function getError(code: FailureReason, message?: string) { +export function getError(code?: FailureReason, message?: string) { if (code === FailureReason.APPROVAL_REJECTED) { return new ApprovalRejectedError(message); } diff --git a/test/errors.test.ts b/test/errors.test.ts new file mode 100644 index 0000000..c3ccf14 --- /dev/null +++ b/test/errors.test.ts @@ -0,0 +1,113 @@ +import { FailureReason } from "../src/common"; +import { + ApprovalRejectedError, + ExpiredError, + getError, + InternalProcessingError, + InvalidCallbackUrlHostError, + InvalidCurrencyError, + NotAllowedError, + NotAllowedTargetEnvironmentError, + NotEnoughFundsError, + PayeeNotAllowedToReceiveError, + PayeeNotFoundError, + PayerLimitReachedError, + PayerNotFoundError, + PaymentNotApprovedError, + ResourceAlreadyExistError, + ResourceNotFoundError, + ServiceUnavailableError, + TransactionCancelledError, + UnspecifiedError +} from "../src/errors"; +import { expect } from "./chai"; + +describe("Errors", function() { + describe("getError", function() { + context("when there is no error code", function() { + it("returns unspecified error", function() { + expect(getError()).is.instanceOf(UnspecifiedError); + }); + }); + + context("when there is an error code", function() { + it("returns the correct error", function() { + expect(getError(FailureReason.APPROVAL_REJECTED, "test message")) + .is.instanceOf(ApprovalRejectedError) + .and.has.property("message", "test message"); + + expect(getError(FailureReason.EXPIRED, "test message")) + .is.instanceOf(ExpiredError) + .and.has.property("message", "test message"); + + expect( + getError(FailureReason.INTERNAL_PROCESSING_ERROR, "test message") + ) + .is.instanceOf(InternalProcessingError) + .and.has.property("message", "test message"); + + expect( + getError(FailureReason.INVALID_CALLBACK_URL_HOST, "test message") + ) + .is.instanceOf(InvalidCallbackUrlHostError) + .and.has.property("message", "test message"); + + expect(getError(FailureReason.INVALID_CURRENCY, "test message")) + .is.instanceOf(InvalidCurrencyError) + .and.has.property("message", "test message"); + + expect(getError(FailureReason.NOT_ALLOWED, "test message")) + .is.instanceOf(NotAllowedError) + .and.has.property("message", "test message"); + + expect( + getError(FailureReason.NOT_ALLOWED_TARGET_ENVIRONMENT, "test message") + ) + .is.instanceOf(NotAllowedTargetEnvironmentError) + .and.has.property("message", "test message"); + + expect(getError(FailureReason.NOT_ENOUGH_FUNDS, "test message")) + .is.instanceOf(NotEnoughFundsError) + .and.has.property("message", "test message"); + + expect( + getError(FailureReason.PAYEE_NOT_ALLOWED_TO_RECEIVE, "test message") + ) + .is.instanceOf(PayeeNotAllowedToReceiveError) + .and.has.property("message", "test message"); + + expect(getError(FailureReason.PAYEE_NOT_FOUND, "test message")) + .is.instanceOf(PayeeNotFoundError) + .and.has.property("message", "test message"); + + expect(getError(FailureReason.PAYER_LIMIT_REACHED, "test message")) + .is.instanceOf(PayerLimitReachedError) + .and.has.property("message", "test message"); + + expect(getError(FailureReason.PAYER_NOT_FOUND, "test message")) + .is.instanceOf(PayerNotFoundError) + .and.has.property("message", "test message"); + + expect(getError(FailureReason.PAYMENT_NOT_APPROVED, "test message")) + .is.instanceOf(PaymentNotApprovedError) + .and.has.property("message", "test message"); + + expect(getError(FailureReason.RESOURCE_ALREADY_EXIST, "test message")) + .is.instanceOf(ResourceAlreadyExistError) + .and.has.property("message", "test message"); + + expect(getError(FailureReason.RESOURCE_NOT_FOUND, "test message")) + .is.instanceOf(ResourceNotFoundError) + .and.has.property("message", "test message"); + + expect(getError(FailureReason.SERVICE_UNAVAILABLE, "test message")) + .is.instanceOf(ServiceUnavailableError) + .and.has.property("message", "test message"); + + expect(getError(FailureReason.TRANSACTION_CANCELED, "test message")) + .is.instanceOf(TransactionCancelledError) + .and.has.property("message", "test message"); + }); + }); + }); +});