@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,11 @@
1
+ import { EventHub } from "octagonal-wheels/events";
2
+ declare global {
3
+ interface LSEvents {
4
+ hello: string;
5
+ world: undefined;
6
+ }
7
+ }
8
+ /** An event hub owned by one Commonlib service context. */
9
+ export type LiveSyncEventHub = EventHub<LSEvents>;
10
+ /** Creates an isolated event hub for one Commonlib client or host composition. */
11
+ export declare function createLiveSyncEventHub(): LiveSyncEventHub;
@@ -0,0 +1,7 @@
1
+ import { EventHub } from "octagonal-wheels/events";
2
+ function createLiveSyncEventHub() {
3
+ return new EventHub();
4
+ }
5
+ export {
6
+ createLiveSyncEventHub
7
+ };
@@ -0,0 +1 @@
1
+ export { DirectFileManipulator, type DirectFileManipulatorOptions } from "./API/DirectFileManipulator.js";
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ import { DirectFileManipulator } from "./API/DirectFileManipulator.js";
2
+ export {
3
+ DirectFileManipulator
4
+ };
@@ -0,0 +1,18 @@
1
+ /** Options attached to one bounded asynchronous activity. */
2
+ export interface AsyncActivityOptions {
3
+ /** An optional diagnostic label supplied to the activity owner. */
4
+ label?: string;
5
+ }
6
+ /**
7
+ * Runs bounded asynchronous work inside a consumer-owned activity scope.
8
+ *
9
+ * The common library deliberately does not prescribe what the scope does. A
10
+ * browser host may keep the screen awake, while a headless host may omit the
11
+ * runner and execute the task directly.
12
+ */
13
+ export interface AsyncActivityRunner {
14
+ /** Runs the task and returns its result without changing its error semantics. */
15
+ run<T>(task: () => T | PromiseLike<T>, options?: AsyncActivityOptions): Promise<T>;
16
+ }
17
+ /** Runs a task through the injected activity owner, or directly when none is supplied. */
18
+ export declare function runWithOptionalActivity<T>(runner: AsyncActivityRunner | undefined, task: () => T | PromiseLike<T>, options?: AsyncActivityOptions): Promise<T>;
@@ -0,0 +1,7 @@
1
+ async function runWithOptionalActivity(runner, task, options) {
2
+ if (runner) return await runner.run(task, options);
3
+ return await task();
4
+ }
5
+ export {
6
+ runWithOptionalActivity
7
+ };
@@ -0,0 +1,17 @@
1
+ export interface Confirm {
2
+ askYesNo(message: string): Promise<"yes" | "no">;
3
+ askString(title: string, key: string, placeholder: string, isPassword?: boolean): Promise<string | false>;
4
+ askYesNoDialog(message: string, opt: {
5
+ title?: string;
6
+ defaultOption?: "Yes" | "No";
7
+ timeout?: number;
8
+ }): Promise<"yes" | "no">;
9
+ askSelectString(message: string, items: string[]): Promise<string>;
10
+ askSelectStringDialogue<T extends readonly string[]>(message: string, buttons: T, opt: {
11
+ title?: string;
12
+ defaultAction: T[number];
13
+ timeout?: number;
14
+ }): Promise<T[number] | false>;
15
+ askInPopup(key: string, dialogText: string, anchorCallback: (anchor: HTMLAnchorElement) => void): void;
16
+ confirmWithMessage(title: string, contentMd: string, buttons: string[], defaultAction: (typeof buttons)[number], timeout?: number): Promise<(typeof buttons)[number] | false>;
17
+ }
File without changes
@@ -0,0 +1,14 @@
1
+ import type { FilePathWithPrefix, LoadedEntry, MetaEntry, UXFileInfo, UXFileInfoStub } from "../common/types.js";
2
+ export interface DatabaseFileAccess {
3
+ delete: (file: UXFileInfoStub | FilePathWithPrefix, rev?: string) => Promise<boolean>;
4
+ store: (file: UXFileInfo, force?: boolean, skipCheck?: boolean) => Promise<boolean>;
5
+ storeAsConflictedRevision: (file: UXFileInfo, currentRev: string, skipCheck?: boolean) => Promise<boolean>;
6
+ storeContent(path: FilePathWithPrefix, content: string): Promise<boolean>;
7
+ createChunks: (file: UXFileInfo, force?: boolean, skipCheck?: boolean) => Promise<boolean>;
8
+ hasContentInRevisionHistory: (file: UXFileInfoStub | FilePathWithPrefix, content: string | string[] | Blob | ArrayBuffer, currentRev?: string) => Promise<boolean>;
9
+ fetch: (file: UXFileInfoStub | FilePathWithPrefix, rev?: string, waitForReady?: boolean, skipCheck?: boolean) => Promise<UXFileInfo | false>;
10
+ fetchEntryFromMeta: (meta: MetaEntry, waitForReady?: boolean, skipCheck?: boolean) => Promise<LoadedEntry | false>;
11
+ fetchEntryMeta: (file: UXFileInfoStub | FilePathWithPrefix, rev?: string, skipCheck?: boolean) => Promise<MetaEntry | false>;
12
+ fetchEntry: (file: UXFileInfoStub | FilePathWithPrefix, rev?: string, waitForReady?: boolean, skipCheck?: boolean) => Promise<LoadedEntry | false>;
13
+ getConflictedRevs: (file: UXFileInfoStub | FilePathWithPrefix) => Promise<string[]>;
14
+ }
File without changes
@@ -0,0 +1,13 @@
1
+ export interface Rebuilder {
2
+ $performRebuildDB(method: "localOnly" | "remoteOnly" | "rebuildBothByThisDevice" | "localOnlyWithChunks"): Promise<void>;
3
+ $rebuildRemote(): Promise<void>;
4
+ $rebuildEverything(): Promise<void>;
5
+ $fetchLocal(makeLocalChunkBeforeSync?: boolean, preventMakeLocalFilesBeforeSync?: boolean): Promise<void>;
6
+ $fetchLocalDBFast(autoResume: boolean): Promise<void>;
7
+ scheduleRebuild(): Promise<void>;
8
+ scheduleFetch(): Promise<void>;
9
+ /**
10
+ * Declares the finish of the rebuild process and unlock remote, resume reflecting the changes.
11
+ */
12
+ finishRebuild(): Promise<void>;
13
+ }
File without changes
@@ -0,0 +1,13 @@
1
+ import type { FilePath, FilePathWithPrefix, MetaEntry } from "../common/models/db.type.js";
2
+ import type { UXFileInfo, UXFileInfoStub, UXInternalFileInfoStub } from "../common/models/fileaccess.type.js";
3
+ export interface IFileHandler {
4
+ readFileFromStub(file: UXFileInfoStub | UXFileInfo): Promise<UXFileInfo>;
5
+ storeFileToDB(info: UXFileInfoStub | UXFileInfo | UXInternalFileInfoStub | FilePathWithPrefix, force?: boolean, onlyChunks?: boolean): Promise<boolean>;
6
+ deleteFileFromDB(info: UXFileInfoStub | UXInternalFileInfoStub | FilePath): Promise<boolean>;
7
+ renameFileInDB(info: UXFileInfoStub | UXFileInfo, oldPath: FilePath | FilePathWithPrefix): Promise<boolean>;
8
+ deleteRevisionFromDB(info: UXFileInfoStub | FilePath | FilePathWithPrefix, rev: string): Promise<boolean | undefined>;
9
+ resolveConflictedByDeletingRevision(info: UXFileInfoStub | FilePath, rev: string): Promise<boolean | undefined>;
10
+ dbToStorageWithSpecificRev(info: UXFileInfoStub | UXFileInfo | FilePath | null, rev: string, force?: boolean): Promise<boolean>;
11
+ dbToStorage(entryInfo: MetaEntry | FilePathWithPrefix, info: UXFileInfoStub | UXFileInfo | FilePath | null, force?: boolean): Promise<boolean>;
12
+ createAllChunks(showingNotice?: boolean): Promise<void>;
13
+ }
File without changes
@@ -0,0 +1,11 @@
1
+ export interface KeyValueDatabase {
2
+ get<T>(key: IDBValidKey): Promise<T>;
3
+ set<T>(key: IDBValidKey, value: T): Promise<IDBValidKey>;
4
+ del(key: IDBValidKey): Promise<void>;
5
+ clear(): Promise<void>;
6
+ keys(query?: IDBValidKey | IDBKeyRange, count?: number): Promise<IDBValidKey[]>;
7
+ close(): Promise<void>;
8
+ destroy(): Promise<void>;
9
+ }
10
+ /** Opens the key-value database owned by one service composition. */
11
+ export type KeyValueDatabaseFactory = (databaseKey: string) => Promise<KeyValueDatabase>;
File without changes
@@ -0,0 +1,59 @@
1
+ import type { DatabaseFileAccess } from "./DatabaseFileAccess.js";
2
+ import type { Rebuilder } from "./DatabaseRebuilder.js";
3
+ import type { IFileHandler } from "./FileHandler.js";
4
+ import type { StorageAccess } from "./StorageAccess.js";
5
+ import type { LogFunction } from "../services/lib/logUtils.js";
6
+ import type { ServiceHub } from "../services/ServiceHub.js";
7
+ import type { IServiceHub } from "../services/base/IService.js";
8
+ export interface ServiceModules {
9
+ storageAccess: StorageAccess;
10
+ /**
11
+ * Database File Accessor for handling file operations related to the database, such as exporting the database, importing from a file, etc.
12
+ */
13
+ databaseFileAccess: DatabaseFileAccess;
14
+ /**
15
+ * File Handler for handling file operations related to replication, such as resolving conflicts, applying changes from replication, etc.
16
+ */
17
+ fileHandler: IFileHandler;
18
+ /**
19
+ * Rebuilder for handling database rebuilding operations.
20
+ */
21
+ rebuilder: Rebuilder;
22
+ }
23
+ export type RequiredServices<T extends keyof ServiceHub> = Pick<ServiceHub, T | "context">;
24
+ export type RequiredServiceModules<T extends keyof ServiceModules> = Pick<ServiceModules, T>;
25
+ export type RequiredServicesInterfaces<T extends keyof IServiceHub> = Pick<IServiceHub, T>;
26
+ export type RequiredServiceModulesInterfaces<T extends keyof ServiceModules> = Pick<ServiceModules, T>;
27
+ export type NecessaryServices<T extends keyof ServiceHub, U extends keyof ServiceModules> = {
28
+ services: RequiredServices<T>;
29
+ serviceModules: RequiredServiceModules<U>;
30
+ };
31
+ export type NecessaryServicesInterfaces<T extends keyof IServiceHub, U extends keyof ServiceModules> = {
32
+ services: RequiredServicesInterfaces<T>;
33
+ serviceModules: RequiredServiceModulesInterfaces<U>;
34
+ };
35
+ export type ServiceFeatureFunction<T extends keyof ServiceHub, U extends keyof ServiceModules, TR> = (host: NecessaryServices<T, U>) => TR;
36
+ type ServiceFeatureContext<T> = T & {
37
+ _log: LogFunction;
38
+ };
39
+ export type ServiceFeatureFunctionWithContext<T extends keyof ServiceHub, U extends keyof ServiceModules, C, TR> = (host: NecessaryServices<T, U>, context: ServiceFeatureContext<C>) => TR;
40
+ /**
41
+ * Helper function to create a service feature with proper typing.
42
+ * @param featureFunction The feature function to be wrapped.
43
+ * @returns The same feature function with proper typing.
44
+ * @example
45
+ * const myFeatureDef = createServiceFeature(({ services: { API }, serviceModules: { storageAccess } }) => {
46
+ * // ...
47
+ * });
48
+ * const myFeature = myFeatureDef.bind(null, this); // <- `this` may `ObsidianLiveSyncPlugin` or a custom context object
49
+ * appLifecycle.onLayoutReady(myFeature);
50
+ */
51
+ export declare function createServiceFeature<T extends keyof ServiceHub, U extends keyof ServiceModules, TR>(featureFunction: ServiceFeatureFunction<T, U, TR>): ServiceFeatureFunction<T, U, TR>;
52
+ type ContextFactory<T extends keyof ServiceHub, U extends keyof ServiceModules, C> = (host: NecessaryServices<T, U>) => ServiceFeatureContext<C>;
53
+ export declare function serviceFeature<T extends keyof ServiceHub, U extends keyof ServiceModules>(): {
54
+ create<TR>(featureFunction: ServiceFeatureFunction<T, U, TR>): ServiceFeatureFunction<T, U, TR>;
55
+ withContext<C extends object = object>(ContextFactory: ContextFactory<T, U, C>): {
56
+ create: <TR>(featureFunction: ServiceFeatureFunctionWithContext<T, U, C, TR>) => (host: NecessaryServices<T, U>, context: ServiceFeatureContext<C>) => TR;
57
+ };
58
+ };
59
+ export {};
@@ -0,0 +1,19 @@
1
+ function createServiceFeature(featureFunction) {
2
+ return featureFunction;
3
+ }
4
+ function serviceFeature() {
5
+ return {
6
+ create(featureFunction) {
7
+ return featureFunction;
8
+ },
9
+ withContext(ContextFactory) {
10
+ return {
11
+ create: (featureFunction) => (host, context) => featureFunction(host, ContextFactory(host))
12
+ };
13
+ }
14
+ };
15
+ }
16
+ export {
17
+ createServiceFeature,
18
+ serviceFeature
19
+ };
@@ -0,0 +1,44 @@
1
+ import type { FilePath, FilePathWithPrefix, UXDataWriteOptions, UXFileInfo, UXFileInfoStub, UXFolderInfo, UXStat } from "../common/types.js";
2
+ import type { CustomRegExp } from "../common/utils.js";
3
+ import type { FileWithFileStat, FileWithStatAsProp } from "../common/models/fileaccess.type.js";
4
+ export interface IStorageAccessManager {
5
+ processWriteFile<T>(file: UXFileInfoStub | FilePathWithPrefix, proc: () => Promise<T>): Promise<T>;
6
+ processReadFile<T>(file: UXFileInfoStub | FilePathWithPrefix, proc: () => Promise<T>): Promise<T>;
7
+ isFileProcessing(file: UXFileInfoStub | FilePathWithPrefix): boolean;
8
+ recentlyTouched(file: FileWithStatAsProp | FileWithFileStat): boolean;
9
+ touch(file: FileWithStatAsProp | FileWithFileStat): void;
10
+ clearTouched(): void;
11
+ }
12
+ export interface StorageAccess {
13
+ normalisePath(path: string): string;
14
+ restoreState(): Promise<void>;
15
+ deleteVaultItem(file: FilePathWithPrefix | UXFileInfoStub | UXFolderInfo): Promise<void>;
16
+ renameFile(file: UXFileInfoStub | FilePathWithPrefix, newPath: FilePathWithPrefix): Promise<UXFileInfoStub | null>;
17
+ writeFileAuto(path: string, data: string | ArrayBuffer, opt?: UXDataWriteOptions): Promise<boolean>;
18
+ readFileAuto(path: string): Promise<string | ArrayBuffer>;
19
+ readFileText(path: string): Promise<string>;
20
+ isExists(path: string): Promise<boolean>;
21
+ writeHiddenFileAuto(path: string, data: string | ArrayBuffer, opt?: UXDataWriteOptions): Promise<boolean>;
22
+ appendHiddenFile(path: string, data: string, opt?: UXDataWriteOptions): Promise<boolean>;
23
+ stat(path: string): Promise<UXStat | null>;
24
+ statHidden(path: string): Promise<UXStat | null>;
25
+ removeHidden(path: string): Promise<boolean>;
26
+ readHiddenFileAuto(path: string): Promise<string | ArrayBuffer>;
27
+ readHiddenFileBinary(path: string): Promise<ArrayBuffer>;
28
+ readHiddenFileText(path: string): Promise<string>;
29
+ isExistsIncludeHidden(path: string): Promise<boolean>;
30
+ ensureDir(path: string): Promise<boolean>;
31
+ triggerFileEvent(event: string, path: string): void;
32
+ triggerHiddenFile(path: string): Promise<void>;
33
+ getFileStub(path: string): Promise<UXFileInfoStub | null>;
34
+ readStubContent(stub: UXFileInfoStub): Promise<UXFileInfo | false>;
35
+ getStub(path: string): Promise<UXFileInfoStub | UXFolderInfo | null>;
36
+ getFiles(): Promise<UXFileInfoStub[]>;
37
+ getFileNames(): Promise<FilePathWithPrefix[]>;
38
+ touched(file: UXFileInfoStub | FilePathWithPrefix): Promise<void>;
39
+ recentlyTouched(file: UXFileInfoStub | FilePathWithPrefix): Promise<boolean>;
40
+ clearTouched(): void;
41
+ delete(file: FilePathWithPrefix | UXFileInfoStub | string, force: boolean): Promise<void>;
42
+ trash(file: FilePathWithPrefix | UXFileInfoStub | string, system: boolean): Promise<void>;
43
+ getFilesIncludeHidden(basePath: string, includeFilter?: CustomRegExp[], excludeFilter?: CustomRegExp[], skipFolder?: string[]): Promise<FilePath[]>;
44
+ }
File without changes
@@ -0,0 +1,16 @@
1
+ import type { FileEventType, FilePath, UXFileInfoStub, UXInternalFileInfoStub } from "../common/types.js";
2
+ export type FileEvent = {
3
+ type: FileEventType;
4
+ file: UXFileInfoStub | UXInternalFileInfoStub;
5
+ oldPath?: string;
6
+ cachedData?: string;
7
+ skipBatchWait?: boolean;
8
+ cancelled?: boolean;
9
+ };
10
+ export declare abstract class StorageEventManager {
11
+ abstract beginWatch(): Promise<void>;
12
+ abstract appendQueue(items: FileEvent[], ctx?: unknown): Promise<void>;
13
+ abstract isWaiting(filename: FilePath): boolean;
14
+ abstract waitForIdle(): Promise<void>;
15
+ abstract restoreState(): Promise<void>;
16
+ }
@@ -0,0 +1,5 @@
1
+ class StorageEventManager {
2
+ }
3
+ export {
4
+ StorageEventManager
5
+ };
@@ -0,0 +1,61 @@
1
+ import { FallbackWeakRef } from "octagonal-wheels/common/polyfill";
2
+ /**
3
+ * Options for configuring the ChangeManager.
4
+ */
5
+ export interface ChangeManagerOptions {
6
+ /**
7
+ * The PouchDB database instance to monitor for changes.
8
+ */
9
+ database: PouchDB.Database<object>;
10
+ }
11
+ export type ChangeManagerCallback<T extends object = object> = (change: PouchDB.Core.ChangesResponseChange<T>) => void | Promise<void>;
12
+ /**
13
+ * Manages and dispatches changes from a PouchDB database to registered callbacks.
14
+ *
15
+ * @template T The type of documents stored in the PouchDB database.
16
+ */
17
+ export declare class ChangeManager<T extends object = object> {
18
+ /**
19
+ * The PouchDB database instance being monitored.
20
+ */
21
+ _database: PouchDB.Database<T>;
22
+ /**
23
+ * Creates a new instance of the ChangeManager.
24
+ *
25
+ * @param options - Configuration options for the ChangeManager.
26
+ */
27
+ constructor(options: ChangeManagerOptions);
28
+ /**
29
+ * A list of registered callbacks wrapped in WeakRefs to avoid memory leaks.
30
+ */
31
+ _callbacks: FallbackWeakRef<ChangeManagerCallback<T>>[];
32
+ /**
33
+ * Registers a new callback to be invoked when a change occurs.
34
+ *
35
+ * @param callback - The callback function to register.
36
+ */
37
+ addCallback(callback: ChangeManagerCallback<T>): () => void;
38
+ removeCallback(callback: ChangeManagerCallback<T>): void;
39
+ /**
40
+ * The PouchDB changes feed instance, if active.
41
+ */
42
+ _changes?: PouchDB.Core.Changes<T>;
43
+ /**
44
+ * Handles a change event from the PouchDB changes feed.
45
+ *
46
+ * @param changeResponse - The change response object from the PouchDB changes feed.
47
+ */
48
+ _onChange(changeResponse: PouchDB.Core.ChangesResponseChange<T>): Promise<void>;
49
+ /**
50
+ * Sets up the PouchDB changes feed listener to monitor for database changes.
51
+ */
52
+ setupListener(): void;
53
+ /**
54
+ * Tears down the PouchDB changes feed listener and cleans up resources.
55
+ */
56
+ teardown(): void;
57
+ /**
58
+ * Restarts the PouchDB changes feed listener.
59
+ */
60
+ restartWatch(): void;
61
+ }
@@ -0,0 +1,104 @@
1
+ import { LOG_LEVEL_VERBOSE, Logger } from "../common/logger.js";
2
+ import { FallbackWeakRef } from "octagonal-wheels/common/polyfill";
3
+ class ChangeManager {
4
+ /**
5
+ * The PouchDB database instance being monitored.
6
+ */
7
+ _database;
8
+ /**
9
+ * Creates a new instance of the ChangeManager.
10
+ *
11
+ * @param options - Configuration options for the ChangeManager.
12
+ */
13
+ constructor(options) {
14
+ this._database = options.database;
15
+ this.setupListener();
16
+ }
17
+ /**
18
+ * A list of registered callbacks wrapped in WeakRefs to avoid memory leaks.
19
+ */
20
+ _callbacks = [];
21
+ /**
22
+ * Registers a new callback to be invoked when a change occurs.
23
+ *
24
+ * @param callback - The callback function to register.
25
+ */
26
+ addCallback(callback) {
27
+ const callbackHandler = new FallbackWeakRef(callback);
28
+ this._callbacks.push(callbackHandler);
29
+ return () => {
30
+ this._callbacks = this._callbacks.filter((cb) => cb !== callbackHandler);
31
+ };
32
+ }
33
+ removeCallback(callback) {
34
+ this._callbacks = this._callbacks.filter((cb) => cb.deref() !== callback);
35
+ }
36
+ /**
37
+ * The PouchDB changes feed instance, if active.
38
+ */
39
+ _changes;
40
+ /**
41
+ * Handles a change event from the PouchDB changes feed.
42
+ *
43
+ * @param changeResponse - The change response object from the PouchDB changes feed.
44
+ */
45
+ async _onChange(changeResponse) {
46
+ if (!this._callbacks.length) {
47
+ return;
48
+ }
49
+ this._callbacks = this._callbacks.filter((callback) => callback.deref() !== void 0);
50
+ for (const callback of this._callbacks) {
51
+ try {
52
+ const cb = callback.deref();
53
+ if (!cb) {
54
+ continue;
55
+ }
56
+ await Promise.resolve(cb(changeResponse));
57
+ } catch (err) {
58
+ this._changes?.emit("error", err);
59
+ }
60
+ }
61
+ }
62
+ /**
63
+ * Sets up the PouchDB changes feed listener to monitor for database changes.
64
+ */
65
+ setupListener() {
66
+ if (this._changes) {
67
+ const changes2 = this._changes;
68
+ this._changes = void 0;
69
+ void changes2.removeAllListeners();
70
+ changes2.cancel();
71
+ }
72
+ const changes = this._database.changes({
73
+ since: "now",
74
+ live: true,
75
+ include_docs: true
76
+ });
77
+ void changes.on("change", (change) => {
78
+ void this._onChange(change);
79
+ });
80
+ void changes.on("error", (err) => {
81
+ Logger("ChangeManager Error watching changes");
82
+ Logger(err, LOG_LEVEL_VERBOSE);
83
+ });
84
+ this._changes = changes;
85
+ }
86
+ /**
87
+ * Tears down the PouchDB changes feed listener and cleans up resources.
88
+ */
89
+ teardown() {
90
+ void this._changes?.removeAllListeners();
91
+ this._changes?.cancel();
92
+ this._changes = void 0;
93
+ }
94
+ /**
95
+ * Restarts the PouchDB changes feed listener.
96
+ */
97
+ restartWatch() {
98
+ void this.teardown();
99
+ void this.setupListener();
100
+ }
101
+ }
102
+ export {
103
+ ChangeManager
104
+ };
@@ -0,0 +1,51 @@
1
+ import type { ReactiveSource } from "octagonal-wheels/dataobject/reactive";
2
+ import type { DocumentID } from "../common/types.js";
3
+ /**
4
+ * A last-resort leak fuse for an accepted delivery claim which reports no
5
+ * observable progress. It releases logical ownership so a waiter, and an
6
+ * entered bounded activity with its Wake Lock and indicator, cannot be retained
7
+ * forever by a stalled transport or never-settling Promise.
8
+ *
9
+ * Five minutes is a conservative operational ceiling, not a normal
10
+ * chunk-arrival budget, evidence of remote absence, or a transport deadline.
11
+ * The transport contract cannot yet abort the underlying request when it fires.
12
+ */
13
+ export declare const DEFAULT_CHUNK_DELIVERY_STALL_TIMEOUT_MS: number;
14
+ export type ActivityCountSource = Pick<ReactiveSource<number>, "value" | "onChanged" | "offChanged">;
15
+ export type ChunkDeliveryClaimOptions = {
16
+ stallTimeoutMs?: number;
17
+ onStalled?: (ids: readonly DocumentID[]) => void;
18
+ };
19
+ export type ChunkDeliveryChangeListener = (ids?: readonly DocumentID[]) => void;
20
+ /** A finite claim that keeps chunk arrival waiters paused until every owned identifier settles. */
21
+ export interface ChunkDeliveryClaim {
22
+ readonly done: Promise<void>;
23
+ readonly pendingIds: readonly DocumentID[];
24
+ release(): void;
25
+ settle(id: DocumentID): void;
26
+ touch(): void;
27
+ }
28
+ /**
29
+ * Coordinates on-demand chunk ownership with broader finite remote activity.
30
+ *
31
+ * `ChunkFetcher` owns claims. `ArrivalWaitLayer` observes only whether an
32
+ * identifier may still be delivered, so it does not depend on a replicator
33
+ * service or on fetch scheduling details.
34
+ */
35
+ export declare class ChunkDeliveryCoordinator {
36
+ private readonly finiteReplicationActivity?;
37
+ private readonly activeClaimCounts;
38
+ private readonly claimReleases;
39
+ private readonly listeners;
40
+ private finiteActivityWasActive;
41
+ private readonly finiteActivityChanged;
42
+ private disposed;
43
+ constructor(finiteReplicationActivity?: ActivityCountSource);
44
+ claim(ids: readonly DocumentID[], options?: ChunkDeliveryClaimOptions): ChunkDeliveryClaim;
45
+ isActivityActiveFor(id: DocumentID): boolean;
46
+ isClaimActiveFor(id: DocumentID): boolean;
47
+ isFiniteReplicationActive(): boolean;
48
+ onChanged(listener: ChunkDeliveryChangeListener): () => void;
49
+ dispose(): void;
50
+ private notifyChanged;
51
+ }
@@ -0,0 +1,136 @@
1
+ import { promiseWithResolvers } from "octagonal-wheels/promises";
2
+ import { compatGlobal } from "../common/coreEnvFunctions.js";
3
+ const DEFAULT_CHUNK_DELIVERY_STALL_TIMEOUT_MS = 5 * 60 * 1e3;
4
+ class ChunkDeliveryCoordinator {
5
+ constructor(finiteReplicationActivity) {
6
+ this.finiteReplicationActivity = finiteReplicationActivity;
7
+ this.finiteActivityWasActive = (finiteReplicationActivity?.value ?? 0) > 0;
8
+ this.finiteReplicationActivity?.onChanged(this.finiteActivityChanged);
9
+ }
10
+ finiteReplicationActivity;
11
+ activeClaimCounts = /* @__PURE__ */ new Map();
12
+ claimReleases = /* @__PURE__ */ new Set();
13
+ listeners = /* @__PURE__ */ new Set();
14
+ finiteActivityWasActive = false;
15
+ finiteActivityChanged = () => {
16
+ const active = (this.finiteReplicationActivity?.value ?? 0) > 0;
17
+ if (active === this.finiteActivityWasActive) return;
18
+ this.finiteActivityWasActive = active;
19
+ this.notifyChanged();
20
+ };
21
+ disposed = false;
22
+ claim(ids, options = {}) {
23
+ if (this.disposed) {
24
+ throw new Error("Cannot claim chunk delivery activity after the coordinator has been disposed.");
25
+ }
26
+ const pending = new Set(ids);
27
+ const resolver = promiseWithResolvers();
28
+ if (pending.size === 0) {
29
+ resolver.resolve();
30
+ return {
31
+ done: resolver.promise,
32
+ pendingIds: [],
33
+ release: () => void 0,
34
+ settle: () => void 0,
35
+ touch: () => void 0
36
+ };
37
+ }
38
+ const stallTimeoutMs = options.stallTimeoutMs ?? DEFAULT_CHUNK_DELIVERY_STALL_TIMEOUT_MS;
39
+ let timer;
40
+ let released = false;
41
+ const clearTimer = () => {
42
+ if (timer === void 0) return;
43
+ compatGlobal.clearTimeout(timer);
44
+ timer = void 0;
45
+ };
46
+ const removeActiveIds = (activeIds) => {
47
+ for (const id of activeIds) {
48
+ const count = this.activeClaimCounts.get(id) ?? 0;
49
+ if (count <= 1) {
50
+ this.activeClaimCounts.delete(id);
51
+ } else {
52
+ this.activeClaimCounts.set(id, count - 1);
53
+ }
54
+ }
55
+ };
56
+ const release = () => {
57
+ if (released) return;
58
+ released = true;
59
+ clearTimer();
60
+ const activeIds = [...pending];
61
+ pending.clear();
62
+ removeActiveIds(activeIds);
63
+ this.claimReleases.delete(release);
64
+ resolver.resolve();
65
+ if (activeIds.length > 0) {
66
+ this.notifyChanged(activeIds);
67
+ }
68
+ };
69
+ const armStallTimer = () => {
70
+ clearTimer();
71
+ if (released || pending.size === 0 || stallTimeoutMs <= 0) return;
72
+ timer = compatGlobal.setTimeout(() => {
73
+ timer = void 0;
74
+ const stalledIds = [...pending];
75
+ release();
76
+ options.onStalled?.(stalledIds);
77
+ }, stallTimeoutMs);
78
+ };
79
+ const settle = (id) => {
80
+ if (released || !pending.delete(id)) return;
81
+ removeActiveIds([id]);
82
+ this.notifyChanged([id]);
83
+ if (pending.size === 0) {
84
+ release();
85
+ } else {
86
+ armStallTimer();
87
+ }
88
+ };
89
+ for (const id of pending) {
90
+ this.activeClaimCounts.set(id, (this.activeClaimCounts.get(id) ?? 0) + 1);
91
+ }
92
+ this.claimReleases.add(release);
93
+ this.notifyChanged([...pending]);
94
+ armStallTimer();
95
+ return {
96
+ done: resolver.promise,
97
+ get pendingIds() {
98
+ return [...pending];
99
+ },
100
+ release,
101
+ settle,
102
+ touch: armStallTimer
103
+ };
104
+ }
105
+ isActivityActiveFor(id) {
106
+ return this.isClaimActiveFor(id) || this.isFiniteReplicationActive();
107
+ }
108
+ isClaimActiveFor(id) {
109
+ return this.activeClaimCounts.has(id);
110
+ }
111
+ isFiniteReplicationActive() {
112
+ return (this.finiteReplicationActivity?.value ?? 0) > 0;
113
+ }
114
+ onChanged(listener) {
115
+ this.listeners.add(listener);
116
+ return () => this.listeners.delete(listener);
117
+ }
118
+ dispose() {
119
+ if (this.disposed) return;
120
+ this.disposed = true;
121
+ this.finiteReplicationActivity?.offChanged(this.finiteActivityChanged);
122
+ for (const release of [...this.claimReleases]) {
123
+ release();
124
+ }
125
+ this.listeners.clear();
126
+ }
127
+ notifyChanged(ids) {
128
+ for (const listener of this.listeners) {
129
+ listener(ids);
130
+ }
131
+ }
132
+ }
133
+ export {
134
+ ChunkDeliveryCoordinator,
135
+ DEFAULT_CHUNK_DELIVERY_STALL_TIMEOUT_MS
136
+ };