1
+ import { IMetaSetter } from "@waku/interfaces" ;
1
2
import type {
2
3
EncoderOptions ,
3
4
IDecodedMessage ,
@@ -50,6 +51,10 @@ export class DecodedMessage implements IDecodedMessage {
50
51
}
51
52
}
52
53
54
+ get meta ( ) : Uint8Array | undefined {
55
+ return this . proto . meta ;
56
+ }
57
+
53
58
get version ( ) : number {
54
59
// https://rfc.vac.dev/spec/14/
55
60
// > If omitted, the value SHOULD be interpreted as version 0.
@@ -62,7 +67,11 @@ export class DecodedMessage implements IDecodedMessage {
62
67
}
63
68
64
69
export class Encoder implements IEncoder {
65
- constructor ( public contentTopic : string , public ephemeral : boolean = false ) { }
70
+ constructor (
71
+ public contentTopic : string ,
72
+ public ephemeral : boolean = false ,
73
+ public metaSetter ?: IMetaSetter
74
+ ) { }
66
75
67
76
async toWire ( message : IMessage ) : Promise < Uint8Array > {
68
77
return proto . WakuMessage . encode ( await this . toProtoObj ( message ) ) ;
@@ -71,14 +80,22 @@ export class Encoder implements IEncoder {
71
80
async toProtoObj ( message : IMessage ) : Promise < IProtoMessage > {
72
81
const timestamp = message . timestamp ?? new Date ( ) ;
73
82
74
- return {
83
+ const protoMessage = {
75
84
payload : message . payload ,
76
85
version : Version ,
77
86
contentTopic : this . contentTopic ,
78
87
timestamp : BigInt ( timestamp . valueOf ( ) ) * OneMillion ,
88
+ meta : undefined ,
79
89
rateLimitProof : message . rateLimitProof ,
80
90
ephemeral : this . ephemeral ,
81
91
} ;
92
+
93
+ if ( this . metaSetter ) {
94
+ const meta = this . metaSetter ( protoMessage ) ;
95
+ return { ...protoMessage , meta } ;
96
+ }
97
+
98
+ return protoMessage ;
82
99
}
83
100
}
84
101
@@ -94,8 +111,9 @@ export class Encoder implements IEncoder {
94
111
export function createEncoder ( {
95
112
contentTopic,
96
113
ephemeral,
114
+ metaSetter,
97
115
} : EncoderOptions ) : Encoder {
98
- return new Encoder ( contentTopic , ephemeral ) ;
116
+ return new Encoder ( contentTopic , ephemeral , metaSetter ) ;
99
117
}
100
118
101
119
export class Decoder implements IDecoder < DecodedMessage > {
@@ -109,6 +127,7 @@ export class Decoder implements IDecoder<DecodedMessage> {
109
127
contentTopic : protoMessage . contentTopic ,
110
128
version : protoMessage . version ?? undefined ,
111
129
timestamp : protoMessage . timestamp ?? undefined ,
130
+ meta : protoMessage . meta ?? undefined ,
112
131
rateLimitProof : protoMessage . rateLimitProof ?? undefined ,
113
132
ephemeral : protoMessage . ephemeral ?? false ,
114
133
} ) ;
@@ -135,7 +154,7 @@ export class Decoder implements IDecoder<DecodedMessage> {
135
154
}
136
155
137
156
/**
138
- * Creates an decoder that decode messages without Waku level encryption.
157
+ * Creates a decoder that decode messages without Waku level encryption.
139
158
*
140
159
* A decoder is used to decode messages from the [14/WAKU2-MESSAGE](https://rfc.vac.dev/spec/14/)
141
160
* format when received from the Waku network. The resulting decoder can then be
0 commit comments