tool-db 2.2.0 → 2.5.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 (507) hide show
  1. package/README.md +1 -201
  2. package/lib/adapters-base/networkAdapter.ts +215 -0
  3. package/lib/adapters-base/storageAdapter.ts +35 -0
  4. package/lib/adapters-base/userAdapter.ts +49 -0
  5. package/lib/crdt/baseCrdt.ts +21 -0
  6. package/lib/crdt/counterCrdt.ts +111 -0
  7. package/lib/crdt/listCrdt.ts +190 -0
  8. package/lib/crdt/mapCrdt.ts +119 -0
  9. package/{dist/index.d.ts → lib/index.ts} +16 -16
  10. package/lib/logger.ts +30 -0
  11. package/lib/messageHandlers/handleCrdtGet.ts +29 -0
  12. package/lib/messageHandlers/handleCrdtPut.ts +118 -0
  13. package/lib/messageHandlers/handleGet.ts +29 -0
  14. package/lib/messageHandlers/handlePing.ts +40 -0
  15. package/lib/messageHandlers/handlePong.ts +30 -0
  16. package/lib/messageHandlers/handlePut.ts +54 -0
  17. package/lib/messageHandlers/handleQuery.ts +25 -0
  18. package/lib/messageHandlers/handleSubscribe.ts +46 -0
  19. package/lib/server.ts +7 -0
  20. package/lib/shared.ts +5 -0
  21. package/lib/toolDbAnonSignIn.ts +5 -0
  22. package/lib/toolDbClientOnMessage.ts +75 -0
  23. package/lib/toolDbCrdtGet.ts +82 -0
  24. package/lib/toolDbCrdtPut.ts +77 -0
  25. package/lib/toolDbGet.ts +80 -0
  26. package/lib/toolDbKeysSignIn.ts +16 -0
  27. package/lib/toolDbPut.ts +83 -0
  28. package/lib/toolDbQueryKeys.ts +64 -0
  29. package/lib/toolDbSignIn.ts +31 -0
  30. package/lib/toolDbSignUp.ts +71 -0
  31. package/lib/toolDbSubscribe.ts +53 -0
  32. package/lib/toolDbVerificationWrapper.ts +55 -0
  33. package/lib/tooldb.ts +314 -0
  34. package/lib/types/message.ts +133 -0
  35. package/lib/types/tooldb.ts +89 -0
  36. package/lib/utils/catchReturn.ts +4 -0
  37. package/lib/utils/encoding/arrayBufferToHex.ts +18 -0
  38. package/lib/utils/encoding/arrayBufferToString.ts +8 -0
  39. package/lib/utils/encoding/hexToArrayBuffer.ts +13 -0
  40. package/lib/utils/encoding/hexToString.ts +8 -0
  41. package/lib/utils/encoding/hexToUint8.ts +5 -0
  42. package/lib/utils/encoding/stringToArrayBuffer.ts +8 -0
  43. package/lib/utils/getPeerSignature.ts +12 -0
  44. package/lib/utils/getTimestamp.ts +3 -0
  45. package/lib/utils/proofOfWork.ts +16 -0
  46. package/lib/utils/randomAnimal.ts +77 -0
  47. package/lib/utils/sha1.ts +7 -0
  48. package/lib/utils/sha256.ts +7 -0
  49. package/lib/utils/textRandom.ts +11 -0
  50. package/lib/utils/uniq.ts +3 -0
  51. package/lib/utils/verifyMessage.ts +88 -0
  52. package/lib/utils/verifyPeer.ts +15 -0
  53. package/package.json +31 -69
  54. package/tsconfig.json +10 -72
  55. package/.eslintrc.json +0 -74
  56. package/.github/workflows/main.yml +0 -29
  57. package/babel.config.js +0 -6
  58. package/bundle.js +0 -1
  59. package/custom-test-env.js +0 -28
  60. package/dist/__tests__ copy/base64.d.ts +0 -1
  61. package/dist/__tests__ copy/base64.js +0 -61
  62. package/dist/__tests__ copy/base64.js.map +0 -1
  63. package/dist/__tests__ copy/encryption.d.ts +0 -1
  64. package/dist/__tests__ copy/encryption.js +0 -68
  65. package/dist/__tests__ copy/encryption.js.map +0 -1
  66. package/dist/__tests__ copy/keys.d.ts +0 -1
  67. package/dist/__tests__ copy/keys.js +0 -238
  68. package/dist/__tests__ copy/keys.js.map +0 -1
  69. package/dist/__tests__ copy/network.d.ts +0 -1
  70. package/dist/__tests__ copy/network.js +0 -206
  71. package/dist/__tests__ copy/network.js.map +0 -1
  72. package/dist/__tests__ copy/pow.d.ts +0 -1
  73. package/dist/__tests__ copy/pow.js +0 -25
  74. package/dist/__tests__ copy/pow.js.map +0 -1
  75. package/dist/__tests__ copy/sha1.d.ts +0 -1
  76. package/dist/__tests__ copy/sha1.js +0 -16
  77. package/dist/__tests__ copy/sha1.js.map +0 -1
  78. package/dist/__tests__ copy/sha256.d.ts +0 -1
  79. package/dist/__tests__ copy/sha256.js +0 -16
  80. package/dist/__tests__ copy/sha256.js.map +0 -1
  81. package/dist/__tests__ copy/textRandom.d.ts +0 -1
  82. package/dist/__tests__ copy/textRandom.js +0 -17
  83. package/dist/__tests__ copy/textRandom.js.map +0 -1
  84. package/dist/bundle.js +0 -69086
  85. package/dist/chain/Block.d.ts +0 -29
  86. package/dist/chain/Block.js +0 -142
  87. package/dist/chain/Block.js.map +0 -1
  88. package/dist/chain/ToolChain.d.ts +0 -27
  89. package/dist/chain/ToolChain.js +0 -253
  90. package/dist/chain/ToolChain.js.map +0 -1
  91. package/dist/chain/Tx.d.ts +0 -50
  92. package/dist/chain/Tx.js +0 -54
  93. package/dist/chain/Tx.js.map +0 -1
  94. package/dist/chain/Wallet.d.ts +0 -9
  95. package/dist/chain/Wallet.js +0 -37
  96. package/dist/chain/Wallet.js.map +0 -1
  97. package/dist/chain/isValidChain.d.ts +0 -1
  98. package/dist/chain/isValidChain.js +0 -37
  99. package/dist/chain/isValidChain.js.map +0 -1
  100. package/dist/chain/mempool.d.ts +0 -0
  101. package/dist/chain/mempool.js +0 -2
  102. package/dist/chain/mempool.js.map +0 -1
  103. package/dist/crdt/baseCrdt.d.ts +0 -9
  104. package/dist/crdt/baseCrdt.js +0 -27
  105. package/dist/crdt/baseCrdt.js.map +0 -1
  106. package/dist/crdt/counterCrdt.d.ts +0 -30
  107. package/dist/crdt/counterCrdt.js +0 -124
  108. package/dist/crdt/counterCrdt.js.map +0 -1
  109. package/dist/crdt/listCrdt.d.ts +0 -42
  110. package/dist/crdt/listCrdt.js +0 -177
  111. package/dist/crdt/listCrdt.js.map +0 -1
  112. package/dist/crdt/mapCrdt.d.ts +0 -32
  113. package/dist/crdt/mapCrdt.js +0 -136
  114. package/dist/crdt/mapCrdt.js.map +0 -1
  115. package/dist/getCrypto.d.ts +0 -1
  116. package/dist/getCrypto.js +0 -10
  117. package/dist/getCrypto.js.map +0 -1
  118. package/dist/index.js +0 -99
  119. package/dist/index.js.map +0 -1
  120. package/dist/infuraFilecoin.d.ts +0 -0
  121. package/dist/infuraFilecoin.js +0 -2
  122. package/dist/infuraFilecoin.js.map +0 -1
  123. package/dist/loadCrdtDocument.d.ts +0 -3
  124. package/dist/loadCrdtDocument.js +0 -38
  125. package/dist/loadCrdtDocument.js.map +0 -1
  126. package/dist/makeTx.d.ts +0 -1
  127. package/dist/makeTx.js +0 -27
  128. package/dist/makeTx.js.map +0 -1
  129. package/dist/messageHandlers/handleCrdt.d.ts +0 -3
  130. package/dist/messageHandlers/handleCrdt.js +0 -11
  131. package/dist/messageHandlers/handleCrdt.js.map +0 -1
  132. package/dist/messageHandlers/handleCrdtGet.d.ts +0 -3
  133. package/dist/messageHandlers/handleCrdtGet.js +0 -32
  134. package/dist/messageHandlers/handleCrdtGet.js.map +0 -1
  135. package/dist/messageHandlers/handleCrdtPut.d.ts +0 -3
  136. package/dist/messageHandlers/handleCrdtPut.js +0 -88
  137. package/dist/messageHandlers/handleCrdtPut.js.map +0 -1
  138. package/dist/messageHandlers/handleGet.d.ts +0 -3
  139. package/dist/messageHandlers/handleGet.js +0 -31
  140. package/dist/messageHandlers/handleGet.js.map +0 -1
  141. package/dist/messageHandlers/handleJoin.d.ts +0 -3
  142. package/dist/messageHandlers/handleJoin.js +0 -36
  143. package/dist/messageHandlers/handleJoin.js.map +0 -1
  144. package/dist/messageHandlers/handlePing.d.ts +0 -3
  145. package/dist/messageHandlers/handlePing.js +0 -27
  146. package/dist/messageHandlers/handlePing.js.map +0 -1
  147. package/dist/messageHandlers/handlePong.d.ts +0 -3
  148. package/dist/messageHandlers/handlePong.js +0 -34
  149. package/dist/messageHandlers/handlePong.js.map +0 -1
  150. package/dist/messageHandlers/handlePut.d.ts +0 -3
  151. package/dist/messageHandlers/handlePut.js +0 -53
  152. package/dist/messageHandlers/handlePut.js.map +0 -1
  153. package/dist/messageHandlers/handleQuery.d.ts +0 -3
  154. package/dist/messageHandlers/handleQuery.js +0 -18
  155. package/dist/messageHandlers/handleQuery.js.map +0 -1
  156. package/dist/messageHandlers/handleServers.d.ts +0 -3
  157. package/dist/messageHandlers/handleServers.js +0 -23
  158. package/dist/messageHandlers/handleServers.js.map +0 -1
  159. package/dist/messageHandlers/handleSubscribe.d.ts +0 -3
  160. package/dist/messageHandlers/handleSubscribe.js +0 -43
  161. package/dist/messageHandlers/handleSubscribe.js.map +0 -1
  162. package/dist/server.d.ts +0 -1
  163. package/dist/server.js +0 -12
  164. package/dist/server.js.map +0 -1
  165. package/dist/shared.d.ts +0 -2
  166. package/dist/shared.js +0 -7
  167. package/dist/shared.js.map +0 -1
  168. package/dist/test.d.ts +0 -1
  169. package/dist/test.js +0 -17
  170. package/dist/test.js.map +0 -1
  171. package/dist/toolChainServer.d.ts +0 -8
  172. package/dist/toolChainServer.js +0 -60
  173. package/dist/toolChainServer.js.map +0 -1
  174. package/dist/toolDbAnonSignIn.d.ts +0 -2
  175. package/dist/toolDbAnonSignIn.js +0 -7
  176. package/dist/toolDbAnonSignIn.js.map +0 -1
  177. package/dist/toolDbClientOnMessage.d.ts +0 -3
  178. package/dist/toolDbClientOnMessage.js +0 -62
  179. package/dist/toolDbClientOnMessage.js.map +0 -1
  180. package/dist/toolDbCrdtGet.d.ts +0 -11
  181. package/dist/toolDbCrdtGet.js +0 -80
  182. package/dist/toolDbCrdtGet.js.map +0 -1
  183. package/dist/toolDbCrdtPut.d.ts +0 -11
  184. package/dist/toolDbCrdtPut.js +0 -68
  185. package/dist/toolDbCrdtPut.js.map +0 -1
  186. package/dist/toolDbGet.d.ts +0 -9
  187. package/dist/toolDbGet.js +0 -78
  188. package/dist/toolDbGet.js.map +0 -1
  189. package/dist/toolDbGetPubKey.d.ts +0 -2
  190. package/dist/toolDbGetPubKey.js +0 -18
  191. package/dist/toolDbGetPubKey.js.map +0 -1
  192. package/dist/toolDbKeysSignIn.d.ts +0 -2
  193. package/dist/toolDbKeysSignIn.js +0 -12
  194. package/dist/toolDbKeysSignIn.js.map +0 -1
  195. package/dist/toolDbNetwork.d.ts +0 -20
  196. package/dist/toolDbNetwork.js +0 -193
  197. package/dist/toolDbNetwork.js.map +0 -1
  198. package/dist/toolDbNetworkAdapter.d.ts +0 -57
  199. package/dist/toolDbNetworkAdapter.js +0 -192
  200. package/dist/toolDbNetworkAdapter.js.map +0 -1
  201. package/dist/toolDbPut.d.ts +0 -10
  202. package/dist/toolDbPut.js +0 -70
  203. package/dist/toolDbPut.js.map +0 -1
  204. package/dist/toolDbQueryKeys.d.ts +0 -8
  205. package/dist/toolDbQueryKeys.js +0 -69
  206. package/dist/toolDbQueryKeys.js.map +0 -1
  207. package/dist/toolDbSignIn.d.ts +0 -2
  208. package/dist/toolDbSignIn.js +0 -28
  209. package/dist/toolDbSignIn.js.map +0 -1
  210. package/dist/toolDbSignUp.d.ts +0 -3
  211. package/dist/toolDbSignUp.js +0 -97
  212. package/dist/toolDbSignUp.js.map +0 -1
  213. package/dist/toolDbSubscribe.d.ts +0 -8
  214. package/dist/toolDbSubscribe.js +0 -46
  215. package/dist/toolDbSubscribe.js.map +0 -1
  216. package/dist/toolDbVerificationWrapper.d.ts +0 -2
  217. package/dist/toolDbVerificationWrapper.js +0 -93
  218. package/dist/toolDbVerificationWrapper.js.map +0 -1
  219. package/dist/toolDbWeb3User.d.ts +0 -20
  220. package/dist/toolDbWeb3User.js +0 -75
  221. package/dist/toolDbWeb3User.js.map +0 -1
  222. package/dist/toolDbWebrtc.d.ts +0 -65
  223. package/dist/toolDbWebrtc.js +0 -489
  224. package/dist/toolDbWebrtc.js.map +0 -1
  225. package/dist/toolDbWebsocket.d.ts +0 -19
  226. package/dist/toolDbWebsocket.js +0 -193
  227. package/dist/toolDbWebsocket.js.map +0 -1
  228. package/dist/toolchain.d.ts +0 -1
  229. package/dist/toolchain.js +0 -8
  230. package/dist/toolchain.js.map +0 -1
  231. package/dist/tooldb.d.ts +0 -107
  232. package/dist/tooldb.js +0 -261
  233. package/dist/tooldb.js.map +0 -1
  234. package/dist/types/graph.d.ts +0 -0
  235. package/dist/types/graph.js +0 -2
  236. package/dist/types/graph.js.map +0 -1
  237. package/dist/types/message.d.ts +0 -106
  238. package/dist/types/message.js +0 -17
  239. package/dist/types/message.js.map +0 -1
  240. package/dist/types/tooldb.d.ts +0 -102
  241. package/dist/types/tooldb.js +0 -36
  242. package/dist/types/tooldb.js.map +0 -1
  243. package/dist/utils/arrayBufferToBase64.d.ts +0 -1
  244. package/dist/utils/arrayBufferToBase64.js +0 -12
  245. package/dist/utils/arrayBufferToBase64.js.map +0 -1
  246. package/dist/utils/arrayBufferToHex.d.ts +0 -1
  247. package/dist/utils/arrayBufferToHex.js +0 -19
  248. package/dist/utils/arrayBufferToHex.js.map +0 -1
  249. package/dist/utils/arrayBufferToString.d.ts +0 -1
  250. package/dist/utils/arrayBufferToString.js +0 -12
  251. package/dist/utils/arrayBufferToString.js.map +0 -1
  252. package/dist/utils/base64ToArrayBuffer.d.ts +0 -1
  253. package/dist/utils/base64ToArrayBuffer.js +0 -12
  254. package/dist/utils/base64ToArrayBuffer.js.map +0 -1
  255. package/dist/utils/base64ToBinaryChange.d.ts +0 -2
  256. package/dist/utils/base64ToBinaryChange.js +0 -18
  257. package/dist/utils/base64ToBinaryChange.js.map +0 -1
  258. package/dist/utils/base64ToBinaryDocument.d.ts +0 -2
  259. package/dist/utils/base64ToBinaryDocument.js +0 -18
  260. package/dist/utils/base64ToBinaryDocument.js.map +0 -1
  261. package/dist/utils/base64ToHex.d.ts +0 -1
  262. package/dist/utils/base64ToHex.js +0 -13
  263. package/dist/utils/base64ToHex.js.map +0 -1
  264. package/dist/utils/base64ToUint8.d.ts +0 -1
  265. package/dist/utils/base64ToUint8.js +0 -17
  266. package/dist/utils/base64ToUint8.js.map +0 -1
  267. package/dist/utils/catchReturn.d.ts +0 -1
  268. package/dist/utils/catchReturn.js +0 -8
  269. package/dist/utils/catchReturn.js.map +0 -1
  270. package/dist/utils/crypto/base64KeyToHex.d.ts +0 -1
  271. package/dist/utils/crypto/base64KeyToHex.js +0 -24
  272. package/dist/utils/crypto/base64KeyToHex.js.map +0 -1
  273. package/dist/utils/crypto/base64PublicKeyToHex.d.ts +0 -1
  274. package/dist/utils/crypto/base64PublicKeyToHex.js +0 -22
  275. package/dist/utils/crypto/base64PublicKeyToHex.js.map +0 -1
  276. package/dist/utils/crypto/decodeKeyString.d.ts +0 -1
  277. package/dist/utils/crypto/decodeKeyString.js +0 -12
  278. package/dist/utils/crypto/decodeKeyString.js.map +0 -1
  279. package/dist/utils/crypto/decryptData.d.ts +0 -1
  280. package/dist/utils/crypto/decryptData.js +0 -28
  281. package/dist/utils/crypto/decryptData.js.map +0 -1
  282. package/dist/utils/crypto/decryptWithPass.d.ts +0 -1
  283. package/dist/utils/crypto/decryptWithPass.js +0 -22
  284. package/dist/utils/crypto/decryptWithPass.js.map +0 -1
  285. package/dist/utils/crypto/deriveSecret.d.ts +0 -1
  286. package/dist/utils/crypto/deriveSecret.js +0 -18
  287. package/dist/utils/crypto/deriveSecret.js.map +0 -1
  288. package/dist/utils/crypto/encodeKeyString.d.ts +0 -1
  289. package/dist/utils/crypto/encodeKeyString.js +0 -12
  290. package/dist/utils/crypto/encodeKeyString.js.map +0 -1
  291. package/dist/utils/crypto/encryptData.d.ts +0 -1
  292. package/dist/utils/crypto/encryptData.js +0 -25
  293. package/dist/utils/crypto/encryptData.js.map +0 -1
  294. package/dist/utils/crypto/encryptWithPass.d.ts +0 -1
  295. package/dist/utils/crypto/encryptWithPass.js +0 -22
  296. package/dist/utils/crypto/encryptWithPass.js.map +0 -1
  297. package/dist/utils/crypto/exportKey.d.ts +0 -1
  298. package/dist/utils/crypto/exportKey.js +0 -14
  299. package/dist/utils/crypto/exportKey.js.map +0 -1
  300. package/dist/utils/crypto/exportKeyAsHex.d.ts +0 -1
  301. package/dist/utils/crypto/exportKeyAsHex.js +0 -18
  302. package/dist/utils/crypto/exportKeyAsHex.js.map +0 -1
  303. package/dist/utils/crypto/generateKeyFromPassword.d.ts +0 -1
  304. package/dist/utils/crypto/generateKeyFromPassword.js +0 -25
  305. package/dist/utils/crypto/generateKeyFromPassword.js.map +0 -1
  306. package/dist/utils/crypto/generateKeyPair.d.ts +0 -1
  307. package/dist/utils/crypto/generateKeyPair.js +0 -17
  308. package/dist/utils/crypto/generateKeyPair.js.map +0 -1
  309. package/dist/utils/crypto/generateKeysComb.d.ts +0 -4
  310. package/dist/utils/crypto/generateKeysComb.js +0 -60
  311. package/dist/utils/crypto/generateKeysComb.js.map +0 -1
  312. package/dist/utils/crypto/importKey.d.ts +0 -1
  313. package/dist/utils/crypto/importKey.js +0 -23
  314. package/dist/utils/crypto/importKey.js.map +0 -1
  315. package/dist/utils/crypto/loadKeysComb.d.ts +0 -5
  316. package/dist/utils/crypto/loadKeysComb.js +0 -90
  317. package/dist/utils/crypto/loadKeysComb.js.map +0 -1
  318. package/dist/utils/crypto/loadSignKeys.d.ts +0 -2
  319. package/dist/utils/crypto/loadSignKeys.js +0 -78
  320. package/dist/utils/crypto/loadSignKeys.js.map +0 -1
  321. package/dist/utils/crypto/recoverPubKey.d.ts +0 -1
  322. package/dist/utils/crypto/recoverPubKey.js +0 -33
  323. package/dist/utils/crypto/recoverPubKey.js.map +0 -1
  324. package/dist/utils/crypto/recoverPubKeyFromPrivate.d.ts +0 -1
  325. package/dist/utils/crypto/recoverPubKeyFromPrivate.js +0 -16
  326. package/dist/utils/crypto/recoverPubKeyFromPrivate.js.map +0 -1
  327. package/dist/utils/crypto/saveKeysComb.d.ts +0 -2
  328. package/dist/utils/crypto/saveKeysComb.js +0 -75
  329. package/dist/utils/crypto/saveKeysComb.js.map +0 -1
  330. package/dist/utils/crypto/saveSignKeys.d.ts +0 -2
  331. package/dist/utils/crypto/saveSignKeys.js +0 -67
  332. package/dist/utils/crypto/saveSignKeys.js.map +0 -1
  333. package/dist/utils/crypto/verifyData.d.ts +0 -1
  334. package/dist/utils/crypto/verifyData.js +0 -20
  335. package/dist/utils/crypto/verifyData.js.map +0 -1
  336. package/dist/utils/encoding/arrayBufferToBase64.d.ts +0 -1
  337. package/dist/utils/encoding/arrayBufferToBase64.js +0 -12
  338. package/dist/utils/encoding/arrayBufferToBase64.js.map +0 -1
  339. package/dist/utils/encoding/arrayBufferToHex.d.ts +0 -1
  340. package/dist/utils/encoding/arrayBufferToHex.js +0 -19
  341. package/dist/utils/encoding/arrayBufferToHex.js.map +0 -1
  342. package/dist/utils/encoding/arrayBufferToString.d.ts +0 -1
  343. package/dist/utils/encoding/arrayBufferToString.js +0 -12
  344. package/dist/utils/encoding/arrayBufferToString.js.map +0 -1
  345. package/dist/utils/encoding/base64ToArrayBuffer.d.ts +0 -1
  346. package/dist/utils/encoding/base64ToArrayBuffer.js +0 -12
  347. package/dist/utils/encoding/base64ToArrayBuffer.js.map +0 -1
  348. package/dist/utils/encoding/base64ToBinaryChange.d.ts +0 -2
  349. package/dist/utils/encoding/base64ToBinaryChange.js +0 -18
  350. package/dist/utils/encoding/base64ToBinaryChange.js.map +0 -1
  351. package/dist/utils/encoding/base64ToBinaryDocument.d.ts +0 -2
  352. package/dist/utils/encoding/base64ToBinaryDocument.js +0 -18
  353. package/dist/utils/encoding/base64ToBinaryDocument.js.map +0 -1
  354. package/dist/utils/encoding/base64ToHex.d.ts +0 -1
  355. package/dist/utils/encoding/base64ToHex.js +0 -13
  356. package/dist/utils/encoding/base64ToHex.js.map +0 -1
  357. package/dist/utils/encoding/base64ToUint8.d.ts +0 -1
  358. package/dist/utils/encoding/base64ToUint8.js +0 -17
  359. package/dist/utils/encoding/base64ToUint8.js.map +0 -1
  360. package/dist/utils/encoding/fromBase64.d.ts +0 -1
  361. package/dist/utils/encoding/fromBase64.js +0 -7
  362. package/dist/utils/encoding/fromBase64.js.map +0 -1
  363. package/dist/utils/encoding/hexToArrayBuffer.d.ts +0 -1
  364. package/dist/utils/encoding/hexToArrayBuffer.js +0 -15
  365. package/dist/utils/encoding/hexToArrayBuffer.js.map +0 -1
  366. package/dist/utils/encoding/hexToBase64.d.ts +0 -1
  367. package/dist/utils/encoding/hexToBase64.js +0 -12
  368. package/dist/utils/encoding/hexToBase64.js.map +0 -1
  369. package/dist/utils/encoding/hexToString.d.ts +0 -1
  370. package/dist/utils/encoding/hexToString.js +0 -12
  371. package/dist/utils/encoding/hexToString.js.map +0 -1
  372. package/dist/utils/encoding/hexToUint8.d.ts +0 -1
  373. package/dist/utils/encoding/hexToUint8.js +0 -11
  374. package/dist/utils/encoding/hexToUint8.js.map +0 -1
  375. package/dist/utils/encoding/stringToArrayBuffer.d.ts +0 -1
  376. package/dist/utils/encoding/stringToArrayBuffer.js +0 -12
  377. package/dist/utils/encoding/stringToArrayBuffer.js.map +0 -1
  378. package/dist/utils/encoding/toBase64.d.ts +0 -1
  379. package/dist/utils/encoding/toBase64.js +0 -7
  380. package/dist/utils/encoding/toBase64.js.map +0 -1
  381. package/dist/utils/encoding/uint8ArrayToHex.d.ts +0 -1
  382. package/dist/utils/encoding/uint8ArrayToHex.js +0 -7
  383. package/dist/utils/encoding/uint8ArrayToHex.js.map +0 -1
  384. package/dist/utils/encoding/uint8ToBase64.d.ts +0 -1
  385. package/dist/utils/encoding/uint8ToBase64.js +0 -15
  386. package/dist/utils/encoding/uint8ToBase64.js.map +0 -1
  387. package/dist/utils/fromBase64.d.ts +0 -1
  388. package/dist/utils/fromBase64.js +0 -7
  389. package/dist/utils/fromBase64.js.map +0 -1
  390. package/dist/utils/generateIv.d.ts +0 -1
  391. package/dist/utils/generateIv.js +0 -12
  392. package/dist/utils/generateIv.js.map +0 -1
  393. package/dist/utils/getPeerSignature.d.ts +0 -2
  394. package/dist/utils/getPeerSignature.js +0 -12
  395. package/dist/utils/getPeerSignature.js.map +0 -1
  396. package/dist/utils/getTimestamp.d.ts +0 -1
  397. package/dist/utils/getTimestamp.js +0 -7
  398. package/dist/utils/getTimestamp.js.map +0 -1
  399. package/dist/utils/hexToArrayBuffer.d.ts +0 -1
  400. package/dist/utils/hexToArrayBuffer.js +0 -15
  401. package/dist/utils/hexToArrayBuffer.js.map +0 -1
  402. package/dist/utils/hexToBase64.d.ts +0 -1
  403. package/dist/utils/hexToBase64.js +0 -12
  404. package/dist/utils/hexToBase64.js.map +0 -1
  405. package/dist/utils/hexToString.d.ts +0 -1
  406. package/dist/utils/hexToString.js +0 -12
  407. package/dist/utils/hexToString.js.map +0 -1
  408. package/dist/utils/hexToUint8.d.ts +0 -1
  409. package/dist/utils/hexToUint8.js +0 -8
  410. package/dist/utils/hexToUint8.js.map +0 -1
  411. package/dist/utils/indexedb.d.ts +0 -2
  412. package/dist/utils/indexedb.js +0 -116
  413. package/dist/utils/indexedb.js.map +0 -1
  414. package/dist/utils/leveldb.d.ts +0 -2
  415. package/dist/utils/leveldb.js +0 -85
  416. package/dist/utils/leveldb.js.map +0 -1
  417. package/dist/utils/proofOfWork.d.ts +0 -4
  418. package/dist/utils/proofOfWork.js +0 -19
  419. package/dist/utils/proofOfWork.js.map +0 -1
  420. package/dist/utils/randomAnimal.d.ts +0 -1
  421. package/dist/utils/randomAnimal.js +0 -77
  422. package/dist/utils/randomAnimal.js.map +0 -1
  423. package/dist/utils/sha1.d.ts +0 -1
  424. package/dist/utils/sha1.js +0 -13
  425. package/dist/utils/sha1.js.map +0 -1
  426. package/dist/utils/sha256.d.ts +0 -3
  427. package/dist/utils/sha256.js +0 -13
  428. package/dist/utils/sha256.js.map +0 -1
  429. package/dist/utils/signData.d.ts +0 -1
  430. package/dist/utils/signData.js +0 -19
  431. package/dist/utils/signData.js.map +0 -1
  432. package/dist/utils/stringToArrayBuffer.d.ts +0 -1
  433. package/dist/utils/stringToArrayBuffer.js +0 -12
  434. package/dist/utils/stringToArrayBuffer.js.map +0 -1
  435. package/dist/utils/textRandom.d.ts +0 -1
  436. package/dist/utils/textRandom.js +0 -15
  437. package/dist/utils/textRandom.js.map +0 -1
  438. package/dist/utils/toBase64.d.ts +0 -1
  439. package/dist/utils/toBase64.js +0 -7
  440. package/dist/utils/toBase64.js.map +0 -1
  441. package/dist/utils/uint8ArrayToHex.d.ts +0 -2
  442. package/dist/utils/uint8ArrayToHex.js +0 -7
  443. package/dist/utils/uint8ArrayToHex.js.map +0 -1
  444. package/dist/utils/uint8ToBase64.d.ts +0 -2
  445. package/dist/utils/uint8ToBase64.js +0 -15
  446. package/dist/utils/uint8ToBase64.js.map +0 -1
  447. package/dist/utils/verifyMessage.d.ts +0 -9
  448. package/dist/utils/verifyMessage.js +0 -129
  449. package/dist/utils/verifyMessage.js.map +0 -1
  450. package/dist/utils/verifyPeer.d.ts +0 -3
  451. package/dist/utils/verifyPeer.js +0 -18
  452. package/dist/utils/verifyPeer.js.map +0 -1
  453. package/jest.config.ts +0 -195
  454. package/jest.setup.js +0 -0
  455. package/test-alice/000663.ldb +0 -0
  456. package/test-alice/000665.ldb +0 -0
  457. package/test-alice/000668.ldb +0 -0
  458. package/test-alice/000669.log +0 -0
  459. package/test-alice/CURRENT +0 -1
  460. package/test-alice/LOCK +0 -0
  461. package/test-alice/LOG +0 -5
  462. package/test-alice/LOG.old +0 -5
  463. package/test-alice/MANIFEST-000667 +0 -0
  464. package/test-alice-speed/000035.log +0 -0
  465. package/test-alice-speed/000036.ldb +0 -0
  466. package/test-alice-speed/CURRENT +0 -1
  467. package/test-alice-speed/LOCK +0 -0
  468. package/test-alice-speed/LOG +0 -13
  469. package/test-alice-speed/LOG.old +0 -5
  470. package/test-alice-speed/MANIFEST-000033 +0 -0
  471. package/test-bob/000665.ldb +0 -0
  472. package/test-bob/000667.ldb +0 -0
  473. package/test-bob/000668.log +0 -0
  474. package/test-bob/CURRENT +0 -1
  475. package/test-bob/LOCK +0 -0
  476. package/test-bob/LOG +0 -5
  477. package/test-bob/LOG.old +0 -14
  478. package/test-bob/MANIFEST-000666 +0 -0
  479. package/test-node-a/000663.ldb +0 -0
  480. package/test-node-a/000665.ldb +0 -0
  481. package/test-node-a/000668.ldb +0 -0
  482. package/test-node-a/000669.log +0 -0
  483. package/test-node-a/CURRENT +0 -1
  484. package/test-node-a/LOCK +0 -0
  485. package/test-node-a/LOG +0 -5
  486. package/test-node-a/LOG.old +0 -5
  487. package/test-node-a/MANIFEST-000667 +0 -0
  488. package/test-node-b/000663.ldb +0 -0
  489. package/test-node-b/000665.ldb +0 -0
  490. package/test-node-b/000668.ldb +0 -0
  491. package/test-node-b/000669.log +0 -0
  492. package/test-node-b/CURRENT +0 -1
  493. package/test-node-b/LOCK +0 -0
  494. package/test-node-b/LOG +0 -5
  495. package/test-node-b/LOG.old +0 -5
  496. package/test-node-b/MANIFEST-000667 +0 -0
  497. package/test-verify-a/000026.ldb +0 -0
  498. package/test-verify-a/000029.ldb +0 -0
  499. package/test-verify-a/000031.ldb +0 -0
  500. package/test-verify-a/000033.ldb +0 -0
  501. package/test-verify-a/000250.log +0 -0
  502. package/test-verify-a/CURRENT +0 -1
  503. package/test-verify-a/LOCK +0 -0
  504. package/test-verify-a/LOG +0 -3
  505. package/test-verify-a/LOG.old +0 -3
  506. package/test-verify-a/MANIFEST-000249 +0 -0
  507. package/toolDbLibP2p.ts +0 -206
@@ -0,0 +1,190 @@
1
+ import { BaseCrdt, CRDT_LIST } from "..";
2
+
3
+ export type ListOperations = "INS" | "DEL";
4
+
5
+ export interface ChangeListBase<T> {
6
+ t: ListOperations; // Operation type
7
+ i: string; // "index", author + n
8
+ }
9
+
10
+ export interface InsListChange<T> extends ChangeListBase<T> {
11
+ t: "INS";
12
+ v: T; // Value
13
+ p: string | undefined; // Previous index, if any
14
+ n: string | undefined; // Next index, if any
15
+ }
16
+
17
+ export interface DelListChange<T> extends ChangeListBase<T> {
18
+ t: "DEL";
19
+ v: string; // target index to tombstone
20
+ }
21
+
22
+ export type ListChanges<T> = InsListChange<T> | DelListChange<T>;
23
+
24
+ interface ListTempCursor<T> {
25
+ value: T;
26
+ index: string;
27
+ tomb: boolean;
28
+ prev: string | undefined;
29
+ next: string | undefined;
30
+ }
31
+
32
+ export class ListCrdt<T> extends BaseCrdt<T, ListChanges<T>, T[]> {
33
+ public type = CRDT_LIST;
34
+
35
+ public _changes: ListChanges<T>[] = [];
36
+
37
+ private _author = "";
38
+
39
+ private _value: T[] = [];
40
+
41
+ public _tempValues: ListTempCursor<T>[] = [];
42
+
43
+ private _lastUpdateSize: number = 0;
44
+
45
+ constructor(author: string, changes?: ListChanges<T>[]) {
46
+ super();
47
+ this._author = author;
48
+ if (changes) {
49
+ this.mergeChanges(changes);
50
+ }
51
+
52
+ this.calculate();
53
+ }
54
+
55
+ changesSort(a: ListChanges<T>, b: ListChanges<T>) {
56
+ if (a.i > b.i) return 1;
57
+ if (a.i < b.i) return -1;
58
+ return 0; // Should never be equal!
59
+ }
60
+
61
+ calculate() {
62
+ const temp: ListTempCursor<T>[] = [];
63
+ // Only update if we have new changes
64
+ if (Object.values(this._changes).length !== this._lastUpdateSize) {
65
+ this._changes.sort(this.changesSort).forEach((change) => {
66
+ if (change.t === "INS") {
67
+ let poisitionToInsert = 0;
68
+ if (change.p) {
69
+ poisitionToInsert = temp.findIndex((v) => v.index === change.p) + 1;
70
+ } else if (change.n) {
71
+ poisitionToInsert = temp.findIndex((v) => v.index === change.n);
72
+ }
73
+
74
+ const cursorValue: ListTempCursor<T> = {
75
+ value: change.v,
76
+ index: change.i,
77
+ tomb: false,
78
+ prev: change.p,
79
+ next: change.n,
80
+ };
81
+
82
+ temp.splice(poisitionToInsert, 0, cursorValue);
83
+ } else if (change.t === "DEL") {
84
+ const poisitionToInsert = temp.findIndex((v) => v.index === change.v);
85
+ temp[poisitionToInsert].tomb = true;
86
+ }
87
+ });
88
+ this._lastUpdateSize = Object.values(temp).length;
89
+
90
+ this._tempValues = temp;
91
+
92
+ this._value = temp.filter((v) => !v.tomb).map((v) => v.value);
93
+ }
94
+ }
95
+
96
+ get value(): T[] {
97
+ this.calculate();
98
+ return this._value;
99
+ }
100
+
101
+ public mergeChanges(newChanges: ListChanges<T>[]) {
102
+ newChanges.forEach((change) => {
103
+ // Filter by author and index
104
+ const filtered = this._changes.filter(
105
+ (c) => c.i === change.i && c.t === change.t && c.v === change.v
106
+ );
107
+ // Only add if there are not matches
108
+ if (filtered.length === 0) {
109
+ this._changes.push(change);
110
+ }
111
+ });
112
+ this.calculate();
113
+ }
114
+
115
+ public getChanges(): ListChanges<T>[] {
116
+ return this._changes;
117
+ }
118
+
119
+ public INS(value: T, index: number) {
120
+ const filterTombs = this._tempValues.filter((v) => !v.tomb);
121
+
122
+ let currentPrev = undefined;
123
+ let currentNext = undefined;
124
+
125
+ if (filterTombs.length !== 0) {
126
+ const currentIndex = filterTombs[index].index;
127
+ const currentIndexPosition = this._tempValues.findIndex(
128
+ (v) => v.index === currentIndex
129
+ );
130
+ currentPrev = this._tempValues[currentIndexPosition - 1];
131
+ currentNext = this._tempValues[currentIndexPosition];
132
+ }
133
+
134
+ const ourChanges = this._changes.filter((c) =>
135
+ c.i.startsWith(this._author)
136
+ );
137
+
138
+ this._changes.push({
139
+ t: "INS",
140
+ p: currentPrev?.index,
141
+ n: currentNext?.index,
142
+ v: value,
143
+ i: this._author + "-" + `${ourChanges.length}`.padStart(8, "0"),
144
+ });
145
+ this.calculate();
146
+ }
147
+
148
+ public PUSH(value: T) {
149
+ const filterTombs = this._tempValues.filter((v) => !v.tomb);
150
+ const currentIndex = filterTombs[filterTombs.length - 1]?.index;
151
+ const currentIndexPosition = this._tempValues.findIndex(
152
+ (v) => v.index === currentIndex
153
+ );
154
+
155
+ const currentPrev = this._tempValues[currentIndexPosition];
156
+
157
+ const ourChanges = this._changes.filter((c) =>
158
+ c.i.startsWith(this._author)
159
+ );
160
+
161
+ this._changes.push({
162
+ t: "INS",
163
+ p: currentPrev?.index,
164
+ n: undefined,
165
+ v: value,
166
+ i: this._author + "-" + `${ourChanges.length}`.padStart(8, "0"),
167
+ });
168
+ this.calculate();
169
+ }
170
+
171
+ public DEL(index: number) {
172
+ const currentIndex = this._tempValues.filter((v) => !v.tomb)[index].index;
173
+ const currentIndexPosition = this._tempValues.findIndex(
174
+ (v) => v.index === currentIndex
175
+ );
176
+
177
+ const current = this._tempValues[currentIndexPosition];
178
+
179
+ const ourChanges = this._changes.filter((c) =>
180
+ c.i.startsWith(this._author)
181
+ );
182
+
183
+ this._changes.push({
184
+ t: "DEL",
185
+ v: current.index,
186
+ i: this._author + "-" + `${ourChanges.length}`.padStart(8, "0"),
187
+ });
188
+ this.calculate();
189
+ }
190
+ }
@@ -0,0 +1,119 @@
1
+ import { BaseCrdt, CRDT_MAP } from "..";
2
+
3
+ export type MapOperations = "SET" | "DEL";
4
+
5
+ export interface ChangeMapBase<T> {
6
+ t: MapOperations;
7
+ a: string;
8
+ k: string;
9
+ i: number;
10
+ }
11
+
12
+ export interface SetMapChange<T> extends ChangeMapBase<T> {
13
+ t: "SET";
14
+ v: T;
15
+ }
16
+
17
+ export interface DelMapChange<T> extends ChangeMapBase<T> {
18
+ t: "DEL";
19
+ }
20
+
21
+ export type MapChanges<T> = SetMapChange<T> | DelMapChange<T>;
22
+
23
+ export class MapCrdt<T> extends BaseCrdt<T, MapChanges<T>, Record<string, T>> {
24
+ public type = CRDT_MAP;
25
+
26
+ private _changes: MapChanges<T>[] = [];
27
+
28
+ private _author = "";
29
+
30
+ private _value: Record<string, T> = {};
31
+
32
+ private _keyIndex: Record<string, number> = {};
33
+
34
+ private _lastUpdateSize: number = 0;
35
+
36
+ constructor(author: string, changes?: MapChanges<T>[]) {
37
+ super();
38
+ this._author = author;
39
+ if (changes) {
40
+ this.mergeChanges(changes);
41
+ }
42
+
43
+ this.calculate();
44
+ }
45
+
46
+ changesSort(a: MapChanges<T>, b: MapChanges<T>) {
47
+ if (a.i < b.i) return -1;
48
+ if (a.i > b.i) return 1;
49
+ if (a.t === "SET" && b.t === "DEL") return -1;
50
+ if (a.t === "DEL" && b.t === "SET") return 1;
51
+ if (a.a < b.a) return -1;
52
+ if (a.a > b.a) return 1;
53
+ return 0; // Should never be equal!
54
+ }
55
+
56
+ calculate() {
57
+ const temp: Record<string, T> = {};
58
+ // Only update if we have new changes
59
+ if (Object.values(this._changes).length !== this._lastUpdateSize) {
60
+ this._changes.sort(this.changesSort).forEach((change) => {
61
+ // Here we apply the model properties
62
+ // Since this is a KV store we dont need much logic,
63
+ // except for the sorting of the changes. Then we just apply them.
64
+ if (change.t === "SET") {
65
+ temp[change.k] = change.v;
66
+ } else if (change.t === "DEL") {
67
+ delete temp[change.k];
68
+ }
69
+ this._keyIndex[change.k] = change.i;
70
+ });
71
+ this._lastUpdateSize = Object.values(temp).length;
72
+ this._value = temp;
73
+ }
74
+ }
75
+
76
+ get value(): Record<string, T> {
77
+ this.calculate();
78
+ return this._value;
79
+ }
80
+
81
+ public mergeChanges(newChanges: MapChanges<T>[]) {
82
+ newChanges.forEach((change) => {
83
+ // Filter by author and index
84
+ const filtered = this._changes.filter(
85
+ (c) => c.i === change.i && c.a === change.a && c.t === change.t
86
+ );
87
+ // Only add if there are not matches
88
+ if (filtered.length === 0) {
89
+ this._changes.push(change);
90
+ }
91
+ });
92
+ this.calculate();
93
+ }
94
+
95
+ public getChanges(): MapChanges<T>[] {
96
+ return this._changes;
97
+ }
98
+
99
+ public SET(key: string, value: T) {
100
+ this._keyIndex[key] = (this._keyIndex[key] || 0) + 1;
101
+ this._changes.push({
102
+ t: "SET",
103
+ k: key,
104
+ a: this._author,
105
+ v: value,
106
+ i: this._keyIndex[key],
107
+ });
108
+ }
109
+
110
+ public DEL(key: string) {
111
+ this._keyIndex[key] = (this._keyIndex[key] || 0) + 1;
112
+ this._changes.push({
113
+ t: "DEL",
114
+ k: key,
115
+ a: this._author,
116
+ i: this._keyIndex[key],
117
+ });
118
+ }
119
+ }
@@ -1,36 +1,35 @@
1
- export * from "./types/tooldb";
2
- export * from "./types/message";
3
- export { default as BaseCrdt } from "./crdt/baseCrdt";
4
- export { default as CounterCrdt } from "./crdt/counterCrdt";
5
- export { default as ListCrdt } from "./crdt/listCrdt";
6
- export { default as MapCrdt } from "./crdt/mapCrdt";
7
1
  export { default as proofOfWork } from "./utils/proofOfWork";
8
2
  export { default as sha1 } from "./utils/sha1";
9
3
  export { default as sha256 } from "./utils/sha256";
10
- export { default as generateIv } from "./utils/generateIv";
4
+ export { default as uniq } from "./utils/uniq";
5
+
11
6
  export { default as randomAnimal } from "./utils/randomAnimal";
12
- export { default as textRandom } from "./utils/textRandom";
13
- export { default as stringToArrayBuffer } from "./utils/encoding/stringToArrayBuffer";
14
7
  export { default as verifyMessage } from "./utils/verifyMessage";
8
+ export { default as getPeerSignature } from "./utils/getPeerSignature";
15
9
  export { default as verifyPeer } from "./utils/verifyPeer";
10
+ export { default as textRandom } from "./utils/textRandom";
11
+
12
+ export { default as catchReturn } from "./utils/catchReturn";
13
+
14
+ export { default as stringToArrayBuffer } from "./utils/encoding/stringToArrayBuffer";
16
15
  export { default as arrayBufferToString } from "./utils/encoding/arrayBufferToString";
16
+
17
17
  export { default as arrayBufferToHex } from "./utils/encoding/arrayBufferToHex";
18
18
  export { default as hexToArrayBuffer } from "./utils/encoding/hexToArrayBuffer";
19
19
  export { default as hexToString } from "./utils/encoding/hexToString";
20
20
  export { default as hexToUint8 } from "./utils/encoding/hexToUint8";
21
- export { default as generateKeyFromPassword } from "./utils/crypto/generateKeyFromPassword";
22
- export { default as decryptWithPass } from "./utils/crypto/decryptWithPass";
23
- export { default as encryptWithPass } from "./utils/crypto/encryptWithPass";
24
- export { default as ToolDbNetworkAdapter } from "./toolDbNetworkAdapter";
25
- export { default as ToolDbWebsocket } from "./toolDbWebsocket";
26
- export { default as ToolDbWebrtc } from "./toolDbWebrtc";
21
+
22
+ export { default as ToolDbNetworkAdapter } from "./adapters-base/networkAdapter";
23
+ export { default as ToolDbStorageAdapter } from "./adapters-base/storageAdapter";
24
+ export { default as ToolDbUserAdapter } from "./adapters-base/userAdapter";
25
+
27
26
  export * from "./types/tooldb";
28
27
  export * from "./types/message";
29
28
  export * from "./crdt/baseCrdt";
30
29
  export * from "./crdt/counterCrdt";
31
30
  export * from "./crdt/listCrdt";
32
31
  export * from "./crdt/mapCrdt";
33
- export { default as ToolDbWeb3User } from "./toolDbWeb3User";
32
+
34
33
  export { default as handleSubscribe } from "./messageHandlers/handleSubscribe";
35
34
  export { default as handleCrdtGet } from "./messageHandlers/handleCrdtGet";
36
35
  export { default as handleCrdtPut } from "./messageHandlers/handleCrdtPut";
@@ -39,4 +38,5 @@ export { default as handlePing } from "./messageHandlers/handlePing";
39
38
  export { default as handlePong } from "./messageHandlers/handlePong";
40
39
  export { default as handleGet } from "./messageHandlers/handleGet";
41
40
  export { default as handlePut } from "./messageHandlers/handlePut";
41
+
42
42
  export { default as ToolDb } from "./tooldb";
package/lib/logger.ts ADDED
@@ -0,0 +1,30 @@
1
+ import { ToolDb, sha1 } from ".";
2
+
3
+ export default function logger(
4
+ this: ToolDb,
5
+ arg0: any,
6
+ arg1?: any,
7
+ arg2?: any,
8
+ arg3?: any,
9
+ arg4?: any,
10
+ arg5?: any
11
+ ) {
12
+ if (this.options.debug) {
13
+ const isNode = typeof window === "undefined";
14
+ const title = isNode
15
+ ? this.options.storageName
16
+ : "%c" + this.options.storageName;
17
+
18
+ const style = isNode
19
+ ? ""
20
+ : "background: #" +
21
+ sha1(this.options.storageName).slice(-6) +
22
+ "; padding: 2px; color: black";
23
+
24
+ console.log(
25
+ title,
26
+ style,
27
+ ...[arg0, arg1, arg2, arg3, arg4, arg4, arg5].slice(0, arguments.length)
28
+ );
29
+ }
30
+ }
@@ -0,0 +1,29 @@
1
+ import { ToolDb, CrdtGetMessage, CrdtPutMessage } from "..";
2
+
3
+ export default function handleCrdtGet(
4
+ this: ToolDb,
5
+ message: CrdtGetMessage,
6
+ remotePeerId: string
7
+ ) {
8
+ this.store
9
+ .get(message.key)
10
+ .then((data) => {
11
+ try {
12
+ // Use the id of the get so the other client knows we are replying
13
+ const oldData = {
14
+ type: "crdtPut",
15
+ data: JSON.parse(data),
16
+ to: [],
17
+ id: message.id,
18
+ } as CrdtPutMessage;
19
+ this.network.sendToClientId(remotePeerId, oldData);
20
+ } catch (e) {
21
+ // socket.send(data);
22
+ // do nothing
23
+ }
24
+ })
25
+ .catch((e) => {
26
+ this.logger("Local key not found, relay", JSON.stringify(message));
27
+ this.network.sendToAll(message, false);
28
+ });
29
+ }
@@ -0,0 +1,118 @@
1
+ import {
2
+ ToolDb,
3
+ VerifyResult,
4
+ CrdtPutMessage,
5
+ VerificationData,
6
+ MapCrdt,
7
+ MapChanges,
8
+ CRDT_COUNTER,
9
+ CRDT_LIST,
10
+ CRDT_MAP,
11
+ ListCrdt,
12
+ ListChanges,
13
+ CounterCrdt,
14
+ CounterChanges,
15
+ } from "..";
16
+
17
+ import toolDbVerificationWrapper from "../toolDbVerificationWrapper";
18
+
19
+ export default function handleCrdtPut(
20
+ this: ToolDb,
21
+ message: CrdtPutMessage,
22
+ remotePeerId: string
23
+ ) {
24
+ toolDbVerificationWrapper.call(this, message.data).then((value) => {
25
+ // this.logger("Verification wrapper result: ", value, message.k);
26
+ if (value === VerifyResult.Verified) {
27
+ this.emit("crdtput", message);
28
+ this.emit("data", message.data);
29
+ this.emit("verified", message);
30
+ // relay to other servers !!!
31
+ this.network.sendToAll(message, true);
32
+
33
+ this.store
34
+ .get(message.data.k)
35
+ .then((oldData) => {
36
+ try {
37
+ const parsedOldData: VerificationData<any> = JSON.parse(oldData);
38
+
39
+ let newMessage = message;
40
+
41
+ // Merge old document with new data incoming and save it
42
+ // Add handles for all kinds of CRDT we add
43
+ let oldDoc:
44
+ | MapCrdt<any>
45
+ | ListCrdt<any>
46
+ | CounterCrdt<any>
47
+ | undefined;
48
+
49
+ if (parsedOldData.c === CRDT_MAP) {
50
+ oldDoc = new MapCrdt(
51
+ this.userAccount.getAddress() || "",
52
+ parsedOldData.v
53
+ );
54
+ }
55
+
56
+ if (parsedOldData.c === CRDT_LIST) {
57
+ oldDoc = new ListCrdt(
58
+ this.userAccount.getAddress() || "",
59
+ parsedOldData.v
60
+ );
61
+ }
62
+
63
+ if (parsedOldData.c === CRDT_COUNTER) {
64
+ oldDoc = new CounterCrdt(
65
+ this.userAccount.getAddress() || "",
66
+ parsedOldData.v
67
+ );
68
+ }
69
+
70
+ let changesMerged:
71
+ | MapChanges<any>[]
72
+ | ListChanges<any>[]
73
+ | CounterChanges[] = [];
74
+
75
+ if (oldDoc) {
76
+ oldDoc.mergeChanges(message.data.v);
77
+ changesMerged = oldDoc.getChanges();
78
+ }
79
+ newMessage = {
80
+ ...message,
81
+ };
82
+ newMessage.data.v = changesMerged;
83
+
84
+ if (parsedOldData.t < message.data.t) {
85
+ const key = newMessage.data.k;
86
+ this.triggerKeyListener(key, newMessage.data);
87
+ this.store
88
+ .put(newMessage.data.k, JSON.stringify(newMessage.data))
89
+ .catch((e) => {
90
+ // do nothing
91
+ });
92
+ } else {
93
+ const key = message.data.k;
94
+ this.triggerKeyListener(key, parsedOldData);
95
+ }
96
+ // } else {
97
+ // this.logger(
98
+ // `${message.k} has old data, but its newer. old ${parsedOldData.t} < new ${message.t}`
99
+ // );
100
+ // }
101
+ } catch (e) {
102
+ this.logger("Couldnt parse crdt data", oldData, e);
103
+ }
104
+ })
105
+ .catch((e) => {
106
+ const key = message.data.k;
107
+ this.triggerKeyListener(key, message.data);
108
+ this.store
109
+ .put(message.data.k, JSON.stringify(message.data))
110
+ .catch((e) => {
111
+ // do nothing
112
+ });
113
+ });
114
+ } else {
115
+ this.logger("unverified message: ", value, message);
116
+ }
117
+ });
118
+ }
@@ -0,0 +1,29 @@
1
+ import { ToolDb, GetMessage, PutMessage } from "..";
2
+
3
+ export default function handleGet(
4
+ this: ToolDb,
5
+ message: GetMessage,
6
+ remotePeerId: string
7
+ ) {
8
+ this.store
9
+ .get(message.key)
10
+ .then((data) => {
11
+ try {
12
+ // Use the id of the get so the other client knows we are replying
13
+ const oldData = {
14
+ type: "put",
15
+ data: JSON.parse(data),
16
+ to: [],
17
+ id: message.id,
18
+ } as PutMessage;
19
+ this.network.sendToClientId(remotePeerId, oldData);
20
+ } catch (e) {
21
+ // socket.send(data);
22
+ // do nothing
23
+ }
24
+ })
25
+ .catch((e) => {
26
+ this.logger("Local key not found, relay", JSON.stringify(message));
27
+ this.network.sendToAll(message, false);
28
+ });
29
+ }
@@ -0,0 +1,40 @@
1
+ import { ToolDb, verifyPeer, PingMessage, PongMessage } from "..";
2
+
3
+ export default function handlePing(
4
+ this: ToolDb,
5
+ message: PingMessage,
6
+ remotePeerId: string
7
+ ) {
8
+ if (!this.isConnected) {
9
+ this.isConnected = true;
10
+ this.onConnect();
11
+ }
12
+
13
+ verifyPeer(this, message.peer).then((verified) => {
14
+ // Verify integrity and topic
15
+ if (verified && message.peer.topic === this.options.topic) {
16
+ // Add this peer to our list of peers
17
+ const filteredPeers = this.serverPeers.filter(
18
+ (p) => p.address === message.peer.address
19
+ );
20
+ if (filteredPeers.length === 0 && message.isServer) {
21
+ // Add this peer to the list
22
+ this.serverPeers.push(message.peer);
23
+ }
24
+
25
+ this.network.sendToClientId(remotePeerId, {
26
+ type: "pong",
27
+ isServer: this.options.server,
28
+ clientId: this.network.getClientAddress(),
29
+ to: [],
30
+ servers: this.serverPeers,
31
+ id: message.id,
32
+ } as PongMessage);
33
+
34
+ this.onPeerConnect(this.peerAccount.getAddress() || "");
35
+ } else {
36
+ this.logger("Blocked a remote peer from joining; ", message);
37
+ // Drop connection here!
38
+ }
39
+ });
40
+ }
@@ -0,0 +1,30 @@
1
+ import { ToolDb, verifyPeer, PongMessage } from "..";
2
+
3
+ export default function handlePong(
4
+ this: ToolDb,
5
+ message: PongMessage,
6
+ remotePeerId: string
7
+ ) {
8
+ if (!this.isConnected) {
9
+ this.isConnected = true;
10
+ this.onConnect();
11
+ }
12
+
13
+ message.servers.forEach((peer) => {
14
+ verifyPeer(this, peer).then((verified) => {
15
+ // Verify integrity and topic
16
+ if (verified && peer.topic === this.options.topic) {
17
+ // Add this peer to our list of peers
18
+ const filteredPeers = this.serverPeers.filter(
19
+ (p) => p.address === peer.address
20
+ );
21
+ if (filteredPeers.length === 0 && peer.host && peer.port) {
22
+ // Add this peer to the list
23
+ this.serverPeers.push(peer);
24
+ }
25
+ }
26
+ });
27
+ });
28
+
29
+ this.onPeerConnect(this.peerAccount.getAddress() || "");
30
+ }