1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-17 09:59:41 +00:00
Files
browser/apps/web/src/app/platform/ipc/web-communication-provider.ts
Andreas Coroiu ede4776433 [PM-18043] Add serialization/deserialization support (#13804)
* feat: add support for serialization-PR tweaks

* feat: update sdk version
2025-04-17 16:25:35 +02:00

48 lines
1.3 KiB
TypeScript

import { Injectable } from "@angular/core";
import { IpcMessage, isIpcMessage } from "@bitwarden/common/platform/ipc";
import { MessageQueue } from "@bitwarden/common/platform/ipc/message-queue";
import { CommunicationBackend, IncomingMessage, OutgoingMessage } from "@bitwarden/sdk-internal";
@Injectable({ providedIn: "root" })
export class WebCommunicationProvider implements CommunicationBackend {
private queue = new MessageQueue<IncomingMessage>();
constructor() {
window.addEventListener("message", async (event: MessageEvent) => {
if (event.origin !== window.origin) {
return;
}
const message = event.data;
if (!isIpcMessage(message)) {
return;
}
void this.queue.enqueue(
new IncomingMessage(
message.message.payload,
message.message.destination,
"BrowserBackground",
),
);
});
}
async send(message: OutgoingMessage): Promise<void> {
if (message.destination === "BrowserBackground") {
window.postMessage(
{ type: "bitwarden-ipc-message", message } satisfies IpcMessage,
window.location.origin,
);
return;
}
throw new Error(`Destination not supported: ${message.destination}`);
}
receive(): Promise<IncomingMessage> {
return this.queue.dequeue();
}
}