feat: add pubsub topic parameter

This commit is contained in:
Sasha 2024-04-18 23:26:47 +02:00
parent 69159ec74a
commit 7100f31ed8
No known key found for this signature in database
2 changed files with 20 additions and 18 deletions

View File

@ -37,18 +37,18 @@ export class NoiseHandshakeMessage extends DecodedMessage implements IDecodedMes
*/ */
export class NoiseHandshakeEncoder implements IEncoder { export class NoiseHandshakeEncoder implements IEncoder {
/** /**
* @param pubsubTopic pubsub topic on which handshake happens
* @param contentTopic content topic on which the encoded WakuMessages will be sent * @param contentTopic content topic on which the encoded WakuMessages will be sent
* @param hsStepResult the result of a step executed while performing the handshake process * @param hsStepResult the result of a step executed while performing the handshake process
* @param ephemeral makes messages ephemeral in the Waku network * @param ephemeral makes messages ephemeral in the Waku network
*/ */
pubsubTopic: string;
constructor( constructor(
public contentTopic: string, public contentTopic: string,
public pubsubTopic: string,
private hsStepResult: HandshakeStepResult, private hsStepResult: HandshakeStepResult,
public ephemeral: boolean = true public ephemeral: boolean = true
) { ) {
this.pubsubTopic = contentTopicToPubsubTopic(contentTopic);
} }
async toWire(message: IMessage): Promise<Uint8Array | undefined> { async toWire(message: IMessage): Promise<Uint8Array | undefined> {
@ -77,12 +77,11 @@ export class NoiseHandshakeEncoder implements IEncoder {
*/ */
export class NoiseHandshakeDecoder implements IDecoder<NoiseHandshakeMessage> { export class NoiseHandshakeDecoder implements IDecoder<NoiseHandshakeMessage> {
/** /**
* @param pubsubTopic pubsub topic on which handshake happens
* @param contentTopic content topic on which the encoded WakuMessages were sent * @param contentTopic content topic on which the encoded WakuMessages were sent
*/ */
pubsubTopic: string;
constructor(public contentTopic: string) { constructor(public contentTopic: string, public pubsubTopic: string) {
this.pubsubTopic = contentTopicToPubsubTopic(contentTopic);
} }
fromWireToProtoObj(bytes: Uint8Array): Promise<IProtoMessage | undefined> { fromWireToProtoObj(bytes: Uint8Array): Promise<IProtoMessage | undefined> {
@ -139,19 +138,19 @@ export class NoiseSecureMessage extends DecodedMessage implements IDecodedMessag
export class NoiseSecureTransferEncoder implements IEncoder { export class NoiseSecureTransferEncoder implements IEncoder {
/** /**
* @param contentTopic content topic on which the encoded WakuMessages were sent. * @param contentTopic content topic on which the encoded WakuMessages were sent.
* @param pubsubTopic pubsub topic on which handshake happens
* @param hsResult handshake result obtained after the handshake is successful. * @param hsResult handshake result obtained after the handshake is successful.
* @param ephemeral whether messages should be tagged as ephemeral defaults to true. * @param ephemeral whether messages should be tagged as ephemeral defaults to true.
* @param metaSetter callback function that set the `meta` field. * @param metaSetter callback function that set the `meta` field.
*/ */
pubsubTopic: string;
constructor( constructor(
public contentTopic: string, public contentTopic: string,
public pubsubTopic: string,
private hsResult: HandshakeResult, private hsResult: HandshakeResult,
public ephemeral: boolean = true, public ephemeral: boolean = true,
public metaSetter?: IMetaSetter public metaSetter?: IMetaSetter
) { ) {
this.pubsubTopic = contentTopicToPubsubTopic(contentTopic);
} }
async toWire(message: IMessage): Promise<Uint8Array | undefined> { async toWire(message: IMessage): Promise<Uint8Array | undefined> {
@ -199,12 +198,11 @@ export class NoiseSecureTransferEncoder implements IEncoder {
export class NoiseSecureTransferDecoder implements IDecoder<NoiseSecureMessage> { export class NoiseSecureTransferDecoder implements IDecoder<NoiseSecureMessage> {
/** /**
* @param contentTopic content topic on which the encoded WakuMessages were sent * @param contentTopic content topic on which the encoded WakuMessages were sent
* @param pubsubTopic pubsub topic on which handshake happens
* @param hsResult handshake result obtained after the handshake is successful * @param hsResult handshake result obtained after the handshake is successful
*/ */
pubsubTopic: string;
constructor(public contentTopic: string, private hsResult: HandshakeResult) { constructor(public contentTopic: string, public pubsubTopic: string, private hsResult: HandshakeResult) {
this.pubsubTopic = contentTopicToPubsubTopic(contentTopic);
} }
fromWireToProtoObj(bytes: Uint8Array): Promise<IProtoMessage | undefined> { fromWireToProtoObj(bytes: Uint8Array): Promise<IProtoMessage | undefined> {

View File

@ -82,6 +82,7 @@ export class WakuPairing {
} }
/** /**
* @param pubsubTopic pubsubTopic to be used for handshake
* @param sender object that implements Sender interface to publish waku messages * @param sender object that implements Sender interface to publish waku messages
* @param responder object that implements Responder interface to subscribe and receive waku messages * @param responder object that implements Responder interface to subscribe and receive waku messages
* @param myStaticKey x25519 keypair * @param myStaticKey x25519 keypair
@ -90,6 +91,7 @@ export class WakuPairing {
* @param encoderParameters optional parameters for the resulting encoders * @param encoderParameters optional parameters for the resulting encoders
*/ */
constructor( constructor(
private pubsubTopic: string,
private sender: ISender, private sender: ISender,
private responder: IReceiver, private responder: IReceiver,
private myStaticKey: KeyPair, private myStaticKey: KeyPair,
@ -223,7 +225,7 @@ export class WakuPairing {
private async initiatorHandshake(): Promise<[NoiseSecureTransferEncoder, NoiseSecureTransferDecoder]> { private async initiatorHandshake(): Promise<[NoiseSecureTransferEncoder, NoiseSecureTransferDecoder]> {
// Subscribe to the contact content topic // Subscribe to the contact content topic
const decoder = new NoiseHandshakeDecoder(this.contentTopic); const decoder = new NoiseHandshakeDecoder(this.contentTopic, this.pubsubTopic);
const subscriptionIterator = await this.responder.toSubscriptionIterator(decoder); const subscriptionIterator = await this.responder.toSubscriptionIterator(decoder);
// The handshake initiator writes a Waku2 payload v2 containing the handshake message // The handshake initiator writes a Waku2 payload v2 containing the handshake message
@ -236,7 +238,7 @@ export class WakuPairing {
// We prepare a message from initiator's payload2 // We prepare a message from initiator's payload2
// At this point wakuMsg is sent over the Waku network to responder content topic // At this point wakuMsg is sent over the Waku network to responder content topic
let encoder = new NoiseHandshakeEncoder(this.contentTopic, hsStep); let encoder = new NoiseHandshakeEncoder(this.contentTopic, this.pubsubTopic, hsStep);
await this.sender.send(encoder, { await this.sender.send(encoder, {
payload: new Uint8Array(), payload: new Uint8Array(),
}); });
@ -281,7 +283,7 @@ export class WakuPairing {
messageNametag: this.handshake.hs.toMessageNametag(), messageNametag: this.handshake.hs.toMessageNametag(),
}); });
encoder = new NoiseHandshakeEncoder(this.contentTopic, hsStep); encoder = new NoiseHandshakeEncoder(this.contentTopic, this.pubsubTopic, hsStep);
await this.sender.send(encoder, { await this.sender.send(encoder, {
payload: new Uint8Array(), payload: new Uint8Array(),
}); });
@ -291,12 +293,12 @@ export class WakuPairing {
this.eventEmitter.emit("pairingComplete"); this.eventEmitter.emit("pairingComplete");
return WakuPairing.getSecureCodec(this.contentTopic, this.handshakeResult, this.encoderParameters); return WakuPairing.getSecureCodec(this.contentTopic, this.pubsubTopic, this.handshakeResult, this.encoderParameters);
} }
private async responderHandshake(): Promise<[NoiseSecureTransferEncoder, NoiseSecureTransferDecoder]> { private async responderHandshake(): Promise<[NoiseSecureTransferEncoder, NoiseSecureTransferDecoder]> {
// Subscribe to the contact content topic // Subscribe to the contact content topic
const decoder = new NoiseHandshakeDecoder(this.contentTopic); const decoder = new NoiseHandshakeDecoder(this.contentTopic, this.pubsubTopic);
const subscriptionIterator = await this.responder.toSubscriptionIterator(decoder); const subscriptionIterator = await this.responder.toSubscriptionIterator(decoder);
// the received reads the initiator's payloads, and returns the (decrypted) transport message the initiator sent // the received reads the initiator's payloads, and returns the (decrypted) transport message the initiator sent
@ -322,7 +324,7 @@ export class WakuPairing {
}); });
// We prepare a Waku message from responder's payload2 // We prepare a Waku message from responder's payload2
const encoder = new NoiseHandshakeEncoder(this.contentTopic, hsStep); const encoder = new NoiseHandshakeEncoder(this.contentTopic, this.pubsubTopic, hsStep);
await this.sender.send(encoder, { await this.sender.send(encoder, {
payload: new Uint8Array(), payload: new Uint8Array(),
}); });
@ -355,7 +357,7 @@ export class WakuPairing {
this.eventEmitter.emit("pairingComplete"); this.eventEmitter.emit("pairingComplete");
return WakuPairing.getSecureCodec(this.contentTopic, this.handshakeResult, this.encoderParameters); return WakuPairing.getSecureCodec(this.contentTopic, this.pubsubTopic, this.handshakeResult, this.encoderParameters);
} }
/** /**
@ -368,16 +370,18 @@ export class WakuPairing {
*/ */
static getSecureCodec( static getSecureCodec(
contentTopic: string, contentTopic: string,
pubsubTopic: string,
hsResult: HandshakeResult, hsResult: HandshakeResult,
encoderParameters: EncoderParameters encoderParameters: EncoderParameters
): [NoiseSecureTransferEncoder, NoiseSecureTransferDecoder] { ): [NoiseSecureTransferEncoder, NoiseSecureTransferDecoder] {
const secureEncoder = new NoiseSecureTransferEncoder( const secureEncoder = new NoiseSecureTransferEncoder(
contentTopic, contentTopic,
pubsubTopic,
hsResult, hsResult,
encoderParameters.ephemeral, encoderParameters.ephemeral,
encoderParameters.metaSetter encoderParameters.metaSetter
); );
const secureDecoder = new NoiseSecureTransferDecoder(contentTopic, hsResult); const secureDecoder = new NoiseSecureTransferDecoder(contentTopic, pubsubTopic, hsResult);
return [secureEncoder, secureDecoder]; return [secureEncoder, secureDecoder];
} }