


























@@ -123,43 +123,30 @@ describe("uploadFile memex upload hardening", () => {
123123expect(result).toEqual({ url: "https://memex.tlon.network/files/uploaded.png" });
124124expect(vi.mocked(globalThis.fetch)).not.toHaveBeenCalled();
125125expect(mockGuardedFetch).toHaveBeenCalledTimes(2);
126-expect(mockGuardedFetch).toHaveBeenNthCalledWith(
127-1,
128-expect.objectContaining({
129-url: "https://memex.tlon.network/v1/zod/upload",
130-init: expect.objectContaining({
131-method: "PUT",
132-headers: { "Content-Type": "application/json" },
133-}),
134-auditContext: "tlon-memex-upload-url",
135-capture: false,
136-maxRedirects: 0,
137-}),
138-);
139-expect(mockGuardedFetch).toHaveBeenNthCalledWith(2, {
140-url: "https://uploads.tlon.network/put",
141-init: expect.objectContaining({
142-method: "PUT",
143-headers: expect.objectContaining({
144-"Cache-Control": "public, max-age=3600",
145-"Content-Type": "image/png",
146-}),
147-}),
148-auditContext: "tlon-memex-upload",
149-capture: false,
150-maxRedirects: 0,
151-});
152126const firstCall = mockGuardedFetch.mock.calls[0]?.[0];
127+expect(firstCall?.url).toBe("https://memex.tlon.network/v1/zod/upload");
128+expect(firstCall?.init?.method).toBe("PUT");
129+expect(firstCall?.init?.headers).toEqual({ "Content-Type": "application/json" });
130+expect(firstCall?.auditContext).toBe("tlon-memex-upload-url");
131+expect(firstCall?.capture).toBe(false);
132+expect(firstCall?.maxRedirects).toBe(0);
153133const firstBodyRaw = firstCall?.init?.body;
154134expect(typeof firstBodyRaw).toBe("string");
155135const firstBody = JSON.parse(firstBodyRaw as string) as Record<string, unknown>;
156-expect(firstBody).toMatchObject({
157-token: "genuine-secret",
158-contentLength: 11,
159-contentType: "image/png",
160-});
136+expect(firstBody.token).toBe("genuine-secret");
137+expect(firstBody.contentLength).toBe(11);
138+expect(firstBody.contentType).toBe("image/png");
161139expect(typeof firstBody.fileName).toBe("string");
162140const secondCall = mockGuardedFetch.mock.calls[1]?.[0];
141+expect(secondCall?.url).toBe("https://uploads.tlon.network/put");
142+expect(secondCall?.init?.method).toBe("PUT");
143+expect(secondCall?.init?.headers).toEqual({
144+"Cache-Control": "public, max-age=3600",
145+"Content-Type": "image/png",
146+});
147+expect(secondCall?.auditContext).toBe("tlon-memex-upload");
148+expect(secondCall?.capture).toBe(false);
149+expect(secondCall?.maxRedirects).toBe(0);
163150expect(secondCall?.init?.body).toBeInstanceOf(Blob);
164151expect(mockRelease).toHaveBeenCalledTimes(2);
165152});
@@ -183,14 +170,12 @@ describe("uploadFile memex upload hardening", () => {
183170).rejects.toThrow("Blocked upload target");
184171185172expect(vi.mocked(globalThis.fetch)).not.toHaveBeenCalled();
186-expect(mockGuardedFetch).toHaveBeenCalledWith(
187-expect.objectContaining({
188-url: "https://uploads.tlon.network/put",
189-auditContext: "tlon-memex-upload",
190-capture: false,
191-maxRedirects: 0,
192-}),
193-);
173+expect(mockGuardedFetch).toHaveBeenCalledTimes(2);
174+const uploadCall = mockGuardedFetch.mock.calls[1]?.[0];
175+expect(uploadCall?.url).toBe("https://uploads.tlon.network/put");
176+expect(uploadCall?.auditContext).toBe("tlon-memex-upload");
177+expect(uploadCall?.capture).toBe(false);
178+expect(uploadCall?.maxRedirects).toBe(0);
194179expect(mockRelease).toHaveBeenCalledTimes(1);
195180});
196181@@ -286,14 +271,12 @@ describe("uploadFile memex upload hardening", () => {
286271).rejects.toThrow("Too many redirects (limit: 0)");
287272288273expect(vi.mocked(globalThis.fetch)).not.toHaveBeenCalled();
289-expect(mockGuardedFetch).toHaveBeenCalledWith(
290-expect.objectContaining({
291-url: "https://uploads.tlon.network/put",
292-auditContext: "tlon-memex-upload",
293-capture: false,
294-maxRedirects: 0,
295-}),
296-);
274+expect(mockGuardedFetch).toHaveBeenCalledTimes(2);
275+const uploadCall = mockGuardedFetch.mock.calls[1]?.[0];
276+expect(uploadCall?.url).toBe("https://uploads.tlon.network/put");
277+expect(uploadCall?.auditContext).toBe("tlon-memex-upload");
278+expect(uploadCall?.capture).toBe(false);
279+expect(uploadCall?.maxRedirects).toBe(0);
297280expect(mockRelease).toHaveBeenCalledTimes(1);
298281});
299282@@ -404,14 +387,11 @@ describe("uploadFile memex upload hardening", () => {
404387405388expect(vi.mocked(globalThis.fetch)).not.toHaveBeenCalled();
406389expect(mockGuardedFetch).toHaveBeenCalledTimes(1);
407-expect(mockGuardedFetch).toHaveBeenCalledWith(
408-expect.objectContaining({
409-url: "https://memex.tlon.network/v1/zod/upload",
410-auditContext: "tlon-memex-upload-url",
411-capture: false,
412-maxRedirects: 0,
413-}),
414-);
390+const lookupCall = mockGuardedFetch.mock.calls[0]?.[0];
391+expect(lookupCall?.url).toBe("https://memex.tlon.network/v1/zod/upload");
392+expect(lookupCall?.auditContext).toBe("tlon-memex-upload-url");
393+expect(lookupCall?.capture).toBe(false);
394+expect(lookupCall?.maxRedirects).toBe(0);
415395expect(mockRelease).not.toHaveBeenCalled();
416396});
417397});
@@ -475,14 +455,14 @@ describe("uploadFile custom S3 upload hardening", () => {
475455476456expect(result.url.startsWith("https://files.example.com/")).toBe(true);
477457expect(mockGuardedFetch).toHaveBeenCalledTimes(1);
478-expect(mockGuardedFetch).toHaveBeenCalledWith(
479- expect.objectContaining({
480- url: "https://s3.example.com/uploads/file?sig=abc",
481- auditContext: "tlon-custom-s3-upload",
482- capture: false,
483- maxRedirects: 0,
484- }),
485-);
458+const uploadCall = mockGuardedFetch.mock.calls[0]?.[0];
459+expect(uploadCall?.url).toBe("https://s3.example.com/uploads/file?sig=abc");
460+expect(uploadCall?.init?.method).toBe("PUT");
461+expect(uploadCall?.init?.headers).toBeUndefined();
462+expect(uploadCall?.auditContext).toBe("tlon-custom-s3-upload");
463+expect(uploadCall?.capture).toBe(false);
464+expect(uploadCall?.maxRedirects).toBe(0);
465+expect(uploadCall?.policy).toBeUndefined();
486466expect(mockRelease).toHaveBeenCalledTimes(1);
487467expect(vi.mocked(globalThis.fetch)).not.toHaveBeenCalled();
488468});
@@ -520,25 +500,20 @@ describe("uploadFile custom S3 upload hardening", () => {
520500),
521501);
522502523-await expect(
524-uploadFile({
525-blob: new Blob(["image-bytes"], { type: "image/png" }),
526-fileName: "avatar.png",
527-contentType: "image/png",
528-}),
529-).resolves.toEqual({
530-url: expect.stringMatching(/^https:\/\/files\.example\.com\//),
503+const result = await uploadFile({
504+blob: new Blob(["image-bytes"], { type: "image/png" }),
505+fileName: "avatar.png",
506+contentType: "image/png",
531507});
532508533-expect(mockGuardedFetch).toHaveBeenCalledWith(
534-expect.objectContaining({
535-url: "https://10.0.0.15/uploads/file?sig=abc",
536-auditContext: "tlon-custom-s3-upload",
537-capture: false,
538-maxRedirects: 0,
539-policy: { allowPrivateNetwork: true },
540-}),
541-);
509+expect(result.url.startsWith("https://files.example.com/")).toBe(true);
510+expect(mockGuardedFetch).toHaveBeenCalledTimes(1);
511+const uploadCall = mockGuardedFetch.mock.calls[0]?.[0];
512+expect(uploadCall?.url).toBe("https://10.0.0.15/uploads/file?sig=abc");
513+expect(uploadCall?.auditContext).toBe("tlon-custom-s3-upload");
514+expect(uploadCall?.capture).toBe(false);
515+expect(uploadCall?.maxRedirects).toBe(0);
516+expect(uploadCall?.policy).toEqual({ allowPrivateNetwork: true });
542517expect(mockRelease).toHaveBeenCalledTimes(1);
543518});
544519此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。