UNPKG

@metamask/multichain-account-service

Version:
379 lines 14.6 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); 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"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); 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"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _MockAccountBuilder_account; Object.defineProperty(exports, "__esModule", { value: true }); 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.asKeyringAccount = exports.isInternalAccount = 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_XLM_DISCOVERED_ACCOUNT_1 = exports.MOCK_TRX_DISCOVERED_ACCOUNT_1 = exports.MOCK_SOL_DISCOVERED_ACCOUNT_1 = exports.MOCK_TRX_ACCOUNT_1 = exports.MOCK_XLM_ACCOUNT_1 = exports.MOCK_SOL_ACCOUNT_1 = exports.MOCK_HD_ACCOUNT_2 = exports.MOCK_HD_ACCOUNT_1 = exports.MOCK_SNAP_KEYRING = 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; const account_api_1 = require("@metamask/account-api"); const keyring_api_1 = require("@metamask/keyring-api"); const keyring_controller_1 = require("@metamask/keyring-controller"); const uuid_1 = require("uuid"); exports.ETH_EOA_METHODS = [ keyring_api_1.EthMethod.PersonalSign, keyring_api_1.EthMethod.Sign, keyring_api_1.EthMethod.SignTransaction, keyring_api_1.EthMethod.SignTypedDataV1, keyring_api_1.EthMethod.SignTypedDataV3, keyring_api_1.EthMethod.SignTypedDataV4, ]; const SOL_METHODS = Object.values(keyring_api_1.SolMethod); exports.MOCK_SNAP_1 = { id: 'local:mock-snap-id-1', name: 'Mock Snap 1', enabled: true, manifest: { proposedName: 'Mock Snap 1', }, }; exports.MOCK_SNAP_2 = { id: 'local:mock-snap-id-2', name: 'Mock Snap 2', enabled: true, manifest: { proposedName: 'Mock Snap 2', }, }; exports.MOCK_ENTROPY_SOURCE_1 = 'mock-keyring-id-1'; exports.MOCK_ENTROPY_SOURCE_2 = 'mock-keyring-id-2'; exports.MOCK_MNEMONIC = 'abandon ability able about above absent absorb abstract absurd abuse access accident'; exports.MOCK_HD_KEYRING_1 = { type: keyring_controller_1.KeyringTypes.hd, metadata: { id: exports.MOCK_ENTROPY_SOURCE_1, name: 'HD Keyring 1' }, accounts: ['0x123'], }; exports.MOCK_HD_KEYRING_2 = { type: keyring_controller_1.KeyringTypes.hd, metadata: { id: exports.MOCK_ENTROPY_SOURCE_2, name: 'HD Keyring 2' }, accounts: ['0x456'], }; /** Used when tests need ensureReady to resolve (SnapAccountService waits for Snap keyring). */ exports.MOCK_SNAP_KEYRING = { type: keyring_controller_1.KeyringTypes.snap, metadata: { id: 'snap-keyring', name: 'Snap Keyring' }, accounts: [], }; exports.MOCK_HD_ACCOUNT_1 = { id: 'mock-id-1', address: '0x123', options: { entropy: { type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic, id: exports.MOCK_HD_KEYRING_1.metadata.id, groupIndex: 0, derivationPath: '', }, }, methods: [...exports.ETH_EOA_METHODS], type: keyring_api_1.EthAccountType.Eoa, scopes: [keyring_api_1.EthScope.Eoa], metadata: { name: 'Account 1', keyring: { type: keyring_controller_1.KeyringTypes.hd }, importTime: 0, lastSelected: 0, nameLastUpdatedAt: 0, }, }; exports.MOCK_HD_ACCOUNT_2 = { id: 'mock-id-2', address: '0x456', options: { entropy: { type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic, id: exports.MOCK_HD_KEYRING_2.metadata.id, groupIndex: 0, derivationPath: '', }, }, methods: [...exports.ETH_EOA_METHODS], type: keyring_api_1.EthAccountType.Eoa, scopes: [keyring_api_1.EthScope.Eoa], metadata: { name: 'Account 2', keyring: { type: keyring_controller_1.KeyringTypes.hd }, importTime: 0, lastSelected: 0, nameLastUpdatedAt: 0, }, }; exports.MOCK_SOL_ACCOUNT_1 = { id: 'mock-snap-id-1', address: 'aabbccdd', options: { entropy: { type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic, // NOTE: shares entropy with MOCK_HD_ACCOUNT_2 id: exports.MOCK_HD_KEYRING_2.metadata.id, groupIndex: 0, derivationPath: '', }, }, methods: SOL_METHODS, type: keyring_api_1.SolAccountType.DataAccount, scopes: [keyring_api_1.SolScope.Mainnet, keyring_api_1.SolScope.Testnet, keyring_api_1.SolScope.Devnet], metadata: { name: 'Solana Account 1', keyring: { type: keyring_controller_1.KeyringTypes.snap }, snap: exports.MOCK_SNAP_1, importTime: 0, lastSelected: 0, }, }; const XLM_METHODS = Object.values(keyring_api_1.XlmMethod); exports.MOCK_XLM_ACCOUNT_1 = { id: 'mock-snap-id-1', address: `G${'A'.repeat(55)}`, options: { entropy: { type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic, id: exports.MOCK_HD_KEYRING_2.metadata.id, groupIndex: 0, derivationPath: `m/44'/148'/0'`, }, }, methods: XLM_METHODS, type: keyring_api_1.XlmAccountType.Account, scopes: [keyring_api_1.XlmScope.Pubnet, keyring_api_1.XlmScope.Testnet], metadata: { name: 'Stellar Account 1', keyring: { type: keyring_controller_1.KeyringTypes.snap }, snap: exports.MOCK_SNAP_1, importTime: 0, lastSelected: 0, }, }; exports.MOCK_TRX_ACCOUNT_1 = { id: 'mock-snap-id-1', address: 'aabbccdd', options: { entropy: { type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic, // NOTE: shares entropy with MOCK_HD_ACCOUNT_2 id: exports.MOCK_HD_KEYRING_2.metadata.id, groupIndex: 0, derivationPath: '', }, }, methods: [keyring_api_1.TrxMethod.SignMessageV2, keyring_api_1.TrxMethod.VerifyMessageV2], type: keyring_api_1.TrxAccountType.Eoa, scopes: [keyring_api_1.TrxScope.Mainnet], metadata: { name: 'Tron Account 1', keyring: { type: keyring_controller_1.KeyringTypes.snap }, snap: exports.MOCK_SNAP_1, importTime: 0, lastSelected: 0, }, }; exports.MOCK_SOL_DISCOVERED_ACCOUNT_1 = { type: 'bip44', scopes: [keyring_api_1.SolScope.Mainnet], derivationPath: `m/44'/501'/0'/0'`, }; exports.MOCK_TRX_DISCOVERED_ACCOUNT_1 = { type: 'bip44', scopes: [keyring_api_1.TrxScope.Mainnet], derivationPath: `m/44'/195'/0'/0'`, }; exports.MOCK_XLM_DISCOVERED_ACCOUNT_1 = { type: 'bip44', scopes: [keyring_api_1.XlmScope.Pubnet], derivationPath: `m/44'/148'/0'`, }; exports.MOCK_BTC_P2TR_DISCOVERED_ACCOUNT_1 = { type: 'bip44', scopes: [keyring_api_1.BtcScope.Mainnet], derivationPath: `m/44'/0'/0'/0'`, }; exports.MOCK_BTC_P2WPKH_ACCOUNT_1 = { id: 'b0f030d8-e101-4b5a-a3dd-13f8ca8ec1db', type: keyring_api_1.BtcAccountType.P2wpkh, methods: Object.values(keyring_api_1.BtcMethod), address: 'bc1qx8ls07cy8j8nrluy2u0xwn7gh8fxg0rg4s8zze', options: { entropy: { type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic, // NOTE: shares entropy with MOCK_HD_ACCOUNT_2 id: exports.MOCK_HD_KEYRING_2.metadata.id, groupIndex: 0, derivationPath: '', }, }, scopes: [keyring_api_1.BtcScope.Mainnet], metadata: { name: 'Bitcoin Native Segwit Account 1', importTime: 0, keyring: { type: keyring_controller_1.KeyringTypes.snap, }, snap: { id: 'mock-btc-snap-id', }, }, }; exports.MOCK_BTC_P2TR_ACCOUNT_1 = { id: 'a20c2e1a-6ff6-40ba-b8e0-ccdb6f9933bb', type: keyring_api_1.BtcAccountType.P2tr, methods: Object.values(keyring_api_1.BtcMethod), address: 'tb1p5cyxnuxmeuwuvkwfem96lxx9wex9kkf4mt9ll6q60jfsnrzqg4sszkqjnh', options: { entropy: { type: keyring_api_1.KeyringAccountEntropyTypeOption.Mnemonic, // NOTE: shares entropy with MOCK_HD_ACCOUNT_2 id: exports.MOCK_HD_KEYRING_2.metadata.id, groupIndex: 0, derivationPath: '', }, }, scopes: [keyring_api_1.BtcScope.Testnet], metadata: { name: 'Bitcoin Taproot Account 1', importTime: 0, keyring: { type: keyring_controller_1.KeyringTypes.snap, }, snap: { id: 'mock-btc-snap-id', }, }, }; exports.MOCK_SNAP_ACCOUNT_1 = exports.MOCK_SOL_ACCOUNT_1; exports.MOCK_SNAP_ACCOUNT_2 = { id: 'mock-snap-id-2', address: '0x789', options: {}, methods: [...exports.ETH_EOA_METHODS], type: keyring_api_1.EthAccountType.Eoa, scopes: [keyring_api_1.EthScope.Eoa], metadata: { name: 'Snap Acc 2', keyring: { type: keyring_controller_1.KeyringTypes.snap }, snap: exports.MOCK_SNAP_2, importTime: 0, lastSelected: 0, }, }; exports.MOCK_SNAP_ACCOUNT_3 = exports.MOCK_BTC_P2WPKH_ACCOUNT_1; exports.MOCK_SNAP_ACCOUNT_4 = exports.MOCK_BTC_P2TR_ACCOUNT_1; exports.MOCK_HARDWARE_ACCOUNT_1 = { id: 'mock-hardware-id-1', address: '0xABC', options: {}, methods: [...exports.ETH_EOA_METHODS], type: keyring_api_1.EthAccountType.Eoa, scopes: [keyring_api_1.EthScope.Eoa], metadata: { name: 'Hardware Acc 1', keyring: { type: keyring_controller_1.KeyringTypes.ledger }, importTime: 0, lastSelected: 0, }, }; function isInternalAccount(account) { // Meant to be used for testing, so we keep this simple. return Object.prototype.hasOwnProperty.call(account, 'metadata'); } exports.isInternalAccount = isInternalAccount; function asKeyringAccount(account) { const { id, type, address, scopes, options, methods } = account; return { id, type, address, scopes, options, methods, }; } exports.asKeyringAccount = asKeyringAccount; class MockAccountBuilder { constructor(account) { _MockAccountBuilder_account.set(this, void 0); // Make a deep-copy to avoid mutating the same ref. __classPrivateFieldSet(this, _MockAccountBuilder_account, JSON.parse(JSON.stringify(account)), "f"); } static from(account) { return new MockAccountBuilder(account); } withId(id) { __classPrivateFieldGet(this, _MockAccountBuilder_account, "f").id = id; return this; } withUuid() { __classPrivateFieldGet(this, _MockAccountBuilder_account, "f").id = (0, uuid_1.v4)(); return this; } withAddress(address) { __classPrivateFieldGet(this, _MockAccountBuilder_account, "f").address = address; return this; } withAddressSuffix(suffix) { __classPrivateFieldGet(this, _MockAccountBuilder_account, "f").address += suffix; return this; } withEntropySource(entropySource) { if ((0, account_api_1.isBip44Account)(__classPrivateFieldGet(this, _MockAccountBuilder_account, "f"))) { __classPrivateFieldGet(this, _MockAccountBuilder_account, "f").options.entropy.id = entropySource; } return this; } withGroupIndex(groupIndex) { if ((0, account_api_1.isBip44Account)(__classPrivateFieldGet(this, _MockAccountBuilder_account, "f"))) { __classPrivateFieldGet(this, _MockAccountBuilder_account, "f").options.entropy.groupIndex = groupIndex; } return this; } withSnapId(snapId) { if (isInternalAccount(__classPrivateFieldGet(this, _MockAccountBuilder_account, "f"))) { __classPrivateFieldGet(this, _MockAccountBuilder_account, "f").metadata.snap = { id: snapId, }; } return this; } get() { return __classPrivateFieldGet(this, _MockAccountBuilder_account, "f"); } } exports.MockAccountBuilder = MockAccountBuilder; _MockAccountBuilder_account = new WeakMap(); exports.MOCK_WALLET_1_ENTROPY_SOURCE = exports.MOCK_ENTROPY_SOURCE_1; exports.MOCK_WALLET_1_EVM_ACCOUNT = MockAccountBuilder.from(exports.MOCK_HD_ACCOUNT_1) .withEntropySource(exports.MOCK_WALLET_1_ENTROPY_SOURCE) .withGroupIndex(0) .get(); exports.MOCK_WALLET_1_SOL_ACCOUNT = MockAccountBuilder.from(exports.MOCK_SOL_ACCOUNT_1) .withEntropySource(exports.MOCK_WALLET_1_ENTROPY_SOURCE) .withGroupIndex(0) .get(); exports.MOCK_WALLET_1_BTC_P2WPKH_ACCOUNT = MockAccountBuilder.from(exports.MOCK_BTC_P2WPKH_ACCOUNT_1) .withEntropySource(exports.MOCK_WALLET_1_ENTROPY_SOURCE) .withGroupIndex(0) .get(); exports.MOCK_WALLET_1_BTC_P2TR_ACCOUNT = MockAccountBuilder.from(exports.MOCK_BTC_P2TR_ACCOUNT_1) .withEntropySource(exports.MOCK_WALLET_1_ENTROPY_SOURCE) .withGroupIndex(0) .get(); function mockAsInternalAccount(account) { return { ...account, metadata: { name: 'Mocked Account', importTime: Date.now(), keyring: { type: 'mock-keyring-type', }, }, }; } exports.mockAsInternalAccount = mockAsInternalAccount; //# sourceMappingURL=accounts.cjs.map