You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.2 KiB
43 lines
1.2 KiB
4 years ago
|
import { useSelector } from 'react-redux';
|
||
|
import { getDomainMetadata } from '../selectors';
|
||
|
|
||
|
/**
|
||
|
* @typedef {Object} OriginMetadata
|
||
|
* @property {string} host - The host of the origin
|
||
|
* @property {string} hostname - The hostname of the origin (host + port)
|
||
|
* @property {string} origin - The original origin string itself
|
||
|
* @property {string} [icon] - The origin's site icon if available
|
||
|
* @property {number} [lastUpdated] - Timestamp of the last update to the
|
||
|
* origin's metadata
|
||
|
* @property {string} [name] - The registered name of the origin if available
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Gets origin metadata from redux and formats it appropriately.
|
||
|
* @param {string} origin - The fully formed url of the site interacting with
|
||
|
* MetaMask
|
||
|
* @returns {OriginMetadata | null} - The origin metadata available for the
|
||
|
* current origin
|
||
|
*/
|
||
|
export function useOriginMetadata(origin) {
|
||
|
const domainMetaData = useSelector(getDomainMetadata);
|
||
|
if (!origin) {
|
||
|
return null;
|
||
|
}
|
||
|
const url = new URL(origin);
|
||
|
|
||
|
const minimumOriginMetadata = {
|
||
|
host: url.host,
|
||
|
hostname: url.hostname,
|
||
|
origin,
|
||
|
};
|
||
|
|
||
|
if (domainMetaData?.[origin]) {
|
||
|
return {
|
||
|
...minimumOriginMetadata,
|
||
|
...domainMetaData[origin],
|
||
|
};
|
||
|
}
|
||
|
return minimumOriginMetadata;
|
||
|
}
|