Skip to content

Commit f8758fa

Browse files
committed
Use electron fetch API.
Signed-off-by: Anders Kaseorg <[email protected]>
1 parent d2de965 commit f8758fa

File tree

5 files changed

+30
-90
lines changed

5 files changed

+30
-90
lines changed

app/main/linuxupdater.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
import type {Session} from "electron/main";
2-
import {Notification, app, net} from "electron/main";
2+
import {Notification, app} from "electron/main";
33

4-
import getStream from "get-stream";
54
import * as semver from "semver";
65
import {z} from "zod";
76

87
import * as ConfigUtil from "../common/config-util.js";
98
import Logger from "../common/logger-util.js";
109

1110
import * as LinuxUpdateUtil from "./linux-update-util.js";
12-
import {fetchResponse} from "./request.js";
1311

1412
const logger = new Logger({
1513
file: "linux-update-util.log",
@@ -20,13 +18,13 @@ export async function linuxUpdateNotification(session: Session): Promise<void> {
2018
url = ConfigUtil.getConfigItem("betaUpdate", false) ? url : url + "/latest";
2119

2220
try {
23-
const response = await fetchResponse(net.request({url, session}));
24-
if (response.statusCode !== 200) {
25-
logger.log("Linux update response status: ", response.statusCode);
21+
const response = await session.fetch(url);
22+
if (!response.ok) {
23+
logger.log("Linux update response status: ", response.status);
2624
return;
2725
}
2826

29-
const data: unknown = JSON.parse(await getStream(response));
27+
const data: unknown = await response.json();
3028
/* eslint-disable @typescript-eslint/naming-convention */
3129
const latestVersion = ConfigUtil.getConfigItem("betaUpdate", false)
3230
? z.array(z.object({tag_name: z.string()})).parse(data)[0].tag_name

app/main/request.ts

Lines changed: 18 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,18 @@
1-
import type {ClientRequest, IncomingMessage, Session} from "electron/main";
2-
import {app, net} from "electron/main";
1+
import type {Session} from "electron/main";
2+
import {app} from "electron/main";
33
import fs from "node:fs";
44
import path from "node:path";
5-
import stream from "node:stream";
6-
import util from "node:util";
5+
import {Readable} from "node:stream";
6+
import {pipeline} from "node:stream/promises";
7+
import type {ReadableStream} from "node:stream/web";
78

89
import * as Sentry from "@sentry/electron";
9-
import getStream from "get-stream";
1010
import {z} from "zod";
1111

1212
import Logger from "../common/logger-util.js";
1313
import * as Messages from "../common/messages.js";
1414
import type {ServerConf} from "../common/types.js";
1515

16-
export async function fetchResponse(
17-
request: ClientRequest,
18-
): Promise<IncomingMessage> {
19-
return new Promise((resolve, reject) => {
20-
request.on("response", resolve);
21-
request.on("abort", () => {
22-
reject(new Error("Request aborted"));
23-
});
24-
request.on("error", reject);
25-
request.end();
26-
});
27-
}
28-
29-
const pipeline = util.promisify(stream.pipeline);
30-
3116
/* Request: domain-util */
3217

3318
const logger = new Logger({
@@ -59,17 +44,12 @@ export const _getServerSettings = async (
5944
domain: string,
6045
session: Session,
6146
): Promise<ServerConf> => {
62-
const response = await fetchResponse(
63-
net.request({
64-
url: domain + "/api/v1/server_settings",
65-
session,
66-
}),
67-
);
68-
if (response.statusCode !== 200) {
47+
const response = await session.fetch(domain + "/api/v1/server_settings");
48+
if (!response.ok) {
6949
throw new Error(Messages.invalidZulipServerError(domain));
7050
}
7151

72-
const data: unknown = JSON.parse(await getStream(response));
52+
const data: unknown = await response.json();
7353
/* eslint-disable @typescript-eslint/naming-convention */
7454
const {
7555
realm_name,
@@ -104,14 +84,17 @@ export const _saveServerIcon = async (
10484
session: Session,
10585
): Promise<string | null> => {
10686
try {
107-
const response = await fetchResponse(net.request({url, session}));
108-
if (response.statusCode !== 200) {
87+
const response = await session.fetch(url);
88+
if (!response.ok) {
10989
logger.log("Could not get server icon.");
11090
return null;
11191
}
11292

11393
const filePath = generateFilePath(url);
114-
await pipeline(response, fs.createWriteStream(filePath));
94+
await pipeline(
95+
Readable.fromWeb(response.body as ReadableStream<Uint8Array>),
96+
fs.createWriteStream(filePath),
97+
);
11598
return filePath;
11699
} catch (error: unknown) {
117100
logger.log("Could not get server icon.");
@@ -128,16 +111,10 @@ export const _isOnline = async (
128111
session: Session,
129112
): Promise<boolean> => {
130113
try {
131-
const response = await fetchResponse(
132-
net.request({
133-
method: "HEAD",
134-
url: `${url}/api/v1/server_settings`,
135-
session,
136-
}),
137-
);
138-
const isValidResponse =
139-
response.statusCode >= 200 && response.statusCode < 400;
140-
return isValidResponse;
114+
const response = await session.fetch(`${url}/api/v1/server_settings`, {
115+
method: "HEAD",
116+
});
117+
return response.ok;
141118
} catch (error: unknown) {
142119
logger.log(error);
143120
return false;

package-lock.json

Lines changed: 7 additions & 35 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@
165165
"electron-updater": "^6.1.4",
166166
"electron-window-state": "^5.0.3",
167167
"escape-goat": "^4.0.0",
168-
"get-stream": "^8.0.1",
169168
"htmlhint": "^1.1.2",
170169
"i18n": "^0.15.1",
171170
"iso-639-1": "^3.1.0",

typings.d.ts

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
declare namespace Electron {
2-
// https://github.com/electron/typescript-definitions/issues/170
3-
// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
4-
interface IncomingMessage extends NodeJS.ReadableStream {}
5-
}
6-
71
declare module "zulip:remote" {
82
export const {
93
app,

0 commit comments

Comments
 (0)