@reown/appkit-controllers
Version:
#### 🔗 [Website](https://reown.com/appkit)
75 lines • 4.11 kB
JavaScript
import {} from '@reown/appkit-common';
import { ConstantsUtil as CommonConstantsUtil } from '@reown/appkit-common';
import { ConnectionController } from '../controllers/ConnectionController.js';
import { ConnectorController } from '../controllers/ConnectorController.js';
// -- Utils ------------------------------------------ //
export const ConnectionControllerUtil = {
getConnectionStatus(connection, namespace) {
const connectedConnectorId = ConnectorController.state.activeConnectorIds[namespace];
const connections = ConnectionController.state.connections.get(namespace) ?? [];
const isConnectorConnected = Boolean(connectedConnectorId) && connection.connectorId === connectedConnectorId;
if (isConnectorConnected) {
return 'connected';
}
const isConnectionConnected = connections.some(c => c.connectorId.toLowerCase() === connection.connectorId.toLowerCase());
if (isConnectionConnected) {
return 'active';
}
return 'disconnected';
},
validateAccountSwitch({ namespace, connection, address }) {
const isBitcoin = namespace === CommonConstantsUtil.CHAIN.BITCOIN;
if (isBitcoin) {
if (!address) {
throw new Error('Address parameter is required for switching bip122 connection');
}
const { type } = connection.accounts.find(account => account.address.toLowerCase() === address.toLowerCase()) ?? {};
if (typeof type === 'string' && type !== 'payment') {
throw new Error(`Switching to non-payment accounts is not allowed for ${namespace}`);
}
}
},
excludeConnectorAddressFromConnections({ connections, connectorId, addresses }) {
return connections.map(connection => {
const isConnectorMatch = connectorId
? connection.connectorId.toLowerCase() === connectorId.toLowerCase()
: false;
if (isConnectorMatch && addresses) {
const filteredAccounts = connection.accounts.filter(account => {
const isAddressIncluded = addresses.some(address => address.toLowerCase() === account.address.toLowerCase());
return !isAddressIncluded;
});
return { ...connection, accounts: filteredAccounts };
}
return connection;
});
},
excludeExistingConnections(connectorIds, newConnections) {
const existingConnectorIds = new Set(connectorIds);
return newConnections.filter(c => !existingConnectorIds.has(c.connectorId));
},
getConnectionsByConnectorId(connections, connectorId) {
return connections.filter(c => c.connectorId.toLowerCase() === connectorId.toLowerCase());
},
filterConnectionsByAccountType(connections, accountType) {
return connections.map(c => {
const filteredAccounts = c.accounts.filter(account => typeof account.type === 'string'
? account.type.toLowerCase() === accountType.toLowerCase()
: true);
return { ...c, accounts: filteredAccounts };
});
},
getConnectionsData(namespace) {
const allConnections = ConnectionController.state.connections.get(namespace) ?? [];
const connections = allConnections.filter(c => !c.recent);
const activeConnectorId = ConnectorController.state.activeConnectorIds[namespace];
const recentConnections = allConnections.filter(c => c.recent);
const recentConnectionsWithCurrentActiveConnectors = recentConnections.filter(connection => ConnectorController.getConnectorById(connection.connectorId));
const dedupedRecentConnections = ConnectionControllerUtil.excludeExistingConnections([...connections.map(c => c.connectorId), ...(activeConnectorId ? [activeConnectorId] : [])], recentConnectionsWithCurrentActiveConnectors);
return {
connections,
recentConnections: dedupedRecentConnections
};
}
};
//# sourceMappingURL=ConnectionControllerUtil.js.map