@metamask-previews/ramps-controller 4.1.0-preview-e09bf49f → 5.0.0-preview-9c68b732

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.
@@ -1,7 +1,7 @@
1
1
  import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
2
2
  import { BaseController } from "@metamask/base-controller";
3
3
  import type { Messenger } from "@metamask/messenger";
4
- import type { Country, TokensResponse, Provider, State, RampAction, PaymentMethod, PaymentMethodsResponse } from "./RampsService.cjs";
4
+ import type { Country, TokensResponse, Provider, State, RampAction, PaymentMethod, PaymentMethodsResponse, RampsToken } from "./RampsService.cjs";
5
5
  import type { RampsServiceGetGeolocationAction, RampsServiceGetCountriesAction, RampsServiceGetTokensAction, RampsServiceGetProvidersAction, RampsServiceGetPaymentMethodsAction } from "./RampsService-method-action-types.cjs";
6
6
  import type { RequestCache as RequestCacheType, RequestState, ExecuteRequestOptions } from "./RequestCache.cjs";
7
7
  /**
@@ -39,10 +39,10 @@ export type RampsControllerState = {
39
39
  */
40
40
  userRegion: UserRegion | null;
41
41
  /**
42
- * The user's preferred provider.
42
+ * The user's selected provider.
43
43
  * Can be manually set by the user.
44
44
  */
45
- preferredProvider: Provider | null;
45
+ selectedProvider: Provider | null;
46
46
  /**
47
47
  * List of countries available for ramp actions.
48
48
  */
@@ -56,6 +56,11 @@ export type RampsControllerState = {
56
56
  * Contains topTokens and allTokens arrays.
57
57
  */
58
58
  tokens: TokensResponse | null;
59
+ /**
60
+ * The user's selected token.
61
+ * When set, automatically fetches and sets payment methods for that token.
62
+ */
63
+ selectedToken: RampsToken | null;
59
64
  /**
60
65
  * Payment methods available for the current context.
61
66
  * Filtered by region, fiat, asset, and provider.
@@ -176,12 +181,14 @@ export declare class RampsController extends BaseController<typeof controllerNam
176
181
  */
177
182
  setUserRegion(region: string, options?: ExecuteRequestOptions): Promise<UserRegion>;
178
183
  /**
179
- * Sets the user's preferred provider.
180
- * This allows users to set their preferred ramp provider.
184
+ * Sets the user's selected provider by ID, or clears the selection.
185
+ * Looks up the provider from the current providers in state and automatically
186
+ * fetches payment methods for that provider.
181
187
  *
182
- * @param provider - The provider object to set.
188
+ * @param providerId - The provider ID (e.g., "/providers/moonpay"), or null to clear.
189
+ * @throws If region is not set, providers are not loaded, or provider is not found.
183
190
  */
184
- setPreferredProvider(provider: Provider | null): void;
191
+ setSelectedProvider(providerId: string | null): void;
185
192
  /**
186
193
  * Initializes the controller by fetching the user's region from geolocation.
187
194
  * This should be called once at app startup to set up the initial region.
@@ -216,6 +223,15 @@ export declare class RampsController extends BaseController<typeof controllerNam
216
223
  getTokens(region?: string, action?: RampAction, options?: ExecuteRequestOptions & {
217
224
  provider?: string | string[];
218
225
  }): Promise<TokensResponse>;
226
+ /**
227
+ * Sets the user's selected token by asset ID.
228
+ * Looks up the token from the current tokens in state and automatically
229
+ * fetches payment methods for that token.
230
+ *
231
+ * @param assetId - The asset identifier in CAIP-19 format (e.g., "eip155:1/erc20:0x..."), or undefined to clear.
232
+ * @throws If region is not set, tokens are not loaded, or token is not found.
233
+ */
234
+ setSelectedToken(assetId?: string): void;
219
235
  /**
220
236
  * Fetches the list of providers for a given region.
221
237
  * The providers are saved in the controller state once fetched.
@@ -240,29 +256,26 @@ export declare class RampsController extends BaseController<typeof controllerNam
240
256
  * Fetches the list of payment methods for a given context.
241
257
  * The payment methods are saved in the controller state once fetched.
242
258
  *
259
+ * @param region - User's region code (e.g. "fr", "us-ny").
243
260
  * @param options - Query parameters for filtering payment methods.
244
- * @param options.region - User's region code. If not provided, uses the user's region from controller state.
245
261
  * @param options.fiat - Fiat currency code (e.g., "usd"). If not provided, uses the user's region currency.
246
262
  * @param options.assetId - CAIP-19 cryptocurrency identifier.
247
263
  * @param options.provider - Provider ID path.
248
- * @param options.forceRefresh - Whether to bypass cache.
249
- * @param options.ttl - Custom TTL for this request.
250
264
  * @returns The payment methods response containing payments array.
251
265
  */
252
- getPaymentMethods(options: {
253
- region?: string;
266
+ getPaymentMethods(region?: string, options?: ExecuteRequestOptions & {
254
267
  fiat?: string;
255
- assetId: string;
256
- provider: string;
257
- forceRefresh?: boolean;
258
- ttl?: number;
268
+ assetId?: string;
269
+ provider?: string;
259
270
  }): Promise<PaymentMethodsResponse>;
260
271
  /**
261
- * Sets the user's selected payment method.
272
+ * Sets the user's selected payment method by ID.
273
+ * Looks up the payment method from the current payment methods in state.
262
274
  *
263
- * @param paymentMethod - The payment method to select, or null to clear.
275
+ * @param paymentMethodId - The payment method ID (e.g., "/payments/debit-credit-card"), or null to clear.
276
+ * @throws If payment methods are not loaded or payment method is not found.
264
277
  */
265
- setSelectedPaymentMethod(paymentMethod: PaymentMethod | null): void;
278
+ setSelectedPaymentMethod(paymentMethodId?: string): void;
266
279
  /**
267
280
  * Triggers setting the user region without throwing.
268
281
  *
@@ -299,21 +312,16 @@ export declare class RampsController extends BaseController<typeof controllerNam
299
312
  /**
300
313
  * Triggers fetching payment methods without throwing.
301
314
  *
315
+ * @param region - User's region code (e.g., "us", "fr", "us-ny").
302
316
  * @param options - Query parameters for filtering payment methods.
303
- * @param options.region - User's region code. If not provided, uses userRegion from state.
304
317
  * @param options.fiat - Fiat currency code. If not provided, uses userRegion currency.
305
318
  * @param options.assetId - CAIP-19 cryptocurrency identifier.
306
319
  * @param options.provider - Provider ID path.
307
- * @param options.forceRefresh - Whether to bypass cache.
308
- * @param options.ttl - Custom TTL for this request.
309
320
  */
310
- triggerGetPaymentMethods(options: {
311
- region?: string;
321
+ triggerGetPaymentMethods(region?: string, options?: ExecuteRequestOptions & {
312
322
  fiat?: string;
313
- assetId: string;
314
- provider: string;
315
- forceRefresh?: boolean;
316
- ttl?: number;
323
+ assetId?: string;
324
+ provider?: string;
317
325
  }): void;
318
326
  }
319
327
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"RampsController.d.cts","sourceRoot":"","sources":["../src/RampsController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RampsController.d.cts","sourceRoot":"","sources":["../src/RampsController.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { ControllerGetStateAction, ControllerStateChangeEvent } from "@metamask/base-controller";
2
2
  import { BaseController } from "@metamask/base-controller";
3
3
  import type { Messenger } from "@metamask/messenger";
4
- import type { Country, TokensResponse, Provider, State, RampAction, PaymentMethod, PaymentMethodsResponse } from "./RampsService.mjs";
4
+ import type { Country, TokensResponse, Provider, State, RampAction, PaymentMethod, PaymentMethodsResponse, RampsToken } from "./RampsService.mjs";
5
5
  import type { RampsServiceGetGeolocationAction, RampsServiceGetCountriesAction, RampsServiceGetTokensAction, RampsServiceGetProvidersAction, RampsServiceGetPaymentMethodsAction } from "./RampsService-method-action-types.mjs";
6
6
  import type { RequestCache as RequestCacheType, RequestState, ExecuteRequestOptions } from "./RequestCache.mjs";
7
7
  /**
@@ -39,10 +39,10 @@ export type RampsControllerState = {
39
39
  */
40
40
  userRegion: UserRegion | null;
41
41
  /**
42
- * The user's preferred provider.
42
+ * The user's selected provider.
43
43
  * Can be manually set by the user.
44
44
  */
45
- preferredProvider: Provider | null;
45
+ selectedProvider: Provider | null;
46
46
  /**
47
47
  * List of countries available for ramp actions.
48
48
  */
@@ -56,6 +56,11 @@ export type RampsControllerState = {
56
56
  * Contains topTokens and allTokens arrays.
57
57
  */
58
58
  tokens: TokensResponse | null;
59
+ /**
60
+ * The user's selected token.
61
+ * When set, automatically fetches and sets payment methods for that token.
62
+ */
63
+ selectedToken: RampsToken | null;
59
64
  /**
60
65
  * Payment methods available for the current context.
61
66
  * Filtered by region, fiat, asset, and provider.
@@ -176,12 +181,14 @@ export declare class RampsController extends BaseController<typeof controllerNam
176
181
  */
177
182
  setUserRegion(region: string, options?: ExecuteRequestOptions): Promise<UserRegion>;
178
183
  /**
179
- * Sets the user's preferred provider.
180
- * This allows users to set their preferred ramp provider.
184
+ * Sets the user's selected provider by ID, or clears the selection.
185
+ * Looks up the provider from the current providers in state and automatically
186
+ * fetches payment methods for that provider.
181
187
  *
182
- * @param provider - The provider object to set.
188
+ * @param providerId - The provider ID (e.g., "/providers/moonpay"), or null to clear.
189
+ * @throws If region is not set, providers are not loaded, or provider is not found.
183
190
  */
184
- setPreferredProvider(provider: Provider | null): void;
191
+ setSelectedProvider(providerId: string | null): void;
185
192
  /**
186
193
  * Initializes the controller by fetching the user's region from geolocation.
187
194
  * This should be called once at app startup to set up the initial region.
@@ -216,6 +223,15 @@ export declare class RampsController extends BaseController<typeof controllerNam
216
223
  getTokens(region?: string, action?: RampAction, options?: ExecuteRequestOptions & {
217
224
  provider?: string | string[];
218
225
  }): Promise<TokensResponse>;
226
+ /**
227
+ * Sets the user's selected token by asset ID.
228
+ * Looks up the token from the current tokens in state and automatically
229
+ * fetches payment methods for that token.
230
+ *
231
+ * @param assetId - The asset identifier in CAIP-19 format (e.g., "eip155:1/erc20:0x..."), or undefined to clear.
232
+ * @throws If region is not set, tokens are not loaded, or token is not found.
233
+ */
234
+ setSelectedToken(assetId?: string): void;
219
235
  /**
220
236
  * Fetches the list of providers for a given region.
221
237
  * The providers are saved in the controller state once fetched.
@@ -240,29 +256,26 @@ export declare class RampsController extends BaseController<typeof controllerNam
240
256
  * Fetches the list of payment methods for a given context.
241
257
  * The payment methods are saved in the controller state once fetched.
242
258
  *
259
+ * @param region - User's region code (e.g. "fr", "us-ny").
243
260
  * @param options - Query parameters for filtering payment methods.
244
- * @param options.region - User's region code. If not provided, uses the user's region from controller state.
245
261
  * @param options.fiat - Fiat currency code (e.g., "usd"). If not provided, uses the user's region currency.
246
262
  * @param options.assetId - CAIP-19 cryptocurrency identifier.
247
263
  * @param options.provider - Provider ID path.
248
- * @param options.forceRefresh - Whether to bypass cache.
249
- * @param options.ttl - Custom TTL for this request.
250
264
  * @returns The payment methods response containing payments array.
251
265
  */
252
- getPaymentMethods(options: {
253
- region?: string;
266
+ getPaymentMethods(region?: string, options?: ExecuteRequestOptions & {
254
267
  fiat?: string;
255
- assetId: string;
256
- provider: string;
257
- forceRefresh?: boolean;
258
- ttl?: number;
268
+ assetId?: string;
269
+ provider?: string;
259
270
  }): Promise<PaymentMethodsResponse>;
260
271
  /**
261
- * Sets the user's selected payment method.
272
+ * Sets the user's selected payment method by ID.
273
+ * Looks up the payment method from the current payment methods in state.
262
274
  *
263
- * @param paymentMethod - The payment method to select, or null to clear.
275
+ * @param paymentMethodId - The payment method ID (e.g., "/payments/debit-credit-card"), or null to clear.
276
+ * @throws If payment methods are not loaded or payment method is not found.
264
277
  */
265
- setSelectedPaymentMethod(paymentMethod: PaymentMethod | null): void;
278
+ setSelectedPaymentMethod(paymentMethodId?: string): void;
266
279
  /**
267
280
  * Triggers setting the user region without throwing.
268
281
  *
@@ -299,21 +312,16 @@ export declare class RampsController extends BaseController<typeof controllerNam
299
312
  /**
300
313
  * Triggers fetching payment methods without throwing.
301
314
  *
315
+ * @param region - User's region code (e.g., "us", "fr", "us-ny").
302
316
  * @param options - Query parameters for filtering payment methods.
303
- * @param options.region - User's region code. If not provided, uses userRegion from state.
304
317
  * @param options.fiat - Fiat currency code. If not provided, uses userRegion currency.
305
318
  * @param options.assetId - CAIP-19 cryptocurrency identifier.
306
319
  * @param options.provider - Provider ID path.
307
- * @param options.forceRefresh - Whether to bypass cache.
308
- * @param options.ttl - Custom TTL for this request.
309
320
  */
310
- triggerGetPaymentMethods(options: {
311
- region?: string;
321
+ triggerGetPaymentMethods(region?: string, options?: ExecuteRequestOptions & {
312
322
  fiat?: string;
313
- assetId: string;
314
- provider: string;
315
- forceRefresh?: boolean;
316
- ttl?: number;
323
+ assetId?: string;
324
+ provider?: string;
317
325
  }): void;
318
326
  }
319
327
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"RampsController.d.mts","sourceRoot":"","sources":["../src/RampsController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RampsController.d.mts","sourceRoot":"","sources":["../src/RampsController.ts"],"names":[],"mappings":"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"}
@@ -29,8 +29,8 @@ const rampsControllerMetadata = {
29
29
  includeInStateLogs: true,
30
30
  usedInUi: true,
31
31
  },
32
- preferredProvider: {
33
- persist: true,
32
+ selectedProvider: {
33
+ persist: false,
34
34
  includeInDebugSnapshot: true,
35
35
  includeInStateLogs: true,
36
36
  usedInUi: true,
@@ -53,6 +53,12 @@ const rampsControllerMetadata = {
53
53
  includeInStateLogs: true,
54
54
  usedInUi: true,
55
55
  },
56
+ selectedToken: {
57
+ persist: false,
58
+ includeInDebugSnapshot: true,
59
+ includeInStateLogs: true,
60
+ usedInUi: true,
61
+ },
56
62
  paymentMethods: {
57
63
  persist: false,
58
64
  includeInDebugSnapshot: true,
@@ -83,10 +89,11 @@ const rampsControllerMetadata = {
83
89
  export function getDefaultRampsControllerState() {
84
90
  return {
85
91
  userRegion: null,
86
- preferredProvider: null,
92
+ selectedProvider: null,
87
93
  countries: [],
88
94
  providers: [],
89
95
  tokens: null,
96
+ selectedToken: null,
90
97
  paymentMethods: [],
91
98
  selectedPaymentMethod: null,
92
99
  requests: {},
@@ -208,7 +215,6 @@ export class RampsController extends BaseController {
208
215
  if (pending) {
209
216
  return pending.promise;
210
217
  }
211
- // Check cache validity (unless force refresh)
212
218
  if (!options?.forceRefresh) {
213
219
  const cached = this.state.requests[cacheKey];
214
220
  if (cached && !isCacheExpired(cached, ttl)) {
@@ -303,7 +309,8 @@ export class RampsController extends BaseController {
303
309
  // Set the new region atomically with cleanup to avoid intermediate null state
304
310
  this.update((state) => {
305
311
  if (regionChanged) {
306
- state.preferredProvider = null;
312
+ state.selectedProvider = null;
313
+ state.selectedToken = null;
307
314
  state.tokens = null;
308
315
  state.providers = [];
309
316
  state.paymentMethods = [];
@@ -326,14 +333,44 @@ export class RampsController extends BaseController {
326
333
  }
327
334
  }
328
335
  /**
329
- * Sets the user's preferred provider.
330
- * This allows users to set their preferred ramp provider.
336
+ * Sets the user's selected provider by ID, or clears the selection.
337
+ * Looks up the provider from the current providers in state and automatically
338
+ * fetches payment methods for that provider.
331
339
  *
332
- * @param provider - The provider object to set.
340
+ * @param providerId - The provider ID (e.g., "/providers/moonpay"), or null to clear.
341
+ * @throws If region is not set, providers are not loaded, or provider is not found.
333
342
  */
334
- setPreferredProvider(provider) {
343
+ setSelectedProvider(providerId) {
344
+ if (providerId === null) {
345
+ this.update((state) => {
346
+ state.selectedProvider = null;
347
+ state.paymentMethods = [];
348
+ state.selectedPaymentMethod = null;
349
+ });
350
+ return;
351
+ }
352
+ const regionCode = this.state.userRegion?.regionCode;
353
+ if (!regionCode) {
354
+ throw new Error('Region is required. Cannot set selected provider without valid region information.');
355
+ }
356
+ const { providers } = this.state;
357
+ if (!providers || providers.length === 0) {
358
+ throw new Error('Providers not loaded. Cannot set selected provider before providers are fetched.');
359
+ }
360
+ const provider = providers.find((prov) => prov.id === providerId);
361
+ if (!provider) {
362
+ throw new Error(`Provider with ID "${providerId}" not found in available providers.`);
363
+ }
335
364
  this.update((state) => {
336
- state.preferredProvider = provider;
365
+ state.selectedProvider = provider;
366
+ state.paymentMethods = [];
367
+ state.selectedPaymentMethod = null;
368
+ });
369
+ // fetch payment methods for the new provider
370
+ // this is needed because you can change providers without changing the token
371
+ // (getPaymentMethods will use state as its default)
372
+ this.triggerGetPaymentMethods(regionCode, {
373
+ provider: provider.id,
337
374
  });
338
375
  }
339
376
  /**
@@ -415,6 +452,45 @@ export class RampsController extends BaseController {
415
452
  });
416
453
  return tokens;
417
454
  }
455
+ /**
456
+ * Sets the user's selected token by asset ID.
457
+ * Looks up the token from the current tokens in state and automatically
458
+ * fetches payment methods for that token.
459
+ *
460
+ * @param assetId - The asset identifier in CAIP-19 format (e.g., "eip155:1/erc20:0x..."), or undefined to clear.
461
+ * @throws If region is not set, tokens are not loaded, or token is not found.
462
+ */
463
+ setSelectedToken(assetId) {
464
+ if (!assetId) {
465
+ this.update((state) => {
466
+ state.selectedToken = null;
467
+ state.paymentMethods = [];
468
+ state.selectedPaymentMethod = null;
469
+ });
470
+ return;
471
+ }
472
+ const regionCode = this.state.userRegion?.regionCode;
473
+ if (!regionCode) {
474
+ throw new Error('Region is required. Cannot set selected token without valid region information.');
475
+ }
476
+ const { tokens } = this.state;
477
+ if (!tokens) {
478
+ throw new Error('Tokens not loaded. Cannot set selected token before tokens are fetched.');
479
+ }
480
+ const token = tokens.allTokens.find((tok) => tok.assetId === assetId) ??
481
+ tokens.topTokens.find((tok) => tok.assetId === assetId);
482
+ if (!token) {
483
+ throw new Error(`Token with asset ID "${assetId}" not found in available tokens.`);
484
+ }
485
+ this.update((state) => {
486
+ state.selectedToken = token;
487
+ state.paymentMethods = [];
488
+ state.selectedPaymentMethod = null;
489
+ });
490
+ this.triggerGetPaymentMethods(regionCode, {
491
+ assetId: token.assetId,
492
+ });
493
+ }
418
494
  /**
419
495
  * Fetches the list of providers for a given region.
420
496
  * The providers are saved in the controller state once fetched.
@@ -460,57 +536,81 @@ export class RampsController extends BaseController {
460
536
  * Fetches the list of payment methods for a given context.
461
537
  * The payment methods are saved in the controller state once fetched.
462
538
  *
539
+ * @param region - User's region code (e.g. "fr", "us-ny").
463
540
  * @param options - Query parameters for filtering payment methods.
464
- * @param options.region - User's region code. If not provided, uses the user's region from controller state.
465
541
  * @param options.fiat - Fiat currency code (e.g., "usd"). If not provided, uses the user's region currency.
466
542
  * @param options.assetId - CAIP-19 cryptocurrency identifier.
467
543
  * @param options.provider - Provider ID path.
468
- * @param options.forceRefresh - Whether to bypass cache.
469
- * @param options.ttl - Custom TTL for this request.
470
544
  * @returns The payment methods response containing payments array.
471
545
  */
472
- async getPaymentMethods(options) {
473
- const regionToUse = options.region ?? this.state.userRegion?.regionCode;
474
- const fiatToUse = options.fiat ?? this.state.userRegion?.country?.currency;
475
- if (!regionToUse) {
546
+ async getPaymentMethods(region, options) {
547
+ const regionCode = region ?? this.state.userRegion?.regionCode ?? null;
548
+ const fiatToUse = options?.fiat ?? this.state.userRegion?.country?.currency ?? null;
549
+ const assetIdToUse = options?.assetId ?? this.state.selectedToken?.assetId ?? '';
550
+ const providerToUse = options?.provider ?? this.state.selectedProvider?.id ?? '';
551
+ if (!regionCode) {
476
552
  throw new Error('Region is required. Either provide a region parameter or ensure userRegion is set in controller state.');
477
553
  }
478
554
  if (!fiatToUse) {
479
555
  throw new Error('Fiat currency is required. Either provide a fiat parameter or ensure userRegion is set in controller state.');
480
556
  }
481
- const normalizedRegion = regionToUse.toLowerCase().trim();
557
+ const normalizedRegion = regionCode.toLowerCase().trim();
482
558
  const normalizedFiat = fiatToUse.toLowerCase().trim();
483
559
  const cacheKey = createCacheKey('getPaymentMethods', [
484
560
  normalizedRegion,
485
561
  normalizedFiat,
486
- options.assetId,
487
- options.provider,
562
+ assetIdToUse,
563
+ providerToUse,
488
564
  ]);
489
565
  const response = await this.executeRequest(cacheKey, async () => {
490
566
  return this.messenger.call('RampsService:getPaymentMethods', {
491
567
  region: normalizedRegion,
492
568
  fiat: normalizedFiat,
493
- assetId: options.assetId,
494
- provider: options.provider,
569
+ assetId: assetIdToUse,
570
+ provider: providerToUse,
495
571
  });
496
- }, { forceRefresh: options.forceRefresh, ttl: options.ttl });
572
+ }, options);
497
573
  this.update((state) => {
498
- state.paymentMethods = response.payments;
499
- // Only clear selected payment method if it's no longer in the new list
500
- // This preserves the selection when cached data is returned (same context)
501
- if (state.selectedPaymentMethod &&
502
- !response.payments.some((pm) => pm.id === state.selectedPaymentMethod?.id)) {
503
- state.selectedPaymentMethod = null;
574
+ const currentAssetId = state.selectedToken?.assetId ?? '';
575
+ const currentProviderId = state.selectedProvider?.id ?? '';
576
+ const tokenSelectionUnchanged = assetIdToUse === currentAssetId;
577
+ const providerSelectionUnchanged = providerToUse === currentProviderId;
578
+ // this is a race condition check to ensure that the selected token and provider in state are the same as the tokens we're requesting for
579
+ // ex: if the user rapidly changes the token or provider, the in-flight payment methods might not be valid
580
+ // so this check will ensure that the payment methods are still valid for the token and provider that were requested
581
+ if (tokenSelectionUnchanged && providerSelectionUnchanged) {
582
+ state.paymentMethods = response.payments;
583
+ // this will auto-select the first payment method if the selected payment method is not in the new payment methods
584
+ const currentSelectionStillValid = response.payments.some((pm) => pm.id === state.selectedPaymentMethod?.id);
585
+ if (!currentSelectionStillValid) {
586
+ state.selectedPaymentMethod = response.payments[0] ?? null;
587
+ }
504
588
  }
505
589
  });
506
590
  return response;
507
591
  }
508
592
  /**
509
- * Sets the user's selected payment method.
593
+ * Sets the user's selected payment method by ID.
594
+ * Looks up the payment method from the current payment methods in state.
510
595
  *
511
- * @param paymentMethod - The payment method to select, or null to clear.
596
+ * @param paymentMethodId - The payment method ID (e.g., "/payments/debit-credit-card"), or null to clear.
597
+ * @throws If payment methods are not loaded or payment method is not found.
512
598
  */
513
- setSelectedPaymentMethod(paymentMethod) {
599
+ setSelectedPaymentMethod(paymentMethodId) {
600
+ if (!paymentMethodId) {
601
+ this.update((state) => {
602
+ state.selectedPaymentMethod = null;
603
+ });
604
+ return;
605
+ }
606
+ const { paymentMethods } = this.state;
607
+ if (!paymentMethods || paymentMethods.length === 0) {
608
+ throw new Error('Payment methods not loaded. Cannot set selected payment method before payment methods are fetched.');
609
+ }
610
+ const paymentMethod = paymentMethods.find((pm) => pm.id === paymentMethodId);
611
+ if (!paymentMethod) {
612
+ throw new Error(`Payment method with ID "${paymentMethodId}" not found in available payment methods.`);
613
+ }
514
614
  this.update((state) => {
515
615
  state.selectedPaymentMethod = paymentMethod;
516
616
  });
@@ -567,16 +667,14 @@ export class RampsController extends BaseController {
567
667
  /**
568
668
  * Triggers fetching payment methods without throwing.
569
669
  *
670
+ * @param region - User's region code (e.g., "us", "fr", "us-ny").
570
671
  * @param options - Query parameters for filtering payment methods.
571
- * @param options.region - User's region code. If not provided, uses userRegion from state.
572
672
  * @param options.fiat - Fiat currency code. If not provided, uses userRegion currency.
573
673
  * @param options.assetId - CAIP-19 cryptocurrency identifier.
574
674
  * @param options.provider - Provider ID path.
575
- * @param options.forceRefresh - Whether to bypass cache.
576
- * @param options.ttl - Custom TTL for this request.
577
675
  */
578
- triggerGetPaymentMethods(options) {
579
- this.getPaymentMethods(options).catch(() => {
676
+ triggerGetPaymentMethods(region, options) {
677
+ this.getPaymentMethods(region, options).catch(() => {
580
678
  // Error stored in state
581
679
  });
582
680
  }
@@ -589,7 +687,8 @@ _RampsController_requestCacheTTL = new WeakMap(), _RampsController_requestCacheM
589
687
  }, _RampsController_cleanupState = function _RampsController_cleanupState() {
590
688
  this.update((state) => {
591
689
  state.userRegion = null;
592
- state.preferredProvider = null;
690
+ state.selectedProvider = null;
691
+ state.selectedToken = null;
593
692
  state.tokens = null;
594
693
  state.providers = [];
595
694
  state.paymentMethods = [];