refactor: share tlon channel put requests

This commit is contained in:
Peter Steinberger
2026-03-13 21:58:56 +00:00
parent 7ca8804a33
commit 5af8322ff5

View File

@@ -115,20 +115,7 @@ export class UrbitSSEClient {
app: string;
path: string;
}) {
const { response, release } = await urbitFetch({
baseUrl: this.url,
path: `/~/channel/${this.channelId}`,
init: {
method: "PUT",
headers: {
"Content-Type": "application/json",
Cookie: this.cookie,
},
body: JSON.stringify([subscription]),
},
ssrfPolicy: this.ssrfPolicy,
lookupFn: this.lookupFn,
fetchImpl: this.fetchImpl,
const { response, release } = await this.putChannelPayload([subscription], {
timeoutMs: 30_000,
auditContext: "tlon-urbit-subscribe",
});
@@ -359,20 +346,7 @@ export class UrbitSSEClient {
"event-id": eventId,
};
const { response, release } = await urbitFetch({
baseUrl: this.url,
path: `/~/channel/${this.channelId}`,
init: {
method: "PUT",
headers: {
"Content-Type": "application/json",
Cookie: this.cookie,
},
body: JSON.stringify([ackData]),
},
ssrfPolicy: this.ssrfPolicy,
lookupFn: this.lookupFn,
fetchImpl: this.fetchImpl,
const { response, release } = await this.putChannelPayload([ackData], {
timeoutMs: 10_000,
auditContext: "tlon-urbit-ack",
});
@@ -445,20 +419,7 @@ export class UrbitSSEClient {
}));
{
const { response, release } = await urbitFetch({
baseUrl: this.url,
path: `/~/channel/${this.channelId}`,
init: {
method: "PUT",
headers: {
"Content-Type": "application/json",
Cookie: this.cookie,
},
body: JSON.stringify(unsubscribes),
},
ssrfPolicy: this.ssrfPolicy,
lookupFn: this.lookupFn,
fetchImpl: this.fetchImpl,
const { response, release } = await this.putChannelPayload(unsubscribes, {
timeoutMs: 30_000,
auditContext: "tlon-urbit-unsubscribe",
});
@@ -501,4 +462,27 @@ export class UrbitSSEClient {
await release();
}
}
private async putChannelPayload(
payload: unknown,
params: { timeoutMs: number; auditContext: string },
) {
return await urbitFetch({
baseUrl: this.url,
path: `/~/channel/${this.channelId}`,
init: {
method: "PUT",
headers: {
"Content-Type": "application/json",
Cookie: this.cookie,
},
body: JSON.stringify(payload),
},
ssrfPolicy: this.ssrfPolicy,
lookupFn: this.lookupFn,
fetchImpl: this.fetchImpl,
timeoutMs: params.timeoutMs,
auditContext: params.auditContext,
});
}
}