From 2f42997be1f19f8383d2932cc39b995a6d16e32b Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Wed, 12 Apr 2023 19:51:48 +0000 Subject: [PATCH 1/2] Md5 class added to webchannel-wrapper --- packages/webchannel-wrapper/src/index.d.ts | 9 +++++++++ packages/webchannel-wrapper/src/index.js | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/packages/webchannel-wrapper/src/index.d.ts b/packages/webchannel-wrapper/src/index.d.ts index 4a1f45f1d70..93debc4aa6e 100644 --- a/packages/webchannel-wrapper/src/index.d.ts +++ b/packages/webchannel-wrapper/src/index.d.ts @@ -136,3 +136,12 @@ export function getStatEventTarget(): EventTarget; export class FetchXmlHttpFactory { constructor(options: {}); } + +// See https://google.github.io/closure-library/api/goog.crypt.Md5.html +// Unit test are written in +// packages/firestore/test/unit/core/webchannel_wrapper.test.ts +export class Md5 { + reset(): void; + digest(): Array; + update(bytes: Array | Uint8Array | string, opt_length?: number): void; +} diff --git a/packages/webchannel-wrapper/src/index.js b/packages/webchannel-wrapper/src/index.js index c51f7d68ba3..9b6b0a026ed 100644 --- a/packages/webchannel-wrapper/src/index.js +++ b/packages/webchannel-wrapper/src/index.js @@ -78,6 +78,11 @@ goog.net.XhrIo.prototype['send'] = goog.net.XhrIo.prototype.send; goog.net.XhrIo.prototype['setWithCredentials'] = goog.net.XhrIo.prototype.setWithCredentials; +goog.require('goog.crypt.Md5'); +goog.crypt.Md5.prototype['digest'] = goog.crypt.Md5.prototype.digest; +goog.crypt.Md5.prototype['reset'] = goog.crypt.Md5.prototype.reset; +goog.crypt.Md5.prototype['update'] = goog.crypt.Md5.prototype.update; + module['exports']['createWebChannelTransport'] = goog.net.createWebChannelTransport; module['exports']['getStatEventTarget'] = @@ -89,3 +94,4 @@ module['exports']['Stat'] = goog.labs.net.webChannel.requestStats.Stat; module['exports']['FetchXmlHttpFactory'] = goog.net.FetchXmlHttpFactory; module['exports']['WebChannel'] = goog.net.WebChannel; module['exports']['XhrIo'] = goog.net.XhrIo; +module['exports']['Md5'] = goog.crypt.Md5; From 71d2af5e6cbdd6922d84c5b9af97ac1ec9abc0fd Mon Sep 17 00:00:00 2001 From: Denver Coneybeare Date: Wed, 12 Apr 2023 16:09:22 -0400 Subject: [PATCH 2/2] webchannel_connection.ts: add a usage of the Md5 class so it doesn't get tree-shaken away --- .../src/platform/browser/webchannel_connection.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/firestore/src/platform/browser/webchannel_connection.ts b/packages/firestore/src/platform/browser/webchannel_connection.ts index c7eeec0f7f1..2e915a2ee6b 100644 --- a/packages/firestore/src/platform/browser/webchannel_connection.ts +++ b/packages/firestore/src/platform/browser/webchannel_connection.ts @@ -23,6 +23,7 @@ import { WebChannelError, WebChannelOptions, FetchXmlHttpFactory, + Md5, XhrIo, getStatEventTarget, EventTarget, @@ -95,12 +96,20 @@ export class WebChannelConnection extends RestConnection { break; case ErrorCode.HTTP_ERROR: const status = xhr.getStatus(); + + const md5 = new Md5(); + md5.update([1, 2, 3, 4]); + md5.reset(); + md5.update([4, 3, 2, 1]); + const value = md5.digest(); + logDebug( LOG_TAG, `RPC '${rpcName}' ${streamId} failed with status:`, status, 'response text:', - xhr.getResponseText() + xhr.getResponseText(), + `${value}` ); if (status > 0) { let response = xhr.getResponseJson();