braidfs 0.0.100 → 0.0.101
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 +57 -11
- package/package.json +2 -2
package/index.js
CHANGED
|
@@ -693,26 +693,26 @@ async function sync_url(url) {
|
|
|
693
693
|
file_loop_pump_lock--
|
|
694
694
|
}
|
|
695
695
|
|
|
696
|
-
self.update_fork_point = (
|
|
697
|
-
self.fork_point = extend_frontier(self.fork_point,
|
|
696
|
+
self.update_fork_point = (version, parents) => {
|
|
697
|
+
self.fork_point = extend_frontier(self.fork_point, version, parents)
|
|
698
698
|
self.signal_file_needs_writing(true)
|
|
699
699
|
}
|
|
700
700
|
|
|
701
|
-
function extend_frontier(frontier,
|
|
701
|
+
function extend_frontier(frontier, version, parents) {
|
|
702
702
|
// special case:
|
|
703
703
|
// if current frontier has all parents,
|
|
704
704
|
// then we can just remove those
|
|
705
|
-
// and add
|
|
705
|
+
// and add version
|
|
706
706
|
var frontier_set = new Set(frontier)
|
|
707
707
|
if (parents.length &&
|
|
708
708
|
parents.every(p => frontier_set.has(p))) {
|
|
709
709
|
parents.forEach(p => frontier_set.delete(p))
|
|
710
|
-
frontier_set.add(event)
|
|
710
|
+
for (var event of version) frontier_set.add(event)
|
|
711
711
|
frontier = [...frontier_set.values()]
|
|
712
712
|
} else {
|
|
713
713
|
// full-proof approach..
|
|
714
714
|
var looking_for = frontier_set
|
|
715
|
-
looking_for.add(event)
|
|
715
|
+
for (var event of version) looking_for.add(event)
|
|
716
716
|
|
|
717
717
|
frontier = []
|
|
718
718
|
var shadow = new Set()
|
|
@@ -782,13 +782,14 @@ async function sync_url(url) {
|
|
|
782
782
|
var a = new AbortController()
|
|
783
783
|
aborts.add(a)
|
|
784
784
|
return await braid_fetch(url, {
|
|
785
|
+
...params,
|
|
785
786
|
signal: a.signal,
|
|
786
787
|
headers: {
|
|
788
|
+
...params.headers,
|
|
787
789
|
"Merge-Type": "dt",
|
|
788
790
|
"Content-Type": 'text/plain',
|
|
789
791
|
...(x => x && {Cookie: x})(config.cookies?.[new URL(url).hostname])
|
|
790
792
|
},
|
|
791
|
-
...params
|
|
792
793
|
})
|
|
793
794
|
} catch (e) {
|
|
794
795
|
if (freed || closed) return
|
|
@@ -808,7 +809,7 @@ async function sync_url(url) {
|
|
|
808
809
|
|
|
809
810
|
// the server has acknowledged this version,
|
|
810
811
|
// so add it to the fork point
|
|
811
|
-
if (r.ok) self.update_fork_point(stuff.version
|
|
812
|
+
if (r.ok) self.update_fork_point(stuff.version, stuff.parents)
|
|
812
813
|
|
|
813
814
|
// if we're not authorized,
|
|
814
815
|
if (r.status == 401 || r.status == 403) {
|
|
@@ -867,7 +868,52 @@ async function sync_url(url) {
|
|
|
867
868
|
await send_new_stuff()
|
|
868
869
|
if (freed || closed) return
|
|
869
870
|
|
|
870
|
-
|
|
871
|
+
// attempt to download the initial stuff in one go,
|
|
872
|
+
// using transfer-encoding dt
|
|
873
|
+
//
|
|
874
|
+
// first check for support..
|
|
875
|
+
//
|
|
876
|
+
var res = await my_fetch({
|
|
877
|
+
method: 'HEAD',
|
|
878
|
+
headers: { 'accept-transfer-encoding': 'dt' },
|
|
879
|
+
})
|
|
880
|
+
if (freed || closed) return
|
|
881
|
+
|
|
882
|
+
if (res.ok && res.headers.get('x-transfer-encoding') === 'dt') {
|
|
883
|
+
var res = await my_fetch({
|
|
884
|
+
headers: { 'accept-transfer-encoding': 'dt' },
|
|
885
|
+
parents: self.fork_point,
|
|
886
|
+
})
|
|
887
|
+
if (freed || closed) return
|
|
888
|
+
console.log(`got external updates about ${url}`)
|
|
889
|
+
|
|
890
|
+
// manually apply the dt bytes..
|
|
891
|
+
// ..code bits taken from braid-text put..
|
|
892
|
+
var bytes = new Uint8Array(await res.arrayBuffer())
|
|
893
|
+
if (freed || closed) return
|
|
894
|
+
|
|
895
|
+
var start_i = 1 + resource.doc.getLocalVersion().reduce((a, b) => Math.max(a, b), -1)
|
|
896
|
+
resource.doc.mergeBytes(bytes)
|
|
897
|
+
|
|
898
|
+
// update resource.actor_seqs
|
|
899
|
+
var end_i = resource.doc.getLocalVersion().reduce((a, b) => Math.max(a, b), -1)
|
|
900
|
+
for (var i = start_i; i <= end_i; i++) {
|
|
901
|
+
var v = resource.doc.localToRemoteVersion([i])[0]
|
|
902
|
+
if (!resource.actor_seqs[v[0]]) resource.actor_seqs[v[0]] = new braid_text.RangeSet()
|
|
903
|
+
resource.actor_seqs[v[0]].add_range(v[1], v[1])
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
resource.val = resource.doc.get()
|
|
907
|
+
resource.need_defrag = true
|
|
908
|
+
await resource.db_delta(bytes)
|
|
909
|
+
if (freed || closed) return
|
|
910
|
+
|
|
911
|
+
// ..do the things we do when getting subscribe updates..
|
|
912
|
+
self.update_fork_point(JSON.parse(`[${res.headers.get('current-version')}]`), self.fork_point)
|
|
913
|
+
self.signal_file_needs_writing()
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
var a = new AbortController()
|
|
871
917
|
aborts.add(a)
|
|
872
918
|
var res = await braid_fetch(url, {
|
|
873
919
|
signal: a.signal,
|
|
@@ -914,7 +960,7 @@ async function sync_url(url) {
|
|
|
914
960
|
// the server is giving us this version,
|
|
915
961
|
// so it must have it,
|
|
916
962
|
// so let's add it to our fork point
|
|
917
|
-
self.update_fork_point(update.version
|
|
963
|
+
self.update_fork_point(update.version, update.parents)
|
|
918
964
|
|
|
919
965
|
self.signal_file_needs_writing()
|
|
920
966
|
}, retry)
|
|
@@ -936,7 +982,7 @@ async function sync_url(url) {
|
|
|
936
982
|
if (!q.length) {
|
|
937
983
|
var frontier = self.fork_point
|
|
938
984
|
for (var u of in_flight.values())
|
|
939
|
-
frontier = extend_frontier(frontier, u.version
|
|
985
|
+
frontier = extend_frontier(frontier, u.version, u.parents)
|
|
940
986
|
|
|
941
987
|
var options = {
|
|
942
988
|
parents: frontier,
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "braidfs",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.101",
|
|
4
4
|
"description": "braid technology synchronizing files and webpages",
|
|
5
5
|
"author": "Braid Working Group",
|
|
6
6
|
"repository": "braid-org/braidfs",
|
|
7
7
|
"homepage": "https://braid.org",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"braid-http": "^1.3.76",
|
|
10
|
-
"braid-text": "^0.2.
|
|
10
|
+
"braid-text": "^0.2.35",
|
|
11
11
|
"chokidar": "^3.6.0"
|
|
12
12
|
},
|
|
13
13
|
"bin": {
|