@metamask/snaps-sdk
Version:
A library containing the core functionality for building MetaMask Snaps
40 lines • 1.88 kB
JavaScript
import { array, refine } from "@metamask/superstruct";
import { CaipAccountIdStruct, CaipAssetTypeStruct, CaipChainIdStruct, KnownCaipNamespace, parseCaipAccountId, parseCaipAssetType, parseCaipChainId } from "@metamask/utils";
/**
* A struct representing a list of non-EIP-155 CAIP-10 account IDs where the account addresses are the same.
*/
export const NonEip155CaipAccountIdsMatchedByAddressAndNamespaceStruct = refine(array(CaipAccountIdStruct), 'Non-EIP-155 Matching Addresses Account ID List', (value) => {
const parsedAccountIds = value.map((accountId) => parseCaipAccountId(accountId));
if (!parsedAccountIds.every(({ address, chain: { namespace } }) => address === parsedAccountIds[0].address &&
namespace === parsedAccountIds[0].chain.namespace)) {
return 'All account IDs must have the same address and namespace.';
}
const containsEip155 = parsedAccountIds.some(({ chain: { namespace } }) => {
return namespace === KnownCaipNamespace.Eip155;
});
if (containsEip155) {
return 'All account IDs must have non-EIP-155 namespaces.';
}
return true;
});
/**
* A struct representing a non-EIP-155 chain ID.
*/
export const NonEip155ChainIdStruct = refine(CaipChainIdStruct, 'Non-EIP-155 Chain ID', (value) => {
const { namespace } = parseCaipChainId(value);
if (namespace === KnownCaipNamespace.Eip155) {
return 'Chain ID must not be an EIP-155 chain ID.';
}
return true;
});
/**
* A struct representing a non-EIP-155 asset type.
*/
export const NonEip155AssetTypeStruct = refine(CaipAssetTypeStruct, 'Non-EIP-155 Asset Type', (value) => {
const { chain: { namespace }, } = parseCaipAssetType(value);
if (namespace === KnownCaipNamespace.Eip155) {
return 'Asset type must not be an EIP-155 asset type.';
}
return true;
});
//# sourceMappingURL=caip.mjs.map