@tezos-x/octez.connect-core 0.9.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/LICENCE +19 -0
- package/README.md +9 -0
- package/dist/cjs/MockAnalytics.d.ts +4 -0
- package/dist/cjs/MockAnalytics.js +11 -0
- package/dist/cjs/MockAnalytics.js.map +1 -0
- package/dist/cjs/MockWindow.d.ts +14 -0
- package/dist/cjs/MockWindow.js +39 -0
- package/dist/cjs/MockWindow.js.map +1 -0
- package/dist/cjs/Serializer.d.ts +19 -0
- package/dist/cjs/Serializer.js +48 -0
- package/dist/cjs/Serializer.js.map +1 -0
- package/dist/cjs/clients/beacon-client/BeaconClient.d.ts +53 -0
- package/dist/cjs/clients/beacon-client/BeaconClient.js +111 -0
- package/dist/cjs/clients/beacon-client/BeaconClient.js.map +1 -0
- package/dist/cjs/clients/beacon-client/BeaconClientOptions.d.ts +26 -0
- package/dist/cjs/clients/beacon-client/BeaconClientOptions.js +3 -0
- package/dist/cjs/clients/beacon-client/BeaconClientOptions.js.map +1 -0
- package/dist/cjs/clients/client/Client.d.ts +91 -0
- package/dist/cjs/clients/client/Client.js +241 -0
- package/dist/cjs/clients/client/Client.js.map +1 -0
- package/dist/cjs/clients/client/ClientOptions.d.ts +42 -0
- package/dist/cjs/clients/client/ClientOptions.js +3 -0
- package/dist/cjs/clients/client/ClientOptions.js.map +1 -0
- package/dist/cjs/constants.d.ts +4 -0
- package/dist/cjs/constants.js +8 -0
- package/dist/cjs/constants.js.map +1 -0
- package/dist/cjs/debug.d.ts +2 -0
- package/dist/cjs/debug.js +17 -0
- package/dist/cjs/debug.js.map +1 -0
- package/dist/cjs/errors/AbortedBeaconError.d.ts +9 -0
- package/dist/cjs/errors/AbortedBeaconError.js +17 -0
- package/dist/cjs/errors/AbortedBeaconError.js.map +1 -0
- package/dist/cjs/errors/BeaconError.d.ts +15 -0
- package/dist/cjs/errors/BeaconError.js +19 -0
- package/dist/cjs/errors/BeaconError.js.map +1 -0
- package/dist/cjs/errors/BroadcastBeaconError.d.ts +9 -0
- package/dist/cjs/errors/BroadcastBeaconError.js +17 -0
- package/dist/cjs/errors/BroadcastBeaconError.js.map +1 -0
- package/dist/cjs/errors/EncryptionTypeNotSupportedBeaconError.d.ts +3 -0
- package/dist/cjs/errors/EncryptionTypeNotSupportedBeaconError.js +18 -0
- package/dist/cjs/errors/EncryptionTypeNotSupportedBeaconError.js.map +1 -0
- package/dist/cjs/errors/NetworkNotSupportedBeaconError.d.ts +9 -0
- package/dist/cjs/errors/NetworkNotSupportedBeaconError.js +17 -0
- package/dist/cjs/errors/NetworkNotSupportedBeaconError.js.map +1 -0
- package/dist/cjs/errors/NoAddressBeaconError.d.ts +9 -0
- package/dist/cjs/errors/NoAddressBeaconError.js +17 -0
- package/dist/cjs/errors/NoAddressBeaconError.js.map +1 -0
- package/dist/cjs/errors/NoPrivateKeyBeaconError.d.ts +9 -0
- package/dist/cjs/errors/NoPrivateKeyBeaconError.js +17 -0
- package/dist/cjs/errors/NoPrivateKeyBeaconError.js.map +1 -0
- package/dist/cjs/errors/NotGrantedBeaconError.d.ts +9 -0
- package/dist/cjs/errors/NotGrantedBeaconError.js +17 -0
- package/dist/cjs/errors/NotGrantedBeaconError.js.map +1 -0
- package/dist/cjs/errors/ParametersInvalidBeaconError.d.ts +9 -0
- package/dist/cjs/errors/ParametersInvalidBeaconError.js +17 -0
- package/dist/cjs/errors/ParametersInvalidBeaconError.js.map +1 -0
- package/dist/cjs/errors/SignatureTypeNotSupportedBeaconError.d.ts +9 -0
- package/dist/cjs/errors/SignatureTypeNotSupportedBeaconError.js +17 -0
- package/dist/cjs/errors/SignatureTypeNotSupportedBeaconError.js.map +1 -0
- package/dist/cjs/errors/TooManyOperationsBeaconError.d.ts +9 -0
- package/dist/cjs/errors/TooManyOperationsBeaconError.js +17 -0
- package/dist/cjs/errors/TooManyOperationsBeaconError.js.map +1 -0
- package/dist/cjs/errors/TransactionInvalidBeaconError.d.ts +14 -0
- package/dist/cjs/errors/TransactionInvalidBeaconError.js +22 -0
- package/dist/cjs/errors/TransactionInvalidBeaconError.js.map +1 -0
- package/dist/cjs/errors/UnknownBeaconError.d.ts +9 -0
- package/dist/cjs/errors/UnknownBeaconError.js +17 -0
- package/dist/cjs/errors/UnknownBeaconError.js.map +1 -0
- package/dist/cjs/errors/get-error.d.ts +8 -0
- package/dist/cjs/errors/get-error.js +53 -0
- package/dist/cjs/errors/get-error.js.map +1 -0
- package/dist/cjs/index.d.ts +53 -0
- package/dist/cjs/index.js +90 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/managers/AccountManager.d.ts +18 -0
- package/dist/cjs/managers/AccountManager.js +73 -0
- package/dist/cjs/managers/AccountManager.js.map +1 -0
- package/dist/cjs/managers/AppMetadataManager.d.ts +16 -0
- package/dist/cjs/managers/AppMetadataManager.js +57 -0
- package/dist/cjs/managers/AppMetadataManager.js.map +1 -0
- package/dist/cjs/managers/PeerManager.d.ts +18 -0
- package/dist/cjs/managers/PeerManager.js +61 -0
- package/dist/cjs/managers/PeerManager.js.map +1 -0
- package/dist/cjs/managers/PermissionManager.d.ts +17 -0
- package/dist/cjs/managers/PermissionManager.js +64 -0
- package/dist/cjs/managers/PermissionManager.js.map +1 -0
- package/dist/cjs/managers/PermissionValidator.d.ts +16 -0
- package/dist/cjs/managers/PermissionValidator.js +58 -0
- package/dist/cjs/managers/PermissionValidator.js.map +1 -0
- package/dist/cjs/managers/StorageManager.d.ts +18 -0
- package/dist/cjs/managers/StorageManager.js +72 -0
- package/dist/cjs/managers/StorageManager.js.map +1 -0
- package/dist/cjs/migrations/migrate-0.7.0.d.ts +20 -0
- package/dist/cjs/migrations/migrate-0.7.0.js +44 -0
- package/dist/cjs/migrations/migrate-0.7.0.js.map +1 -0
- package/dist/cjs/migrations/migrations.d.ts +2 -0
- package/dist/cjs/migrations/migrations.js +44 -0
- package/dist/cjs/migrations/migrations.js.map +1 -0
- package/dist/cjs/storage/ChromeStorage.d.ts +19 -0
- package/dist/cjs/storage/ChromeStorage.js +76 -0
- package/dist/cjs/storage/ChromeStorage.js.map +1 -0
- package/dist/cjs/storage/IndexedDBStorage.d.ts +65 -0
- package/dist/cjs/storage/IndexedDBStorage.js +230 -0
- package/dist/cjs/storage/IndexedDBStorage.js.map +1 -0
- package/dist/cjs/storage/LocalStorage.d.ts +21 -0
- package/dist/cjs/storage/LocalStorage.js +92 -0
- package/dist/cjs/storage/LocalStorage.js.map +1 -0
- package/dist/cjs/storage/StorageValidator.d.ts +12 -0
- package/dist/cjs/storage/StorageValidator.js +110 -0
- package/dist/cjs/storage/StorageValidator.js.map +1 -0
- package/dist/cjs/storage/WCStorage.d.ts +15 -0
- package/dist/cjs/storage/WCStorage.js +84 -0
- package/dist/cjs/storage/WCStorage.js.map +1 -0
- package/dist/cjs/storage/getStorage.d.ts +5 -0
- package/dist/cjs/storage/getStorage.js +34 -0
- package/dist/cjs/storage/getStorage.js.map +1 -0
- package/dist/cjs/transports/Transport.d.ts +85 -0
- package/dist/cjs/transports/Transport.js +171 -0
- package/dist/cjs/transports/Transport.js.map +1 -0
- package/dist/cjs/transports/clients/ClientEvents.d.ts +6 -0
- package/dist/cjs/transports/clients/ClientEvents.js +3 -0
- package/dist/cjs/transports/clients/ClientEvents.js.map +1 -0
- package/dist/cjs/transports/clients/CommunicationClient.d.ts +47 -0
- package/dist/cjs/transports/clients/CommunicationClient.js +86 -0
- package/dist/cjs/transports/clients/CommunicationClient.js.map +1 -0
- package/dist/cjs/transports/clients/MessageBasedClient.d.ts +56 -0
- package/dist/cjs/transports/clients/MessageBasedClient.js +109 -0
- package/dist/cjs/transports/clients/MessageBasedClient.js.map +1 -0
- package/dist/cjs/utils/Logger.d.ts +33 -0
- package/dist/cjs/utils/Logger.js +98 -0
- package/dist/cjs/utils/Logger.js.map +1 -0
- package/dist/cjs/utils/assert-never.d.ts +6 -0
- package/dist/cjs/utils/assert-never.js +14 -0
- package/dist/cjs/utils/assert-never.js.map +1 -0
- package/dist/cjs/utils/get-account-identifier.d.ts +10 -0
- package/dist/cjs/utils/get-account-identifier.js +36 -0
- package/dist/cjs/utils/get-account-identifier.js.map +1 -0
- package/dist/cjs/utils/get-sender-id.d.ts +8 -0
- package/dist/cjs/utils/get-sender-id.js +31 -0
- package/dist/cjs/utils/get-sender-id.js.map +1 -0
- package/dist/cjs/utils/multi-tab-channel.d.ts +17 -0
- package/dist/cjs/utils/multi-tab-channel.js +85 -0
- package/dist/cjs/utils/multi-tab-channel.js.map +1 -0
- package/dist/esm/MockAnalytics.d.ts +4 -0
- package/dist/esm/MockAnalytics.js +7 -0
- package/dist/esm/MockAnalytics.js.map +1 -0
- package/dist/esm/MockWindow.d.ts +14 -0
- package/dist/esm/MockWindow.js +35 -0
- package/dist/esm/MockWindow.js.map +1 -0
- package/dist/esm/Serializer.d.ts +19 -0
- package/dist/esm/Serializer.js +31 -0
- package/dist/esm/Serializer.js.map +1 -0
- package/dist/esm/clients/beacon-client/BeaconClient.d.ts +53 -0
- package/dist/esm/clients/beacon-client/BeaconClient.js +103 -0
- package/dist/esm/clients/beacon-client/BeaconClient.js.map +1 -0
- package/dist/esm/clients/beacon-client/BeaconClientOptions.d.ts +26 -0
- package/dist/esm/clients/beacon-client/BeaconClientOptions.js +2 -0
- package/dist/esm/clients/beacon-client/BeaconClientOptions.js.map +1 -0
- package/dist/esm/clients/client/Client.d.ts +91 -0
- package/dist/esm/clients/client/Client.js +198 -0
- package/dist/esm/clients/client/Client.js.map +1 -0
- package/dist/esm/clients/client/ClientOptions.d.ts +42 -0
- package/dist/esm/clients/client/ClientOptions.js +2 -0
- package/dist/esm/clients/client/ClientOptions.js.map +1 -0
- package/dist/esm/constants.d.ts +4 -0
- package/dist/esm/constants.js +5 -0
- package/dist/esm/constants.js.map +1 -0
- package/dist/esm/debug.d.ts +2 -0
- package/dist/esm/debug.js +12 -0
- package/dist/esm/debug.js.map +1 -0
- package/dist/esm/errors/AbortedBeaconError.d.ts +9 -0
- package/dist/esm/errors/AbortedBeaconError.js +13 -0
- package/dist/esm/errors/AbortedBeaconError.js.map +1 -0
- package/dist/esm/errors/BeaconError.d.ts +15 -0
- package/dist/esm/errors/BeaconError.js +17 -0
- package/dist/esm/errors/BeaconError.js.map +1 -0
- package/dist/esm/errors/BroadcastBeaconError.d.ts +9 -0
- package/dist/esm/errors/BroadcastBeaconError.js +13 -0
- package/dist/esm/errors/BroadcastBeaconError.js.map +1 -0
- package/dist/esm/errors/EncryptionTypeNotSupportedBeaconError.d.ts +3 -0
- package/dist/esm/errors/EncryptionTypeNotSupportedBeaconError.js +18 -0
- package/dist/esm/errors/EncryptionTypeNotSupportedBeaconError.js.map +1 -0
- package/dist/esm/errors/NetworkNotSupportedBeaconError.d.ts +9 -0
- package/dist/esm/errors/NetworkNotSupportedBeaconError.js +13 -0
- package/dist/esm/errors/NetworkNotSupportedBeaconError.js.map +1 -0
- package/dist/esm/errors/NoAddressBeaconError.d.ts +9 -0
- package/dist/esm/errors/NoAddressBeaconError.js +13 -0
- package/dist/esm/errors/NoAddressBeaconError.js.map +1 -0
- package/dist/esm/errors/NoPrivateKeyBeaconError.d.ts +9 -0
- package/dist/esm/errors/NoPrivateKeyBeaconError.js +13 -0
- package/dist/esm/errors/NoPrivateKeyBeaconError.js.map +1 -0
- package/dist/esm/errors/NotGrantedBeaconError.d.ts +9 -0
- package/dist/esm/errors/NotGrantedBeaconError.js +13 -0
- package/dist/esm/errors/NotGrantedBeaconError.js.map +1 -0
- package/dist/esm/errors/ParametersInvalidBeaconError.d.ts +9 -0
- package/dist/esm/errors/ParametersInvalidBeaconError.js +13 -0
- package/dist/esm/errors/ParametersInvalidBeaconError.js.map +1 -0
- package/dist/esm/errors/SignatureTypeNotSupportedBeaconError.d.ts +9 -0
- package/dist/esm/errors/SignatureTypeNotSupportedBeaconError.js +13 -0
- package/dist/esm/errors/SignatureTypeNotSupportedBeaconError.js.map +1 -0
- package/dist/esm/errors/TooManyOperationsBeaconError.d.ts +9 -0
- package/dist/esm/errors/TooManyOperationsBeaconError.js +13 -0
- package/dist/esm/errors/TooManyOperationsBeaconError.js.map +1 -0
- package/dist/esm/errors/TransactionInvalidBeaconError.d.ts +14 -0
- package/dist/esm/errors/TransactionInvalidBeaconError.js +19 -0
- package/dist/esm/errors/TransactionInvalidBeaconError.js.map +1 -0
- package/dist/esm/errors/UnknownBeaconError.d.ts +9 -0
- package/dist/esm/errors/UnknownBeaconError.js +13 -0
- package/dist/esm/errors/UnknownBeaconError.js.map +1 -0
- package/dist/esm/errors/get-error.d.ts +8 -0
- package/dist/esm/errors/get-error.js +49 -0
- package/dist/esm/errors/get-error.js.map +1 -0
- package/dist/esm/index.d.ts +53 -0
- package/dist/esm/index.js +67 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/managers/AccountManager.d.ts +18 -0
- package/dist/esm/managers/AccountManager.js +44 -0
- package/dist/esm/managers/AccountManager.js.map +1 -0
- package/dist/esm/managers/AppMetadataManager.d.ts +16 -0
- package/dist/esm/managers/AppMetadataManager.js +32 -0
- package/dist/esm/managers/AppMetadataManager.js.map +1 -0
- package/dist/esm/managers/PeerManager.d.ts +18 -0
- package/dist/esm/managers/PeerManager.js +34 -0
- package/dist/esm/managers/PeerManager.js.map +1 -0
- package/dist/esm/managers/PermissionManager.d.ts +17 -0
- package/dist/esm/managers/PermissionManager.js +37 -0
- package/dist/esm/managers/PermissionManager.js.map +1 -0
- package/dist/esm/managers/PermissionValidator.d.ts +16 -0
- package/dist/esm/managers/PermissionValidator.js +43 -0
- package/dist/esm/managers/PermissionValidator.js.map +1 -0
- package/dist/esm/managers/StorageManager.d.ts +18 -0
- package/dist/esm/managers/StorageManager.js +50 -0
- package/dist/esm/managers/StorageManager.js.map +1 -0
- package/dist/esm/migrations/migrate-0.7.0.d.ts +20 -0
- package/dist/esm/migrations/migrate-0.7.0.js +31 -0
- package/dist/esm/migrations/migrate-0.7.0.js.map +1 -0
- package/dist/esm/migrations/migrations.d.ts +2 -0
- package/dist/esm/migrations/migrations.js +31 -0
- package/dist/esm/migrations/migrations.js.map +1 -0
- package/dist/esm/storage/ChromeStorage.d.ts +19 -0
- package/dist/esm/storage/ChromeStorage.js +53 -0
- package/dist/esm/storage/ChromeStorage.js.map +1 -0
- package/dist/esm/storage/IndexedDBStorage.d.ts +65 -0
- package/dist/esm/storage/IndexedDBStorage.js +212 -0
- package/dist/esm/storage/IndexedDBStorage.js.map +1 -0
- package/dist/esm/storage/LocalStorage.d.ts +21 -0
- package/dist/esm/storage/LocalStorage.js +70 -0
- package/dist/esm/storage/LocalStorage.js.map +1 -0
- package/dist/esm/storage/StorageValidator.d.ts +12 -0
- package/dist/esm/storage/StorageValidator.js +96 -0
- package/dist/esm/storage/StorageValidator.js.map +1 -0
- package/dist/esm/storage/WCStorage.d.ts +15 -0
- package/dist/esm/storage/WCStorage.js +64 -0
- package/dist/esm/storage/WCStorage.js.map +1 -0
- package/dist/esm/storage/getStorage.d.ts +5 -0
- package/dist/esm/storage/getStorage.js +21 -0
- package/dist/esm/storage/getStorage.js.map +1 -0
- package/dist/esm/transports/Transport.d.ts +85 -0
- package/dist/esm/transports/Transport.js +149 -0
- package/dist/esm/transports/Transport.js.map +1 -0
- package/dist/esm/transports/clients/ClientEvents.d.ts +6 -0
- package/dist/esm/transports/clients/ClientEvents.js +2 -0
- package/dist/esm/transports/clients/ClientEvents.js.map +1 -0
- package/dist/esm/transports/clients/CommunicationClient.d.ts +47 -0
- package/dist/esm/transports/clients/CommunicationClient.js +63 -0
- package/dist/esm/transports/clients/CommunicationClient.js.map +1 -0
- package/dist/esm/transports/clients/MessageBasedClient.d.ts +56 -0
- package/dist/esm/transports/clients/MessageBasedClient.js +83 -0
- package/dist/esm/transports/clients/MessageBasedClient.js.map +1 -0
- package/dist/esm/utils/Logger.d.ts +33 -0
- package/dist/esm/utils/Logger.js +92 -0
- package/dist/esm/utils/Logger.js.map +1 -0
- package/dist/esm/utils/assert-never.d.ts +6 -0
- package/dist/esm/utils/assert-never.js +11 -0
- package/dist/esm/utils/assert-never.js.map +1 -0
- package/dist/esm/utils/get-account-identifier.d.ts +10 -0
- package/dist/esm/utils/get-account-identifier.js +23 -0
- package/dist/esm/utils/get-account-identifier.js.map +1 -0
- package/dist/esm/utils/get-sender-id.d.ts +8 -0
- package/dist/esm/utils/get-sender-id.js +18 -0
- package/dist/esm/utils/get-sender-id.js.map +1 -0
- package/dist/esm/utils/multi-tab-channel.d.ts +17 -0
- package/dist/esm/utils/multi-tab-channel.js +66 -0
- package/dist/esm/utils/multi-tab-channel.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { toHex, getHexHash, sealCryptobox } from '@tezos-x/octez.connect-utils';
|
|
2
|
+
import { convertPublicKeyToX25519, convertSecretKeyToX25519 } from '@stablelib/ed25519';
|
|
3
|
+
import { clientSessionKeys, serverSessionKeys } from '@stablelib/x25519-session';
|
|
4
|
+
/**
|
|
5
|
+
* @internalapi
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
export class CommunicationClient {
|
|
10
|
+
keyPair;
|
|
11
|
+
constructor(keyPair) {
|
|
12
|
+
this.keyPair = keyPair;
|
|
13
|
+
}
|
|
14
|
+
eventHandlers = new Map();
|
|
15
|
+
// todo move OS
|
|
16
|
+
isMobileOS = () => /(Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Mobile|Tablet|Windows Phone|SymbianOS|Kindle)/i.test(navigator.userAgent);
|
|
17
|
+
/**
|
|
18
|
+
* Get the public key
|
|
19
|
+
*/
|
|
20
|
+
async getPublicKey() {
|
|
21
|
+
return toHex(this.keyPair?.publicKey);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* get the public key hash
|
|
25
|
+
*/
|
|
26
|
+
async getPublicKeyHash() {
|
|
27
|
+
return getHexHash(this.keyPair.publicKey);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create a cryptobox server
|
|
31
|
+
*
|
|
32
|
+
* @param otherPublicKey
|
|
33
|
+
* @param selfKeypair
|
|
34
|
+
*/
|
|
35
|
+
async createCryptoBoxServer(otherPublicKey, selfKeypair) {
|
|
36
|
+
return serverSessionKeys({
|
|
37
|
+
publicKey: convertPublicKeyToX25519(selfKeypair.publicKey),
|
|
38
|
+
secretKey: convertSecretKeyToX25519(selfKeypair.secretKey)
|
|
39
|
+
}, convertPublicKeyToX25519(Buffer.from(otherPublicKey, 'hex')));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create a cryptobox client
|
|
43
|
+
*
|
|
44
|
+
* @param otherPublicKey
|
|
45
|
+
* @param selfKeypair
|
|
46
|
+
*/
|
|
47
|
+
async createCryptoBoxClient(otherPublicKey, selfKeypair) {
|
|
48
|
+
return clientSessionKeys({
|
|
49
|
+
publicKey: convertPublicKeyToX25519(selfKeypair.publicKey),
|
|
50
|
+
secretKey: convertSecretKeyToX25519(selfKeypair.secretKey)
|
|
51
|
+
}, convertPublicKeyToX25519(Buffer.from(otherPublicKey, 'hex')));
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Encrypt a message for a specific publicKey (receiver, asymmetric)
|
|
55
|
+
*
|
|
56
|
+
* @param recipientPublicKey
|
|
57
|
+
* @param message
|
|
58
|
+
*/
|
|
59
|
+
async encryptMessageAsymmetric(recipientPublicKey, message) {
|
|
60
|
+
return sealCryptobox(message, Buffer.from(recipientPublicKey, 'hex'));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=CommunicationClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommunicationClient.js","sourceRoot":"","sources":["../../../../src/transports/clients/CommunicationClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC/E,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAW,MAAM,oBAAoB,CAAA;AAChG,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAe,MAAM,2BAA2B,CAAA;AAE7F;;;;GAIG;AACH,MAAM,OAAgB,mBAAmB;IACjB;IAAtB,YAAsB,OAAiB;QAAjB,YAAO,GAAP,OAAO,CAAU;IAAG,CAAC;IAEpC,aAAa,GAAgC,IAAI,GAAG,EAAE,CAAA;IAE7D,eAAe;IACL,UAAU,GAAG,GAAY,EAAE,CACnC,+GAA+G,CAAC,IAAI,CAClH,SAAS,CAAC,SAAS,CACpB,CAAA;IAEH;;OAEG;IACI,KAAK,CAAC,YAAY;QACvB,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;IACvC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,gBAAgB;QAC3B,OAAO,UAAU,CAAC,IAAI,CAAC,OAAQ,CAAC,SAAS,CAAC,CAAA;IAC5C,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,qBAAqB,CACnC,cAAsB,EACtB,WAAoB;QAEpB,OAAO,iBAAiB,CACtB;YACE,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,SAAS,CAAC;YAC1D,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,SAAS,CAAC;SAC3D,EACD,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAC7D,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,qBAAqB,CACnC,cAAsB,EACtB,WAAoB;QAEpB,OAAO,iBAAiB,CACtB;YACE,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,SAAS,CAAC;YAC1D,SAAS,EAAE,wBAAwB,CAAC,WAAW,CAAC,SAAS,CAAC;SAC3D,EACD,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAC7D,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,wBAAwB,CACtC,kBAA0B,EAC1B,OAAe;QAEf,OAAO,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAA;IACvE,CAAC;CAMF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { CommunicationClient } from './CommunicationClient';
|
|
2
|
+
import { PostMessagePairingRequest, PostMessagePairingResponse } from '@tezos-x/octez.connect-types';
|
|
3
|
+
import { KeyPair } from '@stablelib/ed25519';
|
|
4
|
+
/**
|
|
5
|
+
* @internalapi
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class MessageBasedClient extends CommunicationClient {
|
|
10
|
+
protected readonly name: string;
|
|
11
|
+
/**
|
|
12
|
+
* The listeners that will be notified of new messages
|
|
13
|
+
*/
|
|
14
|
+
protected abstract readonly activeListeners: Map<string, unknown>;
|
|
15
|
+
constructor(name: string, keyPair: KeyPair);
|
|
16
|
+
/**
|
|
17
|
+
* start the client and make sure all dependencies are ready
|
|
18
|
+
*/
|
|
19
|
+
start(): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Get the pairing request information. This will be shared with the peer during the connection setup
|
|
22
|
+
*/
|
|
23
|
+
getPairingRequestInfo(): Promise<PostMessagePairingRequest>;
|
|
24
|
+
/**
|
|
25
|
+
* Get the pairing response information. This will be shared with the peer during the connection setup
|
|
26
|
+
*/
|
|
27
|
+
getPairingResponseInfo(request: PostMessagePairingRequest): Promise<PostMessagePairingResponse>;
|
|
28
|
+
/**
|
|
29
|
+
* Unsubscribe from encrypted messages from a specific peer
|
|
30
|
+
*
|
|
31
|
+
* @param senderPublicKey
|
|
32
|
+
*/
|
|
33
|
+
unsubscribeFromEncryptedMessage(senderPublicKey: string): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Unsubscribe from all encrypted messages
|
|
36
|
+
*/
|
|
37
|
+
unsubscribeFromEncryptedMessages(): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Decrypt a message from a specific peer
|
|
40
|
+
*
|
|
41
|
+
* @param senderPublicKey
|
|
42
|
+
* @param payload
|
|
43
|
+
*/
|
|
44
|
+
protected decryptMessage(senderPublicKey: string, payload: string): Promise<string>;
|
|
45
|
+
/**
|
|
46
|
+
* Encrypt a message for a specific publicKey (receiver)
|
|
47
|
+
*
|
|
48
|
+
* @param recipientPublicKey
|
|
49
|
+
* @param message
|
|
50
|
+
*/
|
|
51
|
+
protected encryptMessage(recipientPublicKey: string, message: string): Promise<string>;
|
|
52
|
+
/**
|
|
53
|
+
* Initialize the connection
|
|
54
|
+
*/
|
|
55
|
+
abstract init(): Promise<void>;
|
|
56
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { BEACON_VERSION } from '../../constants';
|
|
2
|
+
import { decryptCryptoboxPayload, encryptCryptoboxPayload, generateGUID, secretbox_NONCEBYTES, secretbox_MACBYTES } from '@tezos-x/octez.connect-utils';
|
|
3
|
+
import { CommunicationClient } from './CommunicationClient';
|
|
4
|
+
import { PostMessagePairingRequest, PostMessagePairingResponse } from '@tezos-x/octez.connect-types';
|
|
5
|
+
/**
|
|
6
|
+
* @internalapi
|
|
7
|
+
*
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
export class MessageBasedClient extends CommunicationClient {
|
|
11
|
+
name;
|
|
12
|
+
constructor(name, keyPair) {
|
|
13
|
+
super(keyPair);
|
|
14
|
+
this.name = name;
|
|
15
|
+
this.init().catch(console.error);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* start the client and make sure all dependencies are ready
|
|
19
|
+
*/
|
|
20
|
+
async start() {
|
|
21
|
+
await Promise.resolve();
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get the pairing request information. This will be shared with the peer during the connection setup
|
|
25
|
+
*/
|
|
26
|
+
async getPairingRequestInfo() {
|
|
27
|
+
return new PostMessagePairingRequest(await generateGUID(), this.name, await this.getPublicKey(), BEACON_VERSION);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get the pairing response information. This will be shared with the peer during the connection setup
|
|
31
|
+
*/
|
|
32
|
+
async getPairingResponseInfo(request) {
|
|
33
|
+
return new PostMessagePairingResponse(request.id, this.name, await this.getPublicKey(), request.version);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Unsubscribe from encrypted messages from a specific peer
|
|
37
|
+
*
|
|
38
|
+
* @param senderPublicKey
|
|
39
|
+
*/
|
|
40
|
+
async unsubscribeFromEncryptedMessage(senderPublicKey) {
|
|
41
|
+
const listener = this.activeListeners.get(senderPublicKey);
|
|
42
|
+
if (!listener) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
this.activeListeners.delete(senderPublicKey);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Unsubscribe from all encrypted messages
|
|
49
|
+
*/
|
|
50
|
+
async unsubscribeFromEncryptedMessages() {
|
|
51
|
+
this.activeListeners.clear();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Decrypt a message from a specific peer
|
|
55
|
+
*
|
|
56
|
+
* @param senderPublicKey
|
|
57
|
+
* @param payload
|
|
58
|
+
*/
|
|
59
|
+
async decryptMessage(senderPublicKey, payload) {
|
|
60
|
+
const sharedKey = await this.createCryptoBoxServer(senderPublicKey, this.keyPair);
|
|
61
|
+
const hexPayload = Buffer.from(payload, 'hex');
|
|
62
|
+
if (hexPayload.length >= secretbox_NONCEBYTES + secretbox_MACBYTES) {
|
|
63
|
+
try {
|
|
64
|
+
return await decryptCryptoboxPayload(hexPayload, sharedKey.receive);
|
|
65
|
+
}
|
|
66
|
+
catch (decryptionError) {
|
|
67
|
+
/* NO-OP. We try to decode every message, but some might not be addressed to us. */
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
throw new Error('Could not decrypt message');
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Encrypt a message for a specific publicKey (receiver)
|
|
74
|
+
*
|
|
75
|
+
* @param recipientPublicKey
|
|
76
|
+
* @param message
|
|
77
|
+
*/
|
|
78
|
+
async encryptMessage(recipientPublicKey, message) {
|
|
79
|
+
const sharedKey = await this.createCryptoBoxClient(recipientPublicKey, this.keyPair);
|
|
80
|
+
return encryptCryptoboxPayload(message, sharedKey.send);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=MessageBasedClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageBasedClient.js","sourceRoot":"","sources":["../../../../src/transports/clients/MessageBasedClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AAGpG;;;;GAIG;AACH,MAAM,OAAgB,kBAAmB,SAAQ,mBAAmB;IAO7C;IADrB,YACqB,IAAY,EAC/B,OAAgB;QAEhB,KAAK,CAAC,OAAO,CAAC,CAAA;QAHK,SAAI,GAAJ,IAAI,CAAQ;QAI/B,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAClC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,KAAK;QAChB,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;IACzB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,qBAAqB;QAChC,OAAO,IAAI,yBAAyB,CAClC,MAAM,YAAY,EAAE,EACpB,IAAI,CAAC,IAAI,EACT,MAAM,IAAI,CAAC,YAAY,EAAE,EACzB,cAAc,CACf,CAAA;IACH,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,sBAAsB,CACjC,OAAkC;QAElC,OAAO,IAAI,0BAA0B,CACnC,OAAO,CAAC,EAAE,EACV,IAAI,CAAC,IAAI,EACT,MAAM,IAAI,CAAC,YAAY,EAAE,EACzB,OAAO,CAAC,OAAO,CAChB,CAAA;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,+BAA+B,CAAC,eAAuB;QAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAC1D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAM;QACR,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;IAC9C,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,gCAAgC;QAC3C,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAA;IAC9B,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,cAAc,CAAC,eAAuB,EAAE,OAAe;QACrE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,eAAe,EAAE,IAAI,CAAC,OAAQ,CAAC,CAAA;QAElF,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAE9C,IAAI,UAAU,CAAC,MAAM,IAAI,oBAAoB,GAAG,kBAAkB,EAAE,CAAC;YACnE,IAAI,CAAC;gBACH,OAAO,MAAM,uBAAuB,CAAC,UAAU,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;YACrE,CAAC;YAAC,OAAO,eAAe,EAAE,CAAC;gBACzB,mFAAmF;YACrF,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAC9C,CAAC;IAED;;;;;OAKG;IACO,KAAK,CAAC,cAAc,CAAC,kBAA0B,EAAE,OAAe;QACxE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,kBAAkB,EAAE,IAAI,CAAC,OAAQ,CAAC,CAAA;QAErF,OAAO,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,CAAC,CAAA;IACzD,CAAC;CAMF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface LoggerInterface {
|
|
2
|
+
debug(method: string, ...args: any[]): void;
|
|
3
|
+
log(method: string, ...args: any[]): void;
|
|
4
|
+
warn(method: string, ...args: any[]): void;
|
|
5
|
+
error(method: string, ...args: any[]): void;
|
|
6
|
+
time(start: boolean, label?: string): void;
|
|
7
|
+
timeLog(method: string, ...args: any[]): void;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The logger that is used internally
|
|
11
|
+
*/
|
|
12
|
+
export declare class InternalLogger implements LoggerInterface {
|
|
13
|
+
constructor();
|
|
14
|
+
debug(name: string, method: string, ...args: any[]): void;
|
|
15
|
+
log(name: string, method: string, ...args: any[]): void;
|
|
16
|
+
warn(name: string, method: string, ...args: any[]): void;
|
|
17
|
+
error(name: string, method: string, ...args: any[]): void;
|
|
18
|
+
time(start: boolean, label?: string | undefined): void;
|
|
19
|
+
timeLog(name: string, method: string, ...args: any[]): void;
|
|
20
|
+
private _log;
|
|
21
|
+
}
|
|
22
|
+
export declare class Logger implements LoggerInterface {
|
|
23
|
+
private readonly name;
|
|
24
|
+
constructor(service: string);
|
|
25
|
+
debug(method: string, ...args: any[]): void;
|
|
26
|
+
log(method: string, ...args: any[]): void;
|
|
27
|
+
warn(method: string, ...args: any[]): void;
|
|
28
|
+
error(method: string, ...args: any[]): void;
|
|
29
|
+
time(start: boolean, label?: string | undefined): void;
|
|
30
|
+
timeLog(method: string, ...args: any[]): void;
|
|
31
|
+
}
|
|
32
|
+
export declare const setLogger: (newLogger: LoggerInterface) => void;
|
|
33
|
+
export declare const getLogger: () => LoggerInterface;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { getDebugEnabled } from '../debug';
|
|
2
|
+
/**
|
|
3
|
+
* The logger that is used internally
|
|
4
|
+
*/
|
|
5
|
+
export class InternalLogger {
|
|
6
|
+
constructor() { }
|
|
7
|
+
debug(name, method, ...args) {
|
|
8
|
+
this._log('debug', name, method, args);
|
|
9
|
+
}
|
|
10
|
+
log(name, method, ...args) {
|
|
11
|
+
this._log('log', name, method, args);
|
|
12
|
+
}
|
|
13
|
+
warn(name, method, ...args) {
|
|
14
|
+
this._log('warn', name, method, args);
|
|
15
|
+
}
|
|
16
|
+
error(name, method, ...args) {
|
|
17
|
+
this._log('error', name, method, args);
|
|
18
|
+
}
|
|
19
|
+
time(start, label) {
|
|
20
|
+
start ? console.time(label) : console.timeEnd(label);
|
|
21
|
+
}
|
|
22
|
+
timeLog(name, method, ...args) {
|
|
23
|
+
this._log('timeLog', name, method, args);
|
|
24
|
+
}
|
|
25
|
+
_log(type, name, method, args = []) {
|
|
26
|
+
if (!getDebugEnabled()) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
let groupText = `[BEACON] ${new Date().toISOString()} [${name}](${method})`;
|
|
30
|
+
let data = args;
|
|
31
|
+
if (args[0] && typeof args[0] === 'string') {
|
|
32
|
+
groupText += ` ${args[0]}`;
|
|
33
|
+
data = args.slice(1);
|
|
34
|
+
}
|
|
35
|
+
switch (type) {
|
|
36
|
+
case 'error':
|
|
37
|
+
console.group(groupText);
|
|
38
|
+
console.error(...data);
|
|
39
|
+
break;
|
|
40
|
+
case 'warn':
|
|
41
|
+
console.group(groupText);
|
|
42
|
+
console.warn(...data);
|
|
43
|
+
break;
|
|
44
|
+
case 'debug':
|
|
45
|
+
console.groupCollapsed(groupText);
|
|
46
|
+
console.debug(...data);
|
|
47
|
+
break;
|
|
48
|
+
case 'timeLog':
|
|
49
|
+
console.group(groupText);
|
|
50
|
+
console.timeLog(...data);
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
console.group(groupText);
|
|
54
|
+
console.log(...data);
|
|
55
|
+
}
|
|
56
|
+
console.groupEnd();
|
|
57
|
+
// echo.group(echo.asWarning(`[BEACON] ${message}`))
|
|
58
|
+
// echo.log(echo.asWarning(`[${this.name}]`), echo.asAlert(`(${method})`), ...args)
|
|
59
|
+
// echo.groupEnd()
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export class Logger {
|
|
63
|
+
name;
|
|
64
|
+
constructor(service) {
|
|
65
|
+
this.name = service;
|
|
66
|
+
}
|
|
67
|
+
debug(method, ...args) {
|
|
68
|
+
logger.debug(this.name, method, args);
|
|
69
|
+
}
|
|
70
|
+
log(method, ...args) {
|
|
71
|
+
logger.log(this.name, method, args);
|
|
72
|
+
}
|
|
73
|
+
warn(method, ...args) {
|
|
74
|
+
logger.warn(this.name, method, args);
|
|
75
|
+
}
|
|
76
|
+
error(method, ...args) {
|
|
77
|
+
logger.error(this.name, method, args);
|
|
78
|
+
}
|
|
79
|
+
time(start, label) {
|
|
80
|
+
logger.time(start, label);
|
|
81
|
+
}
|
|
82
|
+
timeLog(method, ...args) {
|
|
83
|
+
logger.timeLog(method, args);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const loggerWrapper = new Logger('');
|
|
87
|
+
let logger = new InternalLogger();
|
|
88
|
+
export const setLogger = (newLogger) => {
|
|
89
|
+
logger = newLogger;
|
|
90
|
+
};
|
|
91
|
+
export const getLogger = () => loggerWrapper;
|
|
92
|
+
//# sourceMappingURL=Logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../../src/utils/Logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* eslint-disable prefer-arrow/prefer-arrow-functions */
|
|
2
|
+
/**
|
|
3
|
+
* A helper function to make sure if/elses and switch/cases are exhaustive
|
|
4
|
+
*
|
|
5
|
+
* @param empty The data that has to be empty
|
|
6
|
+
*/
|
|
7
|
+
export function assertNever(empty) {
|
|
8
|
+
return empty;
|
|
9
|
+
}
|
|
10
|
+
/* eslint-enable prefer-arrow/prefer-arrow-functions */
|
|
11
|
+
//# sourceMappingURL=assert-never.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert-never.js","sourceRoot":"","sources":["../../../src/utils/assert-never.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAExD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,OAAO,KAAK,CAAA;AACd,CAAC;AAED,uDAAuD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Network } from '@tezos-x/octez.connect-types';
|
|
2
|
+
/**
|
|
3
|
+
* @internalapi
|
|
4
|
+
*
|
|
5
|
+
* Generate a deterministic account identifier based on an address and a network
|
|
6
|
+
*
|
|
7
|
+
* @param address
|
|
8
|
+
* @param network
|
|
9
|
+
*/
|
|
10
|
+
export declare const getAccountIdentifier: (address: string, network: Network) => Promise<string>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import bs58check from 'bs58check';
|
|
2
|
+
import { hash } from '@stablelib/blake2b';
|
|
3
|
+
import { encode } from '@stablelib/utf8';
|
|
4
|
+
/**
|
|
5
|
+
* @internalapi
|
|
6
|
+
*
|
|
7
|
+
* Generate a deterministic account identifier based on an address and a network
|
|
8
|
+
*
|
|
9
|
+
* @param address
|
|
10
|
+
* @param network
|
|
11
|
+
*/
|
|
12
|
+
export const getAccountIdentifier = async (address, network) => {
|
|
13
|
+
const data = [address, network.type];
|
|
14
|
+
if (network.name) {
|
|
15
|
+
data.push(`name:${network.name}`);
|
|
16
|
+
}
|
|
17
|
+
if (network.rpcUrl) {
|
|
18
|
+
data.push(`rpc:${network.rpcUrl}`);
|
|
19
|
+
}
|
|
20
|
+
const buffer = Buffer.from(hash(encode(data.join('-')), 10));
|
|
21
|
+
return bs58check.encode(buffer);
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=get-account-identifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-account-identifier.js","sourceRoot":"","sources":["../../../src/utils/get-account-identifier.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAA;AAEjC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAExC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAE,OAAe,EAAE,OAAgB,EAAmB,EAAE;IAC/F,MAAM,IAAI,GAAa,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACnC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAE5D,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACjC,CAAC,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { hash } from '@stablelib/blake2b';
|
|
2
|
+
import bs58check from 'bs58check';
|
|
3
|
+
const isHex = (str) => /^[A-F0-9]+$/i.test(str);
|
|
4
|
+
/**
|
|
5
|
+
* @internalapi
|
|
6
|
+
*
|
|
7
|
+
* Generate a deterministic sender identifier based on a public key
|
|
8
|
+
*
|
|
9
|
+
* @param publicKey
|
|
10
|
+
*/
|
|
11
|
+
export const getSenderId = async (publicKey) => {
|
|
12
|
+
if (!isHex(publicKey)) {
|
|
13
|
+
console.error('PublicKey needs to be in hex format!');
|
|
14
|
+
}
|
|
15
|
+
const buffer = Buffer.from(hash(Buffer.from(publicKey, 'hex'), 5));
|
|
16
|
+
return bs58check.encode(buffer);
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=get-sender-id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-sender-id.js","sourceRoot":"","sources":["../../../src/utils/get-sender-id.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,SAAS,MAAM,WAAW,CAAA;AAEjC,MAAM,KAAK,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAEhE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,SAAiB,EAAmB,EAAE;IACtE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;IACvD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAElE,OAAO,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACjC,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare class MultiTabChannel {
|
|
2
|
+
private channel;
|
|
3
|
+
private elector;
|
|
4
|
+
private eventListeners;
|
|
5
|
+
private onBCMessageHandler;
|
|
6
|
+
private onElectedLeaderHandler;
|
|
7
|
+
private wasLeader;
|
|
8
|
+
private initialized;
|
|
9
|
+
constructor(name: string, onBCMessageHandler: Function, onElectedLeaderHandler: Function);
|
|
10
|
+
init(): Promise<void>;
|
|
11
|
+
private onBeforeUnloadHandler;
|
|
12
|
+
private onMessageHandler;
|
|
13
|
+
isLeader(): boolean;
|
|
14
|
+
getLeadership(): Promise<void>;
|
|
15
|
+
hasLeader(): Promise<boolean>;
|
|
16
|
+
postMessage(message: any): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { createLeaderElection, BroadcastChannel } from 'broadcast-channel';
|
|
2
|
+
export class MultiTabChannel {
|
|
3
|
+
channel;
|
|
4
|
+
elector;
|
|
5
|
+
eventListeners = [
|
|
6
|
+
() => this.onBeforeUnloadHandler(),
|
|
7
|
+
(message) => this.onMessageHandler(message)
|
|
8
|
+
];
|
|
9
|
+
onBCMessageHandler;
|
|
10
|
+
onElectedLeaderHandler;
|
|
11
|
+
// Auxiliary variable needed for handling beforeUnload.
|
|
12
|
+
// Closing a tab causes the elector to be killed immediately
|
|
13
|
+
wasLeader = false;
|
|
14
|
+
initialized = false;
|
|
15
|
+
constructor(name, onBCMessageHandler, onElectedLeaderHandler) {
|
|
16
|
+
this.onBCMessageHandler = onBCMessageHandler;
|
|
17
|
+
this.onElectedLeaderHandler = onElectedLeaderHandler;
|
|
18
|
+
this.channel = new BroadcastChannel(name);
|
|
19
|
+
this.elector = createLeaderElection(this.channel);
|
|
20
|
+
}
|
|
21
|
+
async init() {
|
|
22
|
+
if (this.initialized) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const hasLeader = await this.elector.hasLeader();
|
|
26
|
+
if (!hasLeader) {
|
|
27
|
+
await this.elector.awaitLeadership();
|
|
28
|
+
this.wasLeader = this.isLeader();
|
|
29
|
+
}
|
|
30
|
+
this.channel.onmessage = this.eventListeners[1];
|
|
31
|
+
window?.addEventListener('beforeunload', this.eventListeners[0]);
|
|
32
|
+
this.initialized = true;
|
|
33
|
+
}
|
|
34
|
+
async onBeforeUnloadHandler() {
|
|
35
|
+
if (this.wasLeader) {
|
|
36
|
+
await this.elector.die();
|
|
37
|
+
this.postMessage({ type: 'LEADER_DEAD' });
|
|
38
|
+
}
|
|
39
|
+
window?.removeEventListener('beforeunload', this.eventListeners[0]);
|
|
40
|
+
this.channel.removeEventListener('message', this.eventListeners[1]);
|
|
41
|
+
}
|
|
42
|
+
async onMessageHandler(message) {
|
|
43
|
+
if (message.type === 'LEADER_DEAD') {
|
|
44
|
+
await this.elector.awaitLeadership();
|
|
45
|
+
this.wasLeader = this.isLeader();
|
|
46
|
+
if (this.isLeader()) {
|
|
47
|
+
this.onElectedLeaderHandler();
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.onBCMessageHandler(message);
|
|
52
|
+
}
|
|
53
|
+
isLeader() {
|
|
54
|
+
return this.elector.isLeader;
|
|
55
|
+
}
|
|
56
|
+
async getLeadership() {
|
|
57
|
+
return this.elector.awaitLeadership();
|
|
58
|
+
}
|
|
59
|
+
async hasLeader() {
|
|
60
|
+
return this.elector.hasLeader();
|
|
61
|
+
}
|
|
62
|
+
postMessage(message) {
|
|
63
|
+
this.channel.postMessage(message);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=multi-tab-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-tab-channel.js","sourceRoot":"","sources":["../../../src/utils/multi-tab-channel.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tezos-x/octez.connect-core",
|
|
3
|
+
"version": "0.9.0",
|
|
4
|
+
"description": "This package contains internal methods that are used by both the dApp and wallet client.",
|
|
5
|
+
"author": "Andreas Gassmann <a.gassmann@papers.ch>",
|
|
6
|
+
"license": "ISC",
|
|
7
|
+
"main": "dist/cjs/index.js",
|
|
8
|
+
"module": "dist/esm/index.js",
|
|
9
|
+
"types": "dist/esm/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
"require": "./dist/cjs/index.js",
|
|
12
|
+
"import": "./dist/esm/index.js"
|
|
13
|
+
},
|
|
14
|
+
"directories": {
|
|
15
|
+
"lib": "dist/esm",
|
|
16
|
+
"test": "__tests__"
|
|
17
|
+
},
|
|
18
|
+
"files": [
|
|
19
|
+
"dist"
|
|
20
|
+
],
|
|
21
|
+
"publishConfig": {
|
|
22
|
+
"access": "public"
|
|
23
|
+
},
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/trilitech/octez.connect-sdk.git"
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"tsc": "tsc -p tsconfig.json && tsc -p tsconfig-cjs.json",
|
|
30
|
+
"test": "jest"
|
|
31
|
+
},
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/trilitech/octez.connect-sdk/issues"
|
|
34
|
+
},
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@stablelib/ed25519": "^2.0.2",
|
|
37
|
+
"@stablelib/nacl": "^2.0.1",
|
|
38
|
+
"@stablelib/utf8": "^2.0.1",
|
|
39
|
+
"@stablelib/x25519-session": "^2.0.1",
|
|
40
|
+
"@tezos-x/octez.connect-types": "0.9.0",
|
|
41
|
+
"@tezos-x/octez.connect-utils": "0.9.0",
|
|
42
|
+
"broadcast-channel": "^7.1.0",
|
|
43
|
+
"bs58check": "4.0.0"
|
|
44
|
+
},
|
|
45
|
+
"gitHead": "730911e2d7fd40331a8486a7eaac8fc2b247082e"
|
|
46
|
+
}
|