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.
Files changed (2) hide show
  1. package/index.js +57 -11
  2. 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 = (event, parents) => {
697
- self.fork_point = extend_frontier(self.fork_point, event, parents)
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, event, parents) {
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 event
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[0], stuff.parents)
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
- let a = new AbortController()
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[0], update.parents)
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[0], u.parents)
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.100",
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.30",
10
+ "braid-text": "^0.2.35",
11
11
  "chokidar": "^3.6.0"
12
12
  },
13
13
  "bin": {