@metamask-previews/ramps-controller 28.0.0-preview-bc2a298b8 → 28.0.0-preview-35f016caa
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.
- package/CHANGELOG.md +0 -22
- package/dist/NeoBankService-method-action-types.d.ts +1 -20
- package/dist/NeoBankService-method-action-types.d.ts.map +1 -1
- package/dist/NeoBankService-method-action-types.js.map +1 -1
- package/dist/NeoBankService.d.ts +13 -57
- package/dist/NeoBankService.d.ts.map +1 -1
- package/dist/NeoBankService.js +103 -232
- package/dist/NeoBankService.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,28 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
### Added
|
|
11
|
-
|
|
12
|
-
- Add `NeoBankServiceInvalidateQueriesAction`, `NeoBankServiceCacheUpdatedEvent` and `NeoBankServiceGranularCacheUpdatedEvent`, also included in `NeoBankServiceActions` and `NeoBankServiceEvents` ([#10882](https://github.com/MetaMask/core/pull/10882))
|
|
13
|
-
- Add `NeoBankService.getMicrodeposits`, exposed on the messenger, which returns the customer's bank-link microdeposits from neobank-proxy unmodified, and the `NeoBankMicrodeposit` type ([#11165](https://github.com/MetaMask/core/pull/11165))
|
|
14
|
-
- The MoonPay customer id is resolved once per service instance. A 404 resolves `[]`; any other non-2xx response throws an `HttpError`.
|
|
15
|
-
|
|
16
|
-
### Changed
|
|
17
|
-
|
|
18
|
-
- **BREAKING:** `NeoBankService` now extends `BaseDataService` from `@metamask/base-data-service` ([#10882](https://github.com/MetaMask/core/pull/10882))
|
|
19
|
-
- `NeoBankServiceMessenger` now includes the `NeoBankService:invalidateQueries` action and `NeoBankService:cacheUpdated` events. Messengers built from `NeoBankServiceActions` / `NeoBankServiceEvents` pick these up automatically.
|
|
20
|
-
- Reads and writes now share one circuit breaker (previously each had its own).
|
|
21
|
-
- `NeoBankService.getAutorampQuote`, `getAutorampQuoteForAutoramp`, `getCustomerByExternalId`, `registerPixAddress` and `attachAutorampQuote` now return `Promise<Json>` instead of `Promise<unknown>` ([#10882](https://github.com/MetaMask/core/pull/10882))
|
|
22
|
-
- Concurrent identical NeoBank reads (`getAutoramp`, `getAutoramps`, `getPixDepositInstructions`, `getDepositInstructions`, `getMicrodeposits`, `listAutorampTransactions`, `getAutorampQuote`, `getAutorampQuoteForAutoramp`, `getCustomerByExternalId`) now share one request. Sequential reads still always hit the API ([#10882](https://github.com/MetaMask/core/pull/10882))
|
|
23
|
-
- `getAutoramps` fetches each cursor page as its own query, so a failed page is retried on its own and concurrent calls with the same `customerId` share each page request.
|
|
24
|
-
- Malformed NeoBank responses now throw `Query function for "NeoBankService:<method>" returned an unexpected response: …` (or `Mutation function for "NeoBankService:createAutoramp" …`) instead of `Malformed response received from neo-bank …` ([#10882](https://github.com/MetaMask/core/pull/10882))
|
|
25
|
-
- This applies to `getAutoramp`, `getAutoramps`, `getPixDepositInstructions`, `getDepositInstructions`, `getMicrodeposits`, `listAutorampTransactions` and `createAutoramp`. Responses that do not match the expected shape are still not retried.
|
|
26
|
-
- Add dependencies `@metamask/base-data-service` and `@metamask/superstruct` ([#10882](https://github.com/MetaMask/core/pull/10882))
|
|
27
|
-
|
|
28
|
-
### Removed
|
|
29
|
-
|
|
30
|
-
- **BREAKING:** Remove `onRetry`, `onBreak` and `onDegraded` from `NeoBankService` ([#10882](https://github.com/MetaMask/core/pull/10882))
|
|
31
|
-
|
|
32
10
|
## [28.0.0]
|
|
33
11
|
|
|
34
12
|
### Added
|
|
@@ -157,25 +157,6 @@ export type NeoBankServiceGetMoonpayCustomerIdAction = {
|
|
|
157
157
|
type: `NeoBankService:getMoonpayCustomerId`;
|
|
158
158
|
handler: NeoBankService['getMoonpayCustomerId'];
|
|
159
159
|
};
|
|
160
|
-
/**
|
|
161
|
-
* Lists the customer's bank-link microdeposits via neobank-proxy
|
|
162
|
-
* `GET /neobank/customers/{customer_id}/microdeposits` (MoonPay
|
|
163
|
-
* `GET /api/customers/{id}/microdeposits`).
|
|
164
|
-
*
|
|
165
|
-
* The customer id is resolved through {@link getMoonpayCustomerId} at most
|
|
166
|
-
* once per service instance; concurrent callers share the in-flight lookup
|
|
167
|
-
* and a failed lookup is retried by the next call. A 404 (from the customer
|
|
168
|
-
* lookup or the list) means there is no customer or no deposits yet and
|
|
169
|
-
* resolves `[]`. Any other non-2xx response throws an {@link HttpError}. The
|
|
170
|
-
* customer lookup is a single attempt: it does not go through the retry
|
|
171
|
-
* policy.
|
|
172
|
-
*
|
|
173
|
-
* @returns MoonPay microdeposits, unmodified.
|
|
174
|
-
*/
|
|
175
|
-
export type NeoBankServiceGetMicrodepositsAction = {
|
|
176
|
-
type: `NeoBankService:getMicrodeposits`;
|
|
177
|
-
handler: NeoBankService['getMicrodeposits'];
|
|
178
|
-
};
|
|
179
160
|
/**
|
|
180
161
|
* Checks whether a Monad Money Account address is already registered for the
|
|
181
162
|
* given Iron customer.
|
|
@@ -203,5 +184,5 @@ export type NeoBankServiceRegisterSelfHostedWalletAction = {
|
|
|
203
184
|
/**
|
|
204
185
|
* Union of all NeoBankService action types.
|
|
205
186
|
*/
|
|
206
|
-
export type NeoBankServiceMethodActions = NeoBankServiceGetAutorampAction | NeoBankServiceGetAutorampsAction | NeoBankServiceGetPixDepositInstructionsAction | NeoBankServiceGetDepositInstructionsAction | NeoBankServiceListAutorampTransactionsAction | NeoBankServiceRegisterPixAddressAction | NeoBankServiceGetAutorampQuoteAction | NeoBankServiceCreateAutorampAction | NeoBankServiceGetAutorampQuoteForAutorampAction | NeoBankServiceAttachAutorampQuoteAction | NeoBankServiceGetCustomerByExternalIdAction | NeoBankServiceGetMoonpayCustomerIdAction |
|
|
187
|
+
export type NeoBankServiceMethodActions = NeoBankServiceGetAutorampAction | NeoBankServiceGetAutorampsAction | NeoBankServiceGetPixDepositInstructionsAction | NeoBankServiceGetDepositInstructionsAction | NeoBankServiceListAutorampTransactionsAction | NeoBankServiceRegisterPixAddressAction | NeoBankServiceGetAutorampQuoteAction | NeoBankServiceCreateAutorampAction | NeoBankServiceGetAutorampQuoteForAutorampAction | NeoBankServiceAttachAutorampQuoteAction | NeoBankServiceGetCustomerByExternalIdAction | NeoBankServiceGetMoonpayCustomerIdAction | NeoBankServiceGetWalletRegistrationStatusAction | NeoBankServiceRegisterSelfHostedWalletAction;
|
|
207
188
|
//# sourceMappingURL=NeoBankService-method-action-types.d.ts.map
|
|
@@ -1 +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;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,gCAAgC,GAAG;IAC7C,IAAI,EAAE,6BAA6B,CAAC;IACpC,OAAO,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC;CACzC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,MAAM,6CAA6C,GAAG;IAC1D,IAAI,EAAE,0CAA0C,CAAC;IACjD,OAAO,EAAE,cAAc,CAAC,2BAA2B,CAAC,CAAC;CACtD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,MAAM,0CAA0C,GAAG;IACvD,IAAI,EAAE,uCAAuC,CAAC;IAC9C,OAAO,EAAE,cAAc,CAAC,wBAAwB,CAAC,CAAC;CACnD,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,4CAA4C,GAAG;IACzD,IAAI,EAAE,yCAAyC,CAAC;IAChD,OAAO,EAAE,cAAc,CAAC,0BAA0B,CAAC,CAAC;CACrD,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
|
|
1
|
+
{"version":3,"file":"NeoBankService-method-action-types.d.ts","sourceRoot":"","sources":["../src/NeoBankService-method-action-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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 * Fetches autoramp accounts, following MoonPay `cursor` pages until the\n * list is complete.\n *\n * Pass `customerId` to scope the list to one MoonPay customer. Omitting it\n * asks the proxy for the partner-wide list. Each request uses MoonPay's\n * maximum `page_size`.\n *\n * @param params - Optional filters.\n * @param params.customerId - MoonPay customer id.\n * @returns Remote snapshots for every page.\n */\nexport type NeoBankServiceGetAutorampsAction = {\n type: `NeoBankService:getAutoramps`;\n handler: NeoBankService['getAutoramps'];\n};\n\n/**\n * Loads PIX deposit instructions for an autoramp.\n *\n * Calls `GET /neobank/autoramps/{id}` and reads the `type: Pix` rail\n * (`br_code`, `instruction`, optional `pix_key`). Returns null until MoonPay\n * has attached deposit rails (typically once the autoramp is Approved).\n *\n * @param autorampId - MoonPay autoramp id.\n * @returns PIX instructions, or null when the rail is not ready.\n */\nexport type NeoBankServiceGetPixDepositInstructionsAction = {\n type: `NeoBankService:getPixDepositInstructions`;\n handler: NeoBankService['getPixDepositInstructions'];\n};\n\n/**\n * Loads deposit details for an autoramp, whichever rail it has.\n *\n * Calls `GET /neobank/autoramps/{id}` and reads the PIX rail, or else a US\n * bank rail (`ACH`, `Wire`, `RTP`, or `FedNow`). Returns null until MoonPay\n * has attached a supported rail. MoonPay only verifies the rail at\n * `Approved`, so callers should not show these details before then.\n *\n * @param autorampId - MoonPay autoramp id.\n * @returns Deposit details discriminated by `type`, or null.\n */\nexport type NeoBankServiceGetDepositInstructionsAction = {\n type: `NeoBankService:getDepositInstructions`;\n handler: NeoBankService['getDepositInstructions'];\n};\n\n/**\n * Lists the newest page of transactions for one autoramp via\n * `GET /neobank/autoramp-transactions?autoramp_id=&sort_order=desc`.\n *\n * This is the first page only, not the full history. Poll `status`\n * (`Completed`, `Failed`, …). The deprecated `state` field is ignored.\n *\n * @param autorampId - MoonPay autoramp id.\n * @param options - Optional page size. Omitted requests use the API default.\n * @param options.pageSize - `page_size` query value. Callers that diff\n * status pass 50.\n * @returns Transaction summaries from the newest page.\n */\nexport type NeoBankServiceListAutorampTransactionsAction = {\n type: `NeoBankService:listAutorampTransactions`;\n handler: NeoBankService['listAutorampTransactions'];\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 *
|
|
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 * Fetches autoramp accounts, following MoonPay `cursor` pages until the\n * list is complete.\n *\n * Pass `customerId` to scope the list to one MoonPay customer. Omitting it\n * asks the proxy for the partner-wide list. Each request uses MoonPay's\n * maximum `page_size`.\n *\n * @param params - Optional filters.\n * @param params.customerId - MoonPay customer id.\n * @returns Remote snapshots for every page.\n */\nexport type NeoBankServiceGetAutorampsAction = {\n type: `NeoBankService:getAutoramps`;\n handler: NeoBankService['getAutoramps'];\n};\n\n/**\n * Loads PIX deposit instructions for an autoramp.\n *\n * Calls `GET /neobank/autoramps/{id}` and reads the `type: Pix` rail\n * (`br_code`, `instruction`, optional `pix_key`). Returns null until MoonPay\n * has attached deposit rails (typically once the autoramp is Approved).\n *\n * @param autorampId - MoonPay autoramp id.\n * @returns PIX instructions, or null when the rail is not ready.\n */\nexport type NeoBankServiceGetPixDepositInstructionsAction = {\n type: `NeoBankService:getPixDepositInstructions`;\n handler: NeoBankService['getPixDepositInstructions'];\n};\n\n/**\n * Loads deposit details for an autoramp, whichever rail it has.\n *\n * Calls `GET /neobank/autoramps/{id}` and reads the PIX rail, or else a US\n * bank rail (`ACH`, `Wire`, `RTP`, or `FedNow`). Returns null until MoonPay\n * has attached a supported rail. MoonPay only verifies the rail at\n * `Approved`, so callers should not show these details before then.\n *\n * @param autorampId - MoonPay autoramp id.\n * @returns Deposit details discriminated by `type`, or null.\n */\nexport type NeoBankServiceGetDepositInstructionsAction = {\n type: `NeoBankService:getDepositInstructions`;\n handler: NeoBankService['getDepositInstructions'];\n};\n\n/**\n * Lists the newest page of transactions for one autoramp via\n * `GET /neobank/autoramp-transactions?autoramp_id=&sort_order=desc`.\n *\n * This is the first page only, not the full history. Poll `status`\n * (`Completed`, `Failed`, …). The deprecated `state` field is ignored.\n *\n * @param autorampId - MoonPay autoramp id.\n * @param options - Optional page size. Omitted requests use the API default.\n * @param options.pageSize - `page_size` query value. Callers that diff\n * status pass 50.\n * @returns Transaction summaries from the newest page.\n */\nexport type NeoBankServiceListAutorampTransactionsAction = {\n type: `NeoBankService:listAutorampTransactions`;\n handler: NeoBankService['listAutorampTransactions'];\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 | NeoBankServiceGetAutorampsAction\n | NeoBankServiceGetPixDepositInstructionsAction\n | NeoBankServiceGetDepositInstructionsAction\n | NeoBankServiceListAutorampTransactionsAction\n | NeoBankServiceRegisterPixAddressAction\n | NeoBankServiceGetAutorampQuoteAction\n | NeoBankServiceCreateAutorampAction\n | NeoBankServiceGetAutorampQuoteForAutorampAction\n | NeoBankServiceAttachAutorampQuoteAction\n | NeoBankServiceGetCustomerByExternalIdAction\n | NeoBankServiceGetMoonpayCustomerIdAction\n | NeoBankServiceGetWalletRegistrationStatusAction\n | NeoBankServiceRegisterSelfHostedWalletAction;\n"]}
|
package/dist/NeoBankService.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { CreateServicePolicyOptions, DataServiceCacheUpdatedEvent, DataServiceGranularCacheUpdatedEvent, DataServiceInvalidateQueriesAction } from '@metamask/base-data-service';
|
|
1
|
+
import type { CreateServicePolicyOptions, ServicePolicy } from '@metamask/controller-utils';
|
|
3
2
|
import type { Messenger } from '@metamask/messenger';
|
|
4
3
|
import type { AuthenticationController } from '@metamask/profile-sync-controller';
|
|
5
|
-
import type { Json } from '@metamask/utils';
|
|
6
4
|
import type { AutorampDepositInstructions, AutorampRemoteSnapshot, AutorampTransactionSummary, PixDepositInstructions, UsBankDepositInstructions } from './autoramp-types.js';
|
|
7
5
|
import type { NeoBankServiceMethodActions } from './NeoBankService-method-action-types.js';
|
|
8
6
|
import { RampsEnvironment } from './RampsService.js';
|
|
@@ -38,21 +36,6 @@ export type NeoBankAutorampResponse = {
|
|
|
38
36
|
};
|
|
39
37
|
deposit_rails?: unknown[];
|
|
40
38
|
};
|
|
41
|
-
/**
|
|
42
|
-
* A MoonPay microdeposit: a small test credit a bank sends when a user links
|
|
43
|
-
* their account. Shape mirrors MoonPay `GET /api/customers/{id}/microdeposits`
|
|
44
|
-
* and is returned unmodified. There is no id field, so consumers derive their
|
|
45
|
-
* own key.
|
|
46
|
-
*/
|
|
47
|
-
export type NeoBankMicrodeposit = {
|
|
48
|
-
/** Decimal string, e.g. `"0.34"`. */
|
|
49
|
-
amount: string;
|
|
50
|
-
/** Currency code, e.g. `"USD"`. */
|
|
51
|
-
currency_code: string;
|
|
52
|
-
/** ISO-8601 datetime. */
|
|
53
|
-
created_at: string;
|
|
54
|
-
counterparty_name?: string;
|
|
55
|
-
};
|
|
56
39
|
/**
|
|
57
40
|
* Optional headers for neo-bank mutating requests.
|
|
58
41
|
*/
|
|
@@ -82,27 +65,12 @@ export type RegisterSelfHostedWalletParams = {
|
|
|
82
65
|
*/
|
|
83
66
|
idempotencyKey?: string;
|
|
84
67
|
};
|
|
85
|
-
/**
|
|
86
|
-
* Invalidates cached queries for {@link NeoBankService}.
|
|
87
|
-
*/
|
|
88
|
-
export type NeoBankServiceInvalidateQueriesAction = DataServiceInvalidateQueriesAction<typeof serviceName>;
|
|
89
68
|
/**
|
|
90
69
|
* Actions that {@link NeoBankService} exposes to other consumers.
|
|
91
70
|
*/
|
|
92
|
-
export type NeoBankServiceActions = NeoBankServiceMethodActions
|
|
71
|
+
export type NeoBankServiceActions = NeoBankServiceMethodActions;
|
|
93
72
|
type AllowedActions = AuthenticationController.AuthenticationControllerGetBearerTokenAction | AuthenticationController.AuthenticationControllerGetSessionProfileAction;
|
|
94
|
-
|
|
95
|
-
* Published when {@link NeoBankService}'s cache is updated.
|
|
96
|
-
*/
|
|
97
|
-
export type NeoBankServiceCacheUpdatedEvent = DataServiceCacheUpdatedEvent<typeof serviceName>;
|
|
98
|
-
/**
|
|
99
|
-
* Published when a key within {@link NeoBankService}'s cache is updated.
|
|
100
|
-
*/
|
|
101
|
-
export type NeoBankServiceGranularCacheUpdatedEvent = DataServiceGranularCacheUpdatedEvent<typeof serviceName>;
|
|
102
|
-
/**
|
|
103
|
-
* Events that {@link NeoBankService} exposes to other consumers.
|
|
104
|
-
*/
|
|
105
|
-
export type NeoBankServiceEvents = NeoBankServiceCacheUpdatedEvent | NeoBankServiceGranularCacheUpdatedEvent;
|
|
73
|
+
export type NeoBankServiceEvents = never;
|
|
106
74
|
type AllowedEvents = never;
|
|
107
75
|
/**
|
|
108
76
|
* The messenger restricted to actions and events accessed by
|
|
@@ -140,8 +108,9 @@ export declare function extractUsBankDepositInstructions(depositRails: unknown):
|
|
|
140
108
|
*
|
|
141
109
|
* Paths use the neobank-proxy `/neobank` prefix on the on-ramp.api host.
|
|
142
110
|
*/
|
|
143
|
-
export declare class NeoBankService
|
|
111
|
+
export declare class NeoBankService {
|
|
144
112
|
#private;
|
|
113
|
+
readonly name: typeof serviceName;
|
|
145
114
|
constructor({ messenger, environment, context, fetch: fetchFunction, policyOptions, baseUrlOverride, }: {
|
|
146
115
|
messenger: NeoBankServiceMessenger;
|
|
147
116
|
environment?: RampsEnvironment;
|
|
@@ -221,14 +190,14 @@ export declare class NeoBankService extends BaseDataService<typeof serviceName,
|
|
|
221
190
|
* @param options - Optional idempotency key.
|
|
222
191
|
* @returns Parsed proxy JSON response.
|
|
223
192
|
*/
|
|
224
|
-
registerPixAddress(body: Record<string, unknown>, options?: NeoBankRequestOptions): Promise<
|
|
193
|
+
registerPixAddress(body: Record<string, unknown>, options?: NeoBankRequestOptions): Promise<unknown>;
|
|
225
194
|
/**
|
|
226
195
|
* Fetches an autoramp quote via neobank-proxy `GET /neobank/autoramps/quote`.
|
|
227
196
|
*
|
|
228
197
|
* @param query - Quote query params (forwarded as-is).
|
|
229
198
|
* @returns Parsed proxy JSON response.
|
|
230
199
|
*/
|
|
231
|
-
getAutorampQuote(query?: NeoBankQueryParams): Promise<
|
|
200
|
+
getAutorampQuote(query?: NeoBankQueryParams): Promise<unknown>;
|
|
232
201
|
/**
|
|
233
202
|
* Creates an autoramp from a signed quote via neobank-proxy
|
|
234
203
|
* `POST /neobank/autoramps` (MoonPay `POST /api/autoramps`).
|
|
@@ -246,7 +215,7 @@ export declare class NeoBankService extends BaseDataService<typeof serviceName,
|
|
|
246
215
|
* @param query - Quote query params (forwarded as-is).
|
|
247
216
|
* @returns Parsed proxy JSON response.
|
|
248
217
|
*/
|
|
249
|
-
getAutorampQuoteForAutoramp(autorampId: string, query?: NeoBankQueryParams): Promise<
|
|
218
|
+
getAutorampQuoteForAutoramp(autorampId: string, query?: NeoBankQueryParams): Promise<unknown>;
|
|
250
219
|
/**
|
|
251
220
|
* Attaches a signed quote to an autoramp via neobank-proxy
|
|
252
221
|
* `POST /neobank/autoramps/{autoramp_id}/quotes`.
|
|
@@ -256,7 +225,7 @@ export declare class NeoBankService extends BaseDataService<typeof serviceName,
|
|
|
256
225
|
* @param options - Optional idempotency key.
|
|
257
226
|
* @returns Parsed proxy JSON response.
|
|
258
227
|
*/
|
|
259
|
-
attachAutorampQuote(autorampId: string, body: Record<string, unknown>, options?: NeoBankRequestOptions): Promise<
|
|
228
|
+
attachAutorampQuote(autorampId: string, body: Record<string, unknown>, options?: NeoBankRequestOptions): Promise<unknown>;
|
|
260
229
|
/**
|
|
261
230
|
* Fetches a customer by partner external id via neobank-proxy
|
|
262
231
|
* `GET /neobank/customers/{external_id}/external`.
|
|
@@ -264,7 +233,7 @@ export declare class NeoBankService extends BaseDataService<typeof serviceName,
|
|
|
264
233
|
* @param externalId - Partner-assigned external customer id.
|
|
265
234
|
* @returns Parsed proxy JSON response.
|
|
266
235
|
*/
|
|
267
|
-
getCustomerByExternalId(externalId: string): Promise<
|
|
236
|
+
getCustomerByExternalId(externalId: string): Promise<unknown>;
|
|
268
237
|
/**
|
|
269
238
|
* Resolves Iron's internal customer id via neobank-proxy customer lookup,
|
|
270
239
|
* using the MetaMask canonical profile id as the partner `external_id`.
|
|
@@ -272,22 +241,6 @@ export declare class NeoBankService extends BaseDataService<typeof serviceName,
|
|
|
272
241
|
* @returns Iron's internal customer id.
|
|
273
242
|
*/
|
|
274
243
|
getMoonpayCustomerId(): Promise<string>;
|
|
275
|
-
/**
|
|
276
|
-
* Lists the customer's bank-link microdeposits via neobank-proxy
|
|
277
|
-
* `GET /neobank/customers/{customer_id}/microdeposits` (MoonPay
|
|
278
|
-
* `GET /api/customers/{id}/microdeposits`).
|
|
279
|
-
*
|
|
280
|
-
* The customer id is resolved through {@link getMoonpayCustomerId} at most
|
|
281
|
-
* once per service instance; concurrent callers share the in-flight lookup
|
|
282
|
-
* and a failed lookup is retried by the next call. A 404 (from the customer
|
|
283
|
-
* lookup or the list) means there is no customer or no deposits yet and
|
|
284
|
-
* resolves `[]`. Any other non-2xx response throws an {@link HttpError}. The
|
|
285
|
-
* customer lookup is a single attempt: it does not go through the retry
|
|
286
|
-
* policy.
|
|
287
|
-
*
|
|
288
|
-
* @returns MoonPay microdeposits, unmodified.
|
|
289
|
-
*/
|
|
290
|
-
getMicrodeposits(): Promise<NeoBankMicrodeposit[]>;
|
|
291
244
|
/**
|
|
292
245
|
* Checks whether a Monad Money Account address is already registered for the
|
|
293
246
|
* given Iron customer.
|
|
@@ -306,6 +259,9 @@ export declare class NeoBankService extends BaseDataService<typeof serviceName,
|
|
|
306
259
|
* @returns Registered wallet record.
|
|
307
260
|
*/
|
|
308
261
|
registerSelfHostedWallet(params: RegisterSelfHostedWalletParams): Promise<RegistrationOutcome>;
|
|
262
|
+
onRetry(listener: Parameters<ServicePolicy['onRetry']>[0]): ReturnType<ServicePolicy['onRetry']>;
|
|
263
|
+
onBreak(listener: Parameters<ServicePolicy['onBreak']>[0]): ReturnType<ServicePolicy['onBreak']>;
|
|
264
|
+
onDegraded(listener: Parameters<ServicePolicy['onDegraded']>[0]): ReturnType<ServicePolicy['onDegraded']>;
|
|
309
265
|
}
|
|
310
266
|
export {};
|
|
311
267
|
//# sourceMappingURL=NeoBankService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeoBankService.d.ts","sourceRoot":"","sources":["../src/NeoBankService.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"NeoBankService.d.ts","sourceRoot":"","sources":["../src/NeoBankService.ts"],"names":[],"mappings":"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"}
|
package/dist/NeoBankService.js
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { HttpError } from '@metamask/controller-utils';
|
|
3
|
-
import { array, size, string, type, union } from '@metamask/superstruct';
|
|
1
|
+
import { createServicePolicy, handleWhen, HttpError, } from '@metamask/controller-utils';
|
|
4
2
|
import packageJson from '../package.json';
|
|
5
3
|
import { RAMPS_SDK_VERSION, RampsEnvironment } from './RampsService.js';
|
|
6
|
-
import {
|
|
4
|
+
import { WalletRegistrationService } from './wallet-registration-service.js';
|
|
7
5
|
/**
|
|
8
6
|
* Name of the NeoBankService messenger namespace.
|
|
9
7
|
*/
|
|
@@ -28,51 +26,6 @@ function isRetryableError(error) {
|
|
|
28
26
|
}
|
|
29
27
|
return true;
|
|
30
28
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Minimal shape check for an autoramp payload: it must carry a non-empty `id`.
|
|
33
|
-
* The full mapping is done by {@link mapNeoBankAutorampToRemoteSnapshot}.
|
|
34
|
-
*/
|
|
35
|
-
const AutorampResponseStruct = type({ id: size(string(), 1, Infinity) });
|
|
36
|
-
/**
|
|
37
|
-
* An autoramp payload read only for its `deposit_rails`: any object is
|
|
38
|
-
* accepted, and {@link extractPixDepositInstructions} tolerates anything in
|
|
39
|
-
* `deposit_rails`.
|
|
40
|
-
*/
|
|
41
|
-
const PixAutorampResponseStruct = type({});
|
|
42
|
-
/**
|
|
43
|
-
* Minimal shape check for the microdeposits list: an array of objects. The
|
|
44
|
-
* items are returned unmodified.
|
|
45
|
-
*/
|
|
46
|
-
const MicrodepositListResponseStruct = array(type({}));
|
|
47
|
-
/**
|
|
48
|
-
* Minimal shape check for one autoramp transaction. Other fields are read
|
|
49
|
-
* leniently when mapping.
|
|
50
|
-
*/
|
|
51
|
-
const AutorampTransactionResponseStruct = type({
|
|
52
|
-
id: string(),
|
|
53
|
-
status: string(),
|
|
54
|
-
});
|
|
55
|
-
/**
|
|
56
|
-
* Builds a struct for a MoonPay list: either a paged object with an `items`
|
|
57
|
-
* array or a raw array.
|
|
58
|
-
*
|
|
59
|
-
* @param itemStruct - Struct for each list item.
|
|
60
|
-
* @returns Struct for the list response.
|
|
61
|
-
*/
|
|
62
|
-
function pagedListStruct(itemStruct) {
|
|
63
|
-
return union([array(itemStruct), type({ items: array(itemStruct) })]);
|
|
64
|
-
}
|
|
65
|
-
const AutorampListResponseStruct = pagedListStruct(AutorampResponseStruct);
|
|
66
|
-
const AutorampTransactionListResponseStruct = pagedListStruct(AutorampTransactionResponseStruct);
|
|
67
|
-
/**
|
|
68
|
-
* Drops `undefined` values so query params can be used in a query key.
|
|
69
|
-
*
|
|
70
|
-
* @param query - Query params as passed by the caller.
|
|
71
|
-
* @returns The same params without `undefined` values.
|
|
72
|
-
*/
|
|
73
|
-
function toQueryKeyParams(query) {
|
|
74
|
-
return Object.fromEntries(Object.entries(query).filter(([, value]) => value !== undefined));
|
|
75
|
-
}
|
|
76
29
|
const MESSENGER_EXPOSED_METHODS = [
|
|
77
30
|
'getAutoramp',
|
|
78
31
|
'getAutoramps',
|
|
@@ -83,7 +36,6 @@ const MESSENGER_EXPOSED_METHODS = [
|
|
|
83
36
|
'attachAutorampQuote',
|
|
84
37
|
'getCustomerByExternalId',
|
|
85
38
|
'getMoonpayCustomerId',
|
|
86
|
-
'getMicrodeposits',
|
|
87
39
|
'getWalletRegistrationStatus',
|
|
88
40
|
'registerSelfHostedWallet',
|
|
89
41
|
'getPixDepositInstructions',
|
|
@@ -155,14 +107,22 @@ export function mapNeoBankAutorampToRemoteSnapshot(response) {
|
|
|
155
107
|
};
|
|
156
108
|
}
|
|
157
109
|
/**
|
|
158
|
-
* Reads
|
|
159
|
-
* array, or a raw array).
|
|
110
|
+
* Reads a MoonPay paged list (an object with an items array) or a raw array.
|
|
160
111
|
*
|
|
161
|
-
* @param response -
|
|
112
|
+
* @param response - Proxy JSON body.
|
|
113
|
+
* @param malformedMessage - Error when the body is neither shape.
|
|
162
114
|
* @returns Item list.
|
|
163
115
|
*/
|
|
164
|
-
function readPagedItems(response) {
|
|
165
|
-
|
|
116
|
+
function readPagedItems(response, malformedMessage) {
|
|
117
|
+
if (Array.isArray(response)) {
|
|
118
|
+
return response;
|
|
119
|
+
}
|
|
120
|
+
if (response !== null &&
|
|
121
|
+
typeof response === 'object' &&
|
|
122
|
+
Array.isArray(response.items)) {
|
|
123
|
+
return response.items;
|
|
124
|
+
}
|
|
125
|
+
throw new Error(malformedMessage);
|
|
166
126
|
}
|
|
167
127
|
/**
|
|
168
128
|
* Reads the next-page cursor from a MoonPay paged list.
|
|
@@ -342,27 +302,33 @@ function readAmount(value) {
|
|
|
342
302
|
*
|
|
343
303
|
* Paths use the neobank-proxy `/neobank` prefix on the on-ramp.api host.
|
|
344
304
|
*/
|
|
345
|
-
export class NeoBankService
|
|
305
|
+
export class NeoBankService {
|
|
306
|
+
name;
|
|
307
|
+
#messenger;
|
|
346
308
|
#fetch;
|
|
309
|
+
#policy;
|
|
310
|
+
#noRetryPolicy;
|
|
347
311
|
#environment;
|
|
348
312
|
#context;
|
|
349
313
|
#baseUrlOverride;
|
|
350
314
|
#walletRegistrationService;
|
|
351
|
-
#customerIdPromise;
|
|
352
315
|
constructor({ messenger, environment = RampsEnvironment.Staging, context, fetch: fetchFunction, policyOptions = {}, baseUrlOverride, }) {
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
messenger,
|
|
356
|
-
policyOptions: {
|
|
357
|
-
retryFilterPolicy: handleWhen(isRetryableError),
|
|
358
|
-
...policyOptions,
|
|
359
|
-
},
|
|
360
|
-
});
|
|
316
|
+
this.name = serviceName;
|
|
317
|
+
this.#messenger = messenger;
|
|
361
318
|
this.#fetch = fetchFunction;
|
|
319
|
+
this.#policy = createServicePolicy({
|
|
320
|
+
retryFilterPolicy: handleWhen(isRetryableError),
|
|
321
|
+
...policyOptions,
|
|
322
|
+
});
|
|
323
|
+
this.#noRetryPolicy = createServicePolicy({
|
|
324
|
+
retryFilterPolicy: handleWhen(isRetryableError),
|
|
325
|
+
...policyOptions,
|
|
326
|
+
maxRetries: 0,
|
|
327
|
+
});
|
|
362
328
|
this.#environment = environment;
|
|
363
329
|
this.#context = context;
|
|
364
330
|
this.#baseUrlOverride = baseUrlOverride;
|
|
365
|
-
this
|
|
331
|
+
this.#messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);
|
|
366
332
|
}
|
|
367
333
|
#getBaseUrl() {
|
|
368
334
|
if (this.#baseUrlOverride) {
|
|
@@ -381,13 +347,13 @@ export class NeoBankService extends BaseDataService {
|
|
|
381
347
|
this.#walletRegistrationService ??= new WalletRegistrationService({
|
|
382
348
|
fetch: this.#fetch,
|
|
383
349
|
baseUrl: this.#getBaseUrl(),
|
|
384
|
-
getAuthToken: async () => this
|
|
350
|
+
getAuthToken: async () => this.#messenger.call('AuthenticationController:getBearerToken'),
|
|
385
351
|
getExternalId: async () => this.#getCanonicalExternalId(),
|
|
386
352
|
});
|
|
387
353
|
return this.#walletRegistrationService;
|
|
388
354
|
}
|
|
389
355
|
async #getRequestHeaders(options = {}) {
|
|
390
|
-
const bearerToken = await this
|
|
356
|
+
const bearerToken = await this.#messenger.call('AuthenticationController:getBearerToken');
|
|
391
357
|
const headers = {
|
|
392
358
|
Authorization: `Bearer ${bearerToken}`,
|
|
393
359
|
};
|
|
@@ -433,43 +399,38 @@ export class NeoBankService extends BaseDataService {
|
|
|
433
399
|
}
|
|
434
400
|
throw new HttpError(response.status, `Fetching '${url.toString()}' failed with status '${response.status}'${detail}`);
|
|
435
401
|
}
|
|
436
|
-
/**
|
|
437
|
-
* Performs one authenticated GET.
|
|
438
|
-
*
|
|
439
|
-
* @param path - Path under `/neobank`.
|
|
440
|
-
* @param query - Optional query params.
|
|
441
|
-
* @returns Parsed JSON body.
|
|
442
|
-
*/
|
|
443
402
|
async #getJson(path, query) {
|
|
444
403
|
const url = this.#buildUrl(path, query);
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
404
|
+
return this.#policy.execute(async () => {
|
|
405
|
+
const headers = await this.#getRequestHeaders();
|
|
406
|
+
const fetchResponse = await this.#fetch(url, { headers });
|
|
407
|
+
if (!fetchResponse.ok) {
|
|
408
|
+
await this.#throwHttpError(url, fetchResponse);
|
|
409
|
+
}
|
|
410
|
+
return fetchResponse.json();
|
|
411
|
+
});
|
|
451
412
|
}
|
|
452
|
-
/**
|
|
453
|
-
* Performs one authenticated JSON POST.
|
|
454
|
-
*
|
|
455
|
-
* @param path - Path under `/neobank`.
|
|
456
|
-
* @param body - JSON request body.
|
|
457
|
-
* @param options - Optional idempotency key.
|
|
458
|
-
* @returns Parsed JSON body.
|
|
459
|
-
*/
|
|
460
413
|
async #postJson(path, body, options) {
|
|
461
414
|
const url = this.#buildUrl(path);
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
415
|
+
return this.#noRetryPolicy.execute(async () => {
|
|
416
|
+
const headers = await this.#getRequestHeaders(options);
|
|
417
|
+
headers['Content-Type'] = 'application/json';
|
|
418
|
+
const fetchResponse = await this.#fetch(url, {
|
|
419
|
+
method: 'POST',
|
|
420
|
+
headers,
|
|
421
|
+
body: JSON.stringify(body),
|
|
422
|
+
});
|
|
423
|
+
if (!fetchResponse.ok) {
|
|
424
|
+
await this.#throwHttpError(url, fetchResponse);
|
|
425
|
+
}
|
|
426
|
+
return fetchResponse.json();
|
|
468
427
|
});
|
|
469
|
-
|
|
470
|
-
|
|
428
|
+
}
|
|
429
|
+
#mapAutorampResponse(response) {
|
|
430
|
+
if (!response || typeof response !== 'object' || !response.id) {
|
|
431
|
+
throw new Error('Malformed response received from neo-bank autoramp API');
|
|
471
432
|
}
|
|
472
|
-
return
|
|
433
|
+
return mapNeoBankAutorampToRemoteSnapshot(response);
|
|
473
434
|
}
|
|
474
435
|
/**
|
|
475
436
|
* Fetches an autoramp account via neobank-proxy
|
|
@@ -480,14 +441,8 @@ export class NeoBankService extends BaseDataService {
|
|
|
480
441
|
* @returns Remote snapshot for controller apply/refresh.
|
|
481
442
|
*/
|
|
482
443
|
async getAutoramp(autorampId) {
|
|
483
|
-
const response = await this
|
|
484
|
-
|
|
485
|
-
staleTime: 0,
|
|
486
|
-
gcTime: 0,
|
|
487
|
-
responseStruct: AutorampResponseStruct,
|
|
488
|
-
queryFn: async () => this.#getJson(`autoramps/${encodeURIComponent(autorampId)}`),
|
|
489
|
-
});
|
|
490
|
-
return mapNeoBankAutorampToRemoteSnapshot(response);
|
|
444
|
+
const response = await this.#getJson(`autoramps/${encodeURIComponent(autorampId)}`);
|
|
445
|
+
return this.#mapAutorampResponse(response);
|
|
491
446
|
}
|
|
492
447
|
/**
|
|
493
448
|
* Fetches autoramp accounts, following MoonPay `cursor` pages until the
|
|
@@ -506,19 +461,12 @@ export class NeoBankService extends BaseDataService {
|
|
|
506
461
|
const seenCursors = new Set();
|
|
507
462
|
let cursor;
|
|
508
463
|
do {
|
|
509
|
-
const
|
|
464
|
+
const response = await this.#getJson('autoramps', {
|
|
510
465
|
customer_id: params.customerId,
|
|
511
466
|
page_size: AUTORAMP_LIST_PAGE_SIZE,
|
|
512
467
|
cursor,
|
|
513
|
-
};
|
|
514
|
-
const response = await this.fetchQuery({
|
|
515
|
-
queryKey: [`${this.name}:getAutoramps`, toQueryKeyParams(query)],
|
|
516
|
-
staleTime: 0,
|
|
517
|
-
gcTime: 0,
|
|
518
|
-
responseStruct: AutorampListResponseStruct,
|
|
519
|
-
queryFn: async () => this.#getJson('autoramps', query),
|
|
520
468
|
});
|
|
521
|
-
autoramps.push(...readPagedItems(response));
|
|
469
|
+
autoramps.push(...readPagedItems(response, 'Malformed response received from neo-bank autoramps API'));
|
|
522
470
|
const nextCursor = readNextCursor(response);
|
|
523
471
|
if (nextCursor === undefined || seenCursors.has(nextCursor)) {
|
|
524
472
|
break;
|
|
@@ -526,7 +474,7 @@ export class NeoBankService extends BaseDataService {
|
|
|
526
474
|
seenCursors.add(nextCursor);
|
|
527
475
|
cursor = nextCursor;
|
|
528
476
|
} while (cursor !== undefined);
|
|
529
|
-
return autoramps.map((autoramp) =>
|
|
477
|
+
return autoramps.map((autoramp) => this.#mapAutorampResponse(autoramp));
|
|
530
478
|
}
|
|
531
479
|
/**
|
|
532
480
|
* Loads PIX deposit instructions for an autoramp.
|
|
@@ -539,15 +487,11 @@ export class NeoBankService extends BaseDataService {
|
|
|
539
487
|
* @returns PIX instructions, or null when the rail is not ready.
|
|
540
488
|
*/
|
|
541
489
|
async getPixDepositInstructions(autorampId) {
|
|
542
|
-
const response = await this
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
queryFn: async () => this.#getJson(`autoramps/${encodeURIComponent(autorampId)}`),
|
|
548
|
-
});
|
|
549
|
-
return extractPixDepositInstructions(response
|
|
550
|
-
.deposit_rails);
|
|
490
|
+
const response = await this.#getJson(`autoramps/${encodeURIComponent(autorampId)}`);
|
|
491
|
+
if (!response || typeof response !== 'object') {
|
|
492
|
+
throw new Error('Malformed response received from neo-bank autoramp API');
|
|
493
|
+
}
|
|
494
|
+
return extractPixDepositInstructions(response.deposit_rails);
|
|
551
495
|
}
|
|
552
496
|
/**
|
|
553
497
|
* Loads deposit details for an autoramp, whichever rail it has.
|
|
@@ -561,19 +505,15 @@ export class NeoBankService extends BaseDataService {
|
|
|
561
505
|
* @returns Deposit details discriminated by `type`, or null.
|
|
562
506
|
*/
|
|
563
507
|
async getDepositInstructions(autorampId) {
|
|
564
|
-
const response = await this
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
queryFn: async () => this.#getJson(`autoramps/${encodeURIComponent(autorampId)}`),
|
|
570
|
-
});
|
|
571
|
-
const { deposit_rails: depositRails } = response;
|
|
572
|
-
const pix = extractPixDepositInstructions(depositRails);
|
|
508
|
+
const response = await this.#getJson(`autoramps/${encodeURIComponent(autorampId)}`);
|
|
509
|
+
if (!response || typeof response !== 'object') {
|
|
510
|
+
throw new Error('Malformed response received from neo-bank autoramp API');
|
|
511
|
+
}
|
|
512
|
+
const pix = extractPixDepositInstructions(response.deposit_rails);
|
|
573
513
|
if (pix) {
|
|
574
514
|
return { type: 'Pix', ...pix };
|
|
575
515
|
}
|
|
576
|
-
const usBank = extractUsBankDepositInstructions(
|
|
516
|
+
const usBank = extractUsBankDepositInstructions(response.deposit_rails);
|
|
577
517
|
return usBank ? { type: 'UsBank', ...usBank } : null;
|
|
578
518
|
}
|
|
579
519
|
/**
|
|
@@ -590,25 +530,24 @@ export class NeoBankService extends BaseDataService {
|
|
|
590
530
|
* @returns Transaction summaries from the newest page.
|
|
591
531
|
*/
|
|
592
532
|
async listAutorampTransactions(autorampId, options) {
|
|
593
|
-
const
|
|
533
|
+
const response = await this.#getJson('autoramp-transactions', {
|
|
594
534
|
autoramp_id: autorampId,
|
|
595
535
|
sort_order: 'desc',
|
|
596
536
|
...(options?.pageSize === undefined
|
|
597
537
|
? {}
|
|
598
538
|
: { page_size: options.pageSize }),
|
|
599
|
-
};
|
|
600
|
-
const response = await this.fetchQuery({
|
|
601
|
-
queryKey: [
|
|
602
|
-
`${this.name}:listAutorampTransactions`,
|
|
603
|
-
toQueryKeyParams(query),
|
|
604
|
-
],
|
|
605
|
-
staleTime: 0,
|
|
606
|
-
gcTime: 0,
|
|
607
|
-
responseStruct: AutorampTransactionListResponseStruct,
|
|
608
|
-
queryFn: async () => this.#getJson('autoramp-transactions', query),
|
|
609
539
|
});
|
|
610
|
-
|
|
540
|
+
const transactions = readPagedItems(response, 'Malformed response received from neo-bank autoramp transactions API');
|
|
541
|
+
return transactions.map((transaction) => {
|
|
542
|
+
if (transaction === null ||
|
|
543
|
+
typeof transaction !== 'object' ||
|
|
544
|
+
typeof transaction.id !== 'string') {
|
|
545
|
+
throw new Error('Malformed response received from neo-bank autoramp transactions API');
|
|
546
|
+
}
|
|
611
547
|
const record = transaction;
|
|
548
|
+
if (typeof record.status !== 'string') {
|
|
549
|
+
throw new Error('Malformed response received from neo-bank autoramp transactions API');
|
|
550
|
+
}
|
|
612
551
|
const createdAt = typeof record.created_at === 'string' && record.created_at.length > 0
|
|
613
552
|
? record.created_at
|
|
614
553
|
: undefined;
|
|
@@ -633,11 +572,7 @@ export class NeoBankService extends BaseDataService {
|
|
|
633
572
|
* @returns Parsed proxy JSON response.
|
|
634
573
|
*/
|
|
635
574
|
async registerPixAddress(body, options = {}) {
|
|
636
|
-
return this
|
|
637
|
-
mutationKey: [`${this.name}:registerPixAddress`],
|
|
638
|
-
gcTime: 0,
|
|
639
|
-
mutationFn: async () => this.#postJson('addresses/pix', body, options),
|
|
640
|
-
});
|
|
575
|
+
return this.#postJson('addresses/pix', body, options);
|
|
641
576
|
}
|
|
642
577
|
/**
|
|
643
578
|
* Fetches an autoramp quote via neobank-proxy `GET /neobank/autoramps/quote`.
|
|
@@ -646,12 +581,7 @@ export class NeoBankService extends BaseDataService {
|
|
|
646
581
|
* @returns Parsed proxy JSON response.
|
|
647
582
|
*/
|
|
648
583
|
async getAutorampQuote(query = {}) {
|
|
649
|
-
return this
|
|
650
|
-
queryKey: [`${this.name}:getAutorampQuote`, toQueryKeyParams(query)],
|
|
651
|
-
staleTime: 0,
|
|
652
|
-
gcTime: 0,
|
|
653
|
-
queryFn: async () => this.#getJson('autoramps/quote', query),
|
|
654
|
-
});
|
|
584
|
+
return this.#getJson('autoramps/quote', query);
|
|
655
585
|
}
|
|
656
586
|
/**
|
|
657
587
|
* Creates an autoramp from a signed quote via neobank-proxy
|
|
@@ -662,13 +592,8 @@ export class NeoBankService extends BaseDataService {
|
|
|
662
592
|
* @returns Remote snapshot for controller apply/refresh.
|
|
663
593
|
*/
|
|
664
594
|
async createAutoramp(body, options = {}) {
|
|
665
|
-
const response = await this
|
|
666
|
-
|
|
667
|
-
gcTime: 0,
|
|
668
|
-
responseStruct: AutorampResponseStruct,
|
|
669
|
-
mutationFn: async () => this.#postJson('autoramps', body, options),
|
|
670
|
-
});
|
|
671
|
-
return mapNeoBankAutorampToRemoteSnapshot(response);
|
|
595
|
+
const response = await this.#postJson('autoramps', body, options);
|
|
596
|
+
return this.#mapAutorampResponse(response);
|
|
672
597
|
}
|
|
673
598
|
/**
|
|
674
599
|
* Fetches a quote for an existing autoramp via neobank-proxy
|
|
@@ -679,16 +604,7 @@ export class NeoBankService extends BaseDataService {
|
|
|
679
604
|
* @returns Parsed proxy JSON response.
|
|
680
605
|
*/
|
|
681
606
|
async getAutorampQuoteForAutoramp(autorampId, query = {}) {
|
|
682
|
-
return this
|
|
683
|
-
queryKey: [
|
|
684
|
-
`${this.name}:getAutorampQuoteForAutoramp`,
|
|
685
|
-
autorampId,
|
|
686
|
-
toQueryKeyParams(query),
|
|
687
|
-
],
|
|
688
|
-
staleTime: 0,
|
|
689
|
-
gcTime: 0,
|
|
690
|
-
queryFn: async () => this.#getJson(`autoramps/${encodeURIComponent(autorampId)}/quote`, query),
|
|
691
|
-
});
|
|
607
|
+
return this.#getJson(`autoramps/${encodeURIComponent(autorampId)}/quote`, query);
|
|
692
608
|
}
|
|
693
609
|
/**
|
|
694
610
|
* Attaches a signed quote to an autoramp via neobank-proxy
|
|
@@ -700,11 +616,7 @@ export class NeoBankService extends BaseDataService {
|
|
|
700
616
|
* @returns Parsed proxy JSON response.
|
|
701
617
|
*/
|
|
702
618
|
async attachAutorampQuote(autorampId, body, options = {}) {
|
|
703
|
-
return this
|
|
704
|
-
mutationKey: [`${this.name}:attachAutorampQuote`, autorampId],
|
|
705
|
-
gcTime: 0,
|
|
706
|
-
mutationFn: async () => this.#postJson(`autoramps/${encodeURIComponent(autorampId)}/quotes`, body, options),
|
|
707
|
-
});
|
|
619
|
+
return this.#postJson(`autoramps/${encodeURIComponent(autorampId)}/quotes`, body, options);
|
|
708
620
|
}
|
|
709
621
|
/**
|
|
710
622
|
* Fetches a customer by partner external id via neobank-proxy
|
|
@@ -714,12 +626,7 @@ export class NeoBankService extends BaseDataService {
|
|
|
714
626
|
* @returns Parsed proxy JSON response.
|
|
715
627
|
*/
|
|
716
628
|
async getCustomerByExternalId(externalId) {
|
|
717
|
-
return this
|
|
718
|
-
queryKey: [`${this.name}:getCustomerByExternalId`, externalId],
|
|
719
|
-
staleTime: 0,
|
|
720
|
-
gcTime: 0,
|
|
721
|
-
queryFn: async () => this.#getJson(`customers/${encodeURIComponent(externalId)}/external`),
|
|
722
|
-
});
|
|
629
|
+
return this.#getJson(`customers/${encodeURIComponent(externalId)}/external`);
|
|
723
630
|
}
|
|
724
631
|
/**
|
|
725
632
|
* Resolves Iron's internal customer id via neobank-proxy customer lookup,
|
|
@@ -730,51 +637,6 @@ export class NeoBankService extends BaseDataService {
|
|
|
730
637
|
async getMoonpayCustomerId() {
|
|
731
638
|
return await this.#getWalletRegistrationService().getMoonpayCustomerId();
|
|
732
639
|
}
|
|
733
|
-
/**
|
|
734
|
-
* Lists the customer's bank-link microdeposits via neobank-proxy
|
|
735
|
-
* `GET /neobank/customers/{customer_id}/microdeposits` (MoonPay
|
|
736
|
-
* `GET /api/customers/{id}/microdeposits`).
|
|
737
|
-
*
|
|
738
|
-
* The customer id is resolved through {@link getMoonpayCustomerId} at most
|
|
739
|
-
* once per service instance; concurrent callers share the in-flight lookup
|
|
740
|
-
* and a failed lookup is retried by the next call. A 404 (from the customer
|
|
741
|
-
* lookup or the list) means there is no customer or no deposits yet and
|
|
742
|
-
* resolves `[]`. Any other non-2xx response throws an {@link HttpError}. The
|
|
743
|
-
* customer lookup is a single attempt: it does not go through the retry
|
|
744
|
-
* policy.
|
|
745
|
-
*
|
|
746
|
-
* @returns MoonPay microdeposits, unmodified.
|
|
747
|
-
*/
|
|
748
|
-
async getMicrodeposits() {
|
|
749
|
-
let response;
|
|
750
|
-
try {
|
|
751
|
-
this.#customerIdPromise ??= this.getMoonpayCustomerId().catch((error) => {
|
|
752
|
-
this.#customerIdPromise = undefined;
|
|
753
|
-
// The lookup runs outside the service policy and throws
|
|
754
|
-
// WalletRegistrationError; surface HTTP failures as HttpError like
|
|
755
|
-
// every other method.
|
|
756
|
-
if (error instanceof WalletRegistrationError && error.httpStatus) {
|
|
757
|
-
throw new HttpError(error.httpStatus, `Fetching neo-bank customer lookup failed with status '${error.httpStatus}'${error.body ? ` - ${error.body}` : ''}`);
|
|
758
|
-
}
|
|
759
|
-
throw error;
|
|
760
|
-
});
|
|
761
|
-
const customerId = await this.#customerIdPromise;
|
|
762
|
-
response = await this.fetchQuery({
|
|
763
|
-
queryKey: [`${this.name}:getMicrodeposits`, customerId],
|
|
764
|
-
staleTime: 0,
|
|
765
|
-
gcTime: 0,
|
|
766
|
-
responseStruct: MicrodepositListResponseStruct,
|
|
767
|
-
queryFn: async () => this.#getJson(`customers/${encodeURIComponent(customerId)}/microdeposits`),
|
|
768
|
-
});
|
|
769
|
-
}
|
|
770
|
-
catch (error) {
|
|
771
|
-
if (error.httpStatus === 404) {
|
|
772
|
-
return [];
|
|
773
|
-
}
|
|
774
|
-
throw error;
|
|
775
|
-
}
|
|
776
|
-
return response;
|
|
777
|
-
}
|
|
778
640
|
/**
|
|
779
641
|
* Checks whether a Monad Money Account address is already registered for the
|
|
780
642
|
* given Iron customer.
|
|
@@ -811,7 +673,7 @@ export class NeoBankService extends BaseDataService {
|
|
|
811
673
|
* @returns Canonical profile id.
|
|
812
674
|
*/
|
|
813
675
|
async #getCanonicalExternalId() {
|
|
814
|
-
const profile = await this
|
|
676
|
+
const profile = await this.#messenger.call('AuthenticationController:getSessionProfile');
|
|
815
677
|
const canonical = profile?.canonicalProfileId;
|
|
816
678
|
const externalId = typeof canonical === 'string' && canonical.length > 0
|
|
817
679
|
? canonical
|
|
@@ -821,5 +683,14 @@ export class NeoBankService extends BaseDataService {
|
|
|
821
683
|
}
|
|
822
684
|
return externalId;
|
|
823
685
|
}
|
|
686
|
+
onRetry(listener) {
|
|
687
|
+
return this.#policy.onRetry(listener);
|
|
688
|
+
}
|
|
689
|
+
onBreak(listener) {
|
|
690
|
+
return this.#policy.onBreak(listener);
|
|
691
|
+
}
|
|
692
|
+
onDegraded(listener) {
|
|
693
|
+
return this.#policy.onDegraded(listener);
|
|
694
|
+
}
|
|
824
695
|
}
|
|
825
696
|
//# sourceMappingURL=NeoBankService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NeoBankService.js","sourceRoot":"","sources":["../src/NeoBankService.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseDataService, handleWhen } from '@metamask/base-data-service';\nimport type {\n CreateServicePolicyOptions,\n DataServiceCacheUpdatedEvent,\n DataServiceGranularCacheUpdatedEvent,\n DataServiceInvalidateQueriesAction,\n} from '@metamask/base-data-service';\nimport { HttpError } from '@metamask/controller-utils';\nimport type { Messenger } from '@metamask/messenger';\nimport type { AuthenticationController } from '@metamask/profile-sync-controller';\nimport type { Infer, Struct } from '@metamask/superstruct';\nimport { array, size, string, type, union } from '@metamask/superstruct';\nimport type { Json } from '@metamask/utils';\n\nimport packageJson from '../package.json';\nimport type {\n AutorampDepositInstructions,\n AutorampDepositRailsSummary,\n AutorampRemoteSnapshot,\n AutorampTransactionSummary,\n PixDepositInstructions,\n UsBankDepositInstructions,\n UsBankDepositRail,\n} from './autoramp-types.js';\nimport type { NeoBankServiceMethodActions } from './NeoBankService-method-action-types.js';\nimport { RAMPS_SDK_VERSION, RampsEnvironment } from './RampsService.js';\nimport {\n WalletRegistrationError,\n WalletRegistrationService,\n} 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 * Minimal shape check for an autoramp payload: it must carry a non-empty `id`.\n * The full mapping is done by {@link mapNeoBankAutorampToRemoteSnapshot}.\n */\nconst AutorampResponseStruct = type({ id: size(string(), 1, Infinity) });\n\n/**\n * An autoramp payload read only for its `deposit_rails`: any object is\n * accepted, and {@link extractPixDepositInstructions} tolerates anything in\n * `deposit_rails`.\n */\nconst PixAutorampResponseStruct = type({});\n\n/**\n * Minimal shape check for the microdeposits list: an array of objects. The\n * items are returned unmodified.\n */\nconst MicrodepositListResponseStruct = array(type({}));\n\n/**\n * Minimal shape check for one autoramp transaction. Other fields are read\n * leniently when mapping.\n */\nconst AutorampTransactionResponseStruct = type({\n id: string(),\n status: string(),\n});\n\n/**\n * Builds a struct for a MoonPay list: either a paged object with an `items`\n * array or a raw array.\n *\n * @param itemStruct - Struct for each list item.\n * @returns Struct for the list response.\n */\nfunction pagedListStruct<Item>(\n itemStruct: Struct<Item>,\n): Struct<Item[] | { items: Item[] }> {\n return union([array(itemStruct), type({ items: array(itemStruct) })]);\n}\n\nconst AutorampListResponseStruct = pagedListStruct(AutorampResponseStruct);\n\nconst AutorampTransactionListResponseStruct = pagedListStruct(\n AutorampTransactionResponseStruct,\n);\n\n/**\n * Drops `undefined` values so query params can be used in a query key.\n *\n * @param query - Query params as passed by the caller.\n * @returns The same params without `undefined` values.\n */\nfunction toQueryKeyParams(query: NeoBankQueryParams): Record<string, Json> {\n return Object.fromEntries(\n Object.entries(query).filter(([, value]) => value !== undefined),\n ) as Record<string, Json>;\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 /**\n * Some MoonPay autoramp responses put the destination under `recipient`\n * instead of `recipient_account`.\n */\n recipient?: {\n address?: string;\n };\n // eslint-disable-next-line @typescript-eslint/naming-convention -- MoonPay API field\n deposit_rails?: unknown[];\n};\n\n/**\n * A MoonPay microdeposit: a small test credit a bank sends when a user links\n * their account. Shape mirrors MoonPay `GET /api/customers/{id}/microdeposits`\n * and is returned unmodified. There is no id field, so consumers derive their\n * own key.\n */\nexport type NeoBankMicrodeposit = {\n /** Decimal string, e.g. `\"0.34\"`. */\n amount: string;\n /** Currency code, e.g. `\"USD\"`. */\n // eslint-disable-next-line @typescript-eslint/naming-convention -- MoonPay API field\n currency_code: string;\n /** ISO-8601 datetime. */\n // eslint-disable-next-line @typescript-eslint/naming-convention -- MoonPay API field\n created_at: string;\n // eslint-disable-next-line @typescript-eslint/naming-convention -- MoonPay API field\n counterparty_name?: string;\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 'getAutoramps',\n 'registerPixAddress',\n 'getAutorampQuote',\n 'createAutoramp',\n 'getAutorampQuoteForAutoramp',\n 'attachAutorampQuote',\n 'getCustomerByExternalId',\n 'getMoonpayCustomerId',\n 'getMicrodeposits',\n 'getWalletRegistrationStatus',\n 'registerSelfHostedWallet',\n 'getPixDepositInstructions',\n 'getDepositInstructions',\n 'listAutorampTransactions',\n] as const;\n\n/**\n * MoonPay's maximum `page_size` for `GET /api/autoramps`.\n */\nconst AUTORAMP_LIST_PAGE_SIZE = 100;\n\n/**\n * Invalidates cached queries for {@link NeoBankService}.\n */\nexport type NeoBankServiceInvalidateQueriesAction =\n DataServiceInvalidateQueriesAction<typeof serviceName>;\n\n/**\n * Actions that {@link NeoBankService} exposes to other consumers.\n */\nexport type NeoBankServiceActions =\n | NeoBankServiceMethodActions\n | NeoBankServiceInvalidateQueriesAction;\n\ntype AllowedActions =\n | AuthenticationController.AuthenticationControllerGetBearerTokenAction\n | AuthenticationController.AuthenticationControllerGetSessionProfileAction;\n\n/**\n * Published when {@link NeoBankService}'s cache is updated.\n */\nexport type NeoBankServiceCacheUpdatedEvent = DataServiceCacheUpdatedEvent<\n typeof serviceName\n>;\n\n/**\n * Published when a key within {@link NeoBankService}'s cache is updated.\n */\nexport type NeoBankServiceGranularCacheUpdatedEvent =\n DataServiceGranularCacheUpdatedEvent<typeof serviceName>;\n\n/**\n * Events that {@link NeoBankService} exposes to other consumers.\n */\nexport type NeoBankServiceEvents =\n | NeoBankServiceCacheUpdatedEvent\n | NeoBankServiceGranularCacheUpdatedEvent;\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 currency = readDepositRailCurrency(depositRails);\n const depositRailsSummary: AutorampDepositRailsSummary | undefined =\n hasDepositRails || response.status === 'Approved'\n ? {\n ready: response.status === 'Approved' && hasDepositRails,\n ...(currency ? { currency } : {}),\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 ?? response.recipient?.address),\n status: response.status,\n depositRailsSummary,\n };\n}\n\n/**\n * Reads the items of a validated MoonPay list (a paged object with an `items`\n * array, or a raw array).\n *\n * @param response - Validated proxy JSON body.\n * @returns Item list.\n */\nfunction readPagedItems<Item>(response: Item[] | { items: Item[] }): Item[] {\n return Array.isArray(response) ? response : response.items;\n}\n\n/**\n * Reads the next-page cursor from a MoonPay paged list.\n * A raw array has no further page.\n *\n * @param response - Proxy JSON body.\n * @returns Next cursor, or undefined when this page is the last.\n */\nfunction readNextCursor(response: unknown): string | undefined {\n if (\n response === null ||\n typeof response !== 'object' ||\n Array.isArray(response)\n ) {\n return undefined;\n }\n const { cursor } = response as { cursor?: unknown };\n return typeof cursor === 'string' && cursor.length > 0 ? cursor : undefined;\n}\n\n/**\n * Pulls the PIX deposit rail out of an autoramp `deposit_rails` array.\n *\n * @param depositRails - MoonPay `deposit_rails` value.\n * @returns PIX instructions, or null when no usable PIX rail is present.\n */\nexport function extractPixDepositInstructions(\n depositRails: unknown,\n): PixDepositInstructions | null {\n if (!Array.isArray(depositRails)) {\n return null;\n }\n for (const rail of depositRails) {\n if (rail === null || typeof rail !== 'object') {\n continue;\n }\n const record = rail as Record<string, unknown>;\n if (record.type !== 'Pix') {\n continue;\n }\n if (\n typeof record.br_code !== 'string' ||\n record.br_code.length === 0 ||\n typeof record.instruction !== 'string' ||\n record.instruction.length === 0\n ) {\n continue;\n }\n const instructions: PixDepositInstructions = {\n brCode: record.br_code,\n instruction: record.instruction,\n };\n if (typeof record.pix_key === 'string' && record.pix_key.length > 0) {\n instructions.pixKey = record.pix_key;\n }\n if (typeof record.expires_at === 'string' && record.expires_at.length > 0) {\n instructions.expiresAt = record.expires_at;\n }\n return instructions;\n }\n return null;\n}\n\n/**\n * US rails in the order to prefer when an autoramp lists more than one.\n */\nconst US_BANK_DEPOSIT_RAILS: readonly UsBankDepositRail[] = [\n 'ACH',\n 'Wire',\n 'RTP',\n 'FedNow',\n];\n\n/**\n * Fiat code implied by each MoonPay `deposit_rails` type that the app reads.\n */\nconst DEPOSIT_RAIL_CURRENCIES: Readonly<Record<string, string>> = {\n Pix: 'BRL',\n SEPA: 'EUR',\n ACH: 'USD',\n Wire: 'USD',\n RTP: 'USD',\n FedNow: 'USD',\n};\n\n/**\n * Reads a non-empty string field from a deposit rail.\n *\n * @param record - Deposit rail object.\n * @param key - MoonPay field name.\n * @returns The value, or undefined when missing or empty.\n */\nfunction readRailString(\n record: Record<string, unknown>,\n key: string,\n): string | undefined {\n const value = record[key];\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\n/**\n * Lists the object entries of a MoonPay `deposit_rails` value.\n *\n * @param depositRails - MoonPay `deposit_rails` value.\n * @returns Rail objects, skipping anything that is not an object.\n */\nfunction readDepositRails(depositRails: unknown): Record<string, unknown>[] {\n if (!Array.isArray(depositRails)) {\n return [];\n }\n return depositRails.filter(\n (rail): rail is Record<string, unknown> =>\n rail !== null && typeof rail === 'object',\n );\n}\n\n/**\n * Fiat of the rail {@link NeoBankService.getDepositInstructions} would return.\n * Incomplete rails do not count, so a stub PIX entry cannot label an ACH account\n * as BRL. SEPA is included when it has an IBAN, which is the EUR equivalent.\n *\n * @param depositRails - MoonPay `deposit_rails` value.\n * @returns Uppercase fiat code, or undefined when no rail is complete.\n */\nfunction readDepositRailCurrency(depositRails: unknown): string | undefined {\n if (extractPixDepositInstructions(depositRails)) {\n return DEPOSIT_RAIL_CURRENCIES.Pix;\n }\n if (extractUsBankDepositInstructions(depositRails)) {\n return DEPOSIT_RAIL_CURRENCIES.ACH;\n }\n const sepa = readDepositRails(depositRails).find(\n (rail) => rail.type === 'SEPA' && readRailString(rail, 'iban'),\n );\n return sepa ? DEPOSIT_RAIL_CURRENCIES.SEPA : undefined;\n}\n\n/**\n * Pulls US bank transfer details out of an autoramp `deposit_rails` array.\n * ACH is preferred, then Wire, RTP, and FedNow.\n *\n * @param depositRails - MoonPay `deposit_rails` value.\n * @returns US bank details, or null when no complete US rail is present.\n */\nexport function extractUsBankDepositInstructions(\n depositRails: unknown,\n): UsBankDepositInstructions | null {\n const rails = readDepositRails(depositRails);\n for (const railType of US_BANK_DEPOSIT_RAILS) {\n for (const record of rails) {\n if (record.type !== railType) {\n continue;\n }\n const accountHolder = readRailString(record, 'recipient_name');\n const routingNumber = readRailString(record, 'routing_number');\n const accountNumber = readRailString(record, 'account_number');\n const bankName = readRailString(record, 'bank_name');\n if (!accountHolder || !routingNumber || !accountNumber || !bankName) {\n continue;\n }\n const instructions: UsBankDepositInstructions = {\n rail: railType,\n accountHolder,\n routingNumber,\n accountNumber,\n bankName,\n };\n const bankAddress = readRailString(record, 'bank_address');\n if (bankAddress) {\n instructions.bankAddress = bankAddress;\n }\n const accountHolderAddress = readRailString(record, 'recipient_address');\n if (accountHolderAddress) {\n instructions.accountHolderAddress = accountHolderAddress;\n }\n return instructions;\n }\n }\n return null;\n}\n\n/**\n * Reads a decimal amount from a MoonPay `Amount` object.\n *\n * @param value - `source_amount` or `destination_amount`.\n * @returns Decimal string, or undefined.\n */\nfunction readAmount(value: unknown): string | undefined {\n if (value === null || typeof value !== 'object') {\n return undefined;\n }\n const { amount } = value as { amount?: unknown };\n return typeof amount === 'string' && amount.length > 0 ? amount : undefined;\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 extends BaseDataService<\n typeof serviceName,\n NeoBankServiceMessenger\n> {\n readonly #fetch: typeof fetch;\n\n readonly #environment: RampsEnvironment;\n\n readonly #context: string;\n\n readonly #baseUrlOverride?: string;\n\n #walletRegistrationService: WalletRegistrationService | undefined;\n\n #customerIdPromise: Promise<string> | 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 super({\n name: serviceName,\n messenger,\n policyOptions: {\n retryFilterPolicy: handleWhen(isRetryableError),\n ...policyOptions,\n },\n });\n this.#fetch = fetchFunction;\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 /**\n * Performs one authenticated GET.\n *\n * @param path - Path under `/neobank`.\n * @param query - Optional query params.\n * @returns Parsed JSON body.\n */\n async #getJson<ResponseBody extends Json = Json>(\n path: string,\n query?: NeoBankQueryParams,\n ): Promise<ResponseBody> {\n const url = this.#buildUrl(path, query);\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 * Performs one authenticated JSON POST.\n *\n * @param path - Path under `/neobank`.\n * @param body - JSON request body.\n * @param options - Optional idempotency key.\n * @returns Parsed JSON body.\n */\n async #postJson<ResponseBody extends Json = Json>(\n path: string,\n body: Record<string, unknown>,\n options: NeoBankRequestOptions,\n ): Promise<ResponseBody> {\n const url = this.#buildUrl(path);\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 * 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.fetchQuery({\n queryKey: [`${this.name}:getAutoramp`, autorampId],\n staleTime: 0,\n gcTime: 0,\n responseStruct: AutorampResponseStruct,\n queryFn: async () =>\n this.#getJson<Infer<typeof AutorampResponseStruct>>(\n `autoramps/${encodeURIComponent(autorampId)}`,\n ),\n });\n return mapNeoBankAutorampToRemoteSnapshot(\n response as NeoBankAutorampResponse,\n );\n }\n\n /**\n * Fetches autoramp accounts, following MoonPay `cursor` pages until the\n * list is complete.\n *\n * Pass `customerId` to scope the list to one MoonPay customer. Omitting it\n * asks the proxy for the partner-wide list. Each request uses MoonPay's\n * maximum `page_size`.\n *\n * @param params - Optional filters.\n * @param params.customerId - MoonPay customer id.\n * @returns Remote snapshots for every page.\n */\n async getAutoramps(\n params: { customerId?: string } = {},\n ): Promise<AutorampRemoteSnapshot[]> {\n const autoramps: Infer<typeof AutorampResponseStruct>[] = [];\n const seenCursors = new Set<string>();\n let cursor: string | undefined;\n\n do {\n const query: NeoBankQueryParams = {\n customer_id: params.customerId,\n page_size: AUTORAMP_LIST_PAGE_SIZE,\n cursor,\n };\n const response = await this.fetchQuery({\n queryKey: [`${this.name}:getAutoramps`, toQueryKeyParams(query)],\n staleTime: 0,\n gcTime: 0,\n responseStruct: AutorampListResponseStruct,\n queryFn: async () =>\n this.#getJson<Infer<typeof AutorampListResponseStruct>>(\n 'autoramps',\n query,\n ),\n });\n autoramps.push(...readPagedItems(response));\n const nextCursor = readNextCursor(response);\n if (nextCursor === undefined || seenCursors.has(nextCursor)) {\n break;\n }\n seenCursors.add(nextCursor);\n cursor = nextCursor;\n } while (cursor !== undefined);\n\n return autoramps.map((autoramp) =>\n mapNeoBankAutorampToRemoteSnapshot(autoramp as NeoBankAutorampResponse),\n );\n }\n\n /**\n * Loads PIX deposit instructions for an autoramp.\n *\n * Calls `GET /neobank/autoramps/{id}` and reads the `type: Pix` rail\n * (`br_code`, `instruction`, optional `pix_key`). Returns null until MoonPay\n * has attached deposit rails (typically once the autoramp is Approved).\n *\n * @param autorampId - MoonPay autoramp id.\n * @returns PIX instructions, or null when the rail is not ready.\n */\n async getPixDepositInstructions(\n autorampId: string,\n ): Promise<PixDepositInstructions | null> {\n const response = await this.fetchQuery({\n queryKey: [`${this.name}:getPixDepositInstructions`, autorampId],\n staleTime: 0,\n gcTime: 0,\n responseStruct: PixAutorampResponseStruct,\n queryFn: async () =>\n this.#getJson<Infer<typeof PixAutorampResponseStruct>>(\n `autoramps/${encodeURIComponent(autorampId)}`,\n ),\n });\n return extractPixDepositInstructions(\n (response as Pick<NeoBankAutorampResponse, 'deposit_rails'>)\n .deposit_rails,\n );\n }\n\n /**\n * Loads deposit details for an autoramp, whichever rail it has.\n *\n * Calls `GET /neobank/autoramps/{id}` and reads the PIX rail, or else a US\n * bank rail (`ACH`, `Wire`, `RTP`, or `FedNow`). Returns null until MoonPay\n * has attached a supported rail. MoonPay only verifies the rail at\n * `Approved`, so callers should not show these details before then.\n *\n * @param autorampId - MoonPay autoramp id.\n * @returns Deposit details discriminated by `type`, or null.\n */\n async getDepositInstructions(\n autorampId: string,\n ): Promise<AutorampDepositInstructions | null> {\n const response = await this.fetchQuery({\n queryKey: [`${this.name}:getDepositInstructions`, autorampId],\n staleTime: 0,\n gcTime: 0,\n responseStruct: PixAutorampResponseStruct,\n queryFn: async () =>\n this.#getJson<Infer<typeof PixAutorampResponseStruct>>(\n `autoramps/${encodeURIComponent(autorampId)}`,\n ),\n });\n const { deposit_rails: depositRails } = response as Pick<\n NeoBankAutorampResponse,\n 'deposit_rails'\n >;\n const pix = extractPixDepositInstructions(depositRails);\n if (pix) {\n return { type: 'Pix', ...pix };\n }\n const usBank = extractUsBankDepositInstructions(depositRails);\n return usBank ? { type: 'UsBank', ...usBank } : null;\n }\n\n /**\n * Lists the newest page of transactions for one autoramp via\n * `GET /neobank/autoramp-transactions?autoramp_id=&sort_order=desc`.\n *\n * This is the first page only, not the full history. Poll `status`\n * (`Completed`, `Failed`, …). The deprecated `state` field is ignored.\n *\n * @param autorampId - MoonPay autoramp id.\n * @param options - Optional page size. Omitted requests use the API default.\n * @param options.pageSize - `page_size` query value. Callers that diff\n * status pass 50.\n * @returns Transaction summaries from the newest page.\n */\n async listAutorampTransactions(\n autorampId: string,\n options?: { pageSize?: number },\n ): Promise<AutorampTransactionSummary[]> {\n const query: NeoBankQueryParams = {\n autoramp_id: autorampId,\n sort_order: 'desc',\n ...(options?.pageSize === undefined\n ? {}\n : { page_size: options.pageSize }),\n };\n const response = await this.fetchQuery({\n queryKey: [\n `${this.name}:listAutorampTransactions`,\n toQueryKeyParams(query),\n ],\n staleTime: 0,\n gcTime: 0,\n responseStruct: AutorampTransactionListResponseStruct,\n queryFn: async () =>\n this.#getJson<Infer<typeof AutorampTransactionListResponseStruct>>(\n 'autoramp-transactions',\n query,\n ),\n });\n return readPagedItems(response).map((transaction) => {\n const record = transaction as typeof transaction & {\n autoramp_id?: unknown;\n source_amount?: unknown;\n destination_amount?: unknown;\n created_at?: unknown;\n };\n const createdAt =\n typeof record.created_at === 'string' && record.created_at.length > 0\n ? record.created_at\n : undefined;\n return {\n id: record.id,\n autorampId:\n typeof record.autoramp_id === 'string'\n ? record.autoramp_id\n : autorampId,\n status: record.status,\n sourceAmount: readAmount(record.source_amount),\n destinationAmount: readAmount(record.destination_amount),\n createdAt,\n };\n });\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<Json> {\n return this.executeMutation({\n mutationKey: [`${this.name}:registerPixAddress`],\n gcTime: 0,\n mutationFn: async () => this.#postJson('addresses/pix', body, options),\n });\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<Json> {\n return this.fetchQuery({\n queryKey: [`${this.name}:getAutorampQuote`, toQueryKeyParams(query)],\n staleTime: 0,\n gcTime: 0,\n queryFn: async () => this.#getJson('autoramps/quote', query),\n });\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.executeMutation({\n mutationKey: [`${this.name}:createAutoramp`],\n gcTime: 0,\n responseStruct: AutorampResponseStruct,\n mutationFn: async () =>\n this.#postJson<Infer<typeof AutorampResponseStruct>>(\n 'autoramps',\n body,\n options,\n ),\n });\n return mapNeoBankAutorampToRemoteSnapshot(\n response as NeoBankAutorampResponse,\n );\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<Json> {\n return this.fetchQuery({\n queryKey: [\n `${this.name}:getAutorampQuoteForAutoramp`,\n autorampId,\n toQueryKeyParams(query),\n ],\n staleTime: 0,\n gcTime: 0,\n queryFn: async () =>\n this.#getJson(\n `autoramps/${encodeURIComponent(autorampId)}/quote`,\n query,\n ),\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<Json> {\n return this.executeMutation({\n mutationKey: [`${this.name}:attachAutorampQuote`, autorampId],\n gcTime: 0,\n mutationFn: async () =>\n this.#postJson(\n `autoramps/${encodeURIComponent(autorampId)}/quotes`,\n body,\n options,\n ),\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<Json> {\n return this.fetchQuery({\n queryKey: [`${this.name}:getCustomerByExternalId`, externalId],\n staleTime: 0,\n gcTime: 0,\n queryFn: async () =>\n this.#getJson(`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 * Lists the customer's bank-link microdeposits via neobank-proxy\n * `GET /neobank/customers/{customer_id}/microdeposits` (MoonPay\n * `GET /api/customers/{id}/microdeposits`).\n *\n * The customer id is resolved through {@link getMoonpayCustomerId} at most\n * once per service instance; concurrent callers share the in-flight lookup\n * and a failed lookup is retried by the next call. A 404 (from the customer\n * lookup or the list) means there is no customer or no deposits yet and\n * resolves `[]`. Any other non-2xx response throws an {@link HttpError}. The\n * customer lookup is a single attempt: it does not go through the retry\n * policy.\n *\n * @returns MoonPay microdeposits, unmodified.\n */\n async getMicrodeposits(): Promise<NeoBankMicrodeposit[]> {\n let response: Infer<typeof MicrodepositListResponseStruct>;\n try {\n this.#customerIdPromise ??= this.getMoonpayCustomerId().catch(\n (error: unknown) => {\n this.#customerIdPromise = undefined;\n // The lookup runs outside the service policy and throws\n // WalletRegistrationError; surface HTTP failures as HttpError like\n // every other method.\n if (error instanceof WalletRegistrationError && error.httpStatus) {\n throw new HttpError(\n error.httpStatus,\n `Fetching neo-bank customer lookup failed with status '${error.httpStatus}'${error.body ? ` - ${error.body}` : ''}`,\n );\n }\n throw error;\n },\n );\n const customerId = await this.#customerIdPromise;\n response = await this.fetchQuery({\n queryKey: [`${this.name}:getMicrodeposits`, customerId],\n staleTime: 0,\n gcTime: 0,\n responseStruct: MicrodepositListResponseStruct,\n queryFn: async () =>\n this.#getJson<Infer<typeof MicrodepositListResponseStruct>>(\n `customers/${encodeURIComponent(customerId)}/microdeposits`,\n ),\n });\n } catch (error) {\n if ((error as { httpStatus?: unknown }).httpStatus === 404) {\n return [];\n }\n throw error;\n }\n return response as NeoBankMicrodeposit[];\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"]}
|
|
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 AutorampDepositInstructions,\n AutorampDepositRailsSummary,\n AutorampRemoteSnapshot,\n AutorampTransactionSummary,\n PixDepositInstructions,\n UsBankDepositInstructions,\n UsBankDepositRail,\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 /**\n * Some MoonPay autoramp responses put the destination under `recipient`\n * instead of `recipient_account`.\n */\n recipient?: {\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 'getAutoramps',\n 'registerPixAddress',\n 'getAutorampQuote',\n 'createAutoramp',\n 'getAutorampQuoteForAutoramp',\n 'attachAutorampQuote',\n 'getCustomerByExternalId',\n 'getMoonpayCustomerId',\n 'getWalletRegistrationStatus',\n 'registerSelfHostedWallet',\n 'getPixDepositInstructions',\n 'getDepositInstructions',\n 'listAutorampTransactions',\n] as const;\n\n/**\n * MoonPay's maximum `page_size` for `GET /api/autoramps`.\n */\nconst AUTORAMP_LIST_PAGE_SIZE = 100;\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 currency = readDepositRailCurrency(depositRails);\n const depositRailsSummary: AutorampDepositRailsSummary | undefined =\n hasDepositRails || response.status === 'Approved'\n ? {\n ready: response.status === 'Approved' && hasDepositRails,\n ...(currency ? { currency } : {}),\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 ?? response.recipient?.address),\n status: response.status,\n depositRailsSummary,\n };\n}\n\n/**\n * Reads a MoonPay paged list (an object with an items array) or a raw array.\n *\n * @param response - Proxy JSON body.\n * @param malformedMessage - Error when the body is neither shape.\n * @returns Item list.\n */\nfunction readPagedItems(\n response: unknown,\n malformedMessage: string,\n): unknown[] {\n if (Array.isArray(response)) {\n return response;\n }\n if (\n response !== null &&\n typeof response === 'object' &&\n Array.isArray((response as { items?: unknown }).items)\n ) {\n return (response as { items: unknown[] }).items;\n }\n throw new Error(malformedMessage);\n}\n\n/**\n * Reads the next-page cursor from a MoonPay paged list.\n * A raw array has no further page.\n *\n * @param response - Proxy JSON body.\n * @returns Next cursor, or undefined when this page is the last.\n */\nfunction readNextCursor(response: unknown): string | undefined {\n if (\n response === null ||\n typeof response !== 'object' ||\n Array.isArray(response)\n ) {\n return undefined;\n }\n const { cursor } = response as { cursor?: unknown };\n return typeof cursor === 'string' && cursor.length > 0 ? cursor : undefined;\n}\n\n/**\n * Pulls the PIX deposit rail out of an autoramp `deposit_rails` array.\n *\n * @param depositRails - MoonPay `deposit_rails` value.\n * @returns PIX instructions, or null when no usable PIX rail is present.\n */\nexport function extractPixDepositInstructions(\n depositRails: unknown,\n): PixDepositInstructions | null {\n if (!Array.isArray(depositRails)) {\n return null;\n }\n for (const rail of depositRails) {\n if (rail === null || typeof rail !== 'object') {\n continue;\n }\n const record = rail as Record<string, unknown>;\n if (record.type !== 'Pix') {\n continue;\n }\n if (\n typeof record.br_code !== 'string' ||\n record.br_code.length === 0 ||\n typeof record.instruction !== 'string' ||\n record.instruction.length === 0\n ) {\n continue;\n }\n const instructions: PixDepositInstructions = {\n brCode: record.br_code,\n instruction: record.instruction,\n };\n if (typeof record.pix_key === 'string' && record.pix_key.length > 0) {\n instructions.pixKey = record.pix_key;\n }\n if (typeof record.expires_at === 'string' && record.expires_at.length > 0) {\n instructions.expiresAt = record.expires_at;\n }\n return instructions;\n }\n return null;\n}\n\n/**\n * US rails in the order to prefer when an autoramp lists more than one.\n */\nconst US_BANK_DEPOSIT_RAILS: readonly UsBankDepositRail[] = [\n 'ACH',\n 'Wire',\n 'RTP',\n 'FedNow',\n];\n\n/**\n * Fiat code implied by each MoonPay `deposit_rails` type that the app reads.\n */\nconst DEPOSIT_RAIL_CURRENCIES: Readonly<Record<string, string>> = {\n Pix: 'BRL',\n SEPA: 'EUR',\n ACH: 'USD',\n Wire: 'USD',\n RTP: 'USD',\n FedNow: 'USD',\n};\n\n/**\n * Reads a non-empty string field from a deposit rail.\n *\n * @param record - Deposit rail object.\n * @param key - MoonPay field name.\n * @returns The value, or undefined when missing or empty.\n */\nfunction readRailString(\n record: Record<string, unknown>,\n key: string,\n): string | undefined {\n const value = record[key];\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\n/**\n * Lists the object entries of a MoonPay `deposit_rails` value.\n *\n * @param depositRails - MoonPay `deposit_rails` value.\n * @returns Rail objects, skipping anything that is not an object.\n */\nfunction readDepositRails(depositRails: unknown): Record<string, unknown>[] {\n if (!Array.isArray(depositRails)) {\n return [];\n }\n return depositRails.filter(\n (rail): rail is Record<string, unknown> =>\n rail !== null && typeof rail === 'object',\n );\n}\n\n/**\n * Fiat of the rail {@link NeoBankService.getDepositInstructions} would return.\n * Incomplete rails do not count, so a stub PIX entry cannot label an ACH account\n * as BRL. SEPA is included when it has an IBAN, which is the EUR equivalent.\n *\n * @param depositRails - MoonPay `deposit_rails` value.\n * @returns Uppercase fiat code, or undefined when no rail is complete.\n */\nfunction readDepositRailCurrency(depositRails: unknown): string | undefined {\n if (extractPixDepositInstructions(depositRails)) {\n return DEPOSIT_RAIL_CURRENCIES.Pix;\n }\n if (extractUsBankDepositInstructions(depositRails)) {\n return DEPOSIT_RAIL_CURRENCIES.ACH;\n }\n const sepa = readDepositRails(depositRails).find(\n (rail) => rail.type === 'SEPA' && readRailString(rail, 'iban'),\n );\n return sepa ? DEPOSIT_RAIL_CURRENCIES.SEPA : undefined;\n}\n\n/**\n * Pulls US bank transfer details out of an autoramp `deposit_rails` array.\n * ACH is preferred, then Wire, RTP, and FedNow.\n *\n * @param depositRails - MoonPay `deposit_rails` value.\n * @returns US bank details, or null when no complete US rail is present.\n */\nexport function extractUsBankDepositInstructions(\n depositRails: unknown,\n): UsBankDepositInstructions | null {\n const rails = readDepositRails(depositRails);\n for (const railType of US_BANK_DEPOSIT_RAILS) {\n for (const record of rails) {\n if (record.type !== railType) {\n continue;\n }\n const accountHolder = readRailString(record, 'recipient_name');\n const routingNumber = readRailString(record, 'routing_number');\n const accountNumber = readRailString(record, 'account_number');\n const bankName = readRailString(record, 'bank_name');\n if (!accountHolder || !routingNumber || !accountNumber || !bankName) {\n continue;\n }\n const instructions: UsBankDepositInstructions = {\n rail: railType,\n accountHolder,\n routingNumber,\n accountNumber,\n bankName,\n };\n const bankAddress = readRailString(record, 'bank_address');\n if (bankAddress) {\n instructions.bankAddress = bankAddress;\n }\n const accountHolderAddress = readRailString(record, 'recipient_address');\n if (accountHolderAddress) {\n instructions.accountHolderAddress = accountHolderAddress;\n }\n return instructions;\n }\n }\n return null;\n}\n\n/**\n * Reads a decimal amount from a MoonPay `Amount` object.\n *\n * @param value - `source_amount` or `destination_amount`.\n * @returns Decimal string, or undefined.\n */\nfunction readAmount(value: unknown): string | undefined {\n if (value === null || typeof value !== 'object') {\n return undefined;\n }\n const { amount } = value as { amount?: unknown };\n return typeof amount === 'string' && amount.length > 0 ? amount : undefined;\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 * Fetches autoramp accounts, following MoonPay `cursor` pages until the\n * list is complete.\n *\n * Pass `customerId` to scope the list to one MoonPay customer. Omitting it\n * asks the proxy for the partner-wide list. Each request uses MoonPay's\n * maximum `page_size`.\n *\n * @param params - Optional filters.\n * @param params.customerId - MoonPay customer id.\n * @returns Remote snapshots for every page.\n */\n async getAutoramps(\n params: { customerId?: string } = {},\n ): Promise<AutorampRemoteSnapshot[]> {\n const autoramps: unknown[] = [];\n const seenCursors = new Set<string>();\n let cursor: string | undefined;\n\n do {\n const response = await this.#getJson<unknown>('autoramps', {\n customer_id: params.customerId,\n page_size: AUTORAMP_LIST_PAGE_SIZE,\n cursor,\n });\n autoramps.push(\n ...readPagedItems(\n response,\n 'Malformed response received from neo-bank autoramps API',\n ),\n );\n const nextCursor = readNextCursor(response);\n if (nextCursor === undefined || seenCursors.has(nextCursor)) {\n break;\n }\n seenCursors.add(nextCursor);\n cursor = nextCursor;\n } while (cursor !== undefined);\n\n return autoramps.map((autoramp) =>\n this.#mapAutorampResponse(autoramp as NeoBankAutorampResponse),\n );\n }\n\n /**\n * Loads PIX deposit instructions for an autoramp.\n *\n * Calls `GET /neobank/autoramps/{id}` and reads the `type: Pix` rail\n * (`br_code`, `instruction`, optional `pix_key`). Returns null until MoonPay\n * has attached deposit rails (typically once the autoramp is Approved).\n *\n * @param autorampId - MoonPay autoramp id.\n * @returns PIX instructions, or null when the rail is not ready.\n */\n async getPixDepositInstructions(\n autorampId: string,\n ): Promise<PixDepositInstructions | null> {\n const response = await this.#getJson<NeoBankAutorampResponse>(\n `autoramps/${encodeURIComponent(autorampId)}`,\n );\n if (!response || typeof response !== 'object') {\n throw new Error('Malformed response received from neo-bank autoramp API');\n }\n return extractPixDepositInstructions(response.deposit_rails);\n }\n\n /**\n * Loads deposit details for an autoramp, whichever rail it has.\n *\n * Calls `GET /neobank/autoramps/{id}` and reads the PIX rail, or else a US\n * bank rail (`ACH`, `Wire`, `RTP`, or `FedNow`). Returns null until MoonPay\n * has attached a supported rail. MoonPay only verifies the rail at\n * `Approved`, so callers should not show these details before then.\n *\n * @param autorampId - MoonPay autoramp id.\n * @returns Deposit details discriminated by `type`, or null.\n */\n async getDepositInstructions(\n autorampId: string,\n ): Promise<AutorampDepositInstructions | null> {\n const response = await this.#getJson<NeoBankAutorampResponse>(\n `autoramps/${encodeURIComponent(autorampId)}`,\n );\n if (!response || typeof response !== 'object') {\n throw new Error('Malformed response received from neo-bank autoramp API');\n }\n const pix = extractPixDepositInstructions(response.deposit_rails);\n if (pix) {\n return { type: 'Pix', ...pix };\n }\n const usBank = extractUsBankDepositInstructions(response.deposit_rails);\n return usBank ? { type: 'UsBank', ...usBank } : null;\n }\n\n /**\n * Lists the newest page of transactions for one autoramp via\n * `GET /neobank/autoramp-transactions?autoramp_id=&sort_order=desc`.\n *\n * This is the first page only, not the full history. Poll `status`\n * (`Completed`, `Failed`, …). The deprecated `state` field is ignored.\n *\n * @param autorampId - MoonPay autoramp id.\n * @param options - Optional page size. Omitted requests use the API default.\n * @param options.pageSize - `page_size` query value. Callers that diff\n * status pass 50.\n * @returns Transaction summaries from the newest page.\n */\n async listAutorampTransactions(\n autorampId: string,\n options?: { pageSize?: number },\n ): Promise<AutorampTransactionSummary[]> {\n const response = await this.#getJson<unknown>('autoramp-transactions', {\n autoramp_id: autorampId,\n sort_order: 'desc',\n ...(options?.pageSize === undefined\n ? {}\n : { page_size: options.pageSize }),\n });\n const transactions = readPagedItems(\n response,\n 'Malformed response received from neo-bank autoramp transactions API',\n );\n return transactions.map((transaction) => {\n if (\n transaction === null ||\n typeof transaction !== 'object' ||\n typeof (transaction as { id?: unknown }).id !== 'string'\n ) {\n throw new Error(\n 'Malformed response received from neo-bank autoramp transactions API',\n );\n }\n const record = transaction as {\n id: string;\n autoramp_id?: unknown;\n status?: unknown;\n source_amount?: unknown;\n destination_amount?: unknown;\n created_at?: unknown;\n };\n if (typeof record.status !== 'string') {\n throw new Error(\n 'Malformed response received from neo-bank autoramp transactions API',\n );\n }\n const createdAt =\n typeof record.created_at === 'string' && record.created_at.length > 0\n ? record.created_at\n : undefined;\n return {\n id: record.id,\n autorampId:\n typeof record.autoramp_id === 'string'\n ? record.autoramp_id\n : autorampId,\n status: record.status,\n sourceAmount: readAmount(record.source_amount),\n destinationAmount: readAmount(record.destination_amount),\n createdAt,\n };\n });\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"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -31,8 +31,8 @@ export { buildOwnershipMessage } from './ownership-message.js';
|
|
|
31
31
|
export type { AutorampTransactionRecord, AutorampTransactionRecords, AutorampTransactionChange, } from './diffAutorampTransactions.js';
|
|
32
32
|
export { diffAutorampTransactions } from './diffAutorampTransactions.js';
|
|
33
33
|
export type { AutorampDepositInstructions, AutorampDepositRailsSummary, AutorampRemoteSnapshot, AutorampTransactionSummary, PixDepositInstructions, UsBankDepositInstructions, UsBankDepositRail, } from './autoramp-types.js';
|
|
34
|
-
export type { NeoBankServiceActions,
|
|
35
|
-
export type { NeoBankServiceGetAutorampAction, NeoBankServiceGetAutorampsAction, NeoBankServiceGetPixDepositInstructionsAction, NeoBankServiceGetDepositInstructionsAction, NeoBankServiceListAutorampTransactionsAction, NeoBankServiceRegisterPixAddressAction, NeoBankServiceGetAutorampQuoteAction, NeoBankServiceCreateAutorampAction, NeoBankServiceGetAutorampQuoteForAutorampAction, NeoBankServiceAttachAutorampQuoteAction, NeoBankServiceGetCustomerByExternalIdAction, NeoBankServiceGetMoonpayCustomerIdAction,
|
|
34
|
+
export type { NeoBankServiceActions, NeoBankServiceEvents, NeoBankServiceMessenger, NeoBankAutorampResponse, NeoBankRequestOptions, NeoBankQueryParams, GetWalletRegistrationStatusParams, RegisterSelfHostedWalletParams, } from './NeoBankService.js';
|
|
35
|
+
export type { NeoBankServiceGetAutorampAction, NeoBankServiceGetAutorampsAction, NeoBankServiceGetPixDepositInstructionsAction, NeoBankServiceGetDepositInstructionsAction, NeoBankServiceListAutorampTransactionsAction, NeoBankServiceRegisterPixAddressAction, NeoBankServiceGetAutorampQuoteAction, NeoBankServiceCreateAutorampAction, NeoBankServiceGetAutorampQuoteForAutorampAction, NeoBankServiceAttachAutorampQuoteAction, NeoBankServiceGetCustomerByExternalIdAction, NeoBankServiceGetMoonpayCustomerIdAction, NeoBankServiceGetWalletRegistrationStatusAction, NeoBankServiceRegisterSelfHostedWalletAction, } from './NeoBankService-method-action-types.js';
|
|
36
36
|
export { NeoBankService, serviceName as neoBankServiceName, mapNeoBankAutorampToRemoteSnapshot, extractPixDepositInstructions, extractUsBankDepositInstructions, } from './NeoBankService.js';
|
|
37
37
|
export type { Blockchain, RegistrationOutcome, RegistrationStatus, SelfHostedRegistration, WalletRegistrationErrorKind, } from './wallet-registration-service.js';
|
|
38
38
|
export { WalletRegistrationError } from './wallet-registration-service.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwFA,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,0BAA0B,EAC1B,8BAA8B,EAC9B,oBAAoB,EACpB,yCAAyC,EACzC,4CAA4C,GAC7C,MAAM,sBAAsB,CAAC;AAwC9B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAmB9B,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,8BAA8B,EAC9B,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EACL,sCAAsC,EACtC,qCAAqC,EACrC,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EACL,iCAAiC,EACjC,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,+BAA+B,EAC/B,+BAA+B,EAC/B,mCAAmC,EACnC,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AA2BlC,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AAmBnC,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAM/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAyCzE,OAAO,EACL,cAAc,EACd,WAAW,IAAI,kBAAkB,EACjC,kCAAkC,EAClC,6BAA6B,EAC7B,gCAAgC,GACjC,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC","sourcesContent":["export type {\n RampsControllerActions,\n RampsControllerEvents,\n RampsControllerGetStateAction,\n RampsControllerMessenger,\n RampsControllerState,\n RampsControllerStateChangeEvent,\n RampsControllerOrderStatusChangedEvent,\n RampsControllerAutorampStatusChangedEvent,\n AutorampTransactionStatusChangedPayload,\n RampsControllerOptions,\n PaymentMethodsForContextResponse,\n UserRegion,\n ResourceState,\n TransakState,\n NativeProvidersState,\n MoneyAccountWalletRegistration,\n MoneyAccountWalletRegistrationResult,\n KeyringControllerSignPersonalMessageAction,\n VbaAutorampStatus,\n VbaKycStatus,\n VbaOnboardingSnapshot,\n VbaProviderFlowStatus,\n} from './RampsController.js';\nexport type {\n RampsControllerExecuteRequestAction,\n RampsControllerAbortRequestAction,\n RampsControllerGetRequestStateAction,\n RampsControllerSetUserRegionAction,\n RampsControllerSetSelectedProviderAction,\n RampsControllerSetSelectedProviderForAssetAction,\n RampsControllerInitAction,\n RampsControllerGetCountriesAction,\n RampsControllerGetTokensAction,\n RampsControllerSetSelectedTokenAction,\n RampsControllerGetProvidersAction,\n RampsControllerGetPaymentMethodsAction,\n RampsControllerGetPaymentMethodsForContextAction,\n RampsControllerSetSelectedPaymentMethodAction,\n RampsControllerGetQuotesAction,\n RampsControllerGetQuoteWithFeesAction,\n RampsControllerAddOrderAction,\n RampsControllerRemoveOrderAction,\n RampsControllerAddAutorampAction,\n RampsControllerCreateAutorampAction,\n RampsControllerHydrateVbaOnboardingAction,\n RampsControllerRemoveAutorampAction,\n RampsControllerRegisterMoneyAccountWalletAction,\n RampsControllerMarkAutorampAsNotifiedAction,\n RampsControllerApplyAutorampStatusFromPushAction,\n RampsControllerRefreshAutorampAction,\n RampsControllerRefreshAutorampsAction,\n RampsControllerRefreshAutorampTransactionsAction,\n RampsControllerStartOrderPollingAction,\n RampsControllerStopOrderPollingAction,\n RampsControllerGetBuyWidgetDataAction,\n RampsControllerGetFallbackBuyWidgetDataAction,\n RampsControllerAddPrecreatedOrderAction,\n RampsControllerGetOrderAction,\n RampsControllerGetOrderFromCallbackAction,\n RampsControllerTransakSetApiKeyAction,\n RampsControllerTransakSetAccessTokenAction,\n RampsControllerTransakClearAccessTokenAction,\n RampsControllerTransakSetAuthenticatedAction,\n RampsControllerTransakResetStateAction,\n RampsControllerTransakSendUserOtpAction,\n RampsControllerTransakVerifyUserOtpAction,\n RampsControllerTransakLogoutAction,\n RampsControllerTransakGetUserDetailsAction,\n RampsControllerTransakGetBuyQuoteAction,\n RampsControllerTransakGetKycRequirementAction,\n RampsControllerTransakGetAdditionalRequirementsAction,\n RampsControllerTransakCreateOrderAction,\n RampsControllerTransakGetOrderAction,\n RampsControllerTransakGetUserLimitsAction,\n RampsControllerTransakRequestOttAction,\n RampsControllerTransakGeneratePaymentWidgetUrlAction,\n RampsControllerTransakSubmitPurposeOfUsageFormAction,\n RampsControllerTransakPatchUserAction,\n RampsControllerTransakSubmitSsnDetailsAction,\n RampsControllerTransakConfirmPaymentAction,\n RampsControllerTransakGetTranslationAction,\n RampsControllerTransakGetIdProofStatusAction,\n RampsControllerTransakCancelOrderAction,\n RampsControllerTransakCancelAllActiveOrdersAction,\n RampsControllerTransakGetActiveOrdersAction,\n RampsControllerSyncOrdersWithUserStorageAction,\n} from './RampsController-method-action-types.js';\nexport {\n RampsController,\n VBA_AUTORAMP_STATUSES,\n VBA_KYC_STATUSES,\n VBA_PROVIDER_FLOW_STATUSES,\n getDefaultRampsControllerState,\n getInternalOrderCode,\n RAMPS_CONTROLLER_REQUIRED_SERVICE_ACTIONS,\n RAMPS_CONTROLLER_REQUIRED_CONTROLLER_ACTIONS,\n} from './RampsController.js';\nexport type {\n RampsServiceActions,\n RampsServiceEvents,\n RampsServiceMessenger,\n Country,\n State,\n SupportedActions,\n CountryPhone,\n Provider,\n ProviderLink,\n ProviderLogos,\n ProviderBrowserType,\n ProviderLimit,\n ProviderFiatLimits,\n ProviderLimits,\n ProviderSortOrder,\n ProvidersResponse,\n RampAction,\n PaymentMethod,\n PaymentMethodsResponse,\n Quote,\n QuoteError,\n QuoteSortBy,\n QuoteSortOrder,\n QuoteCryptoTranslation,\n QuoteCustomAction,\n QuotesResponse,\n GetQuotesParams,\n RampsToken,\n TokensResponse,\n BuyWidget,\n BuyWidgetFallback,\n RampsOrder,\n RampsOrderNetwork,\n RampsOrderCryptoCurrency,\n RampsOrderFiatCurrency,\n RampsOrderPaymentMethod,\n OrderPaymentDetail,\n} from './RampsService.js';\nexport {\n RampsService,\n RampsEnvironment,\n RampsApiService,\n RampsOrderStatus,\n RAMPS_SDK_VERSION,\n getDefaultRedirectCallbackUrl,\n} from './RampsService.js';\nexport type { RampsClientIdentity } from './client-identity.js';\nexport {\n addRampsClientIdentityParams,\n RAMPS_CLIENT_PRODUCT_PARAM,\n RAMPS_CLIENT_VERSION_PARAM,\n} from './client-identity.js';\nexport type {\n RampsServiceGetDefaultRedirectCallbackUrlAction,\n RampsServiceGetGeolocationAction,\n RampsServiceGetCountriesAction,\n RampsServiceGetPaymentMethodsAction,\n RampsServiceGetQuotesAction,\n RampsServiceGetBuyWidgetUrlAction,\n RampsServiceGetOrderAction,\n RampsServiceGetOrderFromCallbackAction,\n} from './RampsService-method-action-types.js';\nexport type {\n RequestCache,\n RequestState,\n ExecuteRequestOptions,\n PendingRequest,\n ResourceType,\n} from './RequestCache.js';\nexport type { RampsErrorCode } from './rampsErrorCodes.js';\nexport {\n RequestStatus,\n DEFAULT_REQUEST_CACHE_TTL,\n DEFAULT_REQUEST_CACHE_MAX_SIZE,\n createCacheKey,\n isCacheExpired,\n createLoadingState,\n createSuccessState,\n createErrorState,\n} from './RequestCache.js';\nexport { RAMPS_ERROR_CODES } from './rampsErrorCodes.js';\nexport type { RequestSelectorResult } from './selectors.js';\nexport { createRequestSelector } from './selectors.js';\nexport type { HeadlessFeatureFlagsLookup } from './featureFlags.js';\nexport {\n HEADLESS_ALL_PROVIDERS_FEATURE_VERSION,\n MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY,\n getHeadlessProviderAllowlist,\n isHeadlessAllProvidersEnabled,\n} from './featureFlags.js';\nexport {\n normalizeRampsAssetId,\n providerServesAsset,\n getProvidersServingAsset,\n regionHasProviderForAsset,\n isFiatDepositAvailable,\n} from './providerAvailability.js';\nexport {\n isExternalBrowserQuote,\n isCustomActionQuote,\n isInAppOnlyQuote,\n getBuyWidgetFallback,\n} from './quoteClassification.js';\nexport {\n TERMINAL_ORDER_STATUSES,\n isTerminalOrderStatus,\n} from './orderStatus.js';\nexport type { TypedError } from './errorNormalization.js';\nexport {\n getErrorMessage,\n extractExplicitTypedError,\n normalizeToTypedError,\n} from './errorNormalization.js';\nexport type {\n UserStorageRampsOrderEntry,\n SyncRampsOrder,\n OrderSyncingController,\n OrderSyncingOptions,\n SyncOrdersWithUserStorageConfig,\n} from './order-syncing/index.js';\nexport {\n USER_STORAGE_RAMPS_ORDERS_FEATURE,\n USER_STORAGE_VERSION,\n USER_STORAGE_VERSION_KEY,\n createOrderStorageKey,\n isSyncableOrder,\n mapRampsOrderToUserStorageEntry,\n mapUserStorageEntryToRampsOrder,\n stripPaymentDetailsForRemoteStorage,\n stripSyncMetadata,\n stripDeletedAt,\n areOrdersEqual,\n canPerformOrderSyncing,\n syncOrdersWithUserStorage,\n updateOrderInUserStorage,\n deleteOrderInUserStorage,\n} from './order-syncing/index.js';\nexport type {\n TransakServiceActions,\n TransakServiceEvents,\n TransakServiceMessenger,\n TransakAccessToken,\n TransakUserDetails,\n TransakUserDetailsAddress,\n TransakUserDetailsKycDetails,\n TransakBuyQuote,\n TransakKycRequirement,\n TransakAdditionalRequirement,\n TransakAdditionalRequirementsResponse,\n TransakOttResponse,\n TransakOrderPaymentMethod,\n TransakDepositOrder,\n TransakDepositNetwork,\n TransakDepositCryptoCurrency,\n TransakDepositPaymentMethod,\n TransakDepositRegion,\n TransakOrder,\n TransakQuoteTranslation,\n TransakTranslationRequest,\n TransakUserLimits,\n TransakIdProofStatus,\n PatchUserRequestBody as TransakPatchUserRequestBody,\n} from './TransakService.js';\nexport {\n TransakApiError,\n TransakService,\n TransakEnvironment,\n TransakOrderIdTransformer,\n} from './TransakService.js';\nexport {\n getTransakApiMessage,\n isTransakPhoneRegisteredError,\n} from './transakApiErrorUtils.js';\nexport type {\n TransakServiceMethodActions,\n TransakServiceSendUserOtpAction,\n TransakServiceVerifyUserOtpAction,\n TransakServiceGetUserDetailsAction,\n TransakServiceGetBuyQuoteAction,\n TransakServiceGetKycRequirementAction,\n TransakServiceCreateOrderAction,\n TransakServiceGetOrderAction,\n TransakServiceRequestOttAction,\n TransakServiceGeneratePaymentWidgetUrlAction,\n TransakServiceCreateWidgetUrlAction,\n} from './TransakService-method-action-types.js';\nexport type {\n AutorampAccount,\n ApplyAutorampRemoteStatusResult,\n CreateAutorampRequest,\n} from './autorampAccount.js';\nexport {\n AutorampStatus,\n TERMINAL_AUTORAMP_STATUSES,\n NOTABLE_AUTORAMP_STATUSES,\n isTerminalAutorampStatus,\n normalizeAutorampStatus,\n createAutorampAccount,\n applyAutorampRemoteStatus,\n markAutorampNotified,\n buildMusdAutorampRequest,\n buildBrazilMusdAutorampRequest,\n} from './autorampAccount.js';\nexport { buildOwnershipMessage } from './ownership-message.js';\nexport type {\n AutorampTransactionRecord,\n AutorampTransactionRecords,\n AutorampTransactionChange,\n} from './diffAutorampTransactions.js';\nexport { diffAutorampTransactions } from './diffAutorampTransactions.js';\nexport type {\n AutorampDepositInstructions,\n AutorampDepositRailsSummary,\n AutorampRemoteSnapshot,\n AutorampTransactionSummary,\n PixDepositInstructions,\n UsBankDepositInstructions,\n UsBankDepositRail,\n} from './autoramp-types.js';\nexport type {\n NeoBankServiceActions,\n NeoBankServiceCacheUpdatedEvent,\n NeoBankServiceEvents,\n NeoBankServiceGranularCacheUpdatedEvent,\n NeoBankServiceInvalidateQueriesAction,\n NeoBankServiceMessenger,\n NeoBankAutorampResponse,\n NeoBankMicrodeposit,\n NeoBankRequestOptions,\n NeoBankQueryParams,\n GetWalletRegistrationStatusParams,\n RegisterSelfHostedWalletParams,\n} from './NeoBankService.js';\nexport type {\n NeoBankServiceGetAutorampAction,\n NeoBankServiceGetAutorampsAction,\n NeoBankServiceGetPixDepositInstructionsAction,\n NeoBankServiceGetDepositInstructionsAction,\n NeoBankServiceListAutorampTransactionsAction,\n NeoBankServiceRegisterPixAddressAction,\n NeoBankServiceGetAutorampQuoteAction,\n NeoBankServiceCreateAutorampAction,\n NeoBankServiceGetAutorampQuoteForAutorampAction,\n NeoBankServiceAttachAutorampQuoteAction,\n NeoBankServiceGetCustomerByExternalIdAction,\n NeoBankServiceGetMoonpayCustomerIdAction,\n NeoBankServiceGetMicrodepositsAction,\n NeoBankServiceGetWalletRegistrationStatusAction,\n NeoBankServiceRegisterSelfHostedWalletAction,\n} from './NeoBankService-method-action-types.js';\nexport {\n NeoBankService,\n serviceName as neoBankServiceName,\n mapNeoBankAutorampToRemoteSnapshot,\n extractPixDepositInstructions,\n extractUsBankDepositInstructions,\n} from './NeoBankService.js';\nexport type {\n Blockchain,\n RegistrationOutcome,\n RegistrationStatus,\n SelfHostedRegistration,\n WalletRegistrationErrorKind,\n} from './wallet-registration-service.js';\nexport { WalletRegistrationError } from './wallet-registration-service.js';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAwFA,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,gBAAgB,EAChB,0BAA0B,EAC1B,8BAA8B,EAC9B,oBAAoB,EACpB,yCAAyC,EACzC,4CAA4C,GAC7C,MAAM,sBAAsB,CAAC;AAwC9B,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAmB9B,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,8BAA8B,EAC9B,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EACL,sCAAsC,EACtC,qCAAqC,EACrC,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAQjC,OAAO,EACL,iCAAiC,EACjC,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,+BAA+B,EAC/B,+BAA+B,EAC/B,mCAAmC,EACnC,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AA2BlC,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,oBAAoB,EACpB,6BAA6B,GAC9B,MAAM,2BAA2B,CAAC;AAmBnC,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,wBAAwB,EACxB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAM/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAoCzE,OAAO,EACL,cAAc,EACd,WAAW,IAAI,kBAAkB,EACjC,kCAAkC,EAClC,6BAA6B,EAC7B,gCAAgC,GACjC,MAAM,qBAAqB,CAAC;AAQ7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC","sourcesContent":["export type {\n RampsControllerActions,\n RampsControllerEvents,\n RampsControllerGetStateAction,\n RampsControllerMessenger,\n RampsControllerState,\n RampsControllerStateChangeEvent,\n RampsControllerOrderStatusChangedEvent,\n RampsControllerAutorampStatusChangedEvent,\n AutorampTransactionStatusChangedPayload,\n RampsControllerOptions,\n PaymentMethodsForContextResponse,\n UserRegion,\n ResourceState,\n TransakState,\n NativeProvidersState,\n MoneyAccountWalletRegistration,\n MoneyAccountWalletRegistrationResult,\n KeyringControllerSignPersonalMessageAction,\n VbaAutorampStatus,\n VbaKycStatus,\n VbaOnboardingSnapshot,\n VbaProviderFlowStatus,\n} from './RampsController.js';\nexport type {\n RampsControllerExecuteRequestAction,\n RampsControllerAbortRequestAction,\n RampsControllerGetRequestStateAction,\n RampsControllerSetUserRegionAction,\n RampsControllerSetSelectedProviderAction,\n RampsControllerSetSelectedProviderForAssetAction,\n RampsControllerInitAction,\n RampsControllerGetCountriesAction,\n RampsControllerGetTokensAction,\n RampsControllerSetSelectedTokenAction,\n RampsControllerGetProvidersAction,\n RampsControllerGetPaymentMethodsAction,\n RampsControllerGetPaymentMethodsForContextAction,\n RampsControllerSetSelectedPaymentMethodAction,\n RampsControllerGetQuotesAction,\n RampsControllerGetQuoteWithFeesAction,\n RampsControllerAddOrderAction,\n RampsControllerRemoveOrderAction,\n RampsControllerAddAutorampAction,\n RampsControllerCreateAutorampAction,\n RampsControllerHydrateVbaOnboardingAction,\n RampsControllerRemoveAutorampAction,\n RampsControllerRegisterMoneyAccountWalletAction,\n RampsControllerMarkAutorampAsNotifiedAction,\n RampsControllerApplyAutorampStatusFromPushAction,\n RampsControllerRefreshAutorampAction,\n RampsControllerRefreshAutorampsAction,\n RampsControllerRefreshAutorampTransactionsAction,\n RampsControllerStartOrderPollingAction,\n RampsControllerStopOrderPollingAction,\n RampsControllerGetBuyWidgetDataAction,\n RampsControllerGetFallbackBuyWidgetDataAction,\n RampsControllerAddPrecreatedOrderAction,\n RampsControllerGetOrderAction,\n RampsControllerGetOrderFromCallbackAction,\n RampsControllerTransakSetApiKeyAction,\n RampsControllerTransakSetAccessTokenAction,\n RampsControllerTransakClearAccessTokenAction,\n RampsControllerTransakSetAuthenticatedAction,\n RampsControllerTransakResetStateAction,\n RampsControllerTransakSendUserOtpAction,\n RampsControllerTransakVerifyUserOtpAction,\n RampsControllerTransakLogoutAction,\n RampsControllerTransakGetUserDetailsAction,\n RampsControllerTransakGetBuyQuoteAction,\n RampsControllerTransakGetKycRequirementAction,\n RampsControllerTransakGetAdditionalRequirementsAction,\n RampsControllerTransakCreateOrderAction,\n RampsControllerTransakGetOrderAction,\n RampsControllerTransakGetUserLimitsAction,\n RampsControllerTransakRequestOttAction,\n RampsControllerTransakGeneratePaymentWidgetUrlAction,\n RampsControllerTransakSubmitPurposeOfUsageFormAction,\n RampsControllerTransakPatchUserAction,\n RampsControllerTransakSubmitSsnDetailsAction,\n RampsControllerTransakConfirmPaymentAction,\n RampsControllerTransakGetTranslationAction,\n RampsControllerTransakGetIdProofStatusAction,\n RampsControllerTransakCancelOrderAction,\n RampsControllerTransakCancelAllActiveOrdersAction,\n RampsControllerTransakGetActiveOrdersAction,\n RampsControllerSyncOrdersWithUserStorageAction,\n} from './RampsController-method-action-types.js';\nexport {\n RampsController,\n VBA_AUTORAMP_STATUSES,\n VBA_KYC_STATUSES,\n VBA_PROVIDER_FLOW_STATUSES,\n getDefaultRampsControllerState,\n getInternalOrderCode,\n RAMPS_CONTROLLER_REQUIRED_SERVICE_ACTIONS,\n RAMPS_CONTROLLER_REQUIRED_CONTROLLER_ACTIONS,\n} from './RampsController.js';\nexport type {\n RampsServiceActions,\n RampsServiceEvents,\n RampsServiceMessenger,\n Country,\n State,\n SupportedActions,\n CountryPhone,\n Provider,\n ProviderLink,\n ProviderLogos,\n ProviderBrowserType,\n ProviderLimit,\n ProviderFiatLimits,\n ProviderLimits,\n ProviderSortOrder,\n ProvidersResponse,\n RampAction,\n PaymentMethod,\n PaymentMethodsResponse,\n Quote,\n QuoteError,\n QuoteSortBy,\n QuoteSortOrder,\n QuoteCryptoTranslation,\n QuoteCustomAction,\n QuotesResponse,\n GetQuotesParams,\n RampsToken,\n TokensResponse,\n BuyWidget,\n BuyWidgetFallback,\n RampsOrder,\n RampsOrderNetwork,\n RampsOrderCryptoCurrency,\n RampsOrderFiatCurrency,\n RampsOrderPaymentMethod,\n OrderPaymentDetail,\n} from './RampsService.js';\nexport {\n RampsService,\n RampsEnvironment,\n RampsApiService,\n RampsOrderStatus,\n RAMPS_SDK_VERSION,\n getDefaultRedirectCallbackUrl,\n} from './RampsService.js';\nexport type { RampsClientIdentity } from './client-identity.js';\nexport {\n addRampsClientIdentityParams,\n RAMPS_CLIENT_PRODUCT_PARAM,\n RAMPS_CLIENT_VERSION_PARAM,\n} from './client-identity.js';\nexport type {\n RampsServiceGetDefaultRedirectCallbackUrlAction,\n RampsServiceGetGeolocationAction,\n RampsServiceGetCountriesAction,\n RampsServiceGetPaymentMethodsAction,\n RampsServiceGetQuotesAction,\n RampsServiceGetBuyWidgetUrlAction,\n RampsServiceGetOrderAction,\n RampsServiceGetOrderFromCallbackAction,\n} from './RampsService-method-action-types.js';\nexport type {\n RequestCache,\n RequestState,\n ExecuteRequestOptions,\n PendingRequest,\n ResourceType,\n} from './RequestCache.js';\nexport type { RampsErrorCode } from './rampsErrorCodes.js';\nexport {\n RequestStatus,\n DEFAULT_REQUEST_CACHE_TTL,\n DEFAULT_REQUEST_CACHE_MAX_SIZE,\n createCacheKey,\n isCacheExpired,\n createLoadingState,\n createSuccessState,\n createErrorState,\n} from './RequestCache.js';\nexport { RAMPS_ERROR_CODES } from './rampsErrorCodes.js';\nexport type { RequestSelectorResult } from './selectors.js';\nexport { createRequestSelector } from './selectors.js';\nexport type { HeadlessFeatureFlagsLookup } from './featureFlags.js';\nexport {\n HEADLESS_ALL_PROVIDERS_FEATURE_VERSION,\n MONEY_HEADLESS_ALL_PROVIDERS_FLAG_KEY,\n getHeadlessProviderAllowlist,\n isHeadlessAllProvidersEnabled,\n} from './featureFlags.js';\nexport {\n normalizeRampsAssetId,\n providerServesAsset,\n getProvidersServingAsset,\n regionHasProviderForAsset,\n isFiatDepositAvailable,\n} from './providerAvailability.js';\nexport {\n isExternalBrowserQuote,\n isCustomActionQuote,\n isInAppOnlyQuote,\n getBuyWidgetFallback,\n} from './quoteClassification.js';\nexport {\n TERMINAL_ORDER_STATUSES,\n isTerminalOrderStatus,\n} from './orderStatus.js';\nexport type { TypedError } from './errorNormalization.js';\nexport {\n getErrorMessage,\n extractExplicitTypedError,\n normalizeToTypedError,\n} from './errorNormalization.js';\nexport type {\n UserStorageRampsOrderEntry,\n SyncRampsOrder,\n OrderSyncingController,\n OrderSyncingOptions,\n SyncOrdersWithUserStorageConfig,\n} from './order-syncing/index.js';\nexport {\n USER_STORAGE_RAMPS_ORDERS_FEATURE,\n USER_STORAGE_VERSION,\n USER_STORAGE_VERSION_KEY,\n createOrderStorageKey,\n isSyncableOrder,\n mapRampsOrderToUserStorageEntry,\n mapUserStorageEntryToRampsOrder,\n stripPaymentDetailsForRemoteStorage,\n stripSyncMetadata,\n stripDeletedAt,\n areOrdersEqual,\n canPerformOrderSyncing,\n syncOrdersWithUserStorage,\n updateOrderInUserStorage,\n deleteOrderInUserStorage,\n} from './order-syncing/index.js';\nexport type {\n TransakServiceActions,\n TransakServiceEvents,\n TransakServiceMessenger,\n TransakAccessToken,\n TransakUserDetails,\n TransakUserDetailsAddress,\n TransakUserDetailsKycDetails,\n TransakBuyQuote,\n TransakKycRequirement,\n TransakAdditionalRequirement,\n TransakAdditionalRequirementsResponse,\n TransakOttResponse,\n TransakOrderPaymentMethod,\n TransakDepositOrder,\n TransakDepositNetwork,\n TransakDepositCryptoCurrency,\n TransakDepositPaymentMethod,\n TransakDepositRegion,\n TransakOrder,\n TransakQuoteTranslation,\n TransakTranslationRequest,\n TransakUserLimits,\n TransakIdProofStatus,\n PatchUserRequestBody as TransakPatchUserRequestBody,\n} from './TransakService.js';\nexport {\n TransakApiError,\n TransakService,\n TransakEnvironment,\n TransakOrderIdTransformer,\n} from './TransakService.js';\nexport {\n getTransakApiMessage,\n isTransakPhoneRegisteredError,\n} from './transakApiErrorUtils.js';\nexport type {\n TransakServiceMethodActions,\n TransakServiceSendUserOtpAction,\n TransakServiceVerifyUserOtpAction,\n TransakServiceGetUserDetailsAction,\n TransakServiceGetBuyQuoteAction,\n TransakServiceGetKycRequirementAction,\n TransakServiceCreateOrderAction,\n TransakServiceGetOrderAction,\n TransakServiceRequestOttAction,\n TransakServiceGeneratePaymentWidgetUrlAction,\n TransakServiceCreateWidgetUrlAction,\n} from './TransakService-method-action-types.js';\nexport type {\n AutorampAccount,\n ApplyAutorampRemoteStatusResult,\n CreateAutorampRequest,\n} from './autorampAccount.js';\nexport {\n AutorampStatus,\n TERMINAL_AUTORAMP_STATUSES,\n NOTABLE_AUTORAMP_STATUSES,\n isTerminalAutorampStatus,\n normalizeAutorampStatus,\n createAutorampAccount,\n applyAutorampRemoteStatus,\n markAutorampNotified,\n buildMusdAutorampRequest,\n buildBrazilMusdAutorampRequest,\n} from './autorampAccount.js';\nexport { buildOwnershipMessage } from './ownership-message.js';\nexport type {\n AutorampTransactionRecord,\n AutorampTransactionRecords,\n AutorampTransactionChange,\n} from './diffAutorampTransactions.js';\nexport { diffAutorampTransactions } from './diffAutorampTransactions.js';\nexport type {\n AutorampDepositInstructions,\n AutorampDepositRailsSummary,\n AutorampRemoteSnapshot,\n AutorampTransactionSummary,\n PixDepositInstructions,\n UsBankDepositInstructions,\n UsBankDepositRail,\n} from './autoramp-types.js';\nexport type {\n NeoBankServiceActions,\n NeoBankServiceEvents,\n NeoBankServiceMessenger,\n NeoBankAutorampResponse,\n NeoBankRequestOptions,\n NeoBankQueryParams,\n GetWalletRegistrationStatusParams,\n RegisterSelfHostedWalletParams,\n} from './NeoBankService.js';\nexport type {\n NeoBankServiceGetAutorampAction,\n NeoBankServiceGetAutorampsAction,\n NeoBankServiceGetPixDepositInstructionsAction,\n NeoBankServiceGetDepositInstructionsAction,\n NeoBankServiceListAutorampTransactionsAction,\n NeoBankServiceRegisterPixAddressAction,\n NeoBankServiceGetAutorampQuoteAction,\n NeoBankServiceCreateAutorampAction,\n NeoBankServiceGetAutorampQuoteForAutorampAction,\n NeoBankServiceAttachAutorampQuoteAction,\n NeoBankServiceGetCustomerByExternalIdAction,\n NeoBankServiceGetMoonpayCustomerIdAction,\n NeoBankServiceGetWalletRegistrationStatusAction,\n NeoBankServiceRegisterSelfHostedWalletAction,\n} from './NeoBankService-method-action-types.js';\nexport {\n NeoBankService,\n serviceName as neoBankServiceName,\n mapNeoBankAutorampToRemoteSnapshot,\n extractPixDepositInstructions,\n extractUsBankDepositInstructions,\n} from './NeoBankService.js';\nexport type {\n Blockchain,\n RegistrationOutcome,\n RegistrationStatus,\n SelfHostedRegistration,\n WalletRegistrationErrorKind,\n} from './wallet-registration-service.js';\nexport { WalletRegistrationError } from './wallet-registration-service.js';\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask-previews/ramps-controller",
|
|
3
|
-
"version": "28.0.0-preview-
|
|
3
|
+
"version": "28.0.0-preview-35f016caa",
|
|
4
4
|
"description": "A controller for managing cryptocurrency on/off ramps functionality",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Ethereum",
|
|
@@ -52,12 +52,10 @@
|
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
54
|
"@metamask/base-controller": "^10.1.0",
|
|
55
|
-
"@metamask/base-data-service": "^2.1.0",
|
|
56
55
|
"@metamask/controller-utils": "^13.0.0",
|
|
57
56
|
"@metamask/messenger": "^3.0.0",
|
|
58
57
|
"@metamask/profile-sync-controller": "^36.0.0",
|
|
59
58
|
"@metamask/remote-feature-flag-controller": "^7.0.0",
|
|
60
|
-
"@metamask/superstruct": "^3.4.1",
|
|
61
59
|
"@metamask/utils": "^12.0.1",
|
|
62
60
|
"bignumber.js": "^9.1.2",
|
|
63
61
|
"fast-deep-equal": "^3.1.3"
|