@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,12 @@
1
+ const DiagRTCFailureReasonCodes = {
2
+ ICE_GATHERING_NOT_COMPLETED: "ICE_GATHERING_NOT_COMPLETED",
3
+ ICE_CONNECTIVITY_FAILED: "ICE_CONNECTIVITY_FAILED",
4
+ STUN_REQUEST_TIMEOUT: "STUN_REQUEST_TIMEOUT",
5
+ SIGNALING_NOT_STABLE: "SIGNALING_NOT_STABLE",
6
+ CONNECTION_DROPPED_AFTER_ESTABLISHED: "CONNECTION_DROPPED_AFTER_ESTABLISHED",
7
+ NETWORK_INTERRUPTED: "NETWORK_INTERRUPTED",
8
+ UNKNOWN: "UNKNOWN"
9
+ };
10
+ export {
11
+ DiagRTCFailureReasonCodes
12
+ };
@@ -0,0 +1,33 @@
1
+ import { type DiagRTCPeerConnectionInternalStateHistory, type DiagRTCFailureDiagnosis, type DiagRTCPeerConnectionMetrics, type DiagRTCFailureStats } from "./DiagRTCPeerConnections.types.js";
2
+ /**
3
+ * Diagnoses the failure reason of a failed RTCPeerConnection based on its internal state history and selected candidate pair information.
4
+ * @param internalStateHistory The internal state history of the RTCPeerConnection.
5
+ * @param selectedPair The selected candidate pair information.
6
+ * @returns The diagnosis of the RTC failure.
7
+ */
8
+ export declare function diagnoseRtcFailure(internalStateHistory: DiagRTCPeerConnectionInternalStateHistory, selectedPair: Record<string, unknown> | undefined): DiagRTCFailureDiagnosis;
9
+ /**
10
+ * Describes the current progress of the RTCPeerConnection based on its internal state history and selected candidate pair information.
11
+ * This is useful for providing user-friendly status messages during the connection process.
12
+ * @param internalStateHistory The internal state history of the RTCPeerConnection.
13
+ * @param selectedPair The selected candidate pair information.
14
+ * @returns A user-friendly description of the current connection progress.
15
+ */
16
+ export declare function describeRTCProgress(internalStateHistory: DiagRTCPeerConnectionInternalStateHistory, selectedPair: Record<string, unknown> | undefined): string;
17
+ /**
18
+ * Fetches the RTCPeerConnection statistics and returns a structured metrics object.
19
+ * This is useful for diagnosing connection issues and understanding the connection performance.
20
+ * @param instanceId An identifier for the RTCPeerConnection instance, used for logging.
21
+ * @param peer The RTCPeerConnection instance to fetch stats from.
22
+ * @returns A structured object containing the connection metrics, or undefined if fetching stats failed.
23
+ */
24
+ export declare function getPeerConnectionStats(instanceId: string, peer: RTCPeerConnection): Promise<DiagRTCPeerConnectionMetrics | undefined>;
25
+ /**
26
+ * Audits the RTCPeerConnection for failures and returns a structured failure report.
27
+ * This is useful for diagnosing connection issues and understanding the reasons for failure.
28
+ * @param instanceId An identifier for the RTCPeerConnection instance, used for logging.
29
+ * @param internalStateHistory The internal state history of the RTCPeerConnection.
30
+ * @param peer The RTCPeerConnection instance to audit.
31
+ * @returns A structured object containing the failure diagnosis and metrics, or undefined if auditing failed.
32
+ */
33
+ export declare function auditRtcConnectionFailures(instanceId: string, internalStateHistory: DiagRTCPeerConnectionInternalStateHistory, peer: RTCPeerConnection): Promise<DiagRTCFailureStats | undefined>;
@@ -0,0 +1,217 @@
1
+ import { Logger, LOG_LEVEL_DEBUG, LOG_LEVEL_INFO } from "../../common/logger.js";
2
+ import {
3
+ DiagRTCFailureReasonCodes
4
+ } from "./DiagRTCPeerConnections.types.js";
5
+ function asFiniteNumber(value) {
6
+ return typeof value === "number" && Number.isFinite(value) ? value : void 0;
7
+ }
8
+ function formatHistory(history) {
9
+ return history.length > 0 ? history.join(">") : "none";
10
+ }
11
+ function getLastOrFallback(items, fallback) {
12
+ if (items.length === 0) return fallback;
13
+ return items[items.length - 1] ?? fallback;
14
+ }
15
+ function tryGetValue(record, key) {
16
+ const value = record[key];
17
+ if (typeof value === "string" || typeof value === "number") {
18
+ return value;
19
+ }
20
+ return "unknown";
21
+ }
22
+ function maskIdentifier(value) {
23
+ if (value === "unknown") return value;
24
+ if (value.length <= 8) return "[id]";
25
+ return `${value.slice(0, 4)}...${value.slice(-4)}`;
26
+ }
27
+ function diagnoseRtcFailure(internalStateHistory, selectedPair) {
28
+ const hasSelectedPair = !!selectedPair;
29
+ const selectedPairState = selectedPair?.state ?? "unknown";
30
+ const requestsSent = asFiniteNumber(selectedPair?.requestsSent);
31
+ const responsesReceived = asFiniteNumber(selectedPair?.responsesReceived);
32
+ const hasIceGatheringStarted = internalStateHistory.iceGatheringHistory.includes("gathering");
33
+ const hasIceGatheringComplete = internalStateHistory.iceGatheringHistory.includes("complete");
34
+ const hasIceChecking = internalStateHistory.iceConnectionHistory.includes("checking");
35
+ const hasIceConnected = internalStateHistory.iceConnectionHistory.includes("connected");
36
+ const hasIceFailed = internalStateHistory.iceConnectionHistory.includes("failed");
37
+ const hasIceDisconnected = internalStateHistory.iceConnectionHistory.includes("disconnected");
38
+ const hasConnectionConnected = internalStateHistory.connectionHistory.includes("connected");
39
+ const hasConnectionFailed = internalStateHistory.connectionHistory.includes("failed");
40
+ const hasSignalingStable = internalStateHistory.signalingHistory.includes("stable");
41
+ if (!hasSelectedPair && hasIceGatheringStarted && !hasIceGatheringComplete) {
42
+ return {
43
+ reasonCode: DiagRTCFailureReasonCodes.ICE_GATHERING_NOT_COMPLETED,
44
+ userMessage: "Connection could not collect enough network candidates. Check VPN, proxy, or firewall settings."
45
+ };
46
+ }
47
+ if (hasIceChecking && hasIceFailed && !hasIceConnected) {
48
+ return {
49
+ reasonCode: DiagRTCFailureReasonCodes.ICE_CONNECTIVITY_FAILED,
50
+ userMessage: "Connection attempt reached candidate checks but no route was established."
51
+ };
52
+ }
53
+ if (hasSelectedPair && selectedPairState !== "succeeded" && (requestsSent ?? 0) > 0 && (responsesReceived ?? 0) === 0) {
54
+ return {
55
+ reasonCode: DiagRTCFailureReasonCodes.STUN_REQUEST_TIMEOUT,
56
+ userMessage: "Connection requests were sent but no response was returned. Network path may block UDP/STUN."
57
+ };
58
+ }
59
+ if (!hasSignalingStable) {
60
+ return {
61
+ reasonCode: DiagRTCFailureReasonCodes.SIGNALING_NOT_STABLE,
62
+ userMessage: "Connection negotiation did not reach a stable signalling state."
63
+ };
64
+ }
65
+ if (hasConnectionConnected && hasConnectionFailed) {
66
+ return {
67
+ reasonCode: DiagRTCFailureReasonCodes.CONNECTION_DROPPED_AFTER_ESTABLISHED,
68
+ userMessage: "Connection was established once, but dropped afterwards."
69
+ };
70
+ }
71
+ if (hasIceDisconnected && hasIceFailed) {
72
+ return {
73
+ reasonCode: DiagRTCFailureReasonCodes.NETWORK_INTERRUPTED,
74
+ userMessage: "Connection was interrupted while exchanging data."
75
+ };
76
+ }
77
+ return {
78
+ reasonCode: DiagRTCFailureReasonCodes.UNKNOWN,
79
+ userMessage: "Connection failed for an unknown reason. Please retry and collect diagnostics."
80
+ };
81
+ }
82
+ function describeRTCProgress(internalStateHistory, selectedPair) {
83
+ const lastConnectionState = getLastOrFallback(internalStateHistory.connectionHistory, "new");
84
+ const lastIceConnectionState = getLastOrFallback(internalStateHistory.iceConnectionHistory, "new");
85
+ const lastIceGatheringState = getLastOrFallback(internalStateHistory.iceGatheringHistory, "new");
86
+ const lastSignalingState = getLastOrFallback(internalStateHistory.signalingHistory, "stable");
87
+ const pairState = tryGetValue(selectedPair ?? {}, "state");
88
+ const requestsSent = tryGetValue(selectedPair ?? {}, "requestsSent");
89
+ const responsesReceived = tryGetValue(selectedPair ?? {}, "responsesReceived");
90
+ if (lastConnectionState === "connected" || lastIceConnectionState === "connected") {
91
+ return `Connected (pair=${pairState})`;
92
+ }
93
+ if (lastConnectionState === "failed" || lastIceConnectionState === "failed") {
94
+ const diagnosis = diagnoseRtcFailure(internalStateHistory, selectedPair);
95
+ return `Failed (${diagnosis.reasonCode})`;
96
+ }
97
+ if (lastIceConnectionState === "checking") {
98
+ if (requestsSent !== "unknown" && responsesReceived !== "unknown") {
99
+ return `Checking connectivity (responses ${responsesReceived}/${requestsSent})`;
100
+ }
101
+ return "Checking connectivity";
102
+ }
103
+ if (lastIceGatheringState === "gathering") {
104
+ return "Gathering network candidates";
105
+ }
106
+ if (lastSignalingState !== "stable") {
107
+ return `Negotiating signalling (${lastSignalingState})`;
108
+ }
109
+ if (lastConnectionState === "connecting" || lastIceConnectionState === "new") {
110
+ return "Starting peer connection";
111
+ }
112
+ return `Verbose state: State=${lastConnectionState}, ice=${lastIceConnectionState}, pair=${pairState}`;
113
+ }
114
+ async function getPeerConnectionStats(instanceId, peer) {
115
+ try {
116
+ const stats = await peer.getStats();
117
+ const reports = [];
118
+ stats.forEach((value) => {
119
+ reports.push(value);
120
+ });
121
+ const selectedPair = reports.map((r) => r).find((r) => {
122
+ return r.type === "candidate-pair" && (r.selected === true || r.nominated === true);
123
+ });
124
+ const selectedPairId = tryGetValue(selectedPair ?? {}, "id") ?? "none";
125
+ const state = tryGetValue(selectedPair ?? {}, "state");
126
+ const localCandidateId = tryGetValue(selectedPair ?? {}, "localCandidateId");
127
+ const remoteCandidateId = tryGetValue(selectedPair ?? {}, "remoteCandidateId");
128
+ const currentRoundTripTime = tryGetValue(selectedPair ?? {}, "currentRoundTripTime");
129
+ const totalRoundTripTime = tryGetValue(selectedPair ?? {}, "totalRoundTripTime");
130
+ const requestsSent = tryGetValue(selectedPair ?? {}, "requestsSent");
131
+ const responsesReceived = tryGetValue(selectedPair ?? {}, "responsesReceived");
132
+ const packetsDiscardedOnSend = tryGetValue(selectedPair ?? {}, "packetsDiscardedOnSend");
133
+ const bytesSent = tryGetValue(selectedPair ?? {}, "bytesSent");
134
+ const bytesReceived = tryGetValue(selectedPair ?? {}, "bytesReceived");
135
+ return {
136
+ selectedPair,
137
+ selectedPairId,
138
+ state,
139
+ localCandidateId,
140
+ remoteCandidateId,
141
+ currentRoundTripTime,
142
+ totalRoundTripTime,
143
+ requestsSent,
144
+ responsesReceived,
145
+ packetsDiscardedOnSend,
146
+ bytesSent,
147
+ bytesReceived,
148
+ // raw
149
+ reports
150
+ };
151
+ } catch (ex) {
152
+ Logger(
153
+ `[DiagRTC:${instanceId}] progress/getStats threw: ${ex instanceof Error ? ex.message : String(ex)}`,
154
+ LOG_LEVEL_DEBUG
155
+ );
156
+ return void 0;
157
+ }
158
+ }
159
+ async function auditRtcConnectionFailures(instanceId, internalStateHistory, peer) {
160
+ try {
161
+ const stats = await getPeerConnectionStats(instanceId, peer);
162
+ if (!stats) {
163
+ Logger(
164
+ `[DiagRTC:${instanceId}] failed/getStats: Unable to retrieve connection statistics.`,
165
+ LOG_LEVEL_INFO
166
+ );
167
+ return void 0;
168
+ }
169
+ const reports = stats.reports;
170
+ const diagnosis = diagnoseRtcFailure(internalStateHistory, stats.selectedPair);
171
+ const connectionHistory = formatHistory(internalStateHistory.connectionHistory);
172
+ const iceConnectionHistory = formatHistory(internalStateHistory.iceConnectionHistory);
173
+ const iceGatheringHistory = formatHistory(internalStateHistory.iceGatheringHistory);
174
+ const signalingHistory = formatHistory(internalStateHistory.signalingHistory);
175
+ const maskedSelectedPairId = maskIdentifier(String(stats.selectedPairId));
176
+ const maskedLocalCandidateId = maskIdentifier(String(stats.localCandidateId));
177
+ const maskedRemoteCandidateId = maskIdentifier(String(stats.remoteCandidateId));
178
+ Logger(
179
+ `[DiagRTC:${instanceId}] failed/summary: reasonCode=${diagnosis.reasonCode}, userMessage="${diagnosis.userMessage}", history.connection=${connectionHistory}, history.iceConnection=${iceConnectionHistory}, history.iceGathering=${iceGatheringHistory}, history.signaling=${signalingHistory}`,
180
+ LOG_LEVEL_INFO
181
+ );
182
+ Logger(
183
+ `[DiagRTC:${instanceId}] failed/getStats/detail: reports=${reports.length}, reasonCode=${diagnosis.reasonCode}, userMessage="${diagnosis.userMessage}", history.connection=${connectionHistory}, history.iceConnection=${iceConnectionHistory}, history.iceGathering=${iceGatheringHistory}, history.signaling=${signalingHistory}, selectedPair=${maskedSelectedPairId}, pairState=${stats.state}, localCandidate=${maskedLocalCandidateId}, remoteCandidate=${maskedRemoteCandidateId}, rtt=${stats.currentRoundTripTime}, totalRtt=${stats.totalRoundTripTime}, requestsSent=${stats.requestsSent}, responsesReceived=${stats.responsesReceived}, packetsDiscardedOnSend=${stats.packetsDiscardedOnSend}, bytesSent=${stats.bytesSent}, bytesReceived=${stats.bytesReceived}`,
184
+ LOG_LEVEL_DEBUG
185
+ );
186
+ return {
187
+ diagnosis,
188
+ stats: {
189
+ reportsCount: reports.length,
190
+ selectedPair: {
191
+ id: maskedSelectedPairId,
192
+ state: stats.state,
193
+ localCandidateId: maskedLocalCandidateId,
194
+ remoteCandidateId: maskedRemoteCandidateId,
195
+ currentRoundTripTime: stats.currentRoundTripTime,
196
+ totalRoundTripTime: stats.totalRoundTripTime,
197
+ requestsSent: stats.requestsSent,
198
+ responsesReceived: stats.responsesReceived,
199
+ packetsDiscardedOnSend: stats.packetsDiscardedOnSend,
200
+ bytesSent: stats.bytesSent,
201
+ bytesReceived: stats.bytesReceived
202
+ }
203
+ }
204
+ };
205
+ } catch (ex) {
206
+ Logger(
207
+ `[DiagRTC:${instanceId}] failed/getStats threw: ${ex instanceof Error ? ex.message : String(ex)}`,
208
+ LOG_LEVEL_DEBUG
209
+ );
210
+ }
211
+ }
212
+ export {
213
+ auditRtcConnectionFailures,
214
+ describeRTCProgress,
215
+ diagnoseRtcFailure,
216
+ getPeerConnectionStats
217
+ };
@@ -0,0 +1,216 @@
1
+ import { type Room } from "@trystero-p2p/nostr";
2
+ import { RpcRoom } from "../RpcRoom.js";
3
+ import { RpcPouchDBProxy } from "../pouchdb/RpcPouchDBProxy.js";
4
+ import type { RpcRoomOptions, TransportAdapter } from "../types.js";
5
+ import type { P2PConnectionInfo } from "../../common/models/setting.type.js";
6
+ /**
7
+ * Lightweight presence record broadcast by each peer when it joins the room.
8
+ * The `peerId` field MUST match the Trystero sender ID to prevent spoofing.
9
+ */
10
+ export type TrysteroAdvertisement = {
11
+ /** The Trystero `selfId` of the sending peer. */
12
+ peerId: string;
13
+ /** Human-readable device / vault name. */
14
+ name: string;
15
+ /** Optional platform tag (e.g. `"desktop"`, `"mobile"`). */
16
+ platform: string;
17
+ };
18
+ /** The handle returned by {@link attachAdvertisement}. */
19
+ export type AdvertisementHandle = {
20
+ /**
21
+ * All currently known peers, keyed by `peerId`.
22
+ * Updated in real-time as advertisements arrive or peers leave.
23
+ */
24
+ readonly peers: ReadonlyMap<string, TrysteroAdvertisement>;
25
+ /**
26
+ * (Re-)broadcast your own advertisement.
27
+ * Pass a `toPeerId` to send only to that peer; omit to broadcast to all.
28
+ */
29
+ sendAdvertisement(toPeerId?: string): Promise<void>;
30
+ /** Stop listening for advertisements and clear the peer map. */
31
+ stop(): void;
32
+ };
33
+ /**
34
+ * Attach advertisement-based peer discovery to an already-joined Trystero room.
35
+ *
36
+ * - Sends your advertisement to every peer that joins after this call.
37
+ * - Stores incoming advertisements in `handle.peers`.
38
+ * - Removes entries when peers leave.
39
+ *
40
+ * @param room An active Trystero room.
41
+ * @param localPeerId Your own Trystero `selfId`.
42
+ * @param name Human-readable name broadcast to other peers.
43
+ * @param platform Optional platform string (default `"unknown"`).
44
+ */
45
+ export declare function attachAdvertisement(room: Room, localPeerId: string, name: string, platform?: string): AdvertisementHandle;
46
+ /**
47
+ * Options forwarded to the `RpcRoom` constructor when creating a room through
48
+ * the high-level helpers (`serveTrysteroDB`, `connectTrysteroDBClient`, or by
49
+ * calling `joinTrysteroRoom` and then constructing `RpcRoom` manually).
50
+ *
51
+ * Trystero internally chunks at ~16 348 bytes (16 KiB minus a 36-byte header).
52
+ * Setting `maxWirePayloadBytes` above that threshold causes double-chunking.
53
+ * The Trystero-appropriate default is therefore **15 360 bytes** (15 KiB),
54
+ * which leaves ~1 KiB of headroom for the JSON wrapper overhead.
55
+ *
56
+ * Trystero uses WebRTC SCTP data channels which guarantee delivery and order,
57
+ * so missing-chunk retransmission virtually never triggers. `chunkMissingRetryMs`
58
+ * can safely be lowered from the generic default of 350 ms to **150 ms**.
59
+ */
60
+ export type TrysteroRoomOptions = Pick<RpcRoomOptions, "canAcceptRequest" | "onProtocolWarning"> & {
61
+ maxWirePayloadBytes?: number;
62
+ chunkMissingRetryMs?: number;
63
+ };
64
+ /** Trystero-appropriate defaults for `RpcRoom`. */
65
+ export declare const TRYSTERO_RPC_DEFAULTS: {
66
+ /** Stay below Trystero's internal ~16 348-byte chunk boundary. */
67
+ readonly maxWirePayloadBytes: number;
68
+ /** SCTP guarantees delivery; retransmission is a last-resort safety net. */
69
+ readonly chunkMissingRetryMs: 150;
70
+ };
71
+ /**
72
+ * Wrap an already-joined Trystero `Room` as a `TransportAdapter` for `RpcRoom`.
73
+ *
74
+ * A dedicated Trystero action channel named `"rpc2"` is created on the room.
75
+ * Note: Trystero does not expose per-handler unsubscription for `onPeerJoin`
76
+ * / `onPeerLeave`, so the returned cleanup stubs are no-ops. Close the
77
+ * Trystero room via `leave()` when done.
78
+ *
79
+ * @param room An active Trystero `Room` returned by `joinRoom()`.
80
+ * @returns A `TransportAdapter` that can be passed to `new RpcRoom(...)`.
81
+ */
82
+ export declare function wrapTrysteroRoom(room: Room): TransportAdapter;
83
+ /** The result of joining a Trystero room. */
84
+ export type TrysteroRoomHandle = {
85
+ /** `TransportAdapter` ready to pass to `new RpcRoom(...)`. */
86
+ transport: TransportAdapter;
87
+ /** This peer's own ID (Trystero `selfId`). */
88
+ peerId: string;
89
+ /** Leave the Trystero room and release resources. */
90
+ leave: () => Promise<void>;
91
+ /**
92
+ * Attach advertisement-based peer discovery to this room.
93
+ * Call once after joining; returns a handle to read and re-broadcast.
94
+ */
95
+ advertise: (name: string, platform?: string) => AdvertisementHandle;
96
+ /**
97
+ * Returns the current WebRTC peer connections keyed by peer ID.
98
+ * Equivalent to the Trystero `room.getPeers()` call.
99
+ */
100
+ getPeers: () => Record<string, RTCPeerConnection>;
101
+ /**
102
+ * The underlying Trystero `Room` instance.
103
+ * Use when you need raw access to Trystero APIs such as `makeAction`,
104
+ * `onPeerJoin`, or `onPeerLeave` beyond what the helpers expose.
105
+ */
106
+ room: Room;
107
+ };
108
+ /**
109
+ * Join a Trystero room from a {@link P2PConnectionInfo} and return a
110
+ * `TransportAdapter` together with this peer's own ID.
111
+ *
112
+ * The raw passphrase is hashed with `mixedHash` before being passed to
113
+ * Trystero, matching the convention used by `TrysteroReplicatorP2PServer`.
114
+ */
115
+ export declare function joinTrysteroRoom(settings: P2PConnectionInfo): TrysteroRoomHandle;
116
+ /**
117
+ * Join a Trystero room from a `sls+p2p://` connection string and return a
118
+ * `TransportAdapter` together with this peer's own ID.
119
+ *
120
+ * The URL must be parseable by {@link ConnectionStringParser.parse} as type
121
+ * `"p2p"`, i.e. it must start with `sls+p2p://`.
122
+ *
123
+ * @example
124
+ * ```ts
125
+ * const handle = joinTrysteroRoomFromUrl(
126
+ * "sls+p2p://my-room?relays=wss://relay.example.com&appId=my-app"
127
+ * );
128
+ * const rpcRoom = new RpcRoom({ transport: handle.transport });
129
+ * ```
130
+ */
131
+ export declare function joinTrysteroRoomFromUrl(url: string): TrysteroRoomHandle;
132
+ /** The result of starting a DB server over Trystero. */
133
+ export type TrysteroDBServerHandle = {
134
+ /** This peer's own ID. Share it with clients so they can call `session()`. */
135
+ peerId: string;
136
+ /** The `RpcRoom` that hosts the DB methods. */
137
+ rpcRoom: RpcRoom;
138
+ /** Stop serving and leave the room. */
139
+ close: () => Promise<void>;
140
+ /**
141
+ * Attach advertisement-based peer discovery so that clients can find this
142
+ * server without needing the peerId passed out-of-band.
143
+ */
144
+ advertise: (name: string, platform?: string) => AdvertisementHandle;
145
+ };
146
+ /**
147
+ * **Server side.** Join a Trystero room and expose `db` as a set of RPC
148
+ * methods. The caller's `peerId` is returned so that it can be shared with
149
+ * clients (e.g. via a separate signalling channel or advertisement).
150
+ *
151
+ * @param settings P2P connection settings (from `P2PConnectionInfo` or parsed
152
+ * from a `sls+p2p://` URL via {@link ConnectionStringParser}).
153
+ * @param db The PouchDB database to expose.
154
+ * @param ns Method namespace (default `"pdb"`).
155
+ *
156
+ * @example
157
+ * ```ts
158
+ * const server = serveTrysteroDB(settings, db);
159
+ * console.log("server peer ID:", server.peerId);
160
+ * // Share server.peerId with the client out-of-band.
161
+ * ```
162
+ */
163
+ export declare function serveTrysteroDB(settings: P2PConnectionInfo, db: PouchDB.Database<object>, ns?: string, options?: TrysteroRoomOptions): TrysteroDBServerHandle;
164
+ /** The result of connecting to a DB server over Trystero. */
165
+ export type TrysteroDBClientHandle = {
166
+ /** Proxy object usable with `PouchDB.replicate()` or `replicateShim()`. */
167
+ proxy: RpcPouchDBProxy;
168
+ /** The `RpcRoom` used to communicate with the server. */
169
+ rpcRoom: RpcRoom;
170
+ /** Disconnect and leave the room. */
171
+ close: () => Promise<void>;
172
+ /**
173
+ * Attach advertisement-based peer discovery so this client can locate the
174
+ * server peer without needing its peerId passed statically.
175
+ */
176
+ advertise: (name: string, platform?: string) => AdvertisementHandle;
177
+ };
178
+ /**
179
+ * **Client side.** Join a Trystero room and create an {@link RpcPouchDBProxy}
180
+ * pointing at `serverPeerId`. The proxy can be passed directly to
181
+ * `PouchDB.replicate()` or `replicateShim()`.
182
+ *
183
+ * @param settings P2P connection settings.
184
+ * @param serverPeerId The `peerId` of the server peer (returned by
185
+ * {@link serveTrysteroDB}).
186
+ * @param dbName Logical name for the remote database.
187
+ * @param ns Method namespace, must match the server's `ns`
188
+ * (default `"pdb"`).
189
+ *
190
+ * @example
191
+ * ```ts
192
+ * const client = connectTrysteroDBClient(settings, serverPeerId, "my-db");
193
+ * await PouchDB.replicate(client.proxy, localDb, { live: false });
194
+ * await client.close();
195
+ * ```
196
+ */
197
+ export declare function connectTrysteroDBClient(settings: P2PConnectionInfo, serverPeerId: string, dbName: string, ns?: string, options?: TrysteroRoomOptions): TrysteroDBClientHandle;
198
+ /**
199
+ * Join a Trystero room, advertise as `name`, wait `timeoutMs`, collect all
200
+ * received peer advertisements, then leave the room and return the results.
201
+ *
202
+ * Useful for CLI-style peer discovery where you need a one-shot list of
203
+ * present peers before deciding how to connect.
204
+ *
205
+ * @param settings P2P connection settings.
206
+ * @param name Your local device / vault name advertised to others.
207
+ * @param timeoutMs How long to listen before returning (milliseconds).
208
+ * @param platform Optional platform tag (default `"unknown"`).
209
+ *
210
+ * @example
211
+ * ```ts
212
+ * const peers = await collectTrysteroAdvertisements(settings, "my-vault", 5000);
213
+ * console.log(peers.map(p => `${p.name} (${p.peerId})`));
214
+ * ```
215
+ */
216
+ export declare function collectTrysteroAdvertisements(settings: P2PConnectionInfo, name: string, timeoutMs: number, platform?: string): Promise<TrysteroAdvertisement[]>;
@@ -0,0 +1,134 @@
1
+ import { joinRoom, selfId } from "@trystero-p2p/nostr";
2
+ import { RpcRoom } from "../RpcRoom.js";
3
+ import { exposeDB } from "../pouchdb/RpcPouchDBServer.js";
4
+ import { RpcPouchDBProxy } from "../pouchdb/RpcPouchDBProxy.js";
5
+ import { ConnectionStringParser } from "../../common/ConnectionString.js";
6
+ import { compatGlobal } from "../../common/coreEnvFunctions.js";
7
+ import { generateJoinRoomOptions } from "./trysteroUtils.js";
8
+ const RPC_ACTION_NAME = "rpc2";
9
+ const AD_ACTION_NAME = "ad";
10
+ function attachAdvertisement(room, localPeerId, name, platform = "unknown") {
11
+ const peerMap = /* @__PURE__ */ new Map();
12
+ const localAd = { peerId: localPeerId, name, platform };
13
+ const [sendAd, arrivedAd] = room.makeAction(AD_ACTION_NAME);
14
+ const sendAdvertisement = (toPeerId) => sendAd(localAd, toPeerId).then(() => void 0);
15
+ room.onPeerJoin((peerId) => {
16
+ void sendAdvertisement(peerId);
17
+ });
18
+ room.onPeerLeave((peerId) => {
19
+ peerMap.delete(peerId);
20
+ });
21
+ arrivedAd((data, peerId) => {
22
+ if (data.peerId === localPeerId) return;
23
+ if (data.peerId !== peerId) return;
24
+ peerMap.set(peerId, data);
25
+ });
26
+ return {
27
+ get peers() {
28
+ return peerMap;
29
+ },
30
+ sendAdvertisement,
31
+ stop() {
32
+ peerMap.clear();
33
+ }
34
+ };
35
+ }
36
+ const TRYSTERO_RPC_DEFAULTS = {
37
+ /** Stay below Trystero's internal ~16 348-byte chunk boundary. */
38
+ maxWirePayloadBytes: 15 * 1024,
39
+ /** SCTP guarantees delivery; retransmission is a last-resort safety net. */
40
+ chunkMissingRetryMs: 150
41
+ };
42
+ function wrapTrysteroRoom(room) {
43
+ const [sendRpc, arrivedRpc] = room.makeAction(RPC_ACTION_NAME);
44
+ return {
45
+ send(message, peerId) {
46
+ return sendRpc(message, peerId).then(() => void 0);
47
+ },
48
+ onMessage(handler) {
49
+ arrivedRpc((data, peerId) => handler(data, peerId));
50
+ return () => void 0;
51
+ },
52
+ onPeerJoin(handler) {
53
+ room.onPeerJoin((peerId) => handler(peerId));
54
+ return () => void 0;
55
+ },
56
+ onPeerLeave(handler) {
57
+ room.onPeerLeave((peerId) => handler(peerId));
58
+ return () => void 0;
59
+ }
60
+ };
61
+ }
62
+ function joinTrysteroRoom(settings) {
63
+ const options = generateJoinRoomOptions(settings);
64
+ const room = joinRoom(options, settings.P2P_roomID, {
65
+ handshakeTimeoutMs: 3e4,
66
+ onJoinError(error) {
67
+ console.error("Failed to join Trystero room:", error);
68
+ }
69
+ });
70
+ const currentPeerId = selfId;
71
+ return {
72
+ transport: wrapTrysteroRoom(room),
73
+ peerId: currentPeerId,
74
+ leave: () => room.leave(),
75
+ advertise: (name, platform = "unknown") => attachAdvertisement(room, currentPeerId, name, platform),
76
+ getPeers: () => room.getPeers(),
77
+ room
78
+ };
79
+ }
80
+ function joinTrysteroRoomFromUrl(url) {
81
+ const result = ConnectionStringParser.parse(url);
82
+ if (result.type !== "p2p") {
83
+ throw new Error(`Expected a sls+p2p:// connection string, but got type: "${result.type}"`);
84
+ }
85
+ return joinTrysteroRoom(result.settings);
86
+ }
87
+ function serveTrysteroDB(settings, db, ns = "pdb", options) {
88
+ const roomHandle = joinTrysteroRoom(settings);
89
+ const rpcRoom = new RpcRoom({ ...TRYSTERO_RPC_DEFAULTS, transport: roomHandle.transport, ...options });
90
+ exposeDB(rpcRoom, db, ns);
91
+ return {
92
+ peerId: roomHandle.peerId,
93
+ rpcRoom,
94
+ close: async () => {
95
+ rpcRoom.close();
96
+ await roomHandle.leave();
97
+ },
98
+ advertise: roomHandle.advertise
99
+ };
100
+ }
101
+ function connectTrysteroDBClient(settings, serverPeerId, dbName, ns = "pdb", options) {
102
+ const roomHandle = joinTrysteroRoom(settings);
103
+ const rpcRoom = new RpcRoom({ ...TRYSTERO_RPC_DEFAULTS, transport: roomHandle.transport, ...options });
104
+ const proxy = new RpcPouchDBProxy(rpcRoom.session(serverPeerId), dbName, ns);
105
+ return {
106
+ proxy,
107
+ rpcRoom,
108
+ close: async () => {
109
+ rpcRoom.close();
110
+ await roomHandle.leave();
111
+ },
112
+ advertise: roomHandle.advertise
113
+ };
114
+ }
115
+ async function collectTrysteroAdvertisements(settings, name, timeoutMs, platform = "unknown") {
116
+ const roomHandle = joinTrysteroRoom(settings);
117
+ const adHandle = roomHandle.advertise(name, platform);
118
+ await adHandle.sendAdvertisement();
119
+ await new Promise((resolve) => compatGlobal.setTimeout(resolve, timeoutMs));
120
+ const peers = [...adHandle.peers.values()];
121
+ adHandle.stop();
122
+ await roomHandle.leave();
123
+ return peers;
124
+ }
125
+ export {
126
+ TRYSTERO_RPC_DEFAULTS,
127
+ attachAdvertisement,
128
+ collectTrysteroAdvertisements,
129
+ connectTrysteroDBClient,
130
+ joinTrysteroRoom,
131
+ joinTrysteroRoomFromUrl,
132
+ serveTrysteroDB,
133
+ wrapTrysteroRoom
134
+ };
@@ -0,0 +1,3 @@
1
+ import type { BaseRoomConfig } from "@trystero-p2p/nostr";
2
+ import type { P2PConnectionInfo } from "../../common/models/setting.type.js";
3
+ export declare function generateJoinRoomOptions(settings: P2PConnectionInfo): BaseRoomConfig;
@@ -0,0 +1,37 @@
1
+ import { mixedHash } from "octagonal-wheels/hash/purejs";
2
+ import { compatGlobal } from "../../common/coreEnvFunctions.js";
3
+ import { createDiagRTCPeerConnectionConstructor } from "./DiagRTCPeerConnections.js";
4
+ function generateJoinRoomOptions(settings) {
5
+ const passphraseNumbers = mixedHash(settings.P2P_passphrase, 0);
6
+ const passphrase = passphraseNumbers[0].toString(36) + passphraseNumbers[1].toString(36);
7
+ const relays = settings.P2P_relays.split(",").map((e) => e.trim()).filter((e) => e.length > 0);
8
+ const turnServers = settings.P2P_turnServers.split(",").map((e) => e.trim()).filter((e) => e.length > 0);
9
+ const relayConfig = {
10
+ manualReconnection: true,
11
+ urls: relays
12
+ // ...(typeof rtcPolyfill === "function" ? { rtcPolyfill } : {}),
13
+ };
14
+ const options = {
15
+ appId: settings.P2P_AppID || "self-hosted-livesync",
16
+ password: passphrase,
17
+ relayConfig
18
+ };
19
+ if (settings.P2P_useDiagRTC) {
20
+ options.rtcPolyfill = createDiagRTCPeerConnectionConstructor();
21
+ } else if (typeof compatGlobal.RTCPeerConnection !== "undefined") {
22
+ options.rtcPolyfill = compatGlobal.RTCPeerConnection;
23
+ }
24
+ if (turnServers.length > 0) {
25
+ options.turnConfig = [
26
+ {
27
+ urls: turnServers,
28
+ username: settings.P2P_turnUsername,
29
+ credential: settings.P2P_turnCredential
30
+ }
31
+ ];
32
+ }
33
+ return options;
34
+ }
35
+ export {
36
+ generateJoinRoomOptions
37
+ };