diff --git a/packages/pubsub/package.json b/packages/pubsub/package.json index fef30fa2690..d53b9925620 100644 --- a/packages/pubsub/package.json +++ b/packages/pubsub/package.json @@ -10,7 +10,9 @@ }, "sideEffects": [ "./lib/PubSub.js", - "./lib-esm/PubSub.js" + "./lib-esm/PubSub.js", + "./lib/utils/PatchLocalStorage.js", + "./lib-esm/utils/PatchLocalStorage.js" ], "publishConfig": { "access": "public" diff --git a/packages/pubsub/src/Providers/MqttOverWSProvider.ts b/packages/pubsub/src/Providers/MqttOverWSProvider.ts index f9b4da16186..92a23715821 100644 --- a/packages/pubsub/src/Providers/MqttOverWSProvider.ts +++ b/packages/pubsub/src/Providers/MqttOverWSProvider.ts @@ -1,5 +1,7 @@ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 + +import { reinstateLocalStorageError } from '../utils/PatchLocalStorage'; import * as Paho from 'paho-mqtt'; import { v4 as uuid } from 'uuid'; import Observable, { ZenObservable } from 'zen-observable-ts'; @@ -20,6 +22,8 @@ import { AMPLIFY_SYMBOL, CONNECTION_STATE_CHANGE } from './constants'; const logger = new Logger('MqttOverWSProvider'); +reinstateLocalStorageError(); + export function mqttTopicMatch(filter: string, topic: string) { const filterArray = filter.split('/'); const length = filterArray.length; diff --git a/packages/pubsub/src/utils/PatchLocalStorage.ts b/packages/pubsub/src/utils/PatchLocalStorage.ts new file mode 100644 index 00000000000..187a1a81a90 --- /dev/null +++ b/packages/pubsub/src/utils/PatchLocalStorage.ts @@ -0,0 +1,29 @@ +import { ConsoleLogger as Logger } from '@aws-amplify/core'; + +const logger = new Logger('PatchLocalStorage'); + +let error = undefined; + +function patchLocalStorage() { + try { + window.localStorage; + } catch (e) { + logger.error(e); + error = e; + Object.defineProperty(window, 'localStorage', { + value: null, + }); + } +} + +export function reinstateLocalStorageError() { + if (error) { + Object.defineProperty(window, 'localStorage', { + get: () => { + throw error; + }, + }); + } +} + +patchLocalStorage();