@dynamic-labs-wallet/ton 0.0.230 → 0.0.231
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/index.cjs.js +143 -0
- package/index.esm.js +143 -0
- package/package.json +3 -2
- package/src/client/client.d.ts +16 -1
- package/src/client/client.d.ts.map +1 -1
package/index.cjs.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var browser = require('@dynamic-labs-wallet/browser');
|
|
4
|
+
var crypto = require('@ton/crypto');
|
|
4
5
|
var ton = require('@ton/ton');
|
|
5
6
|
var sdkApiCore = require('@dynamic-labs/sdk-api-core');
|
|
6
7
|
|
|
@@ -45,6 +46,7 @@ var sdkApiCore__namespace = /*#__PURE__*/_interopNamespaceDefault(sdkApiCore);
|
|
|
45
46
|
|
|
46
47
|
var ERROR_KEYGEN_FAILED = 'Error with keygen';
|
|
47
48
|
var ERROR_CREATE_WALLET_ACCOUNT = 'Error creating ton wallet account';
|
|
49
|
+
var ERROR_IMPORT_PRIVATE_KEY = 'Error importing private key';
|
|
48
50
|
var ERROR_EXPORT_PRIVATE_KEY = 'Error exporting private key';
|
|
49
51
|
var ERROR_SIGN_MESSAGE = 'Error signing message';
|
|
50
52
|
var ERROR_ACCOUNT_ADDRESS_REQUIRED = 'Account address is required';
|
|
@@ -139,6 +141,13 @@ function _inherits(subClass, superClass) {
|
|
|
139
141
|
});
|
|
140
142
|
if (superClass) _set_prototype_of(subClass, superClass);
|
|
141
143
|
}
|
|
144
|
+
function _instanceof(left, right) {
|
|
145
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
146
|
+
return !!right[Symbol.hasInstance](left);
|
|
147
|
+
} else {
|
|
148
|
+
return left instanceof right;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
142
151
|
function _object_spread(target) {
|
|
143
152
|
for(var i = 1; i < arguments.length; i++){
|
|
144
153
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
@@ -609,6 +618,140 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
609
618
|
})();
|
|
610
619
|
}
|
|
611
620
|
},
|
|
621
|
+
{
|
|
622
|
+
key: "importPrivateKey",
|
|
623
|
+
value: function importPrivateKey(param) {
|
|
624
|
+
var privateKey = param.privateKey, chainName = param.chainName, thresholdSignatureScheme = param.thresholdSignatureScheme, _param_password = param.password, password = _param_password === void 0 ? undefined : _param_password, signedSessionId = param.signedSessionId, onError = param.onError, publicAddressCheck = param.publicAddressCheck;
|
|
625
|
+
var _this = this;
|
|
626
|
+
return _async_to_generator(function() {
|
|
627
|
+
var ceremonyCeremonyCompleteResolver, ceremonyCompletePromise, formattedPrivateKey, publicKeyHex, derivedAddress, _ref, rawPublicKey, clientKeyShares, accountAddress, pubKeyBytes, error;
|
|
628
|
+
return _ts_generator(this, function(_state) {
|
|
629
|
+
switch(_state.label){
|
|
630
|
+
case 0:
|
|
631
|
+
_state.trys.push([
|
|
632
|
+
0,
|
|
633
|
+
5,
|
|
634
|
+
,
|
|
635
|
+
6
|
|
636
|
+
]);
|
|
637
|
+
ceremonyCompletePromise = new Promise(function(resolve) {
|
|
638
|
+
ceremonyCeremonyCompleteResolver = resolve;
|
|
639
|
+
});
|
|
640
|
+
formattedPrivateKey = privateKey.startsWith('0x') ? privateKey.slice(2) : privateKey;
|
|
641
|
+
publicKeyHex = _this.getPublicKeyFromPrivateKey(formattedPrivateKey);
|
|
642
|
+
derivedAddress = deriveTonAddress({
|
|
643
|
+
publicKeyHex: publicKeyHex,
|
|
644
|
+
workchain: 0
|
|
645
|
+
});
|
|
646
|
+
if (publicAddressCheck && derivedAddress !== publicAddressCheck) {
|
|
647
|
+
throw new Error("Public address mismatch: derived address ".concat(derivedAddress, " !== public address ").concat(publicAddressCheck));
|
|
648
|
+
}
|
|
649
|
+
return [
|
|
650
|
+
4,
|
|
651
|
+
_this.importRawPrivateKey({
|
|
652
|
+
chainName: chainName,
|
|
653
|
+
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
654
|
+
privateKey: formattedPrivateKey,
|
|
655
|
+
onCeremonyComplete: function(accountAddress, walletId) {
|
|
656
|
+
_this.walletMap[accountAddress] = _object_spread_props(_object_spread({}, _this.walletMap[accountAddress]), {
|
|
657
|
+
accountAddress: accountAddress,
|
|
658
|
+
walletId: walletId,
|
|
659
|
+
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
660
|
+
chainName: _this.chainName,
|
|
661
|
+
clientKeySharesBackupInfo: browser.getClientKeyShareBackupInfo()
|
|
662
|
+
});
|
|
663
|
+
_this.logger.debug('walletMap updated for wallet', {
|
|
664
|
+
context: {
|
|
665
|
+
accountAddress: accountAddress,
|
|
666
|
+
walletId: walletId,
|
|
667
|
+
walletMap: _this.walletMap
|
|
668
|
+
}
|
|
669
|
+
});
|
|
670
|
+
ceremonyCeremonyCompleteResolver(undefined);
|
|
671
|
+
},
|
|
672
|
+
onError: onError
|
|
673
|
+
})
|
|
674
|
+
];
|
|
675
|
+
case 1:
|
|
676
|
+
_ref = _state.sent(), rawPublicKey = _ref.rawPublicKey, clientKeyShares = _ref.clientKeyShares;
|
|
677
|
+
return [
|
|
678
|
+
4,
|
|
679
|
+
ceremonyCompletePromise
|
|
680
|
+
];
|
|
681
|
+
case 2:
|
|
682
|
+
_state.sent();
|
|
683
|
+
if (!rawPublicKey || !clientKeyShares) {
|
|
684
|
+
throw new Error(ERROR_IMPORT_PRIVATE_KEY);
|
|
685
|
+
}
|
|
686
|
+
accountAddress = deriveTonAddress({
|
|
687
|
+
publicKeyHex: rawPublicKey,
|
|
688
|
+
workchain: 0
|
|
689
|
+
});
|
|
690
|
+
if (accountAddress !== derivedAddress) {
|
|
691
|
+
throw new Error("Public key mismatch: derived address ".concat(accountAddress, " !== expected ").concat(derivedAddress));
|
|
692
|
+
}
|
|
693
|
+
// Update client key shares in wallet map
|
|
694
|
+
return [
|
|
695
|
+
4,
|
|
696
|
+
_this.setClientKeySharesToLocalStorage({
|
|
697
|
+
accountAddress: accountAddress,
|
|
698
|
+
clientKeyShares: clientKeyShares,
|
|
699
|
+
overwriteOrMerge: 'overwrite'
|
|
700
|
+
})
|
|
701
|
+
];
|
|
702
|
+
case 3:
|
|
703
|
+
_state.sent();
|
|
704
|
+
return [
|
|
705
|
+
4,
|
|
706
|
+
_this.storeEncryptedBackupByWalletWithRetry({
|
|
707
|
+
accountAddress: accountAddress,
|
|
708
|
+
clientKeyShares: clientKeyShares,
|
|
709
|
+
password: password,
|
|
710
|
+
signedSessionId: signedSessionId
|
|
711
|
+
})
|
|
712
|
+
];
|
|
713
|
+
case 4:
|
|
714
|
+
_state.sent();
|
|
715
|
+
pubKeyBytes = Buffer.from(rawPublicKey, 'hex');
|
|
716
|
+
return [
|
|
717
|
+
2,
|
|
718
|
+
{
|
|
719
|
+
accountAddress: accountAddress,
|
|
720
|
+
publicKeyHex: rawPublicKey,
|
|
721
|
+
rawPublicKey: new Uint8Array(pubKeyBytes),
|
|
722
|
+
clientKeyShares: clientKeyShares
|
|
723
|
+
}
|
|
724
|
+
];
|
|
725
|
+
case 5:
|
|
726
|
+
error = _state.sent();
|
|
727
|
+
_this.logger.error(ERROR_IMPORT_PRIVATE_KEY, error);
|
|
728
|
+
onError === null || onError === void 0 ? void 0 : onError(error);
|
|
729
|
+
throw new Error(ERROR_IMPORT_PRIVATE_KEY);
|
|
730
|
+
case 6:
|
|
731
|
+
return [
|
|
732
|
+
2
|
|
733
|
+
];
|
|
734
|
+
}
|
|
735
|
+
});
|
|
736
|
+
})();
|
|
737
|
+
}
|
|
738
|
+
},
|
|
739
|
+
{
|
|
740
|
+
key: "getPublicKeyFromPrivateKey",
|
|
741
|
+
value: function getPublicKeyFromPrivateKey(privateKeyHex) {
|
|
742
|
+
try {
|
|
743
|
+
var privateKeyBytes = Buffer.from(privateKeyHex, 'hex');
|
|
744
|
+
if (privateKeyBytes.length !== 32) {
|
|
745
|
+
throw new Error("Invalid private key length: ".concat(privateKeyBytes.length, ", expected 32"));
|
|
746
|
+
}
|
|
747
|
+
var keyPair = crypto.keyPairFromSeed(privateKeyBytes);
|
|
748
|
+
return keyPair.publicKey.toString('hex');
|
|
749
|
+
} catch (error) {
|
|
750
|
+
this.logger.error('Unable to derive public key from private key. Check private key format', _instanceof(error, Error) ? error.message : 'Unknown error');
|
|
751
|
+
throw error;
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
},
|
|
612
755
|
{
|
|
613
756
|
key: "getTonWallets",
|
|
614
757
|
value: function getTonWallets() {
|
package/index.esm.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { AuthMode, DynamicWalletClient, getClientKeyShareBackupInfo, WalletOperation } from '@dynamic-labs-wallet/browser';
|
|
2
|
+
import { keyPairFromSeed } from '@ton/crypto';
|
|
2
3
|
import { WalletContractV5R1 } from '@ton/ton';
|
|
3
4
|
import * as sdkApiCore from '@dynamic-labs/sdk-api-core';
|
|
4
5
|
export { sdkApiCore };
|
|
@@ -25,6 +26,7 @@ export { sdkApiCore };
|
|
|
25
26
|
|
|
26
27
|
var ERROR_KEYGEN_FAILED = 'Error with keygen';
|
|
27
28
|
var ERROR_CREATE_WALLET_ACCOUNT = 'Error creating ton wallet account';
|
|
29
|
+
var ERROR_IMPORT_PRIVATE_KEY = 'Error importing private key';
|
|
28
30
|
var ERROR_EXPORT_PRIVATE_KEY = 'Error exporting private key';
|
|
29
31
|
var ERROR_SIGN_MESSAGE = 'Error signing message';
|
|
30
32
|
var ERROR_ACCOUNT_ADDRESS_REQUIRED = 'Account address is required';
|
|
@@ -119,6 +121,13 @@ function _inherits(subClass, superClass) {
|
|
|
119
121
|
});
|
|
120
122
|
if (superClass) _set_prototype_of(subClass, superClass);
|
|
121
123
|
}
|
|
124
|
+
function _instanceof(left, right) {
|
|
125
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
126
|
+
return !!right[Symbol.hasInstance](left);
|
|
127
|
+
} else {
|
|
128
|
+
return left instanceof right;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
122
131
|
function _object_spread(target) {
|
|
123
132
|
for(var i = 1; i < arguments.length; i++){
|
|
124
133
|
var source = arguments[i] != null ? arguments[i] : {};
|
|
@@ -589,6 +598,140 @@ var DynamicTonWalletClient = /*#__PURE__*/ function(DynamicWalletClient) {
|
|
|
589
598
|
})();
|
|
590
599
|
}
|
|
591
600
|
},
|
|
601
|
+
{
|
|
602
|
+
key: "importPrivateKey",
|
|
603
|
+
value: function importPrivateKey(param) {
|
|
604
|
+
var privateKey = param.privateKey, chainName = param.chainName, thresholdSignatureScheme = param.thresholdSignatureScheme, _param_password = param.password, password = _param_password === void 0 ? undefined : _param_password, signedSessionId = param.signedSessionId, onError = param.onError, publicAddressCheck = param.publicAddressCheck;
|
|
605
|
+
var _this = this;
|
|
606
|
+
return _async_to_generator(function() {
|
|
607
|
+
var ceremonyCeremonyCompleteResolver, ceremonyCompletePromise, formattedPrivateKey, publicKeyHex, derivedAddress, _ref, rawPublicKey, clientKeyShares, accountAddress, pubKeyBytes, error;
|
|
608
|
+
return _ts_generator(this, function(_state) {
|
|
609
|
+
switch(_state.label){
|
|
610
|
+
case 0:
|
|
611
|
+
_state.trys.push([
|
|
612
|
+
0,
|
|
613
|
+
5,
|
|
614
|
+
,
|
|
615
|
+
6
|
|
616
|
+
]);
|
|
617
|
+
ceremonyCompletePromise = new Promise(function(resolve) {
|
|
618
|
+
ceremonyCeremonyCompleteResolver = resolve;
|
|
619
|
+
});
|
|
620
|
+
formattedPrivateKey = privateKey.startsWith('0x') ? privateKey.slice(2) : privateKey;
|
|
621
|
+
publicKeyHex = _this.getPublicKeyFromPrivateKey(formattedPrivateKey);
|
|
622
|
+
derivedAddress = deriveTonAddress({
|
|
623
|
+
publicKeyHex: publicKeyHex,
|
|
624
|
+
workchain: 0
|
|
625
|
+
});
|
|
626
|
+
if (publicAddressCheck && derivedAddress !== publicAddressCheck) {
|
|
627
|
+
throw new Error("Public address mismatch: derived address ".concat(derivedAddress, " !== public address ").concat(publicAddressCheck));
|
|
628
|
+
}
|
|
629
|
+
return [
|
|
630
|
+
4,
|
|
631
|
+
_this.importRawPrivateKey({
|
|
632
|
+
chainName: chainName,
|
|
633
|
+
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
634
|
+
privateKey: formattedPrivateKey,
|
|
635
|
+
onCeremonyComplete: function(accountAddress, walletId) {
|
|
636
|
+
_this.walletMap[accountAddress] = _object_spread_props(_object_spread({}, _this.walletMap[accountAddress]), {
|
|
637
|
+
accountAddress: accountAddress,
|
|
638
|
+
walletId: walletId,
|
|
639
|
+
thresholdSignatureScheme: thresholdSignatureScheme,
|
|
640
|
+
chainName: _this.chainName,
|
|
641
|
+
clientKeySharesBackupInfo: getClientKeyShareBackupInfo()
|
|
642
|
+
});
|
|
643
|
+
_this.logger.debug('walletMap updated for wallet', {
|
|
644
|
+
context: {
|
|
645
|
+
accountAddress: accountAddress,
|
|
646
|
+
walletId: walletId,
|
|
647
|
+
walletMap: _this.walletMap
|
|
648
|
+
}
|
|
649
|
+
});
|
|
650
|
+
ceremonyCeremonyCompleteResolver(undefined);
|
|
651
|
+
},
|
|
652
|
+
onError: onError
|
|
653
|
+
})
|
|
654
|
+
];
|
|
655
|
+
case 1:
|
|
656
|
+
_ref = _state.sent(), rawPublicKey = _ref.rawPublicKey, clientKeyShares = _ref.clientKeyShares;
|
|
657
|
+
return [
|
|
658
|
+
4,
|
|
659
|
+
ceremonyCompletePromise
|
|
660
|
+
];
|
|
661
|
+
case 2:
|
|
662
|
+
_state.sent();
|
|
663
|
+
if (!rawPublicKey || !clientKeyShares) {
|
|
664
|
+
throw new Error(ERROR_IMPORT_PRIVATE_KEY);
|
|
665
|
+
}
|
|
666
|
+
accountAddress = deriveTonAddress({
|
|
667
|
+
publicKeyHex: rawPublicKey,
|
|
668
|
+
workchain: 0
|
|
669
|
+
});
|
|
670
|
+
if (accountAddress !== derivedAddress) {
|
|
671
|
+
throw new Error("Public key mismatch: derived address ".concat(accountAddress, " !== expected ").concat(derivedAddress));
|
|
672
|
+
}
|
|
673
|
+
// Update client key shares in wallet map
|
|
674
|
+
return [
|
|
675
|
+
4,
|
|
676
|
+
_this.setClientKeySharesToLocalStorage({
|
|
677
|
+
accountAddress: accountAddress,
|
|
678
|
+
clientKeyShares: clientKeyShares,
|
|
679
|
+
overwriteOrMerge: 'overwrite'
|
|
680
|
+
})
|
|
681
|
+
];
|
|
682
|
+
case 3:
|
|
683
|
+
_state.sent();
|
|
684
|
+
return [
|
|
685
|
+
4,
|
|
686
|
+
_this.storeEncryptedBackupByWalletWithRetry({
|
|
687
|
+
accountAddress: accountAddress,
|
|
688
|
+
clientKeyShares: clientKeyShares,
|
|
689
|
+
password: password,
|
|
690
|
+
signedSessionId: signedSessionId
|
|
691
|
+
})
|
|
692
|
+
];
|
|
693
|
+
case 4:
|
|
694
|
+
_state.sent();
|
|
695
|
+
pubKeyBytes = Buffer.from(rawPublicKey, 'hex');
|
|
696
|
+
return [
|
|
697
|
+
2,
|
|
698
|
+
{
|
|
699
|
+
accountAddress: accountAddress,
|
|
700
|
+
publicKeyHex: rawPublicKey,
|
|
701
|
+
rawPublicKey: new Uint8Array(pubKeyBytes),
|
|
702
|
+
clientKeyShares: clientKeyShares
|
|
703
|
+
}
|
|
704
|
+
];
|
|
705
|
+
case 5:
|
|
706
|
+
error = _state.sent();
|
|
707
|
+
_this.logger.error(ERROR_IMPORT_PRIVATE_KEY, error);
|
|
708
|
+
onError === null || onError === void 0 ? void 0 : onError(error);
|
|
709
|
+
throw new Error(ERROR_IMPORT_PRIVATE_KEY);
|
|
710
|
+
case 6:
|
|
711
|
+
return [
|
|
712
|
+
2
|
|
713
|
+
];
|
|
714
|
+
}
|
|
715
|
+
});
|
|
716
|
+
})();
|
|
717
|
+
}
|
|
718
|
+
},
|
|
719
|
+
{
|
|
720
|
+
key: "getPublicKeyFromPrivateKey",
|
|
721
|
+
value: function getPublicKeyFromPrivateKey(privateKeyHex) {
|
|
722
|
+
try {
|
|
723
|
+
var privateKeyBytes = Buffer.from(privateKeyHex, 'hex');
|
|
724
|
+
if (privateKeyBytes.length !== 32) {
|
|
725
|
+
throw new Error("Invalid private key length: ".concat(privateKeyBytes.length, ", expected 32"));
|
|
726
|
+
}
|
|
727
|
+
var keyPair = keyPairFromSeed(privateKeyBytes);
|
|
728
|
+
return keyPair.publicKey.toString('hex');
|
|
729
|
+
} catch (error) {
|
|
730
|
+
this.logger.error('Unable to derive public key from private key. Check private key format', _instanceof(error, Error) ? error.message : 'Unknown error');
|
|
731
|
+
throw error;
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
},
|
|
592
735
|
{
|
|
593
736
|
key: "getTonWallets",
|
|
594
737
|
value: function getTonWallets() {
|
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs-wallet/ton",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.231",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@dynamic-labs-wallet/browser": "0.0.
|
|
7
|
+
"@dynamic-labs-wallet/browser": "0.0.231",
|
|
8
|
+
"@ton/crypto": "^3.3.0",
|
|
8
9
|
"@ton/ton": "^16.0.0",
|
|
9
10
|
"@dynamic-labs/sdk-api-core": "^0.0.828"
|
|
10
11
|
},
|
package/src/client/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DynamicWalletClient, type DynamicWalletClientProps, type ThresholdSignatureScheme } from '@dynamic-labs-wallet/browser';
|
|
1
|
+
import { type ClientKeyShare, DynamicWalletClient, type DynamicWalletClientProps, type ThresholdSignatureScheme } from '@dynamic-labs-wallet/browser';
|
|
2
2
|
import type { SignMessageContext } from '@dynamic-labs/sdk-api-core';
|
|
3
3
|
export declare class DynamicTonWalletClient extends DynamicWalletClient {
|
|
4
4
|
readonly chainName = "TON";
|
|
@@ -37,6 +37,21 @@ export declare class DynamicTonWalletClient extends DynamicWalletClient {
|
|
|
37
37
|
signedSessionId: string;
|
|
38
38
|
mfaToken?: string;
|
|
39
39
|
}): Promise<string>;
|
|
40
|
+
importPrivateKey({ privateKey, chainName, thresholdSignatureScheme, password, signedSessionId, onError, publicAddressCheck, }: {
|
|
41
|
+
privateKey: string;
|
|
42
|
+
chainName: string;
|
|
43
|
+
thresholdSignatureScheme: ThresholdSignatureScheme;
|
|
44
|
+
password?: string;
|
|
45
|
+
signedSessionId: string;
|
|
46
|
+
onError?: (error: Error) => void;
|
|
47
|
+
publicAddressCheck?: string;
|
|
48
|
+
}): Promise<{
|
|
49
|
+
accountAddress: string;
|
|
50
|
+
publicKeyHex: string;
|
|
51
|
+
rawPublicKey: Uint8Array;
|
|
52
|
+
clientKeyShares: ClientKeyShare[];
|
|
53
|
+
}>;
|
|
54
|
+
getPublicKeyFromPrivateKey(privateKeyHex: string): string;
|
|
40
55
|
getTonWallets(): Promise<any>;
|
|
41
56
|
}
|
|
42
57
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,mBAAmB,EACnB,KAAK,wBAAwB,EAE7B,KAAK,wBAAwB,EAE9B,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"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"}
|