69 lines
2.0 KiB
TypeScript
Raw Normal View History

2021-08-12 15:26:06 +10:00
import { Button } from '@material-ui/core';
import React from 'react';
import { createPublicKeyMessage } from './crypto';
2021-08-12 15:26:06 +10:00
import { PublicKeyMessage } from './messaging/wire';
import { WakuMessage, Waku } from 'js-waku';
import { Signer } from '@ethersproject/abstract-signer';
import { PublicKeyContentTopic } from './waku';
interface Props {
encryptionPublicKey: Uint8Array | undefined;
2021-08-12 15:26:06 +10:00
waku: Waku | undefined;
signer: Signer | undefined;
address: string | undefined;
2021-08-12 15:26:06 +10:00
}
export default function BroadcastPublicKey({
signer,
encryptionPublicKey,
address,
2021-08-12 15:26:06 +10:00
waku,
}: Props) {
const broadcastPublicKey = () => {
if (!encryptionPublicKey) return;
2021-08-12 15:26:06 +10:00
if (!signer) return;
if (!address) return;
2021-08-12 15:26:06 +10:00
if (!waku) return;
console.log('Creating Public Key Message');
createPublicKeyMessage(signer, address, encryptionPublicKey)
.then((msg) => {
console.log('Public Key Message created');
encodePublicKeyWakuMessage(msg)
.then((wakuMsg) => {
console.log('Public Key Message encoded');
waku.lightPush
.push(wakuMsg)
.then((res) => console.log('Public Key Message pushed', res))
.catch((e) => {
console.error('Failed to send Public Key Message', e);
});
})
.catch(() => {
console.log('Failed to encode Public Key Message in Waku Message');
2021-08-12 15:26:06 +10:00
});
})
.catch((e) => {
console.error('Failed to create public key message', e);
});
2021-08-12 15:26:06 +10:00
};
return (
<Button
variant="contained"
color="primary"
onClick={broadcastPublicKey}
disabled={!encryptionPublicKey || !waku || !signer}
2021-08-12 15:26:06 +10:00
>
Broadcast Encryption Public Key
</Button>
);
}
async function encodePublicKeyWakuMessage(
publicKeyMessage: PublicKeyMessage
): Promise<WakuMessage> {
const payload = publicKeyMessage.encode();
return await WakuMessage.fromBytes(payload, PublicKeyContentTopic);
}