@@ -21,6 +21,17 @@ export declare interface AppService {
2121 * });
2222 */
2323 on ( event : "event" , cb : ( event : Record < string , unknown > ) => void ) : this;
24+ /**
25+ * Emitted when an ephemeral event is pushed to the appservice.
26+ * The format of the event object is documented at
27+ * https://github.com/matrix-org/matrix-doc/pull/2409
28+ * @event
29+ * @example
30+ * appService.on("ephemeral", function(ev) {
31+ * console.log("ID: %s", ev.type);
32+ * });
33+ */
34+ on ( event : "ephemeral" , cb : ( event : Record < string , unknown > ) => void ) : this;
2435 /**
2536 * Emitted when the HTTP listener logs some information.
2637 * `access_tokens` are stripped from requests
@@ -42,7 +53,6 @@ export declare interface AppService {
4253 * console.log("ID: %s", ev.content.body);
4354 * });
4455 */
45- // eslint-disable-next-line @typescript-eslint/no-explicit-any
4656 on ( event : string , cb : ( event : Record < string , unknown > ) => void ) : this;
4757}
4858
@@ -194,6 +204,7 @@ export class AppService extends EventEmitter {
194204 private isInvalidToken ( req : Request , res : Response ) : boolean {
195205 const providedToken = req . query . access_token ;
196206 if ( providedToken !== this . config . homeserverToken ) {
207+ res . status ( 403 ) ;
197208 res . send ( {
198209 errcode : "M_FORBIDDEN" ,
199210 error : "Bad token supplied,"
@@ -255,11 +266,13 @@ export class AppService extends EventEmitter {
255266 res . send ( "Missing transaction ID." ) ;
256267 return ;
257268 }
258- if ( ! req . body || ! req . body . events ) {
259- res . send ( "Missing events body." ) ;
269+ if ( ! req . body ) {
270+ res . send ( "Missing body." ) ;
260271 return ;
261272 }
262- const events = req . body . events ;
273+
274+ const events = req . body . events || [ ] ;
275+ const ephemeral = req . body [ "de.sorunome.msc2409.ephemeral" ] || [ ] ;
263276
264277 if ( this . lastProcessedTxnId === txnId ) {
265278 res . send ( { } ) ; // duplicate
@@ -271,6 +284,12 @@ export class AppService extends EventEmitter {
271284 this . emit ( "type:" + event . type , event ) ;
272285 }
273286 }
287+ for ( const event of ephemeral ) {
288+ this . emit ( "ephemeral" , event ) ;
289+ if ( event . type ) {
290+ this . emit ( "ephemeral_type:" + event . type , event ) ;
291+ }
292+ }
274293 this . lastProcessedTxnId = txnId ;
275294 res . send ( { } ) ;
276295 }
0 commit comments