@metamask/ramps-controller 20.1.0 → 20.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/dist/NeoBankService-method-action-types.cjs +7 -0
  3. package/dist/NeoBankService-method-action-types.cjs.map +1 -0
  4. package/dist/NeoBankService-method-action-types.d.cts +126 -0
  5. package/dist/NeoBankService-method-action-types.d.cts.map +1 -0
  6. package/dist/NeoBankService-method-action-types.d.mts +126 -0
  7. package/dist/NeoBankService-method-action-types.d.mts.map +1 -0
  8. package/dist/NeoBankService-method-action-types.mjs +6 -0
  9. package/dist/NeoBankService-method-action-types.mjs.map +1 -0
  10. package/dist/NeoBankService.cjs +387 -0
  11. package/dist/NeoBankService.cjs.map +1 -0
  12. package/dist/NeoBankService.d.cts +191 -0
  13. package/dist/NeoBankService.d.cts.map +1 -0
  14. package/dist/NeoBankService.d.mts +191 -0
  15. package/dist/NeoBankService.d.mts.map +1 -0
  16. package/dist/NeoBankService.mjs +379 -0
  17. package/dist/NeoBankService.mjs.map +1 -0
  18. package/dist/RampsController-method-action-types.cjs.map +1 -1
  19. package/dist/RampsController-method-action-types.d.cts +91 -1
  20. package/dist/RampsController-method-action-types.d.cts.map +1 -1
  21. package/dist/RampsController-method-action-types.d.mts +91 -1
  22. package/dist/RampsController-method-action-types.d.mts.map +1 -1
  23. package/dist/RampsController-method-action-types.mjs.map +1 -1
  24. package/dist/RampsController.cjs +372 -2
  25. package/dist/RampsController.cjs.map +1 -1
  26. package/dist/RampsController.d.cts +152 -5
  27. package/dist/RampsController.d.cts.map +1 -1
  28. package/dist/RampsController.d.mts +152 -5
  29. package/dist/RampsController.d.mts.map +1 -1
  30. package/dist/RampsController.mjs +371 -1
  31. package/dist/RampsController.mjs.map +1 -1
  32. package/dist/RampsService.cjs +14 -3
  33. package/dist/RampsService.cjs.map +1 -1
  34. package/dist/RampsService.d.cts +5 -1
  35. package/dist/RampsService.d.cts.map +1 -1
  36. package/dist/RampsService.d.mts +5 -1
  37. package/dist/RampsService.d.mts.map +1 -1
  38. package/dist/RampsService.mjs +14 -3
  39. package/dist/RampsService.mjs.map +1 -1
  40. package/dist/TransakService.cjs +15 -3
  41. package/dist/TransakService.cjs.map +1 -1
  42. package/dist/TransakService.d.cts +3 -1
  43. package/dist/TransakService.d.cts.map +1 -1
  44. package/dist/TransakService.d.mts +3 -1
  45. package/dist/TransakService.d.mts.map +1 -1
  46. package/dist/TransakService.mjs +15 -3
  47. package/dist/TransakService.mjs.map +1 -1
  48. package/dist/autoramp-types.cjs +3 -0
  49. package/dist/autoramp-types.cjs.map +1 -0
  50. package/dist/autoramp-types.d.cts +22 -0
  51. package/dist/autoramp-types.d.cts.map +1 -0
  52. package/dist/autoramp-types.d.mts +22 -0
  53. package/dist/autoramp-types.d.mts.map +1 -0
  54. package/dist/autoramp-types.mjs +2 -0
  55. package/dist/autoramp-types.mjs.map +1 -0
  56. package/dist/autorampAccount.cjs +155 -0
  57. package/dist/autorampAccount.cjs.map +1 -0
  58. package/dist/autorampAccount.d.cts +126 -0
  59. package/dist/autorampAccount.d.cts.map +1 -0
  60. package/dist/autorampAccount.d.mts +126 -0
  61. package/dist/autorampAccount.d.mts.map +1 -0
  62. package/dist/autorampAccount.mjs +147 -0
  63. package/dist/autorampAccount.mjs.map +1 -0
  64. package/dist/client-identity.cjs +28 -0
  65. package/dist/client-identity.cjs.map +1 -0
  66. package/dist/client-identity.d.cts +24 -0
  67. package/dist/client-identity.d.cts.map +1 -0
  68. package/dist/client-identity.d.mts +24 -0
  69. package/dist/client-identity.d.mts.map +1 -0
  70. package/dist/client-identity.mjs +24 -0
  71. package/dist/client-identity.mjs.map +1 -0
  72. package/dist/index.cjs +24 -1
  73. package/dist/index.cjs.map +1 -1
  74. package/dist/index.d.cts +14 -3
  75. package/dist/index.d.cts.map +1 -1
  76. package/dist/index.d.mts +14 -3
  77. package/dist/index.d.mts.map +1 -1
  78. package/dist/index.mjs +6 -1
  79. package/dist/index.mjs.map +1 -1
  80. package/dist/ownership-message.cjs +26 -0
  81. package/dist/ownership-message.cjs.map +1 -0
  82. package/dist/ownership-message.d.cts +22 -0
  83. package/dist/ownership-message.d.cts.map +1 -0
  84. package/dist/ownership-message.d.mts +22 -0
  85. package/dist/ownership-message.d.mts.map +1 -0
  86. package/dist/ownership-message.mjs +22 -0
  87. package/dist/ownership-message.mjs.map +1 -0
  88. package/dist/wallet-registration-machine.cjs +144 -0
  89. package/dist/wallet-registration-machine.cjs.map +1 -0
  90. package/dist/wallet-registration-machine.d.cts +81 -0
  91. package/dist/wallet-registration-machine.d.cts.map +1 -0
  92. package/dist/wallet-registration-machine.d.mts +81 -0
  93. package/dist/wallet-registration-machine.d.mts.map +1 -0
  94. package/dist/wallet-registration-machine.mjs +139 -0
  95. package/dist/wallet-registration-machine.mjs.map +1 -0
  96. package/dist/wallet-registration-service.cjs +351 -0
  97. package/dist/wallet-registration-service.cjs.map +1 -0
  98. package/dist/wallet-registration-service.d.cts +144 -0
  99. package/dist/wallet-registration-service.d.cts.map +1 -0
  100. package/dist/wallet-registration-service.d.mts +144 -0
  101. package/dist/wallet-registration-service.d.mts.map +1 -0
  102. package/dist/wallet-registration-service.mjs +344 -0
  103. package/dist/wallet-registration-service.mjs.map +1 -0
  104. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"TransakService.mjs","sourceRoot":"","sources":["../src/TransakService.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CreateServicePolicyOptions,\n ServicePolicy,\n} from '@metamask/controller-utils';\nimport { createServicePolicy, HttpError } 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 { RAMPS_SDK_VERSION } from './RampsService.js';\nimport { TRANSAK_ERROR_CODES } from './transakErrorCodes.js';\nimport type { TransakServiceMethodActions } from './TransakService-method-action-types.js';\n\n// === TYPES ===\n\nexport type TransakAccessToken = {\n accessToken: string;\n ttl: number;\n created: Date;\n};\n\nexport type TransakUserDetails = {\n id: string;\n firstName: string;\n lastName: string;\n email: string;\n mobileNumber: string;\n status: string;\n dob: string;\n kyc: TransakUserDetailsKycDetails;\n address: TransakUserDetailsAddress;\n createdAt: string;\n};\n\nexport type TransakUserDetailsAddress = {\n addressLine1: string;\n addressLine2: string;\n state: string;\n city: string;\n postCode: string;\n country: string;\n countryCode: string;\n};\n\nexport type TransakUserDetailsKycDetails = {\n status: string;\n type: string;\n attempts: TransakUserDetailsKycAttempt[];\n highestApprovedKYCType: string | null;\n kycMarkedBy: string | null;\n kycResult: string | null;\n rejectionDetails: TransakUserDetailsKycAttemptRejectionDetails | null;\n userId: string;\n workFlowRunId: string;\n};\n\nexport type TransakUserDetailsKycAttempt = {\n artifacts: { key: string; value: string }[];\n metadata: {\n transaction: {\n kycVendorId: string;\n scanReference: string;\n workflowId: string;\n };\n };\n rejectionDetails: TransakUserDetailsKycAttemptRejectionDetails;\n result: string;\n sessionId: string;\n};\n\nexport type TransakUserDetailsKycAttemptRejectionDetails = {\n archetype: string;\n reason: string;\n reasonCode: string;\n};\n\nexport type TransakBuyQuote = {\n quoteId: string;\n conversionPrice: number;\n marketConversionPrice: number;\n slippage: number;\n fiatCurrency: string;\n cryptoCurrency: string;\n paymentMethod: string;\n fiatAmount: number;\n cryptoAmount: number;\n isBuyOrSell: string;\n network: string;\n feeDecimal: number;\n totalFee: number;\n feeBreakdown: { [prop: string]: string | number | boolean | null }[];\n nonce: number;\n cryptoLiquidityProvider: string;\n notes: { [prop: string]: string | number | boolean | null }[];\n};\n\nexport type TransakKycRequirement = {\n status:\n | 'NOT_SUBMITTED'\n | 'APPROVED'\n | 'ADDITIONAL_FORMS_REQUIRED'\n | 'SUBMITTED';\n kycType: string;\n isAllowedToPlaceOrder: boolean;\n};\n\nexport type TransakAdditionalRequirement = {\n type: string;\n metadata?: {\n options: string[];\n documentProofOptions: string[];\n expiresAt: string;\n kycUrl: string;\n workFlowRunId: string;\n };\n};\n\nexport type TransakAdditionalRequirementsResponse = {\n formsRequired: TransakAdditionalRequirement[];\n};\n\nexport type TransakOttResponse = {\n ott: string;\n};\n\nexport type TransakOrderPaymentMethod = {\n fiatCurrency: string;\n paymentMethod: string;\n fields: { name: string; id: string; value: string }[];\n};\n\nexport type TransakDepositNetwork = {\n name: string;\n chainId: string;\n};\n\nexport type TransakDepositCryptoCurrency = {\n assetId: string;\n name: string;\n chainId: string;\n decimals: number;\n iconUrl: string;\n symbol: string;\n};\n\nexport type TransakDepositPaymentMethod = {\n id: string;\n name: string;\n shortName?: string;\n duration: string;\n icon: string;\n iconColor?: { light: string; dark: string };\n isManualBankTransfer?: boolean;\n};\n\nexport type TransakDepositRegion = {\n isoCode: string;\n flag: string;\n name: string;\n phone: { prefix: string; placeholder: string; template: string };\n currency: string;\n supported: boolean;\n recommended?: boolean;\n geolocated?: boolean;\n};\n\nexport type TransakDepositOrder = {\n id: string;\n provider: string;\n cryptoAmount: number | string;\n fiatAmount: number;\n cryptoCurrency: TransakDepositCryptoCurrency;\n fiatCurrency: string;\n providerOrderId: string;\n providerOrderLink: string;\n createdAt: number;\n paymentMethod: TransakDepositPaymentMethod;\n totalFeesFiat: number;\n txHash: string;\n walletAddress: string;\n status: string;\n network: TransakDepositNetwork;\n timeDescriptionPending: string;\n fiatAmountInUsd: number;\n feesInUsd: number;\n region: TransakDepositRegion;\n orderType: 'DEPOSIT';\n exchangeRate?: number;\n statusDescription?: string;\n paymentDetails: TransakOrderPaymentMethod[];\n partnerFees?: number;\n networkFees?: number;\n};\n\nexport type TransakOrder = {\n orderId: string;\n partnerUserId: string;\n status: string;\n isBuyOrSell: string;\n fiatCurrency: string;\n cryptoCurrency: string;\n network: string;\n walletAddress: string;\n quoteId: string;\n fiatAmount: number;\n fiatAmountInUsd: number;\n amountPaid: number;\n cryptoAmount: number;\n conversionPrice: number;\n totalFeeInFiat: number;\n paymentDetails: TransakOrderPaymentMethod[];\n txHash: string;\n transationLink: string | null;\n createdAt: string;\n updatedAt: string;\n completedAt: string;\n};\n\nexport type TransakQuoteTranslation = {\n region: string;\n paymentMethod: string | undefined;\n cryptoCurrency: string;\n network: string;\n fiatCurrency: string;\n};\n\nexport type TransakTranslationRequest = {\n regionId?: string;\n cryptoCurrencyId?: string;\n chainId?: string;\n fiatCurrencyId?: string;\n paymentMethod?: string;\n};\n\nexport type TransakUserLimits = {\n limits: { '1': number; '30': number; '365': number };\n spent: { '1': number; '30': number; '365': number };\n remaining: { '1': number; '30': number; '365': number };\n exceeded: { '1': boolean; '30': boolean; '365': boolean };\n shortage: Record<string, number>;\n};\n\nexport type PatchUserRequestBody = Partial<{\n personalDetails: Partial<{\n firstName: string;\n lastName: string;\n mobileNumber: string;\n dob: string;\n }>;\n addressDetails: Partial<{\n addressLine1: string;\n addressLine2: string;\n state: string;\n city: string;\n postCode: string;\n countryCode: string;\n }>;\n}>;\n\nexport type TransakIdProofStatus = {\n status: 'NOT_SUBMITTED' | 'SUBMITTED';\n kycType: string;\n randomLogIdentifier: string;\n};\n\n// === ENVIRONMENT ===\n\nexport enum TransakEnvironment {\n Production = 'production',\n Staging = 'staging',\n Development = 'development',\n}\n\nenum TransakApiProviders {\n TransakNative = 'transak-native',\n TransakNativeStaging = 'transak-native-staging',\n}\n\n// === ORDER ID UTILITIES ===\n\nexport class TransakOrderIdTransformer {\n static depositOrderIdToTransakOrderId(depositOrderId: string): string {\n const parts = depositOrderId.split('/');\n return parts[parts.length - 1];\n }\n\n static transakOrderIdToDepositOrderId(\n transakOrderId: string,\n environment: TransakEnvironment,\n ): string {\n const provider =\n environment === TransakEnvironment.Production\n ? 'transak-native'\n : 'transak-native-staging';\n return `/providers/${provider}/orders/${transakOrderId}`;\n }\n\n static isDepositOrderId(orderId: string): boolean {\n return orderId.startsWith('/providers/');\n }\n\n static extractTransakOrderId(orderId: string): string {\n return this.isDepositOrderId(orderId)\n ? this.depositOrderIdToTransakOrderId(orderId)\n : orderId;\n }\n}\n\n// === MESSENGER ===\n\nconst serviceName = 'TransakService';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'setApiKey',\n 'setAccessToken',\n 'clearAccessToken',\n 'sendUserOtp',\n 'verifyUserOtp',\n 'logout',\n 'getUserDetails',\n 'getBuyQuote',\n 'getKycRequirement',\n 'getAdditionalRequirements',\n 'createOrder',\n 'getOrder',\n 'getUserLimits',\n 'requestOtt',\n 'generatePaymentWidgetUrl',\n 'createWidgetUrl',\n 'submitPurposeOfUsageForm',\n 'patchUser',\n 'submitSsnDetails',\n 'confirmPayment',\n 'getTranslation',\n 'getIdProofStatus',\n 'cancelOrder',\n 'cancelAllActiveOrders',\n 'getActiveOrders',\n] as const;\n\nexport type TransakServiceActions = TransakServiceMethodActions;\n\n/**\n * Actions from other messengers that {@link TransakService} calls.\n */\ntype AllowedActions =\n AuthenticationController.AuthenticationControllerGetBearerTokenAction;\n\nexport type TransakServiceEvents = never;\n\ntype AllowedEvents = never;\n\nexport type TransakServiceMessenger = Messenger<\n typeof serviceName,\n TransakServiceActions | AllowedActions,\n TransakServiceEvents | AllowedEvents\n>;\n\n// === HELPER FUNCTIONS ===\n\n/**\n * Maps ramps API payment method IDs (e.g., \"/payments/debit-credit-card\")\n * to the deposit-format IDs expected by the translation endpoint\n * (e.g., \"credit_debit_card\").\n *\n * The translation endpoint only understands the deposit-format IDs.\n * Canonical IDs may arrive either with the \"/payments/\" prefix\n * (e.g., \"/payments/apple-pay\") or without it (e.g., \"apple-pay\"), so both\n * forms are accepted. If no mapping exists, the input is returned as-is (it\n * may already be in the deposit format).\n */\nconst RAMPS_TO_DEPOSIT_PAYMENT_METHOD: Record<string, string> = {\n '/payments/debit-credit-card': 'credit_debit_card',\n '/payments/apple-pay': 'apple_pay',\n '/payments/google-pay': 'google_pay',\n '/payments/sepa-bank-transfer': 'sepa_bank_transfer',\n '/payments/wire-transfer': 'wire_transfer',\n '/payments/gbp-bank-transfer': 'gbp_bank_transfer',\n};\n\nconst PAYMENTS_PREFIX = '/payments/';\n\nfunction normalizePaymentMethodForTranslation(\n paymentMethod: string | undefined,\n): string | undefined {\n if (!paymentMethod) {\n return undefined;\n }\n const prefixed = paymentMethod.startsWith(PAYMENTS_PREFIX)\n ? paymentMethod\n : `${PAYMENTS_PREFIX}${paymentMethod}`;\n return (\n RAMPS_TO_DEPOSIT_PAYMENT_METHOD[paymentMethod] ??\n RAMPS_TO_DEPOSIT_PAYMENT_METHOD[prefixed] ??\n paymentMethod\n );\n}\n\nfunction getTransakApiBaseUrl(environment: TransakEnvironment): string {\n switch (environment) {\n case TransakEnvironment.Production:\n return 'https://api-gateway.transak.com';\n // Transak has no dev environment; development uses their staging gateway.\n case TransakEnvironment.Staging:\n case TransakEnvironment.Development:\n return 'https://api-gateway-stg.transak.com';\n default:\n throw new Error(`Invalid Transak environment: ${String(environment)}`);\n }\n}\n\nfunction getRampsBaseUrl(environment: TransakEnvironment): string {\n switch (environment) {\n case TransakEnvironment.Production:\n return 'https://on-ramp.api.cx.metamask.io';\n case TransakEnvironment.Staging:\n return 'https://on-ramp.uat-api.cx.metamask.io';\n case TransakEnvironment.Development:\n return 'https://on-ramp.dev-api.cx.metamask.io';\n default:\n throw new Error(`Invalid Transak environment: ${String(environment)}`);\n }\n}\n\nfunction getRampsProviderPath(environment: TransakEnvironment): string {\n // The dev ramps API registers the same `transak-native-staging` provider\n // id as UAT; only production uses `transak-native`.\n const providerId =\n environment === TransakEnvironment.Production\n ? TransakApiProviders.TransakNative\n : TransakApiProviders.TransakNativeStaging;\n return `/providers/${providerId}`;\n}\n\nfunction getPaymentWidgetBaseUrl(environment: TransakEnvironment): string {\n switch (environment) {\n case TransakEnvironment.Production:\n return 'https://global.transak.com';\n // Transak has no dev environment; development uses their staging widget.\n case TransakEnvironment.Staging:\n case TransakEnvironment.Development:\n return 'https://global-stg.transak.com';\n default:\n throw new Error(`Invalid Transak environment: ${String(environment)}`);\n }\n}\n\n/**\n * Transak requires `referrerDomain` in `widgetParams` alongside the partner\n * API key (which the ramps API proxy injects server-side). Identifies the\n * MetaMask client to Transak. Default when the client does not pass a\n * `referrerDomain` constructor option (e.g. the mobile app passes its\n * package name / bundle id).\n */\nconst TRANSAK_REFERRER_DOMAIN = 'metamask.io';\n\n// === TRANSAK API ERROR ===\n\nexport class TransakApiError extends HttpError {\n readonly errorCode: string | undefined;\n\n readonly apiMessage: string | undefined;\n\n constructor(\n status: number,\n message: string,\n errorCode?: string,\n apiMessage?: string,\n ) {\n super(status, message);\n this.errorCode = errorCode;\n this.apiMessage = apiMessage;\n }\n}\n\n// === SERVICE DEFINITION ===\n\nexport class TransakService {\n readonly name: typeof serviceName;\n\n readonly #messenger: TransakServiceMessenger;\n\n readonly #fetch: typeof fetch;\n\n readonly #policy: ServicePolicy;\n\n readonly #noRetryPolicy: ServicePolicy;\n\n readonly #environment: TransakEnvironment;\n\n readonly #context: string;\n\n readonly #orderRetryDelayMs: number;\n\n #apiKey: string | null = null;\n\n #accessToken: TransakAccessToken | null = null;\n\n /**\n * Optional ramps API base URL override for local development (mirrors\n * `RampsService`'s `baseUrlOverride`). Applies to the requests this service\n * sends to the ramps API (orders, widget-url proxy), not to direct Transak\n * API calls.\n */\n readonly #rampsApiBaseUrlOverride?: string;\n\n /**\n * Identifies the client to Transak in `widgetParams` (e.g. the mobile app's\n * package name / bundle id). Defaults to `metamask.io`.\n */\n readonly #referrerDomain: string;\n\n constructor({\n messenger,\n environment = TransakEnvironment.Staging,\n context,\n fetch: fetchFunction,\n apiKey,\n policyOptions = {},\n orderRetryDelayMs = 2000,\n rampsApiBaseUrlOverride,\n referrerDomain = TRANSAK_REFERRER_DOMAIN,\n }: {\n messenger: TransakServiceMessenger;\n environment?: TransakEnvironment;\n context: string;\n fetch: typeof fetch;\n apiKey?: string;\n policyOptions?: CreateServicePolicyOptions;\n orderRetryDelayMs?: number;\n rampsApiBaseUrlOverride?: string;\n referrerDomain?: string;\n }) {\n this.name = serviceName;\n this.#messenger = messenger;\n this.#fetch = fetchFunction;\n this.#policy = createServicePolicy(policyOptions);\n this.#noRetryPolicy = createServicePolicy({\n ...policyOptions,\n maxRetries: 0,\n });\n this.#environment = environment;\n this.#context = context;\n this.#apiKey = apiKey ?? null;\n this.#orderRetryDelayMs = orderRetryDelayMs;\n this.#rampsApiBaseUrlOverride = rampsApiBaseUrlOverride;\n this.#referrerDomain = referrerDomain;\n\n this.#messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n }\n\n setApiKey(apiKey: string): void {\n this.#apiKey = apiKey;\n }\n\n getApiKey(): string | null {\n return this.#apiKey;\n }\n\n #ensureApiKey(): string {\n if (!this.#apiKey) {\n throw new Error('Transak API key is required but not set.');\n }\n return this.#apiKey;\n }\n\n setAccessToken(token: TransakAccessToken): void {\n this.#accessToken = token;\n }\n\n getAccessToken(): TransakAccessToken | null {\n return this.#accessToken;\n }\n\n clearAccessToken(): void {\n this.#accessToken = null;\n }\n\n #ensureAccessToken(): void {\n if (!this.#accessToken?.accessToken) {\n throw new HttpError(\n 401,\n 'Authentication required. Please log in to continue.',\n );\n }\n\n const createdTime = new Date(this.#accessToken.created).getTime();\n const tokenAgeMs = Date.now() - createdTime;\n if (tokenAgeMs > this.#accessToken.ttl * 1000) {\n this.clearAccessToken();\n throw new HttpError(\n 401,\n 'Authentication token has expired. Please log in again.',\n );\n }\n }\n\n #getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n if (this.#accessToken?.accessToken) {\n headers.authorization = this.#accessToken.accessToken;\n }\n return headers;\n }\n\n async #throwTransakApiError(\n fetchResponse: Response,\n url: URL,\n ): Promise<never> {\n let errorBody = '';\n let errorCode: string | undefined;\n let apiMessage: string | undefined;\n try {\n errorBody = await fetchResponse.text();\n const parsed = JSON.parse(errorBody) as {\n error?: {\n code?: string;\n errorCode?: string | number;\n message?: string;\n };\n };\n errorCode =\n parsed?.error?.code ??\n (parsed?.error?.errorCode !== null &&\n parsed?.error?.errorCode !== undefined\n ? String(parsed.error.errorCode)\n : undefined);\n apiMessage =\n typeof parsed?.error?.message === 'string'\n ? parsed.error.message\n : undefined;\n } catch {\n // ignore body read/parse failures\n }\n throw new TransakApiError(\n fetchResponse.status,\n `Fetching '${url.toString()}' failed with status '${fetchResponse.status}'${errorBody ? `: ${errorBody}` : ''}`,\n errorCode,\n apiMessage,\n );\n }\n\n async #transakGet<ResponseType>(\n path: string,\n params?: Record<string, string>,\n ): Promise<ResponseType> {\n const baseUrl = getTransakApiBaseUrl(this.#environment);\n const url = new URL(path, baseUrl);\n\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== null && value !== undefined) {\n url.searchParams.set(key, value);\n }\n }\n }\n\n const apiKey = this.#ensureApiKey();\n url.searchParams.set('apiKey', apiKey);\n\n const response = await this.#policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'GET',\n headers: this.#getHeaders(),\n });\n if (!fetchResponse.ok) {\n await this.#throwTransakApiError(fetchResponse, url);\n }\n return fetchResponse.json() as Promise<{ data: ResponseType }>;\n });\n\n return response.data;\n }\n\n async #transakPost<ResponseType>(\n path: string,\n body?: Record<string, unknown>,\n options: { policy?: ServicePolicy } = {},\n ): Promise<ResponseType> {\n const apiKey = this.#ensureApiKey();\n const baseUrl = getTransakApiBaseUrl(this.#environment);\n const url = new URL(path, baseUrl);\n\n const requestBody = {\n ...(body ?? {}),\n apiKey,\n };\n\n const policy = options.policy ?? this.#policy;\n\n const response = await policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'POST',\n headers: this.#getHeaders(),\n body: JSON.stringify(requestBody),\n });\n if (!fetchResponse.ok) {\n await this.#throwTransakApiError(fetchResponse, url);\n }\n return fetchResponse.json() as Promise<{ data: ResponseType }>;\n });\n\n return response.data;\n }\n\n async #transakPatch<ResponseType>(\n path: string,\n body: Record<string, unknown>,\n ): Promise<ResponseType> {\n const apiKey = this.#ensureApiKey();\n const baseUrl = getTransakApiBaseUrl(this.#environment);\n const url = new URL(path, baseUrl);\n url.searchParams.set('apiKey', apiKey);\n\n const response = await this.#policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'PATCH',\n headers: this.#getHeaders(),\n body: JSON.stringify(body),\n });\n if (!fetchResponse.ok) {\n await this.#throwTransakApiError(fetchResponse, url);\n }\n return fetchResponse.json() as Promise<{ data: ResponseType }>;\n });\n\n return response.data;\n }\n\n async #transakDelete(\n path: string,\n params?: Record<string, string>,\n ): Promise<void> {\n const apiKey = this.#ensureApiKey();\n const baseUrl = getTransakApiBaseUrl(this.#environment);\n const url = new URL(path, baseUrl);\n url.searchParams.set('apiKey', apiKey);\n\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== null && value !== undefined) {\n url.searchParams.set(key, value);\n }\n }\n }\n\n await this.#policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'DELETE',\n headers: this.#getHeaders(),\n });\n if (!fetchResponse.ok) {\n await this.#throwTransakApiError(fetchResponse, url);\n }\n });\n }\n\n /**\n * Gets the ramps API base URL, respecting the local-development override\n * when set (same semantics as `RampsService`'s `baseUrlOverride`).\n *\n * @returns The ramps API base URL to use.\n */\n #getRampsApiBaseUrl(): string {\n return this.#rampsApiBaseUrlOverride ?? getRampsBaseUrl(this.#environment);\n }\n\n /**\n * Adds the common request parameters to a ramps API proxy URL, mirroring\n * `RampsService`'s `#addCommonParams`.\n *\n * @param url - The URL to add parameters to.\n */\n #addRampsCommonParams(url: URL): void {\n url.searchParams.set('action', 'deposit');\n url.searchParams.set('sdk', RAMPS_SDK_VERSION);\n url.searchParams.set('controller', packageJson.version);\n url.searchParams.set('context', this.#context);\n }\n\n async #ordersApiGet<ResponseType>(\n path: string,\n params?: Record<string, string>,\n ): Promise<ResponseType> {\n const baseUrl = this.#getRampsApiBaseUrl();\n const providerPath = getRampsProviderPath(this.#environment);\n const url = new URL(`${providerPath}${path}`, baseUrl);\n\n url.searchParams.set('action', 'deposit');\n url.searchParams.set('context', this.#context);\n\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== null && value !== undefined) {\n url.searchParams.set(key, value);\n }\n }\n }\n\n const response = await this.#policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'GET',\n headers: { Accept: 'application/json' },\n });\n if (!fetchResponse.ok) {\n throw new HttpError(\n fetchResponse.status,\n `Fetching '${url.toString()}' failed with status '${fetchResponse.status}'`,\n );\n }\n return fetchResponse.json() as Promise<ResponseType>;\n });\n\n return response;\n }\n\n // === PUBLIC API METHODS ===\n\n async sendUserOtp(email: string): Promise<{\n isTncAccepted: boolean;\n stateToken: string;\n email: string;\n expiresIn: number;\n }> {\n const result = await this.#transakPost<{\n isTncAccepted: boolean;\n stateToken: string;\n email: string;\n expiresIn: number;\n }>('/api/v2/auth/login', { email });\n return result;\n }\n\n async verifyUserOtp(\n email: string,\n verificationCode: string,\n stateToken: string,\n ): Promise<TransakAccessToken> {\n const responseData = await this.#transakPost<{\n accessToken: string;\n ttl: number;\n created: string;\n }>(\n '/api/v2/auth/verify',\n {\n email,\n otp: verificationCode,\n stateToken,\n },\n { policy: this.#noRetryPolicy },\n );\n\n const accessToken: TransakAccessToken = {\n accessToken: responseData.accessToken,\n ttl: responseData.ttl,\n created: new Date(responseData.created),\n };\n\n this.setAccessToken(accessToken);\n return accessToken;\n }\n\n async logout(): Promise<string> {\n this.#ensureAccessToken();\n try {\n const result = await this.#transakPost<string>('/api/v1/auth/logout');\n this.clearAccessToken();\n return result;\n } catch (error) {\n if (error instanceof HttpError && error.httpStatus === 401) {\n this.clearAccessToken();\n return 'user was already logged out';\n }\n throw error;\n }\n }\n\n async getUserDetails(): Promise<TransakUserDetails> {\n this.#ensureAccessToken();\n return this.#transakGet<TransakUserDetails>('/api/v2/user/');\n }\n\n async getBuyQuote(\n genericFiatCurrency: string,\n genericCryptoCurrency: string,\n genericNetwork: string,\n genericPaymentMethod: string,\n fiatAmount: string,\n ): Promise<TransakBuyQuote> {\n const normalizedPaymentMethod = normalizePaymentMethodForTranslation(\n genericPaymentMethod || undefined,\n );\n const translationRequest = {\n cryptoCurrencyId: genericCryptoCurrency,\n chainId: genericNetwork,\n fiatCurrencyId: genericFiatCurrency,\n paymentMethod: normalizedPaymentMethod,\n };\n\n const translation = await this.getTranslation(translationRequest);\n\n const params: Record<string, string> = {\n fiatCurrency: translation.fiatCurrency,\n cryptoCurrency: translation.cryptoCurrency,\n isBuyOrSell: 'BUY',\n network: translation.network,\n fiatAmount,\n isFeeExcludedFromFiat: 'true',\n };\n\n if (translation.paymentMethod) {\n params.paymentMethod = translation.paymentMethod;\n }\n\n return this.#transakGet<TransakBuyQuote>('/api/v2/lookup/quotes', params);\n }\n\n async getKycRequirement(quoteId: string): Promise<TransakKycRequirement> {\n this.#ensureAccessToken();\n const result = await this.#transakGet<TransakKycRequirement>(\n '/api/v2/kyc/requirement',\n {\n 'metadata[quoteId]': quoteId,\n },\n );\n return result;\n }\n\n async getAdditionalRequirements(\n quoteId: string,\n ): Promise<TransakAdditionalRequirementsResponse> {\n this.#ensureAccessToken();\n return this.#transakGet<TransakAdditionalRequirementsResponse>(\n '/api/v2/kyc/additional-requirements',\n { 'metadata[quoteId]': quoteId },\n );\n }\n\n async createOrder(\n quoteId: string,\n walletAddress: string,\n paymentMethodId: string,\n ): Promise<TransakDepositOrder> {\n this.#ensureAccessToken();\n\n const normalizedPaymentMethod =\n normalizePaymentMethodForTranslation(paymentMethodId);\n const translation = await this.getTranslation({\n paymentMethod: normalizedPaymentMethod,\n });\n\n const paymentInstrumentId =\n translation.paymentMethod ?? normalizedPaymentMethod;\n\n try {\n const transakOrder = await this.#transakPost<TransakOrder>(\n '/api/v2/orders',\n {\n quoteId,\n walletAddress,\n paymentInstrumentId,\n },\n );\n\n const depositOrderId =\n TransakOrderIdTransformer.transakOrderIdToDepositOrderId(\n transakOrder.orderId,\n this.#environment,\n );\n\n return this.getOrder(\n depositOrderId,\n transakOrder.walletAddress,\n transakOrder.paymentDetails,\n );\n } catch (error) {\n if (\n error instanceof TransakApiError &&\n error.httpStatus === 409 &&\n error.errorCode === TRANSAK_ERROR_CODES.ORDER_EXISTS\n ) {\n await this.cancelAllActiveOrders();\n await new Promise((resolve) =>\n setTimeout(resolve, this.#orderRetryDelayMs),\n );\n\n const retryOrder = await this.#transakPost<TransakOrder>(\n '/api/v2/orders',\n {\n quoteId,\n walletAddress,\n paymentInstrumentId,\n },\n );\n\n const retryDepositOrderId =\n TransakOrderIdTransformer.transakOrderIdToDepositOrderId(\n retryOrder.orderId,\n this.#environment,\n );\n\n return this.getOrder(\n retryDepositOrderId,\n retryOrder.walletAddress,\n retryOrder.paymentDetails,\n );\n }\n throw error;\n }\n }\n\n async getOrder(\n orderId: string,\n wallet: string,\n paymentDetails?: TransakOrderPaymentMethod[],\n ): Promise<TransakDepositOrder> {\n let depositOrderId: string;\n if (TransakOrderIdTransformer.isDepositOrderId(orderId)) {\n depositOrderId = orderId;\n } else {\n depositOrderId = TransakOrderIdTransformer.transakOrderIdToDepositOrderId(\n orderId,\n this.#environment,\n );\n }\n\n const transakOrderId =\n TransakOrderIdTransformer.extractTransakOrderId(depositOrderId);\n\n const order = await this.#ordersApiGet<TransakDepositOrder>(\n `/orders/${transakOrderId}`,\n { wallet },\n );\n\n const orderWithId = {\n ...order,\n id: depositOrderId,\n orderType: 'DEPOSIT' as const,\n };\n\n if (paymentDetails && paymentDetails.length > 0) {\n return { ...orderWithId, paymentDetails };\n }\n\n if (this.#accessToken?.accessToken) {\n try {\n const transakOrder = await this.#transakGet<TransakOrder>(\n `/api/v2/orders/${transakOrderId}`,\n );\n return { ...orderWithId, paymentDetails: transakOrder.paymentDetails };\n } catch {\n return orderWithId;\n }\n }\n\n return orderWithId;\n }\n\n async getUserLimits(\n fiatCurrency: string,\n paymentMethod: string,\n kycType: string,\n ): Promise<TransakUserLimits> {\n this.#ensureAccessToken();\n\n const translation = await this.getTranslation({\n paymentMethod: normalizePaymentMethodForTranslation(paymentMethod),\n });\n\n const params: Record<string, string> = {\n isBuyOrSell: 'BUY',\n kycType,\n fiatCurrency,\n };\n\n if (translation.paymentMethod) {\n params.paymentCategory = translation.paymentMethod;\n }\n\n return this.#transakGet<TransakUserLimits>(\n '/api/v2/orders/user-limit',\n params,\n );\n }\n\n /**\n * @deprecated Use {@link createWidgetUrl} instead. The OTT flow requires the\n * partner API key on the client and Transak is deprecating `request-ott`.\n * @returns The one-time token response.\n */\n async requestOtt(): Promise<TransakOttResponse> {\n this.#ensureAccessToken();\n const result = await this.#transakPost<TransakOttResponse>(\n '/api/v2/auth/request-ott',\n );\n return result;\n }\n\n /**\n * @deprecated Use {@link createWidgetUrl} instead. This builds the widget\n * URL client-side and embeds the partner API key in it.\n * @param ottToken - The one-time token for widget authentication.\n * @param quote - The buy quote to pre-fill in the widget.\n * @param walletAddress - The destination wallet address.\n * @param extraParams - Optional additional URL parameters.\n * @returns The fully constructed widget URL string.\n */\n generatePaymentWidgetUrl(\n ottToken: string,\n quote: TransakBuyQuote,\n walletAddress: string,\n extraParams?: Record<string, string>,\n ): string {\n const apiKey = this.#ensureApiKey();\n const widgetBaseUrl = getPaymentWidgetBaseUrl(this.#environment);\n\n const defaultParams: Record<string, string> = {\n apiKey,\n ott: ottToken,\n fiatCurrency: quote.fiatCurrency,\n cryptoCurrencyCode: quote.cryptoCurrency,\n productsAvailed: 'BUY',\n fiatAmount: quote.fiatAmount.toString(),\n network: quote.network,\n hideExchangeScreen: 'true',\n walletAddress,\n disableWalletAddressForm: 'true',\n paymentMethod: quote.paymentMethod,\n redirectURL:\n 'https://on-ramp-content.api.cx.metamask.io/regions/fake-callback',\n hideMenu: 'true',\n };\n\n const params = new URLSearchParams({\n ...defaultParams,\n ...extraParams,\n });\n\n const widgetUrl = new URL(widgetBaseUrl);\n widgetUrl.search = params.toString();\n return widgetUrl.toString();\n }\n\n /**\n * Creates a Transak payment widget URL through the ramps API proxy\n * (`POST {rampsBaseUrl}/providers/{providerId}/widget-url`). The proxy\n * injects the partner API key and derives the user IP server-side, so\n * neither leaves the backend. Replaces the OTT flow ({@link requestOtt} +\n * {@link generatePaymentWidgetUrl}).\n *\n * Requires both a Transak access token (user must be logged in to Transak)\n * and a MetaMask bearer token from `AuthenticationController`.\n *\n * @param quote - The buy quote to pre-fill in the widget.\n * @param walletAddress - The destination wallet address.\n * @param extraParams - Optional additional widget parameters (e.g. theming).\n * Keys must be on the proxy's allowlist or the request is rejected.\n * @returns The single-use widget URL (expires after 5 minutes).\n */\n async createWidgetUrl(\n quote: TransakBuyQuote,\n walletAddress: string,\n extraParams?: Record<string, string>,\n ): Promise<string> {\n this.#ensureAccessToken();\n const bearerToken = await this.#messenger.call(\n 'AuthenticationController:getBearerToken',\n );\n\n const baseUrl = this.#getRampsApiBaseUrl();\n const providerPath = getRampsProviderPath(this.#environment);\n const url = new URL(`${providerPath}/widget-url`, baseUrl);\n\n this.#addRampsCommonParams(url);\n\n const widgetParams: Record<string, string | number> = {\n referrerDomain: this.#referrerDomain,\n fiatCurrency: quote.fiatCurrency,\n cryptoCurrencyCode: quote.cryptoCurrency,\n fiatAmount: quote.fiatAmount,\n network: quote.network,\n paymentMethod: quote.paymentMethod,\n walletAddress,\n hideExchangeScreen: 'true',\n disableWalletAddressEdit: 'true',\n hideMenu: 'true',\n redirectURL:\n 'https://on-ramp-content.api.cx.metamask.io/regions/fake-callback',\n ...extraParams,\n };\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n Authorization: `Bearer ${bearerToken}`,\n };\n if (this.#accessToken?.accessToken) {\n headers['x-transak-access-token'] = this.#accessToken.accessToken;\n }\n\n const response = await this.#policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'POST',\n headers,\n body: JSON.stringify({ widgetParams }),\n });\n if (!fetchResponse.ok) {\n await this.#throwTransakApiError(fetchResponse, url);\n }\n return fetchResponse.json() as Promise<{ widgetUrl: string }>;\n });\n\n return response.widgetUrl;\n }\n\n async submitPurposeOfUsageForm(purpose: string[]): Promise<void> {\n this.#ensureAccessToken();\n await this.#transakPost('/api/v2/kyc/purpose-of-usage', {\n purposeList: purpose,\n });\n }\n\n async patchUser(data: PatchUserRequestBody): Promise<unknown> {\n this.#ensureAccessToken();\n return this.#transakPatch(\n '/api/v2/kyc/user',\n data as Record<string, unknown>,\n );\n }\n\n async submitSsnDetails(ssn: string, quoteId: string): Promise<unknown> {\n this.#ensureAccessToken();\n return this.#transakPost('/api/v2/kyc/ssn', { ssn, quoteId });\n }\n\n async confirmPayment(\n orderId: string,\n paymentMethodId: string,\n ): Promise<{ success: boolean }> {\n this.#ensureAccessToken();\n\n const normalizedPaymentMethod =\n normalizePaymentMethodForTranslation(paymentMethodId);\n const translation = await this.getTranslation({\n paymentMethod: normalizedPaymentMethod,\n });\n\n const transakOrderId =\n TransakOrderIdTransformer.extractTransakOrderId(orderId);\n\n return this.#transakPost<{ success: boolean }>(\n '/api/v2/orders/payment-confirmation',\n {\n orderId: transakOrderId,\n paymentMethod: translation.paymentMethod ?? normalizedPaymentMethod,\n },\n );\n }\n\n async getTranslation(\n translationRequest: TransakTranslationRequest,\n ): Promise<TransakQuoteTranslation> {\n const baseUrl = getRampsBaseUrl(this.#environment);\n const providerPath = getRampsProviderPath(this.#environment);\n const url = new URL(`${providerPath}/native/translate`, baseUrl);\n\n url.searchParams.set('action', 'deposit');\n url.searchParams.set('context', this.#context);\n\n const normalizedRequest = {\n ...translationRequest,\n paymentMethod: normalizePaymentMethodForTranslation(\n translationRequest.paymentMethod,\n ),\n };\n\n for (const [key, value] of Object.entries(normalizedRequest)) {\n if (value !== undefined) {\n url.searchParams.set(key, value);\n }\n }\n\n const response = await this.#policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'GET',\n headers: { Accept: 'application/json' },\n });\n if (!fetchResponse.ok) {\n throw new HttpError(\n fetchResponse.status,\n `Fetching '${url.toString()}' failed with status '${fetchResponse.status}'`,\n );\n }\n return fetchResponse.json() as Promise<TransakQuoteTranslation>;\n });\n\n return response;\n }\n\n async getIdProofStatus(workFlowRunId: string): Promise<TransakIdProofStatus> {\n this.#ensureAccessToken();\n return this.#transakGet<TransakIdProofStatus>(\n '/api/v2/kyc/id-proof-status',\n { workFlowRunId },\n );\n }\n\n async cancelOrder(depositOrderId: string): Promise<void> {\n this.#ensureAccessToken();\n const transakOrderId =\n TransakOrderIdTransformer.extractTransakOrderId(depositOrderId);\n await this.#transakDelete(`/api/v2/orders/${transakOrderId}`, {\n cancelReason: 'Creating new order',\n });\n }\n\n async cancelAllActiveOrders(): Promise<Error[]> {\n this.#ensureAccessToken();\n const activeOrders = await this.getActiveOrders();\n const errors: Error[] = [];\n\n await Promise.all(\n activeOrders.map(async (order) => {\n try {\n const depositOrderId =\n TransakOrderIdTransformer.transakOrderIdToDepositOrderId(\n order.orderId,\n this.#environment,\n );\n await this.cancelOrder(depositOrderId);\n } catch (error) {\n errors.push(\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }),\n );\n\n return errors;\n }\n\n async getActiveOrders(): Promise<TransakOrder[]> {\n this.#ensureAccessToken();\n return this.#transakGet<TransakOrder[]>('/api/v2/active-orders');\n }\n}\n"]}
1
+ {"version":3,"file":"TransakService.mjs","sourceRoot":"","sources":["../src/TransakService.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CreateServicePolicyOptions,\n ServicePolicy,\n} from '@metamask/controller-utils';\nimport { createServicePolicy, HttpError } 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 { RampsClientIdentity } from './client-identity.js';\nimport { addRampsClientIdentityParams } from './client-identity.js';\nimport { RAMPS_SDK_VERSION } from './RampsService.js';\nimport { TRANSAK_ERROR_CODES } from './transakErrorCodes.js';\nimport type { TransakServiceMethodActions } from './TransakService-method-action-types.js';\n\n// === TYPES ===\n\nexport type TransakAccessToken = {\n accessToken: string;\n ttl: number;\n created: Date;\n};\n\nexport type TransakUserDetails = {\n id: string;\n firstName: string;\n lastName: string;\n email: string;\n mobileNumber: string;\n status: string;\n dob: string;\n kyc: TransakUserDetailsKycDetails;\n address: TransakUserDetailsAddress;\n createdAt: string;\n};\n\nexport type TransakUserDetailsAddress = {\n addressLine1: string;\n addressLine2: string;\n state: string;\n city: string;\n postCode: string;\n country: string;\n countryCode: string;\n};\n\nexport type TransakUserDetailsKycDetails = {\n status: string;\n type: string;\n attempts: TransakUserDetailsKycAttempt[];\n highestApprovedKYCType: string | null;\n kycMarkedBy: string | null;\n kycResult: string | null;\n rejectionDetails: TransakUserDetailsKycAttemptRejectionDetails | null;\n userId: string;\n workFlowRunId: string;\n};\n\nexport type TransakUserDetailsKycAttempt = {\n artifacts: { key: string; value: string }[];\n metadata: {\n transaction: {\n kycVendorId: string;\n scanReference: string;\n workflowId: string;\n };\n };\n rejectionDetails: TransakUserDetailsKycAttemptRejectionDetails;\n result: string;\n sessionId: string;\n};\n\nexport type TransakUserDetailsKycAttemptRejectionDetails = {\n archetype: string;\n reason: string;\n reasonCode: string;\n};\n\nexport type TransakBuyQuote = {\n quoteId: string;\n conversionPrice: number;\n marketConversionPrice: number;\n slippage: number;\n fiatCurrency: string;\n cryptoCurrency: string;\n paymentMethod: string;\n fiatAmount: number;\n cryptoAmount: number;\n isBuyOrSell: string;\n network: string;\n feeDecimal: number;\n totalFee: number;\n feeBreakdown: { [prop: string]: string | number | boolean | null }[];\n nonce: number;\n cryptoLiquidityProvider: string;\n notes: { [prop: string]: string | number | boolean | null }[];\n};\n\nexport type TransakKycRequirement = {\n status:\n | 'NOT_SUBMITTED'\n | 'APPROVED'\n | 'ADDITIONAL_FORMS_REQUIRED'\n | 'SUBMITTED';\n kycType: string;\n isAllowedToPlaceOrder: boolean;\n};\n\nexport type TransakAdditionalRequirement = {\n type: string;\n metadata?: {\n options: string[];\n documentProofOptions: string[];\n expiresAt: string;\n kycUrl: string;\n workFlowRunId: string;\n };\n};\n\nexport type TransakAdditionalRequirementsResponse = {\n formsRequired: TransakAdditionalRequirement[];\n};\n\nexport type TransakOttResponse = {\n ott: string;\n};\n\nexport type TransakOrderPaymentMethod = {\n fiatCurrency: string;\n paymentMethod: string;\n fields: { name: string; id: string; value: string }[];\n};\n\nexport type TransakDepositNetwork = {\n name: string;\n chainId: string;\n};\n\nexport type TransakDepositCryptoCurrency = {\n assetId: string;\n name: string;\n chainId: string;\n decimals: number;\n iconUrl: string;\n symbol: string;\n};\n\nexport type TransakDepositPaymentMethod = {\n id: string;\n name: string;\n shortName?: string;\n duration: string;\n icon: string;\n iconColor?: { light: string; dark: string };\n isManualBankTransfer?: boolean;\n};\n\nexport type TransakDepositRegion = {\n isoCode: string;\n flag: string;\n name: string;\n phone: { prefix: string; placeholder: string; template: string };\n currency: string;\n supported: boolean;\n recommended?: boolean;\n geolocated?: boolean;\n};\n\nexport type TransakDepositOrder = {\n id: string;\n provider: string;\n cryptoAmount: number | string;\n fiatAmount: number;\n cryptoCurrency: TransakDepositCryptoCurrency;\n fiatCurrency: string;\n providerOrderId: string;\n providerOrderLink: string;\n createdAt: number;\n paymentMethod: TransakDepositPaymentMethod;\n totalFeesFiat: number;\n txHash: string;\n walletAddress: string;\n status: string;\n network: TransakDepositNetwork;\n timeDescriptionPending: string;\n fiatAmountInUsd: number;\n feesInUsd: number;\n region: TransakDepositRegion;\n orderType: 'DEPOSIT';\n exchangeRate?: number;\n statusDescription?: string;\n paymentDetails: TransakOrderPaymentMethod[];\n partnerFees?: number;\n networkFees?: number;\n};\n\nexport type TransakOrder = {\n orderId: string;\n partnerUserId: string;\n status: string;\n isBuyOrSell: string;\n fiatCurrency: string;\n cryptoCurrency: string;\n network: string;\n walletAddress: string;\n quoteId: string;\n fiatAmount: number;\n fiatAmountInUsd: number;\n amountPaid: number;\n cryptoAmount: number;\n conversionPrice: number;\n totalFeeInFiat: number;\n paymentDetails: TransakOrderPaymentMethod[];\n txHash: string;\n transationLink: string | null;\n createdAt: string;\n updatedAt: string;\n completedAt: string;\n};\n\nexport type TransakQuoteTranslation = {\n region: string;\n paymentMethod: string | undefined;\n cryptoCurrency: string;\n network: string;\n fiatCurrency: string;\n};\n\nexport type TransakTranslationRequest = {\n regionId?: string;\n cryptoCurrencyId?: string;\n chainId?: string;\n fiatCurrencyId?: string;\n paymentMethod?: string;\n};\n\nexport type TransakUserLimits = {\n limits: { '1': number; '30': number; '365': number };\n spent: { '1': number; '30': number; '365': number };\n remaining: { '1': number; '30': number; '365': number };\n exceeded: { '1': boolean; '30': boolean; '365': boolean };\n shortage: Record<string, number>;\n};\n\nexport type PatchUserRequestBody = Partial<{\n personalDetails: Partial<{\n firstName: string;\n lastName: string;\n mobileNumber: string;\n dob: string;\n }>;\n addressDetails: Partial<{\n addressLine1: string;\n addressLine2: string;\n state: string;\n city: string;\n postCode: string;\n countryCode: string;\n }>;\n}>;\n\nexport type TransakIdProofStatus = {\n status: 'NOT_SUBMITTED' | 'SUBMITTED';\n kycType: string;\n randomLogIdentifier: string;\n};\n\n// === ENVIRONMENT ===\n\nexport enum TransakEnvironment {\n Production = 'production',\n Staging = 'staging',\n Development = 'development',\n}\n\nenum TransakApiProviders {\n TransakNative = 'transak-native',\n TransakNativeStaging = 'transak-native-staging',\n}\n\n// === ORDER ID UTILITIES ===\n\nexport class TransakOrderIdTransformer {\n static depositOrderIdToTransakOrderId(depositOrderId: string): string {\n const parts = depositOrderId.split('/');\n return parts[parts.length - 1];\n }\n\n static transakOrderIdToDepositOrderId(\n transakOrderId: string,\n environment: TransakEnvironment,\n ): string {\n const provider =\n environment === TransakEnvironment.Production\n ? 'transak-native'\n : 'transak-native-staging';\n return `/providers/${provider}/orders/${transakOrderId}`;\n }\n\n static isDepositOrderId(orderId: string): boolean {\n return orderId.startsWith('/providers/');\n }\n\n static extractTransakOrderId(orderId: string): string {\n return this.isDepositOrderId(orderId)\n ? this.depositOrderIdToTransakOrderId(orderId)\n : orderId;\n }\n}\n\n// === MESSENGER ===\n\nconst serviceName = 'TransakService';\n\nconst MESSENGER_EXPOSED_METHODS = [\n 'setApiKey',\n 'setAccessToken',\n 'clearAccessToken',\n 'sendUserOtp',\n 'verifyUserOtp',\n 'logout',\n 'getUserDetails',\n 'getBuyQuote',\n 'getKycRequirement',\n 'getAdditionalRequirements',\n 'createOrder',\n 'getOrder',\n 'getUserLimits',\n 'requestOtt',\n 'generatePaymentWidgetUrl',\n 'createWidgetUrl',\n 'submitPurposeOfUsageForm',\n 'patchUser',\n 'submitSsnDetails',\n 'confirmPayment',\n 'getTranslation',\n 'getIdProofStatus',\n 'cancelOrder',\n 'cancelAllActiveOrders',\n 'getActiveOrders',\n] as const;\n\nexport type TransakServiceActions = TransakServiceMethodActions;\n\n/**\n * Actions from other messengers that {@link TransakService} calls.\n */\ntype AllowedActions =\n AuthenticationController.AuthenticationControllerGetBearerTokenAction;\n\nexport type TransakServiceEvents = never;\n\ntype AllowedEvents = never;\n\nexport type TransakServiceMessenger = Messenger<\n typeof serviceName,\n TransakServiceActions | AllowedActions,\n TransakServiceEvents | AllowedEvents\n>;\n\n// === HELPER FUNCTIONS ===\n\n/**\n * Maps ramps API payment method IDs (e.g., \"/payments/debit-credit-card\")\n * to the deposit-format IDs expected by the translation endpoint\n * (e.g., \"credit_debit_card\").\n *\n * The translation endpoint only understands the deposit-format IDs.\n * Canonical IDs may arrive either with the \"/payments/\" prefix\n * (e.g., \"/payments/apple-pay\") or without it (e.g., \"apple-pay\"), so both\n * forms are accepted. If no mapping exists, the input is returned as-is (it\n * may already be in the deposit format).\n */\nconst RAMPS_TO_DEPOSIT_PAYMENT_METHOD: Record<string, string> = {\n '/payments/debit-credit-card': 'credit_debit_card',\n '/payments/apple-pay': 'apple_pay',\n '/payments/google-pay': 'google_pay',\n '/payments/sepa-bank-transfer': 'sepa_bank_transfer',\n '/payments/wire-transfer': 'wire_transfer',\n '/payments/gbp-bank-transfer': 'gbp_bank_transfer',\n};\n\nconst PAYMENTS_PREFIX = '/payments/';\n\nfunction normalizePaymentMethodForTranslation(\n paymentMethod: string | undefined,\n): string | undefined {\n if (!paymentMethod) {\n return undefined;\n }\n const prefixed = paymentMethod.startsWith(PAYMENTS_PREFIX)\n ? paymentMethod\n : `${PAYMENTS_PREFIX}${paymentMethod}`;\n return (\n RAMPS_TO_DEPOSIT_PAYMENT_METHOD[paymentMethod] ??\n RAMPS_TO_DEPOSIT_PAYMENT_METHOD[prefixed] ??\n paymentMethod\n );\n}\n\nfunction getTransakApiBaseUrl(environment: TransakEnvironment): string {\n switch (environment) {\n case TransakEnvironment.Production:\n return 'https://api-gateway.transak.com';\n // Transak has no dev environment; development uses their staging gateway.\n case TransakEnvironment.Staging:\n case TransakEnvironment.Development:\n return 'https://api-gateway-stg.transak.com';\n default:\n throw new Error(`Invalid Transak environment: ${String(environment)}`);\n }\n}\n\nfunction getRampsBaseUrl(environment: TransakEnvironment): string {\n switch (environment) {\n case TransakEnvironment.Production:\n return 'https://on-ramp.api.cx.metamask.io';\n case TransakEnvironment.Staging:\n return 'https://on-ramp.uat-api.cx.metamask.io';\n case TransakEnvironment.Development:\n return 'https://on-ramp.dev-api.cx.metamask.io';\n default:\n throw new Error(`Invalid Transak environment: ${String(environment)}`);\n }\n}\n\nfunction getRampsProviderPath(environment: TransakEnvironment): string {\n // The dev ramps API registers the same `transak-native-staging` provider\n // id as UAT; only production uses `transak-native`.\n const providerId =\n environment === TransakEnvironment.Production\n ? TransakApiProviders.TransakNative\n : TransakApiProviders.TransakNativeStaging;\n return `/providers/${providerId}`;\n}\n\nfunction getPaymentWidgetBaseUrl(environment: TransakEnvironment): string {\n switch (environment) {\n case TransakEnvironment.Production:\n return 'https://global.transak.com';\n // Transak has no dev environment; development uses their staging widget.\n case TransakEnvironment.Staging:\n case TransakEnvironment.Development:\n return 'https://global-stg.transak.com';\n default:\n throw new Error(`Invalid Transak environment: ${String(environment)}`);\n }\n}\n\n/**\n * Transak requires `referrerDomain` in `widgetParams` alongside the partner\n * API key (which the ramps API proxy injects server-side). Identifies the\n * MetaMask client to Transak. Default when the client does not pass a\n * `referrerDomain` constructor option (e.g. the mobile app passes its\n * package name / bundle id).\n */\nconst TRANSAK_REFERRER_DOMAIN = 'metamask.io';\n\n// === TRANSAK API ERROR ===\n\nexport class TransakApiError extends HttpError {\n readonly errorCode: string | undefined;\n\n readonly apiMessage: string | undefined;\n\n constructor(\n status: number,\n message: string,\n errorCode?: string,\n apiMessage?: string,\n ) {\n super(status, message);\n this.errorCode = errorCode;\n this.apiMessage = apiMessage;\n }\n}\n\n// === SERVICE DEFINITION ===\n\nexport class TransakService {\n readonly name: typeof serviceName;\n\n readonly #messenger: TransakServiceMessenger;\n\n readonly #fetch: typeof fetch;\n\n readonly #policy: ServicePolicy;\n\n readonly #noRetryPolicy: ServicePolicy;\n\n readonly #environment: TransakEnvironment;\n\n readonly #context: string;\n\n readonly #orderRetryDelayMs: number;\n\n #apiKey: string | null = null;\n\n #accessToken: TransakAccessToken | null = null;\n\n /**\n * Optional ramps API base URL override for local development (mirrors\n * `RampsService`'s `baseUrlOverride`). Applies to the requests this service\n * sends to the ramps API (orders, widget-url proxy), not to direct Transak\n * API calls.\n */\n readonly #rampsApiBaseUrlOverride?: string;\n\n /**\n * Identifies the client to Transak in `widgetParams` (e.g. the mobile app's\n * package name / bundle id). Defaults to `metamask.io`.\n */\n readonly #referrerDomain: string;\n\n readonly #clientIdentity: RampsClientIdentity;\n\n constructor({\n messenger,\n environment = TransakEnvironment.Staging,\n context,\n fetch: fetchFunction,\n apiKey,\n policyOptions = {},\n orderRetryDelayMs = 2000,\n rampsApiBaseUrlOverride,\n referrerDomain = TRANSAK_REFERRER_DOMAIN,\n clientProduct,\n clientVersion,\n }: {\n messenger: TransakServiceMessenger;\n environment?: TransakEnvironment;\n context: string;\n fetch: typeof fetch;\n apiKey?: string;\n policyOptions?: CreateServicePolicyOptions;\n orderRetryDelayMs?: number;\n rampsApiBaseUrlOverride?: string;\n referrerDomain?: string;\n clientProduct?: string;\n clientVersion?: string;\n }) {\n this.name = serviceName;\n this.#messenger = messenger;\n this.#fetch = fetchFunction;\n this.#policy = createServicePolicy(policyOptions);\n this.#noRetryPolicy = createServicePolicy({\n ...policyOptions,\n maxRetries: 0,\n });\n this.#environment = environment;\n this.#context = context;\n this.#apiKey = apiKey ?? null;\n this.#orderRetryDelayMs = orderRetryDelayMs;\n this.#rampsApiBaseUrlOverride = rampsApiBaseUrlOverride;\n this.#referrerDomain = referrerDomain;\n this.#clientIdentity = {\n clientProduct,\n clientVersion,\n };\n\n this.#messenger.registerMethodActionHandlers(\n this,\n MESSENGER_EXPOSED_METHODS,\n );\n }\n\n setApiKey(apiKey: string): void {\n this.#apiKey = apiKey;\n }\n\n getApiKey(): string | null {\n return this.#apiKey;\n }\n\n #ensureApiKey(): string {\n if (!this.#apiKey) {\n throw new Error('Transak API key is required but not set.');\n }\n return this.#apiKey;\n }\n\n setAccessToken(token: TransakAccessToken): void {\n this.#accessToken = token;\n }\n\n getAccessToken(): TransakAccessToken | null {\n return this.#accessToken;\n }\n\n clearAccessToken(): void {\n this.#accessToken = null;\n }\n\n #ensureAccessToken(): void {\n if (!this.#accessToken?.accessToken) {\n throw new HttpError(\n 401,\n 'Authentication required. Please log in to continue.',\n );\n }\n\n const createdTime = new Date(this.#accessToken.created).getTime();\n const tokenAgeMs = Date.now() - createdTime;\n if (tokenAgeMs > this.#accessToken.ttl * 1000) {\n this.clearAccessToken();\n throw new HttpError(\n 401,\n 'Authentication token has expired. Please log in again.',\n );\n }\n }\n\n #getHeaders(): Record<string, string> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n if (this.#accessToken?.accessToken) {\n headers.authorization = this.#accessToken.accessToken;\n }\n return headers;\n }\n\n async #throwTransakApiError(\n fetchResponse: Response,\n url: URL,\n ): Promise<never> {\n let errorBody = '';\n let errorCode: string | undefined;\n let apiMessage: string | undefined;\n try {\n errorBody = await fetchResponse.text();\n const parsed = JSON.parse(errorBody) as {\n error?: {\n code?: string;\n errorCode?: string | number;\n message?: string;\n };\n };\n errorCode =\n parsed?.error?.code ??\n (parsed?.error?.errorCode !== null &&\n parsed?.error?.errorCode !== undefined\n ? String(parsed.error.errorCode)\n : undefined);\n apiMessage =\n typeof parsed?.error?.message === 'string'\n ? parsed.error.message\n : undefined;\n } catch {\n // ignore body read/parse failures\n }\n throw new TransakApiError(\n fetchResponse.status,\n `Fetching '${url.toString()}' failed with status '${fetchResponse.status}'${errorBody ? `: ${errorBody}` : ''}`,\n errorCode,\n apiMessage,\n );\n }\n\n async #transakGet<ResponseType>(\n path: string,\n params?: Record<string, string>,\n ): Promise<ResponseType> {\n const baseUrl = getTransakApiBaseUrl(this.#environment);\n const url = new URL(path, baseUrl);\n\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== null && value !== undefined) {\n url.searchParams.set(key, value);\n }\n }\n }\n\n const apiKey = this.#ensureApiKey();\n url.searchParams.set('apiKey', apiKey);\n\n const response = await this.#policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'GET',\n headers: this.#getHeaders(),\n });\n if (!fetchResponse.ok) {\n await this.#throwTransakApiError(fetchResponse, url);\n }\n return fetchResponse.json() as Promise<{ data: ResponseType }>;\n });\n\n return response.data;\n }\n\n async #transakPost<ResponseType>(\n path: string,\n body?: Record<string, unknown>,\n options: { policy?: ServicePolicy } = {},\n ): Promise<ResponseType> {\n const apiKey = this.#ensureApiKey();\n const baseUrl = getTransakApiBaseUrl(this.#environment);\n const url = new URL(path, baseUrl);\n\n const requestBody = {\n ...(body ?? {}),\n apiKey,\n };\n\n const policy = options.policy ?? this.#policy;\n\n const response = await policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'POST',\n headers: this.#getHeaders(),\n body: JSON.stringify(requestBody),\n });\n if (!fetchResponse.ok) {\n await this.#throwTransakApiError(fetchResponse, url);\n }\n return fetchResponse.json() as Promise<{ data: ResponseType }>;\n });\n\n return response.data;\n }\n\n async #transakPatch<ResponseType>(\n path: string,\n body: Record<string, unknown>,\n ): Promise<ResponseType> {\n const apiKey = this.#ensureApiKey();\n const baseUrl = getTransakApiBaseUrl(this.#environment);\n const url = new URL(path, baseUrl);\n url.searchParams.set('apiKey', apiKey);\n\n const response = await this.#policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'PATCH',\n headers: this.#getHeaders(),\n body: JSON.stringify(body),\n });\n if (!fetchResponse.ok) {\n await this.#throwTransakApiError(fetchResponse, url);\n }\n return fetchResponse.json() as Promise<{ data: ResponseType }>;\n });\n\n return response.data;\n }\n\n async #transakDelete(\n path: string,\n params?: Record<string, string>,\n ): Promise<void> {\n const apiKey = this.#ensureApiKey();\n const baseUrl = getTransakApiBaseUrl(this.#environment);\n const url = new URL(path, baseUrl);\n url.searchParams.set('apiKey', apiKey);\n\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== null && value !== undefined) {\n url.searchParams.set(key, value);\n }\n }\n }\n\n await this.#policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'DELETE',\n headers: this.#getHeaders(),\n });\n if (!fetchResponse.ok) {\n await this.#throwTransakApiError(fetchResponse, url);\n }\n });\n }\n\n /**\n * Gets the ramps API base URL, respecting the local-development override\n * when set (same semantics as `RampsService`'s `baseUrlOverride`).\n *\n * @returns The ramps API base URL to use.\n */\n #getRampsApiBaseUrl(): string {\n return this.#rampsApiBaseUrlOverride ?? getRampsBaseUrl(this.#environment);\n }\n\n /**\n * Adds the common request parameters to a ramps API proxy URL, mirroring\n * `RampsService`'s `#addCommonParams`.\n *\n * @param url - The URL to add parameters to.\n */\n #addRampsCommonParams(url: URL): void {\n url.searchParams.set('action', 'deposit');\n url.searchParams.set('sdk', RAMPS_SDK_VERSION);\n url.searchParams.set('controller', packageJson.version);\n url.searchParams.set('context', this.#context);\n // In the query string (not headers) so CDN-cached responses vary per\n // client product / version.\n addRampsClientIdentityParams(url, this.#clientIdentity);\n }\n\n async #ordersApiGet<ResponseType>(\n path: string,\n params?: Record<string, string>,\n ): Promise<ResponseType> {\n const baseUrl = this.#getRampsApiBaseUrl();\n const providerPath = getRampsProviderPath(this.#environment);\n const url = new URL(`${providerPath}${path}`, baseUrl);\n\n url.searchParams.set('action', 'deposit');\n url.searchParams.set('context', this.#context);\n // In the query string (not headers) so CDN-cached responses vary per\n // client product / version.\n addRampsClientIdentityParams(url, this.#clientIdentity);\n\n if (params) {\n for (const [key, value] of Object.entries(params)) {\n if (value !== null && value !== undefined) {\n url.searchParams.set(key, value);\n }\n }\n }\n\n const response = await this.#policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'GET',\n headers: { Accept: 'application/json' },\n });\n if (!fetchResponse.ok) {\n throw new HttpError(\n fetchResponse.status,\n `Fetching '${url.toString()}' failed with status '${fetchResponse.status}'`,\n );\n }\n return fetchResponse.json() as Promise<ResponseType>;\n });\n\n return response;\n }\n\n // === PUBLIC API METHODS ===\n\n async sendUserOtp(email: string): Promise<{\n isTncAccepted: boolean;\n stateToken: string;\n email: string;\n expiresIn: number;\n }> {\n const result = await this.#transakPost<{\n isTncAccepted: boolean;\n stateToken: string;\n email: string;\n expiresIn: number;\n }>('/api/v2/auth/login', { email });\n return result;\n }\n\n async verifyUserOtp(\n email: string,\n verificationCode: string,\n stateToken: string,\n ): Promise<TransakAccessToken> {\n const responseData = await this.#transakPost<{\n accessToken: string;\n ttl: number;\n created: string;\n }>(\n '/api/v2/auth/verify',\n {\n email,\n otp: verificationCode,\n stateToken,\n },\n { policy: this.#noRetryPolicy },\n );\n\n const accessToken: TransakAccessToken = {\n accessToken: responseData.accessToken,\n ttl: responseData.ttl,\n created: new Date(responseData.created),\n };\n\n this.setAccessToken(accessToken);\n return accessToken;\n }\n\n async logout(): Promise<string> {\n this.#ensureAccessToken();\n try {\n const result = await this.#transakPost<string>('/api/v1/auth/logout');\n this.clearAccessToken();\n return result;\n } catch (error) {\n if (error instanceof HttpError && error.httpStatus === 401) {\n this.clearAccessToken();\n return 'user was already logged out';\n }\n throw error;\n }\n }\n\n async getUserDetails(): Promise<TransakUserDetails> {\n this.#ensureAccessToken();\n return this.#transakGet<TransakUserDetails>('/api/v2/user/');\n }\n\n async getBuyQuote(\n genericFiatCurrency: string,\n genericCryptoCurrency: string,\n genericNetwork: string,\n genericPaymentMethod: string,\n fiatAmount: string,\n ): Promise<TransakBuyQuote> {\n const normalizedPaymentMethod = normalizePaymentMethodForTranslation(\n genericPaymentMethod || undefined,\n );\n const translationRequest = {\n cryptoCurrencyId: genericCryptoCurrency,\n chainId: genericNetwork,\n fiatCurrencyId: genericFiatCurrency,\n paymentMethod: normalizedPaymentMethod,\n };\n\n const translation = await this.getTranslation(translationRequest);\n\n const params: Record<string, string> = {\n fiatCurrency: translation.fiatCurrency,\n cryptoCurrency: translation.cryptoCurrency,\n isBuyOrSell: 'BUY',\n network: translation.network,\n fiatAmount,\n isFeeExcludedFromFiat: 'true',\n };\n\n if (translation.paymentMethod) {\n params.paymentMethod = translation.paymentMethod;\n }\n\n return this.#transakGet<TransakBuyQuote>('/api/v2/lookup/quotes', params);\n }\n\n async getKycRequirement(quoteId: string): Promise<TransakKycRequirement> {\n this.#ensureAccessToken();\n const result = await this.#transakGet<TransakKycRequirement>(\n '/api/v2/kyc/requirement',\n {\n 'metadata[quoteId]': quoteId,\n },\n );\n return result;\n }\n\n async getAdditionalRequirements(\n quoteId: string,\n ): Promise<TransakAdditionalRequirementsResponse> {\n this.#ensureAccessToken();\n return this.#transakGet<TransakAdditionalRequirementsResponse>(\n '/api/v2/kyc/additional-requirements',\n { 'metadata[quoteId]': quoteId },\n );\n }\n\n async createOrder(\n quoteId: string,\n walletAddress: string,\n paymentMethodId: string,\n ): Promise<TransakDepositOrder> {\n this.#ensureAccessToken();\n\n const normalizedPaymentMethod =\n normalizePaymentMethodForTranslation(paymentMethodId);\n const translation = await this.getTranslation({\n paymentMethod: normalizedPaymentMethod,\n });\n\n const paymentInstrumentId =\n translation.paymentMethod ?? normalizedPaymentMethod;\n\n try {\n const transakOrder = await this.#transakPost<TransakOrder>(\n '/api/v2/orders',\n {\n quoteId,\n walletAddress,\n paymentInstrumentId,\n },\n );\n\n const depositOrderId =\n TransakOrderIdTransformer.transakOrderIdToDepositOrderId(\n transakOrder.orderId,\n this.#environment,\n );\n\n return this.getOrder(\n depositOrderId,\n transakOrder.walletAddress,\n transakOrder.paymentDetails,\n );\n } catch (error) {\n if (\n error instanceof TransakApiError &&\n error.httpStatus === 409 &&\n error.errorCode === TRANSAK_ERROR_CODES.ORDER_EXISTS\n ) {\n await this.cancelAllActiveOrders();\n await new Promise((resolve) =>\n setTimeout(resolve, this.#orderRetryDelayMs),\n );\n\n const retryOrder = await this.#transakPost<TransakOrder>(\n '/api/v2/orders',\n {\n quoteId,\n walletAddress,\n paymentInstrumentId,\n },\n );\n\n const retryDepositOrderId =\n TransakOrderIdTransformer.transakOrderIdToDepositOrderId(\n retryOrder.orderId,\n this.#environment,\n );\n\n return this.getOrder(\n retryDepositOrderId,\n retryOrder.walletAddress,\n retryOrder.paymentDetails,\n );\n }\n throw error;\n }\n }\n\n async getOrder(\n orderId: string,\n wallet: string,\n paymentDetails?: TransakOrderPaymentMethod[],\n ): Promise<TransakDepositOrder> {\n let depositOrderId: string;\n if (TransakOrderIdTransformer.isDepositOrderId(orderId)) {\n depositOrderId = orderId;\n } else {\n depositOrderId = TransakOrderIdTransformer.transakOrderIdToDepositOrderId(\n orderId,\n this.#environment,\n );\n }\n\n const transakOrderId =\n TransakOrderIdTransformer.extractTransakOrderId(depositOrderId);\n\n const order = await this.#ordersApiGet<TransakDepositOrder>(\n `/orders/${transakOrderId}`,\n { wallet },\n );\n\n const orderWithId = {\n ...order,\n id: depositOrderId,\n orderType: 'DEPOSIT' as const,\n };\n\n if (paymentDetails && paymentDetails.length > 0) {\n return { ...orderWithId, paymentDetails };\n }\n\n if (this.#accessToken?.accessToken) {\n try {\n const transakOrder = await this.#transakGet<TransakOrder>(\n `/api/v2/orders/${transakOrderId}`,\n );\n return { ...orderWithId, paymentDetails: transakOrder.paymentDetails };\n } catch {\n return orderWithId;\n }\n }\n\n return orderWithId;\n }\n\n async getUserLimits(\n fiatCurrency: string,\n paymentMethod: string,\n kycType: string,\n ): Promise<TransakUserLimits> {\n this.#ensureAccessToken();\n\n const translation = await this.getTranslation({\n paymentMethod: normalizePaymentMethodForTranslation(paymentMethod),\n });\n\n const params: Record<string, string> = {\n isBuyOrSell: 'BUY',\n kycType,\n fiatCurrency,\n };\n\n if (translation.paymentMethod) {\n params.paymentCategory = translation.paymentMethod;\n }\n\n return this.#transakGet<TransakUserLimits>(\n '/api/v2/orders/user-limit',\n params,\n );\n }\n\n /**\n * @deprecated Use {@link createWidgetUrl} instead. The OTT flow requires the\n * partner API key on the client and Transak is deprecating `request-ott`.\n * @returns The one-time token response.\n */\n async requestOtt(): Promise<TransakOttResponse> {\n this.#ensureAccessToken();\n const result = await this.#transakPost<TransakOttResponse>(\n '/api/v2/auth/request-ott',\n );\n return result;\n }\n\n /**\n * @deprecated Use {@link createWidgetUrl} instead. This builds the widget\n * URL client-side and embeds the partner API key in it.\n * @param ottToken - The one-time token for widget authentication.\n * @param quote - The buy quote to pre-fill in the widget.\n * @param walletAddress - The destination wallet address.\n * @param extraParams - Optional additional URL parameters.\n * @returns The fully constructed widget URL string.\n */\n generatePaymentWidgetUrl(\n ottToken: string,\n quote: TransakBuyQuote,\n walletAddress: string,\n extraParams?: Record<string, string>,\n ): string {\n const apiKey = this.#ensureApiKey();\n const widgetBaseUrl = getPaymentWidgetBaseUrl(this.#environment);\n\n const defaultParams: Record<string, string> = {\n apiKey,\n ott: ottToken,\n fiatCurrency: quote.fiatCurrency,\n cryptoCurrencyCode: quote.cryptoCurrency,\n productsAvailed: 'BUY',\n fiatAmount: quote.fiatAmount.toString(),\n network: quote.network,\n hideExchangeScreen: 'true',\n walletAddress,\n disableWalletAddressForm: 'true',\n paymentMethod: quote.paymentMethod,\n redirectURL:\n 'https://on-ramp-content.api.cx.metamask.io/regions/fake-callback',\n hideMenu: 'true',\n };\n\n const params = new URLSearchParams({\n ...defaultParams,\n ...extraParams,\n });\n\n const widgetUrl = new URL(widgetBaseUrl);\n widgetUrl.search = params.toString();\n return widgetUrl.toString();\n }\n\n /**\n * Creates a Transak payment widget URL through the ramps API proxy\n * (`POST {rampsBaseUrl}/providers/{providerId}/widget-url`). The proxy\n * injects the partner API key and derives the user IP server-side, so\n * neither leaves the backend. Replaces the OTT flow ({@link requestOtt} +\n * {@link generatePaymentWidgetUrl}).\n *\n * Requires both a Transak access token (user must be logged in to Transak)\n * and a MetaMask bearer token from `AuthenticationController`.\n *\n * @param quote - The buy quote to pre-fill in the widget.\n * @param walletAddress - The destination wallet address.\n * @param extraParams - Optional additional widget parameters (e.g. theming).\n * Keys must be on the proxy's allowlist or the request is rejected.\n * @returns The single-use widget URL (expires after 5 minutes).\n */\n async createWidgetUrl(\n quote: TransakBuyQuote,\n walletAddress: string,\n extraParams?: Record<string, string>,\n ): Promise<string> {\n this.#ensureAccessToken();\n const bearerToken = await this.#messenger.call(\n 'AuthenticationController:getBearerToken',\n );\n\n const baseUrl = this.#getRampsApiBaseUrl();\n const providerPath = getRampsProviderPath(this.#environment);\n const url = new URL(`${providerPath}/widget-url`, baseUrl);\n\n this.#addRampsCommonParams(url);\n\n const widgetParams: Record<string, string | number> = {\n referrerDomain: this.#referrerDomain,\n fiatCurrency: quote.fiatCurrency,\n cryptoCurrencyCode: quote.cryptoCurrency,\n fiatAmount: quote.fiatAmount,\n network: quote.network,\n paymentMethod: quote.paymentMethod,\n walletAddress,\n hideExchangeScreen: 'true',\n disableWalletAddressEdit: 'true',\n hideMenu: 'true',\n redirectURL:\n 'https://on-ramp-content.api.cx.metamask.io/regions/fake-callback',\n ...extraParams,\n };\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n Authorization: `Bearer ${bearerToken}`,\n };\n if (this.#accessToken?.accessToken) {\n headers['x-transak-access-token'] = this.#accessToken.accessToken;\n }\n\n const response = await this.#policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'POST',\n headers,\n body: JSON.stringify({ widgetParams }),\n });\n if (!fetchResponse.ok) {\n await this.#throwTransakApiError(fetchResponse, url);\n }\n return fetchResponse.json() as Promise<{ widgetUrl: string }>;\n });\n\n return response.widgetUrl;\n }\n\n async submitPurposeOfUsageForm(purpose: string[]): Promise<void> {\n this.#ensureAccessToken();\n await this.#transakPost('/api/v2/kyc/purpose-of-usage', {\n purposeList: purpose,\n });\n }\n\n async patchUser(data: PatchUserRequestBody): Promise<unknown> {\n this.#ensureAccessToken();\n return this.#transakPatch(\n '/api/v2/kyc/user',\n data as Record<string, unknown>,\n );\n }\n\n async submitSsnDetails(ssn: string, quoteId: string): Promise<unknown> {\n this.#ensureAccessToken();\n return this.#transakPost('/api/v2/kyc/ssn', { ssn, quoteId });\n }\n\n async confirmPayment(\n orderId: string,\n paymentMethodId: string,\n ): Promise<{ success: boolean }> {\n this.#ensureAccessToken();\n\n const normalizedPaymentMethod =\n normalizePaymentMethodForTranslation(paymentMethodId);\n const translation = await this.getTranslation({\n paymentMethod: normalizedPaymentMethod,\n });\n\n const transakOrderId =\n TransakOrderIdTransformer.extractTransakOrderId(orderId);\n\n return this.#transakPost<{ success: boolean }>(\n '/api/v2/orders/payment-confirmation',\n {\n orderId: transakOrderId,\n paymentMethod: translation.paymentMethod ?? normalizedPaymentMethod,\n },\n );\n }\n\n async getTranslation(\n translationRequest: TransakTranslationRequest,\n ): Promise<TransakQuoteTranslation> {\n const baseUrl = getRampsBaseUrl(this.#environment);\n const providerPath = getRampsProviderPath(this.#environment);\n const url = new URL(`${providerPath}/native/translate`, baseUrl);\n\n url.searchParams.set('action', 'deposit');\n url.searchParams.set('context', this.#context);\n\n const normalizedRequest = {\n ...translationRequest,\n paymentMethod: normalizePaymentMethodForTranslation(\n translationRequest.paymentMethod,\n ),\n };\n\n for (const [key, value] of Object.entries(normalizedRequest)) {\n if (value !== undefined) {\n url.searchParams.set(key, value);\n }\n }\n\n const response = await this.#policy.execute(async () => {\n const fetchResponse = await this.#fetch(url.toString(), {\n method: 'GET',\n headers: { Accept: 'application/json' },\n });\n if (!fetchResponse.ok) {\n throw new HttpError(\n fetchResponse.status,\n `Fetching '${url.toString()}' failed with status '${fetchResponse.status}'`,\n );\n }\n return fetchResponse.json() as Promise<TransakQuoteTranslation>;\n });\n\n return response;\n }\n\n async getIdProofStatus(workFlowRunId: string): Promise<TransakIdProofStatus> {\n this.#ensureAccessToken();\n return this.#transakGet<TransakIdProofStatus>(\n '/api/v2/kyc/id-proof-status',\n { workFlowRunId },\n );\n }\n\n async cancelOrder(depositOrderId: string): Promise<void> {\n this.#ensureAccessToken();\n const transakOrderId =\n TransakOrderIdTransformer.extractTransakOrderId(depositOrderId);\n await this.#transakDelete(`/api/v2/orders/${transakOrderId}`, {\n cancelReason: 'Creating new order',\n });\n }\n\n async cancelAllActiveOrders(): Promise<Error[]> {\n this.#ensureAccessToken();\n const activeOrders = await this.getActiveOrders();\n const errors: Error[] = [];\n\n await Promise.all(\n activeOrders.map(async (order) => {\n try {\n const depositOrderId =\n TransakOrderIdTransformer.transakOrderIdToDepositOrderId(\n order.orderId,\n this.#environment,\n );\n await this.cancelOrder(depositOrderId);\n } catch (error) {\n errors.push(\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n }),\n );\n\n return errors;\n }\n\n async getActiveOrders(): Promise<TransakOrder[]> {\n this.#ensureAccessToken();\n return this.#transakGet<TransakOrder[]>('/api/v2/active-orders');\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=autoramp-types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoramp-types.cjs","sourceRoot":"","sources":["../src/autoramp-types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Non-PII deposit readiness summary from a neo-bank autoramp response.\n * Full deposit rail details (IBAN, etc.) should be re-fetched when needed.\n */\nexport type AutorampDepositRailsSummary = {\n /** Source currency code when known (e.g. EUR). */\n currency?: string;\n /** True when the autoramp is approved and deposit details may be shared. */\n ready: boolean;\n};\n\n/**\n * Minimal remote snapshot from `GET /neobank/autoramps/{id}` (or a push payload).\n * Identity fields may be omitted on partial proxy responses.\n */\nexport type AutorampRemoteSnapshot = {\n id: string;\n customerId?: string;\n walletAddress?: string;\n status: string;\n depositRailsSummary?: AutorampDepositRailsSummary;\n};\n"]}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Non-PII deposit readiness summary from a neo-bank autoramp response.
3
+ * Full deposit rail details (IBAN, etc.) should be re-fetched when needed.
4
+ */
5
+ export type AutorampDepositRailsSummary = {
6
+ /** Source currency code when known (e.g. EUR). */
7
+ currency?: string;
8
+ /** True when the autoramp is approved and deposit details may be shared. */
9
+ ready: boolean;
10
+ };
11
+ /**
12
+ * Minimal remote snapshot from `GET /neobank/autoramps/{id}` (or a push payload).
13
+ * Identity fields may be omitted on partial proxy responses.
14
+ */
15
+ export type AutorampRemoteSnapshot = {
16
+ id: string;
17
+ customerId?: string;
18
+ walletAddress?: string;
19
+ status: string;
20
+ depositRailsSummary?: AutorampDepositRailsSummary;
21
+ };
22
+ //# sourceMappingURL=autoramp-types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoramp-types.d.cts","sourceRoot":"","sources":["../src/autoramp-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;CACnD,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Non-PII deposit readiness summary from a neo-bank autoramp response.
3
+ * Full deposit rail details (IBAN, etc.) should be re-fetched when needed.
4
+ */
5
+ export type AutorampDepositRailsSummary = {
6
+ /** Source currency code when known (e.g. EUR). */
7
+ currency?: string;
8
+ /** True when the autoramp is approved and deposit details may be shared. */
9
+ ready: boolean;
10
+ };
11
+ /**
12
+ * Minimal remote snapshot from `GET /neobank/autoramps/{id}` (or a push payload).
13
+ * Identity fields may be omitted on partial proxy responses.
14
+ */
15
+ export type AutorampRemoteSnapshot = {
16
+ id: string;
17
+ customerId?: string;
18
+ walletAddress?: string;
19
+ status: string;
20
+ depositRailsSummary?: AutorampDepositRailsSummary;
21
+ };
22
+ //# sourceMappingURL=autoramp-types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoramp-types.d.mts","sourceRoot":"","sources":["../src/autoramp-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,2BAA2B,CAAC;CACnD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=autoramp-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoramp-types.mjs","sourceRoot":"","sources":["../src/autoramp-types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Non-PII deposit readiness summary from a neo-bank autoramp response.\n * Full deposit rail details (IBAN, etc.) should be re-fetched when needed.\n */\nexport type AutorampDepositRailsSummary = {\n /** Source currency code when known (e.g. EUR). */\n currency?: string;\n /** True when the autoramp is approved and deposit details may be shared. */\n ready: boolean;\n};\n\n/**\n * Minimal remote snapshot from `GET /neobank/autoramps/{id}` (or a push payload).\n * Identity fields may be omitted on partial proxy responses.\n */\nexport type AutorampRemoteSnapshot = {\n id: string;\n customerId?: string;\n walletAddress?: string;\n status: string;\n depositRailsSummary?: AutorampDepositRailsSummary;\n};\n"]}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ /**
3
+ * Local + remote models for MoonPay Enterprise autoramp accounts.
4
+ * Separate from {@link RampsOrder}: autoramps are standing routes; orders are payments.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.markAutorampNotified = exports.applyAutorampRemoteStatus = exports.createAutorampAccount = exports.normalizeAutorampStatus = exports.isTerminalAutorampStatus = exports.NOTABLE_AUTORAMP_STATUSES = exports.TERMINAL_AUTORAMP_STATUSES = exports.AutorampStatus = void 0;
8
+ /**
9
+ * Autoramp lifecycle statuses from MoonPay Enterprise.
10
+ *
11
+ * @see https://dev.enterprise.moonpay.com/autoramp-status
12
+ */
13
+ var AutorampStatus;
14
+ (function (AutorampStatus) {
15
+ AutorampStatus["Created"] = "Created";
16
+ AutorampStatus["Authorized"] = "Authorized";
17
+ AutorampStatus["EditPending"] = "EditPending";
18
+ AutorampStatus["DepositAccountAdded"] = "DepositAccountAdded";
19
+ AutorampStatus["Approved"] = "Approved";
20
+ AutorampStatus["Rejected"] = "Rejected";
21
+ AutorampStatus["Cancelled"] = "Cancelled";
22
+ })(AutorampStatus || (exports.AutorampStatus = AutorampStatus = {}));
23
+ /**
24
+ * Terminal autoramp statuses — no further lifecycle progress expected.
25
+ */
26
+ exports.TERMINAL_AUTORAMP_STATUSES = new Set([
27
+ AutorampStatus.Rejected,
28
+ AutorampStatus.Cancelled,
29
+ ]);
30
+ /**
31
+ * Statuses that commonly warrant user-visible transition UX (toast / banner).
32
+ */
33
+ exports.NOTABLE_AUTORAMP_STATUSES = new Set([
34
+ AutorampStatus.Approved,
35
+ AutorampStatus.Rejected,
36
+ AutorampStatus.Cancelled,
37
+ ]);
38
+ /**
39
+ * Whether an autoramp status is terminal.
40
+ *
41
+ * @param status - Status to test.
42
+ * @returns Whether the status is terminal.
43
+ */
44
+ function isTerminalAutorampStatus(status) {
45
+ return exports.TERMINAL_AUTORAMP_STATUSES.has(status);
46
+ }
47
+ exports.isTerminalAutorampStatus = isTerminalAutorampStatus;
48
+ /**
49
+ * Normalize a remote status string into {@link AutorampStatus}.
50
+ * Unknown values fall back to {@link AutorampStatus.Created}.
51
+ *
52
+ * @param status - Remote status string.
53
+ * @returns A known {@link AutorampStatus}.
54
+ */
55
+ function normalizeAutorampStatus(status) {
56
+ if (Object.values(AutorampStatus).includes(status)) {
57
+ return status;
58
+ }
59
+ return AutorampStatus.Created;
60
+ }
61
+ exports.normalizeAutorampStatus = normalizeAutorampStatus;
62
+ /**
63
+ * Build a new local autoramp account from create/response fields.
64
+ *
65
+ * @param input - Required identity + status fields.
66
+ * @param input.id - MoonPay autoramp id.
67
+ * @param input.customerId - MoonPay customer id.
68
+ * @param input.walletAddress - Destination wallet address.
69
+ * @param input.status - Optional remote status (defaults to Authorized).
70
+ * @param input.depositRailsSummary - Optional non-PII deposit readiness cache.
71
+ * @param input.updatedAt - Optional epoch ms timestamp (defaults to now).
72
+ * @returns A new {@link AutorampAccount}.
73
+ */
74
+ function createAutorampAccount(input) {
75
+ const status = normalizeAutorampStatus(input.status ?? AutorampStatus.Authorized);
76
+ return {
77
+ id: input.id,
78
+ customerId: input.customerId,
79
+ walletAddress: input.walletAddress,
80
+ status,
81
+ lastSeenStatus: status,
82
+ updatedAt: input.updatedAt ?? Date.now(),
83
+ depositRailsSummary: input.depositRailsSummary,
84
+ };
85
+ }
86
+ exports.createAutorampAccount = createAutorampAccount;
87
+ /**
88
+ * Apply a remote autoramp snapshot onto a local account for transition detection.
89
+ * Pure helper — shared by refresh-on-load and websocket push paths.
90
+ *
91
+ * @param local - Current local account (or null when first upserting from remote).
92
+ * @param remote - Remote snapshot (MoonPay GET or push).
93
+ * @returns Updated account plus change / notify flags.
94
+ */
95
+ function applyAutorampRemoteStatus(local, remote) {
96
+ const remoteStatus = normalizeAutorampStatus(remote.status);
97
+ if (!local) {
98
+ const account = createAutorampAccount({
99
+ id: remote.id,
100
+ customerId: remote.customerId ?? '',
101
+ walletAddress: remote.walletAddress ?? '',
102
+ status: remoteStatus,
103
+ depositRailsSummary: remote.depositRailsSummary,
104
+ });
105
+ return {
106
+ account,
107
+ previousStatus: remoteStatus,
108
+ statusChanged: false,
109
+ shouldNotify: false,
110
+ };
111
+ }
112
+ const previousStatus = local.status;
113
+ const statusChanged = previousStatus !== remoteStatus;
114
+ const shouldNotify = statusChanged &&
115
+ local.notifiedForStatus !== remoteStatus &&
116
+ exports.NOTABLE_AUTORAMP_STATUSES.has(remoteStatus);
117
+ const account = {
118
+ ...local,
119
+ id: remote.id,
120
+ // A blank remote identity field means "not supplied", not "cleared": the
121
+ // proxy omits or empties these on partial status pushes, so keep the local
122
+ // value rather than wiping it.
123
+ customerId: remote.customerId !== undefined && remote.customerId.length > 0
124
+ ? remote.customerId
125
+ : local.customerId,
126
+ walletAddress: remote.walletAddress !== undefined && remote.walletAddress.length > 0
127
+ ? remote.walletAddress
128
+ : local.walletAddress,
129
+ status: remoteStatus,
130
+ lastSeenStatus: previousStatus,
131
+ updatedAt: Date.now(),
132
+ depositRailsSummary: remote.depositRailsSummary ?? local.depositRailsSummary,
133
+ };
134
+ return {
135
+ account,
136
+ previousStatus,
137
+ statusChanged,
138
+ shouldNotify,
139
+ };
140
+ }
141
+ exports.applyAutorampRemoteStatus = applyAutorampRemoteStatus;
142
+ /**
143
+ * Mark that the UI has notified for the account's current status.
144
+ *
145
+ * @param account - Account to update.
146
+ * @returns Account with `notifiedForStatus` set to current status.
147
+ */
148
+ function markAutorampNotified(account) {
149
+ return {
150
+ ...account,
151
+ notifiedForStatus: account.status,
152
+ };
153
+ }
154
+ exports.markAutorampNotified = markAutorampNotified;
155
+ //# sourceMappingURL=autorampAccount.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autorampAccount.cjs","sourceRoot":"","sources":["../src/autorampAccount.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Local + remote models for MoonPay Enterprise autoramp accounts.\n * Separate from {@link RampsOrder}: autoramps are standing routes; orders are payments.\n */\n\nimport type {\n AutorampDepositRailsSummary,\n AutorampRemoteSnapshot,\n} from './autoramp-types.js';\n\nexport type {\n AutorampDepositRailsSummary,\n AutorampRemoteSnapshot,\n} from './autoramp-types.js';\n\n/**\n * Autoramp lifecycle statuses from MoonPay Enterprise.\n *\n * @see https://dev.enterprise.moonpay.com/autoramp-status\n */\nexport enum AutorampStatus {\n Created = 'Created',\n Authorized = 'Authorized',\n EditPending = 'EditPending',\n DepositAccountAdded = 'DepositAccountAdded',\n Approved = 'Approved',\n Rejected = 'Rejected',\n Cancelled = 'Cancelled',\n}\n\n/**\n * Local controller representation of an autoramp account.\n */\nexport type AutorampAccount = {\n /** MoonPay autoramp id. */\n id: string;\n /** MoonPay customer id. */\n customerId: string;\n /** Destination wallet address associated with this autoramp. */\n walletAddress: string;\n /** Latest status from MoonPay (source of truth after refresh). */\n status: AutorampStatus;\n /**\n * Status observed before the most recent remote apply.\n * Used for transition UX / analytics (e.g. Authorized → Approved).\n */\n lastSeenStatus: AutorampStatus;\n /**\n * Last status for which the UI already showed a notification.\n * Prevents duplicate toasts across refresh and push.\n */\n notifiedForStatus?: AutorampStatus;\n /** Epoch ms of the last local update from remote or push. */\n updatedAt: number;\n /** Optional non-PII deposit readiness cache. */\n depositRailsSummary?: AutorampDepositRailsSummary;\n};\n\n/**\n * Controller-facing payload for creating an autoramp.\n *\n * Mirrors the MoonPay `POST /api/autoramps` body that\n * {@link NeoBankService.createAutoramp} forwards opaquely, minus `customer_id`:\n * `RampsController.createAutoramp` injects the vendor customer id resolved from\n * Profile Sync, so callers never supply (or need to know) it.\n */\nexport type CreateAutorampRequest = Record<string, unknown>;\n\n/**\n * Result of applying a remote autoramp snapshot onto local state.\n */\nexport type ApplyAutorampRemoteStatusResult = {\n account: AutorampAccount;\n previousStatus: AutorampStatus;\n statusChanged: boolean;\n /** True when status changed and UI has not yet notified for the new status. */\n shouldNotify: boolean;\n};\n\n/**\n * Terminal autoramp statuses — no further lifecycle progress expected.\n */\nexport const TERMINAL_AUTORAMP_STATUSES: ReadonlySet<AutorampStatus> = new Set([\n AutorampStatus.Rejected,\n AutorampStatus.Cancelled,\n]);\n\n/**\n * Statuses that commonly warrant user-visible transition UX (toast / banner).\n */\nexport const NOTABLE_AUTORAMP_STATUSES: ReadonlySet<AutorampStatus> = new Set([\n AutorampStatus.Approved,\n AutorampStatus.Rejected,\n AutorampStatus.Cancelled,\n]);\n\n/**\n * Whether an autoramp status is terminal.\n *\n * @param status - Status to test.\n * @returns Whether the status is terminal.\n */\nexport function isTerminalAutorampStatus(status: AutorampStatus): boolean {\n return TERMINAL_AUTORAMP_STATUSES.has(status);\n}\n\n/**\n * Normalize a remote status string into {@link AutorampStatus}.\n * Unknown values fall back to {@link AutorampStatus.Created}.\n *\n * @param status - Remote status string.\n * @returns A known {@link AutorampStatus}.\n */\nexport function normalizeAutorampStatus(\n status: AutorampStatus | string,\n): AutorampStatus {\n if (Object.values(AutorampStatus).includes(status as AutorampStatus)) {\n return status as AutorampStatus;\n }\n return AutorampStatus.Created;\n}\n\n/**\n * Build a new local autoramp account from create/response fields.\n *\n * @param input - Required identity + status fields.\n * @param input.id - MoonPay autoramp id.\n * @param input.customerId - MoonPay customer id.\n * @param input.walletAddress - Destination wallet address.\n * @param input.status - Optional remote status (defaults to Authorized).\n * @param input.depositRailsSummary - Optional non-PII deposit readiness cache.\n * @param input.updatedAt - Optional epoch ms timestamp (defaults to now).\n * @returns A new {@link AutorampAccount}.\n */\nexport function createAutorampAccount(input: {\n id: string;\n customerId: string;\n walletAddress: string;\n status?: AutorampStatus | string;\n depositRailsSummary?: AutorampDepositRailsSummary;\n updatedAt?: number;\n}): AutorampAccount {\n const status = normalizeAutorampStatus(\n input.status ?? AutorampStatus.Authorized,\n );\n return {\n id: input.id,\n customerId: input.customerId,\n walletAddress: input.walletAddress,\n status,\n lastSeenStatus: status,\n updatedAt: input.updatedAt ?? Date.now(),\n depositRailsSummary: input.depositRailsSummary,\n };\n}\n\n/**\n * Apply a remote autoramp snapshot onto a local account for transition detection.\n * Pure helper — shared by refresh-on-load and websocket push paths.\n *\n * @param local - Current local account (or null when first upserting from remote).\n * @param remote - Remote snapshot (MoonPay GET or push).\n * @returns Updated account plus change / notify flags.\n */\nexport function applyAutorampRemoteStatus(\n local: AutorampAccount | null,\n remote: AutorampRemoteSnapshot,\n): ApplyAutorampRemoteStatusResult {\n const remoteStatus = normalizeAutorampStatus(remote.status);\n\n if (!local) {\n const account = createAutorampAccount({\n id: remote.id,\n customerId: remote.customerId ?? '',\n walletAddress: remote.walletAddress ?? '',\n status: remoteStatus,\n depositRailsSummary: remote.depositRailsSummary,\n });\n return {\n account,\n previousStatus: remoteStatus,\n statusChanged: false,\n shouldNotify: false,\n };\n }\n\n const previousStatus = local.status;\n const statusChanged = previousStatus !== remoteStatus;\n const shouldNotify =\n statusChanged &&\n local.notifiedForStatus !== remoteStatus &&\n NOTABLE_AUTORAMP_STATUSES.has(remoteStatus);\n\n const account: AutorampAccount = {\n ...local,\n id: remote.id,\n // A blank remote identity field means \"not supplied\", not \"cleared\": the\n // proxy omits or empties these on partial status pushes, so keep the local\n // value rather than wiping it.\n customerId:\n remote.customerId !== undefined && remote.customerId.length > 0\n ? remote.customerId\n : local.customerId,\n walletAddress:\n remote.walletAddress !== undefined && remote.walletAddress.length > 0\n ? remote.walletAddress\n : local.walletAddress,\n status: remoteStatus,\n lastSeenStatus: previousStatus,\n updatedAt: Date.now(),\n depositRailsSummary:\n remote.depositRailsSummary ?? local.depositRailsSummary,\n };\n\n return {\n account,\n previousStatus,\n statusChanged,\n shouldNotify,\n };\n}\n\n/**\n * Mark that the UI has notified for the account's current status.\n *\n * @param account - Account to update.\n * @returns Account with `notifiedForStatus` set to current status.\n */\nexport function markAutorampNotified(\n account: AutorampAccount,\n): AutorampAccount {\n return {\n ...account,\n notifiedForStatus: account.status,\n };\n}\n"]}