@sera4/essentia 3.0.11 → 3.0.13-rc.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.
Files changed (75) hide show
  1. package/dist/cache/index.d.ts +22 -0
  2. package/dist/cache/index.js +166 -0
  3. package/dist/cache/index.js.map +1 -0
  4. package/dist/constants/index.d.ts +6 -0
  5. package/dist/constants/index.js +9 -0
  6. package/dist/constants/index.js.map +1 -0
  7. package/dist/formatter/index.d.ts +37 -0
  8. package/dist/formatter/index.js +75 -0
  9. package/dist/formatter/index.js.map +1 -0
  10. package/dist/hal/index.d.ts +5 -0
  11. package/dist/hal/index.js +69 -0
  12. package/dist/hal/index.js.map +1 -0
  13. package/dist/health/health-logger.d.ts +9 -0
  14. package/dist/health/health-logger.js +34 -0
  15. package/dist/health/health-logger.js.map +1 -0
  16. package/dist/health/index.d.ts +19 -0
  17. package/dist/health/index.js +175 -0
  18. package/dist/health/index.js.map +1 -0
  19. package/dist/helpers/index.d.ts +1 -0
  20. package/dist/helpers/index.js +2 -0
  21. package/dist/helpers/index.js.map +1 -0
  22. package/dist/helpers/test-server-wrapper.d.ts +120 -0
  23. package/dist/helpers/test-server-wrapper.js +165 -0
  24. package/dist/helpers/test-server-wrapper.js.map +1 -0
  25. package/dist/index.d.ts +1 -0
  26. package/dist/index.js +17 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/last-commit.d.ts +1 -0
  29. package/dist/last-commit.js.map +1 -0
  30. package/dist/last_commit/index.d.ts +7 -0
  31. package/dist/last_commit/index.js +83 -0
  32. package/dist/last_commit/index.js.map +1 -0
  33. package/dist/paginator/s4-pagination.d.ts +9 -0
  34. package/dist/paginator/s4-pagination.js +49 -0
  35. package/dist/paginator/s4-pagination.js.map +1 -0
  36. package/dist/paginator/sql-pagination.d.ts +27 -0
  37. package/dist/paginator/sql-pagination.js +166 -0
  38. package/dist/paginator/sql-pagination.js.map +1 -0
  39. package/dist/paper-trail/helpers.d.ts +11 -0
  40. package/dist/paper-trail/helpers.js +74 -0
  41. package/dist/paper-trail/helpers.js.map +1 -0
  42. package/dist/paper-trail/index.d.ts +13 -0
  43. package/dist/paper-trail/index.js +662 -0
  44. package/dist/paper-trail/index.js.map +1 -0
  45. package/dist/prompts/index.d.ts +14 -0
  46. package/dist/prompts/index.js +63 -0
  47. package/dist/prompts/index.js.map +1 -0
  48. package/dist/queue/index.d.ts +166 -0
  49. package/dist/queue/index.js +371 -0
  50. package/dist/queue/index.js.map +1 -0
  51. package/dist/queue/publisher.d.ts +31 -0
  52. package/dist/queue/publisher.js +84 -0
  53. package/dist/queue/publisher.js.map +1 -0
  54. package/dist/queue/queue-logger.d.ts +9 -0
  55. package/dist/queue/queue-logger.js +35 -0
  56. package/dist/queue/queue-logger.js.map +1 -0
  57. package/dist/queue/subscriber.d.ts +39 -0
  58. package/dist/queue/subscriber.js +97 -0
  59. package/dist/queue/subscriber.js.map +1 -0
  60. package/dist/safe_proxy/index.d.ts +13 -0
  61. package/dist/safe_proxy/index.js +54 -0
  62. package/dist/safe_proxy/index.js.map +1 -0
  63. package/dist/serializer/index.d.ts +5 -0
  64. package/dist/serializer/index.js +83 -0
  65. package/dist/serializer/index.js.map +1 -0
  66. package/dist/ts/logger/s4-logger.js +2 -0
  67. package/dist/ts/logger/s4-logger.js.map +1 -1
  68. package/dist/ts/queue/index.js +54 -65
  69. package/dist/ts/queue/index.js.map +1 -1
  70. package/dist/ts/task-scheduler/index.d.ts +130 -0
  71. package/dist/ts/task-scheduler/index.js +259 -0
  72. package/dist/ts/task-scheduler/index.js.map +1 -0
  73. package/package.json +9 -3
  74. package/scripts/publish.sh +46 -0
  75. package/package.tar.gz +0 -0
@@ -0,0 +1,22 @@
1
+ export default function _default(config: any, servicePrefix: any): Cache;
2
+ declare class Cache {
3
+ constructor(config: any, servicePrefix: any);
4
+ redisClient: any;
5
+ servicePrefix: any;
6
+ ping(): any;
7
+ properKey(key: any, path: any): any;
8
+ writeHash(path: any, key: any, value: any): any;
9
+ writeHashBlocking(path: any, key: any, value: any): any;
10
+ writeMultiHash(path: any, j: any): any;
11
+ readHashKey(obj: any, key: any, autoConvert?: boolean): Promise<any>;
12
+ readHash(path: any): Promise<any>;
13
+ deleteHashKey(hash: any, key: any): Promise<any>;
14
+ get(key: any): any;
15
+ getAsync(key: any): any;
16
+ writeKey(key: any, value: any, expiry: any): any;
17
+ deleteKey(key: any): any;
18
+ expire(path: any, expiry: any): any;
19
+ exists(path: any): any;
20
+ deleteAllKeys(): Promise<any>;
21
+ }
22
+ export {};
@@ -0,0 +1,166 @@
1
+ "use strict";
2
+ import { promisify } from "util";
3
+ const isEmpty = obj => [Object, Array].includes((obj || {}).constructor) && !Object.entries((obj || {})).length;
4
+ class CacheConfigError extends Error {
5
+ constructor(m) {
6
+ super(m);
7
+ }
8
+ }
9
+ /* Redis cache helper
10
+ * Example use: Place the following code in your project to setup redis use
11
+ *
12
+ * import { cache } from "@sera4/essentia";
13
+ * const cacheHelper = cache({ password: .., database: .., host: .., port: .. }, "service:"));
14
+ *
15
+ */
16
+ const convertRedisKeyValueToJson = (v) => {
17
+ return (v && v.length > 0 && v[0] !== null) ? JSON.parse(v) : null;
18
+ };
19
+ const convertRedisHashToJson = (v) => {
20
+ if (v) {
21
+ var result = {};
22
+ for (var k in v) {
23
+ if (v.hasOwnProperty(k)) {
24
+ result[k] = JSON.parse(v[k]);
25
+ }
26
+ }
27
+ return result;
28
+ }
29
+ else {
30
+ return null;
31
+ }
32
+ };
33
+ function convertJsonToRedisValue(j) {
34
+ var result = {};
35
+ for (var key in j) {
36
+ if (j.hasOwnProperty(key)) {
37
+ result[key] = JSON.stringify(j[key]);
38
+ }
39
+ }
40
+ return result;
41
+ }
42
+ class Cache {
43
+ constructor(config, servicePrefix) {
44
+ if ((config == undefined) || isEmpty(config)) {
45
+ throw new CacheConfigError("Invalid cache configuration");
46
+ }
47
+ if (servicePrefix == null) {
48
+ throw new CacheConfigError("Invalid service prefix");
49
+ }
50
+ if (config.fake) {
51
+ // used in testing
52
+ this.redisClient = require("fakeredis").createClient("fake backend");
53
+ }
54
+ else {
55
+ this.redisClient = require("redis").createClient(config);
56
+ }
57
+ this.redisClient.on("error", (err) => {
58
+ logger.error("Cache/Redis error: ", err);
59
+ });
60
+ this.servicePrefix = servicePrefix;
61
+ }
62
+ ping() {
63
+ return this.redisClient.ping();
64
+ }
65
+ properKey(key, path) {
66
+ let p = this.servicePrefix + key;
67
+ if (path)
68
+ p += path;
69
+ return p;
70
+ }
71
+ writeHash(path, key, value) {
72
+ return this.redisClient.hsetAsync(properKey(key), key, value);
73
+ }
74
+ writeHashBlocking(path, key, value) {
75
+ return this.redisClient.hset(properKey(key), key, value);
76
+ }
77
+ // write multiple hash keys and stringify every value
78
+ writeMultiHash(path, j) {
79
+ return this.redisClient.hmsetAsync(properKey(key), convertJsonToRedisValue(j));
80
+ }
81
+ readHashKey(obj, key, autoConvert = true) {
82
+ var k = autoConvert;
83
+ return new Promise((resolve, reject) => {
84
+ this.redisClient.hget(properKey(key, obj), key, (e, r) => {
85
+ if (e) {
86
+ logger.error("Redis hmget error:", e);
87
+ reject(e);
88
+ }
89
+ else {
90
+ resolve(k ? convertRedisKeyValueToJson(r) : r);
91
+ }
92
+ });
93
+ });
94
+ }
95
+ readHash(path) {
96
+ return new Promise((resolve, reject) => {
97
+ this.redisClient.hgetall(properKey(key, path), (e, r) => {
98
+ if (e) {
99
+ console.log("Redis hget error:", e);
100
+ reject(e);
101
+ }
102
+ else {
103
+ resolve(convertRedisHashToJson(r));
104
+ }
105
+ });
106
+ });
107
+ }
108
+ deleteHashKey(hash, key) {
109
+ return new Promise((resolve, reject) => {
110
+ this.redisClient.hdel(properKey(key, hash), key, (err) => {
111
+ if (err) {
112
+ logger.error("Redis hdel error:", err);
113
+ reject(err);
114
+ }
115
+ else {
116
+ resolve();
117
+ }
118
+ });
119
+ });
120
+ }
121
+ get(key) {
122
+ return this.redisClient.getAsync(properKey(key));
123
+ }
124
+ getAsync(key) {
125
+ return promisify(this.redisClient.get(key)).bind(this.redisClient);
126
+ }
127
+ /* a single key write with optional expiry */
128
+ // returns bluebird promise
129
+ writeKey(key, value, expiry) {
130
+ key = this.servicePrefix + key;
131
+ if (expiry) {
132
+ return this.redisClient.setAsync(key, value, "EX", expiry);
133
+ }
134
+ else {
135
+ return this.redisClient.setAsync(key, value);
136
+ }
137
+ }
138
+ deleteKey(key) {
139
+ return redisClient.delAsync(properKey(key));
140
+ }
141
+ expire(path, expiry) {
142
+ return this.redisClient.expire(path, expiry);
143
+ }
144
+ exists(path) {
145
+ return this.redisClient.exists(path);
146
+ }
147
+ deleteAllKeys() {
148
+ return new Promise((resolve, reject) => {
149
+ if (process.env.NODE_ENV === "production") {
150
+ throw new Error("Clearing system cache is not permitted in production");
151
+ }
152
+ this.redisClient.flushdb((err, res) => {
153
+ if (err) {
154
+ reject(err);
155
+ }
156
+ else {
157
+ resolve(res);
158
+ }
159
+ });
160
+ });
161
+ }
162
+ }
163
+ export default function (config, servicePrefix) {
164
+ return new Cache(config, servicePrefix);
165
+ }
166
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../cache/index.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export const TWS_ROUTE_TYPES: Readonly<{
2
+ web: 1;
3
+ mobile: 2;
4
+ api: 3;
5
+ other: 4;
6
+ }>;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ // indicate what target URL was used for a request
3
+ export const TWS_ROUTE_TYPES = Object.freeze({
4
+ 'web': 1,
5
+ 'mobile': 2,
6
+ 'api': 3,
7
+ 'other': 4
8
+ });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../constants/index.js"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,kDAAkD;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,KAAK,EAAE,CAAC;IACR,QAAQ,EAAE,CAAC;IACX,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;CACX,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ export default formatter;
2
+ declare const formatter: S4Formatter;
3
+ declare class S4Formatter {
4
+ defaults: {
5
+ status: number;
6
+ errors: {};
7
+ };
8
+ _isArray(value: any): boolean;
9
+ _fromHash(error: any): {
10
+ status: number;
11
+ errors: {};
12
+ };
13
+ /**
14
+ * Desired Response format
15
+ *{
16
+ * "error": {
17
+ * "status": 422,
18
+ * "errors": {
19
+ * "password": {
20
+ * "location": "body",
21
+ * "param": "password",
22
+ * "value": "mypassword",
23
+ * "msg": "weak"
24
+ * }
25
+ * }
26
+ * },
27
+ * "error_id": "a2ddf895-2aaf-4189-88a2-8e11f6843f91"
28
+ *}
29
+ */
30
+ formatError(error: any): FormatError | {
31
+ status: number;
32
+ errors: {};
33
+ };
34
+ }
35
+ declare class FormatError extends Error {
36
+ constructor(m: any);
37
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ class FormatError extends Error {
3
+ constructor(m) {
4
+ super(m);
5
+ }
6
+ }
7
+ // helps to clean up response formats for services responding to rest requests
8
+ class S4Formatter {
9
+ constructor() {
10
+ this.defaults = {
11
+ status: 422,
12
+ errors: {}
13
+ };
14
+ }
15
+ _isArray(value) {
16
+ return value && typeof value === 'object' && value.constructor === Array;
17
+ }
18
+ _fromHash(error) {
19
+ let response = Object.assign({}, this.defaults);
20
+ if (error.status) {
21
+ let errorStatus = parseInt(error.status);
22
+ if ((errorStatus >= 200) && (errorStatus < 522)) {
23
+ response.status = errorStatus;
24
+ }
25
+ }
26
+ if (error.error && (typeof (error.error) === "string")) {
27
+ response.errors["generic"] = { msg: error.error };
28
+ }
29
+ else if (error.errors) {
30
+ if (this._isArray(error.errors)) {
31
+ // many legacy responses which are errors: ["error_name"]
32
+ error.errors.forEach(function (el, index) {
33
+ response.errors[`generic_${index}`] = { msg: el };
34
+ });
35
+ }
36
+ else if (typeof (error.errors) === "object") {
37
+ response.errors = error.errors;
38
+ }
39
+ }
40
+ return response;
41
+ }
42
+ /**
43
+ * Desired Response format
44
+ *{
45
+ * "error": {
46
+ * "status": 422,
47
+ * "errors": {
48
+ * "password": {
49
+ * "location": "body",
50
+ * "param": "password",
51
+ * "value": "mypassword",
52
+ * "msg": "weak"
53
+ * }
54
+ * }
55
+ * },
56
+ * "error_id": "a2ddf895-2aaf-4189-88a2-8e11f6843f91"
57
+ *}
58
+ */
59
+ formatError(error) {
60
+ let response;
61
+ if (error === null) {
62
+ response = this.defaults;
63
+ }
64
+ else if (typeof (error) === "object") {
65
+ response = this._fromHash(error);
66
+ }
67
+ else {
68
+ return new FormatError("invalid_error_format");
69
+ }
70
+ return response;
71
+ }
72
+ }
73
+ const formatter = new S4Formatter();
74
+ export default formatter;
75
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../formatter/index.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,WAAY,SAAQ,KAAK;IAC7B,YAAY,CAAC;QACX,KAAK,CAAC,CAAC,CAAC,CAAC;IACX,CAAC;CACF;AAED,8EAA8E;AAC9E,MAAM,WAAW;IACf;QACE,IAAI,CAAC,QAAQ,GAAG;YACd,MAAM,EAAE,GAAG;YACX,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,QAAQ,CAAE,KAAK;QACb,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC;IAC3E,CAAC;IAED,SAAS,CAAC,KAAK;QACb,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEzC,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,EAAE,CAAC;gBAChD,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAA;YAC/B,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,OAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YACtD,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,CAAA;QACnD,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAChC,yDAAyD;gBACzD,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAS,EAAE,EAAE,KAAK;oBACrC,QAAQ,CAAC,MAAM,CAAC,WAAW,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAA;gBACnD,CAAC,CAAC,CAAA;YACJ,CAAC;iBAAM,IAAI,OAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC7C,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;YAChC,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;;;;;;;;;MAgBE;IACF,WAAW,CAAC,KAAK;QACf,IAAI,QAAQ,CAAC;QACb,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,CAAC;aAAM,IAAI,OAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAG,CAAC;YACvC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,WAAW,CAAC,sBAAsB,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAED,MAAM,SAAS,GAAG,IAAI,WAAW,EAAE,CAAC;AACpC,eAAe,SAAS,CAAC"}
@@ -0,0 +1,5 @@
1
+ export default halDecorator;
2
+ declare const halDecorator: HalDecorator;
3
+ declare class HalDecorator {
4
+ decorate(Model: any, options: any): void;
5
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ function lastElement(arr) {
3
+ if (arr && arr.length) {
4
+ return arr[arr.length - 1];
5
+ }
6
+ else {
7
+ return null;
8
+ }
9
+ }
10
+ class HalDecorator {
11
+ decorate(Model, options) {
12
+ const model = Model.instance || Model;
13
+ const resource = (options && options.resource) ? options.resource : "";
14
+ const exclude = (options && options.exclude) ? options.exclude : [];
15
+ const links = (options && options.links) ? options.links : {};
16
+ const linksTag = (options && options.linksTag) ? options.linksTag : "_links";
17
+ const resourceTag = (options && options.resourceTag) ? options.resourceTag : "_resource";
18
+ const link = (name, method, l) => {
19
+ if (name && method && l) {
20
+ var aLink = {};
21
+ alink[method] = l;
22
+ links[name] = aLink;
23
+ }
24
+ return model;
25
+ };
26
+ const getLinkData = (values) => {
27
+ var linkData = {};
28
+ if (links) {
29
+ for (const key in links) {
30
+ if (links.hasOwnProperty(key)) {
31
+ const link = links[key];
32
+ const method = lastElement(Object.keys(link));
33
+ var url = link[method];
34
+ const paramPattern = /\:([a-zA-z_0-9]*)/;
35
+ const arr = paramPattern.exec(url);
36
+ if (arr) {
37
+ // Replace parameters
38
+ url = `/${resource}/${url.split(arr[0]).join(values[arr[1]])}`;
39
+ // Remove extra slashes that may have been added
40
+ url = url.replace(/\/\/*/g, "/");
41
+ linkData[key] = {};
42
+ linkData[key][method] = url;
43
+ }
44
+ }
45
+ }
46
+ }
47
+ return Object.keys(linkData).length > 0 ? linkData : null;
48
+ };
49
+ model.link = link;
50
+ Model.prototype.toJSON = function () {
51
+ var values = Object.assign({}, this.get());
52
+ if (exclude) {
53
+ exclude.forEach(element => {
54
+ delete values[element];
55
+ });
56
+ }
57
+ const links = getLinkData(values);
58
+ const result = {};
59
+ if (links) {
60
+ result[linksTag] = links;
61
+ }
62
+ result[resourceTag] = values;
63
+ return result;
64
+ };
65
+ }
66
+ }
67
+ const halDecorator = new HalDecorator();
68
+ export default halDecorator;
69
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../hal/index.js"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,SAAS,WAAW,CAAC,GAAG;IACtB,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,YAAY;IAEhB,QAAQ,CAAC,KAAK,EAAE,OAAO;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC;QACtC,MAAM,QAAQ,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,MAAM,KAAK,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,QAAQ,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7E,MAAM,WAAW,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;QAEzF,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;YAC/B,IAAI,IAAI,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBACxB,IAAI,KAAK,GAAG,EAAE,CAAC;gBACf,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAA;QAED,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,EAAE;YAC7B,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;oBACxB,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;wBACxB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC9C,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;wBACvB,MAAM,YAAY,GAAG,mBAAmB,CAAC;wBACzC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACnC,IAAI,GAAG,EAAE,CAAC;4BACR,qBAAqB;4BACrB,GAAG,GAAG,IAAI,QAAQ,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC/D,gDAAgD;4BAChD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;4BACjC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAA;4BAClB,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;wBAC9B,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D,CAAC,CAAA;QAED,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG;YACvB,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YAC3C,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;oBACxB,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;gBACzB,CAAC,CAAC,CAAC;YACL,CAAC;YACD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,EAAE,CAAA;YACjB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;YAC3B,CAAC;YACD,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC;YAC7B,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC;CACF;AAGD,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;AACxC,eAAe,YAAY,CAAC"}
@@ -0,0 +1,9 @@
1
+ export default helpers;
2
+ declare namespace helpers {
3
+ function debug(...args: any[]): void;
4
+ function log(...args: any[]): void;
5
+ function warn(...args: any[]): void;
6
+ function info(...args: any[]): void;
7
+ function error(...args: any[]): void;
8
+ function setEnabled(e: any): void;
9
+ }
@@ -0,0 +1,34 @@
1
+ import logger from "../logger/s4-logger.js";
2
+ let enabled = false;
3
+ const helpers = {
4
+ debug(...args) {
5
+ if (enabled) {
6
+ logger.debug(":: HealthCheck ::", args);
7
+ }
8
+ },
9
+ log(...args) {
10
+ if (enabled) {
11
+ logger.debug(":: HealthCheck ::", args);
12
+ }
13
+ },
14
+ warn(...args) {
15
+ if (enabled) {
16
+ logger.warn(":: HealthCheck ::", args);
17
+ }
18
+ },
19
+ info(...args) {
20
+ if (enabled) {
21
+ logger.info(":: HealthCheck ::", args);
22
+ }
23
+ },
24
+ error(...args) {
25
+ if (enabled) {
26
+ logger.error(":: HealthCheck ::", args);
27
+ }
28
+ },
29
+ setEnabled(e) {
30
+ enabled = e;
31
+ }
32
+ };
33
+ export default helpers;
34
+ //# sourceMappingURL=health-logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health-logger.js","sourceRoot":"","sources":["../../health/health-logger.js"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAC5C,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,MAAM,OAAO,GAAG;IACd,KAAK,CAAC,GAAG,IAAI;QACX,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,GAAG,CAAC,GAAG,IAAI;QACT,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,IAAI;QACV,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,CAAC,GAAG,IAAI;QACV,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,GAAG,IAAI;QACX,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,UAAU,CAAC,CAAC;QACV,OAAO,GAAG,CAAC,CAAC;IACd,CAAC;CACF,CAAA;AAED,eAAe,OAAO,CAAC"}
@@ -0,0 +1,19 @@
1
+ export class HealthCheck {
2
+ constructor(appendData?: {}, enableLogging?: boolean);
3
+ defaultResponse: {
4
+ status: number;
5
+ errors: {};
6
+ };
7
+ defaultPathRoute: string;
8
+ suppressLogs: boolean;
9
+ lastCallId: number;
10
+ pathPrefix: string;
11
+ healthChecks: any[];
12
+ addCheck(fcn: any): void;
13
+ setPrefix(prefix: any): void;
14
+ defaultPath(prefix?: string): string;
15
+ routes(router: any): any;
16
+ suppressHealthCheckLog(app: any): void;
17
+ setupCheck(config: any): void;
18
+ checkHealth(req: any, res: any): Promise<void>;
19
+ }
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ import pathHelper from "path";
3
+ import logger from "./health-logger.js";
4
+ import morgan from "morgan";
5
+ class HealthCheckError extends Error {
6
+ }
7
+ /* Health Checking router + controller for use in all of our modules
8
+ * Example use: Place the following code in your routes file
9
+ *
10
+ * import { healthCheck } from "@sera4/essentia";
11
+ * const router = require('express').Router();
12
+ *
13
+ * ....
14
+ *
15
+ * const checkRedis = async () => { await cache.ping(); }
16
+ * hc.setupCheck({ name: "redis", checkResult: false, critical: true, healthFunction: checkRedis });
17
+ * app.use(hc.defaultPath(serverConfigs.api_prefix), hc.routes(router));
18
+ *
19
+ */
20
+ class HealthCheck {
21
+ constructor(appendData = {}, enableLogging = true) {
22
+ logger.setEnabled(enableLogging);
23
+ this.defaultResponse = {
24
+ ...appendData,
25
+ status: 200,
26
+ errors: {}
27
+ };
28
+ this.defaultPathRoute = `health_check\(.*\)?`;
29
+ this.suppressLogs = false;
30
+ this.lastCallId = 0; // default start point/integer
31
+ this.pathPrefix = "";
32
+ this.healthChecks = [];
33
+ }
34
+ /* Deprecated and replaced by setupCheck
35
+ * call this with an async function, must support wait capability
36
+ *
37
+ * const dbCheck = async () => {
38
+ * return { name: "db", "result": "success", critical: false };
39
+ * }
40
+ */
41
+ addCheck(fcn) {
42
+ this.healthChecks.push(fcn);
43
+ }
44
+ setPrefix(prefix) {
45
+ this.pathPrefix = prefix;
46
+ }
47
+ defaultPath(prefix = "") {
48
+ if (prefix === "") {
49
+ prefix = this.pathPrefix; // maybe setup manually
50
+ }
51
+ return `${prefix}/${this.defaultPathRoute}`;
52
+ }
53
+ routes(router) {
54
+ if (!router) {
55
+ throw new HealthCheckError("missing_express_router");
56
+ }
57
+ /* definition of all routes, rooted at defaultPath */
58
+ router.get('/', (req, res) => {
59
+ this.checkHealth(req, res);
60
+ });
61
+ return router;
62
+ }
63
+ suppressHealthCheckLog(app) {
64
+ // Custom morgan skip function to ignore health check logging
65
+ console.log("skip: ", this.defaultPath());
66
+ app.use(morgan('combined', {
67
+ skip: (req) => req.path === defaultPath()
68
+ }));
69
+ }
70
+ // v2 version of health check, replaced addCheck
71
+ // example:
72
+ // const checkRedisFcn = async () => { await cache.ping().then(() => true) }
73
+ // setupCheck({ name: "redis", checkResult: false, critical: false, healthFunction: checkRedisFcn });
74
+ setupCheck(config) {
75
+ this.healthChecks.push(config);
76
+ }
77
+ /* performs health checks and returns 200 if true and 500 if not */
78
+ async checkHealth(req, res) {
79
+ const checkFormat = pathHelper.extname(req.baseUrl);
80
+ const result = await Promise.all(this.healthChecks.map(async (hc) => {
81
+ if (typeof (hc) === "function") {
82
+ try {
83
+ return await hc();
84
+ }
85
+ catch (e) {
86
+ return { name: "unknown", result: 'fail', status: e.status };
87
+ }
88
+ }
89
+ else {
90
+ let res = { name: hc.name, critical: hc.critical };
91
+ try {
92
+ const result = await hc.healthFunction();
93
+ if (typeof (result) === "boolean") {
94
+ if (result === false) {
95
+ res = { "result": "fail", ...res };
96
+ }
97
+ else {
98
+ res = { "result": "success", ...res };
99
+ }
100
+ }
101
+ else {
102
+ res = { "result": "success", ...res };
103
+ }
104
+ return res;
105
+ }
106
+ catch (e) {
107
+ const appendStatus = e.status ? ` (${e.status})` : "";
108
+ logger.warn(`${hc.name} service failed${appendStatus}`);
109
+ return { ...res, "result": "fail", status: e.status };
110
+ }
111
+ }
112
+ }));
113
+ try {
114
+ let callId = ++this.lastCallId;
115
+ // start the counter over
116
+ if ((callId % (1 << 30)) === 0) {
117
+ callId = this.lastCallId = 1;
118
+ }
119
+ let status = this.defaultResponse.status;
120
+ let nonCriticalFail = false;
121
+ let criticalFail = false;
122
+ result.some(e => {
123
+ if (e.result.match(/fail/)) {
124
+ if (e.critical === false) {
125
+ nonCriticalFail = true;
126
+ }
127
+ else {
128
+ criticalFail = true;
129
+ status = 500;
130
+ return true; // break
131
+ }
132
+ }
133
+ });
134
+ // set this in the header no matter what
135
+ res.setHeader('check', callId);
136
+ if (checkFormat === ".json") {
137
+ const payload = { "check": callId, healthy: "true", message: "success" };
138
+ if (criticalFail) {
139
+ res.status(status).json({
140
+ ...payload,
141
+ "healthy": false,
142
+ "message": "fail",
143
+ "services": result
144
+ });
145
+ }
146
+ else if (nonCriticalFail) {
147
+ res.status(status).json({
148
+ ...payload,
149
+ "message": "fail",
150
+ "services": result
151
+ });
152
+ }
153
+ else if (status === 200) {
154
+ res.status(status).json(payload);
155
+ }
156
+ }
157
+ else {
158
+ let status_message;
159
+ if (criticalFail) {
160
+ status_message = "fail";
161
+ }
162
+ else if ((status === 200) || nonCriticalFail) {
163
+ status_message = "success";
164
+ }
165
+ res.status(status).send(status_message);
166
+ }
167
+ }
168
+ catch (error) {
169
+ console.warn("error: ", error);
170
+ res.status(500).send();
171
+ }
172
+ }
173
+ }
174
+ export { HealthCheck };
175
+ //# sourceMappingURL=index.js.map