@xylabs/express 4.3.14

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 (198) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +62 -0
  3. package/dist/node/AWS/getEnvFromAws.d.ts +2 -0
  4. package/dist/node/AWS/getEnvFromAws.d.ts.map +1 -0
  5. package/dist/node/AWS/index.d.ts +2 -0
  6. package/dist/node/AWS/index.d.ts.map +1 -0
  7. package/dist/node/Handler/StatusCodeHandlers/index.d.ts +2 -0
  8. package/dist/node/Handler/StatusCodeHandlers/index.d.ts.map +1 -0
  9. package/dist/node/Handler/StatusCodeHandlers/notImplemented.d.ts +3 -0
  10. package/dist/node/Handler/StatusCodeHandlers/notImplemented.d.ts.map +1 -0
  11. package/dist/node/Handler/asyncHandler.d.ts +11 -0
  12. package/dist/node/Handler/asyncHandler.d.ts.map +1 -0
  13. package/dist/node/Handler/errorToJsonHandler.d.ts +4 -0
  14. package/dist/node/Handler/errorToJsonHandler.d.ts.map +1 -0
  15. package/dist/node/Handler/index.d.ts +4 -0
  16. package/dist/node/Handler/index.d.ts.map +1 -0
  17. package/dist/node/HttpUtil/getHttpHeader.d.ts +12 -0
  18. package/dist/node/HttpUtil/getHttpHeader.d.ts.map +1 -0
  19. package/dist/node/HttpUtil/index.d.ts +2 -0
  20. package/dist/node/HttpUtil/index.d.ts.map +1 -0
  21. package/dist/node/Logger/LogFormats/LocalDev/index.d.ts +2 -0
  22. package/dist/node/Logger/LogFormats/LocalDev/index.d.ts.map +1 -0
  23. package/dist/node/Logger/LogFormats/LocalDev/logFormatLocalDev.d.ts +2 -0
  24. package/dist/node/Logger/LogFormats/LocalDev/logFormatLocalDev.d.ts.map +1 -0
  25. package/dist/node/Logger/LogFormats/Rollbar/index.d.ts +2 -0
  26. package/dist/node/Logger/LogFormats/Rollbar/index.d.ts.map +1 -0
  27. package/dist/node/Logger/LogFormats/Rollbar/logFormatRollbar.d.ts +2 -0
  28. package/dist/node/Logger/LogFormats/Rollbar/logFormatRollbar.d.ts.map +1 -0
  29. package/dist/node/Logger/LogFormats/Structured/index.d.ts +2 -0
  30. package/dist/node/Logger/LogFormats/Structured/index.d.ts.map +1 -0
  31. package/dist/node/Logger/LogFormats/Structured/logFormatStructured.d.ts +2 -0
  32. package/dist/node/Logger/LogFormats/Structured/logFormatStructured.d.ts.map +1 -0
  33. package/dist/node/Logger/LogFormats/index.d.ts +4 -0
  34. package/dist/node/Logger/LogFormats/index.d.ts.map +1 -0
  35. package/dist/node/Logger/Logger.d.ts +13 -0
  36. package/dist/node/Logger/Logger.d.ts.map +1 -0
  37. package/dist/node/Logger/LoggerMeta.d.ts +2 -0
  38. package/dist/node/Logger/LoggerMeta.d.ts.map +1 -0
  39. package/dist/node/Logger/LoggerOptions.d.ts +7 -0
  40. package/dist/node/Logger/LoggerOptions.d.ts.map +1 -0
  41. package/dist/node/Logger/LoggerVerbosity.d.ts +2 -0
  42. package/dist/node/Logger/LoggerVerbosity.d.ts.map +1 -0
  43. package/dist/node/Logger/Transports/Rollbar/RollbarTransport.d.ts +11 -0
  44. package/dist/node/Logger/Transports/Rollbar/RollbarTransport.d.ts.map +1 -0
  45. package/dist/node/Logger/Transports/Rollbar/canGetDefaultRollbarTransport.d.ts +4 -0
  46. package/dist/node/Logger/Transports/Rollbar/canGetDefaultRollbarTransport.d.ts.map +1 -0
  47. package/dist/node/Logger/Transports/Rollbar/getDefaultRollbarTransport.d.ts +5 -0
  48. package/dist/node/Logger/Transports/Rollbar/getDefaultRollbarTransport.d.ts.map +1 -0
  49. package/dist/node/Logger/Transports/Rollbar/index.d.ts +4 -0
  50. package/dist/node/Logger/Transports/Rollbar/index.d.ts.map +1 -0
  51. package/dist/node/Logger/Transports/index.d.ts +2 -0
  52. package/dist/node/Logger/Transports/index.d.ts.map +1 -0
  53. package/dist/node/Logger/WinstonVerbosity.d.ts +6 -0
  54. package/dist/node/Logger/WinstonVerbosity.d.ts.map +1 -0
  55. package/dist/node/Logger/WrappedWinstonLogger.d.ts +16 -0
  56. package/dist/node/Logger/WrappedWinstonLogger.d.ts.map +1 -0
  57. package/dist/node/Logger/getDefaultLogger.d.ts +3 -0
  58. package/dist/node/Logger/getDefaultLogger.d.ts.map +1 -0
  59. package/dist/node/Logger/getLogger.d.ts +4 -0
  60. package/dist/node/Logger/getLogger.d.ts.map +1 -0
  61. package/dist/node/Logger/index.d.ts +7 -0
  62. package/dist/node/Logger/index.d.ts.map +1 -0
  63. package/dist/node/Logger/toWinstonVerbosity.d.ts +4 -0
  64. package/dist/node/Logger/toWinstonVerbosity.d.ts.map +1 -0
  65. package/dist/node/Model/ExpressError.d.ts +4 -0
  66. package/dist/node/Model/ExpressError.d.ts.map +1 -0
  67. package/dist/node/Model/index.d.ts +2 -0
  68. package/dist/node/Model/index.d.ts.map +1 -0
  69. package/dist/node/Performance/Counters.d.ts +8 -0
  70. package/dist/node/Performance/Counters.d.ts.map +1 -0
  71. package/dist/node/Performance/Profiler.d.ts +5 -0
  72. package/dist/node/Performance/Profiler.d.ts.map +1 -0
  73. package/dist/node/Performance/index.d.ts +3 -0
  74. package/dist/node/Performance/index.d.ts.map +1 -0
  75. package/dist/node/Util/compactObject.d.ts +2 -0
  76. package/dist/node/Util/compactObject.d.ts.map +1 -0
  77. package/dist/node/Util/index.d.ts +3 -0
  78. package/dist/node/Util/index.d.ts.map +1 -0
  79. package/dist/node/Util/tryParse.d.ts +5 -0
  80. package/dist/node/Util/tryParse.d.ts.map +1 -0
  81. package/dist/node/index.d.ts +9 -0
  82. package/dist/node/index.d.ts.map +1 -0
  83. package/dist/node/index.mjs +408 -0
  84. package/dist/node/index.mjs.map +1 -0
  85. package/dist/node/middleware/caseInsensitiveRouting/caseInsensitiveRouting.d.ts +14 -0
  86. package/dist/node/middleware/caseInsensitiveRouting/caseInsensitiveRouting.d.ts.map +1 -0
  87. package/dist/node/middleware/caseInsensitiveRouting/index.d.ts +2 -0
  88. package/dist/node/middleware/caseInsensitiveRouting/index.d.ts.map +1 -0
  89. package/dist/node/middleware/customPoweredByHeader/customPoweredByHeader.d.ts +15 -0
  90. package/dist/node/middleware/customPoweredByHeader/customPoweredByHeader.d.ts.map +1 -0
  91. package/dist/node/middleware/customPoweredByHeader/index.d.ts +2 -0
  92. package/dist/node/middleware/customPoweredByHeader/index.d.ts.map +1 -0
  93. package/dist/node/middleware/index.d.ts +6 -0
  94. package/dist/node/middleware/index.d.ts.map +1 -0
  95. package/dist/node/middleware/jsonBodyParser/index.d.ts +2 -0
  96. package/dist/node/middleware/jsonBodyParser/index.d.ts.map +1 -0
  97. package/dist/node/middleware/jsonBodyParser/jsonBodyParser.d.ts +33 -0
  98. package/dist/node/middleware/jsonBodyParser/jsonBodyParser.d.ts.map +1 -0
  99. package/dist/node/middleware/metrics/counters.d.ts +3 -0
  100. package/dist/node/middleware/metrics/counters.d.ts.map +1 -0
  101. package/dist/node/middleware/metrics/index.d.ts +3 -0
  102. package/dist/node/middleware/metrics/index.d.ts.map +1 -0
  103. package/dist/node/middleware/metrics/responseProfiler.d.ts +15 -0
  104. package/dist/node/middleware/metrics/responseProfiler.d.ts.map +1 -0
  105. package/dist/node/middleware/standardResponses/getResponseMetadata.d.ts +3 -0
  106. package/dist/node/middleware/standardResponses/getResponseMetadata.d.ts.map +1 -0
  107. package/dist/node/middleware/standardResponses/index.d.ts +5 -0
  108. package/dist/node/middleware/standardResponses/index.d.ts.map +1 -0
  109. package/dist/node/middleware/standardResponses/jsonApi/error.d.ts +51 -0
  110. package/dist/node/middleware/standardResponses/jsonApi/error.d.ts.map +1 -0
  111. package/dist/node/middleware/standardResponses/jsonApi/index.d.ts +6 -0
  112. package/dist/node/middleware/standardResponses/jsonApi/index.d.ts.map +1 -0
  113. package/dist/node/middleware/standardResponses/jsonApi/links.d.ts +7 -0
  114. package/dist/node/middleware/standardResponses/jsonApi/links.d.ts.map +1 -0
  115. package/dist/node/middleware/standardResponses/jsonApi/relationship.d.ts +38 -0
  116. package/dist/node/middleware/standardResponses/jsonApi/relationship.d.ts.map +1 -0
  117. package/dist/node/middleware/standardResponses/jsonApi/resourceIdentifier.d.ts +16 -0
  118. package/dist/node/middleware/standardResponses/jsonApi/resourceIdentifier.d.ts.map +1 -0
  119. package/dist/node/middleware/standardResponses/jsonApi/response.d.ts +44 -0
  120. package/dist/node/middleware/standardResponses/jsonApi/response.d.ts.map +1 -0
  121. package/dist/node/middleware/standardResponses/standardErrors.d.ts +4 -0
  122. package/dist/node/middleware/standardResponses/standardErrors.d.ts.map +1 -0
  123. package/dist/node/middleware/standardResponses/standardResponses.d.ts +18 -0
  124. package/dist/node/middleware/standardResponses/standardResponses.d.ts.map +1 -0
  125. package/package.json +101 -0
  126. package/src/AWS/getEnvFromAws.ts +24 -0
  127. package/src/AWS/index.ts +1 -0
  128. package/src/AWS/spec/getEnvFromAws.spec.ts +16 -0
  129. package/src/Handler/StatusCodeHandlers/index.ts +1 -0
  130. package/src/Handler/StatusCodeHandlers/notImplemented.ts +6 -0
  131. package/src/Handler/asyncHandler.ts +21 -0
  132. package/src/Handler/errorToJsonHandler.ts +14 -0
  133. package/src/Handler/index.ts +3 -0
  134. package/src/HttpUtil/getHttpHeader.ts +26 -0
  135. package/src/HttpUtil/index.ts +1 -0
  136. package/src/Logger/LogFormats/LocalDev/index.ts +1 -0
  137. package/src/Logger/LogFormats/LocalDev/logFormatLocalDev.ts +11 -0
  138. package/src/Logger/LogFormats/LocalDev/spec/logFormatLocalDev.spec.ts +13 -0
  139. package/src/Logger/LogFormats/Rollbar/index.ts +1 -0
  140. package/src/Logger/LogFormats/Rollbar/logFormatRollbar.ts +5 -0
  141. package/src/Logger/LogFormats/Rollbar/spec/logFormatRollbar.spec.ts +13 -0
  142. package/src/Logger/LogFormats/Structured/index.ts +1 -0
  143. package/src/Logger/LogFormats/Structured/logFormatStructured.ts +7 -0
  144. package/src/Logger/LogFormats/Structured/spec/logFormatStructured.spec.ts +13 -0
  145. package/src/Logger/LogFormats/index.ts +3 -0
  146. package/src/Logger/Logger.ts +15 -0
  147. package/src/Logger/LoggerMeta.ts +1 -0
  148. package/src/Logger/LoggerOptions.ts +7 -0
  149. package/src/Logger/LoggerVerbosity.ts +1 -0
  150. package/src/Logger/Transports/Rollbar/RollbarTransport.ts +22 -0
  151. package/src/Logger/Transports/Rollbar/canGetDefaultRollbarTransport.ts +3 -0
  152. package/src/Logger/Transports/Rollbar/getDefaultRollbarTransport.ts +10 -0
  153. package/src/Logger/Transports/Rollbar/index.ts +3 -0
  154. package/src/Logger/Transports/Rollbar/spec/RollbarTransport.spec.ts +30 -0
  155. package/src/Logger/Transports/Rollbar/spec/canGetDefaultRollbarTransport.spec.ts +18 -0
  156. package/src/Logger/Transports/Rollbar/spec/getDefaultRollbarTransport.spec.ts +16 -0
  157. package/src/Logger/Transports/index.ts +1 -0
  158. package/src/Logger/WinstonVerbosity.ts +5 -0
  159. package/src/Logger/WrappedWinstonLogger.ts +16 -0
  160. package/src/Logger/getDefaultLogger.ts +13 -0
  161. package/src/Logger/getLogger.ts +55 -0
  162. package/src/Logger/index.ts +6 -0
  163. package/src/Logger/spec/getDefaultLogger.spec.ts +14 -0
  164. package/src/Logger/spec/getLogger.spec.ts +25 -0
  165. package/src/Logger/spec/toWinstonVerbosity.spec.ts +17 -0
  166. package/src/Logger/toWinstonVerbosity.ts +6 -0
  167. package/src/Model/ExpressError.ts +3 -0
  168. package/src/Model/index.ts +1 -0
  169. package/src/Performance/Counters.ts +36 -0
  170. package/src/Performance/Profiler.ts +10 -0
  171. package/src/Performance/index.ts +2 -0
  172. package/src/Util/compactObject.ts +9 -0
  173. package/src/Util/index.ts +2 -0
  174. package/src/Util/tryParse.ts +21 -0
  175. package/src/index.ts +8 -0
  176. package/src/middleware/caseInsensitiveRouting/caseInsensitiveRouting.ts +21 -0
  177. package/src/middleware/caseInsensitiveRouting/index.ts +1 -0
  178. package/src/middleware/customPoweredByHeader/customPoweredByHeader.ts +29 -0
  179. package/src/middleware/customPoweredByHeader/index.ts +1 -0
  180. package/src/middleware/index.ts +5 -0
  181. package/src/middleware/jsonBodyParser/index.ts +1 -0
  182. package/src/middleware/jsonBodyParser/jsonBodyParser.ts +57 -0
  183. package/src/middleware/jsonBodyParser/spec/jsonBodyParser.spec.ts +26 -0
  184. package/src/middleware/metrics/counters.ts +25 -0
  185. package/src/middleware/metrics/index.ts +2 -0
  186. package/src/middleware/metrics/responseProfiler.ts +23 -0
  187. package/src/middleware/standardResponses/getResponseMetadata.ts +18 -0
  188. package/src/middleware/standardResponses/index.ts +4 -0
  189. package/src/middleware/standardResponses/jsonApi/README.md +4 -0
  190. package/src/middleware/standardResponses/jsonApi/error.ts +52 -0
  191. package/src/middleware/standardResponses/jsonApi/index.ts +5 -0
  192. package/src/middleware/standardResponses/jsonApi/links.ts +6 -0
  193. package/src/middleware/standardResponses/jsonApi/relationship.ts +43 -0
  194. package/src/middleware/standardResponses/jsonApi/resourceIdentifier.ts +15 -0
  195. package/src/middleware/standardResponses/jsonApi/response.ts +49 -0
  196. package/src/middleware/standardResponses/standardErrors.ts +25 -0
  197. package/src/middleware/standardResponses/standardResponses.ts +23 -0
  198. package/xy.config.ts +10 -0
@@ -0,0 +1,2 @@
1
+ export declare const compactObject: <T extends Record<string, unknown>>(obj: T) => T;
2
+ //# sourceMappingURL=compactObject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compactObject.d.ts","sourceRoot":"","sources":["../../../src/Util/compactObject.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,KAOpD,CAClB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './compactObject.ts';
2
+ export * from './tryParse.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Util/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA"}
@@ -0,0 +1,5 @@
1
+ export type ParseFunc<T = number> = (value: string) => T;
2
+ export declare const tryParse: <T = number>(func: ParseFunc<T>, value?: string) => (T & {}) | undefined;
3
+ export declare const tryParseFloat: (value?: string) => number | undefined;
4
+ export declare const tryParseInt: (value?: string) => number | undefined;
5
+ //# sourceMappingURL=tryParse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tryParse.d.ts","sourceRoot":"","sources":["../../../src/Util/tryParse.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,CAAC,CAAA;AAExD,eAAO,MAAM,QAAQ,GAAI,CAAC,iBAAiB,SAAS,CAAC,CAAC,CAAC,UAAU,MAAM,yBAUtE,CAAA;AAED,eAAO,MAAM,aAAa,WAAY,MAAM,uBAE3C,CAAA;AAED,eAAO,MAAM,WAAW,WAAY,MAAM,uBAEzC,CAAA"}
@@ -0,0 +1,9 @@
1
+ export * from './AWS/index.ts';
2
+ export * from './Handler/index.ts';
3
+ export * from './HttpUtil/index.ts';
4
+ export * from './Logger/index.ts';
5
+ export * from './middleware/index.ts';
6
+ export * from './Model/index.ts';
7
+ export * from './Performance/index.ts';
8
+ export * from './Util/index.ts';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAA;AAC9B,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,408 @@
1
+ // src/AWS/getEnvFromAws.ts
2
+ import { SecretsManager } from "@aws-sdk/client-secrets-manager";
3
+ import NodeCache from "node-cache";
4
+ var region = "us-east-1";
5
+ var envCache = new NodeCache({ stdTTL: 3600 * 24 });
6
+ var getEnvFromAws = async (secretId) => {
7
+ const cacheResult = envCache.get(secretId);
8
+ if (cacheResult) {
9
+ return cacheResult;
10
+ } else {
11
+ const client = new SecretsManager({ region });
12
+ const awsResult = await client.getSecretValue({ SecretId: secretId });
13
+ console.log(`ENV read from AWS Success [${awsResult?.Name}, ${!!awsResult?.SecretString}, ${!!awsResult?.SecretBinary}]`);
14
+ if (awsResult?.SecretString) {
15
+ const secretObject = JSON.parse(awsResult?.SecretString);
16
+ console.log(`ENV read from AWS [${Object.entries(secretObject).length}]`);
17
+ envCache.set(secretId, secretObject);
18
+ return secretObject;
19
+ } else {
20
+ throw new Error("Missing SecretString");
21
+ }
22
+ }
23
+ };
24
+
25
+ // src/Handler/asyncHandler.ts
26
+ function asyncHandler(fn) {
27
+ return (req, res, next) => {
28
+ return Promise.resolve(fn(req, res, next)).catch(next);
29
+ };
30
+ }
31
+
32
+ // src/Handler/errorToJsonHandler.ts
33
+ var errorToJsonHandler = (error, req, res, next) => {
34
+ if (error) {
35
+ console.error(error.message);
36
+ if (!error.statusCode) error.statusCode = 500;
37
+ res.status(error.statusCode).send({ error: error.message });
38
+ }
39
+ next(error);
40
+ };
41
+
42
+ // src/Handler/StatusCodeHandlers/notImplemented.ts
43
+ import { ReasonPhrases, StatusCodes } from "http-status-codes";
44
+ var notImplemented = (_req, _res, next) => {
45
+ next({ message: ReasonPhrases.NOT_IMPLEMENTED, statusCode: StatusCodes.NOT_IMPLEMENTED });
46
+ };
47
+
48
+ // src/HttpUtil/getHttpHeader.ts
49
+ var getHttpHeader = (header2, req) => {
50
+ const headerValue = req.headers[header2];
51
+ const value = headerValue ? Array.isArray(headerValue) ? headerValue.shift() : headerValue : void 0;
52
+ return value;
53
+ };
54
+
55
+ // src/Logger/getLogger.ts
56
+ import { createLogger, transports as winstonTransports } from "winston";
57
+
58
+ // src/Logger/LogFormats/LocalDev/logFormatLocalDev.ts
59
+ import { format } from "winston";
60
+ var {
61
+ colorize,
62
+ combine,
63
+ timestamp,
64
+ printf
65
+ } = format;
66
+ var logFormatLocalDev = combine(
67
+ colorize(),
68
+ timestamp(),
69
+ printf((info) => `[${info.timestamp} ${info.level}] ${info.message}`)
70
+ );
71
+
72
+ // src/Logger/LogFormats/Rollbar/logFormatRollbar.ts
73
+ import { format as format2 } from "winston";
74
+ var { simple } = format2;
75
+ var logFormatRollbar = simple();
76
+
77
+ // src/Logger/LogFormats/Structured/logFormatStructured.ts
78
+ import { format as format3 } from "winston";
79
+ var {
80
+ combine: combine2,
81
+ timestamp: timestamp2,
82
+ json
83
+ } = format3;
84
+ var logFormatStructured = combine2(timestamp2(), json());
85
+
86
+ // src/Logger/toWinstonVerbosity.ts
87
+ var toWinstonVerbosity = (loggerVerbosity) => {
88
+ return loggerVerbosity === "all" ? "silly" : loggerVerbosity;
89
+ };
90
+
91
+ // src/Logger/Transports/Rollbar/canGetDefaultRollbarTransport.ts
92
+ var canGetDefaultRollbarTransport = (env) => {
93
+ return env.ROLLBAR_ACCESS_TOKEN ? true : false;
94
+ };
95
+
96
+ // src/Logger/Transports/Rollbar/getDefaultRollbarTransport.ts
97
+ import { assertEx } from "@xylabs/assert";
98
+ import Rollbar from "rollbar";
99
+
100
+ // src/Logger/Transports/Rollbar/RollbarTransport.ts
101
+ import Transport from "winston-transport";
102
+ var RollbarTransport = class extends Transport {
103
+ constructor(opts, rollbar) {
104
+ super({
105
+ ...opts,
106
+ format: logFormatRollbar,
107
+ level: "error"
108
+ });
109
+ this.rollbar = rollbar;
110
+ }
111
+ log(info, next) {
112
+ this.rollbar?.error(info?.message);
113
+ this.emit("logged", info?.message);
114
+ next();
115
+ }
116
+ };
117
+
118
+ // src/Logger/Transports/Rollbar/getDefaultRollbarTransport.ts
119
+ var getDefaultRollbarTransport = (env) => {
120
+ const accessToken = assertEx(env.ROLLBAR_ACCESS_TOKEN, "Missing ROLLBAR_ACCESS_TOKEN ENV VAR");
121
+ const rollbar = new Rollbar({ accessToken });
122
+ return new RollbarTransport({}, rollbar);
123
+ };
124
+
125
+ // src/Logger/WrappedWinstonLogger.ts
126
+ var WrappedWinstonLogger = class {
127
+ constructor(winston) {
128
+ this.winston = winston;
129
+ }
130
+ debug = (message) => this.winston.debug(message);
131
+ error = (message) => this.winston.error(message);
132
+ info = (message) => this.winston.info(message);
133
+ log = (message) => this.winston.info(message);
134
+ warn = (message) => this.winston.warn(message);
135
+ };
136
+
137
+ // src/Logger/getLogger.ts
138
+ var exitOnError = false;
139
+ var handleRejections = true;
140
+ var { Console } = winstonTransports;
141
+ var consoleTransport = new Console();
142
+ var format4 = process.env.NODE_ENV === "development" ? logFormatLocalDev : logFormatStructured;
143
+ var transports = [consoleTransport];
144
+ if (canGetDefaultRollbarTransport(process.env)) {
145
+ try {
146
+ const rollbarTransport = getDefaultRollbarTransport(process.env);
147
+ transports.push(rollbarTransport);
148
+ } catch {
149
+ }
150
+ }
151
+ var loggers = {
152
+ debug: void 0,
153
+ error: void 0,
154
+ http: void 0,
155
+ info: void 0,
156
+ silly: void 0,
157
+ verbose: void 0,
158
+ warn: void 0
159
+ };
160
+ var getLogger = (minVerbosity = "info") => {
161
+ const level = toWinstonVerbosity(minVerbosity);
162
+ const existing = loggers[level];
163
+ if (existing) return existing;
164
+ const logger = new WrappedWinstonLogger(
165
+ createLogger({
166
+ exitOnError,
167
+ format: format4,
168
+ handleRejections,
169
+ level,
170
+ rejectionHandlers: transports,
171
+ transports
172
+ })
173
+ );
174
+ loggers[level] = logger;
175
+ return logger;
176
+ };
177
+
178
+ // src/Logger/getDefaultLogger.ts
179
+ var defaultLogger;
180
+ var getDefaultLogger = () => {
181
+ if (defaultLogger) return defaultLogger;
182
+ return getLogger();
183
+ };
184
+
185
+ // src/middleware/caseInsensitiveRouting/caseInsensitiveRouting.ts
186
+ var setting = "case sensitive routing";
187
+ var enableCaseSensitiveRouting = (app) => {
188
+ app.enable(setting);
189
+ };
190
+ var disableCaseSensitiveRouting = (app) => {
191
+ app.disable(setting);
192
+ };
193
+
194
+ // src/middleware/customPoweredByHeader/customPoweredByHeader.ts
195
+ var header = "X-Powered-By";
196
+ var setting2 = "x-powered-by";
197
+ var enableExpressDefaultPoweredByHeader = (app) => {
198
+ app.enable(setting2);
199
+ };
200
+ var disableExpressDefaultPoweredByHeader = (app) => {
201
+ app.disable(setting2);
202
+ };
203
+ var customPoweredByHeader = (req, res, next) => {
204
+ res.setHeader(header, "XYO");
205
+ next();
206
+ };
207
+
208
+ // src/middleware/jsonBodyParser/jsonBodyParser.ts
209
+ import bodyParser from "body-parser";
210
+ var DefaultJsonBodyParserOptionsLimit = "100kb";
211
+ var DefaultJsonBodyParserOptionsTypes = ["application/json", "text/json"];
212
+ var DefaultJsonBodyParserOptions = {
213
+ limit: DefaultJsonBodyParserOptionsLimit,
214
+ type: DefaultJsonBodyParserOptionsTypes
215
+ };
216
+ var getJsonBodyParserOptions = (options) => {
217
+ return options ? { ...DefaultJsonBodyParserOptions, ...options } : DefaultJsonBodyParserOptions;
218
+ };
219
+ var getJsonBodyParser = (options = DefaultJsonBodyParserOptions) => {
220
+ const parser = bodyParser.json(options);
221
+ return (req, res, next) => {
222
+ try {
223
+ parser(req, res, next);
224
+ } catch (ex) {
225
+ const error = ex;
226
+ console.log(`bodyParser failed [${error?.name}]: ${error?.message}`);
227
+ }
228
+ };
229
+ };
230
+ var jsonBodyParser = getJsonBodyParser();
231
+
232
+ // src/Performance/Counters.ts
233
+ var Counters = class {
234
+ static counters = {};
235
+ static inc(name, count = 1) {
236
+ this.catchError(name, (name2) => {
237
+ this.counters[name2] = (this.counters[name2] ?? 0) + count;
238
+ });
239
+ }
240
+ static max(name, count) {
241
+ this.catchError(name, (name2) => {
242
+ const currentValue = this.counters[name2];
243
+ if (currentValue === void 0 || count > currentValue) {
244
+ this.counters[name2] = count;
245
+ }
246
+ });
247
+ }
248
+ static min(name, count) {
249
+ this.catchError(name, (name2) => {
250
+ const currentValue = this.counters[name2];
251
+ if (currentValue === void 0 || count < currentValue) {
252
+ this.counters[name2] = count;
253
+ }
254
+ });
255
+ }
256
+ static catchError = (name, func) => {
257
+ try {
258
+ func(name);
259
+ } catch {
260
+ this.counters[name] = 0;
261
+ this.inc("CountersErrors");
262
+ }
263
+ };
264
+ };
265
+
266
+ // src/Performance/Profiler.ts
267
+ var Profiler = class {
268
+ stats = {};
269
+ async profile(name, promise) {
270
+ const start = Date.now();
271
+ const result = await promise;
272
+ this.stats[name] = Date.now() - start;
273
+ return result;
274
+ }
275
+ };
276
+
277
+ // src/middleware/metrics/counters.ts
278
+ var useRequestCounters = (app) => {
279
+ app.use((req, res, next) => {
280
+ Counters.inc(req.path);
281
+ Counters.inc("_calls");
282
+ next();
283
+ });
284
+ app.get("/stats", (req, res, next) => {
285
+ res.json({
286
+ alive: true,
287
+ avgTime: `${((Counters.counters["_totalTime"] ?? 0) / (Counters.counters["_calls"] ?? 1)).toFixed(2)}ms`,
288
+ counters: Counters.counters
289
+ });
290
+ next();
291
+ });
292
+ };
293
+
294
+ // src/middleware/metrics/responseProfiler.ts
295
+ var responseProfiler = (_req, res, next) => {
296
+ if (!res.locals?.meta) {
297
+ res.locals.meta = {};
298
+ }
299
+ res.locals.meta.profile = { startTime: Date.now() };
300
+ next();
301
+ };
302
+
303
+ // src/middleware/standardResponses/getResponseMetadata.ts
304
+ var getResponseMetadata = (res) => {
305
+ const meta = res.locals?.meta || {};
306
+ const profile = res.locals.meta?.profile;
307
+ if (profile) {
308
+ const startTime = profile?.startTime;
309
+ if (startTime) {
310
+ const endTime = Date.now();
311
+ const duration = endTime - startTime;
312
+ res.locals.meta.profile = {
313
+ duration,
314
+ endTime,
315
+ startTime
316
+ };
317
+ }
318
+ }
319
+ return meta;
320
+ };
321
+
322
+ // src/middleware/standardResponses/standardErrors.ts
323
+ var standardErrors = (err, req, res, next) => {
324
+ if (!err) {
325
+ next(err);
326
+ return;
327
+ }
328
+ console.error(err.message);
329
+ if (!err.statusCode) err.statusCode = 500;
330
+ const error = {
331
+ detail: err.message,
332
+ status: `${err.statusCode}`,
333
+ title: err.name
334
+ };
335
+ res.status(err.statusCode).json(error);
336
+ next(err);
337
+ };
338
+
339
+ // src/middleware/standardResponses/standardResponses.ts
340
+ import mung from "express-mung";
341
+ var transformResponse = (body, _req, res) => {
342
+ const meta = getResponseMetadata(res);
343
+ return { data: body, meta };
344
+ };
345
+ var standardResponses = mung.json(transformResponse, { mungError: false });
346
+
347
+ // src/Util/compactObject.ts
348
+ var compactObject = (obj) => {
349
+ const result = {};
350
+ for (const key in obj) {
351
+ if (obj[key] !== void 0 && obj[key] !== null) {
352
+ result[key] = obj[key];
353
+ }
354
+ }
355
+ return result;
356
+ };
357
+
358
+ // src/Util/tryParse.ts
359
+ var tryParse = (func, value) => {
360
+ try {
361
+ const result = value ? func(value) : null;
362
+ if (!Number.isNaN(result) && result !== null) {
363
+ return result;
364
+ }
365
+ } catch {
366
+ return;
367
+ }
368
+ return;
369
+ };
370
+ var tryParseFloat = (value) => {
371
+ return tryParse(Number.parseFloat, value);
372
+ };
373
+ var tryParseInt = (value) => {
374
+ return tryParse(Number.parseInt, value);
375
+ };
376
+ export {
377
+ Counters,
378
+ DefaultJsonBodyParserOptions,
379
+ DefaultJsonBodyParserOptionsLimit,
380
+ DefaultJsonBodyParserOptionsTypes,
381
+ Profiler,
382
+ asyncHandler,
383
+ compactObject,
384
+ customPoweredByHeader,
385
+ disableCaseSensitiveRouting,
386
+ disableExpressDefaultPoweredByHeader,
387
+ enableCaseSensitiveRouting,
388
+ enableExpressDefaultPoweredByHeader,
389
+ errorToJsonHandler,
390
+ getDefaultLogger,
391
+ getEnvFromAws,
392
+ getHttpHeader,
393
+ getJsonBodyParser,
394
+ getJsonBodyParserOptions,
395
+ getLogger,
396
+ getResponseMetadata,
397
+ jsonBodyParser,
398
+ notImplemented,
399
+ responseProfiler,
400
+ standardErrors,
401
+ standardResponses,
402
+ transformResponse,
403
+ tryParse,
404
+ tryParseFloat,
405
+ tryParseInt,
406
+ useRequestCounters
407
+ };
408
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/AWS/getEnvFromAws.ts","../../src/Handler/asyncHandler.ts","../../src/Handler/errorToJsonHandler.ts","../../src/Handler/StatusCodeHandlers/notImplemented.ts","../../src/HttpUtil/getHttpHeader.ts","../../src/Logger/getLogger.ts","../../src/Logger/LogFormats/LocalDev/logFormatLocalDev.ts","../../src/Logger/LogFormats/Rollbar/logFormatRollbar.ts","../../src/Logger/LogFormats/Structured/logFormatStructured.ts","../../src/Logger/toWinstonVerbosity.ts","../../src/Logger/Transports/Rollbar/canGetDefaultRollbarTransport.ts","../../src/Logger/Transports/Rollbar/getDefaultRollbarTransport.ts","../../src/Logger/Transports/Rollbar/RollbarTransport.ts","../../src/Logger/WrappedWinstonLogger.ts","../../src/Logger/getDefaultLogger.ts","../../src/middleware/caseInsensitiveRouting/caseInsensitiveRouting.ts","../../src/middleware/customPoweredByHeader/customPoweredByHeader.ts","../../src/middleware/jsonBodyParser/jsonBodyParser.ts","../../src/Performance/Counters.ts","../../src/Performance/Profiler.ts","../../src/middleware/metrics/counters.ts","../../src/middleware/metrics/responseProfiler.ts","../../src/middleware/standardResponses/getResponseMetadata.ts","../../src/middleware/standardResponses/standardErrors.ts","../../src/middleware/standardResponses/standardResponses.ts","../../src/Util/compactObject.ts","../../src/Util/tryParse.ts"],"sourcesContent":["import { SecretsManager } from '@aws-sdk/client-secrets-manager'\nimport NodeCache from 'node-cache'\n\nconst region = 'us-east-1'\nconst envCache = new NodeCache({ stdTTL: 3600 * 24 })\n\nexport const getEnvFromAws = async (secretId: string) => {\n const cacheResult = envCache.get<Record<string, string>>(secretId)\n if (cacheResult) {\n return cacheResult\n } else {\n const client = new SecretsManager({ region })\n const awsResult = await client.getSecretValue({ SecretId: secretId })\n console.log(`ENV read from AWS Success [${awsResult?.Name}, ${!!awsResult?.SecretString}, ${!!awsResult?.SecretBinary}]`)\n if (awsResult?.SecretString) {\n const secretObject = JSON.parse(awsResult?.SecretString) as Record<string, string>\n console.log(`ENV read from AWS [${Object.entries(secretObject).length}]`)\n envCache.set(secretId, secretObject)\n return secretObject\n } else {\n throw new Error('Missing SecretString')\n }\n }\n}\n","import type {\n NextFunction, Request, RequestHandler, Response,\n} from 'express'\nimport type { ParamsDictionary, Query } from 'express-serve-static-core'\n\nexport function asyncHandler<P = NoReqParams, ResBody = NoResBody, ReqBody = NoReqBody, ReqQuery = NoReqQuery, Locals extends NoLocals = NoLocals>(\n fn: RequestHandler<P, ResBody, ReqBody, ReqQuery, Locals>,\n) {\n return (req: Request<P, ResBody, ReqBody, ReqQuery, Locals>, res: Response<ResBody, Locals>, next: NextFunction) => {\n return Promise.resolve(fn(req, res, next)).catch(next)\n }\n}\n\nexport interface Empty {}\n\nexport type NoReqParams = ParamsDictionary\nexport type NoResBody = Empty\nexport type NoReqBody = Empty\nexport type NoReqQuery = Query\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type NoLocals = Record<string, any>\n","import type {\n NextFunction, Request, Response,\n} from 'express'\n\nimport type { ExpressError } from '../Model/index.ts'\n\nexport const errorToJsonHandler = (error: ExpressError, req: Request, res: Response, next: NextFunction) => {\n if (error) {\n console.error(error.message)\n if (!error.statusCode) error.statusCode = 500\n res.status(error.statusCode).send({ error: error.message })\n }\n next(error)\n}\n","import type { RequestHandler } from 'express'\nimport { ReasonPhrases, StatusCodes } from 'http-status-codes'\n\nexport const notImplemented: RequestHandler = (_req, _res, next) => {\n next({ message: ReasonPhrases.NOT_IMPLEMENTED, statusCode: StatusCodes.NOT_IMPLEMENTED })\n}\n","import type { Request } from 'express-serve-static-core'\n\n/**\n * Since there can be multiple of certain HTTP headers or\n * to prevent ugliness if someone did send us multiple\n * instances of a header we only expect one of, this\n * method grabs the 1st/only one of the desired header\n * @param header The header to find\n * @param req The received HTTP request (with headers)\n * @returns The first or only occurrence of the specified HTTP header\n */\nexport const getHttpHeader = (header: string, req: Request): string | undefined => {\n const headerValue = req.headers[header]\n const value\n // If the header exists\n = headerValue\n // If there's multiple of the same header\n ? Array.isArray(headerValue)\n // Grab the first one\n ? (headerValue as string[]).shift()\n // Otherwise grab the only one\n : (headerValue as string)\n // Otherwise undefined\n : undefined\n return value\n}\n","import { createLogger, transports as winstonTransports } from 'winston'\nimport type TransportStream from 'winston-transport'\n\nimport { logFormatLocalDev, logFormatStructured } from './LogFormats/index.ts'\nimport type { Logger } from './Logger.ts'\nimport type { LoggerVerbosity } from './LoggerVerbosity.ts'\nimport { toWinstonVerbosity } from './toWinstonVerbosity.ts'\nimport { canGetDefaultRollbarTransport, getDefaultRollbarTransport } from './Transports/index.ts'\nimport type { WinstonVerbosity } from './WinstonVerbosity.ts'\nimport { WrappedWinstonLogger } from './WrappedWinstonLogger.ts'\n\nconst exitOnError = false\nconst handleRejections = true\n\nconst { Console } = winstonTransports\nconst consoleTransport = new Console()\nconst format = process.env.NODE_ENV === 'development' ? logFormatLocalDev : logFormatStructured\nconst transports: TransportStream[] = [consoleTransport]\nif (canGetDefaultRollbarTransport(process.env)) {\n try {\n const rollbarTransport = getDefaultRollbarTransport(process.env)\n transports.push(rollbarTransport)\n } catch {\n // NOTE: No error here, just gracefully adding logger if ENV VARs\n // were preset\n }\n}\n\nconst loggers: Record<WinstonVerbosity, Logger | undefined> = {\n debug: undefined,\n error: undefined,\n http: undefined,\n info: undefined,\n silly: undefined,\n verbose: undefined,\n warn: undefined,\n}\n\nexport const getLogger = (minVerbosity: LoggerVerbosity = 'info'): Logger => {\n const level = toWinstonVerbosity(minVerbosity)\n const existing = loggers[level]\n if (existing) return existing\n const logger = new WrappedWinstonLogger(\n createLogger({\n exitOnError,\n format,\n handleRejections,\n level,\n rejectionHandlers: transports,\n transports,\n }),\n )\n loggers[level] = logger\n return logger\n}\n","import { format } from 'winston'\n\nconst {\n colorize, combine, timestamp, printf,\n} = format\n\nexport const logFormatLocalDev = combine(\n colorize(),\n timestamp(),\n printf(info => `[${info.timestamp} ${info.level}] ${info.message}`),\n)\n","import { format } from 'winston'\n\nconst { simple } = format\n\nexport const logFormatRollbar = simple()\n","import { format } from 'winston'\n\nconst {\n combine, timestamp, json,\n} = format\n\nexport const logFormatStructured = combine(timestamp(), json())\n","import type { LoggerVerbosity } from './LoggerVerbosity.ts'\nimport type { WinstonVerbosity } from './WinstonVerbosity.ts'\n\nexport const toWinstonVerbosity = (loggerVerbosity: LoggerVerbosity): WinstonVerbosity => {\n return loggerVerbosity === 'all' ? 'silly' : loggerVerbosity\n}\n","export const canGetDefaultRollbarTransport = (env: { [key: string]: string | undefined }): boolean => {\n return env.ROLLBAR_ACCESS_TOKEN ? true : false\n}\n","import { assertEx } from '@xylabs/assert'\nimport Rollbar from 'rollbar'\n\nimport { RollbarTransport } from './RollbarTransport.ts'\n\nexport const getDefaultRollbarTransport = (env: { [key: string]: string | undefined }): RollbarTransport => {\n const accessToken = assertEx(env.ROLLBAR_ACCESS_TOKEN, 'Missing ROLLBAR_ACCESS_TOKEN ENV VAR')\n const rollbar: Rollbar = new Rollbar({ accessToken })\n return new RollbarTransport({}, rollbar)\n}\n","import type Rollbar from 'rollbar'\nimport type { TransportStreamOptions } from 'winston-transport'\nimport Transport from 'winston-transport'\n\nimport { logFormatRollbar } from '../../LogFormats'\n\nexport class RollbarTransport extends Transport {\n constructor(\n opts: TransportStreamOptions,\n protected readonly rollbar?: Rollbar,\n ) {\n super({\n ...opts, format: logFormatRollbar, level: 'error',\n })\n }\n\n override log(info: { message?: string }, next: () => void) {\n this.rollbar?.error(info?.message)\n this.emit('logged', info?.message)\n next()\n }\n}\n","import type { Logger as Winston } from 'winston'\n\nimport type { LogFunction, Logger } from './Logger'\n\n/**\n * Wrap Winston logger methods to adapt to familiar\n * console logging methods\n */\nexport class WrappedWinstonLogger implements Logger {\n constructor(protected readonly winston: Winston) {}\n debug: LogFunction = message => this.winston.debug(message)\n error: LogFunction = message => this.winston.error(message)\n info: LogFunction = message => this.winston.info(message)\n log: LogFunction = message => this.winston.info(message)\n warn: LogFunction = message => this.winston.warn(message)\n}\n","import { getLogger } from './getLogger.ts'\nimport type { Logger } from './Logger.ts'\nimport type { WrappedWinstonLogger } from './WrappedWinstonLogger.ts'\n\n/**\n * Static instance to prevent multiple instances of the same logger\n * with the same config\n */\nlet defaultLogger: WrappedWinstonLogger\nexport const getDefaultLogger = (): Logger => {\n if (defaultLogger) return defaultLogger\n return getLogger()\n}\n","import type { Express } from 'express'\n\nconst setting = 'case sensitive routing'\n\n/**\n * Enable case sensitivity. When enabled, \"/Foo\" and \"/foo\" are different\n * routes. When disabled, \"/Foo\" and \"/foo\" are treated the same.\n * @param app The Express app to disable the header on.\n */\nexport const enableCaseSensitiveRouting = (app: Express) => {\n app.enable(setting)\n}\n\n/**\n * Disable case sensitivity. When enabled, \"/Foo\" and \"/foo\" are different\n * routes. When disabled, \"/Foo\" and \"/foo\" are treated the same.\n * @param app The Express app to disable the header on.\n */\nexport const disableCaseSensitiveRouting = (app: Express) => {\n app.disable(setting)\n}\n","import type {\n Express, NextFunction, Request, Response,\n} from 'express'\n\nconst header = 'X-Powered-By'\nconst setting = 'x-powered-by'\n\n/**\n * By default Express appends the `X-Powered-By: Express` header to\n * all responses. Calling this method enables that behavior.\n * @param app The Express app to disable the header on.\n */\nexport const enableExpressDefaultPoweredByHeader = (app: Express) => {\n app.enable(setting)\n}\n\n/**\n * By default Express appends the `X-Powered-By: Express` header to\n * all responses. Calling this method disables that behavior.\n * @param app The Express app to disable the header on.\n */\nexport const disableExpressDefaultPoweredByHeader = (app: Express) => {\n app.disable(setting)\n}\n\nexport const customPoweredByHeader = (req: Request, res: Response, next: NextFunction) => {\n res.setHeader(header, 'XYO')\n next()\n}\n","import type { OptionsJson } from 'body-parser'\nimport bodyParser from 'body-parser'\nimport type { NextHandleFunction } from 'connect'\n\n/**\n * The default maximum request body size for the JSON Body Parser\n */\nexport const DefaultJsonBodyParserOptionsLimit = '100kb'\n\n/**\n * The default MIME types for the JSON Body Parser\n */\nexport const DefaultJsonBodyParserOptionsTypes = ['application/json', 'text/json']\n\n/**\n * The default options for the JSON Body Parser\n */\nexport const DefaultJsonBodyParserOptions: OptionsJson = {\n limit: DefaultJsonBodyParserOptionsLimit,\n type: DefaultJsonBodyParserOptionsTypes,\n}\n\n/**\n * Gets the default JSON Body Parser options merged with the supplied options\n * with the supplied options taking precedence\n * @param options The options to override the default JSON Body Parser options with\n * @returns The combined JSON Body Parser options with the supplied values taking\n * precedence over the default\n */\nexport const getJsonBodyParserOptions = (options?: Partial<OptionsJson>): OptionsJson => {\n return options ? { ...DefaultJsonBodyParserOptions, ...options } : DefaultJsonBodyParserOptions\n}\n\n/**\n * Get a JSON Body Parser connect middleware handler\n * @param options The options for the JSON Body Parser\n * @returns A middleware function that parses JSON bodies\n */\nexport const getJsonBodyParser = (options: OptionsJson = DefaultJsonBodyParserOptions): NextHandleFunction => {\n // Create closed instance of bodyParser to prevent instantiation of new instance on every request\n const parser = bodyParser.json(options)\n\n return (req, res, next) => {\n // If we do not trap this error, then it dumps too much to log, usually happens if request aborted\n try {\n parser(req, res, next)\n } catch (ex) {\n const error = ex as Error\n console.log(`bodyParser failed [${error?.name}]: ${error?.message}`)\n }\n }\n}\n\n/**\n * A JSON Body Parser middleware handler initialized with the default options\n */\nexport const jsonBodyParser = getJsonBodyParser()\n","export class Counters {\n static counters: Record<string, number> = {}\n\n static inc(name: string, count = 1) {\n this.catchError(name, (name: string) => {\n this.counters[name] = (this.counters[name] ?? 0) + count\n })\n }\n\n static max(name: string, count: number) {\n this.catchError(name, (name: string) => {\n const currentValue = this.counters[name]\n if (currentValue === undefined || count > currentValue) {\n this.counters[name] = count\n }\n })\n }\n\n static min(name: string, count: number) {\n this.catchError(name, (name: string) => {\n const currentValue = this.counters[name]\n if (currentValue === undefined || count < currentValue) {\n this.counters[name] = count\n }\n })\n }\n\n private static catchError = (name: string, func: (name: string) => void) => {\n try {\n func(name)\n } catch {\n this.counters[name] = 0\n this.inc('CountersErrors')\n }\n }\n}\n","export class Profiler {\n stats: Record<string, number> = {}\n\n async profile<T>(name: string, promise: Promise<T>) {\n const start = Date.now()\n const result = await promise\n this.stats[name] = Date.now() - start\n return result\n }\n}\n","import type {\n Application, NextFunction, Request, Response,\n} from 'express'\n\nimport { Counters } from '../../Performance/index.ts'\n\nexport const useRequestCounters = (app: Application): void => {\n // Configure Global counters\n app.use((req: Request, res: Response, next: NextFunction) => {\n Counters.inc(req.path)\n Counters.inc('_calls')\n next()\n })\n\n app.get('/stats', (req: Request, res: Response, next: NextFunction) => {\n /* #swagger.tags = ['Metrics'] */\n /* #swagger.summary = 'Get the counters for single instance of diviner' */\n res.json({\n alive: true,\n avgTime: `${((Counters.counters['_totalTime'] ?? 0) / (Counters.counters['_calls'] ?? 1)).toFixed(2)}ms`,\n counters: Counters.counters,\n })\n next()\n })\n}\n","import type {\n NextFunction, Request, Response,\n} from 'express'\n\n/**\n * Connect middleware to enable profiling of response lifecycle timing. To effectively profile\n * the response timing, this middleware needs to be called first when initializing your Express\n * App\n * @example\n * const app = express()\n * app.use(responseProfiler)\n * // other initialization ...\n * @param _req The request\n * @param res The response\n * @param next The next function\n */\nexport const responseProfiler = (_req: Request, res: Response, next: NextFunction) => {\n if (!res.locals?.meta) {\n res.locals.meta = {}\n }\n res.locals.meta.profile = { startTime: Date.now() }\n next()\n}\n","import type { Response } from 'express'\n\nexport const getResponseMetadata = (res: Response): Record<string, unknown> => {\n const meta: Record<string, unknown> = res.locals?.meta || {}\n // NOTE: We should do this somewhere else to better separate concerns\n const profile = res.locals.meta?.profile\n if (profile) {\n const startTime = profile?.startTime\n if (startTime) {\n const endTime = Date.now()\n const duration = endTime - startTime\n res.locals.meta.profile = {\n duration, endTime, startTime,\n }\n }\n }\n return meta\n}\n","import type {\n NextFunction, Request, Response,\n} from 'express'\n\nimport type { ExpressError } from '../../Model/index.ts'\nimport type { ApiError } from './jsonApi/index.ts'\n\nexport const standardErrors = (err: ExpressError, req: Request, res: Response, next: NextFunction) => {\n if (!err) {\n next(err)\n return\n }\n console.error(err.message)\n if (!err.statusCode) err.statusCode = 500\n\n const error: ApiError = {\n detail: err.message,\n status: `${err.statusCode}`,\n title: err.name,\n }\n\n res.status(err.statusCode).json(error)\n\n next(err)\n}\n","import type { Request, Response } from 'express'\nimport mung from 'express-mung'\n\nimport { getResponseMetadata } from './getResponseMetadata.ts'\n\n/**\n * Transforms each response to conform to the standard response format (compatible with JSON API)\n * @param body The original request body\n * @param _req The request\n * @param res The response\n * @returns The transformed response body\n */\nexport const transformResponse = (body: unknown, _req: Request, res: Response) => {\n const meta = getResponseMetadata(res)\n return { data: body, meta }\n}\n\n/**\n * Connect middleware to enable the transform of all responses to match\n * the standard response format (compatible with JSON API)\n */\n\nexport const standardResponses = mung.json(transformResponse, { mungError: false })\n","export const compactObject = <T extends Record<string, unknown>>(obj: T) => {\n const result: Record<string, unknown> = {}\n for (const key in obj) {\n if (obj[key] !== undefined && obj[key] !== null) {\n result[key] = obj[key]\n }\n }\n return result as T\n}\n","export type ParseFunc<T = number> = (value: string) => T\n\nexport const tryParse = <T = number>(func: ParseFunc<T>, value?: string) => {\n try {\n const result = value ? func(value) : null\n if (!Number.isNaN(result) && result !== null) {\n return result\n }\n } catch {\n return\n }\n return\n}\n\nexport const tryParseFloat = (value?: string) => {\n return tryParse(Number.parseFloat, value)\n}\n\nexport const tryParseInt = (value?: string) => {\n return tryParse(Number.parseInt, value)\n}\n"],"mappings":"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","names":["header","format","format","combine","timestamp","format","setting","name"]}
@@ -0,0 +1,14 @@
1
+ import type { Express } from 'express';
2
+ /**
3
+ * Enable case sensitivity. When enabled, "/Foo" and "/foo" are different
4
+ * routes. When disabled, "/Foo" and "/foo" are treated the same.
5
+ * @param app The Express app to disable the header on.
6
+ */
7
+ export declare const enableCaseSensitiveRouting: (app: Express) => void;
8
+ /**
9
+ * Disable case sensitivity. When enabled, "/Foo" and "/foo" are different
10
+ * routes. When disabled, "/Foo" and "/foo" are treated the same.
11
+ * @param app The Express app to disable the header on.
12
+ */
13
+ export declare const disableCaseSensitiveRouting: (app: Express) => void;
14
+ //# sourceMappingURL=caseInsensitiveRouting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caseInsensitiveRouting.d.ts","sourceRoot":"","sources":["../../../../src/middleware/caseInsensitiveRouting/caseInsensitiveRouting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAItC;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,QAAS,OAAO,SAEtD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,QAAS,OAAO,SAEvD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './caseInsensitiveRouting.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/middleware/caseInsensitiveRouting/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA"}
@@ -0,0 +1,15 @@
1
+ import type { Express, NextFunction, Request, Response } from 'express';
2
+ /**
3
+ * By default Express appends the `X-Powered-By: Express` header to
4
+ * all responses. Calling this method enables that behavior.
5
+ * @param app The Express app to disable the header on.
6
+ */
7
+ export declare const enableExpressDefaultPoweredByHeader: (app: Express) => void;
8
+ /**
9
+ * By default Express appends the `X-Powered-By: Express` header to
10
+ * all responses. Calling this method disables that behavior.
11
+ * @param app The Express app to disable the header on.
12
+ */
13
+ export declare const disableExpressDefaultPoweredByHeader: (app: Express) => void;
14
+ export declare const customPoweredByHeader: (req: Request, res: Response, next: NextFunction) => void;
15
+ //# sourceMappingURL=customPoweredByHeader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customPoweredByHeader.d.ts","sourceRoot":"","sources":["../../../../src/middleware/customPoweredByHeader/customPoweredByHeader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EACzC,MAAM,SAAS,CAAA;AAKhB;;;;GAIG;AACH,eAAO,MAAM,mCAAmC,QAAS,OAAO,SAE/D,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,oCAAoC,QAAS,OAAO,SAEhE,CAAA;AAED,eAAO,MAAM,qBAAqB,QAAS,OAAO,OAAO,QAAQ,QAAQ,YAAY,SAGpF,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './customPoweredByHeader.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/middleware/customPoweredByHeader/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA"}
@@ -0,0 +1,6 @@
1
+ export * from './caseInsensitiveRouting/index.ts';
2
+ export * from './customPoweredByHeader/index.ts';
3
+ export * from './jsonBodyParser/index.ts';
4
+ export * from './metrics/index.ts';
5
+ export * from './standardResponses/index.ts';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,cAAc,mCAAmC,CAAA;AACjD,cAAc,kCAAkC,CAAA;AAChD,cAAc,2BAA2B,CAAA;AACzC,cAAc,oBAAoB,CAAA;AAClC,cAAc,8BAA8B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './jsonBodyParser.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/middleware/jsonBodyParser/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA"}
@@ -0,0 +1,33 @@
1
+ import type { OptionsJson } from 'body-parser';
2
+ import type { NextHandleFunction } from 'connect';
3
+ /**
4
+ * The default maximum request body size for the JSON Body Parser
5
+ */
6
+ export declare const DefaultJsonBodyParserOptionsLimit = "100kb";
7
+ /**
8
+ * The default MIME types for the JSON Body Parser
9
+ */
10
+ export declare const DefaultJsonBodyParserOptionsTypes: string[];
11
+ /**
12
+ * The default options for the JSON Body Parser
13
+ */
14
+ export declare const DefaultJsonBodyParserOptions: OptionsJson;
15
+ /**
16
+ * Gets the default JSON Body Parser options merged with the supplied options
17
+ * with the supplied options taking precedence
18
+ * @param options The options to override the default JSON Body Parser options with
19
+ * @returns The combined JSON Body Parser options with the supplied values taking
20
+ * precedence over the default
21
+ */
22
+ export declare const getJsonBodyParserOptions: (options?: Partial<OptionsJson>) => OptionsJson;
23
+ /**
24
+ * Get a JSON Body Parser connect middleware handler
25
+ * @param options The options for the JSON Body Parser
26
+ * @returns A middleware function that parses JSON bodies
27
+ */
28
+ export declare const getJsonBodyParser: (options?: OptionsJson) => NextHandleFunction;
29
+ /**
30
+ * A JSON Body Parser middleware handler initialized with the default options
31
+ */
32
+ export declare const jsonBodyParser: NextHandleFunction;
33
+ //# sourceMappingURL=jsonBodyParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonBodyParser.d.ts","sourceRoot":"","sources":["../../../../src/middleware/jsonBodyParser/jsonBodyParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAEjD;;GAEG;AACH,eAAO,MAAM,iCAAiC,UAAU,CAAA;AAExD;;GAEG;AACH,eAAO,MAAM,iCAAiC,UAAoC,CAAA;AAElF;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,WAG1C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,aAAc,OAAO,CAAC,WAAW,CAAC,KAAG,WAEzE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,aAAa,WAAW,KAAkC,kBAavF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,oBAAsB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { Application } from 'express';
2
+ export declare const useRequestCounters: (app: Application) => void;
3
+ //# sourceMappingURL=counters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counters.d.ts","sourceRoot":"","sources":["../../../../src/middleware/metrics/counters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACZ,MAAM,SAAS,CAAA;AAIhB,eAAO,MAAM,kBAAkB,QAAS,WAAW,KAAG,IAkBrD,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './counters.ts';
2
+ export * from './responseProfiler.ts';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/middleware/metrics/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,15 @@
1
+ import type { NextFunction, Request, Response } from 'express';
2
+ /**
3
+ * Connect middleware to enable profiling of response lifecycle timing. To effectively profile
4
+ * the response timing, this middleware needs to be called first when initializing your Express
5
+ * App
6
+ * @example
7
+ * const app = express()
8
+ * app.use(responseProfiler)
9
+ * // other initialization ...
10
+ * @param _req The request
11
+ * @param res The response
12
+ * @param next The next function
13
+ */
14
+ export declare const responseProfiler: (_req: Request, res: Response, next: NextFunction) => void;
15
+ //# sourceMappingURL=responseProfiler.d.ts.map