braidfs 0.0.134 → 0.0.135
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +31 -8
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -1156,24 +1156,41 @@ function ReconnectRateLimiter(get_wait_time) {
|
|
|
1156
1156
|
async function fetch_http2(url, options = {}) {
|
|
1157
1157
|
if (!fetch_http2.sessions) {
|
|
1158
1158
|
fetch_http2.sessions = new Map()
|
|
1159
|
-
process.on("exit", () => fetch_http2.sessions.forEach(s => s.close()))
|
|
1159
|
+
process.on("exit", () => fetch_http2.sessions.forEach(s => s.session.close()))
|
|
1160
1160
|
}
|
|
1161
1161
|
|
|
1162
1162
|
var u = new URL(url)
|
|
1163
1163
|
if (u.protocol !== "https:") return fetch(url, options)
|
|
1164
1164
|
|
|
1165
1165
|
try {
|
|
1166
|
-
var
|
|
1167
|
-
if (!
|
|
1168
|
-
session = require("http2").connect(u.origin, {
|
|
1166
|
+
var sessionInfo = fetch_http2.sessions.get(u.origin)
|
|
1167
|
+
if (!sessionInfo || sessionInfo.session.closed) {
|
|
1168
|
+
var session = require("http2").connect(u.origin, {
|
|
1169
1169
|
rejectUnauthorized: options.rejectUnauthorized !== false,
|
|
1170
1170
|
})
|
|
1171
|
-
session
|
|
1172
|
-
|
|
1173
|
-
|
|
1171
|
+
sessionInfo = { session, pendingRejects: new Set() }
|
|
1172
|
+
|
|
1173
|
+
session.on("error", (e) => {
|
|
1174
|
+
for (var f of sessionInfo.pendingRejects) f(e)
|
|
1175
|
+
fetch_http2.sessions.delete(u.origin)
|
|
1176
|
+
})
|
|
1177
|
+
session.on("close", () => {
|
|
1178
|
+
var e = new Error('Session closed')
|
|
1179
|
+
for (var f of sessionInfo.pendingRejects) f(e)
|
|
1180
|
+
fetch_http2.sessions.delete(u.origin)
|
|
1181
|
+
})
|
|
1182
|
+
fetch_http2.sessions.set(u.origin, sessionInfo)
|
|
1174
1183
|
}
|
|
1175
1184
|
|
|
1185
|
+
var session = sessionInfo.session
|
|
1186
|
+
|
|
1176
1187
|
return await new Promise((resolve, reject) => {
|
|
1188
|
+
sessionInfo.pendingRejects.add(reject)
|
|
1189
|
+
|
|
1190
|
+
var responseTimeout = setTimeout(() => {
|
|
1191
|
+
stream.destroy(new Error('Response timeout'))
|
|
1192
|
+
}, options.responseTimeout || 10000)
|
|
1193
|
+
|
|
1177
1194
|
var stream = session.request({
|
|
1178
1195
|
":method": options.method || "GET",
|
|
1179
1196
|
":path": u.pathname + u.search,
|
|
@@ -1187,6 +1204,8 @@ async function fetch_http2(url, options = {}) {
|
|
|
1187
1204
|
{ once: true })
|
|
1188
1205
|
|
|
1189
1206
|
stream.on("response", headers => {
|
|
1207
|
+
clearTimeout(responseTimeout)
|
|
1208
|
+
sessionInfo.pendingRejects.delete(reject)
|
|
1190
1209
|
var status = +headers[":status"]
|
|
1191
1210
|
resolve({
|
|
1192
1211
|
ok: status >= 200 && status < 300,
|
|
@@ -1225,7 +1244,11 @@ async function fetch_http2(url, options = {}) {
|
|
|
1225
1244
|
})
|
|
1226
1245
|
})
|
|
1227
1246
|
|
|
1228
|
-
stream.on("error",
|
|
1247
|
+
stream.on("error", (err) => {
|
|
1248
|
+
clearTimeout(responseTimeout)
|
|
1249
|
+
sessionInfo.pendingRejects.delete(reject)
|
|
1250
|
+
reject(err)
|
|
1251
|
+
})
|
|
1229
1252
|
|
|
1230
1253
|
var body = options.body
|
|
1231
1254
|
if (!body) return stream.end()
|