@metamask/ramps-controller 20.3.0 → 22.0.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 (290) hide show
  1. package/CHANGELOG.md +42 -1
  2. package/dist/{NeoBankService-method-action-types.d.mts → NeoBankService-method-action-types.d.ts} +2 -2
  3. package/dist/NeoBankService-method-action-types.d.ts.map +1 -0
  4. package/dist/{NeoBankService-method-action-types.mjs → NeoBankService-method-action-types.js} +1 -1
  5. package/dist/NeoBankService-method-action-types.js.map +1 -0
  6. package/dist/{NeoBankService.d.cts → NeoBankService.d.ts} +8 -8
  7. package/dist/NeoBankService.d.ts.map +1 -0
  8. package/dist/NeoBankService.js +380 -0
  9. package/dist/NeoBankService.js.map +1 -0
  10. package/dist/{RampsController-method-action-types.d.mts → RampsController-method-action-types.d.ts} +18 -3
  11. package/dist/RampsController-method-action-types.d.ts.map +1 -0
  12. package/dist/{TransakService-method-action-types.mjs → RampsController-method-action-types.js} +1 -1
  13. package/dist/RampsController-method-action-types.js.map +1 -0
  14. package/dist/{RampsController.d.mts → RampsController.d.ts} +86 -23
  15. package/dist/RampsController.d.ts.map +1 -0
  16. package/dist/{RampsController.mjs → RampsController.js} +976 -634
  17. package/dist/RampsController.js.map +1 -0
  18. package/dist/{RampsService-method-action-types.d.cts → RampsService-method-action-types.d.ts} +2 -2
  19. package/dist/RampsService-method-action-types.d.ts.map +1 -0
  20. package/dist/{RampsService-method-action-types.mjs → RampsService-method-action-types.js} +1 -1
  21. package/dist/RampsService-method-action-types.js.map +1 -0
  22. package/dist/{RampsService.d.mts → RampsService.d.ts} +11 -5
  23. package/dist/RampsService.d.ts.map +1 -0
  24. package/dist/{RampsService.mjs → RampsService.js} +159 -147
  25. package/dist/RampsService.js.map +1 -0
  26. package/dist/{RequestCache.d.mts → RequestCache.d.ts} +3 -3
  27. package/dist/RequestCache.d.ts.map +1 -0
  28. package/dist/{RequestCache.mjs → RequestCache.js} +1 -1
  29. package/dist/RequestCache.js.map +1 -0
  30. package/dist/{TransakService-method-action-types.d.cts → TransakService-method-action-types.d.ts} +2 -2
  31. package/dist/TransakService-method-action-types.d.ts.map +1 -0
  32. package/dist/{RampsController-method-action-types.mjs → TransakService-method-action-types.js} +1 -1
  33. package/dist/TransakService-method-action-types.js.map +1 -0
  34. package/dist/{TransakService.d.cts → TransakService.d.ts} +6 -6
  35. package/dist/TransakService.d.ts.map +1 -0
  36. package/dist/TransakService.js +746 -0
  37. package/dist/TransakService.js.map +1 -0
  38. package/dist/{autoramp-types.d.cts → autoramp-types.d.ts} +1 -1
  39. package/dist/autoramp-types.d.ts.map +1 -0
  40. package/dist/autoramp-types.js +2 -0
  41. package/dist/autoramp-types.js.map +1 -0
  42. package/dist/{autorampAccount.d.mts → autorampAccount.d.ts} +3 -3
  43. package/dist/autorampAccount.d.ts.map +1 -0
  44. package/dist/{autorampAccount.mjs → autorampAccount.js} +1 -1
  45. package/dist/autorampAccount.js.map +1 -0
  46. package/dist/{client-identity.d.mts → client-identity.d.ts} +1 -1
  47. package/dist/client-identity.d.ts.map +1 -0
  48. package/dist/{client-identity.mjs → client-identity.js} +1 -1
  49. package/dist/client-identity.js.map +1 -0
  50. package/dist/{errorNormalization.d.mts → errorNormalization.d.ts} +1 -1
  51. package/dist/errorNormalization.d.ts.map +1 -0
  52. package/dist/{errorNormalization.mjs → errorNormalization.js} +1 -1
  53. package/dist/errorNormalization.js.map +1 -0
  54. package/dist/{featureFlags.d.mts → featureFlags.d.ts} +2 -2
  55. package/dist/featureFlags.d.ts.map +1 -0
  56. package/dist/{featureFlags.mjs → featureFlags.js} +1 -1
  57. package/dist/featureFlags.js.map +1 -0
  58. package/dist/{index.d.mts → index.d.ts} +37 -35
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +19 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/order-syncing/constants.d.ts +23 -0
  63. package/dist/order-syncing/constants.d.ts.map +1 -0
  64. package/dist/order-syncing/constants.js +23 -0
  65. package/dist/order-syncing/constants.js.map +1 -0
  66. package/dist/order-syncing/controller-integration.d.ts +91 -0
  67. package/dist/order-syncing/controller-integration.d.ts.map +1 -0
  68. package/dist/order-syncing/controller-integration.js +364 -0
  69. package/dist/order-syncing/controller-integration.js.map +1 -0
  70. package/dist/order-syncing/index.d.ts +7 -0
  71. package/dist/order-syncing/index.d.ts.map +1 -0
  72. package/dist/order-syncing/index.js +5 -0
  73. package/dist/order-syncing/index.js.map +1 -0
  74. package/dist/order-syncing/sync-utils.d.ts +9 -0
  75. package/dist/order-syncing/sync-utils.d.ts.map +1 -0
  76. package/dist/order-syncing/sync-utils.js +27 -0
  77. package/dist/order-syncing/sync-utils.js.map +1 -0
  78. package/dist/order-syncing/types.d.ts +66 -0
  79. package/dist/order-syncing/types.d.ts.map +1 -0
  80. package/dist/order-syncing/types.js +2 -0
  81. package/dist/order-syncing/types.js.map +1 -0
  82. package/dist/order-syncing/utils.d.ts +83 -0
  83. package/dist/order-syncing/utils.d.ts.map +1 -0
  84. package/dist/order-syncing/utils.js +144 -0
  85. package/dist/order-syncing/utils.js.map +1 -0
  86. package/dist/{orderStatus.d.mts → orderStatus.d.ts} +2 -2
  87. package/dist/orderStatus.d.ts.map +1 -0
  88. package/dist/{orderStatus.mjs → orderStatus.js} +2 -2
  89. package/dist/orderStatus.js.map +1 -0
  90. package/dist/{ownership-message.d.cts → ownership-message.d.ts} +1 -1
  91. package/dist/ownership-message.d.ts.map +1 -0
  92. package/dist/{ownership-message.mjs → ownership-message.js} +1 -1
  93. package/dist/ownership-message.js.map +1 -0
  94. package/dist/{paymentMethodMerge.d.cts → paymentMethodMerge.d.ts} +2 -2
  95. package/dist/paymentMethodMerge.d.ts.map +1 -0
  96. package/dist/{paymentMethodMerge.mjs → paymentMethodMerge.js} +1 -1
  97. package/dist/paymentMethodMerge.js.map +1 -0
  98. package/dist/{providerAvailability.d.cts → providerAvailability.d.ts} +2 -2
  99. package/dist/providerAvailability.d.ts.map +1 -0
  100. package/dist/{providerAvailability.mjs → providerAvailability.js} +1 -1
  101. package/dist/providerAvailability.js.map +1 -0
  102. package/dist/{quoteClassification.d.cts → quoteClassification.d.ts} +2 -2
  103. package/dist/quoteClassification.d.ts.map +1 -0
  104. package/dist/{quoteClassification.mjs → quoteClassification.js} +1 -1
  105. package/dist/quoteClassification.js.map +1 -0
  106. package/dist/{rampsErrorCodes.d.cts → rampsErrorCodes.d.ts} +2 -2
  107. package/dist/rampsErrorCodes.d.ts.map +1 -0
  108. package/dist/{rampsErrorCodes.mjs → rampsErrorCodes.js} +1 -1
  109. package/dist/rampsErrorCodes.js.map +1 -0
  110. package/dist/{selectors.d.mts → selectors.d.ts} +3 -3
  111. package/dist/selectors.d.ts.map +1 -0
  112. package/dist/{selectors.mjs → selectors.js} +2 -2
  113. package/dist/selectors.js.map +1 -0
  114. package/dist/{transakApiErrorUtils.d.cts → transakApiErrorUtils.d.ts} +1 -1
  115. package/dist/transakApiErrorUtils.d.ts.map +1 -0
  116. package/dist/{transakApiErrorUtils.mjs → transakApiErrorUtils.js} +3 -3
  117. package/dist/transakApiErrorUtils.js.map +1 -0
  118. package/dist/{transakErrorCodes.d.cts → transakErrorCodes.d.ts} +3 -3
  119. package/dist/transakErrorCodes.d.ts.map +1 -0
  120. package/dist/{transakErrorCodes.mjs → transakErrorCodes.js} +1 -1
  121. package/dist/transakErrorCodes.js.map +1 -0
  122. package/dist/{wallet-registration-machine.d.cts → wallet-registration-machine.d.ts} +1 -1
  123. package/dist/wallet-registration-machine.d.ts.map +1 -0
  124. package/dist/{wallet-registration-machine.mjs → wallet-registration-machine.js} +1 -1
  125. package/dist/wallet-registration-machine.js.map +1 -0
  126. package/dist/{wallet-registration-service.d.cts → wallet-registration-service.d.ts} +1 -1
  127. package/dist/wallet-registration-service.d.ts.map +1 -0
  128. package/dist/{wallet-registration-service.mjs → wallet-registration-service.js} +60 -69
  129. package/dist/wallet-registration-service.js.map +1 -0
  130. package/package.json +18 -21
  131. package/dist/NeoBankService-method-action-types.cjs +0 -7
  132. package/dist/NeoBankService-method-action-types.cjs.map +0 -1
  133. package/dist/NeoBankService-method-action-types.d.cts +0 -126
  134. package/dist/NeoBankService-method-action-types.d.cts.map +0 -1
  135. package/dist/NeoBankService-method-action-types.d.mts.map +0 -1
  136. package/dist/NeoBankService-method-action-types.mjs.map +0 -1
  137. package/dist/NeoBankService.cjs +0 -387
  138. package/dist/NeoBankService.cjs.map +0 -1
  139. package/dist/NeoBankService.d.cts.map +0 -1
  140. package/dist/NeoBankService.d.mts +0 -191
  141. package/dist/NeoBankService.d.mts.map +0 -1
  142. package/dist/NeoBankService.mjs +0 -379
  143. package/dist/NeoBankService.mjs.map +0 -1
  144. package/dist/RampsController-method-action-types.cjs +0 -7
  145. package/dist/RampsController-method-action-types.cjs.map +0 -1
  146. package/dist/RampsController-method-action-types.d.cts +0 -758
  147. package/dist/RampsController-method-action-types.d.cts.map +0 -1
  148. package/dist/RampsController-method-action-types.d.mts.map +0 -1
  149. package/dist/RampsController-method-action-types.mjs.map +0 -1
  150. package/dist/RampsController.cjs +0 -2799
  151. package/dist/RampsController.cjs.map +0 -1
  152. package/dist/RampsController.d.cts +0 -968
  153. package/dist/RampsController.d.cts.map +0 -1
  154. package/dist/RampsController.d.mts.map +0 -1
  155. package/dist/RampsController.mjs.map +0 -1
  156. package/dist/RampsService-method-action-types.cjs +0 -7
  157. package/dist/RampsService-method-action-types.cjs.map +0 -1
  158. package/dist/RampsService-method-action-types.d.cts.map +0 -1
  159. package/dist/RampsService-method-action-types.d.mts +0 -171
  160. package/dist/RampsService-method-action-types.d.mts.map +0 -1
  161. package/dist/RampsService-method-action-types.mjs.map +0 -1
  162. package/dist/RampsService.cjs +0 -708
  163. package/dist/RampsService.cjs.map +0 -1
  164. package/dist/RampsService.d.cts +0 -944
  165. package/dist/RampsService.d.cts.map +0 -1
  166. package/dist/RampsService.d.mts.map +0 -1
  167. package/dist/RampsService.mjs.map +0 -1
  168. package/dist/RequestCache.cjs +0 -103
  169. package/dist/RequestCache.cjs.map +0 -1
  170. package/dist/RequestCache.d.cts +0 -110
  171. package/dist/RequestCache.d.cts.map +0 -1
  172. package/dist/RequestCache.d.mts.map +0 -1
  173. package/dist/RequestCache.mjs.map +0 -1
  174. package/dist/TransakService-method-action-types.cjs +0 -7
  175. package/dist/TransakService-method-action-types.cjs.map +0 -1
  176. package/dist/TransakService-method-action-types.d.cts.map +0 -1
  177. package/dist/TransakService-method-action-types.d.mts +0 -140
  178. package/dist/TransakService-method-action-types.d.mts.map +0 -1
  179. package/dist/TransakService-method-action-types.mjs.map +0 -1
  180. package/dist/TransakService.cjs +0 -743
  181. package/dist/TransakService.cjs.map +0 -1
  182. package/dist/TransakService.d.cts.map +0 -1
  183. package/dist/TransakService.d.mts +0 -370
  184. package/dist/TransakService.d.mts.map +0 -1
  185. package/dist/TransakService.mjs +0 -734
  186. package/dist/TransakService.mjs.map +0 -1
  187. package/dist/autoramp-types.cjs +0 -3
  188. package/dist/autoramp-types.cjs.map +0 -1
  189. package/dist/autoramp-types.d.cts.map +0 -1
  190. package/dist/autoramp-types.d.mts +0 -22
  191. package/dist/autoramp-types.d.mts.map +0 -1
  192. package/dist/autoramp-types.mjs +0 -2
  193. package/dist/autoramp-types.mjs.map +0 -1
  194. package/dist/autorampAccount.cjs +0 -155
  195. package/dist/autorampAccount.cjs.map +0 -1
  196. package/dist/autorampAccount.d.cts +0 -126
  197. package/dist/autorampAccount.d.cts.map +0 -1
  198. package/dist/autorampAccount.d.mts.map +0 -1
  199. package/dist/autorampAccount.mjs.map +0 -1
  200. package/dist/client-identity.cjs +0 -28
  201. package/dist/client-identity.cjs.map +0 -1
  202. package/dist/client-identity.d.cts +0 -24
  203. package/dist/client-identity.d.cts.map +0 -1
  204. package/dist/client-identity.d.mts.map +0 -1
  205. package/dist/client-identity.mjs.map +0 -1
  206. package/dist/errorNormalization.cjs +0 -84
  207. package/dist/errorNormalization.cjs.map +0 -1
  208. package/dist/errorNormalization.d.cts +0 -56
  209. package/dist/errorNormalization.d.cts.map +0 -1
  210. package/dist/errorNormalization.d.mts.map +0 -1
  211. package/dist/errorNormalization.mjs.map +0 -1
  212. package/dist/featureFlags.cjs +0 -144
  213. package/dist/featureFlags.cjs.map +0 -1
  214. package/dist/featureFlags.d.cts +0 -82
  215. package/dist/featureFlags.d.cts.map +0 -1
  216. package/dist/featureFlags.d.mts.map +0 -1
  217. package/dist/featureFlags.mjs.map +0 -1
  218. package/dist/index.cjs +0 -82
  219. package/dist/index.cjs.map +0 -1
  220. package/dist/index.d.cts +0 -35
  221. package/dist/index.d.cts.map +0 -1
  222. package/dist/index.d.mts.map +0 -1
  223. package/dist/index.mjs +0 -18
  224. package/dist/index.mjs.map +0 -1
  225. package/dist/orderStatus.cjs +0 -34
  226. package/dist/orderStatus.cjs.map +0 -1
  227. package/dist/orderStatus.d.cts +0 -18
  228. package/dist/orderStatus.d.cts.map +0 -1
  229. package/dist/orderStatus.d.mts.map +0 -1
  230. package/dist/orderStatus.mjs.map +0 -1
  231. package/dist/ownership-message.cjs +0 -26
  232. package/dist/ownership-message.cjs.map +0 -1
  233. package/dist/ownership-message.d.cts.map +0 -1
  234. package/dist/ownership-message.d.mts +0 -22
  235. package/dist/ownership-message.d.mts.map +0 -1
  236. package/dist/ownership-message.mjs.map +0 -1
  237. package/dist/paymentMethodMerge.cjs +0 -51
  238. package/dist/paymentMethodMerge.cjs.map +0 -1
  239. package/dist/paymentMethodMerge.d.cts.map +0 -1
  240. package/dist/paymentMethodMerge.d.mts +0 -26
  241. package/dist/paymentMethodMerge.d.mts.map +0 -1
  242. package/dist/paymentMethodMerge.mjs.map +0 -1
  243. package/dist/providerAvailability.cjs +0 -134
  244. package/dist/providerAvailability.cjs.map +0 -1
  245. package/dist/providerAvailability.d.cts.map +0 -1
  246. package/dist/providerAvailability.d.mts +0 -101
  247. package/dist/providerAvailability.d.mts.map +0 -1
  248. package/dist/providerAvailability.mjs.map +0 -1
  249. package/dist/quoteClassification.cjs +0 -44
  250. package/dist/quoteClassification.cjs.map +0 -1
  251. package/dist/quoteClassification.d.cts.map +0 -1
  252. package/dist/quoteClassification.d.mts +0 -33
  253. package/dist/quoteClassification.d.mts.map +0 -1
  254. package/dist/quoteClassification.mjs.map +0 -1
  255. package/dist/rampsErrorCodes.cjs +0 -11
  256. package/dist/rampsErrorCodes.cjs.map +0 -1
  257. package/dist/rampsErrorCodes.d.cts.map +0 -1
  258. package/dist/rampsErrorCodes.d.mts +0 -9
  259. package/dist/rampsErrorCodes.d.mts.map +0 -1
  260. package/dist/rampsErrorCodes.mjs.map +0 -1
  261. package/dist/selectors.cjs +0 -85
  262. package/dist/selectors.cjs.map +0 -1
  263. package/dist/selectors.d.cts +0 -78
  264. package/dist/selectors.d.cts.map +0 -1
  265. package/dist/selectors.d.mts.map +0 -1
  266. package/dist/selectors.mjs.map +0 -1
  267. package/dist/transakApiErrorUtils.cjs +0 -15
  268. package/dist/transakApiErrorUtils.cjs.map +0 -1
  269. package/dist/transakApiErrorUtils.d.cts.map +0 -1
  270. package/dist/transakApiErrorUtils.d.mts +0 -3
  271. package/dist/transakApiErrorUtils.d.mts.map +0 -1
  272. package/dist/transakApiErrorUtils.mjs.map +0 -1
  273. package/dist/transakErrorCodes.cjs +0 -14
  274. package/dist/transakErrorCodes.cjs.map +0 -1
  275. package/dist/transakErrorCodes.d.cts.map +0 -1
  276. package/dist/transakErrorCodes.d.mts +0 -12
  277. package/dist/transakErrorCodes.d.mts.map +0 -1
  278. package/dist/transakErrorCodes.mjs.map +0 -1
  279. package/dist/wallet-registration-machine.cjs +0 -144
  280. package/dist/wallet-registration-machine.cjs.map +0 -1
  281. package/dist/wallet-registration-machine.d.cts.map +0 -1
  282. package/dist/wallet-registration-machine.d.mts +0 -81
  283. package/dist/wallet-registration-machine.d.mts.map +0 -1
  284. package/dist/wallet-registration-machine.mjs.map +0 -1
  285. package/dist/wallet-registration-service.cjs +0 -351
  286. package/dist/wallet-registration-service.cjs.map +0 -1
  287. package/dist/wallet-registration-service.d.cts.map +0 -1
  288. package/dist/wallet-registration-service.d.mts +0 -144
  289. package/dist/wallet-registration-service.d.mts.map +0 -1
  290. package/dist/wallet-registration-service.mjs.map +0 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,45 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [22.0.0]
11
+
12
+ ### Added
13
+
14
+ - Add V2 ramps order syncing with User Storage ([#9474](https://github.com/MetaMask/core/pull/9474))
15
+ - Synchronize orders across clients for the same SRP using timestamp-based last-write-wins conflict resolution, soft-delete tombstones, and incremental add/update/delete pushes
16
+ - Feature key: `rampsOrders`; hosts call `RampsController:syncOrdersWithUserStorage` on unlock when Backup & Sync + ramps syncing are enabled
17
+ - Persist optional `lastUpdatedAt` on local `RampsOrder` entries for LWW (not returned by the V2 API)
18
+ - Strip `paymentDetails` from remote payloads (PII stays local-only)
19
+ - Soft deletes use remote tombstones; retention matches contact sync (no remote purge/compaction)
20
+ - Mid-sync local mutations coalesce into a follow-up full sync pass so uploads are not dropped during `performBatchSetStorage`
21
+ - Polling via `getOrder` → `addOrder` stamps `lastUpdatedAt` and writes to User Storage only when the syncable payload changed
22
+ - Normalize ISO and numeric-string `createdAt` values from Portfolio and older clients to epoch milliseconds
23
+ - Optional `onOrderSyncErroneousSituation` (full sync and incremental push/delete) and `trace` callbacks
24
+
25
+ ### Changed
26
+
27
+ - **BREAKING:** `RampsControllerMessenger` now requires these actions to be delegated for order syncing ([#9474](https://github.com/MetaMask/core/pull/9474)):
28
+ - `UserStorageController:getState`
29
+ - `UserStorageController:performGetStorageAllFeatureEntries`
30
+ - `UserStorageController:performBatchSetStorage`
31
+ - `AuthenticationController:isSignedIn`
32
+ - Bump `@metamask/profile-sync-controller` from `^31.0.0` to `^32.0.0` ([#10166](https://github.com/MetaMask/core/pull/10166))
33
+
34
+ ## [21.0.0]
35
+
36
+ ### Changed
37
+
38
+ - **BREAKING:** Drop CommonJS support ([#9536](https://github.com/MetaMask/core/pull/9536))
39
+ - This package is now ESM-only, but can still be used in CommonJS projects via `require(esm)` in modern Node.js versions (22+), or dynamic imports in older Node.js versions.
40
+ - **BREAKING:** Bump minimum Node.js version to 22 ([#9976](https://github.com/MetaMask/core/pull/9976))
41
+ - **BREAKING:** Bump TypeScript target to ES2022 ([#10019](https://github.com/MetaMask/core/pull/10019))
42
+ - This package now ships ES2022 code, requiring a compatible modern environment or bundler configuration to consume.
43
+ - Bump `@metamask/base-controller` from `^9.1.0` to `^10.0.0` ([#10160](https://github.com/MetaMask/core/pull/10160))
44
+ - Bump `@metamask/controller-utils` from `^12.3.0` to `^13.0.0` ([#10160](https://github.com/MetaMask/core/pull/10160))
45
+ - Bump `@metamask/messenger` from `^2.0.0` to `^3.0.0` ([#10160](https://github.com/MetaMask/core/pull/10160))
46
+ - Bump `@metamask/profile-sync-controller` from `^30.0.0` to `^31.0.0` ([#10160](https://github.com/MetaMask/core/pull/10160))
47
+ - Bump `@metamask/remote-feature-flag-controller` from `^6.1.1` to `^7.0.0` ([#10160](https://github.com/MetaMask/core/pull/10160))
48
+
10
49
  ## [20.3.0]
11
50
 
12
51
  ### Added
@@ -558,7 +597,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
558
597
  - Add `OnRampService` for interacting with the OnRamp API
559
598
  - Add geolocation detection via IP address lookup
560
599
 
561
- [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/ramps-controller@20.3.0...HEAD
600
+ [Unreleased]: https://github.com/MetaMask/core/compare/@metamask/ramps-controller@22.0.0...HEAD
601
+ [22.0.0]: https://github.com/MetaMask/core/compare/@metamask/ramps-controller@21.0.0...@metamask/ramps-controller@22.0.0
602
+ [21.0.0]: https://github.com/MetaMask/core/compare/@metamask/ramps-controller@20.3.0...@metamask/ramps-controller@21.0.0
562
603
  [20.3.0]: https://github.com/MetaMask/core/compare/@metamask/ramps-controller@20.2.0...@metamask/ramps-controller@20.3.0
563
604
  [20.2.0]: https://github.com/MetaMask/core/compare/@metamask/ramps-controller@20.1.0...@metamask/ramps-controller@20.2.0
564
605
  [20.1.0]: https://github.com/MetaMask/core/compare/@metamask/ramps-controller@20.0.0...@metamask/ramps-controller@20.1.0
@@ -2,7 +2,7 @@
2
2
  * This file is auto generated.
3
3
  * Do not edit manually.
4
4
  */
5
- import type { NeoBankService } from "./NeoBankService.mjs";
5
+ import type { NeoBankService } from './NeoBankService.js';
6
6
  /**
7
7
  * Fetches an autoramp account via neobank-proxy
8
8
  * `GET /neobank/autoramps/{autoramp_id}` (MoonPay
@@ -123,4 +123,4 @@ export type NeoBankServiceRegisterSelfHostedWalletAction = {
123
123
  * Union of all NeoBankService action types.
124
124
  */
125
125
  export type NeoBankServiceMethodActions = NeoBankServiceGetAutorampAction | NeoBankServiceRegisterPixAddressAction | NeoBankServiceGetAutorampQuoteAction | NeoBankServiceCreateAutorampAction | NeoBankServiceGetAutorampQuoteForAutorampAction | NeoBankServiceAttachAutorampQuoteAction | NeoBankServiceGetCustomerByExternalIdAction | NeoBankServiceGetMoonpayCustomerIdAction | NeoBankServiceGetWalletRegistrationStatusAction | NeoBankServiceRegisterSelfHostedWalletAction;
126
- //# sourceMappingURL=NeoBankService-method-action-types.d.mts.map
126
+ //# sourceMappingURL=NeoBankService-method-action-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeoBankService-method-action-types.d.ts","sourceRoot":"","sources":["../src/NeoBankService-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE,4BAA4B,CAAC;IACnC,OAAO,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;CACxC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,sCAAsC,GAAG;IACnD,IAAI,EAAE,mCAAmC,CAAC;IAC1C,OAAO,EAAE,cAAc,CAAC,oBAAoB,CAAC,CAAC;CAC/C,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,oCAAoC,GAAG;IACjD,IAAI,EAAE,iCAAiC,CAAC;IACxC,OAAO,EAAE,cAAc,CAAC,kBAAkB,CAAC,CAAC;CAC7C,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,kCAAkC,GAAG;IAC/C,IAAI,EAAE,+BAA+B,CAAC;IACtC,OAAO,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;CAC3C,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,MAAM,+CAA+C,GAAG;IAC5D,IAAI,EAAE,4CAA4C,CAAC;IACnD,OAAO,EAAE,cAAc,CAAC,6BAA6B,CAAC,CAAC;CACxD,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,uCAAuC,GAAG;IACpD,IAAI,EAAE,oCAAoC,CAAC;IAC3C,OAAO,EAAE,cAAc,CAAC,qBAAqB,CAAC,CAAC;CAChD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,2CAA2C,GAAG;IACxD,IAAI,EAAE,wCAAwC,CAAC;IAC/C,OAAO,EAAE,cAAc,CAAC,yBAAyB,CAAC,CAAC;CACpD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,wCAAwC,GAAG;IACrD,IAAI,EAAE,qCAAqC,CAAC;IAC5C,OAAO,EAAE,cAAc,CAAC,sBAAsB,CAAC,CAAC;CACjD,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,+CAA+C,GAAG;IAC5D,IAAI,EAAE,4CAA4C,CAAC;IACnD,OAAO,EAAE,cAAc,CAAC,6BAA6B,CAAC,CAAC;CACxD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD,IAAI,EAAE,yCAAyC,CAAC;IAChD,OAAO,EAAE,cAAc,CAAC,0BAA0B,CAAC,CAAC;CACrD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,2BAA2B,GACnC,+BAA+B,GAC/B,sCAAsC,GACtC,oCAAoC,GACpC,kCAAkC,GAClC,+CAA+C,GAC/C,uCAAuC,GACvC,2CAA2C,GAC3C,wCAAwC,GACxC,+CAA+C,GAC/C,4CAA4C,CAAC"}
@@ -3,4 +3,4 @@
3
3
  * Do not edit manually.
4
4
  */
5
5
  export {};
6
- //# sourceMappingURL=NeoBankService-method-action-types.mjs.map
6
+ //# sourceMappingURL=NeoBankService-method-action-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeoBankService-method-action-types.js","sourceRoot":"","sources":["../src/NeoBankService-method-action-types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/**\n * This file is auto generated.\n * Do not edit manually.\n */\n\nimport type { NeoBankService } from './NeoBankService.js';\n\n/**\n * Fetches an autoramp account via neobank-proxy\n * `GET /neobank/autoramps/{autoramp_id}` (MoonPay\n * `GET /api/autoramps/{autoramp_id}`).\n *\n * @param autorampId - MoonPay / Ramp API autoramp id.\n * @returns Remote snapshot for controller apply/refresh.\n */\nexport type NeoBankServiceGetAutorampAction = {\n type: `NeoBankService:getAutoramp`;\n handler: NeoBankService['getAutoramp'];\n};\n\n/**\n * Registers a Pix address via neobank-proxy `POST /neobank/addresses/pix`.\n * Body is forwarded as opaque JSON (MoonPay address schema).\n *\n * @param body - Pix address registration payload.\n * @param options - Optional idempotency key.\n * @returns Parsed proxy JSON response.\n */\nexport type NeoBankServiceRegisterPixAddressAction = {\n type: `NeoBankService:registerPixAddress`;\n handler: NeoBankService['registerPixAddress'];\n};\n\n/**\n * Fetches an autoramp quote via neobank-proxy `GET /neobank/autoramps/quote`.\n *\n * @param query - Quote query params (forwarded as-is).\n * @returns Parsed proxy JSON response.\n */\nexport type NeoBankServiceGetAutorampQuoteAction = {\n type: `NeoBankService:getAutorampQuote`;\n handler: NeoBankService['getAutorampQuote'];\n};\n\n/**\n * Creates an autoramp from a signed quote via neobank-proxy\n * `POST /neobank/autoramps` (MoonPay `POST /api/autoramps`).\n *\n * @param body - CreateAutoramp / signed-quote payload (forwarded as-is).\n * @param options - Optional idempotency key.\n * @returns Remote snapshot for controller apply/refresh.\n */\nexport type NeoBankServiceCreateAutorampAction = {\n type: `NeoBankService:createAutoramp`;\n handler: NeoBankService['createAutoramp'];\n};\n\n/**\n * Fetches a quote for an existing autoramp via neobank-proxy\n * `GET /neobank/autoramps/{autoramp_id}/quote`.\n *\n * @param autorampId - Autoramp id.\n * @param query - Quote query params (forwarded as-is).\n * @returns Parsed proxy JSON response.\n */\nexport type NeoBankServiceGetAutorampQuoteForAutorampAction = {\n type: `NeoBankService:getAutorampQuoteForAutoramp`;\n handler: NeoBankService['getAutorampQuoteForAutoramp'];\n};\n\n/**\n * Attaches a signed quote to an autoramp via neobank-proxy\n * `POST /neobank/autoramps/{autoramp_id}/quotes`.\n *\n * @param autorampId - Autoramp id.\n * @param body - Quote attachment payload (forwarded as-is).\n * @param options - Optional idempotency key.\n * @returns Parsed proxy JSON response.\n */\nexport type NeoBankServiceAttachAutorampQuoteAction = {\n type: `NeoBankService:attachAutorampQuote`;\n handler: NeoBankService['attachAutorampQuote'];\n};\n\n/**\n * Fetches a customer by partner external id via neobank-proxy\n * `GET /neobank/customers/{external_id}/external`.\n *\n * @param externalId - Partner-assigned external customer id.\n * @returns Parsed proxy JSON response.\n */\nexport type NeoBankServiceGetCustomerByExternalIdAction = {\n type: `NeoBankService:getCustomerByExternalId`;\n handler: NeoBankService['getCustomerByExternalId'];\n};\n\n/**\n * Resolves Iron's internal customer id via neobank-proxy customer lookup,\n * using the MetaMask canonical profile id as the partner `external_id`.\n *\n * @returns Iron's internal customer id.\n */\nexport type NeoBankServiceGetMoonpayCustomerIdAction = {\n type: `NeoBankService:getMoonpayCustomerId`;\n handler: NeoBankService['getMoonpayCustomerId'];\n};\n\n/**\n * Checks whether a Monad Money Account address is already registered for the\n * given Iron customer.\n *\n * @param params - Customer id and address to check.\n * @param params.customerId - Iron / MoonPay customer UUID.\n * @param params.address - Money Account address.\n * @returns Active, disabled, or absent registration status.\n */\nexport type NeoBankServiceGetWalletRegistrationStatusAction = {\n type: `NeoBankService:getWalletRegistrationStatus`;\n handler: NeoBankService['getWalletRegistrationStatus'];\n};\n\n/**\n * Submits a signed Monad Money Account ownership proof via neobank-proxy\n * `POST /neobank/addresses/crypto/selfhosted`.\n *\n * @param params - Signed ownership proof.\n * @returns Registered wallet record.\n */\nexport type NeoBankServiceRegisterSelfHostedWalletAction = {\n type: `NeoBankService:registerSelfHostedWallet`;\n handler: NeoBankService['registerSelfHostedWallet'];\n};\n\n/**\n * Union of all NeoBankService action types.\n */\nexport type NeoBankServiceMethodActions =\n | NeoBankServiceGetAutorampAction\n | NeoBankServiceRegisterPixAddressAction\n | NeoBankServiceGetAutorampQuoteAction\n | NeoBankServiceCreateAutorampAction\n | NeoBankServiceGetAutorampQuoteForAutorampAction\n | NeoBankServiceAttachAutorampQuoteAction\n | NeoBankServiceGetCustomerByExternalIdAction\n | NeoBankServiceGetMoonpayCustomerIdAction\n | NeoBankServiceGetWalletRegistrationStatusAction\n | NeoBankServiceRegisterSelfHostedWalletAction;\n"]}
@@ -1,10 +1,10 @@
1
- import type { CreateServicePolicyOptions, ServicePolicy } from "@metamask/controller-utils";
2
- import type { Messenger } from "@metamask/messenger";
3
- import type { AuthenticationController } from "@metamask/profile-sync-controller";
4
- import type { AutorampRemoteSnapshot } from "./autoramp-types.cjs";
5
- import type { NeoBankServiceMethodActions } from "./NeoBankService-method-action-types.cjs";
6
- import { RampsEnvironment } from "./RampsService.cjs";
7
- import type { RegistrationOutcome, RegistrationStatus } from "./wallet-registration-service.cjs";
1
+ import type { CreateServicePolicyOptions, ServicePolicy } from '@metamask/controller-utils';
2
+ import type { Messenger } from '@metamask/messenger';
3
+ import type { AuthenticationController } from '@metamask/profile-sync-controller';
4
+ import type { AutorampRemoteSnapshot } from './autoramp-types.js';
5
+ import type { NeoBankServiceMethodActions } from './NeoBankService-method-action-types.js';
6
+ import { RampsEnvironment } from './RampsService.js';
7
+ import type { RegistrationOutcome, RegistrationStatus } from './wallet-registration-service.js';
8
8
  /**
9
9
  * Name of the NeoBankService messenger namespace.
10
10
  */
@@ -188,4 +188,4 @@ export declare class NeoBankService {
188
188
  onDegraded(listener: Parameters<ServicePolicy['onDegraded']>[0]): ReturnType<ServicePolicy['onDegraded']>;
189
189
  }
190
190
  export {};
191
- //# sourceMappingURL=NeoBankService.d.cts.map
191
+ //# sourceMappingURL=NeoBankService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeoBankService.d.ts","sourceRoot":"","sources":["../src/NeoBankService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,380 @@
1
+ import { createServicePolicy, handleWhen, HttpError, } from '@metamask/controller-utils';
2
+ import packageJson from '../package.json';
3
+ import { RAMPS_SDK_VERSION, RampsEnvironment } from './RampsService.js';
4
+ import { WalletRegistrationService } from './wallet-registration-service.js';
5
+ /**
6
+ * Name of the NeoBankService messenger namespace.
7
+ */
8
+ export const serviceName = 'NeoBankService';
9
+ /**
10
+ * Determines whether a failed neo-bank request is worth re-issuing.
11
+ *
12
+ * 4xx responses describe the request or the account's state (e.g. 403
13
+ * "Customer is not active", 422 validation), so repeating them only multiplies
14
+ * the same rejection. 429 stays retryable alongside 5xx and non-HTTP
15
+ * network/timeout errors.
16
+ *
17
+ * @param error - Error thrown while performing the request.
18
+ * @returns `true` when the error is worth retrying.
19
+ */
20
+ function isRetryableError(error) {
21
+ if (error instanceof HttpError) {
22
+ if (error.httpStatus === 429) {
23
+ return true;
24
+ }
25
+ return error.httpStatus < 400 || error.httpStatus >= 500;
26
+ }
27
+ return true;
28
+ }
29
+ const MESSENGER_EXPOSED_METHODS = [
30
+ 'getAutoramp',
31
+ 'registerPixAddress',
32
+ 'getAutorampQuote',
33
+ 'createAutoramp',
34
+ 'getAutorampQuoteForAutoramp',
35
+ 'attachAutorampQuote',
36
+ 'getCustomerByExternalId',
37
+ 'getMoonpayCustomerId',
38
+ 'getWalletRegistrationStatus',
39
+ 'registerSelfHostedWallet',
40
+ ];
41
+ /**
42
+ * Builds a path under the neobank-proxy global prefix.
43
+ *
44
+ * Live neobank-proxy (#1124) mounts routes at `/neobank` on the on-ramp.api
45
+ * host (ALB path routing, no rewrite). Prefer this over `/api/v2/...` so Core
46
+ * matches the proxy that ships.
47
+ *
48
+ * @param path - Path under `/neobank` (no leading slash).
49
+ * @returns Absolute path segment for URL join against the Ramp API host.
50
+ */
51
+ function getNeoBankPath(path) {
52
+ return `neobank/${path.replace(/^\//u, '')}`;
53
+ }
54
+ /**
55
+ * Resolves the Ramp API host for neo-bank calls (same hosts as {@link RampsService}).
56
+ *
57
+ * @param environment - Ramp environment.
58
+ * @returns Base URL.
59
+ */
60
+ function getBaseUrl(environment) {
61
+ switch (environment) {
62
+ case RampsEnvironment.Production:
63
+ return 'https://on-ramp.api.cx.metamask.io';
64
+ case RampsEnvironment.Staging:
65
+ return 'https://on-ramp.uat-api.cx.metamask.io';
66
+ case RampsEnvironment.Development:
67
+ return 'https://on-ramp.dev-api.cx.metamask.io';
68
+ case RampsEnvironment.Local:
69
+ return 'http://localhost:3000';
70
+ default:
71
+ throw new Error(`Invalid environment: ${String(environment)}`);
72
+ }
73
+ }
74
+ /**
75
+ * Maps a Ramp API / MoonPay-shaped autoramp response into the local remote snapshot.
76
+ *
77
+ * @param response - Proxy response body.
78
+ * @returns Snapshot for the controller last-seen cursor.
79
+ */
80
+ export function mapNeoBankAutorampToRemoteSnapshot(response) {
81
+ const depositRails = response.deposit_rails;
82
+ const hasDepositRails = Array.isArray(depositRails) && depositRails.length > 0;
83
+ const depositRailsSummary = hasDepositRails || response.status === 'Approved'
84
+ ? {
85
+ ready: response.status === 'Approved' && hasDepositRails,
86
+ }
87
+ : undefined;
88
+ return {
89
+ id: response.id,
90
+ customerId: response.customer_id,
91
+ walletAddress: response.wallet_address !== undefined &&
92
+ response.wallet_address.length > 0
93
+ ? response.wallet_address
94
+ : response.recipient_account?.address,
95
+ status: response.status,
96
+ depositRailsSummary,
97
+ };
98
+ }
99
+ /**
100
+ * Client for MetaMask Ramp API neo-bank endpoints (MoonPay Enterprise proxy).
101
+ *
102
+ * Lives alongside {@link RampsService} and {@link TransakService}. Authentication
103
+ * and MoonPay partner headers are handled by the Ramp API; this service only
104
+ * attaches the MetaMask user bearer token.
105
+ *
106
+ * Paths use the neobank-proxy `/neobank` prefix on the on-ramp.api host.
107
+ */
108
+ export class NeoBankService {
109
+ name;
110
+ #messenger;
111
+ #fetch;
112
+ #policy;
113
+ #noRetryPolicy;
114
+ #environment;
115
+ #context;
116
+ #baseUrlOverride;
117
+ #walletRegistrationService;
118
+ constructor({ messenger, environment = RampsEnvironment.Staging, context, fetch: fetchFunction, policyOptions = {}, baseUrlOverride, }) {
119
+ this.name = serviceName;
120
+ this.#messenger = messenger;
121
+ this.#fetch = fetchFunction;
122
+ this.#policy = createServicePolicy({
123
+ retryFilterPolicy: handleWhen(isRetryableError),
124
+ ...policyOptions,
125
+ });
126
+ this.#noRetryPolicy = createServicePolicy({
127
+ retryFilterPolicy: handleWhen(isRetryableError),
128
+ ...policyOptions,
129
+ maxRetries: 0,
130
+ });
131
+ this.#environment = environment;
132
+ this.#context = context;
133
+ this.#baseUrlOverride = baseUrlOverride;
134
+ this.#messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
135
+ }
136
+ #getBaseUrl() {
137
+ if (this.#baseUrlOverride) {
138
+ return this.#baseUrlOverride;
139
+ }
140
+ return getBaseUrl(this.#environment);
141
+ }
142
+ /**
143
+ * Lazily builds the wallet registration client. Deferred so constructing the
144
+ * service never resolves the base URL eagerly (an invalid environment only
145
+ * throws when a request is made, matching the other neo-bank methods).
146
+ *
147
+ * @returns The wallet registration client.
148
+ */
149
+ #getWalletRegistrationService() {
150
+ this.#walletRegistrationService ??= new WalletRegistrationService({
151
+ fetch: this.#fetch,
152
+ baseUrl: this.#getBaseUrl(),
153
+ getAuthToken: async () => this.#messenger.call('AuthenticationController:getBearerToken'),
154
+ getExternalId: async () => this.#getCanonicalExternalId(),
155
+ });
156
+ return this.#walletRegistrationService;
157
+ }
158
+ async #getRequestHeaders(options = {}) {
159
+ const bearerToken = await this.#messenger.call('AuthenticationController:getBearerToken');
160
+ const headers = {
161
+ Authorization: `Bearer ${bearerToken}`,
162
+ };
163
+ if (options.idempotencyKey) {
164
+ headers['Idempotency-Key'] = options.idempotencyKey;
165
+ }
166
+ return headers;
167
+ }
168
+ #buildUrl(path, query) {
169
+ const url = new URL(getNeoBankPath(path), this.#getBaseUrl());
170
+ url.searchParams.set('sdk', RAMPS_SDK_VERSION);
171
+ url.searchParams.set('controller', packageJson.version);
172
+ url.searchParams.set('context', this.#context);
173
+ if (query) {
174
+ for (const [key, value] of Object.entries(query)) {
175
+ if (value !== undefined && value !== null) {
176
+ url.searchParams.set(key, String(value));
177
+ }
178
+ }
179
+ }
180
+ return url;
181
+ }
182
+ /**
183
+ * Throws an {@link HttpError} that carries the upstream response body.
184
+ *
185
+ * The neobank-proxy mirrors MoonPay's status *and* body verbatim, so the
186
+ * body is usually the only place that explains a 4xx (e.g. which field or
187
+ * permission was rejected). Dropping it makes failures undiagnosable.
188
+ *
189
+ * @param url - Request URL, for context in the message.
190
+ * @param response - Non-OK fetch response.
191
+ */
192
+ async #throwHttpError(url, response) {
193
+ let detail = '';
194
+ try {
195
+ const body = (await response.text()).trim();
196
+ if (body) {
197
+ detail = ` - ${body.slice(0, 500)}`;
198
+ }
199
+ }
200
+ catch {
201
+ // Body already consumed or unreadable; the status alone still helps.
202
+ }
203
+ throw new HttpError(response.status, `Fetching '${url.toString()}' failed with status '${response.status}'${detail}`);
204
+ }
205
+ async #getJson(path, query) {
206
+ const url = this.#buildUrl(path, query);
207
+ return this.#policy.execute(async () => {
208
+ const headers = await this.#getRequestHeaders();
209
+ const fetchResponse = await this.#fetch(url, { headers });
210
+ if (!fetchResponse.ok) {
211
+ await this.#throwHttpError(url, fetchResponse);
212
+ }
213
+ return fetchResponse.json();
214
+ });
215
+ }
216
+ async #postJson(path, body, options) {
217
+ const url = this.#buildUrl(path);
218
+ return this.#noRetryPolicy.execute(async () => {
219
+ const headers = await this.#getRequestHeaders(options);
220
+ headers['Content-Type'] = 'application/json';
221
+ const fetchResponse = await this.#fetch(url, {
222
+ method: 'POST',
223
+ headers,
224
+ body: JSON.stringify(body),
225
+ });
226
+ if (!fetchResponse.ok) {
227
+ await this.#throwHttpError(url, fetchResponse);
228
+ }
229
+ return fetchResponse.json();
230
+ });
231
+ }
232
+ #mapAutorampResponse(response) {
233
+ if (!response || typeof response !== 'object' || !response.id) {
234
+ throw new Error('Malformed response received from neo-bank autoramp API');
235
+ }
236
+ return mapNeoBankAutorampToRemoteSnapshot(response);
237
+ }
238
+ /**
239
+ * Fetches an autoramp account via neobank-proxy
240
+ * `GET /neobank/autoramps/{autoramp_id}` (MoonPay
241
+ * `GET /api/autoramps/{autoramp_id}`).
242
+ *
243
+ * @param autorampId - MoonPay / Ramp API autoramp id.
244
+ * @returns Remote snapshot for controller apply/refresh.
245
+ */
246
+ async getAutoramp(autorampId) {
247
+ const response = await this.#getJson(`autoramps/${encodeURIComponent(autorampId)}`);
248
+ return this.#mapAutorampResponse(response);
249
+ }
250
+ /**
251
+ * Registers a Pix address via neobank-proxy `POST /neobank/addresses/pix`.
252
+ * Body is forwarded as opaque JSON (MoonPay address schema).
253
+ *
254
+ * @param body - Pix address registration payload.
255
+ * @param options - Optional idempotency key.
256
+ * @returns Parsed proxy JSON response.
257
+ */
258
+ async registerPixAddress(body, options = {}) {
259
+ return this.#postJson('addresses/pix', body, options);
260
+ }
261
+ /**
262
+ * Fetches an autoramp quote via neobank-proxy `GET /neobank/autoramps/quote`.
263
+ *
264
+ * @param query - Quote query params (forwarded as-is).
265
+ * @returns Parsed proxy JSON response.
266
+ */
267
+ async getAutorampQuote(query = {}) {
268
+ return this.#getJson('autoramps/quote', query);
269
+ }
270
+ /**
271
+ * Creates an autoramp from a signed quote via neobank-proxy
272
+ * `POST /neobank/autoramps` (MoonPay `POST /api/autoramps`).
273
+ *
274
+ * @param body - CreateAutoramp / signed-quote payload (forwarded as-is).
275
+ * @param options - Optional idempotency key.
276
+ * @returns Remote snapshot for controller apply/refresh.
277
+ */
278
+ async createAutoramp(body, options = {}) {
279
+ const response = await this.#postJson('autoramps', body, options);
280
+ return this.#mapAutorampResponse(response);
281
+ }
282
+ /**
283
+ * Fetches a quote for an existing autoramp via neobank-proxy
284
+ * `GET /neobank/autoramps/{autoramp_id}/quote`.
285
+ *
286
+ * @param autorampId - Autoramp id.
287
+ * @param query - Quote query params (forwarded as-is).
288
+ * @returns Parsed proxy JSON response.
289
+ */
290
+ async getAutorampQuoteForAutoramp(autorampId, query = {}) {
291
+ return this.#getJson(`autoramps/${encodeURIComponent(autorampId)}/quote`, query);
292
+ }
293
+ /**
294
+ * Attaches a signed quote to an autoramp via neobank-proxy
295
+ * `POST /neobank/autoramps/{autoramp_id}/quotes`.
296
+ *
297
+ * @param autorampId - Autoramp id.
298
+ * @param body - Quote attachment payload (forwarded as-is).
299
+ * @param options - Optional idempotency key.
300
+ * @returns Parsed proxy JSON response.
301
+ */
302
+ async attachAutorampQuote(autorampId, body, options = {}) {
303
+ return this.#postJson(`autoramps/${encodeURIComponent(autorampId)}/quotes`, body, options);
304
+ }
305
+ /**
306
+ * Fetches a customer by partner external id via neobank-proxy
307
+ * `GET /neobank/customers/{external_id}/external`.
308
+ *
309
+ * @param externalId - Partner-assigned external customer id.
310
+ * @returns Parsed proxy JSON response.
311
+ */
312
+ async getCustomerByExternalId(externalId) {
313
+ return this.#getJson(`customers/${encodeURIComponent(externalId)}/external`);
314
+ }
315
+ /**
316
+ * Resolves Iron's internal customer id via neobank-proxy customer lookup,
317
+ * using the MetaMask canonical profile id as the partner `external_id`.
318
+ *
319
+ * @returns Iron's internal customer id.
320
+ */
321
+ async getMoonpayCustomerId() {
322
+ return await this.#getWalletRegistrationService().getMoonpayCustomerId();
323
+ }
324
+ /**
325
+ * Checks whether a Monad Money Account address is already registered for the
326
+ * given Iron customer.
327
+ *
328
+ * @param params - Customer id and address to check.
329
+ * @param params.customerId - Iron / MoonPay customer UUID.
330
+ * @param params.address - Money Account address.
331
+ * @returns Active, disabled, or absent registration status.
332
+ */
333
+ async getWalletRegistrationStatus({ customerId, address, }) {
334
+ return await this.#getWalletRegistrationService().getRegistrationStatus({
335
+ customerId,
336
+ address,
337
+ blockchain: 'Monad',
338
+ });
339
+ }
340
+ /**
341
+ * Submits a signed Monad Money Account ownership proof via neobank-proxy
342
+ * `POST /neobank/addresses/crypto/selfhosted`.
343
+ *
344
+ * @param params - Signed ownership proof.
345
+ * @returns Registered wallet record.
346
+ */
347
+ async registerSelfHostedWallet(params) {
348
+ return await this.#getWalletRegistrationService().registerSelfHostedWallet({
349
+ ...params,
350
+ blockchain: 'Monad',
351
+ });
352
+ }
353
+ /**
354
+ * Resolves the MetaMask canonical profile id used as MoonPay's partner
355
+ * `external_id` for neobank customer lookup.
356
+ *
357
+ * @returns Canonical profile id.
358
+ */
359
+ async #getCanonicalExternalId() {
360
+ const profile = await this.#messenger.call('AuthenticationController:getSessionProfile');
361
+ const canonical = profile?.canonicalProfileId;
362
+ const externalId = typeof canonical === 'string' && canonical.length > 0
363
+ ? canonical
364
+ : profile?.profileId;
365
+ if (typeof externalId !== 'string' || externalId.length === 0) {
366
+ throw new Error('Unable to resolve MetaMask canonical profile id for MoonPay customer lookup');
367
+ }
368
+ return externalId;
369
+ }
370
+ onRetry(listener) {
371
+ return this.#policy.onRetry(listener);
372
+ }
373
+ onBreak(listener) {
374
+ return this.#policy.onBreak(listener);
375
+ }
376
+ onDegraded(listener) {
377
+ return this.#policy.onDegraded(listener);
378
+ }
379
+ }
380
+ //# sourceMappingURL=NeoBankService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NeoBankService.js","sourceRoot":"","sources":["../src/NeoBankService.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CreateServicePolicyOptions,\n ServicePolicy,\n} from '@metamask/controller-utils';\nimport {\n createServicePolicy,\n handleWhen,\n HttpError,\n} from '@metamask/controller-utils';\nimport type { Messenger } from '@metamask/messenger';\nimport type { AuthenticationController } from '@metamask/profile-sync-controller';\n\nimport packageJson from '../package.json';\nimport type {\n AutorampDepositRailsSummary,\n AutorampRemoteSnapshot,\n} from './autoramp-types.js';\nimport type { NeoBankServiceMethodActions } from './NeoBankService-method-action-types.js';\nimport { RAMPS_SDK_VERSION, RampsEnvironment } from './RampsService.js';\nimport { WalletRegistrationService } from './wallet-registration-service.js';\nimport type {\n RegistrationOutcome,\n RegistrationStatus,\n} from './wallet-registration-service.js';\n\n/**\n * Name of the NeoBankService messenger namespace.\n */\nexport const serviceName = 'NeoBankService';\n\n/**\n * Determines whether a failed neo-bank request is worth re-issuing.\n *\n * 4xx responses describe the request or the account's state (e.g. 403\n * \"Customer is not active\", 422 validation), so repeating them only multiplies\n * the same rejection. 429 stays retryable alongside 5xx and non-HTTP\n * network/timeout errors.\n *\n * @param error - Error thrown while performing the request.\n * @returns `true` when the error is worth retrying.\n */\nfunction isRetryableError(error: unknown): boolean {\n if (error instanceof HttpError) {\n if (error.httpStatus === 429) {\n return true;\n }\n return error.httpStatus < 400 || error.httpStatus >= 500;\n }\n return true;\n}\n\n/**\n * Raw autoramp payload from the MetaMask Ramp API neo-bank proxy.\n * Shape mirrors MoonPay Enterprise `GET /api/autoramps/{autoramp_id}`.\n * The Ramp API handles partner auth / headers; the client only sends the\n * MetaMask bearer token.\n */\nexport type NeoBankAutorampResponse = {\n id: string;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- MoonPay API field\n customer_id?: string;\n status: string;\n /**\n * Destination wallet when present on the proxy response.\n * Field name may evolve with the Ramp API contract.\n */\n // eslint-disable-next-line @typescript-eslint/naming-convention -- MoonPay API field\n wallet_address?: string;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- MoonPay API field\n recipient_account?: {\n address?: string;\n };\n // eslint-disable-next-line @typescript-eslint/naming-convention -- MoonPay API field\n deposit_rails?: unknown[];\n};\n\n/**\n * Optional headers for neo-bank mutating requests.\n */\nexport type NeoBankRequestOptions = {\n /**\n * Forwarded as `Idempotency-Key` when set (MoonPay requires it on some POSTs;\n * neobank-proxy generates one when omitted).\n */\n idempotencyKey?: string;\n};\n\n/**\n * Query string values accepted by neo-bank GET helpers.\n */\nexport type NeoBankQueryParams = Record<\n string,\n string | number | boolean | undefined | null\n>;\n\nexport type GetWalletRegistrationStatusParams = {\n customerId: string;\n address: string;\n};\n\nexport type RegisterSelfHostedWalletParams = {\n customerId: string;\n address: string;\n message: string;\n signature: string;\n /**\n * Forwarded as `Idempotency-Key` on the neobank-proxy POST. Prefer a stable\n * key across retries of the same ownership body.\n */\n idempotencyKey?: string;\n};\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'getAutoramp',\n 'registerPixAddress',\n 'getAutorampQuote',\n 'createAutoramp',\n 'getAutorampQuoteForAutoramp',\n 'attachAutorampQuote',\n 'getCustomerByExternalId',\n 'getMoonpayCustomerId',\n 'getWalletRegistrationStatus',\n 'registerSelfHostedWallet',\n] as const;\n\n/**\n * Actions that {@link NeoBankService} exposes to other consumers.\n */\nexport type NeoBankServiceActions = NeoBankServiceMethodActions;\n\ntype AllowedActions =\n | AuthenticationController.AuthenticationControllerGetBearerTokenAction\n | AuthenticationController.AuthenticationControllerGetSessionProfileAction;\n\nexport type NeoBankServiceEvents = never;\n\ntype AllowedEvents = never;\n\n/**\n * The messenger restricted to actions and events accessed by\n * {@link NeoBankService}.\n */\nexport type NeoBankServiceMessenger = Messenger<\n typeof serviceName,\n NeoBankServiceActions | AllowedActions,\n NeoBankServiceEvents | AllowedEvents\n>;\n\n/**\n * Builds a path under the neobank-proxy global prefix.\n *\n * Live neobank-proxy (#1124) mounts routes at `/neobank` on the on-ramp.api\n * host (ALB path routing, no rewrite). Prefer this over `/api/v2/...` so Core\n * matches the proxy that ships.\n *\n * @param path - Path under `/neobank` (no leading slash).\n * @returns Absolute path segment for URL join against the Ramp API host.\n */\nfunction getNeoBankPath(path: string): string {\n return `neobank/${path.replace(/^\\//u, '')}`;\n}\n\n/**\n * Resolves the Ramp API host for neo-bank calls (same hosts as {@link RampsService}).\n *\n * @param environment - Ramp environment.\n * @returns Base URL.\n */\nfunction getBaseUrl(environment: RampsEnvironment): string {\n switch (environment) {\n case RampsEnvironment.Production:\n return 'https://on-ramp.api.cx.metamask.io';\n case RampsEnvironment.Staging:\n return 'https://on-ramp.uat-api.cx.metamask.io';\n case RampsEnvironment.Development:\n return 'https://on-ramp.dev-api.cx.metamask.io';\n case RampsEnvironment.Local:\n return 'http://localhost:3000';\n default:\n throw new Error(`Invalid environment: ${String(environment)}`);\n }\n}\n\n/**\n * Maps a Ramp API / MoonPay-shaped autoramp response into the local remote snapshot.\n *\n * @param response - Proxy response body.\n * @returns Snapshot for the controller last-seen cursor.\n */\nexport function mapNeoBankAutorampToRemoteSnapshot(\n response: NeoBankAutorampResponse,\n): AutorampRemoteSnapshot {\n const depositRails = response.deposit_rails;\n const hasDepositRails =\n Array.isArray(depositRails) && depositRails.length > 0;\n const depositRailsSummary: AutorampDepositRailsSummary | undefined =\n hasDepositRails || response.status === 'Approved'\n ? {\n ready: response.status === 'Approved' && hasDepositRails,\n }\n : undefined;\n\n return {\n id: response.id,\n customerId: response.customer_id,\n walletAddress:\n response.wallet_address !== undefined &&\n response.wallet_address.length > 0\n ? response.wallet_address\n : response.recipient_account?.address,\n status: response.status,\n depositRailsSummary,\n };\n}\n\n/**\n * Client for MetaMask Ramp API neo-bank endpoints (MoonPay Enterprise proxy).\n *\n * Lives alongside {@link RampsService} and {@link TransakService}. Authentication\n * and MoonPay partner headers are handled by the Ramp API; this service only\n * attaches the MetaMask user bearer token.\n *\n * Paths use the neobank-proxy `/neobank` prefix on the on-ramp.api host.\n */\nexport class NeoBankService {\n readonly name: typeof serviceName;\n\n readonly #messenger: NeoBankServiceMessenger;\n\n readonly #fetch: typeof fetch;\n\n readonly #policy: ServicePolicy;\n\n readonly #noRetryPolicy: ServicePolicy;\n\n readonly #environment: RampsEnvironment;\n\n readonly #context: string;\n\n readonly #baseUrlOverride?: string;\n\n #walletRegistrationService: WalletRegistrationService | undefined;\n\n constructor({\n messenger,\n environment = RampsEnvironment.Staging,\n context,\n fetch: fetchFunction,\n policyOptions = {},\n baseUrlOverride,\n }: {\n messenger: NeoBankServiceMessenger;\n environment?: RampsEnvironment;\n context: string;\n fetch: typeof fetch;\n policyOptions?: CreateServicePolicyOptions;\n baseUrlOverride?: string;\n }) {\n this.name = serviceName;\n this.#messenger = messenger;\n this.#fetch = fetchFunction;\n this.#policy = createServicePolicy({\n retryFilterPolicy: handleWhen(isRetryableError),\n ...policyOptions,\n });\n this.#noRetryPolicy = createServicePolicy({\n retryFilterPolicy: handleWhen(isRetryableError),\n ...policyOptions,\n maxRetries: 0,\n });\n this.#environment = environment;\n this.#context = context;\n this.#baseUrlOverride = baseUrlOverride;\n\n this.#messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n }\n\n #getBaseUrl(): string {\n if (this.#baseUrlOverride) {\n return this.#baseUrlOverride;\n }\n return getBaseUrl(this.#environment);\n }\n\n /**\n * Lazily builds the wallet registration client. Deferred so constructing the\n * service never resolves the base URL eagerly (an invalid environment only\n * throws when a request is made, matching the other neo-bank methods).\n *\n * @returns The wallet registration client.\n */\n #getWalletRegistrationService(): WalletRegistrationService {\n this.#walletRegistrationService ??= new WalletRegistrationService({\n fetch: this.#fetch,\n baseUrl: this.#getBaseUrl(),\n getAuthToken: async (): Promise<string> =>\n this.#messenger.call('AuthenticationController:getBearerToken'),\n getExternalId: async (): Promise<string> =>\n this.#getCanonicalExternalId(),\n });\n return this.#walletRegistrationService;\n }\n\n async #getRequestHeaders(\n options: NeoBankRequestOptions = {},\n ): Promise<Record<string, string>> {\n const bearerToken = await this.#messenger.call(\n 'AuthenticationController:getBearerToken',\n );\n const headers: Record<string, string> = {\n Authorization: `Bearer ${bearerToken}`,\n };\n if (options.idempotencyKey) {\n headers['Idempotency-Key'] = options.idempotencyKey;\n }\n return headers;\n }\n\n #buildUrl(path: string, query?: NeoBankQueryParams): URL {\n const url = new URL(getNeoBankPath(path), this.#getBaseUrl());\n url.searchParams.set('sdk', RAMPS_SDK_VERSION);\n url.searchParams.set('controller', packageJson.version);\n url.searchParams.set('context', this.#context);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url;\n }\n\n /**\n * Throws an {@link HttpError} that carries the upstream response body.\n *\n * The neobank-proxy mirrors MoonPay's status *and* body verbatim, so the\n * body is usually the only place that explains a 4xx (e.g. which field or\n * permission was rejected). Dropping it makes failures undiagnosable.\n *\n * @param url - Request URL, for context in the message.\n * @param response - Non-OK fetch response.\n */\n async #throwHttpError(url: URL, response: Response): Promise<never> {\n let detail = '';\n try {\n const body = (await response.text()).trim();\n if (body) {\n detail = ` - ${body.slice(0, 500)}`;\n }\n } catch {\n // Body already consumed or unreadable; the status alone still helps.\n }\n throw new HttpError(\n response.status,\n `Fetching '${url.toString()}' failed with status '${response.status}'${detail}`,\n );\n }\n\n async #getJson<ResponseBody>(\n path: string,\n query?: NeoBankQueryParams,\n ): Promise<ResponseBody> {\n const url = this.#buildUrl(path, query);\n return this.#policy.execute(async () => {\n const headers = await this.#getRequestHeaders();\n const fetchResponse = await this.#fetch(url, { headers });\n if (!fetchResponse.ok) {\n await this.#throwHttpError(url, fetchResponse);\n }\n return fetchResponse.json() as Promise<ResponseBody>;\n });\n }\n\n async #postJson<ResponseBody>(\n path: string,\n body: Record<string, unknown>,\n options: NeoBankRequestOptions,\n ): Promise<ResponseBody> {\n const url = this.#buildUrl(path);\n return this.#noRetryPolicy.execute(async () => {\n const headers = await this.#getRequestHeaders(options);\n headers['Content-Type'] = 'application/json';\n const fetchResponse = await this.#fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n });\n if (!fetchResponse.ok) {\n await this.#throwHttpError(url, fetchResponse);\n }\n return fetchResponse.json() as Promise<ResponseBody>;\n });\n }\n\n #mapAutorampResponse(\n response: NeoBankAutorampResponse,\n ): AutorampRemoteSnapshot {\n if (!response || typeof response !== 'object' || !response.id) {\n throw new Error('Malformed response received from neo-bank autoramp API');\n }\n return mapNeoBankAutorampToRemoteSnapshot(response);\n }\n\n /**\n * Fetches an autoramp account via neobank-proxy\n * `GET /neobank/autoramps/{autoramp_id}` (MoonPay\n * `GET /api/autoramps/{autoramp_id}`).\n *\n * @param autorampId - MoonPay / Ramp API autoramp id.\n * @returns Remote snapshot for controller apply/refresh.\n */\n async getAutoramp(autorampId: string): Promise<AutorampRemoteSnapshot> {\n const response = await this.#getJson<NeoBankAutorampResponse>(\n `autoramps/${encodeURIComponent(autorampId)}`,\n );\n return this.#mapAutorampResponse(response);\n }\n\n /**\n * Registers a Pix address via neobank-proxy `POST /neobank/addresses/pix`.\n * Body is forwarded as opaque JSON (MoonPay address schema).\n *\n * @param body - Pix address registration payload.\n * @param options - Optional idempotency key.\n * @returns Parsed proxy JSON response.\n */\n async registerPixAddress(\n body: Record<string, unknown>,\n options: NeoBankRequestOptions = {},\n ): Promise<unknown> {\n return this.#postJson('addresses/pix', body, options);\n }\n\n /**\n * Fetches an autoramp quote via neobank-proxy `GET /neobank/autoramps/quote`.\n *\n * @param query - Quote query params (forwarded as-is).\n * @returns Parsed proxy JSON response.\n */\n async getAutorampQuote(query: NeoBankQueryParams = {}): Promise<unknown> {\n return this.#getJson('autoramps/quote', query);\n }\n\n /**\n * Creates an autoramp from a signed quote via neobank-proxy\n * `POST /neobank/autoramps` (MoonPay `POST /api/autoramps`).\n *\n * @param body - CreateAutoramp / signed-quote payload (forwarded as-is).\n * @param options - Optional idempotency key.\n * @returns Remote snapshot for controller apply/refresh.\n */\n async createAutoramp(\n body: Record<string, unknown>,\n options: NeoBankRequestOptions = {},\n ): Promise<AutorampRemoteSnapshot> {\n const response = await this.#postJson<NeoBankAutorampResponse>(\n 'autoramps',\n body,\n options,\n );\n return this.#mapAutorampResponse(response);\n }\n\n /**\n * Fetches a quote for an existing autoramp via neobank-proxy\n * `GET /neobank/autoramps/{autoramp_id}/quote`.\n *\n * @param autorampId - Autoramp id.\n * @param query - Quote query params (forwarded as-is).\n * @returns Parsed proxy JSON response.\n */\n async getAutorampQuoteForAutoramp(\n autorampId: string,\n query: NeoBankQueryParams = {},\n ): Promise<unknown> {\n return this.#getJson(\n `autoramps/${encodeURIComponent(autorampId)}/quote`,\n query,\n );\n }\n\n /**\n * Attaches a signed quote to an autoramp via neobank-proxy\n * `POST /neobank/autoramps/{autoramp_id}/quotes`.\n *\n * @param autorampId - Autoramp id.\n * @param body - Quote attachment payload (forwarded as-is).\n * @param options - Optional idempotency key.\n * @returns Parsed proxy JSON response.\n */\n async attachAutorampQuote(\n autorampId: string,\n body: Record<string, unknown>,\n options: NeoBankRequestOptions = {},\n ): Promise<unknown> {\n return this.#postJson(\n `autoramps/${encodeURIComponent(autorampId)}/quotes`,\n body,\n options,\n );\n }\n\n /**\n * Fetches a customer by partner external id via neobank-proxy\n * `GET /neobank/customers/{external_id}/external`.\n *\n * @param externalId - Partner-assigned external customer id.\n * @returns Parsed proxy JSON response.\n */\n async getCustomerByExternalId(externalId: string): Promise<unknown> {\n return this.#getJson(\n `customers/${encodeURIComponent(externalId)}/external`,\n );\n }\n\n /**\n * Resolves Iron's internal customer id via neobank-proxy customer lookup,\n * using the MetaMask canonical profile id as the partner `external_id`.\n *\n * @returns Iron's internal customer id.\n */\n async getMoonpayCustomerId(): Promise<string> {\n return await this.#getWalletRegistrationService().getMoonpayCustomerId();\n }\n\n /**\n * Checks whether a Monad Money Account address is already registered for the\n * given Iron customer.\n *\n * @param params - Customer id and address to check.\n * @param params.customerId - Iron / MoonPay customer UUID.\n * @param params.address - Money Account address.\n * @returns Active, disabled, or absent registration status.\n */\n async getWalletRegistrationStatus({\n customerId,\n address,\n }: GetWalletRegistrationStatusParams): Promise<RegistrationStatus> {\n return await this.#getWalletRegistrationService().getRegistrationStatus({\n customerId,\n address,\n blockchain: 'Monad',\n });\n }\n\n /**\n * Submits a signed Monad Money Account ownership proof via neobank-proxy\n * `POST /neobank/addresses/crypto/selfhosted`.\n *\n * @param params - Signed ownership proof.\n * @returns Registered wallet record.\n */\n async registerSelfHostedWallet(\n params: RegisterSelfHostedWalletParams,\n ): Promise<RegistrationOutcome> {\n return await this.#getWalletRegistrationService().registerSelfHostedWallet({\n ...params,\n blockchain: 'Monad',\n });\n }\n\n /**\n * Resolves the MetaMask canonical profile id used as MoonPay's partner\n * `external_id` for neobank customer lookup.\n *\n * @returns Canonical profile id.\n */\n async #getCanonicalExternalId(): Promise<string> {\n const profile = await this.#messenger.call(\n 'AuthenticationController:getSessionProfile',\n );\n const canonical = profile?.canonicalProfileId;\n const externalId =\n typeof canonical === 'string' && canonical.length > 0\n ? canonical\n : profile?.profileId;\n if (typeof externalId !== 'string' || externalId.length === 0) {\n throw new Error(\n 'Unable to resolve MetaMask canonical profile id for MoonPay customer lookup',\n );\n }\n return externalId;\n }\n\n onRetry(\n listener: Parameters<ServicePolicy['onRetry']>[0],\n ): ReturnType<ServicePolicy['onRetry']> {\n return this.#policy.onRetry(listener);\n }\n\n onBreak(\n listener: Parameters<ServicePolicy['onBreak']>[0],\n ): ReturnType<ServicePolicy['onBreak']> {\n return this.#policy.onBreak(listener);\n }\n\n onDegraded(\n listener: Parameters<ServicePolicy['onDegraded']>[0],\n ): ReturnType<ServicePolicy['onDegraded']> {\n return this.#policy.onDegraded(listener);\n }\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  * This file is auto generated.
3
3
  * Do not edit manually.
4
4
  */
5
- import type { RampsController } from "./RampsController.mjs";
5
+ import type { RampsController } from './RampsController.js';
6
6
  /**
7
7
  * Executes a request with caching, deduplication, and at most one in-flight
8
8
  * request per resource type.
@@ -289,6 +289,8 @@ export type RampsControllerGetQuotesAction = {
289
289
  * If an order with the same internal order code already exists, the incoming
290
290
  * fields are merged on top of the existing order so that fields not present
291
291
  * in the update (e.g. paymentDetails from the Transak API) are preserved.
292
+ * Unchanged syncable payloads (including unchanged poll results) are ignored
293
+ * so `lastUpdatedAt` is not bumped and User Storage is not rewritten.
292
294
  *
293
295
  * @param order - The RampsOrder to add or update.
294
296
  */
@@ -305,6 +307,19 @@ export type RampsControllerRemoveOrderAction = {
305
307
  type: `RampsController:removeOrder`;
306
308
  handler: RampsController['removeOrder'];
307
309
  };
310
+ /**
311
+ * Bidirectionally syncs V2 ramps orders with User Storage.
312
+ * Hosts should call this on unlock / when ramps syncing is enabled.
313
+ *
314
+ * Overlapping calls are coalesced into the in-flight worker. After the worker
315
+ * settles, this method loops when `#orderSyncQueued` is still set so a
316
+ * request that arrived between the worker's last loop check and promise
317
+ * resolution is not dropped.
318
+ */
319
+ export type RampsControllerSyncOrdersWithUserStorageAction = {
320
+ type: `RampsController:syncOrdersWithUserStorage`;
321
+ handler: RampsController['syncOrdersWithUserStorage'];
322
+ };
308
323
  /**
309
324
  * Adds or updates a local autoramp last-seen cursor (e.g. after create).
310
325
  *
@@ -754,5 +769,5 @@ export type RampsControllerTransakGetActiveOrdersAction = {
754
769
  /**
755
770
  * Union of all RampsController action types.
756
771
  */
757
- export type RampsControllerMethodActions = RampsControllerExecuteRequestAction | RampsControllerAbortRequestAction | RampsControllerGetRequestStateAction | RampsControllerSetUserRegionAction | RampsControllerSetSelectedProviderAction | RampsControllerSetSelectedProviderForAssetAction | RampsControllerInitAction | RampsControllerGetCountriesAction | RampsControllerGetTokensAction | RampsControllerSetSelectedTokenAction | RampsControllerGetProvidersAction | RampsControllerGetPaymentMethodsAction | RampsControllerGetPaymentMethodsForContextAction | RampsControllerSetSelectedPaymentMethodAction | RampsControllerGetQuotesAction | RampsControllerAddOrderAction | RampsControllerRemoveOrderAction | RampsControllerAddAutorampAction | RampsControllerCreateAutorampAction | RampsControllerRegisterMoneyAccountWalletAction | RampsControllerRemoveAutorampAction | RampsControllerMarkAutorampAsNotifiedAction | RampsControllerApplyAutorampStatusFromPushAction | RampsControllerRefreshAutorampAction | RampsControllerRefreshAutorampsAction | RampsControllerStartOrderPollingAction | RampsControllerStopOrderPollingAction | RampsControllerGetBuyWidgetDataAction | RampsControllerAddPrecreatedOrderAction | RampsControllerGetOrderAction | RampsControllerGetOrderFromCallbackAction | RampsControllerTransakSetApiKeyAction | RampsControllerTransakSetAccessTokenAction | RampsControllerTransakClearAccessTokenAction | RampsControllerTransakSetAuthenticatedAction | RampsControllerTransakResetStateAction | RampsControllerTransakSendUserOtpAction | RampsControllerTransakVerifyUserOtpAction | RampsControllerTransakLogoutAction | RampsControllerTransakGetUserDetailsAction | RampsControllerTransakGetBuyQuoteAction | RampsControllerTransakGetKycRequirementAction | RampsControllerTransakGetAdditionalRequirementsAction | RampsControllerTransakCreateOrderAction | RampsControllerTransakGetOrderAction | RampsControllerTransakGetUserLimitsAction | RampsControllerTransakRequestOttAction | RampsControllerTransakGeneratePaymentWidgetUrlAction | RampsControllerTransakCreateWidgetUrlAction | RampsControllerTransakSubmitPurposeOfUsageFormAction | RampsControllerTransakPatchUserAction | RampsControllerTransakSubmitSsnDetailsAction | RampsControllerTransakConfirmPaymentAction | RampsControllerTransakGetTranslationAction | RampsControllerTransakGetIdProofStatusAction | RampsControllerTransakCancelOrderAction | RampsControllerTransakCancelAllActiveOrdersAction | RampsControllerTransakGetActiveOrdersAction;
758
- //# sourceMappingURL=RampsController-method-action-types.d.mts.map
772
+ export type RampsControllerMethodActions = RampsControllerExecuteRequestAction | RampsControllerAbortRequestAction | RampsControllerGetRequestStateAction | RampsControllerSetUserRegionAction | RampsControllerSetSelectedProviderAction | RampsControllerSetSelectedProviderForAssetAction | RampsControllerInitAction | RampsControllerGetCountriesAction | RampsControllerGetTokensAction | RampsControllerSetSelectedTokenAction | RampsControllerGetProvidersAction | RampsControllerGetPaymentMethodsAction | RampsControllerGetPaymentMethodsForContextAction | RampsControllerSetSelectedPaymentMethodAction | RampsControllerGetQuotesAction | RampsControllerAddOrderAction | RampsControllerRemoveOrderAction | RampsControllerSyncOrdersWithUserStorageAction | RampsControllerAddAutorampAction | RampsControllerCreateAutorampAction | RampsControllerRegisterMoneyAccountWalletAction | RampsControllerRemoveAutorampAction | RampsControllerMarkAutorampAsNotifiedAction | RampsControllerApplyAutorampStatusFromPushAction | RampsControllerRefreshAutorampAction | RampsControllerRefreshAutorampsAction | RampsControllerStartOrderPollingAction | RampsControllerStopOrderPollingAction | RampsControllerGetBuyWidgetDataAction | RampsControllerAddPrecreatedOrderAction | RampsControllerGetOrderAction | RampsControllerGetOrderFromCallbackAction | RampsControllerTransakSetApiKeyAction | RampsControllerTransakSetAccessTokenAction | RampsControllerTransakClearAccessTokenAction | RampsControllerTransakSetAuthenticatedAction | RampsControllerTransakResetStateAction | RampsControllerTransakSendUserOtpAction | RampsControllerTransakVerifyUserOtpAction | RampsControllerTransakLogoutAction | RampsControllerTransakGetUserDetailsAction | RampsControllerTransakGetBuyQuoteAction | RampsControllerTransakGetKycRequirementAction | RampsControllerTransakGetAdditionalRequirementsAction | RampsControllerTransakCreateOrderAction | RampsControllerTransakGetOrderAction | RampsControllerTransakGetUserLimitsAction | RampsControllerTransakRequestOttAction | RampsControllerTransakGeneratePaymentWidgetUrlAction | RampsControllerTransakCreateWidgetUrlAction | RampsControllerTransakSubmitPurposeOfUsageFormAction | RampsControllerTransakPatchUserAction | RampsControllerTransakSubmitSsnDetailsAction | RampsControllerTransakConfirmPaymentAction | RampsControllerTransakGetTranslationAction | RampsControllerTransakGetIdProofStatusAction | RampsControllerTransakCancelOrderAction | RampsControllerTransakCancelAllActiveOrdersAction | RampsControllerTransakGetActiveOrdersAction;
773
+ //# sourceMappingURL=RampsController-method-action-types.d.ts.map