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.
Files changed (2) hide show
  1. package/index.js +31 -8
  2. 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 session = fetch_http2.sessions.get(u.origin)
1167
- if (!session || session.closed) {
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.on("error", () => fetch_http2.sessions.delete(u.origin))
1172
- session.on("close", () => fetch_http2.sessions.delete(u.origin))
1173
- fetch_http2.sessions.set(u.origin, session)
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", reject)
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()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "braidfs",
3
- "version": "0.0.134",
3
+ "version": "0.0.135",
4
4
  "description": "braid technology synchronizing files and webpages",
5
5
  "author": "Braid Working Group",
6
6
  "repository": "braid-org/braidfs",