@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,247 @@
1
+ import { LOG_LEVEL_NOTICE, LOG_LEVEL_VERBOSE } from "../common/logger.js";
2
+ import { ConnectionStringParser } from "../common/ConnectionString.js";
3
+ import { REMOTE_COUCHDB, REMOTE_MINIO, REMOTE_P2P } from "../common/models/setting.const.js";
4
+ import { createInstanceLogFunction } from "../services/lib/logUtils.js";
5
+ function migrateLegacyRemoteConfigurationsInPlace(settings, log) {
6
+ const hasText = (value) => typeof value === "string" && value.trim() !== "";
7
+ if (!settings.remoteConfigurations) {
8
+ settings.remoteConfigurations = {};
9
+ }
10
+ if (Object.keys(settings.remoteConfigurations).length !== 0) {
11
+ return false;
12
+ }
13
+ const hasCouchDB = hasText(settings.couchDB_URI);
14
+ const hasS3 = hasText(settings.endpoint);
15
+ const hasP2P = hasText(settings.P2P_roomID);
16
+ if (!hasCouchDB && !hasS3 && !hasP2P) {
17
+ return false;
18
+ }
19
+ log?.("Migrating existing remote configuration to sls+ format...");
20
+ const candidates = [
21
+ { id: "legacy-couchdb", name: "CouchDB Remote", type: "couchdb", enabled: hasCouchDB },
22
+ { id: "legacy-s3", name: "S3 Remote", type: "s3", enabled: hasS3 },
23
+ { id: "legacy-p2p", name: "P2P Remote", type: "p2p", enabled: hasP2P }
24
+ ];
25
+ for (const candidate of candidates) {
26
+ if (!candidate.enabled) continue;
27
+ try {
28
+ const uri = ConnectionStringParser.serialize({
29
+ type: candidate.type,
30
+ settings
31
+ });
32
+ settings.remoteConfigurations[candidate.id] = {
33
+ id: candidate.id,
34
+ name: candidate.name,
35
+ uri,
36
+ isEncrypted: false
37
+ };
38
+ } catch (e) {
39
+ log?.(`Failed to migrate ${candidate.type} configuration!`);
40
+ log?.(e, LOG_LEVEL_VERBOSE);
41
+ }
42
+ }
43
+ const createdIds = Object.keys(settings.remoteConfigurations);
44
+ if (createdIds.length === 0) {
45
+ return false;
46
+ }
47
+ const preferredId = settings.remoteType === REMOTE_MINIO ? "legacy-s3" : settings.remoteType === REMOTE_P2P ? "legacy-p2p" : "legacy-couchdb";
48
+ settings.activeConfigurationId = settings.remoteConfigurations[preferredId] ? preferredId : createdIds[0];
49
+ return true;
50
+ }
51
+ function createRemoteConfigurationId() {
52
+ return `remote-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
53
+ }
54
+ function migrateP2PActiveRemoteConfigurationIdInPlace(settings) {
55
+ if ((settings.P2P_ActiveRemoteConfigurationId ?? "").trim() !== "") {
56
+ return false;
57
+ }
58
+ const activeId = settings.activeConfigurationId;
59
+ if (!activeId) {
60
+ return false;
61
+ }
62
+ const config = settings.remoteConfigurations?.[activeId];
63
+ if (!config) {
64
+ return false;
65
+ }
66
+ if (settings.remoteType !== REMOTE_P2P) {
67
+ return false;
68
+ }
69
+ try {
70
+ const parsed = ConnectionStringParser.parse(config.uri);
71
+ if (parsed.type !== "p2p") {
72
+ return false;
73
+ }
74
+ } catch {
75
+ return false;
76
+ }
77
+ settings.P2P_ActiveRemoteConfigurationId = activeId;
78
+ return true;
79
+ }
80
+ async function migrateToMultipleRemoteConfigurations(host) {
81
+ const log = createInstanceLogFunction("SF:RemoteConfig", host.services.API);
82
+ const settings = host.services.setting.currentSettings();
83
+ if (migrateLegacyRemoteConfigurationsInPlace(settings, log)) {
84
+ await host.services.setting.saveSettingData();
85
+ log(`Successfully migrated ${Object.keys(settings.remoteConfigurations).length} remote configuration(s).`);
86
+ return true;
87
+ }
88
+ return false;
89
+ }
90
+ function activateRemoteConfiguration(settings, id) {
91
+ const config = settings.remoteConfigurations?.[id];
92
+ if (!config) return false;
93
+ settings.activeConfigurationId = id;
94
+ try {
95
+ const parsed = ConnectionStringParser.parse(config.uri);
96
+ if (parsed.type === "couchdb") {
97
+ settings.remoteType = REMOTE_COUCHDB;
98
+ Object.assign(settings, parsed.settings);
99
+ } else if (parsed.type === "s3") {
100
+ settings.remoteType = REMOTE_MINIO;
101
+ Object.assign(settings, parsed.settings);
102
+ } else if (parsed.type === "p2p") {
103
+ settings.remoteType = REMOTE_P2P;
104
+ Object.assign(settings, parsed.settings);
105
+ }
106
+ return settings;
107
+ } catch {
108
+ return false;
109
+ }
110
+ }
111
+ function activateP2PRemoteConfiguration(settings, id) {
112
+ const config = settings.remoteConfigurations?.[id];
113
+ if (!config) return false;
114
+ try {
115
+ const parsed = ConnectionStringParser.parse(config.uri);
116
+ if (parsed.type !== "p2p") {
117
+ return false;
118
+ }
119
+ const currentRemoteType = settings.remoteType;
120
+ settings.P2P_ActiveRemoteConfigurationId = id;
121
+ Object.assign(settings, parsed.settings);
122
+ settings.remoteType = currentRemoteType;
123
+ return settings;
124
+ } catch {
125
+ return false;
126
+ }
127
+ }
128
+ async function commandSwitchActiveRemote(host) {
129
+ const settings = host.services.setting.currentSettings();
130
+ const configs = settings.remoteConfigurations;
131
+ if (!configs || Object.keys(configs).length === 0) {
132
+ host.services.API.addLog("No remote configurations found.", LOG_LEVEL_NOTICE, "remote-config");
133
+ return;
134
+ }
135
+ const options = Object.values(configs).map((c) => ({
136
+ label: `${c.name} (${c.id === settings.activeConfigurationId ? "Active" : "Inactive"})`,
137
+ value: c.id
138
+ }));
139
+ const selectedLabel = await host.services.UI.confirm.askSelectString(
140
+ "Select a remote configuration to activate",
141
+ options.map((o) => o.label)
142
+ );
143
+ if (selectedLabel) {
144
+ const actualId = options.find((o) => o.label === selectedLabel)?.value;
145
+ if (actualId) {
146
+ let updated = false;
147
+ await host.services.setting.updateSettings((currentSettings) => {
148
+ const activated = activateRemoteConfiguration(currentSettings, actualId);
149
+ if (activated) {
150
+ updated = true;
151
+ return activated;
152
+ }
153
+ return currentSettings;
154
+ });
155
+ if (updated) {
156
+ host.services.API.addLog(`Switched to remote: ${selectedLabel}`, LOG_LEVEL_NOTICE, "remote-config");
157
+ await host.services.control.applySettings();
158
+ await host.services.setting.saveSettingData();
159
+ }
160
+ }
161
+ }
162
+ }
163
+ async function commandReplicateWithSpecificRemote(host) {
164
+ const settings = host.services.setting.currentSettings();
165
+ const configs = settings.remoteConfigurations;
166
+ if (!configs || Object.keys(configs).length === 0) {
167
+ host.services.API.addLog("No remote configurations found.", LOG_LEVEL_NOTICE, "remote-config");
168
+ return;
169
+ }
170
+ const selectedName = await host.services.UI.confirm.askSelectString(
171
+ "Select a remote to replicate with",
172
+ Object.values(configs).map((c) => c.name)
173
+ );
174
+ if (selectedName) {
175
+ const config = Object.values(configs).find((c) => c.name === selectedName);
176
+ if (config) {
177
+ try {
178
+ let updated = false;
179
+ await host.services.setting.updateSettings((currentSettings) => {
180
+ const activated = activateRemoteConfiguration(currentSettings, config.id);
181
+ if (activated) {
182
+ updated = true;
183
+ return activated;
184
+ }
185
+ return currentSettings;
186
+ });
187
+ if (updated) {
188
+ host.services.API.addLog(
189
+ `Switched to remote: ${selectedName} and starting replication...`,
190
+ LOG_LEVEL_NOTICE,
191
+ "remote-config"
192
+ );
193
+ await host.services.control.applySettings();
194
+ await host.services.setting.saveSettingData();
195
+ await host.services.replication.replicate(true);
196
+ }
197
+ } catch (e) {
198
+ host.services.API.addLog(
199
+ `Failed to parse remote! Detailed information is available in verbose logs.`,
200
+ LOG_LEVEL_NOTICE,
201
+ "remote-config"
202
+ );
203
+ host.services.API.addLog(e, LOG_LEVEL_VERBOSE, "remote-config");
204
+ }
205
+ }
206
+ }
207
+ }
208
+ function useRemoteConfigurationMigration(host) {
209
+ host.services.appLifecycle.onSettingLoaded.addHandler(async () => {
210
+ try {
211
+ await migrateToMultipleRemoteConfigurations(host);
212
+ } catch (e) {
213
+ host.services.API.addLog(
214
+ `Migration failed! Detailed information is available in verbose logs.`,
215
+ LOG_LEVEL_NOTICE,
216
+ "remote-config"
217
+ );
218
+ host.services.API.addLog(e, LOG_LEVEL_VERBOSE, "remote-config");
219
+ }
220
+ return true;
221
+ });
222
+ }
223
+ function useRemoteConfiguration(host) {
224
+ host.services.API.addCommand({
225
+ id: "livesync-switch-remote",
226
+ name: "Switch Active Remote",
227
+ callback: () => commandSwitchActiveRemote(host)
228
+ });
229
+ host.services.API.addCommand({
230
+ id: "livesync-replicate-with-specific",
231
+ name: "Replicate with specific remote",
232
+ callback: () => commandReplicateWithSpecificRemote(host)
233
+ });
234
+ return true;
235
+ }
236
+ export {
237
+ activateP2PRemoteConfiguration,
238
+ activateRemoteConfiguration,
239
+ commandReplicateWithSpecificRemote,
240
+ commandSwitchActiveRemote,
241
+ createRemoteConfigurationId,
242
+ migrateLegacyRemoteConfigurationsInPlace,
243
+ migrateP2PActiveRemoteConfigurationIdInPlace,
244
+ migrateToMultipleRemoteConfigurations,
245
+ useRemoteConfiguration,
246
+ useRemoteConfigurationMigration
247
+ };
@@ -0,0 +1,4 @@
1
+ import type { NecessaryServices } from "../../interfaces/ServiceModule.js";
2
+ import type { SetupFeatureHost } from "./types.js";
3
+ export declare function encodeSetupSettingsAsQR(host: SetupFeatureHost): Promise<string>;
4
+ export declare function useSetupQRCodeFeature(host: NecessaryServices<"API" | "UI" | "setting" | "appLifecycle", never>): void;
@@ -0,0 +1,67 @@
1
+ import { encodeQR, encodeSettingsToQRCodeData, OutputFormat } from "../../API/processSetting.js";
2
+ import { EVENT_REQUEST_SHOW_SETUP_QR } from "../../events/coreEvents.js";
3
+ import { fireAndForget } from "../../common/utils.js";
4
+ async function encodeSetupSettingsAsQR(host) {
5
+ const settingString = encodeSettingsToQRCodeData(host.services.setting.currentSettings());
6
+ const result = encodeQR(settingString, OutputFormat.SVG);
7
+ if (result === "") {
8
+ return "";
9
+ }
10
+ if (typeof result === "string") {
11
+ const msg = host.services.context.translate("Setup.QRCode", { qr_image: result });
12
+ await host.services.UI.confirm.confirmWithMessage("Settings QR Code", msg, ["OK"], "OK");
13
+ return result;
14
+ } else {
15
+ let currentIndex = 0;
16
+ while (currentIndex < result.total) {
17
+ const msg = `The setting is too large for a single QR code.
18
+ We are using the aggregator to combine multiple QR codes.
19
+ Your settings will not be sent to any server; they will be processed only on your device.
20
+ Please scan this QR code with your mobile's camera, and open the page in your browser.
21
+ After all parts are collected, the page will navigate you back to Obsidian with the aggregated settings.
22
+
23
+ Progress: ${currentIndex + 1} / ${result.total}
24
+ ${result.parts[currentIndex]}`;
25
+ const buttons = [];
26
+ if (currentIndex > 0) buttons.push("Back");
27
+ if (currentIndex < result.total - 1) {
28
+ buttons.push("Next");
29
+ buttons.push("Cancel");
30
+ } else {
31
+ buttons.push("Done");
32
+ }
33
+ const choice = await host.services.UI.confirm.confirmWithMessage(
34
+ "Settings QR Code (Aggregated)",
35
+ msg,
36
+ buttons,
37
+ buttons[buttons.indexOf("Next") !== -1 ? buttons.indexOf("Next") : buttons.indexOf("Done")]
38
+ );
39
+ if (choice === "Next") {
40
+ currentIndex++;
41
+ } else if (choice === "Back") {
42
+ currentIndex--;
43
+ } else {
44
+ break;
45
+ }
46
+ }
47
+ return result.parts[0];
48
+ }
49
+ }
50
+ function useSetupQRCodeFeature(host) {
51
+ host.services.appLifecycle.onLoaded.addHandler(() => {
52
+ host.services.API.addCommand({
53
+ id: "livesync-setting-qr",
54
+ name: "Show settings as a QR code",
55
+ callback: () => fireAndForget(encodeSetupSettingsAsQR(host))
56
+ });
57
+ host.services.context.events.onEvent(
58
+ EVENT_REQUEST_SHOW_SETUP_QR,
59
+ () => fireAndForget(() => encodeSetupSettingsAsQR(host))
60
+ );
61
+ return Promise.resolve(true);
62
+ });
63
+ }
64
+ export {
65
+ encodeSetupSettingsAsQR,
66
+ useSetupQRCodeFeature
67
+ };
@@ -0,0 +1,7 @@
1
+ import type { LogFunction } from "../../services/lib/logUtils.js";
2
+ import type { NecessaryServices } from "../../interfaces/ServiceModule.js";
3
+ import type { SetupFeatureHost } from "./types.js";
4
+ export declare function askEncryptingPassphrase(host: SetupFeatureHost): Promise<string | false>;
5
+ export declare function copySetupURI(host: SetupFeatureHost, log: LogFunction, stripExtra?: boolean): Promise<void>;
6
+ export declare function copySetupURIFull(host: SetupFeatureHost, log: LogFunction): Promise<void>;
7
+ export declare function useSetupURIFeature(host: NecessaryServices<"API" | "UI" | "setting" | "appLifecycle", never>): void;
@@ -0,0 +1,70 @@
1
+ import { LOG_LEVEL_NOTICE } from "../../common/types.js";
2
+ import { createInstanceLogFunction } from "../../services/lib/logUtils.js";
3
+ import { encodeSettingsToSetupURI } from "../../API/processSetting.js";
4
+ import { EVENT_REQUEST_COPY_SETUP_URI } from "../../events/coreEvents.js";
5
+ import { fireAndForget } from "../../common/utils.js";
6
+ async function askEncryptingPassphrase(host) {
7
+ return await host.services.UI.confirm.askString(
8
+ "Encrypt your settings",
9
+ "The passphrase to encrypt the setup URI",
10
+ "",
11
+ true
12
+ );
13
+ }
14
+ async function copySetupURI(host, log, stripExtra = true) {
15
+ const encryptingPassphrase = await askEncryptingPassphrase(host);
16
+ if (encryptingPassphrase === false) return;
17
+ const encryptedURI = await encodeSettingsToSetupURI(
18
+ host.services.setting.currentSettings(),
19
+ encryptingPassphrase,
20
+ [...stripExtra ? ["pluginSyncExtendedSetting"] : []],
21
+ true
22
+ );
23
+ if (await host.services.UI.promptCopyToClipboard("Setup URI", encryptedURI)) {
24
+ log("Setup URI copied to clipboard", LOG_LEVEL_NOTICE);
25
+ }
26
+ }
27
+ async function copySetupURIFull(host, log) {
28
+ const encryptingPassphrase = await askEncryptingPassphrase(host);
29
+ if (encryptingPassphrase === false) return;
30
+ const encryptedURI = await encodeSettingsToSetupURI(
31
+ host.services.setting.currentSettings(),
32
+ encryptingPassphrase,
33
+ [],
34
+ false
35
+ );
36
+ if (await host.services.UI.promptCopyToClipboard("Setup URI", encryptedURI)) {
37
+ log("Setup URI copied to clipboard", LOG_LEVEL_NOTICE);
38
+ }
39
+ }
40
+ function useSetupURIFeature(host) {
41
+ const log = createInstanceLogFunction("SF:SetupURI", host.services.API);
42
+ host.services.appLifecycle.onLoaded.addHandler(() => {
43
+ host.services.API.addCommand({
44
+ id: "livesync-copysetupuri",
45
+ name: "Copy settings as a new setup URI",
46
+ callback: () => fireAndForget(copySetupURI(host, log))
47
+ });
48
+ host.services.API.addCommand({
49
+ id: "livesync-copysetupuri-short",
50
+ name: "Copy settings as a new setup URI (With customization sync)",
51
+ callback: () => fireAndForget(copySetupURI(host, log, false))
52
+ });
53
+ host.services.API.addCommand({
54
+ id: "livesync-copysetupurifull",
55
+ name: "Copy settings as a new setup URI (Full)",
56
+ callback: () => fireAndForget(copySetupURIFull(host, log))
57
+ });
58
+ host.services.context.events.onEvent(
59
+ EVENT_REQUEST_COPY_SETUP_URI,
60
+ () => fireAndForget(() => copySetupURI(host, log))
61
+ );
62
+ return Promise.resolve(true);
63
+ });
64
+ }
65
+ export {
66
+ askEncryptingPassphrase,
67
+ copySetupURI,
68
+ copySetupURIFull,
69
+ useSetupURIFeature
70
+ };
@@ -0,0 +1,2 @@
1
+ import type { NecessaryServices } from "../../interfaces/ServiceModule.js";
2
+ export type SetupFeatureHost = NecessaryServices<"API" | "UI" | "setting", never>;
File without changes
@@ -0,0 +1,24 @@
1
+ import { type UXFileInfoStub } from "../common/types.js";
2
+ import { type LogFunction } from "../services/lib/logUtils.js";
3
+ import type { NecessaryServices } from "../interfaces/ServiceModule.js";
4
+ /**
5
+ * This is a simple handler that accepts all files.
6
+ */
7
+ export declare function isAcceptedAlwaysFactory(host: NecessaryServices<never, never>, log: LogFunction): (file: string | UXFileInfoStub) => Promise<boolean>;
8
+ /**
9
+ * Check if a file is accepted based on filename duplication in the vault.
10
+ */
11
+ export declare function isAcceptedInFilenameDuplicationFactory(host: NecessaryServices<"vault" | "fileProcessing", "storageAccess">, log: LogFunction): (file: string | UXFileInfoStub) => Promise<boolean>;
12
+ /**
13
+ * Check if a file is accepted by the local database (e.g., not rejected by the local DB's target file check).
14
+ * Local database responsible for non-internal files, syncOnlyRegEx, syncIgnoreRegEx
15
+ * This possibly should be separated.
16
+ */
17
+ export declare function isAcceptedByLocalDBFactory(host: NecessaryServices<"database" | "databaseEvents", never>, log: LogFunction): (file: string | UXFileInfoStub) => Promise<boolean>;
18
+ /**
19
+ * Factory function to create the isAcceptedByIgnoreFiles handler.
20
+ * This handler checks if a file is ignored based on the ignore files specified in the settings.
21
+ * It also caches the ignore file contents for performance and listens to settings changes to invalidate the cache.
22
+ */
23
+ export declare function isAcceptedByIgnoreFilesFactory(host: NecessaryServices<"setting" | "appLifecycle", "storageAccess">, log: LogFunction): (file: string | UXFileInfoStub) => Promise<boolean>;
24
+ export declare function useTargetFilters(host: NecessaryServices<"API" | "vault" | "fileProcessing" | "setting" | "appLifecycle" | "database" | "databaseEvents", "storageAccess">): void;
@@ -0,0 +1,178 @@
1
+ import { LOG_LEVEL_DEBUG, LOG_LEVEL_VERBOSE } from "../common/types.js";
2
+ import { createInstanceLogFunction } from "../services/lib/logUtils.js";
3
+ import { getStoragePathFromUXFileInfo } from "../common/typeUtils.js";
4
+ import { isAcceptedAll } from "../string_and_binary/path.js";
5
+ import { Computed } from "octagonal-wheels/dataobject/Computed";
6
+ import { promiseWithResolvers } from "octagonal-wheels/promises";
7
+ function isAcceptedAlwaysFactory(host, log) {
8
+ return (file) => {
9
+ log("File is target finally: " + getStoragePathFromUXFileInfo(file), LOG_LEVEL_DEBUG);
10
+ return Promise.resolve(true);
11
+ };
12
+ }
13
+ function isAcceptedInFilenameDuplicationFactory(host, log) {
14
+ const fileCountMapComputed = new Computed({
15
+ evaluation: async (fileEventCount) => {
16
+ const vaultFiles = (await host.serviceModules.storageAccess.getFileNames()).sort();
17
+ const fileCountMap = {};
18
+ for (const file of vaultFiles) {
19
+ const lc = file.toLowerCase();
20
+ if (!fileCountMap[lc]) {
21
+ fileCountMap[lc] = 1;
22
+ } else {
23
+ fileCountMap[lc]++;
24
+ }
25
+ }
26
+ return fileCountMap;
27
+ },
28
+ requiresUpdate: (args, previousArgs, previousResult) => {
29
+ if (!previousResult) return true;
30
+ if (previousResult instanceof Error) return true;
31
+ if (!previousArgs) return true;
32
+ if (args[0] === previousArgs[0]) {
33
+ return false;
34
+ }
35
+ return true;
36
+ }
37
+ });
38
+ return async function isAcceptedInFilenameDuplication(file) {
39
+ const fileCountMap = (await fileCountMapComputed.update(host.services.fileProcessing.totalStorageFileEventCount)).value;
40
+ const filepath = getStoragePathFromUXFileInfo(file);
41
+ const lc = filepath.toLowerCase();
42
+ if (host.services.vault.shouldCheckCaseInsensitively()) {
43
+ if (lc in fileCountMap && fileCountMap[lc] > 1) {
44
+ log("File is duplicated (case-insensitive): " + filepath);
45
+ return false;
46
+ }
47
+ }
48
+ log("File is not duplicated: " + filepath, LOG_LEVEL_DEBUG);
49
+ return true;
50
+ };
51
+ }
52
+ function isAcceptedByLocalDBFactory(host, log) {
53
+ const database = host.services.database;
54
+ const databaseEvents = host.services.databaseEvents;
55
+ let isReady = promiseWithResolvers();
56
+ databaseEvents.onDatabaseHasReady.addHandler(() => {
57
+ isReady.resolve();
58
+ return Promise.resolve(true);
59
+ });
60
+ databaseEvents.onUnloadDatabase.addHandler(() => {
61
+ isReady = promiseWithResolvers();
62
+ return Promise.resolve(true);
63
+ });
64
+ return async (file) => {
65
+ await isReady.promise;
66
+ const filepath = getStoragePathFromUXFileInfo(file);
67
+ if (!await Promise.resolve(database.localDatabase.isTargetFile(filepath))) {
68
+ log("File is not target by local DB: " + filepath);
69
+ return false;
70
+ }
71
+ log("File is target by local DB: " + filepath, LOG_LEVEL_DEBUG);
72
+ return true;
73
+ };
74
+ }
75
+ function isAcceptedByIgnoreFilesFactory(host, log) {
76
+ let ignoreFiles = [];
77
+ const ignoreFileCacheMap = /* @__PURE__ */ new Map();
78
+ const refreshSettings = () => {
79
+ const settings = host.services.setting.currentSettings();
80
+ ignoreFiles = settings?.ignoreFiles.split(",").map((e) => e.trim()) || [];
81
+ return Promise.resolve(true);
82
+ };
83
+ const invalidateIgnoreFileCache = (path) => {
84
+ const key = path.toLowerCase();
85
+ ignoreFileCacheMap.delete(key);
86
+ };
87
+ const getIgnoreFile = async (path) => {
88
+ const key = path.toLowerCase();
89
+ const cached = ignoreFileCacheMap.get(key);
90
+ if (cached !== void 0) {
91
+ return cached;
92
+ }
93
+ try {
94
+ if (!await host.serviceModules.storageAccess.isExistsIncludeHidden(path)) {
95
+ log(`[ignore] Ignore file does not exist: ${path}`, LOG_LEVEL_DEBUG);
96
+ ignoreFileCacheMap.set(key, false);
97
+ return false;
98
+ }
99
+ const file = await host.serviceModules.storageAccess.readHiddenFileText(path);
100
+ const gitignore = file.split(/\r?\n/g).map((e) => e.replace(/\r$/, "")).map((e) => e.trim());
101
+ ignoreFileCacheMap.set(key, gitignore);
102
+ log(`[ignore] Ignore file loaded: ${path}`, LOG_LEVEL_VERBOSE);
103
+ return gitignore;
104
+ } catch (ex) {
105
+ log(`[ignore] Failed to read ignore file ${path}`);
106
+ log(ex, LOG_LEVEL_VERBOSE);
107
+ ignoreFileCacheMap.set(key, void 0);
108
+ return false;
109
+ }
110
+ };
111
+ host.services.setting.onSettingRealised.addHandler(refreshSettings);
112
+ host.services.appLifecycle.onLoaded.addHandler(refreshSettings);
113
+ void refreshSettings();
114
+ return async function isAcceptedByIgnoreFiles(file) {
115
+ const settings = host.services.setting.currentSettings();
116
+ if (!settings.useIgnoreFiles) {
117
+ return true;
118
+ }
119
+ const filepath = getStoragePathFromUXFileInfo(file);
120
+ invalidateIgnoreFileCache(filepath);
121
+ log("Checking ignore files for: " + filepath, LOG_LEVEL_DEBUG);
122
+ if (!await isAcceptedAll(filepath, ignoreFiles, (filename) => getIgnoreFile(filename))) {
123
+ log("File is ignored by ignore files: " + filepath);
124
+ return false;
125
+ }
126
+ log("File is not ignored by ignore files: " + filepath, LOG_LEVEL_DEBUG);
127
+ return true;
128
+ };
129
+ }
130
+ function useTargetFilters(host) {
131
+ const logger = createInstanceLogFunction("SFTargetFilter", host.services.API);
132
+ const services = host.services;
133
+ const serviceModules = host.serviceModules;
134
+ const _isAcceptedFilenameDuplication = isAcceptedInFilenameDuplicationFactory(
135
+ {
136
+ services: { context: services.context, vault: services.vault, fileProcessing: services.fileProcessing },
137
+ serviceModules: { storageAccess: serviceModules.storageAccess }
138
+ },
139
+ logger
140
+ );
141
+ const _isAcceptedByIgnoreFiles = isAcceptedByIgnoreFilesFactory(
142
+ {
143
+ services: { context: services.context, setting: services.setting, appLifecycle: services.appLifecycle },
144
+ serviceModules: { storageAccess: serviceModules.storageAccess }
145
+ },
146
+ logger
147
+ );
148
+ const _isAcceptedByLocalDB = isAcceptedByLocalDBFactory(
149
+ {
150
+ services: { context: services.context, database: services.database, databaseEvents: services.databaseEvents },
151
+ serviceModules: {}
152
+ },
153
+ logger
154
+ );
155
+ const _isAcceptedAlways = isAcceptedAlwaysFactory(
156
+ {
157
+ services: { context: services.context },
158
+ serviceModules: {}
159
+ },
160
+ logger
161
+ );
162
+ services.vault.isTargetFile.addHandler(_isAcceptedFilenameDuplication, 10);
163
+ services.vault.isTargetFile.addHandler(_isAcceptedByIgnoreFiles, 20);
164
+ services.vault.isTargetFile.addHandler(_isAcceptedByLocalDB, 30);
165
+ services.vault.isTargetFile.addHandler(_isAcceptedAlways, 100);
166
+ const isTargetIgnored = async (file) => {
167
+ const result = await _isAcceptedByIgnoreFiles(file);
168
+ return !result;
169
+ };
170
+ services.vault.isIgnoredByIgnoreFile.addHandler(isTargetIgnored);
171
+ }
172
+ export {
173
+ isAcceptedAlwaysFactory,
174
+ isAcceptedByIgnoreFilesFactory,
175
+ isAcceptedByLocalDBFactory,
176
+ isAcceptedInFilenameDuplicationFactory,
177
+ useTargetFilters
178
+ };