UNPKG

@standard-crypto/farcaster-js-neynar

Version:

A tool for interacting with Farcaster via Neynar APIs.

59 lines 2.27 kB
/* 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