apitally 0.18.1 → 0.20.0

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 (205) hide show
  1. package/README.md +71 -44
  2. package/dist/adonisjs/configure.cjs +2 -2
  3. package/dist/adonisjs/configure.cjs.map +1 -1
  4. package/dist/adonisjs/configure.js.map +1 -1
  5. package/dist/adonisjs/index.cjs +2 -2
  6. package/dist/adonisjs/index.cjs.map +1 -1
  7. package/dist/adonisjs/index.d.cts +2 -2
  8. package/dist/adonisjs/index.d.ts +2 -2
  9. package/dist/adonisjs/index.js.map +1 -1
  10. package/dist/adonisjs/middleware.cjs +107 -84
  11. package/dist/adonisjs/middleware.cjs.map +1 -1
  12. package/dist/adonisjs/middleware.d.cts +2 -2
  13. package/dist/adonisjs/middleware.d.ts +2 -2
  14. package/dist/adonisjs/middleware.js +106 -83
  15. package/dist/adonisjs/middleware.js.map +1 -1
  16. package/dist/adonisjs/provider.cjs +4765 -62
  17. package/dist/adonisjs/provider.cjs.map +1 -1
  18. package/dist/adonisjs/provider.d.cts +7 -4
  19. package/dist/adonisjs/provider.d.ts +7 -4
  20. package/dist/adonisjs/provider.js +4743 -17
  21. package/dist/adonisjs/provider.js.map +1 -1
  22. package/dist/common/client.cjs +64 -42
  23. package/dist/common/client.cjs.map +1 -1
  24. package/dist/common/client.d.cts +2 -2
  25. package/dist/common/client.d.ts +2 -2
  26. package/dist/common/client.js +33 -11
  27. package/dist/common/client.js.map +1 -1
  28. package/dist/common/consumerRegistry.d.cts +2 -2
  29. package/dist/common/consumerRegistry.d.ts +2 -2
  30. package/dist/common/headers.cjs.map +1 -1
  31. package/dist/common/headers.d.cts +1 -1
  32. package/dist/common/headers.d.ts +1 -1
  33. package/dist/common/headers.js.map +1 -1
  34. package/dist/common/logging.cjs +3 -2
  35. package/dist/common/logging.cjs.map +1 -1
  36. package/dist/common/logging.d.cts +1 -1
  37. package/dist/common/logging.d.ts +1 -1
  38. package/dist/common/logging.js +3 -2
  39. package/dist/common/logging.js.map +1 -1
  40. package/dist/common/packageVersions.cjs +2 -2
  41. package/dist/common/packageVersions.cjs.map +1 -1
  42. package/dist/common/packageVersions.js.map +1 -1
  43. package/dist/common/requestCounter.d.cts +2 -2
  44. package/dist/common/requestCounter.d.ts +2 -2
  45. package/dist/common/requestLogger.cjs +57 -33
  46. package/dist/common/requestLogger.cjs.map +1 -1
  47. package/dist/common/requestLogger.d.cts +12 -5
  48. package/dist/common/requestLogger.d.ts +12 -5
  49. package/dist/common/requestLogger.js +30 -6
  50. package/dist/common/requestLogger.js.map +1 -1
  51. package/dist/common/response.cjs +12 -6
  52. package/dist/common/response.cjs.map +1 -1
  53. package/dist/common/response.d.cts +3 -3
  54. package/dist/common/response.d.ts +3 -3
  55. package/dist/common/response.js +12 -6
  56. package/dist/common/response.js.map +1 -1
  57. package/dist/common/serverErrorCounter.cjs +3 -2
  58. package/dist/common/serverErrorCounter.cjs.map +1 -1
  59. package/dist/common/serverErrorCounter.d.cts +2 -2
  60. package/dist/common/serverErrorCounter.d.ts +2 -2
  61. package/dist/common/serverErrorCounter.js +1 -0
  62. package/dist/common/serverErrorCounter.js.map +1 -1
  63. package/dist/common/tempGzipFile.cjs +15 -14
  64. package/dist/common/tempGzipFile.cjs.map +1 -1
  65. package/dist/common/tempGzipFile.d.cts +1 -1
  66. package/dist/common/tempGzipFile.d.ts +1 -1
  67. package/dist/common/tempGzipFile.js +3 -2
  68. package/dist/common/tempGzipFile.js.map +1 -1
  69. package/dist/common/types.d.cts +2 -2
  70. package/dist/common/types.d.ts +2 -2
  71. package/dist/common/validationErrorCounter.cjs +4 -4
  72. package/dist/common/validationErrorCounter.cjs.map +1 -1
  73. package/dist/common/validationErrorCounter.d.cts +2 -2
  74. package/dist/common/validationErrorCounter.d.ts +2 -2
  75. package/dist/common/validationErrorCounter.js +2 -2
  76. package/dist/common/validationErrorCounter.js.map +1 -1
  77. package/dist/elysia/index.cjs +1582 -0
  78. package/dist/elysia/index.cjs.map +1 -0
  79. package/dist/elysia/index.d.cts +9 -0
  80. package/dist/elysia/index.d.ts +9 -0
  81. package/dist/elysia/index.js +1552 -0
  82. package/dist/elysia/index.js.map +1 -0
  83. package/dist/elysia/plugin.cjs +1576 -0
  84. package/dist/elysia/plugin.cjs.map +1 -0
  85. package/dist/elysia/plugin.d.cts +53 -0
  86. package/dist/elysia/plugin.d.ts +53 -0
  87. package/dist/elysia/plugin.js +1552 -0
  88. package/dist/elysia/plugin.js.map +1 -0
  89. package/dist/elysia/utils.cjs +98 -0
  90. package/dist/elysia/utils.cjs.map +1 -0
  91. package/dist/elysia/utils.d.cts +12 -0
  92. package/dist/elysia/utils.d.ts +12 -0
  93. package/dist/elysia/utils.js +78 -0
  94. package/dist/elysia/utils.js.map +1 -0
  95. package/dist/express/index.cjs +4997 -169
  96. package/dist/express/index.cjs.map +1 -1
  97. package/dist/express/index.d.cts +2 -2
  98. package/dist/express/index.d.ts +2 -2
  99. package/dist/express/index.js +4969 -120
  100. package/dist/express/index.js.map +1 -1
  101. package/dist/express/middleware.cjs +4997 -169
  102. package/dist/express/middleware.cjs.map +1 -1
  103. package/dist/express/middleware.d.cts +2 -2
  104. package/dist/express/middleware.d.ts +2 -2
  105. package/dist/express/middleware.js +4969 -120
  106. package/dist/express/middleware.js.map +1 -1
  107. package/dist/fastify/index.cjs +4926 -72
  108. package/dist/fastify/index.cjs.map +1 -1
  109. package/dist/fastify/index.d.cts +3 -2
  110. package/dist/fastify/index.d.ts +3 -2
  111. package/dist/fastify/index.js +4899 -24
  112. package/dist/fastify/index.js.map +1 -1
  113. package/dist/fastify/plugin.cjs +4926 -72
  114. package/dist/fastify/plugin.cjs.map +1 -1
  115. package/dist/fastify/plugin.d.cts +8 -3
  116. package/dist/fastify/plugin.d.ts +8 -3
  117. package/dist/fastify/plugin.js +4899 -24
  118. package/dist/fastify/plugin.js.map +1 -1
  119. package/dist/h3/index.cjs +235 -57
  120. package/dist/h3/index.cjs.map +1 -1
  121. package/dist/h3/index.d.cts +2 -2
  122. package/dist/h3/index.d.ts +2 -2
  123. package/dist/h3/index.js +200 -22
  124. package/dist/h3/index.js.map +1 -1
  125. package/dist/h3/plugin.cjs +235 -57
  126. package/dist/h3/plugin.cjs.map +1 -1
  127. package/dist/h3/plugin.d.cts +6 -4
  128. package/dist/h3/plugin.d.ts +6 -4
  129. package/dist/h3/plugin.js +200 -22
  130. package/dist/h3/plugin.js.map +1 -1
  131. package/dist/h3/utils.cjs +2 -2
  132. package/dist/h3/utils.cjs.map +1 -1
  133. package/dist/h3/utils.js.map +1 -1
  134. package/dist/hono/index.cjs +295 -118
  135. package/dist/hono/index.cjs.map +1 -1
  136. package/dist/hono/index.d.cts +2 -2
  137. package/dist/hono/index.d.ts +2 -2
  138. package/dist/hono/index.js +261 -84
  139. package/dist/hono/index.js.map +1 -1
  140. package/dist/hono/middleware.cjs +295 -118
  141. package/dist/hono/middleware.cjs.map +1 -1
  142. package/dist/hono/middleware.d.cts +2 -2
  143. package/dist/hono/middleware.d.ts +2 -2
  144. package/dist/hono/middleware.js +261 -84
  145. package/dist/hono/middleware.js.map +1 -1
  146. package/dist/hono/utils.cjs +2 -2
  147. package/dist/hono/utils.cjs.map +1 -1
  148. package/dist/hono/utils.d.cts +2 -2
  149. package/dist/hono/utils.d.ts +2 -2
  150. package/dist/hono/utils.js.map +1 -1
  151. package/dist/koa/index.cjs +280 -107
  152. package/dist/koa/index.cjs.map +1 -1
  153. package/dist/koa/index.d.cts +2 -2
  154. package/dist/koa/index.d.ts +2 -2
  155. package/dist/koa/index.js +244 -71
  156. package/dist/koa/index.js.map +1 -1
  157. package/dist/koa/middleware.cjs +278 -107
  158. package/dist/koa/middleware.cjs.map +1 -1
  159. package/dist/koa/middleware.d.cts +2 -2
  160. package/dist/koa/middleware.d.ts +2 -2
  161. package/dist/koa/middleware.js +244 -71
  162. package/dist/koa/middleware.js.map +1 -1
  163. package/dist/loggers/console.cjs +69 -0
  164. package/dist/loggers/console.cjs.map +1 -0
  165. package/dist/loggers/console.d.cts +9 -0
  166. package/dist/loggers/console.d.ts +9 -0
  167. package/dist/loggers/console.js +46 -0
  168. package/dist/loggers/console.js.map +1 -0
  169. package/dist/loggers/index.cjs +4837 -0
  170. package/dist/loggers/index.cjs.map +1 -0
  171. package/dist/loggers/index.d.cts +9 -0
  172. package/dist/loggers/index.d.ts +9 -0
  173. package/dist/loggers/index.js +4826 -0
  174. package/dist/loggers/index.js.map +1 -0
  175. package/dist/loggers/nestjs.cjs +135 -0
  176. package/dist/loggers/nestjs.cjs.map +1 -0
  177. package/dist/loggers/nestjs.d.cts +9 -0
  178. package/dist/loggers/nestjs.d.ts +9 -0
  179. package/dist/loggers/nestjs.js +100 -0
  180. package/dist/loggers/nestjs.js.map +1 -0
  181. package/dist/loggers/pino.cjs +4669 -0
  182. package/dist/loggers/pino.cjs.map +1 -0
  183. package/dist/loggers/pino.d.cts +9 -0
  184. package/dist/loggers/pino.d.ts +9 -0
  185. package/dist/loggers/pino.js +4661 -0
  186. package/dist/loggers/pino.js.map +1 -0
  187. package/dist/loggers/utils.cjs +66 -0
  188. package/dist/loggers/utils.cjs.map +1 -0
  189. package/dist/loggers/utils.d.cts +6 -0
  190. package/dist/loggers/utils.d.ts +6 -0
  191. package/dist/loggers/utils.js +42 -0
  192. package/dist/loggers/utils.js.map +1 -0
  193. package/dist/loggers/winston.cjs +135 -0
  194. package/dist/loggers/winston.cjs.map +1 -0
  195. package/dist/loggers/winston.d.cts +9 -0
  196. package/dist/loggers/winston.d.ts +9 -0
  197. package/dist/loggers/winston.js +100 -0
  198. package/dist/loggers/winston.js.map +1 -0
  199. package/dist/nestjs/index.cjs +5448 -542
  200. package/dist/nestjs/index.cjs.map +1 -1
  201. package/dist/nestjs/index.d.cts +2 -2
  202. package/dist/nestjs/index.d.ts +2 -2
  203. package/dist/nestjs/index.js +5364 -460
  204. package/dist/nestjs/index.js.map +1 -1
  205. package/package.json +26 -4
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/loggers/utils.ts
22
+ var utils_exports = {};
23
+ __export(utils_exports, {
24
+ formatMessage: () => formatMessage,
25
+ removeKeys: () => removeKeys
26
+ });
27
+ module.exports = __toCommonJS(utils_exports);
28
+ var import_node_util = require("util");
29
+ function formatMessage(message, ...args) {
30
+ return [
31
+ message,
32
+ ...args
33
+ ].map(formatArg).filter((arg) => arg !== "").join("\n");
34
+ }
35
+ __name(formatMessage, "formatMessage");
36
+ function removeKeys(obj, keys) {
37
+ return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
38
+ }
39
+ __name(removeKeys, "removeKeys");
40
+ function formatArg(arg) {
41
+ if (typeof arg === "string") {
42
+ return arg.trim();
43
+ }
44
+ if (arg instanceof Error) {
45
+ return (0, import_node_util.format)(arg).trim();
46
+ }
47
+ if (arg === void 0 || arg === null || isEmptyObject(arg)) {
48
+ return "";
49
+ }
50
+ try {
51
+ return JSON.stringify(arg);
52
+ } catch {
53
+ return (0, import_node_util.format)(arg).trim();
54
+ }
55
+ }
56
+ __name(formatArg, "formatArg");
57
+ function isEmptyObject(obj) {
58
+ return obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
59
+ }
60
+ __name(isEmptyObject, "isEmptyObject");
61
+ // Annotate the CommonJS export names for ESM import in node:
62
+ 0 && (module.exports = {
63
+ formatMessage,
64
+ removeKeys
65
+ });
66
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/loggers/utils.ts"],"sourcesContent":["import { format } from \"node:util\";\n\nexport function formatMessage(message: any, ...args: any[]) {\n return [message, ...args]\n .map(formatArg)\n .filter((arg) => arg !== \"\")\n .join(\"\\n\");\n}\n\nexport function removeKeys(obj: any, keys: string[]) {\n return Object.fromEntries(\n Object.entries(obj).filter(([key]) => !keys.includes(key)),\n );\n}\n\nfunction formatArg(arg: any) {\n if (typeof arg === \"string\") {\n return arg.trim();\n }\n if (arg instanceof Error) {\n return format(arg).trim();\n }\n if (arg === undefined || arg === null || isEmptyObject(arg)) {\n return \"\";\n }\n try {\n return JSON.stringify(arg);\n } catch {\n return format(arg).trim();\n }\n}\n\nfunction isEmptyObject(obj: any) {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n Object.getPrototypeOf(obj) === Object.prototype &&\n Object.keys(obj).length === 0\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;uBAAuB;AAEhB,SAASA,cAAcC,YAAiBC,MAAW;AACxD,SAAO;IAACD;OAAYC;IACjBC,IAAIC,SAAAA,EACJC,OAAO,CAACC,QAAQA,QAAQ,EAAA,EACxBC,KAAK,IAAA;AACV;AALgBP;AAOT,SAASQ,WAAWC,KAAUC,MAAc;AACjD,SAAOC,OAAOC,YACZD,OAAOE,QAAQJ,GAAAA,EAAKJ,OAAO,CAAC,CAACS,GAAAA,MAAS,CAACJ,KAAKK,SAASD,GAAAA,CAAAA,CAAAA;AAEzD;AAJgBN;AAMhB,SAASJ,UAAUE,KAAQ;AACzB,MAAI,OAAOA,QAAQ,UAAU;AAC3B,WAAOA,IAAIU,KAAI;EACjB;AACA,MAAIV,eAAeW,OAAO;AACxB,eAAOC,yBAAOZ,GAAAA,EAAKU,KAAI;EACzB;AACA,MAAIV,QAAQa,UAAab,QAAQ,QAAQc,cAAcd,GAAAA,GAAM;AAC3D,WAAO;EACT;AACA,MAAI;AACF,WAAOe,KAAKC,UAAUhB,GAAAA;EACxB,QAAQ;AACN,eAAOY,yBAAOZ,GAAAA,EAAKU,KAAI;EACzB;AACF;AAfSZ;AAiBT,SAASgB,cAAcX,KAAQ;AAC7B,SACEA,QAAQ,QACR,OAAOA,QAAQ,YACfE,OAAOY,eAAed,GAAAA,MAASE,OAAOa,aACtCb,OAAOD,KAAKD,GAAAA,EAAKgB,WAAW;AAEhC;AAPSL;","names":["formatMessage","message","args","map","formatArg","filter","arg","join","removeKeys","obj","keys","Object","fromEntries","entries","key","includes","trim","Error","format","undefined","isEmptyObject","JSON","stringify","getPrototypeOf","prototype","length"]}
@@ -0,0 +1,6 @@
1
+ declare function formatMessage(message: any, ...args: any[]): string;
2
+ declare function removeKeys(obj: any, keys: string[]): {
3
+ [k: string]: unknown;
4
+ };
5
+
6
+ export { formatMessage, removeKeys };
@@ -0,0 +1,6 @@
1
+ declare function formatMessage(message: any, ...args: any[]): string;
2
+ declare function removeKeys(obj: any, keys: string[]): {
3
+ [k: string]: unknown;
4
+ };
5
+
6
+ export { formatMessage, removeKeys };
@@ -0,0 +1,42 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/loggers/utils.ts
5
+ import { format } from "util";
6
+ function formatMessage(message, ...args) {
7
+ return [
8
+ message,
9
+ ...args
10
+ ].map(formatArg).filter((arg) => arg !== "").join("\n");
11
+ }
12
+ __name(formatMessage, "formatMessage");
13
+ function removeKeys(obj, keys) {
14
+ return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
15
+ }
16
+ __name(removeKeys, "removeKeys");
17
+ function formatArg(arg) {
18
+ if (typeof arg === "string") {
19
+ return arg.trim();
20
+ }
21
+ if (arg instanceof Error) {
22
+ return format(arg).trim();
23
+ }
24
+ if (arg === void 0 || arg === null || isEmptyObject(arg)) {
25
+ return "";
26
+ }
27
+ try {
28
+ return JSON.stringify(arg);
29
+ } catch {
30
+ return format(arg).trim();
31
+ }
32
+ }
33
+ __name(formatArg, "formatArg");
34
+ function isEmptyObject(obj) {
35
+ return obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
36
+ }
37
+ __name(isEmptyObject, "isEmptyObject");
38
+ export {
39
+ formatMessage,
40
+ removeKeys
41
+ };
42
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/loggers/utils.ts"],"sourcesContent":["import { format } from \"node:util\";\n\nexport function formatMessage(message: any, ...args: any[]) {\n return [message, ...args]\n .map(formatArg)\n .filter((arg) => arg !== \"\")\n .join(\"\\n\");\n}\n\nexport function removeKeys(obj: any, keys: string[]) {\n return Object.fromEntries(\n Object.entries(obj).filter(([key]) => !keys.includes(key)),\n );\n}\n\nfunction formatArg(arg: any) {\n if (typeof arg === \"string\") {\n return arg.trim();\n }\n if (arg instanceof Error) {\n return format(arg).trim();\n }\n if (arg === undefined || arg === null || isEmptyObject(arg)) {\n return \"\";\n }\n try {\n return JSON.stringify(arg);\n } catch {\n return format(arg).trim();\n }\n}\n\nfunction isEmptyObject(obj: any) {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n Object.getPrototypeOf(obj) === Object.prototype &&\n Object.keys(obj).length === 0\n );\n}\n"],"mappings":";;;;AAAA,SAASA,cAAc;AAEhB,SAASC,cAAcC,YAAiBC,MAAW;AACxD,SAAO;IAACD;OAAYC;IACjBC,IAAIC,SAAAA,EACJC,OAAO,CAACC,QAAQA,QAAQ,EAAA,EACxBC,KAAK,IAAA;AACV;AALgBP;AAOT,SAASQ,WAAWC,KAAUC,MAAc;AACjD,SAAOC,OAAOC,YACZD,OAAOE,QAAQJ,GAAAA,EAAKJ,OAAO,CAAC,CAACS,GAAAA,MAAS,CAACJ,KAAKK,SAASD,GAAAA,CAAAA,CAAAA;AAEzD;AAJgBN;AAMhB,SAASJ,UAAUE,KAAQ;AACzB,MAAI,OAAOA,QAAQ,UAAU;AAC3B,WAAOA,IAAIU,KAAI;EACjB;AACA,MAAIV,eAAeW,OAAO;AACxB,WAAOC,OAAOZ,GAAAA,EAAKU,KAAI;EACzB;AACA,MAAIV,QAAQa,UAAab,QAAQ,QAAQc,cAAcd,GAAAA,GAAM;AAC3D,WAAO;EACT;AACA,MAAI;AACF,WAAOe,KAAKC,UAAUhB,GAAAA;EACxB,QAAQ;AACN,WAAOY,OAAOZ,GAAAA,EAAKU,KAAI;EACzB;AACF;AAfSZ;AAiBT,SAASgB,cAAcX,KAAQ;AAC7B,SACEA,QAAQ,QACR,OAAOA,QAAQ,YACfE,OAAOY,eAAed,GAAAA,MAASE,OAAOa,aACtCb,OAAOD,KAAKD,GAAAA,EAAKgB,WAAW;AAEhC;AAPSL;","names":["format","formatMessage","message","args","map","formatArg","filter","arg","join","removeKeys","obj","keys","Object","fromEntries","entries","key","includes","trim","Error","format","undefined","isEmptyObject","JSON","stringify","getPrototypeOf","prototype","length"]}
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/loggers/winston.ts
32
+ var winston_exports = {};
33
+ __export(winston_exports, {
34
+ patchWinston: () => patchWinston
35
+ });
36
+ module.exports = __toCommonJS(winston_exports);
37
+
38
+ // src/loggers/utils.ts
39
+ var import_node_util = require("util");
40
+ function formatMessage(message, ...args) {
41
+ return [
42
+ message,
43
+ ...args
44
+ ].map(formatArg).filter((arg) => arg !== "").join("\n");
45
+ }
46
+ __name(formatMessage, "formatMessage");
47
+ function removeKeys(obj, keys) {
48
+ return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
49
+ }
50
+ __name(removeKeys, "removeKeys");
51
+ function formatArg(arg) {
52
+ if (typeof arg === "string") {
53
+ return arg.trim();
54
+ }
55
+ if (arg instanceof Error) {
56
+ return (0, import_node_util.format)(arg).trim();
57
+ }
58
+ if (arg === void 0 || arg === null || isEmptyObject(arg)) {
59
+ return "";
60
+ }
61
+ try {
62
+ return JSON.stringify(arg);
63
+ } catch {
64
+ return (0, import_node_util.format)(arg).trim();
65
+ }
66
+ }
67
+ __name(formatArg, "formatArg");
68
+ function isEmptyObject(obj) {
69
+ return obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
70
+ }
71
+ __name(isEmptyObject, "isEmptyObject");
72
+
73
+ // src/loggers/winston.ts
74
+ var MAX_BUFFER_SIZE = 1e3;
75
+ var isPatched = false;
76
+ var globalLogsContext;
77
+ async function patchWinston(logsContext) {
78
+ var _a, _b;
79
+ globalLogsContext = logsContext;
80
+ if (isPatched) {
81
+ return;
82
+ }
83
+ try {
84
+ const loggerModule = await import("winston/lib/winston/logger.js");
85
+ if ((_b = (_a = loggerModule.default) == null ? void 0 : _a.prototype) == null ? void 0 : _b.write) {
86
+ const originalWrite = loggerModule.default.prototype.write;
87
+ loggerModule.default.prototype.write = function(info) {
88
+ captureLog(info);
89
+ return originalWrite.call(this, info);
90
+ };
91
+ }
92
+ } catch {
93
+ }
94
+ isPatched = true;
95
+ }
96
+ __name(patchWinston, "patchWinston");
97
+ function captureLog(info) {
98
+ const logs = globalLogsContext == null ? void 0 : globalLogsContext.getStore();
99
+ if (!logs || !info || logs.length >= MAX_BUFFER_SIZE) {
100
+ return;
101
+ }
102
+ try {
103
+ const rest = removeKeys(info, [
104
+ "timestamp",
105
+ "level",
106
+ "message",
107
+ "splat"
108
+ ]);
109
+ const formattedMessage = formatMessage(info.message, rest);
110
+ if (formattedMessage) {
111
+ logs.push({
112
+ timestamp: parseTimestamp(info.timestamp),
113
+ level: info.level || "info",
114
+ message: formattedMessage.trim()
115
+ });
116
+ }
117
+ } catch (e) {
118
+ }
119
+ }
120
+ __name(captureLog, "captureLog");
121
+ function parseTimestamp(timestamp) {
122
+ if (timestamp) {
123
+ const ts = new Date(timestamp).getTime();
124
+ if (!isNaN(ts)) {
125
+ return ts / 1e3;
126
+ }
127
+ }
128
+ return Date.now() / 1e3;
129
+ }
130
+ __name(parseTimestamp, "parseTimestamp");
131
+ // Annotate the CommonJS export names for ESM import in node:
132
+ 0 && (module.exports = {
133
+ patchWinston
134
+ });
135
+ //# sourceMappingURL=winston.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/loggers/winston.ts","../../src/loggers/utils.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport type { LogRecord } from \"../common/requestLogger.js\";\nimport { formatMessage, removeKeys } from \"./utils.js\";\n\nconst MAX_BUFFER_SIZE = 1000;\n\nlet isPatched = false;\nlet globalLogsContext: AsyncLocalStorage<LogRecord[]>;\n\nexport async function patchWinston(\n logsContext: AsyncLocalStorage<LogRecord[]>,\n) {\n globalLogsContext = logsContext;\n\n if (isPatched) {\n return;\n }\n\n try {\n // @ts-expect-error - file is not typed\n const loggerModule = await import(\"winston/lib/winston/logger.js\");\n if (loggerModule.default?.prototype?.write) {\n const originalWrite = loggerModule.default.prototype.write;\n loggerModule.default.prototype.write = function (info: any) {\n captureLog(info);\n return originalWrite.call(this, info);\n };\n }\n } catch {\n // winston is not installed, silently ignore\n }\n\n isPatched = true;\n}\n\nfunction captureLog(info: any) {\n const logs = globalLogsContext?.getStore();\n if (!logs || !info || logs.length >= MAX_BUFFER_SIZE) {\n return;\n }\n\n try {\n const rest = removeKeys(info, [\"timestamp\", \"level\", \"message\", \"splat\"]);\n const formattedMessage = formatMessage(info.message, rest);\n if (formattedMessage) {\n logs.push({\n timestamp: parseTimestamp(info.timestamp),\n level: info.level || \"info\",\n message: formattedMessage.trim(),\n });\n }\n } catch (e) {\n // ignore\n }\n}\n\nfunction parseTimestamp(timestamp: any) {\n if (timestamp) {\n const ts = new Date(timestamp).getTime();\n if (!isNaN(ts)) {\n return ts / 1000;\n }\n }\n return Date.now() / 1000;\n}\n","import { format } from \"node:util\";\n\nexport function formatMessage(message: any, ...args: any[]) {\n return [message, ...args]\n .map(formatArg)\n .filter((arg) => arg !== \"\")\n .join(\"\\n\");\n}\n\nexport function removeKeys(obj: any, keys: string[]) {\n return Object.fromEntries(\n Object.entries(obj).filter(([key]) => !keys.includes(key)),\n );\n}\n\nfunction formatArg(arg: any) {\n if (typeof arg === \"string\") {\n return arg.trim();\n }\n if (arg instanceof Error) {\n return format(arg).trim();\n }\n if (arg === undefined || arg === null || isEmptyObject(arg)) {\n return \"\";\n }\n try {\n return JSON.stringify(arg);\n } catch {\n return format(arg).trim();\n }\n}\n\nfunction isEmptyObject(obj: any) {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n Object.getPrototypeOf(obj) === Object.prototype &&\n Object.keys(obj).length === 0\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA;;;;;;;ACHA,uBAAuB;AAEhB,SAASA,cAAcC,YAAiBC,MAAW;AACxD,SAAO;IAACD;OAAYC;IACjBC,IAAIC,SAAAA,EACJC,OAAO,CAACC,QAAQA,QAAQ,EAAA,EACxBC,KAAK,IAAA;AACV;AALgBP;AAOT,SAASQ,WAAWC,KAAUC,MAAc;AACjD,SAAOC,OAAOC,YACZD,OAAOE,QAAQJ,GAAAA,EAAKJ,OAAO,CAAC,CAACS,GAAAA,MAAS,CAACJ,KAAKK,SAASD,GAAAA,CAAAA,CAAAA;AAEzD;AAJgBN;AAMhB,SAASJ,UAAUE,KAAQ;AACzB,MAAI,OAAOA,QAAQ,UAAU;AAC3B,WAAOA,IAAIU,KAAI;EACjB;AACA,MAAIV,eAAeW,OAAO;AACxB,eAAOC,yBAAOZ,GAAAA,EAAKU,KAAI;EACzB;AACA,MAAIV,QAAQa,UAAab,QAAQ,QAAQc,cAAcd,GAAAA,GAAM;AAC3D,WAAO;EACT;AACA,MAAI;AACF,WAAOe,KAAKC,UAAUhB,GAAAA;EACxB,QAAQ;AACN,eAAOY,yBAAOZ,GAAAA,EAAKU,KAAI;EACzB;AACF;AAfSZ;AAiBT,SAASgB,cAAcX,KAAQ;AAC7B,SACEA,QAAQ,QACR,OAAOA,QAAQ,YACfE,OAAOY,eAAed,GAAAA,MAASE,OAAOa,aACtCb,OAAOD,KAAKD,GAAAA,EAAKgB,WAAW;AAEhC;AAPSL;;;AD3BT,IAAMM,kBAAkB;AAExB,IAAIC,YAAY;AAChB,IAAIC;AAEJ,eAAsBC,aACpBC,aAA2C;AAR7C;AAUEF,sBAAoBE;AAEpB,MAAIH,WAAW;AACb;EACF;AAEA,MAAI;AAEF,UAAMI,eAAe,MAAM,OAAO,+BAAA;AAClC,SAAIA,wBAAaC,YAAbD,mBAAsBE,cAAtBF,mBAAiCG,OAAO;AAC1C,YAAMC,gBAAgBJ,aAAaC,QAAQC,UAAUC;AACrDH,mBAAaC,QAAQC,UAAUC,QAAQ,SAAUE,MAAS;AACxDC,mBAAWD,IAAAA;AACX,eAAOD,cAAcG,KAAK,MAAMF,IAAAA;MAClC;IACF;EACF,QAAQ;EAER;AAEAT,cAAY;AACd;AAxBsBE;AA0BtB,SAASQ,WAAWD,MAAS;AAC3B,QAAMG,OAAOX,uDAAmBY;AAChC,MAAI,CAACD,QAAQ,CAACH,QAAQG,KAAKE,UAAUf,iBAAiB;AACpD;EACF;AAEA,MAAI;AACF,UAAMgB,OAAOC,WAAWP,MAAM;MAAC;MAAa;MAAS;MAAW;KAAQ;AACxE,UAAMQ,mBAAmBC,cAAcT,KAAKU,SAASJ,IAAAA;AACrD,QAAIE,kBAAkB;AACpBL,WAAKQ,KAAK;QACRC,WAAWC,eAAeb,KAAKY,SAAS;QACxCE,OAAOd,KAAKc,SAAS;QACrBJ,SAASF,iBAAiBO,KAAI;MAChC,CAAA;IACF;EACF,SAASC,GAAG;EAEZ;AACF;AAnBSf;AAqBT,SAASY,eAAeD,WAAc;AACpC,MAAIA,WAAW;AACb,UAAMK,KAAK,IAAIC,KAAKN,SAAAA,EAAWO,QAAO;AACtC,QAAI,CAACC,MAAMH,EAAAA,GAAK;AACd,aAAOA,KAAK;IACd;EACF;AACA,SAAOC,KAAKG,IAAG,IAAK;AACtB;AARSR;","names":["formatMessage","message","args","map","formatArg","filter","arg","join","removeKeys","obj","keys","Object","fromEntries","entries","key","includes","trim","Error","format","undefined","isEmptyObject","JSON","stringify","getPrototypeOf","prototype","length","MAX_BUFFER_SIZE","isPatched","globalLogsContext","patchWinston","logsContext","loggerModule","default","prototype","write","originalWrite","info","captureLog","call","logs","getStore","length","rest","removeKeys","formattedMessage","formatMessage","message","push","timestamp","parseTimestamp","level","trim","e","ts","Date","getTime","isNaN","now"]}
@@ -0,0 +1,9 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { LogRecord } from '../common/requestLogger.cjs';
3
+ import 'node:buffer';
4
+ import 'node:http';
5
+ import '../common/tempGzipFile.cjs';
6
+
7
+ declare function patchWinston(logsContext: AsyncLocalStorage<LogRecord[]>): Promise<void>;
8
+
9
+ export { patchWinston };
@@ -0,0 +1,9 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
2
+ import { LogRecord } from '../common/requestLogger.js';
3
+ import 'node:buffer';
4
+ import 'node:http';
5
+ import '../common/tempGzipFile.js';
6
+
7
+ declare function patchWinston(logsContext: AsyncLocalStorage<LogRecord[]>): Promise<void>;
8
+
9
+ export { patchWinston };
@@ -0,0 +1,100 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/loggers/utils.ts
5
+ import { format } from "util";
6
+ function formatMessage(message, ...args) {
7
+ return [
8
+ message,
9
+ ...args
10
+ ].map(formatArg).filter((arg) => arg !== "").join("\n");
11
+ }
12
+ __name(formatMessage, "formatMessage");
13
+ function removeKeys(obj, keys) {
14
+ return Object.fromEntries(Object.entries(obj).filter(([key]) => !keys.includes(key)));
15
+ }
16
+ __name(removeKeys, "removeKeys");
17
+ function formatArg(arg) {
18
+ if (typeof arg === "string") {
19
+ return arg.trim();
20
+ }
21
+ if (arg instanceof Error) {
22
+ return format(arg).trim();
23
+ }
24
+ if (arg === void 0 || arg === null || isEmptyObject(arg)) {
25
+ return "";
26
+ }
27
+ try {
28
+ return JSON.stringify(arg);
29
+ } catch {
30
+ return format(arg).trim();
31
+ }
32
+ }
33
+ __name(formatArg, "formatArg");
34
+ function isEmptyObject(obj) {
35
+ return obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length === 0;
36
+ }
37
+ __name(isEmptyObject, "isEmptyObject");
38
+
39
+ // src/loggers/winston.ts
40
+ var MAX_BUFFER_SIZE = 1e3;
41
+ var isPatched = false;
42
+ var globalLogsContext;
43
+ async function patchWinston(logsContext) {
44
+ var _a, _b;
45
+ globalLogsContext = logsContext;
46
+ if (isPatched) {
47
+ return;
48
+ }
49
+ try {
50
+ const loggerModule = await import("winston/lib/winston/logger.js");
51
+ if ((_b = (_a = loggerModule.default) == null ? void 0 : _a.prototype) == null ? void 0 : _b.write) {
52
+ const originalWrite = loggerModule.default.prototype.write;
53
+ loggerModule.default.prototype.write = function(info) {
54
+ captureLog(info);
55
+ return originalWrite.call(this, info);
56
+ };
57
+ }
58
+ } catch {
59
+ }
60
+ isPatched = true;
61
+ }
62
+ __name(patchWinston, "patchWinston");
63
+ function captureLog(info) {
64
+ const logs = globalLogsContext == null ? void 0 : globalLogsContext.getStore();
65
+ if (!logs || !info || logs.length >= MAX_BUFFER_SIZE) {
66
+ return;
67
+ }
68
+ try {
69
+ const rest = removeKeys(info, [
70
+ "timestamp",
71
+ "level",
72
+ "message",
73
+ "splat"
74
+ ]);
75
+ const formattedMessage = formatMessage(info.message, rest);
76
+ if (formattedMessage) {
77
+ logs.push({
78
+ timestamp: parseTimestamp(info.timestamp),
79
+ level: info.level || "info",
80
+ message: formattedMessage.trim()
81
+ });
82
+ }
83
+ } catch (e) {
84
+ }
85
+ }
86
+ __name(captureLog, "captureLog");
87
+ function parseTimestamp(timestamp) {
88
+ if (timestamp) {
89
+ const ts = new Date(timestamp).getTime();
90
+ if (!isNaN(ts)) {
91
+ return ts / 1e3;
92
+ }
93
+ }
94
+ return Date.now() / 1e3;
95
+ }
96
+ __name(parseTimestamp, "parseTimestamp");
97
+ export {
98
+ patchWinston
99
+ };
100
+ //# sourceMappingURL=winston.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/loggers/utils.ts","../../src/loggers/winston.ts"],"sourcesContent":["import { format } from \"node:util\";\n\nexport function formatMessage(message: any, ...args: any[]) {\n return [message, ...args]\n .map(formatArg)\n .filter((arg) => arg !== \"\")\n .join(\"\\n\");\n}\n\nexport function removeKeys(obj: any, keys: string[]) {\n return Object.fromEntries(\n Object.entries(obj).filter(([key]) => !keys.includes(key)),\n );\n}\n\nfunction formatArg(arg: any) {\n if (typeof arg === \"string\") {\n return arg.trim();\n }\n if (arg instanceof Error) {\n return format(arg).trim();\n }\n if (arg === undefined || arg === null || isEmptyObject(arg)) {\n return \"\";\n }\n try {\n return JSON.stringify(arg);\n } catch {\n return format(arg).trim();\n }\n}\n\nfunction isEmptyObject(obj: any) {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n Object.getPrototypeOf(obj) === Object.prototype &&\n Object.keys(obj).length === 0\n );\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport type { LogRecord } from \"../common/requestLogger.js\";\nimport { formatMessage, removeKeys } from \"./utils.js\";\n\nconst MAX_BUFFER_SIZE = 1000;\n\nlet isPatched = false;\nlet globalLogsContext: AsyncLocalStorage<LogRecord[]>;\n\nexport async function patchWinston(\n logsContext: AsyncLocalStorage<LogRecord[]>,\n) {\n globalLogsContext = logsContext;\n\n if (isPatched) {\n return;\n }\n\n try {\n // @ts-expect-error - file is not typed\n const loggerModule = await import(\"winston/lib/winston/logger.js\");\n if (loggerModule.default?.prototype?.write) {\n const originalWrite = loggerModule.default.prototype.write;\n loggerModule.default.prototype.write = function (info: any) {\n captureLog(info);\n return originalWrite.call(this, info);\n };\n }\n } catch {\n // winston is not installed, silently ignore\n }\n\n isPatched = true;\n}\n\nfunction captureLog(info: any) {\n const logs = globalLogsContext?.getStore();\n if (!logs || !info || logs.length >= MAX_BUFFER_SIZE) {\n return;\n }\n\n try {\n const rest = removeKeys(info, [\"timestamp\", \"level\", \"message\", \"splat\"]);\n const formattedMessage = formatMessage(info.message, rest);\n if (formattedMessage) {\n logs.push({\n timestamp: parseTimestamp(info.timestamp),\n level: info.level || \"info\",\n message: formattedMessage.trim(),\n });\n }\n } catch (e) {\n // ignore\n }\n}\n\nfunction parseTimestamp(timestamp: any) {\n if (timestamp) {\n const ts = new Date(timestamp).getTime();\n if (!isNaN(ts)) {\n return ts / 1000;\n }\n }\n return Date.now() / 1000;\n}\n"],"mappings":";;;;AAAA,SAASA,cAAc;AAEhB,SAASC,cAAcC,YAAiBC,MAAW;AACxD,SAAO;IAACD;OAAYC;IACjBC,IAAIC,SAAAA,EACJC,OAAO,CAACC,QAAQA,QAAQ,EAAA,EACxBC,KAAK,IAAA;AACV;AALgBP;AAOT,SAASQ,WAAWC,KAAUC,MAAc;AACjD,SAAOC,OAAOC,YACZD,OAAOE,QAAQJ,GAAAA,EAAKJ,OAAO,CAAC,CAACS,GAAAA,MAAS,CAACJ,KAAKK,SAASD,GAAAA,CAAAA,CAAAA;AAEzD;AAJgBN;AAMhB,SAASJ,UAAUE,KAAQ;AACzB,MAAI,OAAOA,QAAQ,UAAU;AAC3B,WAAOA,IAAIU,KAAI;EACjB;AACA,MAAIV,eAAeW,OAAO;AACxB,WAAOC,OAAOZ,GAAAA,EAAKU,KAAI;EACzB;AACA,MAAIV,QAAQa,UAAab,QAAQ,QAAQc,cAAcd,GAAAA,GAAM;AAC3D,WAAO;EACT;AACA,MAAI;AACF,WAAOe,KAAKC,UAAUhB,GAAAA;EACxB,QAAQ;AACN,WAAOY,OAAOZ,GAAAA,EAAKU,KAAI;EACzB;AACF;AAfSZ;AAiBT,SAASgB,cAAcX,KAAQ;AAC7B,SACEA,QAAQ,QACR,OAAOA,QAAQ,YACfE,OAAOY,eAAed,GAAAA,MAASE,OAAOa,aACtCb,OAAOD,KAAKD,GAAAA,EAAKgB,WAAW;AAEhC;AAPSL;;;AC3BT,IAAMM,kBAAkB;AAExB,IAAIC,YAAY;AAChB,IAAIC;AAEJ,eAAsBC,aACpBC,aAA2C;AAR7C;AAUEF,sBAAoBE;AAEpB,MAAIH,WAAW;AACb;EACF;AAEA,MAAI;AAEF,UAAMI,eAAe,MAAM,OAAO,+BAAA;AAClC,SAAIA,wBAAaC,YAAbD,mBAAsBE,cAAtBF,mBAAiCG,OAAO;AAC1C,YAAMC,gBAAgBJ,aAAaC,QAAQC,UAAUC;AACrDH,mBAAaC,QAAQC,UAAUC,QAAQ,SAAUE,MAAS;AACxDC,mBAAWD,IAAAA;AACX,eAAOD,cAAcG,KAAK,MAAMF,IAAAA;MAClC;IACF;EACF,QAAQ;EAER;AAEAT,cAAY;AACd;AAxBsBE;AA0BtB,SAASQ,WAAWD,MAAS;AAC3B,QAAMG,OAAOX,uDAAmBY;AAChC,MAAI,CAACD,QAAQ,CAACH,QAAQG,KAAKE,UAAUf,iBAAiB;AACpD;EACF;AAEA,MAAI;AACF,UAAMgB,OAAOC,WAAWP,MAAM;MAAC;MAAa;MAAS;MAAW;KAAQ;AACxE,UAAMQ,mBAAmBC,cAAcT,KAAKU,SAASJ,IAAAA;AACrD,QAAIE,kBAAkB;AACpBL,WAAKQ,KAAK;QACRC,WAAWC,eAAeb,KAAKY,SAAS;QACxCE,OAAOd,KAAKc,SAAS;QACrBJ,SAASF,iBAAiBO,KAAI;MAChC,CAAA;IACF;EACF,SAASC,GAAG;EAEZ;AACF;AAnBSf;AAqBT,SAASY,eAAeD,WAAc;AACpC,MAAIA,WAAW;AACb,UAAMK,KAAK,IAAIC,KAAKN,SAAAA,EAAWO,QAAO;AACtC,QAAI,CAACC,MAAMH,EAAAA,GAAK;AACd,aAAOA,KAAK;IACd;EACF;AACA,SAAOC,KAAKG,IAAG,IAAK;AACtB;AARSR;","names":["format","formatMessage","message","args","map","formatArg","filter","arg","join","removeKeys","obj","keys","Object","fromEntries","entries","key","includes","trim","Error","format","undefined","isEmptyObject","JSON","stringify","getPrototypeOf","prototype","length","MAX_BUFFER_SIZE","isPatched","globalLogsContext","patchWinston","logsContext","loggerModule","default","prototype","write","originalWrite","info","captureLog","call","logs","getStore","length","rest","removeKeys","formattedMessage","formatMessage","message","push","timestamp","parseTimestamp","level","trim","e","ts","Date","getTime","isNaN","now"]}