fix(federation): 🐛 Fix incorrect destructuring causing federation issues

This commit is contained in:
Jesse Wierzbinski 2025-04-18 14:27:53 +02:00
parent 1d17831454
commit 054b8bc5cb
No known key found for this signature in database
4 changed files with 2361 additions and 9 deletions

View file

@ -0,0 +1,3 @@
ALTER TABLE "Notes" ALTER COLUMN "sensitive" SET DEFAULT false;--> statement-breakpoint
ALTER TABLE "Users" ALTER COLUMN "display_name" DROP NOT NULL;--> statement-breakpoint
ALTER TABLE "Users" ALTER COLUMN "source" DROP NOT NULL;

File diff suppressed because it is too large Load diff

View file

@ -344,6 +344,13 @@
"when": 1743365238468, "when": 1743365238468,
"tag": "0048_chilly_vector", "tag": "0048_chilly_vector",
"breakpoints": true "breakpoints": true
},
{
"idx": 49,
"version": "7",
"when": 1744979203068,
"tag": "0049_graceful_iron_man",
"breakpoints": true
} }
] ]
} }

View file

@ -39,15 +39,15 @@ export class FederationRequester {
const finalReq = await sign(this.privateKey, this.authorUrl, req); const finalReq = await sign(this.privateKey, this.authorUrl, req);
const { ok, json, text, headers, status } = await fetch(finalReq); const res = await fetch(finalReq);
if (!ok) { if (!res.ok) {
throw new Error( throw new Error(
`Failed to fetch entity from ${url.toString()}: got HTTP code ${status} with body "${await text()}"`, `Failed to fetch entity from ${url.toString()}: got HTTP code ${res.status} with body "${await res.text()}"`,
); );
} }
const contentType = headers.get("Content-Type"); const contentType = res.headers.get("Content-Type");
if (!contentType?.includes("application/json")) { if (!contentType?.includes("application/json")) {
throw new Error( throw new Error(
@ -55,7 +55,7 @@ export class FederationRequester {
); );
} }
const jsonData = await json(); const jsonData = await res.json();
const type = jsonData.type; const type = jsonData.type;
if (type && type !== expectedType.name) { if (type && type !== expectedType.name) {
@ -168,7 +168,7 @@ export class FederationRequester {
contentType = "application/json", contentType = "application/json",
serverUrl = `https://${hostname}`, serverUrl = `https://${hostname}`,
): Promise<URL | null> { ): Promise<URL | null> {
const { ok, json, text } = await fetch( const res = await fetch(
new URL( new URL(
`/.well-known/webfinger?${new URLSearchParams({ `/.well-known/webfinger?${new URLSearchParams({
resource: `acct:${username}@${hostname}`, resource: `acct:${username}@${hostname}`,
@ -184,14 +184,14 @@ export class FederationRequester {
}, },
); );
if (!ok) { if (!res.ok) {
throw new Error( throw new Error(
`Failed to fetch webfinger from ${serverUrl}: got HTTP code ${ok} with body "${await text()}"`, `Failed to fetch webfinger from ${serverUrl}: got HTTP code ${res.ok} with body "${await res.text()}"`,
); );
} }
// Validate the response // Validate the response
const data = await WebFingerSchema.parseAsync(await json()); const data = await WebFingerSchema.parseAsync(await res.json());
// Get the first link with a rel of "self" // Get the first link with a rel of "self"
const selfLink = data.links?.find( const selfLink = data.links?.find(