@metamask-previews/multichain-account-service 4.1.0-preview-bbf1f2af → 4.1.0-preview-1d3aa020
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 +13 -0
- package/dist/MultichainAccountGroup.cjs +1 -1
- 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 +1 -1
- package/dist/MultichainAccountGroup.mjs.map +1 -1
- package/dist/MultichainAccountService.cjs +10 -3
- package/dist/MultichainAccountService.cjs.map +1 -1
- package/dist/MultichainAccountService.d.cts +1 -0
- package/dist/MultichainAccountService.d.cts.map +1 -1
- package/dist/MultichainAccountService.d.mts +1 -0
- package/dist/MultichainAccountService.d.mts.map +1 -1
- package/dist/MultichainAccountService.mjs +10 -3
- package/dist/MultichainAccountService.mjs.map +1 -1
- package/dist/MultichainAccountWallet.cjs +4 -4
- 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 +4 -4
- package/dist/MultichainAccountWallet.mjs.map +1 -1
- package/dist/providers/BtcAccountProvider.cjs +46 -32
- package/dist/providers/BtcAccountProvider.cjs.map +1 -1
- package/dist/providers/BtcAccountProvider.d.cts +2 -1
- package/dist/providers/BtcAccountProvider.d.cts.map +1 -1
- package/dist/providers/BtcAccountProvider.d.mts +2 -1
- package/dist/providers/BtcAccountProvider.d.mts.map +1 -1
- package/dist/providers/BtcAccountProvider.mjs +46 -32
- package/dist/providers/BtcAccountProvider.mjs.map +1 -1
- package/dist/providers/SnapAccountProvider.cjs +81 -54
- package/dist/providers/SnapAccountProvider.cjs.map +1 -1
- package/dist/providers/SnapAccountProvider.d.cts +16 -4
- package/dist/providers/SnapAccountProvider.d.cts.map +1 -1
- package/dist/providers/SnapAccountProvider.d.mts +16 -4
- package/dist/providers/SnapAccountProvider.d.mts.map +1 -1
- package/dist/providers/SnapAccountProvider.mjs +81 -54
- package/dist/providers/SnapAccountProvider.mjs.map +1 -1
- package/dist/providers/SolAccountProvider.cjs +36 -31
- package/dist/providers/SolAccountProvider.cjs.map +1 -1
- package/dist/providers/SolAccountProvider.d.cts.map +1 -1
- package/dist/providers/SolAccountProvider.d.mts.map +1 -1
- package/dist/providers/SolAccountProvider.mjs +36 -31
- package/dist/providers/SolAccountProvider.mjs.map +1 -1
- package/dist/providers/TrxAccountProvider.cjs +47 -29
- package/dist/providers/TrxAccountProvider.cjs.map +1 -1
- package/dist/providers/TrxAccountProvider.d.cts +1 -0
- package/dist/providers/TrxAccountProvider.d.cts.map +1 -1
- package/dist/providers/TrxAccountProvider.d.mts +1 -0
- package/dist/providers/TrxAccountProvider.d.mts.map +1 -1
- package/dist/providers/TrxAccountProvider.mjs +47 -29
- package/dist/providers/TrxAccountProvider.mjs.map +1 -1
- package/dist/snaps/SnapPlatformWatcher.cjs +60 -0
- package/dist/snaps/SnapPlatformWatcher.cjs.map +1 -0
- package/dist/snaps/SnapPlatformWatcher.d.cts +8 -0
- package/dist/snaps/SnapPlatformWatcher.d.cts.map +1 -0
- package/dist/snaps/SnapPlatformWatcher.d.mts +8 -0
- package/dist/snaps/SnapPlatformWatcher.d.mts.map +1 -0
- package/dist/snaps/SnapPlatformWatcher.mjs +57 -0
- package/dist/snaps/SnapPlatformWatcher.mjs.map +1 -0
- package/dist/tests/messenger.cjs +9 -2
- package/dist/tests/messenger.cjs.map +1 -1
- package/dist/tests/messenger.d.cts +9 -4
- package/dist/tests/messenger.d.cts.map +1 -1
- package/dist/tests/messenger.d.mts +9 -4
- package/dist/tests/messenger.d.mts.map +1 -1
- package/dist/tests/messenger.mjs +9 -2
- package/dist/tests/messenger.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +8 -5
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +8 -5
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SolAccountProvider.mjs","sourceRoot":"","sources":["../../src/providers/SolAccountProvider.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,oBAAoB,EAAE,8BAA8B;AAI7D,OAAO,EAAE,QAAQ,EAAE,8BAA8B;AACjD,OAAO,EACL,+BAA+B,EAC/B,cAAc,EACf,8BAA8B;AAC/B,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAI5D,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;
|
|
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 { EntropySourceId, KeyringAccount } from '@metamask/keyring-api';\nimport { SolScope } from '@metamask/keyring-api';\nimport {\n KeyringAccountEntropyTypeOption,\n SolAccountType,\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 '../constants/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 timeoutMs: 3000,\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 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 async #createAccount({\n keyring,\n entropySource,\n groupIndex,\n derivationPath,\n }: {\n keyring: RestrictedSnapKeyring;\n entropySource: EntropySourceId;\n groupIndex: number;\n derivationPath: string;\n }): Promise<Bip44Account<KeyringAccount>> {\n const account = await withTimeout(\n keyring.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 return this.withSnap(async ({ keyring }) => {\n return this.withMaxConcurrency(async () => {\n const derivationPath = `m/44'/501'/${groupIndex}'/0'`;\n const account = await this.#createAccount({\n keyring,\n entropySource,\n groupIndex,\n derivationPath,\n });\n\n return [account];\n });\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 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 const createdAccounts = await Promise.all(\n discoveredAccounts.map((d) =>\n this.#createAccount({\n keyring,\n entropySource,\n groupIndex,\n derivationPath: d.derivationPath,\n }),\n ),\n );\n\n return createdAccounts;\n },\n );\n });\n }\n}\n"]}
|
|
@@ -1,4 +1,10 @@
|
|
|
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;
|
|
2
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
9
|
exports.TrxAccountProvider = exports.TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG = exports.TRX_ACCOUNT_PROVIDER_NAME = void 0;
|
|
4
10
|
const account_api_1 = require("@metamask/account-api");
|
|
@@ -24,6 +30,7 @@ exports.TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG = {
|
|
|
24
30
|
class TrxAccountProvider extends SnapAccountProvider_1.SnapAccountProvider {
|
|
25
31
|
constructor(messenger, config = exports.TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG, trace = analytics_1.traceFallback) {
|
|
26
32
|
super(TrxAccountProvider.TRX_SNAP_ID, messenger, config, trace);
|
|
33
|
+
_TrxAccountProvider_instances.add(this);
|
|
27
34
|
}
|
|
28
35
|
getName() {
|
|
29
36
|
return TrxAccountProvider.NAME;
|
|
@@ -33,44 +40,55 @@ class TrxAccountProvider extends SnapAccountProvider_1.SnapAccountProvider {
|
|
|
33
40
|
account.metadata.keyring.type === keyring_controller_1.KeyringTypes.snap);
|
|
34
41
|
}
|
|
35
42
|
async createAccounts({ entropySource, groupIndex: index, }) {
|
|
36
|
-
return this.
|
|
37
|
-
|
|
38
|
-
|
|
43
|
+
return this.withSnap(async ({ keyring }) => {
|
|
44
|
+
return __classPrivateFieldGet(this, _TrxAccountProvider_instances, "m", _TrxAccountProvider_createAccounts).call(this, {
|
|
45
|
+
keyring,
|
|
39
46
|
entropySource,
|
|
40
|
-
index,
|
|
41
|
-
|
|
42
|
-
scope: keyring_api_1.TrxScope.Mainnet,
|
|
43
|
-
}), this.config.createAccounts.timeoutMs);
|
|
44
|
-
(0, account_api_1.assertIsBip44Account)(account);
|
|
45
|
-
return [account];
|
|
47
|
+
groupIndex: index,
|
|
48
|
+
});
|
|
46
49
|
});
|
|
47
50
|
}
|
|
48
51
|
async discoverAccounts({ entropySource, groupIndex, }) {
|
|
49
|
-
return
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
52
|
+
return this.withSnap(async ({ client, keyring }) => {
|
|
53
|
+
return await super.trace({
|
|
54
|
+
name: traces_1.TraceName.SnapDiscoverAccounts,
|
|
55
|
+
data: {
|
|
56
|
+
provider: this.getName(),
|
|
57
|
+
},
|
|
58
|
+
}, async () => {
|
|
59
|
+
if (!this.config.discovery.enabled) {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
const discoveredAccounts = await (0, utils_1.withRetry)(() => (0, utils_1.withTimeout)(client.discoverAccounts([keyring_api_1.TrxScope.Mainnet], entropySource, groupIndex), this.config.discovery.timeoutMs), {
|
|
63
|
+
maxAttempts: this.config.discovery.maxAttempts,
|
|
64
|
+
backOffMs: this.config.discovery.backOffMs,
|
|
65
|
+
});
|
|
66
|
+
if (!discoveredAccounts.length) {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
const createdAccounts = await __classPrivateFieldGet(this, _TrxAccountProvider_instances, "m", _TrxAccountProvider_createAccounts).call(this, {
|
|
70
|
+
keyring,
|
|
71
|
+
entropySource,
|
|
72
|
+
groupIndex,
|
|
73
|
+
});
|
|
74
|
+
return createdAccounts;
|
|
61
75
|
});
|
|
62
|
-
if (!discoveredAccounts.length) {
|
|
63
|
-
return [];
|
|
64
|
-
}
|
|
65
|
-
const createdAccounts = await this.createAccounts({
|
|
66
|
-
entropySource,
|
|
67
|
-
groupIndex,
|
|
68
|
-
});
|
|
69
|
-
return createdAccounts;
|
|
70
76
|
});
|
|
71
77
|
}
|
|
72
78
|
}
|
|
73
79
|
exports.TrxAccountProvider = TrxAccountProvider;
|
|
80
|
+
_TrxAccountProvider_instances = new WeakSet(), _TrxAccountProvider_createAccounts = async function _TrxAccountProvider_createAccounts({ keyring, entropySource, groupIndex: index, }) {
|
|
81
|
+
return this.withMaxConcurrency(async () => {
|
|
82
|
+
const account = await (0, utils_1.withTimeout)(keyring.createAccount({
|
|
83
|
+
entropySource,
|
|
84
|
+
index,
|
|
85
|
+
addressType: keyring_api_1.TrxAccountType.Eoa,
|
|
86
|
+
scope: keyring_api_1.TrxScope.Mainnet,
|
|
87
|
+
}), this.config.createAccounts.timeoutMs);
|
|
88
|
+
(0, account_api_1.assertIsBip44Account)(account);
|
|
89
|
+
return [account];
|
|
90
|
+
});
|
|
91
|
+
};
|
|
74
92
|
TrxAccountProvider.NAME = exports.TRX_ACCOUNT_PROVIDER_NAME;
|
|
75
93
|
TrxAccountProvider.TRX_SNAP_ID = 'npm:@metamask/tron-wallet-snap';
|
|
76
94
|
//# 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 { assertIsBip44Account } from '@metamask/account-api';\nimport type { Bip44Account } from '@metamask/account-api';\nimport type { TraceCallback } from '@metamask/controller-utils';\nimport type { EntropySourceId, KeyringAccount } from '@metamask/keyring-api';\nimport { TrxAccountType, TrxScope } 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 '../constants/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 timeoutMs: 3000,\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 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 async #createAccounts({\n keyring,\n entropySource,\n groupIndex: index,\n }: {\n keyring: RestrictedSnapKeyring;\n entropySource: EntropySourceId;\n groupIndex: number;\n }): Promise<Bip44Account<KeyringAccount>[]> {\n return this.withMaxConcurrency(async () => {\n const account = await withTimeout(\n keyring.createAccount({\n entropySource,\n index,\n addressType: TrxAccountType.Eoa,\n scope: TrxScope.Mainnet,\n }),\n this.config.createAccounts.timeoutMs,\n );\n\n assertIsBip44Account(account);\n return [account];\n });\n }\n\n async createAccounts({\n entropySource,\n groupIndex: index,\n }: {\n entropySource: EntropySourceId;\n groupIndex: number;\n }): Promise<Bip44Account<KeyringAccount>[]> {\n return this.withSnap(async ({ keyring }) => {\n return this.#createAccounts({\n keyring,\n entropySource,\n groupIndex: index,\n });\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 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 this.#createAccounts({\n keyring,\n entropySource,\n groupIndex,\n });\n\n return createdAccounts;\n },\n );\n });\n }\n}\n"]}
|
|
@@ -10,6 +10,7 @@ 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;
|
|
13
14
|
static NAME: string;
|
|
14
15
|
static TRX_SNAP_ID: SnapId;
|
|
15
16
|
constructor(messenger: MultichainAccountServiceMessenger, config?: TrxAccountProviderConfig, trace?: TraceCallback);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrxAccountProvider.d.cts","sourceRoot":"","sources":["../../src/providers/TrxAccountProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,mCAAmC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,8BAA8B;AAG7E,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAElD,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAC5D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"TrxAccountProvider.d.cts","sourceRoot":"","sources":["../../src/providers/TrxAccountProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,mCAAmC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,8BAA8B;AAG7E,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAElD,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAC5D,OAAO,KAAK,EAEV,yBAAyB,EAC1B,kCAA8B;AAI/B,OAAO,KAAK,EAAE,iCAAiC,EAAE,qBAAiB;AAElE,MAAM,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAEjE,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAEhD,eAAO,MAAM,mCAAmC,EAAE,wBAWjD,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,mBAAmB;;IACzD,MAAM,CAAC,IAAI,SAA6B;IAExC,MAAM,CAAC,WAAW,SAA8C;gBAG9D,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;IAgC9D,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;IAUrC,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;CA6C5C"}
|
|
@@ -10,6 +10,7 @@ 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;
|
|
13
14
|
static NAME: string;
|
|
14
15
|
static TRX_SNAP_ID: SnapId;
|
|
15
16
|
constructor(messenger: MultichainAccountServiceMessenger, config?: TrxAccountProviderConfig, trace?: TraceCallback);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrxAccountProvider.d.mts","sourceRoot":"","sources":["../../src/providers/TrxAccountProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,mCAAmC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,8BAA8B;AAG7E,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAElD,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAC5D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"TrxAccountProvider.d.mts","sourceRoot":"","sources":["../../src/providers/TrxAccountProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,8BAA8B;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,mCAAmC;AAChE,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,8BAA8B;AAG7E,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,4BAA4B;AAElD,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;AAC5D,OAAO,KAAK,EAEV,yBAAyB,EAC1B,kCAA8B;AAI/B,OAAO,KAAK,EAAE,iCAAiC,EAAE,qBAAiB;AAElE,MAAM,MAAM,wBAAwB,GAAG,yBAAyB,CAAC;AAEjE,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAEhD,eAAO,MAAM,mCAAmC,EAAE,wBAWjD,CAAC;AAEF,qBAAa,kBAAmB,SAAQ,mBAAmB;;IACzD,MAAM,CAAC,IAAI,SAA6B;IAExC,MAAM,CAAC,WAAW,SAA8C;gBAG9D,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;IAgC9D,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;IAUrC,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;CA6C5C"}
|
|
@@ -1,3 +1,9 @@
|
|
|
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 _TrxAccountProvider_instances, _TrxAccountProvider_createAccounts;
|
|
1
7
|
import { assertIsBip44Account } from "@metamask/account-api";
|
|
2
8
|
import { TrxAccountType, TrxScope } from "@metamask/keyring-api";
|
|
3
9
|
import { KeyringTypes } from "@metamask/keyring-controller";
|
|
@@ -21,6 +27,7 @@ export const TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG = {
|
|
|
21
27
|
export class TrxAccountProvider extends SnapAccountProvider {
|
|
22
28
|
constructor(messenger, config = TRX_ACCOUNT_PROVIDER_DEFAULT_CONFIG, trace = traceFallback) {
|
|
23
29
|
super(TrxAccountProvider.TRX_SNAP_ID, messenger, config, trace);
|
|
30
|
+
_TrxAccountProvider_instances.add(this);
|
|
24
31
|
}
|
|
25
32
|
getName() {
|
|
26
33
|
return TrxAccountProvider.NAME;
|
|
@@ -30,43 +37,54 @@ export class TrxAccountProvider extends SnapAccountProvider {
|
|
|
30
37
|
account.metadata.keyring.type === KeyringTypes.snap);
|
|
31
38
|
}
|
|
32
39
|
async createAccounts({ entropySource, groupIndex: index, }) {
|
|
33
|
-
return this.
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
return this.withSnap(async ({ keyring }) => {
|
|
41
|
+
return __classPrivateFieldGet(this, _TrxAccountProvider_instances, "m", _TrxAccountProvider_createAccounts).call(this, {
|
|
42
|
+
keyring,
|
|
36
43
|
entropySource,
|
|
37
|
-
index,
|
|
38
|
-
|
|
39
|
-
scope: TrxScope.Mainnet,
|
|
40
|
-
}), this.config.createAccounts.timeoutMs);
|
|
41
|
-
assertIsBip44Account(account);
|
|
42
|
-
return [account];
|
|
44
|
+
groupIndex: index,
|
|
45
|
+
});
|
|
43
46
|
});
|
|
44
47
|
}
|
|
45
48
|
async discoverAccounts({ entropySource, groupIndex, }) {
|
|
46
|
-
return
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
49
|
+
return this.withSnap(async ({ client, keyring }) => {
|
|
50
|
+
return await super.trace({
|
|
51
|
+
name: TraceName.SnapDiscoverAccounts,
|
|
52
|
+
data: {
|
|
53
|
+
provider: this.getName(),
|
|
54
|
+
},
|
|
55
|
+
}, async () => {
|
|
56
|
+
if (!this.config.discovery.enabled) {
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
const discoveredAccounts = await withRetry(() => withTimeout(client.discoverAccounts([TrxScope.Mainnet], entropySource, groupIndex), this.config.discovery.timeoutMs), {
|
|
60
|
+
maxAttempts: this.config.discovery.maxAttempts,
|
|
61
|
+
backOffMs: this.config.discovery.backOffMs,
|
|
62
|
+
});
|
|
63
|
+
if (!discoveredAccounts.length) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
const createdAccounts = await __classPrivateFieldGet(this, _TrxAccountProvider_instances, "m", _TrxAccountProvider_createAccounts).call(this, {
|
|
67
|
+
keyring,
|
|
68
|
+
entropySource,
|
|
69
|
+
groupIndex,
|
|
70
|
+
});
|
|
71
|
+
return createdAccounts;
|
|
58
72
|
});
|
|
59
|
-
if (!discoveredAccounts.length) {
|
|
60
|
-
return [];
|
|
61
|
-
}
|
|
62
|
-
const createdAccounts = await this.createAccounts({
|
|
63
|
-
entropySource,
|
|
64
|
-
groupIndex,
|
|
65
|
-
});
|
|
66
|
-
return createdAccounts;
|
|
67
73
|
});
|
|
68
74
|
}
|
|
69
75
|
}
|
|
76
|
+
_TrxAccountProvider_instances = new WeakSet(), _TrxAccountProvider_createAccounts = async function _TrxAccountProvider_createAccounts({ keyring, entropySource, groupIndex: index, }) {
|
|
77
|
+
return this.withMaxConcurrency(async () => {
|
|
78
|
+
const account = await withTimeout(keyring.createAccount({
|
|
79
|
+
entropySource,
|
|
80
|
+
index,
|
|
81
|
+
addressType: TrxAccountType.Eoa,
|
|
82
|
+
scope: TrxScope.Mainnet,
|
|
83
|
+
}), this.config.createAccounts.timeoutMs);
|
|
84
|
+
assertIsBip44Account(account);
|
|
85
|
+
return [account];
|
|
86
|
+
});
|
|
87
|
+
};
|
|
70
88
|
TrxAccountProvider.NAME = TRX_ACCOUNT_PROVIDER_NAME;
|
|
71
89
|
TrxAccountProvider.TRX_SNAP_ID = 'npm:@metamask/tron-wallet-snap';
|
|
72
90
|
//# sourceMappingURL=TrxAccountProvider.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TrxAccountProvider.mjs","sourceRoot":"","sources":["../../src/providers/TrxAccountProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,8BAA8B;AAI7D,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,8BAA8B;AACjE,OAAO,EAAE,YAAY,EAAE,qCAAqC;AAI5D,OAAO,EAAE,mBAAmB,EAAE,kCAA8B;
|
|
1
|
+
{"version":3,"file":"TrxAccountProvider.mjs","sourceRoot":"","sources":["../../src/providers/TrxAccountProvider.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 { EntropySourceId, KeyringAccount } from '@metamask/keyring-api';\nimport { TrxAccountType, TrxScope } 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 '../constants/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 timeoutMs: 3000,\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 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 async #createAccounts({\n keyring,\n entropySource,\n groupIndex: index,\n }: {\n keyring: RestrictedSnapKeyring;\n entropySource: EntropySourceId;\n groupIndex: number;\n }): Promise<Bip44Account<KeyringAccount>[]> {\n return this.withMaxConcurrency(async () => {\n const account = await withTimeout(\n keyring.createAccount({\n entropySource,\n index,\n addressType: TrxAccountType.Eoa,\n scope: TrxScope.Mainnet,\n }),\n this.config.createAccounts.timeoutMs,\n );\n\n assertIsBip44Account(account);\n return [account];\n });\n }\n\n async createAccounts({\n entropySource,\n groupIndex: index,\n }: {\n entropySource: EntropySourceId;\n groupIndex: number;\n }): Promise<Bip44Account<KeyringAccount>[]> {\n return this.withSnap(async ({ keyring }) => {\n return this.#createAccounts({\n keyring,\n entropySource,\n groupIndex: index,\n });\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 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 this.#createAccounts({\n keyring,\n entropySource,\n groupIndex,\n });\n\n return createdAccounts;\n },\n );\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
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");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
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");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _SnapPlatformWatcher_instances, _SnapPlatformWatcher_messenger, _SnapPlatformWatcher_isReadyOnce, _SnapPlatformWatcher_isReady, _SnapPlatformWatcher_watch;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.SnapPlatformWatcher = void 0;
|
|
16
|
+
const utils_1 = require("@metamask/utils");
|
|
17
|
+
const lodash_1 = require("lodash");
|
|
18
|
+
const logger_1 = require("../logger.cjs");
|
|
19
|
+
class SnapPlatformWatcher {
|
|
20
|
+
constructor(messenger) {
|
|
21
|
+
_SnapPlatformWatcher_instances.add(this);
|
|
22
|
+
_SnapPlatformWatcher_messenger.set(this, void 0);
|
|
23
|
+
_SnapPlatformWatcher_isReadyOnce.set(this, void 0);
|
|
24
|
+
_SnapPlatformWatcher_isReady.set(this, void 0);
|
|
25
|
+
__classPrivateFieldSet(this, _SnapPlatformWatcher_messenger, messenger, "f");
|
|
26
|
+
__classPrivateFieldSet(this, _SnapPlatformWatcher_isReady, false, "f");
|
|
27
|
+
__classPrivateFieldSet(this, _SnapPlatformWatcher_isReadyOnce, (0, utils_1.createDeferredPromise)(), "f");
|
|
28
|
+
__classPrivateFieldGet(this, _SnapPlatformWatcher_instances, "m", _SnapPlatformWatcher_watch).call(this);
|
|
29
|
+
}
|
|
30
|
+
get isReady() {
|
|
31
|
+
return __classPrivateFieldGet(this, _SnapPlatformWatcher_isReady, "f");
|
|
32
|
+
}
|
|
33
|
+
async ensureCanUseSnapPlatform() {
|
|
34
|
+
// We always wait for the Snap platform to be ready at least once.
|
|
35
|
+
await __classPrivateFieldGet(this, _SnapPlatformWatcher_isReadyOnce, "f").promise;
|
|
36
|
+
// Then, we check for the current state and see if we can use it.
|
|
37
|
+
if (!__classPrivateFieldGet(this, _SnapPlatformWatcher_isReady, "f")) {
|
|
38
|
+
throw new Error('Snap platform cannot be used now.');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.SnapPlatformWatcher = SnapPlatformWatcher;
|
|
43
|
+
_SnapPlatformWatcher_messenger = new WeakMap(), _SnapPlatformWatcher_isReadyOnce = new WeakMap(), _SnapPlatformWatcher_isReady = new WeakMap(), _SnapPlatformWatcher_instances = new WeakSet(), _SnapPlatformWatcher_watch = function _SnapPlatformWatcher_watch() {
|
|
44
|
+
const logReadyOnce = (0, lodash_1.once)(() => (0, logger_1.projectLogger)('Snap platform is ready!'));
|
|
45
|
+
const state = __classPrivateFieldGet(this, _SnapPlatformWatcher_messenger, "f").call('SnapController:getState');
|
|
46
|
+
// If already ready, resolve immediately.
|
|
47
|
+
if (state.isReady) {
|
|
48
|
+
__classPrivateFieldSet(this, _SnapPlatformWatcher_isReady, true, "f");
|
|
49
|
+
__classPrivateFieldGet(this, _SnapPlatformWatcher_isReadyOnce, "f").resolve();
|
|
50
|
+
}
|
|
51
|
+
// We still subscribe to state changes to keep track of the platform's readiness.
|
|
52
|
+
__classPrivateFieldGet(this, _SnapPlatformWatcher_messenger, "f").subscribe('SnapController:stateChange', ({ isReady }) => {
|
|
53
|
+
__classPrivateFieldSet(this, _SnapPlatformWatcher_isReady, isReady, "f");
|
|
54
|
+
if (isReady) {
|
|
55
|
+
logReadyOnce();
|
|
56
|
+
__classPrivateFieldGet(this, _SnapPlatformWatcher_isReadyOnce, "f").resolve();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=SnapPlatformWatcher.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SnapPlatformWatcher.cjs","sourceRoot":"","sources":["../../src/snaps/SnapPlatformWatcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAyE;AACzE,mCAA8B;AAE9B,0CAAiD;AAGjD,MAAa,mBAAmB;IAO9B,YAAY,SAA4C;;QAN/C,iDAA8C;QAE9C,mDAAoC;QAE7C,+CAAkB;QAGhB,uBAAA,IAAI,kCAAc,SAAS,MAAA,CAAC;QAE5B,uBAAA,IAAI,gCAAY,KAAK,MAAA,CAAC;QACtB,uBAAA,IAAI,oCAAgB,IAAA,6BAAqB,GAAQ,MAAA,CAAC;QAElD,uBAAA,IAAI,kEAAO,MAAX,IAAI,CAAS,CAAC;IAChB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,uBAAA,IAAI,oCAAS,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,wBAAwB;QAC5B,kEAAkE;QAClE,MAAM,uBAAA,IAAI,wCAAa,CAAC,OAAO,CAAC;QAEhC,iEAAiE;QACjE,IAAI,CAAC,uBAAA,IAAI,oCAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CAuBF;AAnDD,kDAmDC;;IApBG,MAAM,YAAY,GAAG,IAAA,aAAI,EAAC,GAAG,EAAE,CAAC,IAAA,sBAAG,EAAC,yBAAyB,CAAC,CAAC,CAAC;IAEhE,MAAM,KAAK,GAAG,uBAAA,IAAI,sCAAW,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAE9D,yCAAyC;IACzC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,uBAAA,IAAI,gCAAY,IAAI,MAAA,CAAC;QACrB,uBAAA,IAAI,wCAAa,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,iFAAiF;IACjF,uBAAA,IAAI,sCAAW,CAAC,SAAS,CAAC,4BAA4B,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;QACtE,uBAAA,IAAI,gCAAY,OAAO,MAAA,CAAC;QAExB,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;YACf,uBAAA,IAAI,wCAAa,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { createDeferredPromise, DeferredPromise } from '@metamask/utils';\nimport { once } from 'lodash';\n\nimport { projectLogger as log } from '../logger';\nimport { MultichainAccountServiceMessenger } from '../types';\n\nexport class SnapPlatformWatcher {\n readonly #messenger: MultichainAccountServiceMessenger;\n\n readonly #isReadyOnce: DeferredPromise<void>;\n\n #isReady: boolean;\n\n constructor(messenger: MultichainAccountServiceMessenger) {\n this.#messenger = messenger;\n\n this.#isReady = false;\n this.#isReadyOnce = createDeferredPromise<void>();\n\n this.#watch();\n }\n\n get isReady(): boolean {\n return this.#isReady;\n }\n\n async ensureCanUseSnapPlatform(): Promise<void> {\n // We always wait for the Snap platform to be ready at least once.\n await this.#isReadyOnce.promise;\n\n // Then, we check for the current state and see if we can use it.\n if (!this.#isReady) {\n throw new Error('Snap platform cannot be used now.');\n }\n }\n\n #watch(): void {\n const logReadyOnce = once(() => log('Snap platform is ready!'));\n\n const state = this.#messenger.call('SnapController:getState');\n\n // If already ready, resolve immediately.\n if (state.isReady) {\n this.#isReady = true;\n this.#isReadyOnce.resolve();\n }\n\n // We still subscribe to state changes to keep track of the platform's readiness.\n this.#messenger.subscribe('SnapController:stateChange', ({ isReady }) => {\n this.#isReady = isReady;\n\n if (isReady) {\n logReadyOnce();\n this.#isReadyOnce.resolve();\n }\n });\n }\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MultichainAccountServiceMessenger } from "../types.cjs";
|
|
2
|
+
export declare class SnapPlatformWatcher {
|
|
3
|
+
#private;
|
|
4
|
+
constructor(messenger: MultichainAccountServiceMessenger);
|
|
5
|
+
get isReady(): boolean;
|
|
6
|
+
ensureCanUseSnapPlatform(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=SnapPlatformWatcher.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SnapPlatformWatcher.d.cts","sourceRoot":"","sources":["../../src/snaps/SnapPlatformWatcher.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iCAAiC,EAAE,qBAAiB;AAE7D,qBAAa,mBAAmB;;gBAOlB,SAAS,EAAE,iCAAiC;IASxD,IAAI,OAAO,IAAI,OAAO,CAErB;IAEK,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;CA+BhD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MultichainAccountServiceMessenger } from "../types.mjs";
|
|
2
|
+
export declare class SnapPlatformWatcher {
|
|
3
|
+
#private;
|
|
4
|
+
constructor(messenger: MultichainAccountServiceMessenger);
|
|
5
|
+
get isReady(): boolean;
|
|
6
|
+
ensureCanUseSnapPlatform(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=SnapPlatformWatcher.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SnapPlatformWatcher.d.mts","sourceRoot":"","sources":["../../src/snaps/SnapPlatformWatcher.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iCAAiC,EAAE,qBAAiB;AAE7D,qBAAa,mBAAmB;;gBAOlB,SAAS,EAAE,iCAAiC;IASxD,IAAI,OAAO,IAAI,OAAO,CAErB;IAEK,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC;CA+BhD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
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");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
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");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _SnapPlatformWatcher_instances, _SnapPlatformWatcher_messenger, _SnapPlatformWatcher_isReadyOnce, _SnapPlatformWatcher_isReady, _SnapPlatformWatcher_watch;
|
|
13
|
+
import { createDeferredPromise } from "@metamask/utils";
|
|
14
|
+
import $lodash from "lodash";
|
|
15
|
+
const { once } = $lodash;
|
|
16
|
+
import { projectLogger as log } from "../logger.mjs";
|
|
17
|
+
export class SnapPlatformWatcher {
|
|
18
|
+
constructor(messenger) {
|
|
19
|
+
_SnapPlatformWatcher_instances.add(this);
|
|
20
|
+
_SnapPlatformWatcher_messenger.set(this, void 0);
|
|
21
|
+
_SnapPlatformWatcher_isReadyOnce.set(this, void 0);
|
|
22
|
+
_SnapPlatformWatcher_isReady.set(this, void 0);
|
|
23
|
+
__classPrivateFieldSet(this, _SnapPlatformWatcher_messenger, messenger, "f");
|
|
24
|
+
__classPrivateFieldSet(this, _SnapPlatformWatcher_isReady, false, "f");
|
|
25
|
+
__classPrivateFieldSet(this, _SnapPlatformWatcher_isReadyOnce, createDeferredPromise(), "f");
|
|
26
|
+
__classPrivateFieldGet(this, _SnapPlatformWatcher_instances, "m", _SnapPlatformWatcher_watch).call(this);
|
|
27
|
+
}
|
|
28
|
+
get isReady() {
|
|
29
|
+
return __classPrivateFieldGet(this, _SnapPlatformWatcher_isReady, "f");
|
|
30
|
+
}
|
|
31
|
+
async ensureCanUseSnapPlatform() {
|
|
32
|
+
// We always wait for the Snap platform to be ready at least once.
|
|
33
|
+
await __classPrivateFieldGet(this, _SnapPlatformWatcher_isReadyOnce, "f").promise;
|
|
34
|
+
// Then, we check for the current state and see if we can use it.
|
|
35
|
+
if (!__classPrivateFieldGet(this, _SnapPlatformWatcher_isReady, "f")) {
|
|
36
|
+
throw new Error('Snap platform cannot be used now.');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
_SnapPlatformWatcher_messenger = new WeakMap(), _SnapPlatformWatcher_isReadyOnce = new WeakMap(), _SnapPlatformWatcher_isReady = new WeakMap(), _SnapPlatformWatcher_instances = new WeakSet(), _SnapPlatformWatcher_watch = function _SnapPlatformWatcher_watch() {
|
|
41
|
+
const logReadyOnce = once(() => log('Snap platform is ready!'));
|
|
42
|
+
const state = __classPrivateFieldGet(this, _SnapPlatformWatcher_messenger, "f").call('SnapController:getState');
|
|
43
|
+
// If already ready, resolve immediately.
|
|
44
|
+
if (state.isReady) {
|
|
45
|
+
__classPrivateFieldSet(this, _SnapPlatformWatcher_isReady, true, "f");
|
|
46
|
+
__classPrivateFieldGet(this, _SnapPlatformWatcher_isReadyOnce, "f").resolve();
|
|
47
|
+
}
|
|
48
|
+
// We still subscribe to state changes to keep track of the platform's readiness.
|
|
49
|
+
__classPrivateFieldGet(this, _SnapPlatformWatcher_messenger, "f").subscribe('SnapController:stateChange', ({ isReady }) => {
|
|
50
|
+
__classPrivateFieldSet(this, _SnapPlatformWatcher_isReady, isReady, "f");
|
|
51
|
+
if (isReady) {
|
|
52
|
+
logReadyOnce();
|
|
53
|
+
__classPrivateFieldGet(this, _SnapPlatformWatcher_isReadyOnce, "f").resolve();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=SnapPlatformWatcher.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SnapPlatformWatcher.mjs","sourceRoot":"","sources":["../../src/snaps/SnapPlatformWatcher.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,qBAAqB,EAAmB,wBAAwB;;;AAGzE,OAAO,EAAE,aAAa,IAAI,GAAG,EAAE,sBAAkB;AAGjD,MAAM,OAAO,mBAAmB;IAO9B,YAAY,SAA4C;;QAN/C,iDAA8C;QAE9C,mDAAoC;QAE7C,+CAAkB;QAGhB,uBAAA,IAAI,kCAAc,SAAS,MAAA,CAAC;QAE5B,uBAAA,IAAI,gCAAY,KAAK,MAAA,CAAC;QACtB,uBAAA,IAAI,oCAAgB,qBAAqB,EAAQ,MAAA,CAAC;QAElD,uBAAA,IAAI,kEAAO,MAAX,IAAI,CAAS,CAAC;IAChB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,uBAAA,IAAI,oCAAS,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,wBAAwB;QAC5B,kEAAkE;QAClE,MAAM,uBAAA,IAAI,wCAAa,CAAC,OAAO,CAAC;QAEhC,iEAAiE;QACjE,IAAI,CAAC,uBAAA,IAAI,oCAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;CAuBF;;IApBG,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAEhE,MAAM,KAAK,GAAG,uBAAA,IAAI,sCAAW,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAE9D,yCAAyC;IACzC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,uBAAA,IAAI,gCAAY,IAAI,MAAA,CAAC;QACrB,uBAAA,IAAI,wCAAa,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,iFAAiF;IACjF,uBAAA,IAAI,sCAAW,CAAC,SAAS,CAAC,4BAA4B,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE;QACtE,uBAAA,IAAI,gCAAY,OAAO,MAAA,CAAC;QAExB,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,EAAE,CAAC;YACf,uBAAA,IAAI,wCAAa,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { createDeferredPromise, DeferredPromise } from '@metamask/utils';\nimport { once } from 'lodash';\n\nimport { projectLogger as log } from '../logger';\nimport { MultichainAccountServiceMessenger } from '../types';\n\nexport class SnapPlatformWatcher {\n readonly #messenger: MultichainAccountServiceMessenger;\n\n readonly #isReadyOnce: DeferredPromise<void>;\n\n #isReady: boolean;\n\n constructor(messenger: MultichainAccountServiceMessenger) {\n this.#messenger = messenger;\n\n this.#isReady = false;\n this.#isReadyOnce = createDeferredPromise<void>();\n\n this.#watch();\n }\n\n get isReady(): boolean {\n return this.#isReady;\n }\n\n async ensureCanUseSnapPlatform(): Promise<void> {\n // We always wait for the Snap platform to be ready at least once.\n await this.#isReadyOnce.promise;\n\n // Then, we check for the current state and see if we can use it.\n if (!this.#isReady) {\n throw new Error('Snap platform cannot be used now.');\n }\n }\n\n #watch(): void {\n const logReadyOnce = once(() => log('Snap platform is ready!'));\n\n const state = this.#messenger.call('SnapController:getState');\n\n // If already ready, resolve immediately.\n if (state.isReady) {\n this.#isReady = true;\n this.#isReadyOnce.resolve();\n }\n\n // We still subscribe to state changes to keep track of the platform's readiness.\n this.#messenger.subscribe('SnapController:stateChange', ({ isReady }) => {\n this.#isReady = isReady;\n\n if (isReady) {\n logReadyOnce();\n this.#isReadyOnce.resolve();\n }\n });\n }\n}\n"]}
|
package/dist/tests/messenger.cjs
CHANGED
|
@@ -10,6 +10,7 @@ const messenger_1 = require("@metamask/messenger");
|
|
|
10
10
|
function getRootMessenger() {
|
|
11
11
|
return new messenger_1.Messenger({
|
|
12
12
|
namespace: messenger_1.MOCK_ANY_NAMESPACE,
|
|
13
|
+
captureException: jest.fn(),
|
|
13
14
|
});
|
|
14
15
|
}
|
|
15
16
|
exports.getRootMessenger = getRootMessenger;
|
|
@@ -17,9 +18,12 @@ exports.getRootMessenger = getRootMessenger;
|
|
|
17
18
|
* Retrieves a restricted messenger for the MultichainAccountService.
|
|
18
19
|
*
|
|
19
20
|
* @param rootMessenger - The root messenger instance. Defaults to a new Messenger created by getRootMessenger().
|
|
21
|
+
* @param extra - Extra messenger options.
|
|
22
|
+
* @param extra.actions - Extra actions to delegate.
|
|
23
|
+
* @param extra.events - Extra events to delegate.
|
|
20
24
|
* @returns The restricted messenger for the MultichainAccountService.
|
|
21
25
|
*/
|
|
22
|
-
function getMultichainAccountServiceMessenger(rootMessenger) {
|
|
26
|
+
function getMultichainAccountServiceMessenger(rootMessenger, extra) {
|
|
23
27
|
const messenger = new messenger_1.Messenger({
|
|
24
28
|
namespace: 'MultichainAccountService',
|
|
25
29
|
parent: rootMessenger,
|
|
@@ -30,7 +34,7 @@ function getMultichainAccountServiceMessenger(rootMessenger) {
|
|
|
30
34
|
'AccountsController:getAccount',
|
|
31
35
|
'AccountsController:getAccountByAddress',
|
|
32
36
|
'AccountsController:listMultichainAccounts',
|
|
33
|
-
'
|
|
37
|
+
'SnapController:getState',
|
|
34
38
|
'SnapController:handleRequest',
|
|
35
39
|
'KeyringController:withKeyring',
|
|
36
40
|
'KeyringController:getState',
|
|
@@ -38,11 +42,14 @@ function getMultichainAccountServiceMessenger(rootMessenger) {
|
|
|
38
42
|
'KeyringController:addNewKeyring',
|
|
39
43
|
'NetworkController:findNetworkClientIdByChainId',
|
|
40
44
|
'NetworkController:getNetworkClientById',
|
|
45
|
+
...(extra?.actions ?? []),
|
|
41
46
|
],
|
|
42
47
|
events: [
|
|
43
48
|
'KeyringController:stateChange',
|
|
49
|
+
'SnapController:stateChange',
|
|
44
50
|
'AccountsController:accountAdded',
|
|
45
51
|
'AccountsController:accountRemoved',
|
|
52
|
+
...(extra?.events ?? []),
|
|
46
53
|
],
|
|
47
54
|
});
|
|
48
55
|
return messenger;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messenger.cjs","sourceRoot":"","sources":["../../src/tests/messenger.ts"],"names":[],"mappings":";;;AAAA,mDAAoE;AAqBpE;;;;GAIG;AACH,SAAgB,gBAAgB;IAC9B,OAAO,IAAI,qBAAS,CAAC;QACnB,SAAS,EAAE,8BAAkB;
|
|
1
|
+
{"version":3,"file":"messenger.cjs","sourceRoot":"","sources":["../../src/tests/messenger.ts"],"names":[],"mappings":";;;AAAA,mDAAoE;AAqBpE;;;;GAIG;AACH,SAAgB,gBAAgB;IAC9B,OAAO,IAAI,qBAAS,CAAC;QACnB,SAAS,EAAE,8BAAkB;QAC7B,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE;KAC5B,CAAC,CAAC;AACL,CAAC;AALD,4CAKC;AAED;;;;;;;;GAQG;AACH,SAAgB,oCAAoC,CAClD,aAA4B,EAC5B,KAGC;IAED,MAAM,SAAS,GAAG,IAAI,qBAAS,CAK7B;QACA,SAAS,EAAE,0BAA0B;QACrC,MAAM,EAAE,aAAa;KACtB,CAAC,CAAC;IACH,aAAa,CAAC,QAAQ,CAAC;QACrB,SAAS;QACT,OAAO,EAAE;YACP,+BAA+B;YAC/B,wCAAwC;YACxC,2CAA2C;YAC3C,yBAAyB;YACzB,8BAA8B;YAC9B,+BAA+B;YAC/B,4BAA4B;YAC5B,qCAAqC;YACrC,iCAAiC;YACjC,gDAAgD;YAChD,wCAAwC;YACxC,GAAG,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;SAC1B;QACD,MAAM,EAAE;YACN,+BAA+B;YAC/B,4BAA4B;YAC5B,iCAAiC;YACjC,mCAAmC;YACnC,GAAG,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC;SACzB;KACF,CAAC,CAAC;IACH,OAAO,SAAS,CAAC;AACnB,CAAC;AAzCD,oFAyCC","sourcesContent":["import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';\nimport type {\n MessengerActions,\n MessengerEvents,\n MockAnyNamespace,\n} from '@metamask/messenger';\n\nimport type { MultichainAccountServiceMessenger } from '../types';\n\nexport type AllMultichainAccountServiceActions =\n MessengerActions<MultichainAccountServiceMessenger>;\n\nexport type AllMultichainAccountServiceEvents =\n MessengerEvents<MultichainAccountServiceMessenger>;\n\nexport type RootMessenger = Messenger<\n MockAnyNamespace,\n AllMultichainAccountServiceActions,\n AllMultichainAccountServiceEvents\n>;\n\n/**\n * Creates and returns a root messenger for testing\n *\n * @returns A messenger instance\n */\nexport function getRootMessenger(): RootMessenger {\n return new Messenger({\n namespace: MOCK_ANY_NAMESPACE,\n captureException: jest.fn(),\n });\n}\n\n/**\n * Retrieves a restricted messenger for the MultichainAccountService.\n *\n * @param rootMessenger - The root messenger instance. Defaults to a new Messenger created by getRootMessenger().\n * @param extra - Extra messenger options.\n * @param extra.actions - Extra actions to delegate.\n * @param extra.events - Extra events to delegate.\n * @returns The restricted messenger for the MultichainAccountService.\n */\nexport function getMultichainAccountServiceMessenger(\n rootMessenger: RootMessenger,\n extra?: {\n actions?: AllMultichainAccountServiceActions['type'][];\n events?: AllMultichainAccountServiceEvents['type'][];\n },\n): MultichainAccountServiceMessenger {\n const messenger = new Messenger<\n 'MultichainAccountService',\n AllMultichainAccountServiceActions,\n AllMultichainAccountServiceEvents,\n RootMessenger\n >({\n namespace: 'MultichainAccountService',\n parent: rootMessenger,\n });\n rootMessenger.delegate({\n messenger,\n actions: [\n 'AccountsController:getAccount',\n 'AccountsController:getAccountByAddress',\n 'AccountsController:listMultichainAccounts',\n 'SnapController:getState',\n 'SnapController:handleRequest',\n 'KeyringController:withKeyring',\n 'KeyringController:getState',\n 'KeyringController:getKeyringsByType',\n 'KeyringController:addNewKeyring',\n 'NetworkController:findNetworkClientIdByChainId',\n 'NetworkController:getNetworkClientById',\n ...(extra?.actions ?? []),\n ],\n events: [\n 'KeyringController:stateChange',\n 'SnapController:stateChange',\n 'AccountsController:accountAdded',\n 'AccountsController:accountRemoved',\n ...(extra?.events ?? []),\n ],\n });\n return messenger;\n}\n"]}
|