@metamask-previews/multichain-account-service 1.1.0-preview-c20b7569 → 1.2.0-preview-73b4d57
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 +16 -1
- package/dist/MultichainAccountGroup.cjs +17 -5
- package/dist/MultichainAccountGroup.cjs.map +1 -1
- package/dist/MultichainAccountGroup.d.cts.map +1 -1
- package/dist/MultichainAccountGroup.d.mts.map +1 -1
- package/dist/MultichainAccountGroup.mjs +17 -5
- package/dist/MultichainAccountGroup.mjs.map +1 -1
- package/dist/MultichainAccountService.cjs +14 -0
- package/dist/MultichainAccountService.cjs.map +1 -1
- package/dist/MultichainAccountService.d.cts.map +1 -1
- package/dist/MultichainAccountService.d.mts.map +1 -1
- package/dist/MultichainAccountService.mjs +14 -0
- package/dist/MultichainAccountService.mjs.map +1 -1
- package/dist/MultichainAccountWallet.cjs +24 -12
- package/dist/MultichainAccountWallet.cjs.map +1 -1
- package/dist/MultichainAccountWallet.d.cts.map +1 -1
- package/dist/MultichainAccountWallet.d.mts.map +1 -1
- package/dist/MultichainAccountWallet.mjs +24 -12
- package/dist/MultichainAccountWallet.mjs.map +1 -1
- package/dist/index.cjs +5 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/logger.cjs +8 -0
- package/dist/logger.cjs.map +1 -0
- package/dist/logger.d.cts +7 -0
- package/dist/logger.d.cts.map +1 -0
- package/dist/logger.d.mts +7 -0
- package/dist/logger.d.mts.map +1 -0
- package/dist/logger.mjs +5 -0
- package/dist/logger.mjs.map +1 -0
- package/dist/providers/BtcAccountProvider.cjs +96 -0
- package/dist/providers/BtcAccountProvider.cjs.map +1 -0
- package/dist/providers/BtcAccountProvider.d.cts +52 -0
- package/dist/providers/BtcAccountProvider.d.cts.map +1 -0
- package/dist/providers/BtcAccountProvider.d.mts +52 -0
- package/dist/providers/BtcAccountProvider.d.mts.map +1 -0
- package/dist/providers/BtcAccountProvider.mjs +92 -0
- package/dist/providers/BtcAccountProvider.mjs.map +1 -0
- package/dist/providers/TrxAccountProvider.cjs +103 -0
- package/dist/providers/TrxAccountProvider.cjs.map +1 -0
- package/dist/providers/TrxAccountProvider.d.cts +34 -0
- package/dist/providers/TrxAccountProvider.d.cts.map +1 -0
- package/dist/providers/TrxAccountProvider.d.mts +34 -0
- package/dist/providers/TrxAccountProvider.d.mts.map +1 -0
- package/dist/providers/TrxAccountProvider.mjs +99 -0
- package/dist/providers/TrxAccountProvider.mjs.map +1 -0
- package/dist/providers/index.cjs +2 -0
- package/dist/providers/index.cjs.map +1 -1
- package/dist/providers/index.d.cts +2 -0
- package/dist/providers/index.d.cts.map +1 -1
- package/dist/providers/index.d.mts +2 -0
- package/dist/providers/index.d.mts.map +1 -1
- package/dist/providers/index.mjs +2 -0
- package/dist/providers/index.mjs.map +1 -1
- package/dist/tests/accounts.cjs +36 -3
- package/dist/tests/accounts.cjs.map +1 -1
- package/dist/tests/accounts.d.cts +3 -0
- package/dist/tests/accounts.d.cts.map +1 -1
- package/dist/tests/accounts.d.mts +3 -0
- package/dist/tests/accounts.d.mts.map +1 -1
- package/dist/tests/accounts.mjs +36 -3
- package/dist/tests/accounts.mjs.map +1 -1
- package/dist/tests/providers.cjs +1 -0
- package/dist/tests/providers.cjs.map +1 -1
- package/dist/tests/providers.d.cts.map +1 -1
- package/dist/tests/providers.d.mts.map +1 -1
- package/dist/tests/providers.mjs +1 -0
- package/dist/tests/providers.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type Bip44Account } from "@metamask/account-api";
|
|
2
|
+
import type { EntropySourceId, KeyringAccount } from "@metamask/keyring-api";
|
|
3
|
+
import type { InternalAccount } from "@metamask/keyring-internal-api";
|
|
4
|
+
import type { SnapId } from "@metamask/snaps-sdk";
|
|
5
|
+
import type { Json } from "@metamask/utils";
|
|
6
|
+
import { SnapAccountProvider } from "./SnapAccountProvider.mjs";
|
|
7
|
+
import type { MultichainAccountServiceMessenger } from "../types.mjs";
|
|
8
|
+
export type BtcAccountProviderConfig = {
|
|
9
|
+
discovery: {
|
|
10
|
+
maxAttempts: number;
|
|
11
|
+
timeoutMs: number;
|
|
12
|
+
backOffMs: number;
|
|
13
|
+
};
|
|
14
|
+
createAccounts: {
|
|
15
|
+
timeoutMs: number;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
export declare const BTC_ACCOUNT_PROVIDER_NAME: "Bitcoin";
|
|
19
|
+
export declare class BtcAccountProvider extends SnapAccountProvider {
|
|
20
|
+
#private;
|
|
21
|
+
static NAME: "Bitcoin";
|
|
22
|
+
static BTC_SNAP_ID: SnapId;
|
|
23
|
+
constructor(messenger: MultichainAccountServiceMessenger, config?: BtcAccountProviderConfig);
|
|
24
|
+
getName(): string;
|
|
25
|
+
isAccountCompatible(account: Bip44Account<InternalAccount>): boolean;
|
|
26
|
+
createAccounts({ entropySource, groupIndex: index, }: {
|
|
27
|
+
entropySource: EntropySourceId;
|
|
28
|
+
groupIndex: number;
|
|
29
|
+
}): Promise<Bip44Account<KeyringAccount>[]>;
|
|
30
|
+
discoverAccounts({ entropySource, groupIndex, }: {
|
|
31
|
+
entropySource: EntropySourceId;
|
|
32
|
+
groupIndex: number;
|
|
33
|
+
}): Promise<Bip44Account<{
|
|
34
|
+
type: "eip155:eoa" | "eip155:erc4337" | "bip122:p2pkh" | "bip122:p2sh" | "bip122:p2wpkh" | "bip122:p2tr" | "solana:data-account" | "tron:eoa" | "any:account";
|
|
35
|
+
id: string;
|
|
36
|
+
options: Record<string, Json> & {
|
|
37
|
+
entropy?: {
|
|
38
|
+
type: "mnemonic";
|
|
39
|
+
id: string;
|
|
40
|
+
derivationPath: string;
|
|
41
|
+
groupIndex: number;
|
|
42
|
+
} | {
|
|
43
|
+
type: "private-key";
|
|
44
|
+
} | undefined;
|
|
45
|
+
exportable?: boolean | undefined;
|
|
46
|
+
};
|
|
47
|
+
address: string;
|
|
48
|
+
scopes: `${string}:${string}`[];
|
|
49
|
+
methods: string[];
|
|
50
|
+
}>[]>;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=BtcAccountProvider.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BtcAccountProvider.d.mts","sourceRoot":"","sources":["../../src/providers/BtcAccountProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,YAAY,EAAE,8BAA8B;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,8BAA8B;AAG7E,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAEtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAElD,OAAO,KAAK,EAAE,IAAI,EAAkB,wBAAwB;AAE5D,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAE5D,OAAO,KAAK,EAAE,iCAAiC,EAAE,qBAAiB;AAElE,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,cAAc,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,yBAAyB,WAAqB,CAAC;AAE5D,qBAAa,kBAAmB,SAAQ,mBAAmB;;IACzD,MAAM,CAAC,IAAI,YAA6B;IAExC,MAAM,CAAC,WAAW,SAAiD;gBAOjE,SAAS,EAAE,iCAAiC,EAC5C,MAAM,GAAE,wBASP;IASH,OAAO,IAAI,MAAM;IAqBjB,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,OAAO;IAO9D,cAAc,CAAC,EACnB,aAAa,EACb,UAAU,EAAE,KAAK,GAClB,EAAE;QACD,aAAa,EAAE,eAAe,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC;IAyBrC,gBAAgB,CAAC,EACrB,aAAa,EACb,UAAU,GACX,EAAE;QACD,aAAa,EAAE,eAAe,CAAC;QAC/B,UAAU,EAAE,MAAM,CAAC;KACpB;;;;;;;;;;;;;;;;;;CA4BF"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
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
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
+
};
|
|
6
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
7
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
|
+
};
|
|
12
|
+
var _BtcAccountProvider_instances, _BtcAccountProvider_client, _BtcAccountProvider_config, _BtcAccountProvider_getKeyringClientFromSnapId;
|
|
13
|
+
import { assertIsBip44Account } from "@metamask/account-api";
|
|
14
|
+
import { BtcAccountType, BtcScope } from "@metamask/keyring-api";
|
|
15
|
+
import { KeyringTypes } from "@metamask/keyring-controller";
|
|
16
|
+
import { KeyringClient } from "@metamask/keyring-snap-client";
|
|
17
|
+
import { HandlerType } from "@metamask/snaps-utils";
|
|
18
|
+
import { SnapAccountProvider } from "./SnapAccountProvider.mjs";
|
|
19
|
+
import { withRetry, withTimeout } from "./utils.mjs";
|
|
20
|
+
export const BTC_ACCOUNT_PROVIDER_NAME = 'Bitcoin';
|
|
21
|
+
export class BtcAccountProvider extends SnapAccountProvider {
|
|
22
|
+
constructor(messenger, config = {
|
|
23
|
+
createAccounts: {
|
|
24
|
+
timeoutMs: 3000,
|
|
25
|
+
},
|
|
26
|
+
discovery: {
|
|
27
|
+
timeoutMs: 2000,
|
|
28
|
+
maxAttempts: 3,
|
|
29
|
+
backOffMs: 1000,
|
|
30
|
+
},
|
|
31
|
+
}) {
|
|
32
|
+
super(BtcAccountProvider.BTC_SNAP_ID, messenger);
|
|
33
|
+
_BtcAccountProvider_instances.add(this);
|
|
34
|
+
_BtcAccountProvider_client.set(this, void 0);
|
|
35
|
+
_BtcAccountProvider_config.set(this, void 0);
|
|
36
|
+
__classPrivateFieldSet(this, _BtcAccountProvider_client, __classPrivateFieldGet(this, _BtcAccountProvider_instances, "m", _BtcAccountProvider_getKeyringClientFromSnapId).call(this, BtcAccountProvider.BTC_SNAP_ID), "f");
|
|
37
|
+
__classPrivateFieldSet(this, _BtcAccountProvider_config, config, "f");
|
|
38
|
+
}
|
|
39
|
+
getName() {
|
|
40
|
+
return BtcAccountProvider.NAME;
|
|
41
|
+
}
|
|
42
|
+
isAccountCompatible(account) {
|
|
43
|
+
return (account.metadata.keyring.type === KeyringTypes.snap &&
|
|
44
|
+
Object.values(BtcAccountType).includes(account.type));
|
|
45
|
+
}
|
|
46
|
+
async createAccounts({ entropySource, groupIndex: index, }) {
|
|
47
|
+
const createAccount = await this.getRestrictedSnapAccountCreator();
|
|
48
|
+
const createBitcoinAccount = async (addressType) => await withTimeout(createAccount({
|
|
49
|
+
entropySource,
|
|
50
|
+
index,
|
|
51
|
+
addressType,
|
|
52
|
+
scope: BtcScope.Mainnet,
|
|
53
|
+
}), __classPrivateFieldGet(this, _BtcAccountProvider_config, "f").createAccounts.timeoutMs);
|
|
54
|
+
const [p2wpkh, p2tr] = await Promise.all([
|
|
55
|
+
createBitcoinAccount(BtcAccountType.P2wpkh),
|
|
56
|
+
createBitcoinAccount(BtcAccountType.P2tr),
|
|
57
|
+
]);
|
|
58
|
+
assertIsBip44Account(p2wpkh);
|
|
59
|
+
assertIsBip44Account(p2tr);
|
|
60
|
+
return [p2tr, p2wpkh];
|
|
61
|
+
}
|
|
62
|
+
async discoverAccounts({ entropySource, groupIndex, }) {
|
|
63
|
+
const discoveredAccounts = await withRetry(() => withTimeout(__classPrivateFieldGet(this, _BtcAccountProvider_client, "f").discoverAccounts([BtcScope.Mainnet], entropySource, groupIndex), __classPrivateFieldGet(this, _BtcAccountProvider_config, "f").discovery.timeoutMs), {
|
|
64
|
+
maxAttempts: __classPrivateFieldGet(this, _BtcAccountProvider_config, "f").discovery.maxAttempts,
|
|
65
|
+
backOffMs: __classPrivateFieldGet(this, _BtcAccountProvider_config, "f").discovery.backOffMs,
|
|
66
|
+
});
|
|
67
|
+
if (!Array.isArray(discoveredAccounts) || discoveredAccounts.length === 0) {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
const createdAccounts = await this.createAccounts({
|
|
71
|
+
entropySource,
|
|
72
|
+
groupIndex,
|
|
73
|
+
});
|
|
74
|
+
return createdAccounts;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
_BtcAccountProvider_client = new WeakMap(), _BtcAccountProvider_config = new WeakMap(), _BtcAccountProvider_instances = new WeakSet(), _BtcAccountProvider_getKeyringClientFromSnapId = function _BtcAccountProvider_getKeyringClientFromSnapId(snapId) {
|
|
78
|
+
return new KeyringClient({
|
|
79
|
+
send: async (request) => {
|
|
80
|
+
const response = await this.messenger.call('SnapController:handleRequest', {
|
|
81
|
+
snapId: snapId,
|
|
82
|
+
origin: 'metamask',
|
|
83
|
+
handler: HandlerType.OnKeyringRequest,
|
|
84
|
+
request,
|
|
85
|
+
});
|
|
86
|
+
return response;
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
BtcAccountProvider.NAME = BTC_ACCOUNT_PROVIDER_NAME;
|
|
91
|
+
BtcAccountProvider.BTC_SNAP_ID = 'npm:@metamask/bitcoin-wallet-snap';
|
|
92
|
+
//# sourceMappingURL=BtcAccountProvider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BtcAccountProvider.mjs","sourceRoot":"","sources":["../../src/providers/BtcAccountProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { assertIsBip44Account, type Bip44Account } from '@metamask/account-api';\nimport type { EntropySourceId, KeyringAccount } from '@metamask/keyring-api';\nimport { BtcAccountType, BtcScope } from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport { KeyringClient } from '@metamask/keyring-snap-client';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport { HandlerType } from '@metamask/snaps-utils';\nimport type { Json, JsonRpcRequest } from '@metamask/utils';\n\nimport { SnapAccountProvider } from './SnapAccountProvider';\nimport { withRetry, withTimeout } from './utils';\nimport type { MultichainAccountServiceMessenger } from '../types';\n\nexport type BtcAccountProviderConfig = {\n discovery: {\n maxAttempts: number;\n timeoutMs: number;\n backOffMs: number;\n };\n createAccounts: {\n timeoutMs: number;\n };\n};\n\nexport const BTC_ACCOUNT_PROVIDER_NAME = 'Bitcoin' as const;\n\nexport class BtcAccountProvider extends SnapAccountProvider {\n static NAME = BTC_ACCOUNT_PROVIDER_NAME;\n\n static BTC_SNAP_ID = 'npm:@metamask/bitcoin-wallet-snap' as SnapId;\n\n readonly #client: KeyringClient;\n\n readonly #config: BtcAccountProviderConfig;\n\n constructor(\n messenger: MultichainAccountServiceMessenger,\n config: BtcAccountProviderConfig = {\n createAccounts: {\n timeoutMs: 3000,\n },\n discovery: {\n timeoutMs: 2000,\n maxAttempts: 3,\n backOffMs: 1000,\n },\n },\n ) {\n super(BtcAccountProvider.BTC_SNAP_ID, messenger);\n this.#client = this.#getKeyringClientFromSnapId(\n BtcAccountProvider.BTC_SNAP_ID,\n );\n this.#config = config;\n }\n\n getName(): string {\n return BtcAccountProvider.NAME;\n }\n\n #getKeyringClientFromSnapId(snapId: string): KeyringClient {\n return new KeyringClient({\n send: async (request: JsonRpcRequest) => {\n const response = await this.messenger.call(\n 'SnapController:handleRequest',\n {\n snapId: snapId as SnapId,\n origin: 'metamask',\n handler: HandlerType.OnKeyringRequest,\n request,\n },\n );\n return response as Json;\n },\n });\n }\n\n isAccountCompatible(account: Bip44Account<InternalAccount>): boolean {\n return (\n account.metadata.keyring.type === KeyringTypes.snap &&\n Object.values<string>(BtcAccountType).includes(account.type)\n );\n }\n\n async createAccounts({\n entropySource,\n groupIndex: index,\n }: {\n entropySource: EntropySourceId;\n groupIndex: number;\n }): Promise<Bip44Account<KeyringAccount>[]> {\n const createAccount = await this.getRestrictedSnapAccountCreator();\n\n const createBitcoinAccount = async (addressType: BtcAccountType) =>\n await withTimeout(\n createAccount({\n entropySource,\n index,\n addressType,\n scope: BtcScope.Mainnet,\n }),\n this.#config.createAccounts.timeoutMs,\n );\n\n const [p2wpkh, p2tr] = await Promise.all([\n createBitcoinAccount(BtcAccountType.P2wpkh),\n createBitcoinAccount(BtcAccountType.P2tr),\n ]);\n\n assertIsBip44Account(p2wpkh);\n assertIsBip44Account(p2tr);\n\n return [p2tr, p2wpkh];\n }\n\n async discoverAccounts({\n entropySource,\n groupIndex,\n }: {\n entropySource: EntropySourceId;\n groupIndex: number;\n }) {\n const discoveredAccounts = await withRetry(\n () =>\n withTimeout(\n this.#client.discoverAccounts(\n [BtcScope.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 (!Array.isArray(discoveredAccounts) || discoveredAccounts.length === 0) {\n return [];\n }\n\n const createdAccounts = await this.createAccounts({\n entropySource,\n groupIndex,\n });\n\n return createdAccounts;\n }\n}\n"]}
|
|
@@ -0,0 +1,103 @@
|
|
|
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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
8
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
11
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
12
|
+
};
|
|
13
|
+
var _TrxAccountProvider_instances, _TrxAccountProvider_client, _TrxAccountProvider_config, _TrxAccountProvider_getKeyringClientFromSnapId, _TrxAccountProvider_createAccount;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.TrxAccountProvider = exports.TRX_ACCOUNT_PROVIDER_NAME = void 0;
|
|
16
|
+
const account_api_1 = require("@metamask/account-api");
|
|
17
|
+
const keyring_api_1 = require("@metamask/keyring-api");
|
|
18
|
+
const keyring_api_2 = require("@metamask/keyring-api");
|
|
19
|
+
const keyring_controller_1 = require("@metamask/keyring-controller");
|
|
20
|
+
const keyring_snap_client_1 = require("@metamask/keyring-snap-client");
|
|
21
|
+
const snaps_utils_1 = require("@metamask/snaps-utils");
|
|
22
|
+
const SnapAccountProvider_1 = require("./SnapAccountProvider.cjs");
|
|
23
|
+
const utils_1 = require("./utils.cjs");
|
|
24
|
+
exports.TRX_ACCOUNT_PROVIDER_NAME = 'Tron';
|
|
25
|
+
class TrxAccountProvider extends SnapAccountProvider_1.SnapAccountProvider {
|
|
26
|
+
constructor(messenger, config = {
|
|
27
|
+
discovery: {
|
|
28
|
+
timeoutMs: 2000,
|
|
29
|
+
maxAttempts: 3,
|
|
30
|
+
backOffMs: 1000,
|
|
31
|
+
},
|
|
32
|
+
createAccounts: {
|
|
33
|
+
timeoutMs: 3000,
|
|
34
|
+
},
|
|
35
|
+
}) {
|
|
36
|
+
super(TrxAccountProvider.TRX_SNAP_ID, messenger);
|
|
37
|
+
_TrxAccountProvider_instances.add(this);
|
|
38
|
+
_TrxAccountProvider_client.set(this, void 0);
|
|
39
|
+
_TrxAccountProvider_config.set(this, void 0);
|
|
40
|
+
__classPrivateFieldSet(this, _TrxAccountProvider_client, __classPrivateFieldGet(this, _TrxAccountProvider_instances, "m", _TrxAccountProvider_getKeyringClientFromSnapId).call(this, TrxAccountProvider.TRX_SNAP_ID), "f");
|
|
41
|
+
__classPrivateFieldSet(this, _TrxAccountProvider_config, config, "f");
|
|
42
|
+
}
|
|
43
|
+
getName() {
|
|
44
|
+
return TrxAccountProvider.NAME;
|
|
45
|
+
}
|
|
46
|
+
isAccountCompatible(account) {
|
|
47
|
+
return (account.type === keyring_api_1.TrxAccountType.Eoa &&
|
|
48
|
+
account.metadata.keyring.type === keyring_controller_1.KeyringTypes.snap);
|
|
49
|
+
}
|
|
50
|
+
async createAccounts({ entropySource, groupIndex, }) {
|
|
51
|
+
const derivationPath = `m/44'/195'/0'/${groupIndex}'`;
|
|
52
|
+
const account = await __classPrivateFieldGet(this, _TrxAccountProvider_instances, "m", _TrxAccountProvider_createAccount).call(this, {
|
|
53
|
+
entropySource,
|
|
54
|
+
groupIndex,
|
|
55
|
+
derivationPath,
|
|
56
|
+
});
|
|
57
|
+
return [account];
|
|
58
|
+
}
|
|
59
|
+
async discoverAccounts({ entropySource, groupIndex, }) {
|
|
60
|
+
const discoveredAccounts = await (0, utils_1.withRetry)(() => (0, utils_1.withTimeout)(__classPrivateFieldGet(this, _TrxAccountProvider_client, "f").discoverAccounts([keyring_api_1.TrxScope.Mainnet], entropySource, groupIndex), __classPrivateFieldGet(this, _TrxAccountProvider_config, "f").discovery.timeoutMs), {
|
|
61
|
+
maxAttempts: __classPrivateFieldGet(this, _TrxAccountProvider_config, "f").discovery.maxAttempts,
|
|
62
|
+
backOffMs: __classPrivateFieldGet(this, _TrxAccountProvider_config, "f").discovery.backOffMs,
|
|
63
|
+
});
|
|
64
|
+
if (!discoveredAccounts.length) {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
const createdAccounts = await Promise.all(discoveredAccounts.map((d) => __classPrivateFieldGet(this, _TrxAccountProvider_instances, "m", _TrxAccountProvider_createAccount).call(this, {
|
|
68
|
+
entropySource,
|
|
69
|
+
groupIndex,
|
|
70
|
+
derivationPath: d.derivationPath,
|
|
71
|
+
})));
|
|
72
|
+
return createdAccounts;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
exports.TrxAccountProvider = TrxAccountProvider;
|
|
76
|
+
_TrxAccountProvider_client = new WeakMap(), _TrxAccountProvider_config = new WeakMap(), _TrxAccountProvider_instances = new WeakSet(), _TrxAccountProvider_getKeyringClientFromSnapId = function _TrxAccountProvider_getKeyringClientFromSnapId(snapId) {
|
|
77
|
+
return new keyring_snap_client_1.KeyringClient({
|
|
78
|
+
send: async (request) => {
|
|
79
|
+
const response = await this.messenger.call('SnapController:handleRequest', {
|
|
80
|
+
snapId: snapId,
|
|
81
|
+
origin: 'metamask',
|
|
82
|
+
handler: snaps_utils_1.HandlerType.OnKeyringRequest,
|
|
83
|
+
request,
|
|
84
|
+
});
|
|
85
|
+
return response;
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
}, _TrxAccountProvider_createAccount = async function _TrxAccountProvider_createAccount({ entropySource, groupIndex, derivationPath, }) {
|
|
89
|
+
const createAccount = await this.getRestrictedSnapAccountCreator();
|
|
90
|
+
const account = await (0, utils_1.withTimeout)(createAccount({ entropySource, derivationPath }), __classPrivateFieldGet(this, _TrxAccountProvider_config, "f").createAccounts.timeoutMs);
|
|
91
|
+
// Ensure entropy is present before type assertion validation
|
|
92
|
+
account.options.entropy = {
|
|
93
|
+
type: keyring_api_2.KeyringAccountEntropyTypeOption.Mnemonic,
|
|
94
|
+
id: entropySource,
|
|
95
|
+
groupIndex,
|
|
96
|
+
derivationPath,
|
|
97
|
+
};
|
|
98
|
+
(0, account_api_1.assertIsBip44Account)(account);
|
|
99
|
+
return account;
|
|
100
|
+
};
|
|
101
|
+
TrxAccountProvider.NAME = exports.TRX_ACCOUNT_PROVIDER_NAME;
|
|
102
|
+
TrxAccountProvider.TRX_SNAP_ID = 'npm:@metamask/tron-wallet-snap';
|
|
103
|
+
//# sourceMappingURL=TrxAccountProvider.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrxAccountProvider.cjs","sourceRoot":"","sources":["../../src/providers/TrxAccountProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { assertIsBip44Account, type Bip44Account } from '@metamask/account-api';\nimport type { EntropySourceId, KeyringAccount } from '@metamask/keyring-api';\nimport { TrxAccountType, TrxScope } from '@metamask/keyring-api';\nimport { KeyringAccountEntropyTypeOption } from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport { KeyringClient } from '@metamask/keyring-snap-client';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport { HandlerType } from '@metamask/snaps-utils';\nimport type { Json, JsonRpcRequest } from '@metamask/utils';\nimport type { MultichainAccountServiceMessenger } from 'src/types';\n\nimport { SnapAccountProvider } from './SnapAccountProvider';\nimport { withRetry, withTimeout } from './utils';\n\nexport type TrxAccountProviderConfig = {\n discovery: {\n maxAttempts: number;\n timeoutMs: number;\n backOffMs: number;\n };\n createAccounts: {\n timeoutMs: number;\n };\n};\n\nexport const TRX_ACCOUNT_PROVIDER_NAME = 'Tron' as const;\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 #client: KeyringClient;\n\n readonly #config: TrxAccountProviderConfig;\n\n constructor(\n messenger: MultichainAccountServiceMessenger,\n config: TrxAccountProviderConfig = {\n discovery: {\n timeoutMs: 2000,\n maxAttempts: 3,\n backOffMs: 1000,\n },\n createAccounts: {\n timeoutMs: 3000,\n },\n },\n ) {\n super(TrxAccountProvider.TRX_SNAP_ID, messenger);\n this.#client = this.#getKeyringClientFromSnapId(\n TrxAccountProvider.TRX_SNAP_ID,\n );\n this.#config = config;\n }\n\n getName(): string {\n return TrxAccountProvider.NAME;\n }\n\n #getKeyringClientFromSnapId(snapId: string): KeyringClient {\n return new KeyringClient({\n send: async (request: JsonRpcRequest) => {\n const response = await this.messenger.call(\n 'SnapController:handleRequest',\n {\n snapId: snapId as SnapId,\n origin: 'metamask',\n handler: HandlerType.OnKeyringRequest,\n request,\n },\n );\n return response as Json;\n },\n });\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 async #createAccount({\n entropySource,\n groupIndex,\n derivationPath,\n }: {\n entropySource: EntropySourceId;\n groupIndex: number;\n derivationPath: string;\n }): Promise<Bip44Account<KeyringAccount>> {\n const createAccount = await this.getRestrictedSnapAccountCreator();\n const account = await withTimeout(\n createAccount({ entropySource, derivationPath }),\n this.#config.createAccounts.timeoutMs,\n );\n\n // Ensure entropy is present before type assertion validation\n account.options.entropy = {\n type: KeyringAccountEntropyTypeOption.Mnemonic,\n id: entropySource,\n groupIndex,\n derivationPath,\n };\n\n assertIsBip44Account(account);\n return account;\n }\n\n async createAccounts({\n entropySource,\n groupIndex,\n }: {\n entropySource: EntropySourceId;\n groupIndex: number;\n }): Promise<Bip44Account<KeyringAccount>[]> {\n const derivationPath = `m/44'/195'/0'/${groupIndex}'`;\n const account = await this.#createAccount({\n entropySource,\n groupIndex,\n derivationPath,\n });\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 const discoveredAccounts = await withRetry(\n () =>\n withTimeout(\n this.#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 const createdAccounts = await Promise.all(\n discoveredAccounts.map((d) =>\n this.#createAccount({\n entropySource,\n groupIndex,\n derivationPath: d.derivationPath,\n }),\n ),\n );\n\n return createdAccounts;\n }\n}\n"]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type Bip44Account } from "@metamask/account-api";
|
|
2
|
+
import type { EntropySourceId, KeyringAccount } from "@metamask/keyring-api";
|
|
3
|
+
import type { InternalAccount } from "@metamask/keyring-internal-api";
|
|
4
|
+
import type { SnapId } from "@metamask/snaps-sdk";
|
|
5
|
+
import type { MultichainAccountServiceMessenger } from "src/types";
|
|
6
|
+
import { SnapAccountProvider } from "./SnapAccountProvider.cjs";
|
|
7
|
+
export type TrxAccountProviderConfig = {
|
|
8
|
+
discovery: {
|
|
9
|
+
maxAttempts: number;
|
|
10
|
+
timeoutMs: number;
|
|
11
|
+
backOffMs: number;
|
|
12
|
+
};
|
|
13
|
+
createAccounts: {
|
|
14
|
+
timeoutMs: number;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export declare const TRX_ACCOUNT_PROVIDER_NAME: "Tron";
|
|
18
|
+
export declare class TrxAccountProvider extends SnapAccountProvider {
|
|
19
|
+
#private;
|
|
20
|
+
static NAME: "Tron";
|
|
21
|
+
static TRX_SNAP_ID: SnapId;
|
|
22
|
+
constructor(messenger: MultichainAccountServiceMessenger, config?: TrxAccountProviderConfig);
|
|
23
|
+
getName(): string;
|
|
24
|
+
isAccountCompatible(account: Bip44Account<InternalAccount>): boolean;
|
|
25
|
+
createAccounts({ entropySource, groupIndex, }: {
|
|
26
|
+
entropySource: EntropySourceId;
|
|
27
|
+
groupIndex: number;
|
|
28
|
+
}): Promise<Bip44Account<KeyringAccount>[]>;
|
|
29
|
+
discoverAccounts({ entropySource, groupIndex, }: {
|
|
30
|
+
entropySource: EntropySourceId;
|
|
31
|
+
groupIndex: number;
|
|
32
|
+
}): Promise<Bip44Account<KeyringAccount>[]>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=TrxAccountProvider.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrxAccountProvider.d.cts","sourceRoot":"","sources":["../../src/providers/TrxAccountProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,YAAY,EAAE,8BAA8B;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,8BAA8B;AAI7E,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAEtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAGlD,OAAO,KAAK,EAAE,iCAAiC,EAAE,kBAAkB;AAEnE,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAG5D,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,cAAc,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,yBAAyB,QAAkB,CAAC;AAEzD,qBAAa,kBAAmB,SAAQ,mBAAmB;;IACzD,MAAM,CAAC,IAAI,SAA6B;IAExC,MAAM,CAAC,WAAW,SAA8C;gBAO9D,SAAS,EAAE,iCAAiC,EAC5C,MAAM,GAAE,wBASP;IASH,OAAO,IAAI,MAAM;IAqBjB,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,OAAO;IAkC9D,cAAc,CAAC,EACnB,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;IAWrC,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;CAiC5C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type Bip44Account } from "@metamask/account-api";
|
|
2
|
+
import type { EntropySourceId, KeyringAccount } from "@metamask/keyring-api";
|
|
3
|
+
import type { InternalAccount } from "@metamask/keyring-internal-api";
|
|
4
|
+
import type { SnapId } from "@metamask/snaps-sdk";
|
|
5
|
+
import type { MultichainAccountServiceMessenger } from "src/types";
|
|
6
|
+
import { SnapAccountProvider } from "./SnapAccountProvider.mjs";
|
|
7
|
+
export type TrxAccountProviderConfig = {
|
|
8
|
+
discovery: {
|
|
9
|
+
maxAttempts: number;
|
|
10
|
+
timeoutMs: number;
|
|
11
|
+
backOffMs: number;
|
|
12
|
+
};
|
|
13
|
+
createAccounts: {
|
|
14
|
+
timeoutMs: number;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
export declare const TRX_ACCOUNT_PROVIDER_NAME: "Tron";
|
|
18
|
+
export declare class TrxAccountProvider extends SnapAccountProvider {
|
|
19
|
+
#private;
|
|
20
|
+
static NAME: "Tron";
|
|
21
|
+
static TRX_SNAP_ID: SnapId;
|
|
22
|
+
constructor(messenger: MultichainAccountServiceMessenger, config?: TrxAccountProviderConfig);
|
|
23
|
+
getName(): string;
|
|
24
|
+
isAccountCompatible(account: Bip44Account<InternalAccount>): boolean;
|
|
25
|
+
createAccounts({ entropySource, groupIndex, }: {
|
|
26
|
+
entropySource: EntropySourceId;
|
|
27
|
+
groupIndex: number;
|
|
28
|
+
}): Promise<Bip44Account<KeyringAccount>[]>;
|
|
29
|
+
discoverAccounts({ entropySource, groupIndex, }: {
|
|
30
|
+
entropySource: EntropySourceId;
|
|
31
|
+
groupIndex: number;
|
|
32
|
+
}): Promise<Bip44Account<KeyringAccount>[]>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=TrxAccountProvider.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrxAccountProvider.d.mts","sourceRoot":"","sources":["../../src/providers/TrxAccountProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,YAAY,EAAE,8BAA8B;AAChF,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,8BAA8B;AAI7E,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AAEtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAGlD,OAAO,KAAK,EAAE,iCAAiC,EAAE,kBAAkB;AAEnE,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAG5D,MAAM,MAAM,wBAAwB,GAAG;IACrC,SAAS,EAAE;QACT,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,cAAc,EAAE;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH,CAAC;AAEF,eAAO,MAAM,yBAAyB,QAAkB,CAAC;AAEzD,qBAAa,kBAAmB,SAAQ,mBAAmB;;IACzD,MAAM,CAAC,IAAI,SAA6B;IAExC,MAAM,CAAC,WAAW,SAA8C;gBAO9D,SAAS,EAAE,iCAAiC,EAC5C,MAAM,GAAE,wBASP;IASH,OAAO,IAAI,MAAM;IAqBjB,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,eAAe,CAAC,GAAG,OAAO;IAkC9D,cAAc,CAAC,EACnB,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;IAWrC,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;CAiC5C"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
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
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
+
};
|
|
6
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
7
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
|
+
};
|
|
12
|
+
var _TrxAccountProvider_instances, _TrxAccountProvider_client, _TrxAccountProvider_config, _TrxAccountProvider_getKeyringClientFromSnapId, _TrxAccountProvider_createAccount;
|
|
13
|
+
import { assertIsBip44Account } from "@metamask/account-api";
|
|
14
|
+
import { TrxAccountType, TrxScope } from "@metamask/keyring-api";
|
|
15
|
+
import { KeyringAccountEntropyTypeOption } from "@metamask/keyring-api";
|
|
16
|
+
import { KeyringTypes } from "@metamask/keyring-controller";
|
|
17
|
+
import { KeyringClient } from "@metamask/keyring-snap-client";
|
|
18
|
+
import { HandlerType } from "@metamask/snaps-utils";
|
|
19
|
+
import { SnapAccountProvider } from "./SnapAccountProvider.mjs";
|
|
20
|
+
import { withRetry, withTimeout } from "./utils.mjs";
|
|
21
|
+
export const TRX_ACCOUNT_PROVIDER_NAME = 'Tron';
|
|
22
|
+
export class TrxAccountProvider extends SnapAccountProvider {
|
|
23
|
+
constructor(messenger, config = {
|
|
24
|
+
discovery: {
|
|
25
|
+
timeoutMs: 2000,
|
|
26
|
+
maxAttempts: 3,
|
|
27
|
+
backOffMs: 1000,
|
|
28
|
+
},
|
|
29
|
+
createAccounts: {
|
|
30
|
+
timeoutMs: 3000,
|
|
31
|
+
},
|
|
32
|
+
}) {
|
|
33
|
+
super(TrxAccountProvider.TRX_SNAP_ID, messenger);
|
|
34
|
+
_TrxAccountProvider_instances.add(this);
|
|
35
|
+
_TrxAccountProvider_client.set(this, void 0);
|
|
36
|
+
_TrxAccountProvider_config.set(this, void 0);
|
|
37
|
+
__classPrivateFieldSet(this, _TrxAccountProvider_client, __classPrivateFieldGet(this, _TrxAccountProvider_instances, "m", _TrxAccountProvider_getKeyringClientFromSnapId).call(this, TrxAccountProvider.TRX_SNAP_ID), "f");
|
|
38
|
+
__classPrivateFieldSet(this, _TrxAccountProvider_config, config, "f");
|
|
39
|
+
}
|
|
40
|
+
getName() {
|
|
41
|
+
return TrxAccountProvider.NAME;
|
|
42
|
+
}
|
|
43
|
+
isAccountCompatible(account) {
|
|
44
|
+
return (account.type === TrxAccountType.Eoa &&
|
|
45
|
+
account.metadata.keyring.type === KeyringTypes.snap);
|
|
46
|
+
}
|
|
47
|
+
async createAccounts({ entropySource, groupIndex, }) {
|
|
48
|
+
const derivationPath = `m/44'/195'/0'/${groupIndex}'`;
|
|
49
|
+
const account = await __classPrivateFieldGet(this, _TrxAccountProvider_instances, "m", _TrxAccountProvider_createAccount).call(this, {
|
|
50
|
+
entropySource,
|
|
51
|
+
groupIndex,
|
|
52
|
+
derivationPath,
|
|
53
|
+
});
|
|
54
|
+
return [account];
|
|
55
|
+
}
|
|
56
|
+
async discoverAccounts({ entropySource, groupIndex, }) {
|
|
57
|
+
const discoveredAccounts = await withRetry(() => withTimeout(__classPrivateFieldGet(this, _TrxAccountProvider_client, "f").discoverAccounts([TrxScope.Mainnet], entropySource, groupIndex), __classPrivateFieldGet(this, _TrxAccountProvider_config, "f").discovery.timeoutMs), {
|
|
58
|
+
maxAttempts: __classPrivateFieldGet(this, _TrxAccountProvider_config, "f").discovery.maxAttempts,
|
|
59
|
+
backOffMs: __classPrivateFieldGet(this, _TrxAccountProvider_config, "f").discovery.backOffMs,
|
|
60
|
+
});
|
|
61
|
+
if (!discoveredAccounts.length) {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
const createdAccounts = await Promise.all(discoveredAccounts.map((d) => __classPrivateFieldGet(this, _TrxAccountProvider_instances, "m", _TrxAccountProvider_createAccount).call(this, {
|
|
65
|
+
entropySource,
|
|
66
|
+
groupIndex,
|
|
67
|
+
derivationPath: d.derivationPath,
|
|
68
|
+
})));
|
|
69
|
+
return createdAccounts;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
_TrxAccountProvider_client = new WeakMap(), _TrxAccountProvider_config = new WeakMap(), _TrxAccountProvider_instances = new WeakSet(), _TrxAccountProvider_getKeyringClientFromSnapId = function _TrxAccountProvider_getKeyringClientFromSnapId(snapId) {
|
|
73
|
+
return new KeyringClient({
|
|
74
|
+
send: async (request) => {
|
|
75
|
+
const response = await this.messenger.call('SnapController:handleRequest', {
|
|
76
|
+
snapId: snapId,
|
|
77
|
+
origin: 'metamask',
|
|
78
|
+
handler: HandlerType.OnKeyringRequest,
|
|
79
|
+
request,
|
|
80
|
+
});
|
|
81
|
+
return response;
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
}, _TrxAccountProvider_createAccount = async function _TrxAccountProvider_createAccount({ entropySource, groupIndex, derivationPath, }) {
|
|
85
|
+
const createAccount = await this.getRestrictedSnapAccountCreator();
|
|
86
|
+
const account = await withTimeout(createAccount({ entropySource, derivationPath }), __classPrivateFieldGet(this, _TrxAccountProvider_config, "f").createAccounts.timeoutMs);
|
|
87
|
+
// Ensure entropy is present before type assertion validation
|
|
88
|
+
account.options.entropy = {
|
|
89
|
+
type: KeyringAccountEntropyTypeOption.Mnemonic,
|
|
90
|
+
id: entropySource,
|
|
91
|
+
groupIndex,
|
|
92
|
+
derivationPath,
|
|
93
|
+
};
|
|
94
|
+
assertIsBip44Account(account);
|
|
95
|
+
return account;
|
|
96
|
+
};
|
|
97
|
+
TrxAccountProvider.NAME = TRX_ACCOUNT_PROVIDER_NAME;
|
|
98
|
+
TrxAccountProvider.TRX_SNAP_ID = 'npm:@metamask/tron-wallet-snap';
|
|
99
|
+
//# sourceMappingURL=TrxAccountProvider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrxAccountProvider.mjs","sourceRoot":"","sources":["../../src/providers/TrxAccountProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import { assertIsBip44Account, type Bip44Account } from '@metamask/account-api';\nimport type { EntropySourceId, KeyringAccount } from '@metamask/keyring-api';\nimport { TrxAccountType, TrxScope } from '@metamask/keyring-api';\nimport { KeyringAccountEntropyTypeOption } from '@metamask/keyring-api';\nimport { KeyringTypes } from '@metamask/keyring-controller';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport { KeyringClient } from '@metamask/keyring-snap-client';\nimport type { SnapId } from '@metamask/snaps-sdk';\nimport { HandlerType } from '@metamask/snaps-utils';\nimport type { Json, JsonRpcRequest } from '@metamask/utils';\nimport type { MultichainAccountServiceMessenger } from 'src/types';\n\nimport { SnapAccountProvider } from './SnapAccountProvider';\nimport { withRetry, withTimeout } from './utils';\n\nexport type TrxAccountProviderConfig = {\n discovery: {\n maxAttempts: number;\n timeoutMs: number;\n backOffMs: number;\n };\n createAccounts: {\n timeoutMs: number;\n };\n};\n\nexport const TRX_ACCOUNT_PROVIDER_NAME = 'Tron' as const;\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 #client: KeyringClient;\n\n readonly #config: TrxAccountProviderConfig;\n\n constructor(\n messenger: MultichainAccountServiceMessenger,\n config: TrxAccountProviderConfig = {\n discovery: {\n timeoutMs: 2000,\n maxAttempts: 3,\n backOffMs: 1000,\n },\n createAccounts: {\n timeoutMs: 3000,\n },\n },\n ) {\n super(TrxAccountProvider.TRX_SNAP_ID, messenger);\n this.#client = this.#getKeyringClientFromSnapId(\n TrxAccountProvider.TRX_SNAP_ID,\n );\n this.#config = config;\n }\n\n getName(): string {\n return TrxAccountProvider.NAME;\n }\n\n #getKeyringClientFromSnapId(snapId: string): KeyringClient {\n return new KeyringClient({\n send: async (request: JsonRpcRequest) => {\n const response = await this.messenger.call(\n 'SnapController:handleRequest',\n {\n snapId: snapId as SnapId,\n origin: 'metamask',\n handler: HandlerType.OnKeyringRequest,\n request,\n },\n );\n return response as Json;\n },\n });\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 async #createAccount({\n entropySource,\n groupIndex,\n derivationPath,\n }: {\n entropySource: EntropySourceId;\n groupIndex: number;\n derivationPath: string;\n }): Promise<Bip44Account<KeyringAccount>> {\n const createAccount = await this.getRestrictedSnapAccountCreator();\n const account = await withTimeout(\n createAccount({ entropySource, derivationPath }),\n this.#config.createAccounts.timeoutMs,\n );\n\n // Ensure entropy is present before type assertion validation\n account.options.entropy = {\n type: KeyringAccountEntropyTypeOption.Mnemonic,\n id: entropySource,\n groupIndex,\n derivationPath,\n };\n\n assertIsBip44Account(account);\n return account;\n }\n\n async createAccounts({\n entropySource,\n groupIndex,\n }: {\n entropySource: EntropySourceId;\n groupIndex: number;\n }): Promise<Bip44Account<KeyringAccount>[]> {\n const derivationPath = `m/44'/195'/0'/${groupIndex}'`;\n const account = await this.#createAccount({\n entropySource,\n groupIndex,\n derivationPath,\n });\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 const discoveredAccounts = await withRetry(\n () =>\n withTimeout(\n this.#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 const createdAccounts = await Promise.all(\n discoveredAccounts.map((d) =>\n this.#createAccount({\n entropySource,\n groupIndex,\n derivationPath: d.derivationPath,\n }),\n ),\n );\n\n return createdAccounts;\n }\n}\n"]}
|
package/dist/providers/index.cjs
CHANGED
|
@@ -24,4 +24,6 @@ Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function
|
|
|
24
24
|
// Concrete providers:
|
|
25
25
|
__exportStar(require("./SolAccountProvider.cjs"), exports);
|
|
26
26
|
__exportStar(require("./EvmAccountProvider.cjs"), exports);
|
|
27
|
+
__exportStar(require("./BtcAccountProvider.cjs"), exports);
|
|
28
|
+
__exportStar(require("./TrxAccountProvider.cjs"), exports);
|
|
27
29
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iEAA2C;AAC3C,4DAAsC;AACtC,+DAAyC;AAEzC,uDAAuD;AACvD,qCAAuC;AAA9B,qGAAA,YAAY,OAAA;AAErB,sBAAsB;AACtB,2DAAqC;AACrC,2DAAqC","sourcesContent":["export * from './BaseBip44AccountProvider';\nexport * from './SnapAccountProvider';\nexport * from './AccountProviderWrapper';\n\n// Errors that can bubble up outside of provider calls.\nexport { TimeoutError } from './utils';\n\n// Concrete providers:\nexport * from './SolAccountProvider';\nexport * from './EvmAccountProvider';\n"]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iEAA2C;AAC3C,4DAAsC;AACtC,+DAAyC;AAEzC,uDAAuD;AACvD,qCAAuC;AAA9B,qGAAA,YAAY,OAAA;AAErB,sBAAsB;AACtB,2DAAqC;AACrC,2DAAqC;AACrC,2DAAqC;AACrC,2DAAqC","sourcesContent":["export * from './BaseBip44AccountProvider';\nexport * from './SnapAccountProvider';\nexport * from './AccountProviderWrapper';\n\n// Errors that can bubble up outside of provider calls.\nexport { TimeoutError } from './utils';\n\n// Concrete providers:\nexport * from './SolAccountProvider';\nexport * from './EvmAccountProvider';\nexport * from './BtcAccountProvider';\nexport * from './TrxAccountProvider';\n"]}
|
|
@@ -4,4 +4,6 @@ export * from "./AccountProviderWrapper.cjs";
|
|
|
4
4
|
export { TimeoutError } from "./utils.cjs";
|
|
5
5
|
export * from "./SolAccountProvider.cjs";
|
|
6
6
|
export * from "./EvmAccountProvider.cjs";
|
|
7
|
+
export * from "./BtcAccountProvider.cjs";
|
|
8
|
+
export * from "./TrxAccountProvider.cjs";
|
|
7
9
|
//# sourceMappingURL=index.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,+CAA2C;AAC3C,0CAAsC;AACtC,6CAAyC;AAGzC,OAAO,EAAE,YAAY,EAAE,oBAAgB;AAGvC,yCAAqC;AACrC,yCAAqC"}
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,+CAA2C;AAC3C,0CAAsC;AACtC,6CAAyC;AAGzC,OAAO,EAAE,YAAY,EAAE,oBAAgB;AAGvC,yCAAqC;AACrC,yCAAqC;AACrC,yCAAqC;AACrC,yCAAqC"}
|
|
@@ -4,4 +4,6 @@ export * from "./AccountProviderWrapper.mjs";
|
|
|
4
4
|
export { TimeoutError } from "./utils.mjs";
|
|
5
5
|
export * from "./SolAccountProvider.mjs";
|
|
6
6
|
export * from "./EvmAccountProvider.mjs";
|
|
7
|
+
export * from "./BtcAccountProvider.mjs";
|
|
8
|
+
export * from "./TrxAccountProvider.mjs";
|
|
7
9
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,+CAA2C;AAC3C,0CAAsC;AACtC,6CAAyC;AAGzC,OAAO,EAAE,YAAY,EAAE,oBAAgB;AAGvC,yCAAqC;AACrC,yCAAqC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,+CAA2C;AAC3C,0CAAsC;AACtC,6CAAyC;AAGzC,OAAO,EAAE,YAAY,EAAE,oBAAgB;AAGvC,yCAAqC;AACrC,yCAAqC;AACrC,yCAAqC;AACrC,yCAAqC"}
|
package/dist/providers/index.mjs
CHANGED
|
@@ -6,4 +6,6 @@ export { TimeoutError } from "./utils.mjs";
|
|
|
6
6
|
// Concrete providers:
|
|
7
7
|
export * from "./SolAccountProvider.mjs";
|
|
8
8
|
export * from "./EvmAccountProvider.mjs";
|
|
9
|
+
export * from "./BtcAccountProvider.mjs";
|
|
10
|
+
export * from "./TrxAccountProvider.mjs";
|
|
9
11
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,+CAA2C;AAC3C,0CAAsC;AACtC,6CAAyC;AAEzC,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,oBAAgB;AAEvC,sBAAsB;AACtB,yCAAqC;AACrC,yCAAqC","sourcesContent":["export * from './BaseBip44AccountProvider';\nexport * from './SnapAccountProvider';\nexport * from './AccountProviderWrapper';\n\n// Errors that can bubble up outside of provider calls.\nexport { TimeoutError } from './utils';\n\n// Concrete providers:\nexport * from './SolAccountProvider';\nexport * from './EvmAccountProvider';\n"]}
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,+CAA2C;AAC3C,0CAAsC;AACtC,6CAAyC;AAEzC,uDAAuD;AACvD,OAAO,EAAE,YAAY,EAAE,oBAAgB;AAEvC,sBAAsB;AACtB,yCAAqC;AACrC,yCAAqC;AACrC,yCAAqC;AACrC,yCAAqC","sourcesContent":["export * from './BaseBip44AccountProvider';\nexport * from './SnapAccountProvider';\nexport * from './AccountProviderWrapper';\n\n// Errors that can bubble up outside of provider calls.\nexport { TimeoutError } from './utils';\n\n// Concrete providers:\nexport * from './SolAccountProvider';\nexport * from './EvmAccountProvider';\nexport * from './BtcAccountProvider';\nexport * from './TrxAccountProvider';\n"]}
|
package/dist/tests/accounts.cjs
CHANGED
|
@@ -12,7 +12,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
12
12
|
};
|
|
13
13
|
var _MockAccountBuilder_account;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.mockAsInternalAccount = exports.MOCK_WALLET_1_BTC_P2TR_ACCOUNT = exports.MOCK_WALLET_1_BTC_P2WPKH_ACCOUNT = exports.MOCK_WALLET_1_SOL_ACCOUNT = exports.MOCK_WALLET_1_EVM_ACCOUNT = exports.MOCK_WALLET_1_ENTROPY_SOURCE = exports.MockAccountBuilder = exports.MOCK_HARDWARE_ACCOUNT_1 = exports.MOCK_SNAP_ACCOUNT_4 = exports.MOCK_SNAP_ACCOUNT_3 = exports.MOCK_SNAP_ACCOUNT_2 = exports.MOCK_SNAP_ACCOUNT_1 = exports.MOCK_BTC_P2TR_ACCOUNT_1 = exports.MOCK_BTC_P2WPKH_ACCOUNT_1 = exports.MOCK_SOL_DISCOVERED_ACCOUNT_1 = exports.MOCK_SOL_ACCOUNT_1 = exports.MOCK_HD_ACCOUNT_2 = exports.MOCK_HD_ACCOUNT_1 = exports.MOCK_HD_KEYRING_2 = exports.MOCK_HD_KEYRING_1 = exports.MOCK_MNEMONIC = exports.MOCK_ENTROPY_SOURCE_2 = exports.MOCK_ENTROPY_SOURCE_1 = exports.MOCK_SNAP_2 = exports.MOCK_SNAP_1 = exports.ETH_EOA_METHODS = void 0;
|
|
15
|
+
exports.mockAsInternalAccount = exports.MOCK_WALLET_1_BTC_P2TR_ACCOUNT = exports.MOCK_WALLET_1_BTC_P2WPKH_ACCOUNT = exports.MOCK_WALLET_1_SOL_ACCOUNT = exports.MOCK_WALLET_1_EVM_ACCOUNT = exports.MOCK_WALLET_1_ENTROPY_SOURCE = exports.MockAccountBuilder = exports.MOCK_HARDWARE_ACCOUNT_1 = exports.MOCK_SNAP_ACCOUNT_4 = exports.MOCK_SNAP_ACCOUNT_3 = exports.MOCK_SNAP_ACCOUNT_2 = exports.MOCK_SNAP_ACCOUNT_1 = exports.MOCK_BTC_P2TR_ACCOUNT_1 = exports.MOCK_BTC_P2WPKH_ACCOUNT_1 = exports.MOCK_BTC_P2TR_DISCOVERED_ACCOUNT_1 = exports.MOCK_TRX_DISCOVERED_ACCOUNT_1 = exports.MOCK_SOL_DISCOVERED_ACCOUNT_1 = exports.MOCK_TRX_ACCOUNT_1 = exports.MOCK_SOL_ACCOUNT_1 = exports.MOCK_HD_ACCOUNT_2 = exports.MOCK_HD_ACCOUNT_1 = exports.MOCK_HD_KEYRING_2 = exports.MOCK_HD_KEYRING_1 = exports.MOCK_MNEMONIC = exports.MOCK_ENTROPY_SOURCE_2 = exports.MOCK_ENTROPY_SOURCE_1 = exports.MOCK_SNAP_2 = exports.MOCK_SNAP_1 = exports.ETH_EOA_METHODS = void 0;
|
|
16
16
|
const account_api_1 = require("@metamask/account-api");
|
|
17
17
|
const keyring_api_1 = require("@metamask/keyring-api");
|
|
18
18
|
const keyring_controller_1 = require("@metamask/keyring-controller");
|
|
@@ -122,11 +122,44 @@ exports.MOCK_SOL_ACCOUNT_1 = {
|
|
|
122
122
|
lastSelected: 0,
|
|
123
123
|
},
|
|
124
124
|
};
|
|
125
|
+
exports.MOCK_TRX_ACCOUNT_1 = {
|
|
126
|
+
id: 'mock-snap-id-1',
|
|
127
|
+
address: 'aabbccdd',
|
|
128
|
+
options: {
|
|
129
|
+
entropy: {
|
|
130
|
+
type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic,
|
|
131
|
+
// NOTE: shares entropy with MOCK_HD_ACCOUNT_2
|
|
132
|
+
id: exports.MOCK_HD_KEYRING_2.metadata.id,
|
|
133
|
+
groupIndex: 0,
|
|
134
|
+
derivationPath: '',
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
methods: [keyring_api_1.TrxMethod.SignMessageV2, keyring_api_1.TrxMethod.VerifyMessageV2],
|
|
138
|
+
type: keyring_api_1.TrxAccountType.Eoa,
|
|
139
|
+
scopes: [keyring_api_1.TrxScope.Mainnet],
|
|
140
|
+
metadata: {
|
|
141
|
+
name: 'Tron Account 1',
|
|
142
|
+
keyring: { type: keyring_controller_1.KeyringTypes.snap },
|
|
143
|
+
snap: exports.MOCK_SNAP_1,
|
|
144
|
+
importTime: 0,
|
|
145
|
+
lastSelected: 0,
|
|
146
|
+
},
|
|
147
|
+
};
|
|
125
148
|
exports.MOCK_SOL_DISCOVERED_ACCOUNT_1 = {
|
|
126
149
|
type: 'bip44',
|
|
127
150
|
scopes: [keyring_api_1.SolScope.Mainnet],
|
|
128
151
|
derivationPath: `m/44'/501'/0'/0'`,
|
|
129
152
|
};
|
|
153
|
+
exports.MOCK_TRX_DISCOVERED_ACCOUNT_1 = {
|
|
154
|
+
type: 'bip44',
|
|
155
|
+
scopes: [keyring_api_1.TrxScope.Mainnet],
|
|
156
|
+
derivationPath: `m/44'/195'/0'/0'`,
|
|
157
|
+
};
|
|
158
|
+
exports.MOCK_BTC_P2TR_DISCOVERED_ACCOUNT_1 = {
|
|
159
|
+
type: 'bip44',
|
|
160
|
+
scopes: [keyring_api_1.BtcScope.Mainnet],
|
|
161
|
+
derivationPath: `m/44'/0'/0'/0'`,
|
|
162
|
+
};
|
|
130
163
|
exports.MOCK_BTC_P2WPKH_ACCOUNT_1 = {
|
|
131
164
|
id: 'b0f030d8-e101-4b5a-a3dd-13f8ca8ec1db',
|
|
132
165
|
type: keyring_api_1.BtcAccountType.P2wpkh,
|
|
@@ -146,7 +179,7 @@ exports.MOCK_BTC_P2WPKH_ACCOUNT_1 = {
|
|
|
146
179
|
name: 'Bitcoin Native Segwit Account 1',
|
|
147
180
|
importTime: 0,
|
|
148
181
|
keyring: {
|
|
149
|
-
type:
|
|
182
|
+
type: keyring_controller_1.KeyringTypes.snap,
|
|
150
183
|
},
|
|
151
184
|
snap: {
|
|
152
185
|
id: 'mock-btc-snap-id',
|
|
@@ -174,7 +207,7 @@ exports.MOCK_BTC_P2TR_ACCOUNT_1 = {
|
|
|
174
207
|
name: 'Bitcoin Taproot Account 1',
|
|
175
208
|
importTime: 0,
|
|
176
209
|
keyring: {
|
|
177
|
-
type:
|
|
210
|
+
type: keyring_controller_1.KeyringTypes.snap,
|
|
178
211
|
},
|
|
179
212
|
snap: {
|
|
180
213
|
id: 'mock-btc-snap-id',
|