From df937db2a75e3904b0b836876bde5fa06cc75da1 Mon Sep 17 00:00:00 2001 From: Gustavo Antunes <17601467+gantunesr@users.noreply.github.com> Date: Wed, 14 Dec 2022 00:16:48 -0300 Subject: [PATCH] Add SnapWebviewPostMessageStream --- .../Wallet/SnapWebviewPostMessageStream.ts | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 app/components/Views/Wallet/SnapWebviewPostMessageStream.ts diff --git a/app/components/Views/Wallet/SnapWebviewPostMessageStream.ts b/app/components/Views/Wallet/SnapWebviewPostMessageStream.ts new file mode 100644 index 00000000000..e8f0dd01092 --- /dev/null +++ b/app/components/Views/Wallet/SnapWebviewPostMessageStream.ts @@ -0,0 +1,58 @@ +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-nocheck +import { BasePostMessageStream } from '@metamask/post-message-stream'; + +interface WebViewPostMessageStreamArgs { + name: string; + stream: any; + jobId: string; +} + +/** + * A {@link Window.postMessage} stream. + */ +export default class SnapWebviewPostMessageStream extends BasePostMessageStream { + private _name: string; + + private _stream: string; + private _jobId: string; + /** + * Creates a stream for communicating with other streams across the same or + * different `window` objects. + * + * @param args - Options bag. + * @param args.name - The name of the stream. Used to differentiate between + * multiple streams sharing the same window object. + * @param args.target - The name of the stream to exchange messages with. + * @param args.targetOrigin - The origin of the target. Defaults to + * `location.origin`, '*' is permitted. + * @param args.targetWindow - The window object of the target stream. Defaults + * to `window`. + */ + constructor({ name, stream, jobId }: WebViewPostMessageStreamArgs) { + super(); + + this._name = name; + this._stream = stream; + this._jobId = jobId; + this._onMessage = this._onMessage.bind(this); + this._stream.on('data', (data) => this._onMessage(data)); + // this._handshake(); + } + + protected _postMessage(data: unknown): void { + console.log('SnapWebviewPostMessageStreamon _postMessage', data); + this._stream.write(data); + } + + private _onMessage(data: any): void { + console.log('SnapWebviewPostMessageStreamon _onMessage', data); + this._onData(data); + } + + destroy(): void { + // eslint-disable-next-line no-console + console.log('SnapWebviewPostMessageStream - method destroy'); + this.destroyed = true; + } +}