mirror of
https://github.com/bitwarden/browser
synced 2025-12-16 08:13:42 +00:00
[EC-598] fix: filter messages from other sources
This commit is contained in:
@@ -2,6 +2,8 @@ import { concatMap, filter, firstValueFrom, Observable } from "rxjs";
|
|||||||
|
|
||||||
import { Message, MessageType } from "./message";
|
import { Message, MessageType } from "./message";
|
||||||
|
|
||||||
|
const SENDER = "bitwarden-webauthn";
|
||||||
|
|
||||||
type PostMessageFunction = (message: MessageWithMetadata) => void;
|
type PostMessageFunction = (message: MessageWithMetadata) => void;
|
||||||
|
|
||||||
export type Channel = {
|
export type Channel = {
|
||||||
@@ -9,7 +11,7 @@ export type Channel = {
|
|||||||
postMessage: PostMessageFunction;
|
postMessage: PostMessageFunction;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Metadata = { requestId: string };
|
export type Metadata = { SENDER: typeof SENDER; requestId: string };
|
||||||
export type MessageWithMetadata = Message & { metadata: Metadata };
|
export type MessageWithMetadata = Message & { metadata: Metadata };
|
||||||
type Handler = (
|
type Handler = (
|
||||||
message: MessageWithMetadata,
|
message: MessageWithMetadata,
|
||||||
@@ -42,6 +44,7 @@ export class Messenger {
|
|||||||
constructor(private channel: Channel) {
|
constructor(private channel: Channel) {
|
||||||
this.channel.messages$
|
this.channel.messages$
|
||||||
.pipe(
|
.pipe(
|
||||||
|
filter((message) => message?.metadata?.SENDER === SENDER),
|
||||||
concatMap(async (message) => {
|
concatMap(async (message) => {
|
||||||
if (this.handler === undefined) {
|
if (this.handler === undefined) {
|
||||||
return;
|
return;
|
||||||
@@ -57,10 +60,10 @@ export class Messenger {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const metadata: Metadata = { requestId: message.metadata.requestId };
|
const metadata: Metadata = { SENDER, requestId: message.metadata.requestId };
|
||||||
this.channel.postMessage({ ...handlerResponse, metadata });
|
this.channel.postMessage({ ...handlerResponse, metadata });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const metadata: Metadata = { requestId: message.metadata.requestId };
|
const metadata: Metadata = { SENDER, requestId: message.metadata.requestId };
|
||||||
this.channel.postMessage({
|
this.channel.postMessage({
|
||||||
type: MessageType.ErrorResponse,
|
type: MessageType.ErrorResponse,
|
||||||
metadata,
|
metadata,
|
||||||
@@ -84,7 +87,7 @@ export class Messenger {
|
|||||||
|
|
||||||
async request(request: Message, abortController?: AbortController): Promise<Message> {
|
async request(request: Message, abortController?: AbortController): Promise<Message> {
|
||||||
const requestId = Date.now().toString();
|
const requestId = Date.now().toString();
|
||||||
const metadata: Metadata = { requestId };
|
const metadata: Metadata = { SENDER, requestId };
|
||||||
|
|
||||||
const promise = firstValueFrom(
|
const promise = firstValueFrom(
|
||||||
this.channel.messages$.pipe(
|
this.channel.messages$.pipe(
|
||||||
@@ -96,7 +99,7 @@ export class Messenger {
|
|||||||
|
|
||||||
const abortListener = () =>
|
const abortListener = () =>
|
||||||
this.channel.postMessage({
|
this.channel.postMessage({
|
||||||
metadata: { requestId: `${requestId}-abort` },
|
metadata: { SENDER, requestId: `${requestId}-abort` },
|
||||||
type: MessageType.AbortRequest,
|
type: MessageType.AbortRequest,
|
||||||
abortedRequestId: requestId,
|
abortedRequestId: requestId,
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user