Skip to content

Commit 8e11dd6

Browse files
committed
Improve dedupe logic and add option for dedupe by headers from settings
1 parent fad9160 commit 8e11dd6

File tree

3 files changed

+14
-4
lines changed

3 files changed

+14
-4
lines changed

packages/backend/src/services/templates.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ export const onInterceptResponse = async (
9393
return;
9494
}
9595

96-
const templateId = generateTemplateId(request);
96+
const templateId = generateTemplateId(request, settings.deDuplicateHeaders);
9797
if (store.templateExists(templateId)) {
9898
return
9999
}
@@ -124,9 +124,17 @@ export const registerTemplateEvents = (sdk: SDK) => {
124124
};
125125

126126

127-
const generateTemplateId = (request: Request): string => {
128-
// Should replace to perhaps exclude and include different parts of the request
129-
return sha256Hash(request.getRaw().toText())
127+
const generateTemplateId = (request: Request, dedupeHeaders: string[] = []): string => {
128+
let body = request.getBody()?.toText();
129+
if (!body) {
130+
body = "";
131+
}
132+
const bodyHash = sha256Hash(body);
133+
let dedupe = `${request.getMethod}~${request.getUrl()}~${bodyHash}`;
134+
dedupeHeaders.forEach((h) => {
135+
dedupe += `~${request.getHeader(h)?.join("~")}`
136+
})
137+
return sha256Hash(dedupe)
130138
}
131139

132140
const toTemplate = (request: Request, response: Response, templateId: string = generateTemplateId(request)): TemplateDTO => {

packages/backend/src/stores/settings.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export class SettingsStore {
99
this.settings = {
1010
autoCaptureRequests: "off",
1111
autoRunAnalysis: true,
12+
deDuplicateHeaders: [],
1213
};
1314
}
1415

packages/shared/src/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export type RoleDTO = {
4343
export type SettingsDTO = {
4444
autoCaptureRequests: "off" | "all" | "inScope";
4545
autoRunAnalysis: boolean;
46+
deDuplicateHeaders: string[];
4647
};
4748

4849
export type UserAttributeDTO = {

0 commit comments

Comments
 (0)