mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-11-06 16:28:18 +00:00
Revert paper rewrite and weak ETag normalisation
This commit is contained in:
1 parent
5ffa3b76ed
commit
22f6de85ca
3 files changed
+32
-114
No files matched your search
@@ -39,14 +39,6 @@ function normaliseRequestBody(body: unknown): string | ArrayBuffer | undefined {
|
||||
throw new TypeError(`Obsidian requestUrl does not support the request body type ${bodyType}`);
|
||||
}
|
||||
|
||||
function stripWeakEtag(value: string): string {
|
||||
const trimmed = value.trim();
|
||||
if (trimmed.startsWith("W/")) {
|
||||
return trimmed.slice(2).trim();
|
||||
}
|
||||
return trimmed;
|
||||
}
|
||||
|
||||
/**
|
||||
* This is close to origin implementation of FetchHttpHandler
|
||||
* https://github.com/aws/aws-sdk-js-v3/blob/main/packages/fetch-http-handler/src/fetch-http-handler.ts
|
||||
@@ -94,11 +86,7 @@ export class ObsHttpHandler extends FetchHttpHandler {
|
||||
if (keyLower === "host" || keyLower === "content-length") {
|
||||
continue;
|
||||
}
|
||||
let value = request.headers[key];
|
||||
if (keyLower === "if-match" && typeof value === "string") {
|
||||
value = stripWeakEtag(value);
|
||||
}
|
||||
transformedHeaders[keyLower] = value;
|
||||
transformedHeaders[keyLower] = request.headers[key];
|
||||
}
|
||||
|
||||
let contentType: string | undefined = undefined;
|
||||
@@ -122,12 +110,7 @@ export class ObsHttpHandler extends FetchHttpHandler {
|
||||
const headers = rsp.headers;
|
||||
const headersLower: Record<string, string> = {};
|
||||
for (const key of Object.keys(headers)) {
|
||||
let value = headers[key];
|
||||
const lowerKey = key.toLowerCase();
|
||||
if (lowerKey === "etag" && typeof value === "string") {
|
||||
value = stripWeakEtag(value);
|
||||
}
|
||||
headersLower[lowerKey] = value;
|
||||
headersLower[key.toLowerCase()] = headers[key];
|
||||
}
|
||||
const stream = new ReadableStream<Uint8Array>({
|
||||
start(controller) {
|
||||
|
||||
@@ -147,48 +147,4 @@ describe("ObsHttpHandler response handling", () => {
|
||||
|
||||
await expect(new ObsHttpHandler().handle(requestWithBody(new ArrayBuffer(0)))).rejects.toBe(failure);
|
||||
});
|
||||
|
||||
it("strips weak ETag prefix from incoming etag response headers", async () => {
|
||||
requestUrlMock.mockResolvedValue({
|
||||
headers: { etag: 'W/"weak-revision-123"' },
|
||||
status: 200,
|
||||
arrayBuffer: new ArrayBuffer(0),
|
||||
});
|
||||
const request = new HttpRequest({
|
||||
protocol: "https:",
|
||||
hostname: "objects.example.com",
|
||||
method: "GET",
|
||||
path: "/bucket/milestone.json",
|
||||
headers: {},
|
||||
});
|
||||
|
||||
const result = await new ObsHttpHandler().handle(request);
|
||||
expect(result.response.headers.etag).toBe('"weak-revision-123"');
|
||||
});
|
||||
|
||||
it("strips weak ETag prefix from outgoing if-match request headers", async () => {
|
||||
requestUrlMock.mockResolvedValue({
|
||||
headers: {},
|
||||
status: 200,
|
||||
arrayBuffer: new ArrayBuffer(0),
|
||||
});
|
||||
const request = new HttpRequest({
|
||||
protocol: "https:",
|
||||
hostname: "objects.example.com",
|
||||
method: "PUT",
|
||||
path: "/bucket/milestone.json",
|
||||
headers: {
|
||||
"if-match": 'W/"weak-revision-123"',
|
||||
},
|
||||
});
|
||||
|
||||
await new ObsHttpHandler().handle(request);
|
||||
expect(requestUrlMock).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
headers: expect.objectContaining({
|
||||
"if-match": '"weak-revision-123"',
|
||||
}),
|
||||
})
|
||||
);
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user