@@ -10,6 +10,7 @@ import {
1010 EthAccountType ,
1111 SolAccountType ,
1212 TrxAccountType ,
13+ XlmAccountType ,
1314} from '@metamask/keyring-api' ;
1415import type { Keyring } from '@metamask/keyring-api/v2' ;
1516import { KeyringType } from '@metamask/keyring-api/v2' ;
@@ -41,6 +42,10 @@ import {
4142 TRX_ACCOUNT_PROVIDER_NAME ,
4243 TrxAccountProvider ,
4344} from './providers/TrxAccountProvider.js' ;
45+ import {
46+ XLM_ACCOUNT_PROVIDER_NAME ,
47+ XlmAccountProvider ,
48+ } from './providers/XlmAccountProvider.js' ;
4449import type { RootMessenger , MockAccountProvider } from './tests/index.js' ;
4550import {
4651 MOCK_HARDWARE_ACCOUNT_1 ,
@@ -94,6 +99,12 @@ jest.mock('./providers/TrxAccountProvider', () => {
9499 TrxAccountProvider : jest . fn ( ) ,
95100 } ;
96101} ) ;
102+ jest . mock ( './providers/XlmAccountProvider' , ( ) => {
103+ return {
104+ ...jest . requireActual ( './providers/XlmAccountProvider' ) ,
105+ XlmAccountProvider : jest . fn ( ) ,
106+ } ;
107+ } ) ;
97108
98109type Mocks = {
99110 // eslint-disable-next-line @typescript-eslint/naming-convention
@@ -123,6 +134,8 @@ type Mocks = {
123134 BtcAccountProvider : MockAccountProvider ;
124135 // eslint-disable-next-line @typescript-eslint/naming-convention
125136 TrxAccountProvider : MockAccountProvider ;
137+ // eslint-disable-next-line @typescript-eslint/naming-convention
138+ XlmAccountProvider : MockAccountProvider ;
126139} ;
127140
128141function mockAccountProvider < Provider extends Bip44AccountProvider > (
@@ -164,6 +177,11 @@ function mockAccountProvider<Provider extends Bip44AccountProvider>(
164177 mocks . isAccountCompatible ?. mockImplementation (
165178 ( account : KeyringAccount ) => account . type === TrxAccountType . Eoa ,
166179 ) ;
180+ } else if ( providerClass === ( XlmAccountProvider as unknown ) ) {
181+ mocks . getName . mockReturnValue ( XLM_ACCOUNT_PROVIDER_NAME ) ;
182+ mocks . isAccountCompatible ?. mockImplementation (
183+ ( account : KeyringAccount ) => account . type === XlmAccountType . Account ,
184+ ) ;
167185 }
168186
169187 // Mirror production behavior: a provider's tracked account IDs are only
@@ -221,6 +239,7 @@ async function setup({
221239 SolAccountProvider : makeMockAccountProvider ( ) ,
222240 BtcAccountProvider : makeMockAccountProvider ( ) ,
223241 TrxAccountProvider : makeMockAccountProvider ( ) ,
242+ XlmAccountProvider : makeMockAccountProvider ( ) ,
224243 } ;
225244
226245 // Required for the `assert` on `MultichainAccountWallet.createMultichainAccountGroup`.
@@ -277,6 +296,7 @@ async function setup({
277296 SolAccountProvider . NAME = SOL_ACCOUNT_PROVIDER_NAME ;
278297 BtcAccountProvider . NAME = BTC_ACCOUNT_PROVIDER_NAME ;
279298 TrxAccountProvider . NAME = TRX_ACCOUNT_PROVIDER_NAME ;
299+ XlmAccountProvider . NAME = XLM_ACCOUNT_PROVIDER_NAME ;
280300
281301 mockAccountProvider < EvmAccountProvider > (
282302 EvmAccountProvider ,
@@ -306,6 +326,13 @@ async function setup({
306326 3 ,
307327 TrxAccountType . Eoa ,
308328 ) ;
329+ mockAccountProvider < XlmAccountProvider > (
330+ XlmAccountProvider ,
331+ mocks . XlmAccountProvider ,
332+ accounts ,
333+ 4 ,
334+ XlmAccountType . Account ,
335+ ) ;
309336 }
310337
311338 const messenger = getMultichainAccountServiceMessenger ( rootMessenger ) ;
@@ -351,6 +378,17 @@ describe('MultichainAccountService', () => {
351378 timeoutMs : 3000 ,
352379 } ,
353380 } ,
381+ [ XLM_ACCOUNT_PROVIDER_NAME ] : {
382+ maxConcurrency : 1 ,
383+ discovery : {
384+ timeoutMs : 2000 ,
385+ maxAttempts : 3 ,
386+ backOffMs : 1000 ,
387+ } ,
388+ createAccounts : {
389+ timeoutMs : 3000 ,
390+ } ,
391+ } ,
354392 } ;
355393
356394 const { mocks, messenger } = await setup ( {
@@ -368,6 +406,11 @@ describe('MultichainAccountService', () => {
368406 providerConfigs ?. [ SOL_ACCOUNT_PROVIDER_NAME ] ,
369407 expect . any ( Function ) , // TraceCallback
370408 ) ;
409+ expect ( mocks . XlmAccountProvider . constructor ) . toHaveBeenCalledWith (
410+ messenger ,
411+ providerConfigs ?. [ XLM_ACCOUNT_PROVIDER_NAME ] ,
412+ expect . any ( Function ) , // TraceCallback
413+ ) ;
371414 } ) ;
372415
373416 it ( 'passes traceFallback to providers when no config.trace is provided and perf is disabled' , async ( ) => {
@@ -1051,6 +1094,7 @@ describe('MultichainAccountService', () => {
10511094 // Providers that own no accounts for this wallet should be left alone.
10521095 expect ( mocks . BtcAccountProvider . deleteAccounts ) . not . toHaveBeenCalled ( ) ;
10531096 expect ( mocks . TrxAccountProvider . deleteAccounts ) . not . toHaveBeenCalled ( ) ;
1097+ expect ( mocks . XlmAccountProvider . deleteAccounts ) . not . toHaveBeenCalled ( ) ;
10541098 expect ( ( ) =>
10551099 service . getMultichainAccountWallet ( {
10561100 entropySource : MOCK_HD_KEYRING_1 . metadata . id ,
0 commit comments