@vrtmrz/livesync-commonlib 0.1.0-rc.0

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 (516) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +49 -0
  3. package/dist/API/DirectFileManipulator.d.ts +2 -0
  4. package/dist/API/DirectFileManipulator.js +4 -0
  5. package/dist/API/DirectFileManipulatorV2.d.ts +150 -0
  6. package/dist/API/DirectFileManipulatorV2.js +424 -0
  7. package/dist/API/processSetting.d.ts +41 -0
  8. package/dist/API/processSetting.js +140 -0
  9. package/dist/ContentSplitter/ContentSplitter.d.ts +28 -0
  10. package/dist/ContentSplitter/ContentSplitter.js +5 -0
  11. package/dist/ContentSplitter/ContentSplitterBase.d.ts +51 -0
  12. package/dist/ContentSplitter/ContentSplitterBase.js +83 -0
  13. package/dist/ContentSplitter/ContentSplitterRabinKarp.d.ts +9 -0
  14. package/dist/ContentSplitter/ContentSplitterRabinKarp.js +32 -0
  15. package/dist/ContentSplitter/ContentSplitterV1.d.ts +9 -0
  16. package/dist/ContentSplitter/ContentSplitterV1.js +34 -0
  17. package/dist/ContentSplitter/ContentSplitterV2.d.ts +9 -0
  18. package/dist/ContentSplitter/ContentSplitterV2.js +34 -0
  19. package/dist/ContentSplitter/ContentSplitters.d.ts +12 -0
  20. package/dist/ContentSplitter/ContentSplitters.js +29 -0
  21. package/dist/bureau/bureau.d.ts +7 -0
  22. package/dist/bureau/bureau.js +5 -0
  23. package/dist/common/ConnectionString.d.ts +30 -0
  24. package/dist/common/ConnectionString.js +179 -0
  25. package/dist/common/LSError.d.ts +48 -0
  26. package/dist/common/LSError.js +112 -0
  27. package/dist/common/configForDoc.d.ts +79 -0
  28. package/dist/common/configForDoc.js +312 -0
  29. package/dist/common/coreEnvFunctions.d.ts +21 -0
  30. package/dist/common/coreEnvFunctions.js +22 -0
  31. package/dist/common/coreEnvVars.d.ts +3 -0
  32. package/dist/common/coreEnvVars.js +6 -0
  33. package/dist/common/i18n.d.ts +18 -0
  34. package/dist/common/i18n.js +7193 -0
  35. package/dist/common/logger.d.ts +2 -0
  36. package/dist/common/logger.js +1 -0
  37. package/dist/common/messages/combinedMessages.dev.d.ts +7 -0
  38. package/dist/common/messages/combinedMessages.dev.js +44 -0
  39. package/dist/common/messages/combinedMessages.prod.d.ts +9264 -0
  40. package/dist/common/messages/combinedMessages.prod.js +9271 -0
  41. package/dist/common/messages/de.d.ts +297 -0
  42. package/dist/common/messages/de.js +7 -0
  43. package/dist/common/messages/def.d.ts +1119 -0
  44. package/dist/common/messages/def.js +7 -0
  45. package/dist/common/messages/es.d.ts +689 -0
  46. package/dist/common/messages/es.js +7 -0
  47. package/dist/common/messages/fr.d.ts +582 -0
  48. package/dist/common/messages/fr.js +7 -0
  49. package/dist/common/messages/he.d.ts +583 -0
  50. package/dist/common/messages/he.js +7 -0
  51. package/dist/common/messages/ja.d.ts +838 -0
  52. package/dist/common/messages/ja.js +7 -0
  53. package/dist/common/messages/ko.d.ts +800 -0
  54. package/dist/common/messages/ko.js +7 -0
  55. package/dist/common/messages/ru.d.ts +858 -0
  56. package/dist/common/messages/ru.js +7 -0
  57. package/dist/common/messages/zh-tw.d.ts +384 -0
  58. package/dist/common/messages/zh-tw.js +7 -0
  59. package/dist/common/messages/zh.d.ts +1093 -0
  60. package/dist/common/messages/zh.js +7 -0
  61. package/dist/common/messagesJson/de.json +295 -0
  62. package/dist/common/messagesJson/en.json +1117 -0
  63. package/dist/common/messagesJson/es.json +687 -0
  64. package/dist/common/messagesJson/fr.json +580 -0
  65. package/dist/common/messagesJson/he.json +581 -0
  66. package/dist/common/messagesJson/ja.json +836 -0
  67. package/dist/common/messagesJson/ko.json +798 -0
  68. package/dist/common/messagesJson/ru.json +856 -0
  69. package/dist/common/messagesJson/zh-tw.json +382 -0
  70. package/dist/common/messagesJson/zh.json +1091 -0
  71. package/dist/common/models/auth.type.d.ts +41 -0
  72. package/dist/common/models/auth.type.js +0 -0
  73. package/dist/common/models/db.const.d.ts +20 -0
  74. package/dist/common/models/db.const.js +28 -0
  75. package/dist/common/models/db.definition.d.ts +56 -0
  76. package/dist/common/models/db.definition.js +6 -0
  77. package/dist/common/models/db.type.d.ts +142 -0
  78. package/dist/common/models/db.type.js +0 -0
  79. package/dist/common/models/diff.definition.d.ts +16 -0
  80. package/dist/common/models/diff.definition.js +0 -0
  81. package/dist/common/models/fileaccess.const.d.ts +7 -0
  82. package/dist/common/models/fileaccess.const.js +16 -0
  83. package/dist/common/models/fileaccess.type.d.ts +72 -0
  84. package/dist/common/models/fileaccess.type.js +0 -0
  85. package/dist/common/models/redflag.const.d.ts +32 -0
  86. package/dist/common/models/redflag.const.js +27 -0
  87. package/dist/common/models/setting.const.d.ts +49 -0
  88. package/dist/common/models/setting.const.defaults.d.ts +3 -0
  89. package/dist/common/models/setting.const.defaults.js +185 -0
  90. package/dist/common/models/setting.const.js +68 -0
  91. package/dist/common/models/setting.const.preferred.d.ts +5 -0
  92. package/dist/common/models/setting.const.preferred.js +35 -0
  93. package/dist/common/models/setting.const.qr.d.ts +2 -0
  94. package/dist/common/models/setting.const.qr.js +174 -0
  95. package/dist/common/models/setting.type.d.ts +900 -0
  96. package/dist/common/models/setting.type.js +8 -0
  97. package/dist/common/models/shared.const.behabiour.d.ts +28 -0
  98. package/dist/common/models/shared.const.behabiour.js +36 -0
  99. package/dist/common/models/shared.const.d.ts +5 -0
  100. package/dist/common/models/shared.const.js +12 -0
  101. package/dist/common/models/shared.const.symbols.d.ts +9 -0
  102. package/dist/common/models/shared.const.symbols.js +20 -0
  103. package/dist/common/models/shared.definition.configNames.d.ts +36 -0
  104. package/dist/common/models/shared.definition.configNames.js +203 -0
  105. package/dist/common/models/shared.definition.d.ts +22 -0
  106. package/dist/common/models/shared.definition.js +24 -0
  107. package/dist/common/models/shared.type.util.d.ts +8 -0
  108. package/dist/common/models/shared.type.util.js +0 -0
  109. package/dist/common/models/sync.definition.d.ts +18 -0
  110. package/dist/common/models/sync.definition.js +20 -0
  111. package/dist/common/models/tweak.definition.d.ts +191 -0
  112. package/dist/common/models/tweak.definition.js +77 -0
  113. package/dist/common/rosetta.d.ts +42 -0
  114. package/dist/common/rosetta.js +57 -0
  115. package/dist/common/settingConstants.d.ts +216 -0
  116. package/dist/common/settingConstants.js +434 -0
  117. package/dist/common/typeUtils.d.ts +17 -0
  118. package/dist/common/typeUtils.js +51 -0
  119. package/dist/common/types.d.ts +107 -0
  120. package/dist/common/types.js +212 -0
  121. package/dist/common/utils.d.ts +129 -0
  122. package/dist/common/utils.doc.d.ts +11 -0
  123. package/dist/common/utils.doc.js +35 -0
  124. package/dist/common/utils.js +583 -0
  125. package/dist/common/utils.object.d.ts +2 -0
  126. package/dist/common/utils.object.js +14 -0
  127. package/dist/common/utils.patch.d.ts +8 -0
  128. package/dist/common/utils.patch.js +178 -0
  129. package/dist/common/utils.type.d.ts +1 -0
  130. package/dist/common/utils.type.js +0 -0
  131. package/dist/context.d.ts +8 -0
  132. package/dist/context.js +14 -0
  133. package/dist/databases/IndexedDBKeyValueDatabase.d.ts +26 -0
  134. package/dist/databases/IndexedDBKeyValueDatabase.js +130 -0
  135. package/dist/dataobject/StoredMap.d.ts +12 -0
  136. package/dist/dataobject/StoredMap.js +47 -0
  137. package/dist/dev/checks.d.ts +5 -0
  138. package/dist/dev/checks.js +38 -0
  139. package/dist/encryption/encryptHKDF.d.ts +3 -0
  140. package/dist/encryption/encryptHKDF.js +7 -0
  141. package/dist/encryption/stringEncryption.d.ts +27 -0
  142. package/dist/encryption/stringEncryption.js +59 -0
  143. package/dist/events/coreEvents.d.ts +54 -0
  144. package/dist/events/coreEvents.js +46 -0
  145. package/dist/hub/hub.d.ts +11 -0
  146. package/dist/hub/hub.js +7 -0
  147. package/dist/index.d.ts +1 -0
  148. package/dist/index.js +4 -0
  149. package/dist/interfaces/AsyncActivityRunner.d.ts +18 -0
  150. package/dist/interfaces/AsyncActivityRunner.js +7 -0
  151. package/dist/interfaces/Confirm.d.ts +17 -0
  152. package/dist/interfaces/Confirm.js +0 -0
  153. package/dist/interfaces/DatabaseFileAccess.d.ts +14 -0
  154. package/dist/interfaces/DatabaseFileAccess.js +0 -0
  155. package/dist/interfaces/DatabaseRebuilder.d.ts +13 -0
  156. package/dist/interfaces/DatabaseRebuilder.js +0 -0
  157. package/dist/interfaces/FileHandler.d.ts +13 -0
  158. package/dist/interfaces/FileHandler.js +0 -0
  159. package/dist/interfaces/KeyValueDatabase.d.ts +11 -0
  160. package/dist/interfaces/KeyValueDatabase.js +0 -0
  161. package/dist/interfaces/ServiceModule.d.ts +59 -0
  162. package/dist/interfaces/ServiceModule.js +19 -0
  163. package/dist/interfaces/StorageAccess.d.ts +44 -0
  164. package/dist/interfaces/StorageAccess.js +0 -0
  165. package/dist/interfaces/StorageEventManager.d.ts +16 -0
  166. package/dist/interfaces/StorageEventManager.js +5 -0
  167. package/dist/managers/ChangeManager.d.ts +61 -0
  168. package/dist/managers/ChangeManager.js +104 -0
  169. package/dist/managers/ChunkDeliveryCoordinator.d.ts +51 -0
  170. package/dist/managers/ChunkDeliveryCoordinator.js +136 -0
  171. package/dist/managers/ChunkFetcher.d.ts +44 -0
  172. package/dist/managers/ChunkFetcher.js +251 -0
  173. package/dist/managers/ChunkManager.d.ts +2 -0
  174. package/dist/managers/ChunkManager.js +4 -0
  175. package/dist/managers/ConflictManager.d.ts +37 -0
  176. package/dist/managers/ConflictManager.js +322 -0
  177. package/dist/managers/EntryManager/EntryManager.d.ts +37 -0
  178. package/dist/managers/EntryManager/EntryManager.js +73 -0
  179. package/dist/managers/EntryManager/EntryManagerImpls.d.ts +74 -0
  180. package/dist/managers/EntryManager/EntryManagerImpls.js +499 -0
  181. package/dist/managers/HashManager/HashManager.d.ts +60 -0
  182. package/dist/managers/HashManager/HashManager.js +97 -0
  183. package/dist/managers/HashManager/HashManagerCore.d.ts +114 -0
  184. package/dist/managers/HashManager/HashManagerCore.js +99 -0
  185. package/dist/managers/HashManager/PureJSHashManager.d.ts +77 -0
  186. package/dist/managers/HashManager/PureJSHashManager.js +84 -0
  187. package/dist/managers/HashManager/XXHashHashManager.d.ts +96 -0
  188. package/dist/managers/HashManager/XXHashHashManager.js +111 -0
  189. package/dist/managers/LayeredChunkManager/ArrivalWaitLayer.d.ts +30 -0
  190. package/dist/managers/LayeredChunkManager/ArrivalWaitLayer.js +115 -0
  191. package/dist/managers/LayeredChunkManager/CacheLayer.d.ts +59 -0
  192. package/dist/managers/LayeredChunkManager/CacheLayer.js +161 -0
  193. package/dist/managers/LayeredChunkManager/ChunkLayerInterfaces.d.ts +37 -0
  194. package/dist/managers/LayeredChunkManager/ChunkLayerInterfaces.js +0 -0
  195. package/dist/managers/LayeredChunkManager/DatabaseReadLayer.d.ts +14 -0
  196. package/dist/managers/LayeredChunkManager/DatabaseReadLayer.js +78 -0
  197. package/dist/managers/LayeredChunkManager/DatabaseWriteLayer.d.ts +11 -0
  198. package/dist/managers/LayeredChunkManager/DatabaseWriteLayer.js +43 -0
  199. package/dist/managers/LayeredChunkManager/HotPackLayer.d.ts +9 -0
  200. package/dist/managers/LayeredChunkManager/HotPackLayer.js +8 -0
  201. package/dist/managers/LayeredChunkManager/types.d.ts +39 -0
  202. package/dist/managers/LayeredChunkManager/types.js +0 -0
  203. package/dist/managers/LayeredChunkManager.d.ts +53 -0
  204. package/dist/managers/LayeredChunkManager.js +240 -0
  205. package/dist/managers/LiveSyncManagers.d.ts +48 -0
  206. package/dist/managers/LiveSyncManagers.js +136 -0
  207. package/dist/managers/StorageEventManager.d.ts +135 -0
  208. package/dist/managers/StorageEventManager.js +564 -0
  209. package/dist/managers/StorageProcessingManager.d.ts +14 -0
  210. package/dist/managers/StorageProcessingManager.js +48 -0
  211. package/dist/managers/adapters/IStorageEventConverterAdapter.d.ts +16 -0
  212. package/dist/managers/adapters/IStorageEventConverterAdapter.js +0 -0
  213. package/dist/managers/adapters/IStorageEventManagerAdapter.d.ts +18 -0
  214. package/dist/managers/adapters/IStorageEventManagerAdapter.js +0 -0
  215. package/dist/managers/adapters/IStorageEventPersistenceAdapter.d.ts +15 -0
  216. package/dist/managers/adapters/IStorageEventPersistenceAdapter.js +0 -0
  217. package/dist/managers/adapters/IStorageEventStatusAdapter.d.ts +13 -0
  218. package/dist/managers/adapters/IStorageEventStatusAdapter.js +0 -0
  219. package/dist/managers/adapters/IStorageEventTypeGuardAdapter.d.ts +16 -0
  220. package/dist/managers/adapters/IStorageEventTypeGuardAdapter.js +0 -0
  221. package/dist/managers/adapters/IStorageEventWatchAdapter.d.ts +21 -0
  222. package/dist/managers/adapters/IStorageEventWatchAdapter.js +0 -0
  223. package/dist/managers/adapters/index.d.ts +6 -0
  224. package/dist/managers/adapters/index.js +0 -0
  225. package/dist/mock_and_interop/stores.d.ts +21 -0
  226. package/dist/mock_and_interop/stores.js +15 -0
  227. package/dist/mock_and_interop/wrapper.d.ts +7 -0
  228. package/dist/mock_and_interop/wrapper.js +37 -0
  229. package/dist/mods.d.ts +1 -0
  230. package/dist/mods.js +18 -0
  231. package/dist/platform/browser/index.d.ts +1 -0
  232. package/dist/platform/browser/index.js +10 -0
  233. package/dist/platform/browser/storage.d.ts +35 -0
  234. package/dist/platform/browser/storage.js +139 -0
  235. package/dist/platform/node/index.d.ts +23 -0
  236. package/dist/platform/node/index.js +33 -0
  237. package/dist/platform/node/storage.d.ts +31 -0
  238. package/dist/platform/node/storage.js +104 -0
  239. package/dist/platform/storagePath.d.ts +7 -0
  240. package/dist/platform/storagePath.js +20 -0
  241. package/dist/pouchdb/LiveSyncDBFunctions.d.ts +14 -0
  242. package/dist/pouchdb/LiveSyncDBFunctions.js +129 -0
  243. package/dist/pouchdb/LiveSyncLocalDB.d.ts +196 -0
  244. package/dist/pouchdb/LiveSyncLocalDB.js +381 -0
  245. package/dist/pouchdb/PouchDBConstructor.d.ts +3 -0
  246. package/dist/pouchdb/PouchDBConstructor.js +0 -0
  247. package/dist/pouchdb/ReplicatorShim.d.ts +51 -0
  248. package/dist/pouchdb/ReplicatorShim.js +109 -0
  249. package/dist/pouchdb/StreamingFetch.d.ts +19 -0
  250. package/dist/pouchdb/StreamingFetch.js +263 -0
  251. package/dist/pouchdb/chunks.d.ts +38 -0
  252. package/dist/pouchdb/chunks.js +314 -0
  253. package/dist/pouchdb/compress.d.ts +11 -0
  254. package/dist/pouchdb/compress.js +99 -0
  255. package/dist/pouchdb/encryption.d.ts +20 -0
  256. package/dist/pouchdb/encryption.js +458 -0
  257. package/dist/pouchdb/negotiation.d.ts +9 -0
  258. package/dist/pouchdb/negotiation.js +109 -0
  259. package/dist/pouchdb/pouchdb-browser.d.ts +2 -0
  260. package/dist/pouchdb/pouchdb-browser.js +96 -0
  261. package/dist/pouchdb/pouchdb-http.d.ts +2 -0
  262. package/dist/pouchdb/pouchdb-http.js +94 -0
  263. package/dist/pouchdb/pouchdb-test.d.ts +2 -0
  264. package/dist/pouchdb/pouchdb-test.js +12 -0
  265. package/dist/pouchdb/utils_couchdb.d.ts +4 -0
  266. package/dist/pouchdb/utils_couchdb.js +38 -0
  267. package/dist/replication/LiveSyncAbstractReplicator.d.ts +69 -0
  268. package/dist/replication/LiveSyncAbstractReplicator.js +92 -0
  269. package/dist/replication/SyncParamsHandler.d.ts +35 -0
  270. package/dist/replication/SyncParamsHandler.js +118 -0
  271. package/dist/replication/couchdb/LiveSyncReplicator.d.ts +85 -0
  272. package/dist/replication/couchdb/LiveSyncReplicator.js +1132 -0
  273. package/dist/replication/httplib.d.ts +75 -0
  274. package/dist/replication/httplib.js +187 -0
  275. package/dist/replication/journal/JournalSyncCore.d.ts +70 -0
  276. package/dist/replication/journal/JournalSyncCore.js +737 -0
  277. package/dist/replication/journal/JournalSyncTypes.d.ts +9 -0
  278. package/dist/replication/journal/JournalSyncTypes.js +11 -0
  279. package/dist/replication/journal/LiveSyncJournalReplicator.d.ts +40 -0
  280. package/dist/replication/journal/LiveSyncJournalReplicator.js +294 -0
  281. package/dist/replication/journal/LiveSyncJournalReplicatorEnv.d.ts +3 -0
  282. package/dist/replication/journal/LiveSyncJournalReplicatorEnv.js +0 -0
  283. package/dist/replication/journal/objectstore/JournalStorageAdapter.d.ts +15 -0
  284. package/dist/replication/journal/objectstore/JournalStorageAdapter.js +0 -0
  285. package/dist/replication/journal/objectstore/MinioStorageAdapter.d.ts +21 -0
  286. package/dist/replication/journal/objectstore/MinioStorageAdapter.js +204 -0
  287. package/dist/replication/trystero/LiveSyncTrysteroReplicator.d.ts +90 -0
  288. package/dist/replication/trystero/LiveSyncTrysteroReplicator.js +380 -0
  289. package/dist/replication/trystero/P2PLogCollector.d.ts +8 -0
  290. package/dist/replication/trystero/P2PLogCollector.js +91 -0
  291. package/dist/replication/trystero/P2PReplicatorBase.d.ts +19 -0
  292. package/dist/replication/trystero/P2PReplicatorBase.js +0 -0
  293. package/dist/replication/trystero/P2PReplicatorCore.d.ts +12 -0
  294. package/dist/replication/trystero/P2PReplicatorCore.js +126 -0
  295. package/dist/replication/trystero/P2PReplicatorPaneCommon.d.ts +41 -0
  296. package/dist/replication/trystero/P2PReplicatorPaneCommon.js +20 -0
  297. package/dist/replication/trystero/ProxiedDB.d.ts +13 -0
  298. package/dist/replication/trystero/ProxiedDB.js +20 -0
  299. package/dist/replication/trystero/TrysteroReplicator.d.ts +152 -0
  300. package/dist/replication/trystero/TrysteroReplicator.js +683 -0
  301. package/dist/replication/trystero/TrysteroReplicatorP2PClient.d.ts +19 -0
  302. package/dist/replication/trystero/TrysteroReplicatorP2PClient.js +80 -0
  303. package/dist/replication/trystero/TrysteroReplicatorP2PConnection.d.ts +2 -0
  304. package/dist/replication/trystero/TrysteroReplicatorP2PConnection.js +4 -0
  305. package/dist/replication/trystero/TrysteroReplicatorP2PServer.d.ts +117 -0
  306. package/dist/replication/trystero/TrysteroReplicatorP2PServer.js +540 -0
  307. package/dist/replication/trystero/UseP2PReplicatorResult.d.ts +11 -0
  308. package/dist/replication/trystero/UseP2PReplicatorResult.js +0 -0
  309. package/dist/replication/trystero/addP2PEventHandlers.d.ts +35 -0
  310. package/dist/replication/trystero/addP2PEventHandlers.js +43 -0
  311. package/dist/replication/trystero/rpcCompat.d.ts +1 -0
  312. package/dist/replication/trystero/rpcCompat.js +9 -0
  313. package/dist/replication/trystero/types.d.ts +95 -0
  314. package/dist/replication/trystero/types.js +27 -0
  315. package/dist/replication/trystero/useP2PReplicatorCommands.d.ts +7 -0
  316. package/dist/replication/trystero/useP2PReplicatorCommands.js +25 -0
  317. package/dist/replication/trystero/useP2PReplicatorFeature.d.ts +17 -0
  318. package/dist/replication/trystero/useP2PReplicatorFeature.js +82 -0
  319. package/dist/rpc/RpcRoom.d.ts +24 -0
  320. package/dist/rpc/RpcRoom.js +300 -0
  321. package/dist/rpc/RpcSession.d.ts +9 -0
  322. package/dist/rpc/RpcSession.js +32 -0
  323. package/dist/rpc/chunking.d.ts +11 -0
  324. package/dist/rpc/chunking.js +58 -0
  325. package/dist/rpc/errors.d.ts +8 -0
  326. package/dist/rpc/errors.js +26 -0
  327. package/dist/rpc/index.d.ts +6 -0
  328. package/dist/rpc/index.js +12 -0
  329. package/dist/rpc/pouchdb/RpcPouchDBProxy.d.ts +75 -0
  330. package/dist/rpc/pouchdb/RpcPouchDBProxy.js +115 -0
  331. package/dist/rpc/pouchdb/RpcPouchDBServer.d.ts +16 -0
  332. package/dist/rpc/pouchdb/RpcPouchDBServer.js +55 -0
  333. package/dist/rpc/transports/DiagRTCPeerConnections.d.ts +24 -0
  334. package/dist/rpc/transports/DiagRTCPeerConnections.js +208 -0
  335. package/dist/rpc/transports/DiagRTCPeerConnections.types.d.ts +64 -0
  336. package/dist/rpc/transports/DiagRTCPeerConnections.types.js +12 -0
  337. package/dist/rpc/transports/DiagRTCPeerConnections.utils.d.ts +33 -0
  338. package/dist/rpc/transports/DiagRTCPeerConnections.utils.js +217 -0
  339. package/dist/rpc/transports/TrysteroTransport.d.ts +216 -0
  340. package/dist/rpc/transports/TrysteroTransport.js +134 -0
  341. package/dist/rpc/transports/trysteroUtils.d.ts +3 -0
  342. package/dist/rpc/transports/trysteroUtils.js +37 -0
  343. package/dist/rpc/types.d.ts +75 -0
  344. package/dist/rpc/types.js +6 -0
  345. package/dist/serviceFeatures/checkRemoteSize.d.ts +28 -0
  346. package/dist/serviceFeatures/checkRemoteSize.js +178 -0
  347. package/dist/serviceFeatures/offlineScanner.d.ts +128 -0
  348. package/dist/serviceFeatures/offlineScanner.js +553 -0
  349. package/dist/serviceFeatures/prepareDatabaseForUse.d.ts +20 -0
  350. package/dist/serviceFeatures/prepareDatabaseForUse.js +39 -0
  351. package/dist/serviceFeatures/remoteConfig.d.ts +46 -0
  352. package/dist/serviceFeatures/remoteConfig.js +247 -0
  353. package/dist/serviceFeatures/setupObsidian/qrCode.d.ts +4 -0
  354. package/dist/serviceFeatures/setupObsidian/qrCode.js +67 -0
  355. package/dist/serviceFeatures/setupObsidian/setupUri.d.ts +7 -0
  356. package/dist/serviceFeatures/setupObsidian/setupUri.js +70 -0
  357. package/dist/serviceFeatures/setupObsidian/types.d.ts +2 -0
  358. package/dist/serviceFeatures/setupObsidian/types.js +0 -0
  359. package/dist/serviceFeatures/targetFilter.d.ts +24 -0
  360. package/dist/serviceFeatures/targetFilter.js +178 -0
  361. package/dist/serviceModules/FileAccessBase.d.ts +93 -0
  362. package/dist/serviceModules/FileAccessBase.js +219 -0
  363. package/dist/serviceModules/Rebuilder.d.ts +92 -0
  364. package/dist/serviceModules/Rebuilder.js +449 -0
  365. package/dist/serviceModules/ServiceDatabaseFileAccessBase.d.ts +40 -0
  366. package/dist/serviceModules/ServiceDatabaseFileAccessBase.js +306 -0
  367. package/dist/serviceModules/ServiceFileAccessBase.d.ts +64 -0
  368. package/dist/serviceModules/ServiceFileAccessBase.js +312 -0
  369. package/dist/serviceModules/ServiceFileHandlerBase.d.ts +52 -0
  370. package/dist/serviceModules/ServiceFileHandlerBase.js +493 -0
  371. package/dist/serviceModules/ServiceModuleBase.d.ts +10 -0
  372. package/dist/serviceModules/ServiceModuleBase.js +13 -0
  373. package/dist/serviceModules/adapters/IConversionAdapter.d.ts +15 -0
  374. package/dist/serviceModules/adapters/IConversionAdapter.js +0 -0
  375. package/dist/serviceModules/adapters/IFileSystemAdapter.d.ts +47 -0
  376. package/dist/serviceModules/adapters/IFileSystemAdapter.js +0 -0
  377. package/dist/serviceModules/adapters/IPathAdapter.d.ts +15 -0
  378. package/dist/serviceModules/adapters/IPathAdapter.js +0 -0
  379. package/dist/serviceModules/adapters/IStorageAdapter.d.ts +56 -0
  380. package/dist/serviceModules/adapters/IStorageAdapter.js +0 -0
  381. package/dist/serviceModules/adapters/ITypeGuardAdapter.d.ts +14 -0
  382. package/dist/serviceModules/adapters/ITypeGuardAdapter.js +0 -0
  383. package/dist/serviceModules/adapters/IVaultAdapter.d.ts +51 -0
  384. package/dist/serviceModules/adapters/IVaultAdapter.js +0 -0
  385. package/dist/serviceModules/adapters/index.d.ts +6 -0
  386. package/dist/serviceModules/adapters/index.js +0 -0
  387. package/dist/services/BrowserServices.d.ts +36 -0
  388. package/dist/services/BrowserServices.js +123 -0
  389. package/dist/services/HeadlessServices.d.ts +14 -0
  390. package/dist/services/HeadlessServices.js +144 -0
  391. package/dist/services/InjectableServices.d.ts +1 -0
  392. package/dist/services/InjectableServices.js +4 -0
  393. package/dist/services/ServiceHub.d.ts +82 -0
  394. package/dist/services/ServiceHub.js +66 -0
  395. package/dist/services/base/APIService.d.ts +93 -0
  396. package/dist/services/base/APIService.js +44 -0
  397. package/dist/services/base/AppLifecycleService.d.ts +132 -0
  398. package/dist/services/base/AppLifecycleService.js +123 -0
  399. package/dist/services/base/ConfigService.d.ts +7 -0
  400. package/dist/services/base/ConfigService.js +6 -0
  401. package/dist/services/base/ConflictService.d.ts +54 -0
  402. package/dist/services/base/ConflictService.js +22 -0
  403. package/dist/services/base/ControlService.d.ts +54 -0
  404. package/dist/services/base/ControlService.js +103 -0
  405. package/dist/services/base/DatabaseEventService.d.ts +38 -0
  406. package/dist/services/base/DatabaseEventService.js +38 -0
  407. package/dist/services/base/DatabaseService.d.ts +40 -0
  408. package/dist/services/base/DatabaseService.js +79 -0
  409. package/dist/services/base/FileProcessingService.d.ts +25 -0
  410. package/dist/services/base/FileProcessingService.js +28 -0
  411. package/dist/services/base/IService.d.ts +284 -0
  412. package/dist/services/base/IService.js +1 -0
  413. package/dist/services/base/KeyValueDBService.d.ts +42 -0
  414. package/dist/services/base/KeyValueDBService.js +133 -0
  415. package/dist/services/base/MessageTranslator.d.ts +6 -0
  416. package/dist/services/base/MessageTranslator.js +4 -0
  417. package/dist/services/base/PathService.d.ts +38 -0
  418. package/dist/services/base/PathService.js +66 -0
  419. package/dist/services/base/RemoteService.d.ts +61 -0
  420. package/dist/services/base/RemoteService.js +212 -0
  421. package/dist/services/base/ReplicationService.d.ts +92 -0
  422. package/dist/services/base/ReplicationService.js +261 -0
  423. package/dist/services/base/ReplicatorService.d.ts +66 -0
  424. package/dist/services/base/ReplicatorService.js +164 -0
  425. package/dist/services/base/ServiceBase.d.ts +33 -0
  426. package/dist/services/base/ServiceBase.js +27 -0
  427. package/dist/services/base/SettingService.d.ts +112 -0
  428. package/dist/services/base/SettingService.js +543 -0
  429. package/dist/services/base/TestService.d.ts +28 -0
  430. package/dist/services/base/TestService.js +19 -0
  431. package/dist/services/base/TweakValueService.d.ts +40 -0
  432. package/dist/services/base/TweakValueService.js +6 -0
  433. package/dist/services/base/UnresolvedErrorManager.d.ts +15 -0
  434. package/dist/services/base/UnresolvedErrorManager.js +44 -0
  435. package/dist/services/base/VaultService.d.ts +69 -0
  436. package/dist/services/base/VaultService.js +70 -0
  437. package/dist/services/implements/base/SvelteDialog.d.ts +79 -0
  438. package/dist/services/implements/base/SvelteDialog.js +134 -0
  439. package/dist/services/implements/base/UIService.d.ts +24 -0
  440. package/dist/services/implements/base/UIService.js +37 -0
  441. package/dist/services/implements/browser/BrowserAPIService.d.ts +54 -0
  442. package/dist/services/implements/browser/BrowserAPIService.js +298 -0
  443. package/dist/services/implements/browser/BrowserDatabaseService.d.ts +7 -0
  444. package/dist/services/implements/browser/BrowserDatabaseService.js +10 -0
  445. package/dist/services/implements/browser/ConfigServiceBrowserCompat.d.ts +16 -0
  446. package/dist/services/implements/browser/ConfigServiceBrowserCompat.js +23 -0
  447. package/dist/services/implements/headless/HeadlessAPIService.d.ts +52 -0
  448. package/dist/services/implements/headless/HeadlessAPIService.js +127 -0
  449. package/dist/services/implements/headless/HeadlessDatabaseService.d.ts +7 -0
  450. package/dist/services/implements/headless/HeadlessDatabaseService.js +10 -0
  451. package/dist/services/implements/injectable/InjectableAPIService.d.ts +7 -0
  452. package/dist/services/implements/injectable/InjectableAPIService.js +18 -0
  453. package/dist/services/implements/injectable/InjectableAppLifecycleService.d.ts +11 -0
  454. package/dist/services/implements/injectable/InjectableAppLifecycleService.js +14 -0
  455. package/dist/services/implements/injectable/InjectableConflictService.d.ts +11 -0
  456. package/dist/services/implements/injectable/InjectableConflictService.js +14 -0
  457. package/dist/services/implements/injectable/InjectableDatabaseEventService.d.ts +4 -0
  458. package/dist/services/implements/injectable/InjectableDatabaseEventService.js +7 -0
  459. package/dist/services/implements/injectable/InjectableFileProcessingService.d.ts +4 -0
  460. package/dist/services/implements/injectable/InjectableFileProcessingService.js +6 -0
  461. package/dist/services/implements/injectable/InjectablePathService.d.ts +12 -0
  462. package/dist/services/implements/injectable/InjectablePathService.js +36 -0
  463. package/dist/services/implements/injectable/InjectableRemoteService.d.ts +4 -0
  464. package/dist/services/implements/injectable/InjectableRemoteService.js +7 -0
  465. package/dist/services/implements/injectable/InjectableReplicationService.d.ts +4 -0
  466. package/dist/services/implements/injectable/InjectableReplicationService.js +6 -0
  467. package/dist/services/implements/injectable/InjectableReplicatorService.d.ts +4 -0
  468. package/dist/services/implements/injectable/InjectableReplicatorService.js +7 -0
  469. package/dist/services/implements/injectable/InjectableServiceHub.d.ts +72 -0
  470. package/dist/services/implements/injectable/InjectableServiceHub.js +125 -0
  471. package/dist/services/implements/injectable/InjectableServices.d.ts +36 -0
  472. package/dist/services/implements/injectable/InjectableServices.js +1 -0
  473. package/dist/services/implements/injectable/InjectableSettingService.d.ts +11 -0
  474. package/dist/services/implements/injectable/InjectableSettingService.js +33 -0
  475. package/dist/services/implements/injectable/InjectableTestService.d.ts +5 -0
  476. package/dist/services/implements/injectable/InjectableTestService.js +8 -0
  477. package/dist/services/implements/injectable/InjectableTweakValueService.d.ts +15 -0
  478. package/dist/services/implements/injectable/InjectableTweakValueService.js +12 -0
  479. package/dist/services/implements/injectable/InjectableVaultService.d.ts +9 -0
  480. package/dist/services/implements/injectable/InjectableVaultService.js +20 -0
  481. package/dist/services/lib/HandlerUtils.d.ts +374 -0
  482. package/dist/services/lib/HandlerUtils.js +412 -0
  483. package/dist/services/lib/logUtils.d.ts +13 -0
  484. package/dist/services/lib/logUtils.js +28 -0
  485. package/dist/services/lib/remoteActivity.d.ts +13 -0
  486. package/dist/services/lib/remoteActivity.js +11 -0
  487. package/dist/string_and_binary/chunks.d.ts +10 -0
  488. package/dist/string_and_binary/chunks.js +561 -0
  489. package/dist/string_and_binary/convert.d.ts +8 -0
  490. package/dist/string_and_binary/convert.js +46 -0
  491. package/dist/string_and_binary/hash.d.ts +2 -0
  492. package/dist/string_and_binary/hash.js +1 -0
  493. package/dist/string_and_binary/path.d.ts +35 -0
  494. package/dist/string_and_binary/path.js +240 -0
  495. package/dist/worker/bg.common.d.ts +2 -0
  496. package/dist/worker/bg.common.js +6 -0
  497. package/dist/worker/bg.worker.d.ts +1 -0
  498. package/dist/worker/bg.worker.encryption.d.ts +7 -0
  499. package/dist/worker/bg.worker.encryption.js +30 -0
  500. package/dist/worker/bg.worker.js +14 -0
  501. package/dist/worker/bg.worker.splitting.d.ts +6 -0
  502. package/dist/worker/bg.worker.splitting.js +36 -0
  503. package/dist/worker/bgWorker.d.ts +25 -0
  504. package/dist/worker/bgWorker.direct.d.ts +40 -0
  505. package/dist/worker/bgWorker.direct.js +65 -0
  506. package/dist/worker/bgWorker.encryption.d.ts +22 -0
  507. package/dist/worker/bgWorker.encryption.js +40 -0
  508. package/dist/worker/bgWorker.js +348 -0
  509. package/dist/worker/bgWorker.splitting.d.ts +27 -0
  510. package/dist/worker/bgWorker.splitting.js +123 -0
  511. package/dist/worker/universalTypes.d.ts +63 -0
  512. package/dist/worker/universalTypes.js +4 -0
  513. package/docs/development.md +51 -0
  514. package/docs/platform-storage.md +60 -0
  515. package/docs/releasing.md +69 -0
  516. package/package.json +693 -0
@@ -0,0 +1,39 @@
1
+ import type { EntryDoc } from "../../common/models/db.definition.js";
2
+ import type { DocumentID, EntryLeaf } from "../../common/models/db.type.js";
3
+ import type { ISettingService } from "../../services/base/IService.js";
4
+ import type { ChangeManager } from "../ChangeManager.js";
5
+ import type { EVENT_CHUNK_FETCHED, EVENT_MISSING_CHUNK_REMOTE, EVENT_MISSING_CHUNKS } from "../ChunkFetcher.js";
6
+ import type { ActivityCountSource } from "../ChunkDeliveryCoordinator.js";
7
+ export type ChunkManagerOptions = {
8
+ database: PouchDB.Database<EntryDoc>;
9
+ changeManager: ChangeManager<EntryDoc>;
10
+ settingService: ISettingService;
11
+ /** Finite replication which may still deliver a requested chunk. */
12
+ finiteReplicationActivity?: ActivityCountSource;
13
+ };
14
+ export type ChunkReadOptions = {
15
+ skipCache?: boolean;
16
+ /** Wait for an already-observable finite delivery lifecycle. */
17
+ waitForDelivery?: boolean;
18
+ /** @deprecated Use `waitForDelivery`. Positive values no longer represent an arrival duration. */
19
+ timeout?: number;
20
+ preventRemoteRequest?: boolean;
21
+ };
22
+ export type ChunkWriteOptions = {
23
+ skipCache?: boolean;
24
+ force?: boolean;
25
+ };
26
+ export type WriteResult = {
27
+ result: boolean;
28
+ processed: {
29
+ cached: number;
30
+ hotPack: number;
31
+ written: number;
32
+ duplicated: number;
33
+ };
34
+ };
35
+ export type ChunkManagerEventMap = {
36
+ [EVENT_MISSING_CHUNK_REMOTE]: DocumentID;
37
+ [EVENT_MISSING_CHUNKS]: DocumentID[];
38
+ [EVENT_CHUNK_FETCHED]: EntryLeaf;
39
+ };
File without changes
@@ -0,0 +1,53 @@
1
+ import type { DocumentID, EntryDoc, EntryLeaf } from "../common/types.js";
2
+ import type { ChangeManager } from "./ChangeManager.js";
3
+ import type { ChunkManagerEventMap, ChunkManagerOptions, ChunkReadOptions, ChunkWriteOptions, WriteResult } from "./LayeredChunkManager/types.js";
4
+ import { ChunkDeliveryCoordinator } from "./ChunkDeliveryCoordinator.js";
5
+ /**
6
+ * ChunkManager class that manages chunk operations such as reading, writing, and caching.
7
+ * Now uses a middleware layer architecture for read and write operations.
8
+ */
9
+ export declare class LayeredChunkManager {
10
+ protected options: ChunkManagerOptions;
11
+ protected eventTarget: EventTarget;
12
+ private cacheLayer;
13
+ private databaseReadLayer;
14
+ private readLayers;
15
+ private writeLayers;
16
+ private arrivalWaitLayer;
17
+ readonly deliveryCoordinator: ChunkDeliveryCoordinator;
18
+ get changeManager(): ChangeManager<EntryDoc>;
19
+ get database(): PouchDB.Database<EntryDoc>;
20
+ get cacheStatistics(): {
21
+ size: number;
22
+ allocCount: number;
23
+ derefCount: number;
24
+ };
25
+ addListener<K extends keyof ChunkManagerEventMap>(type: K, listener: (this: LayeredChunkManager, ev: ChunkManagerEventMap[K]) => void, options?: boolean | AddEventListenerOptions): () => void;
26
+ emitEvent<K extends keyof ChunkManagerEventMap>(type: K, detail: ChunkManagerEventMap[K]): void;
27
+ protected abort: AbortController;
28
+ protected offChangeHandler: ReturnType<typeof this.changeManager.addCallback>;
29
+ protected initialised: Promise<void>;
30
+ _initialise(): Promise<void>;
31
+ constructor(options: ChunkManagerOptions);
32
+ destroy(): void;
33
+ getCachedChunk(id: DocumentID): EntryLeaf | false;
34
+ getChunkIDFromCache(data: string): DocumentID | false;
35
+ cacheChunk(chunk: EntryLeaf): void;
36
+ clearCaches(): void;
37
+ read(ids: DocumentID[], options: ChunkReadOptions, preloadedChunks?: Record<DocumentID, EntryLeaf>): Promise<(EntryLeaf | false)[]>;
38
+ private executeReadPipeline;
39
+ write(chunks: EntryLeaf[], options: ChunkWriteOptions, origin: DocumentID): Promise<WriteResult>;
40
+ private executeWritePipeline;
41
+ private isChunkDoc;
42
+ private onChunkArrived;
43
+ protected onChunkArrivedHandler: (doc: EntryLeaf, deleted?: boolean) => void;
44
+ private onChange;
45
+ protected onChangeHandler: (change: PouchDB.Core.ChangesResponseChange<EntryDoc>) => void;
46
+ onMissingChunkRemote(id: DocumentID): void;
47
+ protected onMissingChunkRemoteHandler: (id: DocumentID) => void;
48
+ protected concurrentTransactions: number;
49
+ protected stabilised: Promise<void>;
50
+ transaction<T>(callback: () => Promise<T>): Promise<T>;
51
+ _stabilise(): Promise<void>;
52
+ __stabilise(): Promise<void>;
53
+ }
@@ -0,0 +1,240 @@
1
+ import { LOG_LEVEL_VERBOSE, Logger } from "../common/logger.js";
2
+ import { promiseWithResolvers } from "octagonal-wheels/promises";
3
+ import { EVENT_MISSING_CHUNK_REMOTE, EVENT_MISSING_CHUNKS, EVENT_CHUNK_FETCHED } from "./ChunkFetcher.js";
4
+ import { DatabaseReadLayer } from "./LayeredChunkManager/DatabaseReadLayer.js";
5
+ import { CacheLayer } from "./LayeredChunkManager/CacheLayer.js";
6
+ import { ArrivalWaitLayer } from "./LayeredChunkManager/ArrivalWaitLayer.js";
7
+ import { DatabaseWriteLayer } from "./LayeredChunkManager/DatabaseWriteLayer.js";
8
+ import { unique } from "octagonal-wheels/collection";
9
+ import { ChunkDeliveryCoordinator } from "./ChunkDeliveryCoordinator.js";
10
+ class LayeredChunkManager {
11
+ options;
12
+ eventTarget = new EventTarget();
13
+ // Middleware layers
14
+ cacheLayer;
15
+ databaseReadLayer;
16
+ readLayers;
17
+ writeLayers;
18
+ arrivalWaitLayer;
19
+ deliveryCoordinator;
20
+ get changeManager() {
21
+ return this.options.changeManager;
22
+ }
23
+ get database() {
24
+ return this.options.database;
25
+ }
26
+ // Expose cache statistics
27
+ get cacheStatistics() {
28
+ return this.cacheLayer.getStatistics();
29
+ }
30
+ addListener(type, listener, options) {
31
+ const callback = (ev) => {
32
+ listener.call(this, ev.detail);
33
+ };
34
+ this.eventTarget.addEventListener(type, callback, options);
35
+ return () => {
36
+ this.eventTarget.removeEventListener(type, callback, options);
37
+ };
38
+ }
39
+ emitEvent(type, detail) {
40
+ const event = new CustomEvent(type, { detail });
41
+ this.eventTarget.dispatchEvent(event);
42
+ }
43
+ abort = new AbortController();
44
+ // Change listener cleanup
45
+ offChangeHandler;
46
+ // initialisation promise to ensure the manager is ready before processing transactions
47
+ initialised = Promise.resolve();
48
+ async _initialise() {
49
+ Logger("ChunkManager initialised", LOG_LEVEL_VERBOSE);
50
+ return await Promise.resolve();
51
+ }
52
+ constructor(options) {
53
+ this.options = options;
54
+ const settings = options.settingService.currentSettings();
55
+ const maxCacheSize = settings.hashCacheMaxCount * 10;
56
+ this.cacheLayer = new CacheLayer(maxCacheSize);
57
+ this.databaseReadLayer = new DatabaseReadLayer(this.database);
58
+ this.deliveryCoordinator = new ChunkDeliveryCoordinator(options.finiteReplicationActivity);
59
+ this.arrivalWaitLayer = new ArrivalWaitLayer(
60
+ (eventName, data) => {
61
+ if (eventName === "missingChunks") {
62
+ this.emitEvent(EVENT_MISSING_CHUNKS, data);
63
+ }
64
+ },
65
+ this.deliveryCoordinator,
66
+ (ids) => this.databaseReadLayer.read(
67
+ [...ids],
68
+ { preventRemoteRequest: true, skipCache: true, waitForDelivery: false },
69
+ (remaining) => Promise.resolve(remaining.map(() => false))
70
+ )
71
+ );
72
+ this.readLayers = [this.cacheLayer, this.databaseReadLayer, this.arrivalWaitLayer];
73
+ this.writeLayers = [
74
+ // new HotPackLayer(),
75
+ new DatabaseWriteLayer(this.database),
76
+ this.cacheLayer
77
+ ];
78
+ this.offChangeHandler = this.changeManager.addCallback(this.onChangeHandler);
79
+ this.addListener(EVENT_CHUNK_FETCHED, this.onChunkArrivedHandler, { signal: this.abort.signal });
80
+ this.addListener(EVENT_MISSING_CHUNK_REMOTE, this.onMissingChunkRemoteHandler, { signal: this.abort.signal });
81
+ this.initialised = this._initialise();
82
+ }
83
+ destroy() {
84
+ const layers = unique([...this.readLayers, ...this.writeLayers]);
85
+ this.abort.abort();
86
+ this.offChangeHandler();
87
+ for (const layer of layers) {
88
+ if (layer.tearDown) {
89
+ layer.tearDown();
90
+ }
91
+ }
92
+ this.deliveryCoordinator.dispose();
93
+ }
94
+ // Cache management methods (delegated to cacheLayer)
95
+ getCachedChunk(id) {
96
+ return this.cacheLayer.getCachedChunk(id);
97
+ }
98
+ getChunkIDFromCache(data) {
99
+ return this.cacheLayer.getChunkIDFromCache(data);
100
+ }
101
+ cacheChunk(chunk) {
102
+ this.cacheLayer.cacheChunk(chunk);
103
+ }
104
+ // reorderChunk(id: DocumentID): void {
105
+ // this.cacheLayer.reorderChunk(id);
106
+ // }
107
+ // deleteCachedChunk(id: DocumentID): void {
108
+ // this.cacheLayer.deleteCachedChunk(id);
109
+ // }
110
+ clearCaches() {
111
+ this.cacheLayer.clearCaches();
112
+ }
113
+ // Read pipeline execution
114
+ async read(ids, options, preloadedChunks) {
115
+ const order = [...ids];
116
+ const resultMap = new Map(ids.map((id) => [id, false]));
117
+ const readIds = /* @__PURE__ */ new Set([...resultMap.keys()]);
118
+ if (preloadedChunks) {
119
+ for (const [id, chunk] of Object.entries(preloadedChunks)) {
120
+ if (this.isChunkDoc(chunk)) {
121
+ this.cacheLayer.cacheChunk(chunk);
122
+ resultMap.set(id, chunk);
123
+ readIds.delete(id);
124
+ }
125
+ }
126
+ }
127
+ const results = await this.executeReadPipeline([...readIds], options);
128
+ for (let i = 0; i < results.length; i++) {
129
+ if (results[i]) {
130
+ const chunk = results[i];
131
+ resultMap.set(chunk._id, chunk);
132
+ }
133
+ }
134
+ return order.map((id) => resultMap.get(id) || false);
135
+ }
136
+ executeReadPipeline(ids, options) {
137
+ let layerIndex = 0;
138
+ const layers = this.readLayers;
139
+ const executeNextLayer = (remaining) => {
140
+ if (layerIndex >= layers.length) {
141
+ return Promise.resolve(remaining.map(() => false));
142
+ }
143
+ const layer = layers[layerIndex];
144
+ layerIndex++;
145
+ return layer.read(remaining, options, executeNextLayer);
146
+ };
147
+ return executeNextLayer(ids);
148
+ }
149
+ // Write pipeline execution
150
+ async write(chunks, options, origin) {
151
+ const result = await this.executeWritePipeline(chunks, options, origin);
152
+ return result;
153
+ }
154
+ executeWritePipeline(chunks, options, origin) {
155
+ let layerIndex = 0;
156
+ const layers = this.writeLayers;
157
+ const executeNextLayer = (remaining) => {
158
+ if (layerIndex >= layers.length) {
159
+ return Promise.resolve({
160
+ result: true,
161
+ processed: {
162
+ cached: 0,
163
+ hotPack: 0,
164
+ written: 0,
165
+ duplicated: 0
166
+ }
167
+ });
168
+ }
169
+ const layer = layers[layerIndex];
170
+ layerIndex++;
171
+ return layer.write(remaining, options, origin, executeNextLayer);
172
+ };
173
+ return executeNextLayer(chunks);
174
+ }
175
+ // Helper methods
176
+ isChunkDoc(doc) {
177
+ if (typeof doc !== "object" || doc === null) {
178
+ return false;
179
+ }
180
+ if ("_id" in doc && "type" in doc) {
181
+ return doc && typeof doc._id === "string" && doc.type === "leaf";
182
+ }
183
+ return false;
184
+ }
185
+ // Event handlers
186
+ onChunkArrived(doc, deleted = false) {
187
+ this.arrivalWaitLayer.onChunkArrived(doc, deleted);
188
+ }
189
+ onChunkArrivedHandler = this.onChunkArrived.bind(this);
190
+ onChange(change) {
191
+ const doc = change.doc;
192
+ if (!doc || !doc._id) {
193
+ return;
194
+ }
195
+ if (doc.type !== "leaf") {
196
+ return;
197
+ }
198
+ this.onChunkArrived(doc, change.deleted);
199
+ }
200
+ onChangeHandler = this.onChange.bind(this);
201
+ onMissingChunkRemote(id) {
202
+ this.arrivalWaitLayer.onMissingChunk(id);
203
+ }
204
+ onMissingChunkRemoteHandler = this.onMissingChunkRemote.bind(this);
205
+ // Transaction management
206
+ concurrentTransactions = 0;
207
+ stabilised = Promise.resolve();
208
+ async transaction(callback) {
209
+ await this.initialised;
210
+ await this.stabilised;
211
+ this.concurrentTransactions++;
212
+ try {
213
+ const result = await callback();
214
+ return result;
215
+ } finally {
216
+ this.concurrentTransactions--;
217
+ if (this.concurrentTransactions === 0) {
218
+ Logger(`All transactions completed. Performing stabilisation.`, LOG_LEVEL_VERBOSE);
219
+ await this._stabilise();
220
+ } else {
221
+ Logger(`Transaction completed. Remaining: ${this.concurrentTransactions}`, LOG_LEVEL_VERBOSE);
222
+ }
223
+ }
224
+ }
225
+ async _stabilise() {
226
+ const pr = promiseWithResolvers();
227
+ this.stabilised = pr.promise;
228
+ try {
229
+ await this.__stabilise();
230
+ } finally {
231
+ pr.resolve();
232
+ }
233
+ }
234
+ __stabilise() {
235
+ return Promise.resolve();
236
+ }
237
+ }
238
+ export {
239
+ LayeredChunkManager
240
+ };
@@ -0,0 +1,48 @@
1
+ import { type EntryDoc } from "../common/types.js";
2
+ import { ContentSplitter } from "../ContentSplitter/ContentSplitters.js";
3
+ import { ChangeManager } from "./ChangeManager.js";
4
+ import { ChunkFetcher } from "./ChunkFetcher.js";
5
+ import { ChunkManager } from "./ChunkManager.js";
6
+ import { ConflictManager } from "./ConflictManager.js";
7
+ import { EntryManager } from "./EntryManager/EntryManager.js";
8
+ import { HashManager } from "./HashManager/HashManager.js";
9
+ import type { IAPIService, IDatabaseService, IPathService, IReplicatorService, ISettingService } from "../services/base/IService.js";
10
+ import { type LogFunction } from "../services/lib/logUtils.js";
11
+ export interface LiveSyncManagersOptions<TSettingService extends ISettingService = ISettingService> {
12
+ database: PouchDB.Database<EntryDoc>;
13
+ databaseService: IDatabaseService;
14
+ settingService: TSettingService;
15
+ pathService: IPathService;
16
+ replicatorService: IReplicatorService;
17
+ APIService: IAPIService;
18
+ }
19
+ export declare class LiveSyncManagers {
20
+ protected _pathService: IPathService;
21
+ protected _replicatorService: IReplicatorService;
22
+ protected _settingService: ISettingService;
23
+ protected _APIService: IAPIService;
24
+ hashManager: HashManager;
25
+ chunkFetcher: ChunkFetcher;
26
+ changeManager: ChangeManager<EntryDoc>;
27
+ chunkManager: ChunkManager;
28
+ splitter: ContentSplitter;
29
+ entryManager: EntryManager;
30
+ conflictManager: ConflictManager;
31
+ protected options: LiveSyncManagersOptions;
32
+ protected log: LogFunction;
33
+ constructor(options: LiveSyncManagersOptions);
34
+ teardownManagers(): Promise<void>;
35
+ protected getManagerMembers(): {
36
+ changeManager: ChangeManager<EntryDoc>;
37
+ hashManager: HashManager;
38
+ splitter: ContentSplitter;
39
+ chunkManager: ChunkManager;
40
+ chunkFetcher: ChunkFetcher;
41
+ entryManager: EntryManager;
42
+ conflictManager: ConflictManager;
43
+ };
44
+ initialise(): Promise<void>;
45
+ reinitialise(): Promise<void>;
46
+ clearCaches(): void;
47
+ prepareHashFunction(): Promise<void>;
48
+ }
@@ -0,0 +1,136 @@
1
+ import { LOG_LEVEL_VERBOSE } from "../common/types.js";
2
+ import { ContentSplitter } from "../ContentSplitter/ContentSplitters.js";
3
+ import { ChangeManager } from "./ChangeManager.js";
4
+ import { ChunkFetcher } from "./ChunkFetcher.js";
5
+ import { ChunkManager } from "./ChunkManager.js";
6
+ import { ConflictManager } from "./ConflictManager.js";
7
+ import { EntryManager } from "./EntryManager/EntryManager.js";
8
+ import { HashManager } from "./HashManager/HashManager.js";
9
+ import { createInstanceLogFunction } from "../services/lib/logUtils.js";
10
+ class LiveSyncManagers {
11
+ _pathService;
12
+ _replicatorService;
13
+ _settingService;
14
+ _APIService;
15
+ hashManager;
16
+ chunkFetcher;
17
+ changeManager;
18
+ chunkManager;
19
+ splitter;
20
+ entryManager;
21
+ conflictManager;
22
+ options;
23
+ log;
24
+ constructor(options) {
25
+ this.options = options;
26
+ this._APIService = options.APIService;
27
+ this._pathService = options.pathService;
28
+ this._replicatorService = options.replicatorService;
29
+ this._settingService = options.settingService;
30
+ this.log = createInstanceLogFunction("LiveSyncManagers", this._APIService);
31
+ const { changeManager, hashManager, splitter, chunkManager, chunkFetcher, entryManager, conflictManager } = this.getManagerMembers();
32
+ this.changeManager = changeManager;
33
+ this.hashManager = hashManager;
34
+ this.splitter = splitter;
35
+ this.chunkManager = chunkManager;
36
+ this.chunkFetcher = chunkFetcher;
37
+ this.entryManager = entryManager;
38
+ this.conflictManager = conflictManager;
39
+ }
40
+ async teardownManagers() {
41
+ this.log("Teardown LiveSync Managers...", LOG_LEVEL_VERBOSE);
42
+ if (this.changeManager) {
43
+ this.changeManager.teardown();
44
+ this.changeManager = void 0;
45
+ }
46
+ if (this.chunkFetcher) {
47
+ this.chunkFetcher.destroy();
48
+ this.chunkFetcher = void 0;
49
+ }
50
+ if (this.chunkManager) {
51
+ this.chunkManager.destroy();
52
+ this.chunkManager = void 0;
53
+ }
54
+ this.log("Teardown LiveSync Managers... Done");
55
+ return await Promise.resolve();
56
+ }
57
+ getManagerMembers() {
58
+ this.log("Creating LiveSync Managers...");
59
+ const database = this.options.databaseService.localDatabase.localDatabase;
60
+ const changeManager = new ChangeManager({
61
+ database
62
+ });
63
+ const hashManager = new HashManager({
64
+ settingService: this.options.settingService
65
+ });
66
+ const splitter = new ContentSplitter({
67
+ settingService: this.options.settingService
68
+ });
69
+ const chunkManager = new ChunkManager({
70
+ changeManager,
71
+ database,
72
+ settingService: this.options.settingService,
73
+ finiteReplicationActivity: this.options.replicatorService.finiteReplicationActivityCount
74
+ });
75
+ const chunkFetcher = new ChunkFetcher({
76
+ chunkManager,
77
+ replicatorService: this.options.replicatorService,
78
+ settingService: this.options.settingService
79
+ });
80
+ const entryManager = new EntryManager({
81
+ database,
82
+ hashManager,
83
+ chunkManager,
84
+ splitter,
85
+ pathService: this._pathService,
86
+ settingService: this.options.settingService
87
+ });
88
+ const conflictManager = new ConflictManager({
89
+ entryManager,
90
+ database,
91
+ pathService: this._pathService
92
+ });
93
+ this.log("LiveSync Managers have been created");
94
+ return {
95
+ changeManager,
96
+ hashManager,
97
+ splitter,
98
+ chunkManager,
99
+ chunkFetcher,
100
+ entryManager,
101
+ conflictManager
102
+ };
103
+ }
104
+ async initialise() {
105
+ this.log("Initialising LiveSync Managers...", LOG_LEVEL_VERBOSE);
106
+ await this.splitter.initialise({
107
+ settingService: this.options.settingService
108
+ });
109
+ await this.hashManager.initialise();
110
+ this.log("LiveSync Manager has been initialised");
111
+ }
112
+ async reinitialise() {
113
+ await this.teardownManagers();
114
+ const { changeManager, hashManager, splitter, chunkManager, chunkFetcher, entryManager, conflictManager } = this.getManagerMembers();
115
+ this.changeManager = changeManager;
116
+ this.hashManager = hashManager;
117
+ this.splitter = splitter;
118
+ this.chunkManager = chunkManager;
119
+ this.chunkFetcher = chunkFetcher;
120
+ this.entryManager = entryManager;
121
+ this.conflictManager = conflictManager;
122
+ await this.initialise();
123
+ }
124
+ clearCaches() {
125
+ this.chunkManager?.clearCaches();
126
+ }
127
+ async prepareHashFunction() {
128
+ this.hashManager = new HashManager({
129
+ settingService: this.options.settingService
130
+ });
131
+ await this.hashManager.initialise();
132
+ }
133
+ }
134
+ export {
135
+ LiveSyncManagers
136
+ };
@@ -0,0 +1,135 @@
1
+ import { type FileEventType, type FilePath, type UXFileInfoStub, type UXFolderInfo, type UXInternalFileInfoStub } from "../common/types.js";
2
+ import { type FileEventItem } from "../common/types.js";
3
+ import type { IStorageAccessManager } from "../interfaces/StorageAccess.js";
4
+ import { type PromiseWithResolvers } from "octagonal-wheels/promises";
5
+ import { StorageEventManager, type FileEvent } from "../interfaces/StorageEventManager.js";
6
+ import type { IAPIService, IVaultService } from "../services/base/IService.js";
7
+ import type { SettingService } from "../services/base/SettingService.js";
8
+ import type { FileProcessingService } from "../services/base/FileProcessingService.js";
9
+ import { createInstanceLogFunction } from "../services/lib/logUtils.js";
10
+ import type { IStorageEventManagerAdapter } from "./adapters/index.js";
11
+ import { type CompatTimeoutHandle } from "../common/coreEnvFunctions.js";
12
+ type WaitInfo = {
13
+ since: number;
14
+ type: FileEventType;
15
+ canProceed: PromiseWithResolvers<boolean>;
16
+ timerHandler: CompatTimeoutHandle;
17
+ event: FileEventItem;
18
+ };
19
+ declare const TYPE_SENTINEL_FLUSH = "SENTINEL_FLUSH";
20
+ type FileEventItemSentinelFlush = {
21
+ type: typeof TYPE_SENTINEL_FLUSH;
22
+ };
23
+ export type FileEventItemSentinel = FileEventItemSentinelFlush;
24
+ export interface StorageEventManagerBaseDependencies {
25
+ setting: SettingService;
26
+ vaultService: IVaultService;
27
+ fileProcessing: FileProcessingService;
28
+ storageAccessManager: IStorageAccessManager;
29
+ APIService: IAPIService;
30
+ }
31
+ /**
32
+ * Type helper to extract the file type from a storage event manager adapter
33
+ */
34
+ export type ExtractFile<T> = T extends IStorageEventManagerAdapter<infer F, any> ? F : never;
35
+ /**
36
+ * Type helper to extract the folder type from a storage event manager adapter
37
+ */
38
+ export type ExtractFolder<T> = T extends IStorageEventManagerAdapter<any, infer D> ? D : never;
39
+ /**
40
+ * Base class for storage event management
41
+ * Uses adapter pattern for platform-specific implementations
42
+ *
43
+ * @template TAdapter - The storage event manager adapter type
44
+ */
45
+ export declare abstract class StorageEventManagerBase<TAdapter extends IStorageEventManagerAdapter<any, any>> extends StorageEventManager {
46
+ _log: ReturnType<typeof createInstanceLogFunction>;
47
+ protected setting: SettingService;
48
+ protected vaultService: IVaultService;
49
+ protected fileProcessing: FileProcessingService;
50
+ protected storageAccess: IStorageAccessManager;
51
+ protected adapter: TAdapter;
52
+ protected get shouldBatchSave(): boolean;
53
+ protected get batchSaveMinimumDelay(): number;
54
+ protected get batchSaveMaximumDelay(): number;
55
+ get settings(): import("../common/types.js").ObsidianLiveSyncSettings;
56
+ constructor(adapter: TAdapter, dependencies: StorageEventManagerBaseDependencies);
57
+ _saveSnapshot(snapshot: (FileEventItem | FileEventItemSentinel)[]): Promise<void>;
58
+ _loadSnapshot(): Promise<(FileEventItem | FileEventItemSentinel)[] | null>;
59
+ isFolder(file: UXFileInfoStub | UXInternalFileInfoStub | UXFolderInfo | ExtractFolder<TAdapter> | ExtractFile<TAdapter>): boolean;
60
+ isFile(file: UXFileInfoStub | UXInternalFileInfoStub | UXFolderInfo | ExtractFolder<TAdapter> | ExtractFile<TAdapter>): boolean;
61
+ protected updateStatus(): void;
62
+ /**
63
+ * Snapshot restoration promise.
64
+ * Snapshot will be restored before starting to watch vault changes.
65
+ * In designed time, this has been called from Initialisation process, which has been implemented on `ModuleInitializerFile.ts`.
66
+ */
67
+ snapShotRestored: Promise<void> | null;
68
+ /**
69
+ * Restore the previous snapshot if exists.
70
+ * @returns
71
+ */
72
+ restoreState(): Promise<void>;
73
+ appendQueue(params: FileEvent[], ctx?: unknown): Promise<void>;
74
+ protected bufferedQueuedItems: (FileEventItem | FileEventItemSentinel)[];
75
+ enqueue(newItem: FileEventItem): void;
76
+ /**
77
+ * Immediately take snapshot.
78
+ */
79
+ private _triggerTakeSnapshot;
80
+ /**
81
+ * Trigger taking snapshot after throttled period.
82
+ */
83
+ triggerTakeSnapshot: import("octagonal-wheels/function").ThrottledFunction<() => void>;
84
+ protected concurrentProcessing: import("octagonal-wheels/concurrency/semaphore_v2").SemaphoreObject;
85
+ protected _waitingMap: Map<string, WaitInfo>;
86
+ private _waitForIdle;
87
+ /**
88
+ * Wait until all queued events are processed.
89
+ * Subsequent new events will not be waited, but new events will not be added.
90
+ * @returns
91
+ */
92
+ waitForIdle(): Promise<void>;
93
+ /**
94
+ * Proceed waiting for the given key immediately.
95
+ */
96
+ private _proceedWaiting;
97
+ /**
98
+ * Cancel waiting for the given key.
99
+ */
100
+ private _cancelWaiting;
101
+ /**
102
+ * Add waiting for the given key.
103
+ * @param key
104
+ * @param event
105
+ * @param waitedSince Optional waited since timestamp to calculate the remaining delay.
106
+ */
107
+ private _addWaiting;
108
+ /**
109
+ * Process the given file event.
110
+ */
111
+ processFileEvent(fei: FileEventItem): Promise<void>;
112
+ _takeSnapshot(): Promise<void>;
113
+ _restoreFromSnapshot(): Promise<void>;
114
+ protected runQueuedEvents(): Promise<void>;
115
+ protected processingCount: number;
116
+ protected requestProcessQueue(fei: FileEventItem): Promise<void>;
117
+ isWaiting(filename: FilePath): boolean;
118
+ protected handleFileEvent(queue: FileEventItem): Promise<void>;
119
+ protected cancelRelativeEvent(item: FileEventItem): void;
120
+ /**
121
+ * Begin watching for storage events
122
+ */
123
+ beginWatch(): Promise<void>;
124
+ /**
125
+ * Platform-agnostic event handlers
126
+ */
127
+ protected watchEditorChange<TEditor = unknown, TInfo = unknown>(editor: TEditor, info: TInfo): void;
128
+ protected watchVaultCreate<TFile = unknown, TCtx = unknown>(file: TFile, ctx?: TCtx): void;
129
+ protected watchVaultChange<TFile = unknown, TCtx = unknown>(file: TFile, ctx?: TCtx): void;
130
+ protected watchVaultDelete<TFile = unknown, TCtx = unknown>(file: TFile, ctx?: TCtx): void;
131
+ protected watchVaultRename<TFile = unknown, TCtx = unknown>(file: TFile, oldPath: string, ctx?: TCtx): void;
132
+ protected watchVaultRawEvents(path: FilePath): void;
133
+ protected _watchVaultRawEvents(path: FilePath): Promise<void>;
134
+ }
135
+ export {};