braidfs 0.0.134 → 0.0.136
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 +50 -9
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -604,6 +604,12 @@ function sync_url(url) {
|
|
|
604
604
|
|
|
605
605
|
self.file_mtimeNs_str = '' + stat.mtimeNs
|
|
606
606
|
await save_meta()
|
|
607
|
+
if (freed) return
|
|
608
|
+
|
|
609
|
+
if (self.file_read_only !== null && await is_read_only(fullpath) !== self.file_read_only) {
|
|
610
|
+
if (freed) return
|
|
611
|
+
await set_read_only(fullpath, self.file_read_only)
|
|
612
|
+
}
|
|
607
613
|
} catch (e) {
|
|
608
614
|
if (e.code === 'ENOENT') return null
|
|
609
615
|
throw e
|
|
@@ -648,11 +654,23 @@ function sync_url(url) {
|
|
|
648
654
|
...(x => x && { Cookie: x })(config.cookies?.[new URL(url).hostname])
|
|
649
655
|
},
|
|
650
656
|
on_pre_connect: () => reconnect_rate_limiter.get_turn(url),
|
|
651
|
-
on_res: res => {
|
|
657
|
+
on_res: async res => {
|
|
652
658
|
if (freed) return
|
|
653
659
|
reconnect_rate_limiter.on_conn(url)
|
|
654
660
|
self.file_read_only = res.headers.get('editable') === 'false'
|
|
655
661
|
console.log(`connected to ${url}${self.file_read_only ? ' (readonly)' : ''}`)
|
|
662
|
+
|
|
663
|
+
await within_fiber(fullpath, async () => {
|
|
664
|
+
var fullpath = await get_fullpath()
|
|
665
|
+
if (freed) return
|
|
666
|
+
|
|
667
|
+
try {
|
|
668
|
+
if (await is_read_only(fullpath) !== self.file_read_only) {
|
|
669
|
+
if (freed) return
|
|
670
|
+
await set_read_only(fullpath, self.file_read_only)
|
|
671
|
+
}
|
|
672
|
+
} catch (e) {}
|
|
673
|
+
})
|
|
656
674
|
},
|
|
657
675
|
on_unauthorized: async () => {
|
|
658
676
|
console.log(`access denied: reverting local edits`)
|
|
@@ -1156,24 +1174,41 @@ function ReconnectRateLimiter(get_wait_time) {
|
|
|
1156
1174
|
async function fetch_http2(url, options = {}) {
|
|
1157
1175
|
if (!fetch_http2.sessions) {
|
|
1158
1176
|
fetch_http2.sessions = new Map()
|
|
1159
|
-
process.on("exit", () => fetch_http2.sessions.forEach(s => s.close()))
|
|
1177
|
+
process.on("exit", () => fetch_http2.sessions.forEach(s => s.session.close()))
|
|
1160
1178
|
}
|
|
1161
1179
|
|
|
1162
1180
|
var u = new URL(url)
|
|
1163
1181
|
if (u.protocol !== "https:") return fetch(url, options)
|
|
1164
1182
|
|
|
1165
1183
|
try {
|
|
1166
|
-
var
|
|
1167
|
-
if (!
|
|
1168
|
-
session = require("http2").connect(u.origin, {
|
|
1184
|
+
var sessionInfo = fetch_http2.sessions.get(u.origin)
|
|
1185
|
+
if (!sessionInfo || sessionInfo.session.closed) {
|
|
1186
|
+
var session = require("http2").connect(u.origin, {
|
|
1169
1187
|
rejectUnauthorized: options.rejectUnauthorized !== false,
|
|
1170
1188
|
})
|
|
1171
|
-
session
|
|
1172
|
-
|
|
1173
|
-
|
|
1189
|
+
sessionInfo = { session, pendingRejects: new Set() }
|
|
1190
|
+
|
|
1191
|
+
session.on("error", (e) => {
|
|
1192
|
+
for (var f of sessionInfo.pendingRejects) f(e)
|
|
1193
|
+
fetch_http2.sessions.delete(u.origin)
|
|
1194
|
+
})
|
|
1195
|
+
session.on("close", () => {
|
|
1196
|
+
var e = new Error('Session closed')
|
|
1197
|
+
for (var f of sessionInfo.pendingRejects) f(e)
|
|
1198
|
+
fetch_http2.sessions.delete(u.origin)
|
|
1199
|
+
})
|
|
1200
|
+
fetch_http2.sessions.set(u.origin, sessionInfo)
|
|
1174
1201
|
}
|
|
1175
1202
|
|
|
1203
|
+
var session = sessionInfo.session
|
|
1204
|
+
|
|
1176
1205
|
return await new Promise((resolve, reject) => {
|
|
1206
|
+
sessionInfo.pendingRejects.add(reject)
|
|
1207
|
+
|
|
1208
|
+
var responseTimeout = setTimeout(() => {
|
|
1209
|
+
stream.destroy(new Error('Response timeout'))
|
|
1210
|
+
}, options.responseTimeout || 10000)
|
|
1211
|
+
|
|
1177
1212
|
var stream = session.request({
|
|
1178
1213
|
":method": options.method || "GET",
|
|
1179
1214
|
":path": u.pathname + u.search,
|
|
@@ -1187,6 +1222,8 @@ async function fetch_http2(url, options = {}) {
|
|
|
1187
1222
|
{ once: true })
|
|
1188
1223
|
|
|
1189
1224
|
stream.on("response", headers => {
|
|
1225
|
+
clearTimeout(responseTimeout)
|
|
1226
|
+
sessionInfo.pendingRejects.delete(reject)
|
|
1190
1227
|
var status = +headers[":status"]
|
|
1191
1228
|
resolve({
|
|
1192
1229
|
ok: status >= 200 && status < 300,
|
|
@@ -1225,7 +1262,11 @@ async function fetch_http2(url, options = {}) {
|
|
|
1225
1262
|
})
|
|
1226
1263
|
})
|
|
1227
1264
|
|
|
1228
|
-
stream.on("error",
|
|
1265
|
+
stream.on("error", (err) => {
|
|
1266
|
+
clearTimeout(responseTimeout)
|
|
1267
|
+
sessionInfo.pendingRejects.delete(reject)
|
|
1268
|
+
reject(err)
|
|
1269
|
+
})
|
|
1229
1270
|
|
|
1230
1271
|
var body = options.body
|
|
1231
1272
|
if (!body) return stream.end()
|