tool-db 2.3.1 → 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 (615) hide show
  1. package/README.md +1 -74
  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} +8 -5
  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 -65
  54. package/tsconfig.json +10 -72
  55. package/.eslintrc.json +0 -74
  56. package/.github/workflows/main.yml +0 -29
  57. package/_____peer/000005.ldb +0 -0
  58. package/_____peer/000008.log +0 -0
  59. package/_____peer/CURRENT +0 -1
  60. package/_____peer/LOCK +0 -0
  61. package/_____peer/LOG +0 -0
  62. package/_____peer/LOG.old +0 -0
  63. package/_____peer/MANIFEST-000007 +0 -0
  64. package/_____peer_test-alice/000003.log +0 -0
  65. package/_____peer_test-alice/CURRENT +0 -1
  66. package/_____peer_test-alice/LOCK +0 -0
  67. package/_____peer_test-alice/LOG +0 -1
  68. package/_____peer_test-alice/MANIFEST-000002 +0 -0
  69. package/_____peer_test-base-client/000005.ldb +0 -0
  70. package/_____peer_test-base-client/000006.log +0 -0
  71. package/_____peer_test-base-client/CURRENT +0 -1
  72. package/_____peer_test-base-client/LOCK +0 -0
  73. package/_____peer_test-base-client/LOG +0 -5
  74. package/_____peer_test-base-client/LOG.old +0 -1
  75. package/_____peer_test-base-client/MANIFEST-000004 +0 -0
  76. package/_____peer_test-base-server/000005.ldb +0 -0
  77. package/_____peer_test-base-server/000006.log +0 -0
  78. package/_____peer_test-base-server/CURRENT +0 -1
  79. package/_____peer_test-base-server/LOCK +0 -0
  80. package/_____peer_test-base-server/LOG +0 -5
  81. package/_____peer_test-base-server/LOG.old +0 -1
  82. package/_____peer_test-base-server/MANIFEST-000004 +0 -0
  83. package/_____peer_test-bob/000003.log +0 -0
  84. package/_____peer_test-bob/CURRENT +0 -1
  85. package/_____peer_test-bob/LOCK +0 -0
  86. package/_____peer_test-bob/LOG +0 -1
  87. package/_____peer_test-bob/MANIFEST-000002 +0 -0
  88. package/_____peer_test-chris/000003.log +0 -0
  89. package/_____peer_test-chris/CURRENT +0 -1
  90. package/_____peer_test-chris/LOCK +0 -0
  91. package/_____peer_test-chris/LOG +0 -1
  92. package/_____peer_test-chris/MANIFEST-000002 +0 -0
  93. package/_____peer_test-node-a/000003.log +0 -0
  94. package/_____peer_test-node-a/CURRENT +0 -1
  95. package/_____peer_test-node-a/LOCK +0 -0
  96. package/_____peer_test-node-a/LOG +0 -1
  97. package/_____peer_test-node-a/MANIFEST-000002 +0 -0
  98. package/_____peer_test-node-b/000003.log +0 -0
  99. package/_____peer_test-node-b/CURRENT +0 -1
  100. package/_____peer_test-node-b/LOCK +0 -0
  101. package/_____peer_test-node-b/LOG +0 -1
  102. package/_____peer_test-node-b/MANIFEST-000002 +0 -0
  103. package/_____peer_test-store/000003.log +0 -0
  104. package/_____peer_test-store/CURRENT +0 -1
  105. package/_____peer_test-store/LOCK +0 -0
  106. package/_____peer_test-store/LOG +0 -1
  107. package/_____peer_test-store/MANIFEST-000002 +0 -0
  108. package/_____peer_test-verify-a/000003.log +0 -0
  109. package/_____peer_test-verify-a/CURRENT +0 -1
  110. package/_____peer_test-verify-a/LOCK +0 -0
  111. package/_____peer_test-verify-a/LOG +0 -1
  112. package/_____peer_test-verify-a/MANIFEST-000002 +0 -0
  113. package/babel.config.js +0 -6
  114. package/bundle.js +0 -1
  115. package/custom-test-env.js +0 -28
  116. package/dist/__tests__ copy/base64.d.ts +0 -1
  117. package/dist/__tests__ copy/base64.js +0 -61
  118. package/dist/__tests__ copy/base64.js.map +0 -1
  119. package/dist/__tests__ copy/encryption.d.ts +0 -1
  120. package/dist/__tests__ copy/encryption.js +0 -68
  121. package/dist/__tests__ copy/encryption.js.map +0 -1
  122. package/dist/__tests__ copy/keys.d.ts +0 -1
  123. package/dist/__tests__ copy/keys.js +0 -238
  124. package/dist/__tests__ copy/keys.js.map +0 -1
  125. package/dist/__tests__ copy/network.d.ts +0 -1
  126. package/dist/__tests__ copy/network.js +0 -206
  127. package/dist/__tests__ copy/network.js.map +0 -1
  128. package/dist/__tests__ copy/pow.d.ts +0 -1
  129. package/dist/__tests__ copy/pow.js +0 -25
  130. package/dist/__tests__ copy/pow.js.map +0 -1
  131. package/dist/__tests__ copy/sha1.d.ts +0 -1
  132. package/dist/__tests__ copy/sha1.js +0 -16
  133. package/dist/__tests__ copy/sha1.js.map +0 -1
  134. package/dist/__tests__ copy/sha256.d.ts +0 -1
  135. package/dist/__tests__ copy/sha256.js +0 -16
  136. package/dist/__tests__ copy/sha256.js.map +0 -1
  137. package/dist/__tests__ copy/textRandom.d.ts +0 -1
  138. package/dist/__tests__ copy/textRandom.js +0 -17
  139. package/dist/__tests__ copy/textRandom.js.map +0 -1
  140. package/dist/adapters/toolDbIndexedb.d.ts +0 -9
  141. package/dist/adapters/toolDbIndexedb.js +0 -131
  142. package/dist/adapters/toolDbIndexedb.js.map +0 -1
  143. package/dist/adapters/toolDbLeveldb.d.ts +0 -8
  144. package/dist/adapters/toolDbLeveldb.js +0 -109
  145. package/dist/adapters/toolDbLeveldb.js.map +0 -1
  146. package/dist/adapters/toolDbWeb3User.d.ts +0 -18
  147. package/dist/adapters/toolDbWeb3User.js +0 -74
  148. package/dist/adapters/toolDbWeb3User.js.map +0 -1
  149. package/dist/adapters/toolDbWebrtc.d.ts +0 -58
  150. package/dist/adapters/toolDbWebrtc.js +0 -487
  151. package/dist/adapters/toolDbWebrtc.js.map +0 -1
  152. package/dist/adapters/toolDbWebsocket.d.ts +0 -18
  153. package/dist/adapters/toolDbWebsocket.js +0 -176
  154. package/dist/adapters/toolDbWebsocket.js.map +0 -1
  155. package/dist/adapters-base/networkAdapter.d.ts +0 -58
  156. package/dist/adapters-base/networkAdapter.js +0 -214
  157. package/dist/adapters-base/networkAdapter.js.map +0 -1
  158. package/dist/adapters-base/storageAdapter.d.ts +0 -11
  159. package/dist/adapters-base/storageAdapter.js +0 -36
  160. package/dist/adapters-base/storageAdapter.js.map +0 -1
  161. package/dist/adapters-base/userAdapter.d.ts +0 -15
  162. package/dist/adapters-base/userAdapter.js +0 -42
  163. package/dist/adapters-base/userAdapter.js.map +0 -1
  164. package/dist/bundle.js +0 -69086
  165. package/dist/chain/Block.d.ts +0 -29
  166. package/dist/chain/Block.js +0 -142
  167. package/dist/chain/Block.js.map +0 -1
  168. package/dist/chain/ToolChain.d.ts +0 -27
  169. package/dist/chain/ToolChain.js +0 -253
  170. package/dist/chain/ToolChain.js.map +0 -1
  171. package/dist/chain/Tx.d.ts +0 -50
  172. package/dist/chain/Tx.js +0 -54
  173. package/dist/chain/Tx.js.map +0 -1
  174. package/dist/chain/Wallet.d.ts +0 -9
  175. package/dist/chain/Wallet.js +0 -37
  176. package/dist/chain/Wallet.js.map +0 -1
  177. package/dist/chain/isValidChain.d.ts +0 -1
  178. package/dist/chain/isValidChain.js +0 -37
  179. package/dist/chain/isValidChain.js.map +0 -1
  180. package/dist/chain/mempool.d.ts +0 -0
  181. package/dist/chain/mempool.js +0 -2
  182. package/dist/chain/mempool.js.map +0 -1
  183. package/dist/crdt/baseCrdt.d.ts +0 -9
  184. package/dist/crdt/baseCrdt.js +0 -27
  185. package/dist/crdt/baseCrdt.js.map +0 -1
  186. package/dist/crdt/counterCrdt.d.ts +0 -30
  187. package/dist/crdt/counterCrdt.js +0 -106
  188. package/dist/crdt/counterCrdt.js.map +0 -1
  189. package/dist/crdt/listCrdt.d.ts +0 -42
  190. package/dist/crdt/listCrdt.js +0 -159
  191. package/dist/crdt/listCrdt.js.map +0 -1
  192. package/dist/crdt/mapCrdt.d.ts +0 -32
  193. package/dist/crdt/mapCrdt.js +0 -118
  194. package/dist/crdt/mapCrdt.js.map +0 -1
  195. package/dist/getCrypto.d.ts +0 -1
  196. package/dist/getCrypto.js +0 -10
  197. package/dist/getCrypto.js.map +0 -1
  198. package/dist/index.js +0 -93
  199. package/dist/index.js.map +0 -1
  200. package/dist/infuraFilecoin.d.ts +0 -0
  201. package/dist/infuraFilecoin.js +0 -2
  202. package/dist/infuraFilecoin.js.map +0 -1
  203. package/dist/loadCrdtDocument.d.ts +0 -3
  204. package/dist/loadCrdtDocument.js +0 -43
  205. package/dist/loadCrdtDocument.js.map +0 -1
  206. package/dist/logger.d.ts +0 -2
  207. package/dist/logger.js +0 -29
  208. package/dist/logger.js.map +0 -1
  209. package/dist/makeTx.d.ts +0 -1
  210. package/dist/makeTx.js +0 -27
  211. package/dist/makeTx.js.map +0 -1
  212. package/dist/messageHandlers/handleCrdt.d.ts +0 -2
  213. package/dist/messageHandlers/handleCrdt.js +0 -15
  214. package/dist/messageHandlers/handleCrdt.js.map +0 -1
  215. package/dist/messageHandlers/handleCrdtGet.d.ts +0 -2
  216. package/dist/messageHandlers/handleCrdtGet.js +0 -29
  217. package/dist/messageHandlers/handleCrdtGet.js.map +0 -1
  218. package/dist/messageHandlers/handleCrdtPut.d.ts +0 -2
  219. package/dist/messageHandlers/handleCrdtPut.js +0 -93
  220. package/dist/messageHandlers/handleCrdtPut.js.map +0 -1
  221. package/dist/messageHandlers/handleGet.d.ts +0 -2
  222. package/dist/messageHandlers/handleGet.js +0 -29
  223. package/dist/messageHandlers/handleGet.js.map +0 -1
  224. package/dist/messageHandlers/handleJoin.d.ts +0 -2
  225. package/dist/messageHandlers/handleJoin.js +0 -36
  226. package/dist/messageHandlers/handleJoin.js.map +0 -1
  227. package/dist/messageHandlers/handlePing.d.ts +0 -2
  228. package/dist/messageHandlers/handlePing.js +0 -36
  229. package/dist/messageHandlers/handlePing.js.map +0 -1
  230. package/dist/messageHandlers/handlePong.d.ts +0 -2
  231. package/dist/messageHandlers/handlePong.js +0 -26
  232. package/dist/messageHandlers/handlePong.js.map +0 -1
  233. package/dist/messageHandlers/handlePut.d.ts +0 -2
  234. package/dist/messageHandlers/handlePut.js +0 -57
  235. package/dist/messageHandlers/handlePut.js.map +0 -1
  236. package/dist/messageHandlers/handleQuery.d.ts +0 -2
  237. package/dist/messageHandlers/handleQuery.js +0 -23
  238. package/dist/messageHandlers/handleQuery.js.map +0 -1
  239. package/dist/messageHandlers/handleServers.d.ts +0 -2
  240. package/dist/messageHandlers/handleServers.js +0 -23
  241. package/dist/messageHandlers/handleServers.js.map +0 -1
  242. package/dist/messageHandlers/handleSubscribe.d.ts +0 -2
  243. package/dist/messageHandlers/handleSubscribe.js +0 -44
  244. package/dist/messageHandlers/handleSubscribe.js.map +0 -1
  245. package/dist/sendJoin.d.ts +0 -2
  246. package/dist/sendJoin.js +0 -31
  247. package/dist/sendJoin.js.map +0 -1
  248. package/dist/server.d.ts +0 -1
  249. package/dist/server.js +0 -9
  250. package/dist/server.js.map +0 -1
  251. package/dist/shared.d.ts +0 -2
  252. package/dist/shared.js +0 -7
  253. package/dist/shared.js.map +0 -1
  254. package/dist/test.d.ts +0 -1
  255. package/dist/test.js +0 -17
  256. package/dist/test.js.map +0 -1
  257. package/dist/toolChainServer.d.ts +0 -8
  258. package/dist/toolChainServer.js +0 -60
  259. package/dist/toolChainServer.js.map +0 -1
  260. package/dist/toolDbAnonSignIn.d.ts +0 -2
  261. package/dist/toolDbAnonSignIn.js +0 -7
  262. package/dist/toolDbAnonSignIn.js.map +0 -1
  263. package/dist/toolDbClientOnMessage.d.ts +0 -2
  264. package/dist/toolDbClientOnMessage.js +0 -59
  265. package/dist/toolDbClientOnMessage.js.map +0 -1
  266. package/dist/toolDbCrdtGet.d.ts +0 -9
  267. package/dist/toolDbCrdtGet.js +0 -77
  268. package/dist/toolDbCrdtGet.js.map +0 -1
  269. package/dist/toolDbCrdtPut.d.ts +0 -9
  270. package/dist/toolDbCrdtPut.js +0 -63
  271. package/dist/toolDbCrdtPut.js.map +0 -1
  272. package/dist/toolDbGet.d.ts +0 -9
  273. package/dist/toolDbGet.js +0 -77
  274. package/dist/toolDbGet.js.map +0 -1
  275. package/dist/toolDbGetPubKey.d.ts +0 -2
  276. package/dist/toolDbGetPubKey.js +0 -18
  277. package/dist/toolDbGetPubKey.js.map +0 -1
  278. package/dist/toolDbKeysSignIn.d.ts +0 -2
  279. package/dist/toolDbKeysSignIn.js +0 -16
  280. package/dist/toolDbKeysSignIn.js.map +0 -1
  281. package/dist/toolDbNetwork.d.ts +0 -32
  282. package/dist/toolDbNetwork.js +0 -296
  283. package/dist/toolDbNetwork.js.map +0 -1
  284. package/dist/toolDbNetworkAdapter.d.ts +0 -57
  285. package/dist/toolDbNetworkAdapter.js +0 -188
  286. package/dist/toolDbNetworkAdapter.js.map +0 -1
  287. package/dist/toolDbPut.d.ts +0 -9
  288. package/dist/toolDbPut.js +0 -69
  289. package/dist/toolDbPut.js.map +0 -1
  290. package/dist/toolDbQueryKeys.d.ts +0 -8
  291. package/dist/toolDbQueryKeys.js +0 -66
  292. package/dist/toolDbQueryKeys.js.map +0 -1
  293. package/dist/toolDbSignIn.d.ts +0 -2
  294. package/dist/toolDbSignIn.js +0 -27
  295. package/dist/toolDbSignIn.js.map +0 -1
  296. package/dist/toolDbSignUp.d.ts +0 -2
  297. package/dist/toolDbSignUp.js +0 -101
  298. package/dist/toolDbSignUp.js.map +0 -1
  299. package/dist/toolDbSubscribe.d.ts +0 -9
  300. package/dist/toolDbSubscribe.js +0 -50
  301. package/dist/toolDbSubscribe.js.map +0 -1
  302. package/dist/toolDbVerificationWrapper.d.ts +0 -2
  303. package/dist/toolDbVerificationWrapper.js +0 -98
  304. package/dist/toolDbVerificationWrapper.js.map +0 -1
  305. package/dist/toolDbWeb3User.d.ts +0 -20
  306. package/dist/toolDbWeb3User.js +0 -75
  307. package/dist/toolDbWeb3User.js.map +0 -1
  308. package/dist/toolDbWebrtc.d.ts +0 -75
  309. package/dist/toolDbWebrtc.js +0 -472
  310. package/dist/toolDbWebrtc.js.map +0 -1
  311. package/dist/toolDbWebsocket.d.ts +0 -19
  312. package/dist/toolDbWebsocket.js +0 -187
  313. package/dist/toolDbWebsocket.js.map +0 -1
  314. package/dist/toolchain.d.ts +0 -1
  315. package/dist/toolchain.js +0 -8
  316. package/dist/toolchain.js.map +0 -1
  317. package/dist/tooldb.d.ts +0 -108
  318. package/dist/tooldb.js +0 -285
  319. package/dist/tooldb.js.map +0 -1
  320. package/dist/types/graph.d.ts +0 -0
  321. package/dist/types/graph.js +0 -2
  322. package/dist/types/graph.js.map +0 -1
  323. package/dist/types/message.d.ts +0 -100
  324. package/dist/types/message.js +0 -17
  325. package/dist/types/message.js.map +0 -1
  326. package/dist/types/tooldb.d.ts +0 -79
  327. package/dist/types/tooldb.js +0 -3
  328. package/dist/types/tooldb.js.map +0 -1
  329. package/dist/utils/arrayBufferToBase64.d.ts +0 -1
  330. package/dist/utils/arrayBufferToBase64.js +0 -12
  331. package/dist/utils/arrayBufferToBase64.js.map +0 -1
  332. package/dist/utils/arrayBufferToHex.d.ts +0 -1
  333. package/dist/utils/arrayBufferToHex.js +0 -19
  334. package/dist/utils/arrayBufferToHex.js.map +0 -1
  335. package/dist/utils/arrayBufferToString.d.ts +0 -1
  336. package/dist/utils/arrayBufferToString.js +0 -12
  337. package/dist/utils/arrayBufferToString.js.map +0 -1
  338. package/dist/utils/base64ToArrayBuffer.d.ts +0 -1
  339. package/dist/utils/base64ToArrayBuffer.js +0 -12
  340. package/dist/utils/base64ToArrayBuffer.js.map +0 -1
  341. package/dist/utils/base64ToBinaryChange.d.ts +0 -2
  342. package/dist/utils/base64ToBinaryChange.js +0 -18
  343. package/dist/utils/base64ToBinaryChange.js.map +0 -1
  344. package/dist/utils/base64ToBinaryDocument.d.ts +0 -2
  345. package/dist/utils/base64ToBinaryDocument.js +0 -18
  346. package/dist/utils/base64ToBinaryDocument.js.map +0 -1
  347. package/dist/utils/base64ToHex.d.ts +0 -1
  348. package/dist/utils/base64ToHex.js +0 -13
  349. package/dist/utils/base64ToHex.js.map +0 -1
  350. package/dist/utils/base64ToUint8.d.ts +0 -1
  351. package/dist/utils/base64ToUint8.js +0 -17
  352. package/dist/utils/base64ToUint8.js.map +0 -1
  353. package/dist/utils/catchReturn.d.ts +0 -1
  354. package/dist/utils/catchReturn.js +0 -8
  355. package/dist/utils/catchReturn.js.map +0 -1
  356. package/dist/utils/crypto/base64KeyToHex.d.ts +0 -1
  357. package/dist/utils/crypto/base64KeyToHex.js +0 -24
  358. package/dist/utils/crypto/base64KeyToHex.js.map +0 -1
  359. package/dist/utils/crypto/base64PublicKeyToHex.d.ts +0 -1
  360. package/dist/utils/crypto/base64PublicKeyToHex.js +0 -22
  361. package/dist/utils/crypto/base64PublicKeyToHex.js.map +0 -1
  362. package/dist/utils/crypto/decodeKeyString.d.ts +0 -1
  363. package/dist/utils/crypto/decodeKeyString.js +0 -13
  364. package/dist/utils/crypto/decodeKeyString.js.map +0 -1
  365. package/dist/utils/crypto/decryptData.d.ts +0 -1
  366. package/dist/utils/crypto/decryptData.js +0 -28
  367. package/dist/utils/crypto/decryptData.js.map +0 -1
  368. package/dist/utils/crypto/decryptWithPass.d.ts +0 -1
  369. package/dist/utils/crypto/decryptWithPass.js +0 -23
  370. package/dist/utils/crypto/decryptWithPass.js.map +0 -1
  371. package/dist/utils/crypto/deriveSecret.d.ts +0 -1
  372. package/dist/utils/crypto/deriveSecret.js +0 -18
  373. package/dist/utils/crypto/deriveSecret.js.map +0 -1
  374. package/dist/utils/crypto/encodeKeyString.d.ts +0 -1
  375. package/dist/utils/crypto/encodeKeyString.js +0 -13
  376. package/dist/utils/crypto/encodeKeyString.js.map +0 -1
  377. package/dist/utils/crypto/encryptData.d.ts +0 -1
  378. package/dist/utils/crypto/encryptData.js +0 -30
  379. package/dist/utils/crypto/encryptData.js.map +0 -1
  380. package/dist/utils/crypto/encryptWithPass.d.ts +0 -1
  381. package/dist/utils/crypto/encryptWithPass.js +0 -26
  382. package/dist/utils/crypto/encryptWithPass.js.map +0 -1
  383. package/dist/utils/crypto/exportKey.d.ts +0 -1
  384. package/dist/utils/crypto/exportKey.js +0 -14
  385. package/dist/utils/crypto/exportKey.js.map +0 -1
  386. package/dist/utils/crypto/exportKeyAsHex.d.ts +0 -1
  387. package/dist/utils/crypto/exportKeyAsHex.js +0 -18
  388. package/dist/utils/crypto/exportKeyAsHex.js.map +0 -1
  389. package/dist/utils/crypto/generateKeyFromPassword.d.ts +0 -1
  390. package/dist/utils/crypto/generateKeyFromPassword.js +0 -25
  391. package/dist/utils/crypto/generateKeyFromPassword.js.map +0 -1
  392. package/dist/utils/crypto/generateKeyPair.d.ts +0 -1
  393. package/dist/utils/crypto/generateKeyPair.js +0 -17
  394. package/dist/utils/crypto/generateKeyPair.js.map +0 -1
  395. package/dist/utils/crypto/generateKeysComb.d.ts +0 -4
  396. package/dist/utils/crypto/generateKeysComb.js +0 -60
  397. package/dist/utils/crypto/generateKeysComb.js.map +0 -1
  398. package/dist/utils/crypto/importKey.d.ts +0 -1
  399. package/dist/utils/crypto/importKey.js +0 -23
  400. package/dist/utils/crypto/importKey.js.map +0 -1
  401. package/dist/utils/crypto/loadKeysComb.d.ts +0 -5
  402. package/dist/utils/crypto/loadKeysComb.js +0 -90
  403. package/dist/utils/crypto/loadKeysComb.js.map +0 -1
  404. package/dist/utils/crypto/loadSignKeys.d.ts +0 -2
  405. package/dist/utils/crypto/loadSignKeys.js +0 -78
  406. package/dist/utils/crypto/loadSignKeys.js.map +0 -1
  407. package/dist/utils/crypto/recoverPubKey.d.ts +0 -1
  408. package/dist/utils/crypto/recoverPubKey.js +0 -27
  409. package/dist/utils/crypto/recoverPubKey.js.map +0 -1
  410. package/dist/utils/crypto/recoverPubKeyFromPrivate.d.ts +0 -1
  411. package/dist/utils/crypto/recoverPubKeyFromPrivate.js +0 -16
  412. package/dist/utils/crypto/recoverPubKeyFromPrivate.js.map +0 -1
  413. package/dist/utils/crypto/saveKeysComb.d.ts +0 -2
  414. package/dist/utils/crypto/saveKeysComb.js +0 -75
  415. package/dist/utils/crypto/saveKeysComb.js.map +0 -1
  416. package/dist/utils/crypto/saveSignKeys.d.ts +0 -2
  417. package/dist/utils/crypto/saveSignKeys.js +0 -67
  418. package/dist/utils/crypto/saveSignKeys.js.map +0 -1
  419. package/dist/utils/crypto/verifyData.d.ts +0 -1
  420. package/dist/utils/crypto/verifyData.js +0 -20
  421. package/dist/utils/crypto/verifyData.js.map +0 -1
  422. package/dist/utils/encoding/arrayBufferToBase64.d.ts +0 -1
  423. package/dist/utils/encoding/arrayBufferToBase64.js +0 -12
  424. package/dist/utils/encoding/arrayBufferToBase64.js.map +0 -1
  425. package/dist/utils/encoding/arrayBufferToHex.d.ts +0 -1
  426. package/dist/utils/encoding/arrayBufferToHex.js +0 -19
  427. package/dist/utils/encoding/arrayBufferToHex.js.map +0 -1
  428. package/dist/utils/encoding/arrayBufferToString.d.ts +0 -1
  429. package/dist/utils/encoding/arrayBufferToString.js +0 -12
  430. package/dist/utils/encoding/arrayBufferToString.js.map +0 -1
  431. package/dist/utils/encoding/base64ToArrayBuffer.d.ts +0 -1
  432. package/dist/utils/encoding/base64ToArrayBuffer.js +0 -12
  433. package/dist/utils/encoding/base64ToArrayBuffer.js.map +0 -1
  434. package/dist/utils/encoding/base64ToBinaryChange.d.ts +0 -2
  435. package/dist/utils/encoding/base64ToBinaryChange.js +0 -18
  436. package/dist/utils/encoding/base64ToBinaryChange.js.map +0 -1
  437. package/dist/utils/encoding/base64ToBinaryDocument.d.ts +0 -2
  438. package/dist/utils/encoding/base64ToBinaryDocument.js +0 -18
  439. package/dist/utils/encoding/base64ToBinaryDocument.js.map +0 -1
  440. package/dist/utils/encoding/base64ToHex.d.ts +0 -1
  441. package/dist/utils/encoding/base64ToHex.js +0 -13
  442. package/dist/utils/encoding/base64ToHex.js.map +0 -1
  443. package/dist/utils/encoding/base64ToUint8.d.ts +0 -1
  444. package/dist/utils/encoding/base64ToUint8.js +0 -17
  445. package/dist/utils/encoding/base64ToUint8.js.map +0 -1
  446. package/dist/utils/encoding/fromBase64.d.ts +0 -1
  447. package/dist/utils/encoding/fromBase64.js +0 -7
  448. package/dist/utils/encoding/fromBase64.js.map +0 -1
  449. package/dist/utils/encoding/hexToArrayBuffer.d.ts +0 -1
  450. package/dist/utils/encoding/hexToArrayBuffer.js +0 -15
  451. package/dist/utils/encoding/hexToArrayBuffer.js.map +0 -1
  452. package/dist/utils/encoding/hexToBase64.d.ts +0 -1
  453. package/dist/utils/encoding/hexToBase64.js +0 -12
  454. package/dist/utils/encoding/hexToBase64.js.map +0 -1
  455. package/dist/utils/encoding/hexToString.d.ts +0 -1
  456. package/dist/utils/encoding/hexToString.js +0 -12
  457. package/dist/utils/encoding/hexToString.js.map +0 -1
  458. package/dist/utils/encoding/hexToUint8.d.ts +0 -1
  459. package/dist/utils/encoding/hexToUint8.js +0 -8
  460. package/dist/utils/encoding/hexToUint8.js.map +0 -1
  461. package/dist/utils/encoding/stringToArrayBuffer.d.ts +0 -1
  462. package/dist/utils/encoding/stringToArrayBuffer.js +0 -12
  463. package/dist/utils/encoding/stringToArrayBuffer.js.map +0 -1
  464. package/dist/utils/encoding/toBase64.d.ts +0 -1
  465. package/dist/utils/encoding/toBase64.js +0 -7
  466. package/dist/utils/encoding/toBase64.js.map +0 -1
  467. package/dist/utils/encoding/uint8ArrayToHex.d.ts +0 -1
  468. package/dist/utils/encoding/uint8ArrayToHex.js +0 -7
  469. package/dist/utils/encoding/uint8ArrayToHex.js.map +0 -1
  470. package/dist/utils/encoding/uint8ToBase64.d.ts +0 -1
  471. package/dist/utils/encoding/uint8ToBase64.js +0 -15
  472. package/dist/utils/encoding/uint8ToBase64.js.map +0 -1
  473. package/dist/utils/fromBase64.d.ts +0 -1
  474. package/dist/utils/fromBase64.js +0 -7
  475. package/dist/utils/fromBase64.js.map +0 -1
  476. package/dist/utils/generateIv.d.ts +0 -1
  477. package/dist/utils/generateIv.js +0 -12
  478. package/dist/utils/generateIv.js.map +0 -1
  479. package/dist/utils/getPeerSignature.d.ts +0 -2
  480. package/dist/utils/getPeerSignature.js +0 -9
  481. package/dist/utils/getPeerSignature.js.map +0 -1
  482. package/dist/utils/getTimestamp.d.ts +0 -1
  483. package/dist/utils/getTimestamp.js +0 -7
  484. package/dist/utils/getTimestamp.js.map +0 -1
  485. package/dist/utils/hexToArrayBuffer.d.ts +0 -1
  486. package/dist/utils/hexToArrayBuffer.js +0 -15
  487. package/dist/utils/hexToArrayBuffer.js.map +0 -1
  488. package/dist/utils/hexToBase64.d.ts +0 -1
  489. package/dist/utils/hexToBase64.js +0 -12
  490. package/dist/utils/hexToBase64.js.map +0 -1
  491. package/dist/utils/hexToString.d.ts +0 -1
  492. package/dist/utils/hexToString.js +0 -12
  493. package/dist/utils/hexToString.js.map +0 -1
  494. package/dist/utils/hexToUint8.d.ts +0 -1
  495. package/dist/utils/hexToUint8.js +0 -8
  496. package/dist/utils/hexToUint8.js.map +0 -1
  497. package/dist/utils/indexedb.d.ts +0 -2
  498. package/dist/utils/indexedb.js +0 -116
  499. package/dist/utils/indexedb.js.map +0 -1
  500. package/dist/utils/leveldb.d.ts +0 -2
  501. package/dist/utils/leveldb.js +0 -83
  502. package/dist/utils/leveldb.js.map +0 -1
  503. package/dist/utils/proofOfWork.d.ts +0 -4
  504. package/dist/utils/proofOfWork.js +0 -16
  505. package/dist/utils/proofOfWork.js.map +0 -1
  506. package/dist/utils/randomAnimal.d.ts +0 -1
  507. package/dist/utils/randomAnimal.js +0 -77
  508. package/dist/utils/randomAnimal.js.map +0 -1
  509. package/dist/utils/sha1.d.ts +0 -1
  510. package/dist/utils/sha1.js +0 -13
  511. package/dist/utils/sha1.js.map +0 -1
  512. package/dist/utils/sha256.d.ts +0 -3
  513. package/dist/utils/sha256.js +0 -13
  514. package/dist/utils/sha256.js.map +0 -1
  515. package/dist/utils/signData.d.ts +0 -1
  516. package/dist/utils/signData.js +0 -19
  517. package/dist/utils/signData.js.map +0 -1
  518. package/dist/utils/stringToArrayBuffer.d.ts +0 -1
  519. package/dist/utils/stringToArrayBuffer.js +0 -12
  520. package/dist/utils/stringToArrayBuffer.js.map +0 -1
  521. package/dist/utils/textRandom.d.ts +0 -1
  522. package/dist/utils/textRandom.js +0 -15
  523. package/dist/utils/textRandom.js.map +0 -1
  524. package/dist/utils/toBase64.d.ts +0 -1
  525. package/dist/utils/toBase64.js +0 -7
  526. package/dist/utils/toBase64.js.map +0 -1
  527. package/dist/utils/uint8ArrayToHex.d.ts +0 -2
  528. package/dist/utils/uint8ArrayToHex.js +0 -7
  529. package/dist/utils/uint8ArrayToHex.js.map +0 -1
  530. package/dist/utils/uint8ToBase64.d.ts +0 -2
  531. package/dist/utils/uint8ToBase64.js +0 -15
  532. package/dist/utils/uint8ToBase64.js.map +0 -1
  533. package/dist/utils/uniq.d.ts +0 -1
  534. package/dist/utils/uniq.js +0 -7
  535. package/dist/utils/uniq.js.map +0 -1
  536. package/dist/utils/verifyMessage.d.ts +0 -8
  537. package/dist/utils/verifyMessage.js +0 -129
  538. package/dist/utils/verifyMessage.js.map +0 -1
  539. package/dist/utils/verifyPeer.d.ts +0 -2
  540. package/dist/utils/verifyPeer.js +0 -15
  541. package/dist/utils/verifyPeer.js.map +0 -1
  542. package/jest.config.ts +0 -195
  543. package/jest.setup.js +0 -0
  544. package/test-alice/000216.ldb +0 -0
  545. package/test-alice/000218.ldb +0 -0
  546. package/test-alice/000221.ldb +0 -0
  547. package/test-alice/000224.ldb +0 -0
  548. package/test-alice/000225.log +0 -0
  549. package/test-alice/CURRENT +0 -1
  550. package/test-alice/LOCK +0 -0
  551. package/test-alice/LOG +0 -5
  552. package/test-alice/LOG.old +0 -5
  553. package/test-alice/MANIFEST-000223 +0 -0
  554. package/test-base-client/000019.log +0 -0
  555. package/test-base-client/CURRENT +0 -1
  556. package/test-base-client/LOCK +0 -0
  557. package/test-base-client/LOG +0 -3
  558. package/test-base-client/LOG.old +0 -3
  559. package/test-base-client/MANIFEST-000018 +0 -0
  560. package/test-base-server/000019.log +0 -0
  561. package/test-base-server/CURRENT +0 -1
  562. package/test-base-server/LOCK +0 -0
  563. package/test-base-server/LOG +0 -3
  564. package/test-base-server/LOG.old +0 -3
  565. package/test-base-server/MANIFEST-000018 +0 -0
  566. package/test-bob/000231.ldb +0 -0
  567. package/test-bob/000233.ldb +0 -0
  568. package/test-bob/000234.log +0 -0
  569. package/test-bob/CURRENT +0 -1
  570. package/test-bob/LOCK +0 -0
  571. package/test-bob/LOG +0 -5
  572. package/test-bob/LOG.old +0 -14
  573. package/test-bob/MANIFEST-000232 +0 -0
  574. package/test-chris/000005.ldb +0 -0
  575. package/test-chris/000008.ldb +0 -0
  576. package/test-chris/000009.log +0 -0
  577. package/test-chris/CURRENT +0 -1
  578. package/test-chris/LOCK +0 -0
  579. package/test-chris/LOG +0 -5
  580. package/test-chris/LOG.old +0 -5
  581. package/test-chris/MANIFEST-000007 +0 -0
  582. package/test-node-a/000246.ldb +0 -0
  583. package/test-node-a/000248.ldb +0 -0
  584. package/test-node-a/000249.log +0 -0
  585. package/test-node-a/CURRENT +0 -1
  586. package/test-node-a/LOCK +0 -0
  587. package/test-node-a/LOG +0 -5
  588. package/test-node-a/LOG.old +0 -14
  589. package/test-node-a/MANIFEST-000247 +0 -0
  590. package/test-node-b/000246.ldb +0 -0
  591. package/test-node-b/000248.ldb +0 -0
  592. package/test-node-b/000249.log +0 -0
  593. package/test-node-b/CURRENT +0 -1
  594. package/test-node-b/LOCK +0 -0
  595. package/test-node-b/LOG +0 -5
  596. package/test-node-b/LOG.old +0 -14
  597. package/test-node-b/MANIFEST-000247 +0 -0
  598. package/test-store/000005.ldb +0 -0
  599. package/test-store/000008.ldb +0 -0
  600. package/test-store/000011.ldb +0 -0
  601. package/test-store/000014.ldb +0 -0
  602. package/test-store/000017.ldb +0 -0
  603. package/test-store/000018.log +0 -0
  604. package/test-store/CURRENT +0 -1
  605. package/test-store/LOCK +0 -0
  606. package/test-store/LOG +0 -6
  607. package/test-store/LOG.old +0 -6
  608. package/test-store/MANIFEST-000016 +0 -0
  609. package/test-verify-a/000059.ldb +0 -0
  610. package/test-verify-a/000066.log +0 -0
  611. package/test-verify-a/CURRENT +0 -1
  612. package/test-verify-a/LOCK +0 -0
  613. package/test-verify-a/LOG +0 -3
  614. package/test-verify-a/LOG.old +0 -3
  615. package/test-verify-a/MANIFEST-000065 +0 -0
package/lib/tooldb.ts ADDED
@@ -0,0 +1,314 @@
1
+ import EventEmitter from "events";
2
+
3
+ import {
4
+ VerificationData,
5
+ verifyMessage,
6
+ randomAnimal,
7
+ ToolDbOptions,
8
+ ToolDbNetworkAdapter,
9
+ ToolDbStorageAdapter,
10
+ ToolDbUserAdapter,
11
+ ToolDbMessage,
12
+ Peer,
13
+ } from ".";
14
+
15
+ import toolDbGet from "./toolDbGet";
16
+ import toolDbPut from "./toolDbPut";
17
+ import toolDbSignIn from "./toolDbSignIn";
18
+ import toolDbSignUp from "./toolDbSignUp";
19
+ import toolDbCrdtGet from "./toolDbCrdtGet";
20
+ import toolDbCrdtPut from "./toolDbCrdtPut";
21
+
22
+ import toolDbAnonSignIn from "./toolDbAnonSignIn";
23
+ import toolDbClientOnMessage from "./toolDbClientOnMessage";
24
+ import toolDbVerificationWrapper from "./toolDbVerificationWrapper";
25
+
26
+ import toolDbQueryKeys from "./toolDbQueryKeys";
27
+ import toolDbKeysSignIn from "./toolDbKeysSignIn";
28
+ import toolDbSubscribe from "./toolDbSubscribe";
29
+
30
+ import handleGet from "./messageHandlers/handleGet";
31
+ import handlePut from "./messageHandlers/handlePut";
32
+ import handlePing from "./messageHandlers/handlePing";
33
+ import handlePong from "./messageHandlers/handlePong";
34
+ import handleQuery from "./messageHandlers/handleQuery";
35
+ import handleCrdtGet from "./messageHandlers/handleCrdtGet";
36
+ import handleCrdtPut from "./messageHandlers/handleCrdtPut";
37
+ import handleSubscribe from "./messageHandlers/handleSubscribe";
38
+
39
+ import logger from "./logger";
40
+
41
+ export interface Listener<T = any> {
42
+ key: string;
43
+ timeout: number | null;
44
+ fn: (msg: VerificationData<T>) => void;
45
+ }
46
+
47
+ interface Verificator<T> {
48
+ key: string;
49
+ fn: (
50
+ msg: VerificationData<T>,
51
+ previousData: T | undefined
52
+ ) => Promise<boolean>;
53
+ }
54
+
55
+ export default class ToolDb extends EventEmitter {
56
+ private _network;
57
+ private _store: ToolDbStorageAdapter;
58
+ private _serverPeers: Peer[] = [];
59
+ private _peerAccount: ToolDbUserAdapter;
60
+ private _userAccount: ToolDbUserAdapter;
61
+
62
+ public logger = logger;
63
+
64
+ public clientOnMessage = toolDbClientOnMessage;
65
+
66
+ public verifyMessage = verifyMessage;
67
+
68
+ private _subscriptions: string[] = [];
69
+
70
+ get subscriptions() {
71
+ return this._subscriptions;
72
+ }
73
+
74
+ private _processedIds: Record<string, string[]> = {};
75
+
76
+ get processedIds() {
77
+ return this._processedIds;
78
+ }
79
+
80
+ private _processedOutHashes: Record<string, string[]> = {};
81
+
82
+ get processedOutHashes() {
83
+ return this._processedOutHashes;
84
+ }
85
+
86
+ public subscribeData = toolDbSubscribe;
87
+
88
+ public isConnected = false;
89
+
90
+ /**
91
+ * Emitted after a disconnection, when there are no more peers connected to.
92
+ */
93
+ public onDisconnect = () => {
94
+ //
95
+ };
96
+
97
+ /**
98
+ * Emitted the first time we are connected to a peer.
99
+ */
100
+ public onConnect = () => {
101
+ //
102
+ };
103
+
104
+ public onPeerDisconnect = (peerId: string) => {
105
+ //
106
+ };
107
+
108
+ public onPeerConnect = (peerId: string) => {
109
+ //
110
+ };
111
+
112
+ public getData = toolDbGet;
113
+
114
+ public putData = toolDbPut;
115
+
116
+ public putCrdt = toolDbCrdtPut;
117
+
118
+ public getCrdt = toolDbCrdtGet;
119
+
120
+ public queryKeys = toolDbQueryKeys;
121
+
122
+ public signIn = toolDbSignIn;
123
+
124
+ public anonSignIn = toolDbAnonSignIn;
125
+
126
+ public keysSignIn = toolDbKeysSignIn;
127
+
128
+ public signUp = toolDbSignUp;
129
+
130
+ public verify = toolDbVerificationWrapper;
131
+
132
+ // All message handlers go here
133
+ public handlePing = handlePing;
134
+ public handlePong = handlePong;
135
+ public handleCrdtGet = handleCrdtGet;
136
+ public handleCrdtPut = handleCrdtPut;
137
+ public handleGet = handleGet;
138
+ public handlePut = handlePut;
139
+ public handleQuery = handleQuery;
140
+ public handleSubscribe = handleSubscribe;
141
+
142
+ /**
143
+ * id listeners listen for a specific message ID just once
144
+ */
145
+ public _idListeners: Record<string, (msg: ToolDbMessage) => void> = {};
146
+
147
+ public addIdListener = (id: string, fn: (msg: ToolDbMessage) => void) => {
148
+ this._idListeners[id] = fn;
149
+ };
150
+
151
+ public removeIdListener = (id: string) => {
152
+ delete this._idListeners[id];
153
+ };
154
+
155
+ public getUserNamespacedKey(key: string) {
156
+ return ":" + (this.userAccount?.getAddress() || "") + "." + key;
157
+ }
158
+
159
+ /**
160
+ * Key listeners listen for a specific key, as long as the listener remains active
161
+ */
162
+ public _keyListeners: (Listener | null)[] = [];
163
+
164
+ public addKeyListener = <T>(
165
+ key: string,
166
+ fn: (msg: VerificationData<T>) => void
167
+ ) => {
168
+ this.logger(`Add key listener: ${key}`);
169
+
170
+ const newListener: Listener = {
171
+ key,
172
+ timeout: null,
173
+ fn,
174
+ };
175
+ this._keyListeners.push(newListener);
176
+
177
+ return this._keyListeners.length - 1;
178
+ };
179
+
180
+ public removeKeyListener = (id: number) => {
181
+ if (this._keyListeners[id]?.timeout) {
182
+ clearTimeout(this._keyListeners[id]?.timeout || undefined);
183
+ }
184
+
185
+ this._keyListeners[id] = null;
186
+ };
187
+
188
+ public triggerKeyListener = <T = any>(
189
+ key: string,
190
+ message: VerificationData<T>
191
+ ) => {
192
+ this._keyListeners.forEach((listener) => {
193
+ if (listener?.key === key) {
194
+ this.logger(`Trigger key listener: ${key}`);
195
+ if (listener.timeout) {
196
+ clearTimeout(listener.timeout);
197
+ }
198
+ listener.timeout = setTimeout(
199
+ () => listener.fn(message),
200
+
201
+ this.options.triggerDebouce
202
+ ) as any;
203
+ }
204
+ });
205
+ };
206
+
207
+ /**
208
+ * Custom verificators can enhance default verification on any key field
209
+ */
210
+ public _customVerificator: (Verificator<any> | null)[] = [];
211
+
212
+ public addCustomVerification = <T = any>(
213
+ key: string,
214
+ fn: (msg: VerificationData<T>, previous: T | undefined) => Promise<boolean>
215
+ ) => {
216
+ const newListener: Verificator<T> = {
217
+ key,
218
+ fn,
219
+ };
220
+
221
+ this._customVerificator.push(newListener);
222
+ return this._customVerificator.length;
223
+ };
224
+
225
+ public removeCustomVerification = (id: number) => {
226
+ this._customVerificator[id] = null;
227
+ };
228
+
229
+ private _options: ToolDbOptions = {
230
+ peers: [],
231
+ maxRetries: 5,
232
+ triggerDebouce: 100,
233
+ wait: 2000,
234
+ pow: 0,
235
+ server: false,
236
+ host: "127.0.0.1",
237
+ port: 8080,
238
+ debug: false,
239
+ httpServer: undefined,
240
+ networkAdapter: ToolDbNetworkAdapter,
241
+ storageAdapter: ToolDbStorageAdapter,
242
+ userAdapter: ToolDbUserAdapter,
243
+ storageName: "tooldb",
244
+ topic: "tool-db-default",
245
+ };
246
+
247
+ get options() {
248
+ return this._options;
249
+ }
250
+
251
+ get network() {
252
+ return this._network;
253
+ }
254
+
255
+ get serverPeers() {
256
+ return this._serverPeers;
257
+ }
258
+
259
+ get store() {
260
+ return this._store;
261
+ }
262
+
263
+ get userAccount() {
264
+ return this._userAccount;
265
+ }
266
+
267
+ get peerAccount() {
268
+ return this._peerAccount;
269
+ }
270
+
271
+ constructor(options: Partial<ToolDbOptions> = {}) {
272
+ super();
273
+ this._options = { ...this.options, ...options };
274
+
275
+ this._store = new this.options.storageAdapter(this);
276
+ this._peerAccount = new this.options.userAdapter(this);
277
+ this._userAccount = new this.options.userAdapter(this);
278
+
279
+ this._network = new this.options.networkAdapter(this);
280
+
281
+ const DEFAULT_KEYS = "%default-peer%";
282
+
283
+ // DO NOT USE THE DEFAULT STORE FOR KEYS
284
+ const tempStore = new this.options.storageAdapter(
285
+ this,
286
+ "_____peer_" + this.options.storageName
287
+ );
288
+
289
+ tempStore
290
+ .get(DEFAULT_KEYS)
291
+ .then((val) => {
292
+ this.peerAccount
293
+ .decryptAccount(JSON.parse(val), DEFAULT_KEYS)
294
+ .then((a) => {
295
+ this.peerAccount.setUser(a, randomAnimal());
296
+ })
297
+ .finally(() => {
298
+ this.emit("init", this.userAccount.getAddress());
299
+ });
300
+ })
301
+ .catch((_e) => {
302
+ this.peerAccount.encryptAccount(DEFAULT_KEYS).then((a) => {
303
+ tempStore
304
+ .put(DEFAULT_KEYS, JSON.stringify(a))
305
+ .catch(() => {
306
+ // nothing
307
+ })
308
+ .finally(() => {
309
+ this.emit("init", this.userAccount.getAddress());
310
+ });
311
+ });
312
+ });
313
+ }
314
+ }
@@ -0,0 +1,133 @@
1
+ import { Peer } from "..";
2
+
3
+ export enum VerifyResult {
4
+ CustomVerificationFailed = "CustomVerificationFailed",
5
+ InvalidData = "InvalidData",
6
+ InvalidVerification = "InvalidVerification",
7
+ CantOverwrite = "CantOverwrite",
8
+ InvalidTimestamp = "InvalidTimestamp",
9
+ AddressMismatch = "AddressMismatch",
10
+ NoProofOfWork = "NoProofOfWork",
11
+ InvalidHashNonce = "InvalidHashNonce",
12
+ InvalidSignature = "InvalidSignature",
13
+ Verified = "Verified",
14
+ }
15
+
16
+ export interface VerificationData<T = any> {
17
+ /**
18
+ * Key/id
19
+ */
20
+ k: string;
21
+ /**
22
+ * Address
23
+ */
24
+ a: string;
25
+ /**
26
+ * Nonce
27
+ */
28
+ n: number;
29
+ /**
30
+ * Hash of JSON.stringify(value) + nonce
31
+ */
32
+ h: string;
33
+ /**
34
+ * Timestamp this was created
35
+ */
36
+ t: number;
37
+ /**
38
+ * Signature
39
+ */
40
+ s: string;
41
+ /**
42
+ * Value
43
+ */
44
+ v: T;
45
+ /**
46
+ * CRDT type (null for regular values)
47
+ */
48
+ c: string | null;
49
+ }
50
+
51
+ export type MessageType =
52
+ | "ping"
53
+ | "pong"
54
+ | "query"
55
+ | "queryAck"
56
+ | "subscribe"
57
+ | "get"
58
+ | "put"
59
+ | "crdtPut"
60
+ | "crdtGet"
61
+ | "crdt";
62
+
63
+ export interface BaseMessage {
64
+ type: MessageType;
65
+ /**
66
+ * Unique random id for the message, to ack back
67
+ */
68
+ id: string;
69
+ /**
70
+ * Who was this message sent to already
71
+ */
72
+ to: string[];
73
+ }
74
+
75
+ export interface PingMessage extends BaseMessage {
76
+ type: "ping";
77
+ isServer: boolean;
78
+ clientId: string;
79
+ peer: Peer;
80
+ }
81
+
82
+ export interface PongMessage extends BaseMessage {
83
+ type: "pong";
84
+ isServer: boolean;
85
+ clientId: string;
86
+ servers: Peer[];
87
+ }
88
+
89
+ export interface QueryMessage extends BaseMessage {
90
+ type: "query";
91
+ key: string; // key we want to get
92
+ }
93
+
94
+ export interface QueryAckMessage extends BaseMessage {
95
+ type: "queryAck";
96
+ keys: string[];
97
+ }
98
+
99
+ export interface SubscribeMessage extends BaseMessage {
100
+ type: "subscribe";
101
+ key: string;
102
+ }
103
+
104
+ export interface GetMessage extends BaseMessage {
105
+ type: "get";
106
+ key: string; // key we want to get
107
+ }
108
+
109
+ export interface PutMessage<T = any> extends BaseMessage {
110
+ type: "put";
111
+ data: VerificationData<T>;
112
+ }
113
+
114
+ export interface CrdtPutMessage<T = any> extends BaseMessage {
115
+ type: "crdtPut";
116
+ data: VerificationData<T>;
117
+ }
118
+
119
+ export interface CrdtGetMessage<T = any> extends BaseMessage {
120
+ type: "crdtGet";
121
+ key: string;
122
+ }
123
+
124
+ export type ToolDbMessage =
125
+ | PingMessage
126
+ | PongMessage
127
+ | QueryMessage
128
+ | QueryAckMessage
129
+ | SubscribeMessage
130
+ | GetMessage
131
+ | PutMessage
132
+ | CrdtPutMessage
133
+ | CrdtGetMessage;
@@ -0,0 +1,89 @@
1
+ import { Server as HTTPServer } from "http";
2
+ import { Server as HTTPSServer } from "https";
3
+
4
+ import {
5
+ ToolDb,
6
+ ToolDbMessage,
7
+ ToolDbNetworkAdapter,
8
+ ToolDbStorageAdapter,
9
+ ToolDbUserAdapter,
10
+ } from "..";
11
+
12
+ export interface Peer {
13
+ topic: string;
14
+ timestamp: number;
15
+ host: string;
16
+ port: number;
17
+ address: string;
18
+ sig: string;
19
+ }
20
+
21
+ export type ToolDbMessageHandler = (
22
+ this: ToolDb,
23
+ message: ToolDbMessage,
24
+ remotePeerId: string
25
+ ) => void;
26
+
27
+ export interface ToolDbOptions {
28
+ /**
29
+ * Show debug console logs
30
+ */
31
+ debug: boolean;
32
+ /**
33
+ * Array of peers to connect to
34
+ */
35
+ peers: { host: string; port: number }[];
36
+ /**
37
+ * Max number of tries when a connection fails
38
+ */
39
+ maxRetries: number;
40
+ /**
41
+ * How long to wait (max) for a debounced key listener recv
42
+ */
43
+ triggerDebouce: number;
44
+ /**
45
+ * How long to wait between retries
46
+ */
47
+ wait: number;
48
+ /**
49
+ * Port to listen incoming connections (server only)
50
+ */
51
+ pow: number;
52
+ /**
53
+ * Whether we are a server or not
54
+ */
55
+ server: boolean;
56
+ /**
57
+ * A server instance like Express (server only)
58
+ */
59
+ httpServer: HTTPServer | HTTPSServer | undefined;
60
+ /**
61
+ * Our hostname (server only)
62
+ */
63
+ host: string;
64
+ /**
65
+ * Port to listen incoming connections (server only, default is 8080)
66
+ */
67
+ port: number;
68
+ /**
69
+ * Our storage namespace (default is "tooldb")
70
+ */
71
+ storageName: string;
72
+ /**
73
+ * A custom network adapter class
74
+ */
75
+ networkAdapter: typeof ToolDbNetworkAdapter;
76
+ /**
77
+ * A custom storage adapter function
78
+ */
79
+ storageAdapter: typeof ToolDbStorageAdapter;
80
+ /**
81
+ * A custom user storage and validation adapter class
82
+ */
83
+ userAdapter: typeof ToolDbUserAdapter;
84
+ /**
85
+ * The namespace/topic of our app (default is "tool-db-default")
86
+ */
87
+ topic: string;
88
+ // [extra: string]: any;
89
+ }
@@ -0,0 +1,4 @@
1
+ export default function catchReturn(arg: any) {
2
+ // console.error(arg);
3
+ return undefined;
4
+ }
@@ -0,0 +1,18 @@
1
+ export default function arrayBufferToHex(buffer: ArrayBuffer) {
2
+ const data_view = new DataView(buffer);
3
+ let iii;
4
+ let len;
5
+ let hex = "";
6
+ let c;
7
+
8
+ for (iii = 0, len = data_view.byteLength; iii < len; iii += 1) {
9
+ c = data_view.getUint8(iii).toString(16);
10
+ if (c.length < 2) {
11
+ c = "0" + c;
12
+ }
13
+
14
+ hex += c;
15
+ }
16
+
17
+ return hex.toLowerCase();
18
+ }
@@ -0,0 +1,8 @@
1
+ export default function arrayBufferToString(arr: ArrayBuffer) {
2
+ const byteArray = new Uint8Array(arr);
3
+ let byteString = "";
4
+ for (let i = 0; i < byteArray.byteLength; i += 1) {
5
+ byteString += String.fromCodePoint(byteArray[i]);
6
+ }
7
+ return byteString;
8
+ }
@@ -0,0 +1,13 @@
1
+ export default function hexToArrayBuffer(hex: string): ArrayBuffer {
2
+ const pairs = hex.toUpperCase().match(/[\dA-F]{2}/gi);
3
+
4
+ if (!pairs) return new Uint8Array();
5
+
6
+ // convert the octets to integers
7
+ const integers = pairs.map((s) => {
8
+ return parseInt(s, 16);
9
+ });
10
+
11
+ const array = new Uint8Array(integers);
12
+ return array.buffer;
13
+ }
@@ -0,0 +1,8 @@
1
+ export default function hexToString(hexString: string) {
2
+ const hex = hexString.toString();
3
+ let str = "";
4
+ for (let n = 0; n < hex.length; n += 2) {
5
+ str += String.fromCharCode(parseInt(hex.substr(n, 2), 16));
6
+ }
7
+ return str;
8
+ }
@@ -0,0 +1,5 @@
1
+ import { hexToArrayBuffer } from "../..";
2
+
3
+ export default function hexToUint8(hex: string) {
4
+ return new Uint8Array(hexToArrayBuffer(hex));
5
+ }
@@ -0,0 +1,8 @@
1
+ export default function stringToArrayBuffer(str: string) {
2
+ const buf = new ArrayBuffer(str.length);
3
+ const bufView = new Uint8Array(buf);
4
+ for (let i = 0, strLen = str.length; i < strLen; i += 1) {
5
+ bufView[i] = str.charCodeAt(i);
6
+ }
7
+ return buf;
8
+ }
@@ -0,0 +1,12 @@
1
+ import { ToolDbUserAdapter, sha256 } from "..";
2
+
3
+ export default function getPeerSignature(
4
+ account: ToolDbUserAdapter,
5
+ topic: string,
6
+ timestamp: number,
7
+ host: string,
8
+ port: number
9
+ ) {
10
+ const dataToSign = sha256(`${topic}-${timestamp}-${host}:${port}`);
11
+ return account.signData(dataToSign);
12
+ }
@@ -0,0 +1,3 @@
1
+ export default function getTimestamp() {
2
+ return new Date().getTime();
3
+ }
@@ -0,0 +1,16 @@
1
+ import { sha256 } from "..";
2
+
3
+ export default function proofOfWork(
4
+ value: string,
5
+ difficulty: number
6
+ ): Promise<{ nonce: number; hash: string }> {
7
+ return new Promise((resolve) => {
8
+ let nonce = 0;
9
+ let hash = sha256(`${value}${nonce}`);
10
+ while (hash.substring(0, difficulty) !== Array(difficulty + 1).join("0")) {
11
+ nonce += 1;
12
+ hash = sha256(`${value}${nonce}`);
13
+ }
14
+ resolve({ nonce, hash });
15
+ });
16
+ }