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" ;
33import fs from "node:fs" ;
44import 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
89import * as Sentry from "@sentry/electron" ;
9- import getStream from "get-stream" ;
1010import { z } from "zod" ;
1111
1212import Logger from "../common/logger-util.js" ;
1313import * as Messages from "../common/messages.js" ;
1414import 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
3318const 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 ;
0 commit comments