apitally 0.1.2 → 0.1.4

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 (183) hide show
  1. package/lib/cjs/common/client.cjs +395 -0
  2. package/lib/cjs/common/client.cjs.map +1 -0
  3. package/lib/cjs/common/index.cjs +13 -0
  4. package/lib/cjs/common/index.cjs.map +1 -0
  5. package/lib/cjs/common/keyRegistry.cjs +162 -0
  6. package/lib/cjs/common/keyRegistry.cjs.map +1 -0
  7. package/lib/cjs/common/logging.cjs +17 -0
  8. package/lib/cjs/common/logging.cjs.map +1 -0
  9. package/lib/cjs/common/requestLogger.cjs +69 -0
  10. package/lib/cjs/common/requestLogger.cjs.map +1 -0
  11. package/lib/cjs/common/types.cjs +6 -0
  12. package/lib/cjs/common/types.cjs.map +1 -0
  13. package/lib/cjs/common/utils.cjs +24 -0
  14. package/lib/cjs/common/utils.cjs.map +1 -0
  15. package/lib/cjs/common/validationErrorLogger.cjs +58 -0
  16. package/lib/cjs/common/validationErrorLogger.cjs.map +1 -0
  17. package/lib/cjs/express/auth.cjs +105 -0
  18. package/lib/cjs/express/auth.cjs.map +1 -0
  19. package/lib/cjs/express/index.cjs +27 -0
  20. package/lib/cjs/express/index.cjs.map +1 -0
  21. package/lib/cjs/express/listEndpoints.cjs +175 -0
  22. package/lib/cjs/express/listEndpoints.cjs.map +1 -0
  23. package/lib/cjs/express/middleware.cjs +167 -0
  24. package/lib/cjs/express/middleware.cjs.map +1 -0
  25. package/lib/cjs/fastify/auth.cjs +105 -0
  26. package/lib/cjs/fastify/auth.cjs.map +1 -0
  27. package/lib/cjs/fastify/index.cjs +28 -0
  28. package/lib/cjs/fastify/index.cjs.map +1 -0
  29. package/lib/cjs/fastify/plugin.cjs +147 -0
  30. package/lib/cjs/fastify/plugin.cjs.map +1 -0
  31. package/lib/cjs/index.cjs +6 -0
  32. package/lib/cjs/index.cjs.map +1 -0
  33. package/lib/cjs/koa/auth.cjs +113 -0
  34. package/lib/cjs/koa/auth.cjs.map +1 -0
  35. package/lib/cjs/koa/index.cjs +27 -0
  36. package/lib/cjs/koa/index.cjs.map +1 -0
  37. package/lib/cjs/koa/middleware.cjs +122 -0
  38. package/lib/cjs/koa/middleware.cjs.map +1 -0
  39. package/lib/cjs/nestjs/auth.cjs +132 -0
  40. package/lib/cjs/nestjs/auth.cjs.map +1 -0
  41. package/lib/cjs/nestjs/index.cjs +39 -0
  42. package/lib/cjs/nestjs/index.cjs.map +1 -0
  43. package/lib/esm/common/client.js +385 -0
  44. package/lib/esm/common/client.js.map +1 -0
  45. package/lib/esm/common/index.js +1 -0
  46. package/lib/esm/common/index.js.map +1 -0
  47. package/lib/esm/common/keyRegistry.js +155 -0
  48. package/lib/esm/common/keyRegistry.js.map +1 -0
  49. package/lib/esm/common/logging.js +11 -0
  50. package/lib/esm/common/logging.js.map +1 -0
  51. package/lib/esm/common/requestLogger.js +63 -0
  52. package/lib/esm/common/requestLogger.js.map +1 -0
  53. package/lib/esm/common/types.js +1 -0
  54. package/lib/esm/common/types.js.map +1 -0
  55. package/lib/esm/common/utils.js +16 -0
  56. package/lib/esm/common/utils.js.map +1 -0
  57. package/lib/esm/common/validationErrorLogger.js +52 -0
  58. package/lib/esm/common/validationErrorLogger.js.map +1 -0
  59. package/lib/esm/express/auth.js +98 -0
  60. package/lib/esm/express/auth.js.map +1 -0
  61. package/lib/esm/express/index.js +4 -0
  62. package/lib/esm/express/index.js.map +1 -0
  63. package/lib/esm/express/listEndpoints.js +168 -0
  64. package/lib/esm/express/listEndpoints.js.map +1 -0
  65. package/lib/esm/express/middleware.js +160 -0
  66. package/lib/esm/express/middleware.js.map +1 -0
  67. package/lib/esm/fastify/auth.js +98 -0
  68. package/lib/esm/fastify/auth.js.map +1 -0
  69. package/lib/esm/fastify/index.js +4 -0
  70. package/lib/esm/fastify/index.js.map +1 -0
  71. package/lib/esm/fastify/plugin.js +140 -0
  72. package/lib/esm/fastify/plugin.js.map +1 -0
  73. package/lib/esm/index.js +1 -0
  74. package/lib/esm/index.js.map +1 -0
  75. package/lib/esm/koa/auth.js +106 -0
  76. package/lib/esm/koa/auth.js.map +1 -0
  77. package/lib/esm/koa/index.js +4 -0
  78. package/lib/esm/koa/index.js.map +1 -0
  79. package/lib/esm/koa/middleware.js +115 -0
  80. package/lib/esm/koa/middleware.js.map +1 -0
  81. package/lib/esm/nestjs/auth.js +126 -0
  82. package/lib/esm/nestjs/auth.js.map +1 -0
  83. package/lib/esm/nestjs/index.js +4 -0
  84. package/lib/esm/nestjs/index.js.map +1 -0
  85. package/{dist/src → lib/types}/common/client.d.ts +7 -6
  86. package/lib/types/common/client.d.ts.map +1 -0
  87. package/lib/types/common/index.d.ts +2 -0
  88. package/{dist/src → lib/types}/common/index.d.ts.map +1 -1
  89. package/{dist/src → lib/types}/common/requestLogger.d.ts +1 -1
  90. package/{dist/src → lib/types}/common/requestLogger.d.ts.map +1 -1
  91. package/{dist/src → lib/types}/common/types.d.ts +2 -2
  92. package/lib/types/common/types.d.ts.map +1 -0
  93. package/{dist/src → lib/types}/common/validationErrorLogger.d.ts +1 -1
  94. package/{dist/src → lib/types}/common/validationErrorLogger.d.ts.map +1 -1
  95. package/{dist/src → lib/types}/express/auth.d.ts +1 -1
  96. package/lib/types/express/auth.d.ts.map +1 -0
  97. package/lib/types/express/index.d.ts +4 -0
  98. package/{dist/src → lib/types}/express/index.d.ts.map +1 -1
  99. package/lib/types/express/listEndpoints.d.ts +3 -0
  100. package/{dist/src → lib/types}/express/middleware.d.ts +3 -3
  101. package/lib/types/express/middleware.d.ts.map +1 -0
  102. package/{dist/src → lib/types}/fastify/auth.d.ts +1 -1
  103. package/lib/types/fastify/auth.d.ts.map +1 -0
  104. package/lib/types/fastify/index.d.ts +4 -0
  105. package/{dist/src → lib/types}/fastify/index.d.ts.map +1 -1
  106. package/lib/types/fastify/plugin.d.ts +15 -0
  107. package/lib/types/fastify/plugin.d.ts.map +1 -0
  108. package/lib/types/koa/index.d.ts +4 -0
  109. package/{dist/src → lib/types}/koa/index.d.ts.map +1 -1
  110. package/{dist/src → lib/types}/koa/middleware.d.ts +1 -1
  111. package/{dist/src → lib/types}/koa/middleware.d.ts.map +1 -1
  112. package/{dist/src → lib/types}/nestjs/auth.d.ts +1 -1
  113. package/{dist/src → lib/types}/nestjs/auth.d.ts.map +1 -1
  114. package/lib/types/nestjs/index.d.ts +4 -0
  115. package/lib/types/nestjs/index.d.ts.map +1 -0
  116. package/package.json +106 -7
  117. package/dist/src/common/client.d.ts.map +0 -1
  118. package/dist/src/common/client.js +0 -244
  119. package/dist/src/common/client.js.map +0 -1
  120. package/dist/src/common/index.d.ts +0 -2
  121. package/dist/src/common/index.js +0 -6
  122. package/dist/src/common/index.js.map +0 -1
  123. package/dist/src/common/keyRegistry.js +0 -90
  124. package/dist/src/common/keyRegistry.js.map +0 -1
  125. package/dist/src/common/logging.js +0 -13
  126. package/dist/src/common/logging.js.map +0 -1
  127. package/dist/src/common/requestLogger.js +0 -49
  128. package/dist/src/common/requestLogger.js.map +0 -1
  129. package/dist/src/common/types.d.ts.map +0 -1
  130. package/dist/src/common/types.js +0 -3
  131. package/dist/src/common/types.js.map +0 -1
  132. package/dist/src/common/utils.js +0 -23
  133. package/dist/src/common/utils.js.map +0 -1
  134. package/dist/src/common/validationErrorLogger.js +0 -40
  135. package/dist/src/common/validationErrorLogger.js.map +0 -1
  136. package/dist/src/express/auth.d.ts.map +0 -1
  137. package/dist/src/express/auth.js +0 -66
  138. package/dist/src/express/auth.js.map +0 -1
  139. package/dist/src/express/index.d.ts +0 -4
  140. package/dist/src/express/index.js +0 -10
  141. package/dist/src/express/index.js.map +0 -1
  142. package/dist/src/express/listEndpoints.d.ts +0 -3
  143. package/dist/src/express/listEndpoints.js +0 -166
  144. package/dist/src/express/listEndpoints.js.map +0 -1
  145. package/dist/src/express/middleware.d.ts.map +0 -1
  146. package/dist/src/express/middleware.js +0 -164
  147. package/dist/src/express/middleware.js.map +0 -1
  148. package/dist/src/fastify/auth.d.ts.map +0 -1
  149. package/dist/src/fastify/auth.js +0 -66
  150. package/dist/src/fastify/auth.js.map +0 -1
  151. package/dist/src/fastify/index.d.ts +0 -4
  152. package/dist/src/fastify/index.js +0 -13
  153. package/dist/src/fastify/index.js.map +0 -1
  154. package/dist/src/fastify/plugin.d.ts +0 -16
  155. package/dist/src/fastify/plugin.d.ts.map +0 -1
  156. package/dist/src/fastify/plugin.js +0 -124
  157. package/dist/src/fastify/plugin.js.map +0 -1
  158. package/dist/src/index.js +0 -3
  159. package/dist/src/index.js.map +0 -1
  160. package/dist/src/koa/auth.js +0 -67
  161. package/dist/src/koa/auth.js.map +0 -1
  162. package/dist/src/koa/index.d.ts +0 -4
  163. package/dist/src/koa/index.js +0 -10
  164. package/dist/src/koa/index.js.map +0 -1
  165. package/dist/src/koa/middleware.js +0 -108
  166. package/dist/src/koa/middleware.js.map +0 -1
  167. package/dist/src/nestjs/auth.js +0 -88
  168. package/dist/src/nestjs/auth.js.map +0 -1
  169. package/dist/src/nestjs/index.d.ts +0 -4
  170. package/dist/src/nestjs/index.d.ts.map +0 -1
  171. package/dist/src/nestjs/index.js +0 -12
  172. package/dist/src/nestjs/index.js.map +0 -1
  173. /package/{dist/src → lib/types}/common/keyRegistry.d.ts +0 -0
  174. /package/{dist/src → lib/types}/common/keyRegistry.d.ts.map +0 -0
  175. /package/{dist/src → lib/types}/common/logging.d.ts +0 -0
  176. /package/{dist/src → lib/types}/common/logging.d.ts.map +0 -0
  177. /package/{dist/src → lib/types}/common/utils.d.ts +0 -0
  178. /package/{dist/src → lib/types}/common/utils.d.ts.map +0 -0
  179. /package/{dist/src → lib/types}/express/listEndpoints.d.ts.map +0 -0
  180. /package/{dist/src → lib/types}/index.d.ts +0 -0
  181. /package/{dist/src → lib/types}/index.d.ts.map +0 -0
  182. /package/{dist/src → lib/types}/koa/auth.d.ts +0 -0
  183. /package/{dist/src → lib/types}/koa/auth.d.ts.map +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requestLogger.js","names":["RequestLogger","_classCallCheck","_defineProperty","requestCounts","Map","responseTimes","_createClass","key","value","getKey","requestInfo","consumer","method","toUpperCase","path","statusCode","join","logRequest","set","get","has","responseTimeMap","responseTimeMsBin","Math","floor","responseTime","getAndResetRequests","_this","data","forEach","count","_key$split","split","_key$split2","_slicedToArray","statusCodeStr","push","status_code","parseInt","request_count","response_times","Object","fromEntries","clear","default"],"sources":["../../../src/common/requestLogger.ts"],"sourcesContent":[null],"mappings":";;;;IAEqBA,aAAa;EAIhC,SAAAA,cAAA;IAAAC,eAAA,OAAAD,aAAA;IAAAE,eAAA;IAAAA,eAAA;IACE,IAAI,CAACC,aAAa,GAAG,IAAIC,GAAG,EAAkB;IAC9C,IAAI,CAACC,aAAa,GAAG,IAAID,GAAG,EAA+B;EAC7D;EAACE,YAAA,CAAAN,aAAA;IAAAO,GAAA;IAAAC,KAAA,EAEO,SAAAC,OAAOC,WAAwB;MACrC,OAAO,CACLA,WAAW,CAACC,QAAQ,IAAI,EAAE,EAC1BD,WAAW,CAACE,MAAM,CAACC,WAAW,EAAE,EAChCH,WAAW,CAACI,IAAI,EAChBJ,WAAW,CAACK,UAAU,CACvB,CAACC,IAAI,CAAC,GAAG,CAAC;IACb;EAAC;IAAAT,GAAA;IAAAC,KAAA,EAED,SAAAS,WAAWP,WAAwB;MACjC,IAAMH,GAAG,GAAG,IAAI,CAACE,MAAM,CAACC,WAAW,CAAC;MAEpC;MACA,IAAI,CAACP,aAAa,CAACe,GAAG,CAACX,GAAG,EAAE,CAAC,IAAI,CAACJ,aAAa,CAACgB,GAAG,CAACZ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;MAEnE;MACA,IAAI,CAAC,IAAI,CAACF,aAAa,CAACe,GAAG,CAACb,GAAG,CAAC,EAAE;QAChC,IAAI,CAACF,aAAa,CAACa,GAAG,CAACX,GAAG,EAAE,IAAIH,GAAG,EAAkB,CAAC;MACxD;MACA,IAAMiB,eAAe,GAAG,IAAI,CAAChB,aAAa,CAACc,GAAG,CAACZ,GAAG,CAAE;MACpD,IAAMe,iBAAiB,GAAGC,IAAI,CAACC,KAAK,CAACd,WAAW,CAACe,YAAY,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;MAC1EJ,eAAe,CAACH,GAAG,CACjBI,iBAAiB,EACjB,CAACD,eAAe,CAACF,GAAG,CAACG,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAClD;IACH;EAAC;IAAAf,GAAA;IAAAC,KAAA,EAED,SAAAkB,oBAAA,EAAmB;MAAA,IAAAC,KAAA;MACjB,IAAMC,IAAI,GAAwB,EAAE;MACpC,IAAI,CAACzB,aAAa,CAAC0B,OAAO,CAAC,UAACC,KAAK,EAAEvB,GAAG,EAAI;QACxC,IAAAwB,UAAA,GAAgDxB,GAAG,CAACyB,KAAK,CAAC,GAAG,CAAC;UAAAC,WAAA,GAAAC,cAAA,CAAAH,UAAA;UAAvDpB,QAAQ,GAAAsB,WAAA;UAAErB,MAAM,GAAAqB,WAAA;UAAEnB,IAAI,GAAAmB,WAAA;UAAEE,aAAa,GAAAF,WAAA;QAC5C,IAAM5B,aAAa,GACjBsB,KAAI,CAACtB,aAAa,CAACc,GAAG,CAACZ,GAAG,CAAC,IAAI,IAAIH,GAAG,EAAkB;QAC1DwB,IAAI,CAACQ,IAAI,CAAC;UACRzB,QAAQ,EAAEA,QAAQ,IAAI,IAAI;UAC1BC,MAAM,EAANA,MAAM;UACNE,IAAI,EAAJA,IAAI;UACJuB,WAAW,EAAEC,QAAQ,CAACH,aAAa,CAAC;UACpCI,aAAa,EAAET,KAAK;UACpBU,cAAc,EAAEC,MAAM,CAACC,WAAW,CAACrC,aAAa;SACjD,CAAC;MACJ,CAAC,CAAC;MAEF;MACA,IAAI,CAACF,aAAa,CAACwC,KAAK,EAAE;MAC1B,IAAI,CAACtC,aAAa,CAACsC,KAAK,EAAE;MAE1B,OAAOf,IAAI;IACb;EAAC;EAAA,OAAA5B,aAAA;AAAA;AAAA,SAzDkBA,aAAa,IAAA4C,OAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/common/types.ts"],"sourcesContent":[null],"mappings":""}
@@ -0,0 +1,16 @@
1
+ export function isValidClientId(clientId) {
2
+ var regexExp = /^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
3
+ return regexExp.test(clientId);
4
+ }
5
+ export function isValidEnv(env) {
6
+ var regexExp = /^[\w-]{1,32}$/;
7
+ return regexExp.test(env);
8
+ }
9
+ export function getPackageVersion(name) {
10
+ try {
11
+ return require("".concat(name, "/package.json")).version || null; // eslint-disable-line @typescript-eslint/no-var-requires
12
+ } catch (error) {
13
+ return null;
14
+ }
15
+ }
16
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":["isValidClientId","clientId","regexExp","test","isValidEnv","env","getPackageVersion","name","require","concat","version","error"],"sources":["../../../src/common/utils.ts"],"sourcesContent":[null],"mappings":"AAAA,OAAM,SAAUA,eAAeA,CAACC,QAAgB;EAC9C,IAAMC,QAAQ,GACZ,0EAA0E;EAC5E,OAAOA,QAAQ,CAACC,IAAI,CAACF,QAAQ,CAAC;AAChC;AAEA,OAAM,SAAUG,UAAUA,CAACC,GAAW;EACpC,IAAMH,QAAQ,GAAG,eAAe;EAChC,OAAOA,QAAQ,CAACC,IAAI,CAACE,GAAG,CAAC;AAC3B;AAEA,OAAM,SAAUC,iBAAiBA,CAACC,IAAY;EAC5C,IAAI;IACF,OAAOC,OAAO,IAAAC,MAAA,CAAIF,IAAI,kBAAe,CAAC,CAACG,OAAO,IAAI,IAAI,CAAC,CAAC;EAC1D,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd,OAAO,IAAI;EACb;AACF"}
@@ -0,0 +1,52 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
3
+ import _createClass from "@babel/runtime/helpers/createClass";
4
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
5
+ var ValidationErrorLogger = /*#__PURE__*/function () {
6
+ function ValidationErrorLogger() {
7
+ _classCallCheck(this, ValidationErrorLogger);
8
+ _defineProperty(this, "errorCounts", void 0);
9
+ this.errorCounts = new Map();
10
+ }
11
+ _createClass(ValidationErrorLogger, [{
12
+ key: "getKey",
13
+ value: function getKey(validationError) {
14
+ return [validationError.consumer || "", validationError.method.toUpperCase(), validationError.path, validationError.loc, validationError.msg, validationError.type].join("|");
15
+ }
16
+ }, {
17
+ key: "logValidationError",
18
+ value: function logValidationError(validationError) {
19
+ var key = this.getKey(validationError);
20
+ this.errorCounts.set(key, (this.errorCounts.get(key) || 0) + 1);
21
+ }
22
+ }, {
23
+ key: "getAndResetValidationErrors",
24
+ value: function getAndResetValidationErrors() {
25
+ var data = [];
26
+ this.errorCounts.forEach(function (count, key) {
27
+ var _key$split = key.split("|"),
28
+ _key$split2 = _slicedToArray(_key$split, 6),
29
+ consumer = _key$split2[0],
30
+ method = _key$split2[1],
31
+ path = _key$split2[2],
32
+ loc = _key$split2[3],
33
+ msg = _key$split2[4],
34
+ type = _key$split2[5];
35
+ data.push({
36
+ consumer: consumer || null,
37
+ method: method,
38
+ path: path,
39
+ loc: loc.split("."),
40
+ msg: msg,
41
+ type: type,
42
+ error_count: count
43
+ });
44
+ });
45
+ this.errorCounts.clear();
46
+ return data;
47
+ }
48
+ }]);
49
+ return ValidationErrorLogger;
50
+ }();
51
+ export { ValidationErrorLogger as default };
52
+ //# sourceMappingURL=validationErrorLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validationErrorLogger.js","names":["ValidationErrorLogger","_classCallCheck","_defineProperty","errorCounts","Map","_createClass","key","value","getKey","validationError","consumer","method","toUpperCase","path","loc","msg","type","join","logValidationError","set","get","getAndResetValidationErrors","data","forEach","count","_key$split","split","_key$split2","_slicedToArray","push","error_count","clear","default"],"sources":["../../../src/common/validationErrorLogger.ts"],"sourcesContent":[null],"mappings":";;;;IAMqBA,qBAAqB;EAGxC,SAAAA,sBAAA;IAAAC,eAAA,OAAAD,qBAAA;IAAAE,eAAA;IACE,IAAI,CAACC,WAAW,GAAG,IAAIC,GAAG,EAAkB;EAC9C;EAACC,YAAA,CAAAL,qBAAA;IAAAM,GAAA;IAAAC,KAAA,EAEO,SAAAC,OAAOC,eAAqD;MAClE,OAAO,CACLA,eAAe,CAACC,QAAQ,IAAI,EAAE,EAC9BD,eAAe,CAACE,MAAM,CAACC,WAAW,EAAE,EACpCH,eAAe,CAACI,IAAI,EACpBJ,eAAe,CAACK,GAAG,EACnBL,eAAe,CAACM,GAAG,EACnBN,eAAe,CAACO,IAAI,CACrB,CAACC,IAAI,CAAC,GAAG,CAAC;IACb;EAAC;IAAAX,GAAA;IAAAC,KAAA,EAEM,SAAAW,mBACLT,eAAqD;MAErD,IAAMH,GAAG,GAAG,IAAI,CAACE,MAAM,CAACC,eAAe,CAAC;MACxC,IAAI,CAACN,WAAW,CAACgB,GAAG,CAACb,GAAG,EAAE,CAAC,IAAI,CAACH,WAAW,CAACiB,GAAG,CAACd,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjE;EAAC;IAAAA,GAAA;IAAAC,KAAA,EAEM,SAAAc,4BAAA,EAA2B;MAChC,IAAMC,IAAI,GAAgC,EAAE;MAC5C,IAAI,CAACnB,WAAW,CAACoB,OAAO,CAAC,UAACC,KAAK,EAAElB,GAAG,EAAI;QACtC,IAAAmB,UAAA,GAAiDnB,GAAG,CAACoB,KAAK,CAAC,GAAG,CAAC;UAAAC,WAAA,GAAAC,cAAA,CAAAH,UAAA;UAAxDf,QAAQ,GAAAiB,WAAA;UAAEhB,MAAM,GAAAgB,WAAA;UAAEd,IAAI,GAAAc,WAAA;UAAEb,GAAG,GAAAa,WAAA;UAAEZ,GAAG,GAAAY,WAAA;UAAEX,IAAI,GAAAW,WAAA;QAC7CL,IAAI,CAACO,IAAI,CAAC;UACRnB,QAAQ,EAAEA,QAAQ,IAAI,IAAI;UAC1BC,MAAM,EAANA,MAAM;UACNE,IAAI,EAAJA,IAAI;UACJC,GAAG,EAAEA,GAAG,CAACY,KAAK,CAAC,GAAG,CAAC;UACnBX,GAAG,EAAHA,GAAG;UACHC,IAAI,EAAJA,IAAI;UACJc,WAAW,EAAEN;SACd,CAAC;MACJ,CAAC,CAAC;MACF,IAAI,CAACrB,WAAW,CAAC4B,KAAK,EAAE;MACxB,OAAOT,IAAI;IACb;EAAC;EAAA,OAAAtB,qBAAA;AAAA;AAAA,SAzCkBA,qBAAqB,IAAAgC,OAAA"}
@@ -0,0 +1,98 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
+ import { ApitallyClient } from "../common/client.js";
4
+ export var requireApiKey = function requireApiKey() {
5
+ var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
6
+ scopes = _ref.scopes,
7
+ customHeader = _ref.customHeader;
8
+ return /*#__PURE__*/function () {
9
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(req, res, next) {
10
+ var apiKey, authorizationParts, customHeaderValue, client, keyInfo;
11
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
12
+ while (1) switch (_context.prev = _context.next) {
13
+ case 0:
14
+ if (customHeader) {
15
+ _context.next = 13;
16
+ break;
17
+ }
18
+ if (req.headers.authorization) {
19
+ _context.next = 4;
20
+ break;
21
+ }
22
+ res.status(401).set("WWW-Authenticate", "ApiKey").json({
23
+ error: "Missing authorization header"
24
+ });
25
+ return _context.abrupt("return");
26
+ case 4:
27
+ authorizationParts = req.headers.authorization.split(" ");
28
+ if (!(authorizationParts.length === 2 && authorizationParts[0].toLowerCase() === "apikey")) {
29
+ _context.next = 9;
30
+ break;
31
+ }
32
+ apiKey = authorizationParts[1];
33
+ _context.next = 11;
34
+ break;
35
+ case 9:
36
+ res.status(401).set("WWW-Authenticate", "ApiKey").json({
37
+ error: "Invalid authorization scheme"
38
+ });
39
+ return _context.abrupt("return");
40
+ case 11:
41
+ _context.next = 14;
42
+ break;
43
+ case 13:
44
+ if (customHeader) {
45
+ customHeaderValue = req.headers[customHeader.toLowerCase()];
46
+ if (typeof customHeaderValue === "string") {
47
+ apiKey = customHeaderValue;
48
+ } else if (Array.isArray(customHeaderValue)) {
49
+ apiKey = customHeaderValue[0];
50
+ }
51
+ }
52
+ case 14:
53
+ if (apiKey) {
54
+ _context.next = 17;
55
+ break;
56
+ }
57
+ res.status(403).json({
58
+ error: "Missing API key"
59
+ });
60
+ return _context.abrupt("return");
61
+ case 17:
62
+ client = ApitallyClient.getInstance();
63
+ _context.next = 20;
64
+ return client.keyRegistry.get(apiKey);
65
+ case 20:
66
+ keyInfo = _context.sent;
67
+ if (keyInfo) {
68
+ _context.next = 24;
69
+ break;
70
+ }
71
+ res.status(403).json({
72
+ error: "Invalid API key"
73
+ });
74
+ return _context.abrupt("return");
75
+ case 24:
76
+ if (!(scopes && !keyInfo.hasScopes(scopes))) {
77
+ _context.next = 27;
78
+ break;
79
+ }
80
+ res.status(403).json({
81
+ error: "Permission denied"
82
+ });
83
+ return _context.abrupt("return");
84
+ case 27:
85
+ req.keyInfo = keyInfo;
86
+ next();
87
+ case 29:
88
+ case "end":
89
+ return _context.stop();
90
+ }
91
+ }, _callee);
92
+ }));
93
+ return function (_x, _x2, _x3) {
94
+ return _ref2.apply(this, arguments);
95
+ };
96
+ }();
97
+ };
98
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","names":["ApitallyClient","requireApiKey","_ref","arguments","length","undefined","scopes","customHeader","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","req","res","next","apiKey","authorizationParts","customHeaderValue","client","keyInfo","wrap","_callee$","_context","prev","headers","authorization","status","set","json","error","abrupt","split","toLowerCase","Array","isArray","getInstance","keyRegistry","get","sent","hasScopes","stop","_x","_x2","_x3","apply"],"sources":["../../../src/express/auth.ts"],"sourcesContent":[null],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { KeyInfo } from "../common/keyRegistry.js";
2
+ export { requireApiKey } from "./auth.js";
3
+ export { useApitally } from "./middleware.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["KeyInfo","requireApiKey","useApitally"],"sources":["../../../src/express/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,OAAO,QAAQ,0BAA0B;AAClD,SAASC,aAAa,QAAQ,WAAW;AACzC,SAASC,WAAW,QAAQ,iBAAiB"}
@@ -0,0 +1,168 @@
1
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ // Adapted from https://github.com/AlbertoFdzM/express-list-endpoints/blob/ed926dd5186761e7b721ad20938ce6eb52d104d3/src/index.js
3
+ var regExpToParseExpressPathRegExp = /^\/\^\\\/(?:(:?[\w\\.-]*(?:\\\/:?[\w\\.-]*)*)|(\(\?:\(\[\^\\\/]\+\?\)\)))\\\/.*/;
4
+ var regExpToReplaceExpressPathRegExpParams = /\(\?:\(\[\^\\\/]\+\?\)\)/;
5
+ var regexpExpressParamRegexp = /\(\?:\(\[\^\\\/]\+\?\)\)/g;
6
+ var EXPRESS_ROOT_PATH_REGEXP_VALUE = "/^\\/?(?=\\/|$)/i";
7
+ var STACK_ITEM_VALID_NAMES = ["router", "bound dispatch", "mounted_app"];
8
+ /**
9
+ * Returns all the verbs detected for the passed route
10
+ */
11
+ var getRouteMethods = function getRouteMethods(route) {
12
+ var methods = Object.keys(route.methods);
13
+ methods = methods.filter(function (method) {
14
+ return method !== "_all";
15
+ });
16
+ methods = methods.map(function (method) {
17
+ return method.toUpperCase();
18
+ });
19
+ return methods;
20
+ };
21
+ /**
22
+ * Returns the names (or anonymous) of all the middlewares attached to the
23
+ * passed route
24
+ * @param {Object} route
25
+ * @returns {string[]}
26
+ */
27
+ var getRouteMiddlewares = function getRouteMiddlewares(route) {
28
+ return route.stack.map(function (item) {
29
+ return item.handle.name || "anonymous";
30
+ });
31
+ };
32
+ /**
33
+ * Returns true if found regexp related with express params
34
+ * @param {string} expressPathRegExp
35
+ * @returns {boolean}
36
+ */
37
+ var hasParams = function hasParams(expressPathRegExp) {
38
+ return regexpExpressParamRegexp.test(expressPathRegExp);
39
+ };
40
+ /**
41
+ * @param {Object} route Express route object to be parsed
42
+ * @param {string} basePath The basePath the route is on
43
+ * @return {Object[]} Endpoints info
44
+ */
45
+ var parseExpressRoute = function parseExpressRoute(route, basePath) {
46
+ var paths = [];
47
+ if (Array.isArray(route.path)) {
48
+ paths.push.apply(paths, _toConsumableArray(route.path));
49
+ } else {
50
+ paths.push(route.path);
51
+ }
52
+ var endpoints = paths.map(function (path) {
53
+ var completePath = basePath && path === "/" ? basePath : "".concat(basePath).concat(path);
54
+ var endpoint = {
55
+ path: completePath,
56
+ methods: getRouteMethods(route),
57
+ middlewares: getRouteMiddlewares(route)
58
+ };
59
+ return endpoint;
60
+ });
61
+ return endpoints;
62
+ };
63
+ /**
64
+ * @param {RegExp} expressPathRegExp
65
+ * @param {Object[]} params
66
+ * @returns {string}
67
+ */
68
+ var parseExpressPath = function parseExpressPath(expressPathRegExp, params) {
69
+ var expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(expressPathRegExp);
70
+ var parsedRegExp = expressPathRegExp.toString();
71
+ var paramIndex = 0;
72
+ while (hasParams(parsedRegExp)) {
73
+ var paramName = params[paramIndex].name;
74
+ var paramId = ":".concat(paramName);
75
+ parsedRegExp = parsedRegExp.replace(regExpToReplaceExpressPathRegExpParams, paramId);
76
+ paramIndex++;
77
+ }
78
+ if (parsedRegExp !== expressPathRegExp.toString()) {
79
+ expressPathRegExpExec = regExpToParseExpressPathRegExp.exec(parsedRegExp);
80
+ }
81
+ var parsedPath = expressPathRegExpExec[1].replace(/\\\//g, "/");
82
+ return parsedPath;
83
+ };
84
+ /**
85
+ * @param {Object} app
86
+ * @param {string} [basePath]
87
+ * @param {Object[]} [endpoints]
88
+ * @returns {Object[]}
89
+ */
90
+ var parseEndpoints = function parseEndpoints(app, basePath, endpoints) {
91
+ var stack = app.stack || app._router && app._router.stack;
92
+ endpoints = endpoints || [];
93
+ basePath = basePath || "";
94
+ if (!stack) {
95
+ endpoints = addEndpoints(endpoints, [{
96
+ path: basePath,
97
+ methods: [],
98
+ middlewares: []
99
+ }]);
100
+ } else {
101
+ endpoints = parseStack(stack, basePath, endpoints);
102
+ }
103
+ return endpoints;
104
+ };
105
+ /**
106
+ * Ensures the path of the new endpoints isn't yet in the array.
107
+ * If the path is already in the array merges the endpoints with the existing
108
+ * one, if not, it adds them to the array.
109
+ *
110
+ * @param {Object[]} currentEndpoints Array of current endpoints
111
+ * @param {Object[]} endpointsToAdd New endpoints to be added to the array
112
+ * @returns {Object[]} Updated endpoints array
113
+ */
114
+ var addEndpoints = function addEndpoints(currentEndpoints, endpointsToAdd) {
115
+ endpointsToAdd.forEach(function (newEndpoint) {
116
+ var existingEndpoint = currentEndpoints.find(function (item) {
117
+ return item.path === newEndpoint.path;
118
+ });
119
+ if (existingEndpoint !== undefined) {
120
+ var newMethods = newEndpoint.methods.filter(function (method) {
121
+ return !existingEndpoint.methods.includes(method);
122
+ });
123
+ existingEndpoint.methods = existingEndpoint.methods.concat(newMethods);
124
+ } else {
125
+ currentEndpoints.push(newEndpoint);
126
+ }
127
+ });
128
+ return currentEndpoints;
129
+ };
130
+ /**
131
+ * @param {Object} stack
132
+ * @param {string} basePath
133
+ * @param {Object[]} endpoints
134
+ * @returns {Object[]}
135
+ */
136
+ var parseStack = function parseStack(stack, basePath, endpoints) {
137
+ stack.forEach(function (stackItem) {
138
+ if (stackItem.route) {
139
+ var newEndpoints = parseExpressRoute(stackItem.route, basePath);
140
+ endpoints = addEndpoints(endpoints, newEndpoints);
141
+ } else if (STACK_ITEM_VALID_NAMES.includes(stackItem.name)) {
142
+ var isExpressPathRegexp = regExpToParseExpressPathRegExp.test(stackItem.regexp);
143
+ var newBasePath = basePath;
144
+ if (isExpressPathRegexp) {
145
+ var parsedPath = parseExpressPath(stackItem.regexp, stackItem.keys);
146
+ newBasePath += "/".concat(parsedPath);
147
+ } else if (!stackItem.path && stackItem.regexp && stackItem.regexp.toString() !== EXPRESS_ROOT_PATH_REGEXP_VALUE) {
148
+ var regExpPath = " RegExp(".concat(stackItem.regexp, ") ");
149
+ newBasePath += "/".concat(regExpPath);
150
+ }
151
+ endpoints = parseEndpoints(stackItem.handle, newBasePath, endpoints);
152
+ }
153
+ });
154
+ return endpoints;
155
+ };
156
+ var getEndpoints = function getEndpoints(app) {
157
+ var endpoints = parseEndpoints(app);
158
+ return endpoints.flatMap(function (route) {
159
+ return route.methods.map(function (method) {
160
+ return {
161
+ method: method,
162
+ path: route.path
163
+ };
164
+ });
165
+ });
166
+ };
167
+ export default getEndpoints;
168
+ //# sourceMappingURL=listEndpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listEndpoints.js","names":["regExpToParseExpressPathRegExp","regExpToReplaceExpressPathRegExpParams","regexpExpressParamRegexp","EXPRESS_ROOT_PATH_REGEXP_VALUE","STACK_ITEM_VALID_NAMES","getRouteMethods","route","methods","Object","keys","filter","method","map","toUpperCase","getRouteMiddlewares","stack","item","handle","name","hasParams","expressPathRegExp","test","parseExpressRoute","basePath","paths","Array","isArray","path","push","apply","_toConsumableArray","endpoints","completePath","concat","endpoint","middlewares","parseExpressPath","params","expressPathRegExpExec","exec","parsedRegExp","toString","paramIndex","paramName","paramId","replace","parsedPath","parseEndpoints","app","_router","addEndpoints","parseStack","currentEndpoints","endpointsToAdd","forEach","newEndpoint","existingEndpoint","find","undefined","newMethods","includes","stackItem","newEndpoints","isExpressPathRegexp","regexp","newBasePath","regExpPath","getEndpoints","flatMap"],"sources":["../../../src/express/listEndpoints.js"],"sourcesContent":[null],"mappings":"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"}
@@ -0,0 +1,160 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ import { performance } from "perf_hooks";
6
+ import { ApitallyClient } from "../common/client.js";
7
+ import { KeyInfo } from "../common/keyRegistry.js";
8
+ import { getPackageVersion } from "../common/utils.js";
9
+ import listEndpoints from "./listEndpoints.js";
10
+ export var useApitally = function useApitally(app, config) {
11
+ var client = new ApitallyClient(config);
12
+ var middleware = getMiddleware(client);
13
+ app.use(middleware);
14
+ setTimeout(function () {
15
+ client.setAppInfo(getAppInfo(app, config.appVersion));
16
+ }, 100);
17
+ };
18
+ var getMiddleware = function getMiddleware(client) {
19
+ var validatorInstalled = getPackageVersion("express-validator") !== null;
20
+ var celebrateInstalled = getPackageVersion("celebrate") !== null;
21
+ var nestInstalled = getPackageVersion("@nestjs/core") !== null;
22
+ var classValidatorInstalled = getPackageVersion("class-validator") !== null;
23
+ return function (req, res, next) {
24
+ try {
25
+ var startTime = performance.now();
26
+ var originalJson = res.json;
27
+ res.json = function (body) {
28
+ res.locals.body = body;
29
+ return originalJson.call(res, body);
30
+ };
31
+ res.on("finish", function () {
32
+ try {
33
+ if (req.route) {
34
+ var responseTime = performance.now() - startTime;
35
+ client.requestLogger.logRequest({
36
+ consumer: getConsumer(req),
37
+ method: req.method,
38
+ path: req.route.path,
39
+ statusCode: res.statusCode,
40
+ responseTime: responseTime
41
+ });
42
+ if ((res.statusCode === 400 || res.statusCode === 422) && res.locals.body) {
43
+ var validationErrors = [];
44
+ if (validatorInstalled) {
45
+ validationErrors.push.apply(validationErrors, _toConsumableArray(extractExpressValidatorErrors(res.locals.body)));
46
+ }
47
+ if (celebrateInstalled) {
48
+ validationErrors.push.apply(validationErrors, _toConsumableArray(extractCelebrateErrors(res.locals.body)));
49
+ }
50
+ if (nestInstalled && classValidatorInstalled) {
51
+ validationErrors.push.apply(validationErrors, _toConsumableArray(extractNestValidationErrors(res.locals.body)));
52
+ }
53
+ validationErrors.forEach(function (error) {
54
+ client.validationErrorLogger.logValidationError(_objectSpread({
55
+ consumer: getConsumer(req),
56
+ method: req.method,
57
+ path: req.route.path
58
+ }, error));
59
+ });
60
+ }
61
+ }
62
+ } catch (error) {
63
+ client.logger.error("Error while logging request in Apitally middleware.", {
64
+ request: req,
65
+ response: res,
66
+ error: error
67
+ });
68
+ }
69
+ });
70
+ } catch (error) {
71
+ client.logger.error("Error in Apitally middleware.", {
72
+ request: req,
73
+ response: res,
74
+ error: error
75
+ });
76
+ } finally {
77
+ next();
78
+ }
79
+ };
80
+ };
81
+ var getConsumer = function getConsumer(req) {
82
+ if (req.consumerIdentifier) {
83
+ return String(req.consumerIdentifier);
84
+ }
85
+ if (req.keyInfo && req.keyInfo instanceof KeyInfo) {
86
+ return "key:".concat(req.keyInfo.keyId);
87
+ }
88
+ return null;
89
+ };
90
+ var extractExpressValidatorErrors = function extractExpressValidatorErrors(responseBody) {
91
+ var errors = [];
92
+ if (responseBody && responseBody.errors && Array.isArray(responseBody.errors)) {
93
+ responseBody.errors.forEach(function (error) {
94
+ if (error.location && error.path && error.msg && error.type) {
95
+ errors.push({
96
+ loc: "".concat(error.location, ".").concat(error.path),
97
+ msg: error.msg,
98
+ type: error.type
99
+ });
100
+ }
101
+ });
102
+ }
103
+ return errors;
104
+ };
105
+ var extractCelebrateErrors = function extractCelebrateErrors(responseBody) {
106
+ var errors = [];
107
+ if (responseBody && responseBody.validation) {
108
+ Object.values(responseBody.validation).forEach(function (error) {
109
+ if (error.source && error.keys && Array.isArray(error.keys) && error.message) {
110
+ error.keys.forEach(function (key) {
111
+ errors.push({
112
+ loc: "".concat(error.source, ".").concat(key),
113
+ msg: subsetJoiMessage(error.message, key),
114
+ type: ""
115
+ });
116
+ });
117
+ }
118
+ });
119
+ }
120
+ return errors;
121
+ };
122
+ var extractNestValidationErrors = function extractNestValidationErrors(responseBody) {
123
+ var errors = [];
124
+ if (responseBody && Array.isArray(responseBody.message)) {
125
+ responseBody.message.forEach(function (message) {
126
+ errors.push({
127
+ loc: "",
128
+ msg: message,
129
+ type: ""
130
+ });
131
+ });
132
+ }
133
+ return errors;
134
+ };
135
+ var subsetJoiMessage = function subsetJoiMessage(message, key) {
136
+ var messageWithKey = message.split(". ").find(function (message) {
137
+ return message.includes("\"".concat(key, "\""));
138
+ });
139
+ return messageWithKey ? messageWithKey : message;
140
+ };
141
+ var getAppInfo = function getAppInfo(app, appVersion) {
142
+ var versions = [["nodejs", process.version]];
143
+ var expressVersion = getPackageVersion("express");
144
+ var apitallyVersion = getPackageVersion("../..");
145
+ if (expressVersion) {
146
+ versions.push(["express", expressVersion]);
147
+ }
148
+ if (apitallyVersion) {
149
+ versions.push(["apitally", apitallyVersion]);
150
+ }
151
+ if (appVersion) {
152
+ versions.push(["app", appVersion]);
153
+ }
154
+ return {
155
+ paths: listEndpoints(app),
156
+ versions: new Map(versions),
157
+ client: "js:express"
158
+ };
159
+ };
160
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","names":["performance","ApitallyClient","KeyInfo","getPackageVersion","listEndpoints","useApitally","app","config","client","middleware","getMiddleware","use","setTimeout","setAppInfo","getAppInfo","appVersion","validatorInstalled","celebrateInstalled","nestInstalled","classValidatorInstalled","req","res","next","startTime","now","originalJson","json","body","locals","call","on","route","responseTime","requestLogger","logRequest","consumer","getConsumer","method","path","statusCode","validationErrors","push","apply","_toConsumableArray","extractExpressValidatorErrors","extractCelebrateErrors","extractNestValidationErrors","forEach","error","validationErrorLogger","logValidationError","_objectSpread","logger","request","response","consumerIdentifier","String","keyInfo","concat","keyId","responseBody","errors","Array","isArray","location","msg","type","loc","validation","Object","values","source","keys","message","key","subsetJoiMessage","messageWithKey","split","find","includes","versions","process","version","expressVersion","apitallyVersion","paths","Map"],"sources":["../../../src/express/middleware.ts"],"sourcesContent":[null],"mappings":"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"}