@replay-kit/core 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2 -0
  3. package/dist/app_event.cjs +4 -0
  4. package/dist/app_event.d.cts +7 -0
  5. package/dist/app_event.d.ts +7 -0
  6. package/dist/app_event.js +4 -0
  7. package/dist/cli.cjs +46 -0
  8. package/dist/cli.d.cts +1 -0
  9. package/dist/cli.d.ts +1 -0
  10. package/dist/cli.js +46 -0
  11. package/dist/enum/index.cjs +1 -0
  12. package/dist/enum/index.d.cts +1 -0
  13. package/dist/enum/index.d.ts +1 -0
  14. package/dist/enum/index.js +1 -0
  15. package/dist/enum/log_level.enum.cjs +1 -0
  16. package/dist/enum/log_level.enum.d.cts +7 -0
  17. package/dist/enum/log_level.enum.d.ts +7 -0
  18. package/dist/enum/log_level.enum.js +1 -0
  19. package/dist/error_handle.helper-CQsPSbuz.d.cts +75 -0
  20. package/dist/error_handle.helper-CQsPSbuz.d.ts +75 -0
  21. package/dist/helper/crypto.helper.cjs +1 -0
  22. package/dist/helper/crypto.helper.d.cts +3 -0
  23. package/dist/helper/crypto.helper.d.ts +3 -0
  24. package/dist/helper/crypto.helper.js +1 -0
  25. package/dist/helper/error_handle.helper.cjs +3 -0
  26. package/dist/helper/error_handle.helper.d.cts +2 -0
  27. package/dist/helper/error_handle.helper.d.ts +2 -0
  28. package/dist/helper/error_handle.helper.js +3 -0
  29. package/dist/helper/index.cjs +4 -0
  30. package/dist/helper/index.d.cts +4 -0
  31. package/dist/helper/index.d.ts +4 -0
  32. package/dist/helper/index.js +4 -0
  33. package/dist/helper/stack.helper.cjs +2 -0
  34. package/dist/helper/stack.helper.d.cts +9 -0
  35. package/dist/helper/stack.helper.d.ts +9 -0
  36. package/dist/helper/stack.helper.js +2 -0
  37. package/dist/index-8u1_ya-u.d.ts +36 -0
  38. package/dist/index-MBKv_hsI.d.cts +36 -0
  39. package/dist/index.cjs +4 -0
  40. package/dist/index.d.cts +7 -0
  41. package/dist/index.d.ts +7 -0
  42. package/dist/index.js +4 -0
  43. package/dist/logger/actions/index.cjs +3 -0
  44. package/dist/logger/actions/index.d.cts +4 -0
  45. package/dist/logger/actions/index.d.ts +4 -0
  46. package/dist/logger/actions/index.js +3 -0
  47. package/dist/logger/actions/record.action.cjs +2 -0
  48. package/dist/logger/actions/record.action.d.cts +4 -0
  49. package/dist/logger/actions/record.action.d.ts +4 -0
  50. package/dist/logger/actions/record.action.js +2 -0
  51. package/dist/logger/actions/view_many.action.cjs +2 -0
  52. package/dist/logger/actions/view_many.action.d.cts +4 -0
  53. package/dist/logger/actions/view_many.action.d.ts +4 -0
  54. package/dist/logger/actions/view_many.action.js +2 -0
  55. package/dist/logger/handler.cjs +3 -0
  56. package/dist/logger/handler.d.cts +4 -0
  57. package/dist/logger/handler.d.ts +4 -0
  58. package/dist/logger/handler.js +3 -0
  59. package/dist/logger/index.cjs +3 -0
  60. package/dist/logger/index.d.cts +4 -0
  61. package/dist/logger/index.d.ts +4 -0
  62. package/dist/logger/index.js +3 -0
  63. package/dist/replay/base.cjs +1 -0
  64. package/dist/replay/base.d.cts +18 -0
  65. package/dist/replay/base.d.ts +18 -0
  66. package/dist/replay/base.js +1 -0
  67. package/dist/replay/handler.cjs +25 -0
  68. package/dist/replay/handler.d.cts +24 -0
  69. package/dist/replay/handler.d.ts +24 -0
  70. package/dist/replay/handler.js +25 -0
  71. package/dist/replay/helper.cjs +1 -0
  72. package/dist/replay/helper.d.cts +34 -0
  73. package/dist/replay/helper.d.ts +34 -0
  74. package/dist/replay/helper.js +1 -0
  75. package/dist/replay/index.cjs +25 -0
  76. package/dist/replay/index.d.cts +6 -0
  77. package/dist/replay/index.d.ts +6 -0
  78. package/dist/replay/index.js +25 -0
  79. package/dist/replay/mode/advance/index.cjs +22 -0
  80. package/dist/replay/mode/advance/index.d.cts +11 -0
  81. package/dist/replay/mode/advance/index.d.ts +11 -0
  82. package/dist/replay/mode/advance/index.js +22 -0
  83. package/dist/replay/mode/advance/reasons/assigner_cases/base.cjs +14 -0
  84. package/dist/replay/mode/advance/reasons/assigner_cases/base.d.cts +137 -0
  85. package/dist/replay/mode/advance/reasons/assigner_cases/base.d.ts +137 -0
  86. package/dist/replay/mode/advance/reasons/assigner_cases/base.js +14 -0
  87. package/dist/replay/mode/advance/reasons/assigner_cases/business_logic_rejection_case/index.cjs +14 -0
  88. package/dist/replay/mode/advance/reasons/assigner_cases/business_logic_rejection_case/index.d.cts +19 -0
  89. package/dist/replay/mode/advance/reasons/assigner_cases/business_logic_rejection_case/index.d.ts +19 -0
  90. package/dist/replay/mode/advance/reasons/assigner_cases/business_logic_rejection_case/index.js +14 -0
  91. package/dist/replay/mode/advance/reasons/assigner_cases/index.cjs +14 -0
  92. package/dist/replay/mode/advance/reasons/assigner_cases/index.d.cts +15 -0
  93. package/dist/replay/mode/advance/reasons/assigner_cases/index.d.ts +15 -0
  94. package/dist/replay/mode/advance/reasons/assigner_cases/index.js +14 -0
  95. package/dist/replay/mode/advance/reasons/assigner_cases/post_trace_response_mutation_case/index.cjs +14 -0
  96. package/dist/replay/mode/advance/reasons/assigner_cases/post_trace_response_mutation_case/index.d.cts +18 -0
  97. package/dist/replay/mode/advance/reasons/assigner_cases/post_trace_response_mutation_case/index.d.ts +18 -0
  98. package/dist/replay/mode/advance/reasons/assigner_cases/post_trace_response_mutation_case/index.js +14 -0
  99. package/dist/replay/mode/advance/reasons/assigner_cases/trace_divergence_case/index.cjs +14 -0
  100. package/dist/replay/mode/advance/reasons/assigner_cases/trace_divergence_case/index.d.cts +18 -0
  101. package/dist/replay/mode/advance/reasons/assigner_cases/trace_divergence_case/index.d.ts +18 -0
  102. package/dist/replay/mode/advance/reasons/assigner_cases/trace_divergence_case/index.js +14 -0
  103. package/dist/replay/mode/advance/reasons/index.cjs +21 -0
  104. package/dist/replay/mode/advance/reasons/index.d.cts +17 -0
  105. package/dist/replay/mode/advance/reasons/index.d.ts +17 -0
  106. package/dist/replay/mode/advance/reasons/index.js +21 -0
  107. package/dist/replay/mode/advance/reasons/reason_assigner.cjs +14 -0
  108. package/dist/replay/mode/advance/reasons/reason_assigner.d.cts +25 -0
  109. package/dist/replay/mode/advance/reasons/reason_assigner.d.ts +25 -0
  110. package/dist/replay/mode/advance/reasons/reason_assigner.js +14 -0
  111. package/dist/replay/mode/advance/reasons/reason_printer.cjs +8 -0
  112. package/dist/replay/mode/advance/reasons/reason_printer.d.cts +25 -0
  113. package/dist/replay/mode/advance/reasons/reason_printer.d.ts +25 -0
  114. package/dist/replay/mode/advance/reasons/reason_printer.js +8 -0
  115. package/dist/replay/mode/advance/reasons/reason_signal.cjs +1 -0
  116. package/dist/replay/mode/advance/reasons/reason_signal.d.cts +87 -0
  117. package/dist/replay/mode/advance/reasons/reason_signal.d.ts +87 -0
  118. package/dist/replay/mode/advance/reasons/reason_signal.js +1 -0
  119. package/dist/replay/mode/advance/replay.cjs +22 -0
  120. package/dist/replay/mode/advance/replay.d.cts +57 -0
  121. package/dist/replay/mode/advance/replay.d.ts +57 -0
  122. package/dist/replay/mode/advance/replay.js +22 -0
  123. package/dist/replay/mode/index.cjs +25 -0
  124. package/dist/replay/mode/index.d.cts +12 -0
  125. package/dist/replay/mode/index.d.ts +12 -0
  126. package/dist/replay/mode/index.js +25 -0
  127. package/dist/replay/mode/smart.replay.cjs +4 -0
  128. package/dist/replay/mode/smart.replay.d.cts +18 -0
  129. package/dist/replay/mode/smart.replay.d.ts +18 -0
  130. package/dist/replay/mode/smart.replay.js +4 -0
  131. package/dist/setup.cjs +7 -0
  132. package/dist/setup.d.cts +27 -0
  133. package/dist/setup.d.ts +27 -0
  134. package/dist/setup.js +7 -0
  135. package/dist/trace/builder.cjs +1 -0
  136. package/dist/trace/builder.d.cts +6 -0
  137. package/dist/trace/builder.d.ts +6 -0
  138. package/dist/trace/builder.js +1 -0
  139. package/dist/trace/context.cjs +2 -0
  140. package/dist/trace/context.d.cts +2 -0
  141. package/dist/trace/context.d.ts +2 -0
  142. package/dist/trace/context.js +2 -0
  143. package/dist/trace/filter.cjs +1 -0
  144. package/dist/trace/filter.d.cts +21 -0
  145. package/dist/trace/filter.d.ts +21 -0
  146. package/dist/trace/filter.js +1 -0
  147. package/dist/trace/index.cjs +2 -0
  148. package/dist/trace/index.d.cts +7 -0
  149. package/dist/trace/index.d.ts +7 -0
  150. package/dist/trace/index.js +2 -0
  151. package/package.json +81 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Poppyyddod
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # ReplayKit
2
+ Replay real production requests with full context to reproduce, trace, and fix bugs instantly.
@@ -0,0 +1,4 @@
1
+ "use strict";var $=Object.create;var d=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var n=(o,t)=>d(o,"name",{value:t,configurable:!0});var z=(o,t)=>{for(var e in t)d(o,e,{get:t[e],enumerable:!0})},_=(o,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let c of M(t))!q.call(o,c)&&c!==e&&d(o,c,{get:()=>t[c],enumerable:!(r=H(t,c))||r.enumerable});return o};var f=(o,t,e)=>(e=o!=null?$(B(o)):{},_(t||!o||!o.__esModule?d(e,"default",{value:o,enumerable:!0}):e,o)),W=o=>_(d({},"__esModule",{value:!0}),o);var Z={};z(Z,{useTraceEvent:()=>Y});module.exports=W(Z);var E=require("ulid");var V=require("ulid"),F=require("async_hooks");var v=f(require("fs"),1),b=f(require("chalk"),1),L=f(require("path"),1),T=require("bundle-require");var Q="storage/logs",I={logSetup:{path:Q}};var h,k;var P=n(async()=>{try{return h||await U(),h}catch(o){throw o}},"getConfig"),U=n(async()=>{try{let o=L.default.resolve("replay-kit.config.ts");if(!v.default.existsSync(o)){console.warn(b.default.yellowBright('\u26A0 "replay-kit.config.ts" not found, using default config')),h=I;return}let t=L.default.resolve("replay-kit.performance.config.ts");v.default.existsSync(t)&&(k=await(await(0,T.bundleRequire)({filepath:t})).mod.default);let r=await(await(0,T.bundleRequire)({filepath:o})).mod.default;k&&r.filters&&(r.filters.expectedPerformance=k),h=r}catch(o){throw h=I,o}},"loadConfig");var i=class{static{n(this,"StackHelper")}static convertStackToReference(t){try{let e=t.split("/"),r=e[e.length-1],c=r.split(":")[0],g=parseInt(r.split(":")[1]),p=parseInt(r.split(":")[2]);return{file:c,position:[g,p],full_path:t}}catch(e){throw e}}static convertStackToGetOne(t,e){try{return t?`src/${t?.split(`
2
+ `)[e]?.replace(")","").split("src/")[1]}`:"invalid_stack"}catch(r){throw r}}};var D=new F.AsyncLocalStorage;var A=f(require("fs"),1),j=f(require("path"),1);var C=f(require("fs"),1);var x=class{constructor(t){this.logger=t}logger;static{n(this,"RecordAction")}parseSafeData(t){try{return JSON.parse(JSON.stringify(t))}catch{throw{kind:"json_parse_error",message:"Failed to serialize log data",raw:String(t)}}}handler(t,e){try{let r=this.logger.fullLogPath,c=this.logger.logLevelPath(t);C.default.mkdirSync(r,{recursive:!0});let g=this.parseSafeData(e),p={level:t,timestamp:new Date().toISOString(),...g},l=JSON.stringify(p)+`
3
+ `;C.default.appendFileSync(c,l,{encoding:"utf8"})}catch(r){throw r}}};var N=f(require("fs"),1);var R=class{constructor(t){this.logger=t}logger;static{n(this,"ViewManyAction")}handler(t){try{return N.default.readFileSync(t,"utf8").split(`
4
+ `).filter(Boolean).map(r=>JSON.parse(r))}catch(e){throw e}}};var m=class{constructor(t){this.setup=t}setup;static{n(this,"ReplayKitLogger")}get actions(){return{record:new x(this),viewMany:new R(this)}}get fullLogPath(){return j.default.resolve(this.setup.path)}static shouldLog(t){return!!(t==500||[401,403,409,422].includes(t))}logLevelPath(t){return this.fullLogPath+`/${t}.log`}isExistLevel(t){return A.default.existsSync(this.logLevelPath(t))}resource(t){return t}record(t,e){try{this.actions.record.handler(t,e)}catch(r){throw r}}viewMany(t){try{return this.actions.viewMany.handler(this.logLevelPath(t))}catch(e){throw e}}};var w=class{constructor(t){this.data=t;try{this.log()}catch(e){throw e}}data;static{n(this,"ReplayKitError")}async log(){try{let t=await P(),e=new m(t.logSetup),r=e.resource(this.data);e.record("error",r)}catch(t){throw t}}};var X=f(require("crypto"),1);function Y(o,t){try{o.use((e,r,c)=>{let g={traceId:(0,E.ulid)(),trace:[],spanStack:[],stack:{}};D.run(g,()=>{let p=D.getStore(),l=e.headers["x-is-replay"]==="true",K=Date.now(),G=r.json.bind(r),J=r.send.bind(r),S;function O(a){try{let s=new Error("err")?.stack,u=i.convertStackToGetOne(s,3),y=i.convertStackToReference(u);return{...a,__replay:{stack:{primary:y,context:p?.stack?.context},trace:p?.trace||[],duration_ms:Date.now()-K}}}catch(s){throw s}}n(O,"attachReplay"),r.json=function(a){try{l&&a&&typeof a=="object"&&(a=O(a));let s=new Error("err")?.stack,u=i.convertStackToGetOne(s,2),y=i.convertStackToReference(u);return S={body:a,reference:y},G(a)}catch(s){throw s}},r.send=function(a){try{l&&typeof a=="object"&&(a=O(a));let s=new Error("err")?.stack,u=i.convertStackToGetOne(s,4),y=i.convertStackToReference(u);return S={body:a,reference:y},J(a)}catch(s){throw s}},r.on("finish",()=>{try{if(l||!m.shouldLog(r.statusCode))return;new w({meta:{id:"req-"+(0,E.ulid)(),traceId:p?.traceId,environment:t,timestamp:new Date().toISOString()},request:{method:e.method,url:e.url,headers:e.headers,body:e.body},response:{status:r.statusCode,error:S.body,duration_ms:Date.now()-K},trace:p?.trace||[],stack:{primary:S.reference??null,context:p?.stack?.context}})}catch(a){throw a}}),c()})})}catch(e){throw e}}n(Y,"useTraceEvent");0&&(module.exports={useTraceEvent});
@@ -0,0 +1,7 @@
1
+ import { Router } from 'express';
2
+ import { L as LogEnvironment } from './error_handle.helper-CQsPSbuz.cjs';
3
+ import 'async_hooks';
4
+
5
+ declare function useTraceEvent(app: Router, environment: LogEnvironment): void;
6
+
7
+ export { useTraceEvent };
@@ -0,0 +1,7 @@
1
+ import { Router } from 'express';
2
+ import { L as LogEnvironment } from './error_handle.helper-CQsPSbuz.js';
3
+ import 'async_hooks';
4
+
5
+ declare function useTraceEvent(app: Router, environment: LogEnvironment): void;
6
+
7
+ export { useTraceEvent };
@@ -0,0 +1,4 @@
1
+ var I=Object.defineProperty;var o=(a,t)=>I(a,"name",{value:t,configurable:!0});import{ulid as K}from"ulid";import{ulid as Y}from"ulid";import{AsyncLocalStorage as A}from"async_hooks";import T from"fs";import b from"chalk";import P from"path";import{bundleRequire as D}from"bundle-require";var F="storage/logs",C={logSetup:{path:F}};var y,R;var w=o(async()=>{try{return y||await N(),y}catch(a){throw a}},"getConfig"),N=o(async()=>{try{let a=P.resolve("replay-kit.config.ts");if(!T.existsSync(a)){console.warn(b.yellowBright('\u26A0 "replay-kit.config.ts" not found, using default config')),y=C;return}let t=P.resolve("replay-kit.performance.config.ts");T.existsSync(t)&&(R=await(await D({filepath:t})).mod.default);let e=await(await D({filepath:a})).mod.default;R&&e.filters&&(e.filters.expectedPerformance=R),y=e}catch(a){throw y=C,a}},"loadConfig");var s=class{static{o(this,"StackHelper")}static convertStackToReference(t){try{let r=t.split("/"),e=r[r.length-1],p=e.split(":")[0],f=parseInt(e.split(":")[1]),i=parseInt(e.split(":")[2]);return{file:p,position:[f,i],full_path:t}}catch(r){throw r}}static convertStackToGetOne(t,r){try{return t?`src/${t?.split(`
2
+ `)[r]?.replace(")","").split("src/")[1]}`:"invalid_stack"}catch(e){throw e}}};var k=new A;import G from"fs";import J from"path";import E from"fs";var h=class{constructor(t){this.logger=t}logger;static{o(this,"RecordAction")}parseSafeData(t){try{return JSON.parse(JSON.stringify(t))}catch{throw{kind:"json_parse_error",message:"Failed to serialize log data",raw:String(t)}}}handler(t,r){try{let e=this.logger.fullLogPath,p=this.logger.logLevelPath(t);E.mkdirSync(e,{recursive:!0});let f=this.parseSafeData(r),i={level:t,timestamp:new Date().toISOString(),...f},g=JSON.stringify(i)+`
3
+ `;E.appendFileSync(p,g,{encoding:"utf8"})}catch(e){throw e}}};import j from"fs";var S=class{constructor(t){this.logger=t}logger;static{o(this,"ViewManyAction")}handler(t){try{return j.readFileSync(t,"utf8").split(`
4
+ `).filter(Boolean).map(e=>JSON.parse(e))}catch(r){throw r}}};var l=class{constructor(t){this.setup=t}setup;static{o(this,"ReplayKitLogger")}get actions(){return{record:new h(this),viewMany:new S(this)}}get fullLogPath(){return J.resolve(this.setup.path)}static shouldLog(t){return!!(t==500||[401,403,409,422].includes(t))}logLevelPath(t){return this.fullLogPath+`/${t}.log`}isExistLevel(t){return G.existsSync(this.logLevelPath(t))}resource(t){return t}record(t,r){try{this.actions.record.handler(t,r)}catch(e){throw e}}viewMany(t){try{return this.actions.viewMany.handler(this.logLevelPath(t))}catch(r){throw r}}};var x=class{constructor(t){this.data=t;try{this.log()}catch(r){throw r}}data;static{o(this,"ReplayKitError")}async log(){try{let t=await w(),r=new l(t.logSetup),e=r.resource(this.data);r.record("error",e)}catch(t){throw t}}};import Ct from"crypto";function Mt(a,t){try{a.use((r,e,p)=>{let f={traceId:K(),trace:[],spanStack:[],stack:{}};k.run(f,()=>{let i=k.getStore(),g=r.headers["x-is-replay"]==="true",v=Date.now(),O=e.json.bind(e),_=e.send.bind(e),d;function L(n){try{let c=new Error("err")?.stack,m=s.convertStackToGetOne(c,3),u=s.convertStackToReference(m);return{...n,__replay:{stack:{primary:u,context:i?.stack?.context},trace:i?.trace||[],duration_ms:Date.now()-v}}}catch(c){throw c}}o(L,"attachReplay"),e.json=function(n){try{g&&n&&typeof n=="object"&&(n=L(n));let c=new Error("err")?.stack,m=s.convertStackToGetOne(c,2),u=s.convertStackToReference(m);return d={body:n,reference:u},O(n)}catch(c){throw c}},e.send=function(n){try{g&&typeof n=="object"&&(n=L(n));let c=new Error("err")?.stack,m=s.convertStackToGetOne(c,4),u=s.convertStackToReference(m);return d={body:n,reference:u},_(n)}catch(c){throw c}},e.on("finish",()=>{try{if(g||!l.shouldLog(e.statusCode))return;new x({meta:{id:"req-"+K(),traceId:i?.traceId,environment:t,timestamp:new Date().toISOString()},request:{method:r.method,url:r.url,headers:r.headers,body:r.body},response:{status:e.statusCode,error:d.body,duration_ms:Date.now()-v},trace:i?.trace||[],stack:{primary:d.reference??null,context:i?.stack?.context}})}catch(n){throw n}}),p()})})}catch(r){throw r}}o(Mt,"useTraceEvent");export{Mt as useTraceEvent};
package/dist/cli.cjs ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+ "use strict";var Re=Object.create;var U=Object.defineProperty;var Se=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var ve=Object.getPrototypeOf,De=Object.prototype.hasOwnProperty;var o=(s,e)=>U(s,"name",{value:e,configurable:!0});var xe=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of _e(e))!De.call(s,n)&&n!==t&&U(s,n,{get:()=>e[n],enumerable:!(r=Se(e,n))||r.enumerable});return s};var f=(s,e,t)=>(t=s!=null?Re(ve(s)):{},xe(e||!s||!s.__esModule?U(t,"default",{value:s,enumerable:!0}):t,s));var X=f(require("fs"),1),C=f(require("chalk"),1),ue=f(require("path"),1);var Dr=require("dotenv/config");var vt=require("dotenv/config.js");var Pe=require("ulid"),ne=require("async_hooks");var z=f(require("fs"),1),te=f(require("chalk"),1),W=f(require("path"),1),G=require("bundle-require");var re="storage/logs",ee={logSetup:{path:re}};function se(){return`import { defineConfig } from 'replay-kit';
3
+
4
+ export default defineConfig({
5
+ logSetup: {
6
+ path: '${re}',
7
+ }
8
+ });`}o(se,"configContent");var P,j;var L=o(async()=>{try{return P||await we(),P}catch(s){throw s}},"getConfig"),we=o(async()=>{try{let s=W.default.resolve("replay-kit.config.ts");if(!z.default.existsSync(s)){console.warn(te.default.yellowBright('\u26A0 "replay-kit.config.ts" not found, using default config')),P=ee;return}let e=W.default.resolve("replay-kit.performance.config.ts");z.default.existsSync(e)&&(j=await(await(0,G.bundleRequire)({filepath:e})).mod.default);let r=await(await(0,G.bundleRequire)({filepath:s})).mod.default;j&&r.filters&&(r.filters.expectedPerformance=j),P=r}catch(s){throw P=ee,s}},"loadConfig");var Be=new ne.AsyncLocalStorage;var ae=f(require("fs"),1),ie=f(require("path"),1);var V=f(require("fs"),1);var K=class{constructor(e){this.logger=e}logger;static{o(this,"RecordAction")}parseSafeData(e){try{return JSON.parse(JSON.stringify(e))}catch{throw{kind:"json_parse_error",message:"Failed to serialize log data",raw:String(e)}}}handler(e,t){try{let r=this.logger.fullLogPath,n=this.logger.logLevelPath(e);V.default.mkdirSync(r,{recursive:!0});let a=this.parseSafeData(t),c={level:e,timestamp:new Date().toISOString(),...a},i=JSON.stringify(c)+`
9
+ `;V.default.appendFileSync(n,i,{encoding:"utf8"})}catch(r){throw r}}};var oe=f(require("fs"),1);var E=class{constructor(e){this.logger=e}logger;static{o(this,"ViewManyAction")}handler(e){try{return oe.default.readFileSync(e,"utf8").split(`
10
+ `).filter(Boolean).map(r=>JSON.parse(r))}catch(t){throw t}}};var T=class{constructor(e){this.setup=e}setup;static{o(this,"ReplayKitLogger")}get actions(){return{record:new K(this),viewMany:new E(this)}}get fullLogPath(){return ie.default.resolve(this.setup.path)}static shouldLog(e){return!!(e==500||[401,403,409,422].includes(e))}logLevelPath(e){return this.fullLogPath+`/${e}.log`}isExistLevel(e){return ae.default.existsSync(this.logLevelPath(e))}resource(e){return e}record(e,t){try{this.actions.record.handler(e,t)}catch(r){throw r}}viewMany(e){try{return this.actions.viewMany.handler(this.logLevelPath(e))}catch(t){throw t}}};var ce=f(require("crypto"),1);function le(s){try{return ce.default.createHash("md5").update(s).digest("hex")}catch(e){throw e}}o(le,"cryptoHash");var Y="__root__";function be(s){let e=new Map;for(let t of s){let r=t.parentId||Y;e.has(r)||e.set(r,[]),e.get(r).push(t)}return e}o(be,"buildTraceTree");function Ce(s,e,t){return`${t}->${s.name}#${e}`}o(Ce,"buildSignature");function S(s){try{let n=function(a,c){(t.get(a)||[]).sort((l,p)=>l.start-p.start).forEach((l,p)=>{let g=Ce(l,p,c),d=le(g);r.push({...l,signature:d,rawSignature:g}),n(l.id,d)})};var e=n;o(n,"walk");let t=be(s),r=[];return n(Y,Y),r}catch(t){throw t}}o(S,"flattenTrace");var _=class{constructor(e){this.config=e}config;static{o(this,"ReplayFilterManager")}matchPattern(e,t){try{return e instanceof RegExp?e.test(t):e.includes("*")?new RegExp("^"+e.replace(/\*/g,".*")+"$").test(t):e===t}catch(r){throw r}}async filterTrace(e){try{if(!this.config.filters||!e||e.length===0)return e;let t=this.config.filters;return e.filter(r=>{let n=r.name;return!t.ignoreSteps?.some(c=>this.matchPattern(c,n))})}catch(t){throw t}}async filterNonOptionalTrace(e){try{if(!this.config.filters||!e||e.length===0)return e;let t=this.config.filters;return e.filter(r=>{let n=r.name;return!t.optionalSteps?.some(c=>this.matchPattern(c,n))})}catch(t){throw t}}isOptionalStep(e){try{return this.config.filters?.optionalSteps?.some(t=>this.matchPattern(t,e))}catch(t){throw t}}async filterResponse(e){try{if(!this.config.filters||!e)return e;let t=Object.keys(e.error);if(t.length===0)return e;let r=this.config.filters;for(let n of t)r.ignoreFields?.includes(n)&&delete e.error[n];return{...e,error:e.error}}catch(t){throw t}}};var v=class{constructor(e){this.config=e}config;static{o(this,"ReplayHelper")}get filterManager(){return new _(this.config)}setConfig(e){this.config=e}normalize(e){if(!e)return e;if(typeof e=="string")try{return JSON.parse(e)}catch{return e}return e}stableStringify(e){return JSON.stringify(this.sortKeys(e))}sortKeys(e){return Array.isArray(e)?e.map(t=>this.sortKeys(t)):e&&typeof e=="object"?Object.keys(e).sort().reduce((t,r)=>(t[r]=this.sortKeys(e[r]),t),{}):e}compareTrace(e,t){try{let r=[],n=new Map(e.map(i=>[i.signature,i])),a=new Map(t.map(i=>[i.signature,i])),c={};for(let[i,l]of n)c[l.name]={id:l.id,parentId:l.parentId,original:l.returnData,replay:null},a.has(l.signature)||this.filterManager.isOptionalStep(l.name)||r.push({type:"missing_step",name:l.name,message:`Missing step: ${i}`});for(let[i,l]of a)c[l.name].replay=l.returnData,n.has(l.signature)||i&&this.filterManager.isOptionalStep(l.name)||r.push({type:"extra_step",name:l.name,message:`Extra step: ${i}`});for(let i in c){let l=c[i].original,p=c[i].replay;l!==p&&r.push({type:"trace_return_data_mismatch",name:i,message:"Trace return data mismatch",not_matched:{original:l,replay:p}})}return{isDifferent:r.length>0,issues:r}}catch(r){throw r}}compareResponse(e,t){try{let r=[];e.status!==t.status&&r.push({type:"status_mismatch",message:"Status code mismatch",not_matched:{original:e.status,replay:t.status}});let n=this.normalize(e.error),a=this.normalize(t.error),c=this.stableStringify(n),i=this.stableStringify(a);return c!==i&&r.push({type:"body_mismatch",message:"Response mismatch",not_matched:{original:n,replay:a}}),{isDifferent:r.length>0,issues:r}}catch(r){throw r}}fullUrl(e){return`${process.env.SERVER_URL}${e}`}async sendRequest(e){try{return await fetch(this.fullUrl(e.request.url),{method:e.request.method,headers:{"Content-Type":"application/json","x-is-replay":"true"},body:JSON.stringify(e.request.body)})}catch(t){throw t}}};var b=f(require("chalk"),1);var D=class{constructor(e){this.config=e}config;static{o(this,"BaseReplay")}get filterManager(){return new _(this.config)}get replayHelper(){return new v(this.config)}};var $=class extends D{constructor(t){super(t);this.config=t}config;static{o(this,"SmartReplay")}print(t){try{let{log:r,replay:n,responseDiff:a,traceDiff:c}=t;if(console.log(b.default.yellow.bold(`\u25B6 ${r.request.method} ${r.request.url}`)),!a.isDifferent&&!c.isDifferent){console.log(b.default.green(`[OK] Reponse & Trace match
11
+ `));return}if(a.isDifferent&&console.log(b.default.red(`[!] Response DIFF
12
+ `)),c.isDifferent){console.log(b.default.red(`[!] Trace DIFF
13
+ `));for(let i of c.issues)console.log(` - [${i.type}] ${i.name}`)}}catch(r){throw r}}async replay(t){try{t.request.headers["x-replay-id"]=t.meta.id;let r=await this.replayHelper.sendRequest(t),n=await r.json(),a=n.__replay;delete n.__replay;let c=this.replayHelper.compareResponse({error:t.response.error,status:t.response.status},{error:n,status:r.status}),i=S(t.trace||[]),l=S(a.trace||[]),p=this.replayHelper.compareTrace(i,l);this.print({log:t,replay:r,responseDiff:c,traceDiff:p})}catch(r){throw r}}};var y=f(require("chalk"),1);var fe=f(require("http"),1);var Q={trace_step_match:o((s=.1)=>({weight:s,serverity:h(s),message:`trace_match (+${s}) \u2192 trace fully matches replay`}),"trace_step_match"),trace_step_not_match:o((s=.25)=>({weight:s,serverity:h(s),message:`trace_step_not_match (+${s}) \u2192 trace partially matches replay`}),"trace_step_not_match"),trace_return_data_match:o((s=.1)=>({weight:s,serverity:h(s),message:`trace_return_data_match (+${s}) \u2192 trace return data is consistent`}),"trace_return_data_match"),trace_return_data_not_match:o((s=.25)=>({weight:s,serverity:h(s),message:`trace_return_data_not_match (+${s}) \u2192 trace return data is inconsistent`}),"trace_return_data_not_match"),response_match:o((s=.1)=>({weight:s,serverity:h(s),message:`response_match (+${s}) \u2192 response is consistent`}),"response_match"),response_not_match:o((s=.25)=>({weight:s,serverity:h(s),message:`response_not_match (+${s}) \u2192 response is inconsistent`}),"response_not_match"),response_status_match:o((s=.1)=>({weight:s,serverity:h(s),message:`response_status_match (+${s}) \u2192 response status is consistent`}),"response_status_match"),response_status_not_match:o((s=.25)=>({weight:s,serverity:h(s),message:`response_status_not_match (+${s}) \u2192 response status is inconsistent`}),"response_status_not_match"),logic_error_indicator:o((s=.6)=>({weight:s,serverity:h(s),message:`logic_error_indicator (+${s}) \u2192 original response status >= 400 triggered logic flag`}),"logic_error_indicator")},pe={trace_match:{value:!0,message:"flow is clean"},trace_not_match:{value:!1,message:"flow is not clean"},trace_step_match:{value:!0,message:"no mismatch"},trace_step_not_match:{value:!1,message:"mismatch"},trace_return_data_match:{value:!0,message:"no mismatch"},trace_return_data_not_match:{value:!1,message:"mismatch"},response_match:{value:!0,message:"no mismatch"},response_not_match:{value:!1,message:"mismatch"}};function h(s){return s>.75?"high":s>.55?"medium":"low"}o(h,"getSignalLevel");var M=class{static{o(this,"ReasonSignalCls")}findSignalByType(e){try{return Q[e]}catch(t){throw t}}sumSignalWeights(e){try{return Object.values(e).reduce((t,r)=>t+r.weight,0)}catch(t){throw t}}};var m=f(require("chalk"),1);var R=class{static{o(this,"BaseAssignerCase")}get evidenceSource(){return pe}get signalSource(){return Q}getTraceDivergenceSection(e){let t=e.traceDiff.issues;if(t.length===0)return"No divergence";let r=`
14
+ `;for(let n of t)n.type==="missing_step"&&(r+=m.default.yellow(`
15
+ * ${n.name}(missing_step):
16
+ `),r+=m.default.green(` \u2192 original: exists
17
+ `),r+=m.default.red(" \u2192 replay: missing"),r+=`
18
+ `),n.type==="extra_step"&&(r+=m.default.yellow(`
19
+ * ${n.name}(extra_step):
20
+ `),r+=m.default.green(` \u2192 original: none
21
+ `),r+=m.default.red(" \u2192 replay: exists"),r+=`
22
+ `);return r.trim()}getMessageEdvidence(e){return`${this.evidenceSource[e].value} (${this.evidenceSource[e].message})`}getStatusEdvidence(e){let t=fe.default.STATUS_CODES[e]||"Unknown";return`${e} (${t})`}isTraceMatch(e){return!e.traceDiff.isDifferent}isTraceStepMatch(e){return e.traceDiff.issues.length>0?!e.traceDiff.issues.some(t=>t.type==="missing_step"||t.type==="extra_step"):!0}isTraceReturnDataMatch(e){return e.traceDiff.issues.length>0?!e.traceDiff.issues.some(t=>t.type==="trace_return_data_mismatch"):!0}isResponseMatch(e){return!e.responseDiff.isDifferent}isResponseStatusMatch(e){let{originalStatus:t,replayStatus:r}=this.resolveStatus(e);return t===r}resolveStatus(e){return{originalStatus:Number(e.log.response.status),replayStatus:e.replayResultStatus}}getResponseDiffSection(e){let t=e.responseDiff.issues;if(t.length===0)return"No diff";let r=t.length>1?1:0,n=e.responseDiff.issues[r].not_matched;if(!n)return"No diff";let a=n.original||{},c=n.replay||{},i=new Set([...Object.keys(a),...Object.keys(c)]),l=`
23
+ `;for(let p of i){let g=a[p],d=c[p];g!==d&&(l+=m.default.yellow(` * ${p}:
24
+ `),l+=m.default.green(` \u2192 original: ${JSON.stringify(g)}
25
+ `),l+=m.default.red(` \u2192 replay: ${JSON.stringify(d)}
26
+ `))}return l}};var O=class extends R{static{o(this,"BusinessLogicRejectionCase")}condition(e,t){return this.isTraceMatch(e)&&this.isResponseMatch(e)&&t.originalStatus>=400&&t.replayStatus>=400}assign(e){try{let t=this.resolveStatus(e);if(this.condition(e,t)){let r=e.log.trace?.find(a=>a.parentId===null);return{type:"Business Logic Rejection Case (logic_suspicious)",message:"Response indicates error, but execution original and replay result match expected behavior",possibleCauses:["Business rule might not align with actual execution flow","Or validation logic is too strict / misaligned"],evidence:{traceMatch:this.getMessageEdvidence("trace_match"),responseMatch:this.getMessageEdvidence("response_match"),originalStatus:this.getStatusEdvidence(t.originalStatus),finalResponse:typeof r?.returnData=="object"?JSON.stringify(r.returnData,null,2):r?.returnData},confidence:{signals:{trace_match:this.signalSource.trace_step_match(.3),response_match:this.signalSource.response_match(.3),logic_error_indicator:this.signalSource.logic_error_indicator(.2)},result:0},finalMessage:["This is NOT a runtime bug","This is likely a business logic issue"],references:e.log.stack}}}catch(t){throw t}}};var F=class extends R{static{o(this,"PostTraceResponseMutationCase")}assign(e){try{let t=this.resolveStatus(e);if(this.isTraceStepMatch(e)&&!this.isResponseMatch(e)&&this.isTraceReturnDataMatch(e))return{type:"Response Mismatch Case (post_processing_suspicious)",message:"Execution flow is identical, but response output differs",possibleCauses:["Post-processing logic may be inconsistent","Response mapping or transformation may be incorrect","Data changes may affect the final result.","Non-deterministic behavior (e.g. random, time-based, shared state)"],evidence:{traceMatch:this.getMessageEdvidence("trace_match"),responseMatch:this.getMessageEdvidence("response_not_match"),originalStatus:this.getStatusEdvidence(t.originalStatus),responseDiff:this.getResponseDiffSection(e)},confidence:{signals:{trace_step_match:this.signalSource.trace_step_match(.3),response_mismatch:this.signalSource.response_not_match(.2),trace_return_data_match:this.signalSource.trace_return_data_match(.3)},result:0},finalMessage:["Execution logic is stable, but output is inconsistent","This may indicate issues in response transformation or side effects","This may occur after the business logic is execute complete."],references:e.log.stack}}catch(t){throw t}}};var I=class extends R{static{o(this,"TraceDivergenceCase")}assign(e){try{let t=this.resolveStatus(e);if(!this.isTraceStepMatch(e)&&!this.isResponseMatch(e)&&!this.isTraceReturnDataMatch(e)&&!this.isResponseStatusMatch(e))return{type:"Trace Divergence Case (execution_path_mismatch)",message:"Execution path diverged between original and replay",possibleCauses:["Conditional branch logic may behave differently","Environment or shared state may affect execution flow","Request context may not be deterministic","Replay execution may enter different logic branches","Hidden dependencies or side effects may exist"],evidence:{traceMatch:this.getMessageEdvidence("trace_not_match"),originalStatus:this.getStatusEdvidence(t.originalStatus),traceDivergence:this.getTraceDivergenceSection(e),responseDiff:this.getResponseDiffSection(e)},confidence:{signals:{trace_step_not_match:this.signalSource.trace_step_not_match(.45),trace_return_data_not_match:this.signalSource.trace_return_data_not_match(.25),response_not_match:this.signalSource.response_not_match(.15),response_status_not_match:this.signalSource.response_status_not_match(.1)},result:0},finalMessage:["Replay execution diverged from the original execution flow","This may indicate unstable conditions or branch inconsistency","Root cause likely exists before response generation"],references:e.log.stack}}catch(t){throw t}}};var N=class{static{o(this,"ReasonAssigner")}get case(){return{business_logic_rejection:new O,post_trace_response_mutation:new F,trace_divergence:new I}}};var u=f(require("chalk"),1);var B=class{static{o(this,"ReasonPrinter")}get reasonSignal(){return new M}title(e){console.log(u.default.yellowBright("** Reason Title:")),console.log(`[!] ${e}`)}description(e){console.log(u.default.yellowBright("** Description:")),console.log(e)}possibleCauses(e){console.log(u.default.yellowBright("** What I think happened:")),e.forEach(t=>{console.log(` \u2192 ${t}`)})}evidence(e){let t=Object.keys(e);console.log(u.default.yellowBright("** Evidence I saw:")),t.forEach(r=>{console.log(` \u2192 ${r}: ${e[r]}`)})}confidence(e){console.log(u.default.yellowBright("** Confidence Reason (why I think this): ")),e.signals&&Object.keys(e.signals).forEach(n=>{console.log(` \u2192 ${e.signals[n].message}`)}),e.result=this.reasonSignal.sumSignalWeights(e.signals);let t=Math.round(e.result*100);console.log(`
27
+ `),console.log(u.default.yellowBright("** Confidence Result: ")),console.log(u.default.green.italic.bold(` * score: ${e.result.toFixed(2)} / 1 `)),console.log(u.default.green.italic.bold(` * percent: ${t} / 100 (%) `))}finalMessage(e){e.length!=0&&(console.log(u.default.yellowBright("** Final Call:")),e.forEach(t=>{console.log(` \u2192 ${t}`)}))}referencePosition(e){if(e&&(console.log(u.default.yellowBright("* Reference Position: ")),console.log(" \u2192 Suspected position:",u.default.red.underline(e.primary?.full_path)),e.context&&e.context.length>0)){let t=e.context.length-1;e.context.forEach((r,n)=>{console.log(` \u2192 (Context ${t-n}): ${r.full_path}`)})}}printReason(e){try{if(!e)return;console.log(u.default.red.italic.bold(`
28
+ Aeeaeae yohh BUT...`)),this.title(e.type),console.log(`
29
+ `),this.description(e.message),console.log(`
30
+ `),this.possibleCauses(e.possibleCauses),console.log(`
31
+ `),this.evidence(e.evidence),console.log(`
32
+ `),this.confidence(e.confidence),console.log(`
33
+ `),this.finalMessage(e.finalMessage||[]),this.referencePosition(e.references)}catch(t){throw t}}};var A=class extends D{constructor(t){super(t);this.config=t}config;static{o(this,"AdvanceReplay")}get reasonPrinter(){return new B}get reasonAssigner(){return new N}printResponseDiff(t){if(t.isDifferent){console.log(y.default.red("[!] Response DIFF"));for(let r of t.issues)console.log(` - [${r.type}] ${r.message}`)}else console.log(y.default.green("[OK] Response MATCH"))}printTraceDiff(t){if(t.isDifferent){console.log(y.default.red("[!] Trace DIFF"));for(let r of t.issues)console.log(` - [${r.type}] ${r.name}`)}else console.log(y.default.green("[OK] Trace MATCH"))}printRootCauseIssue(t){if(t.length>0){let r=["performance_issue","performance_warning","performance_regression"];if(!t.every(a=>r.includes(a.type))){console.log(y.default.red("\u26A0 Root Cause Analysis"));for(let a of t)console.log(` - [${a.type}] ${a.message}`)}}else console.log(y.default.green("[OK] No root cause issues detected"))}printPerformanceIssue(t){let r=t.filter(n=>n.type==="performance_regression");if(r.length>0){console.log(y.default.yellow(`
34
+ \u26A0 Performance Regression Detected`));for(let n of r)console.log(`- ${n.step}: ${n.message}`)}}print(t){try{let{log:r,responseDiff:n,traceDiff:a,analysis:c}=t;console.log(y.default.bgYellowBright.bold(` \u25B6 ${r.request.method} ${r.request.url} `)),this.printResponseDiff(n),this.printTraceDiff(a),this.printRootCauseIssue(c),this.printPerformanceIssue(c),this.printReason(t)}catch(r){throw r}}printReason(t){try{let r=this.reasonAssigner.case.business_logic_rejection.assign(t);this.reasonPrinter.printReason(r);let n=this.reasonAssigner.case.post_trace_response_mutation.assign(t);this.reasonPrinter.printReason(n);let a=this.reasonAssigner.case.trace_divergence.assign(t);this.reasonPrinter.printReason(a)}catch(r){throw r}}analyzeRootCause(t){try{let{responseDiff:r,traceDiff:n,logTrace:a,replayData:c}=t,i=[],l=this.config.filters;r.isDifferent&&n.isDifferent&&i.push({type:"flow_break",message:"Response mismatch caused by trace difference"});let p=l?.expectedPerformance;if(!p)return i;for(let g of a){let d=c?.trace?.find(de=>de.name===g.name);if(!d)continue;let w=(d.duration_ms||0)-(g.duration_ms||0),me=Math.max(g.duration_ms||1,20),he=w/me*100,q=g.name.split("."),J=g.name;q.length==2?J=q[1]:J=q[0];let k=p.steps?.[J]??0;if(k===0)continue;let ye=k/2;w>k?i.push({type:"performance_regression",step:g.name,severity:"high",message:`Slow step: +${w}ms > ${k}ms (+${he.toFixed(1)}%)`}):w>ye&&i.push({type:"performance_warning",step:g.name,severity:"low",message:`Slight delay: +${w}ms`})}return i}catch(r){throw r}}async getTraceResult(t,r){try{let n=S(t.trace||[]),a=S(r.trace||[]),c=await this.filterManager.filterTrace(n),i=await this.filterManager.filterTrace(a),l=this.replayHelper.compareTrace(c,i);return{logTraceFiltered:c,replayTraceFiltered:i,traceDiff:l}}catch(n){throw n}}async getResponseResult(t,r,n){try{let a=await this.filterManager.filterResponse({error:JSON.parse(t.response.error),status:t.response.status}),c=await this.filterManager.filterResponse({error:r,status:n.status});return{responseDiff:this.replayHelper.compareResponse(a,c)}}catch(a){throw a}}async replay(t){try{let r=await this.replayHelper.sendRequest(t),n=await r.json(),a=n.__replay;delete n.__replay;let c=await this.getResponseResult(t,n,r),i=await this.getTraceResult(t,a),l=this.analyzeRootCause({replayData:a,traceDiff:i.traceDiff,logTrace:i.logTraceFiltered,responseDiff:c.responseDiff});r.status<=400&&l.length==0?this.print({log:t,replayResultStatus:r.status,analysis:[],traceDiff:{isDifferent:!1,issues:[]},responseDiff:{isDifferent:!1,issues:[]}}):this.print({log:t,replayResultStatus:r.status,analysis:l,traceDiff:i.traceDiff,responseDiff:c.responseDiff})}catch(r){throw r}}};var H=class{constructor(e){this.config=e}config;static{o(this,"ReplayHandler")}get replayHelper(){return new v(this.config)}async simpleReplay(e){try{console.log("Replaying log data : ",e);let r=await(await this.replayHelper.sendRequest(e)).json();console.log("Replayed response data : ",r)}catch(t){throw t}}async smartReplay(e){try{return new $(this.config).replay(e)}catch(t){throw t}}async advancedReplay(e){try{return new A(this.config).replay(e)}catch(t){throw t}}};var Z=process.argv.slice(2),ge=Z[0],ke=Z[1],x=Z[2];async function Le(){try{if(ge==="init"){let s=ue.default.resolve("replay-kit.config.ts");if(X.default.existsSync(s)){console.warn(C.default.yellowBright('\u26A0 "replay-kit.config.ts" already exists'));return}X.default.writeFileSync(s,se(),"utf-8"),console.log(C.default.greenBright('\u2714 "replay-kit.config.ts" created successfully'))}else if(ge==="replay"){ke||(console.error("[!] Please provide log level: error, warn, info "),process.exit(1));let s=await L(),e=new H(s),r=new T(s.logSetup).viewMany("error");console.log(`Replaying ${r.length} logs...
35
+ `),x||(console.error("[!] Please provide replay mode: simple, smart, advanced"),process.exit(1)),console.log(C.default.bold(`Using ${x} replay mode...
36
+ `));for(let n of r)console.log(`
37
+ Replaying log request id: ${n.meta.id}`),console.log("*Original Log Environment:",C.default.bgWhite(` ${n.meta.environment?.toUpperCase()}
38
+ `)),x==="--mode=smart"?await e.smartReplay(n):x==="--mode=advance"?await e.advancedReplay(n):x==="--mode=simple"?await e.simpleReplay(n):(console.error(`[!] Unknown replay mode: ${x}`),process.exit(1)),console.log(`
39
+ --------------------------
40
+ `);console.log("Replay finished!")}else console.log(`
41
+ Usage:
42
+ replay-kit replay <info, warn, error> --mode=<simple, smart, advance>
43
+
44
+ Example:
45
+ replay-kit replay error --mode=advance
46
+ `)}catch(s){throw s}}o(Le,"main");Le();
package/dist/cli.d.cts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/dist/cli.d.ts ADDED
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
package/dist/cli.js ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+ var ce=Object.defineProperty;var o=(s,e)=>ce(s,"name",{value:e,configurable:!0});import re from"fs";import A from"chalk";import _e from"path";import"dotenv/config";import"dotenv/config.js";import{ulid as Me}from"ulid";import{AsyncLocalStorage as fe}from"async_hooks";import W from"fs";import le from"chalk";import G from"path";import{bundleRequire as V}from"bundle-require";var Q="storage/logs",Y={logSetup:{path:Q}};function X(){return`import { defineConfig } from 'replay-kit';
3
+
4
+ export default defineConfig({
5
+ logSetup: {
6
+ path: '${Q}',
7
+ }
8
+ });`}o(X,"configContent");var w,J;var b=o(async()=>{try{return w||await pe(),w}catch(s){throw s}},"getConfig"),pe=o(async()=>{try{let s=G.resolve("replay-kit.config.ts");if(!W.existsSync(s)){console.warn(le.yellowBright('\u26A0 "replay-kit.config.ts" not found, using default config')),w=Y;return}let e=G.resolve("replay-kit.performance.config.ts");W.existsSync(e)&&(J=await(await V({filepath:e})).mod.default);let r=await(await V({filepath:s})).mod.default;J&&r.filters&&(r.filters.expectedPerformance=J),w=r}catch(s){throw w=Y,s}},"loadConfig");var Ne=new fe;import ue from"fs";import me from"path";import Z from"fs";var C=class{constructor(e){this.logger=e}logger;static{o(this,"RecordAction")}parseSafeData(e){try{return JSON.parse(JSON.stringify(e))}catch{throw{kind:"json_parse_error",message:"Failed to serialize log data",raw:String(e)}}}handler(e,t){try{let r=this.logger.fullLogPath,n=this.logger.logLevelPath(e);Z.mkdirSync(r,{recursive:!0});let a=this.parseSafeData(t),c={level:e,timestamp:new Date().toISOString(),...a},i=JSON.stringify(c)+`
9
+ `;Z.appendFileSync(n,i,{encoding:"utf8"})}catch(r){throw r}}};import ge from"fs";var k=class{constructor(e){this.logger=e}logger;static{o(this,"ViewManyAction")}handler(e){try{return ge.readFileSync(e,"utf8").split(`
10
+ `).filter(Boolean).map(r=>JSON.parse(r))}catch(t){throw t}}};var P=class{constructor(e){this.setup=e}setup;static{o(this,"ReplayKitLogger")}get actions(){return{record:new C(this),viewMany:new k(this)}}get fullLogPath(){return me.resolve(this.setup.path)}static shouldLog(e){return!!(e==500||[401,403,409,422].includes(e))}logLevelPath(e){return this.fullLogPath+`/${e}.log`}isExistLevel(e){return ue.existsSync(this.logLevelPath(e))}resource(e){return e}record(e,t){try{this.actions.record.handler(e,t)}catch(r){throw r}}viewMany(e){try{return this.actions.viewMany.handler(this.logLevelPath(e))}catch(t){throw t}}};import ye from"crypto";function ee(s){try{return ye.createHash("md5").update(s).digest("hex")}catch(e){throw e}}o(ee,"cryptoHash");var U="__root__";function de(s){let e=new Map;for(let t of s){let r=t.parentId||U;e.has(r)||e.set(r,[]),e.get(r).push(t)}return e}o(de,"buildTraceTree");function Re(s,e,t){return`${t}->${s.name}#${e}`}o(Re,"buildSignature");function R(s){try{let n=function(a,c){(t.get(a)||[]).sort((l,p)=>l.start-p.start).forEach((l,p)=>{let f=Re(l,p,c),h=ee(f);r.push({...l,signature:h,rawSignature:f}),n(l.id,h)})};var e=n;o(n,"walk");let t=de(s),r=[];return n(U,U),r}catch(t){throw t}}o(R,"flattenTrace");var S=class{constructor(e){this.config=e}config;static{o(this,"ReplayFilterManager")}matchPattern(e,t){try{return e instanceof RegExp?e.test(t):e.includes("*")?new RegExp("^"+e.replace(/\*/g,".*")+"$").test(t):e===t}catch(r){throw r}}async filterTrace(e){try{if(!this.config.filters||!e||e.length===0)return e;let t=this.config.filters;return e.filter(r=>{let n=r.name;return!t.ignoreSteps?.some(c=>this.matchPattern(c,n))})}catch(t){throw t}}async filterNonOptionalTrace(e){try{if(!this.config.filters||!e||e.length===0)return e;let t=this.config.filters;return e.filter(r=>{let n=r.name;return!t.optionalSteps?.some(c=>this.matchPattern(c,n))})}catch(t){throw t}}isOptionalStep(e){try{return this.config.filters?.optionalSteps?.some(t=>this.matchPattern(t,e))}catch(t){throw t}}async filterResponse(e){try{if(!this.config.filters||!e)return e;let t=Object.keys(e.error);if(t.length===0)return e;let r=this.config.filters;for(let n of t)r.ignoreFields?.includes(n)&&delete e.error[n];return{...e,error:e.error}}catch(t){throw t}}};var _=class{constructor(e){this.config=e}config;static{o(this,"ReplayHelper")}get filterManager(){return new S(this.config)}setConfig(e){this.config=e}normalize(e){if(!e)return e;if(typeof e=="string")try{return JSON.parse(e)}catch{return e}return e}stableStringify(e){return JSON.stringify(this.sortKeys(e))}sortKeys(e){return Array.isArray(e)?e.map(t=>this.sortKeys(t)):e&&typeof e=="object"?Object.keys(e).sort().reduce((t,r)=>(t[r]=this.sortKeys(e[r]),t),{}):e}compareTrace(e,t){try{let r=[],n=new Map(e.map(i=>[i.signature,i])),a=new Map(t.map(i=>[i.signature,i])),c={};for(let[i,l]of n)c[l.name]={id:l.id,parentId:l.parentId,original:l.returnData,replay:null},a.has(l.signature)||this.filterManager.isOptionalStep(l.name)||r.push({type:"missing_step",name:l.name,message:`Missing step: ${i}`});for(let[i,l]of a)c[l.name].replay=l.returnData,n.has(l.signature)||i&&this.filterManager.isOptionalStep(l.name)||r.push({type:"extra_step",name:l.name,message:`Extra step: ${i}`});for(let i in c){let l=c[i].original,p=c[i].replay;l!==p&&r.push({type:"trace_return_data_mismatch",name:i,message:"Trace return data mismatch",not_matched:{original:l,replay:p}})}return{isDifferent:r.length>0,issues:r}}catch(r){throw r}}compareResponse(e,t){try{let r=[];e.status!==t.status&&r.push({type:"status_mismatch",message:"Status code mismatch",not_matched:{original:e.status,replay:t.status}});let n=this.normalize(e.error),a=this.normalize(t.error),c=this.stableStringify(n),i=this.stableStringify(a);return c!==i&&r.push({type:"body_mismatch",message:"Response mismatch",not_matched:{original:n,replay:a}}),{isDifferent:r.length>0,issues:r}}catch(r){throw r}}fullUrl(e){return`${process.env.SERVER_URL}${e}`}async sendRequest(e){try{return await fetch(this.fullUrl(e.request.url),{method:e.request.method,headers:{"Content-Type":"application/json","x-is-replay":"true"},body:JSON.stringify(e.request.body)})}catch(t){throw t}}};import L from"chalk";var v=class{constructor(e){this.config=e}config;static{o(this,"BaseReplay")}get filterManager(){return new S(this.config)}get replayHelper(){return new _(this.config)}};var K=class extends v{constructor(t){super(t);this.config=t}config;static{o(this,"SmartReplay")}print(t){try{let{log:r,replay:n,responseDiff:a,traceDiff:c}=t;if(console.log(L.yellow.bold(`\u25B6 ${r.request.method} ${r.request.url}`)),!a.isDifferent&&!c.isDifferent){console.log(L.green(`[OK] Reponse & Trace match
11
+ `));return}if(a.isDifferent&&console.log(L.red(`[!] Response DIFF
12
+ `)),c.isDifferent){console.log(L.red(`[!] Trace DIFF
13
+ `));for(let i of c.issues)console.log(` - [${i.type}] ${i.name}`)}}catch(r){throw r}}async replay(t){try{t.request.headers["x-replay-id"]=t.meta.id;let r=await this.replayHelper.sendRequest(t),n=await r.json(),a=n.__replay;delete n.__replay;let c=this.replayHelper.compareResponse({error:t.response.error,status:t.response.status},{error:n,status:r.status}),i=R(t.trace||[]),l=R(a.trace||[]),p=this.replayHelper.compareTrace(i,l);this.print({log:t,replay:r,responseDiff:c,traceDiff:p})}catch(r){throw r}}};import d from"chalk";import Se from"http";var j={trace_step_match:o((s=.1)=>({weight:s,serverity:u(s),message:`trace_match (+${s}) \u2192 trace fully matches replay`}),"trace_step_match"),trace_step_not_match:o((s=.25)=>({weight:s,serverity:u(s),message:`trace_step_not_match (+${s}) \u2192 trace partially matches replay`}),"trace_step_not_match"),trace_return_data_match:o((s=.1)=>({weight:s,serverity:u(s),message:`trace_return_data_match (+${s}) \u2192 trace return data is consistent`}),"trace_return_data_match"),trace_return_data_not_match:o((s=.25)=>({weight:s,serverity:u(s),message:`trace_return_data_not_match (+${s}) \u2192 trace return data is inconsistent`}),"trace_return_data_not_match"),response_match:o((s=.1)=>({weight:s,serverity:u(s),message:`response_match (+${s}) \u2192 response is consistent`}),"response_match"),response_not_match:o((s=.25)=>({weight:s,serverity:u(s),message:`response_not_match (+${s}) \u2192 response is inconsistent`}),"response_not_match"),response_status_match:o((s=.1)=>({weight:s,serverity:u(s),message:`response_status_match (+${s}) \u2192 response status is consistent`}),"response_status_match"),response_status_not_match:o((s=.25)=>({weight:s,serverity:u(s),message:`response_status_not_match (+${s}) \u2192 response status is inconsistent`}),"response_status_not_match"),logic_error_indicator:o((s=.6)=>({weight:s,serverity:u(s),message:`logic_error_indicator (+${s}) \u2192 original response status >= 400 triggered logic flag`}),"logic_error_indicator")},te={trace_match:{value:!0,message:"flow is clean"},trace_not_match:{value:!1,message:"flow is not clean"},trace_step_match:{value:!0,message:"no mismatch"},trace_step_not_match:{value:!1,message:"mismatch"},trace_return_data_match:{value:!0,message:"no mismatch"},trace_return_data_not_match:{value:!1,message:"mismatch"},response_match:{value:!0,message:"no mismatch"},response_not_match:{value:!1,message:"mismatch"}};function u(s){return s>.75?"high":s>.55?"medium":"low"}o(u,"getSignalLevel");var E=class{static{o(this,"ReasonSignalCls")}findSignalByType(e){try{return j[e]}catch(t){throw t}}sumSignalWeights(e){try{return Object.values(e).reduce((t,r)=>t+r.weight,0)}catch(t){throw t}}};import m from"chalk";var y=class{static{o(this,"BaseAssignerCase")}get evidenceSource(){return te}get signalSource(){return j}getTraceDivergenceSection(e){let t=e.traceDiff.issues;if(t.length===0)return"No divergence";let r=`
14
+ `;for(let n of t)n.type==="missing_step"&&(r+=m.yellow(`
15
+ * ${n.name}(missing_step):
16
+ `),r+=m.green(` \u2192 original: exists
17
+ `),r+=m.red(" \u2192 replay: missing"),r+=`
18
+ `),n.type==="extra_step"&&(r+=m.yellow(`
19
+ * ${n.name}(extra_step):
20
+ `),r+=m.green(` \u2192 original: none
21
+ `),r+=m.red(" \u2192 replay: exists"),r+=`
22
+ `);return r.trim()}getMessageEdvidence(e){return`${this.evidenceSource[e].value} (${this.evidenceSource[e].message})`}getStatusEdvidence(e){let t=Se.STATUS_CODES[e]||"Unknown";return`${e} (${t})`}isTraceMatch(e){return!e.traceDiff.isDifferent}isTraceStepMatch(e){return e.traceDiff.issues.length>0?!e.traceDiff.issues.some(t=>t.type==="missing_step"||t.type==="extra_step"):!0}isTraceReturnDataMatch(e){return e.traceDiff.issues.length>0?!e.traceDiff.issues.some(t=>t.type==="trace_return_data_mismatch"):!0}isResponseMatch(e){return!e.responseDiff.isDifferent}isResponseStatusMatch(e){let{originalStatus:t,replayStatus:r}=this.resolveStatus(e);return t===r}resolveStatus(e){return{originalStatus:Number(e.log.response.status),replayStatus:e.replayResultStatus}}getResponseDiffSection(e){let t=e.responseDiff.issues;if(t.length===0)return"No diff";let r=t.length>1?1:0,n=e.responseDiff.issues[r].not_matched;if(!n)return"No diff";let a=n.original||{},c=n.replay||{},i=new Set([...Object.keys(a),...Object.keys(c)]),l=`
23
+ `;for(let p of i){let f=a[p],h=c[p];f!==h&&(l+=m.yellow(` * ${p}:
24
+ `),l+=m.green(` \u2192 original: ${JSON.stringify(f)}
25
+ `),l+=m.red(` \u2192 replay: ${JSON.stringify(h)}
26
+ `))}return l}};var $=class extends y{static{o(this,"BusinessLogicRejectionCase")}condition(e,t){return this.isTraceMatch(e)&&this.isResponseMatch(e)&&t.originalStatus>=400&&t.replayStatus>=400}assign(e){try{let t=this.resolveStatus(e);if(this.condition(e,t)){let r=e.log.trace?.find(a=>a.parentId===null);return{type:"Business Logic Rejection Case (logic_suspicious)",message:"Response indicates error, but execution original and replay result match expected behavior",possibleCauses:["Business rule might not align with actual execution flow","Or validation logic is too strict / misaligned"],evidence:{traceMatch:this.getMessageEdvidence("trace_match"),responseMatch:this.getMessageEdvidence("response_match"),originalStatus:this.getStatusEdvidence(t.originalStatus),finalResponse:typeof r?.returnData=="object"?JSON.stringify(r.returnData,null,2):r?.returnData},confidence:{signals:{trace_match:this.signalSource.trace_step_match(.3),response_match:this.signalSource.response_match(.3),logic_error_indicator:this.signalSource.logic_error_indicator(.2)},result:0},finalMessage:["This is NOT a runtime bug","This is likely a business logic issue"],references:e.log.stack}}}catch(t){throw t}}};var M=class extends y{static{o(this,"PostTraceResponseMutationCase")}assign(e){try{let t=this.resolveStatus(e);if(this.isTraceStepMatch(e)&&!this.isResponseMatch(e)&&this.isTraceReturnDataMatch(e))return{type:"Response Mismatch Case (post_processing_suspicious)",message:"Execution flow is identical, but response output differs",possibleCauses:["Post-processing logic may be inconsistent","Response mapping or transformation may be incorrect","Data changes may affect the final result.","Non-deterministic behavior (e.g. random, time-based, shared state)"],evidence:{traceMatch:this.getMessageEdvidence("trace_match"),responseMatch:this.getMessageEdvidence("response_not_match"),originalStatus:this.getStatusEdvidence(t.originalStatus),responseDiff:this.getResponseDiffSection(e)},confidence:{signals:{trace_step_match:this.signalSource.trace_step_match(.3),response_mismatch:this.signalSource.response_not_match(.2),trace_return_data_match:this.signalSource.trace_return_data_match(.3)},result:0},finalMessage:["Execution logic is stable, but output is inconsistent","This may indicate issues in response transformation or side effects","This may occur after the business logic is execute complete."],references:e.log.stack}}catch(t){throw t}}};var O=class extends y{static{o(this,"TraceDivergenceCase")}assign(e){try{let t=this.resolveStatus(e);if(!this.isTraceStepMatch(e)&&!this.isResponseMatch(e)&&!this.isTraceReturnDataMatch(e)&&!this.isResponseStatusMatch(e))return{type:"Trace Divergence Case (execution_path_mismatch)",message:"Execution path diverged between original and replay",possibleCauses:["Conditional branch logic may behave differently","Environment or shared state may affect execution flow","Request context may not be deterministic","Replay execution may enter different logic branches","Hidden dependencies or side effects may exist"],evidence:{traceMatch:this.getMessageEdvidence("trace_not_match"),originalStatus:this.getStatusEdvidence(t.originalStatus),traceDivergence:this.getTraceDivergenceSection(e),responseDiff:this.getResponseDiffSection(e)},confidence:{signals:{trace_step_not_match:this.signalSource.trace_step_not_match(.45),trace_return_data_not_match:this.signalSource.trace_return_data_not_match(.25),response_not_match:this.signalSource.response_not_match(.15),response_status_not_match:this.signalSource.response_status_not_match(.1)},result:0},finalMessage:["Replay execution diverged from the original execution flow","This may indicate unstable conditions or branch inconsistency","Root cause likely exists before response generation"],references:e.log.stack}}catch(t){throw t}}};var F=class{static{o(this,"ReasonAssigner")}get case(){return{business_logic_rejection:new $,post_trace_response_mutation:new M,trace_divergence:new O}}};import g from"chalk";var I=class{static{o(this,"ReasonPrinter")}get reasonSignal(){return new E}title(e){console.log(g.yellowBright("** Reason Title:")),console.log(`[!] ${e}`)}description(e){console.log(g.yellowBright("** Description:")),console.log(e)}possibleCauses(e){console.log(g.yellowBright("** What I think happened:")),e.forEach(t=>{console.log(` \u2192 ${t}`)})}evidence(e){let t=Object.keys(e);console.log(g.yellowBright("** Evidence I saw:")),t.forEach(r=>{console.log(` \u2192 ${r}: ${e[r]}`)})}confidence(e){console.log(g.yellowBright("** Confidence Reason (why I think this): ")),e.signals&&Object.keys(e.signals).forEach(n=>{console.log(` \u2192 ${e.signals[n].message}`)}),e.result=this.reasonSignal.sumSignalWeights(e.signals);let t=Math.round(e.result*100);console.log(`
27
+ `),console.log(g.yellowBright("** Confidence Result: ")),console.log(g.green.italic.bold(` * score: ${e.result.toFixed(2)} / 1 `)),console.log(g.green.italic.bold(` * percent: ${t} / 100 (%) `))}finalMessage(e){e.length!=0&&(console.log(g.yellowBright("** Final Call:")),e.forEach(t=>{console.log(` \u2192 ${t}`)}))}referencePosition(e){if(e&&(console.log(g.yellowBright("* Reference Position: ")),console.log(" \u2192 Suspected position:",g.red.underline(e.primary?.full_path)),e.context&&e.context.length>0)){let t=e.context.length-1;e.context.forEach((r,n)=>{console.log(` \u2192 (Context ${t-n}): ${r.full_path}`)})}}printReason(e){try{if(!e)return;console.log(g.red.italic.bold(`
28
+ Aeeaeae yohh BUT...`)),this.title(e.type),console.log(`
29
+ `),this.description(e.message),console.log(`
30
+ `),this.possibleCauses(e.possibleCauses),console.log(`
31
+ `),this.evidence(e.evidence),console.log(`
32
+ `),this.confidence(e.confidence),console.log(`
33
+ `),this.finalMessage(e.finalMessage||[]),this.referencePosition(e.references)}catch(t){throw t}}};var N=class extends v{constructor(t){super(t);this.config=t}config;static{o(this,"AdvanceReplay")}get reasonPrinter(){return new I}get reasonAssigner(){return new F}printResponseDiff(t){if(t.isDifferent){console.log(d.red("[!] Response DIFF"));for(let r of t.issues)console.log(` - [${r.type}] ${r.message}`)}else console.log(d.green("[OK] Response MATCH"))}printTraceDiff(t){if(t.isDifferent){console.log(d.red("[!] Trace DIFF"));for(let r of t.issues)console.log(` - [${r.type}] ${r.name}`)}else console.log(d.green("[OK] Trace MATCH"))}printRootCauseIssue(t){if(t.length>0){let r=["performance_issue","performance_warning","performance_regression"];if(!t.every(a=>r.includes(a.type))){console.log(d.red("\u26A0 Root Cause Analysis"));for(let a of t)console.log(` - [${a.type}] ${a.message}`)}}else console.log(d.green("[OK] No root cause issues detected"))}printPerformanceIssue(t){let r=t.filter(n=>n.type==="performance_regression");if(r.length>0){console.log(d.yellow(`
34
+ \u26A0 Performance Regression Detected`));for(let n of r)console.log(`- ${n.step}: ${n.message}`)}}print(t){try{let{log:r,responseDiff:n,traceDiff:a,analysis:c}=t;console.log(d.bgYellowBright.bold(` \u25B6 ${r.request.method} ${r.request.url} `)),this.printResponseDiff(n),this.printTraceDiff(a),this.printRootCauseIssue(c),this.printPerformanceIssue(c),this.printReason(t)}catch(r){throw r}}printReason(t){try{let r=this.reasonAssigner.case.business_logic_rejection.assign(t);this.reasonPrinter.printReason(r);let n=this.reasonAssigner.case.post_trace_response_mutation.assign(t);this.reasonPrinter.printReason(n);let a=this.reasonAssigner.case.trace_divergence.assign(t);this.reasonPrinter.printReason(a)}catch(r){throw r}}analyzeRootCause(t){try{let{responseDiff:r,traceDiff:n,logTrace:a,replayData:c}=t,i=[],l=this.config.filters;r.isDifferent&&n.isDifferent&&i.push({type:"flow_break",message:"Response mismatch caused by trace difference"});let p=l?.expectedPerformance;if(!p)return i;for(let f of a){let h=c?.trace?.find(ie=>ie.name===f.name);if(!h)continue;let x=(h.duration_ms||0)-(f.duration_ms||0),ne=Math.max(f.duration_ms||1,20),oe=x/ne*100,H=f.name.split("."),q=f.name;H.length==2?q=H[1]:q=H[0];let T=p.steps?.[q]??0;if(T===0)continue;let ae=T/2;x>T?i.push({type:"performance_regression",step:f.name,severity:"high",message:`Slow step: +${x}ms > ${T}ms (+${oe.toFixed(1)}%)`}):x>ae&&i.push({type:"performance_warning",step:f.name,severity:"low",message:`Slight delay: +${x}ms`})}return i}catch(r){throw r}}async getTraceResult(t,r){try{let n=R(t.trace||[]),a=R(r.trace||[]),c=await this.filterManager.filterTrace(n),i=await this.filterManager.filterTrace(a),l=this.replayHelper.compareTrace(c,i);return{logTraceFiltered:c,replayTraceFiltered:i,traceDiff:l}}catch(n){throw n}}async getResponseResult(t,r,n){try{let a=await this.filterManager.filterResponse({error:JSON.parse(t.response.error),status:t.response.status}),c=await this.filterManager.filterResponse({error:r,status:n.status});return{responseDiff:this.replayHelper.compareResponse(a,c)}}catch(a){throw a}}async replay(t){try{let r=await this.replayHelper.sendRequest(t),n=await r.json(),a=n.__replay;delete n.__replay;let c=await this.getResponseResult(t,n,r),i=await this.getTraceResult(t,a),l=this.analyzeRootCause({replayData:a,traceDiff:i.traceDiff,logTrace:i.logTraceFiltered,responseDiff:c.responseDiff});r.status<=400&&l.length==0?this.print({log:t,replayResultStatus:r.status,analysis:[],traceDiff:{isDifferent:!1,issues:[]},responseDiff:{isDifferent:!1,issues:[]}}):this.print({log:t,replayResultStatus:r.status,analysis:l,traceDiff:i.traceDiff,responseDiff:c.responseDiff})}catch(r){throw r}}};var B=class{constructor(e){this.config=e}config;static{o(this,"ReplayHandler")}get replayHelper(){return new _(this.config)}async simpleReplay(e){try{console.log("Replaying log data : ",e);let r=await(await this.replayHelper.sendRequest(e)).json();console.log("Replayed response data : ",r)}catch(t){throw t}}async smartReplay(e){try{return new K(this.config).replay(e)}catch(t){throw t}}async advancedReplay(e){try{return new N(this.config).replay(e)}catch(t){throw t}}};var z=process.argv.slice(2),se=z[0],ve=z[1],D=z[2];async function De(){try{if(se==="init"){let s=_e.resolve("replay-kit.config.ts");if(re.existsSync(s)){console.warn(A.yellowBright('\u26A0 "replay-kit.config.ts" already exists'));return}re.writeFileSync(s,X(),"utf-8"),console.log(A.greenBright('\u2714 "replay-kit.config.ts" created successfully'))}else if(se==="replay"){ve||(console.error("[!] Please provide log level: error, warn, info "),process.exit(1));let s=await b(),e=new B(s),r=new P(s.logSetup).viewMany("error");console.log(`Replaying ${r.length} logs...
35
+ `),D||(console.error("[!] Please provide replay mode: simple, smart, advanced"),process.exit(1)),console.log(A.bold(`Using ${D} replay mode...
36
+ `));for(let n of r)console.log(`
37
+ Replaying log request id: ${n.meta.id}`),console.log("*Original Log Environment:",A.bgWhite(` ${n.meta.environment?.toUpperCase()}
38
+ `)),D==="--mode=smart"?await e.smartReplay(n):D==="--mode=advance"?await e.advancedReplay(n):D==="--mode=simple"?await e.simpleReplay(n):(console.error(`[!] Unknown replay mode: ${D}`),process.exit(1)),console.log(`
39
+ --------------------------
40
+ `);console.log("Replay finished!")}else console.log(`
41
+ Usage:
42
+ replay-kit replay <info, warn, error> --mode=<simple, smart, advance>
43
+
44
+ Example:
45
+ replay-kit replay error --mode=advance
46
+ `)}catch(s){throw s}}o(De,"main");De();
@@ -0,0 +1 @@
1
+ "use strict";var o=Object.defineProperty;var t=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var O=(R,r)=>{for(var m in r)o(R,m,{get:r[m],enumerable:!0})},a=(R,r,m,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let f of x(r))!N.call(R,f)&&f!==m&&o(R,f,{get:()=>r[f],enumerable:!(n=t(r,f))||n.enumerable});return R};var i=R=>a(o({},"__esModule",{value:!0}),R);var u={};O(u,{LogLevel:()=>p});module.exports=i(u);var p=(n=>(n.INFO="info",n.WARN="warn",n.ERROR="error",n))(p||{});0&&(module.exports={LogLevel});
@@ -0,0 +1 @@
1
+ export { LogLevel } from './log_level.enum.cjs';
@@ -0,0 +1 @@
1
+ export { LogLevel } from './log_level.enum.js';
@@ -0,0 +1 @@
1
+ var R=(r=>(r.INFO="info",r.WARN="warn",r.ERROR="error",r))(R||{});export{R as LogLevel};
@@ -0,0 +1 @@
1
+ "use strict";var a=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var t=(R,r)=>{for(var O in r)a(R,O,{get:r[O],enumerable:!0})},u=(R,r,O,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let N of m(r))!p.call(R,N)&&N!==O&&a(R,N,{get:()=>r[N],enumerable:!(n=i(r,N))||n.enumerable});return R};var w=R=>u(a({},"__esModule",{value:!0}),R);var x={};t(x,{LogLevel:()=>f});module.exports=w(x);var f=(n=>(n.INFO="info",n.WARN="warn",n.ERROR="error",n))(f||{});0&&(module.exports={LogLevel});
@@ -0,0 +1,7 @@
1
+ declare enum LogLevel {
2
+ INFO = "info",
3
+ WARN = "warn",
4
+ ERROR = "error"
5
+ }
6
+
7
+ export { LogLevel };
@@ -0,0 +1,7 @@
1
+ declare enum LogLevel {
2
+ INFO = "info",
3
+ WARN = "warn",
4
+ ERROR = "error"
5
+ }
6
+
7
+ export { LogLevel };
@@ -0,0 +1 @@
1
+ var R=(r=>(r.INFO="info",r.WARN="warn",r.ERROR="error",r))(R||{});export{R as LogLevel};
@@ -0,0 +1,75 @@
1
+ import { AsyncLocalStorage } from 'async_hooks';
2
+
3
+ type ReplayKitTraceEvent = {
4
+ id: string;
5
+ traceId: string;
6
+ parentId: string | null;
7
+ type: string;
8
+ name: string;
9
+ start: number;
10
+ payload?: any;
11
+ returnData?: any;
12
+ duration_ms?: number;
13
+ status?: 'success' | 'error';
14
+ signature?: string;
15
+ rawSignature?: string;
16
+ meta?: any;
17
+ };
18
+ type TraceContext = {
19
+ traceId: string;
20
+ trace: any[];
21
+ spanStack: any[];
22
+ stack: StackReference;
23
+ };
24
+ type TraceOptions<T extends (...args: any) => any> = {
25
+ type: string;
26
+ name: string;
27
+ fn: T;
28
+ args: Parameters<T>;
29
+ meta?: any;
30
+ };
31
+ declare const als: AsyncLocalStorage<TraceContext>;
32
+ declare function addTrace(event: ReplayKitTraceEvent): void;
33
+ declare function traceStep<T extends (...args: any[]) => any>(options: TraceOptions<T>): Promise<Awaited<ReturnType<T>>>;
34
+
35
+ type LogEnvironment = "development" | "production" | "no_specified";
36
+ type StackReferenceDetails = {
37
+ file: string;
38
+ position: [number, number];
39
+ full_path?: string;
40
+ function?: string;
41
+ };
42
+ type StackReference = {
43
+ primary: StackReferenceDetails;
44
+ context?: Array<StackReferenceDetails>;
45
+ };
46
+ type ReplayKitLogData = {
47
+ meta: {
48
+ id: string;
49
+ traceId?: string;
50
+ environment?: LogEnvironment;
51
+ app_version?: string;
52
+ replaykit_version?: string;
53
+ timestamp: string;
54
+ };
55
+ request: {
56
+ method: string;
57
+ url: string;
58
+ headers: Record<string, any>;
59
+ body: any;
60
+ };
61
+ response: {
62
+ status: number | string;
63
+ error: Record<string, any>;
64
+ duration_ms: number;
65
+ };
66
+ trace?: ReplayKitTraceEvent[];
67
+ stack?: StackReference;
68
+ };
69
+ declare class ReplayKitError {
70
+ protected data: ReplayKitLogData;
71
+ constructor(data: ReplayKitLogData);
72
+ log(): Promise<void>;
73
+ }
74
+
75
+ export { type LogEnvironment as L, type ReplayKitLogData as R, type StackReference as S, type TraceOptions as T, type ReplayKitTraceEvent as a, type StackReferenceDetails as b, addTrace as c, ReplayKitError as d, type TraceContext as e, als as f, traceStep as t };
@@ -0,0 +1,75 @@
1
+ import { AsyncLocalStorage } from 'async_hooks';
2
+
3
+ type ReplayKitTraceEvent = {
4
+ id: string;
5
+ traceId: string;
6
+ parentId: string | null;
7
+ type: string;
8
+ name: string;
9
+ start: number;
10
+ payload?: any;
11
+ returnData?: any;
12
+ duration_ms?: number;
13
+ status?: 'success' | 'error';
14
+ signature?: string;
15
+ rawSignature?: string;
16
+ meta?: any;
17
+ };
18
+ type TraceContext = {
19
+ traceId: string;
20
+ trace: any[];
21
+ spanStack: any[];
22
+ stack: StackReference;
23
+ };
24
+ type TraceOptions<T extends (...args: any) => any> = {
25
+ type: string;
26
+ name: string;
27
+ fn: T;
28
+ args: Parameters<T>;
29
+ meta?: any;
30
+ };
31
+ declare const als: AsyncLocalStorage<TraceContext>;
32
+ declare function addTrace(event: ReplayKitTraceEvent): void;
33
+ declare function traceStep<T extends (...args: any[]) => any>(options: TraceOptions<T>): Promise<Awaited<ReturnType<T>>>;
34
+
35
+ type LogEnvironment = "development" | "production" | "no_specified";
36
+ type StackReferenceDetails = {
37
+ file: string;
38
+ position: [number, number];
39
+ full_path?: string;
40
+ function?: string;
41
+ };
42
+ type StackReference = {
43
+ primary: StackReferenceDetails;
44
+ context?: Array<StackReferenceDetails>;
45
+ };
46
+ type ReplayKitLogData = {
47
+ meta: {
48
+ id: string;
49
+ traceId?: string;
50
+ environment?: LogEnvironment;
51
+ app_version?: string;
52
+ replaykit_version?: string;
53
+ timestamp: string;
54
+ };
55
+ request: {
56
+ method: string;
57
+ url: string;
58
+ headers: Record<string, any>;
59
+ body: any;
60
+ };
61
+ response: {
62
+ status: number | string;
63
+ error: Record<string, any>;
64
+ duration_ms: number;
65
+ };
66
+ trace?: ReplayKitTraceEvent[];
67
+ stack?: StackReference;
68
+ };
69
+ declare class ReplayKitError {
70
+ protected data: ReplayKitLogData;
71
+ constructor(data: ReplayKitLogData);
72
+ log(): Promise<void>;
73
+ }
74
+
75
+ export { type LogEnvironment as L, type ReplayKitLogData as R, type StackReference as S, type TraceOptions as T, type ReplayKitTraceEvent as a, type StackReferenceDetails as b, addTrace as c, ReplayKitError as d, type TraceContext as e, als as f, traceStep as t };
@@ -0,0 +1 @@
1
+ "use strict";var n=Object.create;var c=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var m=Object.getPrototypeOf,u=Object.prototype.hasOwnProperty;var h=(r,t)=>c(r,"name",{value:t,configurable:!0});var y=(r,t)=>{for(var e in t)c(r,e,{get:t[e],enumerable:!0})},p=(r,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of d(t))!u.call(r,o)&&o!==e&&c(r,o,{get:()=>t[o],enumerable:!(a=s(t,o))||a.enumerable});return r};var f=(r,t,e)=>(e=r!=null?n(m(r)):{},p(t||!r||!r.__esModule?c(e,"default",{value:r,enumerable:!0}):e,r)),g=r=>p(c({},"__esModule",{value:!0}),r);var H={};y(H,{cryptoHash:()=>x});module.exports=g(H);var i=f(require("crypto"),1);function x(r){try{return i.default.createHash("md5").update(r).digest("hex")}catch(t){throw t}}h(x,"cryptoHash");0&&(module.exports={cryptoHash});
@@ -0,0 +1,3 @@
1
+ declare function cryptoHash(str: string): string;
2
+
3
+ export { cryptoHash };
@@ -0,0 +1,3 @@
1
+ declare function cryptoHash(str: string): string;
2
+
3
+ export { cryptoHash };
@@ -0,0 +1 @@
1
+ var o=Object.defineProperty;var e=(r,t)=>o(r,"name",{value:t,configurable:!0});import c from"crypto";function p(r){try{return c.createHash("md5").update(r).digest("hex")}catch(t){throw t}}e(p,"cryptoHash");export{p as cryptoHash};
@@ -0,0 +1,3 @@
1
+ "use strict";var K=Object.create;var s=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,O=Object.prototype.hasOwnProperty;var n=(t,e)=>s(t,"name",{value:e,configurable:!0});var _=(t,e)=>{for(var r in e)s(t,r,{get:e[r],enumerable:!0})},L=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of b(e))!O.call(t,i)&&i!==r&&s(t,i,{get:()=>e[i],enumerable:!(o=E(e,i))||o.enumerable});return t};var a=(t,e,r)=>(r=t!=null?K(F(t)):{},L(e||!t||!t.__esModule?s(r,"default",{value:t,enumerable:!0}):r,t)),N=t=>L(s({},"__esModule",{value:!0}),t);var I={};_(I,{ReplayKitError:()=>y});module.exports=N(I);var R=a(require("fs"),1),w=a(require("path"),1);var l=a(require("fs"),1);var c=class{constructor(e){this.logger=e}logger;static{n(this,"RecordAction")}parseSafeData(e){try{return JSON.parse(JSON.stringify(e))}catch{throw{kind:"json_parse_error",message:"Failed to serialize log data",raw:String(e)}}}handler(e,r){try{let o=this.logger.fullLogPath,i=this.logger.logLevelPath(e);l.default.mkdirSync(o,{recursive:!0});let x=this.parseSafeData(r),D={level:e,timestamp:new Date().toISOString(),...x},k=JSON.stringify(D)+`
2
+ `;l.default.appendFileSync(i,k,{encoding:"utf8"})}catch(o){throw o}}};var S=a(require("fs"),1);var g=class{constructor(e){this.logger=e}logger;static{n(this,"ViewManyAction")}handler(e){try{return S.default.readFileSync(e,"utf8").split(`
3
+ `).filter(Boolean).map(o=>JSON.parse(o))}catch(r){throw r}}};var f=class{constructor(e){this.setup=e}setup;static{n(this,"ReplayKitLogger")}get actions(){return{record:new c(this),viewMany:new g(this)}}get fullLogPath(){return w.default.resolve(this.setup.path)}static shouldLog(e){return!!(e==500||[401,403,409,422].includes(e))}logLevelPath(e){return this.fullLogPath+`/${e}.log`}isExistLevel(e){return R.default.existsSync(this.logLevelPath(e))}resource(e){return e}record(e,r){try{this.actions.record.handler(e,r)}catch(o){throw o}}viewMany(e){try{return this.actions.viewMany.handler(this.logLevelPath(e))}catch(r){throw r}}};var u=a(require("fs"),1),P=a(require("chalk"),1),d=a(require("path"),1),h=require("bundle-require");var J="storage/logs",v={logSetup:{path:J}};var p,m;var C=n(async()=>{try{return p||await q(),p}catch(t){throw t}},"getConfig"),q=n(async()=>{try{let t=d.default.resolve("replay-kit.config.ts");if(!u.default.existsSync(t)){console.warn(P.default.yellowBright('\u26A0 "replay-kit.config.ts" not found, using default config')),p=v;return}let e=d.default.resolve("replay-kit.performance.config.ts");u.default.existsSync(e)&&(m=await(await(0,h.bundleRequire)({filepath:e})).mod.default);let o=await(await(0,h.bundleRequire)({filepath:t})).mod.default;m&&o.filters&&(o.filters.expectedPerformance=m),p=o}catch(t){throw p=v,t}},"loadConfig");var y=class{constructor(e){this.data=e;try{this.log()}catch(r){throw r}}data;static{n(this,"ReplayKitError")}async log(){try{let e=await C(),r=new f(e.logSetup),o=r.resource(this.data);r.record("error",o)}catch(e){throw e}}};0&&(module.exports={ReplayKitError});
@@ -0,0 +1,2 @@
1
+ export { L as LogEnvironment, d as ReplayKitError, R as ReplayKitLogData, S as StackReference, b as StackReferenceDetails } from '../error_handle.helper-CQsPSbuz.cjs';
2
+ import 'async_hooks';
@@ -0,0 +1,2 @@
1
+ export { L as LogEnvironment, d as ReplayKitError, R as ReplayKitLogData, S as StackReference, b as StackReferenceDetails } from '../error_handle.helper-CQsPSbuz.js';
2
+ import 'async_hooks';
@@ -0,0 +1,3 @@
1
+ var R=Object.defineProperty;var n=(o,e)=>R(o,"name",{value:e,configurable:!0});import v from"fs";import P from"path";import l from"fs";var a=class{constructor(e){this.logger=e}logger;static{n(this,"RecordAction")}parseSafeData(e){try{return JSON.parse(JSON.stringify(e))}catch{throw{kind:"json_parse_error",message:"Failed to serialize log data",raw:String(e)}}}handler(e,t){try{let r=this.logger.fullLogPath,c=this.logger.logLevelPath(e);l.mkdirSync(r,{recursive:!0});let f=this.parseSafeData(t),L={level:e,timestamp:new Date().toISOString(),...f},S=JSON.stringify(L)+`
2
+ `;l.appendFileSync(c,S,{encoding:"utf8"})}catch(r){throw r}}};import w from"fs";var s=class{constructor(e){this.logger=e}logger;static{n(this,"ViewManyAction")}handler(e){try{return w.readFileSync(e,"utf8").split(`
3
+ `).filter(Boolean).map(r=>JSON.parse(r))}catch(t){throw t}}};var p=class{constructor(e){this.setup=e}setup;static{n(this,"ReplayKitLogger")}get actions(){return{record:new a(this),viewMany:new s(this)}}get fullLogPath(){return P.resolve(this.setup.path)}static shouldLog(e){return!!(e==500||[401,403,409,422].includes(e))}logLevelPath(e){return this.fullLogPath+`/${e}.log`}isExistLevel(e){return v.existsSync(this.logLevelPath(e))}resource(e){return e}record(e,t){try{this.actions.record.handler(e,t)}catch(r){throw r}}viewMany(e){try{return this.actions.viewMany.handler(this.logLevelPath(e))}catch(t){throw t}}};import m from"fs";import C from"chalk";import u from"path";import{bundleRequire as d}from"bundle-require";var D="storage/logs",h={logSetup:{path:D}};var i,g;var y=n(async()=>{try{return i||await k(),i}catch(o){throw o}},"getConfig"),k=n(async()=>{try{let o=u.resolve("replay-kit.config.ts");if(!m.existsSync(o)){console.warn(C.yellowBright('\u26A0 "replay-kit.config.ts" not found, using default config')),i=h;return}let e=u.resolve("replay-kit.performance.config.ts");m.existsSync(e)&&(g=await(await d({filepath:e})).mod.default);let r=await(await d({filepath:o})).mod.default;g&&r.filters&&(r.filters.expectedPerformance=g),i=r}catch(o){throw i=h,o}},"loadConfig");var x=class{constructor(e){this.data=e;try{this.log()}catch(t){throw t}}data;static{n(this,"ReplayKitError")}async log(){try{let e=await y(),t=new p(e.logSetup),r=t.resource(this.data);t.record("error",r)}catch(e){throw e}}};export{x as ReplayKitError};
@@ -0,0 +1,4 @@
1
+ "use strict";var b=Object.create;var c=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var n=(t,e)=>c(t,"name",{value:e,configurable:!0});var A=(t,e)=>{for(var r in e)c(t,r,{get:e[r],enumerable:!0})},w=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of _(e))!N.call(t,i)&&i!==r&&c(t,i,{get:()=>e[i],enumerable:!(o=O(e,i))||o.enumerable});return t};var a=(t,e,r)=>(r=t!=null?b(F(t)):{},w(e||!t||!t.__esModule?c(r,"default",{value:t,enumerable:!0}):r,t)),I=t=>w(c({},"__esModule",{value:!0}),t);var M={};A(M,{ReplayKitError:()=>S,StackHelper:()=>R,cryptoHash:()=>q});module.exports=I(M);var P=a(require("fs"),1),k=a(require("path"),1);var u=a(require("fs"),1);var f=class{constructor(e){this.logger=e}logger;static{n(this,"RecordAction")}parseSafeData(e){try{return JSON.parse(JSON.stringify(e))}catch{throw{kind:"json_parse_error",message:"Failed to serialize log data",raw:String(e)}}}handler(e,r){try{let o=this.logger.fullLogPath,i=this.logger.logLevelPath(e);u.default.mkdirSync(o,{recursive:!0});let s=this.parseSafeData(r),m={level:e,timestamp:new Date().toISOString(),...s},L=JSON.stringify(m)+`
2
+ `;u.default.appendFileSync(i,L,{encoding:"utf8"})}catch(o){throw o}}};var v=a(require("fs"),1);var g=class{constructor(e){this.logger=e}logger;static{n(this,"ViewManyAction")}handler(e){try{return v.default.readFileSync(e,"utf8").split(`
3
+ `).filter(Boolean).map(o=>JSON.parse(o))}catch(r){throw r}}};var l=class{constructor(e){this.setup=e}setup;static{n(this,"ReplayKitLogger")}get actions(){return{record:new f(this),viewMany:new g(this)}}get fullLogPath(){return k.default.resolve(this.setup.path)}static shouldLog(e){return!!(e==500||[401,403,409,422].includes(e))}logLevelPath(e){return this.fullLogPath+`/${e}.log`}isExistLevel(e){return P.default.existsSync(this.logLevelPath(e))}resource(e){return e}record(e,r){try{this.actions.record.handler(e,r)}catch(o){throw o}}viewMany(e){try{return this.actions.viewMany.handler(this.logLevelPath(e))}catch(r){throw r}}};var h=a(require("fs"),1),C=a(require("chalk"),1),y=a(require("path"),1),x=require("bundle-require");var J="storage/logs",D={logSetup:{path:J}};var p,d;var K=n(async()=>{try{return p||await T(),p}catch(t){throw t}},"getConfig"),T=n(async()=>{try{let t=y.default.resolve("replay-kit.config.ts");if(!h.default.existsSync(t)){console.warn(C.default.yellowBright('\u26A0 "replay-kit.config.ts" not found, using default config')),p=D;return}let e=y.default.resolve("replay-kit.performance.config.ts");h.default.existsSync(e)&&(d=await(await(0,x.bundleRequire)({filepath:e})).mod.default);let o=await(await(0,x.bundleRequire)({filepath:t})).mod.default;d&&o.filters&&(o.filters.expectedPerformance=d),p=o}catch(t){throw p=D,t}},"loadConfig");var S=class{constructor(e){this.data=e;try{this.log()}catch(r){throw r}}data;static{n(this,"ReplayKitError")}async log(){try{let e=await K(),r=new l(e.logSetup),o=r.resource(this.data);r.record("error",o)}catch(e){throw e}}};var E=a(require("crypto"),1);function q(t){try{return E.default.createHash("md5").update(t).digest("hex")}catch(e){throw e}}n(q,"cryptoHash");var R=class{static{n(this,"StackHelper")}static convertStackToReference(e){try{let r=e.split("/"),o=r[r.length-1],i=o.split(":")[0],s=parseInt(o.split(":")[1]),m=parseInt(o.split(":")[2]);return{file:i,position:[s,m],full_path:e}}catch(r){throw r}}static convertStackToGetOne(e,r){try{return e?`src/${e?.split(`
4
+ `)[r]?.replace(")","").split("src/")[1]}`:"invalid_stack"}catch(o){throw o}}};0&&(module.exports={ReplayKitError,StackHelper,cryptoHash});
@@ -0,0 +1,4 @@
1
+ export { L as LogEnvironment, d as ReplayKitError, R as ReplayKitLogData, S as StackReference, b as StackReferenceDetails } from '../error_handle.helper-CQsPSbuz.cjs';
2
+ export { cryptoHash } from './crypto.helper.cjs';
3
+ export { StackHelper } from './stack.helper.cjs';
4
+ import 'async_hooks';
@@ -0,0 +1,4 @@
1
+ export { L as LogEnvironment, d as ReplayKitError, R as ReplayKitLogData, S as StackReference, b as StackReferenceDetails } from '../error_handle.helper-CQsPSbuz.js';
2
+ export { cryptoHash } from './crypto.helper.js';
3
+ export { StackHelper } from './stack.helper.js';
4
+ import 'async_hooks';
@@ -0,0 +1,4 @@
1
+ var w=Object.defineProperty;var n=(o,e)=>w(o,"name",{value:e,configurable:!0});import P from"fs";import k from"path";import u from"fs";var c=class{constructor(e){this.logger=e}logger;static{n(this,"RecordAction")}parseSafeData(e){try{return JSON.parse(JSON.stringify(e))}catch{throw{kind:"json_parse_error",message:"Failed to serialize log data",raw:String(e)}}}handler(e,t){try{let r=this.logger.fullLogPath,i=this.logger.logLevelPath(e);u.mkdirSync(r,{recursive:!0});let a=this.parseSafeData(t),g={level:e,timestamp:new Date().toISOString(),...a},m=JSON.stringify(g)+`
2
+ `;u.appendFileSync(i,m,{encoding:"utf8"})}catch(r){throw r}}};import v from"fs";var p=class{constructor(e){this.logger=e}logger;static{n(this,"ViewManyAction")}handler(e){try{return v.readFileSync(e,"utf8").split(`
3
+ `).filter(Boolean).map(r=>JSON.parse(r))}catch(t){throw t}}};var f=class{constructor(e){this.setup=e}setup;static{n(this,"ReplayKitLogger")}get actions(){return{record:new c(this),viewMany:new p(this)}}get fullLogPath(){return k.resolve(this.setup.path)}static shouldLog(e){return!!(e==500||[401,403,409,422].includes(e))}logLevelPath(e){return this.fullLogPath+`/${e}.log`}isExistLevel(e){return P.existsSync(this.logLevelPath(e))}resource(e){return e}record(e,t){try{this.actions.record.handler(e,t)}catch(r){throw r}}viewMany(e){try{return this.actions.viewMany.handler(this.logLevelPath(e))}catch(t){throw t}}};import d from"fs";import D from"chalk";import h from"path";import{bundleRequire as y}from"bundle-require";var C="storage/logs",x={logSetup:{path:C}};var s,l;var S=n(async()=>{try{return s||await K(),s}catch(o){throw o}},"getConfig"),K=n(async()=>{try{let o=h.resolve("replay-kit.config.ts");if(!d.existsSync(o)){console.warn(D.yellowBright('\u26A0 "replay-kit.config.ts" not found, using default config')),s=x;return}let e=h.resolve("replay-kit.performance.config.ts");d.existsSync(e)&&(l=await(await y({filepath:e})).mod.default);let r=await(await y({filepath:o})).mod.default;l&&r.filters&&(r.filters.expectedPerformance=l),s=r}catch(o){throw s=x,o}},"loadConfig");var R=class{constructor(e){this.data=e;try{this.log()}catch(t){throw t}}data;static{n(this,"ReplayKitError")}async log(){try{let e=await S(),t=new f(e.logSetup),r=t.resource(this.data);t.record("error",r)}catch(e){throw e}}};import E from"crypto";function se(o){try{return E.createHash("md5").update(o).digest("hex")}catch(e){throw e}}n(se,"cryptoHash");var L=class{static{n(this,"StackHelper")}static convertStackToReference(e){try{let t=e.split("/"),r=t[t.length-1],i=r.split(":")[0],a=parseInt(r.split(":")[1]),g=parseInt(r.split(":")[2]);return{file:i,position:[a,g],full_path:e}}catch(t){throw t}}static convertStackToGetOne(e,t){try{return e?`src/${e?.split(`
4
+ `)[t]?.replace(")","").split("src/")[1]}`:"invalid_stack"}catch(r){throw r}}};export{R as ReplayKitError,L as StackHelper,se as cryptoHash};
@@ -0,0 +1,2 @@
1
+ "use strict";var s=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var o=(r,e)=>s(r,"name",{value:e,configurable:!0});var S=(r,e)=>{for(var t in e)s(r,t,{get:e[t],enumerable:!0})},h=(r,e,t,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of p(e))!k.call(r,n)&&n!==t&&s(r,n,{get:()=>e[n],enumerable:!(c=f(e,n))||c.enumerable});return r};var m=r=>h(s({},"__esModule",{value:!0}),r);var u={};S(u,{StackHelper:()=>a});module.exports=m(u);var a=class{static{o(this,"StackHelper")}static convertStackToReference(e){try{let t=e.split("/"),c=t[t.length-1],n=c.split(":")[0],i=parseInt(c.split(":")[1]),l=parseInt(c.split(":")[2]);return{file:n,position:[i,l],full_path:e}}catch(t){throw t}}static convertStackToGetOne(e,t){try{return e?`src/${e?.split(`
2
+ `)[t]?.replace(")","").split("src/")[1]}`:"invalid_stack"}catch(c){throw c}}};0&&(module.exports={StackHelper});
@@ -0,0 +1,9 @@
1
+ import { b as StackReferenceDetails } from '../error_handle.helper-CQsPSbuz.cjs';
2
+ import 'async_hooks';
3
+
4
+ declare class StackHelper {
5
+ static convertStackToReference(stack: string): StackReferenceDetails;
6
+ static convertStackToGetOne(stack: string | undefined, needIndex: number): string;
7
+ }
8
+
9
+ export { StackHelper };
@@ -0,0 +1,9 @@
1
+ import { b as StackReferenceDetails } from '../error_handle.helper-CQsPSbuz.js';
2
+ import 'async_hooks';
3
+
4
+ declare class StackHelper {
5
+ static convertStackToReference(stack: string): StackReferenceDetails;
6
+ static convertStackToGetOne(stack: string | undefined, needIndex: number): string;
7
+ }
8
+
9
+ export { StackHelper };
@@ -0,0 +1,2 @@
1
+ var l=Object.defineProperty;var a=(c,e)=>l(c,"name",{value:e,configurable:!0});var i=class{static{a(this,"StackHelper")}static convertStackToReference(e){try{let t=e.split("/"),r=t[t.length-1],n=r.split(":")[0],s=parseInt(r.split(":")[1]),o=parseInt(r.split(":")[2]);return{file:n,position:[s,o],full_path:e}}catch(t){throw t}}static convertStackToGetOne(e,t){try{return e?`src/${e?.split(`
2
+ `)[t]?.replace(")","").split("src/")[1]}`:"invalid_stack"}catch(r){throw r}}};export{i as StackHelper};