hypercore 11.27.12 → 11.27.13

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.
@@ -3,6 +3,7 @@ const b4a = require('b4a')
3
3
  const assert = require('nanoassert')
4
4
  const flat = require('flat-tree')
5
5
  const quickbit = require('quickbit-universal')
6
+ const HypercoreStorage = require('hypercore-storage')
6
7
 
7
8
  const {
8
9
  INVALID_OPERATION,
@@ -249,6 +250,13 @@ class SessionState {
249
250
  return true
250
251
  }
251
252
 
253
+ _precommit(state) {
254
+ assert(
255
+ state.parent === this && state.storage.core.dataPointer === this.storage.core.dataPointer,
256
+ 'Atomic state must flush to parent'
257
+ )
258
+ }
259
+
252
260
  async _commit() {
253
261
  await this.mutex.lock()
254
262
 
@@ -957,12 +965,21 @@ class SessionState {
957
965
  return { tree, flushed }
958
966
  }
959
967
 
968
+ static isParent(state, parent) {
969
+ // atomic batches have parent set
970
+ if (state.parent && state.parent === parent) return true
971
+
972
+ return HypercoreStorage.isParentStorage(state.storage, parent.storage)
973
+ }
974
+
960
975
  async commit(state, { signature, keyPair, length = state.length, treeLength = -1 } = {}) {
961
976
  assert(
962
977
  this.isDefault() || (this.parent && this.parent.isDefault()),
963
978
  'Can only commit into default state'
964
979
  )
965
980
 
981
+ assert(SessionState.isParent(state, this), 'Cannot commit across cores')
982
+
966
983
  if (this.core._repairMode) {
967
984
  throw ASSERTION('Cannot commit while repair mode is on')
968
985
  }
@@ -1180,6 +1197,7 @@ class SessionState {
1180
1197
 
1181
1198
  if (atom) {
1182
1199
  this.atomized = atom
1200
+ atom.preflush(this._precommit.bind(this, state))
1183
1201
  atom.onflush(state._commit.bind(state))
1184
1202
  }
1185
1203
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hypercore",
3
- "version": "11.27.12",
3
+ "version": "11.27.13",
4
4
  "description": "Hypercore is a secure, distributed append-only log",
5
5
  "main": "index.js",
6
6
  "scripts": {