Skip to content

Commit 3919440

Browse files
committed
feat(backend-platform): add doc
1 parent 2ec5a03 commit 3919440

File tree

5 files changed

+320
-266
lines changed

5 files changed

+320
-266
lines changed

packages/assets-controllers/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
"@ethersproject/contracts": "^5.7.0",
5555
"@ethersproject/providers": "^5.7.0",
5656
"@metamask/abi-utils": "^2.0.3",
57+
"@metamask/backend-platform": "workspace:^",
5758
"@metamask/base-controller": "^8.3.0",
5859
"@metamask/contract-metadata": "^2.4.0",
5960
"@metamask/controller-utils": "^11.12.0",

packages/assets-controllers/src/TokenBalancesController.ts

Lines changed: 19 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@ import BN from 'bn.js';
22
import { produce } from 'immer';
33
import { isEqual } from 'lodash';
44

5+
import type {
6+
BalanceUpdate,
7+
AccountActivityServiceBalanceUpdatedEvent,
8+
AccountActivityServiceStatusChangedEvent
9+
} from '@metamask/backend-platform';
10+
511
import { Web3Provider } from '@ethersproject/providers';
612
import type {
713
AccountsControllerGetSelectedAccountAction,
@@ -76,26 +82,9 @@ export type TokenBalancesControllerGetStateAction = ControllerGetStateAction<
7682
TokenBalancesControllerState
7783
>;
7884

79-
export type TokenBalancesControllerUpdateChainPollingConfigsAction = {
80-
type: `TokenBalancesController:updateChainPollingConfigs`;
81-
handler: TokenBalancesController['updateChainPollingConfigs'];
82-
};
83-
84-
export type TokenBalancesControllerGetChainPollingConfigAction = {
85-
type: `TokenBalancesController:getChainPollingConfig`;
86-
handler: TokenBalancesController['getChainPollingConfig'];
87-
};
88-
89-
export type TokenBalancesControllerGetDefaultPollingIntervalAction = {
90-
type: `TokenBalancesController:getDefaultPollingInterval`;
91-
handler: TokenBalancesController['getDefaultPollingInterval'];
92-
};
9385

9486
export type TokenBalancesControllerActions =
95-
| TokenBalancesControllerGetStateAction
96-
| TokenBalancesControllerUpdateChainPollingConfigsAction
97-
| TokenBalancesControllerGetChainPollingConfigAction
98-
| TokenBalancesControllerGetDefaultPollingIntervalAction;
87+
| TokenBalancesControllerGetStateAction;
9988

10089
export type TokenBalancesControllerStateChangeEvent =
10190
ControllerStateChangeEvent<typeof CONTROLLER, TokenBalancesControllerState>;
@@ -124,8 +113,8 @@ export type AllowedEvents =
124113
| PreferencesControllerStateChangeEvent
125114
| NetworkControllerStateChangeEvent
126115
| KeyringControllerAccountRemovedEvent
127-
| { type: 'AccountActivityService:balanceUpdated'; payload: any[] }
128-
| { type: 'AccountActivityService:statusChanged'; payload: [{ chainIds: string[]; status: 'up' | 'down'; }] };
116+
| AccountActivityServiceBalanceUpdatedEvent
117+
| AccountActivityServiceStatusChangedEvent;
129118

130119
export type TokenBalancesControllerMessenger = RestrictedMessenger<
131120
typeof CONTROLLER,
@@ -284,21 +273,6 @@ export class TokenBalancesController extends StaticIntervalPollingController<{
284273
this.#onAccountActivityStatusChanged.bind(this),
285274
);
286275

287-
// Register action handlers for polling interval control
288-
this.messagingSystem.registerActionHandler(
289-
`TokenBalancesController:updateChainPollingConfigs`,
290-
this.updateChainPollingConfigs.bind(this),
291-
);
292-
293-
this.messagingSystem.registerActionHandler(
294-
`TokenBalancesController:getChainPollingConfig`,
295-
this.getChainPollingConfig.bind(this),
296-
);
297-
298-
this.messagingSystem.registerActionHandler(
299-
`TokenBalancesController:getDefaultPollingInterval`,
300-
this.getDefaultPollingInterval.bind(this),
301-
);
302276
}
303277

304278
#chainIdsWithTokens(): ChainIdHex[] {
@@ -809,6 +783,7 @@ export class TokenBalancesController extends StaticIntervalPollingController<{
809783
/**
810784
* Handle real-time balance updates from AccountActivityService
811785
* Processes balance updates and updates the token balance state
786+
* If any balance update has an error, triggers fallback polling for the chain
812787
*/
813788
readonly #onAccountActivityBalanceUpdate = async ({
814789
address,
@@ -817,10 +792,7 @@ export class TokenBalancesController extends StaticIntervalPollingController<{
817792
}: {
818793
address: string;
819794
chain: string;
820-
updates: Array<{
821-
asset: { type: string; unit: string };
822-
postBalance: { amount: string };
823-
}>;
795+
updates: BalanceUpdate[];
824796
}) => {
825797

826798
const chainParts = chain.split(':');
@@ -843,6 +815,13 @@ export class TokenBalancesController extends StaticIntervalPollingController<{
843815
for (const update of updates) {
844816
const { asset, postBalance } = update;
845817

818+
// Check if there's an error in the balance update
819+
if (postBalance.error) {
820+
console.warn(`Balance update has error for ${asset.unit}:`, postBalance.error, '- will trigger fallback polling');
821+
shouldPoll = true;
822+
break;
823+
}
824+
846825
// Extract token address from asset type (e.g., "eip155:1/erc20:0x...")
847826
let tokenAddress: string;
848827

@@ -877,7 +856,7 @@ export class TokenBalancesController extends StaticIntervalPollingController<{
877856
shouldPoll = true;
878857
}
879858

880-
// Single fallback polling call for any error (validation or processing)
859+
// Single fallback polling call for any error (balance errors, validation errors, or processing errors)
881860
if (shouldPoll) {
882861
try {
883862
console.log(`Triggering fallback poll for chain ${chain} (${chainId})`);
@@ -980,13 +959,6 @@ export class TokenBalancesController extends StaticIntervalPollingController<{
980959
this.#statusChangeDebouncer.timer = null;
981960
}
982961

983-
// Unregister action handlers
984-
this.messagingSystem.unregisterActionHandler(
985-
`TokenBalancesController:updateChainPollingConfigs`,
986-
);
987-
this.messagingSystem.unregisterActionHandler(
988-
`TokenBalancesController:getChainPollingConfig`,
989-
);
990962

991963
super.destroy();
992964
}

packages/assets-controllers/tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
{ "path": "../account-tree-controller" },
99
{ "path": "../accounts-controller" },
1010
{ "path": "../approval-controller" },
11+
{ "path": "../backend-platform" },
1112
{ "path": "../base-controller" },
1213
{ "path": "../controller-utils" },
1314
{ "path": "../keyring-controller" },

0 commit comments

Comments
 (0)