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.
- package/README.md +1 -74
- package/lib/adapters-base/networkAdapter.ts +215 -0
- package/lib/adapters-base/storageAdapter.ts +35 -0
- package/lib/adapters-base/userAdapter.ts +49 -0
- package/lib/crdt/baseCrdt.ts +21 -0
- package/lib/crdt/counterCrdt.ts +111 -0
- package/lib/crdt/listCrdt.ts +190 -0
- package/lib/crdt/mapCrdt.ts +119 -0
- package/{dist/index.d.ts → lib/index.ts} +8 -5
- package/lib/logger.ts +30 -0
- package/lib/messageHandlers/handleCrdtGet.ts +29 -0
- package/lib/messageHandlers/handleCrdtPut.ts +118 -0
- package/lib/messageHandlers/handleGet.ts +29 -0
- package/lib/messageHandlers/handlePing.ts +40 -0
- package/lib/messageHandlers/handlePong.ts +30 -0
- package/lib/messageHandlers/handlePut.ts +54 -0
- package/lib/messageHandlers/handleQuery.ts +25 -0
- package/lib/messageHandlers/handleSubscribe.ts +46 -0
- package/lib/server.ts +7 -0
- package/lib/shared.ts +5 -0
- package/lib/toolDbAnonSignIn.ts +5 -0
- package/lib/toolDbClientOnMessage.ts +75 -0
- package/lib/toolDbCrdtGet.ts +82 -0
- package/lib/toolDbCrdtPut.ts +77 -0
- package/lib/toolDbGet.ts +80 -0
- package/lib/toolDbKeysSignIn.ts +16 -0
- package/lib/toolDbPut.ts +83 -0
- package/lib/toolDbQueryKeys.ts +64 -0
- package/lib/toolDbSignIn.ts +31 -0
- package/lib/toolDbSignUp.ts +71 -0
- package/lib/toolDbSubscribe.ts +53 -0
- package/lib/toolDbVerificationWrapper.ts +55 -0
- package/lib/tooldb.ts +314 -0
- package/lib/types/message.ts +133 -0
- package/lib/types/tooldb.ts +89 -0
- package/lib/utils/catchReturn.ts +4 -0
- package/lib/utils/encoding/arrayBufferToHex.ts +18 -0
- package/lib/utils/encoding/arrayBufferToString.ts +8 -0
- package/lib/utils/encoding/hexToArrayBuffer.ts +13 -0
- package/lib/utils/encoding/hexToString.ts +8 -0
- package/lib/utils/encoding/hexToUint8.ts +5 -0
- package/lib/utils/encoding/stringToArrayBuffer.ts +8 -0
- package/lib/utils/getPeerSignature.ts +12 -0
- package/lib/utils/getTimestamp.ts +3 -0
- package/lib/utils/proofOfWork.ts +16 -0
- package/lib/utils/randomAnimal.ts +77 -0
- package/lib/utils/sha1.ts +7 -0
- package/lib/utils/sha256.ts +7 -0
- package/lib/utils/textRandom.ts +11 -0
- package/lib/utils/uniq.ts +3 -0
- package/lib/utils/verifyMessage.ts +88 -0
- package/lib/utils/verifyPeer.ts +15 -0
- package/package.json +31 -65
- package/tsconfig.json +10 -72
- package/.eslintrc.json +0 -74
- package/.github/workflows/main.yml +0 -29
- package/_____peer/000005.ldb +0 -0
- package/_____peer/000008.log +0 -0
- package/_____peer/CURRENT +0 -1
- package/_____peer/LOCK +0 -0
- package/_____peer/LOG +0 -0
- package/_____peer/LOG.old +0 -0
- package/_____peer/MANIFEST-000007 +0 -0
- package/_____peer_test-alice/000003.log +0 -0
- package/_____peer_test-alice/CURRENT +0 -1
- package/_____peer_test-alice/LOCK +0 -0
- package/_____peer_test-alice/LOG +0 -1
- package/_____peer_test-alice/MANIFEST-000002 +0 -0
- package/_____peer_test-base-client/000005.ldb +0 -0
- package/_____peer_test-base-client/000006.log +0 -0
- package/_____peer_test-base-client/CURRENT +0 -1
- package/_____peer_test-base-client/LOCK +0 -0
- package/_____peer_test-base-client/LOG +0 -5
- package/_____peer_test-base-client/LOG.old +0 -1
- package/_____peer_test-base-client/MANIFEST-000004 +0 -0
- package/_____peer_test-base-server/000005.ldb +0 -0
- package/_____peer_test-base-server/000006.log +0 -0
- package/_____peer_test-base-server/CURRENT +0 -1
- package/_____peer_test-base-server/LOCK +0 -0
- package/_____peer_test-base-server/LOG +0 -5
- package/_____peer_test-base-server/LOG.old +0 -1
- package/_____peer_test-base-server/MANIFEST-000004 +0 -0
- package/_____peer_test-bob/000003.log +0 -0
- package/_____peer_test-bob/CURRENT +0 -1
- package/_____peer_test-bob/LOCK +0 -0
- package/_____peer_test-bob/LOG +0 -1
- package/_____peer_test-bob/MANIFEST-000002 +0 -0
- package/_____peer_test-chris/000003.log +0 -0
- package/_____peer_test-chris/CURRENT +0 -1
- package/_____peer_test-chris/LOCK +0 -0
- package/_____peer_test-chris/LOG +0 -1
- package/_____peer_test-chris/MANIFEST-000002 +0 -0
- package/_____peer_test-node-a/000003.log +0 -0
- package/_____peer_test-node-a/CURRENT +0 -1
- package/_____peer_test-node-a/LOCK +0 -0
- package/_____peer_test-node-a/LOG +0 -1
- package/_____peer_test-node-a/MANIFEST-000002 +0 -0
- package/_____peer_test-node-b/000003.log +0 -0
- package/_____peer_test-node-b/CURRENT +0 -1
- package/_____peer_test-node-b/LOCK +0 -0
- package/_____peer_test-node-b/LOG +0 -1
- package/_____peer_test-node-b/MANIFEST-000002 +0 -0
- package/_____peer_test-store/000003.log +0 -0
- package/_____peer_test-store/CURRENT +0 -1
- package/_____peer_test-store/LOCK +0 -0
- package/_____peer_test-store/LOG +0 -1
- package/_____peer_test-store/MANIFEST-000002 +0 -0
- package/_____peer_test-verify-a/000003.log +0 -0
- package/_____peer_test-verify-a/CURRENT +0 -1
- package/_____peer_test-verify-a/LOCK +0 -0
- package/_____peer_test-verify-a/LOG +0 -1
- package/_____peer_test-verify-a/MANIFEST-000002 +0 -0
- package/babel.config.js +0 -6
- package/bundle.js +0 -1
- package/custom-test-env.js +0 -28
- package/dist/__tests__ copy/base64.d.ts +0 -1
- package/dist/__tests__ copy/base64.js +0 -61
- package/dist/__tests__ copy/base64.js.map +0 -1
- package/dist/__tests__ copy/encryption.d.ts +0 -1
- package/dist/__tests__ copy/encryption.js +0 -68
- package/dist/__tests__ copy/encryption.js.map +0 -1
- package/dist/__tests__ copy/keys.d.ts +0 -1
- package/dist/__tests__ copy/keys.js +0 -238
- package/dist/__tests__ copy/keys.js.map +0 -1
- package/dist/__tests__ copy/network.d.ts +0 -1
- package/dist/__tests__ copy/network.js +0 -206
- package/dist/__tests__ copy/network.js.map +0 -1
- package/dist/__tests__ copy/pow.d.ts +0 -1
- package/dist/__tests__ copy/pow.js +0 -25
- package/dist/__tests__ copy/pow.js.map +0 -1
- package/dist/__tests__ copy/sha1.d.ts +0 -1
- package/dist/__tests__ copy/sha1.js +0 -16
- package/dist/__tests__ copy/sha1.js.map +0 -1
- package/dist/__tests__ copy/sha256.d.ts +0 -1
- package/dist/__tests__ copy/sha256.js +0 -16
- package/dist/__tests__ copy/sha256.js.map +0 -1
- package/dist/__tests__ copy/textRandom.d.ts +0 -1
- package/dist/__tests__ copy/textRandom.js +0 -17
- package/dist/__tests__ copy/textRandom.js.map +0 -1
- package/dist/adapters/toolDbIndexedb.d.ts +0 -9
- package/dist/adapters/toolDbIndexedb.js +0 -131
- package/dist/adapters/toolDbIndexedb.js.map +0 -1
- package/dist/adapters/toolDbLeveldb.d.ts +0 -8
- package/dist/adapters/toolDbLeveldb.js +0 -109
- package/dist/adapters/toolDbLeveldb.js.map +0 -1
- package/dist/adapters/toolDbWeb3User.d.ts +0 -18
- package/dist/adapters/toolDbWeb3User.js +0 -74
- package/dist/adapters/toolDbWeb3User.js.map +0 -1
- package/dist/adapters/toolDbWebrtc.d.ts +0 -58
- package/dist/adapters/toolDbWebrtc.js +0 -487
- package/dist/adapters/toolDbWebrtc.js.map +0 -1
- package/dist/adapters/toolDbWebsocket.d.ts +0 -18
- package/dist/adapters/toolDbWebsocket.js +0 -176
- package/dist/adapters/toolDbWebsocket.js.map +0 -1
- package/dist/adapters-base/networkAdapter.d.ts +0 -58
- package/dist/adapters-base/networkAdapter.js +0 -214
- package/dist/adapters-base/networkAdapter.js.map +0 -1
- package/dist/adapters-base/storageAdapter.d.ts +0 -11
- package/dist/adapters-base/storageAdapter.js +0 -36
- package/dist/adapters-base/storageAdapter.js.map +0 -1
- package/dist/adapters-base/userAdapter.d.ts +0 -15
- package/dist/adapters-base/userAdapter.js +0 -42
- package/dist/adapters-base/userAdapter.js.map +0 -1
- package/dist/bundle.js +0 -69086
- package/dist/chain/Block.d.ts +0 -29
- package/dist/chain/Block.js +0 -142
- package/dist/chain/Block.js.map +0 -1
- package/dist/chain/ToolChain.d.ts +0 -27
- package/dist/chain/ToolChain.js +0 -253
- package/dist/chain/ToolChain.js.map +0 -1
- package/dist/chain/Tx.d.ts +0 -50
- package/dist/chain/Tx.js +0 -54
- package/dist/chain/Tx.js.map +0 -1
- package/dist/chain/Wallet.d.ts +0 -9
- package/dist/chain/Wallet.js +0 -37
- package/dist/chain/Wallet.js.map +0 -1
- package/dist/chain/isValidChain.d.ts +0 -1
- package/dist/chain/isValidChain.js +0 -37
- package/dist/chain/isValidChain.js.map +0 -1
- package/dist/chain/mempool.d.ts +0 -0
- package/dist/chain/mempool.js +0 -2
- package/dist/chain/mempool.js.map +0 -1
- package/dist/crdt/baseCrdt.d.ts +0 -9
- package/dist/crdt/baseCrdt.js +0 -27
- package/dist/crdt/baseCrdt.js.map +0 -1
- package/dist/crdt/counterCrdt.d.ts +0 -30
- package/dist/crdt/counterCrdt.js +0 -106
- package/dist/crdt/counterCrdt.js.map +0 -1
- package/dist/crdt/listCrdt.d.ts +0 -42
- package/dist/crdt/listCrdt.js +0 -159
- package/dist/crdt/listCrdt.js.map +0 -1
- package/dist/crdt/mapCrdt.d.ts +0 -32
- package/dist/crdt/mapCrdt.js +0 -118
- package/dist/crdt/mapCrdt.js.map +0 -1
- package/dist/getCrypto.d.ts +0 -1
- package/dist/getCrypto.js +0 -10
- package/dist/getCrypto.js.map +0 -1
- package/dist/index.js +0 -93
- package/dist/index.js.map +0 -1
- package/dist/infuraFilecoin.d.ts +0 -0
- package/dist/infuraFilecoin.js +0 -2
- package/dist/infuraFilecoin.js.map +0 -1
- package/dist/loadCrdtDocument.d.ts +0 -3
- package/dist/loadCrdtDocument.js +0 -43
- package/dist/loadCrdtDocument.js.map +0 -1
- package/dist/logger.d.ts +0 -2
- package/dist/logger.js +0 -29
- package/dist/logger.js.map +0 -1
- package/dist/makeTx.d.ts +0 -1
- package/dist/makeTx.js +0 -27
- package/dist/makeTx.js.map +0 -1
- package/dist/messageHandlers/handleCrdt.d.ts +0 -2
- package/dist/messageHandlers/handleCrdt.js +0 -15
- package/dist/messageHandlers/handleCrdt.js.map +0 -1
- package/dist/messageHandlers/handleCrdtGet.d.ts +0 -2
- package/dist/messageHandlers/handleCrdtGet.js +0 -29
- package/dist/messageHandlers/handleCrdtGet.js.map +0 -1
- package/dist/messageHandlers/handleCrdtPut.d.ts +0 -2
- package/dist/messageHandlers/handleCrdtPut.js +0 -93
- package/dist/messageHandlers/handleCrdtPut.js.map +0 -1
- package/dist/messageHandlers/handleGet.d.ts +0 -2
- package/dist/messageHandlers/handleGet.js +0 -29
- package/dist/messageHandlers/handleGet.js.map +0 -1
- package/dist/messageHandlers/handleJoin.d.ts +0 -2
- package/dist/messageHandlers/handleJoin.js +0 -36
- package/dist/messageHandlers/handleJoin.js.map +0 -1
- package/dist/messageHandlers/handlePing.d.ts +0 -2
- package/dist/messageHandlers/handlePing.js +0 -36
- package/dist/messageHandlers/handlePing.js.map +0 -1
- package/dist/messageHandlers/handlePong.d.ts +0 -2
- package/dist/messageHandlers/handlePong.js +0 -26
- package/dist/messageHandlers/handlePong.js.map +0 -1
- package/dist/messageHandlers/handlePut.d.ts +0 -2
- package/dist/messageHandlers/handlePut.js +0 -57
- package/dist/messageHandlers/handlePut.js.map +0 -1
- package/dist/messageHandlers/handleQuery.d.ts +0 -2
- package/dist/messageHandlers/handleQuery.js +0 -23
- package/dist/messageHandlers/handleQuery.js.map +0 -1
- package/dist/messageHandlers/handleServers.d.ts +0 -2
- package/dist/messageHandlers/handleServers.js +0 -23
- package/dist/messageHandlers/handleServers.js.map +0 -1
- package/dist/messageHandlers/handleSubscribe.d.ts +0 -2
- package/dist/messageHandlers/handleSubscribe.js +0 -44
- package/dist/messageHandlers/handleSubscribe.js.map +0 -1
- package/dist/sendJoin.d.ts +0 -2
- package/dist/sendJoin.js +0 -31
- package/dist/sendJoin.js.map +0 -1
- package/dist/server.d.ts +0 -1
- package/dist/server.js +0 -9
- package/dist/server.js.map +0 -1
- package/dist/shared.d.ts +0 -2
- package/dist/shared.js +0 -7
- package/dist/shared.js.map +0 -1
- package/dist/test.d.ts +0 -1
- package/dist/test.js +0 -17
- package/dist/test.js.map +0 -1
- package/dist/toolChainServer.d.ts +0 -8
- package/dist/toolChainServer.js +0 -60
- package/dist/toolChainServer.js.map +0 -1
- package/dist/toolDbAnonSignIn.d.ts +0 -2
- package/dist/toolDbAnonSignIn.js +0 -7
- package/dist/toolDbAnonSignIn.js.map +0 -1
- package/dist/toolDbClientOnMessage.d.ts +0 -2
- package/dist/toolDbClientOnMessage.js +0 -59
- package/dist/toolDbClientOnMessage.js.map +0 -1
- package/dist/toolDbCrdtGet.d.ts +0 -9
- package/dist/toolDbCrdtGet.js +0 -77
- package/dist/toolDbCrdtGet.js.map +0 -1
- package/dist/toolDbCrdtPut.d.ts +0 -9
- package/dist/toolDbCrdtPut.js +0 -63
- package/dist/toolDbCrdtPut.js.map +0 -1
- package/dist/toolDbGet.d.ts +0 -9
- package/dist/toolDbGet.js +0 -77
- package/dist/toolDbGet.js.map +0 -1
- package/dist/toolDbGetPubKey.d.ts +0 -2
- package/dist/toolDbGetPubKey.js +0 -18
- package/dist/toolDbGetPubKey.js.map +0 -1
- package/dist/toolDbKeysSignIn.d.ts +0 -2
- package/dist/toolDbKeysSignIn.js +0 -16
- package/dist/toolDbKeysSignIn.js.map +0 -1
- package/dist/toolDbNetwork.d.ts +0 -32
- package/dist/toolDbNetwork.js +0 -296
- package/dist/toolDbNetwork.js.map +0 -1
- package/dist/toolDbNetworkAdapter.d.ts +0 -57
- package/dist/toolDbNetworkAdapter.js +0 -188
- package/dist/toolDbNetworkAdapter.js.map +0 -1
- package/dist/toolDbPut.d.ts +0 -9
- package/dist/toolDbPut.js +0 -69
- package/dist/toolDbPut.js.map +0 -1
- package/dist/toolDbQueryKeys.d.ts +0 -8
- package/dist/toolDbQueryKeys.js +0 -66
- package/dist/toolDbQueryKeys.js.map +0 -1
- package/dist/toolDbSignIn.d.ts +0 -2
- package/dist/toolDbSignIn.js +0 -27
- package/dist/toolDbSignIn.js.map +0 -1
- package/dist/toolDbSignUp.d.ts +0 -2
- package/dist/toolDbSignUp.js +0 -101
- package/dist/toolDbSignUp.js.map +0 -1
- package/dist/toolDbSubscribe.d.ts +0 -9
- package/dist/toolDbSubscribe.js +0 -50
- package/dist/toolDbSubscribe.js.map +0 -1
- package/dist/toolDbVerificationWrapper.d.ts +0 -2
- package/dist/toolDbVerificationWrapper.js +0 -98
- package/dist/toolDbVerificationWrapper.js.map +0 -1
- package/dist/toolDbWeb3User.d.ts +0 -20
- package/dist/toolDbWeb3User.js +0 -75
- package/dist/toolDbWeb3User.js.map +0 -1
- package/dist/toolDbWebrtc.d.ts +0 -75
- package/dist/toolDbWebrtc.js +0 -472
- package/dist/toolDbWebrtc.js.map +0 -1
- package/dist/toolDbWebsocket.d.ts +0 -19
- package/dist/toolDbWebsocket.js +0 -187
- package/dist/toolDbWebsocket.js.map +0 -1
- package/dist/toolchain.d.ts +0 -1
- package/dist/toolchain.js +0 -8
- package/dist/toolchain.js.map +0 -1
- package/dist/tooldb.d.ts +0 -108
- package/dist/tooldb.js +0 -285
- package/dist/tooldb.js.map +0 -1
- package/dist/types/graph.d.ts +0 -0
- package/dist/types/graph.js +0 -2
- package/dist/types/graph.js.map +0 -1
- package/dist/types/message.d.ts +0 -100
- package/dist/types/message.js +0 -17
- package/dist/types/message.js.map +0 -1
- package/dist/types/tooldb.d.ts +0 -79
- package/dist/types/tooldb.js +0 -3
- package/dist/types/tooldb.js.map +0 -1
- package/dist/utils/arrayBufferToBase64.d.ts +0 -1
- package/dist/utils/arrayBufferToBase64.js +0 -12
- package/dist/utils/arrayBufferToBase64.js.map +0 -1
- package/dist/utils/arrayBufferToHex.d.ts +0 -1
- package/dist/utils/arrayBufferToHex.js +0 -19
- package/dist/utils/arrayBufferToHex.js.map +0 -1
- package/dist/utils/arrayBufferToString.d.ts +0 -1
- package/dist/utils/arrayBufferToString.js +0 -12
- package/dist/utils/arrayBufferToString.js.map +0 -1
- package/dist/utils/base64ToArrayBuffer.d.ts +0 -1
- package/dist/utils/base64ToArrayBuffer.js +0 -12
- package/dist/utils/base64ToArrayBuffer.js.map +0 -1
- package/dist/utils/base64ToBinaryChange.d.ts +0 -2
- package/dist/utils/base64ToBinaryChange.js +0 -18
- package/dist/utils/base64ToBinaryChange.js.map +0 -1
- package/dist/utils/base64ToBinaryDocument.d.ts +0 -2
- package/dist/utils/base64ToBinaryDocument.js +0 -18
- package/dist/utils/base64ToBinaryDocument.js.map +0 -1
- package/dist/utils/base64ToHex.d.ts +0 -1
- package/dist/utils/base64ToHex.js +0 -13
- package/dist/utils/base64ToHex.js.map +0 -1
- package/dist/utils/base64ToUint8.d.ts +0 -1
- package/dist/utils/base64ToUint8.js +0 -17
- package/dist/utils/base64ToUint8.js.map +0 -1
- package/dist/utils/catchReturn.d.ts +0 -1
- package/dist/utils/catchReturn.js +0 -8
- package/dist/utils/catchReturn.js.map +0 -1
- package/dist/utils/crypto/base64KeyToHex.d.ts +0 -1
- package/dist/utils/crypto/base64KeyToHex.js +0 -24
- package/dist/utils/crypto/base64KeyToHex.js.map +0 -1
- package/dist/utils/crypto/base64PublicKeyToHex.d.ts +0 -1
- package/dist/utils/crypto/base64PublicKeyToHex.js +0 -22
- package/dist/utils/crypto/base64PublicKeyToHex.js.map +0 -1
- package/dist/utils/crypto/decodeKeyString.d.ts +0 -1
- package/dist/utils/crypto/decodeKeyString.js +0 -13
- package/dist/utils/crypto/decodeKeyString.js.map +0 -1
- package/dist/utils/crypto/decryptData.d.ts +0 -1
- package/dist/utils/crypto/decryptData.js +0 -28
- package/dist/utils/crypto/decryptData.js.map +0 -1
- package/dist/utils/crypto/decryptWithPass.d.ts +0 -1
- package/dist/utils/crypto/decryptWithPass.js +0 -23
- package/dist/utils/crypto/decryptWithPass.js.map +0 -1
- package/dist/utils/crypto/deriveSecret.d.ts +0 -1
- package/dist/utils/crypto/deriveSecret.js +0 -18
- package/dist/utils/crypto/deriveSecret.js.map +0 -1
- package/dist/utils/crypto/encodeKeyString.d.ts +0 -1
- package/dist/utils/crypto/encodeKeyString.js +0 -13
- package/dist/utils/crypto/encodeKeyString.js.map +0 -1
- package/dist/utils/crypto/encryptData.d.ts +0 -1
- package/dist/utils/crypto/encryptData.js +0 -30
- package/dist/utils/crypto/encryptData.js.map +0 -1
- package/dist/utils/crypto/encryptWithPass.d.ts +0 -1
- package/dist/utils/crypto/encryptWithPass.js +0 -26
- package/dist/utils/crypto/encryptWithPass.js.map +0 -1
- package/dist/utils/crypto/exportKey.d.ts +0 -1
- package/dist/utils/crypto/exportKey.js +0 -14
- package/dist/utils/crypto/exportKey.js.map +0 -1
- package/dist/utils/crypto/exportKeyAsHex.d.ts +0 -1
- package/dist/utils/crypto/exportKeyAsHex.js +0 -18
- package/dist/utils/crypto/exportKeyAsHex.js.map +0 -1
- package/dist/utils/crypto/generateKeyFromPassword.d.ts +0 -1
- package/dist/utils/crypto/generateKeyFromPassword.js +0 -25
- package/dist/utils/crypto/generateKeyFromPassword.js.map +0 -1
- package/dist/utils/crypto/generateKeyPair.d.ts +0 -1
- package/dist/utils/crypto/generateKeyPair.js +0 -17
- package/dist/utils/crypto/generateKeyPair.js.map +0 -1
- package/dist/utils/crypto/generateKeysComb.d.ts +0 -4
- package/dist/utils/crypto/generateKeysComb.js +0 -60
- package/dist/utils/crypto/generateKeysComb.js.map +0 -1
- package/dist/utils/crypto/importKey.d.ts +0 -1
- package/dist/utils/crypto/importKey.js +0 -23
- package/dist/utils/crypto/importKey.js.map +0 -1
- package/dist/utils/crypto/loadKeysComb.d.ts +0 -5
- package/dist/utils/crypto/loadKeysComb.js +0 -90
- package/dist/utils/crypto/loadKeysComb.js.map +0 -1
- package/dist/utils/crypto/loadSignKeys.d.ts +0 -2
- package/dist/utils/crypto/loadSignKeys.js +0 -78
- package/dist/utils/crypto/loadSignKeys.js.map +0 -1
- package/dist/utils/crypto/recoverPubKey.d.ts +0 -1
- package/dist/utils/crypto/recoverPubKey.js +0 -27
- package/dist/utils/crypto/recoverPubKey.js.map +0 -1
- package/dist/utils/crypto/recoverPubKeyFromPrivate.d.ts +0 -1
- package/dist/utils/crypto/recoverPubKeyFromPrivate.js +0 -16
- package/dist/utils/crypto/recoverPubKeyFromPrivate.js.map +0 -1
- package/dist/utils/crypto/saveKeysComb.d.ts +0 -2
- package/dist/utils/crypto/saveKeysComb.js +0 -75
- package/dist/utils/crypto/saveKeysComb.js.map +0 -1
- package/dist/utils/crypto/saveSignKeys.d.ts +0 -2
- package/dist/utils/crypto/saveSignKeys.js +0 -67
- package/dist/utils/crypto/saveSignKeys.js.map +0 -1
- package/dist/utils/crypto/verifyData.d.ts +0 -1
- package/dist/utils/crypto/verifyData.js +0 -20
- package/dist/utils/crypto/verifyData.js.map +0 -1
- package/dist/utils/encoding/arrayBufferToBase64.d.ts +0 -1
- package/dist/utils/encoding/arrayBufferToBase64.js +0 -12
- package/dist/utils/encoding/arrayBufferToBase64.js.map +0 -1
- package/dist/utils/encoding/arrayBufferToHex.d.ts +0 -1
- package/dist/utils/encoding/arrayBufferToHex.js +0 -19
- package/dist/utils/encoding/arrayBufferToHex.js.map +0 -1
- package/dist/utils/encoding/arrayBufferToString.d.ts +0 -1
- package/dist/utils/encoding/arrayBufferToString.js +0 -12
- package/dist/utils/encoding/arrayBufferToString.js.map +0 -1
- package/dist/utils/encoding/base64ToArrayBuffer.d.ts +0 -1
- package/dist/utils/encoding/base64ToArrayBuffer.js +0 -12
- package/dist/utils/encoding/base64ToArrayBuffer.js.map +0 -1
- package/dist/utils/encoding/base64ToBinaryChange.d.ts +0 -2
- package/dist/utils/encoding/base64ToBinaryChange.js +0 -18
- package/dist/utils/encoding/base64ToBinaryChange.js.map +0 -1
- package/dist/utils/encoding/base64ToBinaryDocument.d.ts +0 -2
- package/dist/utils/encoding/base64ToBinaryDocument.js +0 -18
- package/dist/utils/encoding/base64ToBinaryDocument.js.map +0 -1
- package/dist/utils/encoding/base64ToHex.d.ts +0 -1
- package/dist/utils/encoding/base64ToHex.js +0 -13
- package/dist/utils/encoding/base64ToHex.js.map +0 -1
- package/dist/utils/encoding/base64ToUint8.d.ts +0 -1
- package/dist/utils/encoding/base64ToUint8.js +0 -17
- package/dist/utils/encoding/base64ToUint8.js.map +0 -1
- package/dist/utils/encoding/fromBase64.d.ts +0 -1
- package/dist/utils/encoding/fromBase64.js +0 -7
- package/dist/utils/encoding/fromBase64.js.map +0 -1
- package/dist/utils/encoding/hexToArrayBuffer.d.ts +0 -1
- package/dist/utils/encoding/hexToArrayBuffer.js +0 -15
- package/dist/utils/encoding/hexToArrayBuffer.js.map +0 -1
- package/dist/utils/encoding/hexToBase64.d.ts +0 -1
- package/dist/utils/encoding/hexToBase64.js +0 -12
- package/dist/utils/encoding/hexToBase64.js.map +0 -1
- package/dist/utils/encoding/hexToString.d.ts +0 -1
- package/dist/utils/encoding/hexToString.js +0 -12
- package/dist/utils/encoding/hexToString.js.map +0 -1
- package/dist/utils/encoding/hexToUint8.d.ts +0 -1
- package/dist/utils/encoding/hexToUint8.js +0 -8
- package/dist/utils/encoding/hexToUint8.js.map +0 -1
- package/dist/utils/encoding/stringToArrayBuffer.d.ts +0 -1
- package/dist/utils/encoding/stringToArrayBuffer.js +0 -12
- package/dist/utils/encoding/stringToArrayBuffer.js.map +0 -1
- package/dist/utils/encoding/toBase64.d.ts +0 -1
- package/dist/utils/encoding/toBase64.js +0 -7
- package/dist/utils/encoding/toBase64.js.map +0 -1
- package/dist/utils/encoding/uint8ArrayToHex.d.ts +0 -1
- package/dist/utils/encoding/uint8ArrayToHex.js +0 -7
- package/dist/utils/encoding/uint8ArrayToHex.js.map +0 -1
- package/dist/utils/encoding/uint8ToBase64.d.ts +0 -1
- package/dist/utils/encoding/uint8ToBase64.js +0 -15
- package/dist/utils/encoding/uint8ToBase64.js.map +0 -1
- package/dist/utils/fromBase64.d.ts +0 -1
- package/dist/utils/fromBase64.js +0 -7
- package/dist/utils/fromBase64.js.map +0 -1
- package/dist/utils/generateIv.d.ts +0 -1
- package/dist/utils/generateIv.js +0 -12
- package/dist/utils/generateIv.js.map +0 -1
- package/dist/utils/getPeerSignature.d.ts +0 -2
- package/dist/utils/getPeerSignature.js +0 -9
- package/dist/utils/getPeerSignature.js.map +0 -1
- package/dist/utils/getTimestamp.d.ts +0 -1
- package/dist/utils/getTimestamp.js +0 -7
- package/dist/utils/getTimestamp.js.map +0 -1
- package/dist/utils/hexToArrayBuffer.d.ts +0 -1
- package/dist/utils/hexToArrayBuffer.js +0 -15
- package/dist/utils/hexToArrayBuffer.js.map +0 -1
- package/dist/utils/hexToBase64.d.ts +0 -1
- package/dist/utils/hexToBase64.js +0 -12
- package/dist/utils/hexToBase64.js.map +0 -1
- package/dist/utils/hexToString.d.ts +0 -1
- package/dist/utils/hexToString.js +0 -12
- package/dist/utils/hexToString.js.map +0 -1
- package/dist/utils/hexToUint8.d.ts +0 -1
- package/dist/utils/hexToUint8.js +0 -8
- package/dist/utils/hexToUint8.js.map +0 -1
- package/dist/utils/indexedb.d.ts +0 -2
- package/dist/utils/indexedb.js +0 -116
- package/dist/utils/indexedb.js.map +0 -1
- package/dist/utils/leveldb.d.ts +0 -2
- package/dist/utils/leveldb.js +0 -83
- package/dist/utils/leveldb.js.map +0 -1
- package/dist/utils/proofOfWork.d.ts +0 -4
- package/dist/utils/proofOfWork.js +0 -16
- package/dist/utils/proofOfWork.js.map +0 -1
- package/dist/utils/randomAnimal.d.ts +0 -1
- package/dist/utils/randomAnimal.js +0 -77
- package/dist/utils/randomAnimal.js.map +0 -1
- package/dist/utils/sha1.d.ts +0 -1
- package/dist/utils/sha1.js +0 -13
- package/dist/utils/sha1.js.map +0 -1
- package/dist/utils/sha256.d.ts +0 -3
- package/dist/utils/sha256.js +0 -13
- package/dist/utils/sha256.js.map +0 -1
- package/dist/utils/signData.d.ts +0 -1
- package/dist/utils/signData.js +0 -19
- package/dist/utils/signData.js.map +0 -1
- package/dist/utils/stringToArrayBuffer.d.ts +0 -1
- package/dist/utils/stringToArrayBuffer.js +0 -12
- package/dist/utils/stringToArrayBuffer.js.map +0 -1
- package/dist/utils/textRandom.d.ts +0 -1
- package/dist/utils/textRandom.js +0 -15
- package/dist/utils/textRandom.js.map +0 -1
- package/dist/utils/toBase64.d.ts +0 -1
- package/dist/utils/toBase64.js +0 -7
- package/dist/utils/toBase64.js.map +0 -1
- package/dist/utils/uint8ArrayToHex.d.ts +0 -2
- package/dist/utils/uint8ArrayToHex.js +0 -7
- package/dist/utils/uint8ArrayToHex.js.map +0 -1
- package/dist/utils/uint8ToBase64.d.ts +0 -2
- package/dist/utils/uint8ToBase64.js +0 -15
- package/dist/utils/uint8ToBase64.js.map +0 -1
- package/dist/utils/uniq.d.ts +0 -1
- package/dist/utils/uniq.js +0 -7
- package/dist/utils/uniq.js.map +0 -1
- package/dist/utils/verifyMessage.d.ts +0 -8
- package/dist/utils/verifyMessage.js +0 -129
- package/dist/utils/verifyMessage.js.map +0 -1
- package/dist/utils/verifyPeer.d.ts +0 -2
- package/dist/utils/verifyPeer.js +0 -15
- package/dist/utils/verifyPeer.js.map +0 -1
- package/jest.config.ts +0 -195
- package/jest.setup.js +0 -0
- package/test-alice/000216.ldb +0 -0
- package/test-alice/000218.ldb +0 -0
- package/test-alice/000221.ldb +0 -0
- package/test-alice/000224.ldb +0 -0
- package/test-alice/000225.log +0 -0
- package/test-alice/CURRENT +0 -1
- package/test-alice/LOCK +0 -0
- package/test-alice/LOG +0 -5
- package/test-alice/LOG.old +0 -5
- package/test-alice/MANIFEST-000223 +0 -0
- package/test-base-client/000019.log +0 -0
- package/test-base-client/CURRENT +0 -1
- package/test-base-client/LOCK +0 -0
- package/test-base-client/LOG +0 -3
- package/test-base-client/LOG.old +0 -3
- package/test-base-client/MANIFEST-000018 +0 -0
- package/test-base-server/000019.log +0 -0
- package/test-base-server/CURRENT +0 -1
- package/test-base-server/LOCK +0 -0
- package/test-base-server/LOG +0 -3
- package/test-base-server/LOG.old +0 -3
- package/test-base-server/MANIFEST-000018 +0 -0
- package/test-bob/000231.ldb +0 -0
- package/test-bob/000233.ldb +0 -0
- package/test-bob/000234.log +0 -0
- package/test-bob/CURRENT +0 -1
- package/test-bob/LOCK +0 -0
- package/test-bob/LOG +0 -5
- package/test-bob/LOG.old +0 -14
- package/test-bob/MANIFEST-000232 +0 -0
- package/test-chris/000005.ldb +0 -0
- package/test-chris/000008.ldb +0 -0
- package/test-chris/000009.log +0 -0
- package/test-chris/CURRENT +0 -1
- package/test-chris/LOCK +0 -0
- package/test-chris/LOG +0 -5
- package/test-chris/LOG.old +0 -5
- package/test-chris/MANIFEST-000007 +0 -0
- package/test-node-a/000246.ldb +0 -0
- package/test-node-a/000248.ldb +0 -0
- package/test-node-a/000249.log +0 -0
- package/test-node-a/CURRENT +0 -1
- package/test-node-a/LOCK +0 -0
- package/test-node-a/LOG +0 -5
- package/test-node-a/LOG.old +0 -14
- package/test-node-a/MANIFEST-000247 +0 -0
- package/test-node-b/000246.ldb +0 -0
- package/test-node-b/000248.ldb +0 -0
- package/test-node-b/000249.log +0 -0
- package/test-node-b/CURRENT +0 -1
- package/test-node-b/LOCK +0 -0
- package/test-node-b/LOG +0 -5
- package/test-node-b/LOG.old +0 -14
- package/test-node-b/MANIFEST-000247 +0 -0
- package/test-store/000005.ldb +0 -0
- package/test-store/000008.ldb +0 -0
- package/test-store/000011.ldb +0 -0
- package/test-store/000014.ldb +0 -0
- package/test-store/000017.ldb +0 -0
- package/test-store/000018.log +0 -0
- package/test-store/CURRENT +0 -1
- package/test-store/LOCK +0 -0
- package/test-store/LOG +0 -6
- package/test-store/LOG.old +0 -6
- package/test-store/MANIFEST-000016 +0 -0
- package/test-verify-a/000059.ldb +0 -0
- package/test-verify-a/000066.log +0 -0
- package/test-verify-a/CURRENT +0 -1
- package/test-verify-a/LOCK +0 -0
- package/test-verify-a/LOG +0 -3
- package/test-verify-a/LOG.old +0 -3
- 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,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,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,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,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
|
+
}
|