@metamask/multichain-account-service 7.0.0 → 8.0.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/CHANGELOG.md +63 -1
- package/dist/MultichainAccountGroup.cjs +4 -69
- package/dist/MultichainAccountGroup.cjs.map +1 -1
- package/dist/MultichainAccountGroup.d.cts +0 -6
- package/dist/MultichainAccountGroup.d.cts.map +1 -1
- package/dist/MultichainAccountGroup.d.mts +0 -6
- package/dist/MultichainAccountGroup.d.mts.map +1 -1
- package/dist/MultichainAccountGroup.mjs +5 -70
- package/dist/MultichainAccountGroup.mjs.map +1 -1
- package/dist/MultichainAccountService-method-action-types.cjs +7 -0
- package/dist/MultichainAccountService-method-action-types.cjs.map +1 -0
- package/dist/MultichainAccountService-method-action-types.d.cts +177 -0
- package/dist/MultichainAccountService-method-action-types.d.cts.map +1 -0
- package/dist/MultichainAccountService-method-action-types.d.mts +177 -0
- package/dist/MultichainAccountService-method-action-types.d.mts.map +1 -0
- package/dist/MultichainAccountService-method-action-types.mjs +6 -0
- package/dist/MultichainAccountService-method-action-types.mjs.map +1 -0
- package/dist/MultichainAccountService.cjs +59 -28
- package/dist/MultichainAccountService.cjs.map +1 -1
- package/dist/MultichainAccountService.d.cts +24 -2
- package/dist/MultichainAccountService.d.cts.map +1 -1
- package/dist/MultichainAccountService.d.mts +24 -2
- package/dist/MultichainAccountService.d.mts.map +1 -1
- package/dist/MultichainAccountService.mjs +60 -29
- package/dist/MultichainAccountService.mjs.map +1 -1
- package/dist/MultichainAccountWallet.cjs +302 -164
- package/dist/MultichainAccountWallet.cjs.map +1 -1
- package/dist/MultichainAccountWallet.d.cts +27 -7
- package/dist/MultichainAccountWallet.d.cts.map +1 -1
- package/dist/MultichainAccountWallet.d.mts +27 -7
- package/dist/MultichainAccountWallet.d.mts.map +1 -1
- package/dist/MultichainAccountWallet.mjs +303 -165
- package/dist/MultichainAccountWallet.mjs.map +1 -1
- package/dist/analytics/perf.cjs +65 -0
- package/dist/analytics/perf.cjs.map +1 -0
- package/dist/analytics/perf.d.cts +34 -0
- package/dist/analytics/perf.d.cts.map +1 -0
- package/dist/analytics/perf.d.mts +34 -0
- package/dist/analytics/perf.d.mts.map +1 -0
- package/dist/analytics/perf.mjs +59 -0
- package/dist/analytics/perf.mjs.map +1 -0
- package/dist/analytics/timer.cjs +14 -0
- package/dist/analytics/timer.cjs.map +1 -0
- package/dist/analytics/timer.d.cts +8 -0
- package/dist/analytics/timer.d.cts.map +1 -0
- package/dist/analytics/timer.d.mts +8 -0
- package/dist/analytics/timer.d.mts.map +1 -0
- package/dist/analytics/timer.mjs +10 -0
- package/dist/analytics/timer.mjs.map +1 -0
- package/dist/analytics/traces.cjs +49 -1
- package/dist/analytics/traces.cjs.map +1 -1
- package/dist/analytics/traces.d.cts +28 -0
- package/dist/analytics/traces.d.cts.map +1 -1
- package/dist/analytics/traces.d.mts +28 -0
- package/dist/analytics/traces.d.mts.map +1 -1
- package/dist/analytics/traces.mjs +46 -0
- package/dist/analytics/traces.mjs.map +1 -1
- package/dist/errors.cjs +32 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.cts +16 -0
- package/dist/errors.d.cts.map +1 -0
- package/dist/errors.d.mts +16 -0
- package/dist/errors.d.mts.map +1 -0
- package/dist/errors.mjs +28 -0
- package/dist/errors.mjs.map +1 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +2 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/logger.cjs +14 -1
- package/dist/logger.cjs.map +1 -1
- package/dist/logger.d.cts +8 -0
- package/dist/logger.d.cts.map +1 -1
- package/dist/logger.d.mts +8 -0
- package/dist/logger.d.mts.map +1 -1
- package/dist/logger.mjs +12 -0
- package/dist/logger.mjs.map +1 -1
- package/dist/providers/AccountProviderWrapper.cjs +5 -6
- package/dist/providers/AccountProviderWrapper.cjs.map +1 -1
- package/dist/providers/AccountProviderWrapper.d.cts +5 -4
- package/dist/providers/AccountProviderWrapper.d.cts.map +1 -1
- package/dist/providers/AccountProviderWrapper.d.mts +5 -4
- package/dist/providers/AccountProviderWrapper.d.mts.map +1 -1
- package/dist/providers/AccountProviderWrapper.mjs +5 -6
- package/dist/providers/AccountProviderWrapper.mjs.map +1 -1
- package/dist/providers/BaseBip44AccountProvider.cjs +0 -10
- package/dist/providers/BaseBip44AccountProvider.cjs.map +1 -1
- package/dist/providers/BaseBip44AccountProvider.d.cts +1 -17
- package/dist/providers/BaseBip44AccountProvider.d.cts.map +1 -1
- package/dist/providers/BaseBip44AccountProvider.d.mts +1 -17
- package/dist/providers/BaseBip44AccountProvider.d.mts.map +1 -1
- package/dist/providers/BaseBip44AccountProvider.mjs +0 -10
- package/dist/providers/BaseBip44AccountProvider.mjs.map +1 -1
- package/dist/providers/BtcAccountProvider.cjs +15 -33
- package/dist/providers/BtcAccountProvider.cjs.map +1 -1
- package/dist/providers/BtcAccountProvider.d.cts +6 -4
- package/dist/providers/BtcAccountProvider.d.cts.map +1 -1
- package/dist/providers/BtcAccountProvider.d.mts +6 -4
- package/dist/providers/BtcAccountProvider.d.mts.map +1 -1
- package/dist/providers/BtcAccountProvider.mjs +16 -34
- package/dist/providers/BtcAccountProvider.mjs.map +1 -1
- package/dist/providers/EvmAccountProvider.cjs +44 -3
- package/dist/providers/EvmAccountProvider.cjs.map +1 -1
- package/dist/providers/EvmAccountProvider.d.cts.map +1 -1
- package/dist/providers/EvmAccountProvider.d.mts.map +1 -1
- package/dist/providers/EvmAccountProvider.mjs +44 -3
- package/dist/providers/EvmAccountProvider.mjs.map +1 -1
- package/dist/providers/SnapAccountProvider.cjs +111 -21
- package/dist/providers/SnapAccountProvider.cjs.map +1 -1
- package/dist/providers/SnapAccountProvider.d.cts +33 -2
- package/dist/providers/SnapAccountProvider.d.cts.map +1 -1
- package/dist/providers/SnapAccountProvider.d.mts +33 -2
- package/dist/providers/SnapAccountProvider.d.mts.map +1 -1
- package/dist/providers/SnapAccountProvider.mjs +113 -23
- package/dist/providers/SnapAccountProvider.mjs.map +1 -1
- package/dist/providers/SolAccountProvider.cjs +31 -39
- package/dist/providers/SolAccountProvider.cjs.map +1 -1
- package/dist/providers/SolAccountProvider.d.cts +10 -3
- package/dist/providers/SolAccountProvider.d.cts.map +1 -1
- package/dist/providers/SolAccountProvider.d.mts +10 -3
- package/dist/providers/SolAccountProvider.d.mts.map +1 -1
- package/dist/providers/SolAccountProvider.mjs +32 -40
- package/dist/providers/SolAccountProvider.mjs.map +1 -1
- package/dist/providers/TrxAccountProvider.cjs +15 -37
- package/dist/providers/TrxAccountProvider.cjs.map +1 -1
- package/dist/providers/TrxAccountProvider.d.cts +6 -4
- package/dist/providers/TrxAccountProvider.d.cts.map +1 -1
- package/dist/providers/TrxAccountProvider.d.mts +6 -4
- package/dist/providers/TrxAccountProvider.d.mts.map +1 -1
- package/dist/providers/TrxAccountProvider.mjs +16 -38
- package/dist/providers/TrxAccountProvider.mjs.map +1 -1
- package/dist/providers/index.cjs +2 -1
- package/dist/providers/index.cjs.map +1 -1
- package/dist/providers/index.d.cts +1 -1
- package/dist/providers/index.d.cts.map +1 -1
- package/dist/providers/index.d.mts +1 -1
- package/dist/providers/index.d.mts.map +1 -1
- package/dist/providers/index.mjs +1 -1
- package/dist/providers/index.mjs.map +1 -1
- package/dist/providers/utils.cjs +15 -5
- package/dist/providers/utils.cjs.map +1 -1
- package/dist/providers/utils.d.cts +9 -2
- package/dist/providers/utils.d.cts.map +1 -1
- package/dist/providers/utils.d.mts +9 -2
- package/dist/providers/utils.d.mts.map +1 -1
- package/dist/providers/utils.mjs +13 -4
- package/dist/providers/utils.mjs.map +1 -1
- package/dist/snaps/SnapPlatformWatcher.cjs +72 -8
- package/dist/snaps/SnapPlatformWatcher.cjs.map +1 -1
- package/dist/snaps/SnapPlatformWatcher.d.cts +15 -1
- package/dist/snaps/SnapPlatformWatcher.d.cts.map +1 -1
- package/dist/snaps/SnapPlatformWatcher.d.mts +15 -1
- package/dist/snaps/SnapPlatformWatcher.d.mts.map +1 -1
- package/dist/snaps/SnapPlatformWatcher.mjs +72 -8
- package/dist/snaps/SnapPlatformWatcher.mjs.map +1 -1
- package/dist/tests/accounts.cjs +7 -1
- package/dist/tests/accounts.cjs.map +1 -1
- package/dist/tests/accounts.d.cts +9 -0
- package/dist/tests/accounts.d.cts.map +1 -1
- package/dist/tests/accounts.d.mts +9 -0
- package/dist/tests/accounts.d.mts.map +1 -1
- package/dist/tests/accounts.mjs +6 -0
- package/dist/tests/accounts.mjs.map +1 -1
- package/dist/tests/index.cjs.map +1 -1
- package/dist/tests/index.d.cts +1 -0
- package/dist/tests/index.d.cts.map +1 -1
- package/dist/tests/index.d.mts +1 -0
- package/dist/tests/index.d.mts.map +1 -1
- package/dist/tests/index.mjs.map +1 -1
- package/dist/tests/providers.cjs +14 -16
- package/dist/tests/providers.cjs.map +1 -1
- package/dist/tests/providers.d.cts +11 -0
- package/dist/tests/providers.d.cts.map +1 -1
- package/dist/tests/providers.d.mts +11 -0
- package/dist/tests/providers.d.mts.map +1 -1
- package/dist/tests/providers.mjs +14 -17
- package/dist/tests/providers.mjs.map +1 -1
- package/dist/tests/types.cjs +3 -0
- package/dist/tests/types.cjs.map +1 -0
- package/dist/tests/types.d.cts +7 -0
- package/dist/tests/types.d.cts.map +1 -0
- package/dist/tests/types.d.mts +7 -0
- package/dist/tests/types.d.mts.map +1 -0
- package/dist/tests/types.mjs +2 -0
- package/dist/tests/types.mjs.map +1 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +13 -54
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +13 -54
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils.cjs +49 -5
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +32 -5
- package/dist/utils.d.cts.map +1 -1
- package/dist/utils.d.mts +32 -5
- package/dist/utils.d.mts.map +1 -1
- package/dist/utils.mjs +45 -4
- package/dist/utils.mjs.map +1 -1
- package/package.json +9 -7
- package/dist/constants/traces.cjs +0 -9
- package/dist/constants/traces.cjs.map +0 -1
- package/dist/constants/traces.d.cts +0 -5
- package/dist/constants/traces.d.cts.map +0 -1
- package/dist/constants/traces.d.mts +0 -5
- package/dist/constants/traces.d.mts.map +0 -1
- package/dist/constants/traces.mjs +0 -6
- package/dist/constants/traces.mjs.map +0 -1
|
@@ -4,7 +4,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
4
4
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
5
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
6
|
};
|
|
7
|
-
var _SolAccountProvider_instances,
|
|
7
|
+
var _SolAccountProvider_instances, _SolAccountProvider_getDerivationPath;
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.SolAccountProvider = exports.SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG = exports.SOL_ACCOUNT_PROVIDER_NAME = void 0;
|
|
10
10
|
const account_api_1 = require("@metamask/account-api");
|
|
@@ -13,7 +13,7 @@ const keyring_controller_1 = require("@metamask/keyring-controller");
|
|
|
13
13
|
const SnapAccountProvider_1 = require("./SnapAccountProvider.cjs");
|
|
14
14
|
const utils_1 = require("./utils.cjs");
|
|
15
15
|
const analytics_1 = require("../analytics/index.cjs");
|
|
16
|
-
const traces_1 = require("../
|
|
16
|
+
const traces_1 = require("../analytics/traces.cjs");
|
|
17
17
|
exports.SOL_ACCOUNT_PROVIDER_NAME = 'Solana';
|
|
18
18
|
exports.SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG = {
|
|
19
19
|
maxConcurrency: 3,
|
|
@@ -24,8 +24,12 @@ exports.SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG = {
|
|
|
24
24
|
backOffMs: 1000,
|
|
25
25
|
},
|
|
26
26
|
createAccounts: {
|
|
27
|
+
batched: false, // For now, the Snap is not fully v2 compliant.
|
|
27
28
|
timeoutMs: 3000,
|
|
28
29
|
},
|
|
30
|
+
resyncAccounts: {
|
|
31
|
+
autoRemoveExtraSnapAccounts: true,
|
|
32
|
+
},
|
|
29
33
|
};
|
|
30
34
|
class SolAccountProvider extends SnapAccountProvider_1.SnapAccountProvider {
|
|
31
35
|
constructor(messenger, config = exports.SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG, trace = analytics_1.traceFallback) {
|
|
@@ -35,6 +39,7 @@ class SolAccountProvider extends SnapAccountProvider_1.SnapAccountProvider {
|
|
|
35
39
|
scopes: [keyring_api_1.SolScope.Mainnet, keyring_api_1.SolScope.Devnet, keyring_api_1.SolScope.Testnet],
|
|
36
40
|
bip44: {
|
|
37
41
|
deriveIndex: true,
|
|
42
|
+
deriveIndexRange: true,
|
|
38
43
|
},
|
|
39
44
|
};
|
|
40
45
|
}
|
|
@@ -45,25 +50,23 @@ class SolAccountProvider extends SnapAccountProvider_1.SnapAccountProvider {
|
|
|
45
50
|
return (account.type === keyring_api_1.SolAccountType.DataAccount &&
|
|
46
51
|
account.metadata.keyring.type === keyring_controller_1.KeyringTypes.snap);
|
|
47
52
|
}
|
|
48
|
-
async
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const { entropySource, groupIndex } = options;
|
|
53
|
-
return this.withSnap(async ({ keyring }) => {
|
|
54
|
-
return this.withMaxConcurrency(async () => {
|
|
55
|
-
const derivationPath = `m/44'/501'/${groupIndex}'/0'`;
|
|
56
|
-
const account = await __classPrivateFieldGet(this, _SolAccountProvider_instances, "m", _SolAccountProvider_createAccount).call(this, {
|
|
57
|
-
keyring,
|
|
58
|
-
entropySource,
|
|
59
|
-
groupIndex,
|
|
60
|
-
derivationPath,
|
|
61
|
-
});
|
|
62
|
-
this.accounts.add(account.id);
|
|
63
|
-
return [account];
|
|
64
|
-
});
|
|
53
|
+
async createAccountV1(keyring, { entropySource, groupIndex, }) {
|
|
54
|
+
return keyring.createAccount({
|
|
55
|
+
entropySource,
|
|
56
|
+
derivationPath: __classPrivateFieldGet(this, _SolAccountProvider_instances, "m", _SolAccountProvider_getDerivationPath).call(this, groupIndex),
|
|
65
57
|
});
|
|
66
58
|
}
|
|
59
|
+
toBip44Account(account, { entropySource, groupIndex, }) {
|
|
60
|
+
// Ensure entropy is present before type assertion validation
|
|
61
|
+
account.options.entropy = {
|
|
62
|
+
type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic,
|
|
63
|
+
id: entropySource,
|
|
64
|
+
groupIndex,
|
|
65
|
+
derivationPath: __classPrivateFieldGet(this, _SolAccountProvider_instances, "m", _SolAccountProvider_getDerivationPath).call(this, groupIndex),
|
|
66
|
+
};
|
|
67
|
+
(0, account_api_1.assertIsBip44Account)(account);
|
|
68
|
+
return account;
|
|
69
|
+
}
|
|
67
70
|
async discoverAccounts({ entropySource, groupIndex, }) {
|
|
68
71
|
return this.withSnap(async ({ client, keyring }) => {
|
|
69
72
|
return await super.trace({
|
|
@@ -75,39 +78,28 @@ class SolAccountProvider extends SnapAccountProvider_1.SnapAccountProvider {
|
|
|
75
78
|
if (!this.config.discovery.enabled) {
|
|
76
79
|
return [];
|
|
77
80
|
}
|
|
78
|
-
const discoveredAccounts = await (0, utils_1.withRetry)(() => (0, utils_1.withTimeout)(client.discoverAccounts([keyring_api_1.SolScope.Mainnet], entropySource, groupIndex), this.config.discovery.timeoutMs), {
|
|
81
|
+
const discoveredAccounts = await (0, utils_1.withRetry)(() => (0, utils_1.withTimeout)(() => client.discoverAccounts([keyring_api_1.SolScope.Mainnet], entropySource, groupIndex), this.config.discovery.timeoutMs), {
|
|
79
82
|
maxAttempts: this.config.discovery.maxAttempts,
|
|
80
83
|
backOffMs: this.config.discovery.backOffMs,
|
|
81
84
|
});
|
|
82
85
|
if (!discoveredAccounts.length) {
|
|
83
86
|
return [];
|
|
84
87
|
}
|
|
85
|
-
|
|
86
|
-
|
|
88
|
+
// NOTE: We know the Solana Snap only return 1 account per group index during discovery. Also,
|
|
89
|
+
// we do not use the returned `derivationPath` on purpose. Instead we just create the account
|
|
90
|
+
// for this group index and that's all.
|
|
91
|
+
return await this.createBip44Accounts(keyring, {
|
|
92
|
+
type: keyring_api_1.AccountCreationType.Bip44DeriveIndex,
|
|
87
93
|
entropySource,
|
|
88
94
|
groupIndex,
|
|
89
|
-
|
|
90
|
-
})));
|
|
91
|
-
for (const account of createdAccounts) {
|
|
92
|
-
this.accounts.add(account.id);
|
|
93
|
-
}
|
|
94
|
-
return createdAccounts;
|
|
95
|
+
});
|
|
95
96
|
});
|
|
96
97
|
});
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
exports.SolAccountProvider = SolAccountProvider;
|
|
100
|
-
_SolAccountProvider_instances = new WeakSet(),
|
|
101
|
-
|
|
102
|
-
// Ensure entropy is present before type assertion validation
|
|
103
|
-
account.options.entropy = {
|
|
104
|
-
type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic,
|
|
105
|
-
id: entropySource,
|
|
106
|
-
groupIndex,
|
|
107
|
-
derivationPath,
|
|
108
|
-
};
|
|
109
|
-
(0, account_api_1.assertIsBip44Account)(account);
|
|
110
|
-
return account;
|
|
101
|
+
_SolAccountProvider_instances = new WeakSet(), _SolAccountProvider_getDerivationPath = function _SolAccountProvider_getDerivationPath(groupIndex) {
|
|
102
|
+
return `m/44'/501'/${groupIndex}'/0'`;
|
|
111
103
|
};
|
|
112
104
|
SolAccountProvider.NAME = exports.SOL_ACCOUNT_PROVIDER_NAME;
|
|
113
105
|
SolAccountProvider.SOLANA_SNAP_ID = 'npm:@metamask/solana-wallet-snap';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolAccountProvider.cjs","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":";;;;;;;;;AAAA,uDAA6D;
|
|
1
|
+
{"version":3,"file":"SolAccountProvider.cjs","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { assertIsBip44Account } from '@metamask/account-api';\nimport type { Bip44Account } from '@metamask/account-api';\nimport type { TraceCallback } from '@metamask/controller-utils';\nimport type {\n EntropySourceId,\n KeyringAccount,\n KeyringCapabilities,\n} from '@metamask/keyring-api';\nimport {\n AccountCreationType,\n KeyringAccountEntropyTypeOption,\n SolAccountType,\n SolScope,\n} from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { SnapId } from '@metamask/snaps-sdk';\n\nimport { SnapAccountProvider } from './SnapAccountProvider';\nimport type {\n RestrictedSnapKeyring,\n SnapAccountProviderConfig,\n} from './SnapAccountProvider';\nimport { withRetry, withTimeout } from './utils';\nimport { traceFallback } from '../analytics';\nimport { TraceName } from '../analytics/traces';\nimport type { MultichainAccountServiceMessenger } from '../types';\n\nexport type SolAccountProviderConfig = SnapAccountProviderConfig;\n\nexport const SOL_ACCOUNT_PROVIDER_NAME = 'Solana';\n\nexport const SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG: SnapAccountProviderConfig = {\n maxConcurrency: 3,\n discovery: {\n enabled: true,\n timeoutMs: 2000,\n maxAttempts: 3,\n backOffMs: 1000,\n },\n createAccounts: {\n batched: false, // For now, the Snap is not fully v2 compliant.\n timeoutMs: 3000,\n },\n resyncAccounts: {\n autoRemoveExtraSnapAccounts: true,\n },\n};\n\nexport class SolAccountProvider extends SnapAccountProvider {\n static NAME = SOL_ACCOUNT_PROVIDER_NAME;\n\n static SOLANA_SNAP_ID = 'npm:@metamask/solana-wallet-snap' as SnapId;\n\n readonly capabilities: KeyringCapabilities = {\n scopes: [SolScope.Mainnet, SolScope.Devnet, SolScope.Testnet],\n bip44: {\n deriveIndex: true,\n deriveIndexRange: true,\n },\n };\n\n constructor(\n messenger: MultichainAccountServiceMessenger,\n config: SolAccountProviderConfig = SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG,\n trace: TraceCallback = traceFallback,\n ) {\n super(SolAccountProvider.SOLANA_SNAP_ID, messenger, config, trace);\n }\n\n getName(): string {\n return SolAccountProvider.NAME;\n }\n\n isAccountCompatible(account: Bip44Account<InternalAccount>): boolean {\n return (\n account.type === SolAccountType.DataAccount &&\n account.metadata.keyring.type === (KeyringTypes.snap as string)\n );\n }\n\n #getDerivationPath(groupIndex: number): string {\n return `m/44'/501'/${groupIndex}'/0'`;\n }\n\n protected override async createAccountV1(\n keyring: RestrictedSnapKeyring,\n {\n entropySource,\n groupIndex,\n }: { entropySource: EntropySourceId; groupIndex: number },\n ): Promise<KeyringAccount> {\n return keyring.createAccount({\n entropySource,\n derivationPath: this.#getDerivationPath(groupIndex),\n });\n }\n\n protected override toBip44Account(\n account: KeyringAccount,\n {\n entropySource,\n groupIndex,\n }: { entropySource: EntropySourceId; groupIndex: number },\n ): Bip44Account<KeyringAccount> {\n // Ensure entropy is present before type assertion validation\n account.options.entropy = {\n type: KeyringAccountEntropyTypeOption.Mnemonic,\n id: entropySource,\n groupIndex,\n derivationPath: this.#getDerivationPath(groupIndex),\n };\n\n assertIsBip44Account(account);\n\n return account;\n }\n\n async discoverAccounts({\n entropySource,\n groupIndex,\n }: {\n entropySource: EntropySourceId;\n groupIndex: number;\n }): Promise<Bip44Account<KeyringAccount>[]> {\n return this.withSnap(async ({ client, keyring }) => {\n return await super.trace(\n {\n name: TraceName.SnapDiscoverAccounts,\n data: {\n provider: this.getName(),\n },\n },\n async () => {\n if (!this.config.discovery.enabled) {\n return [];\n }\n\n const discoveredAccounts = await withRetry(\n () =>\n withTimeout(\n () =>\n client.discoverAccounts(\n [SolScope.Mainnet],\n entropySource,\n groupIndex,\n ),\n this.config.discovery.timeoutMs,\n ),\n {\n maxAttempts: this.config.discovery.maxAttempts,\n backOffMs: this.config.discovery.backOffMs,\n },\n );\n\n if (!discoveredAccounts.length) {\n return [];\n }\n\n // NOTE: We know the Solana Snap only return 1 account per group index during discovery. Also,\n // we do not use the returned `derivationPath` on purpose. Instead we just create the account\n // for this group index and that's all.\n return await this.createBip44Accounts(keyring, {\n type: AccountCreationType.Bip44DeriveIndex,\n entropySource,\n groupIndex,\n });\n },\n );\n });\n }\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Bip44Account } from "@metamask/account-api";
|
|
2
2
|
import type { TraceCallback } from "@metamask/controller-utils";
|
|
3
|
-
import type {
|
|
3
|
+
import type { EntropySourceId, KeyringAccount, KeyringCapabilities } from "@metamask/keyring-api";
|
|
4
4
|
import type { InternalAccount } from "@metamask/keyring-internal-api";
|
|
5
5
|
import type { SnapId } from "@metamask/snaps-sdk";
|
|
6
6
|
import { SnapAccountProvider } from "./SnapAccountProvider.cjs";
|
|
7
|
-
import type { SnapAccountProviderConfig } from "./SnapAccountProvider.cjs";
|
|
7
|
+
import type { RestrictedSnapKeyring, SnapAccountProviderConfig } from "./SnapAccountProvider.cjs";
|
|
8
8
|
import type { MultichainAccountServiceMessenger } from "../types.cjs";
|
|
9
9
|
export type SolAccountProviderConfig = SnapAccountProviderConfig;
|
|
10
10
|
export declare const SOL_ACCOUNT_PROVIDER_NAME = "Solana";
|
|
@@ -17,7 +17,14 @@ export declare class SolAccountProvider extends SnapAccountProvider {
|
|
|
17
17
|
constructor(messenger: MultichainAccountServiceMessenger, config?: SolAccountProviderConfig, trace?: TraceCallback);
|
|
18
18
|
getName(): string;
|
|
19
19
|
isAccountCompatible(account: Bip44Account<InternalAccount>): boolean;
|
|
20
|
-
|
|
20
|
+
protected createAccountV1(keyring: RestrictedSnapKeyring, { entropySource, groupIndex, }: {
|
|
21
|
+
entropySource: EntropySourceId;
|
|
22
|
+
groupIndex: number;
|
|
23
|
+
}): Promise<KeyringAccount>;
|
|
24
|
+
protected toBip44Account(account: KeyringAccount, { entropySource, groupIndex, }: {
|
|
25
|
+
entropySource: EntropySourceId;
|
|
26
|
+
groupIndex: number;
|
|
27
|
+
}): Bip44Account<KeyringAccount>;
|
|
21
28
|
discoverAccounts({ entropySource, groupIndex, }: {
|
|
22
29
|
entropySource: EntropySourceId;
|
|
23
30
|
groupIndex: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolAccountProvider.d.cts","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,mCAAmC;AAChE,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"SolAccountProvider.d.cts","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,mCAAmC;AAChE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACpB,8BAA8B;AAQ/B,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAElD,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAC5D,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EAC1B,kCAA8B;AAI/B,OAAO,KAAK,EAAE,iCAAiC,EAAE,qBAAiB;AAElE,MAAM,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAEjE,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAElD,eAAO,MAAM,mCAAmC,EAAE,yBAejD,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,mBAAmB;;IACzD,MAAM,CAAC,IAAI,SAA6B;IAExC,MAAM,CAAC,cAAc,SAAgD;IAErE,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAMxC;gBAGA,SAAS,EAAE,iCAAiC,EAC5C,MAAM,GAAE,wBAA8D,EACtE,KAAK,GAAE,aAA6B;IAKtC,OAAO,IAAI,MAAM;IAIjB,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,OAAO;cAW3C,eAAe,CACtC,OAAO,EAAE,qBAAqB,EAC9B,EACE,aAAa,EACb,UAAU,GACX,EAAE;QAAE,aAAa,EAAE,eAAe,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GACxD,OAAO,CAAC,cAAc,CAAC;cAOP,cAAc,CAC/B,OAAO,EAAE,cAAc,EACvB,EACE,aAAa,EACb,UAAU,GACX,EAAE;QAAE,aAAa,EAAE,eAAe,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GACxD,YAAY,CAAC,cAAc,CAAC;IAczB,gBAAgB,CAAC,EACrB,aAAa,EACb,UAAU,GACX,EAAE;QACD,aAAa,EAAE,eAAe,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC;CA+C5C"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { Bip44Account } from "@metamask/account-api";
|
|
2
2
|
import type { TraceCallback } from "@metamask/controller-utils";
|
|
3
|
-
import type {
|
|
3
|
+
import type { EntropySourceId, KeyringAccount, KeyringCapabilities } from "@metamask/keyring-api";
|
|
4
4
|
import type { InternalAccount } from "@metamask/keyring-internal-api";
|
|
5
5
|
import type { SnapId } from "@metamask/snaps-sdk";
|
|
6
6
|
import { SnapAccountProvider } from "./SnapAccountProvider.mjs";
|
|
7
|
-
import type { SnapAccountProviderConfig } from "./SnapAccountProvider.mjs";
|
|
7
|
+
import type { RestrictedSnapKeyring, SnapAccountProviderConfig } from "./SnapAccountProvider.mjs";
|
|
8
8
|
import type { MultichainAccountServiceMessenger } from "../types.mjs";
|
|
9
9
|
export type SolAccountProviderConfig = SnapAccountProviderConfig;
|
|
10
10
|
export declare const SOL_ACCOUNT_PROVIDER_NAME = "Solana";
|
|
@@ -17,7 +17,14 @@ export declare class SolAccountProvider extends SnapAccountProvider {
|
|
|
17
17
|
constructor(messenger: MultichainAccountServiceMessenger, config?: SolAccountProviderConfig, trace?: TraceCallback);
|
|
18
18
|
getName(): string;
|
|
19
19
|
isAccountCompatible(account: Bip44Account<InternalAccount>): boolean;
|
|
20
|
-
|
|
20
|
+
protected createAccountV1(keyring: RestrictedSnapKeyring, { entropySource, groupIndex, }: {
|
|
21
|
+
entropySource: EntropySourceId;
|
|
22
|
+
groupIndex: number;
|
|
23
|
+
}): Promise<KeyringAccount>;
|
|
24
|
+
protected toBip44Account(account: KeyringAccount, { entropySource, groupIndex, }: {
|
|
25
|
+
entropySource: EntropySourceId;
|
|
26
|
+
groupIndex: number;
|
|
27
|
+
}): Bip44Account<KeyringAccount>;
|
|
21
28
|
discoverAccounts({ entropySource, groupIndex, }: {
|
|
22
29
|
entropySource: EntropySourceId;
|
|
23
30
|
groupIndex: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolAccountProvider.d.mts","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,mCAAmC;AAChE,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"SolAccountProvider.d.mts","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,mCAAmC;AAChE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,mBAAmB,EACpB,8BAA8B;AAQ/B,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAElD,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAC5D,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EAC1B,kCAA8B;AAI/B,OAAO,KAAK,EAAE,iCAAiC,EAAE,qBAAiB;AAElE,MAAM,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAEjE,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAElD,eAAO,MAAM,mCAAmC,EAAE,yBAejD,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,mBAAmB;;IACzD,MAAM,CAAC,IAAI,SAA6B;IAExC,MAAM,CAAC,cAAc,SAAgD;IAErE,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAMxC;gBAGA,SAAS,EAAE,iCAAiC,EAC5C,MAAM,GAAE,wBAA8D,EACtE,KAAK,GAAE,aAA6B;IAKtC,OAAO,IAAI,MAAM;IAIjB,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,OAAO;cAW3C,eAAe,CACtC,OAAO,EAAE,qBAAqB,EAC9B,EACE,aAAa,EACb,UAAU,GACX,EAAE;QAAE,aAAa,EAAE,eAAe,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GACxD,OAAO,CAAC,cAAc,CAAC;cAOP,cAAc,CAC/B,OAAO,EAAE,cAAc,EACvB,EACE,aAAa,EACb,UAAU,GACX,EAAE;QAAE,aAAa,EAAE,eAAe,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GACxD,YAAY,CAAC,cAAc,CAAC;IAczB,gBAAgB,CAAC,EACrB,aAAa,EACb,UAAU,GACX,EAAE;QACD,aAAa,EAAE,eAAe,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC;CA+C5C"}
|
|
@@ -3,14 +3,14 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
3
3
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
4
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
5
|
};
|
|
6
|
-
var _SolAccountProvider_instances,
|
|
6
|
+
var _SolAccountProvider_instances, _SolAccountProvider_getDerivationPath;
|
|
7
7
|
import { assertIsBip44Account } from "@metamask/account-api";
|
|
8
|
-
import { AccountCreationType,
|
|
8
|
+
import { AccountCreationType, KeyringAccountEntropyTypeOption, SolAccountType, SolScope } from "@metamask/keyring-api";
|
|
9
9
|
import { KeyringTypes } from "@metamask/keyring-controller";
|
|
10
10
|
import { SnapAccountProvider } from "./SnapAccountProvider.mjs";
|
|
11
11
|
import { withRetry, withTimeout } from "./utils.mjs";
|
|
12
12
|
import { traceFallback } from "../analytics/index.mjs";
|
|
13
|
-
import { TraceName } from "../
|
|
13
|
+
import { TraceName } from "../analytics/traces.mjs";
|
|
14
14
|
export const SOL_ACCOUNT_PROVIDER_NAME = 'Solana';
|
|
15
15
|
export const SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG = {
|
|
16
16
|
maxConcurrency: 3,
|
|
@@ -21,8 +21,12 @@ export const SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG = {
|
|
|
21
21
|
backOffMs: 1000,
|
|
22
22
|
},
|
|
23
23
|
createAccounts: {
|
|
24
|
+
batched: false, // For now, the Snap is not fully v2 compliant.
|
|
24
25
|
timeoutMs: 3000,
|
|
25
26
|
},
|
|
27
|
+
resyncAccounts: {
|
|
28
|
+
autoRemoveExtraSnapAccounts: true,
|
|
29
|
+
},
|
|
26
30
|
};
|
|
27
31
|
export class SolAccountProvider extends SnapAccountProvider {
|
|
28
32
|
constructor(messenger, config = SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG, trace = traceFallback) {
|
|
@@ -32,6 +36,7 @@ export class SolAccountProvider extends SnapAccountProvider {
|
|
|
32
36
|
scopes: [SolScope.Mainnet, SolScope.Devnet, SolScope.Testnet],
|
|
33
37
|
bip44: {
|
|
34
38
|
deriveIndex: true,
|
|
39
|
+
deriveIndexRange: true,
|
|
35
40
|
},
|
|
36
41
|
};
|
|
37
42
|
}
|
|
@@ -42,25 +47,23 @@ export class SolAccountProvider extends SnapAccountProvider {
|
|
|
42
47
|
return (account.type === SolAccountType.DataAccount &&
|
|
43
48
|
account.metadata.keyring.type === KeyringTypes.snap);
|
|
44
49
|
}
|
|
45
|
-
async
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const { entropySource, groupIndex } = options;
|
|
50
|
-
return this.withSnap(async ({ keyring }) => {
|
|
51
|
-
return this.withMaxConcurrency(async () => {
|
|
52
|
-
const derivationPath = `m/44'/501'/${groupIndex}'/0'`;
|
|
53
|
-
const account = await __classPrivateFieldGet(this, _SolAccountProvider_instances, "m", _SolAccountProvider_createAccount).call(this, {
|
|
54
|
-
keyring,
|
|
55
|
-
entropySource,
|
|
56
|
-
groupIndex,
|
|
57
|
-
derivationPath,
|
|
58
|
-
});
|
|
59
|
-
this.accounts.add(account.id);
|
|
60
|
-
return [account];
|
|
61
|
-
});
|
|
50
|
+
async createAccountV1(keyring, { entropySource, groupIndex, }) {
|
|
51
|
+
return keyring.createAccount({
|
|
52
|
+
entropySource,
|
|
53
|
+
derivationPath: __classPrivateFieldGet(this, _SolAccountProvider_instances, "m", _SolAccountProvider_getDerivationPath).call(this, groupIndex),
|
|
62
54
|
});
|
|
63
55
|
}
|
|
56
|
+
toBip44Account(account, { entropySource, groupIndex, }) {
|
|
57
|
+
// Ensure entropy is present before type assertion validation
|
|
58
|
+
account.options.entropy = {
|
|
59
|
+
type: KeyringAccountEntropyTypeOption.Mnemonic,
|
|
60
|
+
id: entropySource,
|
|
61
|
+
groupIndex,
|
|
62
|
+
derivationPath: __classPrivateFieldGet(this, _SolAccountProvider_instances, "m", _SolAccountProvider_getDerivationPath).call(this, groupIndex),
|
|
63
|
+
};
|
|
64
|
+
assertIsBip44Account(account);
|
|
65
|
+
return account;
|
|
66
|
+
}
|
|
64
67
|
async discoverAccounts({ entropySource, groupIndex, }) {
|
|
65
68
|
return this.withSnap(async ({ client, keyring }) => {
|
|
66
69
|
return await super.trace({
|
|
@@ -72,38 +75,27 @@ export class SolAccountProvider extends SnapAccountProvider {
|
|
|
72
75
|
if (!this.config.discovery.enabled) {
|
|
73
76
|
return [];
|
|
74
77
|
}
|
|
75
|
-
const discoveredAccounts = await withRetry(() => withTimeout(client.discoverAccounts([SolScope.Mainnet], entropySource, groupIndex), this.config.discovery.timeoutMs), {
|
|
78
|
+
const discoveredAccounts = await withRetry(() => withTimeout(() => client.discoverAccounts([SolScope.Mainnet], entropySource, groupIndex), this.config.discovery.timeoutMs), {
|
|
76
79
|
maxAttempts: this.config.discovery.maxAttempts,
|
|
77
80
|
backOffMs: this.config.discovery.backOffMs,
|
|
78
81
|
});
|
|
79
82
|
if (!discoveredAccounts.length) {
|
|
80
83
|
return [];
|
|
81
84
|
}
|
|
82
|
-
|
|
83
|
-
|
|
85
|
+
// NOTE: We know the Solana Snap only return 1 account per group index during discovery. Also,
|
|
86
|
+
// we do not use the returned `derivationPath` on purpose. Instead we just create the account
|
|
87
|
+
// for this group index and that's all.
|
|
88
|
+
return await this.createBip44Accounts(keyring, {
|
|
89
|
+
type: AccountCreationType.Bip44DeriveIndex,
|
|
84
90
|
entropySource,
|
|
85
91
|
groupIndex,
|
|
86
|
-
|
|
87
|
-
})));
|
|
88
|
-
for (const account of createdAccounts) {
|
|
89
|
-
this.accounts.add(account.id);
|
|
90
|
-
}
|
|
91
|
-
return createdAccounts;
|
|
92
|
+
});
|
|
92
93
|
});
|
|
93
94
|
});
|
|
94
95
|
}
|
|
95
96
|
}
|
|
96
|
-
_SolAccountProvider_instances = new WeakSet(),
|
|
97
|
-
|
|
98
|
-
// Ensure entropy is present before type assertion validation
|
|
99
|
-
account.options.entropy = {
|
|
100
|
-
type: KeyringAccountEntropyTypeOption.Mnemonic,
|
|
101
|
-
id: entropySource,
|
|
102
|
-
groupIndex,
|
|
103
|
-
derivationPath,
|
|
104
|
-
};
|
|
105
|
-
assertIsBip44Account(account);
|
|
106
|
-
return account;
|
|
97
|
+
_SolAccountProvider_instances = new WeakSet(), _SolAccountProvider_getDerivationPath = function _SolAccountProvider_getDerivationPath(groupIndex) {
|
|
98
|
+
return `m/44'/501'/${groupIndex}'/0'`;
|
|
107
99
|
};
|
|
108
100
|
SolAccountProvider.NAME = SOL_ACCOUNT_PROVIDER_NAME;
|
|
109
101
|
SolAccountProvider.SOLANA_SNAP_ID = 'npm:@metamask/solana-wallet-snap';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolAccountProvider.mjs","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAE,8BAA8B;
|
|
1
|
+
{"version":3,"file":"SolAccountProvider.mjs","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { assertIsBip44Account } from '@metamask/account-api';\nimport type { Bip44Account } from '@metamask/account-api';\nimport type { TraceCallback } from '@metamask/controller-utils';\nimport type {\n EntropySourceId,\n KeyringAccount,\n KeyringCapabilities,\n} from '@metamask/keyring-api';\nimport {\n AccountCreationType,\n KeyringAccountEntropyTypeOption,\n SolAccountType,\n SolScope,\n} from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { SnapId } from '@metamask/snaps-sdk';\n\nimport { SnapAccountProvider } from './SnapAccountProvider';\nimport type {\n RestrictedSnapKeyring,\n SnapAccountProviderConfig,\n} from './SnapAccountProvider';\nimport { withRetry, withTimeout } from './utils';\nimport { traceFallback } from '../analytics';\nimport { TraceName } from '../analytics/traces';\nimport type { MultichainAccountServiceMessenger } from '../types';\n\nexport type SolAccountProviderConfig = SnapAccountProviderConfig;\n\nexport const SOL_ACCOUNT_PROVIDER_NAME = 'Solana';\n\nexport const SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG: SnapAccountProviderConfig = {\n maxConcurrency: 3,\n discovery: {\n enabled: true,\n timeoutMs: 2000,\n maxAttempts: 3,\n backOffMs: 1000,\n },\n createAccounts: {\n batched: false, // For now, the Snap is not fully v2 compliant.\n timeoutMs: 3000,\n },\n resyncAccounts: {\n autoRemoveExtraSnapAccounts: true,\n },\n};\n\nexport class SolAccountProvider extends SnapAccountProvider {\n static NAME = SOL_ACCOUNT_PROVIDER_NAME;\n\n static SOLANA_SNAP_ID = 'npm:@metamask/solana-wallet-snap' as SnapId;\n\n readonly capabilities: KeyringCapabilities = {\n scopes: [SolScope.Mainnet, SolScope.Devnet, SolScope.Testnet],\n bip44: {\n deriveIndex: true,\n deriveIndexRange: true,\n },\n };\n\n constructor(\n messenger: MultichainAccountServiceMessenger,\n config: SolAccountProviderConfig = SOL_ACCOUNT_PROVIDER_DEFAULT_CONFIG,\n trace: TraceCallback = traceFallback,\n ) {\n super(SolAccountProvider.SOLANA_SNAP_ID, messenger, config, trace);\n }\n\n getName(): string {\n return SolAccountProvider.NAME;\n }\n\n isAccountCompatible(account: Bip44Account<InternalAccount>): boolean {\n return (\n account.type === SolAccountType.DataAccount &&\n account.metadata.keyring.type === (KeyringTypes.snap as string)\n );\n }\n\n #getDerivationPath(groupIndex: number): string {\n return `m/44'/501'/${groupIndex}'/0'`;\n }\n\n protected override async createAccountV1(\n keyring: RestrictedSnapKeyring,\n {\n entropySource,\n groupIndex,\n }: { entropySource: EntropySourceId; groupIndex: number },\n ): Promise<KeyringAccount> {\n return keyring.createAccount({\n entropySource,\n derivationPath: this.#getDerivationPath(groupIndex),\n });\n }\n\n protected override toBip44Account(\n account: KeyringAccount,\n {\n entropySource,\n groupIndex,\n }: { entropySource: EntropySourceId; groupIndex: number },\n ): Bip44Account<KeyringAccount> {\n // Ensure entropy is present before type assertion validation\n account.options.entropy = {\n type: KeyringAccountEntropyTypeOption.Mnemonic,\n id: entropySource,\n groupIndex,\n derivationPath: this.#getDerivationPath(groupIndex),\n };\n\n assertIsBip44Account(account);\n\n return account;\n }\n\n async discoverAccounts({\n entropySource,\n groupIndex,\n }: {\n entropySource: EntropySourceId;\n groupIndex: number;\n }): Promise<Bip44Account<KeyringAccount>[]> {\n return this.withSnap(async ({ client, keyring }) => {\n return await super.trace(\n {\n name: TraceName.SnapDiscoverAccounts,\n data: {\n provider: this.getName(),\n },\n },\n async () => {\n if (!this.config.discovery.enabled) {\n return [];\n }\n\n const discoveredAccounts = await withRetry(\n () =>\n withTimeout(\n () =>\n client.discoverAccounts(\n [SolScope.Mainnet],\n entropySource,\n groupIndex,\n ),\n this.config.discovery.timeoutMs,\n ),\n {\n maxAttempts: this.config.discovery.maxAttempts,\n backOffMs: this.config.discovery.backOffMs,\n },\n );\n\n if (!discoveredAccounts.length) {\n return [];\n }\n\n // NOTE: We know the Solana Snap only return 1 account per group index during discovery. Also,\n // we do not use the returned `derivationPath` on purpose. Instead we just create the account\n // for this group index and that's all.\n return await this.createBip44Accounts(keyring, {\n type: AccountCreationType.Bip44DeriveIndex,\n entropySource,\n groupIndex,\n });\n },\n );\n });\n }\n}\n"]}
|
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
5
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
6
|
-
};
|
|
7
|
-
var _TrxAccountProvider_instances, _TrxAccountProvider_createAccounts;
|
|
8
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
3
|
exports.TrxAccountProvider = exports.TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG = exports.TRX_ACCOUNT_PROVIDER_NAME = void 0;
|
|
10
|
-
const account_api_1 = require("@metamask/account-api");
|
|
11
4
|
const keyring_api_1 = require("@metamask/keyring-api");
|
|
12
5
|
const keyring_controller_1 = require("@metamask/keyring-controller");
|
|
13
6
|
const SnapAccountProvider_1 = require("./SnapAccountProvider.cjs");
|
|
14
7
|
const utils_1 = require("./utils.cjs");
|
|
15
8
|
const analytics_1 = require("../analytics/index.cjs");
|
|
16
|
-
const traces_1 = require("../
|
|
9
|
+
const traces_1 = require("../analytics/traces.cjs");
|
|
17
10
|
exports.TRX_ACCOUNT_PROVIDER_NAME = 'Tron';
|
|
18
11
|
exports.TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG = {
|
|
19
12
|
maxConcurrency: 3,
|
|
@@ -24,17 +17,21 @@ exports.TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG = {
|
|
|
24
17
|
backOffMs: 1000,
|
|
25
18
|
},
|
|
26
19
|
createAccounts: {
|
|
20
|
+
batched: false, // For now, the Snap is not fully v2 compliant.
|
|
27
21
|
timeoutMs: 3000,
|
|
28
22
|
},
|
|
23
|
+
resyncAccounts: {
|
|
24
|
+
autoRemoveExtraSnapAccounts: true,
|
|
25
|
+
},
|
|
29
26
|
};
|
|
30
27
|
class TrxAccountProvider extends SnapAccountProvider_1.SnapAccountProvider {
|
|
31
28
|
constructor(messenger, config = exports.TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG, trace = analytics_1.traceFallback) {
|
|
32
29
|
super(TrxAccountProvider.TRX_SNAP_ID, messenger, config, trace);
|
|
33
|
-
_TrxAccountProvider_instances.add(this);
|
|
34
30
|
this.capabilities = {
|
|
35
31
|
scopes: [keyring_api_1.TrxScope.Mainnet, keyring_api_1.TrxScope.Shasta],
|
|
36
32
|
bip44: {
|
|
37
33
|
deriveIndex: true,
|
|
34
|
+
deriveIndexRange: true,
|
|
38
35
|
},
|
|
39
36
|
};
|
|
40
37
|
}
|
|
@@ -45,17 +42,12 @@ class TrxAccountProvider extends SnapAccountProvider_1.SnapAccountProvider {
|
|
|
45
42
|
return (account.type === keyring_api_1.TrxAccountType.Eoa &&
|
|
46
43
|
account.metadata.keyring.type === keyring_controller_1.KeyringTypes.snap);
|
|
47
44
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return __classPrivateFieldGet(this, _TrxAccountProvider_instances, "m", _TrxAccountProvider_createAccounts).call(this, {
|
|
55
|
-
keyring,
|
|
56
|
-
entropySource,
|
|
57
|
-
groupIndex,
|
|
58
|
-
});
|
|
45
|
+
createAccountV1(keyring, { entropySource, groupIndex, }) {
|
|
46
|
+
return keyring.createAccount({
|
|
47
|
+
entropySource,
|
|
48
|
+
index: groupIndex,
|
|
49
|
+
addressType: keyring_api_1.TrxAccountType.Eoa,
|
|
50
|
+
scope: keyring_api_1.TrxScope.Mainnet,
|
|
59
51
|
});
|
|
60
52
|
}
|
|
61
53
|
async discoverAccounts({ entropySource, groupIndex, }) {
|
|
@@ -69,37 +61,23 @@ class TrxAccountProvider extends SnapAccountProvider_1.SnapAccountProvider {
|
|
|
69
61
|
if (!this.config.discovery.enabled) {
|
|
70
62
|
return [];
|
|
71
63
|
}
|
|
72
|
-
const discoveredAccounts = await (0, utils_1.withRetry)(() => (0, utils_1.withTimeout)(client.discoverAccounts([keyring_api_1.TrxScope.Mainnet], entropySource, groupIndex), this.config.discovery.timeoutMs), {
|
|
64
|
+
const discoveredAccounts = await (0, utils_1.withRetry)(() => (0, utils_1.withTimeout)(() => client.discoverAccounts([keyring_api_1.TrxScope.Mainnet], entropySource, groupIndex), this.config.discovery.timeoutMs), {
|
|
73
65
|
maxAttempts: this.config.discovery.maxAttempts,
|
|
74
66
|
backOffMs: this.config.discovery.backOffMs,
|
|
75
67
|
});
|
|
76
68
|
if (!discoveredAccounts.length) {
|
|
77
69
|
return [];
|
|
78
70
|
}
|
|
79
|
-
|
|
80
|
-
|
|
71
|
+
return await this.createBip44Accounts(keyring, {
|
|
72
|
+
type: keyring_api_1.AccountCreationType.Bip44DeriveIndex,
|
|
81
73
|
entropySource,
|
|
82
74
|
groupIndex,
|
|
83
75
|
});
|
|
84
|
-
return createdAccounts;
|
|
85
76
|
});
|
|
86
77
|
});
|
|
87
78
|
}
|
|
88
79
|
}
|
|
89
80
|
exports.TrxAccountProvider = TrxAccountProvider;
|
|
90
|
-
_TrxAccountProvider_instances = new WeakSet(), _TrxAccountProvider_createAccounts = async function _TrxAccountProvider_createAccounts({ keyring, entropySource, groupIndex: index, }) {
|
|
91
|
-
return this.withMaxConcurrency(async () => {
|
|
92
|
-
const account = await (0, utils_1.withTimeout)(keyring.createAccount({
|
|
93
|
-
entropySource,
|
|
94
|
-
index,
|
|
95
|
-
addressType: keyring_api_1.TrxAccountType.Eoa,
|
|
96
|
-
scope: keyring_api_1.TrxScope.Mainnet,
|
|
97
|
-
}), this.config.createAccounts.timeoutMs);
|
|
98
|
-
(0, account_api_1.assertIsBip44Account)(account);
|
|
99
|
-
this.accounts.add(account.id);
|
|
100
|
-
return [account];
|
|
101
|
-
});
|
|
102
|
-
};
|
|
103
81
|
TrxAccountProvider.NAME = exports.TRX_ACCOUNT_PROVIDER_NAME;
|
|
104
82
|
TrxAccountProvider.TRX_SNAP_ID = 'npm:@metamask/tron-wallet-snap';
|
|
105
83
|
//# sourceMappingURL=TrxAccountProvider.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrxAccountProvider.cjs","sourceRoot":"","sources":["../../src/providers/TrxAccountProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TrxAccountProvider.cjs","sourceRoot":"","sources":["../../src/providers/TrxAccountProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Bip44Account } from '@metamask/account-api';\nimport type { TraceCallback } from '@metamask/controller-utils';\nimport type {\n EntropySourceId,\n KeyringAccount,\n KeyringCapabilities,\n} from '@metamask/keyring-api';\nimport {\n AccountCreationType,\n TrxAccountType,\n TrxScope,\n} from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { SnapId } from '@metamask/snaps-sdk';\n\nimport { SnapAccountProvider } from './SnapAccountProvider';\nimport type {\n RestrictedSnapKeyring,\n SnapAccountProviderConfig,\n} from './SnapAccountProvider';\nimport { withRetry, withTimeout } from './utils';\nimport { traceFallback } from '../analytics';\nimport { TraceName } from '../analytics/traces';\nimport type { MultichainAccountServiceMessenger } from '../types';\n\nexport type TrxAccountProviderConfig = SnapAccountProviderConfig;\n\nexport const TRX_ACCOUNT_PROVIDER_NAME = 'Tron';\n\nexport const TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG: TrxAccountProviderConfig = {\n maxConcurrency: 3,\n discovery: {\n enabled: true,\n timeoutMs: 2000,\n maxAttempts: 3,\n backOffMs: 1000,\n },\n createAccounts: {\n batched: false, // For now, the Snap is not fully v2 compliant.\n timeoutMs: 3000,\n },\n resyncAccounts: {\n autoRemoveExtraSnapAccounts: true,\n },\n};\n\nexport class TrxAccountProvider extends SnapAccountProvider {\n static NAME = TRX_ACCOUNT_PROVIDER_NAME;\n\n static TRX_SNAP_ID = 'npm:@metamask/tron-wallet-snap' as SnapId;\n\n readonly capabilities: KeyringCapabilities = {\n scopes: [TrxScope.Mainnet, TrxScope.Shasta],\n bip44: {\n deriveIndex: true,\n deriveIndexRange: true,\n },\n };\n\n constructor(\n messenger: MultichainAccountServiceMessenger,\n config: TrxAccountProviderConfig = TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG,\n trace: TraceCallback = traceFallback,\n ) {\n super(TrxAccountProvider.TRX_SNAP_ID, messenger, config, trace);\n }\n\n getName(): string {\n return TrxAccountProvider.NAME;\n }\n\n isAccountCompatible(account: Bip44Account<InternalAccount>): boolean {\n return (\n account.type === TrxAccountType.Eoa &&\n account.metadata.keyring.type === (KeyringTypes.snap as string)\n );\n }\n\n protected override createAccountV1(\n keyring: RestrictedSnapKeyring,\n {\n entropySource,\n groupIndex,\n }: { entropySource: EntropySourceId; groupIndex: number },\n ): Promise<KeyringAccount> {\n return keyring.createAccount({\n entropySource,\n index: groupIndex,\n addressType: TrxAccountType.Eoa,\n scope: TrxScope.Mainnet,\n });\n }\n\n async discoverAccounts({\n entropySource,\n groupIndex,\n }: {\n entropySource: EntropySourceId;\n groupIndex: number;\n }): Promise<Bip44Account<KeyringAccount>[]> {\n return this.withSnap(async ({ client, keyring }) => {\n return await super.trace(\n {\n name: TraceName.SnapDiscoverAccounts,\n data: {\n provider: this.getName(),\n },\n },\n async () => {\n if (!this.config.discovery.enabled) {\n return [];\n }\n\n const discoveredAccounts = await withRetry(\n () =>\n withTimeout(\n () =>\n client.discoverAccounts(\n [TrxScope.Mainnet],\n entropySource,\n groupIndex,\n ),\n this.config.discovery.timeoutMs,\n ),\n {\n maxAttempts: this.config.discovery.maxAttempts,\n backOffMs: this.config.discovery.backOffMs,\n },\n );\n\n if (!discoveredAccounts.length) {\n return [];\n }\n\n return await this.createBip44Accounts(keyring, {\n type: AccountCreationType.Bip44DeriveIndex,\n entropySource,\n groupIndex,\n });\n },\n );\n });\n }\n}\n"]}
|
|
@@ -1,23 +1,25 @@
|
|
|
1
1
|
import type { Bip44Account } from "@metamask/account-api";
|
|
2
2
|
import type { TraceCallback } from "@metamask/controller-utils";
|
|
3
|
-
import type {
|
|
3
|
+
import type { EntropySourceId, KeyringAccount, KeyringCapabilities } from "@metamask/keyring-api";
|
|
4
4
|
import type { InternalAccount } from "@metamask/keyring-internal-api";
|
|
5
5
|
import type { SnapId } from "@metamask/snaps-sdk";
|
|
6
6
|
import { SnapAccountProvider } from "./SnapAccountProvider.cjs";
|
|
7
|
-
import type { SnapAccountProviderConfig } from "./SnapAccountProvider.cjs";
|
|
7
|
+
import type { RestrictedSnapKeyring, SnapAccountProviderConfig } from "./SnapAccountProvider.cjs";
|
|
8
8
|
import type { MultichainAccountServiceMessenger } from "../types.cjs";
|
|
9
9
|
export type TrxAccountProviderConfig = SnapAccountProviderConfig;
|
|
10
10
|
export declare const TRX_ACCOUNT_PROVIDER_NAME = "Tron";
|
|
11
11
|
export declare const TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG: TrxAccountProviderConfig;
|
|
12
12
|
export declare class TrxAccountProvider extends SnapAccountProvider {
|
|
13
|
-
#private;
|
|
14
13
|
static NAME: string;
|
|
15
14
|
static TRX_SNAP_ID: SnapId;
|
|
16
15
|
readonly capabilities: KeyringCapabilities;
|
|
17
16
|
constructor(messenger: MultichainAccountServiceMessenger, config?: TrxAccountProviderConfig, trace?: TraceCallback);
|
|
18
17
|
getName(): string;
|
|
19
18
|
isAccountCompatible(account: Bip44Account<InternalAccount>): boolean;
|
|
20
|
-
|
|
19
|
+
protected createAccountV1(keyring: RestrictedSnapKeyring, { entropySource, groupIndex, }: {
|
|
20
|
+
entropySource: EntropySourceId;
|
|
21
|
+
groupIndex: number;
|
|
22
|
+
}): Promise<KeyringAccount>;
|
|
21
23
|
discoverAccounts({ entropySource, groupIndex, }: {
|
|
22
24
|
entropySource: EntropySourceId;
|
|
23
25
|
groupIndex: number;
|