@visulima/health-check 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## @visulima/health-check [2.0.1](https://github.com/visulima/visulima/compare/@visulima/health-check@2.0.0...@visulima/health-check@2.0.1) (2023-08-29)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * fixed wrong settings for node 18+ in typescript ([ac6711f](https://github.com/visulima/visulima/commit/ac6711fd2b4fdc5506b03e3a6ae25bb983aa6ea3))
7
+ * remove unused files and refactor imports and typings ([ba2ab03](https://github.com/visulima/visulima/commit/ba2ab03d2d7aff5f49c4d6714a61b99706778f19))
8
+ * updated various package dependencies and optimized code formatting. ([5d71d91](https://github.com/visulima/visulima/commit/5d71d913e857b71a7b741abe848780aaa22d679f))
9
+
1
10
  ## @visulima/health-check [2.0.0](https://github.com/visulima/visulima/compare/@visulima/health-check@1.0.9...@visulima/health-check@2.0.0) (2023-08-28)
2
11
 
3
12
 
package/dist/index.js CHANGED
@@ -1,23 +1,23 @@
1
1
  'use strict';
2
2
 
3
- var f = require('cacheable-lookup');
3
+ var u = require('cacheable-lookup');
4
4
  var assert = require('assert');
5
- var O = require('pingman');
5
+ var R = require('pingman');
6
6
  var httpStatusCodes = require('http-status-codes');
7
7
 
8
8
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
9
 
10
- var f__default = /*#__PURE__*/_interopDefault(f);
11
- var O__default = /*#__PURE__*/_interopDefault(O);
10
+ var u__default = /*#__PURE__*/_interopDefault(u);
11
+ var R__default = /*#__PURE__*/_interopDefault(R);
12
12
 
13
- var i="DNS check for",u=(t,e,a)=>async()=>{let{family:r="all",hints:s,...o}=a??{},l=new f__default.default(o);try{let n=await l.lookupAsync(t.replace(/^https?:\/\//,""),{hints:s,...r==="all"?{all:!0}:{family:r}});return Array.isArray(e)&&!e.includes(n.address)?{displayName:`${i} ${t}`,health:{healthy:!1,message:`${i} ${t} returned address ${n.address} instead of ${e.join(", ")}.`,timestamp:new Date().toISOString()},meta:{addresses:n,host:t}}:{displayName:`${i} ${t}`,health:{healthy:!0,message:`${i} ${t} were resolved.`,timestamp:new Date().toISOString()},meta:{addresses:n,host:t}}}catch(n){return {displayName:`${i} ${t}`,health:{healthy:!1,message:n.message,timestamp:new Date().toISOString()},meta:{host:t}}}},g=u;var h="HTTP check for",C=(t,e)=>async()=>{try{let a=await fetch(t,e?.fetchOptions??{});if(e?.expected?.status!==void 0&&e.expected.status!==a.status)throw new Error(`${h} ${t} returned status ${a.status} instead of ${e.expected.status}`);if(e?.expected?.body!==void 0){let r=await a.text();try{assert.deepStrictEqual(r,e.expected.body);}catch{throw new Error(`${h} ${t} returned body ${JSON.stringify(r)} instead of ${JSON.stringify(e.expected.body)}`)}}return {displayName:`${h} ${t}`,health:{healthy:!0,message:`${h} ${t} was successful.`,timestamp:new Date().toISOString()},meta:{host:t,method:e?.fetchOptions?.method??"GET",status:a.status}}}catch(a){return {displayName:`${h} ${t}`,health:{healthy:!1,message:a.message,timestamp:new Date().toISOString()},meta:{host:t,method:e?.fetchOptions?.method??"GET"}}}},S=C;var m="Node Environment Check",N=t=>async()=>{let e="production",a;return t!==void 0&&e!==t?a=`NODE_ENV environment variable is set to "${e}" instead of "${t}".`:e,a!==void 0?{displayName:m,health:{healthy:!1,message:a,timestamp:new Date().toISOString()}}:{displayName:m,health:{healthy:!0,timestamp:new Date().toISOString()},meta:{env:e}}},$=N;var p="Ping check for",R=(t,e)=>async()=>{try{let a=await O__default.default(t.replace(/^https?:\/\//,""),e);return a.alive?{displayName:`${p} ${t}`,health:{healthy:!0,message:`${p} ${t} was successful.`,timestamp:new Date().toISOString()},meta:a}:{displayName:`${p} ${t}`,health:{healthy:!1,message:`Ping failed for ${t}.`,timestamp:new Date().toISOString()},meta:a}}catch(a){return {displayName:`${p} ${t}`,health:{healthy:!1,message:a.message,timestamp:new Date().toISOString()}}}},w=R;var E=(t,e=!0)=>async(a,r)=>{let{healthy:s,report:o}=await t.getReport(),l={appName:process.env.APP_NAME??"unknown",appVersion:process.env.APP_VERSION??"unknown",message:s?"Health check successful":"Health check failed",reports:o,status:s?"ok":"error",timestamp:new Date().toISOString()};r.statusCode=s?httpStatusCodes.StatusCodes.OK:httpStatusCodes.StatusCodes.SERVICE_UNAVAILABLE,e&&r.setHeader("Content-Type","application/json"),r.end(JSON.stringify(l,null,2));};var I=t=>async(e,a)=>{let{healthy:r}=await t.getReport();a.statusCode=r?httpStatusCodes.StatusCodes.NO_CONTENT:httpStatusCodes.StatusCodes.SERVICE_UNAVAILABLE,a.end();};var c=class{constructor(){this.healthCheckers={};}async invokeChecker(e,a){let r=this.healthCheckers[e],s;try{s=await r(),s.displayName=s.displayName||e;}catch(o){s={displayName:e,health:{healthy:!1,message:o.message,timestamp:new Date().toISOString()},meta:{fatal:!0}};}return a[e]=s,s.health.healthy}addChecker(e,a){this.healthCheckers[e]=a;}async getReport(){let e={};return await Promise.all(Object.keys(this.healthCheckers).map(async r=>await this.invokeChecker(r,e))),{healthy:!Object.keys(e).find(r=>!e[r].health.healthy),report:e}}async isLive(){let{healthy:e}=await this.getReport();return e}get servicesList(){return Object.keys(this.healthCheckers)}},x=c;
13
+ var h="DNS check for",g=(t,e,a)=>async()=>{let{family:r="all",hints:s,...i}=a??{},c=new u__default.default(i);try{let o=await c.lookupAsync(t.replace(/^https?:\/\//,""),{hints:s,...r==="all"?{all:!0}:{family:r}});return Array.isArray(e)&&!e.includes(o.address)?{displayName:`${h} ${t}`,health:{healthy:!1,message:`${h} ${t} returned address ${o.address} instead of ${e.join(", ")}.`,timestamp:new Date().toISOString()},meta:{addresses:o,host:t}}:{displayName:`${h} ${t}`,health:{healthy:!0,message:`${h} ${t} were resolved.`,timestamp:new Date().toISOString()},meta:{addresses:o,host:t}}}catch(o){return {displayName:`${h} ${t}`,health:{healthy:!1,message:o.message,timestamp:new Date().toISOString()},meta:{host:t}}}},k=g;var p="HTTP check for",S=(t,e)=>async()=>{try{let a=await fetch(t,e?.fetchOptions??{});if(e?.expected?.status!==void 0&&e.expected.status!==a.status)throw new Error(`${p} ${t} returned status ${a.status} instead of ${e.expected.status}`);if(e?.expected?.body!==void 0){let r=await a.text();try{assert.deepStrictEqual(r,e.expected.body);}catch{throw new Error(`${p} ${t} returned body ${JSON.stringify(r)} instead of ${JSON.stringify(e.expected.body)}`)}}return {displayName:`${p} ${t}`,health:{healthy:!0,message:`${p} ${t} was successful.`,timestamp:new Date().toISOString()},meta:{host:t,method:e?.fetchOptions?.method??"GET",status:a.status}}}catch(a){return {displayName:`${p} ${t}`,health:{healthy:!1,message:a.message,timestamp:new Date().toISOString()},meta:{host:t,method:e?.fetchOptions?.method??"GET"}}}},N=S;var d="Node Environment Check",$=t=>async()=>{let e="production",a;return t!==void 0&&e!==t?a=`NODE_ENV environment variable is set to "${e}" instead of "${t}".`:e,a!==void 0?{displayName:d,health:{healthy:!1,message:a,timestamp:new Date().toISOString()}}:{displayName:d,health:{healthy:!0,timestamp:new Date().toISOString()},meta:{env:e}}},O=$;var l="Ping check for",w=(t,e)=>async()=>{try{let a=await R__default.default(t.replace(/^https?:\/\//,""),e);return a.alive?{displayName:`${l} ${t}`,health:{healthy:!0,message:`${l} ${t} was successful.`,timestamp:new Date().toISOString()},meta:a}:{displayName:`${l} ${t}`,health:{healthy:!1,message:`Ping failed for ${t}.`,timestamp:new Date().toISOString()},meta:a}}catch(a){return {displayName:`${l} ${t}`,health:{healthy:!1,message:a.message,timestamp:new Date().toISOString()}}}},E=w;var I=(t,e=!0)=>async(a,r)=>{let{healthy:s,report:i}=await t.getReport(),c={appName:process.env.APP_NAME??"unknown",appVersion:process.env.APP_VERSION??"unknown",message:s?"Health check successful":"Health check failed",reports:i,status:s?"ok":"error",timestamp:new Date().toISOString()};r.statusCode=s?httpStatusCodes.StatusCodes.OK:httpStatusCodes.StatusCodes.SERVICE_UNAVAILABLE,e&&r.setHeader("Content-Type","application/json"),r.end(JSON.stringify(c,null,2));};var x=t=>async(e,a)=>{let{healthy:r}=await t.getReport();a.statusCode=r?httpStatusCodes.StatusCodes.NO_CONTENT:httpStatusCodes.StatusCodes.SERVICE_UNAVAILABLE,a.end();};var m=class{constructor(){this.healthCheckers={};}async invokeChecker(e,a){let r=this.healthCheckers[e],s;try{s=await r(),s.displayName=s.displayName||e;}catch(i){s={displayName:e,health:{healthy:!1,message:i.message,timestamp:new Date().toISOString()},meta:{fatal:!0}};}return a[e]=s,s.health.healthy}addChecker(e,a){this.healthCheckers[e]=a;}async getReport(){let e={};return await Promise.all(Object.keys(this.healthCheckers).map(async r=>await this.invokeChecker(r,e))),{healthy:!Object.keys(e).find(r=>!e[r].health.healthy),report:e}}async isLive(){let{healthy:e}=await this.getReport();return e}get servicesList(){return Object.keys(this.healthCheckers)}},v=m;
14
14
 
15
- exports.HealthCheck = x;
16
- exports.dnsCheck = g;
17
- exports.healthCheckHandler = E;
18
- exports.healthReadyHandler = I;
19
- exports.httpCheck = S;
20
- exports.nodeEnvCheck = $;
21
- exports.pingCheck = w;
15
+ exports.HealthCheck = v;
16
+ exports.dnsCheck = k;
17
+ exports.healthCheckHandler = I;
18
+ exports.healthReadyHandler = x;
19
+ exports.httpCheck = N;
20
+ exports.nodeEnvCheck = O;
21
+ exports.pingCheck = E;
22
22
  //# sourceMappingURL=out.js.map
23
23
  //# sourceMappingURL=index.js.map
package/dist/index.mjs CHANGED
@@ -1,10 +1,10 @@
1
- import f from 'cacheable-lookup';
1
+ import g from 'cacheable-lookup';
2
2
  import { deepStrictEqual } from 'assert';
3
- import O from 'pingman';
3
+ import w from 'pingman';
4
4
  import { StatusCodes } from 'http-status-codes';
5
5
 
6
- var i="DNS check for",u=(t,e,a)=>async()=>{let{family:r="all",hints:s,...o}=a??{},l=new f(o);try{let n=await l.lookupAsync(t.replace(/^https?:\/\//,""),{hints:s,...r==="all"?{all:!0}:{family:r}});return Array.isArray(e)&&!e.includes(n.address)?{displayName:`${i} ${t}`,health:{healthy:!1,message:`${i} ${t} returned address ${n.address} instead of ${e.join(", ")}.`,timestamp:new Date().toISOString()},meta:{addresses:n,host:t}}:{displayName:`${i} ${t}`,health:{healthy:!0,message:`${i} ${t} were resolved.`,timestamp:new Date().toISOString()},meta:{addresses:n,host:t}}}catch(n){return {displayName:`${i} ${t}`,health:{healthy:!1,message:n.message,timestamp:new Date().toISOString()},meta:{host:t}}}},g=u;var h="HTTP check for",C=(t,e)=>async()=>{try{let a=await fetch(t,e?.fetchOptions??{});if(e?.expected?.status!==void 0&&e.expected.status!==a.status)throw new Error(`${h} ${t} returned status ${a.status} instead of ${e.expected.status}`);if(e?.expected?.body!==void 0){let r=await a.text();try{deepStrictEqual(r,e.expected.body);}catch{throw new Error(`${h} ${t} returned body ${JSON.stringify(r)} instead of ${JSON.stringify(e.expected.body)}`)}}return {displayName:`${h} ${t}`,health:{healthy:!0,message:`${h} ${t} was successful.`,timestamp:new Date().toISOString()},meta:{host:t,method:e?.fetchOptions?.method??"GET",status:a.status}}}catch(a){return {displayName:`${h} ${t}`,health:{healthy:!1,message:a.message,timestamp:new Date().toISOString()},meta:{host:t,method:e?.fetchOptions?.method??"GET"}}}},S=C;var m="Node Environment Check",N=t=>async()=>{let e="production",a;return t!==void 0&&e!==t?a=`NODE_ENV environment variable is set to "${e}" instead of "${t}".`:e,a!==void 0?{displayName:m,health:{healthy:!1,message:a,timestamp:new Date().toISOString()}}:{displayName:m,health:{healthy:!0,timestamp:new Date().toISOString()},meta:{env:e}}},$=N;var p="Ping check for",R=(t,e)=>async()=>{try{let a=await O(t.replace(/^https?:\/\//,""),e);return a.alive?{displayName:`${p} ${t}`,health:{healthy:!0,message:`${p} ${t} was successful.`,timestamp:new Date().toISOString()},meta:a}:{displayName:`${p} ${t}`,health:{healthy:!1,message:`Ping failed for ${t}.`,timestamp:new Date().toISOString()},meta:a}}catch(a){return {displayName:`${p} ${t}`,health:{healthy:!1,message:a.message,timestamp:new Date().toISOString()}}}},w=R;var E=(t,e=!0)=>async(a,r)=>{let{healthy:s,report:o}=await t.getReport(),l={appName:process.env.APP_NAME??"unknown",appVersion:process.env.APP_VERSION??"unknown",message:s?"Health check successful":"Health check failed",reports:o,status:s?"ok":"error",timestamp:new Date().toISOString()};r.statusCode=s?StatusCodes.OK:StatusCodes.SERVICE_UNAVAILABLE,e&&r.setHeader("Content-Type","application/json"),r.end(JSON.stringify(l,null,2));};var I=t=>async(e,a)=>{let{healthy:r}=await t.getReport();a.statusCode=r?StatusCodes.NO_CONTENT:StatusCodes.SERVICE_UNAVAILABLE,a.end();};var c=class{constructor(){this.healthCheckers={};}async invokeChecker(e,a){let r=this.healthCheckers[e],s;try{s=await r(),s.displayName=s.displayName||e;}catch(o){s={displayName:e,health:{healthy:!1,message:o.message,timestamp:new Date().toISOString()},meta:{fatal:!0}};}return a[e]=s,s.health.healthy}addChecker(e,a){this.healthCheckers[e]=a;}async getReport(){let e={};return await Promise.all(Object.keys(this.healthCheckers).map(async r=>await this.invokeChecker(r,e))),{healthy:!Object.keys(e).find(r=>!e[r].health.healthy),report:e}}async isLive(){let{healthy:e}=await this.getReport();return e}get servicesList(){return Object.keys(this.healthCheckers)}},x=c;
6
+ var p="DNS check for",k=(t,e,a)=>async()=>{let{family:r="all",hints:s,...h}=a??{},m=new g(h);try{let i=await m.lookupAsync(t.replace(/^https?:\/\//,""),{hints:s,...r==="all"?{all:!0}:{family:r}});return Array.isArray(e)&&!e.includes(i.address)?{displayName:`${p} ${t}`,health:{healthy:!1,message:`${p} ${t} returned address ${i.address} instead of ${e.join(", ")}.`,timestamp:new Date().toISOString()},meta:{addresses:i,host:t}}:{displayName:`${p} ${t}`,health:{healthy:!0,message:`${p} ${t} were resolved.`,timestamp:new Date().toISOString()},meta:{addresses:i,host:t}}}catch(i){return {displayName:`${p} ${t}`,health:{healthy:!1,message:i.message,timestamp:new Date().toISOString()},meta:{host:t}}}},C=k;var l="HTTP check for",N=(t,e)=>async()=>{try{let a=await fetch(t,e?.fetchOptions??{});if(e?.expected?.status!==void 0&&e.expected.status!==a.status)throw new Error(`${l} ${t} returned status ${a.status} instead of ${e.expected.status}`);if(e?.expected?.body!==void 0){let r=await a.text();try{deepStrictEqual(r,e.expected.body);}catch{throw new Error(`${l} ${t} returned body ${JSON.stringify(r)} instead of ${JSON.stringify(e.expected.body)}`)}}return {displayName:`${l} ${t}`,health:{healthy:!0,message:`${l} ${t} was successful.`,timestamp:new Date().toISOString()},meta:{host:t,method:e?.fetchOptions?.method??"GET",status:a.status}}}catch(a){return {displayName:`${l} ${t}`,health:{healthy:!1,message:a.message,timestamp:new Date().toISOString()},meta:{host:t,method:e?.fetchOptions?.method??"GET"}}}},$=N;var y="Node Environment Check",O=t=>async()=>{let e="production",a;return t!==void 0&&e!==t?a=`NODE_ENV environment variable is set to "${e}" instead of "${t}".`:e,a!==void 0?{displayName:y,health:{healthy:!1,message:a,timestamp:new Date().toISOString()}}:{displayName:y,health:{healthy:!0,timestamp:new Date().toISOString()},meta:{env:e}}},R=O;var c="Ping check for",E=(t,e)=>async()=>{try{let a=await w(t.replace(/^https?:\/\//,""),e);return a.alive?{displayName:`${c} ${t}`,health:{healthy:!0,message:`${c} ${t} was successful.`,timestamp:new Date().toISOString()},meta:a}:{displayName:`${c} ${t}`,health:{healthy:!1,message:`Ping failed for ${t}.`,timestamp:new Date().toISOString()},meta:a}}catch(a){return {displayName:`${c} ${t}`,health:{healthy:!1,message:a.message,timestamp:new Date().toISOString()}}}},I=E;var x=(t,e=!0)=>async(a,r)=>{let{healthy:s,report:h}=await t.getReport(),m={appName:process.env.APP_NAME??"unknown",appVersion:process.env.APP_VERSION??"unknown",message:s?"Health check successful":"Health check failed",reports:h,status:s?"ok":"error",timestamp:new Date().toISOString()};r.statusCode=s?StatusCodes.OK:StatusCodes.SERVICE_UNAVAILABLE,e&&r.setHeader("Content-Type","application/json"),r.end(JSON.stringify(m,null,2));};var v=t=>async(e,a)=>{let{healthy:r}=await t.getReport();a.statusCode=r?StatusCodes.NO_CONTENT:StatusCodes.SERVICE_UNAVAILABLE,a.end();};var d=class{constructor(){this.healthCheckers={};}async invokeChecker(e,a){let r=this.healthCheckers[e],s;try{s=await r(),s.displayName=s.displayName||e;}catch(h){s={displayName:e,health:{healthy:!1,message:h.message,timestamp:new Date().toISOString()},meta:{fatal:!0}};}return a[e]=s,s.health.healthy}addChecker(e,a){this.healthCheckers[e]=a;}async getReport(){let e={};return await Promise.all(Object.keys(this.healthCheckers).map(async r=>await this.invokeChecker(r,e))),{healthy:!Object.keys(e).find(r=>!e[r].health.healthy),report:e}}async isLive(){let{healthy:e}=await this.getReport();return e}get servicesList(){return Object.keys(this.healthCheckers)}},b=d;
7
7
 
8
- export { x as HealthCheck, g as dnsCheck, E as healthCheckHandler, I as healthReadyHandler, S as httpCheck, $ as nodeEnvCheck, w as pingCheck };
8
+ export { b as HealthCheck, C as dnsCheck, x as healthCheckHandler, v as healthReadyHandler, $ as httpCheck, R as nodeEnvCheck, I as pingCheck };
9
9
  //# sourceMappingURL=out.js.map
10
10
  //# sourceMappingURL=index.mjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/health-check",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "A library built to provide support for defining service health for node services. It allows you to register async health checks for your dependencies and the service itself, provides a health endpoint that exposes their status, and health metrics.",
5
5
  "keywords": [
6
6
  "anolilab",
@@ -40,8 +40,14 @@
40
40
  "exports": {
41
41
  ".": {
42
42
  "types": "./dist/index.d.ts",
43
- "require": "./dist/index.js",
44
- "import": "./dist/index.mjs"
43
+ "require": {
44
+ "types": "./dist/index.d.ts",
45
+ "default": "./dist/index.js"
46
+ },
47
+ "import": {
48
+ "types": "./dist/index.d.mts",
49
+ "default": "./dist/index.mjs"
50
+ }
45
51
  },
46
52
  "./package.json": "./package.json"
47
53
  },
@@ -61,7 +67,7 @@
61
67
  "clean": "rimraf node_modules dist .eslintcache",
62
68
  "coverage": "vitest run --coverage",
63
69
  "dev": "pnpm run build --watch",
64
- "lint:eslint": "eslint . --ext js,jsx,ts,tsx --max-warnings=0 --config .eslintrc.js --cache --cache-strategy content .",
70
+ "lint:eslint": "eslint . --ext js,cjs,mjs,jsx,ts,tsx,json,yaml,yml,md,mdx --max-warnings=0 --config .eslintrc.js",
65
71
  "lint:eslint:fix": "pnpm run lint:eslint --fix",
66
72
  "lint:prettier": "prettier --config=.prettierrc.js --check .",
67
73
  "lint:prettier:fix": "prettier --config=.prettierrc.js --write .",
@@ -93,6 +99,7 @@
93
99
  "prettier": "^3.0.2",
94
100
  "rimraf": "^5.0.1",
95
101
  "semantic-release": "^21.1.1",
102
+ "sort-package-json": "^2.5.1",
96
103
  "tsup": "^7.2.0",
97
104
  "typescript": "^5.2.2",
98
105
  "vitest": "^0.34.3"