@standard-crypto/farcaster-js-neynar
Version:
A tool for interacting with Farcaster via Neynar APIs.
59 lines • 2.27 kB
JavaScript
/* eslint-disable eslint-comments/disable-enable-pair */
/* eslint-disable no-console */
import { mnemonicToAccount } from 'viem/accounts';
import { SignerStatusEnum } from './v2/index.js';
export async function generateSignature(publicKey, appFid, accountMnemonic, deadline) {
// DO NOT CHANGE ANY VALUES IN THIS CONSTANT
const SIGNED_KEY_REQUEST_VALIDATOR_EIP_712_DOMAIN = {
name: 'Farcaster SignedKeyRequestValidator',
version: '1',
chainId: 10,
verifyingContract: '0x00000000fc700472606ed4fa22623acf62c60553',
};
// DO NOT CHANGE ANY VALUES IN THIS CONSTANT
const SIGNED_KEY_REQUEST_TYPE = [
{ name: 'requestFid', type: 'uint256' },
{ name: 'key', type: 'bytes' },
{ name: 'deadline', type: 'uint256' },
];
const account = mnemonicToAccount(accountMnemonic);
// Generates the signature
const signature = await account.signTypedData({
domain: SIGNED_KEY_REQUEST_VALIDATOR_EIP_712_DOMAIN,
types: {
SignedKeyRequest: SIGNED_KEY_REQUEST_TYPE,
},
primaryType: 'SignedKeyRequest',
message: {
requestFid: BigInt(appFid),
key: publicKey,
deadline: BigInt(deadline),
},
});
return signature;
}
export function mnemonicToAddress(mnemonic) {
const account = mnemonicToAccount(mnemonic);
return account.address;
}
export async function waitForNeynarSignerApproval(client, signerUuid) {
let signerStatus = SignerStatusEnum.PendingApproval;
while (signerStatus === SignerStatusEnum.PendingApproval) {
const signer = await client.v2.fetchSigner(signerUuid);
if (signer?.status === undefined) {
break;
}
signerStatus = signer.status;
// wait 10 seconds
await new Promise(resolve => setTimeout(resolve, 10000));
}
if (signerStatus === SignerStatusEnum.Approved) {
console.log('Approved! Now you can start using this signer.');
console.log(`Signer UUID: ${signerUuid}`);
}
else {
const signerStatusString = signerStatus.toString();
console.log(`Something went wrong. Signer ${signerUuid} has status ${signerStatusString}`);
}
}
//# sourceMappingURL=utils.js.map