@metamask/ramps-controller 12.0.0 → 12.1.0

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.
Files changed (46) hide show
  1. package/CHANGELOG.md +79 -1
  2. package/dist/RampsController-method-action-types.cjs +7 -0
  3. package/dist/RampsController-method-action-types.cjs.map +1 -0
  4. package/dist/RampsController-method-action-types.d.cts +566 -0
  5. package/dist/RampsController-method-action-types.d.cts.map +1 -0
  6. package/dist/RampsController-method-action-types.d.mts +566 -0
  7. package/dist/RampsController-method-action-types.d.mts.map +1 -0
  8. package/dist/RampsController-method-action-types.mjs +6 -0
  9. package/dist/RampsController-method-action-types.mjs.map +1 -0
  10. package/dist/RampsController.cjs +80 -19
  11. package/dist/RampsController.cjs.map +1 -1
  12. package/dist/RampsController.d.cts +16 -23
  13. package/dist/RampsController.d.cts.map +1 -1
  14. package/dist/RampsController.d.mts +16 -23
  15. package/dist/RampsController.d.mts.map +1 -1
  16. package/dist/RampsController.mjs +80 -19
  17. package/dist/RampsController.mjs.map +1 -1
  18. package/dist/RampsService-method-action-types.cjs +1 -1
  19. package/dist/RampsService-method-action-types.cjs.map +1 -1
  20. package/dist/RampsService-method-action-types.d.cts +5 -3
  21. package/dist/RampsService-method-action-types.d.cts.map +1 -1
  22. package/dist/RampsService-method-action-types.d.mts +5 -3
  23. package/dist/RampsService-method-action-types.d.mts.map +1 -1
  24. package/dist/RampsService-method-action-types.mjs +1 -1
  25. package/dist/RampsService-method-action-types.mjs.map +1 -1
  26. package/dist/RampsService.cjs +14 -6
  27. package/dist/RampsService.cjs.map +1 -1
  28. package/dist/RampsService.d.cts +4 -2
  29. package/dist/RampsService.d.cts.map +1 -1
  30. package/dist/RampsService.d.mts +4 -2
  31. package/dist/RampsService.d.mts.map +1 -1
  32. package/dist/RampsService.mjs +14 -6
  33. package/dist/RampsService.mjs.map +1 -1
  34. package/dist/TransakService-method-action-types.cjs +1 -1
  35. package/dist/TransakService-method-action-types.cjs.map +1 -1
  36. package/dist/TransakService-method-action-types.d.cts +1 -1
  37. package/dist/TransakService-method-action-types.d.mts +1 -1
  38. package/dist/TransakService-method-action-types.mjs +1 -1
  39. package/dist/TransakService-method-action-types.mjs.map +1 -1
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.cts +2 -1
  42. package/dist/index.d.cts.map +1 -1
  43. package/dist/index.d.mts +2 -1
  44. package/dist/index.d.mts.map +1 -1
  45. package/dist/index.mjs.map +1 -1
  46. package/package.json +3 -3
@@ -10,7 +10,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
11
11
  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
12
12
  };
13
- var _RampsController_instances, _RampsController_requestCacheTTL, _RampsController_requestCacheMaxSize, _RampsController_pendingRequests, _RampsController_pendingResourceCount, _RampsController_orderPollingMeta, _RampsController_orderPollingTimer, _RampsController_isPolling, _RampsController_initPromise, _RampsController_clearPendingResourceCountForDependentResources, _RampsController_abortDependentRequests, _RampsController_registerActionHandlers, _RampsController_mutateRequests, _RampsController_removeRequestState, _RampsController_cleanupState, _RampsController_fireAndForget, _RampsController_requireRegion, _RampsController_isRegionCurrent, _RampsController_isTokenCurrent, _RampsController_isProviderCurrent, _RampsController_updateResourceField, _RampsController_setResourceLoading, _RampsController_setResourceError, _RampsController_updateRequestState, _RampsController_runInit, _RampsController_refreshOrder, _RampsController_pollPendingOrders, _RampsController_syncTransakAuthOnError;
13
+ var _RampsController_instances, _RampsController_requestCacheTTL, _RampsController_requestCacheMaxSize, _RampsController_pendingRequests, _RampsController_pendingResourceCount, _RampsController_orderPollingMeta, _RampsController_orderPollingTimer, _RampsController_isPolling, _RampsController_initPromise, _RampsController_clearPendingResourceCountForDependentResources, _RampsController_abortDependentRequests, _RampsController_mutateRequests, _RampsController_removeRequestState, _RampsController_cleanupState, _RampsController_fireAndForget, _RampsController_requireRegion, _RampsController_isRegionCurrent, _RampsController_isTokenCurrent, _RampsController_isProviderCurrent, _RampsController_updateResourceField, _RampsController_setResourceLoading, _RampsController_setResourceError, _RampsController_updateRequestState, _RampsController_runInit, _RampsController_refreshOrder, _RampsController_pollPendingOrders, _RampsController_syncTransakAuthOnError;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.RampsController = exports.normalizeProviderCode = exports.getDefaultRampsControllerState = exports.RAMPS_CONTROLLER_REQUIRED_SERVICE_ACTIONS = exports.controllerName = void 0;
16
16
  const base_controller_1 = require("@metamask/base-controller");
@@ -85,13 +85,13 @@ const rampsControllerMetadata = {
85
85
  usedInUi: true,
86
86
  },
87
87
  providers: {
88
- persist: true,
88
+ persist: false,
89
89
  includeInDebugSnapshot: true,
90
90
  includeInStateLogs: true,
91
91
  usedInUi: true,
92
92
  },
93
93
  tokens: {
94
- persist: true,
94
+ persist: false,
95
95
  includeInDebugSnapshot: true,
96
96
  includeInStateLogs: true,
97
97
  usedInUi: true,
@@ -120,6 +120,12 @@ const rampsControllerMetadata = {
120
120
  includeInStateLogs: true,
121
121
  usedInUi: true,
122
122
  },
123
+ providerAutoSelected: {
124
+ persist: true,
125
+ includeInDebugSnapshot: true,
126
+ includeInStateLogs: true,
127
+ usedInUi: true,
128
+ },
123
129
  };
124
130
  /**
125
131
  * Creates a default resource state object.
@@ -163,6 +169,7 @@ function getDefaultRampsControllerState() {
163
169
  },
164
170
  },
165
171
  orders: [],
172
+ providerAutoSelected: false,
166
173
  };
167
174
  }
168
175
  exports.getDefaultRampsControllerState = getDefaultRampsControllerState;
@@ -196,6 +203,7 @@ function resetDependentResources(state, options) {
196
203
  for (const key of DEPENDENT_RESOURCE_KEYS) {
197
204
  resetResource(state, key, defaultState[key]);
198
205
  }
206
+ state.providerAutoSelected = false;
199
207
  }
200
208
  // === HELPER FUNCTIONS ===
201
209
  /**
@@ -270,6 +278,55 @@ const PENDING_ORDER_STATUSES = new Set([
270
278
  const DEFAULT_POLLING_INTERVAL_MS = 30000;
271
279
  const MAX_ERROR_COUNT = 5;
272
280
  // === CONTROLLER DEFINITION ===
281
+ const MESSENGER_EXPOSED_METHODS = [
282
+ 'executeRequest',
283
+ 'abortRequest',
284
+ 'getRequestState',
285
+ 'setUserRegion',
286
+ 'setSelectedProvider',
287
+ 'init',
288
+ 'getCountries',
289
+ 'getTokens',
290
+ 'setSelectedToken',
291
+ 'getProviders',
292
+ 'getPaymentMethods',
293
+ 'setSelectedPaymentMethod',
294
+ 'getQuotes',
295
+ 'addOrder',
296
+ 'removeOrder',
297
+ 'startOrderPolling',
298
+ 'stopOrderPolling',
299
+ 'getBuyWidgetData',
300
+ 'addPrecreatedOrder',
301
+ 'getOrder',
302
+ 'getOrderFromCallback',
303
+ 'transakSetApiKey',
304
+ 'transakSetAccessToken',
305
+ 'transakClearAccessToken',
306
+ 'transakSetAuthenticated',
307
+ 'transakResetState',
308
+ 'transakSendUserOtp',
309
+ 'transakVerifyUserOtp',
310
+ 'transakLogout',
311
+ 'transakGetUserDetails',
312
+ 'transakGetBuyQuote',
313
+ 'transakGetKycRequirement',
314
+ 'transakGetAdditionalRequirements',
315
+ 'transakCreateOrder',
316
+ 'transakGetOrder',
317
+ 'transakGetUserLimits',
318
+ 'transakRequestOtt',
319
+ 'transakGeneratePaymentWidgetUrl',
320
+ 'transakSubmitPurposeOfUsageForm',
321
+ 'transakPatchUser',
322
+ 'transakSubmitSsnDetails',
323
+ 'transakConfirmPayment',
324
+ 'transakGetTranslation',
325
+ 'transakGetIdProofStatus',
326
+ 'transakCancelOrder',
327
+ 'transakCancelAllActiveOrders',
328
+ 'transakGetActiveOrders',
329
+ ];
273
330
  /**
274
331
  * Manages cryptocurrency on/off ramps functionality.
275
332
  */
@@ -330,7 +387,7 @@ class RampsController extends base_controller_1.BaseController {
330
387
  _RampsController_initPromise.set(this, null);
331
388
  __classPrivateFieldSet(this, _RampsController_requestCacheTTL, requestCacheTTL, "f");
332
389
  __classPrivateFieldSet(this, _RampsController_requestCacheMaxSize, requestCacheMaxSize, "f");
333
- __classPrivateFieldGet(this, _RampsController_instances, "m", _RampsController_registerActionHandlers).call(this);
390
+ this.messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
334
391
  }
335
392
  /**
336
393
  * Executes a request with caching, deduplication, and at most one in-flight
@@ -531,12 +588,17 @@ class RampsController extends base_controller_1.BaseController {
531
588
  * fetches payment methods for that provider.
532
589
  *
533
590
  * @param providerId - The provider ID (e.g., "/providers/moonpay"), or null to clear.
591
+ * @param options - Optional settings for the selection.
592
+ * @param options.autoSelected - When true, marks the provider as system-guessed
593
+ * (soft selection). The UI will silently auto-switch on token conflict instead
594
+ * of showing the "Token Not Available" modal. Defaults to false.
534
595
  * @throws If region is not set, providers are not loaded, or provider is not found.
535
596
  */
536
- setSelectedProvider(providerId) {
597
+ setSelectedProvider(providerId, options) {
537
598
  if (providerId === null) {
538
599
  this.update((state) => {
539
600
  state.providers.selected = null;
601
+ state.providerAutoSelected = false;
540
602
  resetResource(state, 'paymentMethods');
541
603
  });
542
604
  return;
@@ -560,6 +622,7 @@ class RampsController extends base_controller_1.BaseController {
560
622
  const tokenSupportedByProvider = !(assetId && supportedCryptos?.[assetId] === false);
561
623
  this.update((state) => {
562
624
  state.providers.selected = provider;
625
+ state.providerAutoSelected = options?.autoSelected ?? false;
563
626
  resetResource(state, 'paymentMethods');
564
627
  });
565
628
  if (tokenSupportedByProvider) {
@@ -1033,23 +1096,25 @@ class RampsController extends base_controller_1.BaseController {
1033
1096
  */
1034
1097
  async getOrder(providerCode, orderCode, wallet) {
1035
1098
  const order = await this.messenger.call('RampsService:getOrder', providerCode, orderCode, wallet);
1099
+ const healedWalletAddress = order.walletAddress || wallet;
1100
+ const healedOrder = {
1101
+ ...order,
1102
+ walletAddress: healedWalletAddress,
1103
+ providerOrderId: orderCode,
1104
+ };
1036
1105
  this.update((state) => {
1037
1106
  const idx = state.orders.findIndex((existing) => existing.providerOrderId === orderCode);
1038
1107
  if (idx === -1) {
1039
- state.orders.push({
1040
- ...order,
1041
- providerOrderId: orderCode,
1042
- });
1108
+ state.orders.push(healedOrder);
1043
1109
  }
1044
1110
  else {
1045
1111
  state.orders[idx] = {
1046
1112
  ...state.orders[idx],
1047
- ...order,
1048
- providerOrderId: orderCode,
1113
+ ...healedOrder,
1049
1114
  };
1050
1115
  }
1051
1116
  });
1052
- return order;
1117
+ return healedOrder;
1053
1118
  }
1054
1119
  /**
1055
1120
  * Extracts an order from a provider callback URL.
@@ -1063,7 +1128,8 @@ class RampsController extends base_controller_1.BaseController {
1063
1128
  * @returns The unified order data.
1064
1129
  */
1065
1130
  async getOrderFromCallback(providerCode, callbackUrl, wallet) {
1066
- return await this.messenger.call('RampsService:getOrderFromCallback', providerCode, callbackUrl, wallet);
1131
+ const order = await this.messenger.call('RampsService:getOrderFromCallback', providerCode, callbackUrl, wallet);
1132
+ return order;
1067
1133
  }
1068
1134
  /**
1069
1135
  * Sets the Transak API key used for all Transak API requests.
@@ -1474,10 +1540,6 @@ _RampsController_requestCacheTTL = new WeakMap(), _RampsController_requestCacheM
1474
1540
  __classPrivateFieldGet(this, _RampsController_instances, "m", _RampsController_removeRequestState).call(this, cacheKey);
1475
1541
  }
1476
1542
  }
1477
- }, _RampsController_registerActionHandlers = function _RampsController_registerActionHandlers() {
1478
- this.messenger.registerActionHandler('RampsController:getOrder', this.getOrder.bind(this));
1479
- this.messenger.registerActionHandler('RampsController:getQuotes', this.getQuotes.bind(this));
1480
- this.messenger.registerActionHandler('RampsController:setSelectedToken', this.setSelectedToken.bind(this));
1481
1543
  }, _RampsController_mutateRequests = function _RampsController_mutateRequests(fn) {
1482
1544
  this.update((state) => {
1483
1545
  const requests = state.requests;
@@ -1578,10 +1640,9 @@ async function _RampsController_refreshOrder(order) {
1578
1640
  if (!providerCode || !order.providerOrderId || !order.walletAddress) {
1579
1641
  return;
1580
1642
  }
1581
- const providerCodeSegment = normalizeProviderCode(providerCode);
1582
1643
  const previousStatus = order.status;
1583
1644
  try {
1584
- const updatedOrder = await this.getOrder(providerCodeSegment, order.providerOrderId, order.walletAddress);
1645
+ const updatedOrder = await this.getOrder(providerCode, order.providerOrderId, order.walletAddress);
1585
1646
  const meta = __classPrivateFieldGet(this, _RampsController_orderPollingMeta, "f").get(order.providerOrderId) ?? {
1586
1647
  lastTimeFetched: 0,
1587
1648
  errorCount: 0,