
Security News
/Research
Wallet-Draining npm Package Impersonates Nodemailer to Hijack Crypto Transactions
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
@electr1xxxx/conector
Advanced tools
Adapter for installing snap and exposes API toward snap on dApps
MetaMask Snap connector is used to install snap and exposes methods for calling snap on dApps and other applications.
Adapter has an exposed function for installing the snap.
async function enableSnap(
snapOrigin?: string,
version?: string,
): Promise<MetamaskSnap>
After snap installation, this function returns MetamaskSnap
object that can be used to retrieve snap connector.
An example of initializing snap and invoking snap connector is shown below.
// install snap and get connector
const snap = await enableSnap();
const connector = await snap.getConnector();
// invoke connector
const identity = await connector.createIdentity();
console.log(`Snap installed, identity created: ${identity}`);
For ease of use, the connector package also exposes this functions:
isMetamaskInstalled(): boolean
isMetamaskFlask(): Promise<boolean>
isSnapInstalled(snapOrigin?: string, version?: string): Promise<boolean>
To create an identity you need to call this method:
createIdentity(): Promise<string>
Returns DID.
To save Verifiable Credentials you need to call this method with params:
saveCredentials(params: SaveCredentialsRequestParams): Promise<W3CCredential[]>
type SaveCredentialsRequestParams = {
body: {
credentials: [
{
description: string;
id: string;
},
];
url: string;
};
from: string;
id: string;
thid?: string;
to: string;
typ?: string;
type: string;
};
Returns all Verifiable Credentials saved inside the snap state
type W3CCredential = {
id: string;
'@context': string[];
type: string[];
expirationDate?: string;
issuanceDate?: string;
credentialSubject: { [key: string]: object | string | number };
credentialStatus: CredentialStatus;
issuer: string;
credentialSchema: CredentialSchema;
proof?: { [key: string]: any } | any[];
};
type CredentialStatus = {
id: string;
type: string;
revocationNonce?: number;
statusIssuer?: CredentialStatus;
};
type CredentialSchema = {
id: string;
type: string;
};
Make sure you are on the correct network before creating a proof! To create a proof you need to call this method with params:
createProof(params: CreateProofRequestParams): Promise<ZKPProofResponse>
type CreateProofRequestParams = {
id?: number;
accountAddress?: string; // Metamask user address for on-chain proofs
circuitId:
| 'credentialAtomicQueryMTPV2'
| 'credentialAtomicQueryMTPV2OnChain'
| 'credentialAtomicQuerySigV2'
| 'credentialAtomicQuerySigV2OnChain';
challenge?: string; // bigint string
query: ProofQuery;
};
type ProofQuery = {
allowedIssuers?: string[];
credentialSubject?: { [key: string]: any };
schema?: string;
claimId?: string;
credentialSubjectId?: string;
context?: string;
type?: string;
};
Returns ZKPProofResponse - zkpProof for off-chain and updateStateTx and zkpTx for on-chain
type ZKPProofResponse = {
zkpTx?: TransactionRequest; // ethers TransactionRequest
updateStateTx?: TransactionRequest;
zkpProof?: ZKProof;
};
type ZKProof = {
proof: ProofData;
pub_signals: string[];
};
type ProofData = {
pi_a: string[];
pi_b: string[][];
pi_c: string[];
protocol: string;
};
To create a backup of keys and credentials:
createBackup(): Promise<boolean>
Returns true if backup created
Recovering the identity and credentials from a backup:
recoverBackup(): Promise<boolean>
Returns true if backup recovered
checkStateContractSync(): Promise<boolean>
Returns true if the lightweight state contract on current chain doesn't need to be synced with the state contract on Rarimo chain.
const connector = await snap.getConnector();
const proof = connector.createProof({
circuitId: 'credentialAtomicQueryMTPV2OnChain',
accountAddress: '0x......',
challenge: '1251760352881625298994789945427452069454957821390', // BigInt string
query: {
allowedIssuers: ['*'],
context:
'https://raw.githubusercontent.com/omegatymbjiep/schemas/main/json-ld/NaturalPerson.json-ld',
credentialSubject: {
isNatural: {
$eq: 1,
},
},
type: 'NaturalPerson',
},
});
where:
const connector = await snap.getConnector();
const proof = connector.saveCredentials({
body: {
credentials: [
{
description: 'Natural Person',
id: '86531650-023c-4c6c-a437-a82e137ead68',
},
],
url: 'http://127.0.0.1:8000/integrations/issuer/v1/public/claims/offers/callback',
},
from: 'did:iden3:tJnRoZ1KqUPbsfVGrk8io51iqoRc5dGhj5LLMHSrD',
id: '026035f6-42f6-4a2d-b516-0b11d2674850',
thid: '348b7198-7cb1-46f4-bc0a-98a358f65539',
to: 'did:iden3:tTxif8ahrSqRWavS8Qatrp4ZEJvPdu3ELSMgqTEQN',
typ: 'application/iden3comm-plain-json',
type: 'https://iden3-communication.io/credentials/1.0/offer',
});
where:
FAQs
Adapter for installing snap and exposes API toward snap on dApps
The npm package @electr1xxxx/conector receives a total of 0 weekly downloads. As such, @electr1xxxx/conector popularity was classified as not popular.
We found that @electr1xxxx/conector demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
/Research
Malicious npm package impersonates Nodemailer and drains wallets by hijacking crypto transactions across multiple blockchains.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malware.