diff --git a/packages/bridge-status-controller/CHANGELOG.md b/packages/bridge-status-controller/CHANGELOG.md index 93a28dde9b2..d2b157b710d 100644 --- a/packages/bridge-status-controller/CHANGELOG.md +++ b/packages/bridge-status-controller/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- **BREAKING** Use CrossChain API instead of the intent manager package for intent order submission ([#6963](https://github.com/MetaMask/core/pull/6963)) + ## [52.0.0] ### Changed diff --git a/packages/bridge-status-controller/src/bridge-status-controller.ts b/packages/bridge-status-controller/src/bridge-status-controller.ts index 4edd091f50f..244d3a748d7 100644 --- a/packages/bridge-status-controller/src/bridge-status-controller.ts +++ b/packages/bridge-status-controller/src/bridge-status-controller.ts @@ -19,12 +19,6 @@ import { } from '@metamask/bridge-controller'; import type { TraceCallback } from '@metamask/controller-utils'; import { toHex } from '@metamask/controller-utils'; -import type { - IntentOrder, - IntentSubmissionParams, -} from '@metamask/intent-manager'; -import { IntentManager } from '@metamask/intent-manager'; -import { IntentOrderStatus } from '@metamask/intent-manager'; import { StaticIntervalPollingController } from '@metamask/polling-controller'; import type { TransactionController, @@ -54,6 +48,9 @@ import type { } from './types'; import { type BridgeStatusControllerMessenger } from './types'; import { BridgeClientId } from './types'; +import { IntentApiImpl } from './intent-api'; +import { IntentOrderStatus } from './intent-order-status'; +import type { IntentOrder } from './intent-order'; import { fetchBridgeTxStatus, getStatusRequestWithSrcTxHash, @@ -121,8 +118,6 @@ export class BridgeStatusController extends StaticIntervalPollingController { - if (!this.#intentManager) { - console.warn('Intent manager not available for status polling'); - return; - } - const { txHistory } = this.state; const historyItem = txHistory[bridgeTxMetaId]; if (!historyItem) { @@ -727,16 +707,20 @@ export class BridgeStatusController extends StaticIntervalPollingController> => { const { quoteResponse, signature, accountAddress } = params; - if (!this.#intentManager) { - throw new Error('Intent manager not initialized'); - } - // Build pre-confirmation properties for error tracking parity with submitTx const account = this.messagingSystem.call( 'AccountsController:getAccountByAddress', @@ -1576,16 +1556,21 @@ export class BridgeStatusController extends StaticIntervalPollingController; +} + +export class IntentApiImpl implements IntentApi { + private baseUrl: string; + private fetchFn: FetchFunction; + + constructor(baseUrl: string, fetchFn: FetchFunction) { + this.baseUrl = baseUrl; + this.fetchFn = fetchFn; + } + + async submitIntent(params: IntentSubmissionParams): Promise { + const endpoint = `${this.baseUrl}/submitOrder`; + const response = (await this.fetchFn(endpoint, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(params), + })) as Response; + if (!response.ok) { + throw new Error(`Failed to submit intent: ${response.statusText}`); + } + return response.json(); + } + + async getOrderStatus( + orderId: string, + aggregatorId: string, + chainId: string, + ): Promise { + const endpoint = `${this.baseUrl}/getOrderStatus?orderId=${orderId}&aggregatorId=${encodeURIComponent(aggregatorId)}&chainId=${chainId}`; + const response = (await this.fetchFn(endpoint, { + method: 'GET', + })) as Response; + if (!response.ok) { + throw new Error(`Failed to get order status: ${response.statusText}`); + } + return response.json(); + } +} diff --git a/packages/bridge-status-controller/src/intent-order-status.ts b/packages/bridge-status-controller/src/intent-order-status.ts new file mode 100644 index 00000000000..81dfa895324 --- /dev/null +++ b/packages/bridge-status-controller/src/intent-order-status.ts @@ -0,0 +1,9 @@ +export enum IntentOrderStatus { + PENDING = 'pending', + SUBMITTED = 'submitted', + CONFIRMED = 'confirmed', + COMPLETED = 'completed', + FAILED = 'failed', + CANCELLED = 'cancelled', + EXPIRED = 'expired', +} diff --git a/packages/bridge-status-controller/src/intent-order.ts b/packages/bridge-status-controller/src/intent-order.ts new file mode 100644 index 00000000000..cb72a209860 --- /dev/null +++ b/packages/bridge-status-controller/src/intent-order.ts @@ -0,0 +1,10 @@ +import { IntentOrderStatus } from './intent-order-status'; + +export interface IntentOrder { + id: string; + status: IntentOrderStatus; + txHash?: string; + metadata: { + txHashes?: string[] | string; + }; +} diff --git a/yarn.lock b/yarn.lock index 4d63bcf6854..c0f54b1a51c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3822,25 +3822,25 @@ __metadata: "@metamask/intent-manager@file:../Intent-manager::locator=%40metamask%2Fbridge-controller%40workspace%3Apackages%2Fbridge-controller": version: 1.0.0 - resolution: "@metamask/intent-manager@file:../Intent-manager#../Intent-manager::hash=d3eeb0&locator=%40metamask%2Fbridge-controller%40workspace%3Apackages%2Fbridge-controller" + resolution: "@metamask/intent-manager@file:../Intent-manager#../Intent-manager::hash=bf88dd&locator=%40metamask%2Fbridge-controller%40workspace%3Apackages%2Fbridge-controller" dependencies: "@metamask/base-controller": "npm:^8.3.0" "@metamask/controller-utils": "npm:^11.12.0" "@metamask/superstruct": "npm:^3.1.0" "@metamask/utils": "npm:^11.4.2" - checksum: 10/e2b4bc4c21e3ec29c5db997e6255eab08beb5c4f2180423842acc9268b45ac3906e3fee2b418ec737033ccbe2de6ba52551352111ac55edf526614e8a734cce9 + checksum: 10/45f9c1dcf7da910d866f675473313fdce5d9e1e67008861c43912345d2e0903a44a8167763b74c7a86c89fe9d818d06c3d99788d102f81893104b23773a94acd languageName: node linkType: hard "@metamask/intent-manager@file:../Intent-manager::locator=%40metamask%2Fbridge-status-controller%40workspace%3Apackages%2Fbridge-status-controller": version: 1.0.0 - resolution: "@metamask/intent-manager@file:../Intent-manager#../Intent-manager::hash=d3eeb0&locator=%40metamask%2Fbridge-status-controller%40workspace%3Apackages%2Fbridge-status-controller" + resolution: "@metamask/intent-manager@file:../Intent-manager#../Intent-manager::hash=bf88dd&locator=%40metamask%2Fbridge-status-controller%40workspace%3Apackages%2Fbridge-status-controller" dependencies: "@metamask/base-controller": "npm:^8.3.0" "@metamask/controller-utils": "npm:^11.12.0" "@metamask/superstruct": "npm:^3.1.0" "@metamask/utils": "npm:^11.4.2" - checksum: 10/e2b4bc4c21e3ec29c5db997e6255eab08beb5c4f2180423842acc9268b45ac3906e3fee2b418ec737033ccbe2de6ba52551352111ac55edf526614e8a734cce9 + checksum: 10/45f9c1dcf7da910d866f675473313fdce5d9e1e67008861c43912345d2e0903a44a8167763b74c7a86c89fe9d818d06c3d99788d102f81893104b23773a94acd languageName: node linkType: hard