UNPKG

@apillon/sdk

Version:

▶◀ Apillon SDK for NodeJS ▶◀

136 lines 7.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const util_crypto_1 = require("@polkadot/util-crypto"); const identity_1 = require("../modules/identity/identity"); const helper_1 = require("./helpers/helper"); const ethers_1 = require("ethers"); const keyring_1 = require("@polkadot/keyring"); describe('Identity Module tests', () => { let identity; beforeAll(async () => { identity = new identity_1.Identity((0, helper_1.getConfig)()); await (0, util_crypto_1.cryptoWaitReady)(); }); describe('EVM wallet signature tests', () => { test('Validate EVM wallet signature', async () => { const customMessage = 'Identity EVM SDK test'; const { message } = identity.generateSigningMessage(customMessage); const [firstPart, secondPart] = message.split('\n'); // Validate that custom signing message was generated correctly expect(firstPart).toEqual(customMessage); expect(+secondPart).toBeLessThanOrEqual(new Date().getTime()); const { walletAddress, signature } = await generateEvmWalletAndSignature(message); const { isValid, address } = identity.validateEvmWalletSignature({ walletAddress, message, signature, }); expect(isValid).toBeTruthy(); expect(address.toLowerCase()).toEqual(walletAddress.toLowerCase()); }); test('Validate EVM wallet signature with timestamp', async () => { const customMessage = 'Identity EVM SDK test'; const { timestamp, message } = identity.generateSigningMessage(customMessage); expect(timestamp).toBeLessThanOrEqual(new Date().getTime()); const { walletAddress, signature } = await generateEvmWalletAndSignature(message); const { isValid, address } = identity.validateEvmWalletSignature({ message, signature, timestamp, signatureValidityMinutes: 1, }); expect(isValid).toBeTruthy(); expect(address.toLowerCase()).toEqual(walletAddress.toLowerCase()); }); test('Validate EVM wallet signature with invalid timestamp', async () => { const customMessage = 'Identity EVM SDK test'; const { message } = identity.generateSigningMessage(customMessage); const { walletAddress, signature } = await generateEvmWalletAndSignature(message); const date = new Date(); const thirtyMinEarlier = date.setTime(date.getTime() - 30 * 60000); const validate = () => identity.validateEvmWalletSignature({ walletAddress, message, signature, timestamp: thirtyMinEarlier, }); expect(validate).toThrow('Message does not contain a valid timestamp'); }); }); describe('Polkadot wallet signature tests', () => { test('Validate Polkadot wallet signature', async () => { const customMessage = 'Identity Polkadot SDK test'; const { message } = identity.generateSigningMessage(customMessage); const [firstPart, secondPart] = message.split('\n'); // Validate that custom signing message was generated correctly expect(firstPart).toEqual(customMessage); expect(+secondPart).toBeLessThanOrEqual(new Date().getTime()); const { walletAddress, signature } = generatePolkadotWalletAndSignature(message); const { isValid, address } = identity.validatePolkadotWalletSignature({ walletAddress, signature, message, }); expect(isValid).toBeTruthy(); expect(address.toLowerCase()).toEqual((0, util_crypto_1.encodeAddress)(walletAddress).toLowerCase()); }); test('Validate Polkadot wallet signature with timestamp', async () => { const customMessage = 'Identity Polkadot SDK test'; const { timestamp, message } = identity.generateSigningMessage(customMessage); expect(timestamp).toBeLessThanOrEqual(new Date().getTime()); const { walletAddress, signature } = generatePolkadotWalletAndSignature(message); const { isValid, address } = identity.validatePolkadotWalletSignature({ walletAddress, signature, message, timestamp, signatureValidityMinutes: 1, }); expect(isValid).toBeTruthy(); expect(address.toLowerCase()).toEqual((0, util_crypto_1.encodeAddress)(walletAddress).toLowerCase()); }); test('Validate Polkadot wallet signature with invalid timestamp', async () => { const customMessage = 'Identity Polkadot SDK test'; const { message } = identity.generateSigningMessage(customMessage); const { walletAddress, signature } = generatePolkadotWalletAndSignature(message); const date = new Date(); const thirtyMinEarlier = date.setTime(date.getTime() - 30 * 60000); const validate = () => identity.validatePolkadotWalletSignature({ walletAddress, message, signature, timestamp: thirtyMinEarlier, }); expect(validate).toThrow(); }); }); test('Get wallet identity profile', async () => { const { subsocial } = await identity.getWalletIdentity('3rJriA6MiYj7oFXv5hgxvSuacenm8fk76Kb5TEEHcWWQVvii'); expect(subsocial.content.name).toBe('dev only'); expect(subsocial.content.summary).toBeDefined(); expect(subsocial.content.about).toBeDefined(); const { polkadot } = await identity.getWalletIdentity('5HqHQDGcHqSQELAyr5PbJNAcQJew4vsoNCf5kkSpXcUGMtCK'); expect(polkadot.display.Raw).toBe('Web 3.0 Technologies Foundation'); expect(polkadot.web.Raw).toBe('https://web3.foundation/'); }); const generateEvmWalletAndSignature = async (message) => { const mnemonic = ethers_1.Wallet.createRandom().mnemonic.phrase; const wallet = ethers_1.Wallet.fromPhrase(mnemonic); const signature = await wallet.signMessage(message); return { walletAddress: wallet.address, signature }; }; const generatePolkadotWalletAndSignature = (message) => { const mnemonic = (0, util_crypto_1.mnemonicGenerate)(); const seedPhrase = (0, util_crypto_1.mnemonicToMiniSecret)(mnemonic); // wallet address obtained from seed phrase const walletAddress = (0, util_crypto_1.ed25519PairFromSeed)(seedPhrase).publicKey; const keypair = new keyring_1.Keyring({ ss58Format: 38, type: 'ed25519', }).createFromUri(mnemonic); // Sign message with generated wallet const signature = keypair.sign(message); return { walletAddress, signature }; }; }); //# sourceMappingURL=identity.test.js.map