CVE-2023-26154: Insufficient Entropy (CWE-331)
value: Versions of the package pubnub before 7.4.0; all versions of the package com.pubnub:pubnub; versions of the package pubnub before 6.19.0; all versions of the package github.com/pubnub/go; versions of the package github.com/pubnub/go/v7 before 7.2.0; versions of the package pubnub before 7.3.0; versions of the package pubnub/pubnub before 6.1.0; versions of the package pubnub before 5.3.0; versions of the package pubnub before 0.4.0; versions of the package pubnub/c-core before 4.5.0; versions of the package com.pubnub:pubnub-kotlin before 7.7.0; versions of the package pubnub/swift before 6.2.0; versions of the package pubnub before 5.2.0; versions of the package pubnub before 4.3.0 are vulnerable to Insufficient Entropy via the getKey function, due to inefficient implementation of the AES-256-CBC cryptographic algorithm. The provided encrypt function is less secure when hex encoding and trimming are applied, leaving half of the bits in the key always the same for every encoded message or file.**Note:**In order to exploit this vulnerability, the attacker needs to invest resources in preparing the attack and brute-force the encryption.
CWE description: The product uses an algorithm or scheme that produces insufficient entropy, leaving patterns or clusters of values that are more likely to occur than others.
CVSS v3 base score: 5.9
Published: 2023-12-06T05:15Z
Repository: https://github.com/pubnub/javascript
Language: JavaScript
Files changed: .pubnub.yml, CHANGELOG.md, LICENSE, README.md, dist/web/pubnub.js, dist/web/pubnub.min.js, lib/core/components/base64_codec.js, lib/core/components/config.js, lib/core/components/subscription_manager.js, lib/core/endpoints/fetch_messages.js, lib/core/endpoints/file_upload/download_file.js, lib/core/endpoints/file_upload/publish_file.js, lib/core/endpoints/file_upload/send_file.js, lib/core/endpoints/history/get_history.js, lib/core/endpoints/publish.js, lib/core/pubnub-common.js, lib/core/utils.js, lib/crypto/modules/NodeCryptoModule/ICryptor.js, lib/crypto/modules/NodeCryptoModule/ILegacyCryptor.js, lib/crypto/modules/NodeCryptoModule/NodeCryptoModule.js, lib/crypto/modules/NodeCryptoModule/aesCbcCryptor.js, lib/crypto/modules/NodeCryptoModule/legacyCryptor.js, lib/crypto/modules/NodeCryptoModule/nodeCryptoModule.js, lib/crypto/modules/WebCryptoModule/ICryptor.js, lib/crypto/modules/WebCryptoModule/ILegacyCryptor.js, lib/crypto/modules/WebCryptoModule/aesCbcCryptor.js, lib/crypto/modules/WebCryptoModule/legacyCryptor.js, lib/crypto/modules/WebCryptoModule/webCryptoModule.js, lib/crypto/modules/node.js, lib/crypto/modules/web.js, lib/file/modules/node.js, lib/node/index.js, lib/web/index.js, package.json, src/core/components/base64_codec.ts, src/core/components/config.js, src/core/components/cryptography/index.js, src/core/components/subscription_manager.js, src/core/endpoints/fetch_messages.js, src/core/endpoints/file_upload/download_file.js, src/core/endpoints/file_upload/publish_file.js, src/core/endpoints/file_upload/send_file.js, src/core/endpoints/history/get_history.js, src/core/endpoints/publish.js, src/core/pubnub-common.js, src/core/utils.js, src/crypto/modules/NodeCryptoModule/ICryptor.ts, src/crypto/modules/NodeCryptoModule/ILegacyCryptor.ts, src/crypto/modules/NodeCryptoModule/aesCbcCryptor.ts, src/crypto/modules/NodeCryptoModule/legacyCryptor.ts, src/crypto/modules/NodeCryptoModule/nodeCryptoModule.ts, src/crypto/modules/WebCryptoModule/ICryptor.ts, src/crypto/modules/WebCryptoModule/ILegacyCryptor.ts, src/crypto/modules/WebCryptoModule/aesCbcCryptor.ts, src/crypto/modules/WebCryptoModule/legacyCryptor.ts, src/crypto/modules/WebCryptoModule/webCryptoModule.ts, src/crypto/modules/node.js, src/crypto/modules/web.js, src/file/modules/node.js, src/node/index.ts, src/web/index.js, test/contract/steps/cryptoModule/cryptoModule.ts, test/contract/utils.ts, test/contract/world.ts, tsconfig.json
Commit date: 2023-10-16 16:44:10 +0530
Commit message: feat/CryptoModule (#339)

* ref: decoupling cryptor module

* cryptoModule

* lint

* rever cryptors in config

* lint fixes

* CryptoModule for web and node

* step definitions for contract tests

* lib files

* fix:es-lint

* let vs const

* and some more ts not wanting me to specific about trivials

* access modfiers

* refactor-1

* lint, cleanup test

* refactor - 2

* code cleanup in stream encryption with new cryptor

* fix: lint issue.

* refactor: eliminate ts-ignores by defining file reated types

* * integration of crypto module * refactoring cryptoModule

* lib and dist

* support for setCipherKey

* fix: setCipherKey()

* lib and dist files

* fix: staticIV support

* lib and dist

* refactor: cryptoModule, * added support for PubNub.CryptoModule factory

* fix: types

* dist and libs

* fix: test- customEncrypt function

* fix: legacy crypto init, tests

* refactor: typecheck on incoming data for aescbc cryptor

* code cleanup, * fix: broken file cryptography operations on web

* lib and dist directories

* refactor: crypto initialiser apis default value initialisation

* LICENSE

* reverted last commit 11351ec

* update LICENSE

* PubNub SDK v7.4.0 release.

---------

Co-authored-by: PubNub Release Bot <120067856+pubnub-release-bot@users.noreply.github.com>
Diff: diff --git a/.pubnub.yml b/.pubnub.yml
index 29a468cf..87576598 100644
--- a/.pubnub.yml
+++ b/.pubnub.yml
@@ -1,7 +1,14 @@
 ---
 changelog:
+  - date: 2023-10-16
+    version: v7.4.0
+    changes:
+      - type: feature
+        text: "Add crypto module that allows configure SDK to encrypt and decrypt messages."
+      - type: bug
+        text: "Improved security of crypto implementation by adding enhanced AES-CBC cryptor."
   - date: 2023-09-11
     version: v7.3.3
     changes:
       - type: bug
         text: "Fixes issue of getting misleading error message when sendFile fails."
@@ -893,11 +900,11 @@ supported-platforms:
     platforms:
       - 'OSX 10.12 and up'
       - 'Ubuntu 14.04 and up'
       - 'Windows 7 and up'
     version: 'Pubnub Javascript for Node'
-version: '7.3.3'
+version: '7.4.0'
 sdks:
   - full-name: PubNub Javascript SDK
     short-name: Javascript
     artifacts:
       - artifact-type: api-client
@@ -909,11 +916,11 @@ sdks:
         documentation: https://www.pubnub.com/docs/sdks/javascript
         distributions:
           - distribution-type: source
             distribution-repository: GitHub release
             package-name: pubnub.js
-            location: https://github.com/pubnub/javascript/archive/refs/tags/v7.3.3.zip
+            location: https://github.com/pubnub/javascript/archive/refs/tags/v7.4.0.zip
             requires:
               - name: 'agentkeepalive'
                 min-version: '3.5.2'
                 license: 'MIT'
                 license-url: 'https://github.com/node-modules/agentkeepalive/blob/HEAD/LICENSE'
@@ -1580,11 +1587,11 @@ sdks:
         documentation: https://www.pubnub.com/docs/sdks/javascript
         distributions:
           - distribution-type: library
             distribution-repository: GitHub release
             package-name: pubnub.js
-            location: https://github.com/pubnub/javascript/releases/download/v7.3.3/pubnub.7.3.3.js
+            location: https://github.com/pubnub/javascript/releases/download/v7.4.0/pubnub.7.4.0.js
             requires:
               - name: 'agentkeepalive'
                 min-version: '3.5.2'
                 license: 'MIT'
                 license-url: 'https://github.com/node-modules/agentkeepalive/blob/HEAD/LICENSE'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ef5b2117..70bffca1 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
+## v7.4.0
+October 16 2023
+
+#### Added
+- Add crypto module that allows configure SDK to encrypt and decrypt messages.
+
+#### Fixed
+- Improved security of crypto implementation by adding enhanced AES-CBC cryptor.
+
 ## v7.3.3
 September 11 2023
 
 #### Fixed
 - Fixes issue of getting misleading error message when sendFile fails.
diff --git a/LICENSE b/LICENSE
index 3efa3922..5e1ef188 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,27 +1,29 @@
-PubNub Real-time Cloud-Hosted Push API and Push Notification Client Frameworks
-Copyright (c) 2013 PubNub Inc.
-http://www.pubnub.com/
-http://www.pubnub.com/terms
+PubNub Software Development Kit License Agreement
+Copyright © 2023 PubNub Inc. All rights reserved.
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+Subject to the terms and conditions of the license, you are hereby granted
+a non-exclusive, worldwide, royalty-free license to (a) copy and modify
+the software in source code or binary form for use with the software services
+and interfaces provided by PubNub, and (b) redistribute unmodified copies
+of the software to third parties. The software may not be incorporated in
+or used to provide any product or service competitive with the products
+and services of PubNub.
 
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
+The above copyright notice and this license shall be included
+in or with all copies or substantial portions of the software.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
+This license does not grant you permission to use the trade names, trademarks,
+service marks, or product names of PubNub, except as required for reasonable
+and customary use in describing the origin of the software and reproducing
+the content of this license.
 
-PubNub Real-time Cloud-Hosted Push API and Push Notification Client Frameworks
-Copyright (c) 2013 PubNub Inc.
-http://www.pubnub.com/
-http://www.pubnub.com/terms
+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
+EVENT SHALL PUBNUB OR THE AUTHORS OR COPYRIGHT HOLDERS OF THE SOFTWARE BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+https://www.pubnub.com/
+https://www.pubnub.com/terms
diff --git a/README.md b/README.md
index 82bc5ba3..f05a4a6d 100644
--- a/README.md
+++ b/README.md
@@ -26,12 +26,12 @@ Watch [Getting Started with PubNub JS SDK](https://app.dashcam.io/replay/64ee0d2
    * use `npm`:
      ```
      npm install pubnub
      ```
    * or download one of our builds from our CDN: 
-     * https://cdn.pubnub.com/sdk/javascript/pubnub.7.3.3.js
-     * https://cdn.pubnub.com/sdk/javascript/pubnub.7.3.3.min.js
+     * https://cdn.pubnub.com/sdk/javascript/pubnub.7.4.0.js
+     * https://cdn.pubnub.com/sdk/javascript/pubnub.7.4.0.min.js
 
 2. Configure your keys:
 
   ```javascript
   pubnub = new PubNub({
diff --git a/dist/web/pubnub.js b/dist/web/pubnub.js
index 18ecabe1..46c438cf 100644
--- a/dist/web/pubnub.js
+++ b/dist/web/pubnub.js
@@ -634,11 +634,11 @@
             this.publishKey = setup.publishKey || setup.publish_key;
             this.sdkName = setup.sdkName;
             this.sdkFamily = setup.sdkFamily;
             this.partnerId = setup.partnerId;
             this.setAuthKey(setup.authKey);
-            this.setCipherKey(setup.cipherKey);
+            this.cryptoModule = setup.cryptoModule;
             this.setFilterExpression(setup.filterExpression);
             if (typeof setup.origin !== 'string' && !Array.isArray(setup.origin) && setup.origin !== undefined) {
                 throw new Error('Origin must be either undefined, a string or a list of strings.');
             }
             this.origin = setup.origin || makeDefaultOrigins();
@@ -693,21 +693,29 @@
                 if (typeof setup.uuid !== 'string') {
                     throw new Error('One of the following configuration options has to be provided: `uuid` or `userId`');
                 }
                 this.setUUID(setup.uuid);
             }
+            this.setCipherKey(setup.cipherKey, setup);
         }
         // exposed setters
         default_1.prototype.getAuthKey = function () {
             return this.authKey;
         };
         default_1.prototype.setAuthKey = function (val) {
             this.authKey = val;
             return this;
         };
-        default_1.prototype.setCipherKey = function (val) {
+        default_1.prototype.setCipherKey = function (val, setup, modules) {
+            var _a;
             this.cipherKey = val;
+            if (this.cipherKey) {
+                this.cryptoModule =
+                    (_a = setup.cryptoModule) !== null && _a !== void 0 ? _a : setup.initCryptoModule({ cipherKey: this.cipherKey, useRandomIVs: this.useRandomIVs });
+                if (modules)
+                    modules.cryptoModule = this.cryptoModule;
+            }
             return this;
         };
         default_1.prototype.getUUID = function () {
             return this.UUID;
         };
@@ -781,11 +789,11 @@
         default_1.prototype.setSendBeaconConfig = function (val) {
             this._useSendBeacon = val;
             return this;
         };
         default_1.prototype.getVersion = function () {
-            return '7.3.3';
+            return '7.4.0';
         };
         default_1.prototype._addPnsdkSuffix = function (name, suffix) {
             this._PNSDKSuffix[name] = suffix;
         };
         default_1.prototype._getPnsdkSuffix = function (separator) {
@@ -839,10 +847,49 @@
             if (sx4 != 64)
                 view[i + 2] = oc3;
         }
         return data;
     }
+    function encode$1(input) {
+        var base64 = '';
+        var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+        var bytes = new Uint8Array(input);
+        var byteLength = bytes.byteLength;
+        var byteRemainder = byteLength % 3;
+        var mainLength = byteLength - byteRemainder;
+        var a, b, c, d;
+        var chunk;
+        // Main loop deals with bytes in chunks of 3
+        for (var i = 0; i < mainLength; i = i + 3) {
+            // Combine the three bytes into a single integer
+            chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];
+            // Use bitmasks to extract 6-bit segments from the triplet
+            a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18
+            b = (chunk & 258048) >> 12; // 258048   = (2^6 - 1) << 12
+            c = (chunk & 4032) >> 6; // 4032     = (2^6 - 1) << 6
+            d = chunk & 63; // 63       = 2^6 - 1
+            // Convert the raw binary segments to the appropriate ASCII encoding
+            base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];
+        }
+        // Deal with the remaining bytes and padding
+        if (byteRemainder == 1) {
+            chunk = bytes[mainLength];
+            a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2
+            // Set the 4 least significant bits to zero
+            b = (chunk & 3) << 4; // 3   = 2^2 - 1
+            base64 += encodings[a] + encodings[b] + '==';
+        }
+        else if (byteRemainder == 2) {
+            chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];
+            a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10
+            b = (chunk & 1008) >> 4; // 1008  = (2^6 - 1) << 4
+            // Set the 2 least significant bits to zero
+            c = (chunk & 15) << 2; // 15    = 2^4 - 1
+            base64 += encodings[a] + encodings[b] + encodings[c] + '=';
+        }
+        return base64;
+    }
 
     /*eslint-disable */
     /*
      CryptoJS v3.1.2
      code.google.com/p/crypto-js
@@ -1762,15 +1809,24 @@
             successResolve = fulfill;
             failureResolve = reject;
         });
         return { promise: promise, reject: failureResolve, fulfill: successResolve };
     }
+    function stringToArrayBuffer(str) {
+        var buf = new ArrayBuffer(str.length * 2);
+        var bufView = new Uint16Array(buf);
+        for (var i = 0, strLen = str.length; i < strLen; i++) {
+            bufView[i] = str.charCodeAt(i);
+        }
+        return buf;
+    }
     var utils$5 = {
         signPamFromParams: signPamFromParams,
         endsWith: endsWith,
         createPromise: createPromise,
         encodeString: encodeString,
+        stringToArrayBuffer: stringToArrayBuffer,
     };
 
     /*       */
     var categories = {
         // SDK will announce when the network appears to be connected again.
@@ -1793,19 +1849,20 @@
         PNRequestMessageCountExceededCategory: 'PNRequestMessageCountExceededCategory',
     };
 
     var default_1$7 = /** @class */ (function () {
         function default_1(_a) {
-            var subscribeEndpoint = _a.subscribeEndpoint, leaveEndpoint = _a.leaveEndpoint, heartbeatEndpoint = _a.heartbeatEndpoint, setStateEndpoint = _a.setStateEndpoint, timeEndpoint = _a.timeEndpoint, getFileUrl = _a.getFileUrl, config = _a.config, crypto = _a.crypto, listenerManager = _a.listenerManager;
+            var subscribeEndpoint = _a.subscribeEndpoint, leaveEndpoint = _a.leaveEndpoint, heartbeatEndpoint = _a.heartbeatEndpoint, setStateEndpoint = _a.setStateEndpoint, timeEndpoint = _a.timeEndpoint, getFileUrl = _a.getFileUrl, config = _a.config, crypto = _a.crypto, listenerManager = _a.listenerManager, cryptoModule = _a.cryptoModule;
             this._listenerManager = listenerManager;
             this._config = config;
             this._leaveEndpoint = leaveEndpoint;
             this._heartbeatEndpoint = heartbeatEndpoint;
             this._setStateEndpoint = setStateEndpoint;
             this._subscribeEndpoint = subscribeEndpoint;
             this._getFileUrl = getFileUrl;
             this._crypto = crypto;
+            this._cryptoModule = cryptoModule;
             this._channels = {};
             this._presenceChannels = {};
             this._heartbeatChannels = {};
             this._heartbeatChannelGroups = {};
             this._channelGroups = {};
@@ -1817,10 +1874,12 @@
             this._storedTimetoken = null;
             this._subscriptionStatusAnnounced = false;
             this._isOnline = true;
             this._reconnectionManager = new default_1$9({ timeEndpoint: timeEndpoint });
             this._dedupingManager = new default_1$8({ config: config });
+            if (this._cryptoModule)
+                this._decoder = new TextDecoder();
         }
         default_1.prototype.adaptStateChange = function (args, callback) {
             var _this = this;
             var state = args.state, _a = args.channels, channels = _a === void 0 ? [] : _a, _b = args.channelGroups, channelGroups = _b === void 0 ? [] : _b, _c = args.withHeartbeat, withHeartbeat = _c === void 0 ? false : _c;
             channels.forEach(function (channel) {
@@ -2284,13 +2343,24 @@
                     announce.channel = channel;
                     announce.subscription = subscriptionMatch;
                     announce.timetoken = publishMetaData.publishTimetoken;
                     announce.publisher = message.issuingClientId;
                     var msgPayload = message.payload;
-                    if (_this._config.cipherKey) {
-                        var decryptedPayload = _this._crypto.decrypt(message.payload);
-                        if (typeof decryptedPayload === 'object' && decryptedPayload !== null) {
+                    if (_this._cryptoModule) {
+                        var decryptedPayload = void 0;
+                        try {
+                            var decryptedData = _this._cryptoModule.decrypt(message.payload);
+                            decryptedPayload =
+                                decryptedData instanceof ArrayBuffer ? JSON.parse(_this._decoder.decode(decryptedData)) : decryptedData;
+                        }
+                        catch (e) {
+                            decryptedPayload = null;
+                            if (console && console.log) {
+                                console.log('decryption error', e.message);
+                            }
+                        }
+                        if (decryptedPayload !== null) {
                             msgPayload = decryptedPayload;
                         }
                     }
                     if (message.userMetadata) {
                         announce.userMetadata = message.userMetadata;
@@ -2320,12 +2390,30 @@
                     announce.timetoken = publishMetaData.publishTimetoken;
                     announce.publisher = message.issuingClientId;
                     if (message.userMetadata) {
                         announce.userMetadata = message.userMetadata;
                     }
-                    if (_this._config.cipherKey) {
-                        announce.message = _this._crypto.decrypt(message.payload);
+                    if (_this._cryptoModule) {
+                        var decryptedPayload = void 0;
+                        try {
+                            var decryptedData = _this._cryptoModule.decrypt(message.payload);
+                            decryptedPayload =
+                                decryptedData instanceof ArrayBuffer ? JSON.parse(_this._decoder.decode(decryptedData)) : decryptedData;
+                        }
+                        catch (e) {
+                            decryptedPayload = null;
+                            // eslint-disable-next-line
+                            if (console && console.log) {
+                                console.log('decryption error', e.message); //eslint-disable-line
+                            }
+                        }
+                        if (decryptedPayload != null) {
+                            announce.message = decryptedPayload;
+                        }
+                        else {
+                            announce.message = message.payload;
+                        }
                     }
                     else {
                         announce.message = message.payload;
                     }
                     _this._listenerManager.announceMessage(announce);
@@ -4620,15 +4708,15 @@
             file_upload_request: response.file_upload_request,
         }); },
     };
 
     /**       */
-    var preparePayload = function (_a, payload) {
-        var crypto = _a.crypto, config = _a.config;
+    var preparePayload = function (modules, payload) {
         var stringifiedPayload = JSON.stringify(payload);
-        if (config.cipherKey) {
-            stringifiedPayload = crypto.encrypt(stringifiedPayload);
+        if (modules.cryptoModule) {
+            var encrypted = modules.cryptoModule.encrypt(stringifiedPayload);
+            stringifiedPayload = typeof encrypted === 'string' ? encrypted : encode$1(encrypted);
             stringifiedPayload = JSON.stringify(stringifiedPayload);
         }
         return stringifiedPayload || '';
     };
     var endpoint$h = {
@@ -4679,124 +4767,132 @@
         }); },
     };
 
     var sendFile = function (_a) {
         var _this = this;
-        var generateUploadUrl = _a.generateUploadUrl, publishFile = _a.publishFile, _b = _a.modules, PubNubFile = _b.PubNubFile, config = _b.config, cryptography = _b.cryptography, networking = _b.networking;
+        var generateUploadUrl = _a.generateUploadUrl, publishFile = _a.publishFile, _b = _a.modules, PubNubFile = _b.PubNubFile, config = _b.config, cryptography = _b.cryptography, cryptoModule = _b.cryptoModule, networking = _b.networking;
         return function (_a) {
             var channel = _a.channel, input = _a.file, message = _a.message, cipherKey = _a.cipherKey, meta = _a.meta, ttl = _a.ttl, storeInHistory = _a.storeInHistory;
             return __awaiter(_this, void 0, void 0, function () {
-                var file, _b, _c, url, formFields, _d, id, name, formFieldsWithMimeType, result, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, e_1, errorBody, reason, retries, wasSuccessful, publishResult;
-                return __generator(this, function (_s) {
-                    switch (_s.label) {
+                var file, _b, _c, url, formFields, _d, id, name, _e, formFieldsWithMimeType, result, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, e_1, errorBody, reason, retries, wasSuccessful, publishResult;
+                return __generator(this, function (_t) {
+                    switch (_t.label) {
                         case 0:
                             if (!channel) {
                                 throw new PubNubError('Validation failed, check status for details', createValidationError("channel can't be empty"));
                             }
                             if (!input) {
                                 throw new PubNubError('Validation failed, check status for details', createValidationError("file can't be empty"));
                             }
                             file = PubNubFile.create(input);
                             return [4 /*yield*/, generateUploadUrl({ channel: channel, name: file.name })];
                         case 1:
-                            _b = _s.sent(), _c = _b.file_upload_request, url = _c.url, formFields = _c.form_fields, _d = _b.data, id = _d.id, name = _d.name;
-                            if (!(PubNubFile.supportsEncryptFile && (cipherKey !== null && cipherKey !== void 0 ? cipherKey : config.cipherKey))) return [3 /*break*/, 3];
-                            return [4 /*yield*/, cryptography.encryptFile(cipherKey !== null && cipherKey !== void 0 ? cipherKey : config.cipherKey, file, PubNubFile)];
+                            _b = _t.sent(), _c = _b.file_upload_request, url = _c.url, formFields = _c.form_fields, _d = _b.data, id = _d.id, name = _d.name;
+                            if (!(PubNubFile.supportsEncryptFile && (cipherKey || cryptoModule))) return [3 /*break*/, 6];
+                            if (!(cipherKey == null)) return [3 /*break*/, 3];
+                            return [4 /*yield*/, cryptoModule.encryptFile(file, PubNubFile)];
                         case 2:
-                            file = _s.sent();
-                            _s.label = 3;
-                        case 3:
+                            _e = _t.sent();
+                            return [3 /*break*/, 5];
+                        case 3: return [4 /*yield*/, cryptography.encryptFile(cipherKey, file, PubNubFile)];
+                        case 4:
+                            _e = _t.sent();
+                            _t.label = 5;
+                        case 5:
+                            file = _e;
+                            _t.label = 6;
+                        case 6:
                             formFieldsWithMimeType = formFields;
                             if (file.mimeType) {
                                 formFieldsWithMimeType = formFields.map(function (entry) {
                                     if (entry.key === 'Content-Type')
                                         return { key: entry.key, value: file.mimeType };
                                     return entry;
                                 });
                             }
-                            _s.label = 4;
-                        case 4:
-                            _s.trys.push([4, 18, , 19]);
-                            if (!(PubNubFile.supportsFileUri && input.uri)) return [3 /*break*/, 7];
-                            _f = (_e = networking).POSTFILE;
-                            _g = [url, formFieldsWithMimeType];
-                            return [4 /*yield*/, file.toFileUri()];
-                        case 5: return [4 /*yield*/, _f.apply(_e, _g.concat([_s.sent()]))];
-                        case 6:
-                            result = _s.sent();
-                            return [3 /*break*/, 17];
+                            _t.label = 7;
                         case 7:
-                            if (!PubNubFile.supportsFile) return [3 /*break*/, 10];
-                            _j = (_h = networking).POSTFILE;
-                            _k = [url, formFieldsWithMimeType];
-                            return [4 /*yield*/, file.toFile()];
-                        case 8: return [4 /*yield*/, _j.apply(_h, _k.concat([_s.sent()]))];
+                            _t.trys.push([7, 21, , 22]);
+                            if (!(PubNubFile.supportsFileUri && input.uri)) return [3 /*break*/, 10];
+                            _g = (_f = networking).POSTFILE;
+                            _h = [url, formFieldsWithMimeType];
+                            return [4 /*yield*/, file.toFileUri()];
+                        case 8: return [4 /*yield*/, _g.apply(_f, _h.concat([_t.sent()]))];
                         case 9:
-                            result = _s.sent();
-                            return [3 /*break*/, 17];
+                            result = _t.sent();
+                            return [3 /*break*/, 20];
                         case 10:
-                            if (!PubNubFile.supportsBuffer) return [3 /*break*/, 13];
-                            _m = (_l = networking).POSTFILE;
-                            _o = [url, formFieldsWithMimeType];
-                            return [4 /*yield*/, file.toBuffer()];
-                        case 11: return [4 /*yield*/, _m.apply(_l, _o.concat([_s.sent()]))];
+                            if (!PubNubFile.supportsFile) return [3 /*break*/, 13];
+                            _k = (_j = networking).POSTFILE;
+                            _l = [url, formFieldsWithMimeType];
+                            return [4 /*yield*/, file.toFile()];
+                        case 11: return [4 /*yield*/, _k.apply(_j, _l.concat([_t.sent()]))];
                         case 12:
-                            result = _s.sent();
-                            return [3 /*break*/, 17];
+                            result = _t.sent();
+                            return [3 /*break*/, 20];
                         case 13:
-                            if (!PubNubFile.supportsBlob) return [3 /*break*/, 16];
-                            _q = (_p = networking).POSTFILE;
-                            _r = [url, formFieldsWithMimeType];
-                            return [4 /*yield*/, file.toBlob()];
-                        case 14: return [4 /*yield*/, _q.apply(_p, _r.concat([_s.sent()]))];
+                            if (!PubNubFile.supportsBuffer) return [3 /*break*/, 16];
+                            _o = (_m = networking).POSTFILE;
+                            _p = [url, formFieldsWithMimeType];
+                            return [4 /*yield*/, file.toBuffer()];
+                        case 14: return [4 /*yield*/, _o.apply(_m, _p.concat([_t.sent()]))];
                         case 15:
-                            result = _s.sent();
-                            return [3 /*break*/, 17];
-                        case 16: throw new Error('Unsupported environment');
-                        case 17: return [3 /*break*/, 19];
+                            result = _t.sent();
+                            return [3 /*break*/, 20];
+                        case 16:
+                            if (!PubNubFile.supportsBlob) return [3 /*break*/, 19];
+                            _r = (_q = networking).POSTFILE;
+                            _s = [url, formFieldsWithMimeType];
+                            return [4 /*yield*/, file.toBlob()];
+                        case 17: return [4 /*yield*/, _r.apply(_q, _s.concat([_t.sent()]))];
                         case 18:
-                            e_1 = _s.sent();
+                            result = _t.sent();
+                            return [3 /*break*/, 20];
+                        case 19: throw new Error('Unsupported environment');
+                        case 20: return [3 /*break*/, 22];
+                        case 21:
+                            e_1 = _t.sent();
                             if (e_1.response && typeof e_1.response.text === 'string') {
                                 errorBody = e_1.response.text;
                                 reason = /<Message>(.*)<\/Message>/gi.exec(errorBody);
                                 throw new PubNubError(reason ? "Upload to bucket failed: ".concat(reason[1]) : 'Upload to bucket failed.', e_1);
                             }
                             else {
                                 throw new PubNubError('Upload to bucket failed.', e_1);
                             }
-                        case 19:
+                        case 22:
                             if (result.status !== 204) {
                                 throw new PubNubError('Upload to bucket was unsuccessful', result);
                             }
                             retries = config.fileUploadPublishRetryLimit;
                             wasSuccessful = false;
                             publishResult = { timetoken: '0' };
-                            _s.label = 20;
-                        case 20:
-                            _s.trys.push([20, 22, , 23]);
+                            _t.label = 23;
+                        case 23:
+                            _t.trys.push([23, 25, , 26]);
                             return [4 /*yield*/, publishFile({
                                     channel: channel,
                                     message: message,
                                     fileId: id,
                                     fileName: name,
                                     meta: meta,
                                     storeInHistory: storeInHistory,
                                     ttl: ttl,
                                 })];
-                        case 21:
+                        case 24:
                             /* eslint-disable-next-line no-await-in-loop */
-                            publishResult = _s.sent();
+                            publishResult = _t.sent();
                             wasSuccessful = true;
-                            return [3 /*break*/, 23];
-                        case 22:
-                            _s.sent();
+                            return [3 /*break*/, 26];
+                        case 25:
+                            _t.sent();
                             retries -= 1;
-                            return [3 /*break*/, 23];
-                        case 23:
-                            if (!wasSuccessful && retries > 0) return [3 /*break*/, 20];
-                            _s.label = 24;
-                        case 24:
+                            return [3 /*break*/, 26];
+                        case 26:
+                            if (!wasSuccessful && retries > 0) return [3 /*break*/, 23];
+                            _t.label = 27;
+                        case 27:
                             if (!wasSuccessful) {
                                 throw new PubNubError('Publish failed. You may want to execute that operation manually using pubnub.publishFile', {
                                     channel: channel,
                                     id: id,
                                     name: name,
@@ -4859,11 +4955,11 @@
             return "".concat(networking.getStandardOrigin()).concat(url, "?").concat(queryParams);
         }
         return "".concat(networking.getStandardOrigin()).concat(url);
     });
 
-    /**       */
+    // Download_file.js
     var endpoint$g = {
         getOperation: function () { return OPERATIONS.PNDownloadFileOperation; },
         validateParams: function (_, params) {
             if (!(params === null || params === void 0 ? void 0 : params.channel)) {
                 return "channel can't be empty";
@@ -4887,24 +4983,32 @@
         isAuthSupported: function () { return true; },
         ignoreBody: function () { return true; },
         forceBuffered: function () { return true; },
         prepareParams: function () { return ({}); },
         handleResponse: function (_a, res, params) {
-            var PubNubFile = _a.PubNubFile, config = _a.config, cryptography = _a.cryptography;
+            var PubNubFile = _a.PubNubFile, config = _a.config, cryptography = _a.cryptography, cryptoModule = _a.cryptoModule;
             return __awaiter(void 0, void 0, void 0, function () {
-                var body;
-                var _b, _c, _d;
+                var body, _b;
+                var _c, _d;
                 return __generator(this, function (_e) {
                     switch (_e.label) {
                         case 0:
                             body = res.response.body;
-                            if (!(PubNubFile.supportsEncryptFile && ((_b = params.cipherKey) !== null && _b !== void 0 ? _b : config.cipherKey))) return [3 /*break*/, 2];
-                            return [4 /*yield*/, cryptography.decrypt((_c = params.cipherKey) !== null && _c !== void 0 ? _c : config.cipherKey, body)];
+                            if (!(PubNubFile.supportsEncryptFile && (params.cipherKey || cryptoModule))) return [3 /*break*/, 5];
+                            if (!(params.cipherKey == null)) return [3 /*break*/, 2];
+                            return [4 /*yield*/, cryptoModule.decryptFile(PubNubFile.create({ data: body, name: params.name }), PubNubFile)];
                         case 1:
-                            body = _e.sent();
-                            _e.label = 2;
-                        case 2: return [2 /*return*/, PubNubFile.create({
+                            _b = (_e.sent()).data;
+                            return [3 /*break*/, 4];
+                        case 2: return [4 /*yield*/, cryptography.decrypt((_c = params.cipherKey) !== null && _c !== void 0 ? _c : config.cipherKey, body)];
+                        case 3:
+                            _b = _e.sent();
+                            _e.label = 4;
+                        case 4:
+                            body = _b;
+                            _e.label = 5;
+                        case 5: return [2 /*return*/, PubNubFile.create({
                                 data: body,
                                 name: (_d = res.response.name) !== null && _d !== void 0 ? _d : params.name,
                                 mimeType: res.response.type,
                             })];
                     }
@@ -5994,17 +6098,17 @@
         }); },
     };
 
     /*       */
     function prepareMessagePayload$1(modules, messagePayload) {
-        var crypto = modules.crypto, config = modules.config;
         var stringifiedPayload = JSON.stringify(messagePayload);
-        if (config.cipherKey) {
-            stringifiedPayload = crypto.encrypt(stringifiedPayload);
+        if (modules.cryptoModule) {
+            var encrypted = modules.cryptoModule.encrypt(stringifiedPayload);
+            stringifiedPayload = typeof encrypted === 'string' ? encrypted : encode$1(encrypted);
             stringifiedPayload = JSON.stringify(stringifiedPayload);
         }
-        return stringifiedPayload;
+        return stringifiedPayload || '';
     }
     function getOperation$7() {
         return OPERATIONS.PNPublishOperation;
     }
     function validateParams$7(_a, incomingParams) {
@@ -6133,17 +6237,20 @@
         handleResponse: handleResponse$6
     });
 
     /*       */
     function __processMessage$1(modules, message) {
-        var config = modules.config, crypto = modules.crypto;
-        if (!config.cipherKey)
+        if (!modules.cryptoModule)
             return message;
         try {
-            return crypto.decrypt(message);
+            var decryptedData = modules.cryptoModule.decrypt(message);
+            var decryptedPayload = decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
+            return decryptedPayload;
         }
         catch (e) {
+            if (console && console.log)
+                console.log('decryption error', e.message);
             return message;
         }
     }
     function getOperation$5() {
         return OPERATIONS.PNHistoryOperation;
@@ -6329,17 +6436,20 @@
         handleResponse: handleResponse$3
     });
 
     /*       */
     function __processMessage(modules, message) {
-        var config = modules.config, crypto = modules.crypto;
-        if (!config.cipherKey)
+        if (!modules.cryptoModule)
             return message;
         try {
-            return crypto.decrypt(message);
+            var decryptedData = modules.cryptoModule.decrypt(message);
+            var decryptedPayload = decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
+            return decryptedPayload;
         }
         catch (e) {
+            if (console && console.log)
+                console.log('decryption error', e.message);
             return message;
         }
     }
     function getOperation$2() {
         return OPERATIONS.PNFetchMessagesOperation;
@@ -7373,22 +7483,36 @@
             this._tokenManager = tokenManager;
             var telemetryManager = new default_1$6({
                 maximumSamplesCount: 60000,
             });
             this._telemetryManager = telemetryManager;
+            var cryptoModule = this._config.cryptoModule;
             var modules = {
                 config: config,
                 networking: networking,
                 crypto: crypto,
                 cryptography: cryptography,
                 tokenManager: tokenManager,
                 telemetryManager: telemetryManager,
                 PubNubFile: setup.PubNubFile,
+                cryptoModule: cryptoModule,
             };
             this.File = setup.PubNubFile;
-            this.encryptFile = function (key, file) { return cryptography.encryptFile(key, file, _this.File); };
-            this.decryptFile = function (key, file) { return cryptography.decryptFile(key, file, _this.File); };
+            this.encryptFile = function (key, file) {
+                if (arguments.length == 1 && typeof key != 'string' && modules.cryptoModule) {
+                    file = key;
+                    return modules.cryptoModule.encryptFile(file, this.File);
+                }
+                return cryptography.encryptFile(key, file, this.File);
+            };
+            this.decryptFile = function (key, file) {
+                if (arguments.length == 1 && typeof key != 'string' && modules.cryptoModule) {
+                    file = key;
+                    return modules.cryptoModule.decryptFile(file, this.File);
+                }
+                return cryptography.decryptFile(key, file, this.File);
+            };
             var timeEndpoint = endpointCreator.bind(this, modules, timeEndpointConfig);
             var leaveEndpoint = endpointCreator.bind(this, modules, presenceLeaveEndpointConfig);
             var heartbeatEndpoint = endpointCreator.bind(this, modules, presenceHeartbeatEndpointConfig);
             var setStateEndpoint = endpointCreator.bind(this, modules, presenceSetStateConfig);
             var subscribeEndpoint = endpointCreator.bind(this, modules, subscribeEndpointConfig);
@@ -7415,10 +7539,11 @@
                     subscribeEndpoint: subscribeEndpoint,
                     crypto: modules.crypto,
                     config: modules.config,
                     listenerManager: listenerManager,
                     getFileUrl: function (params) { return getFileUrlFunction(modules, params); },
+                    cryptoModule: modules.cryptoModule,
                 });
                 this.subscribe = subscriptionManager_1.adaptSubscribeChange.bind(subscriptionManager_1);
                 this.unsubscribe = subscriptionManager_1.adaptUnsubscribeChange.bind(subscriptionManager_1);
                 this.disconnect = subscriptionManager_1.disconnect.bind(subscriptionManager_1);
                 this.reconnect = subscriptionManager_1.reconnect.bind(subscriptionManager_1);
@@ -7704,22 +7829,39 @@
             this.time = timeEndpoint;
             // --- deprecated  ------------------
             this.stop = this.destroy; // --------
             // --- deprecated  ------------------
             // mount crypto
-            this.encrypt = crypto.encrypt.bind(crypto);
-            this.decrypt = crypto.decrypt.bind(crypto);
+            this.encrypt = function (data, key) {
+                if (typeof key === 'undefined' && modules.cryptoModule) {
+                    var encrypted = modules.cryptoModule.encrypt(data);
+                    return typeof encrypted === 'string' ? encrypted : encode$1(encrypted);
+                }
+                else {
+                    return crypto.encrypt(data, key);
+                }
+            };
+            this.decrypt = function (data, key) {
+                if (typeof key === 'undefined' && cryptoModule) {
+                    var decrypted = modules.cryptoModule.decrypt(data);
+                    return decrypted instanceof ArrayBuffer ? encode$1(decrypted) : decrypted;
+                }
+                else {
+                    return crypto.decrypt(data, key);
+                }
+            };
             /* config */
             this.getAuthKey = modules.config.getAuthKey.bind(modules.config);
             this.setAuthKey = modules.config.setAuthKey.bind(modules.config);
-            this.setCipherKey = modules.config.setCipherKey.bind(modules.config);
             this.getUUID = modules.config.getUUID.bind(modules.config);
             this.setUUID = modules.config.setUUID.bind(modules.config);
             this.getUserId = modules.config.getUserId.bind(modules.config);
             this.setUserId = modules.config.setUserId.bind(modules.config);
             this.getFilterExpression = modules.config.getFilterExpression.bind(modules.config);
             this.setFilterExpression = modules.config.setFilterExpression.bind(modules.config);
+            // this.setCipherKey = modules.config.setCipherKey.bind(modules.config);
+            this.setCipherKey = function (key) { return modules.config.setCipherKey(key, setup, modules); };
             this.setHeartbeatInterval = modules.config.setHeartbeatInterval.bind(modules.config);
             if (networking.hasModule('proxy')) {
                 this.setProxy = function (proxy) {
                     modules.config.setProxy(proxy);
                     _this.reconnect();
@@ -12532,14 +12674,17 @@
         WebCryptography.prototype.encryptFile = function (key, file, File) {
             return __awaiter(this, void 0, void 0, function () {
                 var bKey, abPlaindata, abCipherdata;
                 return __generator(this, function (_a) {
                     switch (_a.label) {
-                        case 0: return [4 /*yield*/, this.getKey(key)];
+                        case 0:
+                            if (file.data.byteLength <= 0)
+                                throw new Error('encryption error. empty content');
+                            return [4 /*yield*/, this.getKey(key)];
                         case 1:
                             bKey = _a.sent();
-                            return [4 /*yield*/, file.toArrayBuffer()];
+                            return [4 /*yield*/, file.data.arrayBuffer()];
                         case 2:
                             abPlaindata = _a.sent();
                             return [4 /*yield*/, this.encryptArrayBuffer(bKey, abPlaindata)];
                         case 3:
                             abCipherdata = _a.sent();
@@ -12558,11 +12703,11 @@
                 return __generator(this, function (_a) {
                     switch (_a.label) {
                         case 0: return [4 /*yield*/, this.getKey(key)];
                         case 1:
                             bKey = _a.sent();
-                            return [4 /*yield*/, file.toArrayBuffer()];
+                            return [4 /*yield*/, file.data.arrayBuffer()];
                         case 2:
                             abCipherdata = _a.sent();
                             return [4 /*yield*/, this.decryptArrayBuffer(bKey, abCipherdata)];
                         case 3:
                             abPlaindata = _a.sent();
@@ -12574,19 +12719,20 @@
                 });
             });
         };
         WebCryptography.prototype.getKey = function (key) {
             return __awaiter(this, void 0, void 0, function () {
-                var bKey, abHash, abKey;
+                var digest, hashHex, abKey;
                 return __generator(this, function (_a) {
                     switch (_a.label) {
-                        case 0:
-                            bKey = Buffer.from(key);
-                            return [4 /*yield*/, crypto.subtle.digest('SHA-256', bKey.buffer)];
+                        case 0: return [4 /*yield*/, crypto.subtle.digest('SHA-256', WebCryptography.encoder.encode(key))];
                         case 1:
-                            abHash = _a.sent();
-                            abKey = Buffer.from(Buffer.from(abHash).toString('hex').slice(0, 32), 'utf8').buffer;
+                            digest = _a.sent();
+                            hashHex = Array.from(new Uint8Array(digest))
+                                .map(function (b) { return b.toString(16).padStart(2, '0'); })
+                                .join('');
+                            abKey = WebCryptography.encoder.encode(hashHex.slice(0, 32)).buffer;
                             return [2 /*return*/, crypto.subtle.importKey('raw', abKey, 'AES-CBC', true, ['encrypt', 'decrypt'])];
                     }
                 });
             });
         };
@@ -12605,52 +12751,62 @@
                 });
             });
         };
         WebCryptography.prototype.decryptArrayBuffer = function (key, ciphertext) {
             return __awaiter(this, void 0, void 0, function () {
-                var abIv;
+                var abIv, data;
                 return __generator(this, function (_a) {
-                    abIv = ciphertext.slice(0, 16);
-                    return [2 /*return*/, crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, ciphertext.slice(16))];
+                    switch (_a.label) {
+                        case 0:
+                            abIv = ciphertext.slice(0, 16);
+                            if (ciphertext.slice(WebCryptography.IV_LENGTH).byteLength <= 0)
+                                throw new Error('decryption error: empty content');
+                            return [4 /*yield*/, crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, ciphertext.slice(WebCryptography.IV_LENGTH))];
+                        case 1:
+                            data = _a.sent();
+                            return [2 /*return*/, data];
+                    }
                 });
             });
         };
         WebCryptography.prototype.encryptString = function (key, plaintext) {
             return __awaiter(this, void 0, void 0, function () {
                 var abIv, abPlaintext, abPayload, ciphertext;
                 return __generator(this, function (_a) {
                     switch (_a.label) {
                         case 0:
                             abIv = crypto.getRandomValues(new Uint8Array(16));
-                            abPlaintext = Buffer.from(plaintext).buffer;
+                            abPlaintext = WebCryptography.encoder.encode(plaintext).buffer;
                             return [4 /*yield*/, crypto.subtle.encrypt({ name: 'AES-CBC', iv: abIv }, key, abPlaintext)];
                         case 1:
                             abPayload = _a.sent();
                             ciphertext = concatArrayBuffer(abIv.buffer, abPayload);
-                            return [2 /*return*/, Buffer.from(ciphertext).toString('utf8')];
+                            return [2 /*return*/, WebCryptography.decoder.decode(ciphertext)];
                     }
                 });
             });
         };
         WebCryptography.prototype.decryptString = function (key, ciphertext) {
             return __awaiter(this, void 0, void 0, function () {
                 var abCiphertext, abIv, abPayload, abPlaintext;
                 return __generator(this, function (_a) {
                     switch (_a.label) {
                         case 0:
-                            abCiphertext = Buffer.from(ciphertext);
+                            abCiphertext = WebCryptography.encoder.encode(ciphertext).buffer;
                             abIv = abCiphertext.slice(0, 16);
                             abPayload = abCiphertext.slice(16);
                             return [4 /*yield*/, crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, abPayload)];
                         case 1:
                             abPlaintext = _a.sent();
-                            return [2 /*return*/, Buffer.from(abPlaintext).toString('utf8')];
+                            return [2 /*return*/, WebCryptography.decoder.decode(abPlaintext)];
                     }
                 });
             });
         };
         WebCryptography.IV_LENGTH = 16;
+        WebCryptography.encoder = new TextEncoder();
+        WebCryptography.decoder = new TextDecoder();
         return WebCryptography;
     }());
 
     /* global File, FileReader */
     var _a;
@@ -12762,10 +12918,447 @@
         _a.supportsString = true,
         _a.supportsEncryptFile = true,
         _a.supportsFileUri = false,
         _a);
 
+    var LegacyCryptor = /** @class */ (function () {
+        function LegacyCryptor(config) {
+            this.config = config;
+            this.cryptor = new default_1$a({ config: config });
+            this.fileCryptor = new WebCryptography();
+        }
+        Object.defineProperty(LegacyCryptor.prototype, "identifier", {
+            get: function () {
+                return '';
+            },
+            enumerable: false,
+            configurable: true
+        });
+        LegacyCryptor.prototype.encrypt = function (data) {
+            var stringData = typeof data === 'string' ? data : new TextDecoder().decode(data);
+            return {
+                data: this.cryptor.encrypt(stringData),
+                metadata: null,
+            };
+        };
+        LegacyCryptor.prototype.decrypt = function (encryptedData) {
+            var data = typeof encryptedData.data === 'string' ? encryptedData.data : encode$1(encryptedData.data);
+            return this.cryptor.decrypt(data);
+        };
+        LegacyCryptor.prototype.encryptFile = function (file, File) {
+            var _a;
+            return __awaiter(this, void 0, void 0, function () {
+                return __generator(this, function (_b) {
+                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+                    //@ts-ignore: can not detect cipherKey from old Config
+                    return [2 /*return*/, this.fileCryptor.encryptFile((_a = this.config) === null || _a === void 0 ? void 0 : _a.cipherKey, file, File)];
+                });
+            });
+        };
+        LegacyCryptor.prototype.decryptFile = function (file, File) {
+            return __awaiter(this, void 0, void 0, function () {
+                return __generator(this, function (_a) {
+                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+                    //@ts-ignore: can not detect cipherKey from old Config
+                    return [2 /*return*/, this.fileCryptor.decryptFile(this.config.cipherKey, file, File)];
+                });
+            });
+        };
+        return LegacyCryptor;
+    }());
+
+    var AesCbcCryptor = /** @class */ (function () {
+        function AesCbcCryptor(configuration) {
+            this.cipherKey = configuration.cipherKey;
+            this.CryptoJS = hmacSha256;
+            this.encryptedKey = this.CryptoJS.SHA256(this.cipherKey);
+        }
+        Object.defineProperty(AesCbcCryptor.prototype, "algo", {
+            get: function () {
+                return 'AES-CBC';
+            },
+            enumerable: false,
+            configurable: true
+        });
+        Object.defineProperty(AesCbcCryptor.prototype, "identifier", {
+            get: function () {
+                return 'ACRH';
+            },
+            enumerable: false,
+            configurable: true
+        });
+        AesCbcCryptor.prototype.getIv = function () {
+            return crypto.getRandomValues(new Uint8Array(AesCbcCryptor.BLOCK_SIZE));
+        };
+        AesCbcCryptor.prototype.getKey = function () {
+            return __awaiter(this, void 0, void 0, function () {
+                var bKey, abHash;
+                return __generator(this, function (_a) {
+                    switch (_a.label) {
+                        case 0:
+                            bKey = AesCbcCryptor.encoder.encode(this.cipherKey);
+                            return [4 /*yield*/, crypto.subtle.digest('SHA-256', bKey.buffer)];
+                        case 1:
+                            abHash = _a.sent();
+                            return [2 /*return*/, crypto.subtle.importKey('raw', abHash, this.algo, true, ['encrypt', 'decrypt'])];
+                    }
+                });
+            });
+        };
+        AesCbcCryptor.prototype.encrypt = function (data) {
+            var stringData = typeof data === 'string' ? data : AesCbcCryptor.decoder.decode(data);
+            if (stringData.length === 0)
+                throw new Error('encryption error. empty content');
+            var abIv = this.getIv();
+            return {
+                metadata: abIv,
+                data: decode$1(this.CryptoJS.AES.encrypt(data, this.encryptedKey, {
+                    iv: this.bufferToWordArray(abIv),
+                    mode: this.CryptoJS.mode.CBC,
+                }).ciphertext.toString(this.CryptoJS.enc.Base64)),
+            };
+        };
+        AesCbcCryptor.prototype.decrypt = function (encryptedData) {
+            var iv = this.bufferToWordArray(new Uint8ClampedArray(encryptedData.metadata));
+            var data = this.bufferToWordArray(new Uint8ClampedArray(encryptedData.data));
+            return AesCbcCryptor.encoder.encode(this.CryptoJS.AES.decrypt({ ciphertext: data }, this.encryptedKey, {
+                iv: iv,
+                mode: this.CryptoJS.mode.CBC,
+            }).toString(this.CryptoJS.enc.Utf8)).buffer;
+        };
+        AesCbcCryptor.prototype.encryptFileData = function (data) {
+            return __awaiter(this, void 0, void 0, function () {
+                var key, iv;
+                var _a;
+                return __generator(this, function (_b) {
+                    switch (_b.label) {
+                        case 0: return [4 /*yield*/, this.getKey()];
+                        case 1:
+                            key = _b.sent();
+                            iv = this.getIv();
+                            _a = {};
+                            return [4 /*yield*/, crypto.subtle.encrypt({ name: this.algo, iv: iv }, key, data)];
+                        case 2: return [2 /*return*/, (_a.data = _b.sent(),
+                                _a.metadata = iv,
+                                _a)];
+                    }
+                });
+            });
+        };
+        AesCbcCryptor.prototype.decryptFileData = function (encryptedData) {
+            return __awaiter(this, void 0, void 0, function () {
+                var key;
+                return __generator(this, function (_a) {
+                    switch (_a.label) {
+                        case 0: return [4 /*yield*/, this.getKey()];
+                        case 1:
+                            key = _a.sent();
+                            return [2 /*return*/, crypto.subtle.decrypt({ name: this.algo, iv: encryptedData.metadata }, key, encryptedData.data)];
+                    }
+                });
+            });
+        };
+        AesCbcCryptor.prototype.bufferToWordArray = function (b) {
+            var wa = [];
+            var i;
+            for (i = 0; i < b.length; i += 1) {
+                wa[(i / 4) | 0] |= b[i] << (24 - 8 * i);
+            }
+            return this.CryptoJS.lib.WordArray.create(wa, b.length);
+        };
+        AesCbcCryptor.BLOCK_SIZE = 16;
+        AesCbcCryptor.encoder = new TextEncoder();
+        AesCbcCryptor.decoder = new TextDecoder();
+        return AesCbcCryptor;
+    }());
+
+    var CryptoModule = /** @class */ (function () {
+        function CryptoModule(cryptoModuleConfiguration) {
+            var _a;
+            this.defaultCryptor = cryptoModuleConfiguration.default;
+            this.cryptors = (_a = cryptoModuleConfiguration.cryptors) !== null && _a !== void 0 ? _a : [];
+        }
+        // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+        //@ts-ignore: type detection issue with old Config type assignment
+        CryptoModule.legacyCryptoModule = function (config) {
+            var _a;
+            return new this({
+                default: new LegacyCryptor({
+                    cipherKey: config.cipherKey,
+                    useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
+                }),
+                cryptors: [new AesCbcCryptor({ cipherKey: config.cipherKey })],
+            });
+        };
+        CryptoModule.aesCbcCryptoModule = function (config) {
+            var _a;
+            return new this({
+                default: new AesCbcCryptor({ cipherKey: config.cipherKey }),
+                cryptors: [
+                    new LegacyCryptor({
+                        cipherKey: config.cipherKey,
+                        useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
+                    }),
+                ],
+            });
+        };
+        CryptoModule.withDefaultCryptor = function (defaultCryptor) {
+            return new this({ default: defaultCryptor });
+        };
+        CryptoModule.prototype.getAllCryptors = function () {
+            return __spreadArray([this.defaultCryptor], __read(this.cryptors), false);
+        };
+        CryptoModule.prototype.encrypt = function (data) {
+            var encrypted = this.defaultCryptor.encrypt(data);
+            if (!encrypted.metadata)
+                return encrypted.data;
+            var headerData = this.getHeaderData(encrypted);
+            return this.concatArrayBuffer(headerData, encrypted.data);
+        };
+        CryptoModule.prototype.decrypt = function (data) {
+            var encryptedData = typeof data === 'string' ? decode$1(data) : data;
+            var header = CryptorHeader.tryParse(encryptedData);
+            var cryptor = this.getCryptor(header);
+            var metadata = header.length > 0
+                ? encryptedData.slice(header.length - header.metadataLength, header.length)
+                : null;
+            if (encryptedData.slice(header.length).byteLength <= 0)
+                throw new Error('decryption error. empty content');
+            return cryptor.decrypt({
+                data: encryptedData.slice(header.length),
+                metadata: metadata,
+            });
+        };
+        CryptoModule.prototype.encryptFile = function (file, File) {
+            return __awaiter(this, void 0, void 0, function () {
+                var fileData, encrypted;
+                return __generator(this, function (_a) {
+                    switch (_a.label) {
+                        case 0:
+                            if (this.defaultCryptor.identifier === CryptorHeader.LEGACY_IDENTIFIER)
+                                return [2 /*return*/, this.defaultCryptor.encryptFile(file, File)];
+                            fileData = this.getFileData(file.data);
+                            return [4 /*yield*/, this.defaultCryptor.encryptFileData(fileData)];
+                        case 1:
+                            encrypted = _a.sent();
+                            return [2 /*return*/, File.create({
+                                    name: file.name,
+                                    mimeType: 'application/octet-stream',
+                                    data: this.concatArrayBuffer(this.getHeaderData(encrypted), encrypted.data),
+                                })];
+                    }
+                });
+            });
+        };
+        CryptoModule.prototype.decryptFile = function (file, File) {
+            return __awaiter(this, void 0, void 0, function () {
+                var data, header, cryptor, fileData, metadata, _a, _b;
+                var _c;
+                return __generator(this, function (_d) {
+                    switch (_d.label) {
+                        case 0: return [4 /*yield*/, file.data.arrayBuffer()];
+                        case 1:
+                            data = _d.sent();
+                            header = CryptorHeader.tryParse(data);
+                            cryptor = this.getCryptor(header);
+                            if ((cryptor === null || cryptor === void 0 ? void 0 : cryptor.identifier) === CryptoModule.LEGACY_IDENTIFIER) {
+                                return [2 /*return*/, cryptor.decryptFile(file, File)];
+                            }
+                            fileData = this.getFileData(data);
+                            metadata = fileData.slice(header.length - header.metadataLength, header.length);
+                            _b = (_a = File).create;
+                            _c = {
+                                name: file.name
+                            };
+                            return [4 /*yield*/, this.defaultCryptor.decryptFileData({
+                                    data: data.slice(header.length),
+                                    metadata: metadata,
+                                })];
+                        case 2: return [2 /*return*/, _b.apply(_a, [(_c.data = _d.sent(),
+                                    _c)])];
+                    }
+                });
+            });
+        };
+        CryptoModule.prototype.getCryptor = function (header) {
+            if (header === '') {
+                var cryptor = this.getAllCryptors().find(function (c) { return c.identifier === ''; });
+                if (cryptor)
+                    return cryptor;
+                throw new Error('unknown cryptor error');
+            }
+            else if (header instanceof CryptorHeaderV1) {
+                return this.getCryptorFromId(header.identifier);
+            }
+        };
+        CryptoModule.prototype.getCryptorFromId = function (id) {
+            var cryptor = this.getAllCryptors().find(function (c) { return id === c.identifier; });
+            if (cryptor) {
+                return cryptor;
+            }
+            throw Error('unknown cryptor error');
+        };
+        CryptoModule.prototype.concatArrayBuffer = function (ab1, ab2) {
+            var tmp = new Uint8Array(ab1.byteLength + ab2.byteLength);
+            tmp.set(new Uint8Array(ab1), 0);
+            tmp.set(new Uint8Array(ab2), ab1.byteLength);
+            return tmp.buffer;
+        };
+        CryptoModule.prototype.getHeaderData = function (encrypted) {
+            if (!encrypted.metadata)
+                return;
+            var header = CryptorHeader.from(this.defaultCryptor.identifier, encrypted.metadata);
+            var headerData = new Uint8Array(header.length);
+            var pos = 0;
+            headerData.set(header.data, pos);
+            pos += header.length - encrypted.metadata.byteLength;
+            headerData.set(new Uint8Array(encrypted.metadata), pos);
+            return headerData.buffer;
+        };
+        CryptoModule.prototype.getFileData = function (input) {
+            if (input instanceof ArrayBuffer) {
+                return input;
+            }
+            if (typeof input === 'string') {
+                return CryptoModule.encoder.encode(input);
+            }
+            throw new Error('Cannot decrypt/encrypt file. In browsers file decryption supports only string or ArrayBuffer');
+        };
+        CryptoModule.LEGACY_IDENTIFIER = '';
+        CryptoModule.encoder = new TextEncoder();
+        CryptoModule.decoder = new TextDecoder();
+        return CryptoModule;
+    }());
+    // CryptorHeader Utility
+    var CryptorHeader = /** @class */ (function () {
+        function CryptorHeader() {
+        }
+        CryptorHeader.from = function (id, metadata) {
+            if (id === CryptorHeader.LEGACY_IDENTIFIER)
+                return;
+            return new CryptorHeaderV1(id, metadata.byteLength);
+        };
+        CryptorHeader.tryParse = function (data) {
+            var encryptedData = new Uint8Array(data);
+            var sentinel = '';
+            var version = null;
+            if (encryptedData.byteLength >= 4) {
+                sentinel = encryptedData.slice(0, 4);
+                if (this.decoder.decode(sentinel) !== CryptorHeader.SENTINEL)
+                    return '';
+            }
+            if (encryptedData.byteLength >= 5) {
+                version = encryptedData[4];
+            }
+            else {
+                throw new Error('decryption error. invalid header version');
+            }
+            if (version > CryptorHeader.MAX_VERSION)
+                throw new Error('unknown cryptor error');
+            var identifier = '';
+            var pos = 5 + CryptorHeader.IDENTIFIER_LENGTH;
+            if (encryptedData.byteLength >= pos) {
+                identifier = encryptedData.slice(5, pos);
+            }
+            else {
+                throw new Error('decryption error. invalid crypto identifier');
+            }
+            var metadataLength = null;
+            if (encryptedData.byteLength >= pos + 1) {
+                metadataLength = encryptedData[pos];
+            }
+            else {
+                throw new Error('decryption error. invalid metadata length');
+            }
+            pos += 1;
+            if (metadataLength === 255 && encryptedData.byteLength >= pos + 2) {
+                metadataLength = new Uint16Array(encryptedData.slice(pos, pos + 2)).reduce(function (acc, val) { return (acc << 8) + val; }, 0);
+                pos += 2;
+            }
+            return new CryptorHeaderV1(this.decoder.decode(identifier), metadataLength);
+        };
+        CryptorHeader.SENTINEL = 'PNED';
+        CryptorHeader.LEGACY_IDENTIFIER = '';
+        CryptorHeader.IDENTIFIER_LENGTH = 4;
+        CryptorHeader.VERSION = 1;
+        CryptorHeader.MAX_VERSION = 1;
+        CryptorHeader.decoder = new TextDecoder();
+        return CryptorHeader;
+    }());
+    // v1 CryptorHeader
+    var CryptorHeaderV1 = /** @class */ (function () {
+        function CryptorHeaderV1(id, metadataLength) {
+            this._identifier = id;
+            this._metadataLength = metadataLength;
+        }
+        Object.defineProperty(CryptorHeaderV1.prototype, "identifier", {
+            get: function () {
+                return this._identifier;
+            },
+            set: function (value) {
+                this._identifier = value;
+            },
+            enumerable: false,
+            configurable: true
+        });
+        Object.defineProperty(CryptorHeaderV1.prototype, "metadataLength", {
+            get: function () {
+                return this._metadataLength;
+            },
+            set: function (value) {
+                this._metadataLength = value;
+            },
+            enumerable: false,
+            configurable: true
+        });
+        Object.defineProperty(CryptorHeaderV1.prototype, "version", {
+            get: function () {
+                return CryptorHeader.VERSION;
+            },
+            enumerable: false,
+            configurable: true
+        });
+        Object.defineProperty(CryptorHeaderV1.prototype, "length", {
+            get: function () {
+                return (CryptorHeader.SENTINEL.length +
+                    1 +
+                    CryptorHeader.IDENTIFIER_LENGTH +
+                    (this.metadataLength < 255 ? 1 : 3) +
+                    this.metadataLength);
+            },
+            enumerable: false,
+            configurable: true
+        });
+        Object.defineProperty(CryptorHeaderV1.prototype, "data", {
+            get: function () {
+                var pos = 0;
+                var header = new Uint8Array(this.length);
+                var encoder = new TextEncoder();
+                header.set(encoder.encode(CryptorHeader.SENTINEL));
+                pos += CryptorHeader.SENTINEL.length;
+                header[pos] = this.version;
+                pos++;
+                if (this.identifier)
+                    header.set(encoder.encode(this.identifier), pos);
+                pos += CryptorHeader.IDENTIFIER_LENGTH;
+                var metadataLength = this.metadataLength;
+                if (metadataLength < 255) {
+                    header[pos] = metadataLength;
+                }
+                else {
+                    header.set([255, metadataLength >> 8, metadataLength & 0xff], pos);
+                }
+                return header;
+            },
+            enumerable: false,
+            configurable: true
+        });
+        CryptorHeaderV1.IDENTIFIER_LENGTH = 4;
+        CryptorHeaderV1.SENTINEL = 'PNED';
+        return CryptorHeaderV1;
+    }());
+
     /* eslint no-bitwise: ["error", { "allow": ["~", "&", ">>"] }] */
     function sendBeacon(url) {
         if (navigator && navigator.sendBeacon) {
             navigator.sendBeacon(url);
         }
@@ -12790,10 +13383,19 @@
                 postfile: postfile,
             });
             setup.cbor = new default_1$1(function (arrayBuffer) { return stringifyBufferKeys(CborReader.decode(arrayBuffer)); }, decode$1);
             setup.PubNubFile = PubNubFile;
             setup.cryptography = new WebCryptography();
+            setup.initCryptoModule = function (cryptoConfiguration) {
+                return new CryptoModule({
+                    default: new LegacyCryptor({
+                        cipherKey: cryptoConfiguration.cipherKey,
+                        useRandomIVs: cryptoConfiguration.useRandomIVs,
+                    }),
+                    cryptors: [new AesCbcCryptor({ cipherKey: cryptoConfiguration.cipherKey })],
+                });
+            };
             _this = _super.call(this, setup) || this;
             if (listenToBrowserNetworkEvents) {
                 // mount network events.
                 window.addEventListener('offline', function () {
                     _this.networkDownDetected();
@@ -12802,10 +13404,11 @@
                     _this.networkUpDetected();
                 });
             }
             return _this;
         }
+        default_1.CryptoModule = CryptoModule;
         return default_1;
     }(default_1$3));
 
     return default_1;
 
diff --git a/dist/web/pubnub.min.js b/dist/web/pubnub.min.js
index 87695308..4a3519b2 100644
--- a/dist/web/pubnub.min.js
+++ b/dist/web/pubnub.min.js
@@ -10,8 +10,8 @@
     AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
     INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
     LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
     OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
     PERFORMANCE OF THIS SOFTWARE.
-    ***************************************************************************** */var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};function t(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}var n=function(){return n=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)};function r(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function o(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))}function i(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,s])}}}function a(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function s(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function u(e,t,n){if(n||2===arguments.length)for(var r,o=0,i=t.length;o<i;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}var c="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function l(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})})),t}var p={exports:{}};!function(e){!function(t,n){var r=Math.pow(2,-24),o=Math.pow(2,32),i=Math.pow(2,53);var a={encode:function(e){var t,r=new ArrayBuffer(256),a=new DataView(r),s=0;function u(e){for(var n=r.byteLength,o=s+e;n<o;)n*=2;if(n!==r.byteLength){var i=a;r=new ArrayBuffer(n),a=new DataView(r);for(var u=s+3>>2,c=0;c<u;++c)a.setUint32(4*c,i.getUint32(4*c))}return t=e,a}function c(){s+=t}function l(e){c(u(1).setUint8(s,e))}function p(e){for(var t=u(e.length),n=0;n<e.length;++n)t.setUint8(s+n,e[n]);c()}function f(e,t){t<24?l(e<<5|t):t<256?(l(e<<5|24),l(t)):t<65536?(l(e<<5|25),function(e){c(u(2).setUint16(s,e))}(t)):t<4294967296?(l(e<<5|26),function(e){c(u(4).setUint32(s,e))}(t)):(l(e<<5|27),function(e){var t=e%o,n=(e-t)/o,r=u(8);r.setUint32(s,n),r.setUint32(s+4,t),c()}(t))}if(function e(t){var r;if(!1===t)return l(244);if(!0===t)return l(245);if(null===t)return l(246);if(t===n)return l(247);switch(typeof t){case"number":if(Math.floor(t)===t){if(0<=t&&t<=i)return f(0,t);if(-i<=t&&t<0)return f(1,-(t+1))}return l(251),function(e){c(u(8).setFloat64(s,e))}(t);case"string":var o=[];for(r=0;r<t.length;++r){var a=t.charCodeAt(r);a<128?o.push(a):a<2048?(o.push(192|a>>6),o.push(128|63&a)):a<55296?(o.push(224|a>>12),o.push(128|a>>6&63),o.push(128|63&a)):(a=(1023&a)<<10,a|=1023&t.charCodeAt(++r),a+=65536,o.push(240|a>>18),o.push(128|a>>12&63),o.push(128|a>>6&63),o.push(128|63&a))}return f(3,o.length),p(o);default:var h;if(Array.isArray(t))for(f(4,h=t.length),r=0;r<h;++r)e(t[r]);else if(t instanceof Uint8Array)f(2,t.length),p(t);else{var d=Object.keys(t);for(f(5,h=d.length),r=0;r<h;++r){var y=d[r];e(y),e(t[y])}}}}(e),"slice"in r)return r.slice(0,s);for(var h=new ArrayBuffer(s),d=new DataView(h),y=0;y<s;++y)d.setUint8(y,a.getUint8(y));return h},decode:function(e,t,i){var a=new DataView(e),s=0;function u(e,t){return s+=t,e}function c(t){return u(new Uint8Array(e,s,t),t)}function l(){return u(a.getUint8(s),1)}function p(){return u(a.getUint16(s),2)}function f(){return u(a.getUint32(s),4)}function h(){return 255===a.getUint8(s)&&(s+=1,!0)}function d(e){if(e<24)return e;if(24===e)return l();if(25===e)return p();if(26===e)return f();if(27===e)return f()*o+f();if(31===e)return-1;throw"Invalid length encoding"}function y(e){var t=l();if(255===t)return-1;var n=d(31&t);if(n<0||t>>5!==e)throw"Invalid indefinite length element";return n}function g(e,t){for(var n=0;n<t;++n){var r=l();128&r&&(r<224?(r=(31&r)<<6|63&l(),t-=1):r<240?(r=(15&r)<<12|(63&l())<<6|63&l(),t-=2):(r=(15&r)<<18|(63&l())<<12|(63&l())<<6|63&l(),t-=3)),r<65536?e.push(r):(r-=65536,e.push(55296|r>>10),e.push(56320|1023&r))}}"function"!=typeof t&&(t=function(e){return e}),"function"!=typeof i&&(i=function(){return n});var b=function e(){var o,f,b=l(),m=b>>5,v=31&b;if(7===m)switch(v){case 25:return function(){var e=new ArrayBuffer(4),t=new DataView(e),n=p(),o=32768&n,i=31744&n,a=1023&n;if(31744===i)i=261120;else if(0!==i)i+=114688;else if(0!==a)return a*r;return t.setUint32(0,o<<16|i<<13|a<<13),t.getFloat32(0)}();case 26:return u(a.getFloat32(s),4);case 27:return u(a.getFloat64(s),8)}if((f=d(v))<0&&(m<2||6<m))throw"Invalid length";switch(m){case 0:return f;case 1:return-1-f;case 2:if(f<0){for(var _=[],O=0;(f=y(m))>=0;)O+=f,_.push(c(f));var S=new Uint8Array(O),P=0;for(o=0;o<_.length;++o)S.set(_[o],P),P+=_[o].length;return S}return c(f);case 3:var w=[];if(f<0)for(;(f=y(m))>=0;)g(w,f);else g(w,f);return String.fromCharCode.apply(null,w);case 4:var k;if(f<0)for(k=[];!h();)k.push(e());else for(k=new Array(f),o=0;o<f;++o)k[o]=e();return k;case 5:var T={};for(o=0;o<f||f<0&&!h();++o){T[e()]=e()}return T;case 6:return t(e(),f);case 7:switch(f){case 20:return!1;case 21:return!0;case 22:return null;case 23:return n;default:return i(f)}}}();if(s!==e.byteLength)throw"Remaining bytes";return b}};e.exports?e.exports=a:t.CBOR||(t.CBOR=a)}(c)}(p);var f=p.exports,h={exports:{}};
+    ***************************************************************************** */var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};function t(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}var n=function(){return n=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)};function r(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function o(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))}function i(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,s])}}}function a(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function s(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function u(e,t,n){if(n||2===arguments.length)for(var r,o=0,i=t.length;o<i;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}var c="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function l(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})})),t}var p={exports:{}};!function(e){!function(t,n){var r=Math.pow(2,-24),o=Math.pow(2,32),i=Math.pow(2,53);var a={encode:function(e){var t,r=new ArrayBuffer(256),a=new DataView(r),s=0;function u(e){for(var n=r.byteLength,o=s+e;n<o;)n*=2;if(n!==r.byteLength){var i=a;r=new ArrayBuffer(n),a=new DataView(r);for(var u=s+3>>2,c=0;c<u;++c)a.setUint32(4*c,i.getUint32(4*c))}return t=e,a}function c(){s+=t}function l(e){c(u(1).setUint8(s,e))}function p(e){for(var t=u(e.length),n=0;n<e.length;++n)t.setUint8(s+n,e[n]);c()}function f(e,t){t<24?l(e<<5|t):t<256?(l(e<<5|24),l(t)):t<65536?(l(e<<5|25),function(e){c(u(2).setUint16(s,e))}(t)):t<4294967296?(l(e<<5|26),function(e){c(u(4).setUint32(s,e))}(t)):(l(e<<5|27),function(e){var t=e%o,n=(e-t)/o,r=u(8);r.setUint32(s,n),r.setUint32(s+4,t),c()}(t))}if(function e(t){var r;if(!1===t)return l(244);if(!0===t)return l(245);if(null===t)return l(246);if(t===n)return l(247);switch(typeof t){case"number":if(Math.floor(t)===t){if(0<=t&&t<=i)return f(0,t);if(-i<=t&&t<0)return f(1,-(t+1))}return l(251),function(e){c(u(8).setFloat64(s,e))}(t);case"string":var o=[];for(r=0;r<t.length;++r){var a=t.charCodeAt(r);a<128?o.push(a):a<2048?(o.push(192|a>>6),o.push(128|63&a)):a<55296?(o.push(224|a>>12),o.push(128|a>>6&63),o.push(128|63&a)):(a=(1023&a)<<10,a|=1023&t.charCodeAt(++r),a+=65536,o.push(240|a>>18),o.push(128|a>>12&63),o.push(128|a>>6&63),o.push(128|63&a))}return f(3,o.length),p(o);default:var h;if(Array.isArray(t))for(f(4,h=t.length),r=0;r<h;++r)e(t[r]);else if(t instanceof Uint8Array)f(2,t.length),p(t);else{var d=Object.keys(t);for(f(5,h=d.length),r=0;r<h;++r){var y=d[r];e(y),e(t[y])}}}}(e),"slice"in r)return r.slice(0,s);for(var h=new ArrayBuffer(s),d=new DataView(h),y=0;y<s;++y)d.setUint8(y,a.getUint8(y));return h},decode:function(e,t,i){var a=new DataView(e),s=0;function u(e,t){return s+=t,e}function c(t){return u(new Uint8Array(e,s,t),t)}function l(){return u(a.getUint8(s),1)}function p(){return u(a.getUint16(s),2)}function f(){return u(a.getUint32(s),4)}function h(){return 255===a.getUint8(s)&&(s+=1,!0)}function d(e){if(e<24)return e;if(24===e)return l();if(25===e)return p();if(26===e)return f();if(27===e)return f()*o+f();if(31===e)return-1;throw"Invalid length encoding"}function y(e){var t=l();if(255===t)return-1;var n=d(31&t);if(n<0||t>>5!==e)throw"Invalid indefinite length element";return n}function g(e,t){for(var n=0;n<t;++n){var r=l();128&r&&(r<224?(r=(31&r)<<6|63&l(),t-=1):r<240?(r=(15&r)<<12|(63&l())<<6|63&l(),t-=2):(r=(15&r)<<18|(63&l())<<12|(63&l())<<6|63&l(),t-=3)),r<65536?e.push(r):(r-=65536,e.push(55296|r>>10),e.push(56320|1023&r))}}"function"!=typeof t&&(t=function(e){return e}),"function"!=typeof i&&(i=function(){return n});var b=function e(){var o,f,b=l(),v=b>>5,m=31&b;if(7===v)switch(m){case 25:return function(){var e=new ArrayBuffer(4),t=new DataView(e),n=p(),o=32768&n,i=31744&n,a=1023&n;if(31744===i)i=261120;else if(0!==i)i+=114688;else if(0!==a)return a*r;return t.setUint32(0,o<<16|i<<13|a<<13),t.getFloat32(0)}();case 26:return u(a.getFloat32(s),4);case 27:return u(a.getFloat64(s),8)}if((f=d(m))<0&&(v<2||6<v))throw"Invalid length";switch(v){case 0:return f;case 1:return-1-f;case 2:if(f<0){for(var _=[],O=0;(f=y(v))>=0;)O+=f,_.push(c(f));var S=new Uint8Array(O),P=0;for(o=0;o<_.length;++o)S.set(_[o],P),P+=_[o].length;return S}return c(f);case 3:var w=[];if(f<0)for(;(f=y(v))>=0;)g(w,f);else g(w,f);return String.fromCharCode.apply(null,w);case 4:var E;if(f<0)for(E=[];!h();)E.push(e());else for(E=new Array(f),o=0;o<f;++o)E[o]=e();return E;case 5:var T={};for(o=0;o<f||f<0&&!h();++o){T[e()]=e()}return T;case 6:return t(e(),f);case 7:switch(f){case 20:return!1;case 21:return!0;case 22:return null;case 23:return n;default:return i(f)}}}();if(s!==e.byteLength)throw"Remaining bytes";return b}};e.exports?e.exports=a:t.CBOR||(t.CBOR=a)}(c)}(p);var f=p.exports,h={exports:{}};
 /*! lil-uuid - v0.1 - MIT License - https://github.com/lil-js/uuid */
-!function(e,t){!function(e){var t="0.1.0",n={3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,all:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i};function r(){var e,t,n="";for(e=0;e<32;e++)t=16*Math.random()|0,8!==e&&12!==e&&16!==e&&20!==e||(n+="-"),n+=(12===e?4:16===e?3&t|8:t).toString(16);return n}function o(e,t){var r=n[t||"all"];return r&&r.test(e)||!1}r.isUUID=o,r.VERSION=t,e.uuid=r,e.isUUID=o}(t),null!==e&&(e.exports=t.uuid)}(h,h.exports);var d=h.exports,y=function(){return d.uuid?d.uuid():d()},g=function(){function e(e){var t,n,r,o=e.setup;if(this._PNSDKSuffix={},this.instanceId="pn-".concat(y()),this.secretKey=o.secretKey||o.secret_key,this.subscribeKey=o.subscribeKey||o.subscribe_key,this.publishKey=o.publishKey||o.publish_key,this.sdkName=o.sdkName,this.sdkFamily=o.sdkFamily,this.partnerId=o.partnerId,this.setAuthKey(o.authKey),this.setCipherKey(o.cipherKey),this.setFilterExpression(o.filterExpression),"string"!=typeof o.origin&&!Array.isArray(o.origin)&&void 0!==o.origin)throw new Error("Origin must be either undefined, a string or a list of strings.");if(this.origin=o.origin||Array.from({length:20},(function(e,t){return"ps".concat(t+1,".pndsn.com")})),this.secure=o.ssl||!1,this.restore=o.restore||!1,this.proxy=o.proxy,this.keepAlive=o.keepAlive,this.keepAliveSettings=o.keepAliveSettings,this.autoNetworkDetection=o.autoNetworkDetection||!1,this.dedupeOnSubscribe=o.dedupeOnSubscribe||!1,this.maximumCacheSize=o.maximumCacheSize||100,this.customEncrypt=o.customEncrypt,this.customDecrypt=o.customDecrypt,this.fileUploadPublishRetryLimit=null!==(t=o.fileUploadPublishRetryLimit)&&void 0!==t?t:5,this.useRandomIVs=null===(n=o.useRandomIVs)||void 0===n||n,this.enableSubscribeBeta=null!==(r=o.enableSubscribeBeta)&&void 0!==r&&r,"undefined"!=typeof location&&"https:"===location.protocol&&(this.secure=!0),this.logVerbosity=o.logVerbosity||!1,this.suppressLeaveEvents=o.suppressLeaveEvents||!1,this.announceFailedHeartbeats=o.announceFailedHeartbeats||!0,this.announceSuccessfulHeartbeats=o.announceSuccessfulHeartbeats||!1,this.useInstanceId=o.useInstanceId||!1,this.useRequestId=o.useRequestId||!1,this.requestMessageCountThreshold=o.requestMessageCountThreshold,this.setTransactionTimeout(o.transactionalRequestTimeout||15e3),this.setSubscribeTimeout(o.subscribeRequestTimeout||31e4),this.setSendBeaconConfig(o.useSendBeacon||!0),o.presenceTimeout?this.setPresenceTimeout(o.presenceTimeout):this._presenceTimeout=300,null!=o.heartbeatInterval&&this.setHeartbeatInterval(o.heartbeatInterval),"string"==typeof o.userId){if("string"==typeof o.uuid)throw new Error("Only one of the following configuration options has to be provided: `uuid` or `userId`");this.setUserId(o.userId)}else{if("string"!=typeof o.uuid)throw new Error("One of the following configuration options has to be provided: `uuid` or `userId`");this.setUUID(o.uuid)}}return e.prototype.getAuthKey=function(){return this.authKey},e.prototype.setAuthKey=function(e){return this.authKey=e,this},e.prototype.setCipherKey=function(e){return this.cipherKey=e,this},e.prototype.getUUID=function(){return this.UUID},e.prototype.setUUID=function(e){if(!e||"string"!=typeof e||0===e.trim().length)throw new Error("Missing uuid parameter. Provide a valid string uuid");return this.UUID=e,this},e.prototype.getUserId=function(){return this.UUID},e.prototype.setUserId=function(e){if(!e||"string"!=typeof e||0===e.trim().length)throw new Error("Missing or invalid userId parameter. Provide a valid string userId");return this.UUID=e,this},e.prototype.getFilterExpression=function(){return this.filterExpression},e.prototype.setFilterExpression=function(e){return this.filterExpression=e,this},e.prototype.getPresenceTimeout=function(){return this._presenceTimeout},e.prototype.setPresenceTimeout=function(e){return e>=20?this._presenceTimeout=e:(this._presenceTimeout=20,console.log("WARNING: Presence timeout is less than the minimum. Using minimum value: ",this._presenceTimeout)),this.setHeartbeatInterval(this._presenceTimeout/2-1),this},e.prototype.setProxy=function(e){this.proxy=e},e.prototype.getHeartbeatInterval=function(){return this._heartbeatInterval},e.prototype.setHeartbeatInterval=function(e){return this._heartbeatInterval=e,this},e.prototype.getSubscribeTimeout=function(){return this._subscribeRequestTimeout},e.prototype.setSubscribeTimeout=function(e){return this._subscribeRequestTimeout=e,this},e.prototype.getTransactionTimeout=function(){return this._transactionalRequestTimeout},e.prototype.setTransactionTimeout=function(e){return this._transactionalRequestTimeout=e,this},e.prototype.isSendBeaconEnabled=function(){return this._useSendBeacon},e.prototype.setSendBeaconConfig=function(e){return this._useSendBeacon=e,this},e.prototype.getVersion=function(){return"7.3.3"},e.prototype._addPnsdkSuffix=function(e,t){this._PNSDKSuffix[e]=t},e.prototype._getPnsdkSuffix=function(e){var t=this;return Object.keys(this._PNSDKSuffix).reduce((function(n,r){return n+e+t._PNSDKSuffix[r]}),"")},e}();function b(e){var t=e.replace(/==?$/,""),n=Math.floor(t.length/4*3),r=new ArrayBuffer(n),o=new Uint8Array(r),i=0;function a(){var e=t.charAt(i++),n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(e);if(-1===n)throw new Error("Illegal character at ".concat(i,": ").concat(t.charAt(i-1)));return n}for(var s=0;s<n;s+=3){var u=a(),c=a(),l=a(),p=a(),f=(63&u)<<2|c>>4,h=(15&c)<<4|l>>2,d=(3&l)<<6|p>>0;o[s]=f,64!=l&&(o[s+1]=h),64!=p&&(o[s+2]=d)}return r}var m,v,_,O,S,P=P||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},a=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;o<e;o++)t[r+o>>>2]|=(n[o>>>2]>>>24-o%4*8&255)<<24-(r+o)%4*8;else if(65535<n.length)for(o=0;o<e;o+=4)t[r+o>>>2]=n[o>>>2];else t.push.apply(t,n);return this.sigBytes+=e,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r<t;r+=4)n.push(4294967296*e.random()|0);return new a.init(n,t)}}),s=n.enc={},u=s.Hex={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r<e;r++){var o=t[r>>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r+=2)n[r>>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},c=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r<e;r++)n.push(String.fromCharCode(t[r>>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r++)n[r>>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},p=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,o=n.sigBytes,i=this.blockSize,s=o/(4*i);if(t=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,o=e.min(4*t,o),t){for(var u=0;u<t;u+=i)this._doProcessBlock(r,u);u=r.splice(0,t),n.sigBytes-=o}return new a.init(u,o)},clone:function(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});r.Hasher=p.extend({cfg:i.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){p.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new f.HMAC.init(e,n).finalize(t)}}});var f=n.algo={};return n}(Math);!function(e){for(var t=P,n=(o=t.lib).WordArray,r=o.Hasher,o=t.algo,i=[],a=[],s=function(e){return 4294967296*(e-(0|e))|0},u=2,c=0;64>c;){var l;e:{l=u;for(var p=e.sqrt(l),f=2;f<=p;f++)if(!(l%f)){l=!1;break e}l=!0}l&&(8>c&&(i[c]=s(e.pow(u,.5))),a[c]=s(e.pow(u,1/3)),c++),u++}var h=[];o=o.SHA256=r.extend({_doReset:function(){this._hash=new n.init(i.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],s=n[3],u=n[4],c=n[5],l=n[6],p=n[7],f=0;64>f;f++){if(16>f)h[f]=0|e[t+f];else{var d=h[f-15],y=h[f-2];h[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+h[f-7]+((y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10)+h[f-16]}d=p+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[f]+h[f],y=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&o^r&i^o&i),p=l,l=c,c=u,u=s+d|0,s=i,i=o,o=r,r=d+y|0}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+p|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;return n[o>>>5]|=128<<24-o%32,n[14+(o+64>>>9<<4)]=e.floor(r/4294967296),n[15+(o+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=r.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=r._createHelper(o),t.HmacSHA256=r._createHmacHelper(o)}(Math),v=(m=P).enc.Utf8,m.algo.HMAC=m.lib.Base.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=v.parse(t));var n=e.blockSize,r=4*n;t.sigBytes>r&&(t=e.finalize(t)),t.clamp();for(var o=this._oKey=t.clone(),i=this._iKey=t.clone(),a=o.words,s=i.words,u=0;u<n;u++)a[u]^=1549556828,s[u]^=909522486;o.sigBytes=i.sigBytes=r,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var t=this._hasher;return e=t.finalize(e),t.reset(),t.finalize(this._oKey.clone().concat(e))}}),O=(_=P).lib.WordArray,_.enc.Base64={stringify:function(e){var t=e.words,n=e.sigBytes,r=this._map;e.clamp(),e=[];for(var o=0;o<n;o+=3)for(var i=(t[o>>>2]>>>24-o%4*8&255)<<16|(t[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|t[o+2>>>2]>>>24-(o+2)%4*8&255,a=0;4>a&&o+.75*a<n;a++)e.push(r.charAt(i>>>6*(3-a)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var t=e.length,n=this._map;(r=n.charAt(64))&&-1!=(r=e.indexOf(r))&&(t=r);for(var r=[],o=0,i=0;i<t;i++)if(i%4){var a=n.indexOf(e.charAt(i-1))<<i%4*2,s=n.indexOf(e.charAt(i))>>>6-i%4*2;r[o>>>2]|=(a|s)<<24-o%4*8,o++}return O.create(r,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},function(e){function t(e,t,n,r,o,i,a){return((e=e+(t&n|~t&r)+o+a)<<i|e>>>32-i)+t}function n(e,t,n,r,o,i,a){return((e=e+(t&r|n&~r)+o+a)<<i|e>>>32-i)+t}function r(e,t,n,r,o,i,a){return((e=e+(t^n^r)+o+a)<<i|e>>>32-i)+t}function o(e,t,n,r,o,i,a){return((e=e+(n^(t|~r))+o+a)<<i|e>>>32-i)+t}for(var i=P,a=(u=i.lib).WordArray,s=u.Hasher,u=i.algo,c=[],l=0;64>l;l++)c[l]=4294967296*e.abs(e.sin(l+1))|0;u=u.MD5=s.extend({_doReset:function(){this._hash=new a.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,i){for(var a=0;16>a;a++){var s=e[u=i+a];e[u]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}a=this._hash.words;var u=e[i+0],l=(s=e[i+1],e[i+2]),p=e[i+3],f=e[i+4],h=e[i+5],d=e[i+6],y=e[i+7],g=e[i+8],b=e[i+9],m=e[i+10],v=e[i+11],_=e[i+12],O=e[i+13],S=e[i+14],P=e[i+15],w=t(w=a[0],E=a[1],T=a[2],k=a[3],u,7,c[0]),k=t(k,w,E,T,s,12,c[1]),T=t(T,k,w,E,l,17,c[2]),E=t(E,T,k,w,p,22,c[3]);w=t(w,E,T,k,f,7,c[4]),k=t(k,w,E,T,h,12,c[5]),T=t(T,k,w,E,d,17,c[6]),E=t(E,T,k,w,y,22,c[7]),w=t(w,E,T,k,g,7,c[8]),k=t(k,w,E,T,b,12,c[9]),T=t(T,k,w,E,m,17,c[10]),E=t(E,T,k,w,v,22,c[11]),w=t(w,E,T,k,_,7,c[12]),k=t(k,w,E,T,O,12,c[13]),T=t(T,k,w,E,S,17,c[14]),w=n(w,E=t(E,T,k,w,P,22,c[15]),T,k,s,5,c[16]),k=n(k,w,E,T,d,9,c[17]),T=n(T,k,w,E,v,14,c[18]),E=n(E,T,k,w,u,20,c[19]),w=n(w,E,T,k,h,5,c[20]),k=n(k,w,E,T,m,9,c[21]),T=n(T,k,w,E,P,14,c[22]),E=n(E,T,k,w,f,20,c[23]),w=n(w,E,T,k,b,5,c[24]),k=n(k,w,E,T,S,9,c[25]),T=n(T,k,w,E,p,14,c[26]),E=n(E,T,k,w,g,20,c[27]),w=n(w,E,T,k,O,5,c[28]),k=n(k,w,E,T,l,9,c[29]),T=n(T,k,w,E,y,14,c[30]),w=r(w,E=n(E,T,k,w,_,20,c[31]),T,k,h,4,c[32]),k=r(k,w,E,T,g,11,c[33]),T=r(T,k,w,E,v,16,c[34]),E=r(E,T,k,w,S,23,c[35]),w=r(w,E,T,k,s,4,c[36]),k=r(k,w,E,T,f,11,c[37]),T=r(T,k,w,E,y,16,c[38]),E=r(E,T,k,w,m,23,c[39]),w=r(w,E,T,k,O,4,c[40]),k=r(k,w,E,T,u,11,c[41]),T=r(T,k,w,E,p,16,c[42]),E=r(E,T,k,w,d,23,c[43]),w=r(w,E,T,k,b,4,c[44]),k=r(k,w,E,T,_,11,c[45]),T=r(T,k,w,E,P,16,c[46]),w=o(w,E=r(E,T,k,w,l,23,c[47]),T,k,u,6,c[48]),k=o(k,w,E,T,y,10,c[49]),T=o(T,k,w,E,S,15,c[50]),E=o(E,T,k,w,h,21,c[51]),w=o(w,E,T,k,_,6,c[52]),k=o(k,w,E,T,p,10,c[53]),T=o(T,k,w,E,m,15,c[54]),E=o(E,T,k,w,s,21,c[55]),w=o(w,E,T,k,g,6,c[56]),k=o(k,w,E,T,P,10,c[57]),T=o(T,k,w,E,d,15,c[58]),E=o(E,T,k,w,O,21,c[59]),w=o(w,E,T,k,f,6,c[60]),k=o(k,w,E,T,v,10,c[61]),T=o(T,k,w,E,l,15,c[62]),E=o(E,T,k,w,b,21,c[63]);a[0]=a[0]+w|0,a[1]=a[1]+E|0,a[2]=a[2]+T|0,a[3]=a[3]+k|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;n[o>>>5]|=128<<24-o%32;var i=e.floor(r/4294967296);for(n[15+(o+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),n[14+(o+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),n=(t=this._hash).words,r=0;4>r;r++)o=n[r],n[r]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);return t},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}}),i.MD5=s._createHelper(u),i.HmacMD5=s._createHmacHelper(u)}(Math),function(){var e,t=P,n=(e=t.lib).Base,r=e.WordArray,o=(e=t.algo).EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:e.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=(s=this.cfg).hasher.create(),o=r.create(),i=o.words,a=s.keySize,s=s.iterations;i.length<a;){u&&n.update(u);var u=n.update(e).finalize(t);n.reset();for(var c=1;c<s;c++)u=n.finalize(u),n.reset();o.concat(u)}return o.sigBytes=4*a,o}});t.EvpKDF=function(e,t,n){return o.create(n).compute(e,t)}}(),P.lib.Cipher||function(e){var t=(h=P).lib,n=t.Base,r=t.WordArray,o=t.BufferedBlockAlgorithm,i=h.enc.Base64,a=h.algo.EvpKDF,s=t.Cipher=o.extend({cfg:n.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,n){this.cfg=this.cfg.extend(n),this._xformMode=e,this._key=t,this.reset()},reset:function(){o.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(t,n,r){return("string"==typeof n?d:f).encrypt(e,t,n,r)},decrypt:function(t,n,r){return("string"==typeof n?d:f).decrypt(e,t,n,r)}}}});t.StreamCipher=s.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var u=h.mode={},c=function(e,t,n){var r=this._iv;r?this._iv=undefined:r=this._prevBlock;for(var o=0;o<n;o++)e[t+o]^=r[o]},l=(t.BlockCipherMode=n.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}})).extend();l.Encryptor=l.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize;c.call(this,e,t,r),n.encryptBlock(e,t),this._prevBlock=e.slice(t,t+r)}}),l.Decryptor=l.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=e.slice(t,t+r);n.decryptBlock(e,t),c.call(this,e,t,r),this._prevBlock=o}}),u=u.CBC=l,l=(h.pad={}).Pkcs7={pad:function(e,t){for(var n,o=(n=(n=4*t)-e.sigBytes%n)<<24|n<<16|n<<8|n,i=[],a=0;a<n;a+=4)i.push(o);n=r.create(i,n),e.concat(n)},unpad:function(e){e.sigBytes-=255&e.words[e.sigBytes-1>>>2]}},t.BlockCipher=s.extend({cfg:s.cfg.extend({mode:u,padding:l}),reset:function(){s.reset.call(this);var e=(t=this.cfg).iv,t=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=t.createEncryptor;else n=t.createDecryptor,this._minBufferSize=1;this._mode=n.call(t,this,e&&e.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var p=t.CipherParams=n.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),f=(u=(h.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return((e=e.salt)?r.create([1398893684,1701076831]).concat(e).concat(t):t).toString(i)},parse:function(e){var t=(e=i.parse(e)).words;if(1398893684==t[0]&&1701076831==t[1]){var n=r.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return p.create({ciphertext:e,salt:n})}},t.SerializableCipher=n.extend({cfg:n.extend({format:u}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var o=e.createEncryptor(n,r);return t=o.finalize(t),o=o.cfg,p.create({ciphertext:t,key:n,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:r.format})},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),e.createDecryptor(n,r).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}})),h=(h.kdf={}).OpenSSL={execute:function(e,t,n,o){return o||(o=r.random(8)),e=a.create({keySize:t+n}).compute(e,o),n=r.create(e.words.slice(t),4*n),e.sigBytes=4*t,p.create({key:e,iv:n,salt:o})}},d=t.PasswordBasedCipher=f.extend({cfg:f.cfg.extend({kdf:h}),encrypt:function(e,t,n,r){return n=(r=this.cfg.extend(r)).kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,(e=f.encrypt.call(this,e,t,n.key,r)).mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,f.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=P,t=e.lib.BlockCipher,n=e.algo,r=[],o=[],i=[],a=[],s=[],u=[],c=[],l=[],p=[],f=[],h=[],d=0;256>d;d++)h[d]=128>d?d<<1:d<<1^283;var y=0,g=0;for(d=0;256>d;d++){var b=(b=g^g<<1^g<<2^g<<3^g<<4)>>>8^255&b^99;r[y]=b,o[b]=y;var m=h[y],v=h[m],_=h[v],O=257*h[b]^16843008*b;i[y]=O<<24|O>>>8,a[y]=O<<16|O>>>16,s[y]=O<<8|O>>>24,u[y]=O,O=16843009*_^65537*v^257*m^16843008*y,c[b]=O<<24|O>>>8,l[b]=O<<16|O>>>16,p[b]=O<<8|O>>>24,f[b]=O,y?(y=m^h[h[h[_^m]]],g^=h[h[g]]):y=g=1}var S=[0,1,2,4,8,16,32,64,128,27,54];n=n.AES=t.extend({_doReset:function(){for(var e=(n=this._key).words,t=n.sigBytes/4,n=4*((this._nRounds=t+6)+1),o=this._keySchedule=[],i=0;i<n;i++)if(i<t)o[i]=e[i];else{var a=o[i-1];i%t?6<t&&4==i%t&&(a=r[a>>>24]<<24|r[a>>>16&255]<<16|r[a>>>8&255]<<8|r[255&a]):(a=r[(a=a<<8|a>>>24)>>>24]<<24|r[a>>>16&255]<<16|r[a>>>8&255]<<8|r[255&a],a^=S[i/t|0]<<24),o[i]=o[i-t]^a}for(e=this._invKeySchedule=[],t=0;t<n;t++)i=n-t,a=t%4?o[i]:o[i-4],e[t]=4>t||4>=i?a:c[r[a>>>24]]^l[r[a>>>16&255]]^p[r[a>>>8&255]]^f[r[255&a]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,i,a,s,u,r)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,c,l,p,f,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,o,i,a,s){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],p=e[t+2]^n[2],f=e[t+3]^n[3],h=4,d=1;d<u;d++){var y=r[c>>>24]^o[l>>>16&255]^i[p>>>8&255]^a[255&f]^n[h++],g=r[l>>>24]^o[p>>>16&255]^i[f>>>8&255]^a[255&c]^n[h++],b=r[p>>>24]^o[f>>>16&255]^i[c>>>8&255]^a[255&l]^n[h++];f=r[f>>>24]^o[c>>>16&255]^i[l>>>8&255]^a[255&p]^n[h++],c=y,l=g,p=b}y=(s[c>>>24]<<24|s[l>>>16&255]<<16|s[p>>>8&255]<<8|s[255&f])^n[h++],g=(s[l>>>24]<<24|s[p>>>16&255]<<16|s[f>>>8&255]<<8|s[255&c])^n[h++],b=(s[p>>>24]<<24|s[f>>>16&255]<<16|s[c>>>8&255]<<8|s[255&l])^n[h++],f=(s[f>>>24]<<24|s[c>>>16&255]<<16|s[l>>>8&255]<<8|s[255&p])^n[h++],e[t]=y,e[t+1]=g,e[t+2]=b,e[t+3]=f},keySize:8});e.AES=t._createHelper(n)}(),P.mode.ECB=((S=P.lib.BlockCipherMode.extend()).Encryptor=S.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),S.Decryptor=S.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),S);var w=P;function k(e){var t,n=[];for(t=0;t<e.length;t+=1)n[t/4|0]|=e[t]<<24-8*t;return w.lib.WordArray.create(n,e.length)}var T=function(){function e(e){var t=e.config;this._config=t,this._iv="0123456789012345",this._allowedKeyEncodings=["hex","utf8","base64","binary"],this._allowedKeyLengths=[128,256],this._allowedModes=["ecb","cbc"],this._defaultOptions={encryptKey:!0,keyEncoding:"utf8",keyLength:256,mode:"cbc"}}return e.prototype.HMACSHA256=function(e){return w.HmacSHA256(e,this._config.secretKey).toString(w.enc.Base64)},e.prototype.SHA256=function(e){return w.SHA256(e).toString(w.enc.Hex)},e.prototype._parseOptions=function(e){var t=e||{};return t.hasOwnProperty("encryptKey")||(t.encryptKey=this._defaultOptions.encryptKey),t.hasOwnProperty("keyEncoding")||(t.keyEncoding=this._defaultOptions.keyEncoding),t.hasOwnProperty("keyLength")||(t.keyLength=this._defaultOptions.keyLength),t.hasOwnProperty("mode")||(t.mode=this._defaultOptions.mode),-1===this._allowedKeyEncodings.indexOf(t.keyEncoding.toLowerCase())&&(t.keyEncoding=this._defaultOptions.keyEncoding),-1===this._allowedKeyLengths.indexOf(parseInt(t.keyLength,10))&&(t.keyLength=this._defaultOptions.keyLength),-1===this._allowedModes.indexOf(t.mode.toLowerCase())&&(t.mode=this._defaultOptions.mode),t},e.prototype._decodeKey=function(e,t){return"base64"===t.keyEncoding?w.enc.Base64.parse(e):"hex"===t.keyEncoding?w.enc.Hex.parse(e):e},e.prototype._getPaddedKey=function(e,t){return e=this._decodeKey(e,t),t.encryptKey?w.enc.Utf8.parse(this.SHA256(e).slice(0,32)):e},e.prototype._getMode=function(e){return"ecb"===e.mode?w.mode.ECB:w.mode.CBC},e.prototype._getIV=function(e){return"cbc"===e.mode?w.enc.Utf8.parse(this._iv):null},e.prototype._getRandomIV=function(){return w.lib.WordArray.random(16)},e.prototype.encrypt=function(e,t,n){return this._config.customEncrypt?this._config.customEncrypt(e):this.pnEncrypt(e,t,n)},e.prototype.decrypt=function(e,t,n){return this._config.customDecrypt?this._config.customDecrypt(e):this.pnDecrypt(e,t,n)},e.prototype.pnEncrypt=function(e,t,n){if(!t&&!this._config.cipherKey)return e;n=this._parseOptions(n);var r=this._getMode(n),o=this._getPaddedKey(t||this._config.cipherKey,n);if(this._config.useRandomIVs){var i=this._getRandomIV(),a=w.AES.encrypt(e,o,{iv:i,mode:r}).ciphertext;return i.clone().concat(a.clone()).toString(w.enc.Base64)}var s=this._getIV(n);return w.AES.encrypt(e,o,{iv:s,mode:r}).ciphertext.toString(w.enc.Base64)||e},e.prototype.pnDecrypt=function(e,t,n){if(!t&&!this._config.cipherKey)return e;n=this._parseOptions(n);var r=this._getMode(n),o=this._getPaddedKey(t||this._config.cipherKey,n);if(this._config.useRandomIVs){var i=k((u=new Uint8ClampedArray(b(e))).slice(0,16)),a=k(u.slice(16));try{var s=w.AES.decrypt({ciphertext:a},o,{iv:i,mode:r}).toString(w.enc.Utf8);return JSON.parse(s)}catch(e){return null}}else{i=this._getIV(n);try{var u=w.enc.Base64.parse(e);s=w.AES.decrypt({ciphertext:u},o,{iv:i,mode:r}).toString(w.enc.Utf8);return JSON.parse(s)}catch(e){return null}}},e}(),E=function(){function e(e){var t=e.timeEndpoint;this._timeEndpoint=t}return e.prototype.onReconnection=function(e){this._reconnectionCallback=e},e.prototype.startPolling=function(){this._timeTimer=setInterval(this._performTimeLoop.bind(this),3e3)},e.prototype.stopPolling=function(){clearInterval(this._timeTimer)},e.prototype._performTimeLoop=function(){var e=this;this._timeEndpoint((function(t){t.error||(clearInterval(e._timeTimer),e._reconnectionCallback())}))},e}(),A=function(){function e(e){var t=e.config;this.hashHistory=[],this._config=t}return e.prototype.getKey=function(e){var t=function(e){var t=0;if(0===e.length)return t;for(var n=0;n<e.length;n+=1)t=(t<<5)-t+e.charCodeAt(n),t&=t;return t}(JSON.stringify(e.payload)).toString(),n=e.publishMetaData.publishTimetoken;return"".concat(n,"-").concat(t)},e.prototype.isDuplicate=function(e){return this.hashHistory.includes(this.getKey(e))},e.prototype.addEntry=function(e){this.hashHistory.length>=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))},e.prototype.clearHistory=function(){this.hashHistory=[]},e}();function N(e){return encodeURIComponent(e).replace(/[!~*'()]/g,(function(e){return"%".concat(e.charCodeAt(0).toString(16).toUpperCase())}))}function C(e){return function(e){var t=[];return Object.keys(e).forEach((function(e){return t.push(e)})),t}(e).sort()}var j={signPamFromParams:function(e){return C(e).map((function(t){return"".concat(t,"=").concat(N(e[t]))})).join("&")},endsWith:function(e,t){return-1!==e.indexOf(t,this.length-t.length)},createPromise:function(){var e,t;return{promise:new Promise((function(n,r){e=n,t=r})),reject:t,fulfill:e}},encodeString:N},M={PNNetworkUpCategory:"PNNetworkUpCategory",PNNetworkDownCategory:"PNNetworkDownCategory",PNNetworkIssuesCategory:"PNNetworkIssuesCategory",PNTimeoutCategory:"PNTimeoutCategory",PNBadRequestCategory:"PNBadRequestCategory",PNAccessDeniedCategory:"PNAccessDeniedCategory",PNUnknownCategory:"PNUnknownCategory",PNReconnectedCategory:"PNReconnectedCategory",PNConnectedCategory:"PNConnectedCategory",PNRequestMessageCountExceededCategory:"PNRequestMessageCountExceededCategory"},R=function(){function e(e){var t=e.subscribeEndpoint,n=e.leaveEndpoint,r=e.heartbeatEndpoint,o=e.setStateEndpoint,i=e.timeEndpoint,a=e.getFileUrl,s=e.config,u=e.crypto,c=e.listenerManager;this._listenerManager=c,this._config=s,this._leaveEndpoint=n,this._heartbeatEndpoint=r,this._setStateEndpoint=o,this._subscribeEndpoint=t,this._getFileUrl=a,this._crypto=u,this._channels={},this._presenceChannels={},this._heartbeatChannels={},this._heartbeatChannelGroups={},this._channelGroups={},this._presenceChannelGroups={},this._pendingChannelSubscriptions=[],this._pendingChannelGroupSubscriptions=[],this._currentTimetoken=0,this._lastTimetoken=0,this._storedTimetoken=null,this._subscriptionStatusAnnounced=!1,this._isOnline=!0,this._reconnectionManager=new E({timeEndpoint:i}),this._dedupingManager=new A({config:s})}return e.prototype.adaptStateChange=function(e,t){var n=this,r=e.state,o=e.channels,i=void 0===o?[]:o,a=e.channelGroups,s=void 0===a?[]:a,u=e.withHeartbeat,c=void 0!==u&&u;if(i.forEach((function(e){e in n._channels&&(n._channels[e].state=r)})),s.forEach((function(e){e in n._channelGroups&&(n._channelGroups[e].state=r)})),c){var l={};return i.forEach((function(e){return l[e]=r})),s.forEach((function(e){return l[e]=r})),this._heartbeatEndpoint({channels:i,channelGroups:s,state:l},t)}return this._setStateEndpoint({state:r,channels:i,channelGroups:s},t)},e.prototype.adaptPresenceChange=function(e){var t=this,n=e.connected,r=e.channels,o=void 0===r?[]:r,i=e.channelGroups,a=void 0===i?[]:i;n?(o.forEach((function(e){t._heartbeatChannels[e]={state:{}}})),a.forEach((function(e){t._heartbeatChannelGroups[e]={state:{}}}))):(o.forEach((function(e){e in t._heartbeatChannels&&delete t._heartbeatChannels[e]})),a.forEach((function(e){e in t._heartbeatChannelGroups&&delete t._heartbeatChannelGroups[e]})),!1===this._config.suppressLeaveEvents&&this._leaveEndpoint({channels:o,channelGroups:a},(function(e){t._listenerManager.announceStatus(e)}))),this.reconnect()},e.prototype.adaptSubscribeChange=function(e){var t=this,n=e.timetoken,r=e.channels,o=void 0===r?[]:r,i=e.channelGroups,a=void 0===i?[]:i,s=e.withPresence,u=void 0!==s&&s,c=e.withHeartbeats,l=void 0!==c&&c;this._config.subscribeKey&&""!==this._config.subscribeKey?(n&&(this._lastTimetoken=this._currentTimetoken,this._currentTimetoken=n),"0"!==this._currentTimetoken&&0!==this._currentTimetoken&&(this._storedTimetoken=this._currentTimetoken,this._currentTimetoken=0),o.forEach((function(e){t._channels[e]={state:{}},u&&(t._presenceChannels[e]={}),(l||t._config.getHeartbeatInterval())&&(t._heartbeatChannels[e]={}),t._pendingChannelSubscriptions.push(e)})),a.forEach((function(e){t._channelGroups[e]={state:{}},u&&(t._presenceChannelGroups[e]={}),(l||t._config.getHeartbeatInterval())&&(t._heartbeatChannelGroups[e]={}),t._pendingChannelGroupSubscriptions.push(e)})),this._subscriptionStatusAnnounced=!1,this.reconnect()):console&&console.log&&console.log("subscribe key missing; aborting subscribe")},e.prototype.adaptUnsubscribeChange=function(e,t){var n=this,r=e.channels,o=void 0===r?[]:r,i=e.channelGroups,a=void 0===i?[]:i,s=[],u=[];o.forEach((function(e){e in n._channels&&(delete n._channels[e],s.push(e),e in n._heartbeatChannels&&delete n._heartbeatChannels[e]),e in n._presenceChannels&&(delete n._presenceChannels[e],s.push(e))})),a.forEach((function(e){e in n._channelGroups&&(delete n._channelGroups[e],u.push(e),e in n._heartbeatChannelGroups&&delete n._heartbeatChannelGroups[e]),e in n._presenceChannelGroups&&(delete n._presenceChannelGroups[e],u.push(e))})),0===s.length&&0===u.length||(!1!==this._config.suppressLeaveEvents||t||this._leaveEndpoint({channels:s,channelGroups:u},(function(e){e.affectedChannels=s,e.affectedChannelGroups=u,e.currentTimetoken=n._currentTimetoken,e.lastTimetoken=n._lastTimetoken,n._listenerManager.announceStatus(e)})),0===Object.keys(this._channels).length&&0===Object.keys(this._presenceChannels).length&&0===Object.keys(this._channelGroups).length&&0===Object.keys(this._presenceChannelGroups).length&&(this._lastTimetoken=0,this._currentTimetoken=0,this._storedTimetoken=null,this._region=null,this._reconnectionManager.stopPolling()),this.reconnect())},e.prototype.unsubscribeAll=function(e){this.adaptUnsubscribeChange({channels:this.getSubscribedChannels(),channelGroups:this.getSubscribedChannelGroups()},e)},e.prototype.getHeartbeatChannels=function(){return Object.keys(this._heartbeatChannels)},e.prototype.getHeartbeatChannelGroups=function(){return Object.keys(this._heartbeatChannelGroups)},e.prototype.getSubscribedChannels=function(){return Object.keys(this._channels)},e.prototype.getSubscribedChannelGroups=function(){return Object.keys(this._channelGroups)},e.prototype.reconnect=function(){this._startSubscribeLoop(),this._registerHeartbeatTimer()},e.prototype.disconnect=function(){this._stopSubscribeLoop(),this._stopHeartbeatTimer(),this._reconnectionManager.stopPolling()},e.prototype._registerHeartbeatTimer=function(){this._stopHeartbeatTimer(),0!==this._config.getHeartbeatInterval()&&void 0!==this._config.getHeartbeatInterval()&&(this._performHeartbeatLoop(),this._heartbeatTimer=setInterval(this._performHeartbeatLoop.bind(this),1e3*this._config.getHeartbeatInterval()))},e.prototype._stopHeartbeatTimer=function(){this._heartbeatTimer&&(clearInterval(this._heartbeatTimer),this._heartbeatTimer=null)},e.prototype._performHeartbeatLoop=function(){var e=this,t=this.getHeartbeatChannels(),n=this.getHeartbeatChannelGroups(),r={};if(0!==t.length||0!==n.length){this.getSubscribedChannels().forEach((function(t){var n=e._channels[t].state;Object.keys(n).length&&(r[t]=n)})),this.getSubscribedChannelGroups().forEach((function(t){var n=e._channelGroups[t].state;Object.keys(n).length&&(r[t]=n)}));this._heartbeatEndpoint({channels:t,channelGroups:n,state:r},function(t){t.error&&e._config.announceFailedHeartbeats&&e._listenerManager.announceStatus(t),t.error&&e._config.autoNetworkDetection&&e._isOnline&&(e._isOnline=!1,e.disconnect(),e._listenerManager.announceNetworkDown(),e.reconnect()),!t.error&&e._config.announceSuccessfulHeartbeats&&e._listenerManager.announceStatus(t)}.bind(this))}},e.prototype._startSubscribeLoop=function(){var e=this;this._stopSubscribeLoop();var t={},n=[],r=[];if(Object.keys(this._channels).forEach((function(r){var o=e._channels[r].state;Object.keys(o).length&&(t[r]=o),n.push(r)})),Object.keys(this._presenceChannels).forEach((function(e){n.push("".concat(e,"-pnpres"))})),Object.keys(this._channelGroups).forEach((function(n){var o=e._channelGroups[n].state;Object.keys(o).length&&(t[n]=o),r.push(n)})),Object.keys(this._presenceChannelGroups).forEach((function(e){r.push("".concat(e,"-pnpres"))})),0!==n.length||0!==r.length){var o={channels:n,channelGroups:r,state:t,timetoken:this._currentTimetoken,filterExpression:this._config.filterExpression,region:this._region};this._subscribeCall=this._subscribeEndpoint(o,this._processSubscribeResponse.bind(this))}},e.prototype._processSubscribeResponse=function(e,t){var o=this;if(e.error){if(e.errorData&&"Aborted"===e.errorData.message)return;e.category===M.PNTimeoutCategory?this._startSubscribeLoop():e.category===M.PNNetworkIssuesCategory?(this.disconnect(),e.error&&this._config.autoNetworkDetection&&this._isOnline&&(this._isOnline=!1,this._listenerManager.announceNetworkDown()),this._reconnectionManager.onReconnection((function(){o._config.autoNetworkDetection&&!o._isOnline&&(o._isOnline=!0,o._listenerManager.announceNetworkUp()),o.reconnect(),o._subscriptionStatusAnnounced=!0;var t={category:M.PNReconnectedCategory,operation:e.operation,lastTimetoken:o._lastTimetoken,currentTimetoken:o._currentTimetoken};o._listenerManager.announceStatus(t)})),this._reconnectionManager.startPolling(),this._listenerManager.announceStatus(e)):e.category===M.PNBadRequestCategory?(this._stopHeartbeatTimer(),this._listenerManager.announceStatus(e)):this._listenerManager.announceStatus(e)}else{if(this._storedTimetoken?(this._currentTimetoken=this._storedTimetoken,this._storedTimetoken=null):(this._lastTimetoken=this._currentTimetoken,this._currentTimetoken=t.metadata.timetoken),!this._subscriptionStatusAnnounced){var i={};i.category=M.PNConnectedCategory,i.operation=e.operation,i.affectedChannels=this._pendingChannelSubscriptions,i.subscribedChannels=this.getSubscribedChannels(),i.affectedChannelGroups=this._pendingChannelGroupSubscriptions,i.lastTimetoken=this._lastTimetoken,i.currentTimetoken=this._currentTimetoken,this._subscriptionStatusAnnounced=!0,this._listenerManager.announceStatus(i),this._pendingChannelSubscriptions=[],this._pendingChannelGroupSubscriptions=[]}var a=t.messages||[],s=this._config,u=s.requestMessageCountThreshold,c=s.dedupeOnSubscribe;if(u&&a.length>=u){var l={};l.category=M.PNRequestMessageCountExceededCategory,l.operation=e.operation,this._listenerManager.announceStatus(l)}a.forEach((function(e){var t=e.channel,i=e.subscriptionMatch,a=e.publishMetaData;if(t===i&&(i=null),c){if(o._dedupingManager.isDuplicate(e))return;o._dedupingManager.addEntry(e)}if(j.endsWith(e.channel,"-pnpres"))(y={channel:null,subscription:null}).actualChannel=null!=i?t:null,y.subscribedChannel=null!=i?i:t,t&&(y.channel=t.substring(0,t.lastIndexOf("-pnpres"))),i&&(y.subscription=i.substring(0,i.lastIndexOf("-pnpres"))),y.action=e.payload.action,y.state=e.payload.data,y.timetoken=a.publishTimetoken,y.occupancy=e.payload.occupancy,y.uuid=e.payload.uuid,y.timestamp=e.payload.timestamp,e.payload.join&&(y.join=e.payload.join),e.payload.leave&&(y.leave=e.payload.leave),e.payload.timeout&&(y.timeout=e.payload.timeout),o._listenerManager.announcePresence(y);else if(1===e.messageType){(y={channel:null,subscription:null}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,e.userMetadata&&(y.userMetadata=e.userMetadata),y.message=e.payload,o._listenerManager.announceSignal(y)}else if(2===e.messageType){if((y={channel:null,subscription:null}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,e.userMetadata&&(y.userMetadata=e.userMetadata),y.message={event:e.payload.event,type:e.payload.type,data:e.payload.data},o._listenerManager.announceObjects(y),"uuid"===e.payload.type){var s=o._renameChannelField(y);o._listenerManager.announceUser(n(n({},s),{message:n(n({},s.message),{event:o._renameEvent(s.message.event),type:"user"})}))}else if("channel"===e.payload.type){s=o._renameChannelField(y);o._listenerManager.announceSpace(n(n({},s),{message:n(n({},s.message),{event:o._renameEvent(s.message.event),type:"space"})}))}else if("membership"===e.payload.type){var u=(s=o._renameChannelField(y)).message.data,l=u.uuid,p=u.channel,f=r(u,["uuid","channel"]);f.user=l,f.space=p,o._listenerManager.announceMembership(n(n({},s),{message:n(n({},s.message),{event:o._renameEvent(s.message.event),data:f})}))}}else if(3===e.messageType){(y={}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,y.data={messageTimetoken:e.payload.data.messageTimetoken,actionTimetoken:e.payload.data.actionTimetoken,type:e.payload.data.type,uuid:e.issuingClientId,value:e.payload.data.value},y.event=e.payload.event,o._listenerManager.announceMessageAction(y)}else if(4===e.messageType){(y={}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId;var h=e.payload;if(o._config.cipherKey){var d=o._crypto.decrypt(e.payload);"object"==typeof d&&null!==d&&(h=d)}e.userMetadata&&(y.userMetadata=e.userMetadata),y.message=h.message,y.file={id:h.file.id,name:h.file.name,url:o._getFileUrl({id:h.file.id,name:h.file.name,channel:t})},o._listenerManager.announceFile(y)}else{var y;(y={channel:null,subscription:null}).actualChannel=null!=i?t:null,y.subscribedChannel=null!=i?i:t,y.channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,e.userMetadata&&(y.userMetadata=e.userMetadata),o._config.cipherKey?y.message=o._crypto.decrypt(e.payload):y.message=e.payload,o._listenerManager.announceMessage(y)}})),this._region=t.metadata.region,this._startSubscribeLoop()}},e.prototype._stopSubscribeLoop=function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)},e.prototype._renameEvent=function(e){return"set"===e?"updated":"removed"},e.prototype._renameChannelField=function(e){var t=e.channel,n=r(e,["channel"]);return n.spaceId=t,n},e}(),U={PNTimeOperation:"PNTimeOperation",PNHistoryOperation:"PNHistoryOperation",PNDeleteMessagesOperation:"PNDeleteMessagesOperation",PNFetchMessagesOperation:"PNFetchMessagesOperation",PNMessageCounts:"PNMessageCountsOperation",PNSubscribeOperation:"PNSubscribeOperation",PNUnsubscribeOperation:"PNUnsubscribeOperation",PNPublishOperation:"PNPublishOperation",PNSignalOperation:"PNSignalOperation",PNAddMessageActionOperation:"PNAddActionOperation",PNRemoveMessageActionOperation:"PNRemoveMessageActionOperation",PNGetMessageActionsOperation:"PNGetMessageActionsOperation",PNCreateUserOperation:"PNCreateUserOperation",PNUpdateUserOperation:"PNUpdateUserOperation",PNDeleteUserOperation:"PNDeleteUserOperation",PNGetUserOperation:"PNGetUsersOperation",PNGetUsersOperation:"PNGetUsersOperation",PNCreateSpaceOperation:"PNCreateSpaceOperation",PNUpdateSpaceOperation:"PNUpdateSpaceOperation",PNDeleteSpaceOperation:"PNDeleteSpaceOperation",PNGetSpaceOperation:"PNGetSpacesOperation",PNGetSpacesOperation:"PNGetSpacesOperation",PNGetMembersOperation:"PNGetMembersOperation",PNUpdateMembersOperation:"PNUpdateMembersOperation",PNGetMembershipsOperation:"PNGetMembershipsOperation",PNUpdateMembershipsOperation:"PNUpdateMembershipsOperation",PNListFilesOperation:"PNListFilesOperation",PNGenerateUploadUrlOperation:"PNGenerateUploadUrlOperation",PNPublishFileOperation:"PNPublishFileOperation",PNGetFileUrlOperation:"PNGetFileUrlOperation",PNDownloadFileOperation:"PNDownloadFileOperation",PNGetAllUUIDMetadataOperation:"PNGetAllUUIDMetadataOperation",PNGetUUIDMetadataOperation:"PNGetUUIDMetadataOperation",PNSetUUIDMetadataOperation:"PNSetUUIDMetadataOperation",PNRemoveUUIDMetadataOperation:"PNRemoveUUIDMetadataOperation",PNGetAllChannelMetadataOperation:"PNGetAllChannelMetadataOperation",PNGetChannelMetadataOperation:"PNGetChannelMetadataOperation",PNSetChannelMetadataOperation:"PNSetChannelMetadataOperation",PNRemoveChannelMetadataOperation:"PNRemoveChannelMetadataOperation",PNSetMembersOperation:"PNSetMembersOperation",PNSetMembershipsOperation:"PNSetMembershipsOperation",PNPushNotificationEnabledChannelsOperation:"PNPushNotificationEnabledChannelsOperation",PNRemoveAllPushNotificationsOperation:"PNRemoveAllPushNotificationsOperation",PNWhereNowOperation:"PNWhereNowOperation",PNSetStateOperation:"PNSetStateOperation",PNHereNowOperation:"PNHereNowOperation",PNGetStateOperation:"PNGetStateOperation",PNHeartbeatOperation:"PNHeartbeatOperation",PNChannelGroupsOperation:"PNChannelGroupsOperation",PNRemoveGroupOperation:"PNRemoveGroupOperation",PNChannelsForGroupOperation:"PNChannelsForGroupOperation",PNAddChannelsToGroupOperation:"PNAddChannelsToGroupOperation",PNRemoveChannelsFromGroupOperation:"PNRemoveChannelsFromGroupOperation",PNAccessManagerGrant:"PNAccessManagerGrant",PNAccessManagerGrantToken:"PNAccessManagerGrantToken",PNAccessManagerAudit:"PNAccessManagerAudit",PNAccessManagerRevokeToken:"PNAccessManagerRevokeToken",PNHandshakeOperation:"PNHandshakeOperation",PNReceiveMessagesOperation:"PNReceiveMessagesOperation"},x=function(){function e(e){this._maximumSamplesCount=100,this._trackedLatencies={},this._latencies={},this._maximumSamplesCount=e.maximumSamplesCount||this._maximumSamplesCount}return e.prototype.operationsLatencyForRequest=function(){var e=this,t={};return Object.keys(this._latencies).forEach((function(n){var r=e._latencies[n],o=e._averageLatency(r);o>0&&(t["l_".concat(n)]=o)})),t},e.prototype.startLatencyMeasure=function(e,t){e!==U.PNSubscribeOperation&&t&&(this._trackedLatencies[t]=Date.now())},e.prototype.stopLatencyMeasure=function(e,t){if(e!==U.PNSubscribeOperation&&t){var n=this._endpointName(e),r=this._latencies[n],o=this._trackedLatencies[t];r||(this._latencies[n]=[],r=this._latencies[n]),r.push(Date.now()-o),r.length>this._maximumSamplesCount&&r.splice(0,r.length-this._maximumSamplesCount),delete this._trackedLatencies[t]}},e.prototype._averageLatency=function(e){return Math.floor(e.reduce((function(e,t){return e+t}),0)/e.length)},e.prototype._endpointName=function(e){var t=null;switch(e){case U.PNPublishOperation:t="pub";break;case U.PNSignalOperation:t="sig";break;case U.PNHistoryOperation:case U.PNFetchMessagesOperation:case U.PNDeleteMessagesOperation:case U.PNMessageCounts:t="hist";break;case U.PNUnsubscribeOperation:case U.PNWhereNowOperation:case U.PNHereNowOperation:case U.PNHeartbeatOperation:case U.PNSetStateOperation:case U.PNGetStateOperation:t="pres";break;case U.PNAddChannelsToGroupOperation:case U.PNRemoveChannelsFromGroupOperation:case U.PNChannelGroupsOperation:case U.PNRemoveGroupOperation:case U.PNChannelsForGroupOperation:t="cg";break;case U.PNPushNotificationEnabledChannelsOperation:case U.PNRemoveAllPushNotificationsOperation:t="push";break;case U.PNCreateUserOperation:case U.PNUpdateUserOperation:case U.PNDeleteUserOperation:case U.PNGetUserOperation:case U.PNGetUsersOperation:case U.PNCreateSpaceOperation:case U.PNUpdateSpaceOperation:case U.PNDeleteSpaceOperation:case U.PNGetSpaceOperation:case U.PNGetSpacesOperation:case U.PNGetMembersOperation:case U.PNUpdateMembersOperation:case U.PNGetMembershipsOperation:case U.PNUpdateMembershipsOperation:t="obj";break;case U.PNAddMessageActionOperation:case U.PNRemoveMessageActionOperation:case U.PNGetMessageActionsOperation:t="msga";break;case U.PNAccessManagerGrant:case U.PNAccessManagerAudit:t="pam";break;case U.PNAccessManagerGrantToken:case U.PNAccessManagerRevokeToken:t="pamv3";break;default:t="time"}return t},e}(),I=function(){function e(e,t,n){this._payload=e,this._setDefaultPayloadStructure(),this.title=t,this.body=n}return Object.defineProperty(e.prototype,"payload",{get:function(){return this._payload},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"title",{set:function(e){this._title=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"subtitle",{set:function(e){this._subtitle=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"body",{set:function(e){this._body=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"badge",{set:function(e){this._badge=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"sound",{set:function(e){this._sound=e},enumerable:!1,configurable:!0}),e.prototype._setDefaultPayloadStructure=function(){},e.prototype.toObject=function(){return{}},e}(),D=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return t(r,e),Object.defineProperty(r.prototype,"configurations",{set:function(e){e&&e.length&&(this._configurations=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"notification",{get:function(){return this._payload.aps},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"title",{get:function(){return this._title},set:function(e){e&&e.length&&(this._payload.aps.alert.title=e,this._title=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"subtitle",{get:function(){return this._subtitle},set:function(e){e&&e.length&&(this._payload.aps.alert.subtitle=e,this._subtitle=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"body",{get:function(){return this._body},set:function(e){e&&e.length&&(this._payload.aps.alert.body=e,this._body=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"badge",{get:function(){return this._badge},set:function(e){null!=e&&(this._payload.aps.badge=e,this._badge=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"sound",{get:function(){return this._sound},set:function(e){e&&e.length&&(this._payload.aps.sound=e,this._sound=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"silent",{set:function(e){this._isSilent=e},enumerable:!1,configurable:!0}),r.prototype._setDefaultPayloadStructure=function(){this._payload.aps={alert:{}}},r.prototype.toObject=function(){var e=this,t=n({},this._payload),r=t.aps,o=r.alert;if(this._isSilent&&(r["content-available"]=1),"apns2"===this._apnsPushType){if(!this._configurations||!this._configurations.length)throw new ReferenceError("APNS2 configuration is missing");var i=[];this._configurations.forEach((function(t){i.push(e._objectFromAPNS2Configuration(t))})),i.length&&(t.pn_push=i)}return o&&Object.keys(o).length||delete r.alert,this._isSilent&&(delete r.alert,delete r.badge,delete r.sound,o={}),this._isSilent||Object.keys(o).length?t:null},r.prototype._objectFromAPNS2Configuration=function(e){var t=this;if(!e.targets||!e.targets.length)throw new ReferenceError("At least one APNS2 target should be provided");var n=[];e.targets.forEach((function(e){n.push(t._objectFromAPNSTarget(e))}));var r=e.collapseId,o=e.expirationDate,i={auth_method:"token",targets:n,version:"v2"};return r&&r.length&&(i.collapse_id=r),o&&(i.expiration=o.toISOString()),i},r.prototype._objectFromAPNSTarget=function(e){if(!e.topic||!e.topic.length)throw new TypeError("Target 'topic' undefined.");var t=e.topic,n=e.environment,r=void 0===n?"development":n,o=e.excludedDevices,i=void 0===o?[]:o,a={topic:t,environment:r};return i.length&&(a.excluded_devices=i),a},r}(I),F=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return t(r,e),Object.defineProperty(r.prototype,"backContent",{get:function(){return this._backContent},set:function(e){e&&e.length&&(this._payload.back_content=e,this._backContent=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"backTitle",{get:function(){return this._backTitle},set:function(e){e&&e.length&&(this._payload.back_title=e,this._backTitle=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"count",{get:function(){return this._count},set:function(e){null!=e&&(this._payload.count=e,this._count=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"title",{get:function(){return this._title},set:function(e){e&&e.length&&(this._payload.title=e,this._title=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"type",{get:function(){return this._type},set:function(e){e&&e.length&&(this._payload.type=e,this._type=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"subtitle",{get:function(){return this.backTitle},set:function(e){this.backTitle=e},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"body",{get:function(){return this.backContent},set:function(e){this.backContent=e},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"badge",{get:function(){return this.count},set:function(e){this.count=e},enumerable:!1,configurable:!0}),r.prototype.toObject=function(){return Object.keys(this._payload).length?n({},this._payload):null},r}(I),G=function(e){function o(){return null!==e&&e.apply(this,arguments)||this}return t(o,e),Object.defineProperty(o.prototype,"notification",{get:function(){return this._payload.notification},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"data",{get:function(){return this._payload.data},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"title",{get:function(){return this._title},set:function(e){e&&e.length&&(this._payload.notification.title=e,this._title=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"body",{get:function(){return this._body},set:function(e){e&&e.length&&(this._payload.notification.body=e,this._body=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"sound",{get:function(){return this._sound},set:function(e){e&&e.length&&(this._payload.notification.sound=e,this._sound=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"icon",{get:function(){return this._icon},set:function(e){e&&e.length&&(this._payload.notification.icon=e,this._icon=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"tag",{get:function(){return this._tag},set:function(e){e&&e.length&&(this._payload.notification.tag=e,this._tag=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"silent",{set:function(e){this._isSilent=e},enumerable:!1,configurable:!0}),o.prototype._setDefaultPayloadStructure=function(){this._payload.notification={},this._payload.data={}},o.prototype.toObject=function(){var e=n({},this._payload.data),t=null,o={};if(Object.keys(this._payload).length>2){var i=this._payload;i.notification,i.data;var a=r(i,["notification","data"]);e=n(n({},e),a)}return this._isSilent?e.notification=this._payload.notification:t=this._payload.notification,Object.keys(e).length&&(o.data=e),t&&Object.keys(t).length&&(o.notification=t),Object.keys(o).length?o:null},o}(I),K=function(){function e(e,t){this._payload={apns:{},mpns:{},fcm:{}},this._title=e,this._body=t,this.apns=new D(this._payload.apns,e,t),this.mpns=new F(this._payload.mpns,e,t),this.fcm=new G(this._payload.fcm,e,t)}return Object.defineProperty(e.prototype,"debugging",{set:function(e){this._debugging=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"title",{get:function(){return this._title},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"body",{get:function(){return this._body},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"subtitle",{get:function(){return this._subtitle},set:function(e){this._subtitle=e,this.apns.subtitle=e,this.mpns.subtitle=e,this.fcm.subtitle=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"badge",{get:function(){return this._badge},set:function(e){this._badge=e,this.apns.badge=e,this.mpns.badge=e,this.fcm.badge=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"sound",{get:function(){return this._sound},set:function(e){this._sound=e,this.apns.sound=e,this.mpns.sound=e,this.fcm.sound=e},enumerable:!1,configurable:!0}),e.prototype.buildPayload=function(e){var t={};if(e.includes("apns")||e.includes("apns2")){this.apns._apnsPushType=e.includes("apns")?"apns":"apns2";var n=this.apns.toObject();n&&Object.keys(n).length&&(t.pn_apns=n)}if(e.includes("mpns")){var r=this.mpns.toObject();r&&Object.keys(r).length&&(t.pn_mpns=r)}if(e.includes("fcm")){var o=this.fcm.toObject();o&&Object.keys(o).length&&(t.pn_gcm=o)}return Object.keys(t).length&&this._debugging&&(t.pn_debug=!0),t},e}(),L=function(){function e(){this._listeners=[]}return e.prototype.addListener=function(e){this._listeners.push(e)},e.prototype.removeListener=function(e){var t=[];this._listeners.forEach((function(n){n!==e&&t.push(n)})),this._listeners=t},e.prototype.removeAllListeners=function(){this._listeners=[]},e.prototype.announcePresence=function(e){this._listeners.forEach((function(t){t.presence&&t.presence(e)}))},e.prototype.announceStatus=function(e){this._listeners.forEach((function(t){t.status&&t.status(e)}))},e.prototype.announceMessage=function(e){this._listeners.forEach((function(t){t.message&&t.message(e)}))},e.prototype.announceSignal=function(e){this._listeners.forEach((function(t){t.signal&&t.signal(e)}))},e.prototype.announceMessageAction=function(e){this._listeners.forEach((function(t){t.messageAction&&t.messageAction(e)}))},e.prototype.announceFile=function(e){this._listeners.forEach((function(t){t.file&&t.file(e)}))},e.prototype.announceObjects=function(e){this._listeners.forEach((function(t){t.objects&&t.objects(e)}))},e.prototype.announceUser=function(e){this._listeners.forEach((function(t){t.user&&t.user(e)}))},e.prototype.announceSpace=function(e){this._listeners.forEach((function(t){t.space&&t.space(e)}))},e.prototype.announceMembership=function(e){this._listeners.forEach((function(t){t.membership&&t.membership(e)}))},e.prototype.announceNetworkUp=function(){var e={};e.category=M.PNNetworkUpCategory,this.announceStatus(e)},e.prototype.announceNetworkDown=function(){var e={};e.category=M.PNNetworkDownCategory,this.announceStatus(e)},e}(),B=function(){function e(e,t){this._config=e,this._cbor=t}return e.prototype.setToken=function(e){e&&e.length>0?this._token=e:this._token=void 0},e.prototype.getToken=function(){return this._token},e.prototype.extractPermissions=function(e){var t={read:!1,write:!1,manage:!1,delete:!1,get:!1,update:!1,join:!1};return 128==(128&e)&&(t.join=!0),64==(64&e)&&(t.update=!0),32==(32&e)&&(t.get=!0),8==(8&e)&&(t.delete=!0),4==(4&e)&&(t.manage=!0),2==(2&e)&&(t.write=!0),1==(1&e)&&(t.read=!0),t},e.prototype.parseToken=function(e){var t=this,n=this._cbor.decodeToken(e);if(void 0!==n){var r=n.res.uuid?Object.keys(n.res.uuid):[],o=Object.keys(n.res.chan),i=Object.keys(n.res.grp),a=n.pat.uuid?Object.keys(n.pat.uuid):[],s=Object.keys(n.pat.chan),u=Object.keys(n.pat.grp),c={version:n.v,timestamp:n.t,ttl:n.ttl,authorized_uuid:n.uuid},l=r.length>0,p=o.length>0,f=i.length>0;(l||p||f)&&(c.resources={},l&&(c.resources.uuids={},r.forEach((function(e){c.resources.uuids[e]=t.extractPermissions(n.res.uuid[e])}))),p&&(c.resources.channels={},o.forEach((function(e){c.resources.channels[e]=t.extractPermissions(n.res.chan[e])}))),f&&(c.resources.groups={},i.forEach((function(e){c.resources.groups[e]=t.extractPermissions(n.res.grp[e])}))));var h=a.length>0,d=s.length>0,y=u.length>0;return(h||d||y)&&(c.patterns={},h&&(c.patterns.uuids={},a.forEach((function(e){c.patterns.uuids[e]=t.extractPermissions(n.pat.uuid[e])}))),d&&(c.patterns.channels={},s.forEach((function(e){c.patterns.channels[e]=t.extractPermissions(n.pat.chan[e])}))),y&&(c.patterns.groups={},u.forEach((function(e){c.patterns.groups[e]=t.extractPermissions(n.pat.grp[e])})))),Object.keys(n.meta).length>0&&(c.meta=n.meta),c.signature=n.sig,c}},e}(),H=function(e){function n(t,n){var r=this.constructor,o=e.call(this,t)||this;return o.name=o.constructor.name,o.status=n,o.message=t,Object.setPrototypeOf(o,r.prototype),o}return t(n,e),n}(Error);function q(e){return(t={message:e}).type="validationError",t.error=!0,t;var t}function z(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.usePatch&&e.usePatch(t,n)?e.patchURL(t,n):e.useGetFile&&e.useGetFile(t,n)?e.getFileURL(t,n):e.getURL(t,n)}function V(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-".concat(e.sdkFamily);e.partnerId&&(t+="-".concat(e.partnerId)),t+="/".concat(e.getVersion());var n=e._getPnsdkSuffix(" ");return n.length>0&&(t+=n),t}function W(e,t,n){return t.usePost&&t.usePost(e,n)?"POST":t.usePatch&&t.usePatch(e,n)?"PATCH":t.useDelete&&t.useDelete(e,n)?"DELETE":t.useGetFile&&t.useGetFile(e,n)?"GETFILE":"GET"}function $(e,t,n,r,o){var i=e.config,a=e.crypto,s=W(e,o,r);n.timestamp=Math.floor((new Date).getTime()/1e3),"PNPublishOperation"===o.getOperation()&&o.usePost&&o.usePost(e,r)&&(s="GET"),"GETFILE"===s&&(s="GET");var u="".concat(s,"\n").concat(i.publishKey,"\n").concat(t,"\n").concat(j.signPamFromParams(n),"\n");if("POST"===s)u+="string"==typeof(c=o.postPayload(e,r))?c:JSON.stringify(c);else if("PATCH"===s){var c;u+="string"==typeof(c=o.patchPayload(e,r))?c:JSON.stringify(c)}var l="v2.".concat(a.HMACSHA256(u));l=(l=(l=l.replace(/\+/g,"-")).replace(/\//g,"_")).replace(/=+$/,""),n.signature=l}function J(e,t){for(var r=[],o=2;o<arguments.length;o++)r[o-2]=arguments[o];var i=e.networking,a=e.config,s=e.telemetryManager,u=e.tokenManager,c=y(),l=null,p=null,f={};t.getOperation()===U.PNTimeOperation||t.getOperation()===U.PNChannelGroupsOperation?l=r[0]:(f=r[0],l=r[1]),"undefined"==typeof Promise||l||(p=j.createPromise());var h=t.validateParams(e,f);if(h)return l?l(q(h)):p?(p.reject(new H("Validation failed, check status for details",q(h))),p.promise):void 0;var d,g=t.prepareParams(e,f),b=z(t,e,f),m={url:b,operation:t.getOperation(),timeout:t.getRequestTimeout(e),headers:t.getRequestHeaders?t.getRequestHeaders():{},ignoreBody:"function"==typeof t.ignoreBody&&t.ignoreBody(e),forceBuffered:"function"==typeof t.forceBuffered?t.forceBuffered(e,f):null,abortSignal:"function"==typeof t.getAbortSignal?t.getAbortSignal(e,f):null};g.uuid=a.UUID,g.pnsdk=V(a);var v=s.operationsLatencyForRequest();if(Object.keys(v).length&&(g=n(n({},g),v)),a.useInstanceId&&(g.instanceid=a.instanceId),a.useRequestId&&(g.requestid=c),t.isAuthSupported()){var _=u.getToken()||a.getAuthKey();_&&(g.auth=_)}a.secretKey&&$(e,b,g,f,t);var O=function(n,r){if(n.error)return t.handleError&&t.handleError(e,f,n),void(l?l(n):p&&p.reject(new H("PubNub call failed, check status for details",n)));s.stopLatencyMeasure(t.getOperation(),c);var o=t.handleResponse(e,r,f);"function"!=typeof(null==o?void 0:o.then)&&(o=Promise.resolve(o)),o.then((function(e){l?l(n,e):p&&p.fulfill(e)})).catch((function(e){if(l){var n=e;t.getOperation()===U.PNSubscribeOperation&&(n={statusCode:400,error:!0,operation:t.getOperation(),errorData:e,category:M.PNUnknownCategory}),l(n,null)}else p&&p.reject(new H("PubNub call failed, check status for details",e))}))};if(s.startLatencyMeasure(t.getOperation(),c),"POST"===W(e,t,f)){var S=t.postPayload(e,f);d=i.POST(g,S,m,O)}else if("PATCH"===W(e,t,f)){S=t.patchPayload(e,f);d=i.PATCH(g,S,m,O)}else d="DELETE"===W(e,t,f)?i.DELETE(g,m,O):"GETFILE"===W(e,t,f)?i.GETFILE(g,m,O):i.GET(g,m,O);return t.getOperation()===U.PNSubscribeOperation?d:p?p.promise:void 0}var Q=Object.freeze({__proto__:null,getOperation:function(){return U.PNAddChannelsToGroupOperation},validateParams:function(e,t){var n=t.channels,r=t.channelGroup,o=e.config;return r?n&&0!==n.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(j.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}},handleResponse:function(){return{}}});var X=Object.freeze({__proto__:null,getOperation:function(){return U.PNRemoveChannelsFromGroupOperation},validateParams:function(e,t){var n=t.channels,r=t.channelGroup,o=e.config;return r?n&&0!==n.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(j.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}},handleResponse:function(){return{}}});var Y=Object.freeze({__proto__:null,getOperation:function(){return U.PNRemoveGroupOperation},validateParams:function(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(j.encodeString(n),"/remove")},isAuthSupported:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},prepareParams:function(){return{}},handleResponse:function(){return{}}});var Z=Object.freeze({__proto__:null,getOperation:function(){return U.PNChannelGroupsOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e){var t=e.config;return"/v1/channel-registration/sub-key/".concat(t.subscribeKey,"/channel-group")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{groups:t.payload.groups}}});var ee=Object.freeze({__proto__:null,getOperation:function(){return U.PNChannelsForGroupOperation},validateParams:function(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(j.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{channels:t.payload.channels}}});var te=Object.freeze({__proto__:null,getOperation:function(){return U.PNPushNotificationEnabledChannelsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.channels,i=t.topic,a=e.config;return n?r?"apns2"!==r||i?o&&0!==o.length?a.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.channels,i=void 0===o?[]:o,a=t.environment,s=void 0===a?"development":a,u=t.topic,c={type:r,add:i.join(",")};return"apns2"===r&&delete(c=n(n({},c),{environment:s,topic:u})).type,c},handleResponse:function(){return{}}});var ne=Object.freeze({__proto__:null,getOperation:function(){return U.PNPushNotificationEnabledChannelsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.channels,i=t.topic,a=e.config;return n?r?"apns2"!==r||i?o&&0!==o.length?a.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.channels,i=void 0===o?[]:o,a=t.environment,s=void 0===a?"development":a,u=t.topic,c={type:r,remove:i.join(",")};return"apns2"===r&&delete(c=n(n({},c),{environment:s,topic:u})).type,c},handleResponse:function(){return{}}});var re=Object.freeze({__proto__:null,getOperation:function(){return U.PNPushNotificationEnabledChannelsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.topic,i=e.config;return n?r?"apns2"!==r||o?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.environment,i=void 0===o?"development":o,a=t.topic,s={type:r};return"apns2"===r&&delete(s=n(n({},s),{environment:i,topic:a})).type,s},handleResponse:function(e,t){return{channels:t}}});var oe=Object.freeze({__proto__:null,getOperation:function(){return U.PNRemoveAllPushNotificationsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.topic,i=e.config;return n?r?"apns2"!==r||o?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n,"/remove"):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n,"/remove")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.environment,i=void 0===o?"development":o,a=t.topic,s={type:r};return"apns2"===r&&delete(s=n(n({},s),{environment:i,topic:a})).type,s},handleResponse:function(){return{}}});var ie=Object.freeze({__proto__:null,getOperation:function(){return U.PNUnsubscribeOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(i),"/leave")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channelGroups,r=void 0===n?[]:n,o={};return r.length>0&&(o["channel-group"]=r.join(",")),o},handleResponse:function(){return{}}});var ae=Object.freeze({__proto__:null,getOperation:function(){return U.PNWhereNowOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.uuid,o=void 0===r?n.UUID:r;return"/v2/presence/sub-key/".concat(n.subscribeKey,"/uuid/").concat(j.encodeString(o))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}});var se=Object.freeze({__proto__:null,getOperation:function(){return U.PNHeartbeatOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(i),"/heartbeat")},isAuthSupported:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},prepareParams:function(e,t){var n=t.channelGroups,r=void 0===n?[]:n,o=t.state,i=void 0===o?{}:o,a=e.config,s={};return r.length>0&&(s["channel-group"]=r.join(",")),s.state=JSON.stringify(i),s.heartbeat=a.getPresenceTimeout(),s},handleResponse:function(){return{}}});var ue=Object.freeze({__proto__:null,getOperation:function(){return U.PNGetStateOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.uuid,o=void 0===r?n.UUID:r,i=t.channels,a=void 0===i?[]:i,s=a.length>0?a.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(s),"/uuid/").concat(o)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channelGroups,r=void 0===n?[]:n,o={};return r.length>0&&(o["channel-group"]=r.join(",")),o},handleResponse:function(e,t,n){var r=n.channels,o=void 0===r?[]:r,i=n.channelGroups,a=void 0===i?[]:i,s={};return 1===o.length&&0===a.length?s[o[0]]=t.payload:s=t.payload,{channels:s}}});var ce=Object.freeze({__proto__:null,getOperation:function(){return U.PNSetStateOperation},validateParams:function(e,t){var n=e.config,r=t.state,o=t.channels,i=void 0===o?[]:o,a=t.channelGroups,s=void 0===a?[]:a;return r?n.subscribeKey?0===i.length&&0===s.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(i),"/uuid/").concat(j.encodeString(n.UUID),"/data")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.state,r=t.channelGroups,o=void 0===r?[]:r,i={};return i.state=JSON.stringify(n),o.length>0&&(i["channel-group"]=o.join(",")),i},handleResponse:function(e,t){return{state:t.payload}}});var le=Object.freeze({__proto__:null,getOperation:function(){return U.PNHereNowOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=t.channelGroups,a=void 0===i?[]:i,s="/v2/presence/sub-key/".concat(n.subscribeKey);if(o.length>0||a.length>0){var u=o.length>0?o.join(","):",";s+="/channel/".concat(j.encodeString(u))}return s},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.channelGroups,o=void 0===r?[]:r,i=t.includeUUIDs,a=void 0===i||i,s=t.includeState,u=void 0!==s&&s,c=t.queryParameters,l=void 0===c?{}:c,p={};return a||(p.disable_uuids=1),u&&(p.state=1),o.length>0&&(p["channel-group"]=o.join(",")),p=n(n({},p),l)},handleResponse:function(e,t,n){var r=n.channels,o=void 0===r?[]:r,i=n.channelGroups,a=void 0===i?[]:i,s=n.includeUUIDs,u=void 0===s||s,c=n.includeState,l=void 0!==c&&c;return o.length>1||a.length>0||0===a.length&&0===o.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach((function(n){var r=t.payload.channels[n],o=[];return e.channels[n]={occupants:o,name:n,occupancy:r.occupancy},u&&r.uuids.forEach((function(e){l?o.push({state:e.state,uuid:e.uuid}):o.push({state:null,uuid:e})})),e})),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[o[0]]={occupants:n,name:o[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach((function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})})),e}()},handleError:function(e,t,n){402!==n.statusCode||this.getURL(e,t).includes("channel")||(n.errorData.message="You have tried to perform a Global Here Now operation, your keyset configuration does not support that. Please provide a channel, or enable the Global Here Now feature from the Portal.")}});var pe=Object.freeze({__proto__:null,getOperation:function(){return U.PNAddMessageActionOperation},validateParams:function(e,t){var n=e.config,r=t.action,o=t.channel;return t.messageTimetoken?n.subscribeKey?o?r?r.value?r.type?r.type.length>15?"Action.type value exceed maximum length of 15":void 0:"Missing Action.type":"Missing Action.value":"Missing Action":"Missing message channel":"Missing Subscribe Key":"Missing message timetoken"},usePost:function(){return!0},postURL:function(e,t){var n=e.config,r=t.channel,o=t.messageTimetoken;return"/v1/message-actions/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(r),"/message/").concat(o)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},getRequestHeaders:function(){return{"Content-Type":"application/json"}},isAuthSupported:function(){return!0},prepareParams:function(){return{}},postPayload:function(e,t){return t.action},handleResponse:function(e,t){return{data:t.data}}});var fe=Object.freeze({__proto__:null,getOperation:function(){return U.PNRemoveMessageActionOperation},validateParams:function(e,t){var n=e.config,r=t.channel,o=t.actionTimetoken;return t.messageTimetoken?o?n.subscribeKey?r?void 0:"Missing message channel":"Missing Subscribe Key":"Missing action timetoken":"Missing message timetoken"},useDelete:function(){return!0},getURL:function(e,t){var n=e.config,r=t.channel,o=t.actionTimetoken,i=t.messageTimetoken;return"/v1/message-actions/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(r),"/message/").concat(i,"/action/").concat(o)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{data:t.data}}});var he=Object.freeze({__proto__:null,getOperation:function(){return U.PNGetMessageActionsOperation},validateParams:function(e,t){var n=e.config,r=t.channel;return n.subscribeKey?r?void 0:"Missing message channel":"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channel;return"/v1/message-actions/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(r))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.limit,r=t.start,o=t.end,i={};return n&&(i.limit=n),r&&(i.start=r),o&&(i.end=o),i},handleResponse:function(e,t){var n={data:t.data,start:null,end:null};return n.data.length&&(n.end=n.data[n.data.length-1].actionTimetoken,n.start=n.data[0].actionTimetoken),n}}),de={getOperation:function(){return U.PNListFilesOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"channel can't be empty"},getURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel),"/files")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n={};return t.limit&&(n.limit=t.limit),t.next&&(n.next=t.next),n},handleResponse:function(e,t){return{status:t.status,data:t.data,next:t.next,count:t.count}}},ye={getOperation:function(){return U.PNGenerateUploadUrlOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.name)?void 0:"name can't be empty":"channel can't be empty"},usePost:function(){return!0},postURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel),"/generate-upload-url")},postPayload:function(e,t){return{name:t.name}},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{status:t.status,data:t.data,file_upload_request:t.file_upload_request}}},ge={getOperation:function(){return U.PNPublishFileOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.fileId)?(null==t?void 0:t.fileName)?void 0:"file name can't be empty":"file id can't be empty":"channel can't be empty"},getURL:function(e,t){var n=e.config,r=n.publishKey,o=n.subscribeKey,i=function(e,t){var n=e.crypto,r=e.config,o=JSON.stringify(t);return r.cipherKey&&(o=n.encrypt(o),o=JSON.stringify(o)),o||""}(e,{message:t.message,file:{name:t.fileName,id:t.fileId}});return"/v1/files/publish-file/".concat(r,"/").concat(o,"/0/").concat(j.encodeString(t.channel),"/0/").concat(j.encodeString(i))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n={};return t.ttl&&(n.ttl=t.ttl),void 0!==t.storeInHistory&&(n.store=t.storeInHistory?"1":"0"),t.meta&&"object"==typeof t.meta&&(n.meta=JSON.stringify(t.meta)),n},handleResponse:function(e,t){return{timetoken:t[2]}}},be=function(e){var t=function(e){var t=this,n=e.generateUploadUrl,r=e.publishFile,a=e.modules,s=a.PubNubFile,u=a.config,c=a.cryptography,l=a.networking;return function(e){var a=e.channel,p=e.file,f=e.message,h=e.cipherKey,d=e.meta,y=e.ttl,g=e.storeInHistory;return o(t,void 0,void 0,(function(){var e,t,o,b,m,v,_,O,S,P,w,k,T,E,A,N,C,j,M,R,U,x,I,D,F,G,K,L;return i(this,(function(i){switch(i.label){case 0:if(!a)throw new H("Validation failed, check status for details",q("channel can't be empty"));if(!p)throw new H("Validation failed, check status for details",q("file can't be empty"));return e=s.create(p),[4,n({channel:a,name:e.name})];case 1:return t=i.sent(),o=t.file_upload_request,b=o.url,m=o.form_fields,v=t.data,_=v.id,O=v.name,s.supportsEncryptFile&&(null!=h?h:u.cipherKey)?[4,c.encryptFile(null!=h?h:u.cipherKey,e,s)]:[3,3];case 2:e=i.sent(),i.label=3;case 3:S=m,e.mimeType&&(S=m.map((function(t){return"Content-Type"===t.key?{key:t.key,value:e.mimeType}:t}))),i.label=4;case 4:return i.trys.push([4,18,,19]),s.supportsFileUri&&p.uri?(k=(w=l).POSTFILE,T=[b,S],[4,e.toFileUri()]):[3,7];case 5:return[4,k.apply(w,T.concat([i.sent()]))];case 6:return P=i.sent(),[3,17];case 7:return s.supportsFile?(A=(E=l).POSTFILE,N=[b,S],[4,e.toFile()]):[3,10];case 8:return[4,A.apply(E,N.concat([i.sent()]))];case 9:return P=i.sent(),[3,17];case 10:return s.supportsBuffer?(j=(C=l).POSTFILE,M=[b,S],[4,e.toBuffer()]):[3,13];case 11:return[4,j.apply(C,M.concat([i.sent()]))];case 12:return P=i.sent(),[3,17];case 13:return s.supportsBlob?(U=(R=l).POSTFILE,x=[b,S],[4,e.toBlob()]):[3,16];case 14:return[4,U.apply(R,x.concat([i.sent()]))];case 15:return P=i.sent(),[3,17];case 16:throw new Error("Unsupported environment");case 17:return[3,19];case 18:throw(I=i.sent()).response&&"string"==typeof I.response.text?(D=I.response.text,F=/<Message>(.*)<\/Message>/gi.exec(D),new H(F?"Upload to bucket failed: ".concat(F[1]):"Upload to bucket failed.",I)):new H("Upload to bucket failed.",I);case 19:if(204!==P.status)throw new H("Upload to bucket was unsuccessful",P);G=u.fileUploadPublishRetryLimit,K=!1,L={timetoken:"0"},i.label=20;case 20:return i.trys.push([20,22,,23]),[4,r({channel:a,message:f,fileId:_,fileName:O,meta:d,storeInHistory:g,ttl:y})];case 21:return L=i.sent(),K=!0,[3,23];case 22:return i.sent(),G-=1,[3,23];case 23:if(!K&&G>0)return[3,20];i.label=24;case 24:if(K)return[2,{timetoken:L.timetoken,id:_,name:O}];throw new H("Publish failed. You may want to execute that operation manually using pubnub.publishFile",{channel:a,id:_,name:O})}}))}))}}(e);return function(e,n){var r=t(e);return"function"==typeof n?(r.then((function(e){return n(null,e)})).catch((function(e){return n(e,null)})),r):r}},me=function(e,t){var n=t.channel,r=t.id,o=t.name,i=e.config,a=e.networking,s=e.tokenManager;if(!n)throw new H("Validation failed, check status for details",q("channel can't be empty"));if(!r)throw new H("Validation failed, check status for details",q("file id can't be empty"));if(!o)throw new H("Validation failed, check status for details",q("file name can't be empty"));var u="/v1/files/".concat(i.subscribeKey,"/channels/").concat(j.encodeString(n),"/files/").concat(r,"/").concat(o),c={};c.uuid=i.getUUID(),c.pnsdk=V(i);var l=s.getToken()||i.getAuthKey();l&&(c.auth=l),i.secretKey&&$(e,u,c,{},{getOperation:function(){return"PubNubGetFileUrlOperation"}});var p=Object.keys(c).map((function(e){return"".concat(encodeURIComponent(e),"=").concat(encodeURIComponent(c[e]))})).join("&");return""!==p?"".concat(a.getStandardOrigin()).concat(u,"?").concat(p):"".concat(a.getStandardOrigin()).concat(u)},ve={getOperation:function(){return U.PNDownloadFileOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.name)?(null==t?void 0:t.id)?void 0:"id can't be empty":"name can't be empty":"channel can't be empty"},useGetFile:function(){return!0},getFileURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel),"/files/").concat(t.id,"/").concat(t.name)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},ignoreBody:function(){return!0},forceBuffered:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t,n){var r=e.PubNubFile,a=e.config,s=e.cryptography;return o(void 0,void 0,void 0,(function(){var e,o,u,c;return i(this,(function(i){switch(i.label){case 0:return e=t.response.body,r.supportsEncryptFile&&(null!==(o=n.cipherKey)&&void 0!==o?o:a.cipherKey)?[4,s.decrypt(null!==(u=n.cipherKey)&&void 0!==u?u:a.cipherKey,e)]:[3,2];case 1:e=i.sent(),i.label=2;case 2:return[2,r.create({data:e,name:null!==(c=t.response.name)&&void 0!==c?c:n.name,mimeType:t.response.type})]}}))}))}},_e={getOperation:function(){return U.PNListFilesOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.id)?(null==t?void 0:t.name)?void 0:"file name can't be empty":"file id can't be empty":"channel can't be empty"},useDelete:function(){return!0},getURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel),"/files/").concat(t.id,"/").concat(t.name)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{status:t.status}}},Oe={getOperation:function(){return U.PNGetAllUUIDMetadataOperation},validateParams:function(){},getURL:function(e){var t=e.config;return"/v2/objects/".concat(t.subscribeKey,"/uuids")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["status","type"]};return(null==t?void 0:t.include)&&(null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),f.include=f.include.join(","),(null===(r=null==t?void 0:t.include)||void 0===r?void 0:r.totalCount)&&(f.count=null===(o=t.include)||void 0===o?void 0:o.totalCount),(null===(i=null==t?void 0:t.page)||void 0===i?void 0:i.next)&&(f.start=null===(a=t.page)||void 0===a?void 0:a.next),(null===(u=null==t?void 0:t.page)||void 0===u?void 0:u.prev)&&(f.end=null===(c=t.page)||void 0===c?void 0:c.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),f.limit=null!==(l=null==t?void 0:t.limit)&&void 0!==l?l:100,(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,next:t.next,prev:t.prev}}},Se={getOperation:function(){return U.PNGetUUIDMetadataOperation},validateParams:function(){},getURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(j.encodeString(null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o=e.config,i={};return i.uuid=null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:o.getUUID(),i.include=["status","type","custom"],(null==t?void 0:t.include)&&!1===(null===(r=t.include)||void 0===r?void 0:r.customFields)&&i.include.pop(),i.include=i.include.join(","),i},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Pe={getOperation:function(){return U.PNSetUUIDMetadataOperation},validateParams:function(e,t){if(!(null==t?void 0:t.data))return"Data cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(j.encodeString(null!==(n=t.uuid)&&void 0!==n?n:r.getUUID()))},patchPayload:function(e,t){return t.data},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o=e.config,i={};return i.uuid=null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:o.getUUID(),i.include=["status","type","custom"],(null==t?void 0:t.include)&&!1===(null===(r=t.include)||void 0===r?void 0:r.customFields)&&i.include.pop(),i.include=i.include.join(","),i},handleResponse:function(e,t){return{status:t.status,data:t.data}}},we={getOperation:function(){return U.PNRemoveUUIDMetadataOperation},validateParams:function(){},getURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(j.encodeString(null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()))},useDelete:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r=e.config;return{uuid:null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()}},handleResponse:function(e,t){return{status:t.status,data:t.data}}},ke={getOperation:function(){return U.PNGetAllChannelMetadataOperation},validateParams:function(){},getURL:function(e){var t=e.config;return"/v2/objects/".concat(t.subscribeKey,"/channels")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["status","type"]};return(null==t?void 0:t.include)&&(null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),f.include=f.include.join(","),(null===(r=null==t?void 0:t.include)||void 0===r?void 0:r.totalCount)&&(f.count=null===(o=t.include)||void 0===o?void 0:o.totalCount),(null===(i=null==t?void 0:t.page)||void 0===i?void 0:i.next)&&(f.start=null===(a=t.page)||void 0===a?void 0:a.next),(null===(u=null==t?void 0:t.page)||void 0===u?void 0:u.prev)&&(f.end=null===(c=t.page)||void 0===c?void 0:c.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),f.limit=null!==(l=null==t?void 0:t.limit)&&void 0!==l?l:100,(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},Te={getOperation:function(){return U.PNGetChannelMetadataOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"Channel cannot be empty"},getURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r={include:["status","type","custom"]};return(null==t?void 0:t.include)&&!1===(null===(n=t.include)||void 0===n?void 0:n.customFields)&&r.include.pop(),r.include=r.include.join(","),r},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Ee={getOperation:function(){return U.PNSetChannelMetadataOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.data)?void 0:"Data cannot be empty":"Channel cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel))},patchPayload:function(e,t){return t.data},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r={include:["status","type","custom"]};return(null==t?void 0:t.include)&&!1===(null===(n=t.include)||void 0===n?void 0:n.customFields)&&r.include.pop(),r.include=r.include.join(","),r},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Ae={getOperation:function(){return U.PNRemoveChannelMetadataOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"Channel cannot be empty"},getURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel))},useDelete:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Ne={getOperation:function(){return U.PNGetMembersOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"UUID cannot be empty"},getURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel),"/uuids")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f,h,d,y={include:["uuid.status","uuid.type","type"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&y.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customUUIDFields)&&y.include.push("uuid.custom"),(null===(i=null===(o=t.include)||void 0===o?void 0:o.UUIDFields)||void 0===i||i)&&y.include.push("uuid")),y.include=y.include.join(","),(null===(a=null==t?void 0:t.include)||void 0===a?void 0:a.totalCount)&&(y.count=null===(u=t.include)||void 0===u?void 0:u.totalCount),(null===(c=null==t?void 0:t.page)||void 0===c?void 0:c.next)&&(y.start=null===(l=t.page)||void 0===l?void 0:l.next),(null===(p=null==t?void 0:t.page)||void 0===p?void 0:p.prev)&&(y.end=null===(f=t.page)||void 0===f?void 0:f.prev),(null==t?void 0:t.filter)&&(y.filter=t.filter),y.limit=null!==(h=null==t?void 0:t.limit)&&void 0!==h?h:100,(null==t?void 0:t.sort)&&(y.sort=Object.entries(null!==(d=t.sort)&&void 0!==d?d:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),y},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},Ce={getOperation:function(){return U.PNSetMembersOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.uuids)&&0!==(null==t?void 0:t.uuids.length)?void 0:"UUIDs cannot be empty":"Channel cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel),"/uuids")},patchPayload:function(e,t){var n;return(n={set:[],delete:[]})[t.type]=t.uuids.map((function(e){return"string"==typeof e?{uuid:{id:e}}:{uuid:{id:e.id},custom:e.custom,status:e.status}})),n},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["uuid.status","uuid.type","type"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customUUIDFields)&&f.include.push("uuid.custom"),(null===(o=t.include)||void 0===o?void 0:o.UUIDFields)&&f.include.push("uuid")),f.include=f.include.join(","),(null===(i=null==t?void 0:t.include)||void 0===i?void 0:i.totalCount)&&(f.count=!0),(null===(a=null==t?void 0:t.page)||void 0===a?void 0:a.next)&&(f.start=null===(u=t.page)||void 0===u?void 0:u.next),(null===(c=null==t?void 0:t.page)||void 0===c?void 0:c.prev)&&(f.end=null===(l=t.page)||void 0===l?void 0:l.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),null!=t.limit&&(f.limit=t.limit),(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},je={getOperation:function(){return U.PNGetMembershipsOperation},validateParams:function(){},getURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(j.encodeString(null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()),"/channels")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f,h,d={include:["channel.status","channel.type","status"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&d.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customChannelFields)&&d.include.push("channel.custom"),(null===(o=t.include)||void 0===o?void 0:o.channelFields)&&d.include.push("channel")),d.include=d.include.join(","),(null===(i=null==t?void 0:t.include)||void 0===i?void 0:i.totalCount)&&(d.count=null===(a=t.include)||void 0===a?void 0:a.totalCount),(null===(u=null==t?void 0:t.page)||void 0===u?void 0:u.next)&&(d.start=null===(c=t.page)||void 0===c?void 0:c.next),(null===(l=null==t?void 0:t.page)||void 0===l?void 0:l.prev)&&(d.end=null===(p=t.page)||void 0===p?void 0:p.prev),(null==t?void 0:t.filter)&&(d.filter=t.filter),d.limit=null!==(f=null==t?void 0:t.limit)&&void 0!==f?f:100,(null==t?void 0:t.sort)&&(d.sort=Object.entries(null!==(h=t.sort)&&void 0!==h?h:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),d},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},Me={getOperation:function(){return U.PNSetMembershipsOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channels)||0===(null==t?void 0:t.channels.length))return"Channels cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(j.encodeString(null!==(n=t.uuid)&&void 0!==n?n:r.getUUID()),"/channels")},patchPayload:function(e,t){var n;return(n={set:[],delete:[]})[t.type]=t.channels.map((function(e){return"string"==typeof e?{channel:{id:e}}:{channel:{id:e.id},custom:e.custom,status:e.status}})),n},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["channel.status","channel.type","status"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customChannelFields)&&f.include.push("channel.custom"),(null===(o=t.include)||void 0===o?void 0:o.channelFields)&&f.include.push("channel")),f.include=f.include.join(","),(null===(i=null==t?void 0:t.include)||void 0===i?void 0:i.totalCount)&&(f.count=!0),(null===(a=null==t?void 0:t.page)||void 0===a?void 0:a.next)&&(f.start=null===(u=t.page)||void 0===u?void 0:u.next),(null===(c=null==t?void 0:t.page)||void 0===c?void 0:c.prev)&&(f.end=null===(l=t.page)||void 0===l?void 0:l.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),null!=t.limit&&(f.limit=t.limit),(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}};var Re=Object.freeze({__proto__:null,getOperation:function(){return U.PNAccessManagerAudit},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e){var t=e.config;return"/v2/auth/audit/sub-key/".concat(t.subscribeKey)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(e,t){var n=t.channel,r=t.channelGroup,o=t.authKeys,i=void 0===o?[]:o,a={};return n&&(a.channel=n),r&&(a["channel-group"]=r),i.length>0&&(a.auth=i.join(",")),a},handleResponse:function(e,t){return t.payload}});var Ue=Object.freeze({__proto__:null,getOperation:function(){return U.PNAccessManagerGrant},validateParams:function(e,t){var n=e.config;return n.subscribeKey?n.publishKey?n.secretKey?null==t.uuids||t.authKeys?null==t.uuids||null==t.channels&&null==t.channelGroups?void 0:"Both channel/channelgroup and uuid cannot be used in the same request":"authKeys are required for grant request on uuids":"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"},getURL:function(e){var t=e.config;return"/v2/auth/grant/sub-key/".concat(t.subscribeKey)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(e,t){var n=t.channels,r=void 0===n?[]:n,o=t.channelGroups,i=void 0===o?[]:o,a=t.uuids,s=void 0===a?[]:a,u=t.ttl,c=t.read,l=void 0!==c&&c,p=t.write,f=void 0!==p&&p,h=t.manage,d=void 0!==h&&h,y=t.get,g=void 0!==y&&y,b=t.join,m=void 0!==b&&b,v=t.update,_=void 0!==v&&v,O=t.authKeys,S=void 0===O?[]:O,P=t.delete,w={};return w.r=l?"1":"0",w.w=f?"1":"0",w.m=d?"1":"0",w.d=P?"1":"0",w.g=g?"1":"0",w.j=m?"1":"0",w.u=_?"1":"0",r.length>0&&(w.channel=r.join(",")),i.length>0&&(w["channel-group"]=i.join(",")),S.length>0&&(w.auth=S.join(",")),s.length>0&&(w["target-uuid"]=s.join(",")),(u||0===u)&&(w.ttl=u),w},handleResponse:function(){return{}}});function xe(e){var t,n,r,o,i=void 0!==(null==e?void 0:e.authorizedUserId),a=void 0!==(null===(t=null==e?void 0:e.resources)||void 0===t?void 0:t.users),s=void 0!==(null===(n=null==e?void 0:e.resources)||void 0===n?void 0:n.spaces),u=void 0!==(null===(r=null==e?void 0:e.patterns)||void 0===r?void 0:r.users),c=void 0!==(null===(o=null==e?void 0:e.patterns)||void 0===o?void 0:o.spaces);return u||a||c||s||i}function Ie(e){var t=0;return e.join&&(t|=128),e.update&&(t|=64),e.get&&(t|=32),e.delete&&(t|=8),e.manage&&(t|=4),e.write&&(t|=2),e.read&&(t|=1),t}function De(e,t){if(xe(t))return function(e,t){var n=t.ttl,r=t.resources,o=t.patterns,i=t.meta,a=t.authorizedUserId,s={ttl:0,permissions:{resources:{channels:{},groups:{},uuids:{},users:{},spaces:{}},patterns:{channels:{},groups:{},uuids:{},users:{},spaces:{}},meta:{}}};if(r){var u=r.users,c=r.spaces,l=r.groups;u&&Object.keys(u).forEach((function(e){s.permissions.resources.uuids[e]=Ie(u[e])})),c&&Object.keys(c).forEach((function(e){s.permissions.resources.channels[e]=Ie(c[e])})),l&&Object.keys(l).forEach((function(e){s.permissions.resources.groups[e]=Ie(l[e])}))}if(o){var p=o.users,f=o.spaces,h=o.groups;p&&Object.keys(p).forEach((function(e){s.permissions.patterns.uuids[e]=Ie(p[e])})),f&&Object.keys(f).forEach((function(e){s.permissions.patterns.channels[e]=Ie(f[e])})),h&&Object.keys(h).forEach((function(e){s.permissions.patterns.groups[e]=Ie(h[e])}))}return(n||0===n)&&(s.ttl=n),i&&(s.permissions.meta=i),a&&(s.permissions.uuid="".concat(a)),s}(0,t);var n=t.ttl,r=t.resources,o=t.patterns,i=t.meta,a=t.authorized_uuid,s={ttl:0,permissions:{resources:{channels:{},groups:{},uuids:{},users:{},spaces:{}},patterns:{channels:{},groups:{},uuids:{},users:{},spaces:{}},meta:{}}};if(r){var u=r.uuids,c=r.channels,l=r.groups;u&&Object.keys(u).forEach((function(e){s.permissions.resources.uuids[e]=Ie(u[e])})),c&&Object.keys(c).forEach((function(e){s.permissions.resources.channels[e]=Ie(c[e])})),l&&Object.keys(l).forEach((function(e){s.permissions.resources.groups[e]=Ie(l[e])}))}if(o){var p=o.uuids,f=o.channels,h=o.groups;p&&Object.keys(p).forEach((function(e){s.permissions.patterns.uuids[e]=Ie(p[e])})),f&&Object.keys(f).forEach((function(e){s.permissions.patterns.channels[e]=Ie(f[e])})),h&&Object.keys(h).forEach((function(e){s.permissions.patterns.groups[e]=Ie(h[e])}))}return(n||0===n)&&(s.ttl=n),i&&(s.permissions.meta=i),a&&(s.permissions.uuid="".concat(a)),s}var Fe=Object.freeze({__proto__:null,getOperation:function(){return U.PNAccessManagerGrantToken},extractPermissions:Ie,validateParams:function(e,t){var n,r,o,i,a,s,u=e.config;if(!u.subscribeKey)return"Missing Subscribe Key";if(!u.publishKey)return"Missing Publish Key";if(!u.secretKey)return"Missing Secret Key";if(!t.resources&&!t.patterns)return"Missing either Resources or Patterns.";var c=void 0!==(null==t?void 0:t.authorized_uuid),l=void 0!==(null===(n=null==t?void 0:t.resources)||void 0===n?void 0:n.uuids),p=void 0!==(null===(r=null==t?void 0:t.resources)||void 0===r?void 0:r.channels),f=void 0!==(null===(o=null==t?void 0:t.resources)||void 0===o?void 0:o.groups),h=void 0!==(null===(i=null==t?void 0:t.patterns)||void 0===i?void 0:i.uuids),d=void 0!==(null===(a=null==t?void 0:t.patterns)||void 0===a?void 0:a.channels),y=void 0!==(null===(s=null==t?void 0:t.patterns)||void 0===s?void 0:s.groups),g=c||l||h||p||d||f||y;return xe(t)&&g?"Cannot mix `users`, `spaces` and `authorizedUserId` with `uuids`, `channels`, `groups` and `authorized_uuid`":(!t.resources||t.resources.uuids&&0!==Object.keys(t.resources.uuids).length||t.resources.channels&&0!==Object.keys(t.resources.channels).length||t.resources.groups&&0!==Object.keys(t.resources.groups).length||t.resources.users&&0!==Object.keys(t.resources.users).length||t.resources.spaces&&0!==Object.keys(t.resources.spaces).length)&&(!t.patterns||t.patterns.uuids&&0!==Object.keys(t.patterns.uuids).length||t.patterns.channels&&0!==Object.keys(t.patterns.channels).length||t.patterns.groups&&0!==Object.keys(t.patterns.groups).length||t.patterns.users&&0!==Object.keys(t.patterns.users).length||t.patterns.spaces&&0!==Object.keys(t.patterns.spaces).length)?void 0:"Missing values for either Resources or Patterns."},postURL:function(e){var t=e.config;return"/v3/pam/".concat(t.subscribeKey,"/grant")},usePost:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(){return{}},postPayload:function(e,t){return De(0,t)},handleResponse:function(e,t){return t.data.token}}),Ge={getOperation:function(){return U.PNAccessManagerRevokeToken},validateParams:function(e,t){return e.config.secretKey?t?void 0:"token can't be empty":"Missing Secret Key"},getURL:function(e,t){var n=e.config;return"/v3/pam/".concat(n.subscribeKey,"/grant/").concat(j.encodeString(t))},useDelete:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(e){return{uuid:e.config.getUUID()}},handleResponse:function(e,t){return{status:t.status,data:t.data}}};function Ke(e,t){var n=e.crypto,r=e.config,o=JSON.stringify(t);return r.cipherKey&&(o=n.encrypt(o),o=JSON.stringify(o)),o}var Le=Object.freeze({__proto__:null,getOperation:function(){return U.PNPublishOperation},validateParams:function(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"},usePost:function(e,t){var n=t.sendByPost;return void 0!==n&&n},getURL:function(e,t){var n=e.config,r=t.channel,o=Ke(e,t.message);return"/publish/".concat(n.publishKey,"/").concat(n.subscribeKey,"/0/").concat(j.encodeString(r),"/0/").concat(j.encodeString(o))},postURL:function(e,t){var n=e.config,r=t.channel;return"/publish/".concat(n.publishKey,"/").concat(n.subscribeKey,"/0/").concat(j.encodeString(r),"/0")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},postPayload:function(e,t){return Ke(e,t.message)},prepareParams:function(e,t){var n=t.meta,r=t.replicate,o=void 0===r||r,i=t.storeInHistory,a=t.ttl,s={};return null!=i&&(s.store=i?"1":"0"),a&&(s.ttl=a),!1===o&&(s.norep="true"),n&&"object"==typeof n&&(s.meta=JSON.stringify(n)),s},handleResponse:function(e,t){return{timetoken:t[2]}}});var Be=Object.freeze({__proto__:null,getOperation:function(){return U.PNSignalOperation},validateParams:function(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"},getURL:function(e,t){var n,r=e.config,o=t.channel,i=t.message,a=(n=i,JSON.stringify(n));return"/signal/".concat(r.publishKey,"/").concat(r.subscribeKey,"/0/").concat(j.encodeString(o),"/0/").concat(j.encodeString(a))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{timetoken:t[2]}}});function He(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}var qe=Object.freeze({__proto__:null,getOperation:function(){return U.PNHistoryOperation},validateParams:function(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"},getURL:function(e,t){var n=t.channel,r=e.config;return"/v2/history/sub-key/".concat(r.subscribeKey,"/channel/").concat(j.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.start,r=t.end,o=t.reverse,i=t.count,a=void 0===i?100:i,s=t.stringifiedTimeToken,u=void 0!==s&&s,c=t.includeMeta,l=void 0!==c&&c,p={include_token:"true"};return p.count=a,n&&(p.start=n),r&&(p.end=r),u&&(p.string_message_token="true"),null!=o&&(p.reverse=o.toString()),l&&(p.include_meta="true"),p},handleResponse:function(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return Array.isArray(t[0])&&t[0].forEach((function(t){var r={timetoken:t.timetoken,entry:He(e,t.message)};t.meta&&(r.meta=t.meta),n.messages.push(r)})),n}});var ze=Object.freeze({__proto__:null,getOperation:function(){return U.PNDeleteMessagesOperation},validateParams:function(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"},useDelete:function(){return!0},getURL:function(e,t){var n=t.channel,r=e.config;return"/v3/history/sub-key/".concat(r.subscribeKey,"/channel/").concat(j.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.start,r=t.end,o={};return n&&(o.start=n),r&&(o.end=r),o},handleResponse:function(e,t){return t.payload}});var Ve=Object.freeze({__proto__:null,getOperation:function(){return U.PNMessageCounts},validateParams:function(e,t){var n=t.channels,r=t.timetoken,o=t.channelTimetokens,i=e.config;return n?r&&o?"timetoken and channelTimetokens are incompatible together":o&&o.length>1&&n.length!==o.length?"Length of channelTimetokens and channels do not match":i.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"},getURL:function(e,t){var n=t.channels,r=e.config,o=n.join(",");return"/v3/history/sub-key/".concat(r.subscribeKey,"/message-counts/").concat(j.encodeString(o))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.timetoken,r=t.channelTimetokens,o={};if(r&&1===r.length){var i=s(r,1)[0];o.timetoken=i}else r?o.channelsTimetoken=r.join(","):n&&(o.timetoken=n);return o},handleResponse:function(e,t){return{channels:t.channels}}});var We=Object.freeze({__proto__:null,getOperation:function(){return U.PNFetchMessagesOperation},validateParams:function(e,t){var n=t.channels,r=t.includeMessageActions,o=void 0!==r&&r,i=e.config;if(!n||0===n.length)return"Missing channels";if(!i.subscribeKey)return"Missing Subscribe Key";if(o&&n.length>1)throw new TypeError("History can return actions data for a single channel only. Either pass a single channel or disable the includeMessageActions flag.")},getURL:function(e,t){var n=t.channels,r=void 0===n?[]:n,o=t.includeMessageActions,i=void 0!==o&&o,a=e.config,s=i?"history-with-actions":"history",u=r.length>0?r.join(","):",";return"/v3/".concat(s,"/sub-key/").concat(a.subscribeKey,"/channel/").concat(j.encodeString(u))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channels,r=t.start,o=t.end,i=t.includeMessageActions,a=t.count,s=t.stringifiedTimeToken,u=void 0!==s&&s,c=t.includeMeta,l=void 0!==c&&c,p=t.includeUuid,f=t.includeUUID,h=void 0===f||f,d=t.includeMessageType,y=void 0===d||d,g={};return g.max=a||(n.length>1||!0===i?25:100),r&&(g.start=r),o&&(g.end=o),u&&(g.string_message_token="true"),l&&(g.include_meta="true"),h&&!1!==p&&(g.include_uuid="true"),y&&(g.include_message_type="true"),g},handleResponse:function(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach((function(r){n.channels[r]=[],(t.channels[r]||[]).forEach((function(t){var o={};o.channel=r,o.timetoken=t.timetoken,o.message=function(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}(e,t.message),o.messageType=t.message_type,o.uuid=t.uuid,t.actions&&(o.actions=t.actions,o.data=t.actions),t.meta&&(o.meta=t.meta),n.channels[r].push(o)}))})),t.more&&(n.more=t.more),n}});var $e=Object.freeze({__proto__:null,getOperation:function(){return U.PNTimeOperation},getURL:function(){return"/time/0"},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},prepareParams:function(){return{}},isAuthSupported:function(){return!1},handleResponse:function(e,t){return{timetoken:t[0]}},validateParams:function(){}});var Je=Object.freeze({__proto__:null,getOperation:function(){return U.PNSubscribeOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/subscribe/".concat(n.subscribeKey,"/").concat(j.encodeString(i),"/0")},getRequestTimeout:function(e){return e.config.getSubscribeTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=e.config,r=t.state,o=t.channelGroups,i=void 0===o?[]:o,a=t.timetoken,s=t.filterExpression,u=t.region,c={heartbeat:n.getPresenceTimeout()};return i.length>0&&(c["channel-group"]=i.join(",")),s&&s.length>0&&(c["filter-expr"]=s),Object.keys(r).length&&(c.state=JSON.stringify(r)),a&&(c.tt=a),u&&(c.tr=u),c},handleResponse:function(e,t){var n=[];t.m.forEach((function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,messageType:e.e,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)}));var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}}),Qe={getOperation:function(){return U.PNHandshakeOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channels)&&!(null==t?void 0:t.channelGroups))return"channels and channleGroups both should not be empty"},getURL:function(e,t){var n=e.config,r=t.channels?t.channels.join(","):",";return"/v2/subscribe/".concat(n.subscribeKey,"/").concat(j.encodeString(r),"/0")},getRequestTimeout:function(e){return e.config.getSubscribeTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n={};return t.channelGroups&&t.channelGroups.length>0&&(n["channel-group"]=t.channelGroups.join(",")),n.tt=0,n},handleResponse:function(e,t){return{region:t.t.r,timetoken:t.t.t}}},Xe={getOperation:function(){return U.PNReceiveMessagesOperation},validateParams:function(e,t){return(null==t?void 0:t.channels)||(null==t?void 0:t.channelGroups)?(null==t?void 0:t.timetoken)?(null==t?void 0:t.region)?void 0:"region can not be empty":"timetoken can not be empty":"channels and channleGroups both should not be empty"},getURL:function(e,t){var n=e.config,r=t.channels?t.channels.join(","):",";return"/v2/subscribe/".concat(n.subscribeKey,"/").concat(j.encodeString(r),"/0")},getRequestTimeout:function(e){return e.config.getSubscribeTimeout()},isAuthSupported:function(){return!0},getAbortSignal:function(e,t){return t.abortSignal},prepareParams:function(e,t){var n={};return t.channelGroups&&t.channelGroups.length>0&&(n["channel-group"]=t.channelGroups.join(",")),n.tt=t.timetoken,n.tr=t.region,n},handleResponse:function(e,t){var n=[];return t.m.forEach((function(e){var t={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,messageType:e.e,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,publishMetaData:{timetoken:e.p.t,region:e.p.r}};n.push(t)})),{messages:n,metadata:{region:t.t.r,timetoken:t.t.t}}}},Ye=function(){function e(e){void 0===e&&(e=!1),this.sync=e,this.listeners=new Set}return e.prototype.subscribe=function(e){var t=this;return this.listeners.add(e),function(){t.listeners.delete(e)}},e.prototype.notify=function(e){var t=this,n=function(){t.listeners.forEach((function(t){t(e)}))};this.sync?n():setTimeout(n,0)},e}(),Ze=function(){function e(e){this.label=e,this.transitionMap=new Map,this.enterEffects=[],this.exitEffects=[]}return e.prototype.transition=function(e,t){var n;if(this.transitionMap.has(t.type))return null===(n=this.transitionMap.get(t.type))||void 0===n?void 0:n(e,t)},e.prototype.on=function(e,t){return this.transitionMap.set(e,t),this},e.prototype.with=function(e,t){return[this,e,null!=t?t:[]]},e.prototype.onEnter=function(e){return this.enterEffects.push(e),this},e.prototype.onExit=function(e){return this.exitEffects.push(e),this},e}(),et=function(e){function n(){return null!==e&&e.apply(this,arguments)||this}return t(n,e),n.prototype.describe=function(e){return new Ze(e)},n.prototype.start=function(e,t){this.currentState=e,this.currentContext=t,this.notify({type:"engineStarted",state:e,context:t})},n.prototype.transition=function(e){var t,n,r,o,i,u;if(!this.currentState)throw new Error("Start the engine first");this.notify({type:"eventReceived",event:e});var c=this.currentState.transition(this.currentContext,e);if(c){var l=s(c,3),p=l[0],f=l[1],h=l[2];try{for(var d=a(this.currentState.exitEffects),y=d.next();!y.done;y=d.next()){var g=y.value;this.notify({type:"invocationDispatched",invocation:g(this.currentContext)})}}catch(e){t={error:e}}finally{try{y&&!y.done&&(n=d.return)&&n.call(d)}finally{if(t)throw t.error}}var b=this.currentState;this.currentState=p;var m=this.currentContext;this.currentContext=f,this.notify({type:"transitionDone",fromState:b,fromContext:m,toState:p,toContext:f,event:e});try{for(var v=a(h),_=v.next();!_.done;_=v.next()){g=_.value;this.notify({type:"invocationDispatched",invocation:g})}}catch(e){r={error:e}}finally{try{_&&!_.done&&(o=v.return)&&o.call(v)}finally{if(r)throw r.error}}try{for(var O=a(this.currentState.enterEffects),S=O.next();!S.done;S=O.next()){g=S.value;this.notify({type:"invocationDispatched",invocation:g(this.currentContext)})}}catch(e){i={error:e}}finally{try{S&&!S.done&&(u=O.return)&&u.call(O)}finally{if(i)throw i.error}}}},n}(Ye),tt=function(){function e(e){this.dependencies=e,this.instances=new Map,this.handlers=new Map}return e.prototype.on=function(e,t){this.handlers.set(e,t)},e.prototype.dispatch=function(e){if("CANCEL"!==e.type){var t=this.handlers.get(e.type);if(!t)throw new Error("Unhandled invocation '".concat(e.type,"'"));var n=t(e.payload,this.dependencies);e.managed&&this.instances.set(e.type,n),n.start()}else if(this.instances.has(e.payload)){var r=this.instances.get(e.payload);null==r||r.cancel(),this.instances.delete(e.payload)}},e}();function nt(e,t){var n=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return{type:e,payload:null==t?void 0:t.apply(void 0,u([],s(n),!1))}};return n.type=e,n}function rt(e,t){var n=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return{type:e,payload:t.apply(void 0,u([],s(n),!1)),managed:!0}};return n.type=e,n.cancel={type:"CANCEL",payload:e,managed:!1},n}var ot,it,at,st=function(e){function n(){var t=this.constructor,n=e.call(this,"The operation was aborted.")||this;return n.name="AbortError",Object.setPrototypeOf(n,t.prototype),n}return t(n,e),n}(Error),ut=function(e){function n(){var t=null!==e&&e.apply(this,arguments)||this;return t._aborted=!1,t}return t(n,e),Object.defineProperty(n.prototype,"aborted",{get:function(){return this._aborted},enumerable:!1,configurable:!0}),n.prototype.throwIfAborted=function(){if(this._aborted)throw new st},n.prototype.abort=function(){this._aborted=!0,this.notify(new st)},n}(Ye),ct=function(e){function n(t,n,r){var o=e.call(this,t,n)||this;return o.asyncFunction=r,o.abortSignal=new ut,o}return t(n,e),n.prototype.start=function(){this.asyncFunction(this.payload,this.abortSignal,this.dependencies)},n.prototype.cancel=function(){this.abortSignal.abort()},n}((function(e,t){this.payload=e,this.dependencies=t})),lt=function(e){return function(t,n){return new ct(t,n,e)}},pt=rt("HANDSHAKE",(function(e,t){return{channels:e,groups:t}})),ft=rt("RECEIVE_EVENTS",(function(e,t,n){return{channels:e,groups:t,cursor:n}})),ht=(it=function(e){return e},at=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return{type:ot,payload:it.apply(void 0,u([],s(e),!1)),managed:!1}},at.type=ot="EMIT_EVENTS",at),dt=rt("RECONNECT",(function(e){return e})),yt=rt("HANDSHAKE_RECONNECT",(function(e){return e})),gt=nt("SUBSCRIPTION_CHANGE",(function(e,t){return{channels:e,groups:t}})),bt=nt("DISCONNECT",(function(){return{}})),mt=nt("RECONNECT",(function(){return{}}));nt("RESTORE",(function(e,t,n,r){return{channels:e,groups:t,timetoken:n,region:r}}));var vt=nt("HANDSHAKING_SUCCESS",(function(e){return e})),_t=nt("HANDSHAKING_FAILURE",(function(e){return e})),Ot=nt("HANDSHAKING_RECONNECTING_SUCCESS",(function(e){return{cursor:e}})),St=nt("HANDSHAKING_RECONNECTING_FAILURE",(function(e){return e})),Pt=nt("HANDSHAKING_RECONNECTING_GIVEUP",(function(){return{}})),wt=nt("HANDSHAKING_RECONNECTING_RETRY",(function(){return{}})),kt=nt("RECEIVING_SUCCESS",(function(e,t){return{cursor:e,events:t}})),Tt=nt("RECEIVING_FAILURE",(function(e){return e})),Et=nt("RECONNECTING_SUCCESS",(function(e,t){return{cursor:e,events:t}})),At=nt("RECONNECTING_FAILURE",(function(e){return e})),Nt=nt("RECONNECTING_GIVEUP",(function(){return{}})),Ct=nt("RECONNECTING_RETRY",(function(){return{}})),jt=function(e){function n(t,n){var r=e.call(this,n)||this;return r.on(pt.type,lt((function(e,n,a){var s=a.handshake;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:n.throwIfAborted(),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups})];case 2:return r=i.sent(),t.transition(vt(r)),[3,4];case 3:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof H?[2,t.transition(_t(o))]:[3,4];case 4:return[2]}}))}))}))),r.on(ft.type,lt((function(e,n,a){var s=a.receiveEvents;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:n.throwIfAborted(),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups,timetoken:e.cursor.timetoken,region:e.cursor.region})];case 2:return r=i.sent(),t.transition(kt(r.metadata,r.messages)),[3,4];case 3:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof H?[2,t.transition(Tt(o))]:[3,4];case 4:return[2]}}))}))}))),r.on(ht.type,lt((function(e,t,n){return n.receiveEvents,o(r,void 0,void 0,(function(){return i(this,(function(t){return e.length>0&&console.log(e),[2]}))}))}))),r.on(dt.type,lt((function(e,n,a){var s=a.receiveEvents,u=a.shouldRetry,c=a.getRetryDelay,l=a.delay;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:return u(e.reason,e.attempts)?(n.throwIfAborted(),[4,l(c(e.attempts))]):[2,t.transition(Nt())];case 1:i.sent(),n.throwIfAborted(),i.label=2;case 2:return i.trys.push([2,4,,5]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups,timetoken:e.cursor.timetoken,region:e.cursor.region})];case 3:return r=i.sent(),[2,t.transition(Et(r.metadata,r.messages))];case 4:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof H?[2,t.transition(At(o))]:[3,5];case 5:return[2]}}))}))}))),r.on(yt.type,lt((function(e,n,a){var s=a.handshake,u=a.shouldRetry,c=a.getRetryDelay,l=a.delay;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:return u(e.reason,e.attempts)?(n.throwIfAborted(),[4,l(c(e.attempts))]):[2,t.transition(Pt())];case 1:i.sent(),n.throwIfAborted(),i.label=2;case 2:return i.trys.push([2,4,,5]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups})];case 3:return r=i.sent(),[2,t.transition(Ot(r.metadata))];case 4:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof H?[2,t.transition(St(o))]:[3,5];case 5:return[2]}}))}))}))),r}return t(n,e),n}(tt),Mt=new Ze("STOPPED");Mt.on(gt.type,(function(e,t){return Mt.with({channels:t.payload.channels,groups:t.payload.groups})})),Mt.on(mt.type,(function(e){return Gt.with(n({},e))}));var Rt=new Ze("HANDSHAKE_FAILURE");Rt.on(wt.type,(function(e){return Ft.with(n(n({},e),{attempts:0}))})),Rt.on(bt.type,(function(e){return Mt.with({channels:e.channels,groups:e.groups})}));var Ut=new Ze("STOPPED");Ut.on(gt.type,(function(e,t){return Ut.with({channels:t.payload.channels,groups:t.payload.groups,cursor:e.cursor})})),Ut.on(mt.type,(function(e){return Dt.with(n({},e))}));var xt=new Ze("RECEIVE_FAILURE");xt.on(Ct.type,(function(e){return It.with(n(n({},e),{attempts:0}))})),xt.on(bt.type,(function(e){return Ut.with({channels:e.channels,groups:e.groups,cursor:e.cursor})}));var It=new Ze("RECEIVE_RECONNECTING");It.onEnter((function(e){return dt(e)})),It.onExit((function(){return dt.cancel})),It.on(Et.type,(function(e,t){return Dt.with({channels:e.channels,groups:e.groups,cursor:t.payload.cursor},[ht(t.payload.events)])})),It.on(At.type,(function(e,t){return It.with(n(n({},e),{attempts:e.attempts+1,reason:t.payload}))})),It.on(Nt.type,(function(e){return xt.with({groups:e.groups,channels:e.channels,cursor:e.cursor,reason:e.reason})})),It.on(bt.type,(function(e){return Ut.with({channels:e.channels,groups:e.groups,cursor:e.cursor})}));var Dt=new Ze("RECEIVING");Dt.onEnter((function(e){return ft(e.channels,e.groups,e.cursor)})),Dt.onExit((function(){return ft.cancel})),Dt.on(kt.type,(function(e,t){return Dt.with(n(n({},e),{cursor:t.payload.cursor}),[ht(t.payload.events)])})),Dt.on(gt.type,(function(e,t){return 0===t.payload.channels.length&&0===t.payload.groups.length?Kt.with(void 0):Dt.with(n(n({},e),{channels:t.payload.channels,groups:t.payload.groups}))})),Dt.on(Tt.type,(function(e,t){return It.with(n(n({},e),{attempts:0,reason:t.payload}))})),Dt.on(bt.type,(function(e){return Ut.with({channels:e.channels,groups:e.groups,cursor:e.cursor})}));var Ft=new Ze("HANDSHAKE_RECONNECTING");Ft.onEnter((function(e){return yt(e)})),Ft.onExit((function(){return dt.cancel})),Ft.on(Et.type,(function(e,t){return Dt.with({channels:e.channels,groups:e.groups,cursor:t.payload.cursor},[ht(t.payload.events)])})),Ft.on(At.type,(function(e,t){return Ft.with(n(n({},e),{attempts:e.attempts+1,reason:t.payload}))})),Ft.on(Nt.type,(function(e){return Rt.with({groups:e.groups,channels:e.channels,reason:e.reason})})),Ft.on(bt.type,(function(e){return Mt.with({channels:e.channels,groups:e.groups})}));var Gt=new Ze("HANDSHAKING");Gt.onEnter((function(e){return pt(e.channels,e.groups)})),Gt.onExit((function(){return pt.cancel})),Gt.on(gt.type,(function(e,t){return 0===t.payload.channels.length&&0===t.payload.groups.length?Kt.with(void 0):Gt.with({channels:t.payload.channels,groups:t.payload.groups})})),Gt.on(vt.type,(function(e,t){return Dt.with({channels:e.channels,groups:e.groups,cursor:t.payload})})),Gt.on(_t.type,(function(e,t){return Ft.with(n(n({},e),{attempts:0,reason:t.payload}))})),Gt.on(bt.type,(function(e){return Mt.with({channels:e.channels,groups:e.groups})}));var Kt=new Ze("UNSUBSCRIBED");Kt.on(gt.type,(function(e,t){return Gt.with({channels:t.payload.channels,groups:t.payload.groups})}));var Lt=function(){function e(e){var t=this;this.engine=new et,this.channels=[],this.groups=[],this.dispatcher=new jt(this.engine,e),this.engine.subscribe((function(e){"invocationDispatched"===e.type&&t.dispatcher.dispatch(e.invocation)})),this.engine.start(Kt,void 0)}return Object.defineProperty(e.prototype,"_engine",{get:function(){return this.engine},enumerable:!1,configurable:!0}),e.prototype.subscribe=function(e){var t=e.channels,n=e.groups;this.channels=u(u([],s(this.channels),!1),s(null!=t?t:[]),!1),this.groups=u(u([],s(this.groups),!1),s(null!=n?n:[]),!1),this.engine.transition(gt(this.channels,this.groups))},e.prototype.unsubscribe=function(e){var t=e.channels,n=e.groups;this.channels=this.channels.filter((function(e){var n;return null===(n=!(null==t?void 0:t.includes(e)))||void 0===n||n})),this.groups=this.groups.filter((function(e){var t;return null===(t=!(null==n?void 0:n.includes(e)))||void 0===t||t})),this.engine.transition(gt(this.channels.slice(0),this.groups.slice(0)))},e.prototype.unsubscribeAll=function(){this.channels=[],this.groups=[],this.engine.transition(gt(this.channels.slice(0),this.groups.slice(0)))},e.prototype.reconnect=function(){this.engine.transition(mt())},e.prototype.disconnect=function(){this.engine.transition(bt())},e}(),Bt=function(){function e(e){var t=this,r=e.networking,o=e.cbor,i=new g({setup:e});this._config=i;var a=new T({config:i}),c=e.cryptography;r.init(i);var l=new B(i,o);this._tokenManager=l;var p=new x({maximumSamplesCount:6e4});this._telemetryManager=p;var f={config:i,networking:r,crypto:a,cryptography:c,tokenManager:l,telemetryManager:p,PubNubFile:e.PubNubFile};this.File=e.PubNubFile,this.encryptFile=function(e,n){return c.encryptFile(e,n,t.File)},this.decryptFile=function(e,n){return c.decryptFile(e,n,t.File)};var h=J.bind(this,f,$e),d=J.bind(this,f,ie),y=J.bind(this,f,se),b=J.bind(this,f,ce),m=J.bind(this,f,Je),v=new L;if(this._listenerManager=v,this.iAmHere=J.bind(this,f,se),this.iAmAway=J.bind(this,f,ie),this.setPresenceState=J.bind(this,f,ce),this.handshake=J.bind(this,f,Qe),this.receiveMessages=J.bind(this,f,Xe),!0===i.enableSubscribeBeta){var _=new Lt({handshake:this.handshake,receiveEvents:this.receiveMessages});this.subscribe=_.subscribe.bind(_),this.unsubscribe=_.unsubscribe.bind(_),this.eventEngine=_}else{var O=new R({timeEndpoint:h,leaveEndpoint:d,heartbeatEndpoint:y,setStateEndpoint:b,subscribeEndpoint:m,crypto:f.crypto,config:f.config,listenerManager:v,getFileUrl:function(e){return me(f,e)}});this.subscribe=O.adaptSubscribeChange.bind(O),this.unsubscribe=O.adaptUnsubscribeChange.bind(O),this.disconnect=O.disconnect.bind(O),this.reconnect=O.reconnect.bind(O),this.unsubscribeAll=O.unsubscribeAll.bind(O),this.getSubscribedChannels=O.getSubscribedChannels.bind(O),this.getSubscribedChannelGroups=O.getSubscribedChannelGroups.bind(O),this.setState=O.adaptStateChange.bind(O),this.presence=O.adaptPresenceChange.bind(O),this.destroy=function(e){O.unsubscribeAll(e),O.disconnect()}}this.addListener=v.addListener.bind(v),this.removeListener=v.removeListener.bind(v),this.removeAllListeners=v.removeAllListeners.bind(v),this.parseToken=l.parseToken.bind(l),this.setToken=l.setToken.bind(l),this.getToken=l.getToken.bind(l),this.channelGroups={listGroups:J.bind(this,f,Z),listChannels:J.bind(this,f,ee),addChannels:J.bind(this,f,Q),removeChannels:J.bind(this,f,X),deleteGroup:J.bind(this,f,Y)},this.push={addChannels:J.bind(this,f,te),removeChannels:J.bind(this,f,ne),deleteDevice:J.bind(this,f,oe),listChannels:J.bind(this,f,re)},this.hereNow=J.bind(this,f,le),this.whereNow=J.bind(this,f,ae),this.getState=J.bind(this,f,ue),this.grant=J.bind(this,f,Ue),this.grantToken=J.bind(this,f,Fe),this.audit=J.bind(this,f,Re),this.revokeToken=J.bind(this,f,Ge),this.publish=J.bind(this,f,Le),this.fire=function(e,n){return e.replicate=!1,e.storeInHistory=!1,t.publish(e,n)},this.signal=J.bind(this,f,Be),this.history=J.bind(this,f,qe),this.deleteMessages=J.bind(this,f,ze),this.messageCounts=J.bind(this,f,Ve),this.fetchMessages=J.bind(this,f,We),this.addMessageAction=J.bind(this,f,pe),this.removeMessageAction=J.bind(this,f,fe),this.getMessageActions=J.bind(this,f,he),this.listFiles=J.bind(this,f,de);var S=J.bind(this,f,ye);this.publishFile=J.bind(this,f,ge),this.sendFile=be({generateUploadUrl:S,publishFile:this.publishFile,modules:f}),this.getFileUrl=function(e){return me(f,e)},this.downloadFile=J.bind(this,f,ve),this.deleteFile=J.bind(this,f,_e),this.objects={getAllUUIDMetadata:J.bind(this,f,Oe),getUUIDMetadata:J.bind(this,f,Se),setUUIDMetadata:J.bind(this,f,Pe),removeUUIDMetadata:J.bind(this,f,we),getAllChannelMetadata:J.bind(this,f,ke),getChannelMetadata:J.bind(this,f,Te),setChannelMetadata:J.bind(this,f,Ee),removeChannelMetadata:J.bind(this,f,Ae),getChannelMembers:J.bind(this,f,Ne),setChannelMembers:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return J.call.apply(J,u([t,f,Ce,n({type:"set"},e)],s(r),!1))},removeChannelMembers:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return J.call.apply(J,u([t,f,Ce,n({type:"delete"},e)],s(r),!1))},getMemberships:J.bind(this,f,je),setMemberships:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return J.call.apply(J,u([t,f,Me,n({type:"set"},e)],s(r),!1))},removeMemberships:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return J.call.apply(J,u([t,f,Me,n({type:"delete"},e)],s(r),!1))}},this.createUser=function(e){return t.objects.setUUIDMetadata({uuid:e.userId,data:e.data,include:e.include})},this.updateUser=this.createUser,this.removeUser=function(e){return t.objects.removeUUIDMetadata({uuid:null==e?void 0:e.userId})},this.fetchUser=function(e){return t.objects.getUUIDMetadata({uuid:null==e?void 0:e.userId,include:null==e?void 0:e.include})},this.fetchUsers=this.objects.getAllUUIDMetadata,this.createSpace=function(e){return t.objects.setChannelMetadata({channel:e.spaceId,data:e.data,include:e.include})},this.updateSpace=this.createSpace,this.removeSpace=function(e){return t.objects.removeChannelMetadata({channel:e.spaceId})},this.fetchSpace=function(e){return t.objects.getChannelMetadata({channel:e.spaceId,include:e.include})},this.fetchSpaces=this.objects.getAllChannelMetadata,this.addMemberships=function(e){var n,r;return"string"==typeof e.spaceId?t.objects.setChannelMembers({channel:e.spaceId,uuids:null===(n=e.users)||void 0===n?void 0:n.map((function(e){return"string"==typeof e?e:{id:e.userId,custom:e.custom,status:e.status}})),limit:0}):t.objects.setMemberships({uuid:e.userId,channels:null===(r=e.spaces)||void 0===r?void 0:r.map((function(e){return"string"==typeof e?e:{id:e.spaceId,custom:e.custom,status:e.status}})),limit:0})},this.updateMemberships=this.addMemberships,this.removeMemberships=function(e){return"string"==typeof e.spaceId?t.objects.removeChannelMembers({channel:e.spaceId,uuids:e.userIds,limit:0}):t.objects.removeMemberships({uuid:e.userId,channels:e.spaceIds,limit:0})},this.fetchMemberships=function(e){return"string"==typeof e.spaceId?t.objects.getChannelMembers({channel:e.spaceId,filter:e.filter,limit:e.limit,page:e.page,include:{customFields:e.include.customFields,UUIDFields:e.include.userFields,customUUIDFields:e.include.customUserFields,totalCount:e.include.totalCount},sort:null!=e.sort?Object.fromEntries(Object.entries(e.sort).map((function(e){var t=s(e,2),n=t[0],r=t[1];return[n.replace("user","uuid"),r]}))):null}).then((function(e){var t;return e.data=null===(t=e.data)||void 0===t?void 0:t.map((function(e){return{user:e.uuid,custom:e.custom,updated:e.updated,eTag:e.eTag}})),e})):t.objects.getMemberships({uuid:e.userId,filter:e.filter,limit:e.limit,page:e.page,include:{customFields:e.include.customFields,channelFields:e.include.spaceFields,customChannelFields:e.include.customSpaceFields,totalCount:e.include.totalCount},sort:null!=e.sort?Object.fromEntries(Object.entries(e.sort).map((function(e){var t=s(e,2),n=t[0],r=t[1];return[n.replace("space","channel"),r]}))):null}).then((function(e){var t;return e.data=null===(t=e.data)||void 0===t?void 0:t.map((function(e){return{space:e.channel,custom:e.custom,updated:e.updated,eTag:e.eTag}})),e}))},this.time=h,this.stop=this.destroy,this.encrypt=a.encrypt.bind(a),this.decrypt=a.decrypt.bind(a),this.getAuthKey=f.config.getAuthKey.bind(f.config),this.setAuthKey=f.config.setAuthKey.bind(f.config),this.setCipherKey=f.config.setCipherKey.bind(f.config),this.getUUID=f.config.getUUID.bind(f.config),this.setUUID=f.config.setUUID.bind(f.config),this.getUserId=f.config.getUserId.bind(f.config),this.setUserId=f.config.setUserId.bind(f.config),this.getFilterExpression=f.config.getFilterExpression.bind(f.config),this.setFilterExpression=f.config.setFilterExpression.bind(f.config),this.setHeartbeatInterval=f.config.setHeartbeatInterval.bind(f.config),r.hasModule("proxy")&&(this.setProxy=function(e){f.config.setProxy(e),t.reconnect()})}return e.prototype.getVersion=function(){return this._config.getVersion()},e.prototype._addPnsdkSuffix=function(e,t){this._config._addPnsdkSuffix(e,t)},e.prototype.networkDownDetected=function(){this._listenerManager.announceNetworkDown(),this._config.restore?this.disconnect():this.destroy(!0)},e.prototype.networkUpDetected=function(){this._listenerManager.announceNetworkUp(),this.reconnect()},e.notificationPayload=function(e,t){return new K(e,t)},e.generateUUID=function(){return y()},e.OPERATIONS=U,e.CATEGORIES=M,e}(),Ht=function(){function e(e){var t=this;this._modules={},Object.keys(e).forEach((function(n){t._modules[n]=e[n].bind(t)}))}return e.prototype.init=function(e){this._config=e,Array.isArray(this._config.origin)?this._currentSubDomain=Math.floor(Math.random()*this._config.origin.length):this._currentSubDomain=0,this._coreParams={},this.shiftStandardOrigin()},e.prototype.nextOrigin=function(){var e=this._config.secure?"https://":"http://";if("string"==typeof this._config.origin)return"".concat(e).concat(this._config.origin);this._currentSubDomain+=1,this._currentSubDomain>=this._config.origin.length&&(this._currentSubDomain=0);var t=this._config.origin[this._currentSubDomain];return"".concat(e).concat(t)},e.prototype.hasModule=function(e){return e in this._modules},e.prototype.shiftStandardOrigin=function(){return this._standardOrigin=this.nextOrigin(),this._standardOrigin},e.prototype.getStandardOrigin=function(){return this._standardOrigin},e.prototype.POSTFILE=function(e,t,n){return this._modules.postfile(e,t,n)},e.prototype.GETFILE=function(e,t,n){return this._modules.getfile(e,t,n)},e.prototype.POST=function(e,t,n,r){return this._modules.post(e,t,n,r)},e.prototype.PATCH=function(e,t,n,r){return this._modules.patch(e,t,n,r)},e.prototype.GET=function(e,t,n){return this._modules.get(e,t,n)},e.prototype.DELETE=function(e,t,n){return this._modules.del(e,t,n)},e.prototype._detectErrorCategory=function(e){if("ENOTFOUND"===e.code)return M.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return M.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return M.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return M.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return M.PNNetworkIssuesCategory;if(e.timeout)return M.PNTimeoutCategory;if("ETIMEDOUT"===e.code)return M.PNNetworkIssuesCategory;if(e.response){if(e.response.badRequest)return M.PNBadRequestCategory;if(e.response.forbidden)return M.PNAccessDeniedCategory}return M.PNUnknownCategory},e}();function qt(e){var t=function(e){return e&&"object"==typeof e&&e.constructor===Object};if(!t(e))return e;var n={};return Object.keys(e).forEach((function(r){var o=function(e){return"string"==typeof e||e instanceof String}(r),i=r,a=e[r];Array.isArray(r)||o&&r.indexOf(",")>=0?i=(o?r.split(","):r).reduce((function(e,t){return e+=String.fromCharCode(t)}),""):(function(e){return"number"==typeof e&&isFinite(e)}(r)||o&&!isNaN(r))&&(i=String.fromCharCode(o?parseInt(r,10):10));n[i]=t(a)?qt(a):a})),n}var zt=function(){function e(e,t){this._base64ToBinary=t,this._decode=e}return e.prototype.decodeToken=function(e){var t="";e.length%4==3?t="=":e.length%4==2&&(t="==");var n=e.replace(/-/gi,"+").replace(/_/gi,"/")+t,r=this._decode(this._base64ToBinary(n));if("object"==typeof r)return r},e}(),Vt={exports:{}},Wt={exports:{}};!function(e){function t(e){if(e)return function(e){for(var n in t.prototype)e[n]=t.prototype[n];return e}(e)}e.exports=t,t.prototype.on=t.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},t.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},t.prototype.off=t.prototype.removeListener=t.prototype.removeAllListeners=t.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+e];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var o=0;o<r.length;o++)if((n=r[o])===t||n.fn===t){r.splice(o,1);break}return 0===r.length&&delete this._callbacks["$"+e],this},t.prototype.emit=function(e){this._callbacks=this._callbacks||{};for(var t=new Array(arguments.length-1),n=this._callbacks["$"+e],r=1;r<arguments.length;r++)t[r-1]=arguments[r];if(n){r=0;for(var o=(n=n.slice(0)).length;r<o;++r)n[r].apply(this,t)}return this},t.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks["$"+e]||[]},t.prototype.hasListeners=function(e){return!!this.listeners(e).length}}(Wt);var $t=en;en.default=en,en.stable=on,en.stableStringify=on;var Jt="[...]",Qt="[Circular]",Xt=[],Yt=[];function Zt(){return{depthLimit:Number.MAX_SAFE_INTEGER,edgesLimit:Number.MAX_SAFE_INTEGER}}function en(e,t,n,r){var o;void 0===r&&(r=Zt()),nn(e,"",0,[],void 0,0,r);try{o=0===Yt.length?JSON.stringify(e,t,n):JSON.stringify(e,sn(t),n)}catch(e){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;0!==Xt.length;){var i=Xt.pop();4===i.length?Object.defineProperty(i[0],i[1],i[3]):i[0][i[1]]=i[2]}}return o}function tn(e,t,n,r){var o=Object.getOwnPropertyDescriptor(r,n);void 0!==o.get?o.configurable?(Object.defineProperty(r,n,{value:e}),Xt.push([r,n,t,o])):Yt.push([t,n,e]):(r[n]=e,Xt.push([r,n,t]))}function nn(e,t,n,r,o,i,a){var s;if(i+=1,"object"==typeof e&&null!==e){for(s=0;s<r.length;s++)if(r[s]===e)return void tn(Qt,e,t,o);if(void 0!==a.depthLimit&&i>a.depthLimit)return void tn(Jt,e,t,o);if(void 0!==a.edgesLimit&&n+1>a.edgesLimit)return void tn(Jt,e,t,o);if(r.push(e),Array.isArray(e))for(s=0;s<e.length;s++)nn(e[s],s,s,r,e,i,a);else{var u=Object.keys(e);for(s=0;s<u.length;s++){var c=u[s];nn(e[c],c,s,r,e,i,a)}}r.pop()}}function rn(e,t){return e<t?-1:e>t?1:0}function on(e,t,n,r){void 0===r&&(r=Zt());var o,i=an(e,"",0,[],void 0,0,r)||e;try{o=0===Yt.length?JSON.stringify(i,t,n):JSON.stringify(i,sn(t),n)}catch(e){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;0!==Xt.length;){var a=Xt.pop();4===a.length?Object.defineProperty(a[0],a[1],a[3]):a[0][a[1]]=a[2]}}return o}function an(e,t,n,r,o,i,a){var s;if(i+=1,"object"==typeof e&&null!==e){for(s=0;s<r.length;s++)if(r[s]===e)return void tn(Qt,e,t,o);try{if("function"==typeof e.toJSON)return}catch(e){return}if(void 0!==a.depthLimit&&i>a.depthLimit)return void tn(Jt,e,t,o);if(void 0!==a.edgesLimit&&n+1>a.edgesLimit)return void tn(Jt,e,t,o);if(r.push(e),Array.isArray(e))for(s=0;s<e.length;s++)an(e[s],s,s,r,e,i,a);else{var u={},c=Object.keys(e).sort(rn);for(s=0;s<c.length;s++){var l=c[s];an(e[l],l,s,r,e,i,a),u[l]=e[l]}if(void 0===o)return u;Xt.push([o,t,e]),o[t]=u}r.pop()}}function sn(e){return e=void 0!==e?e:function(e,t){return t},function(t,n){if(Yt.length>0)for(var r=0;r<Yt.length;r++){var o=Yt[r];if(o[1]===t&&o[0]===n){n=o[2],Yt.splice(r,1);break}}return e.call(this,t,n)}}var un,cn="undefined"!=typeof Symbol&&Symbol,ln=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0},pn="Function.prototype.bind called on incompatible ",fn=Array.prototype.slice,hn=Object.prototype.toString,dn="[object Function]",yn=function(e){var t=this;if("function"!=typeof t||hn.call(t)!==dn)throw new TypeError(pn+t);for(var n,r=fn.call(arguments,1),o=function(){if(this instanceof n){var o=t.apply(this,r.concat(fn.call(arguments)));return Object(o)===o?o:this}return t.apply(e,r.concat(fn.call(arguments)))},i=Math.max(0,t.length-r.length),a=[],s=0;s<i;s++)a.push("$"+s);if(n=Function("binder","return function ("+a.join(",")+"){ return binder.apply(this,arguments); }")(o),t.prototype){var u=function(){};u.prototype=t.prototype,n.prototype=new u,u.prototype=null}return n},gn=Function.prototype.bind||yn,bn=gn.call(Function.call,Object.prototype.hasOwnProperty),mn=SyntaxError,vn=Function,_n=TypeError,On=function(e){try{return vn('"use strict"; return ('+e+").constructor;")()}catch(e){}},Sn=Object.getOwnPropertyDescriptor;if(Sn)try{Sn({},"")}catch(e){Sn=null}var Pn=function(){throw new _n},wn=Sn?function(){try{return Pn}catch(e){try{return Sn(arguments,"callee").get}catch(e){return Pn}}}():Pn,kn="function"==typeof cn&&"function"==typeof Symbol&&"symbol"==typeof cn("foo")&&"symbol"==typeof Symbol("bar")&&ln(),Tn=Object.getPrototypeOf||function(e){return e.__proto__},En={},An="undefined"==typeof Uint8Array?un:Tn(Uint8Array),Nn={"%AggregateError%":"undefined"==typeof AggregateError?un:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?un:ArrayBuffer,"%ArrayIteratorPrototype%":kn?Tn([][Symbol.iterator]()):un,"%AsyncFromSyncIteratorPrototype%":un,"%AsyncFunction%":En,"%AsyncGenerator%":En,"%AsyncGeneratorFunction%":En,"%AsyncIteratorPrototype%":En,"%Atomics%":"undefined"==typeof Atomics?un:Atomics,"%BigInt%":"undefined"==typeof BigInt?un:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?un:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?un:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?un:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?un:FinalizationRegistry,"%Function%":vn,"%GeneratorFunction%":En,"%Int8Array%":"undefined"==typeof Int8Array?un:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?un:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?un:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":kn?Tn(Tn([][Symbol.iterator]())):un,"%JSON%":"object"==typeof JSON?JSON:un,"%Map%":"undefined"==typeof Map?un:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&kn?Tn((new Map)[Symbol.iterator]()):un,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?un:Promise,"%Proxy%":"undefined"==typeof Proxy?un:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?un:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?un:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&kn?Tn((new Set)[Symbol.iterator]()):un,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?un:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":kn?Tn(""[Symbol.iterator]()):un,"%Symbol%":kn?Symbol:un,"%SyntaxError%":mn,"%ThrowTypeError%":wn,"%TypedArray%":An,"%TypeError%":_n,"%Uint8Array%":"undefined"==typeof Uint8Array?un:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?un:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?un:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?un:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?un:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?un:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?un:WeakSet},Cn=function e(t){var n;if("%AsyncFunction%"===t)n=On("async function () {}");else if("%GeneratorFunction%"===t)n=On("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=On("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&(n=Tn(o.prototype))}return Nn[t]=n,n},jn={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},Mn=gn,Rn=bn,Un=Mn.call(Function.call,Array.prototype.concat),xn=Mn.call(Function.apply,Array.prototype.splice),In=Mn.call(Function.call,String.prototype.replace),Dn=Mn.call(Function.call,String.prototype.slice),Fn=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,Gn=/\\(\\)?/g,Kn=function(e){var t=Dn(e,0,1),n=Dn(e,-1);if("%"===t&&"%"!==n)throw new mn("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new mn("invalid intrinsic syntax, expected opening `%`");var r=[];return In(e,Fn,(function(e,t,n,o){r[r.length]=n?In(o,Gn,"$1"):t||e})),r},Ln=function(e,t){var n,r=e;if(Rn(jn,r)&&(r="%"+(n=jn[r])[0]+"%"),Rn(Nn,r)){var o=Nn[r];if(o===En&&(o=Cn(r)),void 0===o&&!t)throw new _n("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:o}}throw new mn("intrinsic "+e+" does not exist!")},Bn=function(e,t){if("string"!=typeof e||0===e.length)throw new _n("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new _n('"allowMissing" argument must be a boolean');var n=Kn(e),r=n.length>0?n[0]:"",o=Ln("%"+r+"%",t),i=o.name,a=o.value,s=!1,u=o.alias;u&&(r=u[0],xn(n,Un([0,1],u)));for(var c=1,l=!0;c<n.length;c+=1){var p=n[c],f=Dn(p,0,1),h=Dn(p,-1);if(('"'===f||"'"===f||"`"===f||'"'===h||"'"===h||"`"===h)&&f!==h)throw new mn("property names with quotes must have matching quotes");if("constructor"!==p&&l||(s=!0),Rn(Nn,i="%"+(r+="."+p)+"%"))a=Nn[i];else if(null!=a){if(!(p in a)){if(!t)throw new _n("base intrinsic for "+e+" exists, but the property is not available.");return}if(Sn&&c+1>=n.length){var d=Sn(a,p);a=(l=!!d)&&"get"in d&&!("originalValue"in d.get)?d.get:a[p]}else l=Rn(a,p),a=a[p];l&&!s&&(Nn[i]=a)}}return a},Hn={exports:{}};!function(e){var t=gn,n=Bn,r=n("%Function.prototype.apply%"),o=n("%Function.prototype.call%"),i=n("%Reflect.apply%",!0)||t.call(o,r),a=n("%Object.getOwnPropertyDescriptor%",!0),s=n("%Object.defineProperty%",!0),u=n("%Math.max%");if(s)try{s({},"a",{value:1})}catch(e){s=null}e.exports=function(e){var n=i(t,o,arguments);if(a&&s){var r=a(n,"length");r.configurable&&s(n,"length",{value:1+u(0,e.length-(arguments.length-1))})}return n};var c=function(){return i(t,r,arguments)};s?s(e.exports,"apply",{value:c}):e.exports.apply=c}(Hn);var qn=Bn,zn=Hn.exports,Vn=zn(qn("String.prototype.indexOf")),Wn=l(Object.freeze({__proto__:null,default:{}})),$n="function"==typeof Map&&Map.prototype,Jn=Object.getOwnPropertyDescriptor&&$n?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,Qn=$n&&Jn&&"function"==typeof Jn.get?Jn.get:null,Xn=$n&&Map.prototype.forEach,Yn="function"==typeof Set&&Set.prototype,Zn=Object.getOwnPropertyDescriptor&&Yn?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,er=Yn&&Zn&&"function"==typeof Zn.get?Zn.get:null,tr=Yn&&Set.prototype.forEach,nr="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,rr="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,or="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,ir=Boolean.prototype.valueOf,ar=Object.prototype.toString,sr=Function.prototype.toString,ur=String.prototype.match,cr=String.prototype.slice,lr=String.prototype.replace,pr=String.prototype.toUpperCase,fr=String.prototype.toLowerCase,hr=RegExp.prototype.test,dr=Array.prototype.concat,yr=Array.prototype.join,gr=Array.prototype.slice,br=Math.floor,mr="function"==typeof BigInt?BigInt.prototype.valueOf:null,vr=Object.getOwnPropertySymbols,_r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,Or="function"==typeof Symbol&&"object"==typeof Symbol.iterator,Sr="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Or||"symbol")?Symbol.toStringTag:null,Pr=Object.prototype.propertyIsEnumerable,wr=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function kr(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||hr.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var r=e<0?-br(-e):br(e);if(r!==e){var o=String(r),i=cr.call(t,o.length+1);return lr.call(o,n,"$&_")+"."+lr.call(lr.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return lr.call(t,n,"$&_")}var Tr=Wn,Er=Tr.custom,Ar=Rr(Er)?Er:null;function Nr(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function Cr(e){return lr.call(String(e),/"/g,"&quot;")}function jr(e){return!("[object Array]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}function Mr(e){return!("[object RegExp]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}function Rr(e){if(Or)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!_r)return!1;try{return _r.call(e),!0}catch(e){}return!1}var Ur=Object.prototype.hasOwnProperty||function(e){return e in this};function xr(e,t){return Ur.call(e,t)}function Ir(e){return ar.call(e)}function Dr(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function Fr(e,t){if(e.length>t.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return Fr(cr.call(e,0,t.maxStringLength),t)+r}return Nr(lr.call(lr.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Gr),"single",t)}function Gr(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+pr.call(t.toString(16))}function Kr(e){return"Object("+e+")"}function Lr(e){return e+" { ? }"}function Br(e,t,n,r){return e+" ("+t+") {"+(r?Hr(n,r):yr.call(n,", "))+"}"}function Hr(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+yr.call(e,","+n)+"\n"+t.prev}function qr(e,t){var n=jr(e),r=[];if(n){r.length=e.length;for(var o=0;o<e.length;o++)r[o]=xr(e,o)?t(e[o],e):""}var i,a="function"==typeof vr?vr(e):[];if(Or){i={};for(var s=0;s<a.length;s++)i["$"+a[s]]=a[s]}for(var u in e)xr(e,u)&&(n&&String(Number(u))===u&&u<e.length||Or&&i["$"+u]instanceof Symbol||(hr.call(/[^\w$]/,u)?r.push(t(u,e)+": "+t(e[u],e)):r.push(u+": "+t(e[u],e))));if("function"==typeof vr)for(var c=0;c<a.length;c++)Pr.call(e,a[c])&&r.push("["+t(a[c])+"]: "+t(e[a[c]],e));return r}var zr=Bn,Vr=function(e,t){var n=qn(e,!!t);return"function"==typeof n&&Vn(e,".prototype.")>-1?zn(n):n},Wr=function e(t,n,r,o){var i=n||{};if(xr(i,"quoteStyle")&&"single"!==i.quoteStyle&&"double"!==i.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(xr(i,"maxStringLength")&&("number"==typeof i.maxStringLength?i.maxStringLength<0&&i.maxStringLength!==1/0:null!==i.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var a=!xr(i,"customInspect")||i.customInspect;if("boolean"!=typeof a&&"symbol"!==a)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(xr(i,"indent")&&null!==i.indent&&"\t"!==i.indent&&!(parseInt(i.indent,10)===i.indent&&i.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(xr(i,"numericSeparator")&&"boolean"!=typeof i.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var s=i.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return Fr(t,i);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var u=String(t);return s?kr(t,u):u}if("bigint"==typeof t){var c=String(t)+"n";return s?kr(t,c):c}var l=void 0===i.depth?5:i.depth;if(void 0===r&&(r=0),r>=l&&l>0&&"object"==typeof t)return jr(t)?"[Array]":"[Object]";var p=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=yr.call(Array(e.indent+1)," ")}return{base:n,prev:yr.call(Array(t+1),n)}}(i,r);if(void 0===o)o=[];else if(Dr(o,t)>=0)return"[Circular]";function f(t,n,a){if(n&&(o=gr.call(o)).push(n),a){var s={depth:i.depth};return xr(i,"quoteStyle")&&(s.quoteStyle=i.quoteStyle),e(t,s,r+1,o)}return e(t,i,r+1,o)}if("function"==typeof t&&!Mr(t)){var h=function(e){if(e.name)return e.name;var t=ur.call(sr.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),d=qr(t,f);return"[Function"+(h?": "+h:" (anonymous)")+"]"+(d.length>0?" { "+yr.call(d,", ")+" }":"")}if(Rr(t)){var y=Or?lr.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):_r.call(t);return"object"!=typeof t||Or?y:Kr(y)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var g="<"+fr.call(String(t.nodeName)),b=t.attributes||[],m=0;m<b.length;m++)g+=" "+b[m].name+"="+Nr(Cr(b[m].value),"double",i);return g+=">",t.childNodes&&t.childNodes.length&&(g+="..."),g+="</"+fr.call(String(t.nodeName))+">"}if(jr(t)){if(0===t.length)return"[]";var v=qr(t,f);return p&&!function(e){for(var t=0;t<e.length;t++)if(Dr(e[t],"\n")>=0)return!1;return!0}(v)?"["+Hr(v,p)+"]":"[ "+yr.call(v,", ")+" ]"}if(function(e){return!("[object Error]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}(t)){var _=qr(t,f);return"cause"in Error.prototype||!("cause"in t)||Pr.call(t,"cause")?0===_.length?"["+String(t)+"]":"{ ["+String(t)+"] "+yr.call(_,", ")+" }":"{ ["+String(t)+"] "+yr.call(dr.call("[cause]: "+f(t.cause),_),", ")+" }"}if("object"==typeof t&&a){if(Ar&&"function"==typeof t[Ar]&&Tr)return Tr(t,{depth:l-r});if("symbol"!==a&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!Qn||!e||"object"!=typeof e)return!1;try{Qn.call(e);try{er.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var O=[];return Xn&&Xn.call(t,(function(e,n){O.push(f(n,t,!0)+" => "+f(e,t))})),Br("Map",Qn.call(t),O,p)}if(function(e){if(!er||!e||"object"!=typeof e)return!1;try{er.call(e);try{Qn.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var S=[];return tr&&tr.call(t,(function(e){S.push(f(e,t))})),Br("Set",er.call(t),S,p)}if(function(e){if(!nr||!e||"object"!=typeof e)return!1;try{nr.call(e,nr);try{rr.call(e,rr)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return Lr("WeakMap");if(function(e){if(!rr||!e||"object"!=typeof e)return!1;try{rr.call(e,rr);try{nr.call(e,nr)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return Lr("WeakSet");if(function(e){if(!or||!e||"object"!=typeof e)return!1;try{return or.call(e),!0}catch(e){}return!1}(t))return Lr("WeakRef");if(function(e){return!("[object Number]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}(t))return Kr(f(Number(t)));if(function(e){if(!e||"object"!=typeof e||!mr)return!1;try{return mr.call(e),!0}catch(e){}return!1}(t))return Kr(f(mr.call(t)));if(function(e){return!("[object Boolean]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}(t))return Kr(ir.call(t));if(function(e){return!("[object String]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}(t))return Kr(f(String(t)));if(!function(e){return!("[object Date]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}(t)&&!Mr(t)){var P=qr(t,f),w=wr?wr(t)===Object.prototype:t instanceof Object||t.constructor===Object,k=t instanceof Object?"":"null prototype",T=!w&&Sr&&Object(t)===t&&Sr in t?cr.call(Ir(t),8,-1):k?"Object":"",E=(w||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(T||k?"["+yr.call(dr.call([],T||[],k||[]),": ")+"] ":"");return 0===P.length?E+"{}":p?E+"{"+Hr(P,p)+"}":E+"{ "+yr.call(P,", ")+" }"}return String(t)},$r=zr("%TypeError%"),Jr=zr("%WeakMap%",!0),Qr=zr("%Map%",!0),Xr=Vr("WeakMap.prototype.get",!0),Yr=Vr("WeakMap.prototype.set",!0),Zr=Vr("WeakMap.prototype.has",!0),eo=Vr("Map.prototype.get",!0),to=Vr("Map.prototype.set",!0),no=Vr("Map.prototype.has",!0),ro=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n},oo=String.prototype.replace,io=/%20/g,ao="RFC3986",so={default:ao,formatters:{RFC1738:function(e){return oo.call(e,io,"+")},RFC3986:function(e){return String(e)}},RFC1738:"RFC1738",RFC3986:ao},uo=so,co=Object.prototype.hasOwnProperty,lo=Array.isArray,po=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),fo=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r<e.length;++r)void 0!==e[r]&&(n[r]=e[r]);return n},ho={arrayToObject:fo,assign:function(e,t){return Object.keys(t).reduce((function(e,n){return e[n]=t[n],e}),e)},combine:function(e,t){return[].concat(e,t)},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],n=[],r=0;r<t.length;++r)for(var o=t[r],i=o.obj[o.prop],a=Object.keys(i),s=0;s<a.length;++s){var u=a[s],c=i[u];"object"==typeof c&&null!==c&&-1===n.indexOf(c)&&(t.push({obj:i,prop:u}),n.push(c))}return function(e){for(;e.length>1;){var t=e.pop(),n=t.obj[t.prop];if(lo(n)){for(var r=[],o=0;o<n.length;++o)void 0!==n[o]&&r.push(n[o]);t.obj[t.prop]=r}}}(t),e},decode:function(e,t,n){var r=e.replace(/\+/g," ");if("iso-8859-1"===n)return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch(e){return r}},encode:function(e,t,n,r,o){if(0===e.length)return e;var i=e;if("symbol"==typeof e?i=Symbol.prototype.toString.call(e):"string"!=typeof e&&(i=String(e)),"iso-8859-1"===n)return escape(i).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));for(var a="",s=0;s<i.length;++s){var u=i.charCodeAt(s);45===u||46===u||95===u||126===u||u>=48&&u<=57||u>=65&&u<=90||u>=97&&u<=122||o===uo.RFC1738&&(40===u||41===u)?a+=i.charAt(s):u<128?a+=po[u]:u<2048?a+=po[192|u>>6]+po[128|63&u]:u<55296||u>=57344?a+=po[224|u>>12]+po[128|u>>6&63]+po[128|63&u]:(s+=1,u=65536+((1023&u)<<10|1023&i.charCodeAt(s)),a+=po[240|u>>18]+po[128|u>>12&63]+po[128|u>>6&63]+po[128|63&u])}return a},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(lo(e)){for(var n=[],r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)},merge:function e(t,n,r){if(!n)return t;if("object"!=typeof n){if(lo(t))t.push(n);else{if(!t||"object"!=typeof t)return[t,n];(r&&(r.plainObjects||r.allowPrototypes)||!co.call(Object.prototype,n))&&(t[n]=!0)}return t}if(!t||"object"!=typeof t)return[t].concat(n);var o=t;return lo(t)&&!lo(n)&&(o=fo(t,r)),lo(t)&&lo(n)?(n.forEach((function(n,o){if(co.call(t,o)){var i=t[o];i&&"object"==typeof i&&n&&"object"==typeof n?t[o]=e(i,n,r):t.push(n)}else t[o]=n})),t):Object.keys(n).reduce((function(t,o){var i=n[o];return co.call(t,o)?t[o]=e(t[o],i,r):t[o]=i,t}),o)}},yo=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new $r("Side channel does not contain "+Wr(e))},get:function(r){if(Jr&&r&&("object"==typeof r||"function"==typeof r)){if(e)return Xr(e,r)}else if(Qr){if(t)return eo(t,r)}else if(n)return function(e,t){var n=ro(e,t);return n&&n.value}(n,r)},has:function(r){if(Jr&&r&&("object"==typeof r||"function"==typeof r)){if(e)return Zr(e,r)}else if(Qr){if(t)return no(t,r)}else if(n)return function(e,t){return!!ro(e,t)}(n,r);return!1},set:function(r,o){Jr&&r&&("object"==typeof r||"function"==typeof r)?(e||(e=new Jr),Yr(e,r,o)):Qr?(t||(t=new Qr),to(t,r,o)):(n||(n={key:{},next:null}),function(e,t,n){var r=ro(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,o))}};return r},go=ho,bo=so,mo=Object.prototype.hasOwnProperty,vo={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},_o=Array.isArray,Oo=Array.prototype.push,So=function(e,t){Oo.apply(e,_o(t)?t:[t])},Po=Date.prototype.toISOString,wo=bo.default,ko={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:go.encode,encodeValuesOnly:!1,format:wo,formatter:bo.formatters[wo],indices:!1,serializeDate:function(e){return Po.call(e)},skipNulls:!1,strictNullHandling:!1},To={},Eo=function e(t,n,r,o,i,a,s,u,c,l,p,f,h,d,y,g){for(var b,m=t,v=g,_=0,O=!1;void 0!==(v=v.get(To))&&!O;){var S=v.get(t);if(_+=1,void 0!==S){if(S===_)throw new RangeError("Cyclic object value");O=!0}void 0===v.get(To)&&(_=0)}if("function"==typeof u?m=u(n,m):m instanceof Date?m=p(m):"comma"===r&&_o(m)&&(m=go.maybeMap(m,(function(e){return e instanceof Date?p(e):e}))),null===m){if(i)return s&&!d?s(n,ko.encoder,y,"key",f):n;m=""}if("string"==typeof(b=m)||"number"==typeof b||"boolean"==typeof b||"symbol"==typeof b||"bigint"==typeof b||go.isBuffer(m))return s?[h(d?n:s(n,ko.encoder,y,"key",f))+"="+h(s(m,ko.encoder,y,"value",f))]:[h(n)+"="+h(String(m))];var P,w=[];if(void 0===m)return w;if("comma"===r&&_o(m))d&&s&&(m=go.maybeMap(m,s)),P=[{value:m.length>0?m.join(",")||null:void 0}];else if(_o(u))P=u;else{var k=Object.keys(m);P=c?k.sort(c):k}for(var T=o&&_o(m)&&1===m.length?n+"[]":n,E=0;E<P.length;++E){var A=P[E],N="object"==typeof A&&void 0!==A.value?A.value:m[A];if(!a||null!==N){var C=_o(m)?"function"==typeof r?r(T,A):T:T+(l?"."+A:"["+A+"]");g.set(t,_);var j=yo();j.set(To,g),So(w,e(N,C,r,o,i,a,"comma"===r&&d&&_o(m)?null:s,u,c,l,p,f,h,d,y,j))}}return w},Ao=ho,No=Object.prototype.hasOwnProperty,Co=Array.isArray,jo={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:Ao.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},Mo=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},Ro=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},Uo=function(e,t,n,r){if(e){var o=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,a=n.depth>0&&/(\[[^[\]]*])/.exec(o),s=a?o.slice(0,a.index):o,u=[];if(s){if(!n.plainObjects&&No.call(Object.prototype,s)&&!n.allowPrototypes)return;u.push(s)}for(var c=0;n.depth>0&&null!==(a=i.exec(o))&&c<n.depth;){if(c+=1,!n.plainObjects&&No.call(Object.prototype,a[1].slice(1,-1))&&!n.allowPrototypes)return;u.push(a[1])}return a&&u.push("["+o.slice(a.index)+"]"),function(e,t,n,r){for(var o=r?t:Ro(t,n),i=e.length-1;i>=0;--i){var a,s=e[i];if("[]"===s&&n.parseArrays)a=[].concat(o);else{a=n.plainObjects?Object.create(null):{};var u="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,c=parseInt(u,10);n.parseArrays||""!==u?!isNaN(c)&&s!==u&&String(c)===u&&c>=0&&n.parseArrays&&c<=n.arrayLimit?(a=[])[c]=o:"__proto__"!==u&&(a[u]=o):a={0:o}}o=a}return o}(u,t,n,r)}},xo=function(e,t){var n,r=e,o=function(e){if(!e)return ko;if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");var t=e.charset||ko.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var n=bo.default;if(void 0!==e.format){if(!mo.call(bo.formatters,e.format))throw new TypeError("Unknown format option provided.");n=e.format}var r=bo.formatters[n],o=ko.filter;return("function"==typeof e.filter||_o(e.filter))&&(o=e.filter),{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:ko.addQueryPrefix,allowDots:void 0===e.allowDots?ko.allowDots:!!e.allowDots,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:ko.charsetSentinel,delimiter:void 0===e.delimiter?ko.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:ko.encode,encoder:"function"==typeof e.encoder?e.encoder:ko.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:ko.encodeValuesOnly,filter:o,format:n,formatter:r,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:ko.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:ko.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:ko.strictNullHandling}}(t);"function"==typeof o.filter?r=(0,o.filter)("",r):_o(o.filter)&&(n=o.filter);var i,a=[];if("object"!=typeof r||null===r)return"";i=t&&t.arrayFormat in vo?t.arrayFormat:t&&"indices"in t?t.indices?"indices":"repeat":"indices";var s=vo[i];if(t&&"commaRoundTrip"in t&&"boolean"!=typeof t.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var u="comma"===s&&t&&t.commaRoundTrip;n||(n=Object.keys(r)),o.sort&&n.sort(o.sort);for(var c=yo(),l=0;l<n.length;++l){var p=n[l];o.skipNulls&&null===r[p]||So(a,Eo(r[p],p,s,u,o.strictNullHandling,o.skipNulls,o.encode?o.encoder:null,o.filter,o.sort,o.allowDots,o.serializeDate,o.format,o.formatter,o.encodeValuesOnly,o.charset,c))}var f=a.join(o.delimiter),h=!0===o.addQueryPrefix?"?":"";return o.charsetSentinel&&("iso-8859-1"===o.charset?h+="utf8=%26%2310003%3B&":h+="utf8=%E2%9C%93&"),f.length>0?h+f:""},Io={formats:so,parse:function(e,t){var n=function(e){if(!e)return jo;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?jo.charset:e.charset;return{allowDots:void 0===e.allowDots?jo.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:jo.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:jo.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:jo.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:jo.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:jo.comma,decoder:"function"==typeof e.decoder?e.decoder:jo.decoder,delimiter:"string"==typeof e.delimiter||Ao.isRegExp(e.delimiter)?e.delimiter:jo.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:jo.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:jo.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:jo.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:jo.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:jo.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var r="string"==typeof e?function(e,t){var n,r={__proto__:null},o=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,i=t.parameterLimit===1/0?void 0:t.parameterLimit,a=o.split(t.delimiter,i),s=-1,u=t.charset;if(t.charsetSentinel)for(n=0;n<a.length;++n)0===a[n].indexOf("utf8=")&&("utf8=%E2%9C%93"===a[n]?u="utf-8":"utf8=%26%2310003%3B"===a[n]&&(u="iso-8859-1"),s=n,n=a.length);for(n=0;n<a.length;++n)if(n!==s){var c,l,p=a[n],f=p.indexOf("]="),h=-1===f?p.indexOf("="):f+1;-1===h?(c=t.decoder(p,jo.decoder,u,"key"),l=t.strictNullHandling?null:""):(c=t.decoder(p.slice(0,h),jo.decoder,u,"key"),l=Ao.maybeMap(Ro(p.slice(h+1),t),(function(e){return t.decoder(e,jo.decoder,u,"value")}))),l&&t.interpretNumericEntities&&"iso-8859-1"===u&&(l=Mo(l)),p.indexOf("[]=")>-1&&(l=Co(l)?[l]:l),No.call(r,c)?r[c]=Ao.combine(r[c],l):r[c]=l}return r}(e,n):e,o=n.plainObjects?Object.create(null):{},i=Object.keys(r),a=0;a<i.length;++a){var s=i[a],u=Uo(s,r[s],n,"string"==typeof e);o=Ao.merge(o,u,n)}return!0===n.allowSparse?o:Ao.compact(o)},stringify:xo},Do={};!function(e){function t(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return n(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return n(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}e.type=e=>e.split(/ *; */).shift(),e.params=e=>{const n={};var r,o=t(e.split(/ *; */));try{for(o.s();!(r=o.n()).done;){const e=r.value.split(/ *= */),t=e.shift(),o=e.shift();t&&o&&(n[t]=o)}}catch(e){o.e(e)}finally{o.f()}return n},e.parseLinks=e=>{const n={};var r,o=t(e.split(/ *, */));try{for(o.s();!(r=o.n()).done;){const e=r.value.split(/ *; */),t=e[0].slice(1,-1);n[e[1].split(/ *= */)[1].slice(1,-1)]=t}}catch(e){o.e(e)}finally{o.f()}return n},e.cleanHeader=(e,t)=>(delete e["content-type"],delete e["content-length"],delete e["transfer-encoding"],delete e.host,t&&(delete e.authorization,delete e.cookie),e),e.isObject=e=>null!==e&&"object"==typeof e,e.hasOwn=Object.hasOwn||function(e,t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");return Object.prototype.hasOwnProperty.call(new Object(e),t)},e.mixin=(t,n)=>{for(const r in n)e.hasOwn(n,r)&&(t[r]=n[r])}}(Do);const Fo=Wn,Go=Do.isObject,Ko=Do.hasOwn;var Lo=Bo;function Bo(){}Bo.prototype.clearTimeout=function(){return clearTimeout(this._timer),clearTimeout(this._responseTimeoutTimer),clearTimeout(this._uploadTimeoutTimer),delete this._timer,delete this._responseTimeoutTimer,delete this._uploadTimeoutTimer,this},Bo.prototype.parse=function(e){return this._parser=e,this},Bo.prototype.responseType=function(e){return this._responseType=e,this},Bo.prototype.serialize=function(e){return this._serializer=e,this},Bo.prototype.timeout=function(e){if(!e||"object"!=typeof e)return this._timeout=e,this._responseTimeout=0,this._uploadTimeout=0,this;for(const t in e)if(Ko(e,t))switch(t){case"deadline":this._timeout=e.deadline;break;case"response":this._responseTimeout=e.response;break;case"upload":this._uploadTimeout=e.upload;break;default:console.warn("Unknown timeout option",t)}return this},Bo.prototype.retry=function(e,t){return 0!==arguments.length&&!0!==e||(e=1),e<=0&&(e=0),this._maxRetries=e,this._retries=0,this._retryCallback=t,this};const Ho=new Set(["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"]),qo=new Set([408,413,429,500,502,503,504,521,522,524]);Bo.prototype._shouldRetry=function(e,t){if(!this._maxRetries||this._retries++>=this._maxRetries)return!1;if(this._retryCallback)try{const n=this._retryCallback(e,t);if(!0===n)return!0;if(!1===n)return!1}catch(e){console.error(e)}if(t&&t.status&&qo.has(t.status))return!0;if(e){if(e.code&&Ho.has(e.code))return!0;if(e.timeout&&"ECONNABORTED"===e.code)return!0;if(e.crossDomain)return!0}return!1},Bo.prototype._retry=function(){return this.clearTimeout(),this.req&&(this.req=null,this.req=this.request()),this._aborted=!1,this.timedout=!1,this.timedoutError=null,this._end()},Bo.prototype.then=function(e,t){if(!this._fullfilledPromise){const e=this;this._endCalled&&console.warn("Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises"),this._fullfilledPromise=new Promise(((t,n)=>{e.on("abort",(()=>{if(this._maxRetries&&this._maxRetries>this._retries)return;if(this.timedout&&this.timedoutError)return void n(this.timedoutError);const e=new Error("Aborted");e.code="ABORTED",e.status=this.status,e.method=this.method,e.url=this.url,n(e)})),e.end(((e,r)=>{e?n(e):t(r)}))}))}return this._fullfilledPromise.then(e,t)},Bo.prototype.catch=function(e){return this.then(void 0,e)},Bo.prototype.use=function(e){return e(this),this},Bo.prototype.ok=function(e){if("function"!=typeof e)throw new Error("Callback required");return this._okCallback=e,this},Bo.prototype._isResponseOK=function(e){return!!e&&(this._okCallback?this._okCallback(e):e.status>=200&&e.status<300)},Bo.prototype.get=function(e){return this._header[e.toLowerCase()]},Bo.prototype.getHeader=Bo.prototype.get,Bo.prototype.set=function(e,t){if(Go(e)){for(const t in e)Ko(e,t)&&this.set(t,e[t]);return this}return this._header[e.toLowerCase()]=t,this.header[e]=t,this},Bo.prototype.unset=function(e){return delete this._header[e.toLowerCase()],delete this.header[e],this},Bo.prototype.field=function(e,t,n){if(null==e)throw new Error(".field(name, val) name can not be empty");if(this._data)throw new Error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()");if(Go(e)){for(const t in e)Ko(e,t)&&this.field(t,e[t]);return this}if(Array.isArray(t)){for(const n in t)Ko(t,n)&&this.field(e,t[n]);return this}if(null==t)throw new Error(".field(name, val) val can not be empty");return"boolean"==typeof t&&(t=String(t)),n?this._getFormData().append(e,t,n):this._getFormData().append(e,t),this},Bo.prototype.abort=function(){if(this._aborted)return this;if(this._aborted=!0,this.xhr&&this.xhr.abort(),this.req){if(Fo.gte(process.version,"v13.0.0")&&Fo.lt(process.version,"v14.0.0"))throw new Error("Superagent does not work in v13 properly with abort() due to Node.js core changes");this.req.abort()}return this.clearTimeout(),this.emit("abort"),this},Bo.prototype._auth=function(e,t,n,r){switch(n.type){case"basic":this.set("Authorization",`Basic ${r(`${e}:${t}`)}`);break;case"auto":this.username=e,this.password=t;break;case"bearer":this.set("Authorization",`Bearer ${e}`)}return this},Bo.prototype.withCredentials=function(e){return void 0===e&&(e=!0),this._withCredentials=e,this},Bo.prototype.redirects=function(e){return this._maxRedirects=e,this},Bo.prototype.maxResponseSize=function(e){if("number"!=typeof e)throw new TypeError("Invalid argument");return this._maxResponseSize=e,this},Bo.prototype.toJSON=function(){return{method:this.method,url:this.url,data:this._data,headers:this._header}},Bo.prototype.send=function(e){const t=Go(e);let n=this._header["content-type"];if(this._formData)throw new Error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()");if(t&&!this._data)Array.isArray(e)?this._data=[]:this._isHost(e)||(this._data={});else if(e&&this._data&&this._isHost(this._data))throw new Error("Can't merge these send calls");if(t&&Go(this._data))for(const t in e){if("bigint"==typeof e[t]&&!e[t].toJSON)throw new Error("Cannot serialize BigInt value to json");Ko(e,t)&&(this._data[t]=e[t])}else{if("bigint"==typeof e)throw new Error("Cannot send value of type BigInt");"string"==typeof e?(n||this.type("form"),n=this._header["content-type"],n&&(n=n.toLowerCase().trim()),this._data="application/x-www-form-urlencoded"===n?this._data?`${this._data}&${e}`:e:(this._data||"")+e):this._data=e}return!t||this._isHost(e)||n||this.type("json"),this},Bo.prototype.sortQuery=function(e){return this._sort=void 0===e||e,this},Bo.prototype._finalizeQueryString=function(){const e=this._query.join("&");if(e&&(this.url+=(this.url.includes("?")?"&":"?")+e),this._query.length=0,this._sort){const e=this.url.indexOf("?");if(e>=0){const t=this.url.slice(e+1).split("&");"function"==typeof this._sort?t.sort(this._sort):t.sort(),this.url=this.url.slice(0,e)+"?"+t.join("&")}}},Bo.prototype._appendQueryString=()=>{console.warn("Unsupported")},Bo.prototype._timeoutError=function(e,t,n){if(this._aborted)return;const r=new Error(`${e+t}ms exceeded`);r.timeout=t,r.code="ECONNABORTED",r.errno=n,this.timedout=!0,this.timedoutError=r,this.abort(),this.callback(r)},Bo.prototype._setTimeouts=function(){const e=this;this._timeout&&!this._timer&&(this._timer=setTimeout((()=>{e._timeoutError("Timeout of ",e._timeout,"ETIME")}),this._timeout)),this._responseTimeout&&!this._responseTimeoutTimer&&(this._responseTimeoutTimer=setTimeout((()=>{e._timeoutError("Response timeout of ",e._responseTimeout,"ETIMEDOUT")}),this._responseTimeout))};const zo=Do;var Vo=Wo;function Wo(){}function $o(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return Jo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Jo(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function Jo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Qo(){this._defaults=[]}Wo.prototype.get=function(e){return this.header[e.toLowerCase()]},Wo.prototype._setHeaderProperties=function(e){const t=e["content-type"]||"";this.type=zo.type(t);const n=zo.params(t);for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&(this[e]=n[e]);this.links={};try{e.link&&(this.links=zo.parseLinks(e.link))}catch(e){}},Wo.prototype._setStatusProperties=function(e){const t=Math.trunc(e/100);this.statusCode=e,this.status=this.statusCode,this.statusType=t,this.info=1===t,this.ok=2===t,this.redirect=3===t,this.clientError=4===t,this.serverError=5===t,this.error=(4===t||5===t)&&this.toError(),this.created=201===e,this.accepted=202===e,this.noContent=204===e,this.badRequest=400===e,this.unauthorized=401===e,this.notAcceptable=406===e,this.forbidden=403===e,this.notFound=404===e,this.unprocessableEntity=422===e};for(var Xo=0,Yo=["use","on","once","set","query","type","accept","auth","withCredentials","sortQuery","retry","ok","redirects","timeout","buffer","serialize","parse","ca","key","pfx","cert","disableTLSCerts"];Xo<Yo.length;Xo++){const e=Yo[Xo];Qo.prototype[e]=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return this._defaults.push({fn:e,args:n}),this}}Qo.prototype._setDefaults=function(e){var t,n=$o(this._defaults);try{for(n.s();!(t=n.n()).done;){const n=t.value;e[n.fn](...n.args)}}catch(e){n.e(e)}finally{n.f()}};var Zo=Qo;!function(e,t){function n(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return r(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==n.return||n.return()}finally{if(u)throw a}}}}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}let o;"undefined"!=typeof window?o=window:"undefined"==typeof self?(console.warn("Using browser-only version of superagent in non-browser environment"),o=void 0):o=self;const i=Wt.exports,a=$t,s=Io,u=Lo,c=Do.isObject,l=Do.mixin,p=Do.hasOwn,f=Vo,h=Zo;function d(){}e.exports=function(e,n){return"function"==typeof n?new t.Request("GET",e).end(n):1===arguments.length?new t.Request("GET",e):new t.Request(e,n)};const y=t=e.exports;t.Request=S,y.getXHR=()=>{if(o.XMLHttpRequest)return new o.XMLHttpRequest;throw new Error("Browser-only version of superagent could not find XHR")};const g="".trim?e=>e.trim():e=>e.replace(/(^\s*|\s*$)/g,"");function b(e){if(!c(e))return e;const t=[];for(const n in e)p(e,n)&&m(t,n,e[n]);return t.join("&")}function m(e,t,r){if(void 0!==r)if(null!==r)if(Array.isArray(r)){var o,i=n(r);try{for(i.s();!(o=i.n()).done;){m(e,t,o.value)}}catch(e){i.e(e)}finally{i.f()}}else if(c(r))for(const n in r)p(r,n)&&m(e,`${t}[${n}]`,r[n]);else e.push(encodeURI(t)+"="+encodeURIComponent(r));else e.push(encodeURI(t))}function v(e){const t={},n=e.split("&");let r,o;for(let e=0,i=n.length;e<i;++e)r=n[e],o=r.indexOf("="),-1===o?t[decodeURIComponent(r)]="":t[decodeURIComponent(r.slice(0,o))]=decodeURIComponent(r.slice(o+1));return t}function _(e){return/[/+]json($|[^-\w])/i.test(e)}function O(e){this.req=e,this.xhr=this.req.xhr,this.text="HEAD"!==this.req.method&&(""===this.xhr.responseType||"text"===this.xhr.responseType)||void 0===this.xhr.responseType?this.xhr.responseText:null,this.statusText=this.req.xhr.statusText;let t=this.xhr.status;1223===t&&(t=204),this._setStatusProperties(t),this.headers=function(e){const t=e.split(/\r?\n/),n={};let r,o,i,a;for(let e=0,s=t.length;e<s;++e)o=t[e],r=o.indexOf(":"),-1!==r&&(i=o.slice(0,r).toLowerCase(),a=g(o.slice(r+1)),n[i]=a);return n}(this.xhr.getAllResponseHeaders()),this.header=this.headers,this.header["content-type"]=this.xhr.getResponseHeader("content-type"),this._setHeaderProperties(this.header),null===this.text&&e._responseType?this.body=this.xhr.response:this.body="HEAD"===this.req.method?null:this._parseBody(this.text?this.text:this.xhr.response)}function S(e,t){const n=this;this._query=this._query||[],this.method=e,this.url=t,this.header={},this._header={},this.on("end",(()=>{let e,t=null,r=null;try{r=new O(n)}catch(e){return t=new Error("Parser is unable to parse the response"),t.parse=!0,t.original=e,n.xhr?(t.rawResponse=void 0===n.xhr.responseType?n.xhr.responseText:n.xhr.response,t.status=n.xhr.status?n.xhr.status:null,t.statusCode=t.status):(t.rawResponse=null,t.status=null),n.callback(t)}n.emit("response",r);try{n._isResponseOK(r)||(e=new Error(r.statusText||r.text||"Unsuccessful HTTP response"))}catch(t){e=t}e?(e.original=t,e.response=r,e.status=e.status||r.status,n.callback(e,r)):n.callback(null,r)}))}y.serializeObject=b,y.parseString=v,y.types={html:"text/html",json:"application/json",xml:"text/xml",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},y.serialize={"application/x-www-form-urlencoded":s.stringify,"application/json":a},y.parse={"application/x-www-form-urlencoded":v,"application/json":JSON.parse},l(O.prototype,f.prototype),O.prototype._parseBody=function(e){let t=y.parse[this.type];return this.req._parser?this.req._parser(this,e):(!t&&_(this.type)&&(t=y.parse["application/json"]),t&&e&&(e.length>0||e instanceof Object)?t(e):null)},O.prototype.toError=function(){const e=this.req,t=e.method,n=e.url,r=`cannot ${t} ${n} (${this.status})`,o=new Error(r);return o.status=this.status,o.method=t,o.url=n,o},y.Response=O,i(S.prototype),l(S.prototype,u.prototype),S.prototype.type=function(e){return this.set("Content-Type",y.types[e]||e),this},S.prototype.accept=function(e){return this.set("Accept",y.types[e]||e),this},S.prototype.auth=function(e,t,n){1===arguments.length&&(t=""),"object"==typeof t&&null!==t&&(n=t,t=""),n||(n={type:"function"==typeof btoa?"basic":"auto"});const r=n.encoder?n.encoder:e=>{if("function"==typeof btoa)return btoa(e);throw new Error("Cannot use basic auth, btoa is not a function")};return this._auth(e,t,n,r)},S.prototype.query=function(e){return"string"!=typeof e&&(e=b(e)),e&&this._query.push(e),this},S.prototype.attach=function(e,t,n){if(t){if(this._data)throw new Error("superagent can't mix .send() and .attach()");this._getFormData().append(e,t,n||t.name)}return this},S.prototype._getFormData=function(){return this._formData||(this._formData=new o.FormData),this._formData},S.prototype.callback=function(e,t){if(this._shouldRetry(e,t))return this._retry();const n=this._callback;this.clearTimeout(),e&&(this._maxRetries&&(e.retries=this._retries-1),this.emit("error",e)),n(e,t)},S.prototype.crossDomainError=function(){const e=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");e.crossDomain=!0,e.status=this.status,e.method=this.method,e.url=this.url,this.callback(e)},S.prototype.agent=function(){return console.warn("This is not supported in browser version of superagent"),this},S.prototype.ca=S.prototype.agent,S.prototype.buffer=S.prototype.ca,S.prototype.write=()=>{throw new Error("Streaming is not supported in browser version of superagent")},S.prototype.pipe=S.prototype.write,S.prototype._isHost=function(e){return e&&"object"==typeof e&&!Array.isArray(e)&&"[object Object]"!==Object.prototype.toString.call(e)},S.prototype.end=function(e){this._endCalled&&console.warn("Warning: .end() was called twice. This is not supported in superagent"),this._endCalled=!0,this._callback=e||d,this._finalizeQueryString(),this._end()},S.prototype._setUploadTimeout=function(){const e=this;this._uploadTimeout&&!this._uploadTimeoutTimer&&(this._uploadTimeoutTimer=setTimeout((()=>{e._timeoutError("Upload timeout of ",e._uploadTimeout,"ETIMEDOUT")}),this._uploadTimeout))},S.prototype._end=function(){if(this._aborted)return this.callback(new Error("The request has been aborted even before .end() was called"));const e=this;this.xhr=y.getXHR();const t=this.xhr;let n=this._formData||this._data;this._setTimeouts(),t.addEventListener("readystatechange",(()=>{const n=t.readyState;if(n>=2&&e._responseTimeoutTimer&&clearTimeout(e._responseTimeoutTimer),4!==n)return;let r;try{r=t.status}catch(e){r=0}if(!r){if(e.timedout||e._aborted)return;return e.crossDomainError()}e.emit("end")}));const r=(t,n)=>{n.total>0&&(n.percent=n.loaded/n.total*100,100===n.percent&&clearTimeout(e._uploadTimeoutTimer)),n.direction=t,e.emit("progress",n)};if(this.hasListeners("progress"))try{t.addEventListener("progress",r.bind(null,"download")),t.upload&&t.upload.addEventListener("progress",r.bind(null,"upload"))}catch(e){}t.upload&&this._setUploadTimeout();try{this.username&&this.password?t.open(this.method,this.url,!0,this.username,this.password):t.open(this.method,this.url,!0)}catch(e){return this.callback(e)}if(this._withCredentials&&(t.withCredentials=!0),!this._formData&&"GET"!==this.method&&"HEAD"!==this.method&&"string"!=typeof n&&!this._isHost(n)){const e=this._header["content-type"];let t=this._serializer||y.serialize[e?e.split(";")[0]:""];!t&&_(e)&&(t=y.serialize["application/json"]),t&&(n=t(n))}for(const e in this.header)null!==this.header[e]&&p(this.header,e)&&t.setRequestHeader(e,this.header[e]);this._responseType&&(t.responseType=this._responseType),this.emit("request",this),t.send(void 0===n?null:n)},y.agent=()=>new h;for(var P=0,w=["GET","POST","OPTIONS","PATCH","PUT","DELETE"];P<w.length;P++){const e=w[P];h.prototype[e.toLowerCase()]=function(t,n){const r=new y.Request(e,t);return this._setDefaults(r),n&&r.end(n),r}}function k(e,t,n){const r=y("DELETE",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}h.prototype.del=h.prototype.delete,y.get=(e,t,n)=>{const r=y("GET",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},y.head=(e,t,n)=>{const r=y("HEAD",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},y.options=(e,t,n)=>{const r=y("OPTIONS",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},y.del=k,y.delete=k,y.patch=(e,t,n)=>{const r=y("PATCH",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},y.post=(e,t,n)=>{const r=y("POST",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},y.put=(e,t,n)=>{const r=y("PUT",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}}(Vt,Vt.exports);var ei=Vt.exports;function ti(e){var t=(new Date).getTime(),n=(new Date).toISOString(),r=console&&console.log?console:window&&window.console&&window.console.log?window.console:console;r.log("<<<<<"),r.log("[".concat(n,"]"),"\n",e.url,"\n",e.qs),r.log("-----"),e.on("response",(function(n){var o=(new Date).getTime()-t,i=(new Date).toISOString();r.log(">>>>>>"),r.log("[".concat(i," / ").concat(o,"]"),"\n",e.url,"\n",e.qs,"\n",n.text),r.log("-----")}))}function ni(e,t,n){var r=this;this._config.logVerbosity&&(e=e.use(ti)),this._config.proxy&&this._modules.proxy&&(e=this._modules.proxy.call(this,e)),this._config.keepAlive&&this._modules.keepAlive&&(e=this._modules.keepAlive(e));var o=e;if(t.abortSignal)var i=t.abortSignal.subscribe((function(){o.abort(),i()}));return!0===t.forceBuffered?o="undefined"==typeof Blob?o.buffer().responseType("arraybuffer"):o.responseType("arraybuffer"):!1===t.forceBuffered&&(o=o.buffer(!1)),(o=o.timeout(t.timeout)).on("abort",(function(){return n({category:M.PNUnknownCategory,error:!0,operation:t.operation,errorData:new Error("Aborted")},null)})),o.end((function(e,o){var i,a={};if(a.error=null!==e,a.operation=t.operation,o&&o.status&&(a.statusCode=o.status),e){if(e.response&&e.response.text&&!r._config.logVerbosity)try{a.errorData=JSON.parse(e.response.text)}catch(t){a.errorData=e}else a.errorData=e;return a.category=r._detectErrorCategory(e),n(a,null)}if(t.ignoreBody)i={headers:o.headers,redirects:o.redirects,response:o};else try{i=JSON.parse(o.text)}catch(e){return a.errorData=o,a.error=!0,n(a,null)}return i.error&&1===i.error&&i.status&&i.message&&i.service?(a.errorData=i,a.statusCode=i.status,a.error=!0,a.category=r._detectErrorCategory(a),n(a,null)):(i.error&&i.error.message&&(a.errorData=i.error),n(a,i))})),o}function ri(e,t,n){return o(this,void 0,void 0,(function(){var r;return i(this,(function(o){switch(o.label){case 0:return r=ei.post(e),t.forEach((function(e){var t=e.key,n=e.value;r=r.field(t,n)})),r.attach("file",n,{contentType:"application/octet-stream"}),[4,r];case 1:return[2,o.sent()]}}))}))}function oi(e,t,n){var r=ei.get(this.getStandardOrigin()+t.url).set(t.headers).query(e);return ni.call(this,r,t,n)}function ii(e,t,n){var r=ei.get(this.getStandardOrigin()+t.url).set(t.headers).query(e);return ni.call(this,r,t,n)}function ai(e,t,n,r){var o=ei.post(this.getStandardOrigin()+n.url).query(e).set(n.headers).send(t);return ni.call(this,o,n,r)}function si(e,t,n,r){var o=ei.patch(this.getStandardOrigin()+n.url).query(e).set(n.headers).send(t);return ni.call(this,o,n,r)}function ui(e,t,n){var r=ei.delete(this.getStandardOrigin()+t.url).set(t.headers).query(e);return ni.call(this,r,t,n)}function ci(e,t){var n=new Uint8Array(e.byteLength+t.byteLength);return n.set(new Uint8Array(e),0),n.set(new Uint8Array(t),e.byteLength),n.buffer}var li,pi=function(){function e(){}return Object.defineProperty(e.prototype,"algo",{get:function(){return"aes-256-cbc"},enumerable:!1,configurable:!0}),e.prototype.encrypt=function(e,t){return o(this,void 0,void 0,(function(){var n;return i(this,(function(r){switch(r.label){case 0:return[4,this.getKey(e)];case 1:if(n=r.sent(),t instanceof ArrayBuffer)return[2,this.encryptArrayBuffer(n,t)];if("string"==typeof t)return[2,this.encryptString(n,t)];throw new Error("Cannot encrypt this file. In browsers file encryption supports only string or ArrayBuffer")}}))}))},e.prototype.decrypt=function(e,t){return o(this,void 0,void 0,(function(){var n;return i(this,(function(r){switch(r.label){case 0:return[4,this.getKey(e)];case 1:if(n=r.sent(),t instanceof ArrayBuffer)return[2,this.decryptArrayBuffer(n,t)];if("string"==typeof t)return[2,this.decryptString(n,t)];throw new Error("Cannot decrypt this file. In browsers file decryption supports only string or ArrayBuffer")}}))}))},e.prototype.encryptFile=function(e,t,n){return o(this,void 0,void 0,(function(){var r,o,a;return i(this,(function(i){switch(i.label){case 0:return[4,this.getKey(e)];case 1:return r=i.sent(),[4,t.toArrayBuffer()];case 2:return o=i.sent(),[4,this.encryptArrayBuffer(r,o)];case 3:return a=i.sent(),[2,n.create({name:t.name,mimeType:"application/octet-stream",data:a})]}}))}))},e.prototype.decryptFile=function(e,t,n){return o(this,void 0,void 0,(function(){var r,o,a;return i(this,(function(i){switch(i.label){case 0:return[4,this.getKey(e)];case 1:return r=i.sent(),[4,t.toArrayBuffer()];case 2:return o=i.sent(),[4,this.decryptArrayBuffer(r,o)];case 3:return a=i.sent(),[2,n.create({name:t.name,data:a})]}}))}))},e.prototype.getKey=function(e){return o(this,void 0,void 0,(function(){var t,n,r;return i(this,(function(o){switch(o.label){case 0:return t=Buffer.from(e),[4,crypto.subtle.digest("SHA-256",t.buffer)];case 1:return n=o.sent(),r=Buffer.from(Buffer.from(n).toString("hex").slice(0,32),"utf8").buffer,[2,crypto.subtle.importKey("raw",r,"AES-CBC",!0,["encrypt","decrypt"])]}}))}))},e.prototype.encryptArrayBuffer=function(e,t){return o(this,void 0,void 0,(function(){var n,r,o;return i(this,(function(i){switch(i.label){case 0:return n=crypto.getRandomValues(new Uint8Array(16)),r=ci,o=[n.buffer],[4,crypto.subtle.encrypt({name:"AES-CBC",iv:n},e,t)];case 1:return[2,r.apply(void 0,o.concat([i.sent()]))]}}))}))},e.prototype.decryptArrayBuffer=function(e,t){return o(this,void 0,void 0,(function(){var n;return i(this,(function(r){return n=t.slice(0,16),[2,crypto.subtle.decrypt({name:"AES-CBC",iv:n},e,t.slice(16))]}))}))},e.prototype.encryptString=function(e,t){return o(this,void 0,void 0,(function(){var n,r,o,a;return i(this,(function(i){switch(i.label){case 0:return n=crypto.getRandomValues(new Uint8Array(16)),r=Buffer.from(t).buffer,[4,crypto.subtle.encrypt({name:"AES-CBC",iv:n},e,r)];case 1:return o=i.sent(),a=ci(n.buffer,o),[2,Buffer.from(a).toString("utf8")]}}))}))},e.prototype.decryptString=function(e,t){return o(this,void 0,void 0,(function(){var n,r,o,a;return i(this,(function(i){switch(i.label){case 0:return n=Buffer.from(t),r=n.slice(0,16),o=n.slice(16),[4,crypto.subtle.decrypt({name:"AES-CBC",iv:r},e,o)];case 1:return a=i.sent(),[2,Buffer.from(a).toString("utf8")]}}))}))},e.IV_LENGTH=16,e}(),fi=(li=function(){function e(e){if(e instanceof File)this.data=e,this.name=this.data.name,this.mimeType=this.data.type;else if(e.data){var t=e.data;this.data=new File([t],e.name,{type:e.mimeType}),this.name=e.name,e.mimeType&&(this.mimeType=e.mimeType)}if(void 0===this.data)throw new Error("Couldn't construct a file out of supplied options.");if(void 0===this.name)throw new Error("Couldn't guess filename out of the options. Please provide one.")}return e.create=function(e){return new this(e)},e.prototype.toBuffer=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){throw new Error("This feature is only supported in Node.js environments.")}))}))},e.prototype.toStream=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){throw new Error("This feature is only supported in Node.js environments.")}))}))},e.prototype.toFileUri=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){throw new Error("This feature is only supported in react native environments.")}))}))},e.prototype.toBlob=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){return[2,this.data]}))}))},e.prototype.toArrayBuffer=function(){return o(this,void 0,void 0,(function(){var e=this;return i(this,(function(t){return[2,new Promise((function(t,n){var r=new FileReader;r.addEventListener("load",(function(){if(r.result instanceof ArrayBuffer)return t(r.result)})),r.addEventListener("error",(function(){n(r.error)})),r.readAsArrayBuffer(e.data)}))]}))}))},e.prototype.toString=function(){return o(this,void 0,void 0,(function(){var e=this;return i(this,(function(t){return[2,new Promise((function(t,n){var r=new FileReader;r.addEventListener("load",(function(){if("string"==typeof r.result)return t(r.result)})),r.addEventListener("error",(function(){n(r.error)})),r.readAsBinaryString(e.data)}))]}))}))},e.prototype.toFile=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){return[2,this.data]}))}))},e}(),li.supportsFile="undefined"!=typeof File,li.supportsBlob="undefined"!=typeof Blob,li.supportsArrayBuffer="undefined"!=typeof ArrayBuffer,li.supportsBuffer=!1,li.supportsStream=!1,li.supportsString=!0,li.supportsEncryptFile=!0,li.supportsFileUri=!1,li);function hi(e){if(!navigator||!navigator.sendBeacon)return!1;navigator.sendBeacon(e)}var di=function(e){function n(t){var n=this,r=t.listenToBrowserNetworkEvents,o=void 0===r||r;return t.sdkFamily="Web",t.networking=new Ht({del:ui,get:ii,post:ai,patch:si,sendBeacon:hi,getfile:oi,postfile:ri}),t.cbor=new zt((function(e){return qt(f.decode(e))}),b),t.PubNubFile=fi,t.cryptography=new pi,n=e.call(this,t)||this,o&&(window.addEventListener("offline",(function(){n.networkDownDetected()})),window.addEventListener("online",(function(){n.networkUpDetected()}))),n}return t(n,e),n}(Bt);return di}));
+!function(e,t){!function(e){var t="0.1.0",n={3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,all:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i};function r(){var e,t,n="";for(e=0;e<32;e++)t=16*Math.random()|0,8!==e&&12!==e&&16!==e&&20!==e||(n+="-"),n+=(12===e?4:16===e?3&t|8:t).toString(16);return n}function o(e,t){var r=n[t||"all"];return r&&r.test(e)||!1}r.isUUID=o,r.VERSION=t,e.uuid=r,e.isUUID=o}(t),null!==e&&(e.exports=t.uuid)}(h,h.exports);var d=h.exports,y=function(){return d.uuid?d.uuid():d()},g=function(){function e(e){var t,n,r,o=e.setup;if(this._PNSDKSuffix={},this.instanceId="pn-".concat(y()),this.secretKey=o.secretKey||o.secret_key,this.subscribeKey=o.subscribeKey||o.subscribe_key,this.publishKey=o.publishKey||o.publish_key,this.sdkName=o.sdkName,this.sdkFamily=o.sdkFamily,this.partnerId=o.partnerId,this.setAuthKey(o.authKey),this.cryptoModule=o.cryptoModule,this.setFilterExpression(o.filterExpression),"string"!=typeof o.origin&&!Array.isArray(o.origin)&&void 0!==o.origin)throw new Error("Origin must be either undefined, a string or a list of strings.");if(this.origin=o.origin||Array.from({length:20},(function(e,t){return"ps".concat(t+1,".pndsn.com")})),this.secure=o.ssl||!1,this.restore=o.restore||!1,this.proxy=o.proxy,this.keepAlive=o.keepAlive,this.keepAliveSettings=o.keepAliveSettings,this.autoNetworkDetection=o.autoNetworkDetection||!1,this.dedupeOnSubscribe=o.dedupeOnSubscribe||!1,this.maximumCacheSize=o.maximumCacheSize||100,this.customEncrypt=o.customEncrypt,this.customDecrypt=o.customDecrypt,this.fileUploadPublishRetryLimit=null!==(t=o.fileUploadPublishRetryLimit)&&void 0!==t?t:5,this.useRandomIVs=null===(n=o.useRandomIVs)||void 0===n||n,this.enableSubscribeBeta=null!==(r=o.enableSubscribeBeta)&&void 0!==r&&r,"undefined"!=typeof location&&"https:"===location.protocol&&(this.secure=!0),this.logVerbosity=o.logVerbosity||!1,this.suppressLeaveEvents=o.suppressLeaveEvents||!1,this.announceFailedHeartbeats=o.announceFailedHeartbeats||!0,this.announceSuccessfulHeartbeats=o.announceSuccessfulHeartbeats||!1,this.useInstanceId=o.useInstanceId||!1,this.useRequestId=o.useRequestId||!1,this.requestMessageCountThreshold=o.requestMessageCountThreshold,this.setTransactionTimeout(o.transactionalRequestTimeout||15e3),this.setSubscribeTimeout(o.subscribeRequestTimeout||31e4),this.setSendBeaconConfig(o.useSendBeacon||!0),o.presenceTimeout?this.setPresenceTimeout(o.presenceTimeout):this._presenceTimeout=300,null!=o.heartbeatInterval&&this.setHeartbeatInterval(o.heartbeatInterval),"string"==typeof o.userId){if("string"==typeof o.uuid)throw new Error("Only one of the following configuration options has to be provided: `uuid` or `userId`");this.setUserId(o.userId)}else{if("string"!=typeof o.uuid)throw new Error("One of the following configuration options has to be provided: `uuid` or `userId`");this.setUUID(o.uuid)}this.setCipherKey(o.cipherKey,o)}return e.prototype.getAuthKey=function(){return this.authKey},e.prototype.setAuthKey=function(e){return this.authKey=e,this},e.prototype.setCipherKey=function(e,t,n){var r;return this.cipherKey=e,this.cipherKey&&(this.cryptoModule=null!==(r=t.cryptoModule)&&void 0!==r?r:t.initCryptoModule({cipherKey:this.cipherKey,useRandomIVs:this.useRandomIVs}),n&&(n.cryptoModule=this.cryptoModule)),this},e.prototype.getUUID=function(){return this.UUID},e.prototype.setUUID=function(e){if(!e||"string"!=typeof e||0===e.trim().length)throw new Error("Missing uuid parameter. Provide a valid string uuid");return this.UUID=e,this},e.prototype.getUserId=function(){return this.UUID},e.prototype.setUserId=function(e){if(!e||"string"!=typeof e||0===e.trim().length)throw new Error("Missing or invalid userId parameter. Provide a valid string userId");return this.UUID=e,this},e.prototype.getFilterExpression=function(){return this.filterExpression},e.prototype.setFilterExpression=function(e){return this.filterExpression=e,this},e.prototype.getPresenceTimeout=function(){return this._presenceTimeout},e.prototype.setPresenceTimeout=function(e){return e>=20?this._presenceTimeout=e:(this._presenceTimeout=20,console.log("WARNING: Presence timeout is less than the minimum. Using minimum value: ",this._presenceTimeout)),this.setHeartbeatInterval(this._presenceTimeout/2-1),this},e.prototype.setProxy=function(e){this.proxy=e},e.prototype.getHeartbeatInterval=function(){return this._heartbeatInterval},e.prototype.setHeartbeatInterval=function(e){return this._heartbeatInterval=e,this},e.prototype.getSubscribeTimeout=function(){return this._subscribeRequestTimeout},e.prototype.setSubscribeTimeout=function(e){return this._subscribeRequestTimeout=e,this},e.prototype.getTransactionTimeout=function(){return this._transactionalRequestTimeout},e.prototype.setTransactionTimeout=function(e){return this._transactionalRequestTimeout=e,this},e.prototype.isSendBeaconEnabled=function(){return this._useSendBeacon},e.prototype.setSendBeaconConfig=function(e){return this._useSendBeacon=e,this},e.prototype.getVersion=function(){return"7.4.0"},e.prototype._addPnsdkSuffix=function(e,t){this._PNSDKSuffix[e]=t},e.prototype._getPnsdkSuffix=function(e){var t=this;return Object.keys(this._PNSDKSuffix).reduce((function(n,r){return n+e+t._PNSDKSuffix[r]}),"")},e}();function b(e){var t=e.replace(/==?$/,""),n=Math.floor(t.length/4*3),r=new ArrayBuffer(n),o=new Uint8Array(r),i=0;function a(){var e=t.charAt(i++),n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(e);if(-1===n)throw new Error("Illegal character at ".concat(i,": ").concat(t.charAt(i-1)));return n}for(var s=0;s<n;s+=3){var u=a(),c=a(),l=a(),p=a(),f=(63&u)<<2|c>>4,h=(15&c)<<4|l>>2,d=(3&l)<<6|p>>0;o[s]=f,64!=l&&(o[s+1]=h),64!=p&&(o[s+2]=d)}return r}function v(e){for(var t,n="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=new Uint8Array(e),i=o.byteLength,a=i%3,s=i-a,u=0;u<s;u+=3)n+=r[(16515072&(t=o[u]<<16|o[u+1]<<8|o[u+2]))>>18]+r[(258048&t)>>12]+r[(4032&t)>>6]+r[63&t];return 1==a?n+=r[(252&(t=o[s]))>>2]+r[(3&t)<<4]+"==":2==a&&(n+=r[(64512&(t=o[s]<<8|o[s+1]))>>10]+r[(1008&t)>>4]+r[(15&t)<<2]+"="),n}var m,_,O,S,P,w=w||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},a=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;o<e;o++)t[r+o>>>2]|=(n[o>>>2]>>>24-o%4*8&255)<<24-(r+o)%4*8;else if(65535<n.length)for(o=0;o<e;o+=4)t[r+o>>>2]=n[o>>>2];else t.push.apply(t,n);return this.sigBytes+=e,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r<t;r+=4)n.push(4294967296*e.random()|0);return new a.init(n,t)}}),s=n.enc={},u=s.Hex={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r<e;r++){var o=t[r>>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r+=2)n[r>>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},c=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r<e;r++)n.push(String.fromCharCode(t[r>>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r++)n[r>>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},p=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,o=n.sigBytes,i=this.blockSize,s=o/(4*i);if(t=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,o=e.min(4*t,o),t){for(var u=0;u<t;u+=i)this._doProcessBlock(r,u);u=r.splice(0,t),n.sigBytes-=o}return new a.init(u,o)},clone:function(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});r.Hasher=p.extend({cfg:i.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){p.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new f.HMAC.init(e,n).finalize(t)}}});var f=n.algo={};return n}(Math);!function(e){for(var t=w,n=(o=t.lib).WordArray,r=o.Hasher,o=t.algo,i=[],a=[],s=function(e){return 4294967296*(e-(0|e))|0},u=2,c=0;64>c;){var l;e:{l=u;for(var p=e.sqrt(l),f=2;f<=p;f++)if(!(l%f)){l=!1;break e}l=!0}l&&(8>c&&(i[c]=s(e.pow(u,.5))),a[c]=s(e.pow(u,1/3)),c++),u++}var h=[];o=o.SHA256=r.extend({_doReset:function(){this._hash=new n.init(i.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],s=n[3],u=n[4],c=n[5],l=n[6],p=n[7],f=0;64>f;f++){if(16>f)h[f]=0|e[t+f];else{var d=h[f-15],y=h[f-2];h[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+h[f-7]+((y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10)+h[f-16]}d=p+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[f]+h[f],y=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&o^r&i^o&i),p=l,l=c,c=u,u=s+d|0,s=i,i=o,o=r,r=d+y|0}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+p|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;return n[o>>>5]|=128<<24-o%32,n[14+(o+64>>>9<<4)]=e.floor(r/4294967296),n[15+(o+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=r.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=r._createHelper(o),t.HmacSHA256=r._createHmacHelper(o)}(Math),_=(m=w).enc.Utf8,m.algo.HMAC=m.lib.Base.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=_.parse(t));var n=e.blockSize,r=4*n;t.sigBytes>r&&(t=e.finalize(t)),t.clamp();for(var o=this._oKey=t.clone(),i=this._iKey=t.clone(),a=o.words,s=i.words,u=0;u<n;u++)a[u]^=1549556828,s[u]^=909522486;o.sigBytes=i.sigBytes=r,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var t=this._hasher;return e=t.finalize(e),t.reset(),t.finalize(this._oKey.clone().concat(e))}}),S=(O=w).lib.WordArray,O.enc.Base64={stringify:function(e){var t=e.words,n=e.sigBytes,r=this._map;e.clamp(),e=[];for(var o=0;o<n;o+=3)for(var i=(t[o>>>2]>>>24-o%4*8&255)<<16|(t[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|t[o+2>>>2]>>>24-(o+2)%4*8&255,a=0;4>a&&o+.75*a<n;a++)e.push(r.charAt(i>>>6*(3-a)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var t=e.length,n=this._map;(r=n.charAt(64))&&-1!=(r=e.indexOf(r))&&(t=r);for(var r=[],o=0,i=0;i<t;i++)if(i%4){var a=n.indexOf(e.charAt(i-1))<<i%4*2,s=n.indexOf(e.charAt(i))>>>6-i%4*2;r[o>>>2]|=(a|s)<<24-o%4*8,o++}return S.create(r,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},function(e){function t(e,t,n,r,o,i,a){return((e=e+(t&n|~t&r)+o+a)<<i|e>>>32-i)+t}function n(e,t,n,r,o,i,a){return((e=e+(t&r|n&~r)+o+a)<<i|e>>>32-i)+t}function r(e,t,n,r,o,i,a){return((e=e+(t^n^r)+o+a)<<i|e>>>32-i)+t}function o(e,t,n,r,o,i,a){return((e=e+(n^(t|~r))+o+a)<<i|e>>>32-i)+t}for(var i=w,a=(u=i.lib).WordArray,s=u.Hasher,u=i.algo,c=[],l=0;64>l;l++)c[l]=4294967296*e.abs(e.sin(l+1))|0;u=u.MD5=s.extend({_doReset:function(){this._hash=new a.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,i){for(var a=0;16>a;a++){var s=e[u=i+a];e[u]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}a=this._hash.words;var u=e[i+0],l=(s=e[i+1],e[i+2]),p=e[i+3],f=e[i+4],h=e[i+5],d=e[i+6],y=e[i+7],g=e[i+8],b=e[i+9],v=e[i+10],m=e[i+11],_=e[i+12],O=e[i+13],S=e[i+14],P=e[i+15],w=t(w=a[0],A=a[1],T=a[2],E=a[3],u,7,c[0]),E=t(E,w,A,T,s,12,c[1]),T=t(T,E,w,A,l,17,c[2]),A=t(A,T,E,w,p,22,c[3]);w=t(w,A,T,E,f,7,c[4]),E=t(E,w,A,T,h,12,c[5]),T=t(T,E,w,A,d,17,c[6]),A=t(A,T,E,w,y,22,c[7]),w=t(w,A,T,E,g,7,c[8]),E=t(E,w,A,T,b,12,c[9]),T=t(T,E,w,A,v,17,c[10]),A=t(A,T,E,w,m,22,c[11]),w=t(w,A,T,E,_,7,c[12]),E=t(E,w,A,T,O,12,c[13]),T=t(T,E,w,A,S,17,c[14]),w=n(w,A=t(A,T,E,w,P,22,c[15]),T,E,s,5,c[16]),E=n(E,w,A,T,d,9,c[17]),T=n(T,E,w,A,m,14,c[18]),A=n(A,T,E,w,u,20,c[19]),w=n(w,A,T,E,h,5,c[20]),E=n(E,w,A,T,v,9,c[21]),T=n(T,E,w,A,P,14,c[22]),A=n(A,T,E,w,f,20,c[23]),w=n(w,A,T,E,b,5,c[24]),E=n(E,w,A,T,S,9,c[25]),T=n(T,E,w,A,p,14,c[26]),A=n(A,T,E,w,g,20,c[27]),w=n(w,A,T,E,O,5,c[28]),E=n(E,w,A,T,l,9,c[29]),T=n(T,E,w,A,y,14,c[30]),w=r(w,A=n(A,T,E,w,_,20,c[31]),T,E,h,4,c[32]),E=r(E,w,A,T,g,11,c[33]),T=r(T,E,w,A,m,16,c[34]),A=r(A,T,E,w,S,23,c[35]),w=r(w,A,T,E,s,4,c[36]),E=r(E,w,A,T,f,11,c[37]),T=r(T,E,w,A,y,16,c[38]),A=r(A,T,E,w,v,23,c[39]),w=r(w,A,T,E,O,4,c[40]),E=r(E,w,A,T,u,11,c[41]),T=r(T,E,w,A,p,16,c[42]),A=r(A,T,E,w,d,23,c[43]),w=r(w,A,T,E,b,4,c[44]),E=r(E,w,A,T,_,11,c[45]),T=r(T,E,w,A,P,16,c[46]),w=o(w,A=r(A,T,E,w,l,23,c[47]),T,E,u,6,c[48]),E=o(E,w,A,T,y,10,c[49]),T=o(T,E,w,A,S,15,c[50]),A=o(A,T,E,w,h,21,c[51]),w=o(w,A,T,E,_,6,c[52]),E=o(E,w,A,T,p,10,c[53]),T=o(T,E,w,A,v,15,c[54]),A=o(A,T,E,w,s,21,c[55]),w=o(w,A,T,E,g,6,c[56]),E=o(E,w,A,T,P,10,c[57]),T=o(T,E,w,A,d,15,c[58]),A=o(A,T,E,w,O,21,c[59]),w=o(w,A,T,E,f,6,c[60]),E=o(E,w,A,T,m,10,c[61]),T=o(T,E,w,A,l,15,c[62]),A=o(A,T,E,w,b,21,c[63]);a[0]=a[0]+w|0,a[1]=a[1]+A|0,a[2]=a[2]+T|0,a[3]=a[3]+E|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;n[o>>>5]|=128<<24-o%32;var i=e.floor(r/4294967296);for(n[15+(o+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),n[14+(o+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),n=(t=this._hash).words,r=0;4>r;r++)o=n[r],n[r]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);return t},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}}),i.MD5=s._createHelper(u),i.HmacMD5=s._createHmacHelper(u)}(Math),function(){var e,t=w,n=(e=t.lib).Base,r=e.WordArray,o=(e=t.algo).EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:e.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=(s=this.cfg).hasher.create(),o=r.create(),i=o.words,a=s.keySize,s=s.iterations;i.length<a;){u&&n.update(u);var u=n.update(e).finalize(t);n.reset();for(var c=1;c<s;c++)u=n.finalize(u),n.reset();o.concat(u)}return o.sigBytes=4*a,o}});t.EvpKDF=function(e,t,n){return o.create(n).compute(e,t)}}(),w.lib.Cipher||function(e){var t=(h=w).lib,n=t.Base,r=t.WordArray,o=t.BufferedBlockAlgorithm,i=h.enc.Base64,a=h.algo.EvpKDF,s=t.Cipher=o.extend({cfg:n.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,n){this.cfg=this.cfg.extend(n),this._xformMode=e,this._key=t,this.reset()},reset:function(){o.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(t,n,r){return("string"==typeof n?d:f).encrypt(e,t,n,r)},decrypt:function(t,n,r){return("string"==typeof n?d:f).decrypt(e,t,n,r)}}}});t.StreamCipher=s.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var u=h.mode={},c=function(e,t,n){var r=this._iv;r?this._iv=undefined:r=this._prevBlock;for(var o=0;o<n;o++)e[t+o]^=r[o]},l=(t.BlockCipherMode=n.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}})).extend();l.Encryptor=l.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize;c.call(this,e,t,r),n.encryptBlock(e,t),this._prevBlock=e.slice(t,t+r)}}),l.Decryptor=l.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=e.slice(t,t+r);n.decryptBlock(e,t),c.call(this,e,t,r),this._prevBlock=o}}),u=u.CBC=l,l=(h.pad={}).Pkcs7={pad:function(e,t){for(var n,o=(n=(n=4*t)-e.sigBytes%n)<<24|n<<16|n<<8|n,i=[],a=0;a<n;a+=4)i.push(o);n=r.create(i,n),e.concat(n)},unpad:function(e){e.sigBytes-=255&e.words[e.sigBytes-1>>>2]}},t.BlockCipher=s.extend({cfg:s.cfg.extend({mode:u,padding:l}),reset:function(){s.reset.call(this);var e=(t=this.cfg).iv,t=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=t.createEncryptor;else n=t.createDecryptor,this._minBufferSize=1;this._mode=n.call(t,this,e&&e.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var p=t.CipherParams=n.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),f=(u=(h.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return((e=e.salt)?r.create([1398893684,1701076831]).concat(e).concat(t):t).toString(i)},parse:function(e){var t=(e=i.parse(e)).words;if(1398893684==t[0]&&1701076831==t[1]){var n=r.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return p.create({ciphertext:e,salt:n})}},t.SerializableCipher=n.extend({cfg:n.extend({format:u}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var o=e.createEncryptor(n,r);return t=o.finalize(t),o=o.cfg,p.create({ciphertext:t,key:n,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:r.format})},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),e.createDecryptor(n,r).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}})),h=(h.kdf={}).OpenSSL={execute:function(e,t,n,o){return o||(o=r.random(8)),e=a.create({keySize:t+n}).compute(e,o),n=r.create(e.words.slice(t),4*n),e.sigBytes=4*t,p.create({key:e,iv:n,salt:o})}},d=t.PasswordBasedCipher=f.extend({cfg:f.cfg.extend({kdf:h}),encrypt:function(e,t,n,r){return n=(r=this.cfg.extend(r)).kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,(e=f.encrypt.call(this,e,t,n.key,r)).mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,f.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=w,t=e.lib.BlockCipher,n=e.algo,r=[],o=[],i=[],a=[],s=[],u=[],c=[],l=[],p=[],f=[],h=[],d=0;256>d;d++)h[d]=128>d?d<<1:d<<1^283;var y=0,g=0;for(d=0;256>d;d++){var b=(b=g^g<<1^g<<2^g<<3^g<<4)>>>8^255&b^99;r[y]=b,o[b]=y;var v=h[y],m=h[v],_=h[m],O=257*h[b]^16843008*b;i[y]=O<<24|O>>>8,a[y]=O<<16|O>>>16,s[y]=O<<8|O>>>24,u[y]=O,O=16843009*_^65537*m^257*v^16843008*y,c[b]=O<<24|O>>>8,l[b]=O<<16|O>>>16,p[b]=O<<8|O>>>24,f[b]=O,y?(y=v^h[h[h[_^v]]],g^=h[h[g]]):y=g=1}var S=[0,1,2,4,8,16,32,64,128,27,54];n=n.AES=t.extend({_doReset:function(){for(var e=(n=this._key).words,t=n.sigBytes/4,n=4*((this._nRounds=t+6)+1),o=this._keySchedule=[],i=0;i<n;i++)if(i<t)o[i]=e[i];else{var a=o[i-1];i%t?6<t&&4==i%t&&(a=r[a>>>24]<<24|r[a>>>16&255]<<16|r[a>>>8&255]<<8|r[255&a]):(a=r[(a=a<<8|a>>>24)>>>24]<<24|r[a>>>16&255]<<16|r[a>>>8&255]<<8|r[255&a],a^=S[i/t|0]<<24),o[i]=o[i-t]^a}for(e=this._invKeySchedule=[],t=0;t<n;t++)i=n-t,a=t%4?o[i]:o[i-4],e[t]=4>t||4>=i?a:c[r[a>>>24]]^l[r[a>>>16&255]]^p[r[a>>>8&255]]^f[r[255&a]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,i,a,s,u,r)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,c,l,p,f,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,o,i,a,s){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],p=e[t+2]^n[2],f=e[t+3]^n[3],h=4,d=1;d<u;d++){var y=r[c>>>24]^o[l>>>16&255]^i[p>>>8&255]^a[255&f]^n[h++],g=r[l>>>24]^o[p>>>16&255]^i[f>>>8&255]^a[255&c]^n[h++],b=r[p>>>24]^o[f>>>16&255]^i[c>>>8&255]^a[255&l]^n[h++];f=r[f>>>24]^o[c>>>16&255]^i[l>>>8&255]^a[255&p]^n[h++],c=y,l=g,p=b}y=(s[c>>>24]<<24|s[l>>>16&255]<<16|s[p>>>8&255]<<8|s[255&f])^n[h++],g=(s[l>>>24]<<24|s[p>>>16&255]<<16|s[f>>>8&255]<<8|s[255&c])^n[h++],b=(s[p>>>24]<<24|s[f>>>16&255]<<16|s[c>>>8&255]<<8|s[255&l])^n[h++],f=(s[f>>>24]<<24|s[c>>>16&255]<<16|s[l>>>8&255]<<8|s[255&p])^n[h++],e[t]=y,e[t+1]=g,e[t+2]=b,e[t+3]=f},keySize:8});e.AES=t._createHelper(n)}(),w.mode.ECB=((P=w.lib.BlockCipherMode.extend()).Encryptor=P.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),P.Decryptor=P.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),P);var E=w;function T(e){var t,n=[];for(t=0;t<e.length;t+=1)n[t/4|0]|=e[t]<<24-8*t;return E.lib.WordArray.create(n,e.length)}var A=function(){function e(e){var t=e.config;this._config=t,this._iv="0123456789012345",this._allowedKeyEncodings=["hex","utf8","base64","binary"],this._allowedKeyLengths=[128,256],this._allowedModes=["ecb","cbc"],this._defaultOptions={encryptKey:!0,keyEncoding:"utf8",keyLength:256,mode:"cbc"}}return e.prototype.HMACSHA256=function(e){return E.HmacSHA256(e,this._config.secretKey).toString(E.enc.Base64)},e.prototype.SHA256=function(e){return E.SHA256(e).toString(E.enc.Hex)},e.prototype._parseOptions=function(e){var t=e||{};return t.hasOwnProperty("encryptKey")||(t.encryptKey=this._defaultOptions.encryptKey),t.hasOwnProperty("keyEncoding")||(t.keyEncoding=this._defaultOptions.keyEncoding),t.hasOwnProperty("keyLength")||(t.keyLength=this._defaultOptions.keyLength),t.hasOwnProperty("mode")||(t.mode=this._defaultOptions.mode),-1===this._allowedKeyEncodings.indexOf(t.keyEncoding.toLowerCase())&&(t.keyEncoding=this._defaultOptions.keyEncoding),-1===this._allowedKeyLengths.indexOf(parseInt(t.keyLength,10))&&(t.keyLength=this._defaultOptions.keyLength),-1===this._allowedModes.indexOf(t.mode.toLowerCase())&&(t.mode=this._defaultOptions.mode),t},e.prototype._decodeKey=function(e,t){return"base64"===t.keyEncoding?E.enc.Base64.parse(e):"hex"===t.keyEncoding?E.enc.Hex.parse(e):e},e.prototype._getPaddedKey=function(e,t){return e=this._decodeKey(e,t),t.encryptKey?E.enc.Utf8.parse(this.SHA256(e).slice(0,32)):e},e.prototype._getMode=function(e){return"ecb"===e.mode?E.mode.ECB:E.mode.CBC},e.prototype._getIV=function(e){return"cbc"===e.mode?E.enc.Utf8.parse(this._iv):null},e.prototype._getRandomIV=function(){return E.lib.WordArray.random(16)},e.prototype.encrypt=function(e,t,n){return this._config.customEncrypt?this._config.customEncrypt(e):this.pnEncrypt(e,t,n)},e.prototype.decrypt=function(e,t,n){return this._config.customDecrypt?this._config.customDecrypt(e):this.pnDecrypt(e,t,n)},e.prototype.pnEncrypt=function(e,t,n){if(!t&&!this._config.cipherKey)return e;n=this._parseOptions(n);var r=this._getMode(n),o=this._getPaddedKey(t||this._config.cipherKey,n);if(this._config.useRandomIVs){var i=this._getRandomIV(),a=E.AES.encrypt(e,o,{iv:i,mode:r}).ciphertext;return i.clone().concat(a.clone()).toString(E.enc.Base64)}var s=this._getIV(n);return E.AES.encrypt(e,o,{iv:s,mode:r}).ciphertext.toString(E.enc.Base64)||e},e.prototype.pnDecrypt=function(e,t,n){if(!t&&!this._config.cipherKey)return e;n=this._parseOptions(n);var r=this._getMode(n),o=this._getPaddedKey(t||this._config.cipherKey,n);if(this._config.useRandomIVs){var i=T((u=new Uint8ClampedArray(b(e))).slice(0,16)),a=T(u.slice(16));try{var s=E.AES.decrypt({ciphertext:a},o,{iv:i,mode:r}).toString(E.enc.Utf8);return JSON.parse(s)}catch(e){return null}}else{i=this._getIV(n);try{var u=E.enc.Base64.parse(e);s=E.AES.decrypt({ciphertext:u},o,{iv:i,mode:r}).toString(E.enc.Utf8);return JSON.parse(s)}catch(e){return null}}},e}(),N=function(){function e(e){var t=e.timeEndpoint;this._timeEndpoint=t}return e.prototype.onReconnection=function(e){this._reconnectionCallback=e},e.prototype.startPolling=function(){this._timeTimer=setInterval(this._performTimeLoop.bind(this),3e3)},e.prototype.stopPolling=function(){clearInterval(this._timeTimer)},e.prototype._performTimeLoop=function(){var e=this;this._timeEndpoint((function(t){t.error||(clearInterval(e._timeTimer),e._reconnectionCallback())}))},e}(),k=function(){function e(e){var t=e.config;this.hashHistory=[],this._config=t}return e.prototype.getKey=function(e){var t=function(e){var t=0;if(0===e.length)return t;for(var n=0;n<e.length;n+=1)t=(t<<5)-t+e.charCodeAt(n),t&=t;return t}(JSON.stringify(e.payload)).toString(),n=e.publishMetaData.publishTimetoken;return"".concat(n,"-").concat(t)},e.prototype.isDuplicate=function(e){return this.hashHistory.includes(this.getKey(e))},e.prototype.addEntry=function(e){this.hashHistory.length>=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))},e.prototype.clearHistory=function(){this.hashHistory=[]},e}();function C(e){return encodeURIComponent(e).replace(/[!~*'()]/g,(function(e){return"%".concat(e.charCodeAt(0).toString(16).toUpperCase())}))}function j(e){return function(e){var t=[];return Object.keys(e).forEach((function(e){return t.push(e)})),t}(e).sort()}var M={signPamFromParams:function(e){return j(e).map((function(t){return"".concat(t,"=").concat(C(e[t]))})).join("&")},endsWith:function(e,t){return-1!==e.indexOf(t,this.length-t.length)},createPromise:function(){var e,t;return{promise:new Promise((function(n,r){e=n,t=r})),reject:t,fulfill:e}},encodeString:C,stringToArrayBuffer:function(e){for(var t=new ArrayBuffer(2*e.length),n=new Uint16Array(t),r=0,o=e.length;r<o;r++)n[r]=e.charCodeAt(r);return t}},R={PNNetworkUpCategory:"PNNetworkUpCategory",PNNetworkDownCategory:"PNNetworkDownCategory",PNNetworkIssuesCategory:"PNNetworkIssuesCategory",PNTimeoutCategory:"PNTimeoutCategory",PNBadRequestCategory:"PNBadRequestCategory",PNAccessDeniedCategory:"PNAccessDeniedCategory",PNUnknownCategory:"PNUnknownCategory",PNReconnectedCategory:"PNReconnectedCategory",PNConnectedCategory:"PNConnectedCategory",PNRequestMessageCountExceededCategory:"PNRequestMessageCountExceededCategory"},U=function(){function e(e){var t=e.subscribeEndpoint,n=e.leaveEndpoint,r=e.heartbeatEndpoint,o=e.setStateEndpoint,i=e.timeEndpoint,a=e.getFileUrl,s=e.config,u=e.crypto,c=e.listenerManager,l=e.cryptoModule;this._listenerManager=c,this._config=s,this._leaveEndpoint=n,this._heartbeatEndpoint=r,this._setStateEndpoint=o,this._subscribeEndpoint=t,this._getFileUrl=a,this._crypto=u,this._cryptoModule=l,this._channels={},this._presenceChannels={},this._heartbeatChannels={},this._heartbeatChannelGroups={},this._channelGroups={},this._presenceChannelGroups={},this._pendingChannelSubscriptions=[],this._pendingChannelGroupSubscriptions=[],this._currentTimetoken=0,this._lastTimetoken=0,this._storedTimetoken=null,this._subscriptionStatusAnnounced=!1,this._isOnline=!0,this._reconnectionManager=new N({timeEndpoint:i}),this._dedupingManager=new k({config:s}),this._cryptoModule&&(this._decoder=new TextDecoder)}return e.prototype.adaptStateChange=function(e,t){var n=this,r=e.state,o=e.channels,i=void 0===o?[]:o,a=e.channelGroups,s=void 0===a?[]:a,u=e.withHeartbeat,c=void 0!==u&&u;if(i.forEach((function(e){e in n._channels&&(n._channels[e].state=r)})),s.forEach((function(e){e in n._channelGroups&&(n._channelGroups[e].state=r)})),c){var l={};return i.forEach((function(e){return l[e]=r})),s.forEach((function(e){return l[e]=r})),this._heartbeatEndpoint({channels:i,channelGroups:s,state:l},t)}return this._setStateEndpoint({state:r,channels:i,channelGroups:s},t)},e.prototype.adaptPresenceChange=function(e){var t=this,n=e.connected,r=e.channels,o=void 0===r?[]:r,i=e.channelGroups,a=void 0===i?[]:i;n?(o.forEach((function(e){t._heartbeatChannels[e]={state:{}}})),a.forEach((function(e){t._heartbeatChannelGroups[e]={state:{}}}))):(o.forEach((function(e){e in t._heartbeatChannels&&delete t._heartbeatChannels[e]})),a.forEach((function(e){e in t._heartbeatChannelGroups&&delete t._heartbeatChannelGroups[e]})),!1===this._config.suppressLeaveEvents&&this._leaveEndpoint({channels:o,channelGroups:a},(function(e){t._listenerManager.announceStatus(e)}))),this.reconnect()},e.prototype.adaptSubscribeChange=function(e){var t=this,n=e.timetoken,r=e.channels,o=void 0===r?[]:r,i=e.channelGroups,a=void 0===i?[]:i,s=e.withPresence,u=void 0!==s&&s,c=e.withHeartbeats,l=void 0!==c&&c;this._config.subscribeKey&&""!==this._config.subscribeKey?(n&&(this._lastTimetoken=this._currentTimetoken,this._currentTimetoken=n),"0"!==this._currentTimetoken&&0!==this._currentTimetoken&&(this._storedTimetoken=this._currentTimetoken,this._currentTimetoken=0),o.forEach((function(e){t._channels[e]={state:{}},u&&(t._presenceChannels[e]={}),(l||t._config.getHeartbeatInterval())&&(t._heartbeatChannels[e]={}),t._pendingChannelSubscriptions.push(e)})),a.forEach((function(e){t._channelGroups[e]={state:{}},u&&(t._presenceChannelGroups[e]={}),(l||t._config.getHeartbeatInterval())&&(t._heartbeatChannelGroups[e]={}),t._pendingChannelGroupSubscriptions.push(e)})),this._subscriptionStatusAnnounced=!1,this.reconnect()):console&&console.log&&console.log("subscribe key missing; aborting subscribe")},e.prototype.adaptUnsubscribeChange=function(e,t){var n=this,r=e.channels,o=void 0===r?[]:r,i=e.channelGroups,a=void 0===i?[]:i,s=[],u=[];o.forEach((function(e){e in n._channels&&(delete n._channels[e],s.push(e),e in n._heartbeatChannels&&delete n._heartbeatChannels[e]),e in n._presenceChannels&&(delete n._presenceChannels[e],s.push(e))})),a.forEach((function(e){e in n._channelGroups&&(delete n._channelGroups[e],u.push(e),e in n._heartbeatChannelGroups&&delete n._heartbeatChannelGroups[e]),e in n._presenceChannelGroups&&(delete n._presenceChannelGroups[e],u.push(e))})),0===s.length&&0===u.length||(!1!==this._config.suppressLeaveEvents||t||this._leaveEndpoint({channels:s,channelGroups:u},(function(e){e.affectedChannels=s,e.affectedChannelGroups=u,e.currentTimetoken=n._currentTimetoken,e.lastTimetoken=n._lastTimetoken,n._listenerManager.announceStatus(e)})),0===Object.keys(this._channels).length&&0===Object.keys(this._presenceChannels).length&&0===Object.keys(this._channelGroups).length&&0===Object.keys(this._presenceChannelGroups).length&&(this._lastTimetoken=0,this._currentTimetoken=0,this._storedTimetoken=null,this._region=null,this._reconnectionManager.stopPolling()),this.reconnect())},e.prototype.unsubscribeAll=function(e){this.adaptUnsubscribeChange({channels:this.getSubscribedChannels(),channelGroups:this.getSubscribedChannelGroups()},e)},e.prototype.getHeartbeatChannels=function(){return Object.keys(this._heartbeatChannels)},e.prototype.getHeartbeatChannelGroups=function(){return Object.keys(this._heartbeatChannelGroups)},e.prototype.getSubscribedChannels=function(){return Object.keys(this._channels)},e.prototype.getSubscribedChannelGroups=function(){return Object.keys(this._channelGroups)},e.prototype.reconnect=function(){this._startSubscribeLoop(),this._registerHeartbeatTimer()},e.prototype.disconnect=function(){this._stopSubscribeLoop(),this._stopHeartbeatTimer(),this._reconnectionManager.stopPolling()},e.prototype._registerHeartbeatTimer=function(){this._stopHeartbeatTimer(),0!==this._config.getHeartbeatInterval()&&void 0!==this._config.getHeartbeatInterval()&&(this._performHeartbeatLoop(),this._heartbeatTimer=setInterval(this._performHeartbeatLoop.bind(this),1e3*this._config.getHeartbeatInterval()))},e.prototype._stopHeartbeatTimer=function(){this._heartbeatTimer&&(clearInterval(this._heartbeatTimer),this._heartbeatTimer=null)},e.prototype._performHeartbeatLoop=function(){var e=this,t=this.getHeartbeatChannels(),n=this.getHeartbeatChannelGroups(),r={};if(0!==t.length||0!==n.length){this.getSubscribedChannels().forEach((function(t){var n=e._channels[t].state;Object.keys(n).length&&(r[t]=n)})),this.getSubscribedChannelGroups().forEach((function(t){var n=e._channelGroups[t].state;Object.keys(n).length&&(r[t]=n)}));this._heartbeatEndpoint({channels:t,channelGroups:n,state:r},function(t){t.error&&e._config.announceFailedHeartbeats&&e._listenerManager.announceStatus(t),t.error&&e._config.autoNetworkDetection&&e._isOnline&&(e._isOnline=!1,e.disconnect(),e._listenerManager.announceNetworkDown(),e.reconnect()),!t.error&&e._config.announceSuccessfulHeartbeats&&e._listenerManager.announceStatus(t)}.bind(this))}},e.prototype._startSubscribeLoop=function(){var e=this;this._stopSubscribeLoop();var t={},n=[],r=[];if(Object.keys(this._channels).forEach((function(r){var o=e._channels[r].state;Object.keys(o).length&&(t[r]=o),n.push(r)})),Object.keys(this._presenceChannels).forEach((function(e){n.push("".concat(e,"-pnpres"))})),Object.keys(this._channelGroups).forEach((function(n){var o=e._channelGroups[n].state;Object.keys(o).length&&(t[n]=o),r.push(n)})),Object.keys(this._presenceChannelGroups).forEach((function(e){r.push("".concat(e,"-pnpres"))})),0!==n.length||0!==r.length){var o={channels:n,channelGroups:r,state:t,timetoken:this._currentTimetoken,filterExpression:this._config.filterExpression,region:this._region};this._subscribeCall=this._subscribeEndpoint(o,this._processSubscribeResponse.bind(this))}},e.prototype._processSubscribeResponse=function(e,t){var o=this;if(e.error){if(e.errorData&&"Aborted"===e.errorData.message)return;e.category===R.PNTimeoutCategory?this._startSubscribeLoop():e.category===R.PNNetworkIssuesCategory?(this.disconnect(),e.error&&this._config.autoNetworkDetection&&this._isOnline&&(this._isOnline=!1,this._listenerManager.announceNetworkDown()),this._reconnectionManager.onReconnection((function(){o._config.autoNetworkDetection&&!o._isOnline&&(o._isOnline=!0,o._listenerManager.announceNetworkUp()),o.reconnect(),o._subscriptionStatusAnnounced=!0;var t={category:R.PNReconnectedCategory,operation:e.operation,lastTimetoken:o._lastTimetoken,currentTimetoken:o._currentTimetoken};o._listenerManager.announceStatus(t)})),this._reconnectionManager.startPolling(),this._listenerManager.announceStatus(e)):e.category===R.PNBadRequestCategory?(this._stopHeartbeatTimer(),this._listenerManager.announceStatus(e)):this._listenerManager.announceStatus(e)}else{if(this._storedTimetoken?(this._currentTimetoken=this._storedTimetoken,this._storedTimetoken=null):(this._lastTimetoken=this._currentTimetoken,this._currentTimetoken=t.metadata.timetoken),!this._subscriptionStatusAnnounced){var i={};i.category=R.PNConnectedCategory,i.operation=e.operation,i.affectedChannels=this._pendingChannelSubscriptions,i.subscribedChannels=this.getSubscribedChannels(),i.affectedChannelGroups=this._pendingChannelGroupSubscriptions,i.lastTimetoken=this._lastTimetoken,i.currentTimetoken=this._currentTimetoken,this._subscriptionStatusAnnounced=!0,this._listenerManager.announceStatus(i),this._pendingChannelSubscriptions=[],this._pendingChannelGroupSubscriptions=[]}var a=t.messages||[],s=this._config,u=s.requestMessageCountThreshold,c=s.dedupeOnSubscribe;if(u&&a.length>=u){var l={};l.category=R.PNRequestMessageCountExceededCategory,l.operation=e.operation,this._listenerManager.announceStatus(l)}a.forEach((function(e){var t=e.channel,i=e.subscriptionMatch,a=e.publishMetaData;if(t===i&&(i=null),c){if(o._dedupingManager.isDuplicate(e))return;o._dedupingManager.addEntry(e)}if(M.endsWith(e.channel,"-pnpres"))(y={channel:null,subscription:null}).actualChannel=null!=i?t:null,y.subscribedChannel=null!=i?i:t,t&&(y.channel=t.substring(0,t.lastIndexOf("-pnpres"))),i&&(y.subscription=i.substring(0,i.lastIndexOf("-pnpres"))),y.action=e.payload.action,y.state=e.payload.data,y.timetoken=a.publishTimetoken,y.occupancy=e.payload.occupancy,y.uuid=e.payload.uuid,y.timestamp=e.payload.timestamp,e.payload.join&&(y.join=e.payload.join),e.payload.leave&&(y.leave=e.payload.leave),e.payload.timeout&&(y.timeout=e.payload.timeout),o._listenerManager.announcePresence(y);else if(1===e.messageType){(y={channel:null,subscription:null}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,e.userMetadata&&(y.userMetadata=e.userMetadata),y.message=e.payload,o._listenerManager.announceSignal(y)}else if(2===e.messageType){if((y={channel:null,subscription:null}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,e.userMetadata&&(y.userMetadata=e.userMetadata),y.message={event:e.payload.event,type:e.payload.type,data:e.payload.data},o._listenerManager.announceObjects(y),"uuid"===e.payload.type){var s=o._renameChannelField(y);o._listenerManager.announceUser(n(n({},s),{message:n(n({},s.message),{event:o._renameEvent(s.message.event),type:"user"})}))}else if("channel"===e.payload.type){s=o._renameChannelField(y);o._listenerManager.announceSpace(n(n({},s),{message:n(n({},s.message),{event:o._renameEvent(s.message.event),type:"space"})}))}else if("membership"===e.payload.type){var u=(s=o._renameChannelField(y)).message.data,l=u.uuid,p=u.channel,f=r(u,["uuid","channel"]);f.user=l,f.space=p,o._listenerManager.announceMembership(n(n({},s),{message:n(n({},s.message),{event:o._renameEvent(s.message.event),data:f})}))}}else if(3===e.messageType){(y={}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,y.data={messageTimetoken:e.payload.data.messageTimetoken,actionTimetoken:e.payload.data.actionTimetoken,type:e.payload.data.type,uuid:e.issuingClientId,value:e.payload.data.value},y.event=e.payload.event,o._listenerManager.announceMessageAction(y)}else if(4===e.messageType){(y={}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId;var h=e.payload;if(o._cryptoModule){var d=void 0;try{d=(g=o._cryptoModule.decrypt(e.payload))instanceof ArrayBuffer?JSON.parse(o._decoder.decode(g)):g}catch(e){d=null,console&&console.log&&console.log("decryption error",e.message)}null!==d&&(h=d)}e.userMetadata&&(y.userMetadata=e.userMetadata),y.message=h.message,y.file={id:h.file.id,name:h.file.name,url:o._getFileUrl({id:h.file.id,name:h.file.name,channel:t})},o._listenerManager.announceFile(y)}else{var y;if((y={channel:null,subscription:null}).actualChannel=null!=i?t:null,y.subscribedChannel=null!=i?i:t,y.channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,e.userMetadata&&(y.userMetadata=e.userMetadata),o._cryptoModule){d=void 0;try{var g;d=(g=o._cryptoModule.decrypt(e.payload))instanceof ArrayBuffer?JSON.parse(o._decoder.decode(g)):g}catch(e){d=null,console&&console.log&&console.log("decryption error",e.message)}y.message=null!=d?d:e.payload}else y.message=e.payload;o._listenerManager.announceMessage(y)}})),this._region=t.metadata.region,this._startSubscribeLoop()}},e.prototype._stopSubscribeLoop=function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)},e.prototype._renameEvent=function(e){return"set"===e?"updated":"removed"},e.prototype._renameChannelField=function(e){var t=e.channel,n=r(e,["channel"]);return n.spaceId=t,n},e}(),I={PNTimeOperation:"PNTimeOperation",PNHistoryOperation:"PNHistoryOperation",PNDeleteMessagesOperation:"PNDeleteMessagesOperation",PNFetchMessagesOperation:"PNFetchMessagesOperation",PNMessageCounts:"PNMessageCountsOperation",PNSubscribeOperation:"PNSubscribeOperation",PNUnsubscribeOperation:"PNUnsubscribeOperation",PNPublishOperation:"PNPublishOperation",PNSignalOperation:"PNSignalOperation",PNAddMessageActionOperation:"PNAddActionOperation",PNRemoveMessageActionOperation:"PNRemoveMessageActionOperation",PNGetMessageActionsOperation:"PNGetMessageActionsOperation",PNCreateUserOperation:"PNCreateUserOperation",PNUpdateUserOperation:"PNUpdateUserOperation",PNDeleteUserOperation:"PNDeleteUserOperation",PNGetUserOperation:"PNGetUsersOperation",PNGetUsersOperation:"PNGetUsersOperation",PNCreateSpaceOperation:"PNCreateSpaceOperation",PNUpdateSpaceOperation:"PNUpdateSpaceOperation",PNDeleteSpaceOperation:"PNDeleteSpaceOperation",PNGetSpaceOperation:"PNGetSpacesOperation",PNGetSpacesOperation:"PNGetSpacesOperation",PNGetMembersOperation:"PNGetMembersOperation",PNUpdateMembersOperation:"PNUpdateMembersOperation",PNGetMembershipsOperation:"PNGetMembershipsOperation",PNUpdateMembershipsOperation:"PNUpdateMembershipsOperation",PNListFilesOperation:"PNListFilesOperation",PNGenerateUploadUrlOperation:"PNGenerateUploadUrlOperation",PNPublishFileOperation:"PNPublishFileOperation",PNGetFileUrlOperation:"PNGetFileUrlOperation",PNDownloadFileOperation:"PNDownloadFileOperation",PNGetAllUUIDMetadataOperation:"PNGetAllUUIDMetadataOperation",PNGetUUIDMetadataOperation:"PNGetUUIDMetadataOperation",PNSetUUIDMetadataOperation:"PNSetUUIDMetadataOperation",PNRemoveUUIDMetadataOperation:"PNRemoveUUIDMetadataOperation",PNGetAllChannelMetadataOperation:"PNGetAllChannelMetadataOperation",PNGetChannelMetadataOperation:"PNGetChannelMetadataOperation",PNSetChannelMetadataOperation:"PNSetChannelMetadataOperation",PNRemoveChannelMetadataOperation:"PNRemoveChannelMetadataOperation",PNSetMembersOperation:"PNSetMembersOperation",PNSetMembershipsOperation:"PNSetMembershipsOperation",PNPushNotificationEnabledChannelsOperation:"PNPushNotificationEnabledChannelsOperation",PNRemoveAllPushNotificationsOperation:"PNRemoveAllPushNotificationsOperation",PNWhereNowOperation:"PNWhereNowOperation",PNSetStateOperation:"PNSetStateOperation",PNHereNowOperation:"PNHereNowOperation",PNGetStateOperation:"PNGetStateOperation",PNHeartbeatOperation:"PNHeartbeatOperation",PNChannelGroupsOperation:"PNChannelGroupsOperation",PNRemoveGroupOperation:"PNRemoveGroupOperation",PNChannelsForGroupOperation:"PNChannelsForGroupOperation",PNAddChannelsToGroupOperation:"PNAddChannelsToGroupOperation",PNRemoveChannelsFromGroupOperation:"PNRemoveChannelsFromGroupOperation",PNAccessManagerGrant:"PNAccessManagerGrant",PNAccessManagerGrantToken:"PNAccessManagerGrantToken",PNAccessManagerAudit:"PNAccessManagerAudit",PNAccessManagerRevokeToken:"PNAccessManagerRevokeToken",PNHandshakeOperation:"PNHandshakeOperation",PNReceiveMessagesOperation:"PNReceiveMessagesOperation"},x=function(){function e(e){this._maximumSamplesCount=100,this._trackedLatencies={},this._latencies={},this._maximumSamplesCount=e.maximumSamplesCount||this._maximumSamplesCount}return e.prototype.operationsLatencyForRequest=function(){var e=this,t={};return Object.keys(this._latencies).forEach((function(n){var r=e._latencies[n],o=e._averageLatency(r);o>0&&(t["l_".concat(n)]=o)})),t},e.prototype.startLatencyMeasure=function(e,t){e!==I.PNSubscribeOperation&&t&&(this._trackedLatencies[t]=Date.now())},e.prototype.stopLatencyMeasure=function(e,t){if(e!==I.PNSubscribeOperation&&t){var n=this._endpointName(e),r=this._latencies[n],o=this._trackedLatencies[t];r||(this._latencies[n]=[],r=this._latencies[n]),r.push(Date.now()-o),r.length>this._maximumSamplesCount&&r.splice(0,r.length-this._maximumSamplesCount),delete this._trackedLatencies[t]}},e.prototype._averageLatency=function(e){return Math.floor(e.reduce((function(e,t){return e+t}),0)/e.length)},e.prototype._endpointName=function(e){var t=null;switch(e){case I.PNPublishOperation:t="pub";break;case I.PNSignalOperation:t="sig";break;case I.PNHistoryOperation:case I.PNFetchMessagesOperation:case I.PNDeleteMessagesOperation:case I.PNMessageCounts:t="hist";break;case I.PNUnsubscribeOperation:case I.PNWhereNowOperation:case I.PNHereNowOperation:case I.PNHeartbeatOperation:case I.PNSetStateOperation:case I.PNGetStateOperation:t="pres";break;case I.PNAddChannelsToGroupOperation:case I.PNRemoveChannelsFromGroupOperation:case I.PNChannelGroupsOperation:case I.PNRemoveGroupOperation:case I.PNChannelsForGroupOperation:t="cg";break;case I.PNPushNotificationEnabledChannelsOperation:case I.PNRemoveAllPushNotificationsOperation:t="push";break;case I.PNCreateUserOperation:case I.PNUpdateUserOperation:case I.PNDeleteUserOperation:case I.PNGetUserOperation:case I.PNGetUsersOperation:case I.PNCreateSpaceOperation:case I.PNUpdateSpaceOperation:case I.PNDeleteSpaceOperation:case I.PNGetSpaceOperation:case I.PNGetSpacesOperation:case I.PNGetMembersOperation:case I.PNUpdateMembersOperation:case I.PNGetMembershipsOperation:case I.PNUpdateMembershipsOperation:t="obj";break;case I.PNAddMessageActionOperation:case I.PNRemoveMessageActionOperation:case I.PNGetMessageActionsOperation:t="msga";break;case I.PNAccessManagerGrant:case I.PNAccessManagerAudit:t="pam";break;case I.PNAccessManagerGrantToken:case I.PNAccessManagerRevokeToken:t="pamv3";break;default:t="time"}return t},e}(),D=function(){function e(e,t,n){this._payload=e,this._setDefaultPayloadStructure(),this.title=t,this.body=n}return Object.defineProperty(e.prototype,"payload",{get:function(){return this._payload},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"title",{set:function(e){this._title=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"subtitle",{set:function(e){this._subtitle=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"body",{set:function(e){this._body=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"badge",{set:function(e){this._badge=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"sound",{set:function(e){this._sound=e},enumerable:!1,configurable:!0}),e.prototype._setDefaultPayloadStructure=function(){},e.prototype.toObject=function(){return{}},e}(),F=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return t(r,e),Object.defineProperty(r.prototype,"configurations",{set:function(e){e&&e.length&&(this._configurations=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"notification",{get:function(){return this._payload.aps},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"title",{get:function(){return this._title},set:function(e){e&&e.length&&(this._payload.aps.alert.title=e,this._title=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"subtitle",{get:function(){return this._subtitle},set:function(e){e&&e.length&&(this._payload.aps.alert.subtitle=e,this._subtitle=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"body",{get:function(){return this._body},set:function(e){e&&e.length&&(this._payload.aps.alert.body=e,this._body=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"badge",{get:function(){return this._badge},set:function(e){null!=e&&(this._payload.aps.badge=e,this._badge=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"sound",{get:function(){return this._sound},set:function(e){e&&e.length&&(this._payload.aps.sound=e,this._sound=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"silent",{set:function(e){this._isSilent=e},enumerable:!1,configurable:!0}),r.prototype._setDefaultPayloadStructure=function(){this._payload.aps={alert:{}}},r.prototype.toObject=function(){var e=this,t=n({},this._payload),r=t.aps,o=r.alert;if(this._isSilent&&(r["content-available"]=1),"apns2"===this._apnsPushType){if(!this._configurations||!this._configurations.length)throw new ReferenceError("APNS2 configuration is missing");var i=[];this._configurations.forEach((function(t){i.push(e._objectFromAPNS2Configuration(t))})),i.length&&(t.pn_push=i)}return o&&Object.keys(o).length||delete r.alert,this._isSilent&&(delete r.alert,delete r.badge,delete r.sound,o={}),this._isSilent||Object.keys(o).length?t:null},r.prototype._objectFromAPNS2Configuration=function(e){var t=this;if(!e.targets||!e.targets.length)throw new ReferenceError("At least one APNS2 target should be provided");var n=[];e.targets.forEach((function(e){n.push(t._objectFromAPNSTarget(e))}));var r=e.collapseId,o=e.expirationDate,i={auth_method:"token",targets:n,version:"v2"};return r&&r.length&&(i.collapse_id=r),o&&(i.expiration=o.toISOString()),i},r.prototype._objectFromAPNSTarget=function(e){if(!e.topic||!e.topic.length)throw new TypeError("Target 'topic' undefined.");var t=e.topic,n=e.environment,r=void 0===n?"development":n,o=e.excludedDevices,i=void 0===o?[]:o,a={topic:t,environment:r};return i.length&&(a.excluded_devices=i),a},r}(D),G=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return t(r,e),Object.defineProperty(r.prototype,"backContent",{get:function(){return this._backContent},set:function(e){e&&e.length&&(this._payload.back_content=e,this._backContent=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"backTitle",{get:function(){return this._backTitle},set:function(e){e&&e.length&&(this._payload.back_title=e,this._backTitle=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"count",{get:function(){return this._count},set:function(e){null!=e&&(this._payload.count=e,this._count=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"title",{get:function(){return this._title},set:function(e){e&&e.length&&(this._payload.title=e,this._title=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"type",{get:function(){return this._type},set:function(e){e&&e.length&&(this._payload.type=e,this._type=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"subtitle",{get:function(){return this.backTitle},set:function(e){this.backTitle=e},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"body",{get:function(){return this.backContent},set:function(e){this.backContent=e},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"badge",{get:function(){return this.count},set:function(e){this.count=e},enumerable:!1,configurable:!0}),r.prototype.toObject=function(){return Object.keys(this._payload).length?n({},this._payload):null},r}(D),L=function(e){function o(){return null!==e&&e.apply(this,arguments)||this}return t(o,e),Object.defineProperty(o.prototype,"notification",{get:function(){return this._payload.notification},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"data",{get:function(){return this._payload.data},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"title",{get:function(){return this._title},set:function(e){e&&e.length&&(this._payload.notification.title=e,this._title=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"body",{get:function(){return this._body},set:function(e){e&&e.length&&(this._payload.notification.body=e,this._body=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"sound",{get:function(){return this._sound},set:function(e){e&&e.length&&(this._payload.notification.sound=e,this._sound=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"icon",{get:function(){return this._icon},set:function(e){e&&e.length&&(this._payload.notification.icon=e,this._icon=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"tag",{get:function(){return this._tag},set:function(e){e&&e.length&&(this._payload.notification.tag=e,this._tag=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"silent",{set:function(e){this._isSilent=e},enumerable:!1,configurable:!0}),o.prototype._setDefaultPayloadStructure=function(){this._payload.notification={},this._payload.data={}},o.prototype.toObject=function(){var e=n({},this._payload.data),t=null,o={};if(Object.keys(this._payload).length>2){var i=this._payload;i.notification,i.data;var a=r(i,["notification","data"]);e=n(n({},e),a)}return this._isSilent?e.notification=this._payload.notification:t=this._payload.notification,Object.keys(e).length&&(o.data=e),t&&Object.keys(t).length&&(o.notification=t),Object.keys(o).length?o:null},o}(D),K=function(){function e(e,t){this._payload={apns:{},mpns:{},fcm:{}},this._title=e,this._body=t,this.apns=new F(this._payload.apns,e,t),this.mpns=new G(this._payload.mpns,e,t),this.fcm=new L(this._payload.fcm,e,t)}return Object.defineProperty(e.prototype,"debugging",{set:function(e){this._debugging=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"title",{get:function(){return this._title},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"body",{get:function(){return this._body},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"subtitle",{get:function(){return this._subtitle},set:function(e){this._subtitle=e,this.apns.subtitle=e,this.mpns.subtitle=e,this.fcm.subtitle=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"badge",{get:function(){return this._badge},set:function(e){this._badge=e,this.apns.badge=e,this.mpns.badge=e,this.fcm.badge=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"sound",{get:function(){return this._sound},set:function(e){this._sound=e,this.apns.sound=e,this.mpns.sound=e,this.fcm.sound=e},enumerable:!1,configurable:!0}),e.prototype.buildPayload=function(e){var t={};if(e.includes("apns")||e.includes("apns2")){this.apns._apnsPushType=e.includes("apns")?"apns":"apns2";var n=this.apns.toObject();n&&Object.keys(n).length&&(t.pn_apns=n)}if(e.includes("mpns")){var r=this.mpns.toObject();r&&Object.keys(r).length&&(t.pn_mpns=r)}if(e.includes("fcm")){var o=this.fcm.toObject();o&&Object.keys(o).length&&(t.pn_gcm=o)}return Object.keys(t).length&&this._debugging&&(t.pn_debug=!0),t},e}(),B=function(){function e(){this._listeners=[]}return e.prototype.addListener=function(e){this._listeners.push(e)},e.prototype.removeListener=function(e){var t=[];this._listeners.forEach((function(n){n!==e&&t.push(n)})),this._listeners=t},e.prototype.removeAllListeners=function(){this._listeners=[]},e.prototype.announcePresence=function(e){this._listeners.forEach((function(t){t.presence&&t.presence(e)}))},e.prototype.announceStatus=function(e){this._listeners.forEach((function(t){t.status&&t.status(e)}))},e.prototype.announceMessage=function(e){this._listeners.forEach((function(t){t.message&&t.message(e)}))},e.prototype.announceSignal=function(e){this._listeners.forEach((function(t){t.signal&&t.signal(e)}))},e.prototype.announceMessageAction=function(e){this._listeners.forEach((function(t){t.messageAction&&t.messageAction(e)}))},e.prototype.announceFile=function(e){this._listeners.forEach((function(t){t.file&&t.file(e)}))},e.prototype.announceObjects=function(e){this._listeners.forEach((function(t){t.objects&&t.objects(e)}))},e.prototype.announceUser=function(e){this._listeners.forEach((function(t){t.user&&t.user(e)}))},e.prototype.announceSpace=function(e){this._listeners.forEach((function(t){t.space&&t.space(e)}))},e.prototype.announceMembership=function(e){this._listeners.forEach((function(t){t.membership&&t.membership(e)}))},e.prototype.announceNetworkUp=function(){var e={};e.category=R.PNNetworkUpCategory,this.announceStatus(e)},e.prototype.announceNetworkDown=function(){var e={};e.category=R.PNNetworkDownCategory,this.announceStatus(e)},e}(),H=function(){function e(e,t){this._config=e,this._cbor=t}return e.prototype.setToken=function(e){e&&e.length>0?this._token=e:this._token=void 0},e.prototype.getToken=function(){return this._token},e.prototype.extractPermissions=function(e){var t={read:!1,write:!1,manage:!1,delete:!1,get:!1,update:!1,join:!1};return 128==(128&e)&&(t.join=!0),64==(64&e)&&(t.update=!0),32==(32&e)&&(t.get=!0),8==(8&e)&&(t.delete=!0),4==(4&e)&&(t.manage=!0),2==(2&e)&&(t.write=!0),1==(1&e)&&(t.read=!0),t},e.prototype.parseToken=function(e){var t=this,n=this._cbor.decodeToken(e);if(void 0!==n){var r=n.res.uuid?Object.keys(n.res.uuid):[],o=Object.keys(n.res.chan),i=Object.keys(n.res.grp),a=n.pat.uuid?Object.keys(n.pat.uuid):[],s=Object.keys(n.pat.chan),u=Object.keys(n.pat.grp),c={version:n.v,timestamp:n.t,ttl:n.ttl,authorized_uuid:n.uuid},l=r.length>0,p=o.length>0,f=i.length>0;(l||p||f)&&(c.resources={},l&&(c.resources.uuids={},r.forEach((function(e){c.resources.uuids[e]=t.extractPermissions(n.res.uuid[e])}))),p&&(c.resources.channels={},o.forEach((function(e){c.resources.channels[e]=t.extractPermissions(n.res.chan[e])}))),f&&(c.resources.groups={},i.forEach((function(e){c.resources.groups[e]=t.extractPermissions(n.res.grp[e])}))));var h=a.length>0,d=s.length>0,y=u.length>0;return(h||d||y)&&(c.patterns={},h&&(c.patterns.uuids={},a.forEach((function(e){c.patterns.uuids[e]=t.extractPermissions(n.pat.uuid[e])}))),d&&(c.patterns.channels={},s.forEach((function(e){c.patterns.channels[e]=t.extractPermissions(n.pat.chan[e])}))),y&&(c.patterns.groups={},u.forEach((function(e){c.patterns.groups[e]=t.extractPermissions(n.pat.grp[e])})))),Object.keys(n.meta).length>0&&(c.meta=n.meta),c.signature=n.sig,c}},e}(),q=function(e){function n(t,n){var r=this.constructor,o=e.call(this,t)||this;return o.name=o.constructor.name,o.status=n,o.message=t,Object.setPrototypeOf(o,r.prototype),o}return t(n,e),n}(Error);function z(e){return(t={message:e}).type="validationError",t.error=!0,t;var t}function V(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.usePatch&&e.usePatch(t,n)?e.patchURL(t,n):e.useGetFile&&e.useGetFile(t,n)?e.getFileURL(t,n):e.getURL(t,n)}function W(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-".concat(e.sdkFamily);e.partnerId&&(t+="-".concat(e.partnerId)),t+="/".concat(e.getVersion());var n=e._getPnsdkSuffix(" ");return n.length>0&&(t+=n),t}function J(e,t,n){return t.usePost&&t.usePost(e,n)?"POST":t.usePatch&&t.usePatch(e,n)?"PATCH":t.useDelete&&t.useDelete(e,n)?"DELETE":t.useGetFile&&t.useGetFile(e,n)?"GETFILE":"GET"}function $(e,t,n,r,o){var i=e.config,a=e.crypto,s=J(e,o,r);n.timestamp=Math.floor((new Date).getTime()/1e3),"PNPublishOperation"===o.getOperation()&&o.usePost&&o.usePost(e,r)&&(s="GET"),"GETFILE"===s&&(s="GET");var u="".concat(s,"\n").concat(i.publishKey,"\n").concat(t,"\n").concat(M.signPamFromParams(n),"\n");if("POST"===s)u+="string"==typeof(c=o.postPayload(e,r))?c:JSON.stringify(c);else if("PATCH"===s){var c;u+="string"==typeof(c=o.patchPayload(e,r))?c:JSON.stringify(c)}var l="v2.".concat(a.HMACSHA256(u));l=(l=(l=l.replace(/\+/g,"-")).replace(/\//g,"_")).replace(/=+$/,""),n.signature=l}function Q(e,t){for(var r=[],o=2;o<arguments.length;o++)r[o-2]=arguments[o];var i=e.networking,a=e.config,s=e.telemetryManager,u=e.tokenManager,c=y(),l=null,p=null,f={};t.getOperation()===I.PNTimeOperation||t.getOperation()===I.PNChannelGroupsOperation?l=r[0]:(f=r[0],l=r[1]),"undefined"==typeof Promise||l||(p=M.createPromise());var h=t.validateParams(e,f);if(h)return l?l(z(h)):p?(p.reject(new q("Validation failed, check status for details",z(h))),p.promise):void 0;var d,g=t.prepareParams(e,f),b=V(t,e,f),v={url:b,operation:t.getOperation(),timeout:t.getRequestTimeout(e),headers:t.getRequestHeaders?t.getRequestHeaders():{},ignoreBody:"function"==typeof t.ignoreBody&&t.ignoreBody(e),forceBuffered:"function"==typeof t.forceBuffered?t.forceBuffered(e,f):null,abortSignal:"function"==typeof t.getAbortSignal?t.getAbortSignal(e,f):null};g.uuid=a.UUID,g.pnsdk=W(a);var m=s.operationsLatencyForRequest();if(Object.keys(m).length&&(g=n(n({},g),m)),a.useInstanceId&&(g.instanceid=a.instanceId),a.useRequestId&&(g.requestid=c),t.isAuthSupported()){var _=u.getToken()||a.getAuthKey();_&&(g.auth=_)}a.secretKey&&$(e,b,g,f,t);var O=function(n,r){if(n.error)return t.handleError&&t.handleError(e,f,n),void(l?l(n):p&&p.reject(new q("PubNub call failed, check status for details",n)));s.stopLatencyMeasure(t.getOperation(),c);var o=t.handleResponse(e,r,f);"function"!=typeof(null==o?void 0:o.then)&&(o=Promise.resolve(o)),o.then((function(e){l?l(n,e):p&&p.fulfill(e)})).catch((function(e){if(l){var n=e;t.getOperation()===I.PNSubscribeOperation&&(n={statusCode:400,error:!0,operation:t.getOperation(),errorData:e,category:R.PNUnknownCategory}),l(n,null)}else p&&p.reject(new q("PubNub call failed, check status for details",e))}))};if(s.startLatencyMeasure(t.getOperation(),c),"POST"===J(e,t,f)){var S=t.postPayload(e,f);d=i.POST(g,S,v,O)}else if("PATCH"===J(e,t,f)){S=t.patchPayload(e,f);d=i.PATCH(g,S,v,O)}else d="DELETE"===J(e,t,f)?i.DELETE(g,v,O):"GETFILE"===J(e,t,f)?i.GETFILE(g,v,O):i.GET(g,v,O);return t.getOperation()===I.PNSubscribeOperation?d:p?p.promise:void 0}var X=Object.freeze({__proto__:null,getOperation:function(){return I.PNAddChannelsToGroupOperation},validateParams:function(e,t){var n=t.channels,r=t.channelGroup,o=e.config;return r?n&&0!==n.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(M.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}},handleResponse:function(){return{}}});var Y=Object.freeze({__proto__:null,getOperation:function(){return I.PNRemoveChannelsFromGroupOperation},validateParams:function(e,t){var n=t.channels,r=t.channelGroup,o=e.config;return r?n&&0!==n.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(M.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}},handleResponse:function(){return{}}});var Z=Object.freeze({__proto__:null,getOperation:function(){return I.PNRemoveGroupOperation},validateParams:function(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(M.encodeString(n),"/remove")},isAuthSupported:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},prepareParams:function(){return{}},handleResponse:function(){return{}}});var ee=Object.freeze({__proto__:null,getOperation:function(){return I.PNChannelGroupsOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e){var t=e.config;return"/v1/channel-registration/sub-key/".concat(t.subscribeKey,"/channel-group")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{groups:t.payload.groups}}});var te=Object.freeze({__proto__:null,getOperation:function(){return I.PNChannelsForGroupOperation},validateParams:function(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(M.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{channels:t.payload.channels}}});var ne=Object.freeze({__proto__:null,getOperation:function(){return I.PNPushNotificationEnabledChannelsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.channels,i=t.topic,a=e.config;return n?r?"apns2"!==r||i?o&&0!==o.length?a.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.channels,i=void 0===o?[]:o,a=t.environment,s=void 0===a?"development":a,u=t.topic,c={type:r,add:i.join(",")};return"apns2"===r&&delete(c=n(n({},c),{environment:s,topic:u})).type,c},handleResponse:function(){return{}}});var re=Object.freeze({__proto__:null,getOperation:function(){return I.PNPushNotificationEnabledChannelsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.channels,i=t.topic,a=e.config;return n?r?"apns2"!==r||i?o&&0!==o.length?a.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.channels,i=void 0===o?[]:o,a=t.environment,s=void 0===a?"development":a,u=t.topic,c={type:r,remove:i.join(",")};return"apns2"===r&&delete(c=n(n({},c),{environment:s,topic:u})).type,c},handleResponse:function(){return{}}});var oe=Object.freeze({__proto__:null,getOperation:function(){return I.PNPushNotificationEnabledChannelsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.topic,i=e.config;return n?r?"apns2"!==r||o?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.environment,i=void 0===o?"development":o,a=t.topic,s={type:r};return"apns2"===r&&delete(s=n(n({},s),{environment:i,topic:a})).type,s},handleResponse:function(e,t){return{channels:t}}});var ie=Object.freeze({__proto__:null,getOperation:function(){return I.PNRemoveAllPushNotificationsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.topic,i=e.config;return n?r?"apns2"!==r||o?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n,"/remove"):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n,"/remove")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.environment,i=void 0===o?"development":o,a=t.topic,s={type:r};return"apns2"===r&&delete(s=n(n({},s),{environment:i,topic:a})).type,s},handleResponse:function(){return{}}});var ae=Object.freeze({__proto__:null,getOperation:function(){return I.PNUnsubscribeOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(i),"/leave")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channelGroups,r=void 0===n?[]:n,o={};return r.length>0&&(o["channel-group"]=r.join(",")),o},handleResponse:function(){return{}}});var se=Object.freeze({__proto__:null,getOperation:function(){return I.PNWhereNowOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.uuid,o=void 0===r?n.UUID:r;return"/v2/presence/sub-key/".concat(n.subscribeKey,"/uuid/").concat(M.encodeString(o))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}});var ue=Object.freeze({__proto__:null,getOperation:function(){return I.PNHeartbeatOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(i),"/heartbeat")},isAuthSupported:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},prepareParams:function(e,t){var n=t.channelGroups,r=void 0===n?[]:n,o=t.state,i=void 0===o?{}:o,a=e.config,s={};return r.length>0&&(s["channel-group"]=r.join(",")),s.state=JSON.stringify(i),s.heartbeat=a.getPresenceTimeout(),s},handleResponse:function(){return{}}});var ce=Object.freeze({__proto__:null,getOperation:function(){return I.PNGetStateOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.uuid,o=void 0===r?n.UUID:r,i=t.channels,a=void 0===i?[]:i,s=a.length>0?a.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(s),"/uuid/").concat(o)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channelGroups,r=void 0===n?[]:n,o={};return r.length>0&&(o["channel-group"]=r.join(",")),o},handleResponse:function(e,t,n){var r=n.channels,o=void 0===r?[]:r,i=n.channelGroups,a=void 0===i?[]:i,s={};return 1===o.length&&0===a.length?s[o[0]]=t.payload:s=t.payload,{channels:s}}});var le=Object.freeze({__proto__:null,getOperation:function(){return I.PNSetStateOperation},validateParams:function(e,t){var n=e.config,r=t.state,o=t.channels,i=void 0===o?[]:o,a=t.channelGroups,s=void 0===a?[]:a;return r?n.subscribeKey?0===i.length&&0===s.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(i),"/uuid/").concat(M.encodeString(n.UUID),"/data")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.state,r=t.channelGroups,o=void 0===r?[]:r,i={};return i.state=JSON.stringify(n),o.length>0&&(i["channel-group"]=o.join(",")),i},handleResponse:function(e,t){return{state:t.payload}}});var pe=Object.freeze({__proto__:null,getOperation:function(){return I.PNHereNowOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=t.channelGroups,a=void 0===i?[]:i,s="/v2/presence/sub-key/".concat(n.subscribeKey);if(o.length>0||a.length>0){var u=o.length>0?o.join(","):",";s+="/channel/".concat(M.encodeString(u))}return s},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.channelGroups,o=void 0===r?[]:r,i=t.includeUUIDs,a=void 0===i||i,s=t.includeState,u=void 0!==s&&s,c=t.queryParameters,l=void 0===c?{}:c,p={};return a||(p.disable_uuids=1),u&&(p.state=1),o.length>0&&(p["channel-group"]=o.join(",")),p=n(n({},p),l)},handleResponse:function(e,t,n){var r=n.channels,o=void 0===r?[]:r,i=n.channelGroups,a=void 0===i?[]:i,s=n.includeUUIDs,u=void 0===s||s,c=n.includeState,l=void 0!==c&&c;return o.length>1||a.length>0||0===a.length&&0===o.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach((function(n){var r=t.payload.channels[n],o=[];return e.channels[n]={occupants:o,name:n,occupancy:r.occupancy},u&&r.uuids.forEach((function(e){l?o.push({state:e.state,uuid:e.uuid}):o.push({state:null,uuid:e})})),e})),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[o[0]]={occupants:n,name:o[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach((function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})})),e}()},handleError:function(e,t,n){402!==n.statusCode||this.getURL(e,t).includes("channel")||(n.errorData.message="You have tried to perform a Global Here Now operation, your keyset configuration does not support that. Please provide a channel, or enable the Global Here Now feature from the Portal.")}});var fe=Object.freeze({__proto__:null,getOperation:function(){return I.PNAddMessageActionOperation},validateParams:function(e,t){var n=e.config,r=t.action,o=t.channel;return t.messageTimetoken?n.subscribeKey?o?r?r.value?r.type?r.type.length>15?"Action.type value exceed maximum length of 15":void 0:"Missing Action.type":"Missing Action.value":"Missing Action":"Missing message channel":"Missing Subscribe Key":"Missing message timetoken"},usePost:function(){return!0},postURL:function(e,t){var n=e.config,r=t.channel,o=t.messageTimetoken;return"/v1/message-actions/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(r),"/message/").concat(o)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},getRequestHeaders:function(){return{"Content-Type":"application/json"}},isAuthSupported:function(){return!0},prepareParams:function(){return{}},postPayload:function(e,t){return t.action},handleResponse:function(e,t){return{data:t.data}}});var he=Object.freeze({__proto__:null,getOperation:function(){return I.PNRemoveMessageActionOperation},validateParams:function(e,t){var n=e.config,r=t.channel,o=t.actionTimetoken;return t.messageTimetoken?o?n.subscribeKey?r?void 0:"Missing message channel":"Missing Subscribe Key":"Missing action timetoken":"Missing message timetoken"},useDelete:function(){return!0},getURL:function(e,t){var n=e.config,r=t.channel,o=t.actionTimetoken,i=t.messageTimetoken;return"/v1/message-actions/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(r),"/message/").concat(i,"/action/").concat(o)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{data:t.data}}});var de=Object.freeze({__proto__:null,getOperation:function(){return I.PNGetMessageActionsOperation},validateParams:function(e,t){var n=e.config,r=t.channel;return n.subscribeKey?r?void 0:"Missing message channel":"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channel;return"/v1/message-actions/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(r))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.limit,r=t.start,o=t.end,i={};return n&&(i.limit=n),r&&(i.start=r),o&&(i.end=o),i},handleResponse:function(e,t){var n={data:t.data,start:null,end:null};return n.data.length&&(n.end=n.data[n.data.length-1].actionTimetoken,n.start=n.data[0].actionTimetoken),n}}),ye={getOperation:function(){return I.PNListFilesOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"channel can't be empty"},getURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel),"/files")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n={};return t.limit&&(n.limit=t.limit),t.next&&(n.next=t.next),n},handleResponse:function(e,t){return{status:t.status,data:t.data,next:t.next,count:t.count}}},ge={getOperation:function(){return I.PNGenerateUploadUrlOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.name)?void 0:"name can't be empty":"channel can't be empty"},usePost:function(){return!0},postURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel),"/generate-upload-url")},postPayload:function(e,t){return{name:t.name}},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{status:t.status,data:t.data,file_upload_request:t.file_upload_request}}},be={getOperation:function(){return I.PNPublishFileOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.fileId)?(null==t?void 0:t.fileName)?void 0:"file name can't be empty":"file id can't be empty":"channel can't be empty"},getURL:function(e,t){var n=e.config,r=n.publishKey,o=n.subscribeKey,i=function(e,t){var n=JSON.stringify(t);if(e.cryptoModule){var r=e.cryptoModule.encrypt(n);n="string"==typeof r?r:v(r),n=JSON.stringify(n)}return n||""}(e,{message:t.message,file:{name:t.fileName,id:t.fileId}});return"/v1/files/publish-file/".concat(r,"/").concat(o,"/0/").concat(M.encodeString(t.channel),"/0/").concat(M.encodeString(i))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n={};return t.ttl&&(n.ttl=t.ttl),void 0!==t.storeInHistory&&(n.store=t.storeInHistory?"1":"0"),t.meta&&"object"==typeof t.meta&&(n.meta=JSON.stringify(t.meta)),n},handleResponse:function(e,t){return{timetoken:t[2]}}},ve=function(e){var t=function(e){var t=this,n=e.generateUploadUrl,r=e.publishFile,a=e.modules,s=a.PubNubFile,u=a.config,c=a.cryptography,l=a.cryptoModule,p=a.networking;return function(e){var a=e.channel,f=e.file,h=e.message,d=e.cipherKey,y=e.meta,g=e.ttl,b=e.storeInHistory;return o(t,void 0,void 0,(function(){var e,t,o,v,m,_,O,S,P,w,E,T,A,N,k,C,j,M,R,U,I,x,D,F,G,L,K,B,H;return i(this,(function(i){switch(i.label){case 0:if(!a)throw new q("Validation failed, check status for details",z("channel can't be empty"));if(!f)throw new q("Validation failed, check status for details",z("file can't be empty"));return e=s.create(f),[4,n({channel:a,name:e.name})];case 1:return t=i.sent(),o=t.file_upload_request,v=o.url,m=o.form_fields,_=t.data,O=_.id,S=_.name,s.supportsEncryptFile&&(d||l)?null!=d?[3,3]:[4,l.encryptFile(e,s)]:[3,6];case 2:return P=i.sent(),[3,5];case 3:return[4,c.encryptFile(d,e,s)];case 4:P=i.sent(),i.label=5;case 5:e=P,i.label=6;case 6:w=m,e.mimeType&&(w=m.map((function(t){return"Content-Type"===t.key?{key:t.key,value:e.mimeType}:t}))),i.label=7;case 7:return i.trys.push([7,21,,22]),s.supportsFileUri&&f.uri?(A=(T=p).POSTFILE,N=[v,w],[4,e.toFileUri()]):[3,10];case 8:return[4,A.apply(T,N.concat([i.sent()]))];case 9:return E=i.sent(),[3,20];case 10:return s.supportsFile?(C=(k=p).POSTFILE,j=[v,w],[4,e.toFile()]):[3,13];case 11:return[4,C.apply(k,j.concat([i.sent()]))];case 12:return E=i.sent(),[3,20];case 13:return s.supportsBuffer?(R=(M=p).POSTFILE,U=[v,w],[4,e.toBuffer()]):[3,16];case 14:return[4,R.apply(M,U.concat([i.sent()]))];case 15:return E=i.sent(),[3,20];case 16:return s.supportsBlob?(x=(I=p).POSTFILE,D=[v,w],[4,e.toBlob()]):[3,19];case 17:return[4,x.apply(I,D.concat([i.sent()]))];case 18:return E=i.sent(),[3,20];case 19:throw new Error("Unsupported environment");case 20:return[3,22];case 21:throw(F=i.sent()).response&&"string"==typeof F.response.text?(G=F.response.text,L=/<Message>(.*)<\/Message>/gi.exec(G),new q(L?"Upload to bucket failed: ".concat(L[1]):"Upload to bucket failed.",F)):new q("Upload to bucket failed.",F);case 22:if(204!==E.status)throw new q("Upload to bucket was unsuccessful",E);K=u.fileUploadPublishRetryLimit,B=!1,H={timetoken:"0"},i.label=23;case 23:return i.trys.push([23,25,,26]),[4,r({channel:a,message:h,fileId:O,fileName:S,meta:y,storeInHistory:b,ttl:g})];case 24:return H=i.sent(),B=!0,[3,26];case 25:return i.sent(),K-=1,[3,26];case 26:if(!B&&K>0)return[3,23];i.label=27;case 27:if(B)return[2,{timetoken:H.timetoken,id:O,name:S}];throw new q("Publish failed. You may want to execute that operation manually using pubnub.publishFile",{channel:a,id:O,name:S})}}))}))}}(e);return function(e,n){var r=t(e);return"function"==typeof n?(r.then((function(e){return n(null,e)})).catch((function(e){return n(e,null)})),r):r}},me=function(e,t){var n=t.channel,r=t.id,o=t.name,i=e.config,a=e.networking,s=e.tokenManager;if(!n)throw new q("Validation failed, check status for details",z("channel can't be empty"));if(!r)throw new q("Validation failed, check status for details",z("file id can't be empty"));if(!o)throw new q("Validation failed, check status for details",z("file name can't be empty"));var u="/v1/files/".concat(i.subscribeKey,"/channels/").concat(M.encodeString(n),"/files/").concat(r,"/").concat(o),c={};c.uuid=i.getUUID(),c.pnsdk=W(i);var l=s.getToken()||i.getAuthKey();l&&(c.auth=l),i.secretKey&&$(e,u,c,{},{getOperation:function(){return"PubNubGetFileUrlOperation"}});var p=Object.keys(c).map((function(e){return"".concat(encodeURIComponent(e),"=").concat(encodeURIComponent(c[e]))})).join("&");return""!==p?"".concat(a.getStandardOrigin()).concat(u,"?").concat(p):"".concat(a.getStandardOrigin()).concat(u)},_e={getOperation:function(){return I.PNDownloadFileOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.name)?(null==t?void 0:t.id)?void 0:"id can't be empty":"name can't be empty":"channel can't be empty"},useGetFile:function(){return!0},getFileURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel),"/files/").concat(t.id,"/").concat(t.name)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},ignoreBody:function(){return!0},forceBuffered:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t,n){var r=e.PubNubFile,a=e.config,s=e.cryptography,u=e.cryptoModule;return o(void 0,void 0,void 0,(function(){var e,o,c,l;return i(this,(function(i){switch(i.label){case 0:return e=t.response.body,r.supportsEncryptFile&&(n.cipherKey||u)?null!=n.cipherKey?[3,2]:[4,u.decryptFile(r.create({data:e,name:n.name}),r)]:[3,5];case 1:return o=i.sent().data,[3,4];case 2:return[4,s.decrypt(null!==(c=n.cipherKey)&&void 0!==c?c:a.cipherKey,e)];case 3:o=i.sent(),i.label=4;case 4:e=o,i.label=5;case 5:return[2,r.create({data:e,name:null!==(l=t.response.name)&&void 0!==l?l:n.name,mimeType:t.response.type})]}}))}))}},Oe={getOperation:function(){return I.PNListFilesOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.id)?(null==t?void 0:t.name)?void 0:"file name can't be empty":"file id can't be empty":"channel can't be empty"},useDelete:function(){return!0},getURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel),"/files/").concat(t.id,"/").concat(t.name)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{status:t.status}}},Se={getOperation:function(){return I.PNGetAllUUIDMetadataOperation},validateParams:function(){},getURL:function(e){var t=e.config;return"/v2/objects/".concat(t.subscribeKey,"/uuids")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["status","type"]};return(null==t?void 0:t.include)&&(null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),f.include=f.include.join(","),(null===(r=null==t?void 0:t.include)||void 0===r?void 0:r.totalCount)&&(f.count=null===(o=t.include)||void 0===o?void 0:o.totalCount),(null===(i=null==t?void 0:t.page)||void 0===i?void 0:i.next)&&(f.start=null===(a=t.page)||void 0===a?void 0:a.next),(null===(u=null==t?void 0:t.page)||void 0===u?void 0:u.prev)&&(f.end=null===(c=t.page)||void 0===c?void 0:c.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),f.limit=null!==(l=null==t?void 0:t.limit)&&void 0!==l?l:100,(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,next:t.next,prev:t.prev}}},Pe={getOperation:function(){return I.PNGetUUIDMetadataOperation},validateParams:function(){},getURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(M.encodeString(null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o=e.config,i={};return i.uuid=null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:o.getUUID(),i.include=["status","type","custom"],(null==t?void 0:t.include)&&!1===(null===(r=t.include)||void 0===r?void 0:r.customFields)&&i.include.pop(),i.include=i.include.join(","),i},handleResponse:function(e,t){return{status:t.status,data:t.data}}},we={getOperation:function(){return I.PNSetUUIDMetadataOperation},validateParams:function(e,t){if(!(null==t?void 0:t.data))return"Data cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(M.encodeString(null!==(n=t.uuid)&&void 0!==n?n:r.getUUID()))},patchPayload:function(e,t){return t.data},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o=e.config,i={};return i.uuid=null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:o.getUUID(),i.include=["status","type","custom"],(null==t?void 0:t.include)&&!1===(null===(r=t.include)||void 0===r?void 0:r.customFields)&&i.include.pop(),i.include=i.include.join(","),i},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Ee={getOperation:function(){return I.PNRemoveUUIDMetadataOperation},validateParams:function(){},getURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(M.encodeString(null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()))},useDelete:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r=e.config;return{uuid:null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()}},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Te={getOperation:function(){return I.PNGetAllChannelMetadataOperation},validateParams:function(){},getURL:function(e){var t=e.config;return"/v2/objects/".concat(t.subscribeKey,"/channels")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["status","type"]};return(null==t?void 0:t.include)&&(null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),f.include=f.include.join(","),(null===(r=null==t?void 0:t.include)||void 0===r?void 0:r.totalCount)&&(f.count=null===(o=t.include)||void 0===o?void 0:o.totalCount),(null===(i=null==t?void 0:t.page)||void 0===i?void 0:i.next)&&(f.start=null===(a=t.page)||void 0===a?void 0:a.next),(null===(u=null==t?void 0:t.page)||void 0===u?void 0:u.prev)&&(f.end=null===(c=t.page)||void 0===c?void 0:c.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),f.limit=null!==(l=null==t?void 0:t.limit)&&void 0!==l?l:100,(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},Ae={getOperation:function(){return I.PNGetChannelMetadataOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"Channel cannot be empty"},getURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r={include:["status","type","custom"]};return(null==t?void 0:t.include)&&!1===(null===(n=t.include)||void 0===n?void 0:n.customFields)&&r.include.pop(),r.include=r.include.join(","),r},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Ne={getOperation:function(){return I.PNSetChannelMetadataOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.data)?void 0:"Data cannot be empty":"Channel cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel))},patchPayload:function(e,t){return t.data},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r={include:["status","type","custom"]};return(null==t?void 0:t.include)&&!1===(null===(n=t.include)||void 0===n?void 0:n.customFields)&&r.include.pop(),r.include=r.include.join(","),r},handleResponse:function(e,t){return{status:t.status,data:t.data}}},ke={getOperation:function(){return I.PNRemoveChannelMetadataOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"Channel cannot be empty"},getURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel))},useDelete:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Ce={getOperation:function(){return I.PNGetMembersOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"UUID cannot be empty"},getURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel),"/uuids")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f,h,d,y={include:["uuid.status","uuid.type","type"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&y.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customUUIDFields)&&y.include.push("uuid.custom"),(null===(i=null===(o=t.include)||void 0===o?void 0:o.UUIDFields)||void 0===i||i)&&y.include.push("uuid")),y.include=y.include.join(","),(null===(a=null==t?void 0:t.include)||void 0===a?void 0:a.totalCount)&&(y.count=null===(u=t.include)||void 0===u?void 0:u.totalCount),(null===(c=null==t?void 0:t.page)||void 0===c?void 0:c.next)&&(y.start=null===(l=t.page)||void 0===l?void 0:l.next),(null===(p=null==t?void 0:t.page)||void 0===p?void 0:p.prev)&&(y.end=null===(f=t.page)||void 0===f?void 0:f.prev),(null==t?void 0:t.filter)&&(y.filter=t.filter),y.limit=null!==(h=null==t?void 0:t.limit)&&void 0!==h?h:100,(null==t?void 0:t.sort)&&(y.sort=Object.entries(null!==(d=t.sort)&&void 0!==d?d:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),y},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},je={getOperation:function(){return I.PNSetMembersOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.uuids)&&0!==(null==t?void 0:t.uuids.length)?void 0:"UUIDs cannot be empty":"Channel cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel),"/uuids")},patchPayload:function(e,t){var n;return(n={set:[],delete:[]})[t.type]=t.uuids.map((function(e){return"string"==typeof e?{uuid:{id:e}}:{uuid:{id:e.id},custom:e.custom,status:e.status}})),n},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["uuid.status","uuid.type","type"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customUUIDFields)&&f.include.push("uuid.custom"),(null===(o=t.include)||void 0===o?void 0:o.UUIDFields)&&f.include.push("uuid")),f.include=f.include.join(","),(null===(i=null==t?void 0:t.include)||void 0===i?void 0:i.totalCount)&&(f.count=!0),(null===(a=null==t?void 0:t.page)||void 0===a?void 0:a.next)&&(f.start=null===(u=t.page)||void 0===u?void 0:u.next),(null===(c=null==t?void 0:t.page)||void 0===c?void 0:c.prev)&&(f.end=null===(l=t.page)||void 0===l?void 0:l.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),null!=t.limit&&(f.limit=t.limit),(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},Me={getOperation:function(){return I.PNGetMembershipsOperation},validateParams:function(){},getURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(M.encodeString(null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()),"/channels")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f,h,d={include:["channel.status","channel.type","status"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&d.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customChannelFields)&&d.include.push("channel.custom"),(null===(o=t.include)||void 0===o?void 0:o.channelFields)&&d.include.push("channel")),d.include=d.include.join(","),(null===(i=null==t?void 0:t.include)||void 0===i?void 0:i.totalCount)&&(d.count=null===(a=t.include)||void 0===a?void 0:a.totalCount),(null===(u=null==t?void 0:t.page)||void 0===u?void 0:u.next)&&(d.start=null===(c=t.page)||void 0===c?void 0:c.next),(null===(l=null==t?void 0:t.page)||void 0===l?void 0:l.prev)&&(d.end=null===(p=t.page)||void 0===p?void 0:p.prev),(null==t?void 0:t.filter)&&(d.filter=t.filter),d.limit=null!==(f=null==t?void 0:t.limit)&&void 0!==f?f:100,(null==t?void 0:t.sort)&&(d.sort=Object.entries(null!==(h=t.sort)&&void 0!==h?h:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),d},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},Re={getOperation:function(){return I.PNSetMembershipsOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channels)||0===(null==t?void 0:t.channels.length))return"Channels cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(M.encodeString(null!==(n=t.uuid)&&void 0!==n?n:r.getUUID()),"/channels")},patchPayload:function(e,t){var n;return(n={set:[],delete:[]})[t.type]=t.channels.map((function(e){return"string"==typeof e?{channel:{id:e}}:{channel:{id:e.id},custom:e.custom,status:e.status}})),n},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["channel.status","channel.type","status"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customChannelFields)&&f.include.push("channel.custom"),(null===(o=t.include)||void 0===o?void 0:o.channelFields)&&f.include.push("channel")),f.include=f.include.join(","),(null===(i=null==t?void 0:t.include)||void 0===i?void 0:i.totalCount)&&(f.count=!0),(null===(a=null==t?void 0:t.page)||void 0===a?void 0:a.next)&&(f.start=null===(u=t.page)||void 0===u?void 0:u.next),(null===(c=null==t?void 0:t.page)||void 0===c?void 0:c.prev)&&(f.end=null===(l=t.page)||void 0===l?void 0:l.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),null!=t.limit&&(f.limit=t.limit),(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}};var Ue=Object.freeze({__proto__:null,getOperation:function(){return I.PNAccessManagerAudit},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e){var t=e.config;return"/v2/auth/audit/sub-key/".concat(t.subscribeKey)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(e,t){var n=t.channel,r=t.channelGroup,o=t.authKeys,i=void 0===o?[]:o,a={};return n&&(a.channel=n),r&&(a["channel-group"]=r),i.length>0&&(a.auth=i.join(",")),a},handleResponse:function(e,t){return t.payload}});var Ie=Object.freeze({__proto__:null,getOperation:function(){return I.PNAccessManagerGrant},validateParams:function(e,t){var n=e.config;return n.subscribeKey?n.publishKey?n.secretKey?null==t.uuids||t.authKeys?null==t.uuids||null==t.channels&&null==t.channelGroups?void 0:"Both channel/channelgroup and uuid cannot be used in the same request":"authKeys are required for grant request on uuids":"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"},getURL:function(e){var t=e.config;return"/v2/auth/grant/sub-key/".concat(t.subscribeKey)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(e,t){var n=t.channels,r=void 0===n?[]:n,o=t.channelGroups,i=void 0===o?[]:o,a=t.uuids,s=void 0===a?[]:a,u=t.ttl,c=t.read,l=void 0!==c&&c,p=t.write,f=void 0!==p&&p,h=t.manage,d=void 0!==h&&h,y=t.get,g=void 0!==y&&y,b=t.join,v=void 0!==b&&b,m=t.update,_=void 0!==m&&m,O=t.authKeys,S=void 0===O?[]:O,P=t.delete,w={};return w.r=l?"1":"0",w.w=f?"1":"0",w.m=d?"1":"0",w.d=P?"1":"0",w.g=g?"1":"0",w.j=v?"1":"0",w.u=_?"1":"0",r.length>0&&(w.channel=r.join(",")),i.length>0&&(w["channel-group"]=i.join(",")),S.length>0&&(w.auth=S.join(",")),s.length>0&&(w["target-uuid"]=s.join(",")),(u||0===u)&&(w.ttl=u),w},handleResponse:function(){return{}}});function xe(e){var t,n,r,o,i=void 0!==(null==e?void 0:e.authorizedUserId),a=void 0!==(null===(t=null==e?void 0:e.resources)||void 0===t?void 0:t.users),s=void 0!==(null===(n=null==e?void 0:e.resources)||void 0===n?void 0:n.spaces),u=void 0!==(null===(r=null==e?void 0:e.patterns)||void 0===r?void 0:r.users),c=void 0!==(null===(o=null==e?void 0:e.patterns)||void 0===o?void 0:o.spaces);return u||a||c||s||i}function De(e){var t=0;return e.join&&(t|=128),e.update&&(t|=64),e.get&&(t|=32),e.delete&&(t|=8),e.manage&&(t|=4),e.write&&(t|=2),e.read&&(t|=1),t}function Fe(e,t){if(xe(t))return function(e,t){var n=t.ttl,r=t.resources,o=t.patterns,i=t.meta,a=t.authorizedUserId,s={ttl:0,permissions:{resources:{channels:{},groups:{},uuids:{},users:{},spaces:{}},patterns:{channels:{},groups:{},uuids:{},users:{},spaces:{}},meta:{}}};if(r){var u=r.users,c=r.spaces,l=r.groups;u&&Object.keys(u).forEach((function(e){s.permissions.resources.uuids[e]=De(u[e])})),c&&Object.keys(c).forEach((function(e){s.permissions.resources.channels[e]=De(c[e])})),l&&Object.keys(l).forEach((function(e){s.permissions.resources.groups[e]=De(l[e])}))}if(o){var p=o.users,f=o.spaces,h=o.groups;p&&Object.keys(p).forEach((function(e){s.permissions.patterns.uuids[e]=De(p[e])})),f&&Object.keys(f).forEach((function(e){s.permissions.patterns.channels[e]=De(f[e])})),h&&Object.keys(h).forEach((function(e){s.permissions.patterns.groups[e]=De(h[e])}))}return(n||0===n)&&(s.ttl=n),i&&(s.permissions.meta=i),a&&(s.permissions.uuid="".concat(a)),s}(0,t);var n=t.ttl,r=t.resources,o=t.patterns,i=t.meta,a=t.authorized_uuid,s={ttl:0,permissions:{resources:{channels:{},groups:{},uuids:{},users:{},spaces:{}},patterns:{channels:{},groups:{},uuids:{},users:{},spaces:{}},meta:{}}};if(r){var u=r.uuids,c=r.channels,l=r.groups;u&&Object.keys(u).forEach((function(e){s.permissions.resources.uuids[e]=De(u[e])})),c&&Object.keys(c).forEach((function(e){s.permissions.resources.channels[e]=De(c[e])})),l&&Object.keys(l).forEach((function(e){s.permissions.resources.groups[e]=De(l[e])}))}if(o){var p=o.uuids,f=o.channels,h=o.groups;p&&Object.keys(p).forEach((function(e){s.permissions.patterns.uuids[e]=De(p[e])})),f&&Object.keys(f).forEach((function(e){s.permissions.patterns.channels[e]=De(f[e])})),h&&Object.keys(h).forEach((function(e){s.permissions.patterns.groups[e]=De(h[e])}))}return(n||0===n)&&(s.ttl=n),i&&(s.permissions.meta=i),a&&(s.permissions.uuid="".concat(a)),s}var Ge=Object.freeze({__proto__:null,getOperation:function(){return I.PNAccessManagerGrantToken},extractPermissions:De,validateParams:function(e,t){var n,r,o,i,a,s,u=e.config;if(!u.subscribeKey)return"Missing Subscribe Key";if(!u.publishKey)return"Missing Publish Key";if(!u.secretKey)return"Missing Secret Key";if(!t.resources&&!t.patterns)return"Missing either Resources or Patterns.";var c=void 0!==(null==t?void 0:t.authorized_uuid),l=void 0!==(null===(n=null==t?void 0:t.resources)||void 0===n?void 0:n.uuids),p=void 0!==(null===(r=null==t?void 0:t.resources)||void 0===r?void 0:r.channels),f=void 0!==(null===(o=null==t?void 0:t.resources)||void 0===o?void 0:o.groups),h=void 0!==(null===(i=null==t?void 0:t.patterns)||void 0===i?void 0:i.uuids),d=void 0!==(null===(a=null==t?void 0:t.patterns)||void 0===a?void 0:a.channels),y=void 0!==(null===(s=null==t?void 0:t.patterns)||void 0===s?void 0:s.groups),g=c||l||h||p||d||f||y;return xe(t)&&g?"Cannot mix `users`, `spaces` and `authorizedUserId` with `uuids`, `channels`, `groups` and `authorized_uuid`":(!t.resources||t.resources.uuids&&0!==Object.keys(t.resources.uuids).length||t.resources.channels&&0!==Object.keys(t.resources.channels).length||t.resources.groups&&0!==Object.keys(t.resources.groups).length||t.resources.users&&0!==Object.keys(t.resources.users).length||t.resources.spaces&&0!==Object.keys(t.resources.spaces).length)&&(!t.patterns||t.patterns.uuids&&0!==Object.keys(t.patterns.uuids).length||t.patterns.channels&&0!==Object.keys(t.patterns.channels).length||t.patterns.groups&&0!==Object.keys(t.patterns.groups).length||t.patterns.users&&0!==Object.keys(t.patterns.users).length||t.patterns.spaces&&0!==Object.keys(t.patterns.spaces).length)?void 0:"Missing values for either Resources or Patterns."},postURL:function(e){var t=e.config;return"/v3/pam/".concat(t.subscribeKey,"/grant")},usePost:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(){return{}},postPayload:function(e,t){return Fe(0,t)},handleResponse:function(e,t){return t.data.token}}),Le={getOperation:function(){return I.PNAccessManagerRevokeToken},validateParams:function(e,t){return e.config.secretKey?t?void 0:"token can't be empty":"Missing Secret Key"},getURL:function(e,t){var n=e.config;return"/v3/pam/".concat(n.subscribeKey,"/grant/").concat(M.encodeString(t))},useDelete:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(e){return{uuid:e.config.getUUID()}},handleResponse:function(e,t){return{status:t.status,data:t.data}}};function Ke(e,t){var n=JSON.stringify(t);if(e.cryptoModule){var r=e.cryptoModule.encrypt(n);n="string"==typeof r?r:v(r),n=JSON.stringify(n)}return n||""}var Be=Object.freeze({__proto__:null,getOperation:function(){return I.PNPublishOperation},validateParams:function(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"},usePost:function(e,t){var n=t.sendByPost;return void 0!==n&&n},getURL:function(e,t){var n=e.config,r=t.channel,o=Ke(e,t.message);return"/publish/".concat(n.publishKey,"/").concat(n.subscribeKey,"/0/").concat(M.encodeString(r),"/0/").concat(M.encodeString(o))},postURL:function(e,t){var n=e.config,r=t.channel;return"/publish/".concat(n.publishKey,"/").concat(n.subscribeKey,"/0/").concat(M.encodeString(r),"/0")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},postPayload:function(e,t){return Ke(e,t.message)},prepareParams:function(e,t){var n=t.meta,r=t.replicate,o=void 0===r||r,i=t.storeInHistory,a=t.ttl,s={};return null!=i&&(s.store=i?"1":"0"),a&&(s.ttl=a),!1===o&&(s.norep="true"),n&&"object"==typeof n&&(s.meta=JSON.stringify(n)),s},handleResponse:function(e,t){return{timetoken:t[2]}}});var He=Object.freeze({__proto__:null,getOperation:function(){return I.PNSignalOperation},validateParams:function(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"},getURL:function(e,t){var n,r=e.config,o=t.channel,i=t.message,a=(n=i,JSON.stringify(n));return"/signal/".concat(r.publishKey,"/").concat(r.subscribeKey,"/0/").concat(M.encodeString(o),"/0/").concat(M.encodeString(a))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{timetoken:t[2]}}});function qe(e,t){if(!e.cryptoModule)return t;try{var n=e.cryptoModule.decrypt(t);return n instanceof ArrayBuffer?JSON.parse((new TextDecoder).decode(n)):n}catch(e){return console&&console.log&&console.log("decryption error",e.message),t}}var ze=Object.freeze({__proto__:null,getOperation:function(){return I.PNHistoryOperation},validateParams:function(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"},getURL:function(e,t){var n=t.channel,r=e.config;return"/v2/history/sub-key/".concat(r.subscribeKey,"/channel/").concat(M.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.start,r=t.end,o=t.reverse,i=t.count,a=void 0===i?100:i,s=t.stringifiedTimeToken,u=void 0!==s&&s,c=t.includeMeta,l=void 0!==c&&c,p={include_token:"true"};return p.count=a,n&&(p.start=n),r&&(p.end=r),u&&(p.string_message_token="true"),null!=o&&(p.reverse=o.toString()),l&&(p.include_meta="true"),p},handleResponse:function(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return Array.isArray(t[0])&&t[0].forEach((function(t){var r={timetoken:t.timetoken,entry:qe(e,t.message)};t.meta&&(r.meta=t.meta),n.messages.push(r)})),n}});var Ve=Object.freeze({__proto__:null,getOperation:function(){return I.PNDeleteMessagesOperation},validateParams:function(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"},useDelete:function(){return!0},getURL:function(e,t){var n=t.channel,r=e.config;return"/v3/history/sub-key/".concat(r.subscribeKey,"/channel/").concat(M.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.start,r=t.end,o={};return n&&(o.start=n),r&&(o.end=r),o},handleResponse:function(e,t){return t.payload}});var We=Object.freeze({__proto__:null,getOperation:function(){return I.PNMessageCounts},validateParams:function(e,t){var n=t.channels,r=t.timetoken,o=t.channelTimetokens,i=e.config;return n?r&&o?"timetoken and channelTimetokens are incompatible together":o&&o.length>1&&n.length!==o.length?"Length of channelTimetokens and channels do not match":i.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"},getURL:function(e,t){var n=t.channels,r=e.config,o=n.join(",");return"/v3/history/sub-key/".concat(r.subscribeKey,"/message-counts/").concat(M.encodeString(o))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.timetoken,r=t.channelTimetokens,o={};if(r&&1===r.length){var i=s(r,1)[0];o.timetoken=i}else r?o.channelsTimetoken=r.join(","):n&&(o.timetoken=n);return o},handleResponse:function(e,t){return{channels:t.channels}}});var Je=Object.freeze({__proto__:null,getOperation:function(){return I.PNFetchMessagesOperation},validateParams:function(e,t){var n=t.channels,r=t.includeMessageActions,o=void 0!==r&&r,i=e.config;if(!n||0===n.length)return"Missing channels";if(!i.subscribeKey)return"Missing Subscribe Key";if(o&&n.length>1)throw new TypeError("History can return actions data for a single channel only. Either pass a single channel or disable the includeMessageActions flag.")},getURL:function(e,t){var n=t.channels,r=void 0===n?[]:n,o=t.includeMessageActions,i=void 0!==o&&o,a=e.config,s=i?"history-with-actions":"history",u=r.length>0?r.join(","):",";return"/v3/".concat(s,"/sub-key/").concat(a.subscribeKey,"/channel/").concat(M.encodeString(u))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channels,r=t.start,o=t.end,i=t.includeMessageActions,a=t.count,s=t.stringifiedTimeToken,u=void 0!==s&&s,c=t.includeMeta,l=void 0!==c&&c,p=t.includeUuid,f=t.includeUUID,h=void 0===f||f,d=t.includeMessageType,y=void 0===d||d,g={};return g.max=a||(n.length>1||!0===i?25:100),r&&(g.start=r),o&&(g.end=o),u&&(g.string_message_token="true"),l&&(g.include_meta="true"),h&&!1!==p&&(g.include_uuid="true"),y&&(g.include_message_type="true"),g},handleResponse:function(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach((function(r){n.channels[r]=[],(t.channels[r]||[]).forEach((function(t){var o={};o.channel=r,o.timetoken=t.timetoken,o.message=function(e,t){if(!e.cryptoModule)return t;try{var n=e.cryptoModule.decrypt(t);return n instanceof ArrayBuffer?JSON.parse((new TextDecoder).decode(n)):n}catch(e){return console&&console.log&&console.log("decryption error",e.message),t}}(e,t.message),o.messageType=t.message_type,o.uuid=t.uuid,t.actions&&(o.actions=t.actions,o.data=t.actions),t.meta&&(o.meta=t.meta),n.channels[r].push(o)}))})),t.more&&(n.more=t.more),n}});var $e=Object.freeze({__proto__:null,getOperation:function(){return I.PNTimeOperation},getURL:function(){return"/time/0"},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},prepareParams:function(){return{}},isAuthSupported:function(){return!1},handleResponse:function(e,t){return{timetoken:t[0]}},validateParams:function(){}});var Qe=Object.freeze({__proto__:null,getOperation:function(){return I.PNSubscribeOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/subscribe/".concat(n.subscribeKey,"/").concat(M.encodeString(i),"/0")},getRequestTimeout:function(e){return e.config.getSubscribeTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=e.config,r=t.state,o=t.channelGroups,i=void 0===o?[]:o,a=t.timetoken,s=t.filterExpression,u=t.region,c={heartbeat:n.getPresenceTimeout()};return i.length>0&&(c["channel-group"]=i.join(",")),s&&s.length>0&&(c["filter-expr"]=s),Object.keys(r).length&&(c.state=JSON.stringify(r)),a&&(c.tt=a),u&&(c.tr=u),c},handleResponse:function(e,t){var n=[];t.m.forEach((function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,messageType:e.e,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)}));var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}}),Xe={getOperation:function(){return I.PNHandshakeOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channels)&&!(null==t?void 0:t.channelGroups))return"channels and channleGroups both should not be empty"},getURL:function(e,t){var n=e.config,r=t.channels?t.channels.join(","):",";return"/v2/subscribe/".concat(n.subscribeKey,"/").concat(M.encodeString(r),"/0")},getRequestTimeout:function(e){return e.config.getSubscribeTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n={};return t.channelGroups&&t.channelGroups.length>0&&(n["channel-group"]=t.channelGroups.join(",")),n.tt=0,n},handleResponse:function(e,t){return{region:t.t.r,timetoken:t.t.t}}},Ye={getOperation:function(){return I.PNReceiveMessagesOperation},validateParams:function(e,t){return(null==t?void 0:t.channels)||(null==t?void 0:t.channelGroups)?(null==t?void 0:t.timetoken)?(null==t?void 0:t.region)?void 0:"region can not be empty":"timetoken can not be empty":"channels and channleGroups both should not be empty"},getURL:function(e,t){var n=e.config,r=t.channels?t.channels.join(","):",";return"/v2/subscribe/".concat(n.subscribeKey,"/").concat(M.encodeString(r),"/0")},getRequestTimeout:function(e){return e.config.getSubscribeTimeout()},isAuthSupported:function(){return!0},getAbortSignal:function(e,t){return t.abortSignal},prepareParams:function(e,t){var n={};return t.channelGroups&&t.channelGroups.length>0&&(n["channel-group"]=t.channelGroups.join(",")),n.tt=t.timetoken,n.tr=t.region,n},handleResponse:function(e,t){var n=[];return t.m.forEach((function(e){var t={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,messageType:e.e,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,publishMetaData:{timetoken:e.p.t,region:e.p.r}};n.push(t)})),{messages:n,metadata:{region:t.t.r,timetoken:t.t.t}}}},Ze=function(){function e(e){void 0===e&&(e=!1),this.sync=e,this.listeners=new Set}return e.prototype.subscribe=function(e){var t=this;return this.listeners.add(e),function(){t.listeners.delete(e)}},e.prototype.notify=function(e){var t=this,n=function(){t.listeners.forEach((function(t){t(e)}))};this.sync?n():setTimeout(n,0)},e}(),et=function(){function e(e){this.label=e,this.transitionMap=new Map,this.enterEffects=[],this.exitEffects=[]}return e.prototype.transition=function(e,t){var n;if(this.transitionMap.has(t.type))return null===(n=this.transitionMap.get(t.type))||void 0===n?void 0:n(e,t)},e.prototype.on=function(e,t){return this.transitionMap.set(e,t),this},e.prototype.with=function(e,t){return[this,e,null!=t?t:[]]},e.prototype.onEnter=function(e){return this.enterEffects.push(e),this},e.prototype.onExit=function(e){return this.exitEffects.push(e),this},e}(),tt=function(e){function n(){return null!==e&&e.apply(this,arguments)||this}return t(n,e),n.prototype.describe=function(e){return new et(e)},n.prototype.start=function(e,t){this.currentState=e,this.currentContext=t,this.notify({type:"engineStarted",state:e,context:t})},n.prototype.transition=function(e){var t,n,r,o,i,u;if(!this.currentState)throw new Error("Start the engine first");this.notify({type:"eventReceived",event:e});var c=this.currentState.transition(this.currentContext,e);if(c){var l=s(c,3),p=l[0],f=l[1],h=l[2];try{for(var d=a(this.currentState.exitEffects),y=d.next();!y.done;y=d.next()){var g=y.value;this.notify({type:"invocationDispatched",invocation:g(this.currentContext)})}}catch(e){t={error:e}}finally{try{y&&!y.done&&(n=d.return)&&n.call(d)}finally{if(t)throw t.error}}var b=this.currentState;this.currentState=p;var v=this.currentContext;this.currentContext=f,this.notify({type:"transitionDone",fromState:b,fromContext:v,toState:p,toContext:f,event:e});try{for(var m=a(h),_=m.next();!_.done;_=m.next()){g=_.value;this.notify({type:"invocationDispatched",invocation:g})}}catch(e){r={error:e}}finally{try{_&&!_.done&&(o=m.return)&&o.call(m)}finally{if(r)throw r.error}}try{for(var O=a(this.currentState.enterEffects),S=O.next();!S.done;S=O.next()){g=S.value;this.notify({type:"invocationDispatched",invocation:g(this.currentContext)})}}catch(e){i={error:e}}finally{try{S&&!S.done&&(u=O.return)&&u.call(O)}finally{if(i)throw i.error}}}},n}(Ze),nt=function(){function e(e){this.dependencies=e,this.instances=new Map,this.handlers=new Map}return e.prototype.on=function(e,t){this.handlers.set(e,t)},e.prototype.dispatch=function(e){if("CANCEL"!==e.type){var t=this.handlers.get(e.type);if(!t)throw new Error("Unhandled invocation '".concat(e.type,"'"));var n=t(e.payload,this.dependencies);e.managed&&this.instances.set(e.type,n),n.start()}else if(this.instances.has(e.payload)){var r=this.instances.get(e.payload);null==r||r.cancel(),this.instances.delete(e.payload)}},e}();function rt(e,t){var n=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return{type:e,payload:null==t?void 0:t.apply(void 0,u([],s(n),!1))}};return n.type=e,n}function ot(e,t){var n=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return{type:e,payload:t.apply(void 0,u([],s(n),!1)),managed:!0}};return n.type=e,n.cancel={type:"CANCEL",payload:e,managed:!1},n}var it,at,st,ut=function(e){function n(){var t=this.constructor,n=e.call(this,"The operation was aborted.")||this;return n.name="AbortError",Object.setPrototypeOf(n,t.prototype),n}return t(n,e),n}(Error),ct=function(e){function n(){var t=null!==e&&e.apply(this,arguments)||this;return t._aborted=!1,t}return t(n,e),Object.defineProperty(n.prototype,"aborted",{get:function(){return this._aborted},enumerable:!1,configurable:!0}),n.prototype.throwIfAborted=function(){if(this._aborted)throw new ut},n.prototype.abort=function(){this._aborted=!0,this.notify(new ut)},n}(Ze),lt=function(e){function n(t,n,r){var o=e.call(this,t,n)||this;return o.asyncFunction=r,o.abortSignal=new ct,o}return t(n,e),n.prototype.start=function(){this.asyncFunction(this.payload,this.abortSignal,this.dependencies)},n.prototype.cancel=function(){this.abortSignal.abort()},n}((function(e,t){this.payload=e,this.dependencies=t})),pt=function(e){return function(t,n){return new lt(t,n,e)}},ft=ot("HANDSHAKE",(function(e,t){return{channels:e,groups:t}})),ht=ot("RECEIVE_EVENTS",(function(e,t,n){return{channels:e,groups:t,cursor:n}})),dt=(at=function(e){return e},st=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return{type:it,payload:at.apply(void 0,u([],s(e),!1)),managed:!1}},st.type=it="EMIT_EVENTS",st),yt=ot("RECONNECT",(function(e){return e})),gt=ot("HANDSHAKE_RECONNECT",(function(e){return e})),bt=rt("SUBSCRIPTION_CHANGE",(function(e,t){return{channels:e,groups:t}})),vt=rt("DISCONNECT",(function(){return{}})),mt=rt("RECONNECT",(function(){return{}}));rt("RESTORE",(function(e,t,n,r){return{channels:e,groups:t,timetoken:n,region:r}}));var _t=rt("HANDSHAKING_SUCCESS",(function(e){return e})),Ot=rt("HANDSHAKING_FAILURE",(function(e){return e})),St=rt("HANDSHAKING_RECONNECTING_SUCCESS",(function(e){return{cursor:e}})),Pt=rt("HANDSHAKING_RECONNECTING_FAILURE",(function(e){return e})),wt=rt("HANDSHAKING_RECONNECTING_GIVEUP",(function(){return{}})),Et=rt("HANDSHAKING_RECONNECTING_RETRY",(function(){return{}})),Tt=rt("RECEIVING_SUCCESS",(function(e,t){return{cursor:e,events:t}})),At=rt("RECEIVING_FAILURE",(function(e){return e})),Nt=rt("RECONNECTING_SUCCESS",(function(e,t){return{cursor:e,events:t}})),kt=rt("RECONNECTING_FAILURE",(function(e){return e})),Ct=rt("RECONNECTING_GIVEUP",(function(){return{}})),jt=rt("RECONNECTING_RETRY",(function(){return{}})),Mt=function(e){function n(t,n){var r=e.call(this,n)||this;return r.on(ft.type,pt((function(e,n,a){var s=a.handshake;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:n.throwIfAborted(),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups})];case 2:return r=i.sent(),t.transition(_t(r)),[3,4];case 3:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof q?[2,t.transition(Ot(o))]:[3,4];case 4:return[2]}}))}))}))),r.on(ht.type,pt((function(e,n,a){var s=a.receiveEvents;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:n.throwIfAborted(),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups,timetoken:e.cursor.timetoken,region:e.cursor.region})];case 2:return r=i.sent(),t.transition(Tt(r.metadata,r.messages)),[3,4];case 3:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof q?[2,t.transition(At(o))]:[3,4];case 4:return[2]}}))}))}))),r.on(dt.type,pt((function(e,t,n){return n.receiveEvents,o(r,void 0,void 0,(function(){return i(this,(function(t){return e.length>0&&console.log(e),[2]}))}))}))),r.on(yt.type,pt((function(e,n,a){var s=a.receiveEvents,u=a.shouldRetry,c=a.getRetryDelay,l=a.delay;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:return u(e.reason,e.attempts)?(n.throwIfAborted(),[4,l(c(e.attempts))]):[2,t.transition(Ct())];case 1:i.sent(),n.throwIfAborted(),i.label=2;case 2:return i.trys.push([2,4,,5]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups,timetoken:e.cursor.timetoken,region:e.cursor.region})];case 3:return r=i.sent(),[2,t.transition(Nt(r.metadata,r.messages))];case 4:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof q?[2,t.transition(kt(o))]:[3,5];case 5:return[2]}}))}))}))),r.on(gt.type,pt((function(e,n,a){var s=a.handshake,u=a.shouldRetry,c=a.getRetryDelay,l=a.delay;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:return u(e.reason,e.attempts)?(n.throwIfAborted(),[4,l(c(e.attempts))]):[2,t.transition(wt())];case 1:i.sent(),n.throwIfAborted(),i.label=2;case 2:return i.trys.push([2,4,,5]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups})];case 3:return r=i.sent(),[2,t.transition(St(r.metadata))];case 4:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof q?[2,t.transition(Pt(o))]:[3,5];case 5:return[2]}}))}))}))),r}return t(n,e),n}(nt),Rt=new et("STOPPED");Rt.on(bt.type,(function(e,t){return Rt.with({channels:t.payload.channels,groups:t.payload.groups})})),Rt.on(mt.type,(function(e){return Lt.with(n({},e))}));var Ut=new et("HANDSHAKE_FAILURE");Ut.on(Et.type,(function(e){return Gt.with(n(n({},e),{attempts:0}))})),Ut.on(vt.type,(function(e){return Rt.with({channels:e.channels,groups:e.groups})}));var It=new et("STOPPED");It.on(bt.type,(function(e,t){return It.with({channels:t.payload.channels,groups:t.payload.groups,cursor:e.cursor})})),It.on(mt.type,(function(e){return Ft.with(n({},e))}));var xt=new et("RECEIVE_FAILURE");xt.on(jt.type,(function(e){return Dt.with(n(n({},e),{attempts:0}))})),xt.on(vt.type,(function(e){return It.with({channels:e.channels,groups:e.groups,cursor:e.cursor})}));var Dt=new et("RECEIVE_RECONNECTING");Dt.onEnter((function(e){return yt(e)})),Dt.onExit((function(){return yt.cancel})),Dt.on(Nt.type,(function(e,t){return Ft.with({channels:e.channels,groups:e.groups,cursor:t.payload.cursor},[dt(t.payload.events)])})),Dt.on(kt.type,(function(e,t){return Dt.with(n(n({},e),{attempts:e.attempts+1,reason:t.payload}))})),Dt.on(Ct.type,(function(e){return xt.with({groups:e.groups,channels:e.channels,cursor:e.cursor,reason:e.reason})})),Dt.on(vt.type,(function(e){return It.with({channels:e.channels,groups:e.groups,cursor:e.cursor})}));var Ft=new et("RECEIVING");Ft.onEnter((function(e){return ht(e.channels,e.groups,e.cursor)})),Ft.onExit((function(){return ht.cancel})),Ft.on(Tt.type,(function(e,t){return Ft.with(n(n({},e),{cursor:t.payload.cursor}),[dt(t.payload.events)])})),Ft.on(bt.type,(function(e,t){return 0===t.payload.channels.length&&0===t.payload.groups.length?Kt.with(void 0):Ft.with(n(n({},e),{channels:t.payload.channels,groups:t.payload.groups}))})),Ft.on(At.type,(function(e,t){return Dt.with(n(n({},e),{attempts:0,reason:t.payload}))})),Ft.on(vt.type,(function(e){return It.with({channels:e.channels,groups:e.groups,cursor:e.cursor})}));var Gt=new et("HANDSHAKE_RECONNECTING");Gt.onEnter((function(e){return gt(e)})),Gt.onExit((function(){return yt.cancel})),Gt.on(Nt.type,(function(e,t){return Ft.with({channels:e.channels,groups:e.groups,cursor:t.payload.cursor},[dt(t.payload.events)])})),Gt.on(kt.type,(function(e,t){return Gt.with(n(n({},e),{attempts:e.attempts+1,reason:t.payload}))})),Gt.on(Ct.type,(function(e){return Ut.with({groups:e.groups,channels:e.channels,reason:e.reason})})),Gt.on(vt.type,(function(e){return Rt.with({channels:e.channels,groups:e.groups})}));var Lt=new et("HANDSHAKING");Lt.onEnter((function(e){return ft(e.channels,e.groups)})),Lt.onExit((function(){return ft.cancel})),Lt.on(bt.type,(function(e,t){return 0===t.payload.channels.length&&0===t.payload.groups.length?Kt.with(void 0):Lt.with({channels:t.payload.channels,groups:t.payload.groups})})),Lt.on(_t.type,(function(e,t){return Ft.with({channels:e.channels,groups:e.groups,cursor:t.payload})})),Lt.on(Ot.type,(function(e,t){return Gt.with(n(n({},e),{attempts:0,reason:t.payload}))})),Lt.on(vt.type,(function(e){return Rt.with({channels:e.channels,groups:e.groups})}));var Kt=new et("UNSUBSCRIBED");Kt.on(bt.type,(function(e,t){return Lt.with({channels:t.payload.channels,groups:t.payload.groups})}));var Bt=function(){function e(e){var t=this;this.engine=new tt,this.channels=[],this.groups=[],this.dispatcher=new Mt(this.engine,e),this.engine.subscribe((function(e){"invocationDispatched"===e.type&&t.dispatcher.dispatch(e.invocation)})),this.engine.start(Kt,void 0)}return Object.defineProperty(e.prototype,"_engine",{get:function(){return this.engine},enumerable:!1,configurable:!0}),e.prototype.subscribe=function(e){var t=e.channels,n=e.groups;this.channels=u(u([],s(this.channels),!1),s(null!=t?t:[]),!1),this.groups=u(u([],s(this.groups),!1),s(null!=n?n:[]),!1),this.engine.transition(bt(this.channels,this.groups))},e.prototype.unsubscribe=function(e){var t=e.channels,n=e.groups;this.channels=this.channels.filter((function(e){var n;return null===(n=!(null==t?void 0:t.includes(e)))||void 0===n||n})),this.groups=this.groups.filter((function(e){var t;return null===(t=!(null==n?void 0:n.includes(e)))||void 0===t||t})),this.engine.transition(bt(this.channels.slice(0),this.groups.slice(0)))},e.prototype.unsubscribeAll=function(){this.channels=[],this.groups=[],this.engine.transition(bt(this.channels.slice(0),this.groups.slice(0)))},e.prototype.reconnect=function(){this.engine.transition(mt())},e.prototype.disconnect=function(){this.engine.transition(vt())},e}(),Ht=function(){function e(e){var t=this,r=e.networking,o=e.cbor,i=new g({setup:e});this._config=i;var a=new A({config:i}),c=e.cryptography;r.init(i);var l=new H(i,o);this._tokenManager=l;var p=new x({maximumSamplesCount:6e4});this._telemetryManager=p;var f=this._config.cryptoModule,h={config:i,networking:r,crypto:a,cryptography:c,tokenManager:l,telemetryManager:p,PubNubFile:e.PubNubFile,cryptoModule:f};this.File=e.PubNubFile,this.encryptFile=function(e,t){return 1==arguments.length&&"string"!=typeof e&&h.cryptoModule?(t=e,h.cryptoModule.encryptFile(t,this.File)):c.encryptFile(e,t,this.File)},this.decryptFile=function(e,t){return 1==arguments.length&&"string"!=typeof e&&h.cryptoModule?(t=e,h.cryptoModule.decryptFile(t,this.File)):c.decryptFile(e,t,this.File)};var d=Q.bind(this,h,$e),y=Q.bind(this,h,ae),b=Q.bind(this,h,ue),m=Q.bind(this,h,le),_=Q.bind(this,h,Qe),O=new B;if(this._listenerManager=O,this.iAmHere=Q.bind(this,h,ue),this.iAmAway=Q.bind(this,h,ae),this.setPresenceState=Q.bind(this,h,le),this.handshake=Q.bind(this,h,Xe),this.receiveMessages=Q.bind(this,h,Ye),!0===i.enableSubscribeBeta){var S=new Bt({handshake:this.handshake,receiveEvents:this.receiveMessages});this.subscribe=S.subscribe.bind(S),this.unsubscribe=S.unsubscribe.bind(S),this.eventEngine=S}else{var P=new U({timeEndpoint:d,leaveEndpoint:y,heartbeatEndpoint:b,setStateEndpoint:m,subscribeEndpoint:_,crypto:h.crypto,config:h.config,listenerManager:O,getFileUrl:function(e){return me(h,e)},cryptoModule:h.cryptoModule});this.subscribe=P.adaptSubscribeChange.bind(P),this.unsubscribe=P.adaptUnsubscribeChange.bind(P),this.disconnect=P.disconnect.bind(P),this.reconnect=P.reconnect.bind(P),this.unsubscribeAll=P.unsubscribeAll.bind(P),this.getSubscribedChannels=P.getSubscribedChannels.bind(P),this.getSubscribedChannelGroups=P.getSubscribedChannelGroups.bind(P),this.setState=P.adaptStateChange.bind(P),this.presence=P.adaptPresenceChange.bind(P),this.destroy=function(e){P.unsubscribeAll(e),P.disconnect()}}this.addListener=O.addListener.bind(O),this.removeListener=O.removeListener.bind(O),this.removeAllListeners=O.removeAllListeners.bind(O),this.parseToken=l.parseToken.bind(l),this.setToken=l.setToken.bind(l),this.getToken=l.getToken.bind(l),this.channelGroups={listGroups:Q.bind(this,h,ee),listChannels:Q.bind(this,h,te),addChannels:Q.bind(this,h,X),removeChannels:Q.bind(this,h,Y),deleteGroup:Q.bind(this,h,Z)},this.push={addChannels:Q.bind(this,h,ne),removeChannels:Q.bind(this,h,re),deleteDevice:Q.bind(this,h,ie),listChannels:Q.bind(this,h,oe)},this.hereNow=Q.bind(this,h,pe),this.whereNow=Q.bind(this,h,se),this.getState=Q.bind(this,h,ce),this.grant=Q.bind(this,h,Ie),this.grantToken=Q.bind(this,h,Ge),this.audit=Q.bind(this,h,Ue),this.revokeToken=Q.bind(this,h,Le),this.publish=Q.bind(this,h,Be),this.fire=function(e,n){return e.replicate=!1,e.storeInHistory=!1,t.publish(e,n)},this.signal=Q.bind(this,h,He),this.history=Q.bind(this,h,ze),this.deleteMessages=Q.bind(this,h,Ve),this.messageCounts=Q.bind(this,h,We),this.fetchMessages=Q.bind(this,h,Je),this.addMessageAction=Q.bind(this,h,fe),this.removeMessageAction=Q.bind(this,h,he),this.getMessageActions=Q.bind(this,h,de),this.listFiles=Q.bind(this,h,ye);var w=Q.bind(this,h,ge);this.publishFile=Q.bind(this,h,be),this.sendFile=ve({generateUploadUrl:w,publishFile:this.publishFile,modules:h}),this.getFileUrl=function(e){return me(h,e)},this.downloadFile=Q.bind(this,h,_e),this.deleteFile=Q.bind(this,h,Oe),this.objects={getAllUUIDMetadata:Q.bind(this,h,Se),getUUIDMetadata:Q.bind(this,h,Pe),setUUIDMetadata:Q.bind(this,h,we),removeUUIDMetadata:Q.bind(this,h,Ee),getAllChannelMetadata:Q.bind(this,h,Te),getChannelMetadata:Q.bind(this,h,Ae),setChannelMetadata:Q.bind(this,h,Ne),removeChannelMetadata:Q.bind(this,h,ke),getChannelMembers:Q.bind(this,h,Ce),setChannelMembers:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return Q.call.apply(Q,u([t,h,je,n({type:"set"},e)],s(r),!1))},removeChannelMembers:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return Q.call.apply(Q,u([t,h,je,n({type:"delete"},e)],s(r),!1))},getMemberships:Q.bind(this,h,Me),setMemberships:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return Q.call.apply(Q,u([t,h,Re,n({type:"set"},e)],s(r),!1))},removeMemberships:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return Q.call.apply(Q,u([t,h,Re,n({type:"delete"},e)],s(r),!1))}},this.createUser=function(e){return t.objects.setUUIDMetadata({uuid:e.userId,data:e.data,include:e.include})},this.updateUser=this.createUser,this.removeUser=function(e){return t.objects.removeUUIDMetadata({uuid:null==e?void 0:e.userId})},this.fetchUser=function(e){return t.objects.getUUIDMetadata({uuid:null==e?void 0:e.userId,include:null==e?void 0:e.include})},this.fetchUsers=this.objects.getAllUUIDMetadata,this.createSpace=function(e){return t.objects.setChannelMetadata({channel:e.spaceId,data:e.data,include:e.include})},this.updateSpace=this.createSpace,this.removeSpace=function(e){return t.objects.removeChannelMetadata({channel:e.spaceId})},this.fetchSpace=function(e){return t.objects.getChannelMetadata({channel:e.spaceId,include:e.include})},this.fetchSpaces=this.objects.getAllChannelMetadata,this.addMemberships=function(e){var n,r;return"string"==typeof e.spaceId?t.objects.setChannelMembers({channel:e.spaceId,uuids:null===(n=e.users)||void 0===n?void 0:n.map((function(e){return"string"==typeof e?e:{id:e.userId,custom:e.custom,status:e.status}})),limit:0}):t.objects.setMemberships({uuid:e.userId,channels:null===(r=e.spaces)||void 0===r?void 0:r.map((function(e){return"string"==typeof e?e:{id:e.spaceId,custom:e.custom,status:e.status}})),limit:0})},this.updateMemberships=this.addMemberships,this.removeMemberships=function(e){return"string"==typeof e.spaceId?t.objects.removeChannelMembers({channel:e.spaceId,uuids:e.userIds,limit:0}):t.objects.removeMemberships({uuid:e.userId,channels:e.spaceIds,limit:0})},this.fetchMemberships=function(e){return"string"==typeof e.spaceId?t.objects.getChannelMembers({channel:e.spaceId,filter:e.filter,limit:e.limit,page:e.page,include:{customFields:e.include.customFields,UUIDFields:e.include.userFields,customUUIDFields:e.include.customUserFields,totalCount:e.include.totalCount},sort:null!=e.sort?Object.fromEntries(Object.entries(e.sort).map((function(e){var t=s(e,2),n=t[0],r=t[1];return[n.replace("user","uuid"),r]}))):null}).then((function(e){var t;return e.data=null===(t=e.data)||void 0===t?void 0:t.map((function(e){return{user:e.uuid,custom:e.custom,updated:e.updated,eTag:e.eTag}})),e})):t.objects.getMemberships({uuid:e.userId,filter:e.filter,limit:e.limit,page:e.page,include:{customFields:e.include.customFields,channelFields:e.include.spaceFields,customChannelFields:e.include.customSpaceFields,totalCount:e.include.totalCount},sort:null!=e.sort?Object.fromEntries(Object.entries(e.sort).map((function(e){var t=s(e,2),n=t[0],r=t[1];return[n.replace("space","channel"),r]}))):null}).then((function(e){var t;return e.data=null===(t=e.data)||void 0===t?void 0:t.map((function(e){return{space:e.channel,custom:e.custom,updated:e.updated,eTag:e.eTag}})),e}))},this.time=d,this.stop=this.destroy,this.encrypt=function(e,t){if(void 0===t&&h.cryptoModule){var n=h.cryptoModule.encrypt(e);return"string"==typeof n?n:v(n)}return a.encrypt(e,t)},this.decrypt=function(e,t){if(void 0===t&&f){var n=h.cryptoModule.decrypt(e);return n instanceof ArrayBuffer?v(n):n}return a.decrypt(e,t)},this.getAuthKey=h.config.getAuthKey.bind(h.config),this.setAuthKey=h.config.setAuthKey.bind(h.config),this.getUUID=h.config.getUUID.bind(h.config),this.setUUID=h.config.setUUID.bind(h.config),this.getUserId=h.config.getUserId.bind(h.config),this.setUserId=h.config.setUserId.bind(h.config),this.getFilterExpression=h.config.getFilterExpression.bind(h.config),this.setFilterExpression=h.config.setFilterExpression.bind(h.config),this.setCipherKey=function(t){return h.config.setCipherKey(t,e,h)},this.setHeartbeatInterval=h.config.setHeartbeatInterval.bind(h.config),r.hasModule("proxy")&&(this.setProxy=function(e){h.config.setProxy(e),t.reconnect()})}return e.prototype.getVersion=function(){return this._config.getVersion()},e.prototype._addPnsdkSuffix=function(e,t){this._config._addPnsdkSuffix(e,t)},e.prototype.networkDownDetected=function(){this._listenerManager.announceNetworkDown(),this._config.restore?this.disconnect():this.destroy(!0)},e.prototype.networkUpDetected=function(){this._listenerManager.announceNetworkUp(),this.reconnect()},e.notificationPayload=function(e,t){return new K(e,t)},e.generateUUID=function(){return y()},e.OPERATIONS=I,e.CATEGORIES=R,e}(),qt=function(){function e(e){var t=this;this._modules={},Object.keys(e).forEach((function(n){t._modules[n]=e[n].bind(t)}))}return e.prototype.init=function(e){this._config=e,Array.isArray(this._config.origin)?this._currentSubDomain=Math.floor(Math.random()*this._config.origin.length):this._currentSubDomain=0,this._coreParams={},this.shiftStandardOrigin()},e.prototype.nextOrigin=function(){var e=this._config.secure?"https://":"http://";if("string"==typeof this._config.origin)return"".concat(e).concat(this._config.origin);this._currentSubDomain+=1,this._currentSubDomain>=this._config.origin.length&&(this._currentSubDomain=0);var t=this._config.origin[this._currentSubDomain];return"".concat(e).concat(t)},e.prototype.hasModule=function(e){return e in this._modules},e.prototype.shiftStandardOrigin=function(){return this._standardOrigin=this.nextOrigin(),this._standardOrigin},e.prototype.getStandardOrigin=function(){return this._standardOrigin},e.prototype.POSTFILE=function(e,t,n){return this._modules.postfile(e,t,n)},e.prototype.GETFILE=function(e,t,n){return this._modules.getfile(e,t,n)},e.prototype.POST=function(e,t,n,r){return this._modules.post(e,t,n,r)},e.prototype.PATCH=function(e,t,n,r){return this._modules.patch(e,t,n,r)},e.prototype.GET=function(e,t,n){return this._modules.get(e,t,n)},e.prototype.DELETE=function(e,t,n){return this._modules.del(e,t,n)},e.prototype._detectErrorCategory=function(e){if("ENOTFOUND"===e.code)return R.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return R.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return R.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return R.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return R.PNNetworkIssuesCategory;if(e.timeout)return R.PNTimeoutCategory;if("ETIMEDOUT"===e.code)return R.PNNetworkIssuesCategory;if(e.response){if(e.response.badRequest)return R.PNBadRequestCategory;if(e.response.forbidden)return R.PNAccessDeniedCategory}return R.PNUnknownCategory},e}();function zt(e){var t=function(e){return e&&"object"==typeof e&&e.constructor===Object};if(!t(e))return e;var n={};return Object.keys(e).forEach((function(r){var o=function(e){return"string"==typeof e||e instanceof String}(r),i=r,a=e[r];Array.isArray(r)||o&&r.indexOf(",")>=0?i=(o?r.split(","):r).reduce((function(e,t){return e+=String.fromCharCode(t)}),""):(function(e){return"number"==typeof e&&isFinite(e)}(r)||o&&!isNaN(r))&&(i=String.fromCharCode(o?parseInt(r,10):10));n[i]=t(a)?zt(a):a})),n}var Vt=function(){function e(e,t){this._base64ToBinary=t,this._decode=e}return e.prototype.decodeToken=function(e){var t="";e.length%4==3?t="=":e.length%4==2&&(t="==");var n=e.replace(/-/gi,"+").replace(/_/gi,"/")+t,r=this._decode(this._base64ToBinary(n));if("object"==typeof r)return r},e}(),Wt={exports:{}},Jt={exports:{}};!function(e){function t(e){if(e)return function(e){for(var n in t.prototype)e[n]=t.prototype[n];return e}(e)}e.exports=t,t.prototype.on=t.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},t.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},t.prototype.off=t.prototype.removeListener=t.prototype.removeAllListeners=t.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+e];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var o=0;o<r.length;o++)if((n=r[o])===t||n.fn===t){r.splice(o,1);break}return 0===r.length&&delete this._callbacks["$"+e],this},t.prototype.emit=function(e){this._callbacks=this._callbacks||{};for(var t=new Array(arguments.length-1),n=this._callbacks["$"+e],r=1;r<arguments.length;r++)t[r-1]=arguments[r];if(n){r=0;for(var o=(n=n.slice(0)).length;r<o;++r)n[r].apply(this,t)}return this},t.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks["$"+e]||[]},t.prototype.hasListeners=function(e){return!!this.listeners(e).length}}(Jt);var $t=tn;tn.default=tn,tn.stable=an,tn.stableStringify=an;var Qt="[...]",Xt="[Circular]",Yt=[],Zt=[];function en(){return{depthLimit:Number.MAX_SAFE_INTEGER,edgesLimit:Number.MAX_SAFE_INTEGER}}function tn(e,t,n,r){var o;void 0===r&&(r=en()),rn(e,"",0,[],void 0,0,r);try{o=0===Zt.length?JSON.stringify(e,t,n):JSON.stringify(e,un(t),n)}catch(e){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;0!==Yt.length;){var i=Yt.pop();4===i.length?Object.defineProperty(i[0],i[1],i[3]):i[0][i[1]]=i[2]}}return o}function nn(e,t,n,r){var o=Object.getOwnPropertyDescriptor(r,n);void 0!==o.get?o.configurable?(Object.defineProperty(r,n,{value:e}),Yt.push([r,n,t,o])):Zt.push([t,n,e]):(r[n]=e,Yt.push([r,n,t]))}function rn(e,t,n,r,o,i,a){var s;if(i+=1,"object"==typeof e&&null!==e){for(s=0;s<r.length;s++)if(r[s]===e)return void nn(Xt,e,t,o);if(void 0!==a.depthLimit&&i>a.depthLimit)return void nn(Qt,e,t,o);if(void 0!==a.edgesLimit&&n+1>a.edgesLimit)return void nn(Qt,e,t,o);if(r.push(e),Array.isArray(e))for(s=0;s<e.length;s++)rn(e[s],s,s,r,e,i,a);else{var u=Object.keys(e);for(s=0;s<u.length;s++){var c=u[s];rn(e[c],c,s,r,e,i,a)}}r.pop()}}function on(e,t){return e<t?-1:e>t?1:0}function an(e,t,n,r){void 0===r&&(r=en());var o,i=sn(e,"",0,[],void 0,0,r)||e;try{o=0===Zt.length?JSON.stringify(i,t,n):JSON.stringify(i,un(t),n)}catch(e){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;0!==Yt.length;){var a=Yt.pop();4===a.length?Object.defineProperty(a[0],a[1],a[3]):a[0][a[1]]=a[2]}}return o}function sn(e,t,n,r,o,i,a){var s;if(i+=1,"object"==typeof e&&null!==e){for(s=0;s<r.length;s++)if(r[s]===e)return void nn(Xt,e,t,o);try{if("function"==typeof e.toJSON)return}catch(e){return}if(void 0!==a.depthLimit&&i>a.depthLimit)return void nn(Qt,e,t,o);if(void 0!==a.edgesLimit&&n+1>a.edgesLimit)return void nn(Qt,e,t,o);if(r.push(e),Array.isArray(e))for(s=0;s<e.length;s++)sn(e[s],s,s,r,e,i,a);else{var u={},c=Object.keys(e).sort(on);for(s=0;s<c.length;s++){var l=c[s];sn(e[l],l,s,r,e,i,a),u[l]=e[l]}if(void 0===o)return u;Yt.push([o,t,e]),o[t]=u}r.pop()}}function un(e){return e=void 0!==e?e:function(e,t){return t},function(t,n){if(Zt.length>0)for(var r=0;r<Zt.length;r++){var o=Zt[r];if(o[1]===t&&o[0]===n){n=o[2],Zt.splice(r,1);break}}return e.call(this,t,n)}}var cn,ln="undefined"!=typeof Symbol&&Symbol,pn=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0},fn="Function.prototype.bind called on incompatible ",hn=Array.prototype.slice,dn=Object.prototype.toString,yn="[object Function]",gn=function(e){var t=this;if("function"!=typeof t||dn.call(t)!==yn)throw new TypeError(fn+t);for(var n,r=hn.call(arguments,1),o=function(){if(this instanceof n){var o=t.apply(this,r.concat(hn.call(arguments)));return Object(o)===o?o:this}return t.apply(e,r.concat(hn.call(arguments)))},i=Math.max(0,t.length-r.length),a=[],s=0;s<i;s++)a.push("$"+s);if(n=Function("binder","return function ("+a.join(",")+"){ return binder.apply(this,arguments); }")(o),t.prototype){var u=function(){};u.prototype=t.prototype,n.prototype=new u,u.prototype=null}return n},bn=Function.prototype.bind||gn,vn=bn.call(Function.call,Object.prototype.hasOwnProperty),mn=SyntaxError,_n=Function,On=TypeError,Sn=function(e){try{return _n('"use strict"; return ('+e+").constructor;")()}catch(e){}},Pn=Object.getOwnPropertyDescriptor;if(Pn)try{Pn({},"")}catch(e){Pn=null}var wn=function(){throw new On},En=Pn?function(){try{return wn}catch(e){try{return Pn(arguments,"callee").get}catch(e){return wn}}}():wn,Tn="function"==typeof ln&&"function"==typeof Symbol&&"symbol"==typeof ln("foo")&&"symbol"==typeof Symbol("bar")&&pn(),An=Object.getPrototypeOf||function(e){return e.__proto__},Nn={},kn="undefined"==typeof Uint8Array?cn:An(Uint8Array),Cn={"%AggregateError%":"undefined"==typeof AggregateError?cn:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?cn:ArrayBuffer,"%ArrayIteratorPrototype%":Tn?An([][Symbol.iterator]()):cn,"%AsyncFromSyncIteratorPrototype%":cn,"%AsyncFunction%":Nn,"%AsyncGenerator%":Nn,"%AsyncGeneratorFunction%":Nn,"%AsyncIteratorPrototype%":Nn,"%Atomics%":"undefined"==typeof Atomics?cn:Atomics,"%BigInt%":"undefined"==typeof BigInt?cn:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?cn:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?cn:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?cn:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?cn:FinalizationRegistry,"%Function%":_n,"%GeneratorFunction%":Nn,"%Int8Array%":"undefined"==typeof Int8Array?cn:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?cn:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?cn:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":Tn?An(An([][Symbol.iterator]())):cn,"%JSON%":"object"==typeof JSON?JSON:cn,"%Map%":"undefined"==typeof Map?cn:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&Tn?An((new Map)[Symbol.iterator]()):cn,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?cn:Promise,"%Proxy%":"undefined"==typeof Proxy?cn:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?cn:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?cn:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&Tn?An((new Set)[Symbol.iterator]()):cn,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?cn:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":Tn?An(""[Symbol.iterator]()):cn,"%Symbol%":Tn?Symbol:cn,"%SyntaxError%":mn,"%ThrowTypeError%":En,"%TypedArray%":kn,"%TypeError%":On,"%Uint8Array%":"undefined"==typeof Uint8Array?cn:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?cn:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?cn:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?cn:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?cn:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?cn:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?cn:WeakSet},jn=function e(t){var n;if("%AsyncFunction%"===t)n=Sn("async function () {}");else if("%GeneratorFunction%"===t)n=Sn("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=Sn("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&(n=An(o.prototype))}return Cn[t]=n,n},Mn={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},Rn=bn,Un=vn,In=Rn.call(Function.call,Array.prototype.concat),xn=Rn.call(Function.apply,Array.prototype.splice),Dn=Rn.call(Function.call,String.prototype.replace),Fn=Rn.call(Function.call,String.prototype.slice),Gn=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,Ln=/\\(\\)?/g,Kn=function(e){var t=Fn(e,0,1),n=Fn(e,-1);if("%"===t&&"%"!==n)throw new mn("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new mn("invalid intrinsic syntax, expected opening `%`");var r=[];return Dn(e,Gn,(function(e,t,n,o){r[r.length]=n?Dn(o,Ln,"$1"):t||e})),r},Bn=function(e,t){var n,r=e;if(Un(Mn,r)&&(r="%"+(n=Mn[r])[0]+"%"),Un(Cn,r)){var o=Cn[r];if(o===Nn&&(o=jn(r)),void 0===o&&!t)throw new On("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:o}}throw new mn("intrinsic "+e+" does not exist!")},Hn=function(e,t){if("string"!=typeof e||0===e.length)throw new On("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new On('"allowMissing" argument must be a boolean');var n=Kn(e),r=n.length>0?n[0]:"",o=Bn("%"+r+"%",t),i=o.name,a=o.value,s=!1,u=o.alias;u&&(r=u[0],xn(n,In([0,1],u)));for(var c=1,l=!0;c<n.length;c+=1){var p=n[c],f=Fn(p,0,1),h=Fn(p,-1);if(('"'===f||"'"===f||"`"===f||'"'===h||"'"===h||"`"===h)&&f!==h)throw new mn("property names with quotes must have matching quotes");if("constructor"!==p&&l||(s=!0),Un(Cn,i="%"+(r+="."+p)+"%"))a=Cn[i];else if(null!=a){if(!(p in a)){if(!t)throw new On("base intrinsic for "+e+" exists, but the property is not available.");return}if(Pn&&c+1>=n.length){var d=Pn(a,p);a=(l=!!d)&&"get"in d&&!("originalValue"in d.get)?d.get:a[p]}else l=Un(a,p),a=a[p];l&&!s&&(Cn[i]=a)}}return a},qn={exports:{}};!function(e){var t=bn,n=Hn,r=n("%Function.prototype.apply%"),o=n("%Function.prototype.call%"),i=n("%Reflect.apply%",!0)||t.call(o,r),a=n("%Object.getOwnPropertyDescriptor%",!0),s=n("%Object.defineProperty%",!0),u=n("%Math.max%");if(s)try{s({},"a",{value:1})}catch(e){s=null}e.exports=function(e){var n=i(t,o,arguments);if(a&&s){var r=a(n,"length");r.configurable&&s(n,"length",{value:1+u(0,e.length-(arguments.length-1))})}return n};var c=function(){return i(t,r,arguments)};s?s(e.exports,"apply",{value:c}):e.exports.apply=c}(qn);var zn=Hn,Vn=qn.exports,Wn=Vn(zn("String.prototype.indexOf")),Jn=l(Object.freeze({__proto__:null,default:{}})),$n="function"==typeof Map&&Map.prototype,Qn=Object.getOwnPropertyDescriptor&&$n?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,Xn=$n&&Qn&&"function"==typeof Qn.get?Qn.get:null,Yn=$n&&Map.prototype.forEach,Zn="function"==typeof Set&&Set.prototype,er=Object.getOwnPropertyDescriptor&&Zn?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,tr=Zn&&er&&"function"==typeof er.get?er.get:null,nr=Zn&&Set.prototype.forEach,rr="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,or="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,ir="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,ar=Boolean.prototype.valueOf,sr=Object.prototype.toString,ur=Function.prototype.toString,cr=String.prototype.match,lr=String.prototype.slice,pr=String.prototype.replace,fr=String.prototype.toUpperCase,hr=String.prototype.toLowerCase,dr=RegExp.prototype.test,yr=Array.prototype.concat,gr=Array.prototype.join,br=Array.prototype.slice,vr=Math.floor,mr="function"==typeof BigInt?BigInt.prototype.valueOf:null,_r=Object.getOwnPropertySymbols,Or="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,Sr="function"==typeof Symbol&&"object"==typeof Symbol.iterator,Pr="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Sr||"symbol")?Symbol.toStringTag:null,wr=Object.prototype.propertyIsEnumerable,Er=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function Tr(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||dr.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var r=e<0?-vr(-e):vr(e);if(r!==e){var o=String(r),i=lr.call(t,o.length+1);return pr.call(o,n,"$&_")+"."+pr.call(pr.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return pr.call(t,n,"$&_")}var Ar=Jn,Nr=Ar.custom,kr=Ur(Nr)?Nr:null;function Cr(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function jr(e){return pr.call(String(e),/"/g,"&quot;")}function Mr(e){return!("[object Array]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}function Rr(e){return!("[object RegExp]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}function Ur(e){if(Sr)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!Or)return!1;try{return Or.call(e),!0}catch(e){}return!1}var Ir=Object.prototype.hasOwnProperty||function(e){return e in this};function xr(e,t){return Ir.call(e,t)}function Dr(e){return sr.call(e)}function Fr(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function Gr(e,t){if(e.length>t.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return Gr(lr.call(e,0,t.maxStringLength),t)+r}return Cr(pr.call(pr.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Lr),"single",t)}function Lr(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+fr.call(t.toString(16))}function Kr(e){return"Object("+e+")"}function Br(e){return e+" { ? }"}function Hr(e,t,n,r){return e+" ("+t+") {"+(r?qr(n,r):gr.call(n,", "))+"}"}function qr(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+gr.call(e,","+n)+"\n"+t.prev}function zr(e,t){var n=Mr(e),r=[];if(n){r.length=e.length;for(var o=0;o<e.length;o++)r[o]=xr(e,o)?t(e[o],e):""}var i,a="function"==typeof _r?_r(e):[];if(Sr){i={};for(var s=0;s<a.length;s++)i["$"+a[s]]=a[s]}for(var u in e)xr(e,u)&&(n&&String(Number(u))===u&&u<e.length||Sr&&i["$"+u]instanceof Symbol||(dr.call(/[^\w$]/,u)?r.push(t(u,e)+": "+t(e[u],e)):r.push(u+": "+t(e[u],e))));if("function"==typeof _r)for(var c=0;c<a.length;c++)wr.call(e,a[c])&&r.push("["+t(a[c])+"]: "+t(e[a[c]],e));return r}var Vr=Hn,Wr=function(e,t){var n=zn(e,!!t);return"function"==typeof n&&Wn(e,".prototype.")>-1?Vn(n):n},Jr=function e(t,n,r,o){var i=n||{};if(xr(i,"quoteStyle")&&"single"!==i.quoteStyle&&"double"!==i.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(xr(i,"maxStringLength")&&("number"==typeof i.maxStringLength?i.maxStringLength<0&&i.maxStringLength!==1/0:null!==i.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var a=!xr(i,"customInspect")||i.customInspect;if("boolean"!=typeof a&&"symbol"!==a)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(xr(i,"indent")&&null!==i.indent&&"\t"!==i.indent&&!(parseInt(i.indent,10)===i.indent&&i.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(xr(i,"numericSeparator")&&"boolean"!=typeof i.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var s=i.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return Gr(t,i);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var u=String(t);return s?Tr(t,u):u}if("bigint"==typeof t){var c=String(t)+"n";return s?Tr(t,c):c}var l=void 0===i.depth?5:i.depth;if(void 0===r&&(r=0),r>=l&&l>0&&"object"==typeof t)return Mr(t)?"[Array]":"[Object]";var p=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=gr.call(Array(e.indent+1)," ")}return{base:n,prev:gr.call(Array(t+1),n)}}(i,r);if(void 0===o)o=[];else if(Fr(o,t)>=0)return"[Circular]";function f(t,n,a){if(n&&(o=br.call(o)).push(n),a){var s={depth:i.depth};return xr(i,"quoteStyle")&&(s.quoteStyle=i.quoteStyle),e(t,s,r+1,o)}return e(t,i,r+1,o)}if("function"==typeof t&&!Rr(t)){var h=function(e){if(e.name)return e.name;var t=cr.call(ur.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),d=zr(t,f);return"[Function"+(h?": "+h:" (anonymous)")+"]"+(d.length>0?" { "+gr.call(d,", ")+" }":"")}if(Ur(t)){var y=Sr?pr.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):Or.call(t);return"object"!=typeof t||Sr?y:Kr(y)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var g="<"+hr.call(String(t.nodeName)),b=t.attributes||[],v=0;v<b.length;v++)g+=" "+b[v].name+"="+Cr(jr(b[v].value),"double",i);return g+=">",t.childNodes&&t.childNodes.length&&(g+="..."),g+="</"+hr.call(String(t.nodeName))+">"}if(Mr(t)){if(0===t.length)return"[]";var m=zr(t,f);return p&&!function(e){for(var t=0;t<e.length;t++)if(Fr(e[t],"\n")>=0)return!1;return!0}(m)?"["+qr(m,p)+"]":"[ "+gr.call(m,", ")+" ]"}if(function(e){return!("[object Error]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}(t)){var _=zr(t,f);return"cause"in Error.prototype||!("cause"in t)||wr.call(t,"cause")?0===_.length?"["+String(t)+"]":"{ ["+String(t)+"] "+gr.call(_,", ")+" }":"{ ["+String(t)+"] "+gr.call(yr.call("[cause]: "+f(t.cause),_),", ")+" }"}if("object"==typeof t&&a){if(kr&&"function"==typeof t[kr]&&Ar)return Ar(t,{depth:l-r});if("symbol"!==a&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!Xn||!e||"object"!=typeof e)return!1;try{Xn.call(e);try{tr.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var O=[];return Yn&&Yn.call(t,(function(e,n){O.push(f(n,t,!0)+" => "+f(e,t))})),Hr("Map",Xn.call(t),O,p)}if(function(e){if(!tr||!e||"object"!=typeof e)return!1;try{tr.call(e);try{Xn.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var S=[];return nr&&nr.call(t,(function(e){S.push(f(e,t))})),Hr("Set",tr.call(t),S,p)}if(function(e){if(!rr||!e||"object"!=typeof e)return!1;try{rr.call(e,rr);try{or.call(e,or)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return Br("WeakMap");if(function(e){if(!or||!e||"object"!=typeof e)return!1;try{or.call(e,or);try{rr.call(e,rr)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return Br("WeakSet");if(function(e){if(!ir||!e||"object"!=typeof e)return!1;try{return ir.call(e),!0}catch(e){}return!1}(t))return Br("WeakRef");if(function(e){return!("[object Number]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}(t))return Kr(f(Number(t)));if(function(e){if(!e||"object"!=typeof e||!mr)return!1;try{return mr.call(e),!0}catch(e){}return!1}(t))return Kr(f(mr.call(t)));if(function(e){return!("[object Boolean]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}(t))return Kr(ar.call(t));if(function(e){return!("[object String]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}(t))return Kr(f(String(t)));if(!function(e){return!("[object Date]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}(t)&&!Rr(t)){var P=zr(t,f),w=Er?Er(t)===Object.prototype:t instanceof Object||t.constructor===Object,E=t instanceof Object?"":"null prototype",T=!w&&Pr&&Object(t)===t&&Pr in t?lr.call(Dr(t),8,-1):E?"Object":"",A=(w||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(T||E?"["+gr.call(yr.call([],T||[],E||[]),": ")+"] ":"");return 0===P.length?A+"{}":p?A+"{"+qr(P,p)+"}":A+"{ "+gr.call(P,", ")+" }"}return String(t)},$r=Vr("%TypeError%"),Qr=Vr("%WeakMap%",!0),Xr=Vr("%Map%",!0),Yr=Wr("WeakMap.prototype.get",!0),Zr=Wr("WeakMap.prototype.set",!0),eo=Wr("WeakMap.prototype.has",!0),to=Wr("Map.prototype.get",!0),no=Wr("Map.prototype.set",!0),ro=Wr("Map.prototype.has",!0),oo=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n},io=String.prototype.replace,ao=/%20/g,so="RFC3986",uo={default:so,formatters:{RFC1738:function(e){return io.call(e,ao,"+")},RFC3986:function(e){return String(e)}},RFC1738:"RFC1738",RFC3986:so},co=uo,lo=Object.prototype.hasOwnProperty,po=Array.isArray,fo=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),ho=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r<e.length;++r)void 0!==e[r]&&(n[r]=e[r]);return n},yo={arrayToObject:ho,assign:function(e,t){return Object.keys(t).reduce((function(e,n){return e[n]=t[n],e}),e)},combine:function(e,t){return[].concat(e,t)},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],n=[],r=0;r<t.length;++r)for(var o=t[r],i=o.obj[o.prop],a=Object.keys(i),s=0;s<a.length;++s){var u=a[s],c=i[u];"object"==typeof c&&null!==c&&-1===n.indexOf(c)&&(t.push({obj:i,prop:u}),n.push(c))}return function(e){for(;e.length>1;){var t=e.pop(),n=t.obj[t.prop];if(po(n)){for(var r=[],o=0;o<n.length;++o)void 0!==n[o]&&r.push(n[o]);t.obj[t.prop]=r}}}(t),e},decode:function(e,t,n){var r=e.replace(/\+/g," ");if("iso-8859-1"===n)return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch(e){return r}},encode:function(e,t,n,r,o){if(0===e.length)return e;var i=e;if("symbol"==typeof e?i=Symbol.prototype.toString.call(e):"string"!=typeof e&&(i=String(e)),"iso-8859-1"===n)return escape(i).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));for(var a="",s=0;s<i.length;++s){var u=i.charCodeAt(s);45===u||46===u||95===u||126===u||u>=48&&u<=57||u>=65&&u<=90||u>=97&&u<=122||o===co.RFC1738&&(40===u||41===u)?a+=i.charAt(s):u<128?a+=fo[u]:u<2048?a+=fo[192|u>>6]+fo[128|63&u]:u<55296||u>=57344?a+=fo[224|u>>12]+fo[128|u>>6&63]+fo[128|63&u]:(s+=1,u=65536+((1023&u)<<10|1023&i.charCodeAt(s)),a+=fo[240|u>>18]+fo[128|u>>12&63]+fo[128|u>>6&63]+fo[128|63&u])}return a},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(po(e)){for(var n=[],r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)},merge:function e(t,n,r){if(!n)return t;if("object"!=typeof n){if(po(t))t.push(n);else{if(!t||"object"!=typeof t)return[t,n];(r&&(r.plainObjects||r.allowPrototypes)||!lo.call(Object.prototype,n))&&(t[n]=!0)}return t}if(!t||"object"!=typeof t)return[t].concat(n);var o=t;return po(t)&&!po(n)&&(o=ho(t,r)),po(t)&&po(n)?(n.forEach((function(n,o){if(lo.call(t,o)){var i=t[o];i&&"object"==typeof i&&n&&"object"==typeof n?t[o]=e(i,n,r):t.push(n)}else t[o]=n})),t):Object.keys(n).reduce((function(t,o){var i=n[o];return lo.call(t,o)?t[o]=e(t[o],i,r):t[o]=i,t}),o)}},go=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new $r("Side channel does not contain "+Jr(e))},get:function(r){if(Qr&&r&&("object"==typeof r||"function"==typeof r)){if(e)return Yr(e,r)}else if(Xr){if(t)return to(t,r)}else if(n)return function(e,t){var n=oo(e,t);return n&&n.value}(n,r)},has:function(r){if(Qr&&r&&("object"==typeof r||"function"==typeof r)){if(e)return eo(e,r)}else if(Xr){if(t)return ro(t,r)}else if(n)return function(e,t){return!!oo(e,t)}(n,r);return!1},set:function(r,o){Qr&&r&&("object"==typeof r||"function"==typeof r)?(e||(e=new Qr),Zr(e,r,o)):Xr?(t||(t=new Xr),no(t,r,o)):(n||(n={key:{},next:null}),function(e,t,n){var r=oo(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,o))}};return r},bo=yo,vo=uo,mo=Object.prototype.hasOwnProperty,_o={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},Oo=Array.isArray,So=Array.prototype.push,Po=function(e,t){So.apply(e,Oo(t)?t:[t])},wo=Date.prototype.toISOString,Eo=vo.default,To={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:bo.encode,encodeValuesOnly:!1,format:Eo,formatter:vo.formatters[Eo],indices:!1,serializeDate:function(e){return wo.call(e)},skipNulls:!1,strictNullHandling:!1},Ao={},No=function e(t,n,r,o,i,a,s,u,c,l,p,f,h,d,y,g){for(var b,v=t,m=g,_=0,O=!1;void 0!==(m=m.get(Ao))&&!O;){var S=m.get(t);if(_+=1,void 0!==S){if(S===_)throw new RangeError("Cyclic object value");O=!0}void 0===m.get(Ao)&&(_=0)}if("function"==typeof u?v=u(n,v):v instanceof Date?v=p(v):"comma"===r&&Oo(v)&&(v=bo.maybeMap(v,(function(e){return e instanceof Date?p(e):e}))),null===v){if(i)return s&&!d?s(n,To.encoder,y,"key",f):n;v=""}if("string"==typeof(b=v)||"number"==typeof b||"boolean"==typeof b||"symbol"==typeof b||"bigint"==typeof b||bo.isBuffer(v))return s?[h(d?n:s(n,To.encoder,y,"key",f))+"="+h(s(v,To.encoder,y,"value",f))]:[h(n)+"="+h(String(v))];var P,w=[];if(void 0===v)return w;if("comma"===r&&Oo(v))d&&s&&(v=bo.maybeMap(v,s)),P=[{value:v.length>0?v.join(",")||null:void 0}];else if(Oo(u))P=u;else{var E=Object.keys(v);P=c?E.sort(c):E}for(var T=o&&Oo(v)&&1===v.length?n+"[]":n,A=0;A<P.length;++A){var N=P[A],k="object"==typeof N&&void 0!==N.value?N.value:v[N];if(!a||null!==k){var C=Oo(v)?"function"==typeof r?r(T,N):T:T+(l?"."+N:"["+N+"]");g.set(t,_);var j=go();j.set(Ao,g),Po(w,e(k,C,r,o,i,a,"comma"===r&&d&&Oo(v)?null:s,u,c,l,p,f,h,d,y,j))}}return w},ko=yo,Co=Object.prototype.hasOwnProperty,jo=Array.isArray,Mo={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:ko.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},Ro=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},Uo=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},Io=function(e,t,n,r){if(e){var o=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,a=n.depth>0&&/(\[[^[\]]*])/.exec(o),s=a?o.slice(0,a.index):o,u=[];if(s){if(!n.plainObjects&&Co.call(Object.prototype,s)&&!n.allowPrototypes)return;u.push(s)}for(var c=0;n.depth>0&&null!==(a=i.exec(o))&&c<n.depth;){if(c+=1,!n.plainObjects&&Co.call(Object.prototype,a[1].slice(1,-1))&&!n.allowPrototypes)return;u.push(a[1])}return a&&u.push("["+o.slice(a.index)+"]"),function(e,t,n,r){for(var o=r?t:Uo(t,n),i=e.length-1;i>=0;--i){var a,s=e[i];if("[]"===s&&n.parseArrays)a=[].concat(o);else{a=n.plainObjects?Object.create(null):{};var u="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,c=parseInt(u,10);n.parseArrays||""!==u?!isNaN(c)&&s!==u&&String(c)===u&&c>=0&&n.parseArrays&&c<=n.arrayLimit?(a=[])[c]=o:"__proto__"!==u&&(a[u]=o):a={0:o}}o=a}return o}(u,t,n,r)}},xo=function(e,t){var n,r=e,o=function(e){if(!e)return To;if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");var t=e.charset||To.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var n=vo.default;if(void 0!==e.format){if(!mo.call(vo.formatters,e.format))throw new TypeError("Unknown format option provided.");n=e.format}var r=vo.formatters[n],o=To.filter;return("function"==typeof e.filter||Oo(e.filter))&&(o=e.filter),{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:To.addQueryPrefix,allowDots:void 0===e.allowDots?To.allowDots:!!e.allowDots,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:To.charsetSentinel,delimiter:void 0===e.delimiter?To.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:To.encode,encoder:"function"==typeof e.encoder?e.encoder:To.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:To.encodeValuesOnly,filter:o,format:n,formatter:r,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:To.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:To.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:To.strictNullHandling}}(t);"function"==typeof o.filter?r=(0,o.filter)("",r):Oo(o.filter)&&(n=o.filter);var i,a=[];if("object"!=typeof r||null===r)return"";i=t&&t.arrayFormat in _o?t.arrayFormat:t&&"indices"in t?t.indices?"indices":"repeat":"indices";var s=_o[i];if(t&&"commaRoundTrip"in t&&"boolean"!=typeof t.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var u="comma"===s&&t&&t.commaRoundTrip;n||(n=Object.keys(r)),o.sort&&n.sort(o.sort);for(var c=go(),l=0;l<n.length;++l){var p=n[l];o.skipNulls&&null===r[p]||Po(a,No(r[p],p,s,u,o.strictNullHandling,o.skipNulls,o.encode?o.encoder:null,o.filter,o.sort,o.allowDots,o.serializeDate,o.format,o.formatter,o.encodeValuesOnly,o.charset,c))}var f=a.join(o.delimiter),h=!0===o.addQueryPrefix?"?":"";return o.charsetSentinel&&("iso-8859-1"===o.charset?h+="utf8=%26%2310003%3B&":h+="utf8=%E2%9C%93&"),f.length>0?h+f:""},Do={formats:uo,parse:function(e,t){var n=function(e){if(!e)return Mo;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?Mo.charset:e.charset;return{allowDots:void 0===e.allowDots?Mo.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:Mo.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:Mo.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:Mo.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:Mo.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:Mo.comma,decoder:"function"==typeof e.decoder?e.decoder:Mo.decoder,delimiter:"string"==typeof e.delimiter||ko.isRegExp(e.delimiter)?e.delimiter:Mo.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:Mo.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:Mo.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:Mo.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:Mo.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:Mo.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var r="string"==typeof e?function(e,t){var n,r={__proto__:null},o=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,i=t.parameterLimit===1/0?void 0:t.parameterLimit,a=o.split(t.delimiter,i),s=-1,u=t.charset;if(t.charsetSentinel)for(n=0;n<a.length;++n)0===a[n].indexOf("utf8=")&&("utf8=%E2%9C%93"===a[n]?u="utf-8":"utf8=%26%2310003%3B"===a[n]&&(u="iso-8859-1"),s=n,n=a.length);for(n=0;n<a.length;++n)if(n!==s){var c,l,p=a[n],f=p.indexOf("]="),h=-1===f?p.indexOf("="):f+1;-1===h?(c=t.decoder(p,Mo.decoder,u,"key"),l=t.strictNullHandling?null:""):(c=t.decoder(p.slice(0,h),Mo.decoder,u,"key"),l=ko.maybeMap(Uo(p.slice(h+1),t),(function(e){return t.decoder(e,Mo.decoder,u,"value")}))),l&&t.interpretNumericEntities&&"iso-8859-1"===u&&(l=Ro(l)),p.indexOf("[]=")>-1&&(l=jo(l)?[l]:l),Co.call(r,c)?r[c]=ko.combine(r[c],l):r[c]=l}return r}(e,n):e,o=n.plainObjects?Object.create(null):{},i=Object.keys(r),a=0;a<i.length;++a){var s=i[a],u=Io(s,r[s],n,"string"==typeof e);o=ko.merge(o,u,n)}return!0===n.allowSparse?o:ko.compact(o)},stringify:xo},Fo={};!function(e){function t(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return n(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return n(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}e.type=e=>e.split(/ *; */).shift(),e.params=e=>{const n={};var r,o=t(e.split(/ *; */));try{for(o.s();!(r=o.n()).done;){const e=r.value.split(/ *= */),t=e.shift(),o=e.shift();t&&o&&(n[t]=o)}}catch(e){o.e(e)}finally{o.f()}return n},e.parseLinks=e=>{const n={};var r,o=t(e.split(/ *, */));try{for(o.s();!(r=o.n()).done;){const e=r.value.split(/ *; */),t=e[0].slice(1,-1);n[e[1].split(/ *= */)[1].slice(1,-1)]=t}}catch(e){o.e(e)}finally{o.f()}return n},e.cleanHeader=(e,t)=>(delete e["content-type"],delete e["content-length"],delete e["transfer-encoding"],delete e.host,t&&(delete e.authorization,delete e.cookie),e),e.isObject=e=>null!==e&&"object"==typeof e,e.hasOwn=Object.hasOwn||function(e,t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");return Object.prototype.hasOwnProperty.call(new Object(e),t)},e.mixin=(t,n)=>{for(const r in n)e.hasOwn(n,r)&&(t[r]=n[r])}}(Fo);const Go=Jn,Lo=Fo.isObject,Ko=Fo.hasOwn;var Bo=Ho;function Ho(){}Ho.prototype.clearTimeout=function(){return clearTimeout(this._timer),clearTimeout(this._responseTimeoutTimer),clearTimeout(this._uploadTimeoutTimer),delete this._timer,delete this._responseTimeoutTimer,delete this._uploadTimeoutTimer,this},Ho.prototype.parse=function(e){return this._parser=e,this},Ho.prototype.responseType=function(e){return this._responseType=e,this},Ho.prototype.serialize=function(e){return this._serializer=e,this},Ho.prototype.timeout=function(e){if(!e||"object"!=typeof e)return this._timeout=e,this._responseTimeout=0,this._uploadTimeout=0,this;for(const t in e)if(Ko(e,t))switch(t){case"deadline":this._timeout=e.deadline;break;case"response":this._responseTimeout=e.response;break;case"upload":this._uploadTimeout=e.upload;break;default:console.warn("Unknown timeout option",t)}return this},Ho.prototype.retry=function(e,t){return 0!==arguments.length&&!0!==e||(e=1),e<=0&&(e=0),this._maxRetries=e,this._retries=0,this._retryCallback=t,this};const qo=new Set(["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"]),zo=new Set([408,413,429,500,502,503,504,521,522,524]);Ho.prototype._shouldRetry=function(e,t){if(!this._maxRetries||this._retries++>=this._maxRetries)return!1;if(this._retryCallback)try{const n=this._retryCallback(e,t);if(!0===n)return!0;if(!1===n)return!1}catch(e){console.error(e)}if(t&&t.status&&zo.has(t.status))return!0;if(e){if(e.code&&qo.has(e.code))return!0;if(e.timeout&&"ECONNABORTED"===e.code)return!0;if(e.crossDomain)return!0}return!1},Ho.prototype._retry=function(){return this.clearTimeout(),this.req&&(this.req=null,this.req=this.request()),this._aborted=!1,this.timedout=!1,this.timedoutError=null,this._end()},Ho.prototype.then=function(e,t){if(!this._fullfilledPromise){const e=this;this._endCalled&&console.warn("Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises"),this._fullfilledPromise=new Promise(((t,n)=>{e.on("abort",(()=>{if(this._maxRetries&&this._maxRetries>this._retries)return;if(this.timedout&&this.timedoutError)return void n(this.timedoutError);const e=new Error("Aborted");e.code="ABORTED",e.status=this.status,e.method=this.method,e.url=this.url,n(e)})),e.end(((e,r)=>{e?n(e):t(r)}))}))}return this._fullfilledPromise.then(e,t)},Ho.prototype.catch=function(e){return this.then(void 0,e)},Ho.prototype.use=function(e){return e(this),this},Ho.prototype.ok=function(e){if("function"!=typeof e)throw new Error("Callback required");return this._okCallback=e,this},Ho.prototype._isResponseOK=function(e){return!!e&&(this._okCallback?this._okCallback(e):e.status>=200&&e.status<300)},Ho.prototype.get=function(e){return this._header[e.toLowerCase()]},Ho.prototype.getHeader=Ho.prototype.get,Ho.prototype.set=function(e,t){if(Lo(e)){for(const t in e)Ko(e,t)&&this.set(t,e[t]);return this}return this._header[e.toLowerCase()]=t,this.header[e]=t,this},Ho.prototype.unset=function(e){return delete this._header[e.toLowerCase()],delete this.header[e],this},Ho.prototype.field=function(e,t,n){if(null==e)throw new Error(".field(name, val) name can not be empty");if(this._data)throw new Error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()");if(Lo(e)){for(const t in e)Ko(e,t)&&this.field(t,e[t]);return this}if(Array.isArray(t)){for(const n in t)Ko(t,n)&&this.field(e,t[n]);return this}if(null==t)throw new Error(".field(name, val) val can not be empty");return"boolean"==typeof t&&(t=String(t)),n?this._getFormData().append(e,t,n):this._getFormData().append(e,t),this},Ho.prototype.abort=function(){if(this._aborted)return this;if(this._aborted=!0,this.xhr&&this.xhr.abort(),this.req){if(Go.gte(process.version,"v13.0.0")&&Go.lt(process.version,"v14.0.0"))throw new Error("Superagent does not work in v13 properly with abort() due to Node.js core changes");this.req.abort()}return this.clearTimeout(),this.emit("abort"),this},Ho.prototype._auth=function(e,t,n,r){switch(n.type){case"basic":this.set("Authorization",`Basic ${r(`${e}:${t}`)}`);break;case"auto":this.username=e,this.password=t;break;case"bearer":this.set("Authorization",`Bearer ${e}`)}return this},Ho.prototype.withCredentials=function(e){return void 0===e&&(e=!0),this._withCredentials=e,this},Ho.prototype.redirects=function(e){return this._maxRedirects=e,this},Ho.prototype.maxResponseSize=function(e){if("number"!=typeof e)throw new TypeError("Invalid argument");return this._maxResponseSize=e,this},Ho.prototype.toJSON=function(){return{method:this.method,url:this.url,data:this._data,headers:this._header}},Ho.prototype.send=function(e){const t=Lo(e);let n=this._header["content-type"];if(this._formData)throw new Error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()");if(t&&!this._data)Array.isArray(e)?this._data=[]:this._isHost(e)||(this._data={});else if(e&&this._data&&this._isHost(this._data))throw new Error("Can't merge these send calls");if(t&&Lo(this._data))for(const t in e){if("bigint"==typeof e[t]&&!e[t].toJSON)throw new Error("Cannot serialize BigInt value to json");Ko(e,t)&&(this._data[t]=e[t])}else{if("bigint"==typeof e)throw new Error("Cannot send value of type BigInt");"string"==typeof e?(n||this.type("form"),n=this._header["content-type"],n&&(n=n.toLowerCase().trim()),this._data="application/x-www-form-urlencoded"===n?this._data?`${this._data}&${e}`:e:(this._data||"")+e):this._data=e}return!t||this._isHost(e)||n||this.type("json"),this},Ho.prototype.sortQuery=function(e){return this._sort=void 0===e||e,this},Ho.prototype._finalizeQueryString=function(){const e=this._query.join("&");if(e&&(this.url+=(this.url.includes("?")?"&":"?")+e),this._query.length=0,this._sort){const e=this.url.indexOf("?");if(e>=0){const t=this.url.slice(e+1).split("&");"function"==typeof this._sort?t.sort(this._sort):t.sort(),this.url=this.url.slice(0,e)+"?"+t.join("&")}}},Ho.prototype._appendQueryString=()=>{console.warn("Unsupported")},Ho.prototype._timeoutError=function(e,t,n){if(this._aborted)return;const r=new Error(`${e+t}ms exceeded`);r.timeout=t,r.code="ECONNABORTED",r.errno=n,this.timedout=!0,this.timedoutError=r,this.abort(),this.callback(r)},Ho.prototype._setTimeouts=function(){const e=this;this._timeout&&!this._timer&&(this._timer=setTimeout((()=>{e._timeoutError("Timeout of ",e._timeout,"ETIME")}),this._timeout)),this._responseTimeout&&!this._responseTimeoutTimer&&(this._responseTimeoutTimer=setTimeout((()=>{e._timeoutError("Response timeout of ",e._responseTimeout,"ETIMEDOUT")}),this._responseTimeout))};const Vo=Fo;var Wo=Jo;function Jo(){}function $o(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return Qo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qo(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function Qo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Xo(){this._defaults=[]}Jo.prototype.get=function(e){return this.header[e.toLowerCase()]},Jo.prototype._setHeaderProperties=function(e){const t=e["content-type"]||"";this.type=Vo.type(t);const n=Vo.params(t);for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&(this[e]=n[e]);this.links={};try{e.link&&(this.links=Vo.parseLinks(e.link))}catch(e){}},Jo.prototype._setStatusProperties=function(e){const t=Math.trunc(e/100);this.statusCode=e,this.status=this.statusCode,this.statusType=t,this.info=1===t,this.ok=2===t,this.redirect=3===t,this.clientError=4===t,this.serverError=5===t,this.error=(4===t||5===t)&&this.toError(),this.created=201===e,this.accepted=202===e,this.noContent=204===e,this.badRequest=400===e,this.unauthorized=401===e,this.notAcceptable=406===e,this.forbidden=403===e,this.notFound=404===e,this.unprocessableEntity=422===e};for(var Yo=0,Zo=["use","on","once","set","query","type","accept","auth","withCredentials","sortQuery","retry","ok","redirects","timeout","buffer","serialize","parse","ca","key","pfx","cert","disableTLSCerts"];Yo<Zo.length;Yo++){const e=Zo[Yo];Xo.prototype[e]=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return this._defaults.push({fn:e,args:n}),this}}Xo.prototype._setDefaults=function(e){var t,n=$o(this._defaults);try{for(n.s();!(t=n.n()).done;){const n=t.value;e[n.fn](...n.args)}}catch(e){n.e(e)}finally{n.f()}};var ei=Xo;!function(e,t){function n(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return r(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==n.return||n.return()}finally{if(u)throw a}}}}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}let o;"undefined"!=typeof window?o=window:"undefined"==typeof self?(console.warn("Using browser-only version of superagent in non-browser environment"),o=void 0):o=self;const i=Jt.exports,a=$t,s=Do,u=Bo,c=Fo.isObject,l=Fo.mixin,p=Fo.hasOwn,f=Wo,h=ei;function d(){}e.exports=function(e,n){return"function"==typeof n?new t.Request("GET",e).end(n):1===arguments.length?new t.Request("GET",e):new t.Request(e,n)};const y=t=e.exports;t.Request=S,y.getXHR=()=>{if(o.XMLHttpRequest)return new o.XMLHttpRequest;throw new Error("Browser-only version of superagent could not find XHR")};const g="".trim?e=>e.trim():e=>e.replace(/(^\s*|\s*$)/g,"");function b(e){if(!c(e))return e;const t=[];for(const n in e)p(e,n)&&v(t,n,e[n]);return t.join("&")}function v(e,t,r){if(void 0!==r)if(null!==r)if(Array.isArray(r)){var o,i=n(r);try{for(i.s();!(o=i.n()).done;){v(e,t,o.value)}}catch(e){i.e(e)}finally{i.f()}}else if(c(r))for(const n in r)p(r,n)&&v(e,`${t}[${n}]`,r[n]);else e.push(encodeURI(t)+"="+encodeURIComponent(r));else e.push(encodeURI(t))}function m(e){const t={},n=e.split("&");let r,o;for(let e=0,i=n.length;e<i;++e)r=n[e],o=r.indexOf("="),-1===o?t[decodeURIComponent(r)]="":t[decodeURIComponent(r.slice(0,o))]=decodeURIComponent(r.slice(o+1));return t}function _(e){return/[/+]json($|[^-\w])/i.test(e)}function O(e){this.req=e,this.xhr=this.req.xhr,this.text="HEAD"!==this.req.method&&(""===this.xhr.responseType||"text"===this.xhr.responseType)||void 0===this.xhr.responseType?this.xhr.responseText:null,this.statusText=this.req.xhr.statusText;let t=this.xhr.status;1223===t&&(t=204),this._setStatusProperties(t),this.headers=function(e){const t=e.split(/\r?\n/),n={};let r,o,i,a;for(let e=0,s=t.length;e<s;++e)o=t[e],r=o.indexOf(":"),-1!==r&&(i=o.slice(0,r).toLowerCase(),a=g(o.slice(r+1)),n[i]=a);return n}(this.xhr.getAllResponseHeaders()),this.header=this.headers,this.header["content-type"]=this.xhr.getResponseHeader("content-type"),this._setHeaderProperties(this.header),null===this.text&&e._responseType?this.body=this.xhr.response:this.body="HEAD"===this.req.method?null:this._parseBody(this.text?this.text:this.xhr.response)}function S(e,t){const n=this;this._query=this._query||[],this.method=e,this.url=t,this.header={},this._header={},this.on("end",(()=>{let e,t=null,r=null;try{r=new O(n)}catch(e){return t=new Error("Parser is unable to parse the response"),t.parse=!0,t.original=e,n.xhr?(t.rawResponse=void 0===n.xhr.responseType?n.xhr.responseText:n.xhr.response,t.status=n.xhr.status?n.xhr.status:null,t.statusCode=t.status):(t.rawResponse=null,t.status=null),n.callback(t)}n.emit("response",r);try{n._isResponseOK(r)||(e=new Error(r.statusText||r.text||"Unsuccessful HTTP response"))}catch(t){e=t}e?(e.original=t,e.response=r,e.status=e.status||r.status,n.callback(e,r)):n.callback(null,r)}))}y.serializeObject=b,y.parseString=m,y.types={html:"text/html",json:"application/json",xml:"text/xml",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},y.serialize={"application/x-www-form-urlencoded":s.stringify,"application/json":a},y.parse={"application/x-www-form-urlencoded":m,"application/json":JSON.parse},l(O.prototype,f.prototype),O.prototype._parseBody=function(e){let t=y.parse[this.type];return this.req._parser?this.req._parser(this,e):(!t&&_(this.type)&&(t=y.parse["application/json"]),t&&e&&(e.length>0||e instanceof Object)?t(e):null)},O.prototype.toError=function(){const e=this.req,t=e.method,n=e.url,r=`cannot ${t} ${n} (${this.status})`,o=new Error(r);return o.status=this.status,o.method=t,o.url=n,o},y.Response=O,i(S.prototype),l(S.prototype,u.prototype),S.prototype.type=function(e){return this.set("Content-Type",y.types[e]||e),this},S.prototype.accept=function(e){return this.set("Accept",y.types[e]||e),this},S.prototype.auth=function(e,t,n){1===arguments.length&&(t=""),"object"==typeof t&&null!==t&&(n=t,t=""),n||(n={type:"function"==typeof btoa?"basic":"auto"});const r=n.encoder?n.encoder:e=>{if("function"==typeof btoa)return btoa(e);throw new Error("Cannot use basic auth, btoa is not a function")};return this._auth(e,t,n,r)},S.prototype.query=function(e){return"string"!=typeof e&&(e=b(e)),e&&this._query.push(e),this},S.prototype.attach=function(e,t,n){if(t){if(this._data)throw new Error("superagent can't mix .send() and .attach()");this._getFormData().append(e,t,n||t.name)}return this},S.prototype._getFormData=function(){return this._formData||(this._formData=new o.FormData),this._formData},S.prototype.callback=function(e,t){if(this._shouldRetry(e,t))return this._retry();const n=this._callback;this.clearTimeout(),e&&(this._maxRetries&&(e.retries=this._retries-1),this.emit("error",e)),n(e,t)},S.prototype.crossDomainError=function(){const e=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");e.crossDomain=!0,e.status=this.status,e.method=this.method,e.url=this.url,this.callback(e)},S.prototype.agent=function(){return console.warn("This is not supported in browser version of superagent"),this},S.prototype.ca=S.prototype.agent,S.prototype.buffer=S.prototype.ca,S.prototype.write=()=>{throw new Error("Streaming is not supported in browser version of superagent")},S.prototype.pipe=S.prototype.write,S.prototype._isHost=function(e){return e&&"object"==typeof e&&!Array.isArray(e)&&"[object Object]"!==Object.prototype.toString.call(e)},S.prototype.end=function(e){this._endCalled&&console.warn("Warning: .end() was called twice. This is not supported in superagent"),this._endCalled=!0,this._callback=e||d,this._finalizeQueryString(),this._end()},S.prototype._setUploadTimeout=function(){const e=this;this._uploadTimeout&&!this._uploadTimeoutTimer&&(this._uploadTimeoutTimer=setTimeout((()=>{e._timeoutError("Upload timeout of ",e._uploadTimeout,"ETIMEDOUT")}),this._uploadTimeout))},S.prototype._end=function(){if(this._aborted)return this.callback(new Error("The request has been aborted even before .end() was called"));const e=this;this.xhr=y.getXHR();const t=this.xhr;let n=this._formData||this._data;this._setTimeouts(),t.addEventListener("readystatechange",(()=>{const n=t.readyState;if(n>=2&&e._responseTimeoutTimer&&clearTimeout(e._responseTimeoutTimer),4!==n)return;let r;try{r=t.status}catch(e){r=0}if(!r){if(e.timedout||e._aborted)return;return e.crossDomainError()}e.emit("end")}));const r=(t,n)=>{n.total>0&&(n.percent=n.loaded/n.total*100,100===n.percent&&clearTimeout(e._uploadTimeoutTimer)),n.direction=t,e.emit("progress",n)};if(this.hasListeners("progress"))try{t.addEventListener("progress",r.bind(null,"download")),t.upload&&t.upload.addEventListener("progress",r.bind(null,"upload"))}catch(e){}t.upload&&this._setUploadTimeout();try{this.username&&this.password?t.open(this.method,this.url,!0,this.username,this.password):t.open(this.method,this.url,!0)}catch(e){return this.callback(e)}if(this._withCredentials&&(t.withCredentials=!0),!this._formData&&"GET"!==this.method&&"HEAD"!==this.method&&"string"!=typeof n&&!this._isHost(n)){const e=this._header["content-type"];let t=this._serializer||y.serialize[e?e.split(";")[0]:""];!t&&_(e)&&(t=y.serialize["application/json"]),t&&(n=t(n))}for(const e in this.header)null!==this.header[e]&&p(this.header,e)&&t.setRequestHeader(e,this.header[e]);this._responseType&&(t.responseType=this._responseType),this.emit("request",this),t.send(void 0===n?null:n)},y.agent=()=>new h;for(var P=0,w=["GET","POST","OPTIONS","PATCH","PUT","DELETE"];P<w.length;P++){const e=w[P];h.prototype[e.toLowerCase()]=function(t,n){const r=new y.Request(e,t);return this._setDefaults(r),n&&r.end(n),r}}function E(e,t,n){const r=y("DELETE",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}h.prototype.del=h.prototype.delete,y.get=(e,t,n)=>{const r=y("GET",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},y.head=(e,t,n)=>{const r=y("HEAD",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},y.options=(e,t,n)=>{const r=y("OPTIONS",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},y.del=E,y.delete=E,y.patch=(e,t,n)=>{const r=y("PATCH",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},y.post=(e,t,n)=>{const r=y("POST",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},y.put=(e,t,n)=>{const r=y("PUT",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}}(Wt,Wt.exports);var ti=Wt.exports;function ni(e){var t=(new Date).getTime(),n=(new Date).toISOString(),r=console&&console.log?console:window&&window.console&&window.console.log?window.console:console;r.log("<<<<<"),r.log("[".concat(n,"]"),"\n",e.url,"\n",e.qs),r.log("-----"),e.on("response",(function(n){var o=(new Date).getTime()-t,i=(new Date).toISOString();r.log(">>>>>>"),r.log("[".concat(i," / ").concat(o,"]"),"\n",e.url,"\n",e.qs,"\n",n.text),r.log("-----")}))}function ri(e,t,n){var r=this;this._config.logVerbosity&&(e=e.use(ni)),this._config.proxy&&this._modules.proxy&&(e=this._modules.proxy.call(this,e)),this._config.keepAlive&&this._modules.keepAlive&&(e=this._modules.keepAlive(e));var o=e;if(t.abortSignal)var i=t.abortSignal.subscribe((function(){o.abort(),i()}));return!0===t.forceBuffered?o="undefined"==typeof Blob?o.buffer().responseType("arraybuffer"):o.responseType("arraybuffer"):!1===t.forceBuffered&&(o=o.buffer(!1)),(o=o.timeout(t.timeout)).on("abort",(function(){return n({category:R.PNUnknownCategory,error:!0,operation:t.operation,errorData:new Error("Aborted")},null)})),o.end((function(e,o){var i,a={};if(a.error=null!==e,a.operation=t.operation,o&&o.status&&(a.statusCode=o.status),e){if(e.response&&e.response.text&&!r._config.logVerbosity)try{a.errorData=JSON.parse(e.response.text)}catch(t){a.errorData=e}else a.errorData=e;return a.category=r._detectErrorCategory(e),n(a,null)}if(t.ignoreBody)i={headers:o.headers,redirects:o.redirects,response:o};else try{i=JSON.parse(o.text)}catch(e){return a.errorData=o,a.error=!0,n(a,null)}return i.error&&1===i.error&&i.status&&i.message&&i.service?(a.errorData=i,a.statusCode=i.status,a.error=!0,a.category=r._detectErrorCategory(a),n(a,null)):(i.error&&i.error.message&&(a.errorData=i.error),n(a,i))})),o}function oi(e,t,n){return o(this,void 0,void 0,(function(){var r;return i(this,(function(o){switch(o.label){case 0:return r=ti.post(e),t.forEach((function(e){var t=e.key,n=e.value;r=r.field(t,n)})),r.attach("file",n,{contentType:"application/octet-stream"}),[4,r];case 1:return[2,o.sent()]}}))}))}function ii(e,t,n){var r=ti.get(this.getStandardOrigin()+t.url).set(t.headers).query(e);return ri.call(this,r,t,n)}function ai(e,t,n){var r=ti.get(this.getStandardOrigin()+t.url).set(t.headers).query(e);return ri.call(this,r,t,n)}function si(e,t,n,r){var o=ti.post(this.getStandardOrigin()+n.url).query(e).set(n.headers).send(t);return ri.call(this,o,n,r)}function ui(e,t,n,r){var o=ti.patch(this.getStandardOrigin()+n.url).query(e).set(n.headers).send(t);return ri.call(this,o,n,r)}function ci(e,t,n){var r=ti.delete(this.getStandardOrigin()+t.url).set(t.headers).query(e);return ri.call(this,r,t,n)}function li(e,t){var n=new Uint8Array(e.byteLength+t.byteLength);return n.set(new Uint8Array(e),0),n.set(new Uint8Array(t),e.byteLength),n.buffer}var pi,fi=function(){function e(){}return Object.defineProperty(e.prototype,"algo",{get:function(){return"aes-256-cbc"},enumerable:!1,configurable:!0}),e.prototype.encrypt=function(e,t){return o(this,void 0,void 0,(function(){var n;return i(this,(function(r){switch(r.label){case 0:return[4,this.getKey(e)];case 1:if(n=r.sent(),t instanceof ArrayBuffer)return[2,this.encryptArrayBuffer(n,t)];if("string"==typeof t)return[2,this.encryptString(n,t)];throw new Error("Cannot encrypt this file. In browsers file encryption supports only string or ArrayBuffer")}}))}))},e.prototype.decrypt=function(e,t){return o(this,void 0,void 0,(function(){var n;return i(this,(function(r){switch(r.label){case 0:return[4,this.getKey(e)];case 1:if(n=r.sent(),t instanceof ArrayBuffer)return[2,this.decryptArrayBuffer(n,t)];if("string"==typeof t)return[2,this.decryptString(n,t)];throw new Error("Cannot decrypt this file. In browsers file decryption supports only string or ArrayBuffer")}}))}))},e.prototype.encryptFile=function(e,t,n){return o(this,void 0,void 0,(function(){var r,o,a;return i(this,(function(i){switch(i.label){case 0:if(t.data.byteLength<=0)throw new Error("encryption error. empty content");return[4,this.getKey(e)];case 1:return r=i.sent(),[4,t.data.arrayBuffer()];case 2:return o=i.sent(),[4,this.encryptArrayBuffer(r,o)];case 3:return a=i.sent(),[2,n.create({name:t.name,mimeType:"application/octet-stream",data:a})]}}))}))},e.prototype.decryptFile=function(e,t,n){return o(this,void 0,void 0,(function(){var r,o,a;return i(this,(function(i){switch(i.label){case 0:return[4,this.getKey(e)];case 1:return r=i.sent(),[4,t.data.arrayBuffer()];case 2:return o=i.sent(),[4,this.decryptArrayBuffer(r,o)];case 3:return a=i.sent(),[2,n.create({name:t.name,data:a})]}}))}))},e.prototype.getKey=function(t){return o(this,void 0,void 0,(function(){var n,r,o;return i(this,(function(i){switch(i.label){case 0:return[4,crypto.subtle.digest("SHA-256",e.encoder.encode(t))];case 1:return n=i.sent(),r=Array.from(new Uint8Array(n)).map((function(e){return e.toString(16).padStart(2,"0")})).join(""),o=e.encoder.encode(r.slice(0,32)).buffer,[2,crypto.subtle.importKey("raw",o,"AES-CBC",!0,["encrypt","decrypt"])]}}))}))},e.prototype.encryptArrayBuffer=function(e,t){return o(this,void 0,void 0,(function(){var n,r,o;return i(this,(function(i){switch(i.label){case 0:return n=crypto.getRandomValues(new Uint8Array(16)),r=li,o=[n.buffer],[4,crypto.subtle.encrypt({name:"AES-CBC",iv:n},e,t)];case 1:return[2,r.apply(void 0,o.concat([i.sent()]))]}}))}))},e.prototype.decryptArrayBuffer=function(t,n){return o(this,void 0,void 0,(function(){var r;return i(this,(function(o){switch(o.label){case 0:if(r=n.slice(0,16),n.slice(e.IV_LENGTH).byteLength<=0)throw new Error("decryption error: empty content");return[4,crypto.subtle.decrypt({name:"AES-CBC",iv:r},t,n.slice(e.IV_LENGTH))];case 1:return[2,o.sent()]}}))}))},e.prototype.encryptString=function(t,n){return o(this,void 0,void 0,(function(){var r,o,a,s;return i(this,(function(i){switch(i.label){case 0:return r=crypto.getRandomValues(new Uint8Array(16)),o=e.encoder.encode(n).buffer,[4,crypto.subtle.encrypt({name:"AES-CBC",iv:r},t,o)];case 1:return a=i.sent(),s=li(r.buffer,a),[2,e.decoder.decode(s)]}}))}))},e.prototype.decryptString=function(t,n){return o(this,void 0,void 0,(function(){var r,o,a,s;return i(this,(function(i){switch(i.label){case 0:return r=e.encoder.encode(n).buffer,o=r.slice(0,16),a=r.slice(16),[4,crypto.subtle.decrypt({name:"AES-CBC",iv:o},t,a)];case 1:return s=i.sent(),[2,e.decoder.decode(s)]}}))}))},e.IV_LENGTH=16,e.encoder=new TextEncoder,e.decoder=new TextDecoder,e}(),hi=(pi=function(){function e(e){if(e instanceof File)this.data=e,this.name=this.data.name,this.mimeType=this.data.type;else if(e.data){var t=e.data;this.data=new File([t],e.name,{type:e.mimeType}),this.name=e.name,e.mimeType&&(this.mimeType=e.mimeType)}if(void 0===this.data)throw new Error("Couldn't construct a file out of supplied options.");if(void 0===this.name)throw new Error("Couldn't guess filename out of the options. Please provide one.")}return e.create=function(e){return new this(e)},e.prototype.toBuffer=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){throw new Error("This feature is only supported in Node.js environments.")}))}))},e.prototype.toStream=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){throw new Error("This feature is only supported in Node.js environments.")}))}))},e.prototype.toFileUri=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){throw new Error("This feature is only supported in react native environments.")}))}))},e.prototype.toBlob=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){return[2,this.data]}))}))},e.prototype.toArrayBuffer=function(){return o(this,void 0,void 0,(function(){var e=this;return i(this,(function(t){return[2,new Promise((function(t,n){var r=new FileReader;r.addEventListener("load",(function(){if(r.result instanceof ArrayBuffer)return t(r.result)})),r.addEventListener("error",(function(){n(r.error)})),r.readAsArrayBuffer(e.data)}))]}))}))},e.prototype.toString=function(){return o(this,void 0,void 0,(function(){var e=this;return i(this,(function(t){return[2,new Promise((function(t,n){var r=new FileReader;r.addEventListener("load",(function(){if("string"==typeof r.result)return t(r.result)})),r.addEventListener("error",(function(){n(r.error)})),r.readAsBinaryString(e.data)}))]}))}))},e.prototype.toFile=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){return[2,this.data]}))}))},e}(),pi.supportsFile="undefined"!=typeof File,pi.supportsBlob="undefined"!=typeof Blob,pi.supportsArrayBuffer="undefined"!=typeof ArrayBuffer,pi.supportsBuffer=!1,pi.supportsStream=!1,pi.supportsString=!0,pi.supportsEncryptFile=!0,pi.supportsFileUri=!1,pi),di=function(){function e(e){this.config=e,this.cryptor=new A({config:e}),this.fileCryptor=new fi}return Object.defineProperty(e.prototype,"identifier",{get:function(){return""},enumerable:!1,configurable:!0}),e.prototype.encrypt=function(e){var t="string"==typeof e?e:(new TextDecoder).decode(e);return{data:this.cryptor.encrypt(t),metadata:null}},e.prototype.decrypt=function(e){var t="string"==typeof e.data?e.data:v(e.data);return this.cryptor.decrypt(t)},e.prototype.encryptFile=function(e,t){var n;return o(this,void 0,void 0,(function(){return i(this,(function(r){return[2,this.fileCryptor.encryptFile(null===(n=this.config)||void 0===n?void 0:n.cipherKey,e,t)]}))}))},e.prototype.decryptFile=function(e,t){return o(this,void 0,void 0,(function(){return i(this,(function(n){return[2,this.fileCryptor.decryptFile(this.config.cipherKey,e,t)]}))}))},e}(),yi=function(){function e(e){this.cipherKey=e.cipherKey,this.CryptoJS=E,this.encryptedKey=this.CryptoJS.SHA256(this.cipherKey)}return Object.defineProperty(e.prototype,"algo",{get:function(){return"AES-CBC"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"identifier",{get:function(){return"ACRH"},enumerable:!1,configurable:!0}),e.prototype.getIv=function(){return crypto.getRandomValues(new Uint8Array(e.BLOCK_SIZE))},e.prototype.getKey=function(){return o(this,void 0,void 0,(function(){var t,n;return i(this,(function(r){switch(r.label){case 0:return t=e.encoder.encode(this.cipherKey),[4,crypto.subtle.digest("SHA-256",t.buffer)];case 1:return n=r.sent(),[2,crypto.subtle.importKey("raw",n,this.algo,!0,["encrypt","decrypt"])]}}))}))},e.prototype.encrypt=function(t){if(0===("string"==typeof t?t:e.decoder.decode(t)).length)throw new Error("encryption error. empty content");var n=this.getIv();return{metadata:n,data:b(this.CryptoJS.AES.encrypt(t,this.encryptedKey,{iv:this.bufferToWordArray(n),mode:this.CryptoJS.mode.CBC}).ciphertext.toString(this.CryptoJS.enc.Base64))}},e.prototype.decrypt=function(t){var n=this.bufferToWordArray(new Uint8ClampedArray(t.metadata)),r=this.bufferToWordArray(new Uint8ClampedArray(t.data));return e.encoder.encode(this.CryptoJS.AES.decrypt({ciphertext:r},this.encryptedKey,{iv:n,mode:this.CryptoJS.mode.CBC}).toString(this.CryptoJS.enc.Utf8)).buffer},e.prototype.encryptFileData=function(e){return o(this,void 0,void 0,(function(){var t,n,r;return i(this,(function(o){switch(o.label){case 0:return[4,this.getKey()];case 1:return t=o.sent(),n=this.getIv(),r={},[4,crypto.subtle.encrypt({name:this.algo,iv:n},t,e)];case 2:return[2,(r.data=o.sent(),r.metadata=n,r)]}}))}))},e.prototype.decryptFileData=function(e){return o(this,void 0,void 0,(function(){var t;return i(this,(function(n){switch(n.label){case 0:return[4,this.getKey()];case 1:return t=n.sent(),[2,crypto.subtle.decrypt({name:this.algo,iv:e.metadata},t,e.data)]}}))}))},e.prototype.bufferToWordArray=function(e){var t,n=[];for(t=0;t<e.length;t+=1)n[t/4|0]|=e[t]<<24-8*t;return this.CryptoJS.lib.WordArray.create(n,e.length)},e.BLOCK_SIZE=16,e.encoder=new TextEncoder,e.decoder=new TextDecoder,e}(),gi=function(){function e(e){var t;this.defaultCryptor=e.default,this.cryptors=null!==(t=e.cryptors)&&void 0!==t?t:[]}return e.legacyCryptoModule=function(e){var t;return new this({default:new di({cipherKey:e.cipherKey,useRandomIVs:null===(t=e.useRandomIVs)||void 0===t||t}),cryptors:[new yi({cipherKey:e.cipherKey})]})},e.aesCbcCryptoModule=function(e){var t;return new this({default:new yi({cipherKey:e.cipherKey}),cryptors:[new di({cipherKey:e.cipherKey,useRandomIVs:null===(t=e.useRandomIVs)||void 0===t||t})]})},e.withDefaultCryptor=function(e){return new this({default:e})},e.prototype.getAllCryptors=function(){return u([this.defaultCryptor],s(this.cryptors),!1)},e.prototype.encrypt=function(e){var t=this.defaultCryptor.encrypt(e);if(!t.metadata)return t.data;var n=this.getHeaderData(t);return this.concatArrayBuffer(n,t.data)},e.prototype.decrypt=function(e){var t="string"==typeof e?b(e):e,n=bi.tryParse(t),r=this.getCryptor(n),o=n.length>0?t.slice(n.length-n.metadataLength,n.length):null;if(t.slice(n.length).byteLength<=0)throw new Error("decryption error. empty content");return r.decrypt({data:t.slice(n.length),metadata:o})},e.prototype.encryptFile=function(e,t){return o(this,void 0,void 0,(function(){var n,r;return i(this,(function(o){switch(o.label){case 0:return this.defaultCryptor.identifier===bi.LEGACY_IDENTIFIER?[2,this.defaultCryptor.encryptFile(e,t)]:(n=this.getFileData(e.data),[4,this.defaultCryptor.encryptFileData(n)]);case 1:return r=o.sent(),[2,t.create({name:e.name,mimeType:"application/octet-stream",data:this.concatArrayBuffer(this.getHeaderData(r),r.data)})]}}))}))},e.prototype.decryptFile=function(t,n){return o(this,void 0,void 0,(function(){var r,o,a,s,u,c,l,p;return i(this,(function(i){switch(i.label){case 0:return[4,t.data.arrayBuffer()];case 1:return r=i.sent(),o=bi.tryParse(r),(null==(a=this.getCryptor(o))?void 0:a.identifier)===e.LEGACY_IDENTIFIER?[2,a.decryptFile(t,n)]:(s=this.getFileData(r),u=s.slice(o.length-o.metadataLength,o.length),l=(c=n).create,p={name:t.name},[4,this.defaultCryptor.decryptFileData({data:r.slice(o.length),metadata:u})]);case 2:return[2,l.apply(c,[(p.data=i.sent(),p)])]}}))}))},e.prototype.getCryptor=function(e){if(""===e){var t=this.getAllCryptors().find((function(e){return""===e.identifier}));if(t)return t;throw new Error("unknown cryptor error")}if(e instanceof vi)return this.getCryptorFromId(e.identifier)},e.prototype.getCryptorFromId=function(e){var t=this.getAllCryptors().find((function(t){return e===t.identifier}));if(t)return t;throw Error("unknown cryptor error")},e.prototype.concatArrayBuffer=function(e,t){var n=new Uint8Array(e.byteLength+t.byteLength);return n.set(new Uint8Array(e),0),n.set(new Uint8Array(t),e.byteLength),n.buffer},e.prototype.getHeaderData=function(e){if(e.metadata){var t=bi.from(this.defaultCryptor.identifier,e.metadata),n=new Uint8Array(t.length),r=0;return n.set(t.data,r),r+=t.length-e.metadata.byteLength,n.set(new Uint8Array(e.metadata),r),n.buffer}},e.prototype.getFileData=function(t){if(t instanceof ArrayBuffer)return t;if("string"==typeof t)return e.encoder.encode(t);throw new Error("Cannot decrypt/encrypt file. In browsers file decryption supports only string or ArrayBuffer")},e.LEGACY_IDENTIFIER="",e.encoder=new TextEncoder,e.decoder=new TextDecoder,e}(),bi=function(){function e(){}return e.from=function(t,n){if(t!==e.LEGACY_IDENTIFIER)return new vi(t,n.byteLength)},e.tryParse=function(t){var n=new Uint8Array(t),r="";if(n.byteLength>=4&&(r=n.slice(0,4),this.decoder.decode(r)!==e.SENTINEL))return"";if(!(n.byteLength>=5))throw new Error("decryption error. invalid header version");if(n[4]>e.MAX_VERSION)throw new Error("unknown cryptor error");var o="",i=5+e.IDENTIFIER_LENGTH;if(!(n.byteLength>=i))throw new Error("decryption error. invalid crypto identifier");o=n.slice(5,i);var a=null;if(!(n.byteLength>=i+1))throw new Error("decryption error. invalid metadata length");return a=n[i],i+=1,255===a&&n.byteLength>=i+2&&(a=new Uint16Array(n.slice(i,i+2)).reduce((function(e,t){return(e<<8)+t}),0),i+=2),new vi(this.decoder.decode(o),a)},e.SENTINEL="PNED",e.LEGACY_IDENTIFIER="",e.IDENTIFIER_LENGTH=4,e.VERSION=1,e.MAX_VERSION=1,e.decoder=new TextDecoder,e}(),vi=function(){function e(e,t){this._identifier=e,this._metadataLength=t}return Object.defineProperty(e.prototype,"identifier",{get:function(){return this._identifier},set:function(e){this._identifier=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"metadataLength",{get:function(){return this._metadataLength},set:function(e){this._metadataLength=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"version",{get:function(){return bi.VERSION},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return bi.SENTINEL.length+1+bi.IDENTIFIER_LENGTH+(this.metadataLength<255?1:3)+this.metadataLength},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"data",{get:function(){var e=0,t=new Uint8Array(this.length),n=new TextEncoder;t.set(n.encode(bi.SENTINEL)),t[e+=bi.SENTINEL.length]=this.version,e++,this.identifier&&t.set(n.encode(this.identifier),e),e+=bi.IDENTIFIER_LENGTH;var r=this.metadataLength;return r<255?t[e]=r:t.set([255,r>>8,255&r],e),t},enumerable:!1,configurable:!0}),e.IDENTIFIER_LENGTH=4,e.SENTINEL="PNED",e}();function mi(e){if(!navigator||!navigator.sendBeacon)return!1;navigator.sendBeacon(e)}var _i=function(e){function n(t){var n=this,r=t.listenToBrowserNetworkEvents,o=void 0===r||r;return t.sdkFamily="Web",t.networking=new qt({del:ci,get:ai,post:si,patch:ui,sendBeacon:mi,getfile:ii,postfile:oi}),t.cbor=new Vt((function(e){return zt(f.decode(e))}),b),t.PubNubFile=hi,t.cryptography=new fi,t.initCryptoModule=function(e){return new gi({default:new di({cipherKey:e.cipherKey,useRandomIVs:e.useRandomIVs}),cryptors:[new yi({cipherKey:e.cipherKey})]})},n=e.call(this,t)||this,o&&(window.addEventListener("offline",(function(){n.networkDownDetected()})),window.addEventListener("online",(function(){n.networkUpDetected()}))),n}return t(n,e),n.CryptoModule=gi,n}(Ht);return _i}));
diff --git a/lib/core/components/base64_codec.js b/lib/core/components/base64_codec.js
index 73b8a4c9..157dd3b0 100644
--- a/lib/core/components/base64_codec.js
+++ b/lib/core/components/base64_codec.js
@@ -1,8 +1,8 @@
 "use strict";
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.decode = void 0;
+exports.encode = exports.decode = void 0;
 var BASE64_CHARMAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
 /**
  * Decode a Base64 encoded string.
  *
  * @param paddedInput Base64 string with padding
@@ -46,5 +46,45 @@ function decode(paddedInput) {
             view[i + 2] = oc3;
     }
     return data;
 }
 exports.decode = decode;
+function encode(input) {
+    var base64 = '';
+    var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+    var bytes = new Uint8Array(input);
+    var byteLength = bytes.byteLength;
+    var byteRemainder = byteLength % 3;
+    var mainLength = byteLength - byteRemainder;
+    var a, b, c, d;
+    var chunk;
+    // Main loop deals with bytes in chunks of 3
+    for (var i = 0; i < mainLength; i = i + 3) {
+        // Combine the three bytes into a single integer
+        chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];
+        // Use bitmasks to extract 6-bit segments from the triplet
+        a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18
+        b = (chunk & 258048) >> 12; // 258048   = (2^6 - 1) << 12
+        c = (chunk & 4032) >> 6; // 4032     = (2^6 - 1) << 6
+        d = chunk & 63; // 63       = 2^6 - 1
+        // Convert the raw binary segments to the appropriate ASCII encoding
+        base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];
+    }
+    // Deal with the remaining bytes and padding
+    if (byteRemainder == 1) {
+        chunk = bytes[mainLength];
+        a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2
+        // Set the 4 least significant bits to zero
+        b = (chunk & 3) << 4; // 3   = 2^2 - 1
+        base64 += encodings[a] + encodings[b] + '==';
+    }
+    else if (byteRemainder == 2) {
+        chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];
+        a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10
+        b = (chunk & 1008) >> 4; // 1008  = (2^6 - 1) << 4
+        // Set the 2 least significant bits to zero
+        c = (chunk & 15) << 2; // 15    = 2^4 - 1
+        base64 += encodings[a] + encodings[b] + encodings[c] + '=';
+    }
+    return base64;
+}
+exports.encode = encode;
diff --git a/lib/core/components/config.js b/lib/core/components/config.js
index 11286ca0..628d414f 100644
--- a/lib/core/components/config.js
+++ b/lib/core/components/config.js
@@ -20,11 +20,11 @@ var default_1 = /** @class */ (function () {
         this.publishKey = setup.publishKey || setup.publish_key;
         this.sdkName = setup.sdkName;
         this.sdkFamily = setup.sdkFamily;
         this.partnerId = setup.partnerId;
         this.setAuthKey(setup.authKey);
-        this.setCipherKey(setup.cipherKey);
+        this.cryptoModule = setup.cryptoModule;
         this.setFilterExpression(setup.filterExpression);
         if (typeof setup.origin !== 'string' && !Array.isArray(setup.origin) && setup.origin !== undefined) {
             throw new Error('Origin must be either undefined, a string or a list of strings.');
         }
         this.origin = setup.origin || makeDefaultOrigins();
@@ -79,21 +79,29 @@ var default_1 = /** @class */ (function () {
             if (typeof setup.uuid !== 'string') {
                 throw new Error('One of the following configuration options has to be provided: `uuid` or `userId`');
             }
             this.setUUID(setup.uuid);
         }
+        this.setCipherKey(setup.cipherKey, setup);
     }
     // exposed setters
     default_1.prototype.getAuthKey = function () {
         return this.authKey;
     };
     default_1.prototype.setAuthKey = function (val) {
         this.authKey = val;
         return this;
     };
-    default_1.prototype.setCipherKey = function (val) {
+    default_1.prototype.setCipherKey = function (val, setup, modules) {
+        var _a;
         this.cipherKey = val;
+        if (this.cipherKey) {
+            this.cryptoModule =
+                (_a = setup.cryptoModule) !== null && _a !== void 0 ? _a : setup.initCryptoModule({ cipherKey: this.cipherKey, useRandomIVs: this.useRandomIVs });
+            if (modules)
+                modules.cryptoModule = this.cryptoModule;
+        }
         return this;
     };
     default_1.prototype.getUUID = function () {
         return this.UUID;
     };
@@ -167,11 +175,11 @@ var default_1 = /** @class */ (function () {
     default_1.prototype.setSendBeaconConfig = function (val) {
         this._useSendBeacon = val;
         return this;
     };
     default_1.prototype.getVersion = function () {
-        return '7.3.3';
+        return '7.4.0';
     };
     default_1.prototype._addPnsdkSuffix = function (name, suffix) {
         this._PNSDKSuffix[name] = suffix;
     };
     default_1.prototype._getPnsdkSuffix = function (separator) {
diff --git a/lib/core/components/subscription_manager.js b/lib/core/components/subscription_manager.js
index 6e5bdc4c..985efe9b 100644
--- a/lib/core/components/subscription_manager.js
+++ b/lib/core/components/subscription_manager.js
@@ -29,19 +29,20 @@ var reconnection_manager_1 = __importDefault(require("./reconnection_manager"));
 var deduping_manager_1 = __importDefault(require("./deduping_manager"));
 var utils_1 = __importDefault(require("../utils"));
 var categories_1 = __importDefault(require("../constants/categories"));
 var default_1 = /** @class */ (function () {
     function default_1(_a) {
-        var subscribeEndpoint = _a.subscribeEndpoint, leaveEndpoint = _a.leaveEndpoint, heartbeatEndpoint = _a.heartbeatEndpoint, setStateEndpoint = _a.setStateEndpoint, timeEndpoint = _a.timeEndpoint, getFileUrl = _a.getFileUrl, config = _a.config, crypto = _a.crypto, listenerManager = _a.listenerManager;
+        var subscribeEndpoint = _a.subscribeEndpoint, leaveEndpoint = _a.leaveEndpoint, heartbeatEndpoint = _a.heartbeatEndpoint, setStateEndpoint = _a.setStateEndpoint, timeEndpoint = _a.timeEndpoint, getFileUrl = _a.getFileUrl, config = _a.config, crypto = _a.crypto, listenerManager = _a.listenerManager, cryptoModule = _a.cryptoModule;
         this._listenerManager = listenerManager;
         this._config = config;
         this._leaveEndpoint = leaveEndpoint;
         this._heartbeatEndpoint = heartbeatEndpoint;
         this._setStateEndpoint = setStateEndpoint;
         this._subscribeEndpoint = subscribeEndpoint;
         this._getFileUrl = getFileUrl;
         this._crypto = crypto;
+        this._cryptoModule = cryptoModule;
         this._channels = {};
         this._presenceChannels = {};
         this._heartbeatChannels = {};
         this._heartbeatChannelGroups = {};
         this._channelGroups = {};
@@ -53,10 +54,12 @@ var default_1 = /** @class */ (function () {
         this._storedTimetoken = null;
         this._subscriptionStatusAnnounced = false;
         this._isOnline = true;
         this._reconnectionManager = new reconnection_manager_1.default({ timeEndpoint: timeEndpoint });
         this._dedupingManager = new deduping_manager_1.default({ config: config });
+        if (this._cryptoModule)
+            this._decoder = new TextDecoder();
     }
     default_1.prototype.adaptStateChange = function (args, callback) {
         var _this = this;
         var state = args.state, _a = args.channels, channels = _a === void 0 ? [] : _a, _b = args.channelGroups, channelGroups = _b === void 0 ? [] : _b, _c = args.withHeartbeat, withHeartbeat = _c === void 0 ? false : _c;
         channels.forEach(function (channel) {
@@ -520,13 +523,24 @@ var default_1 = /** @class */ (function () {
                 announce.channel = channel;
                 announce.subscription = subscriptionMatch;
                 announce.timetoken = publishMetaData.publishTimetoken;
                 announce.publisher = message.issuingClientId;
                 var msgPayload = message.payload;
-                if (_this._config.cipherKey) {
-                    var decryptedPayload = _this._crypto.decrypt(message.payload);
-                    if (typeof decryptedPayload === 'object' && decryptedPayload !== null) {
+                if (_this._cryptoModule) {
+                    var decryptedPayload = void 0;
+                    try {
+                        var decryptedData = _this._cryptoModule.decrypt(message.payload);
+                        decryptedPayload =
+                            decryptedData instanceof ArrayBuffer ? JSON.parse(_this._decoder.decode(decryptedData)) : decryptedData;
+                    }
+                    catch (e) {
+                        decryptedPayload = null;
+                        if (console && console.log) {
+                            console.log('decryption error', e.message);
+                        }
+                    }
+                    if (decryptedPayload !== null) {
                         msgPayload = decryptedPayload;
                     }
                 }
                 if (message.userMetadata) {
                     announce.userMetadata = message.userMetadata;
@@ -556,12 +570,30 @@ var default_1 = /** @class */ (function () {
                 announce.timetoken = publishMetaData.publishTimetoken;
                 announce.publisher = message.issuingClientId;
                 if (message.userMetadata) {
                     announce.userMetadata = message.userMetadata;
                 }
-                if (_this._config.cipherKey) {
-                    announce.message = _this._crypto.decrypt(message.payload);
+                if (_this._cryptoModule) {
+                    var decryptedPayload = void 0;
+                    try {
+                        var decryptedData = _this._cryptoModule.decrypt(message.payload);
+                        decryptedPayload =
+                            decryptedData instanceof ArrayBuffer ? JSON.parse(_this._decoder.decode(decryptedData)) : decryptedData;
+                    }
+                    catch (e) {
+                        decryptedPayload = null;
+                        // eslint-disable-next-line
+                        if (console && console.log) {
+                            console.log('decryption error', e.message); //eslint-disable-line
+                        }
+                    }
+                    if (decryptedPayload != null) {
+                        announce.message = decryptedPayload;
+                    }
+                    else {
+                        announce.message = message.payload;
+                    }
                 }
                 else {
                     announce.message = message.payload;
                 }
                 _this._listenerManager.announceMessage(announce);
diff --git a/lib/core/endpoints/fetch_messages.js b/lib/core/endpoints/fetch_messages.js
index 771bd779..c844a109 100644
--- a/lib/core/endpoints/fetch_messages.js
+++ b/lib/core/endpoints/fetch_messages.js
@@ -6,17 +6,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.handleResponse = exports.prepareParams = exports.isAuthSupported = exports.getRequestTimeout = exports.getURL = exports.validateParams = exports.getOperation = void 0;
 var operations_1 = __importDefault(require("../constants/operations"));
 var utils_1 = __importDefault(require("../utils"));
 function __processMessage(modules, message) {
-    var config = modules.config, crypto = modules.crypto;
-    if (!config.cipherKey)
+    if (!modules.cryptoModule)
         return message;
     try {
-        return crypto.decrypt(message);
+        var decryptedData = modules.cryptoModule.decrypt(message);
+        var decryptedPayload = decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
+        return decryptedPayload;
     }
     catch (e) {
+        if (console && console.log)
+            console.log('decryption error', e.message);
         return message;
     }
 }
 function getOperation() {
     return operations_1.default.PNFetchMessagesOperation;
diff --git a/lib/core/endpoints/file_upload/download_file.js b/lib/core/endpoints/file_upload/download_file.js
index 7e1621b5..65d4c6ee 100644
--- a/lib/core/endpoints/file_upload/download_file.js
+++ b/lib/core/endpoints/file_upload/download_file.js
@@ -1,7 +1,7 @@
 "use strict";
-/**       */
+// Download_file.js
 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
     return new (P || (P = Promise))(function (resolve, reject) {
         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
@@ -38,10 +38,11 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
 };
 var __importDefault = (this && this.__importDefault) || function (mod) {
     return (mod && mod.__esModule) ? mod : { "default": mod };
 };
 Object.defineProperty(exports, "__esModule", { value: true });
+/**       */
 var operations_1 = __importDefault(require("../../constants/operations"));
 var utils_1 = __importDefault(require("../../utils"));
 var endpoint = {
     getOperation: function () { return operations_1.default.PNDownloadFileOperation; },
     validateParams: function (_, params) {
@@ -67,24 +68,32 @@ var endpoint = {
     isAuthSupported: function () { return true; },
     ignoreBody: function () { return true; },
     forceBuffered: function () { return true; },
     prepareParams: function () { return ({}); },
     handleResponse: function (_a, res, params) {
-        var PubNubFile = _a.PubNubFile, config = _a.config, cryptography = _a.cryptography;
+        var PubNubFile = _a.PubNubFile, config = _a.config, cryptography = _a.cryptography, cryptoModule = _a.cryptoModule;
         return __awaiter(void 0, void 0, void 0, function () {
-            var body;
-            var _b, _c, _d;
+            var body, _b;
+            var _c, _d;
             return __generator(this, function (_e) {
                 switch (_e.label) {
                     case 0:
                         body = res.response.body;
-                        if (!(PubNubFile.supportsEncryptFile && ((_b = params.cipherKey) !== null && _b !== void 0 ? _b : config.cipherKey))) return [3 /*break*/, 2];
-                        return [4 /*yield*/, cryptography.decrypt((_c = params.cipherKey) !== null && _c !== void 0 ? _c : config.cipherKey, body)];
+                        if (!(PubNubFile.supportsEncryptFile && (params.cipherKey || cryptoModule))) return [3 /*break*/, 5];
+                        if (!(params.cipherKey == null)) return [3 /*break*/, 2];
+                        return [4 /*yield*/, cryptoModule.decryptFile(PubNubFile.create({ data: body, name: params.name }), PubNubFile)];
                     case 1:
-                        body = _e.sent();
-                        _e.label = 2;
-                    case 2: return [2 /*return*/, PubNubFile.create({
+                        _b = (_e.sent()).data;
+                        return [3 /*break*/, 4];
+                    case 2: return [4 /*yield*/, cryptography.decrypt((_c = params.cipherKey) !== null && _c !== void 0 ? _c : config.cipherKey, body)];
+                    case 3:
+                        _b = _e.sent();
+                        _e.label = 4;
+                    case 4:
+                        body = _b;
+                        _e.label = 5;
+                    case 5: return [2 /*return*/, PubNubFile.create({
                             data: body,
                             name: (_d = res.response.name) !== null && _d !== void 0 ? _d : params.name,
                             mimeType: res.response.type,
                         })];
                 }
diff --git a/lib/core/endpoints/file_upload/publish_file.js b/lib/core/endpoints/file_upload/publish_file.js
index e03aa754..9a0a5584 100644
--- a/lib/core/endpoints/file_upload/publish_file.js
+++ b/lib/core/endpoints/file_upload/publish_file.js
@@ -4,15 +4,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
     return (mod && mod.__esModule) ? mod : { "default": mod };
 };
 Object.defineProperty(exports, "__esModule", { value: true });
 var operations_1 = __importDefault(require("../../constants/operations"));
 var utils_1 = __importDefault(require("../../utils"));
-var preparePayload = function (_a, payload) {
-    var crypto = _a.crypto, config = _a.config;
+var base64_codec_1 = require("../../components/base64_codec");
+var preparePayload = function (modules, payload) {
     var stringifiedPayload = JSON.stringify(payload);
-    if (config.cipherKey) {
-        stringifiedPayload = crypto.encrypt(stringifiedPayload);
+    if (modules.cryptoModule) {
+        var encrypted = modules.cryptoModule.encrypt(stringifiedPayload);
+        stringifiedPayload = typeof encrypted === 'string' ? encrypted : (0, base64_codec_1.encode)(encrypted);
         stringifiedPayload = JSON.stringify(stringifiedPayload);
     }
     return stringifiedPayload || '';
 };
 var endpoint = {
diff --git a/lib/core/endpoints/file_upload/send_file.js b/lib/core/endpoints/file_upload/send_file.js
index 729fb745..34aba2be 100644
--- a/lib/core/endpoints/file_upload/send_file.js
+++ b/lib/core/endpoints/file_upload/send_file.js
@@ -37,125 +37,133 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
 };
 Object.defineProperty(exports, "__esModule", { value: true });
 var endpoint_1 = require("../../components/endpoint");
 var sendFile = function (_a) {
     var _this = this;
-    var generateUploadUrl = _a.generateUploadUrl, publishFile = _a.publishFile, _b = _a.modules, PubNubFile = _b.PubNubFile, config = _b.config, cryptography = _b.cryptography, networking = _b.networking;
+    var generateUploadUrl = _a.generateUploadUrl, publishFile = _a.publishFile, _b = _a.modules, PubNubFile = _b.PubNubFile, config = _b.config, cryptography = _b.cryptography, cryptoModule = _b.cryptoModule, networking = _b.networking;
     return function (_a) {
         var channel = _a.channel, input = _a.file, message = _a.message, cipherKey = _a.cipherKey, meta = _a.meta, ttl = _a.ttl, storeInHistory = _a.storeInHistory;
         return __awaiter(_this, void 0, void 0, function () {
-            var file, _b, _c, url, formFields, _d, id, name, formFieldsWithMimeType, result, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, e_1, errorBody, reason, retries, wasSuccessful, publishResult, e_2;
-            return __generator(this, function (_s) {
-                switch (_s.label) {
+            var file, _b, _c, url, formFields, _d, id, name, _e, formFieldsWithMimeType, result, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, e_1, errorBody, reason, retries, wasSuccessful, publishResult, e_2;
+            return __generator(this, function (_t) {
+                switch (_t.label) {
                     case 0:
                         if (!channel) {
                             throw new endpoint_1.PubNubError('Validation failed, check status for details', (0, endpoint_1.createValidationError)("channel can't be empty"));
                         }
                         if (!input) {
                             throw new endpoint_1.PubNubError('Validation failed, check status for details', (0, endpoint_1.createValidationError)("file can't be empty"));
                         }
                         file = PubNubFile.create(input);
                         return [4 /*yield*/, generateUploadUrl({ channel: channel, name: file.name })];
                     case 1:
-                        _b = _s.sent(), _c = _b.file_upload_request, url = _c.url, formFields = _c.form_fields, _d = _b.data, id = _d.id, name = _d.name;
-                        if (!(PubNubFile.supportsEncryptFile && (cipherKey !== null && cipherKey !== void 0 ? cipherKey : config.cipherKey))) return [3 /*break*/, 3];
-                        return [4 /*yield*/, cryptography.encryptFile(cipherKey !== null && cipherKey !== void 0 ? cipherKey : config.cipherKey, file, PubNubFile)];
+                        _b = _t.sent(), _c = _b.file_upload_request, url = _c.url, formFields = _c.form_fields, _d = _b.data, id = _d.id, name = _d.name;
+                        if (!(PubNubFile.supportsEncryptFile && (cipherKey || cryptoModule))) return [3 /*break*/, 6];
+                        if (!(cipherKey == null)) return [3 /*break*/, 3];
+                        return [4 /*yield*/, cryptoModule.encryptFile(file, PubNubFile)];
                     case 2:
-                        file = _s.sent();
-                        _s.label = 3;
-                    case 3:
+                        _e = _t.sent();
+                        return [3 /*break*/, 5];
+                    case 3: return [4 /*yield*/, cryptography.encryptFile(cipherKey, file, PubNubFile)];
+                    case 4:
+                        _e = _t.sent();
+                        _t.label = 5;
+                    case 5:
+                        file = _e;
+                        _t.label = 6;
+                    case 6:
                         formFieldsWithMimeType = formFields;
                         if (file.mimeType) {
                             formFieldsWithMimeType = formFields.map(function (entry) {
                                 if (entry.key === 'Content-Type')
                                     return { key: entry.key, value: file.mimeType };
                                 return entry;
                             });
                         }
-                        _s.label = 4;
-                    case 4:
-                        _s.trys.push([4, 18, , 19]);
-                        if (!(PubNubFile.supportsFileUri && input.uri)) return [3 /*break*/, 7];
-                        _f = (_e = networking).POSTFILE;
-                        _g = [url, formFieldsWithMimeType];
-                        return [4 /*yield*/, file.toFileUri()];
-                    case 5: return [4 /*yield*/, _f.apply(_e, _g.concat([_s.sent()]))];
-                    case 6:
-                        result = _s.sent();
-                        return [3 /*break*/, 17];
+                        _t.label = 7;
                     case 7:
-                        if (!PubNubFile.supportsFile) return [3 /*break*/, 10];
-                        _j = (_h = networking).POSTFILE;
-                        _k = [url, formFieldsWithMimeType];
-                        return [4 /*yield*/, file.toFile()];
-                    case 8: return [4 /*yield*/, _j.apply(_h, _k.concat([_s.sent()]))];
+                        _t.trys.push([7, 21, , 22]);
+                        if (!(PubNubFile.supportsFileUri && input.uri)) return [3 /*break*/, 10];
+                        _g = (_f = networking).POSTFILE;
+                        _h = [url, formFieldsWithMimeType];
+                        return [4 /*yield*/, file.toFileUri()];
+                    case 8: return [4 /*yield*/, _g.apply(_f, _h.concat([_t.sent()]))];
                     case 9:
-                        result = _s.sent();
-                        return [3 /*break*/, 17];
+                        result = _t.sent();
+                        return [3 /*break*/, 20];
                     case 10:
-                        if (!PubNubFile.supportsBuffer) return [3 /*break*/, 13];
-                        _m = (_l = networking).POSTFILE;
-                        _o = [url, formFieldsWithMimeType];
-                        return [4 /*yield*/, file.toBuffer()];
-                    case 11: return [4 /*yield*/, _m.apply(_l, _o.concat([_s.sent()]))];
+                        if (!PubNubFile.supportsFile) return [3 /*break*/, 13];
+                        _k = (_j = networking).POSTFILE;
+                        _l = [url, formFieldsWithMimeType];
+                        return [4 /*yield*/, file.toFile()];
+                    case 11: return [4 /*yield*/, _k.apply(_j, _l.concat([_t.sent()]))];
                     case 12:
-                        result = _s.sent();
-                        return [3 /*break*/, 17];
+                        result = _t.sent();
+                        return [3 /*break*/, 20];
                     case 13:
-                        if (!PubNubFile.supportsBlob) return [3 /*break*/, 16];
-                        _q = (_p = networking).POSTFILE;
-                        _r = [url, formFieldsWithMimeType];
-                        return [4 /*yield*/, file.toBlob()];
-                    case 14: return [4 /*yield*/, _q.apply(_p, _r.concat([_s.sent()]))];
+                        if (!PubNubFile.supportsBuffer) return [3 /*break*/, 16];
+                        _o = (_m = networking).POSTFILE;
+                        _p = [url, formFieldsWithMimeType];
+                        return [4 /*yield*/, file.toBuffer()];
+                    case 14: return [4 /*yield*/, _o.apply(_m, _p.concat([_t.sent()]))];
                     case 15:
-                        result = _s.sent();
-                        return [3 /*break*/, 17];
-                    case 16: throw new Error('Unsupported environment');
-                    case 17: return [3 /*break*/, 19];
+                        result = _t.sent();
+                        return [3 /*break*/, 20];
+                    case 16:
+                        if (!PubNubFile.supportsBlob) return [3 /*break*/, 19];
+                        _r = (_q = networking).POSTFILE;
+                        _s = [url, formFieldsWithMimeType];
+                        return [4 /*yield*/, file.toBlob()];
+                    case 17: return [4 /*yield*/, _r.apply(_q, _s.concat([_t.sent()]))];
                     case 18:
-                        e_1 = _s.sent();
+                        result = _t.sent();
+                        return [3 /*break*/, 20];
+                    case 19: throw new Error('Unsupported environment');
+                    case 20: return [3 /*break*/, 22];
+                    case 21:
+                        e_1 = _t.sent();
                         if (e_1.response && typeof e_1.response.text === 'string') {
                             errorBody = e_1.response.text;
                             reason = /<Message>(.*)<\/Message>/gi.exec(errorBody);
                             throw new endpoint_1.PubNubError(reason ? "Upload to bucket failed: ".concat(reason[1]) : 'Upload to bucket failed.', e_1);
                         }
                         else {
                             throw new endpoint_1.PubNubError('Upload to bucket failed.', e_1);
                         }
-                        return [3 /*break*/, 19];
-                    case 19:
+                        return [3 /*break*/, 22];
+                    case 22:
                         if (result.status !== 204) {
                             throw new endpoint_1.PubNubError('Upload to bucket was unsuccessful', result);
                         }
                         retries = config.fileUploadPublishRetryLimit;
                         wasSuccessful = false;
                         publishResult = { timetoken: '0' };
-                        _s.label = 20;
-                    case 20:
-                        _s.trys.push([20, 22, , 23]);
+                        _t.label = 23;
+                    case 23:
+                        _t.trys.push([23, 25, , 26]);
                         return [4 /*yield*/, publishFile({
                                 channel: channel,
                                 message: message,
                                 fileId: id,
                                 fileName: name,
                                 meta: meta,
                                 storeInHistory: storeInHistory,
                                 ttl: ttl,
                             })];
-                    case 21:
+                    case 24:
                         /* eslint-disable-next-line no-await-in-loop */
-                        publishResult = _s.sent();
+                        publishResult = _t.sent();
                         wasSuccessful = true;
-                        return [3 /*break*/, 23];
-                    case 22:
-                        e_2 = _s.sent();
+                        return [3 /*break*/, 26];
+                    case 25:
+                        e_2 = _t.sent();
                         retries -= 1;
-                        return [3 /*break*/, 23];
-                    case 23:
-                        if (!wasSuccessful && retries > 0) return [3 /*break*/, 20];
-                        _s.label = 24;
-                    case 24:
+                        return [3 /*break*/, 26];
+                    case 26:
+                        if (!wasSuccessful && retries > 0) return [3 /*break*/, 23];
+                        _t.label = 27;
+                    case 27:
                         if (!wasSuccessful) {
                             throw new endpoint_1.PubNubError('Publish failed. You may want to execute that operation manually using pubnub.publishFile', {
                                 channel: channel,
                                 id: id,
                                 name: name,
diff --git a/lib/core/endpoints/history/get_history.js b/lib/core/endpoints/history/get_history.js
index 23965380..4e877cb0 100644
--- a/lib/core/endpoints/history/get_history.js
+++ b/lib/core/endpoints/history/get_history.js
@@ -6,17 +6,20 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.handleResponse = exports.prepareParams = exports.isAuthSupported = exports.getRequestTimeout = exports.getURL = exports.validateParams = exports.getOperation = void 0;
 var operations_1 = __importDefault(require("../../constants/operations"));
 var utils_1 = __importDefault(require("../../utils"));
 function __processMessage(modules, message) {
-    var config = modules.config, crypto = modules.crypto;
-    if (!config.cipherKey)
+    if (!modules.cryptoModule)
         return message;
     try {
-        return crypto.decrypt(message);
+        var decryptedData = modules.cryptoModule.decrypt(message);
+        var decryptedPayload = decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
+        return decryptedPayload;
     }
     catch (e) {
+        if (console && console.log)
+            console.log('decryption error', e.message);
         return message;
     }
 }
 function getOperation() {
     return operations_1.default.PNHistoryOperation;
diff --git a/lib/core/endpoints/publish.js b/lib/core/endpoints/publish.js
index 2e45b6db..6799ecc6 100644
--- a/lib/core/endpoints/publish.js
+++ b/lib/core/endpoints/publish.js
@@ -5,18 +5,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
 };
 Object.defineProperty(exports, "__esModule", { value: true });
 exports.handleResponse = exports.prepareParams = exports.postPayload = exports.isAuthSupported = exports.getRequestTimeout = exports.postURL = exports.getURL = exports.usePost = exports.validateParams = exports.getOperation = void 0;
 var operations_1 = __importDefault(require("../constants/operations"));
 var utils_1 = __importDefault(require("../utils"));
+var base64_codec_1 = require("../components/base64_codec");
 function prepareMessagePayload(modules, messagePayload) {
-    var crypto = modules.crypto, config = modules.config;
     var stringifiedPayload = JSON.stringify(messagePayload);
-    if (config.cipherKey) {
-        stringifiedPayload = crypto.encrypt(stringifiedPayload);
+    if (modules.cryptoModule) {
+        var encrypted = modules.cryptoModule.encrypt(stringifiedPayload);
+        stringifiedPayload = typeof encrypted === 'string' ? encrypted : (0, base64_codec_1.encode)(encrypted);
         stringifiedPayload = JSON.stringify(stringifiedPayload);
     }
-    return stringifiedPayload;
+    return stringifiedPayload || '';
 }
 function getOperation() {
     return operations_1.default.PNPublishOperation;
 }
 exports.getOperation = getOperation;
diff --git a/lib/core/pubnub-common.js b/lib/core/pubnub-common.js
index 804ecc67..23aac74b 100644
--- a/lib/core/pubnub-common.js
+++ b/lib/core/pubnub-common.js
@@ -58,10 +58,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
     return (mod && mod.__esModule) ? mod : { "default": mod };
 };
 Object.defineProperty(exports, "__esModule", { value: true });
 var config_1 = __importDefault(require("./components/config"));
 var index_1 = __importDefault(require("./components/cryptography/index"));
+var base64_codec_1 = require("./components/base64_codec");
 var subscription_manager_1 = __importDefault(require("./components/subscription_manager"));
 var telemetry_manager_1 = __importDefault(require("./components/telemetry_manager"));
 var push_payload_1 = __importDefault(require("./components/push_payload"));
 var listener_manager_1 = __importDefault(require("./components/listener_manager"));
 var token_manager_1 = __importDefault(require("./components/token_manager"));
@@ -139,22 +140,36 @@ var default_1 = /** @class */ (function () {
         this._tokenManager = tokenManager;
         var telemetryManager = new telemetry_manager_1.default({
             maximumSamplesCount: 60000,
         });
         this._telemetryManager = telemetryManager;
+        var cryptoModule = this._config.cryptoModule;
         var modules = {
             config: config,
             networking: networking,
             crypto: crypto,
             cryptography: cryptography,
             tokenManager: tokenManager,
             telemetryManager: telemetryManager,
             PubNubFile: setup.PubNubFile,
+            cryptoModule: cryptoModule,
         };
         this.File = setup.PubNubFile;
-        this.encryptFile = function (key, file) { return cryptography.encryptFile(key, file, _this.File); };
-        this.decryptFile = function (key, file) { return cryptography.decryptFile(key, file, _this.File); };
+        this.encryptFile = function (key, file) {
+            if (arguments.length == 1 && typeof key != 'string' && modules.cryptoModule) {
+                file = key;
+                return modules.cryptoModule.encryptFile(file, this.File);
+            }
+            return cryptography.encryptFile(key, file, this.File);
+        };
+        this.decryptFile = function (key, file) {
+            if (arguments.length == 1 && typeof key != 'string' && modules.cryptoModule) {
+                file = key;
+                return modules.cryptoModule.decryptFile(file, this.File);
+            }
+            return cryptography.decryptFile(key, file, this.File);
+        };
         var timeEndpoint = endpoint_1.default.bind(this, modules, timeEndpointConfig);
         var leaveEndpoint = endpoint_1.default.bind(this, modules, presenceLeaveEndpointConfig);
         var heartbeatEndpoint = endpoint_1.default.bind(this, modules, presenceHeartbeatEndpointConfig);
         var setStateEndpoint = endpoint_1.default.bind(this, modules, presenceSetStateConfig);
         var subscribeEndpoint = endpoint_1.default.bind(this, modules, subscribeEndpointConfig);
@@ -181,10 +196,11 @@ var default_1 = /** @class */ (function () {
                 subscribeEndpoint: subscribeEndpoint,
                 crypto: modules.crypto,
                 config: modules.config,
                 listenerManager: listenerManager,
                 getFileUrl: function (params) { return (0, get_file_url_1.default)(modules, params); },
+                cryptoModule: modules.cryptoModule,
             });
             this.subscribe = subscriptionManager_1.adaptSubscribeChange.bind(subscriptionManager_1);
             this.unsubscribe = subscriptionManager_1.adaptUnsubscribeChange.bind(subscriptionManager_1);
             this.disconnect = subscriptionManager_1.disconnect.bind(subscriptionManager_1);
             this.reconnect = subscriptionManager_1.reconnect.bind(subscriptionManager_1);
@@ -470,22 +486,39 @@ var default_1 = /** @class */ (function () {
         this.time = timeEndpoint;
         // --- deprecated  ------------------
         this.stop = this.destroy; // --------
         // --- deprecated  ------------------
         // mount crypto
-        this.encrypt = crypto.encrypt.bind(crypto);
-        this.decrypt = crypto.decrypt.bind(crypto);
+        this.encrypt = function (data, key) {
+            if (typeof key === 'undefined' && modules.cryptoModule) {
+                var encrypted = modules.cryptoModule.encrypt(data);
+                return typeof encrypted === 'string' ? encrypted : (0, base64_codec_1.encode)(encrypted);
+            }
+            else {
+                return crypto.encrypt(data, key);
+            }
+        };
+        this.decrypt = function (data, key) {
+            if (typeof key === 'undefined' && cryptoModule) {
+                var decrypted = modules.cryptoModule.decrypt(data);
+                return decrypted instanceof ArrayBuffer ? (0, base64_codec_1.encode)(decrypted) : decrypted;
+            }
+            else {
+                return crypto.decrypt(data, key);
+            }
+        };
         /* config */
         this.getAuthKey = modules.config.getAuthKey.bind(modules.config);
         this.setAuthKey = modules.config.setAuthKey.bind(modules.config);
-        this.setCipherKey = modules.config.setCipherKey.bind(modules.config);
         this.getUUID = modules.config.getUUID.bind(modules.config);
         this.setUUID = modules.config.setUUID.bind(modules.config);
         this.getUserId = modules.config.getUserId.bind(modules.config);
         this.setUserId = modules.config.setUserId.bind(modules.config);
         this.getFilterExpression = modules.config.getFilterExpression.bind(modules.config);
         this.setFilterExpression = modules.config.setFilterExpression.bind(modules.config);
+        // this.setCipherKey = modules.config.setCipherKey.bind(modules.config);
+        this.setCipherKey = function (key) { return modules.config.setCipherKey(key, setup, modules); };
         this.setHeartbeatInterval = modules.config.setHeartbeatInterval.bind(modules.config);
         if (networking.hasModule('proxy')) {
             this.setProxy = function (proxy) {
                 modules.config.setProxy(proxy);
                 _this.reconnect();
diff --git a/lib/core/utils.js b/lib/core/utils.js
index 7c14a4a8..3859102b 100644
--- a/lib/core/utils.js
+++ b/lib/core/utils.js
@@ -24,11 +24,20 @@ function createPromise() {
         successResolve = fulfill;
         failureResolve = reject;
     });
     return { promise: promise, reject: failureResolve, fulfill: successResolve };
 }
+function stringToArrayBuffer(str) {
+    var buf = new ArrayBuffer(str.length * 2);
+    var bufView = new Uint16Array(buf);
+    for (var i = 0, strLen = str.length; i < strLen; i++) {
+        bufView[i] = str.charCodeAt(i);
+    }
+    return buf;
+}
 module.exports = {
     signPamFromParams: signPamFromParams,
     endsWith: endsWith,
     createPromise: createPromise,
     encodeString: encodeString,
+    stringToArrayBuffer: stringToArrayBuffer,
 };
diff --git a/lib/crypto/modules/NodeCryptoModule/ICryptor.js b/lib/crypto/modules/NodeCryptoModule/ICryptor.js
new file mode 100644
index 00000000..c8ad2e54
--- /dev/null
+++ b/lib/crypto/modules/NodeCryptoModule/ICryptor.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/lib/crypto/modules/NodeCryptoModule/ILegacyCryptor.js b/lib/crypto/modules/NodeCryptoModule/ILegacyCryptor.js
new file mode 100644
index 00000000..c8ad2e54
--- /dev/null
+++ b/lib/crypto/modules/NodeCryptoModule/ILegacyCryptor.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/lib/crypto/modules/NodeCryptoModule/NodeCryptoModule.js b/lib/crypto/modules/NodeCryptoModule/NodeCryptoModule.js
new file mode 100644
index 00000000..fdaef2d9
--- /dev/null
+++ b/lib/crypto/modules/NodeCryptoModule/NodeCryptoModule.js
@@ -0,0 +1,446 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+    function verb(n) { return function (v) { return step([n, v]); }; }
+    function step(op) {
+        if (f) throw new TypeError("Generator is already executing.");
+        while (_) try {
+            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+            if (y = 0, t) op = [op[0] & 2, t.value];
+            switch (op[0]) {
+                case 0: case 1: t = op; break;
+                case 4: _.label++; return { value: op[1], done: false };
+                case 5: _.label++; y = op[1]; op = [0]; continue;
+                case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                default:
+                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                    if (t[2]) _.ops.pop();
+                    _.trys.pop(); continue;
+            }
+            op = body.call(thisArg, _);
+        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+    }
+};
+var __read = (this && this.__read) || function (o, n) {
+    var m = typeof Symbol === "function" && o[Symbol.iterator];
+    if (!m) return o;
+    var i = m.call(o), r, ar = [], e;
+    try {
+        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+    }
+    catch (error) { e = { error: error }; }
+    finally {
+        try {
+            if (r && !r.done && (m = i["return"])) m.call(i);
+        }
+        finally { if (e) throw e.error; }
+    }
+    return ar;
+};
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CryptoModule = exports.AesCbcCryptor = exports.LegacyCryptor = void 0;
+var stream_1 = require("stream");
+var base64_codec_1 = require("../../../core/components/base64_codec");
+var legacyCryptor_1 = __importDefault(require("./legacyCryptor"));
+exports.LegacyCryptor = legacyCryptor_1.default;
+var aesCbcCryptor_1 = __importDefault(require("./aesCbcCryptor"));
+exports.AesCbcCryptor = aesCbcCryptor_1.default;
+var CryptoModule = /** @class */ (function () {
+    function CryptoModule(cryptoModuleConfiguration) {
+        var _a;
+        this.defaultCryptor = cryptoModuleConfiguration.default;
+        this.cryptors = (_a = cryptoModuleConfiguration.cryptors) !== null && _a !== void 0 ? _a : [];
+    }
+    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+    // @ts-ignore: type detection issue with old Config type assignment
+    CryptoModule.legacyCryptoModule = function (config) {
+        var _a;
+        return new this({
+            default: new legacyCryptor_1.default({
+                cipherKey: config.cipherKey,
+                useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
+            }),
+            cryptors: [new aesCbcCryptor_1.default({ cipherKey: config.cipherKey })],
+        });
+    };
+    CryptoModule.aesCbcCryptoModule = function (config) {
+        var _a;
+        return new this({
+            default: new aesCbcCryptor_1.default({ cipherKey: config.cipherKey }),
+            cryptors: [
+                new legacyCryptor_1.default({
+                    cipherKey: config.cipherKey,
+                    useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
+                }),
+            ],
+        });
+    };
+    CryptoModule.withDefaultCryptor = function (defaultCryptor) {
+        return new this({ default: defaultCryptor });
+    };
+    CryptoModule.prototype.getAllCryptors = function () {
+        return __spreadArray([this.defaultCryptor], __read(this.cryptors), false);
+    };
+    CryptoModule.prototype.getLegacyCryptor = function () {
+        return this.getAllCryptors().find(function (c) { return c.identifier === ''; });
+    };
+    CryptoModule.prototype.encrypt = function (data) {
+        var encrypted = this.defaultCryptor.encrypt(data);
+        if (!encrypted.metadata)
+            return encrypted.data;
+        var header = CryptorHeader.from(this.defaultCryptor.identifier, encrypted.metadata);
+        var headerData = new Uint8Array(header.length);
+        var pos = 0;
+        headerData.set(header.data, pos);
+        pos = header.length - encrypted.metadata.length;
+        headerData.set(encrypted.metadata, pos);
+        return Buffer.concat([headerData, Buffer.from(encrypted.data)]);
+    };
+    CryptoModule.prototype.decrypt = function (data) {
+        var encryptedData = Buffer.from(typeof data === 'string' ? (0, base64_codec_1.decode)(data) : data);
+        var header = CryptorHeader.tryParse(encryptedData);
+        var cryptor = this.getCryptor(header);
+        var metadata = header.length > 0
+            ? encryptedData.slice(header.length - header.metadataLength, header.length)
+            : null;
+        if (encryptedData.slice(header.length).byteLength <= 0)
+            throw new Error('decryption error. empty content');
+        return cryptor.decrypt({
+            data: encryptedData.slice(header.length),
+            metadata: metadata,
+        });
+    };
+    CryptoModule.prototype.encryptFile = function (file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            var encryptedStream, header, payload, pos, output;
+            return __generator(this, function (_a) {
+                switch (_a.label) {
+                    case 0:
+                        /**
+                         * Files handled differently in case of Legacy cryptor.
+                         * (as long as we support legacy need to check on intsance type)
+                         */
+                        if (this.defaultCryptor.identifier === CryptorHeader.LEGACY_IDENTIFIER)
+                            return [2 /*return*/, this.defaultCryptor.encryptFile(file, File)];
+                        if (file.data instanceof Buffer) {
+                            return [2 /*return*/, File.create({
+                                    name: file.name,
+                                    mimeType: 'application/octet-stream',
+                                    data: Buffer.from(this.encrypt(file.data)),
+                                })];
+                        }
+                        if (!(file.data instanceof stream_1.Readable)) return [3 /*break*/, 2];
+                        if (file.contentLength === 0)
+                            throw new Error('encryption error. empty content');
+                        return [4 /*yield*/, this.defaultCryptor.encryptStream(file.data)];
+                    case 1:
+                        encryptedStream = _a.sent();
+                        header = CryptorHeader.from(this.defaultCryptor.identifier, encryptedStream.metadata);
+                        payload = new Uint8Array(header.length);
+                        pos = 0;
+                        payload.set(header.data, pos);
+                        pos += header.length;
+                        if (encryptedStream.metadata) {
+                            pos -= encryptedStream.metadata.length;
+                            payload.set(encryptedStream.metadata, pos);
+                        }
+                        output = new stream_1.PassThrough();
+                        output.write(payload);
+                        encryptedStream.stream.pipe(output);
+                        return [2 /*return*/, File.create({
+                                name: file.name,
+                                mimeType: 'application/octet-stream',
+                                stream: output,
+                            })];
+                    case 2: return [2 /*return*/];
+                }
+            });
+        });
+    };
+    CryptoModule.prototype.decryptFile = function (file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            var header, cryptor, stream_2;
+            var _this = this;
+            return __generator(this, function (_a) {
+                if ((file === null || file === void 0 ? void 0 : file.data) instanceof Buffer) {
+                    header = CryptorHeader.tryParse(file.data);
+                    cryptor = this.getCryptor(header);
+                    /**
+                     * If It's legacyone then redirect it.
+                     * (as long as we support legacy need to check on instance type)
+                     */
+                    if ((cryptor === null || cryptor === void 0 ? void 0 : cryptor.identifier) === CryptoModule.LEGACY_IDENTIFIER)
+                        return [2 /*return*/, cryptor.decryptFile(file, File)];
+                    return [2 /*return*/, File.create({
+                            name: file.name,
+                            data: Buffer.from(this.decrypt(file === null || file === void 0 ? void 0 : file.data)),
+                        })];
+                }
+                if (file.data instanceof stream_1.Readable) {
+                    stream_2 = file.data;
+                    return [2 /*return*/, new Promise(function (resolve) {
+                            stream_2.on('readable', function () { return resolve(_this.onStreamReadable(stream_2, file, File)); });
+                        })];
+                }
+                return [2 /*return*/];
+            });
+        });
+    };
+    CryptoModule.prototype.onStreamReadable = function (stream, file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            var magicBytes, versionByte, identifier, cryptor, headerSize, _a, _b;
+            var _c;
+            return __generator(this, function (_d) {
+                switch (_d.label) {
+                    case 0:
+                        stream.removeAllListeners('readable');
+                        magicBytes = stream.read(4);
+                        if (!CryptorHeader.isSentinel(magicBytes)) {
+                            if (magicBytes === null)
+                                throw new Error('decryption error. empty content');
+                            stream.unshift(magicBytes);
+                            return [2 /*return*/, this.decryptLegacyFileStream(stream, file, File)];
+                        }
+                        versionByte = stream.read(1);
+                        CryptorHeader.validateVersion(versionByte[0]);
+                        identifier = stream.read(4);
+                        cryptor = this.getCryptorFromId(CryptorHeader.tryGetIdentifier(identifier));
+                        headerSize = CryptorHeader.tryGetMetadataSizeFromStream(stream);
+                        if (file.contentLength <= CryptorHeader.MIN_HEADER_LEGTH + headerSize)
+                            throw new Error('decryption error. empty content');
+                        _b = (_a = File).create;
+                        _c = {
+                            name: file.name,
+                            mimeType: 'application/octet-stream'
+                        };
+                        return [4 /*yield*/, cryptor.decryptStream({ stream: stream, metadataLength: headerSize })];
+                    case 1: return [2 /*return*/, _b.apply(_a, [(_c.stream = _d.sent(),
+                                _c)])];
+                }
+            });
+        });
+    };
+    CryptoModule.prototype.decryptLegacyFileStream = function (stream, file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            var cryptor;
+            return __generator(this, function (_a) {
+                if (file.contentLength <= 16)
+                    throw new Error('decryption error: empty content');
+                cryptor = this.getLegacyCryptor();
+                if (cryptor) {
+                    return [2 /*return*/, cryptor.decryptFile(File.create({
+                            name: file.name,
+                            stream: stream,
+                        }), File)];
+                }
+                else {
+                    throw new Error('unknown cryptor error');
+                }
+                return [2 /*return*/];
+            });
+        });
+    };
+    CryptoModule.prototype.getCryptor = function (header) {
+        if (header === '') {
+            var cryptor = this.getAllCryptors().find(function (c) { return c.identifier === ''; });
+            if (cryptor)
+                return cryptor;
+            throw new Error('unknown cryptor error');
+        }
+        else if (header instanceof CryptorHeaderV1) {
+            return this.getCryptorFromId(header.identifier);
+        }
+    };
+    CryptoModule.prototype.getCryptorFromId = function (id) {
+        var cryptor = this.getAllCryptors().find(function (c) { return id === c.identifier; });
+        if (cryptor) {
+            return cryptor;
+        }
+        throw new Error('unknown cryptor error');
+    };
+    CryptoModule.LEGACY_IDENTIFIER = '';
+    return CryptoModule;
+}());
+exports.CryptoModule = CryptoModule;
+// CryptorHeader Utility
+var CryptorHeader = /** @class */ (function () {
+    function CryptorHeader() {
+    }
+    CryptorHeader.from = function (id, metadata) {
+        if (id === CryptorHeader.LEGACY_IDENTIFIER)
+            return;
+        return new CryptorHeaderV1(id, metadata.length);
+    };
+    CryptorHeader.isSentinel = function (bytes) {
+        if (bytes && bytes.byteLength >= 4) {
+            if (bytes.toString('utf8') == CryptorHeader.SENTINEL)
+                return true;
+        }
+    };
+    CryptorHeader.validateVersion = function (data) {
+        if (data && data > CryptorHeader.MAX_VERSION)
+            throw new Error('decryption error. invalid header version');
+        return data;
+    };
+    CryptorHeader.tryGetIdentifier = function (data) {
+        if (data.byteLength < 4) {
+            throw new Error('unknown cryptor error. decryption failed');
+        }
+        else {
+            return data.toString('utf8');
+        }
+    };
+    CryptorHeader.tryGetMetadataSizeFromStream = function (stream) {
+        var sizeBuf = stream.read(1);
+        if (sizeBuf && sizeBuf[0] < 255) {
+            return sizeBuf[0];
+        }
+        if (sizeBuf[0] === 255) {
+            var nextBuf = stream.read(2);
+            if (nextBuf.length >= 2) {
+                return new Uint16Array([nextBuf[0], nextBuf[1]]).reduce(function (acc, val) { return (acc << 8) + val; }, 0);
+            }
+        }
+        throw new Error('decryption error. Invalid metadata size');
+    };
+    CryptorHeader.tryParse = function (encryptedData) {
+        var sentinel = '';
+        var version = null;
+        if (encryptedData.length >= 4) {
+            sentinel = encryptedData.slice(0, 4);
+            if (sentinel.toString('utf8') !== CryptorHeader.SENTINEL)
+                return '';
+        }
+        if (encryptedData.length >= 5) {
+            version = encryptedData[4];
+        }
+        else {
+            throw new Error('decryption error. invalid header version');
+        }
+        if (version > CryptorHeader.MAX_VERSION)
+            throw new Error('unknown cryptor error');
+        var identifier;
+        var pos = 5 + CryptorHeader.IDENTIFIER_LENGTH;
+        if (encryptedData.length >= pos) {
+            identifier = encryptedData.slice(5, pos);
+        }
+        else {
+            throw new Error('decryption error. invalid crypto identifier');
+        }
+        var metadataLength = null;
+        if (encryptedData.length >= pos + 1) {
+            metadataLength = encryptedData[pos];
+        }
+        else {
+            throw new Error('decryption error. invalid metadata length');
+        }
+        pos += 1;
+        if (metadataLength === 255 && encryptedData.length >= pos + 2) {
+            metadataLength = new Uint16Array(encryptedData.slice(pos, pos + 2)).reduce(function (acc, val) { return (acc << 8) + val; }, 0);
+            pos += 2;
+        }
+        return new CryptorHeaderV1(identifier.toString('utf8'), metadataLength);
+    };
+    CryptorHeader.SENTINEL = 'PNED';
+    CryptorHeader.LEGACY_IDENTIFIER = '';
+    CryptorHeader.IDENTIFIER_LENGTH = 4;
+    CryptorHeader.VERSION = 1;
+    CryptorHeader.MAX_VERSION = 1;
+    CryptorHeader.MIN_HEADER_LEGTH = 10;
+    return CryptorHeader;
+}());
+// v1 CryptorHeader
+var CryptorHeaderV1 = /** @class */ (function () {
+    function CryptorHeaderV1(id, metadataLength) {
+        this._identifier = id;
+        this._metadataLength = metadataLength;
+    }
+    Object.defineProperty(CryptorHeaderV1.prototype, "identifier", {
+        get: function () {
+            return this._identifier;
+        },
+        set: function (value) {
+            this._identifier = value;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(CryptorHeaderV1.prototype, "metadataLength", {
+        get: function () {
+            return this._metadataLength;
+        },
+        set: function (value) {
+            this._metadataLength = value;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(CryptorHeaderV1.prototype, "version", {
+        get: function () {
+            return CryptorHeader.VERSION;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(CryptorHeaderV1.prototype, "length", {
+        get: function () {
+            return (CryptorHeader.SENTINEL.length +
+                1 +
+                CryptorHeader.IDENTIFIER_LENGTH +
+                (this.metadataLength < 255 ? 1 : 3) +
+                this.metadataLength);
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(CryptorHeaderV1.prototype, "data", {
+        get: function () {
+            var pos = 0;
+            var header = new Uint8Array(this.length);
+            header.set(Buffer.from(CryptorHeader.SENTINEL));
+            pos += CryptorHeader.SENTINEL.length;
+            header[pos] = this.version;
+            pos++;
+            if (this.identifier)
+                header.set(Buffer.from(this.identifier), pos);
+            pos += CryptorHeader.IDENTIFIER_LENGTH;
+            var metadataLength = this.metadataLength;
+            if (metadataLength < 255) {
+                header[pos] = metadataLength;
+            }
+            else {
+                header.set([255, metadataLength >> 8, metadataLength & 0xff], pos);
+            }
+            return header;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    return CryptorHeaderV1;
+}());
diff --git a/lib/crypto/modules/NodeCryptoModule/aesCbcCryptor.js b/lib/crypto/modules/NodeCryptoModule/aesCbcCryptor.js
new file mode 100644
index 00000000..613e8cfe
--- /dev/null
+++ b/lib/crypto/modules/NodeCryptoModule/aesCbcCryptor.js
@@ -0,0 +1,146 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+    function verb(n) { return function (v) { return step([n, v]); }; }
+    function step(op) {
+        if (f) throw new TypeError("Generator is already executing.");
+        while (_) try {
+            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+            if (y = 0, t) op = [op[0] & 2, t.value];
+            switch (op[0]) {
+                case 0: case 1: t = op; break;
+                case 4: _.label++; return { value: op[1], done: false };
+                case 5: _.label++; y = op[1]; op = [0]; continue;
+                case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                default:
+                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                    if (t[2]) _.ops.pop();
+                    _.trys.pop(); continue;
+            }
+            op = body.call(thisArg, _);
+        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+    }
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var stream_1 = require("stream");
+var crypto_1 = require("crypto");
+var AesCbcCryptor = /** @class */ (function () {
+    function AesCbcCryptor(configuration) {
+        this.cipherKey = configuration.cipherKey;
+    }
+    Object.defineProperty(AesCbcCryptor.prototype, "algo", {
+        get: function () {
+            return 'aes-256-cbc';
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(AesCbcCryptor.prototype, "identifier", {
+        get: function () {
+            return 'ACRH';
+        },
+        enumerable: false,
+        configurable: true
+    });
+    AesCbcCryptor.prototype.getIv = function () {
+        return (0, crypto_1.randomBytes)(AesCbcCryptor.BLOCK_SIZE);
+    };
+    AesCbcCryptor.prototype.getKey = function () {
+        var sha = (0, crypto_1.createHash)('sha256');
+        sha.update(Buffer.from(this.cipherKey, 'utf8'));
+        return Buffer.from(sha.digest());
+    };
+    AesCbcCryptor.prototype.encrypt = function (data) {
+        var iv = this.getIv();
+        var key = this.getKey();
+        var plainData = typeof data === 'string' ? new TextEncoder().encode(data) : data;
+        var bPlain = Buffer.from(plainData);
+        if (bPlain.byteLength === 0)
+            throw new Error('encryption error. empty content');
+        var aes = (0, crypto_1.createCipheriv)(this.algo, key, iv);
+        return {
+            metadata: iv,
+            data: Buffer.concat([aes.update(bPlain), aes.final()]),
+        };
+    };
+    AesCbcCryptor.prototype.decrypt = function (encryptedData) {
+        var data = typeof encryptedData.data === 'string' ? new TextEncoder().encode(encryptedData.data) : encryptedData.data;
+        if (data.byteLength <= 0)
+            throw new Error('decryption error: empty content');
+        var aes = (0, crypto_1.createDecipheriv)(this.algo, this.getKey(), encryptedData.metadata);
+        return Uint8Array.from(Buffer.concat([aes.update(data), aes.final()])).buffer;
+    };
+    AesCbcCryptor.prototype.encryptStream = function (stream) {
+        return __awaiter(this, void 0, void 0, function () {
+            var output, bIv, aes;
+            return __generator(this, function (_a) {
+                output = new stream_1.PassThrough();
+                bIv = this.getIv();
+                if (stream.readable === false)
+                    throw new Error('encryption error. empty stream');
+                aes = (0, crypto_1.createCipheriv)(this.algo, this.getKey(), bIv);
+                stream.pipe(aes).pipe(output);
+                return [2 /*return*/, {
+                        stream: output,
+                        metadata: bIv,
+                        metadataLength: AesCbcCryptor.BLOCK_SIZE,
+                    }];
+            });
+        });
+    };
+    AesCbcCryptor.prototype.decryptStream = function (encryptedStream) {
+        return __awaiter(this, void 0, void 0, function () {
+            var decryptedStream, bIv, aes, onReadable;
+            var _this = this;
+            return __generator(this, function (_a) {
+                decryptedStream = new stream_1.PassThrough();
+                bIv = Buffer.alloc(0);
+                aes = null;
+                onReadable = function () {
+                    var data = encryptedStream.stream.read();
+                    while (data !== null) {
+                        if (data) {
+                            var bChunk = Buffer.from(data);
+                            var sliceLen = encryptedStream.metadataLength - bIv.byteLength;
+                            if (bChunk.byteLength < sliceLen) {
+                                bIv = Buffer.concat([bIv, bChunk]);
+                            }
+                            else {
+                                bIv = Buffer.concat([bIv, bChunk.slice(0, sliceLen)]);
+                                aes = (0, crypto_1.createDecipheriv)(_this.algo, _this.getKey(), bIv);
+                                aes.pipe(decryptedStream);
+                                aes.write(bChunk.slice(sliceLen));
+                            }
+                        }
+                        data = encryptedStream.stream.read();
+                    }
+                };
+                encryptedStream.stream.on('readable', onReadable);
+                encryptedStream.stream.on('end', function () {
+                    if (aes) {
+                        aes.end();
+                    }
+                    decryptedStream.end();
+                });
+                return [2 /*return*/, decryptedStream];
+            });
+        });
+    };
+    AesCbcCryptor.BLOCK_SIZE = 16;
+    return AesCbcCryptor;
+}());
+exports.default = AesCbcCryptor;
diff --git a/lib/crypto/modules/NodeCryptoModule/legacyCryptor.js b/lib/crypto/modules/NodeCryptoModule/legacyCryptor.js
new file mode 100644
index 00000000..21273869
--- /dev/null
+++ b/lib/crypto/modules/NodeCryptoModule/legacyCryptor.js
@@ -0,0 +1,86 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+    function verb(n) { return function (v) { return step([n, v]); }; }
+    function step(op) {
+        if (f) throw new TypeError("Generator is already executing.");
+        while (_) try {
+            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+            if (y = 0, t) op = [op[0] & 2, t.value];
+            switch (op[0]) {
+                case 0: case 1: t = op; break;
+                case 4: _.label++; return { value: op[1], done: false };
+                case 5: _.label++; y = op[1]; op = [0]; continue;
+                case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                default:
+                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                    if (t[2]) _.ops.pop();
+                    _.trys.pop(); continue;
+            }
+            op = body.call(thisArg, _);
+        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+    }
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var index_1 = __importDefault(require("../../../core/components/cryptography/index"));
+var base64_codec_1 = require("../../../core/components/base64_codec");
+var node_1 = __importDefault(require("../node"));
+var LegacyCryptor = /** @class */ (function () {
+    function LegacyCryptor(config) {
+        this.config = config;
+        this.cryptor = new index_1.default({ config: config });
+        this.fileCryptor = new node_1.default();
+    }
+    Object.defineProperty(LegacyCryptor.prototype, "identifier", {
+        get: function () {
+            return '';
+        },
+        enumerable: false,
+        configurable: true
+    });
+    LegacyCryptor.prototype.encrypt = function (data) {
+        if (data.length === 0)
+            throw new Error('encryption error. empty content');
+        return {
+            data: this.cryptor.encrypt(data),
+            metadata: null,
+        };
+    };
+    LegacyCryptor.prototype.decrypt = function (encryptedData) {
+        var data = typeof encryptedData.data === 'string' ? encryptedData.data : (0, base64_codec_1.encode)(encryptedData.data);
+        return this.cryptor.decrypt(data);
+    };
+    LegacyCryptor.prototype.encryptFile = function (file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            return __generator(this, function (_a) {
+                return [2 /*return*/, this.fileCryptor.encryptFile(this.config.cipherKey, file, File)];
+            });
+        });
+    };
+    LegacyCryptor.prototype.decryptFile = function (file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            return __generator(this, function (_a) {
+                return [2 /*return*/, this.fileCryptor.decryptFile(this.config.cipherKey, file, File)];
+            });
+        });
+    };
+    return LegacyCryptor;
+}());
+exports.default = LegacyCryptor;
diff --git a/lib/crypto/modules/NodeCryptoModule/nodeCryptoModule.js b/lib/crypto/modules/NodeCryptoModule/nodeCryptoModule.js
new file mode 100644
index 00000000..fdaef2d9
--- /dev/null
+++ b/lib/crypto/modules/NodeCryptoModule/nodeCryptoModule.js
@@ -0,0 +1,446 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+    function verb(n) { return function (v) { return step([n, v]); }; }
+    function step(op) {
+        if (f) throw new TypeError("Generator is already executing.");
+        while (_) try {
+            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+            if (y = 0, t) op = [op[0] & 2, t.value];
+            switch (op[0]) {
+                case 0: case 1: t = op; break;
+                case 4: _.label++; return { value: op[1], done: false };
+                case 5: _.label++; y = op[1]; op = [0]; continue;
+                case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                default:
+                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                    if (t[2]) _.ops.pop();
+                    _.trys.pop(); continue;
+            }
+            op = body.call(thisArg, _);
+        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+    }
+};
+var __read = (this && this.__read) || function (o, n) {
+    var m = typeof Symbol === "function" && o[Symbol.iterator];
+    if (!m) return o;
+    var i = m.call(o), r, ar = [], e;
+    try {
+        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+    }
+    catch (error) { e = { error: error }; }
+    finally {
+        try {
+            if (r && !r.done && (m = i["return"])) m.call(i);
+        }
+        finally { if (e) throw e.error; }
+    }
+    return ar;
+};
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CryptoModule = exports.AesCbcCryptor = exports.LegacyCryptor = void 0;
+var stream_1 = require("stream");
+var base64_codec_1 = require("../../../core/components/base64_codec");
+var legacyCryptor_1 = __importDefault(require("./legacyCryptor"));
+exports.LegacyCryptor = legacyCryptor_1.default;
+var aesCbcCryptor_1 = __importDefault(require("./aesCbcCryptor"));
+exports.AesCbcCryptor = aesCbcCryptor_1.default;
+var CryptoModule = /** @class */ (function () {
+    function CryptoModule(cryptoModuleConfiguration) {
+        var _a;
+        this.defaultCryptor = cryptoModuleConfiguration.default;
+        this.cryptors = (_a = cryptoModuleConfiguration.cryptors) !== null && _a !== void 0 ? _a : [];
+    }
+    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+    // @ts-ignore: type detection issue with old Config type assignment
+    CryptoModule.legacyCryptoModule = function (config) {
+        var _a;
+        return new this({
+            default: new legacyCryptor_1.default({
+                cipherKey: config.cipherKey,
+                useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
+            }),
+            cryptors: [new aesCbcCryptor_1.default({ cipherKey: config.cipherKey })],
+        });
+    };
+    CryptoModule.aesCbcCryptoModule = function (config) {
+        var _a;
+        return new this({
+            default: new aesCbcCryptor_1.default({ cipherKey: config.cipherKey }),
+            cryptors: [
+                new legacyCryptor_1.default({
+                    cipherKey: config.cipherKey,
+                    useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
+                }),
+            ],
+        });
+    };
+    CryptoModule.withDefaultCryptor = function (defaultCryptor) {
+        return new this({ default: defaultCryptor });
+    };
+    CryptoModule.prototype.getAllCryptors = function () {
+        return __spreadArray([this.defaultCryptor], __read(this.cryptors), false);
+    };
+    CryptoModule.prototype.getLegacyCryptor = function () {
+        return this.getAllCryptors().find(function (c) { return c.identifier === ''; });
+    };
+    CryptoModule.prototype.encrypt = function (data) {
+        var encrypted = this.defaultCryptor.encrypt(data);
+        if (!encrypted.metadata)
+            return encrypted.data;
+        var header = CryptorHeader.from(this.defaultCryptor.identifier, encrypted.metadata);
+        var headerData = new Uint8Array(header.length);
+        var pos = 0;
+        headerData.set(header.data, pos);
+        pos = header.length - encrypted.metadata.length;
+        headerData.set(encrypted.metadata, pos);
+        return Buffer.concat([headerData, Buffer.from(encrypted.data)]);
+    };
+    CryptoModule.prototype.decrypt = function (data) {
+        var encryptedData = Buffer.from(typeof data === 'string' ? (0, base64_codec_1.decode)(data) : data);
+        var header = CryptorHeader.tryParse(encryptedData);
+        var cryptor = this.getCryptor(header);
+        var metadata = header.length > 0
+            ? encryptedData.slice(header.length - header.metadataLength, header.length)
+            : null;
+        if (encryptedData.slice(header.length).byteLength <= 0)
+            throw new Error('decryption error. empty content');
+        return cryptor.decrypt({
+            data: encryptedData.slice(header.length),
+            metadata: metadata,
+        });
+    };
+    CryptoModule.prototype.encryptFile = function (file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            var encryptedStream, header, payload, pos, output;
+            return __generator(this, function (_a) {
+                switch (_a.label) {
+                    case 0:
+                        /**
+                         * Files handled differently in case of Legacy cryptor.
+                         * (as long as we support legacy need to check on intsance type)
+                         */
+                        if (this.defaultCryptor.identifier === CryptorHeader.LEGACY_IDENTIFIER)
+                            return [2 /*return*/, this.defaultCryptor.encryptFile(file, File)];
+                        if (file.data instanceof Buffer) {
+                            return [2 /*return*/, File.create({
+                                    name: file.name,
+                                    mimeType: 'application/octet-stream',
+                                    data: Buffer.from(this.encrypt(file.data)),
+                                })];
+                        }
+                        if (!(file.data instanceof stream_1.Readable)) return [3 /*break*/, 2];
+                        if (file.contentLength === 0)
+                            throw new Error('encryption error. empty content');
+                        return [4 /*yield*/, this.defaultCryptor.encryptStream(file.data)];
+                    case 1:
+                        encryptedStream = _a.sent();
+                        header = CryptorHeader.from(this.defaultCryptor.identifier, encryptedStream.metadata);
+                        payload = new Uint8Array(header.length);
+                        pos = 0;
+                        payload.set(header.data, pos);
+                        pos += header.length;
+                        if (encryptedStream.metadata) {
+                            pos -= encryptedStream.metadata.length;
+                            payload.set(encryptedStream.metadata, pos);
+                        }
+                        output = new stream_1.PassThrough();
+                        output.write(payload);
+                        encryptedStream.stream.pipe(output);
+                        return [2 /*return*/, File.create({
+                                name: file.name,
+                                mimeType: 'application/octet-stream',
+                                stream: output,
+                            })];
+                    case 2: return [2 /*return*/];
+                }
+            });
+        });
+    };
+    CryptoModule.prototype.decryptFile = function (file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            var header, cryptor, stream_2;
+            var _this = this;
+            return __generator(this, function (_a) {
+                if ((file === null || file === void 0 ? void 0 : file.data) instanceof Buffer) {
+                    header = CryptorHeader.tryParse(file.data);
+                    cryptor = this.getCryptor(header);
+                    /**
+                     * If It's legacyone then redirect it.
+                     * (as long as we support legacy need to check on instance type)
+                     */
+                    if ((cryptor === null || cryptor === void 0 ? void 0 : cryptor.identifier) === CryptoModule.LEGACY_IDENTIFIER)
+                        return [2 /*return*/, cryptor.decryptFile(file, File)];
+                    return [2 /*return*/, File.create({
+                            name: file.name,
+                            data: Buffer.from(this.decrypt(file === null || file === void 0 ? void 0 : file.data)),
+                        })];
+                }
+                if (file.data instanceof stream_1.Readable) {
+                    stream_2 = file.data;
+                    return [2 /*return*/, new Promise(function (resolve) {
+                            stream_2.on('readable', function () { return resolve(_this.onStreamReadable(stream_2, file, File)); });
+                        })];
+                }
+                return [2 /*return*/];
+            });
+        });
+    };
+    CryptoModule.prototype.onStreamReadable = function (stream, file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            var magicBytes, versionByte, identifier, cryptor, headerSize, _a, _b;
+            var _c;
+            return __generator(this, function (_d) {
+                switch (_d.label) {
+                    case 0:
+                        stream.removeAllListeners('readable');
+                        magicBytes = stream.read(4);
+                        if (!CryptorHeader.isSentinel(magicBytes)) {
+                            if (magicBytes === null)
+                                throw new Error('decryption error. empty content');
+                            stream.unshift(magicBytes);
+                            return [2 /*return*/, this.decryptLegacyFileStream(stream, file, File)];
+                        }
+                        versionByte = stream.read(1);
+                        CryptorHeader.validateVersion(versionByte[0]);
+                        identifier = stream.read(4);
+                        cryptor = this.getCryptorFromId(CryptorHeader.tryGetIdentifier(identifier));
+                        headerSize = CryptorHeader.tryGetMetadataSizeFromStream(stream);
+                        if (file.contentLength <= CryptorHeader.MIN_HEADER_LEGTH + headerSize)
+                            throw new Error('decryption error. empty content');
+                        _b = (_a = File).create;
+                        _c = {
+                            name: file.name,
+                            mimeType: 'application/octet-stream'
+                        };
+                        return [4 /*yield*/, cryptor.decryptStream({ stream: stream, metadataLength: headerSize })];
+                    case 1: return [2 /*return*/, _b.apply(_a, [(_c.stream = _d.sent(),
+                                _c)])];
+                }
+            });
+        });
+    };
+    CryptoModule.prototype.decryptLegacyFileStream = function (stream, file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            var cryptor;
+            return __generator(this, function (_a) {
+                if (file.contentLength <= 16)
+                    throw new Error('decryption error: empty content');
+                cryptor = this.getLegacyCryptor();
+                if (cryptor) {
+                    return [2 /*return*/, cryptor.decryptFile(File.create({
+                            name: file.name,
+                            stream: stream,
+                        }), File)];
+                }
+                else {
+                    throw new Error('unknown cryptor error');
+                }
+                return [2 /*return*/];
+            });
+        });
+    };
+    CryptoModule.prototype.getCryptor = function (header) {
+        if (header === '') {
+            var cryptor = this.getAllCryptors().find(function (c) { return c.identifier === ''; });
+            if (cryptor)
+                return cryptor;
+            throw new Error('unknown cryptor error');
+        }
+        else if (header instanceof CryptorHeaderV1) {
+            return this.getCryptorFromId(header.identifier);
+        }
+    };
+    CryptoModule.prototype.getCryptorFromId = function (id) {
+        var cryptor = this.getAllCryptors().find(function (c) { return id === c.identifier; });
+        if (cryptor) {
+            return cryptor;
+        }
+        throw new Error('unknown cryptor error');
+    };
+    CryptoModule.LEGACY_IDENTIFIER = '';
+    return CryptoModule;
+}());
+exports.CryptoModule = CryptoModule;
+// CryptorHeader Utility
+var CryptorHeader = /** @class */ (function () {
+    function CryptorHeader() {
+    }
+    CryptorHeader.from = function (id, metadata) {
+        if (id === CryptorHeader.LEGACY_IDENTIFIER)
+            return;
+        return new CryptorHeaderV1(id, metadata.length);
+    };
+    CryptorHeader.isSentinel = function (bytes) {
+        if (bytes && bytes.byteLength >= 4) {
+            if (bytes.toString('utf8') == CryptorHeader.SENTINEL)
+                return true;
+        }
+    };
+    CryptorHeader.validateVersion = function (data) {
+        if (data && data > CryptorHeader.MAX_VERSION)
+            throw new Error('decryption error. invalid header version');
+        return data;
+    };
+    CryptorHeader.tryGetIdentifier = function (data) {
+        if (data.byteLength < 4) {
+            throw new Error('unknown cryptor error. decryption failed');
+        }
+        else {
+            return data.toString('utf8');
+        }
+    };
+    CryptorHeader.tryGetMetadataSizeFromStream = function (stream) {
+        var sizeBuf = stream.read(1);
+        if (sizeBuf && sizeBuf[0] < 255) {
+            return sizeBuf[0];
+        }
+        if (sizeBuf[0] === 255) {
+            var nextBuf = stream.read(2);
+            if (nextBuf.length >= 2) {
+                return new Uint16Array([nextBuf[0], nextBuf[1]]).reduce(function (acc, val) { return (acc << 8) + val; }, 0);
+            }
+        }
+        throw new Error('decryption error. Invalid metadata size');
+    };
+    CryptorHeader.tryParse = function (encryptedData) {
+        var sentinel = '';
+        var version = null;
+        if (encryptedData.length >= 4) {
+            sentinel = encryptedData.slice(0, 4);
+            if (sentinel.toString('utf8') !== CryptorHeader.SENTINEL)
+                return '';
+        }
+        if (encryptedData.length >= 5) {
+            version = encryptedData[4];
+        }
+        else {
+            throw new Error('decryption error. invalid header version');
+        }
+        if (version > CryptorHeader.MAX_VERSION)
+            throw new Error('unknown cryptor error');
+        var identifier;
+        var pos = 5 + CryptorHeader.IDENTIFIER_LENGTH;
+        if (encryptedData.length >= pos) {
+            identifier = encryptedData.slice(5, pos);
+        }
+        else {
+            throw new Error('decryption error. invalid crypto identifier');
+        }
+        var metadataLength = null;
+        if (encryptedData.length >= pos + 1) {
+            metadataLength = encryptedData[pos];
+        }
+        else {
+            throw new Error('decryption error. invalid metadata length');
+        }
+        pos += 1;
+        if (metadataLength === 255 && encryptedData.length >= pos + 2) {
+            metadataLength = new Uint16Array(encryptedData.slice(pos, pos + 2)).reduce(function (acc, val) { return (acc << 8) + val; }, 0);
+            pos += 2;
+        }
+        return new CryptorHeaderV1(identifier.toString('utf8'), metadataLength);
+    };
+    CryptorHeader.SENTINEL = 'PNED';
+    CryptorHeader.LEGACY_IDENTIFIER = '';
+    CryptorHeader.IDENTIFIER_LENGTH = 4;
+    CryptorHeader.VERSION = 1;
+    CryptorHeader.MAX_VERSION = 1;
+    CryptorHeader.MIN_HEADER_LEGTH = 10;
+    return CryptorHeader;
+}());
+// v1 CryptorHeader
+var CryptorHeaderV1 = /** @class */ (function () {
+    function CryptorHeaderV1(id, metadataLength) {
+        this._identifier = id;
+        this._metadataLength = metadataLength;
+    }
+    Object.defineProperty(CryptorHeaderV1.prototype, "identifier", {
+        get: function () {
+            return this._identifier;
+        },
+        set: function (value) {
+            this._identifier = value;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(CryptorHeaderV1.prototype, "metadataLength", {
+        get: function () {
+            return this._metadataLength;
+        },
+        set: function (value) {
+            this._metadataLength = value;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(CryptorHeaderV1.prototype, "version", {
+        get: function () {
+            return CryptorHeader.VERSION;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(CryptorHeaderV1.prototype, "length", {
+        get: function () {
+            return (CryptorHeader.SENTINEL.length +
+                1 +
+                CryptorHeader.IDENTIFIER_LENGTH +
+                (this.metadataLength < 255 ? 1 : 3) +
+                this.metadataLength);
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(CryptorHeaderV1.prototype, "data", {
+        get: function () {
+            var pos = 0;
+            var header = new Uint8Array(this.length);
+            header.set(Buffer.from(CryptorHeader.SENTINEL));
+            pos += CryptorHeader.SENTINEL.length;
+            header[pos] = this.version;
+            pos++;
+            if (this.identifier)
+                header.set(Buffer.from(this.identifier), pos);
+            pos += CryptorHeader.IDENTIFIER_LENGTH;
+            var metadataLength = this.metadataLength;
+            if (metadataLength < 255) {
+                header[pos] = metadataLength;
+            }
+            else {
+                header.set([255, metadataLength >> 8, metadataLength & 0xff], pos);
+            }
+            return header;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    return CryptorHeaderV1;
+}());
diff --git a/lib/crypto/modules/WebCryptoModule/ICryptor.js b/lib/crypto/modules/WebCryptoModule/ICryptor.js
new file mode 100644
index 00000000..c8ad2e54
--- /dev/null
+++ b/lib/crypto/modules/WebCryptoModule/ICryptor.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/lib/crypto/modules/WebCryptoModule/ILegacyCryptor.js b/lib/crypto/modules/WebCryptoModule/ILegacyCryptor.js
new file mode 100644
index 00000000..c8ad2e54
--- /dev/null
+++ b/lib/crypto/modules/WebCryptoModule/ILegacyCryptor.js
@@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
diff --git a/lib/crypto/modules/WebCryptoModule/aesCbcCryptor.js b/lib/crypto/modules/WebCryptoModule/aesCbcCryptor.js
new file mode 100644
index 00000000..d80cbbb1
--- /dev/null
+++ b/lib/crypto/modules/WebCryptoModule/aesCbcCryptor.js
@@ -0,0 +1,148 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+    function verb(n) { return function (v) { return step([n, v]); }; }
+    function step(op) {
+        if (f) throw new TypeError("Generator is already executing.");
+        while (_) try {
+            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+            if (y = 0, t) op = [op[0] & 2, t.value];
+            switch (op[0]) {
+                case 0: case 1: t = op; break;
+                case 4: _.label++; return { value: op[1], done: false };
+                case 5: _.label++; y = op[1]; op = [0]; continue;
+                case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                default:
+                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                    if (t[2]) _.ops.pop();
+                    _.trys.pop(); continue;
+            }
+            op = body.call(thisArg, _);
+        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+    }
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var hmac_sha256_1 = __importDefault(require("../../../core/components/cryptography/hmac-sha256"));
+var base64_codec_1 = require("../../../core/components/base64_codec");
+var AesCbcCryptor = /** @class */ (function () {
+    function AesCbcCryptor(configuration) {
+        this.cipherKey = configuration.cipherKey;
+        this.CryptoJS = hmac_sha256_1.default;
+        this.encryptedKey = this.CryptoJS.SHA256(this.cipherKey);
+    }
+    Object.defineProperty(AesCbcCryptor.prototype, "algo", {
+        get: function () {
+            return 'AES-CBC';
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(AesCbcCryptor.prototype, "identifier", {
+        get: function () {
+            return 'ACRH';
+        },
+        enumerable: false,
+        configurable: true
+    });
+    AesCbcCryptor.prototype.getIv = function () {
+        return crypto.getRandomValues(new Uint8Array(AesCbcCryptor.BLOCK_SIZE));
+    };
+    AesCbcCryptor.prototype.getKey = function () {
+        return __awaiter(this, void 0, void 0, function () {
+            var bKey, abHash;
+            return __generator(this, function (_a) {
+                switch (_a.label) {
+                    case 0:
+                        bKey = AesCbcCryptor.encoder.encode(this.cipherKey);
+                        return [4 /*yield*/, crypto.subtle.digest('SHA-256', bKey.buffer)];
+                    case 1:
+                        abHash = _a.sent();
+                        return [2 /*return*/, crypto.subtle.importKey('raw', abHash, this.algo, true, ['encrypt', 'decrypt'])];
+                }
+            });
+        });
+    };
+    AesCbcCryptor.prototype.encrypt = function (data) {
+        var stringData = typeof data === 'string' ? data : AesCbcCryptor.decoder.decode(data);
+        if (stringData.length === 0)
+            throw new Error('encryption error. empty content');
+        var abIv = this.getIv();
+        return {
+            metadata: abIv,
+            data: (0, base64_codec_1.decode)(this.CryptoJS.AES.encrypt(data, this.encryptedKey, {
+                iv: this.bufferToWordArray(abIv),
+                mode: this.CryptoJS.mode.CBC,
+            }).ciphertext.toString(this.CryptoJS.enc.Base64)),
+        };
+    };
+    AesCbcCryptor.prototype.decrypt = function (encryptedData) {
+        var iv = this.bufferToWordArray(new Uint8ClampedArray(encryptedData.metadata));
+        var data = this.bufferToWordArray(new Uint8ClampedArray(encryptedData.data));
+        return AesCbcCryptor.encoder.encode(this.CryptoJS.AES.decrypt({ ciphertext: data }, this.encryptedKey, {
+            iv: iv,
+            mode: this.CryptoJS.mode.CBC,
+        }).toString(this.CryptoJS.enc.Utf8)).buffer;
+    };
+    AesCbcCryptor.prototype.encryptFileData = function (data) {
+        return __awaiter(this, void 0, void 0, function () {
+            var key, iv;
+            var _a;
+            return __generator(this, function (_b) {
+                switch (_b.label) {
+                    case 0: return [4 /*yield*/, this.getKey()];
+                    case 1:
+                        key = _b.sent();
+                        iv = this.getIv();
+                        _a = {};
+                        return [4 /*yield*/, crypto.subtle.encrypt({ name: this.algo, iv: iv }, key, data)];
+                    case 2: return [2 /*return*/, (_a.data = _b.sent(),
+                            _a.metadata = iv,
+                            _a)];
+                }
+            });
+        });
+    };
+    AesCbcCryptor.prototype.decryptFileData = function (encryptedData) {
+        return __awaiter(this, void 0, void 0, function () {
+            var key;
+            return __generator(this, function (_a) {
+                switch (_a.label) {
+                    case 0: return [4 /*yield*/, this.getKey()];
+                    case 1:
+                        key = _a.sent();
+                        return [2 /*return*/, crypto.subtle.decrypt({ name: this.algo, iv: encryptedData.metadata }, key, encryptedData.data)];
+                }
+            });
+        });
+    };
+    AesCbcCryptor.prototype.bufferToWordArray = function (b) {
+        var wa = [];
+        var i;
+        for (i = 0; i < b.length; i += 1) {
+            wa[(i / 4) | 0] |= b[i] << (24 - 8 * i);
+        }
+        return this.CryptoJS.lib.WordArray.create(wa, b.length);
+    };
+    AesCbcCryptor.BLOCK_SIZE = 16;
+    AesCbcCryptor.encoder = new TextEncoder();
+    AesCbcCryptor.decoder = new TextDecoder();
+    return AesCbcCryptor;
+}());
+exports.default = AesCbcCryptor;
diff --git a/lib/crypto/modules/WebCryptoModule/legacyCryptor.js b/lib/crypto/modules/WebCryptoModule/legacyCryptor.js
new file mode 100644
index 00000000..9b318e35
--- /dev/null
+++ b/lib/crypto/modules/WebCryptoModule/legacyCryptor.js
@@ -0,0 +1,90 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+    function verb(n) { return function (v) { return step([n, v]); }; }
+    function step(op) {
+        if (f) throw new TypeError("Generator is already executing.");
+        while (_) try {
+            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+            if (y = 0, t) op = [op[0] & 2, t.value];
+            switch (op[0]) {
+                case 0: case 1: t = op; break;
+                case 4: _.label++; return { value: op[1], done: false };
+                case 5: _.label++; y = op[1]; op = [0]; continue;
+                case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                default:
+                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                    if (t[2]) _.ops.pop();
+                    _.trys.pop(); continue;
+            }
+            op = body.call(thisArg, _);
+        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+    }
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+var index_1 = __importDefault(require("../../../core/components/cryptography/index"));
+var web_1 = __importDefault(require("../web"));
+var base64_codec_1 = require("../../../core/components/base64_codec");
+var LegacyCryptor = /** @class */ (function () {
+    function LegacyCryptor(config) {
+        this.config = config;
+        this.cryptor = new index_1.default({ config: config });
+        this.fileCryptor = new web_1.default();
+    }
+    Object.defineProperty(LegacyCryptor.prototype, "identifier", {
+        get: function () {
+            return '';
+        },
+        enumerable: false,
+        configurable: true
+    });
+    LegacyCryptor.prototype.encrypt = function (data) {
+        var stringData = typeof data === 'string' ? data : new TextDecoder().decode(data);
+        return {
+            data: this.cryptor.encrypt(stringData),
+            metadata: null,
+        };
+    };
+    LegacyCryptor.prototype.decrypt = function (encryptedData) {
+        var data = typeof encryptedData.data === 'string' ? encryptedData.data : (0, base64_codec_1.encode)(encryptedData.data);
+        return this.cryptor.decrypt(data);
+    };
+    LegacyCryptor.prototype.encryptFile = function (file, File) {
+        var _a;
+        return __awaiter(this, void 0, void 0, function () {
+            return __generator(this, function (_b) {
+                // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+                //@ts-ignore: can not detect cipherKey from old Config
+                return [2 /*return*/, this.fileCryptor.encryptFile((_a = this.config) === null || _a === void 0 ? void 0 : _a.cipherKey, file, File)];
+            });
+        });
+    };
+    LegacyCryptor.prototype.decryptFile = function (file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            return __generator(this, function (_a) {
+                // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+                //@ts-ignore: can not detect cipherKey from old Config
+                return [2 /*return*/, this.fileCryptor.decryptFile(this.config.cipherKey, file, File)];
+            });
+        });
+    };
+    return LegacyCryptor;
+}());
+exports.default = LegacyCryptor;
diff --git a/lib/crypto/modules/WebCryptoModule/webCryptoModule.js b/lib/crypto/modules/WebCryptoModule/webCryptoModule.js
new file mode 100644
index 00000000..e511da1e
--- /dev/null
+++ b/lib/crypto/modules/WebCryptoModule/webCryptoModule.js
@@ -0,0 +1,358 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __generator = (this && this.__generator) || function (thisArg, body) {
+    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
+    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
+    function verb(n) { return function (v) { return step([n, v]); }; }
+    function step(op) {
+        if (f) throw new TypeError("Generator is already executing.");
+        while (_) try {
+            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
+            if (y = 0, t) op = [op[0] & 2, t.value];
+            switch (op[0]) {
+                case 0: case 1: t = op; break;
+                case 4: _.label++; return { value: op[1], done: false };
+                case 5: _.label++; y = op[1]; op = [0]; continue;
+                case 7: op = _.ops.pop(); _.trys.pop(); continue;
+                default:
+                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
+                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
+                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
+                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
+                    if (t[2]) _.ops.pop();
+                    _.trys.pop(); continue;
+            }
+            op = body.call(thisArg, _);
+        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
+        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
+    }
+};
+var __read = (this && this.__read) || function (o, n) {
+    var m = typeof Symbol === "function" && o[Symbol.iterator];
+    if (!m) return o;
+    var i = m.call(o), r, ar = [], e;
+    try {
+        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
+    }
+    catch (error) { e = { error: error }; }
+    finally {
+        try {
+            if (r && !r.done && (m = i["return"])) m.call(i);
+        }
+        finally { if (e) throw e.error; }
+    }
+    return ar;
+};
+var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
+    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
+        if (ar || !(i in from)) {
+            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
+            ar[i] = from[i];
+        }
+    }
+    return to.concat(ar || Array.prototype.slice.call(from));
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.CryptoModule = exports.AesCbcCryptor = exports.LegacyCryptor = void 0;
+var legacyCryptor_1 = __importDefault(require("./legacyCryptor"));
+exports.LegacyCryptor = legacyCryptor_1.default;
+var aesCbcCryptor_1 = __importDefault(require("./aesCbcCryptor"));
+exports.AesCbcCryptor = aesCbcCryptor_1.default;
+var base64_codec_1 = require("../../../core/components/base64_codec");
+var CryptoModule = /** @class */ (function () {
+    function CryptoModule(cryptoModuleConfiguration) {
+        var _a;
+        this.defaultCryptor = cryptoModuleConfiguration.default;
+        this.cryptors = (_a = cryptoModuleConfiguration.cryptors) !== null && _a !== void 0 ? _a : [];
+    }
+    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+    //@ts-ignore: type detection issue with old Config type assignment
+    CryptoModule.legacyCryptoModule = function (config) {
+        var _a;
+        return new this({
+            default: new legacyCryptor_1.default({
+                cipherKey: config.cipherKey,
+                useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
+            }),
+            cryptors: [new aesCbcCryptor_1.default({ cipherKey: config.cipherKey })],
+        });
+    };
+    CryptoModule.aesCbcCryptoModule = function (config) {
+        var _a;
+        return new this({
+            default: new aesCbcCryptor_1.default({ cipherKey: config.cipherKey }),
+            cryptors: [
+                new legacyCryptor_1.default({
+                    cipherKey: config.cipherKey,
+                    useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
+                }),
+            ],
+        });
+    };
+    CryptoModule.withDefaultCryptor = function (defaultCryptor) {
+        return new this({ default: defaultCryptor });
+    };
+    CryptoModule.prototype.getAllCryptors = function () {
+        return __spreadArray([this.defaultCryptor], __read(this.cryptors), false);
+    };
+    CryptoModule.prototype.encrypt = function (data) {
+        var encrypted = this.defaultCryptor.encrypt(data);
+        if (!encrypted.metadata)
+            return encrypted.data;
+        var headerData = this.getHeaderData(encrypted);
+        return this.concatArrayBuffer(headerData, encrypted.data);
+    };
+    CryptoModule.prototype.decrypt = function (data) {
+        var encryptedData = typeof data === 'string' ? (0, base64_codec_1.decode)(data) : data;
+        var header = CryptorHeader.tryParse(encryptedData);
+        var cryptor = this.getCryptor(header);
+        var metadata = header.length > 0
+            ? encryptedData.slice(header.length - header.metadataLength, header.length)
+            : null;
+        if (encryptedData.slice(header.length).byteLength <= 0)
+            throw new Error('decryption error. empty content');
+        return cryptor.decrypt({
+            data: encryptedData.slice(header.length),
+            metadata: metadata,
+        });
+    };
+    CryptoModule.prototype.encryptFile = function (file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            var fileData, encrypted;
+            return __generator(this, function (_a) {
+                switch (_a.label) {
+                    case 0:
+                        if (this.defaultCryptor.identifier === CryptorHeader.LEGACY_IDENTIFIER)
+                            return [2 /*return*/, this.defaultCryptor.encryptFile(file, File)];
+                        fileData = this.getFileData(file.data);
+                        return [4 /*yield*/, this.defaultCryptor.encryptFileData(fileData)];
+                    case 1:
+                        encrypted = _a.sent();
+                        return [2 /*return*/, File.create({
+                                name: file.name,
+                                mimeType: 'application/octet-stream',
+                                data: this.concatArrayBuffer(this.getHeaderData(encrypted), encrypted.data),
+                            })];
+                }
+            });
+        });
+    };
+    CryptoModule.prototype.decryptFile = function (file, File) {
+        return __awaiter(this, void 0, void 0, function () {
+            var data, header, cryptor, fileData, metadata, _a, _b;
+            var _c;
+            return __generator(this, function (_d) {
+                switch (_d.label) {
+                    case 0: return [4 /*yield*/, file.data.arrayBuffer()];
+                    case 1:
+                        data = _d.sent();
+                        header = CryptorHeader.tryParse(data);
+                        cryptor = this.getCryptor(header);
+                        if ((cryptor === null || cryptor === void 0 ? void 0 : cryptor.identifier) === CryptoModule.LEGACY_IDENTIFIER) {
+                            return [2 /*return*/, cryptor.decryptFile(file, File)];
+                        }
+                        fileData = this.getFileData(data);
+                        metadata = fileData.slice(header.length - header.metadataLength, header.length);
+                        _b = (_a = File).create;
+                        _c = {
+                            name: file.name
+                        };
+                        return [4 /*yield*/, this.defaultCryptor.decryptFileData({
+                                data: data.slice(header.length),
+                                metadata: metadata,
+                            })];
+                    case 2: return [2 /*return*/, _b.apply(_a, [(_c.data = _d.sent(),
+                                _c)])];
+                }
+            });
+        });
+    };
+    CryptoModule.prototype.getCryptor = function (header) {
+        if (header === '') {
+            var cryptor = this.getAllCryptors().find(function (c) { return c.identifier === ''; });
+            if (cryptor)
+                return cryptor;
+            throw new Error('unknown cryptor error');
+        }
+        else if (header instanceof CryptorHeaderV1) {
+            return this.getCryptorFromId(header.identifier);
+        }
+    };
+    CryptoModule.prototype.getCryptorFromId = function (id) {
+        var cryptor = this.getAllCryptors().find(function (c) { return id === c.identifier; });
+        if (cryptor) {
+            return cryptor;
+        }
+        throw Error('unknown cryptor error');
+    };
+    CryptoModule.prototype.concatArrayBuffer = function (ab1, ab2) {
+        var tmp = new Uint8Array(ab1.byteLength + ab2.byteLength);
+        tmp.set(new Uint8Array(ab1), 0);
+        tmp.set(new Uint8Array(ab2), ab1.byteLength);
+        return tmp.buffer;
+    };
+    CryptoModule.prototype.getHeaderData = function (encrypted) {
+        if (!encrypted.metadata)
+            return;
+        var header = CryptorHeader.from(this.defaultCryptor.identifier, encrypted.metadata);
+        var headerData = new Uint8Array(header.length);
+        var pos = 0;
+        headerData.set(header.data, pos);
+        pos += header.length - encrypted.metadata.byteLength;
+        headerData.set(new Uint8Array(encrypted.metadata), pos);
+        return headerData.buffer;
+    };
+    CryptoModule.prototype.getFileData = function (input) {
+        if (input instanceof ArrayBuffer) {
+            return input;
+        }
+        if (typeof input === 'string') {
+            return CryptoModule.encoder.encode(input);
+        }
+        throw new Error('Cannot decrypt/encrypt file. In browsers file decryption supports only string or ArrayBuffer');
+    };
+    CryptoModule.LEGACY_IDENTIFIER = '';
+    CryptoModule.encoder = new TextEncoder();
+    CryptoModule.decoder = new TextDecoder();
+    return CryptoModule;
+}());
+exports.CryptoModule = CryptoModule;
+// CryptorHeader Utility
+var CryptorHeader = /** @class */ (function () {
+    function CryptorHeader() {
+    }
+    CryptorHeader.from = function (id, metadata) {
+        if (id === CryptorHeader.LEGACY_IDENTIFIER)
+            return;
+        return new CryptorHeaderV1(id, metadata.byteLength);
+    };
+    CryptorHeader.tryParse = function (data) {
+        var encryptedData = new Uint8Array(data);
+        var sentinel = '';
+        var version = null;
+        if (encryptedData.byteLength >= 4) {
+            sentinel = encryptedData.slice(0, 4);
+            if (this.decoder.decode(sentinel) !== CryptorHeader.SENTINEL)
+                return '';
+        }
+        if (encryptedData.byteLength >= 5) {
+            version = encryptedData[4];
+        }
+        else {
+            throw new Error('decryption error. invalid header version');
+        }
+        if (version > CryptorHeader.MAX_VERSION)
+            throw new Error('unknown cryptor error');
+        var identifier = '';
+        var pos = 5 + CryptorHeader.IDENTIFIER_LENGTH;
+        if (encryptedData.byteLength >= pos) {
+            identifier = encryptedData.slice(5, pos);
+        }
+        else {
+            throw new Error('decryption error. invalid crypto identifier');
+        }
+        var metadataLength = null;
+        if (encryptedData.byteLength >= pos + 1) {
+            metadataLength = encryptedData[pos];
+        }
+        else {
+            throw new Error('decryption error. invalid metadata length');
+        }
+        pos += 1;
+        if (metadataLength === 255 && encryptedData.byteLength >= pos + 2) {
+            metadataLength = new Uint16Array(encryptedData.slice(pos, pos + 2)).reduce(function (acc, val) { return (acc << 8) + val; }, 0);
+            pos += 2;
+        }
+        return new CryptorHeaderV1(this.decoder.decode(identifier), metadataLength);
+    };
+    CryptorHeader.SENTINEL = 'PNED';
+    CryptorHeader.LEGACY_IDENTIFIER = '';
+    CryptorHeader.IDENTIFIER_LENGTH = 4;
+    CryptorHeader.VERSION = 1;
+    CryptorHeader.MAX_VERSION = 1;
+    CryptorHeader.decoder = new TextDecoder();
+    return CryptorHeader;
+}());
+// v1 CryptorHeader
+var CryptorHeaderV1 = /** @class */ (function () {
+    function CryptorHeaderV1(id, metadataLength) {
+        this._identifier = id;
+        this._metadataLength = metadataLength;
+    }
+    Object.defineProperty(CryptorHeaderV1.prototype, "identifier", {
+        get: function () {
+            return this._identifier;
+        },
+        set: function (value) {
+            this._identifier = value;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(CryptorHeaderV1.prototype, "metadataLength", {
+        get: function () {
+            return this._metadataLength;
+        },
+        set: function (value) {
+            this._metadataLength = value;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(CryptorHeaderV1.prototype, "version", {
+        get: function () {
+            return CryptorHeader.VERSION;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(CryptorHeaderV1.prototype, "length", {
+        get: function () {
+            return (CryptorHeader.SENTINEL.length +
+                1 +
+                CryptorHeader.IDENTIFIER_LENGTH +
+                (this.metadataLength < 255 ? 1 : 3) +
+                this.metadataLength);
+        },
+        enumerable: false,
+        configurable: true
+    });
+    Object.defineProperty(CryptorHeaderV1.prototype, "data", {
+        get: function () {
+            var pos = 0;
+            var header = new Uint8Array(this.length);
+            var encoder = new TextEncoder();
+            header.set(encoder.encode(CryptorHeader.SENTINEL));
+            pos += CryptorHeader.SENTINEL.length;
+            header[pos] = this.version;
+            pos++;
+            if (this.identifier)
+                header.set(encoder.encode(this.identifier), pos);
+            pos += CryptorHeader.IDENTIFIER_LENGTH;
+            var metadataLength = this.metadataLength;
+            if (metadataLength < 255) {
+                header[pos] = metadataLength;
+            }
+            else {
+                header.set([255, metadataLength >> 8, metadataLength & 0xff], pos);
+            }
+            return header;
+        },
+        enumerable: false,
+        configurable: true
+    });
+    CryptorHeaderV1.IDENTIFIER_LENGTH = 4;
+    CryptorHeaderV1.SENTINEL = 'PNED';
+    return CryptorHeaderV1;
+}());
diff --git a/lib/crypto/modules/node.js b/lib/crypto/modules/node.js
index 4250597d..cb396845 100644
--- a/lib/crypto/modules/node.js
+++ b/lib/crypto/modules/node.js
@@ -92,20 +92,24 @@ var NodeCryptography = /** @class */ (function () {
             return __generator(this, function (_g) {
                 switch (_g.label) {
                     case 0:
                         bKey = this.getKey(key);
                         if (!(file.data instanceof Buffer)) return [3 /*break*/, 2];
+                        if (file.data.byteLength <= 0)
+                            throw new Error('encryption error. empty content');
                         _b = (_a = File).create;
                         _e = {
                             name: file.name,
                             mimeType: 'application/octet-stream'
                         };
                         return [4 /*yield*/, this.encryptBuffer(bKey, file.data)];
                     case 1: return [2 /*return*/, _b.apply(_a, [(_e.data = _g.sent(),
                                 _e)])];
                     case 2:
                         if (!(file.data instanceof stream_1.Readable)) return [3 /*break*/, 4];
+                        if (file.contentLength === 0)
+                            throw new Error('encryption error. empty content');
                         _d = (_c = File).create;
                         _f = {
                             name: file.name,
                             mimeType: 'application/octet-stream'
                         };
@@ -174,20 +178,36 @@ var NodeCryptography = /** @class */ (function () {
         return Buffer.concat([bIv, aes.update(plaintext), aes.final()]);
     };
     NodeCryptography.prototype.decryptBuffer = function (key, ciphertext) {
         var bIv = ciphertext.slice(0, NodeCryptography.IV_LENGTH);
         var bCiphertext = ciphertext.slice(NodeCryptography.IV_LENGTH);
+        if (bCiphertext.byteLength <= 0)
+            throw new Error('decryption error: empty content');
         var aes = (0, crypto_1.createDecipheriv)(this.algo, key, bIv);
         return Buffer.concat([aes.update(bCiphertext), aes.final()]);
     };
     NodeCryptography.prototype.encryptStream = function (key, stream) {
-        var output = new stream_1.PassThrough();
-        var bIv = this.getIv();
-        var aes = (0, crypto_1.createCipheriv)(this.algo, key, bIv);
-        output.write(bIv);
-        stream.pipe(aes).pipe(output);
-        return output;
+        return __awaiter(this, void 0, void 0, function () {
+            var bIv, aes, inited;
+            return __generator(this, function (_a) {
+                bIv = this.getIv();
+                aes = (0, crypto_1.createCipheriv)('aes-256-cbc', key, bIv).setAutoPadding(true);
+                inited = false;
+                return [2 /*return*/, stream.pipe(aes).pipe(new stream_1.Transform({
+                        transform: function (chunk, _, cb) {
+                            if (!inited) {
+                                inited = true;
+                                this.push(Buffer.concat([bIv, chunk]));
+                            }
+                            else {
+                                this.push(chunk);
+                            }
+                            cb();
+                        },
+                    }))];
+            });
+        });
     };
     NodeCryptography.prototype.decryptStream = function (key, stream) {
         var _this = this;
         var output = new stream_1.PassThrough();
         var bIv = Buffer.alloc(0);
diff --git a/lib/crypto/modules/web.js b/lib/crypto/modules/web.js
index 77b4eb08..b7bb887e 100644
--- a/lib/crypto/modules/web.js
+++ b/lib/crypto/modules/web.js
@@ -94,14 +94,17 @@ var WebCryptography = /** @class */ (function () {
     WebCryptography.prototype.encryptFile = function (key, file, File) {
         return __awaiter(this, void 0, void 0, function () {
             var bKey, abPlaindata, abCipherdata;
             return __generator(this, function (_a) {
                 switch (_a.label) {
-                    case 0: return [4 /*yield*/, this.getKey(key)];
+                    case 0:
+                        if (file.data.byteLength <= 0)
+                            throw new Error('encryption error. empty content');
+                        return [4 /*yield*/, this.getKey(key)];
                     case 1:
                         bKey = _a.sent();
-                        return [4 /*yield*/, file.toArrayBuffer()];
+                        return [4 /*yield*/, file.data.arrayBuffer()];
                     case 2:
                         abPlaindata = _a.sent();
                         return [4 /*yield*/, this.encryptArrayBuffer(bKey, abPlaindata)];
                     case 3:
                         abCipherdata = _a.sent();
@@ -120,11 +123,11 @@ var WebCryptography = /** @class */ (function () {
             return __generator(this, function (_a) {
                 switch (_a.label) {
                     case 0: return [4 /*yield*/, this.getKey(key)];
                     case 1:
                         bKey = _a.sent();
-                        return [4 /*yield*/, file.toArrayBuffer()];
+                        return [4 /*yield*/, file.data.arrayBuffer()];
                     case 2:
                         abCipherdata = _a.sent();
                         return [4 /*yield*/, this.decryptArrayBuffer(bKey, abCipherdata)];
                     case 3:
                         abPlaindata = _a.sent();
@@ -136,19 +139,20 @@ var WebCryptography = /** @class */ (function () {
             });
         });
     };
     WebCryptography.prototype.getKey = function (key) {
         return __awaiter(this, void 0, void 0, function () {
-            var bKey, abHash, abKey;
+            var digest, hashHex, abKey;
             return __generator(this, function (_a) {
                 switch (_a.label) {
-                    case 0:
-                        bKey = Buffer.from(key);
-                        return [4 /*yield*/, crypto.subtle.digest('SHA-256', bKey.buffer)];
+                    case 0: return [4 /*yield*/, crypto.subtle.digest('SHA-256', WebCryptography.encoder.encode(key))];
                     case 1:
-                        abHash = _a.sent();
-                        abKey = Buffer.from(Buffer.from(abHash).toString('hex').slice(0, 32), 'utf8').buffer;
+                        digest = _a.sent();
+                        hashHex = Array.from(new Uint8Array(digest))
+                            .map(function (b) { return b.toString(16).padStart(2, '0'); })
+                            .join('');
+                        abKey = WebCryptography.encoder.encode(hashHex.slice(0, 32)).buffer;
                         return [2 /*return*/, crypto.subtle.importKey('raw', abKey, 'AES-CBC', true, ['encrypt', 'decrypt'])];
                 }
             });
         });
     };
@@ -167,50 +171,60 @@ var WebCryptography = /** @class */ (function () {
             });
         });
     };
     WebCryptography.prototype.decryptArrayBuffer = function (key, ciphertext) {
         return __awaiter(this, void 0, void 0, function () {
-            var abIv;
+            var abIv, data;
             return __generator(this, function (_a) {
-                abIv = ciphertext.slice(0, 16);
-                return [2 /*return*/, crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, ciphertext.slice(16))];
+                switch (_a.label) {
+                    case 0:
+                        abIv = ciphertext.slice(0, 16);
+                        if (ciphertext.slice(WebCryptography.IV_LENGTH).byteLength <= 0)
+                            throw new Error('decryption error: empty content');
+                        return [4 /*yield*/, crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, ciphertext.slice(WebCryptography.IV_LENGTH))];
+                    case 1:
+                        data = _a.sent();
+                        return [2 /*return*/, data];
+                }
             });
         });
     };
     WebCryptography.prototype.encryptString = function (key, plaintext) {
         return __awaiter(this, void 0, void 0, function () {
             var abIv, abPlaintext, abPayload, ciphertext;
             return __generator(this, function (_a) {
                 switch (_a.label) {
                     case 0:
                         abIv = crypto.getRandomValues(new Uint8Array(16));
-                        abPlaintext = Buffer.from(plaintext).buffer;
+                        abPlaintext = WebCryptography.encoder.encode(plaintext).buffer;
                         return [4 /*yield*/, crypto.subtle.encrypt({ name: 'AES-CBC', iv: abIv }, key, abPlaintext)];
                     case 1:
                         abPayload = _a.sent();
                         ciphertext = concatArrayBuffer(abIv.buffer, abPayload);
-                        return [2 /*return*/, Buffer.from(ciphertext).toString('utf8')];
+                        return [2 /*return*/, WebCryptography.decoder.decode(ciphertext)];
                 }
             });
         });
     };
     WebCryptography.prototype.decryptString = function (key, ciphertext) {
         return __awaiter(this, void 0, void 0, function () {
             var abCiphertext, abIv, abPayload, abPlaintext;
             return __generator(this, function (_a) {
                 switch (_a.label) {
                     case 0:
-                        abCiphertext = Buffer.from(ciphertext);
+                        abCiphertext = WebCryptography.encoder.encode(ciphertext).buffer;
                         abIv = abCiphertext.slice(0, 16);
                         abPayload = abCiphertext.slice(16);
                         return [4 /*yield*/, crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, abPayload)];
                     case 1:
                         abPlaintext = _a.sent();
-                        return [2 /*return*/, Buffer.from(abPlaintext).toString('utf8')];
+                        return [2 /*return*/, WebCryptography.decoder.decode(abPlaintext)];
                 }
             });
         });
     };
     WebCryptography.IV_LENGTH = 16;
+    WebCryptography.encoder = new TextEncoder();
+    WebCryptography.decoder = new TextDecoder();
     return WebCryptography;
 }());
 exports.default = WebCryptography;
diff --git a/lib/file/modules/node.js b/lib/file/modules/node.js
index c3c4b0f6..bb098823 100644
--- a/lib/file/modules/node.js
+++ b/lib/file/modules/node.js
@@ -1,7 +1,6 @@
 "use strict";
-/**       */
 var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
     return new (P || (P = Promise))(function (resolve, reject) {
         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
@@ -34,23 +33,27 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
             op = body.call(thisArg, _);
         } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
         if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
     }
 };
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
 var _a;
 Object.defineProperty(exports, "__esModule", { value: true });
 var stream_1 = require("stream");
-var fs_1 = require("fs");
+var fs_1 = __importDefault(require("fs"));
 var path_1 = require("path");
 var PubNubFile = (_a = /** @class */ (function () {
         function PubNubFile(_a) {
             var stream = _a.stream, data = _a.data, encoding = _a.encoding, name = _a.name, mimeType = _a.mimeType;
             if (stream instanceof stream_1.Readable) {
                 this.data = stream;
-                if (stream instanceof fs_1.ReadStream) {
+                if (stream instanceof fs_1.default.ReadStream) {
                     // $FlowFixMe: incomplete flow node definitions
                     this.name = (0, path_1.basename)(stream.path);
+                    this.contentLength = fs_1.default.statSync(stream.path).size;
                 }
             }
             else if (data instanceof Buffer) {
                 this.data = Buffer.from(data);
             }
diff --git a/lib/node/index.js b/lib/node/index.js
index 643cff83..69ae47a7 100644
--- a/lib/node/index.js
+++ b/lib/node/index.js
@@ -15,40 +15,53 @@ var __extends = (this && this.__extends) || (function () {
     };
 })();
 var __importDefault = (this && this.__importDefault) || function (mod) {
     return (mod && mod.__esModule) ? mod : { "default": mod };
 };
+var _a;
 var cbor_sync_1 = __importDefault(require("cbor-sync"));
 var pubnub_common_1 = __importDefault(require("../core/pubnub-common"));
 var networking_1 = __importDefault(require("../networking"));
 var common_1 = __importDefault(require("../cbor/common"));
 var base64_codec_1 = require("../core/components/base64_codec");
 var web_node_1 = require("../networking/modules/web-node");
 var node_1 = require("../networking/modules/node");
 var node_2 = __importDefault(require("../crypto/modules/node"));
 var node_3 = __importDefault(require("../file/modules/node"));
-module.exports = /** @class */ (function (_super) {
-    __extends(class_1, _super);
-    function class_1(setup) {
-        var _this = this;
-        setup.cbor = new common_1.default(function (buffer) { return cbor_sync_1.default.decode(Buffer.from(buffer)); }, base64_codec_1.decode);
-        setup.networking = new networking_1.default({
-            keepAlive: node_1.keepAlive,
-            del: web_node_1.del,
-            get: web_node_1.get,
-            post: web_node_1.post,
-            patch: web_node_1.patch,
-            proxy: node_1.proxy,
-            getfile: web_node_1.getfile,
-            postfile: web_node_1.postfile,
-        });
-        setup.sdkFamily = 'Nodejs';
-        setup.PubNubFile = node_3.default;
-        setup.cryptography = new node_2.default();
-        if (!('ssl' in setup)) {
-            setup.ssl = true;
+var nodeCryptoModule_1 = require("../crypto/modules/NodeCryptoModule/nodeCryptoModule");
+module.exports = (_a = /** @class */ (function (_super) {
+        __extends(class_1, _super);
+        function class_1(setup) {
+            var _this = this;
+            setup.cbor = new common_1.default(function (buffer) { return cbor_sync_1.default.decode(Buffer.from(buffer)); }, base64_codec_1.decode);
+            setup.networking = new networking_1.default({
+                keepAlive: node_1.keepAlive,
+                del: web_node_1.del,
+                get: web_node_1.get,
+                post: web_node_1.post,
+                patch: web_node_1.patch,
+                proxy: node_1.proxy,
+                getfile: web_node_1.getfile,
+                postfile: web_node_1.postfile,
+            });
+            setup.sdkFamily = 'Nodejs';
+            setup.PubNubFile = node_3.default;
+            setup.cryptography = new node_2.default();
+            setup.initCryptoModule = function (cryptoConfiguration) {
+                return new nodeCryptoModule_1.CryptoModule({
+                    default: new nodeCryptoModule_1.LegacyCryptor({
+                        cipherKey: cryptoConfiguration.cipherKey,
+                        useRandomIVs: cryptoConfiguration.useRandomIVs,
+                    }),
+                    cryptors: [new nodeCryptoModule_1.AesCbcCryptor({ cipherKey: cryptoConfiguration.cipherKey })],
+                });
+            };
+            if (!('ssl' in setup)) {
+                setup.ssl = true;
+            }
+            _this = _super.call(this, setup) || this;
+            return _this;
         }
-        _this = _super.call(this, setup) || this;
-        return _this;
-    }
-    return class_1;
-}(pubnub_common_1.default));
+        return class_1;
+    }(pubnub_common_1.default)),
+    _a.CryptoModule = nodeCryptoModule_1.CryptoModule,
+    _a);
diff --git a/lib/web/index.js b/lib/web/index.js
index e704201e..fcda537b 100644
--- a/lib/web/index.js
+++ b/lib/web/index.js
@@ -27,10 +27,11 @@ var base64_codec_1 = require("../core/components/base64_codec");
 var stringify_buffer_keys_1 = require("../core/components/stringify_buffer_keys");
 var common_1 = __importDefault(require("../cbor/common"));
 var web_node_1 = require("../networking/modules/web-node");
 var web_1 = __importDefault(require("../crypto/modules/web"));
 var web_2 = __importDefault(require("../file/modules/web"));
+var webCryptoModule_1 = require("../crypto/modules/WebCryptoModule/webCryptoModule");
 function sendBeacon(url) {
     if (navigator && navigator.sendBeacon) {
         navigator.sendBeacon(url);
     }
     else {
@@ -54,10 +55,19 @@ var default_1 = /** @class */ (function (_super) {
             postfile: web_node_1.postfile,
         });
         setup.cbor = new common_1.default(function (arrayBuffer) { return (0, stringify_buffer_keys_1.stringifyBufferKeys)(cbor_js_1.default.decode(arrayBuffer)); }, base64_codec_1.decode);
         setup.PubNubFile = web_2.default;
         setup.cryptography = new web_1.default();
+        setup.initCryptoModule = function (cryptoConfiguration) {
+            return new webCryptoModule_1.CryptoModule({
+                default: new webCryptoModule_1.LegacyCryptor({
+                    cipherKey: cryptoConfiguration.cipherKey,
+                    useRandomIVs: cryptoConfiguration.useRandomIVs,
+                }),
+                cryptors: [new webCryptoModule_1.AesCbcCryptor({ cipherKey: cryptoConfiguration.cipherKey })],
+            });
+        };
         _this = _super.call(this, setup) || this;
         if (listenToBrowserNetworkEvents) {
             // mount network events.
             window.addEventListener('offline', function () {
                 _this.networkDownDetected();
@@ -66,8 +76,9 @@ var default_1 = /** @class */ (function (_super) {
                 _this.networkUpDetected();
             });
         }
         return _this;
     }
+    default_1.CryptoModule = webCryptoModule_1.CryptoModule;
     return default_1;
 }(pubnub_common_1.default));
 exports.default = default_1;
diff --git a/package.json b/package.json
index 3f206465..78f1466c 100644
--- a/package.json
+++ b/package.json
@@ -1,8 +1,8 @@
 {
   "name": "pubnub",
-  "version": "7.3.3",
+  "version": "7.4.0",
   "author": "PubNub <support@pubnub.com>",
   "description": "Publish & Subscribe Real-time Messaging with PubNub",
   "scripts": {
     "build": "npm run build:node && npm run build:web",
     "build:web": "rollup -c rollup.config.js",
@@ -100,6 +100,6 @@
   },
   "license": "MIT",
   "engine": {
     "node": ">=0.8"
   }
-}
+}
\ No newline at end of file
diff --git a/src/core/components/base64_codec.ts b/src/core/components/base64_codec.ts
index 04cfea7f..7908d5c7 100644
--- a/src/core/components/base64_codec.ts
+++ b/src/core/components/base64_codec.ts
@@ -51,5 +51,57 @@ export function decode(paddedInput: string): ArrayBuffer {
     if (sx4 != 64) view[i + 2] = oc3;
   }
 
   return data;
 }
+
+export function encode(input: ArrayBuffer): string {
+  let base64 = '';
+  const encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+  const bytes = new Uint8Array(input);
+  const byteLength = bytes.byteLength;
+  const byteRemainder = byteLength % 3;
+  const mainLength = byteLength - byteRemainder;
+
+  let a, b, c, d;
+  let chunk;
+
+  // Main loop deals with bytes in chunks of 3
+  for (let i = 0; i < mainLength; i = i + 3) {
+    // Combine the three bytes into a single integer
+    chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];
+
+    // Use bitmasks to extract 6-bit segments from the triplet
+    a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18
+    b = (chunk & 258048) >> 12; // 258048   = (2^6 - 1) << 12
+    c = (chunk & 4032) >> 6; // 4032     = (2^6 - 1) << 6
+    d = chunk & 63; // 63       = 2^6 - 1
+
+    // Convert the raw binary segments to the appropriate ASCII encoding
+    base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];
+  }
+
+  // Deal with the remaining bytes and padding
+  if (byteRemainder == 1) {
+    chunk = bytes[mainLength];
+
+    a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2
+
+    // Set the 4 least significant bits to zero
+    b = (chunk & 3) << 4; // 3   = 2^2 - 1
+
+    base64 += encodings[a] + encodings[b] + '==';
+  } else if (byteRemainder == 2) {
+    chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];
+
+    a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10
+    b = (chunk & 1008) >> 4; // 1008  = (2^6 - 1) << 4
+
+    // Set the 2 least significant bits to zero
+    c = (chunk & 15) << 2; // 15    = 2^4 - 1
+
+    base64 += encodings[a] + encodings[b] + encodings[c] + '=';
+  }
+
+  return base64;
+}
diff --git a/src/core/components/config.js b/src/core/components/config.js
index d075d55c..883f86c2 100644
--- a/src/core/components/config.js
+++ b/src/core/components/config.js
@@ -127,11 +127,11 @@ export default class {
   dedupeOnSubscribe;
 
   maximumCacheSize;
 
   /*
-    support customp encryption and decryption functions.
+    support custom encryption and decryption functions.
   */
   customEncrypt; // function to support custome encryption of messages
 
   customDecrypt; // function used to decrypt old version messages
 
@@ -140,10 +140,15 @@ export default class {
   // How many times the publish-file should be retried before giving up
   fileUploadPublishRetryLimit;
   useRandomIVs;
   enableSubscribeBeta;
 
+  /*
+    set cryptoModule to encrypt/decrypt messages and files.
+  */
+  cryptoModule;
+
   constructor({ setup }) {
     this._PNSDKSuffix = {};
 
     this.instanceId = `pn-${uuidGenerator.createUUID()}`;
     this.secretKey = setup.secretKey || setup.secret_key;
@@ -151,11 +156,11 @@ export default class {
     this.publishKey = setup.publishKey || setup.publish_key;
     this.sdkName = setup.sdkName;
     this.sdkFamily = setup.sdkFamily;
     this.partnerId = setup.partnerId;
     this.setAuthKey(setup.authKey);
-    this.setCipherKey(setup.cipherKey);
+    this.cryptoModule = setup.cryptoModule;
 
     this.setFilterExpression(setup.filterExpression);
 
     if (typeof setup.origin !== 'string' && !Array.isArray(setup.origin) && setup.origin !== undefined) {
       throw new Error('Origin must be either undefined, a string or a list of strings.');
@@ -225,10 +230,11 @@ export default class {
         throw new Error('One of the following configuration options has to be provided: `uuid` or `userId`');
       }
 
       this.setUUID(setup.uuid);
     }
+    this.setCipherKey(setup.cipherKey, setup);
   }
 
   // exposed setters
   getAuthKey() {
     return this.authKey;
@@ -237,12 +243,17 @@ export default class {
   setAuthKey(val) {
     this.authKey = val;
     return this;
   }
 
-  setCipherKey(val) {
+  setCipherKey(val, setup, modules) {
     this.cipherKey = val;
+    if (this.cipherKey) {
+      this.cryptoModule =
+        setup.cryptoModule ?? setup.initCryptoModule({ cipherKey: this.cipherKey, useRandomIVs: this.useRandomIVs });
+      if (modules) modules.cryptoModule = this.cryptoModule;
+    }
     return this;
   }
 
   getUUID() {
     return this.UUID;
@@ -337,11 +348,11 @@ export default class {
     this._useSendBeacon = val;
     return this;
   }
 
   getVersion() {
-    return '7.3.3';
+    return '7.4.0';
   }
 
   _addPnsdkSuffix(name, suffix) {
     this._PNSDKSuffix[name] = suffix;
   }
diff --git a/src/core/components/cryptography/index.js b/src/core/components/cryptography/index.js
index 1e72663e..8d6b400e 100644
--- a/src/core/components/cryptography/index.js
+++ b/src/core/components/cryptography/index.js
@@ -24,11 +24,10 @@ export default class {
 
   _defaultOptions;
 
   constructor({ config }) {
     this._config = config;
-
     this._iv = '0123456789012345';
 
     this._allowedKeyEncodings = ['hex', 'utf8', 'base64', 'binary'];
     this._allowedKeyLengths = [128, 256];
     this._allowedModes = ['ecb', 'cbc'];
diff --git a/src/core/components/subscription_manager.js b/src/core/components/subscription_manager.js
index 1e0e4016..8ca18a2b 100644
--- a/src/core/components/subscription_manager.js
+++ b/src/core/components/subscription_manager.js
@@ -56,10 +56,14 @@ export default class {
   _pendingChannelSubscriptions;
 
   _pendingChannelGroupSubscriptions;
   //
 
+  _cryptoModule;
+
+  _decoder;
+
   _dedupingManager;
 
   constructor({
     subscribeEndpoint,
     leaveEndpoint,
@@ -68,10 +72,11 @@ export default class {
     timeEndpoint,
     getFileUrl,
     config,
     crypto,
     listenerManager,
+    cryptoModule,
   }) {
     this._listenerManager = listenerManager;
     this._config = config;
 
     this._leaveEndpoint = leaveEndpoint;
@@ -79,10 +84,11 @@ export default class {
     this._setStateEndpoint = setStateEndpoint;
     this._subscribeEndpoint = subscribeEndpoint;
     this._getFileUrl = getFileUrl;
 
     this._crypto = crypto;
+    this._cryptoModule = cryptoModule;
 
     this._channels = {};
     this._presenceChannels = {};
 
     this._heartbeatChannels = {};
@@ -102,10 +108,12 @@ export default class {
 
     this._isOnline = true;
 
     this._reconnectionManager = new ReconnectionManager({ timeEndpoint });
     this._dedupingManager = new DedupingManager({ config });
+
+    if (this._cryptoModule) this._decoder = new TextDecoder();
   }
 
   adaptStateChange(args, callback) {
     const { state, channels = [], channelGroups = [], withHeartbeat = false } = args;
 
@@ -681,14 +689,23 @@ export default class {
         announce.timetoken = publishMetaData.publishTimetoken;
         announce.publisher = message.issuingClientId;
 
         let msgPayload = message.payload;
 
-        if (this._config.cipherKey) {
-          const decryptedPayload = this._crypto.decrypt(message.payload);
-
-          if (typeof decryptedPayload === 'object' && decryptedPayload !== null) {
+        if (this._cryptoModule) {
+          let decryptedPayload;
+          try {
+            const decryptedData = this._cryptoModule.decrypt(message.payload);
+            decryptedPayload =
+              decryptedData instanceof ArrayBuffer ? JSON.parse(this._decoder.decode(decryptedData)) : decryptedData;
+          } catch (e) {
+            decryptedPayload = null;
+            if (console && console.log) {
+              console.log('decryption error', e.message);
+            }
+          }
+          if (decryptedPayload !== null) {
             msgPayload = decryptedPayload;
           }
         }
 
         if (message.userMetadata) {
@@ -725,12 +742,28 @@ export default class {
 
         if (message.userMetadata) {
           announce.userMetadata = message.userMetadata;
         }
 
-        if (this._config.cipherKey) {
-          announce.message = this._crypto.decrypt(message.payload);
+        if (this._cryptoModule) {
+          let decryptedPayload;
+          try {
+            const decryptedData = this._cryptoModule.decrypt(message.payload);
+            decryptedPayload =
+              decryptedData instanceof ArrayBuffer ? JSON.parse(this._decoder.decode(decryptedData)) : decryptedData;
+          } catch (e) {
+            decryptedPayload = null;
+            // eslint-disable-next-line
+            if (console && console.log) {
+              console.log('decryption error', e.message); //eslint-disable-line
+            }
+          }
+          if (decryptedPayload != null) {
+            announce.message = decryptedPayload;
+          } else {
+            announce.message = message.payload;
+          }
         } else {
           announce.message = message.payload;
         }
 
         this._listenerManager.announceMessage(announce);
diff --git a/src/core/endpoints/fetch_messages.js b/src/core/endpoints/fetch_messages.js
index 5ba4f1a2..c4f23245 100644
--- a/src/core/endpoints/fetch_messages.js
+++ b/src/core/endpoints/fetch_messages.js
@@ -9,16 +9,18 @@ import {
 } from '../flow_interfaces';
 import operationConstants from '../constants/operations';
 import utils from '../utils';
 
 function __processMessage(modules, message) {
-  const { config, crypto } = modules;
-  if (!config.cipherKey) return message;
-
+  if (!modules.cryptoModule) return message;
   try {
-    return crypto.decrypt(message);
+    const decryptedData = modules.cryptoModule.decrypt(message);
+    const decryptedPayload =
+      decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
+    return decryptedPayload;
   } catch (e) {
+    if (console && console.log) console.log('decryption error', e.message);
     return message;
   }
 }
 
 export function getOperation() {
diff --git a/src/core/endpoints/file_upload/download_file.js b/src/core/endpoints/file_upload/download_file.js
index 232c8bee..3668f633 100644
--- a/src/core/endpoints/file_upload/download_file.js
+++ b/src/core/endpoints/file_upload/download_file.js
@@ -1,5 +1,7 @@
+// Download_file.js
+
 /**       */
 
 import operationConstants from '../../constants/operations';
 
 import utils from '../../utils';
@@ -32,15 +34,17 @@ const endpoint = {
   ignoreBody: () => true,
   forceBuffered: () => true,
 
   prepareParams: () => ({}),
 
-  handleResponse: async ({ PubNubFile, config, cryptography }, res, params) => {
+  handleResponse: async ({ PubNubFile, config, cryptography, cryptoModule }, res, params) => {
     let { body } = res.response;
-
-    if (PubNubFile.supportsEncryptFile && (params.cipherKey ?? config.cipherKey)) {
-      body = await cryptography.decrypt(params.cipherKey ?? config.cipherKey, body);
+    if (PubNubFile.supportsEncryptFile && (params.cipherKey || cryptoModule)) {
+      body =
+        params.cipherKey == null
+          ? (await cryptoModule.decryptFile(PubNubFile.create({ data: body, name: params.name }), PubNubFile)).data
+          : await cryptography.decrypt(params.cipherKey ?? config.cipherKey, body);
     }
 
     return PubNubFile.create({
       data: body,
       name: res.response.name ?? params.name,
diff --git a/src/core/endpoints/file_upload/publish_file.js b/src/core/endpoints/file_upload/publish_file.js
index 9f56f9de..3a111935 100644
--- a/src/core/endpoints/file_upload/publish_file.js
+++ b/src/core/endpoints/file_upload/publish_file.js
@@ -1,19 +1,18 @@
 /**       */
 
 import operationConstants from '../../constants/operations';
-
 import utils from '../../utils';
+import { encode } from '../../components/base64_codec';
 
-const preparePayload = ({ crypto, config }, payload) => {
+const preparePayload = (modules, payload) => {
   let stringifiedPayload = JSON.stringify(payload);
-
-  if (config.cipherKey) {
-    stringifiedPayload = crypto.encrypt(stringifiedPayload);
+  if (modules.cryptoModule) {
+    const encrypted = modules.cryptoModule.encrypt(stringifiedPayload);
+    stringifiedPayload = typeof encrypted === 'string' ? encrypted : encode(encrypted);
     stringifiedPayload = JSON.stringify(stringifiedPayload);
   }
-
   return stringifiedPayload || '';
 };
 
 const endpoint = {
   getOperation: () => operationConstants.PNPublishFileOperation,
diff --git a/src/core/endpoints/file_upload/send_file.js b/src/core/endpoints/file_upload/send_file.js
index 5eb8be76..f2d2fb81 100644
--- a/src/core/endpoints/file_upload/send_file.js
+++ b/src/core/endpoints/file_upload/send_file.js
@@ -1,11 +1,11 @@
 import { PubNubError, createValidationError } from '../../components/endpoint';
 
 const sendFile = function ({
   generateUploadUrl,
   publishFile,
-  modules: { PubNubFile, config, cryptography, networking },
+  modules: { PubNubFile, config, cryptography, cryptoModule, networking },
 }) {
   return async ({ channel, file: input, message, cipherKey, meta, ttl, storeInHistory }) => {
     if (!channel) {
       throw new PubNubError(
         'Validation failed, check status for details',
@@ -25,12 +25,15 @@ const sendFile = function ({
     const {
       file_upload_request: { url, form_fields: formFields },
       data: { id, name },
     } = await generateUploadUrl({ channel, name: file.name });
 
-    if (PubNubFile.supportsEncryptFile && (cipherKey ?? config.cipherKey)) {
-      file = await cryptography.encryptFile(cipherKey ?? config.cipherKey, file, PubNubFile);
+    if (PubNubFile.supportsEncryptFile && (cipherKey || cryptoModule)) {
+      file =
+        cipherKey == null
+          ? await cryptoModule.encryptFile(file, PubNubFile)
+          : await cryptography.encryptFile(cipherKey, file, PubNubFile);
     }
 
     let formFieldsWithMimeType = formFields;
 
     if (file.mimeType) {
diff --git a/src/core/endpoints/history/get_history.js b/src/core/endpoints/history/get_history.js
index afa3c952..51f2c901 100644
--- a/src/core/endpoints/history/get_history.js
+++ b/src/core/endpoints/history/get_history.js
@@ -3,16 +3,18 @@
 import { FetchHistoryArguments, HistoryResponse, HistoryItem, ModulesInject } from '../../flow_interfaces';
 import operationConstants from '../../constants/operations';
 import utils from '../../utils';
 
 function __processMessage(modules, message) {
-  const { config, crypto } = modules;
-  if (!config.cipherKey) return message;
-
+  if (!modules.cryptoModule) return message;
   try {
-    return crypto.decrypt(message);
+    const decryptedData = modules.cryptoModule.decrypt(message);
+    const decryptedPayload =
+      decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
+    return decryptedPayload;
   } catch (e) {
+    if (console && console.log) console.log('decryption error', e.message);
     return message;
   }
 }
 
 export function getOperation() {
diff --git a/src/core/endpoints/publish.js b/src/core/endpoints/publish.js
index 3bfc71d9..2cb90f0e 100644
--- a/src/core/endpoints/publish.js
+++ b/src/core/endpoints/publish.js
@@ -1,21 +1,21 @@
 /*       */
 
 import { PublishResponse, PublishArguments, ModulesInject } from '../flow_interfaces';
 import operationConstants from '../constants/operations';
 import utils from '../utils';
+import { encode } from '../components/base64_codec';
 
 function prepareMessagePayload(modules, messagePayload) {
-  const { crypto, config } = modules;
   let stringifiedPayload = JSON.stringify(messagePayload);
 
-  if (config.cipherKey) {
-    stringifiedPayload = crypto.encrypt(stringifiedPayload);
+  if (modules.cryptoModule) {
+    const encrypted = modules.cryptoModule.encrypt(stringifiedPayload);
+    stringifiedPayload = typeof encrypted === 'string' ? encrypted : encode(encrypted);
     stringifiedPayload = JSON.stringify(stringifiedPayload);
   }
-
-  return stringifiedPayload;
+  return stringifiedPayload || '';
 }
 
 export function getOperation() {
   return operationConstants.PNPublishOperation;
 }
diff --git a/src/core/pubnub-common.js b/src/core/pubnub-common.js
index 1c15e342..e85ea983 100644
--- a/src/core/pubnub-common.js
+++ b/src/core/pubnub-common.js
@@ -1,7 +1,8 @@
 import Config from './components/config';
 import Crypto from './components/cryptography/index';
+import { encode } from './components/base64_codec';
 import SubscriptionManager from './components/subscription_manager';
 import TelemetryManager from './components/telemetry_manager';
 import NotificationsPayload from './components/push_payload';
 import ListenerManager from './components/listener_manager';
 import TokenManager from './components/token_manager';
@@ -289,25 +290,39 @@ export default class {
     const telemetryManager = new TelemetryManager({
       maximumSamplesCount: 60000,
     });
 
     this._telemetryManager = telemetryManager;
+    const cryptoModule = this._config.cryptoModule;
 
     const modules = {
       config,
       networking,
       crypto,
       cryptography,
       tokenManager,
       telemetryManager,
       PubNubFile: setup.PubNubFile,
+      cryptoModule: cryptoModule,
     };
 
     this.File = setup.PubNubFile;
 
-    this.encryptFile = (key, file) => cryptography.encryptFile(key, file, this.File);
-    this.decryptFile = (key, file) => cryptography.decryptFile(key, file, this.File);
+    this.encryptFile = function (key, file) {
+      if (arguments.length == 1 && typeof key != 'string' && modules.cryptoModule) {
+        file = key;
+        return modules.cryptoModule.encryptFile(file, this.File);
+      }
+      return cryptography.encryptFile(key, file, this.File);
+    };
+    this.decryptFile = function (key, file) {
+      if (arguments.length == 1 && typeof key != 'string' && modules.cryptoModule) {
+        file = key;
+        return modules.cryptoModule.decryptFile(file, this.File);
+      }
+      return cryptography.decryptFile(key, file, this.File);
+    };
 
     const timeEndpoint = endpointCreator.bind(this, modules, timeEndpointConfig);
     const leaveEndpoint = endpointCreator.bind(this, modules, presenceLeaveEndpointConfig);
     const heartbeatEndpoint = endpointCreator.bind(this, modules, presenceHeartbeatEndpointConfig);
     const setStateEndpoint = endpointCreator.bind(this, modules, presenceSetStateConfig);
@@ -339,10 +354,11 @@ export default class {
         subscribeEndpoint,
         crypto: modules.crypto,
         config: modules.config,
         listenerManager,
         getFileUrl: (params) => getFileUrlFunction(modules, params),
+        cryptoModule: modules.cryptoModule,
       });
 
       this.subscribe = subscriptionManager.adaptSubscribeChange.bind(subscriptionManager);
       this.unsubscribe = subscriptionManager.adaptUnsubscribeChange.bind(subscriptionManager);
       this.disconnect = subscriptionManager.disconnect.bind(subscriptionManager);
@@ -662,24 +678,38 @@ export default class {
     // --- deprecated  ------------------
     this.stop = this.destroy; // --------
     // --- deprecated  ------------------
 
     // mount crypto
-    this.encrypt = crypto.encrypt.bind(crypto);
-    this.decrypt = crypto.decrypt.bind(crypto);
+    this.encrypt = function (data, key) {
+      if (typeof key === 'undefined' && modules.cryptoModule) {
+        const encrypted = modules.cryptoModule.encrypt(data);
+        return typeof encrypted === 'string' ? encrypted : encode(encrypted);
+      } else {
+        return crypto.encrypt(data, key);
+      }
+    };
+    this.decrypt = function (data, key) {
+      if (typeof key === 'undefined' && cryptoModule) {
+        const decrypted = modules.cryptoModule.decrypt(data);
+        return decrypted instanceof ArrayBuffer ? encode(decrypted) : decrypted;
+      } else {
+        return crypto.decrypt(data, key);
+      }
+    };
 
     /* config */
     this.getAuthKey = modules.config.getAuthKey.bind(modules.config);
     this.setAuthKey = modules.config.setAuthKey.bind(modules.config);
-    this.setCipherKey = modules.config.setCipherKey.bind(modules.config);
     this.getUUID = modules.config.getUUID.bind(modules.config);
     this.setUUID = modules.config.setUUID.bind(modules.config);
     this.getUserId = modules.config.getUserId.bind(modules.config);
     this.setUserId = modules.config.setUserId.bind(modules.config);
     this.getFilterExpression = modules.config.getFilterExpression.bind(modules.config);
     this.setFilterExpression = modules.config.setFilterExpression.bind(modules.config);
-
+    // this.setCipherKey = modules.config.setCipherKey.bind(modules.config);
+    this.setCipherKey = (key) => modules.config.setCipherKey(key, setup, modules);
     this.setHeartbeatInterval = modules.config.setHeartbeatInterval.bind(modules.config);
 
     if (networking.hasModule('proxy')) {
       this.setProxy = (proxy) => {
         modules.config.setProxy(proxy);
diff --git a/src/core/utils.js b/src/core/utils.js
index fd42d438..5f88aecc 100644
--- a/src/core/utils.js
+++ b/src/core/utils.js
@@ -30,11 +30,21 @@ function createPromise() {
   });
 
   return { promise, reject: failureResolve, fulfill: successResolve };
 }
 
+function stringToArrayBuffer(str) {
+  var buf = new ArrayBuffer(str.length * 2);
+  var bufView = new Uint16Array(buf);
+  for (var i = 0, strLen = str.length; i < strLen; i++) {
+    bufView[i] = str.charCodeAt(i);
+  }
+  return buf;
+}
+
 module.exports = {
   signPamFromParams,
   endsWith,
   createPromise,
   encodeString,
+  stringToArrayBuffer,
 };
diff --git a/src/crypto/modules/NodeCryptoModule/ICryptor.ts b/src/crypto/modules/NodeCryptoModule/ICryptor.ts
new file mode 100644
index 00000000..5e73cee3
--- /dev/null
+++ b/src/crypto/modules/NodeCryptoModule/ICryptor.ts
@@ -0,0 +1,19 @@
+export type EncryptedDataType = {
+  data: Buffer | string;
+  metadata: Buffer | null;
+};
+
+export type EncryptedStream = {
+  stream: NodeJS.ReadableStream;
+  metadataLength: number;
+  metadata?: Buffer | undefined;
+};
+
+export interface ICryptor {
+  get identifier(): string;
+  encrypt(data: BufferSource | string): EncryptedDataType;
+  decrypt(data: EncryptedDataType): ArrayBuffer;
+
+  encryptStream(stream: NodeJS.ReadableStream): Promise<EncryptedStream>;
+  decryptStream(encryptedStream: EncryptedStream): Promise<NodeJS.ReadableStream>;
+}
diff --git a/src/crypto/modules/NodeCryptoModule/ILegacyCryptor.ts b/src/crypto/modules/NodeCryptoModule/ILegacyCryptor.ts
new file mode 100644
index 00000000..9a63aa45
--- /dev/null
+++ b/src/crypto/modules/NodeCryptoModule/ILegacyCryptor.ts
@@ -0,0 +1,26 @@
+import { EncryptedDataType } from './ICryptor';
+
+export type PubNubFileType = {
+  stream: NodeJS.ReadStream;
+  data: NodeJS.ReadStream | Buffer;
+  name: string;
+  mimeType: string;
+  contentLength: number;
+
+  create(config: any): PubNubFileType;
+
+  toBuffer(): Buffer;
+  toArrayBuffer(): ArrayBuffer;
+  toString(): string;
+  toStream(): NodeJS.ReadStream;
+};
+
+export interface ILegacyCryptor<T extends PubNubFileType> {
+  get identifier(): string;
+
+  encrypt(data: string | ArrayBuffer): EncryptedDataType;
+  decrypt(data: EncryptedDataType): BufferSource | string;
+
+  encryptFile(file: T, File: T): Promise<T>;
+  decryptFile(file: T, File: T): Promise<T>;
+}
diff --git a/src/crypto/modules/NodeCryptoModule/aesCbcCryptor.ts b/src/crypto/modules/NodeCryptoModule/aesCbcCryptor.ts
new file mode 100644
index 00000000..68cfb89a
--- /dev/null
+++ b/src/crypto/modules/NodeCryptoModule/aesCbcCryptor.ts
@@ -0,0 +1,97 @@
+import { PassThrough } from 'stream';
+import { createCipheriv, createDecipheriv, createHash, randomBytes } from 'crypto';
+import { ICryptor, EncryptedDataType, EncryptedStream } from './ICryptor';
+
+export default class AesCbcCryptor implements ICryptor {
+  static BLOCK_SIZE = 16;
+
+  cipherKey: string;
+  constructor(configuration: { cipherKey: string }) {
+    this.cipherKey = configuration.cipherKey;
+  }
+
+  get algo() {
+    return 'aes-256-cbc';
+  }
+
+  get identifier() {
+    return 'ACRH';
+  }
+
+  getIv() {
+    return randomBytes(AesCbcCryptor.BLOCK_SIZE);
+  }
+
+  getKey() {
+    const sha = createHash('sha256');
+    sha.update(Buffer.from(this.cipherKey, 'utf8'));
+    return Buffer.from(sha.digest());
+  }
+
+  encrypt(data: ArrayBuffer | string) {
+    const iv = this.getIv();
+    const key = this.getKey();
+    const plainData = typeof data === 'string' ? new TextEncoder().encode(data) : data;
+    const bPlain = Buffer.from(plainData);
+    if (bPlain.byteLength === 0) throw new Error('encryption error. empty content');
+    const aes = createCipheriv(this.algo, key, iv);
+
+    return {
+      metadata: iv,
+      data: Buffer.concat([aes.update(bPlain), aes.final()]),
+    };
+  }
+
+  decrypt(encryptedData: EncryptedDataType) {
+    const data =
+      typeof encryptedData.data === 'string' ? new TextEncoder().encode(encryptedData.data) : encryptedData.data;
+    if (data.byteLength <= 0) throw new Error('decryption error: empty content');
+    const aes = createDecipheriv(this.algo, this.getKey(), encryptedData.metadata);
+    return Uint8Array.from(Buffer.concat([aes.update(data), aes.final()])).buffer;
+  }
+
+  async encryptStream(stream: NodeJS.ReadableStream) {
+    const output = new PassThrough();
+    const bIv = this.getIv();
+    if (stream.readable === false) throw new Error('encryption error. empty stream');
+    const aes = createCipheriv(this.algo, this.getKey(), bIv);
+    stream.pipe(aes).pipe(output);
+    return {
+      stream: output,
+      metadata: bIv,
+      metadataLength: AesCbcCryptor.BLOCK_SIZE,
+    };
+  }
+
+  async decryptStream(encryptedStream: EncryptedStream) {
+    const decryptedStream = new PassThrough();
+    let bIv = Buffer.alloc(0);
+    let aes: any = null;
+    const onReadable = () => {
+      let data = encryptedStream.stream.read();
+      while (data !== null) {
+        if (data) {
+          const bChunk = Buffer.from(data);
+          const sliceLen = encryptedStream.metadataLength - bIv.byteLength;
+          if (bChunk.byteLength < sliceLen) {
+            bIv = Buffer.concat([bIv, bChunk]);
+          } else {
+            bIv = Buffer.concat([bIv, bChunk.slice(0, sliceLen)]);
+            aes = createDecipheriv(this.algo, this.getKey(), bIv);
+            aes.pipe(decryptedStream);
+            aes.write(bChunk.slice(sliceLen));
+          }
+        }
+        data = encryptedStream.stream.read();
+      }
+    };
+    encryptedStream.stream.on('readable', onReadable);
+    encryptedStream.stream.on('end', () => {
+      if (aes) {
+        aes.end();
+      }
+      decryptedStream.end();
+    });
+    return decryptedStream;
+  }
+}
diff --git a/src/crypto/modules/NodeCryptoModule/legacyCryptor.ts b/src/crypto/modules/NodeCryptoModule/legacyCryptor.ts
new file mode 100644
index 00000000..c8a28fc6
--- /dev/null
+++ b/src/crypto/modules/NodeCryptoModule/legacyCryptor.ts
@@ -0,0 +1,41 @@
+import Crypto from '../../../core/components/cryptography/index';
+import { encode } from '../../../core/components/base64_codec';
+import FileCryptor from '../node';
+import { EncryptedDataType } from './ICryptor';
+import { ILegacyCryptor, PubNubFileType } from './ILegacyCryptor';
+
+export default class LegacyCryptor implements ILegacyCryptor<PubNubFileType> {
+  config;
+
+  cryptor;
+  fileCryptor;
+
+  constructor(config: any) {
+    this.config = config;
+    this.cryptor = new Crypto({ config });
+    this.fileCryptor = new FileCryptor();
+  }
+  get identifier() {
+    return '';
+  }
+  encrypt(data: string) {
+    if (data.length === 0) throw new Error('encryption error. empty content');
+    return {
+      data: this.cryptor.encrypt(data),
+      metadata: null,
+    };
+  }
+
+  decrypt(encryptedData: EncryptedDataType) {
+    const data = typeof encryptedData.data === 'string' ? encryptedData.data : encode(encryptedData.data);
+    return this.cryptor.decrypt(data);
+  }
+
+  async encryptFile(file: PubNubFileType, File: PubNubFileType) {
+    return this.fileCryptor.encryptFile(this.config.cipherKey, file, File);
+  }
+
+  async decryptFile(file: PubNubFileType, File: PubNubFileType) {
+    return this.fileCryptor.decryptFile(this.config.cipherKey, file, File);
+  }
+}
diff --git a/src/crypto/modules/NodeCryptoModule/nodeCryptoModule.ts b/src/crypto/modules/NodeCryptoModule/nodeCryptoModule.ts
new file mode 100644
index 00000000..a1d21894
--- /dev/null
+++ b/src/crypto/modules/NodeCryptoModule/nodeCryptoModule.ts
@@ -0,0 +1,350 @@
+import { Readable, PassThrough } from 'stream';
+import { decode } from '../../../core/components/base64_codec';
+import LegacyCryptor from './legacyCryptor';
+import AesCbcCryptor from './aesCbcCryptor';
+import { ICryptor } from './ICryptor';
+import { ILegacyCryptor, PubNubFileType } from './ILegacyCryptor';
+
+export { LegacyCryptor, AesCbcCryptor };
+
+type CryptorType = ICryptor | ILegacyCryptor<PubNubFileType>;
+
+type CryptoModuleConfiguration = {
+  default: CryptorType;
+  cryptors?: Array<CryptorType>;
+};
+
+export class CryptoModule {
+  static LEGACY_IDENTIFIER = '';
+
+  defaultCryptor: CryptorType;
+  cryptors: Array<CryptorType>;
+
+  constructor(cryptoModuleConfiguration: CryptoModuleConfiguration) {
+    this.defaultCryptor = cryptoModuleConfiguration.default;
+    this.cryptors = cryptoModuleConfiguration.cryptors ?? [];
+  }
+
+  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+  // @ts-ignore: type detection issue with old Config type assignment
+  static legacyCryptoModule(config) {
+    return new this({
+      default: new LegacyCryptor({
+        cipherKey: config.cipherKey,
+        useRandomIVs: config.useRandomIVs ?? true,
+      }),
+      cryptors: [new AesCbcCryptor({ cipherKey: config.cipherKey })],
+    });
+  }
+
+  static aesCbcCryptoModule(config: any) {
+    return new this({
+      default: new AesCbcCryptor({ cipherKey: config.cipherKey }),
+      cryptors: [
+        new LegacyCryptor({
+          cipherKey: config.cipherKey,
+          useRandomIVs: config.useRandomIVs ?? true,
+        }),
+      ],
+    });
+  }
+  static withDefaultCryptor(defaultCryptor: CryptorType) {
+    return new this({ default: defaultCryptor });
+  }
+
+  private getAllCryptors() {
+    return [this.defaultCryptor, ...this.cryptors];
+  }
+
+  private getLegacyCryptor() {
+    return this.getAllCryptors().find((c) => c.identifier === '');
+  }
+
+  encrypt(data: ArrayBuffer | string) {
+    const encrypted = this.defaultCryptor.encrypt(data);
+    if (!encrypted.metadata) return encrypted.data;
+
+    const header = CryptorHeader.from(this.defaultCryptor.identifier, encrypted.metadata);
+
+    const headerData = new Uint8Array(header!.length);
+    let pos = 0;
+    headerData.set(header!.data, pos);
+    pos = header!.length - encrypted.metadata.length;
+    headerData.set(encrypted.metadata, pos);
+    return Buffer.concat([headerData, Buffer.from(encrypted.data)]);
+  }
+
+  decrypt(data: ArrayBuffer | string) {
+    const encryptedData = Buffer.from(typeof data === 'string' ? decode(data) : data);
+    const header = CryptorHeader.tryParse(encryptedData);
+    const cryptor = this.getCryptor(header);
+    const metadata =
+      header.length > 0
+        ? encryptedData.slice(header.length - (header as CryptorHeaderV1).metadataLength, header.length)
+        : null;
+    if (encryptedData.slice(header.length).byteLength <= 0) throw new Error('decryption error. empty content');
+    return cryptor!.decrypt({
+      data: encryptedData.slice(header.length),
+      metadata: metadata,
+    });
+  }
+
+  async encryptFile(file: PubNubFileType, File: PubNubFileType) {
+    /**
+     * Files handled differently in case of Legacy cryptor.
+     * (as long as we support legacy need to check on intsance type)
+     */
+    if (this.defaultCryptor.identifier === CryptorHeader.LEGACY_IDENTIFIER)
+      return (this.defaultCryptor as ILegacyCryptor<PubNubFileType>).encryptFile(file, File);
+    if (file.data instanceof Buffer) {
+      return File.create({
+        name: file.name,
+        mimeType: 'application/octet-stream',
+        data: Buffer.from(this.encrypt(file.data!) as Buffer),
+      });
+    }
+    if (file.data instanceof Readable) {
+      if (file.contentLength === 0) throw new Error('encryption error. empty content');
+      const encryptedStream = await (this.defaultCryptor as ICryptor).encryptStream(file.data);
+      const header = CryptorHeader.from(this.defaultCryptor.identifier, encryptedStream.metadata!);
+      const payload = new Uint8Array(header!.length);
+      let pos = 0;
+      payload.set(header!.data, pos);
+      pos += header!.length;
+      if (encryptedStream.metadata) {
+        pos -= encryptedStream.metadata.length;
+        payload.set(encryptedStream.metadata, pos);
+      }
+      const output = new PassThrough();
+      output.write(payload);
+      encryptedStream.stream.pipe(output);
+      return File.create({
+        name: file.name,
+        mimeType: 'application/octet-stream',
+        stream: output,
+      });
+    }
+  }
+
+  async decryptFile(file: PubNubFileType, File: PubNubFileType) {
+    if (file?.data instanceof Buffer) {
+      const header = CryptorHeader.tryParse(file.data);
+      const cryptor = this.getCryptor(header);
+      /**
+       * If It's legacyone then redirect it.
+       * (as long as we support legacy need to check on instance type)
+       */
+      if (cryptor?.identifier === CryptoModule.LEGACY_IDENTIFIER)
+        return (cryptor as ILegacyCryptor<PubNubFileType>).decryptFile(file, File);
+      return File.create({
+        name: file.name,
+        data: Buffer.from(this.decrypt(file?.data) as ArrayBuffer),
+      });
+    }
+
+    if (file.data instanceof Readable) {
+      const stream = file.data;
+      return new Promise((resolve) => {
+        stream.on('readable', () => resolve(this.onStreamReadable(stream, file, File)));
+      });
+    }
+  }
+
+  private async onStreamReadable(stream: NodeJS.ReadableStream, file: PubNubFileType, File: PubNubFileType) {
+    stream.removeAllListeners('readable');
+    const magicBytes = stream.read(4);
+    if (!CryptorHeader.isSentinel(magicBytes as Buffer)) {
+      if (magicBytes === null) throw new Error('decryption error. empty content');
+      stream.unshift(magicBytes);
+      return this.decryptLegacyFileStream(stream, file, File);
+    }
+    const versionByte = stream.read(1);
+    CryptorHeader.validateVersion(versionByte[0] as number);
+    const identifier = stream.read(4);
+    const cryptor = this.getCryptorFromId(CryptorHeader.tryGetIdentifier(identifier as Buffer));
+    const headerSize = CryptorHeader.tryGetMetadataSizeFromStream(stream);
+    if (file.contentLength <= CryptorHeader.MIN_HEADER_LEGTH + headerSize)
+      throw new Error('decryption error. empty content');
+    return File.create({
+      name: file.name,
+      mimeType: 'application/octet-stream',
+      stream: await (cryptor as ICryptor).decryptStream({ stream: stream, metadataLength: headerSize as number }),
+    });
+  }
+
+  private async decryptLegacyFileStream(stream: NodeJS.ReadableStream, file: PubNubFileType, File: PubNubFileType) {
+    if (file.contentLength <= 16) throw new Error('decryption error: empty content');
+    const cryptor = this.getLegacyCryptor();
+    if (cryptor) {
+      return (cryptor as ILegacyCryptor<PubNubFileType>).decryptFile(
+        File.create({
+          name: file.name,
+          stream: stream,
+        }),
+        File,
+      );
+    } else {
+      throw new Error('unknown cryptor error');
+    }
+  }
+
+  private getCryptor(header: CryptorHeader) {
+    if (header === '') {
+      const cryptor = this.getAllCryptors().find((c) => c.identifier === '');
+      if (cryptor) return cryptor;
+      throw new Error('unknown cryptor error');
+    } else if (header instanceof CryptorHeaderV1) {
+      return this.getCryptorFromId(header.identifier);
+    }
+  }
+
+  private getCryptorFromId(id: string) {
+    const cryptor = this.getAllCryptors().find((c) => id === c.identifier);
+    if (cryptor) {
+      return cryptor;
+    }
+    throw new Error('unknown cryptor error');
+  }
+}
+
+// CryptorHeader Utility
+class CryptorHeader {
+  static SENTINEL = 'PNED';
+  static LEGACY_IDENTIFIER = '';
+  static IDENTIFIER_LENGTH = 4;
+  static VERSION = 1;
+  static MAX_VERSION = 1;
+  static MIN_HEADER_LEGTH = 10;
+
+  static from(id: string, metadata: Buffer) {
+    if (id === CryptorHeader.LEGACY_IDENTIFIER) return;
+    return new CryptorHeaderV1(id, metadata.length);
+  }
+
+  static isSentinel(bytes: Buffer) {
+    if (bytes && bytes.byteLength >= 4) {
+      if (bytes.toString('utf8') == CryptorHeader.SENTINEL) return true;
+    }
+  }
+
+  static validateVersion(data: number) {
+    if (data && data > CryptorHeader.MAX_VERSION) throw new Error('decryption error. invalid header version');
+    return data;
+  }
+
+  static tryGetIdentifier(data: Buffer) {
+    if (data.byteLength < 4) {
+      throw new Error('unknown cryptor error. decryption failed');
+    } else {
+      return data.toString('utf8');
+    }
+  }
+
+  static tryGetMetadataSizeFromStream(stream: NodeJS.ReadableStream) {
+    const sizeBuf = stream.read(1);
+    if (sizeBuf && (sizeBuf[0] as number) < 255) {
+      return sizeBuf[0] as number;
+    }
+    if ((sizeBuf[0] as number) === 255) {
+      const nextBuf = stream.read(2);
+      if (nextBuf.length >= 2) {
+        return new Uint16Array([nextBuf[0] as number, nextBuf[1] as number]).reduce((acc, val) => (acc << 8) + val, 0);
+      }
+    }
+    throw new Error('decryption error. Invalid metadata size');
+  }
+  static tryParse(encryptedData: Buffer) {
+    let sentinel: any = '';
+    let version = null;
+    if (encryptedData.length >= 4) {
+      sentinel = encryptedData.slice(0, 4);
+      if (sentinel.toString('utf8') !== CryptorHeader.SENTINEL) return '';
+    }
+
+    if (encryptedData.length >= 5) {
+      version = encryptedData[4];
+    } else {
+      throw new Error('decryption error. invalid header version');
+    }
+    if (version > CryptorHeader.MAX_VERSION) throw new Error('unknown cryptor error');
+
+    let identifier: Buffer;
+    let pos = 5 + CryptorHeader.IDENTIFIER_LENGTH;
+    if (encryptedData.length >= pos) {
+      identifier = encryptedData.slice(5, pos);
+    } else {
+      throw new Error('decryption error. invalid crypto identifier');
+    }
+    let metadataLength = null;
+    if (encryptedData.length >= pos + 1) {
+      metadataLength = encryptedData[pos];
+    } else {
+      throw new Error('decryption error. invalid metadata length');
+    }
+    pos += 1;
+    if (metadataLength === 255 && encryptedData.length >= pos + 2) {
+      metadataLength = new Uint16Array(encryptedData.slice(pos, pos + 2)).reduce((acc, val) => (acc << 8) + val, 0);
+      pos += 2;
+    }
+    return new CryptorHeaderV1(identifier.toString('utf8'), metadataLength);
+  }
+}
+
+// v1 CryptorHeader
+class CryptorHeaderV1 {
+  _identifier;
+  _metadataLength;
+
+  constructor(id: string, metadataLength: number) {
+    this._identifier = id;
+    this._metadataLength = metadataLength;
+  }
+
+  get identifier() {
+    return this._identifier;
+  }
+
+  set identifier(value) {
+    this._identifier = value;
+  }
+
+  get metadataLength() {
+    return this._metadataLength;
+  }
+
+  set metadataLength(value) {
+    this._metadataLength = value;
+  }
+
+  get version() {
+    return CryptorHeader.VERSION;
+  }
+
+  get length() {
+    return (
+      CryptorHeader.SENTINEL.length +
+      1 +
+      CryptorHeader.IDENTIFIER_LENGTH +
+      (this.metadataLength < 255 ? 1 : 3) +
+      this.metadataLength
+    );
+  }
+
+  get data() {
+    let pos = 0;
+    const header = new Uint8Array(this.length);
+    header.set(Buffer.from(CryptorHeader.SENTINEL));
+    pos += CryptorHeader.SENTINEL.length;
+    header[pos] = this.version;
+    pos++;
+    if (this.identifier) header.set(Buffer.from(this.identifier), pos);
+    pos += CryptorHeader.IDENTIFIER_LENGTH;
+    const metadataLength = this.metadataLength;
+    if (metadataLength < 255) {
+      header[pos] = metadataLength;
+    } else {
+      header.set([255, metadataLength >> 8, metadataLength & 0xff], pos);
+    }
+    return header;
+  }
+}
diff --git a/src/crypto/modules/WebCryptoModule/ICryptor.ts b/src/crypto/modules/WebCryptoModule/ICryptor.ts
new file mode 100644
index 00000000..b15709c7
--- /dev/null
+++ b/src/crypto/modules/WebCryptoModule/ICryptor.ts
@@ -0,0 +1,13 @@
+export type EncryptedDataType = {
+  data: ArrayBuffer;
+  metadata: ArrayBuffer | null;
+};
+
+export interface ICryptor {
+  get identifier(): string;
+  encrypt(data: ArrayBuffer | string): EncryptedDataType;
+  decrypt(data: EncryptedDataType): ArrayBuffer;
+
+  encryptFileData(data: ArrayBuffer): Promise<EncryptedDataType>;
+  decryptFileData(data: EncryptedDataType): Promise<ArrayBuffer>;
+}
diff --git a/src/crypto/modules/WebCryptoModule/ILegacyCryptor.ts b/src/crypto/modules/WebCryptoModule/ILegacyCryptor.ts
new file mode 100644
index 00000000..c9ae022c
--- /dev/null
+++ b/src/crypto/modules/WebCryptoModule/ILegacyCryptor.ts
@@ -0,0 +1,24 @@
+import { EncryptedDataType } from './ICryptor';
+
+export type PubNubFileType = {
+  data: File | Blob;
+  name: string;
+  mimeType: string;
+
+  create(config: any): PubNubFileType;
+
+  toArrayBuffer(): ArrayBuffer;
+  toBlob(): Blob;
+  toString(): string;
+  toFile(): File;
+};
+
+export interface ILegacyCryptor<T extends PubNubFileType> {
+  get identifier(): string;
+
+  encrypt(data: ArrayBuffer | string): EncryptedDataType;
+  decrypt(data: EncryptedDataType): ArrayBuffer | string;
+
+  encryptFile(file: T, File: T): Promise<T>;
+  decryptFile(file: T, File: T): Promise<T>;
+}
diff --git a/src/crypto/modules/WebCryptoModule/aesCbcCryptor.ts b/src/crypto/modules/WebCryptoModule/aesCbcCryptor.ts
new file mode 100644
index 00000000..78bda217
--- /dev/null
+++ b/src/crypto/modules/WebCryptoModule/aesCbcCryptor.ts
@@ -0,0 +1,86 @@
+import { ICryptor, EncryptedDataType } from './ICryptor';
+import cryptoJS from '../../../core/components/cryptography/hmac-sha256';
+import { decode } from '../../../core/components/base64_codec';
+
+export default class AesCbcCryptor implements ICryptor {
+  static BLOCK_SIZE = 16;
+  static encoder = new TextEncoder();
+  static decoder = new TextDecoder();
+
+  cipherKey: string;
+  encryptedKey: any;
+  CryptoJS: any;
+
+  constructor(configuration: { cipherKey: string }) {
+    this.cipherKey = configuration.cipherKey;
+    this.CryptoJS = cryptoJS;
+    this.encryptedKey = this.CryptoJS.SHA256(this.cipherKey);
+  }
+
+  get algo() {
+    return 'AES-CBC';
+  }
+
+  get identifier() {
+    return 'ACRH';
+  }
+
+  private getIv() {
+    return crypto.getRandomValues(new Uint8Array(AesCbcCryptor.BLOCK_SIZE));
+  }
+
+  private async getKey() {
+    const bKey = AesCbcCryptor.encoder.encode(this.cipherKey);
+    const abHash = await crypto.subtle.digest('SHA-256', bKey.buffer);
+    return crypto.subtle.importKey('raw', abHash, this.algo, true, ['encrypt', 'decrypt']);
+  }
+
+  encrypt(data: ArrayBuffer | string) {
+    const stringData = typeof data === 'string' ? data : AesCbcCryptor.decoder.decode(data);
+    if (stringData.length === 0) throw new Error('encryption error. empty content');
+    const abIv = this.getIv();
+    return {
+      metadata: abIv,
+      data: decode(
+        this.CryptoJS.AES.encrypt(data, this.encryptedKey, {
+          iv: this.bufferToWordArray(abIv),
+          mode: this.CryptoJS.mode.CBC,
+        }).ciphertext.toString(this.CryptoJS.enc.Base64),
+      ),
+    };
+  }
+
+  decrypt(encryptedData: EncryptedDataType) {
+    const iv = this.bufferToWordArray(new Uint8ClampedArray(encryptedData.metadata!));
+    const data = this.bufferToWordArray(new Uint8ClampedArray(encryptedData.data));
+    return AesCbcCryptor.encoder.encode(
+      this.CryptoJS.AES.decrypt({ ciphertext: data }, this.encryptedKey, {
+        iv,
+        mode: this.CryptoJS.mode.CBC,
+      }).toString(this.CryptoJS.enc.Utf8),
+    ).buffer;
+  }
+
+  async encryptFileData(data: ArrayBuffer): Promise<EncryptedDataType> {
+    const key = await this.getKey();
+    const iv = this.getIv();
+    return {
+      data: await crypto.subtle.encrypt({ name: this.algo, iv: iv }, key, data),
+      metadata: iv,
+    };
+  }
+
+  async decryptFileData(encryptedData: EncryptedDataType): Promise<ArrayBuffer> {
+    const key = await this.getKey();
+    return crypto.subtle.decrypt({ name: this.algo, iv: encryptedData.metadata! }, key, encryptedData.data);
+  }
+
+  private bufferToWordArray(b: any) {
+    const wa: any[] = [];
+    let i;
+    for (i = 0; i < b.length; i += 1) {
+      wa[(i / 4) | 0] |= b[i] << (24 - 8 * i);
+    }
+    return this.CryptoJS.lib.WordArray.create(wa, b.length);
+  }
+}
diff --git a/src/crypto/modules/WebCryptoModule/legacyCryptor.ts b/src/crypto/modules/WebCryptoModule/legacyCryptor.ts
new file mode 100644
index 00000000..db4b96be
--- /dev/null
+++ b/src/crypto/modules/WebCryptoModule/legacyCryptor.ts
@@ -0,0 +1,46 @@
+import Crypto from '../../../core/components/cryptography/index';
+import FileCryptor from '../web';
+import { EncryptedDataType } from './ICryptor';
+import { ILegacyCryptor, PubNubFileType } from './ILegacyCryptor';
+import { encode } from '../../../core/components/base64_codec';
+
+export default class LegacyCryptor implements ILegacyCryptor<PubNubFileType> {
+  config;
+
+  cryptor;
+  fileCryptor;
+
+  constructor(config: any) {
+    this.config = config;
+    this.cryptor = new Crypto({ config });
+    this.fileCryptor = new FileCryptor();
+  }
+
+  get identifier() {
+    return '';
+  }
+  encrypt(data: ArrayBuffer | string) {
+    const stringData = typeof data === 'string' ? data : new TextDecoder().decode(data);
+    return {
+      data: this.cryptor.encrypt(stringData),
+      metadata: null,
+    };
+  }
+
+  decrypt(encryptedData: EncryptedDataType) {
+    const data = typeof encryptedData.data === 'string' ? encryptedData.data : encode(encryptedData.data);
+    return this.cryptor.decrypt(data);
+  }
+
+  async encryptFile(file: PubNubFileType, File: PubNubFileType) {
+    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+    //@ts-ignore: can not detect cipherKey from old Config
+    return this.fileCryptor.encryptFile(this.config?.cipherKey, file, File);
+  }
+
+  async decryptFile(file: PubNubFileType, File: PubNubFileType) {
+    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+    //@ts-ignore: can not detect cipherKey from old Config
+    return this.fileCryptor.decryptFile(this.config.cipherKey, file, File);
+  }
+}
diff --git a/src/crypto/modules/WebCryptoModule/webCryptoModule.ts b/src/crypto/modules/WebCryptoModule/webCryptoModule.ts
new file mode 100644
index 00000000..38ca192c
--- /dev/null
+++ b/src/crypto/modules/WebCryptoModule/webCryptoModule.ts
@@ -0,0 +1,273 @@
+import LegacyCryptor from './legacyCryptor';
+import AesCbcCryptor from './aesCbcCryptor';
+import { EncryptedDataType, ICryptor } from './ICryptor';
+import { ILegacyCryptor, PubNubFileType } from './ILegacyCryptor';
+import { decode } from '../../../core/components/base64_codec';
+
+export { LegacyCryptor, AesCbcCryptor };
+
+type CryptorType = ICryptor | ILegacyCryptor<PubNubFileType>;
+
+type CryptoModuleConfiguration = {
+  default: CryptorType;
+  cryptors?: Array<CryptorType>;
+};
+
+export class CryptoModule {
+  static LEGACY_IDENTIFIER = '';
+  static encoder = new TextEncoder();
+  static decoder = new TextDecoder();
+  defaultCryptor: CryptorType;
+  cryptors: Array<CryptorType>;
+
+  constructor(cryptoModuleConfiguration: CryptoModuleConfiguration) {
+    this.defaultCryptor = cryptoModuleConfiguration.default;
+    this.cryptors = cryptoModuleConfiguration.cryptors ?? [];
+  }
+
+  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+  //@ts-ignore: type detection issue with old Config type assignment
+  static legacyCryptoModule(config) {
+    return new this({
+      default: new LegacyCryptor({
+        cipherKey: config.cipherKey,
+        useRandomIVs: config.useRandomIVs ?? true,
+      }),
+      cryptors: [new AesCbcCryptor({ cipherKey: config.cipherKey })],
+    });
+  }
+
+  static aesCbcCryptoModule(config: any) {
+    return new this({
+      default: new AesCbcCryptor({ cipherKey: config.cipherKey }),
+      cryptors: [
+        new LegacyCryptor({
+          cipherKey: config.cipherKey,
+          useRandomIVs: config.useRandomIVs ?? true,
+        }),
+      ],
+    });
+  }
+
+  static withDefaultCryptor(defaultCryptor: CryptorType) {
+    return new this({ default: defaultCryptor });
+  }
+
+  private getAllCryptors() {
+    return [this.defaultCryptor, ...this.cryptors];
+  }
+
+  encrypt(data: ArrayBuffer | string) {
+    const encrypted = (this.defaultCryptor as ICryptor).encrypt(data);
+    if (!encrypted.metadata) return encrypted.data;
+    const headerData = this.getHeaderData(encrypted);
+    return this.concatArrayBuffer(headerData!, encrypted.data);
+  }
+
+  decrypt(data: ArrayBuffer | string) {
+    const encryptedData = typeof data === 'string' ? decode(data) : data;
+    const header = CryptorHeader.tryParse(encryptedData);
+    const cryptor = this.getCryptor(header);
+    const metadata =
+      header.length > 0
+        ? encryptedData.slice(header.length - (header as CryptorHeaderV1).metadataLength, header.length)
+        : null;
+    if (encryptedData.slice(header.length).byteLength <= 0) throw new Error('decryption error. empty content');
+    return cryptor!.decrypt({
+      data: encryptedData.slice(header.length),
+      metadata: metadata,
+    });
+  }
+
+  async encryptFile(file: PubNubFileType, File: PubNubFileType) {
+    if (this.defaultCryptor.identifier === CryptorHeader.LEGACY_IDENTIFIER)
+      return (this.defaultCryptor as ILegacyCryptor<PubNubFileType>).encryptFile(file, File);
+    const fileData = this.getFileData(file.data);
+    const encrypted = await (this.defaultCryptor as ICryptor).encryptFileData(fileData);
+    return File.create({
+      name: file.name,
+      mimeType: 'application/octet-stream',
+      data: this.concatArrayBuffer(this.getHeaderData(encrypted)!, encrypted.data),
+    });
+  }
+
+  async decryptFile(file: PubNubFileType, File: PubNubFileType) {
+    const data = await file.data.arrayBuffer();
+    const header = CryptorHeader.tryParse(data);
+    const cryptor = this.getCryptor(header);
+    if (cryptor?.identifier === CryptoModule.LEGACY_IDENTIFIER) {
+      return (cryptor as ILegacyCryptor<PubNubFileType>).decryptFile(file, File);
+    }
+    const fileData = this.getFileData(data);
+    const metadata = fileData.slice(header.length - (header as CryptorHeaderV1).metadataLength, header.length);
+    return File.create({
+      name: file.name,
+      data: await (this.defaultCryptor as ICryptor).decryptFileData({
+        data: data.slice(header.length),
+        metadata: metadata,
+      }),
+    });
+  }
+
+  private getCryptor(header: string | CryptorHeaderV1) {
+    if (header === '') {
+      const cryptor = this.getAllCryptors().find((c) => c.identifier === '');
+      if (cryptor) return cryptor;
+      throw new Error('unknown cryptor error');
+    } else if (header instanceof CryptorHeaderV1) {
+      return this.getCryptorFromId(header.identifier);
+    }
+  }
+
+  private getCryptorFromId(id: string) {
+    const cryptor = this.getAllCryptors().find((c) => id === c.identifier);
+    if (cryptor) {
+      return cryptor;
+    }
+    throw Error('unknown cryptor error');
+  }
+
+  private concatArrayBuffer(ab1: ArrayBuffer, ab2: ArrayBuffer) {
+    const tmp = new Uint8Array(ab1.byteLength + ab2.byteLength);
+
+    tmp.set(new Uint8Array(ab1), 0);
+    tmp.set(new Uint8Array(ab2), ab1.byteLength);
+
+    return tmp.buffer;
+  }
+
+  private getHeaderData(encrypted: EncryptedDataType) {
+    if (!encrypted.metadata) return;
+    const header = CryptorHeader.from(this.defaultCryptor.identifier, encrypted.metadata);
+    const headerData = new Uint8Array(header!.length);
+    let pos = 0;
+    headerData.set(header!.data, pos);
+    pos += header!.length - encrypted.metadata.byteLength;
+    headerData.set(new Uint8Array(encrypted.metadata), pos);
+    return headerData.buffer;
+  }
+
+  private getFileData(input: any) {
+    if (input instanceof ArrayBuffer) {
+      return input;
+    }
+    if (typeof input === 'string') {
+      return CryptoModule.encoder.encode(input);
+    }
+    throw new Error('Cannot decrypt/encrypt file. In browsers file decryption supports only string or ArrayBuffer');
+  }
+}
+
+// CryptorHeader Utility
+class CryptorHeader {
+  static SENTINEL = 'PNED';
+  static LEGACY_IDENTIFIER = '';
+  static IDENTIFIER_LENGTH = 4;
+  static VERSION = 1;
+  static MAX_VERSION = 1;
+  static decoder = new TextDecoder();
+
+  static from(id: string, metadata: ArrayBuffer) {
+    if (id === CryptorHeader.LEGACY_IDENTIFIER) return;
+    return new CryptorHeaderV1(id, metadata.byteLength);
+  }
+
+  static tryParse(data: ArrayBuffer) {
+    const encryptedData = new Uint8Array(data);
+    let sentinel: any = '';
+    let version = null;
+    if (encryptedData.byteLength >= 4) {
+      sentinel = encryptedData.slice(0, 4);
+      if (this.decoder.decode(sentinel) !== CryptorHeader.SENTINEL) return '';
+    }
+    if (encryptedData.byteLength >= 5) {
+      version = (encryptedData as Uint8Array)[4] as number;
+    } else {
+      throw new Error('decryption error. invalid header version');
+    }
+    if (version > CryptorHeader.MAX_VERSION) throw new Error('unknown cryptor error');
+
+    let identifier: any = '';
+    let pos = 5 + CryptorHeader.IDENTIFIER_LENGTH;
+    if (encryptedData.byteLength >= pos) {
+      identifier = encryptedData.slice(5, pos);
+    } else {
+      throw new Error('decryption error. invalid crypto identifier');
+    }
+    let metadataLength = null;
+    if (encryptedData.byteLength >= pos + 1) {
+      metadataLength = (encryptedData as Uint8Array)[pos];
+    } else {
+      throw new Error('decryption error. invalid metadata length');
+    }
+    pos += 1;
+    if (metadataLength === 255 && encryptedData.byteLength >= pos + 2) {
+      metadataLength = new Uint16Array(encryptedData.slice(pos, pos + 2)).reduce((acc, val) => (acc << 8) + val, 0);
+      pos += 2;
+    }
+    return new CryptorHeaderV1(this.decoder.decode(identifier), metadataLength);
+  }
+}
+
+// v1 CryptorHeader
+class CryptorHeaderV1 {
+  static IDENTIFIER_LENGTH = 4;
+  static SENTINEL = 'PNED';
+
+  _identifier;
+  _metadataLength;
+
+  constructor(id: string, metadataLength: number) {
+    this._identifier = id;
+    this._metadataLength = metadataLength;
+  }
+
+  get identifier() {
+    return this._identifier;
+  }
+
+  set identifier(value) {
+    this._identifier = value;
+  }
+
+  get metadataLength() {
+    return this._metadataLength;
+  }
+
+  set metadataLength(value) {
+    this._metadataLength = value;
+  }
+
+  get version() {
+    return CryptorHeader.VERSION;
+  }
+
+  get length() {
+    return (
+      CryptorHeader.SENTINEL.length +
+      1 +
+      CryptorHeader.IDENTIFIER_LENGTH +
+      (this.metadataLength < 255 ? 1 : 3) +
+      this.metadataLength
+    );
+  }
+
+  get data() {
+    let pos = 0;
+    const header = new Uint8Array(this.length);
+    const encoder = new TextEncoder();
+    header.set(encoder.encode(CryptorHeader.SENTINEL));
+    pos += CryptorHeader.SENTINEL.length;
+    header[pos] = this.version;
+    pos++;
+    if (this.identifier) header.set(encoder.encode(this.identifier), pos);
+    pos += CryptorHeader.IDENTIFIER_LENGTH;
+    const metadataLength = this.metadataLength;
+    if (metadataLength < 255) {
+      header[pos] = metadataLength;
+    } else {
+      header.set([255, metadataLength >> 8, metadataLength & 0xff], pos);
+    }
+    return header;
+  }
+}
diff --git a/src/crypto/modules/node.js b/src/crypto/modules/node.js
index 27e9f4f0..11055962 100644
--- a/src/crypto/modules/node.js
+++ b/src/crypto/modules/node.js
@@ -1,7 +1,7 @@
 /**       */
-import { Readable, PassThrough } from 'stream';
+import { Readable, PassThrough, Transform } from 'stream';
 import { createCipheriv, createDecipheriv, createHash, randomBytes } from 'crypto';
 
 export default class NodeCryptography {
   static IV_LENGTH = 16;
 
@@ -39,17 +39,19 @@ export default class NodeCryptography {
 
   async encryptFile(key, file, File) {
     const bKey = this.getKey(key);
 
     if (file.data instanceof Buffer) {
+      if (file.data.byteLength <= 0) throw new Error('encryption error. empty content');
       return File.create({
         name: file.name,
         mimeType: 'application/octet-stream',
         data: await this.encryptBuffer(bKey, file.data),
       });
     }
     if (file.data instanceof Readable) {
+      if (file.contentLength === 0) throw new Error('encryption error. empty content');
       return File.create({
         name: file.name,
         mimeType: 'application/octet-stream',
         stream: await this.encryptStream(bKey, file.data),
       });
@@ -116,26 +118,33 @@ export default class NodeCryptography {
   }
 
   decryptBuffer(key, ciphertext) {
     const bIv = ciphertext.slice(0, NodeCryptography.IV_LENGTH);
     const bCiphertext = ciphertext.slice(NodeCryptography.IV_LENGTH);
-
+    if (bCiphertext.byteLength <= 0) throw new Error('decryption error: empty content');
     const aes = createDecipheriv(this.algo, key, bIv);
 
     return Buffer.concat([aes.update(bCiphertext), aes.final()]);
   }
 
-  encryptStream(key, stream) {
-    const output = new PassThrough();
+  async encryptStream(key, stream) {
     const bIv = this.getIv();
-
-    const aes = createCipheriv(this.algo, key, bIv);
-
-    output.write(bIv);
-    stream.pipe(aes).pipe(output);
-
-    return output;
+    const aes = createCipheriv('aes-256-cbc', key, bIv).setAutoPadding(true);
+    let inited = false;
+    return stream.pipe(aes).pipe(
+      new Transform({
+        transform(chunk, _, cb) {
+          if (!inited) {
+            inited = true;
+            this.push(Buffer.concat([bIv, chunk]));
+          } else {
+            this.push(chunk);
+          }
+          cb();
+        },
+      }),
+    );
   }
 
   decryptStream(key, stream) {
     const output = new PassThrough();
 
diff --git a/src/crypto/modules/web.js b/src/crypto/modules/web.js
index 6940db0b..20e1a274 100644
--- a/src/crypto/modules/web.js
+++ b/src/crypto/modules/web.js
@@ -9,10 +9,12 @@ function concatArrayBuffer(ab1, ab2) {
   return tmp.buffer;
 }
 
 export default class WebCryptography {
   static IV_LENGTH = 16;
+  static encoder = new TextEncoder();
+  static decoder = new TextDecoder();
 
   get algo() {
     return 'aes-256-cbc';
   }
 
@@ -28,24 +30,24 @@ export default class WebCryptography {
     throw new Error('Cannot encrypt this file. In browsers file encryption supports only string or ArrayBuffer');
   }
 
   async decrypt(key, input) {
     const cKey = await this.getKey(key);
-
     if (input instanceof ArrayBuffer) {
       return this.decryptArrayBuffer(cKey, input);
     }
     if (typeof input === 'string') {
       return this.decryptString(cKey, input);
     }
     throw new Error('Cannot decrypt this file. In browsers file decryption supports only string or ArrayBuffer');
   }
 
   async encryptFile(key, file, File) {
+    if (file.data.byteLength <= 0) throw new Error('encryption error. empty content');
     const bKey = await this.getKey(key);
 
-    const abPlaindata = await file.toArrayBuffer();
+    const abPlaindata = await file.data.arrayBuffer();
 
     const abCipherdata = await this.encryptArrayBuffer(bKey, abPlaindata);
 
     return File.create({
       name: file.name,
@@ -55,26 +57,25 @@ export default class WebCryptography {
   }
 
   async decryptFile(key, file, File) {
     const bKey = await this.getKey(key);
 
-    const abCipherdata = await file.toArrayBuffer();
-
+    const abCipherdata = await file.data.arrayBuffer();
     const abPlaindata = await this.decryptArrayBuffer(bKey, abCipherdata);
 
     return File.create({
       name: file.name,
       data: abPlaindata,
     });
   }
 
   async getKey(key) {
-    const bKey = Buffer.from(key);
-    const abHash = await crypto.subtle.digest('SHA-256', bKey.buffer);
-
-    const abKey = Buffer.from(Buffer.from(abHash).toString('hex').slice(0, 32), 'utf8').buffer;
-
+    const digest = await crypto.subtle.digest('SHA-256', WebCryptography.encoder.encode(key));
+    const hashHex = Array.from(new Uint8Array(digest))
+      .map((b) => b.toString(16).padStart(2, '0'))
+      .join('');
+    const abKey = WebCryptography.encoder.encode(hashHex.slice(0, 32)).buffer;
     return crypto.subtle.importKey('raw', abKey, 'AES-CBC', true, ['encrypt', 'decrypt']);
   }
 
   async encryptArrayBuffer(key, plaintext) {
     const abIv = crypto.getRandomValues(new Uint8Array(16));
@@ -82,30 +83,35 @@ export default class WebCryptography {
     return concatArrayBuffer(abIv.buffer, await crypto.subtle.encrypt({ name: 'AES-CBC', iv: abIv }, key, plaintext));
   }
 
   async decryptArrayBuffer(key, ciphertext) {
     const abIv = ciphertext.slice(0, 16);
-
-    return crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, ciphertext.slice(16));
+    if (ciphertext.slice(WebCryptography.IV_LENGTH).byteLength <= 0) throw new Error('decryption error: empty content');
+    const data = await crypto.subtle.decrypt(
+      { name: 'AES-CBC', iv: abIv },
+      key,
+      ciphertext.slice(WebCryptography.IV_LENGTH),
+    );
+    return data;
   }
 
   async encryptString(key, plaintext) {
     const abIv = crypto.getRandomValues(new Uint8Array(16));
 
-    const abPlaintext = Buffer.from(plaintext).buffer;
+    const abPlaintext = WebCryptography.encoder.encode(plaintext).buffer;
     const abPayload = await crypto.subtle.encrypt({ name: 'AES-CBC', iv: abIv }, key, abPlaintext);
 
     const ciphertext = concatArrayBuffer(abIv.buffer, abPayload);
 
-    return Buffer.from(ciphertext).toString('utf8');
+    return WebCryptography.decoder.decode(ciphertext);
   }
 
   async decryptString(key, ciphertext) {
-    const abCiphertext = Buffer.from(ciphertext);
+    const abCiphertext = WebCryptography.encoder.encode(ciphertext).buffer;
     const abIv = abCiphertext.slice(0, 16);
     const abPayload = abCiphertext.slice(16);
 
     const abPlaintext = await crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, abPayload);
 
-    return Buffer.from(abPlaintext).toString('utf8');
+    return WebCryptography.decoder.decode(abPlaintext);
   }
 }
diff --git a/src/file/modules/node.js b/src/file/modules/node.js
index 751b8177..9b51c6e2 100644
--- a/src/file/modules/node.js
+++ b/src/file/modules/node.js
@@ -1,13 +1,9 @@
-/**       */
-
 import { Readable, PassThrough } from 'stream';
-import { ReadStream } from 'fs';
+import fs from 'fs';
 import { basename } from 'path';
 
-import { IFile, FileClass } from '..';
-
 const PubNubFile = class PubNubFile {
   static supportsBlob = false;
 
   static supportsFile = false;
 
@@ -27,21 +23,24 @@ const PubNubFile = class PubNubFile {
 
   name;
 
   mimeType;
 
+  contentLength;
+
   static create(config) {
     return new this(config);
   }
 
   constructor({ stream, data, encoding, name, mimeType }) {
     if (stream instanceof Readable) {
       this.data = stream;
 
-      if (stream instanceof ReadStream) {
+      if (stream instanceof fs.ReadStream) {
         // $FlowFixMe: incomplete flow node definitions
         this.name = basename(stream.path);
+        this.contentLength = fs.statSync(stream.path).size;
       }
     } else if (data instanceof Buffer) {
       this.data = Buffer.from(data);
     } else if (typeof data === 'string') {
       // $FlowFixMe: incomplete flow node definitions
diff --git a/src/node/index.ts b/src/node/index.ts
index 5d7b3cd7..c95b77ae 100755
--- a/src/node/index.ts
+++ b/src/node/index.ts
@@ -6,12 +6,14 @@ import { decode } from '../core/components/base64_codec';
 import { del, get, patch, post, getfile, postfile } from '../networking/modules/web-node';
 import { keepAlive, proxy } from '../networking/modules/node';
 
 import NodeCryptography from '../crypto/modules/node';
 import PubNubFile from '../file/modules/node';
+import { CryptoModule, LegacyCryptor, AesCbcCryptor } from '../crypto/modules/NodeCryptoModule/nodeCryptoModule';
 
 export = class extends PubNubCore {
+  static CryptoModule = CryptoModule;
   constructor(setup: any) {
     setup.cbor = new Cbor((buffer: ArrayBuffer) => CborReader.decode(Buffer.from(buffer)), decode);
     setup.networking = new Networking({
       keepAlive,
       del,
@@ -25,10 +27,20 @@ export = class extends PubNubCore {
     setup.sdkFamily = 'Nodejs';
 
     setup.PubNubFile = PubNubFile;
     setup.cryptography = new NodeCryptography();
 
+    setup.initCryptoModule = (cryptoConfiguration: any) => {
+      return new CryptoModule({
+        default: new LegacyCryptor({
+          cipherKey: cryptoConfiguration.cipherKey,
+          useRandomIVs: cryptoConfiguration.useRandomIVs,
+        }),
+        cryptors: [new AesCbcCryptor({ cipherKey: cryptoConfiguration.cipherKey })],
+      });
+    };
+
     if (!('ssl' in setup)) {
       setup.ssl = true;
     }
 
     super(setup);
diff --git a/src/web/index.js b/src/web/index.js
index 52564ae1..24008da2 100644
--- a/src/web/index.js
+++ b/src/web/index.js
@@ -9,24 +9,25 @@ import { stringifyBufferKeys } from '../core/components/stringify_buffer_keys';
 import Cbor from '../cbor/common';
 import { del, get, post, patch, getfile, postfile } from '../networking/modules/web-node';
 
 import WebCryptography from '../crypto/modules/web';
 import PubNubFile from '../file/modules/web';
+import { CryptoModule, LegacyCryptor, AesCbcCryptor } from '../crypto/modules/WebCryptoModule/webCryptoModule';
 
 function sendBeacon(url) {
   if (navigator && navigator.sendBeacon) {
     navigator.sendBeacon(url);
   } else {
     return false;
   }
 }
 
 export default class extends PubNubCore {
+  static CryptoModule = CryptoModule;
   constructor(setup) {
     // extract config.
     const { listenToBrowserNetworkEvents = true } = setup;
-
     setup.sdkFamily = 'Web';
     setup.networking = new Networking({
       del,
       get,
       post,
@@ -38,10 +39,20 @@ export default class extends PubNubCore {
     setup.cbor = new Cbor((arrayBuffer) => stringifyBufferKeys(CborReader.decode(arrayBuffer)), decode);
 
     setup.PubNubFile = PubNubFile;
     setup.cryptography = new WebCryptography();
 
+    setup.initCryptoModule = (cryptoConfiguration) => {
+      return new CryptoModule({
+        default: new LegacyCryptor({
+          cipherKey: cryptoConfiguration.cipherKey,
+          useRandomIVs: cryptoConfiguration.useRandomIVs,
+        }),
+        cryptors: [new AesCbcCryptor({ cipherKey: cryptoConfiguration.cipherKey })],
+      });
+    };
+
     super(setup);
 
     if (listenToBrowserNetworkEvents) {
       // mount network events.
       window.addEventListener('offline', () => {
diff --git a/test/contract/steps/cryptoModule/cryptoModule.ts b/test/contract/steps/cryptoModule/cryptoModule.ts
new file mode 100644
index 00000000..c7785b85
--- /dev/null
+++ b/test/contract/steps/cryptoModule/cryptoModule.ts
@@ -0,0 +1,178 @@
+import { Given, When, Then, Before } from '@cucumber/cucumber';
+import { expect } from 'chai';
+import fs from 'fs';
+
+import {
+  CryptoModule,
+  AesCbcCryptor,
+  LegacyCryptor,
+} from '../../../../lib/crypto/modules/NodeCryptoModule/nodeCryptoModule.js';
+
+Before(function () {
+  this.useRandomIVs = true;
+});
+
+Given('Crypto module with {string} cryptor', function (cryptorIdentifier: string) {
+  this.cryptorIdentifier = cryptorIdentifier;
+});
+
+Given(
+  'Crypto module with default {string} and additional {string} cryptors',
+  function (defaultCryptorId: string, additionalCryptorId: string) {
+    this.defaultCryptorId = defaultCryptorId;
+    this.additionalCryptorId = additionalCryptorId;
+  },
+);
+
+Given('with {string} cipher key', function (cipherKey: string) {
+  this.cipherKey = cipherKey;
+});
+
+Given('with {string} vector', function (vector: string) {
+  if (vector === 'constant') this.useRandomIVs = false;
+  this._initCryptor = (id: string) => {
+    return id === 'legacy'
+      ? new LegacyCryptor({ cipherKey: this.cipherKey, useRandomIVs: this.useRandomIVs })
+      : new AesCbcCryptor({ cipherKey: this.cipherKey });
+  };
+});
+
+When('I decrypt {string} file', async function (fileName: string) {
+  if (this.cryptorIdentifier === 'acrh') {
+    const cryptor = new AesCbcCryptor({ cipherKey: this.cipherKey });
+    this.cryptoModule = CryptoModule.withDefaultCryptor(cryptor);
+  }
+  const pubnub = await this.getPubnub({ subscribeKey: 'key' });
+  const fileData = fs.readFileSync(this.getFilePath(fileName));
+  const file = pubnub.File.create({
+    name: fileName,
+    mimeType: 'text/plain',
+    data: fileData,
+  });
+  try {
+    const result = await this.cryptoModule.decryptFile(file, pubnub.File);
+  } catch (e: any) {
+    this.errorMessage = e?.message;
+  }
+});
+
+When('I decrypt {string} file as {string}', async function (fileName: string, format: string) {
+  if (this.defaultCryptorId && this.additionalCryptorId) {
+    this.cryptoModule = new CryptoModule({
+      default: this._initCryptor(this.defaultCryptorId),
+      cryptors: [this._initCryptor(this.additionalCryptorId)],
+    });
+  } else {
+    this.cryptoModule = CryptoModule.withDefaultCryptor(this._initCryptor(this.cryptorIdentifier));
+  }
+
+  const pubnub = await this.getPubnub({ subscribeKey: 'key' });
+
+  if (format === 'binary') {
+    this.isBinary = true;
+    if (!this.useRandomIVs) return;
+    let encrypteFile = pubnub.File.create({
+      name: fileName,
+      data: fs.readFileSync(this.getFilePath(fileName)),
+    });
+    try {
+      this.binaryFileResult = await this.cryptoModule.decryptFile(encrypteFile, pubnub.File);
+    } catch (e: any) {
+      this.errorMessage = e?.message;
+    }
+  } else if (format === 'stream') {
+    this.isStream = true;
+    const filestream = fs.createReadStream(this.getFilePath(fileName));
+    this.file = pubnub.File.create({
+      name: fileName,
+      stream: filestream,
+    });
+    try {
+      this.streamFileResult = await this.cryptoModule.decryptFile(this.file, pubnub.File);
+    } catch (e: any) {
+      this.errorMessage = e?.message;
+    }
+  }
+});
+
+Then('Decrypted file content equal to the {string} file content', async function (sourceFile: string) {
+  if (this.isBinary && !this.useRandomIVs) return;
+  if (this.isStream) {
+    const fileStream = await this.streamFileResult.toStream();
+    const tempFilePath = `${__dirname}/${this.file.name}`;
+    const outputStream = fs.createWriteStream(tempFilePath);
+    const expected = fs.readFileSync(this.getFilePath(sourceFile));
+    fileStream.pipe(outputStream);
+    return new Promise((resolve) => {
+      outputStream.on('finish', () => {
+        try {
+          const actual = fs.readFileSync(tempFilePath);
+          expect(Buffer.compare(actual, expected.slice(0, actual.length)) === 0).to.be.true;
+        } finally {
+          fs.unlink(tempFilePath, () => {});
+        }
+        resolve(0);
+      });
+    });
+  }
+  expect(this.binaryFileResult.data.equals(fs.readFileSync(this.getFilePath(sourceFile)))).to.be.true;
+});
+
+Then('I receive {string}', async function (result: string) {
+  if ((this.isBinaryFile || this.isBinary) && !this.useRandomIVs) return;
+  if (result === 'success') {
+    expect(this.errorMessage).to.be.undefined;
+  } else {
+    expect(this.errorMessage).to.have.string(result);
+  }
+});
+
+Given('Legacy code with {string} cipher key and {string} vector', function (cipherKey: string, vector: string) {
+  const cryptor = new LegacyCryptor({ cipherKey: cipherKey, useRandomIVs: vector === 'random' ? true : false });
+  this.cryptoModule = CryptoModule.withDefaultCryptor(cryptor);
+});
+
+When('I encrypt {string} file as {string}', async function (fileName: string, format: string) {
+  this.pubnub = await this.getPubnub({ subscribeKey: 'key' });
+  this.fileDataBuffer = fs.readFileSync(this.getFilePath(fileName));
+  if (format === 'stream') {
+    this.file = this.pubnub.File.create({
+      name: fileName,
+      mimeType: 'application/octet-stream',
+      stream: fs.createReadStream(this.getFilePath(fileName)),
+    });
+    this.isStream = true;
+  } else {
+    this.file = this.pubnub.File.create({
+      name: fileName,
+      mimeType: 'application/octet-stream',
+      data: this.fileDataBuffer,
+    });
+    this.isBinaryFile = true;
+  }
+  if (!this.cryptoModule) {
+    this.cryptoModule = CryptoModule.withDefaultCryptor(this._initCryptor(this.cryptorIdentifier));
+  }
+  try {
+    this.encryptedFile = await this.cryptoModule.encryptFile(this.file, this.pubnub.File);
+  } catch (e: any) {
+    this.errorMessage = e?.message;
+  }
+});
+
+Then('Successfully decrypt an encrypted file with legacy code', async function () {
+  const decryptedFile = await this.cryptoModule.decryptFile(this.encryptedFile, this.pubnub.File);
+  if (this.isStream) {
+    const fileStream = await decryptedFile.toStream();
+    const tempFilePath = `${__dirname}/${this.file.name}`;
+    const outputStream = fs.createWriteStream(tempFilePath);
+    fileStream.pipe(outputStream);
+    outputStream.on('end', () => {
+      const actualFileBuffer = fs.readFileSync(tempFilePath);
+      expect(actualFileBuffer).to.equalBytes(this.fileDataBuffer);
+      fs.unlink(tempFilePath, () => {});
+    });
+  } else {
+    expect(decryptedFile.data.toString('utf8')).to.equal(this.fileDataBuffer.toString('utf8'));
+  }
+});
diff --git a/test/contract/utils.ts b/test/contract/utils.ts
index 2337b4d8..5e0e9ccd 100644
--- a/test/contract/utils.ts
+++ b/test/contract/utils.ts
@@ -5,5 +5,9 @@ export function loadFixtureFile(persona) {
     `${process.cwd()}/dist/contract/contract/features/data/${persona.toLowerCase()}.json`,
     'utf8',
   );
   return JSON.parse(fileData);
 }
+
+export function getFilePath(filename) {
+  return `${process.cwd()}/dist/contract/contract/features/encryption/assets/${filename}`;
+}
diff --git a/test/contract/world.ts b/test/contract/world.ts
index 08e8bd1c..41227b59 100644
--- a/test/contract/world.ts
+++ b/test/contract/world.ts
@@ -2,11 +2,11 @@ import {
   setWorldConstructor,
   setDefaultTimeout,
   World
 } from '@cucumber/cucumber';
 import PubNub from '../../lib/node/index.js';
-import { loadFixtureFile } from './utils';
+import { loadFixtureFile, getFilePath } from './utils';
 import * as http from 'http';
 
 interface State {
   pubnub: PubNub;
 }
@@ -132,8 +132,11 @@ class PubnubWorld extends World{
       const persona = loadFixtureFile(name);
       this.fileFixtures[name] = persona;
     }
     return this.fileFixtures[name];
   }
+  getFilePath(filename) {
+    return getFilePath(filename);
+  }
 }
 
 setWorldConstructor(PubnubWorld);
diff --git a/tsconfig.json b/tsconfig.json
index 3fe14952..2103f09c 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,18 +1,20 @@
 {
   "$schema": "https://json.schemastore.org/tsconfig",
-
   "compilerOptions": {
     "target": "ES5",
     "module": "CommonJS",
     "moduleResolution": "Node",
     "esModuleInterop": true,
-
     "allowJs": true,
     "noEmitOnError": true,
     "strict": true,
     "outDir": "./lib",
     "downlevelIteration": true
   },
-  "include": ["src/**/*"],
-  "exclude": ["node_modules"]
-}
+  "include": [
+    "src/**/*"
+  ],
+  "exclude": [
+    "node_modules"
+  ]
+}
\ No newline at end of file

Vulnerable code: version: '7.3.3'
            location: https://github.com/pubnub/javascript/archive/refs/tags/v7.3.3.zip
            location: https://github.com/pubnub/javascript/releases/download/v7.3.3/pubnub.7.3.3.js
PubNub Real-time Cloud-Hosted Push API and Push Notification Client Frameworks
Copyright (c) 2013 PubNub Inc.
http://www.pubnub.com/
http://www.pubnub.com/terms
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
PubNub Real-time Cloud-Hosted Push API and Push Notification Client Frameworks
Copyright (c) 2013 PubNub Inc.
http://www.pubnub.com/
http://www.pubnub.com/terms
     * https://cdn.pubnub.com/sdk/javascript/pubnub.7.3.3.js
     * https://cdn.pubnub.com/sdk/javascript/pubnub.7.3.3.min.js
            this.setCipherKey(setup.cipherKey);
        default_1.prototype.setCipherKey = function (val) {
            return '7.3.3';
            var subscribeEndpoint = _a.subscribeEndpoint, leaveEndpoint = _a.leaveEndpoint, heartbeatEndpoint = _a.heartbeatEndpoint, setStateEndpoint = _a.setStateEndpoint, timeEndpoint = _a.timeEndpoint, getFileUrl = _a.getFileUrl, config = _a.config, crypto = _a.crypto, listenerManager = _a.listenerManager;
                    if (_this._config.cipherKey) {
                        var decryptedPayload = _this._crypto.decrypt(message.payload);
                        if (typeof decryptedPayload === 'object' && decryptedPayload !== null) {
                    if (_this._config.cipherKey) {
                        announce.message = _this._crypto.decrypt(message.payload);
    var preparePayload = function (_a, payload) {
        var crypto = _a.crypto, config = _a.config;
        if (config.cipherKey) {
            stringifiedPayload = crypto.encrypt(stringifiedPayload);
        var generateUploadUrl = _a.generateUploadUrl, publishFile = _a.publishFile, _b = _a.modules, PubNubFile = _b.PubNubFile, config = _b.config, cryptography = _b.cryptography, networking = _b.networking;
                var file, _b, _c, url, formFields, _d, id, name, formFieldsWithMimeType, result, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, e_1, errorBody, reason, retries, wasSuccessful, publishResult;
                return __generator(this, function (_s) {
                    switch (_s.label) {
                            _b = _s.sent(), _c = _b.file_upload_request, url = _c.url, formFields = _c.form_fields, _d = _b.data, id = _d.id, name = _d.name;
                            if (!(PubNubFile.supportsEncryptFile && (cipherKey !== null && cipherKey !== void 0 ? cipherKey : config.cipherKey))) return [3 /*break*/, 3];
                            return [4 /*yield*/, cryptography.encryptFile(cipherKey !== null && cipherKey !== void 0 ? cipherKey : config.cipherKey, file, PubNubFile)];
                            file = _s.sent();
                            _s.label = 3;
                        case 3:
                            _s.label = 4;
                        case 4:
                            _s.trys.push([4, 18, , 19]);
                            if (!(PubNubFile.supportsFileUri && input.uri)) return [3 /*break*/, 7];
                            _f = (_e = networking).POSTFILE;
                            _g = [url, formFieldsWithMimeType];
                            return [4 /*yield*/, file.toFileUri()];
                        case 5: return [4 /*yield*/, _f.apply(_e, _g.concat([_s.sent()]))];
                        case 6:
                            result = _s.sent();
                            return [3 /*break*/, 17];
                            if (!PubNubFile.supportsFile) return [3 /*break*/, 10];
                            _j = (_h = networking).POSTFILE;
                            _k = [url, formFieldsWithMimeType];
                            return [4 /*yield*/, file.toFile()];
                        case 8: return [4 /*yield*/, _j.apply(_h, _k.concat([_s.sent()]))];
                            result = _s.sent();
                            return [3 /*break*/, 17];
                            if (!PubNubFile.supportsBuffer) return [3 /*break*/, 13];
                            _m = (_l = networking).POSTFILE;
                            _o = [url, formFieldsWithMimeType];
                            return [4 /*yield*/, file.toBuffer()];
                        case 11: return [4 /*yield*/, _m.apply(_l, _o.concat([_s.sent()]))];
                            result = _s.sent();
                            return [3 /*break*/, 17];
                            if (!PubNubFile.supportsBlob) return [3 /*break*/, 16];
                            _q = (_p = networking).POSTFILE;
                            _r = [url, formFieldsWithMimeType];
                            return [4 /*yield*/, file.toBlob()];
                        case 14: return [4 /*yield*/, _q.apply(_p, _r.concat([_s.sent()]))];
                            result = _s.sent();
                            return [3 /*break*/, 17];
                        case 16: throw new Error('Unsupported environment');
                        case 17: return [3 /*break*/, 19];
                            e_1 = _s.sent();
                        case 19:
                            _s.label = 20;
                        case 20:
                            _s.trys.push([20, 22, , 23]);
                        case 21:
                            publishResult = _s.sent();
                            return [3 /*break*/, 23];
                        case 22:
                            _s.sent();
                            return [3 /*break*/, 23];
                        case 23:
                            if (!wasSuccessful && retries > 0) return [3 /*break*/, 20];
                            _s.label = 24;
                        case 24:
    /**       */
            var PubNubFile = _a.PubNubFile, config = _a.config, cryptography = _a.cryptography;
                var body;
                var _b, _c, _d;
                            if (!(PubNubFile.supportsEncryptFile && ((_b = params.cipherKey) !== null && _b !== void 0 ? _b : config.cipherKey))) return [3 /*break*/, 2];
                            return [4 /*yield*/, cryptography.decrypt((_c = params.cipherKey) !== null && _c !== void 0 ? _c : config.cipherKey, body)];
                            body = _e.sent();
                            _e.label = 2;
                        case 2: return [2 /*return*/, PubNubFile.create({
        var crypto = modules.crypto, config = modules.config;
        if (config.cipherKey) {
            stringifiedPayload = crypto.encrypt(stringifiedPayload);
        return stringifiedPayload;
        var config = modules.config, crypto = modules.crypto;
        if (!config.cipherKey)
            return crypto.decrypt(message);
        var config = modules.config, crypto = modules.crypto;
        if (!config.cipherKey)
            return crypto.decrypt(message);
            this.encryptFile = function (key, file) { return cryptography.encryptFile(key, file, _this.File); };
            this.decryptFile = function (key, file) { return cryptography.decryptFile(key, file, _this.File); };
            this.encrypt = crypto.encrypt.bind(crypto);
            this.decrypt = crypto.decrypt.bind(crypto);
            this.setCipherKey = modules.config.setCipherKey.bind(modules.config);
                        case 0: return [4 /*yield*/, this.getKey(key)];
                            return [4 /*yield*/, file.toArrayBuffer()];
                            return [4 /*yield*/, file.toArrayBuffer()];
                var bKey, abHash, abKey;
                        case 0:
                            bKey = Buffer.from(key);
                            return [4 /*yield*/, crypto.subtle.digest('SHA-256', bKey.buffer)];
                            abHash = _a.sent();
                            abKey = Buffer.from(Buffer.from(abHash).toString('hex').slice(0, 32), 'utf8').buffer;
                var abIv;
                    abIv = ciphertext.slice(0, 16);
                    return [2 /*return*/, crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, ciphertext.slice(16))];
                            abPlaintext = Buffer.from(plaintext).buffer;
                            return [2 /*return*/, Buffer.from(ciphertext).toString('utf8')];
                            abCiphertext = Buffer.from(ciphertext);
                            return [2 /*return*/, Buffer.from(abPlaintext).toString('utf8')];
    ***************************************************************************** */var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};function t(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}var n=function(){return n=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)};function r(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function o(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))}function i(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,s])}}}function a(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function s(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function u(e,t,n){if(n||2===arguments.length)for(var r,o=0,i=t.length;o<i;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}var c="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function l(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})})),t}var p={exports:{}};!function(e){!function(t,n){var r=Math.pow(2,-24),o=Math.pow(2,32),i=Math.pow(2,53);var a={encode:function(e){var t,r=new ArrayBuffer(256),a=new DataView(r),s=0;function u(e){for(var n=r.byteLength,o=s+e;n<o;)n*=2;if(n!==r.byteLength){var i=a;r=new ArrayBuffer(n),a=new DataView(r);for(var u=s+3>>2,c=0;c<u;++c)a.setUint32(4*c,i.getUint32(4*c))}return t=e,a}function c(){s+=t}function l(e){c(u(1).setUint8(s,e))}function p(e){for(var t=u(e.length),n=0;n<e.length;++n)t.setUint8(s+n,e[n]);c()}function f(e,t){t<24?l(e<<5|t):t<256?(l(e<<5|24),l(t)):t<65536?(l(e<<5|25),function(e){c(u(2).setUint16(s,e))}(t)):t<4294967296?(l(e<<5|26),function(e){c(u(4).setUint32(s,e))}(t)):(l(e<<5|27),function(e){var t=e%o,n=(e-t)/o,r=u(8);r.setUint32(s,n),r.setUint32(s+4,t),c()}(t))}if(function e(t){var r;if(!1===t)return l(244);if(!0===t)return l(245);if(null===t)return l(246);if(t===n)return l(247);switch(typeof t){case"number":if(Math.floor(t)===t){if(0<=t&&t<=i)return f(0,t);if(-i<=t&&t<0)return f(1,-(t+1))}return l(251),function(e){c(u(8).setFloat64(s,e))}(t);case"string":var o=[];for(r=0;r<t.length;++r){var a=t.charCodeAt(r);a<128?o.push(a):a<2048?(o.push(192|a>>6),o.push(128|63&a)):a<55296?(o.push(224|a>>12),o.push(128|a>>6&63),o.push(128|63&a)):(a=(1023&a)<<10,a|=1023&t.charCodeAt(++r),a+=65536,o.push(240|a>>18),o.push(128|a>>12&63),o.push(128|a>>6&63),o.push(128|63&a))}return f(3,o.length),p(o);default:var h;if(Array.isArray(t))for(f(4,h=t.length),r=0;r<h;++r)e(t[r]);else if(t instanceof Uint8Array)f(2,t.length),p(t);else{var d=Object.keys(t);for(f(5,h=d.length),r=0;r<h;++r){var y=d[r];e(y),e(t[y])}}}}(e),"slice"in r)return r.slice(0,s);for(var h=new ArrayBuffer(s),d=new DataView(h),y=0;y<s;++y)d.setUint8(y,a.getUint8(y));return h},decode:function(e,t,i){var a=new DataView(e),s=0;function u(e,t){return s+=t,e}function c(t){return u(new Uint8Array(e,s,t),t)}function l(){return u(a.getUint8(s),1)}function p(){return u(a.getUint16(s),2)}function f(){return u(a.getUint32(s),4)}function h(){return 255===a.getUint8(s)&&(s+=1,!0)}function d(e){if(e<24)return e;if(24===e)return l();if(25===e)return p();if(26===e)return f();if(27===e)return f()*o+f();if(31===e)return-1;throw"Invalid length encoding"}function y(e){var t=l();if(255===t)return-1;var n=d(31&t);if(n<0||t>>5!==e)throw"Invalid indefinite length element";return n}function g(e,t){for(var n=0;n<t;++n){var r=l();128&r&&(r<224?(r=(31&r)<<6|63&l(),t-=1):r<240?(r=(15&r)<<12|(63&l())<<6|63&l(),t-=2):(r=(15&r)<<18|(63&l())<<12|(63&l())<<6|63&l(),t-=3)),r<65536?e.push(r):(r-=65536,e.push(55296|r>>10),e.push(56320|1023&r))}}"function"!=typeof t&&(t=function(e){return e}),"function"!=typeof i&&(i=function(){return n});var b=function e(){var o,f,b=l(),m=b>>5,v=31&b;if(7===m)switch(v){case 25:return function(){var e=new ArrayBuffer(4),t=new DataView(e),n=p(),o=32768&n,i=31744&n,a=1023&n;if(31744===i)i=261120;else if(0!==i)i+=114688;else if(0!==a)return a*r;return t.setUint32(0,o<<16|i<<13|a<<13),t.getFloat32(0)}();case 26:return u(a.getFloat32(s),4);case 27:return u(a.getFloat64(s),8)}if((f=d(v))<0&&(m<2||6<m))throw"Invalid length";switch(m){case 0:return f;case 1:return-1-f;case 2:if(f<0){for(var _=[],O=0;(f=y(m))>=0;)O+=f,_.push(c(f));var S=new Uint8Array(O),P=0;for(o=0;o<_.length;++o)S.set(_[o],P),P+=_[o].length;return S}return c(f);case 3:var w=[];if(f<0)for(;(f=y(m))>=0;)g(w,f);else g(w,f);return String.fromCharCode.apply(null,w);case 4:var k;if(f<0)for(k=[];!h();)k.push(e());else for(k=new Array(f),o=0;o<f;++o)k[o]=e();return k;case 5:var T={};for(o=0;o<f||f<0&&!h();++o){T[e()]=e()}return T;case 6:return t(e(),f);case 7:switch(f){case 20:return!1;case 21:return!0;case 22:return null;case 23:return n;default:return i(f)}}}();if(s!==e.byteLength)throw"Remaining bytes";return b}};e.exports?e.exports=a:t.CBOR||(t.CBOR=a)}(c)}(p);var f=p.exports,h={exports:{}};
!function(e,t){!function(e){var t="0.1.0",n={3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,all:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i};function r(){var e,t,n="";for(e=0;e<32;e++)t=16*Math.random()|0,8!==e&&12!==e&&16!==e&&20!==e||(n+="-"),n+=(12===e?4:16===e?3&t|8:t).toString(16);return n}function o(e,t){var r=n[t||"all"];return r&&r.test(e)||!1}r.isUUID=o,r.VERSION=t,e.uuid=r,e.isUUID=o}(t),null!==e&&(e.exports=t.uuid)}(h,h.exports);var d=h.exports,y=function(){return d.uuid?d.uuid():d()},g=function(){function e(e){var t,n,r,o=e.setup;if(this._PNSDKSuffix={},this.instanceId="pn-".concat(y()),this.secretKey=o.secretKey||o.secret_key,this.subscribeKey=o.subscribeKey||o.subscribe_key,this.publishKey=o.publishKey||o.publish_key,this.sdkName=o.sdkName,this.sdkFamily=o.sdkFamily,this.partnerId=o.partnerId,this.setAuthKey(o.authKey),this.setCipherKey(o.cipherKey),this.setFilterExpression(o.filterExpression),"string"!=typeof o.origin&&!Array.isArray(o.origin)&&void 0!==o.origin)throw new Error("Origin must be either undefined, a string or a list of strings.");if(this.origin=o.origin||Array.from({length:20},(function(e,t){return"ps".concat(t+1,".pndsn.com")})),this.secure=o.ssl||!1,this.restore=o.restore||!1,this.proxy=o.proxy,this.keepAlive=o.keepAlive,this.keepAliveSettings=o.keepAliveSettings,this.autoNetworkDetection=o.autoNetworkDetection||!1,this.dedupeOnSubscribe=o.dedupeOnSubscribe||!1,this.maximumCacheSize=o.maximumCacheSize||100,this.customEncrypt=o.customEncrypt,this.customDecrypt=o.customDecrypt,this.fileUploadPublishRetryLimit=null!==(t=o.fileUploadPublishRetryLimit)&&void 0!==t?t:5,this.useRandomIVs=null===(n=o.useRandomIVs)||void 0===n||n,this.enableSubscribeBeta=null!==(r=o.enableSubscribeBeta)&&void 0!==r&&r,"undefined"!=typeof location&&"https:"===location.protocol&&(this.secure=!0),this.logVerbosity=o.logVerbosity||!1,this.suppressLeaveEvents=o.suppressLeaveEvents||!1,this.announceFailedHeartbeats=o.announceFailedHeartbeats||!0,this.announceSuccessfulHeartbeats=o.announceSuccessfulHeartbeats||!1,this.useInstanceId=o.useInstanceId||!1,this.useRequestId=o.useRequestId||!1,this.requestMessageCountThreshold=o.requestMessageCountThreshold,this.setTransactionTimeout(o.transactionalRequestTimeout||15e3),this.setSubscribeTimeout(o.subscribeRequestTimeout||31e4),this.setSendBeaconConfig(o.useSendBeacon||!0),o.presenceTimeout?this.setPresenceTimeout(o.presenceTimeout):this._presenceTimeout=300,null!=o.heartbeatInterval&&this.setHeartbeatInterval(o.heartbeatInterval),"string"==typeof o.userId){if("string"==typeof o.uuid)throw new Error("Only one of the following configuration options has to be provided: `uuid` or `userId`");this.setUserId(o.userId)}else{if("string"!=typeof o.uuid)throw new Error("One of the following configuration options has to be provided: `uuid` or `userId`");this.setUUID(o.uuid)}}return e.prototype.getAuthKey=function(){return this.authKey},e.prototype.setAuthKey=function(e){return this.authKey=e,this},e.prototype.setCipherKey=function(e){return this.cipherKey=e,this},e.prototype.getUUID=function(){return this.UUID},e.prototype.setUUID=function(e){if(!e||"string"!=typeof e||0===e.trim().length)throw new Error("Missing uuid parameter. Provide a valid string uuid");return this.UUID=e,this},e.prototype.getUserId=function(){return this.UUID},e.prototype.setUserId=function(e){if(!e||"string"!=typeof e||0===e.trim().length)throw new Error("Missing or invalid userId parameter. Provide a valid string userId");return this.UUID=e,this},e.prototype.getFilterExpression=function(){return this.filterExpression},e.prototype.setFilterExpression=function(e){return this.filterExpression=e,this},e.prototype.getPresenceTimeout=function(){return this._presenceTimeout},e.prototype.setPresenceTimeout=function(e){return e>=20?this._presenceTimeout=e:(this._presenceTimeout=20,console.log("WARNING: Presence timeout is less than the minimum. Using minimum value: ",this._presenceTimeout)),this.setHeartbeatInterval(this._presenceTimeout/2-1),this},e.prototype.setProxy=function(e){this.proxy=e},e.prototype.getHeartbeatInterval=function(){return this._heartbeatInterval},e.prototype.setHeartbeatInterval=function(e){return this._heartbeatInterval=e,this},e.prototype.getSubscribeTimeout=function(){return this._subscribeRequestTimeout},e.prototype.setSubscribeTimeout=function(e){return this._subscribeRequestTimeout=e,this},e.prototype.getTransactionTimeout=function(){return this._transactionalRequestTimeout},e.prototype.setTransactionTimeout=function(e){return this._transactionalRequestTimeout=e,this},e.prototype.isSendBeaconEnabled=function(){return this._useSendBeacon},e.prototype.setSendBeaconConfig=function(e){return this._useSendBeacon=e,this},e.prototype.getVersion=function(){return"7.3.3"},e.prototype._addPnsdkSuffix=function(e,t){this._PNSDKSuffix[e]=t},e.prototype._getPnsdkSuffix=function(e){var t=this;return Object.keys(this._PNSDKSuffix).reduce((function(n,r){return n+e+t._PNSDKSuffix[r]}),"")},e}();function b(e){var t=e.replace(/==?$/,""),n=Math.floor(t.length/4*3),r=new ArrayBuffer(n),o=new Uint8Array(r),i=0;function a(){var e=t.charAt(i++),n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(e);if(-1===n)throw new Error("Illegal character at ".concat(i,": ").concat(t.charAt(i-1)));return n}for(var s=0;s<n;s+=3){var u=a(),c=a(),l=a(),p=a(),f=(63&u)<<2|c>>4,h=(15&c)<<4|l>>2,d=(3&l)<<6|p>>0;o[s]=f,64!=l&&(o[s+1]=h),64!=p&&(o[s+2]=d)}return r}var m,v,_,O,S,P=P||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},a=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;o<e;o++)t[r+o>>>2]|=(n[o>>>2]>>>24-o%4*8&255)<<24-(r+o)%4*8;else if(65535<n.length)for(o=0;o<e;o+=4)t[r+o>>>2]=n[o>>>2];else t.push.apply(t,n);return this.sigBytes+=e,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r<t;r+=4)n.push(4294967296*e.random()|0);return new a.init(n,t)}}),s=n.enc={},u=s.Hex={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r<e;r++){var o=t[r>>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r+=2)n[r>>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},c=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r<e;r++)n.push(String.fromCharCode(t[r>>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r++)n[r>>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},p=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,o=n.sigBytes,i=this.blockSize,s=o/(4*i);if(t=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,o=e.min(4*t,o),t){for(var u=0;u<t;u+=i)this._doProcessBlock(r,u);u=r.splice(0,t),n.sigBytes-=o}return new a.init(u,o)},clone:function(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});r.Hasher=p.extend({cfg:i.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){p.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new f.HMAC.init(e,n).finalize(t)}}});var f=n.algo={};return n}(Math);!function(e){for(var t=P,n=(o=t.lib).WordArray,r=o.Hasher,o=t.algo,i=[],a=[],s=function(e){return 4294967296*(e-(0|e))|0},u=2,c=0;64>c;){var l;e:{l=u;for(var p=e.sqrt(l),f=2;f<=p;f++)if(!(l%f)){l=!1;break e}l=!0}l&&(8>c&&(i[c]=s(e.pow(u,.5))),a[c]=s(e.pow(u,1/3)),c++),u++}var h=[];o=o.SHA256=r.extend({_doReset:function(){this._hash=new n.init(i.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],s=n[3],u=n[4],c=n[5],l=n[6],p=n[7],f=0;64>f;f++){if(16>f)h[f]=0|e[t+f];else{var d=h[f-15],y=h[f-2];h[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+h[f-7]+((y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10)+h[f-16]}d=p+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[f]+h[f],y=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&o^r&i^o&i),p=l,l=c,c=u,u=s+d|0,s=i,i=o,o=r,r=d+y|0}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+p|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;return n[o>>>5]|=128<<24-o%32,n[14+(o+64>>>9<<4)]=e.floor(r/4294967296),n[15+(o+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=r.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=r._createHelper(o),t.HmacSHA256=r._createHmacHelper(o)}(Math),v=(m=P).enc.Utf8,m.algo.HMAC=m.lib.Base.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=v.parse(t));var n=e.blockSize,r=4*n;t.sigBytes>r&&(t=e.finalize(t)),t.clamp();for(var o=this._oKey=t.clone(),i=this._iKey=t.clone(),a=o.words,s=i.words,u=0;u<n;u++)a[u]^=1549556828,s[u]^=909522486;o.sigBytes=i.sigBytes=r,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var t=this._hasher;return e=t.finalize(e),t.reset(),t.finalize(this._oKey.clone().concat(e))}}),O=(_=P).lib.WordArray,_.enc.Base64={stringify:function(e){var t=e.words,n=e.sigBytes,r=this._map;e.clamp(),e=[];for(var o=0;o<n;o+=3)for(var i=(t[o>>>2]>>>24-o%4*8&255)<<16|(t[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|t[o+2>>>2]>>>24-(o+2)%4*8&255,a=0;4>a&&o+.75*a<n;a++)e.push(r.charAt(i>>>6*(3-a)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var t=e.length,n=this._map;(r=n.charAt(64))&&-1!=(r=e.indexOf(r))&&(t=r);for(var r=[],o=0,i=0;i<t;i++)if(i%4){var a=n.indexOf(e.charAt(i-1))<<i%4*2,s=n.indexOf(e.charAt(i))>>>6-i%4*2;r[o>>>2]|=(a|s)<<24-o%4*8,o++}return O.create(r,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},function(e){function t(e,t,n,r,o,i,a){return((e=e+(t&n|~t&r)+o+a)<<i|e>>>32-i)+t}function n(e,t,n,r,o,i,a){return((e=e+(t&r|n&~r)+o+a)<<i|e>>>32-i)+t}function r(e,t,n,r,o,i,a){return((e=e+(t^n^r)+o+a)<<i|e>>>32-i)+t}function o(e,t,n,r,o,i,a){return((e=e+(n^(t|~r))+o+a)<<i|e>>>32-i)+t}for(var i=P,a=(u=i.lib).WordArray,s=u.Hasher,u=i.algo,c=[],l=0;64>l;l++)c[l]=4294967296*e.abs(e.sin(l+1))|0;u=u.MD5=s.extend({_doReset:function(){this._hash=new a.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,i){for(var a=0;16>a;a++){var s=e[u=i+a];e[u]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}a=this._hash.words;var u=e[i+0],l=(s=e[i+1],e[i+2]),p=e[i+3],f=e[i+4],h=e[i+5],d=e[i+6],y=e[i+7],g=e[i+8],b=e[i+9],m=e[i+10],v=e[i+11],_=e[i+12],O=e[i+13],S=e[i+14],P=e[i+15],w=t(w=a[0],E=a[1],T=a[2],k=a[3],u,7,c[0]),k=t(k,w,E,T,s,12,c[1]),T=t(T,k,w,E,l,17,c[2]),E=t(E,T,k,w,p,22,c[3]);w=t(w,E,T,k,f,7,c[4]),k=t(k,w,E,T,h,12,c[5]),T=t(T,k,w,E,d,17,c[6]),E=t(E,T,k,w,y,22,c[7]),w=t(w,E,T,k,g,7,c[8]),k=t(k,w,E,T,b,12,c[9]),T=t(T,k,w,E,m,17,c[10]),E=t(E,T,k,w,v,22,c[11]),w=t(w,E,T,k,_,7,c[12]),k=t(k,w,E,T,O,12,c[13]),T=t(T,k,w,E,S,17,c[14]),w=n(w,E=t(E,T,k,w,P,22,c[15]),T,k,s,5,c[16]),k=n(k,w,E,T,d,9,c[17]),T=n(T,k,w,E,v,14,c[18]),E=n(E,T,k,w,u,20,c[19]),w=n(w,E,T,k,h,5,c[20]),k=n(k,w,E,T,m,9,c[21]),T=n(T,k,w,E,P,14,c[22]),E=n(E,T,k,w,f,20,c[23]),w=n(w,E,T,k,b,5,c[24]),k=n(k,w,E,T,S,9,c[25]),T=n(T,k,w,E,p,14,c[26]),E=n(E,T,k,w,g,20,c[27]),w=n(w,E,T,k,O,5,c[28]),k=n(k,w,E,T,l,9,c[29]),T=n(T,k,w,E,y,14,c[30]),w=r(w,E=n(E,T,k,w,_,20,c[31]),T,k,h,4,c[32]),k=r(k,w,E,T,g,11,c[33]),T=r(T,k,w,E,v,16,c[34]),E=r(E,T,k,w,S,23,c[35]),w=r(w,E,T,k,s,4,c[36]),k=r(k,w,E,T,f,11,c[37]),T=r(T,k,w,E,y,16,c[38]),E=r(E,T,k,w,m,23,c[39]),w=r(w,E,T,k,O,4,c[40]),k=r(k,w,E,T,u,11,c[41]),T=r(T,k,w,E,p,16,c[42]),E=r(E,T,k,w,d,23,c[43]),w=r(w,E,T,k,b,4,c[44]),k=r(k,w,E,T,_,11,c[45]),T=r(T,k,w,E,P,16,c[46]),w=o(w,E=r(E,T,k,w,l,23,c[47]),T,k,u,6,c[48]),k=o(k,w,E,T,y,10,c[49]),T=o(T,k,w,E,S,15,c[50]),E=o(E,T,k,w,h,21,c[51]),w=o(w,E,T,k,_,6,c[52]),k=o(k,w,E,T,p,10,c[53]),T=o(T,k,w,E,m,15,c[54]),E=o(E,T,k,w,s,21,c[55]),w=o(w,E,T,k,g,6,c[56]),k=o(k,w,E,T,P,10,c[57]),T=o(T,k,w,E,d,15,c[58]),E=o(E,T,k,w,O,21,c[59]),w=o(w,E,T,k,f,6,c[60]),k=o(k,w,E,T,v,10,c[61]),T=o(T,k,w,E,l,15,c[62]),E=o(E,T,k,w,b,21,c[63]);a[0]=a[0]+w|0,a[1]=a[1]+E|0,a[2]=a[2]+T|0,a[3]=a[3]+k|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;n[o>>>5]|=128<<24-o%32;var i=e.floor(r/4294967296);for(n[15+(o+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),n[14+(o+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),n=(t=this._hash).words,r=0;4>r;r++)o=n[r],n[r]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);return t},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}}),i.MD5=s._createHelper(u),i.HmacMD5=s._createHmacHelper(u)}(Math),function(){var e,t=P,n=(e=t.lib).Base,r=e.WordArray,o=(e=t.algo).EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:e.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=(s=this.cfg).hasher.create(),o=r.create(),i=o.words,a=s.keySize,s=s.iterations;i.length<a;){u&&n.update(u);var u=n.update(e).finalize(t);n.reset();for(var c=1;c<s;c++)u=n.finalize(u),n.reset();o.concat(u)}return o.sigBytes=4*a,o}});t.EvpKDF=function(e,t,n){return o.create(n).compute(e,t)}}(),P.lib.Cipher||function(e){var t=(h=P).lib,n=t.Base,r=t.WordArray,o=t.BufferedBlockAlgorithm,i=h.enc.Base64,a=h.algo.EvpKDF,s=t.Cipher=o.extend({cfg:n.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,n){this.cfg=this.cfg.extend(n),this._xformMode=e,this._key=t,this.reset()},reset:function(){o.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(t,n,r){return("string"==typeof n?d:f).encrypt(e,t,n,r)},decrypt:function(t,n,r){return("string"==typeof n?d:f).decrypt(e,t,n,r)}}}});t.StreamCipher=s.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var u=h.mode={},c=function(e,t,n){var r=this._iv;r?this._iv=undefined:r=this._prevBlock;for(var o=0;o<n;o++)e[t+o]^=r[o]},l=(t.BlockCipherMode=n.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}})).extend();l.Encryptor=l.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize;c.call(this,e,t,r),n.encryptBlock(e,t),this._prevBlock=e.slice(t,t+r)}}),l.Decryptor=l.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=e.slice(t,t+r);n.decryptBlock(e,t),c.call(this,e,t,r),this._prevBlock=o}}),u=u.CBC=l,l=(h.pad={}).Pkcs7={pad:function(e,t){for(var n,o=(n=(n=4*t)-e.sigBytes%n)<<24|n<<16|n<<8|n,i=[],a=0;a<n;a+=4)i.push(o);n=r.create(i,n),e.concat(n)},unpad:function(e){e.sigBytes-=255&e.words[e.sigBytes-1>>>2]}},t.BlockCipher=s.extend({cfg:s.cfg.extend({mode:u,padding:l}),reset:function(){s.reset.call(this);var e=(t=this.cfg).iv,t=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=t.createEncryptor;else n=t.createDecryptor,this._minBufferSize=1;this._mode=n.call(t,this,e&&e.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var p=t.CipherParams=n.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),f=(u=(h.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return((e=e.salt)?r.create([1398893684,1701076831]).concat(e).concat(t):t).toString(i)},parse:function(e){var t=(e=i.parse(e)).words;if(1398893684==t[0]&&1701076831==t[1]){var n=r.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return p.create({ciphertext:e,salt:n})}},t.SerializableCipher=n.extend({cfg:n.extend({format:u}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var o=e.createEncryptor(n,r);return t=o.finalize(t),o=o.cfg,p.create({ciphertext:t,key:n,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:r.format})},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),e.createDecryptor(n,r).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}})),h=(h.kdf={}).OpenSSL={execute:function(e,t,n,o){return o||(o=r.random(8)),e=a.create({keySize:t+n}).compute(e,o),n=r.create(e.words.slice(t),4*n),e.sigBytes=4*t,p.create({key:e,iv:n,salt:o})}},d=t.PasswordBasedCipher=f.extend({cfg:f.cfg.extend({kdf:h}),encrypt:function(e,t,n,r){return n=(r=this.cfg.extend(r)).kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,(e=f.encrypt.call(this,e,t,n.key,r)).mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,f.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=P,t=e.lib.BlockCipher,n=e.algo,r=[],o=[],i=[],a=[],s=[],u=[],c=[],l=[],p=[],f=[],h=[],d=0;256>d;d++)h[d]=128>d?d<<1:d<<1^283;var y=0,g=0;for(d=0;256>d;d++){var b=(b=g^g<<1^g<<2^g<<3^g<<4)>>>8^255&b^99;r[y]=b,o[b]=y;var m=h[y],v=h[m],_=h[v],O=257*h[b]^16843008*b;i[y]=O<<24|O>>>8,a[y]=O<<16|O>>>16,s[y]=O<<8|O>>>24,u[y]=O,O=16843009*_^65537*v^257*m^16843008*y,c[b]=O<<24|O>>>8,l[b]=O<<16|O>>>16,p[b]=O<<8|O>>>24,f[b]=O,y?(y=m^h[h[h[_^m]]],g^=h[h[g]]):y=g=1}var S=[0,1,2,4,8,16,32,64,128,27,54];n=n.AES=t.extend({_doReset:function(){for(var e=(n=this._key).words,t=n.sigBytes/4,n=4*((this._nRounds=t+6)+1),o=this._keySchedule=[],i=0;i<n;i++)if(i<t)o[i]=e[i];else{var a=o[i-1];i%t?6<t&&4==i%t&&(a=r[a>>>24]<<24|r[a>>>16&255]<<16|r[a>>>8&255]<<8|r[255&a]):(a=r[(a=a<<8|a>>>24)>>>24]<<24|r[a>>>16&255]<<16|r[a>>>8&255]<<8|r[255&a],a^=S[i/t|0]<<24),o[i]=o[i-t]^a}for(e=this._invKeySchedule=[],t=0;t<n;t++)i=n-t,a=t%4?o[i]:o[i-4],e[t]=4>t||4>=i?a:c[r[a>>>24]]^l[r[a>>>16&255]]^p[r[a>>>8&255]]^f[r[255&a]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,i,a,s,u,r)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,c,l,p,f,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,o,i,a,s){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],p=e[t+2]^n[2],f=e[t+3]^n[3],h=4,d=1;d<u;d++){var y=r[c>>>24]^o[l>>>16&255]^i[p>>>8&255]^a[255&f]^n[h++],g=r[l>>>24]^o[p>>>16&255]^i[f>>>8&255]^a[255&c]^n[h++],b=r[p>>>24]^o[f>>>16&255]^i[c>>>8&255]^a[255&l]^n[h++];f=r[f>>>24]^o[c>>>16&255]^i[l>>>8&255]^a[255&p]^n[h++],c=y,l=g,p=b}y=(s[c>>>24]<<24|s[l>>>16&255]<<16|s[p>>>8&255]<<8|s[255&f])^n[h++],g=(s[l>>>24]<<24|s[p>>>16&255]<<16|s[f>>>8&255]<<8|s[255&c])^n[h++],b=(s[p>>>24]<<24|s[f>>>16&255]<<16|s[c>>>8&255]<<8|s[255&l])^n[h++],f=(s[f>>>24]<<24|s[c>>>16&255]<<16|s[l>>>8&255]<<8|s[255&p])^n[h++],e[t]=y,e[t+1]=g,e[t+2]=b,e[t+3]=f},keySize:8});e.AES=t._createHelper(n)}(),P.mode.ECB=((S=P.lib.BlockCipherMode.extend()).Encryptor=S.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),S.Decryptor=S.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),S);var w=P;function k(e){var t,n=[];for(t=0;t<e.length;t+=1)n[t/4|0]|=e[t]<<24-8*t;return w.lib.WordArray.create(n,e.length)}var T=function(){function e(e){var t=e.config;this._config=t,this._iv="0123456789012345",this._allowedKeyEncodings=["hex","utf8","base64","binary"],this._allowedKeyLengths=[128,256],this._allowedModes=["ecb","cbc"],this._defaultOptions={encryptKey:!0,keyEncoding:"utf8",keyLength:256,mode:"cbc"}}return e.prototype.HMACSHA256=function(e){return w.HmacSHA256(e,this._config.secretKey).toString(w.enc.Base64)},e.prototype.SHA256=function(e){return w.SHA256(e).toString(w.enc.Hex)},e.prototype._parseOptions=function(e){var t=e||{};return t.hasOwnProperty("encryptKey")||(t.encryptKey=this._defaultOptions.encryptKey),t.hasOwnProperty("keyEncoding")||(t.keyEncoding=this._defaultOptions.keyEncoding),t.hasOwnProperty("keyLength")||(t.keyLength=this._defaultOptions.keyLength),t.hasOwnProperty("mode")||(t.mode=this._defaultOptions.mode),-1===this._allowedKeyEncodings.indexOf(t.keyEncoding.toLowerCase())&&(t.keyEncoding=this._defaultOptions.keyEncoding),-1===this._allowedKeyLengths.indexOf(parseInt(t.keyLength,10))&&(t.keyLength=this._defaultOptions.keyLength),-1===this._allowedModes.indexOf(t.mode.toLowerCase())&&(t.mode=this._defaultOptions.mode),t},e.prototype._decodeKey=function(e,t){return"base64"===t.keyEncoding?w.enc.Base64.parse(e):"hex"===t.keyEncoding?w.enc.Hex.parse(e):e},e.prototype._getPaddedKey=function(e,t){return e=this._decodeKey(e,t),t.encryptKey?w.enc.Utf8.parse(this.SHA256(e).slice(0,32)):e},e.prototype._getMode=function(e){return"ecb"===e.mode?w.mode.ECB:w.mode.CBC},e.prototype._getIV=function(e){return"cbc"===e.mode?w.enc.Utf8.parse(this._iv):null},e.prototype._getRandomIV=function(){return w.lib.WordArray.random(16)},e.prototype.encrypt=function(e,t,n){return this._config.customEncrypt?this._config.customEncrypt(e):this.pnEncrypt(e,t,n)},e.prototype.decrypt=function(e,t,n){return this._config.customDecrypt?this._config.customDecrypt(e):this.pnDecrypt(e,t,n)},e.prototype.pnEncrypt=function(e,t,n){if(!t&&!this._config.cipherKey)return e;n=this._parseOptions(n);var r=this._getMode(n),o=this._getPaddedKey(t||this._config.cipherKey,n);if(this._config.useRandomIVs){var i=this._getRandomIV(),a=w.AES.encrypt(e,o,{iv:i,mode:r}).ciphertext;return i.clone().concat(a.clone()).toString(w.enc.Base64)}var s=this._getIV(n);return w.AES.encrypt(e,o,{iv:s,mode:r}).ciphertext.toString(w.enc.Base64)||e},e.prototype.pnDecrypt=function(e,t,n){if(!t&&!this._config.cipherKey)return e;n=this._parseOptions(n);var r=this._getMode(n),o=this._getPaddedKey(t||this._config.cipherKey,n);if(this._config.useRandomIVs){var i=k((u=new Uint8ClampedArray(b(e))).slice(0,16)),a=k(u.slice(16));try{var s=w.AES.decrypt({ciphertext:a},o,{iv:i,mode:r}).toString(w.enc.Utf8);return JSON.parse(s)}catch(e){return null}}else{i=this._getIV(n);try{var u=w.enc.Base64.parse(e);s=w.AES.decrypt({ciphertext:u},o,{iv:i,mode:r}).toString(w.enc.Utf8);return JSON.parse(s)}catch(e){return null}}},e}(),E=function(){function e(e){var t=e.timeEndpoint;this._timeEndpoint=t}return e.prototype.onReconnection=function(e){this._reconnectionCallback=e},e.prototype.startPolling=function(){this._timeTimer=setInterval(this._performTimeLoop.bind(this),3e3)},e.prototype.stopPolling=function(){clearInterval(this._timeTimer)},e.prototype._performTimeLoop=function(){var e=this;this._timeEndpoint((function(t){t.error||(clearInterval(e._timeTimer),e._reconnectionCallback())}))},e}(),A=function(){function e(e){var t=e.config;this.hashHistory=[],this._config=t}return e.prototype.getKey=function(e){var t=function(e){var t=0;if(0===e.length)return t;for(var n=0;n<e.length;n+=1)t=(t<<5)-t+e.charCodeAt(n),t&=t;return t}(JSON.stringify(e.payload)).toString(),n=e.publishMetaData.publishTimetoken;return"".concat(n,"-").concat(t)},e.prototype.isDuplicate=function(e){return this.hashHistory.includes(this.getKey(e))},e.prototype.addEntry=function(e){this.hashHistory.length>=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))},e.prototype.clearHistory=function(){this.hashHistory=[]},e}();function N(e){return encodeURIComponent(e).replace(/[!~*'()]/g,(function(e){return"%".concat(e.charCodeAt(0).toString(16).toUpperCase())}))}function C(e){return function(e){var t=[];return Object.keys(e).forEach((function(e){return t.push(e)})),t}(e).sort()}var j={signPamFromParams:function(e){return C(e).map((function(t){return"".concat(t,"=").concat(N(e[t]))})).join("&")},endsWith:function(e,t){return-1!==e.indexOf(t,this.length-t.length)},createPromise:function(){var e,t;return{promise:new Promise((function(n,r){e=n,t=r})),reject:t,fulfill:e}},encodeString:N},M={PNNetworkUpCategory:"PNNetworkUpCategory",PNNetworkDownCategory:"PNNetworkDownCategory",PNNetworkIssuesCategory:"PNNetworkIssuesCategory",PNTimeoutCategory:"PNTimeoutCategory",PNBadRequestCategory:"PNBadRequestCategory",PNAccessDeniedCategory:"PNAccessDeniedCategory",PNUnknownCategory:"PNUnknownCategory",PNReconnectedCategory:"PNReconnectedCategory",PNConnectedCategory:"PNConnectedCategory",PNRequestMessageCountExceededCategory:"PNRequestMessageCountExceededCategory"},R=function(){function e(e){var t=e.subscribeEndpoint,n=e.leaveEndpoint,r=e.heartbeatEndpoint,o=e.setStateEndpoint,i=e.timeEndpoint,a=e.getFileUrl,s=e.config,u=e.crypto,c=e.listenerManager;this._listenerManager=c,this._config=s,this._leaveEndpoint=n,this._heartbeatEndpoint=r,this._setStateEndpoint=o,this._subscribeEndpoint=t,this._getFileUrl=a,this._crypto=u,this._channels={},this._presenceChannels={},this._heartbeatChannels={},this._heartbeatChannelGroups={},this._channelGroups={},this._presenceChannelGroups={},this._pendingChannelSubscriptions=[],this._pendingChannelGroupSubscriptions=[],this._currentTimetoken=0,this._lastTimetoken=0,this._storedTimetoken=null,this._subscriptionStatusAnnounced=!1,this._isOnline=!0,this._reconnectionManager=new E({timeEndpoint:i}),this._dedupingManager=new A({config:s})}return e.prototype.adaptStateChange=function(e,t){var n=this,r=e.state,o=e.channels,i=void 0===o?[]:o,a=e.channelGroups,s=void 0===a?[]:a,u=e.withHeartbeat,c=void 0!==u&&u;if(i.forEach((function(e){e in n._channels&&(n._channels[e].state=r)})),s.forEach((function(e){e in n._channelGroups&&(n._channelGroups[e].state=r)})),c){var l={};return i.forEach((function(e){return l[e]=r})),s.forEach((function(e){return l[e]=r})),this._heartbeatEndpoint({channels:i,channelGroups:s,state:l},t)}return this._setStateEndpoint({state:r,channels:i,channelGroups:s},t)},e.prototype.adaptPresenceChange=function(e){var t=this,n=e.connected,r=e.channels,o=void 0===r?[]:r,i=e.channelGroups,a=void 0===i?[]:i;n?(o.forEach((function(e){t._heartbeatChannels[e]={state:{}}})),a.forEach((function(e){t._heartbeatChannelGroups[e]={state:{}}}))):(o.forEach((function(e){e in t._heartbeatChannels&&delete t._heartbeatChannels[e]})),a.forEach((function(e){e in t._heartbeatChannelGroups&&delete t._heartbeatChannelGroups[e]})),!1===this._config.suppressLeaveEvents&&this._leaveEndpoint({channels:o,channelGroups:a},(function(e){t._listenerManager.announceStatus(e)}))),this.reconnect()},e.prototype.adaptSubscribeChange=function(e){var t=this,n=e.timetoken,r=e.channels,o=void 0===r?[]:r,i=e.channelGroups,a=void 0===i?[]:i,s=e.withPresence,u=void 0!==s&&s,c=e.withHeartbeats,l=void 0!==c&&c;this._config.subscribeKey&&""!==this._config.subscribeKey?(n&&(this._lastTimetoken=this._currentTimetoken,this._currentTimetoken=n),"0"!==this._currentTimetoken&&0!==this._currentTimetoken&&(this._storedTimetoken=this._currentTimetoken,this._currentTimetoken=0),o.forEach((function(e){t._channels[e]={state:{}},u&&(t._presenceChannels[e]={}),(l||t._config.getHeartbeatInterval())&&(t._heartbeatChannels[e]={}),t._pendingChannelSubscriptions.push(e)})),a.forEach((function(e){t._channelGroups[e]={state:{}},u&&(t._presenceChannelGroups[e]={}),(l||t._config.getHeartbeatInterval())&&(t._heartbeatChannelGroups[e]={}),t._pendingChannelGroupSubscriptions.push(e)})),this._subscriptionStatusAnnounced=!1,this.reconnect()):console&&console.log&&console.log("subscribe key missing; aborting subscribe")},e.prototype.adaptUnsubscribeChange=function(e,t){var n=this,r=e.channels,o=void 0===r?[]:r,i=e.channelGroups,a=void 0===i?[]:i,s=[],u=[];o.forEach((function(e){e in n._channels&&(delete n._channels[e],s.push(e),e in n._heartbeatChannels&&delete n._heartbeatChannels[e]),e in n._presenceChannels&&(delete n._presenceChannels[e],s.push(e))})),a.forEach((function(e){e in n._channelGroups&&(delete n._channelGroups[e],u.push(e),e in n._heartbeatChannelGroups&&delete n._heartbeatChannelGroups[e]),e in n._presenceChannelGroups&&(delete n._presenceChannelGroups[e],u.push(e))})),0===s.length&&0===u.length||(!1!==this._config.suppressLeaveEvents||t||this._leaveEndpoint({channels:s,channelGroups:u},(function(e){e.affectedChannels=s,e.affectedChannelGroups=u,e.currentTimetoken=n._currentTimetoken,e.lastTimetoken=n._lastTimetoken,n._listenerManager.announceStatus(e)})),0===Object.keys(this._channels).length&&0===Object.keys(this._presenceChannels).length&&0===Object.keys(this._channelGroups).length&&0===Object.keys(this._presenceChannelGroups).length&&(this._lastTimetoken=0,this._currentTimetoken=0,this._storedTimetoken=null,this._region=null,this._reconnectionManager.stopPolling()),this.reconnect())},e.prototype.unsubscribeAll=function(e){this.adaptUnsubscribeChange({channels:this.getSubscribedChannels(),channelGroups:this.getSubscribedChannelGroups()},e)},e.prototype.getHeartbeatChannels=function(){return Object.keys(this._heartbeatChannels)},e.prototype.getHeartbeatChannelGroups=function(){return Object.keys(this._heartbeatChannelGroups)},e.prototype.getSubscribedChannels=function(){return Object.keys(this._channels)},e.prototype.getSubscribedChannelGroups=function(){return Object.keys(this._channelGroups)},e.prototype.reconnect=function(){this._startSubscribeLoop(),this._registerHeartbeatTimer()},e.prototype.disconnect=function(){this._stopSubscribeLoop(),this._stopHeartbeatTimer(),this._reconnectionManager.stopPolling()},e.prototype._registerHeartbeatTimer=function(){this._stopHeartbeatTimer(),0!==this._config.getHeartbeatInterval()&&void 0!==this._config.getHeartbeatInterval()&&(this._performHeartbeatLoop(),this._heartbeatTimer=setInterval(this._performHeartbeatLoop.bind(this),1e3*this._config.getHeartbeatInterval()))},e.prototype._stopHeartbeatTimer=function(){this._heartbeatTimer&&(clearInterval(this._heartbeatTimer),this._heartbeatTimer=null)},e.prototype._performHeartbeatLoop=function(){var e=this,t=this.getHeartbeatChannels(),n=this.getHeartbeatChannelGroups(),r={};if(0!==t.length||0!==n.length){this.getSubscribedChannels().forEach((function(t){var n=e._channels[t].state;Object.keys(n).length&&(r[t]=n)})),this.getSubscribedChannelGroups().forEach((function(t){var n=e._channelGroups[t].state;Object.keys(n).length&&(r[t]=n)}));this._heartbeatEndpoint({channels:t,channelGroups:n,state:r},function(t){t.error&&e._config.announceFailedHeartbeats&&e._listenerManager.announceStatus(t),t.error&&e._config.autoNetworkDetection&&e._isOnline&&(e._isOnline=!1,e.disconnect(),e._listenerManager.announceNetworkDown(),e.reconnect()),!t.error&&e._config.announceSuccessfulHeartbeats&&e._listenerManager.announceStatus(t)}.bind(this))}},e.prototype._startSubscribeLoop=function(){var e=this;this._stopSubscribeLoop();var t={},n=[],r=[];if(Object.keys(this._channels).forEach((function(r){var o=e._channels[r].state;Object.keys(o).length&&(t[r]=o),n.push(r)})),Object.keys(this._presenceChannels).forEach((function(e){n.push("".concat(e,"-pnpres"))})),Object.keys(this._channelGroups).forEach((function(n){var o=e._channelGroups[n].state;Object.keys(o).length&&(t[n]=o),r.push(n)})),Object.keys(this._presenceChannelGroups).forEach((function(e){r.push("".concat(e,"-pnpres"))})),0!==n.length||0!==r.length){var o={channels:n,channelGroups:r,state:t,timetoken:this._currentTimetoken,filterExpression:this._config.filterExpression,region:this._region};this._subscribeCall=this._subscribeEndpoint(o,this._processSubscribeResponse.bind(this))}},e.prototype._processSubscribeResponse=function(e,t){var o=this;if(e.error){if(e.errorData&&"Aborted"===e.errorData.message)return;e.category===M.PNTimeoutCategory?this._startSubscribeLoop():e.category===M.PNNetworkIssuesCategory?(this.disconnect(),e.error&&this._config.autoNetworkDetection&&this._isOnline&&(this._isOnline=!1,this._listenerManager.announceNetworkDown()),this._reconnectionManager.onReconnection((function(){o._config.autoNetworkDetection&&!o._isOnline&&(o._isOnline=!0,o._listenerManager.announceNetworkUp()),o.reconnect(),o._subscriptionStatusAnnounced=!0;var t={category:M.PNReconnectedCategory,operation:e.operation,lastTimetoken:o._lastTimetoken,currentTimetoken:o._currentTimetoken};o._listenerManager.announceStatus(t)})),this._reconnectionManager.startPolling(),this._listenerManager.announceStatus(e)):e.category===M.PNBadRequestCategory?(this._stopHeartbeatTimer(),this._listenerManager.announceStatus(e)):this._listenerManager.announceStatus(e)}else{if(this._storedTimetoken?(this._currentTimetoken=this._storedTimetoken,this._storedTimetoken=null):(this._lastTimetoken=this._currentTimetoken,this._currentTimetoken=t.metadata.timetoken),!this._subscriptionStatusAnnounced){var i={};i.category=M.PNConnectedCategory,i.operation=e.operation,i.affectedChannels=this._pendingChannelSubscriptions,i.subscribedChannels=this.getSubscribedChannels(),i.affectedChannelGroups=this._pendingChannelGroupSubscriptions,i.lastTimetoken=this._lastTimetoken,i.currentTimetoken=this._currentTimetoken,this._subscriptionStatusAnnounced=!0,this._listenerManager.announceStatus(i),this._pendingChannelSubscriptions=[],this._pendingChannelGroupSubscriptions=[]}var a=t.messages||[],s=this._config,u=s.requestMessageCountThreshold,c=s.dedupeOnSubscribe;if(u&&a.length>=u){var l={};l.category=M.PNRequestMessageCountExceededCategory,l.operation=e.operation,this._listenerManager.announceStatus(l)}a.forEach((function(e){var t=e.channel,i=e.subscriptionMatch,a=e.publishMetaData;if(t===i&&(i=null),c){if(o._dedupingManager.isDuplicate(e))return;o._dedupingManager.addEntry(e)}if(j.endsWith(e.channel,"-pnpres"))(y={channel:null,subscription:null}).actualChannel=null!=i?t:null,y.subscribedChannel=null!=i?i:t,t&&(y.channel=t.substring(0,t.lastIndexOf("-pnpres"))),i&&(y.subscription=i.substring(0,i.lastIndexOf("-pnpres"))),y.action=e.payload.action,y.state=e.payload.data,y.timetoken=a.publishTimetoken,y.occupancy=e.payload.occupancy,y.uuid=e.payload.uuid,y.timestamp=e.payload.timestamp,e.payload.join&&(y.join=e.payload.join),e.payload.leave&&(y.leave=e.payload.leave),e.payload.timeout&&(y.timeout=e.payload.timeout),o._listenerManager.announcePresence(y);else if(1===e.messageType){(y={channel:null,subscription:null}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,e.userMetadata&&(y.userMetadata=e.userMetadata),y.message=e.payload,o._listenerManager.announceSignal(y)}else if(2===e.messageType){if((y={channel:null,subscription:null}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,e.userMetadata&&(y.userMetadata=e.userMetadata),y.message={event:e.payload.event,type:e.payload.type,data:e.payload.data},o._listenerManager.announceObjects(y),"uuid"===e.payload.type){var s=o._renameChannelField(y);o._listenerManager.announceUser(n(n({},s),{message:n(n({},s.message),{event:o._renameEvent(s.message.event),type:"user"})}))}else if("channel"===e.payload.type){s=o._renameChannelField(y);o._listenerManager.announceSpace(n(n({},s),{message:n(n({},s.message),{event:o._renameEvent(s.message.event),type:"space"})}))}else if("membership"===e.payload.type){var u=(s=o._renameChannelField(y)).message.data,l=u.uuid,p=u.channel,f=r(u,["uuid","channel"]);f.user=l,f.space=p,o._listenerManager.announceMembership(n(n({},s),{message:n(n({},s.message),{event:o._renameEvent(s.message.event),data:f})}))}}else if(3===e.messageType){(y={}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,y.data={messageTimetoken:e.payload.data.messageTimetoken,actionTimetoken:e.payload.data.actionTimetoken,type:e.payload.data.type,uuid:e.issuingClientId,value:e.payload.data.value},y.event=e.payload.event,o._listenerManager.announceMessageAction(y)}else if(4===e.messageType){(y={}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId;var h=e.payload;if(o._config.cipherKey){var d=o._crypto.decrypt(e.payload);"object"==typeof d&&null!==d&&(h=d)}e.userMetadata&&(y.userMetadata=e.userMetadata),y.message=h.message,y.file={id:h.file.id,name:h.file.name,url:o._getFileUrl({id:h.file.id,name:h.file.name,channel:t})},o._listenerManager.announceFile(y)}else{var y;(y={channel:null,subscription:null}).actualChannel=null!=i?t:null,y.subscribedChannel=null!=i?i:t,y.channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,e.userMetadata&&(y.userMetadata=e.userMetadata),o._config.cipherKey?y.message=o._crypto.decrypt(e.payload):y.message=e.payload,o._listenerManager.announceMessage(y)}})),this._region=t.metadata.region,this._startSubscribeLoop()}},e.prototype._stopSubscribeLoop=function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)},e.prototype._renameEvent=function(e){return"set"===e?"updated":"removed"},e.prototype._renameChannelField=function(e){var t=e.channel,n=r(e,["channel"]);return n.spaceId=t,n},e}(),U={PNTimeOperation:"PNTimeOperation",PNHistoryOperation:"PNHistoryOperation",PNDeleteMessagesOperation:"PNDeleteMessagesOperation",PNFetchMessagesOperation:"PNFetchMessagesOperation",PNMessageCounts:"PNMessageCountsOperation",PNSubscribeOperation:"PNSubscribeOperation",PNUnsubscribeOperation:"PNUnsubscribeOperation",PNPublishOperation:"PNPublishOperation",PNSignalOperation:"PNSignalOperation",PNAddMessageActionOperation:"PNAddActionOperation",PNRemoveMessageActionOperation:"PNRemoveMessageActionOperation",PNGetMessageActionsOperation:"PNGetMessageActionsOperation",PNCreateUserOperation:"PNCreateUserOperation",PNUpdateUserOperation:"PNUpdateUserOperation",PNDeleteUserOperation:"PNDeleteUserOperation",PNGetUserOperation:"PNGetUsersOperation",PNGetUsersOperation:"PNGetUsersOperation",PNCreateSpaceOperation:"PNCreateSpaceOperation",PNUpdateSpaceOperation:"PNUpdateSpaceOperation",PNDeleteSpaceOperation:"PNDeleteSpaceOperation",PNGetSpaceOperation:"PNGetSpacesOperation",PNGetSpacesOperation:"PNGetSpacesOperation",PNGetMembersOperation:"PNGetMembersOperation",PNUpdateMembersOperation:"PNUpdateMembersOperation",PNGetMembershipsOperation:"PNGetMembershipsOperation",PNUpdateMembershipsOperation:"PNUpdateMembershipsOperation",PNListFilesOperation:"PNListFilesOperation",PNGenerateUploadUrlOperation:"PNGenerateUploadUrlOperation",PNPublishFileOperation:"PNPublishFileOperation",PNGetFileUrlOperation:"PNGetFileUrlOperation",PNDownloadFileOperation:"PNDownloadFileOperation",PNGetAllUUIDMetadataOperation:"PNGetAllUUIDMetadataOperation",PNGetUUIDMetadataOperation:"PNGetUUIDMetadataOperation",PNSetUUIDMetadataOperation:"PNSetUUIDMetadataOperation",PNRemoveUUIDMetadataOperation:"PNRemoveUUIDMetadataOperation",PNGetAllChannelMetadataOperation:"PNGetAllChannelMetadataOperation",PNGetChannelMetadataOperation:"PNGetChannelMetadataOperation",PNSetChannelMetadataOperation:"PNSetChannelMetadataOperation",PNRemoveChannelMetadataOperation:"PNRemoveChannelMetadataOperation",PNSetMembersOperation:"PNSetMembersOperation",PNSetMembershipsOperation:"PNSetMembershipsOperation",PNPushNotificationEnabledChannelsOperation:"PNPushNotificationEnabledChannelsOperation",PNRemoveAllPushNotificationsOperation:"PNRemoveAllPushNotificationsOperation",PNWhereNowOperation:"PNWhereNowOperation",PNSetStateOperation:"PNSetStateOperation",PNHereNowOperation:"PNHereNowOperation",PNGetStateOperation:"PNGetStateOperation",PNHeartbeatOperation:"PNHeartbeatOperation",PNChannelGroupsOperation:"PNChannelGroupsOperation",PNRemoveGroupOperation:"PNRemoveGroupOperation",PNChannelsForGroupOperation:"PNChannelsForGroupOperation",PNAddChannelsToGroupOperation:"PNAddChannelsToGroupOperation",PNRemoveChannelsFromGroupOperation:"PNRemoveChannelsFromGroupOperation",PNAccessManagerGrant:"PNAccessManagerGrant",PNAccessManagerGrantToken:"PNAccessManagerGrantToken",PNAccessManagerAudit:"PNAccessManagerAudit",PNAccessManagerRevokeToken:"PNAccessManagerRevokeToken",PNHandshakeOperation:"PNHandshakeOperation",PNReceiveMessagesOperation:"PNReceiveMessagesOperation"},x=function(){function e(e){this._maximumSamplesCount=100,this._trackedLatencies={},this._latencies={},this._maximumSamplesCount=e.maximumSamplesCount||this._maximumSamplesCount}return e.prototype.operationsLatencyForRequest=function(){var e=this,t={};return Object.keys(this._latencies).forEach((function(n){var r=e._latencies[n],o=e._averageLatency(r);o>0&&(t["l_".concat(n)]=o)})),t},e.prototype.startLatencyMeasure=function(e,t){e!==U.PNSubscribeOperation&&t&&(this._trackedLatencies[t]=Date.now())},e.prototype.stopLatencyMeasure=function(e,t){if(e!==U.PNSubscribeOperation&&t){var n=this._endpointName(e),r=this._latencies[n],o=this._trackedLatencies[t];r||(this._latencies[n]=[],r=this._latencies[n]),r.push(Date.now()-o),r.length>this._maximumSamplesCount&&r.splice(0,r.length-this._maximumSamplesCount),delete this._trackedLatencies[t]}},e.prototype._averageLatency=function(e){return Math.floor(e.reduce((function(e,t){return e+t}),0)/e.length)},e.prototype._endpointName=function(e){var t=null;switch(e){case U.PNPublishOperation:t="pub";break;case U.PNSignalOperation:t="sig";break;case U.PNHistoryOperation:case U.PNFetchMessagesOperation:case U.PNDeleteMessagesOperation:case U.PNMessageCounts:t="hist";break;case U.PNUnsubscribeOperation:case U.PNWhereNowOperation:case U.PNHereNowOperation:case U.PNHeartbeatOperation:case U.PNSetStateOperation:case U.PNGetStateOperation:t="pres";break;case U.PNAddChannelsToGroupOperation:case U.PNRemoveChannelsFromGroupOperation:case U.PNChannelGroupsOperation:case U.PNRemoveGroupOperation:case U.PNChannelsForGroupOperation:t="cg";break;case U.PNPushNotificationEnabledChannelsOperation:case U.PNRemoveAllPushNotificationsOperation:t="push";break;case U.PNCreateUserOperation:case U.PNUpdateUserOperation:case U.PNDeleteUserOperation:case U.PNGetUserOperation:case U.PNGetUsersOperation:case U.PNCreateSpaceOperation:case U.PNUpdateSpaceOperation:case U.PNDeleteSpaceOperation:case U.PNGetSpaceOperation:case U.PNGetSpacesOperation:case U.PNGetMembersOperation:case U.PNUpdateMembersOperation:case U.PNGetMembershipsOperation:case U.PNUpdateMembershipsOperation:t="obj";break;case U.PNAddMessageActionOperation:case U.PNRemoveMessageActionOperation:case U.PNGetMessageActionsOperation:t="msga";break;case U.PNAccessManagerGrant:case U.PNAccessManagerAudit:t="pam";break;case U.PNAccessManagerGrantToken:case U.PNAccessManagerRevokeToken:t="pamv3";break;default:t="time"}return t},e}(),I=function(){function e(e,t,n){this._payload=e,this._setDefaultPayloadStructure(),this.title=t,this.body=n}return Object.defineProperty(e.prototype,"payload",{get:function(){return this._payload},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"title",{set:function(e){this._title=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"subtitle",{set:function(e){this._subtitle=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"body",{set:function(e){this._body=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"badge",{set:function(e){this._badge=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"sound",{set:function(e){this._sound=e},enumerable:!1,configurable:!0}),e.prototype._setDefaultPayloadStructure=function(){},e.prototype.toObject=function(){return{}},e}(),D=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return t(r,e),Object.defineProperty(r.prototype,"configurations",{set:function(e){e&&e.length&&(this._configurations=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"notification",{get:function(){return this._payload.aps},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"title",{get:function(){return this._title},set:function(e){e&&e.length&&(this._payload.aps.alert.title=e,this._title=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"subtitle",{get:function(){return this._subtitle},set:function(e){e&&e.length&&(this._payload.aps.alert.subtitle=e,this._subtitle=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"body",{get:function(){return this._body},set:function(e){e&&e.length&&(this._payload.aps.alert.body=e,this._body=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"badge",{get:function(){return this._badge},set:function(e){null!=e&&(this._payload.aps.badge=e,this._badge=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"sound",{get:function(){return this._sound},set:function(e){e&&e.length&&(this._payload.aps.sound=e,this._sound=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"silent",{set:function(e){this._isSilent=e},enumerable:!1,configurable:!0}),r.prototype._setDefaultPayloadStructure=function(){this._payload.aps={alert:{}}},r.prototype.toObject=function(){var e=this,t=n({},this._payload),r=t.aps,o=r.alert;if(this._isSilent&&(r["content-available"]=1),"apns2"===this._apnsPushType){if(!this._configurations||!this._configurations.length)throw new ReferenceError("APNS2 configuration is missing");var i=[];this._configurations.forEach((function(t){i.push(e._objectFromAPNS2Configuration(t))})),i.length&&(t.pn_push=i)}return o&&Object.keys(o).length||delete r.alert,this._isSilent&&(delete r.alert,delete r.badge,delete r.sound,o={}),this._isSilent||Object.keys(o).length?t:null},r.prototype._objectFromAPNS2Configuration=function(e){var t=this;if(!e.targets||!e.targets.length)throw new ReferenceError("At least one APNS2 target should be provided");var n=[];e.targets.forEach((function(e){n.push(t._objectFromAPNSTarget(e))}));var r=e.collapseId,o=e.expirationDate,i={auth_method:"token",targets:n,version:"v2"};return r&&r.length&&(i.collapse_id=r),o&&(i.expiration=o.toISOString()),i},r.prototype._objectFromAPNSTarget=function(e){if(!e.topic||!e.topic.length)throw new TypeError("Target 'topic' undefined.");var t=e.topic,n=e.environment,r=void 0===n?"development":n,o=e.excludedDevices,i=void 0===o?[]:o,a={topic:t,environment:r};return i.length&&(a.excluded_devices=i),a},r}(I),F=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return t(r,e),Object.defineProperty(r.prototype,"backContent",{get:function(){return this._backContent},set:function(e){e&&e.length&&(this._payload.back_content=e,this._backContent=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"backTitle",{get:function(){return this._backTitle},set:function(e){e&&e.length&&(this._payload.back_title=e,this._backTitle=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"count",{get:function(){return this._count},set:function(e){null!=e&&(this._payload.count=e,this._count=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"title",{get:function(){return this._title},set:function(e){e&&e.length&&(this._payload.title=e,this._title=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"type",{get:function(){return this._type},set:function(e){e&&e.length&&(this._payload.type=e,this._type=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"subtitle",{get:function(){return this.backTitle},set:function(e){this.backTitle=e},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"body",{get:function(){return this.backContent},set:function(e){this.backContent=e},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"badge",{get:function(){return this.count},set:function(e){this.count=e},enumerable:!1,configurable:!0}),r.prototype.toObject=function(){return Object.keys(this._payload).length?n({},this._payload):null},r}(I),G=function(e){function o(){return null!==e&&e.apply(this,arguments)||this}return t(o,e),Object.defineProperty(o.prototype,"notification",{get:function(){return this._payload.notification},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"data",{get:function(){return this._payload.data},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"title",{get:function(){return this._title},set:function(e){e&&e.length&&(this._payload.notification.title=e,this._title=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"body",{get:function(){return this._body},set:function(e){e&&e.length&&(this._payload.notification.body=e,this._body=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"sound",{get:function(){return this._sound},set:function(e){e&&e.length&&(this._payload.notification.sound=e,this._sound=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"icon",{get:function(){return this._icon},set:function(e){e&&e.length&&(this._payload.notification.icon=e,this._icon=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"tag",{get:function(){return this._tag},set:function(e){e&&e.length&&(this._payload.notification.tag=e,this._tag=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"silent",{set:function(e){this._isSilent=e},enumerable:!1,configurable:!0}),o.prototype._setDefaultPayloadStructure=function(){this._payload.notification={},this._payload.data={}},o.prototype.toObject=function(){var e=n({},this._payload.data),t=null,o={};if(Object.keys(this._payload).length>2){var i=this._payload;i.notification,i.data;var a=r(i,["notification","data"]);e=n(n({},e),a)}return this._isSilent?e.notification=this._payload.notification:t=this._payload.notification,Object.keys(e).length&&(o.data=e),t&&Object.keys(t).length&&(o.notification=t),Object.keys(o).length?o:null},o}(I),K=function(){function e(e,t){this._payload={apns:{},mpns:{},fcm:{}},this._title=e,this._body=t,this.apns=new D(this._payload.apns,e,t),this.mpns=new F(this._payload.mpns,e,t),this.fcm=new G(this._payload.fcm,e,t)}return Object.defineProperty(e.prototype,"debugging",{set:function(e){this._debugging=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"title",{get:function(){return this._title},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"body",{get:function(){return this._body},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"subtitle",{get:function(){return this._subtitle},set:function(e){this._subtitle=e,this.apns.subtitle=e,this.mpns.subtitle=e,this.fcm.subtitle=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"badge",{get:function(){return this._badge},set:function(e){this._badge=e,this.apns.badge=e,this.mpns.badge=e,this.fcm.badge=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"sound",{get:function(){return this._sound},set:function(e){this._sound=e,this.apns.sound=e,this.mpns.sound=e,this.fcm.sound=e},enumerable:!1,configurable:!0}),e.prototype.buildPayload=function(e){var t={};if(e.includes("apns")||e.includes("apns2")){this.apns._apnsPushType=e.includes("apns")?"apns":"apns2";var n=this.apns.toObject();n&&Object.keys(n).length&&(t.pn_apns=n)}if(e.includes("mpns")){var r=this.mpns.toObject();r&&Object.keys(r).length&&(t.pn_mpns=r)}if(e.includes("fcm")){var o=this.fcm.toObject();o&&Object.keys(o).length&&(t.pn_gcm=o)}return Object.keys(t).length&&this._debugging&&(t.pn_debug=!0),t},e}(),L=function(){function e(){this._listeners=[]}return e.prototype.addListener=function(e){this._listeners.push(e)},e.prototype.removeListener=function(e){var t=[];this._listeners.forEach((function(n){n!==e&&t.push(n)})),this._listeners=t},e.prototype.removeAllListeners=function(){this._listeners=[]},e.prototype.announcePresence=function(e){this._listeners.forEach((function(t){t.presence&&t.presence(e)}))},e.prototype.announceStatus=function(e){this._listeners.forEach((function(t){t.status&&t.status(e)}))},e.prototype.announceMessage=function(e){this._listeners.forEach((function(t){t.message&&t.message(e)}))},e.prototype.announceSignal=function(e){this._listeners.forEach((function(t){t.signal&&t.signal(e)}))},e.prototype.announceMessageAction=function(e){this._listeners.forEach((function(t){t.messageAction&&t.messageAction(e)}))},e.prototype.announceFile=function(e){this._listeners.forEach((function(t){t.file&&t.file(e)}))},e.prototype.announceObjects=function(e){this._listeners.forEach((function(t){t.objects&&t.objects(e)}))},e.prototype.announceUser=function(e){this._listeners.forEach((function(t){t.user&&t.user(e)}))},e.prototype.announceSpace=function(e){this._listeners.forEach((function(t){t.space&&t.space(e)}))},e.prototype.announceMembership=function(e){this._listeners.forEach((function(t){t.membership&&t.membership(e)}))},e.prototype.announceNetworkUp=function(){var e={};e.category=M.PNNetworkUpCategory,this.announceStatus(e)},e.prototype.announceNetworkDown=function(){var e={};e.category=M.PNNetworkDownCategory,this.announceStatus(e)},e}(),B=function(){function e(e,t){this._config=e,this._cbor=t}return e.prototype.setToken=function(e){e&&e.length>0?this._token=e:this._token=void 0},e.prototype.getToken=function(){return this._token},e.prototype.extractPermissions=function(e){var t={read:!1,write:!1,manage:!1,delete:!1,get:!1,update:!1,join:!1};return 128==(128&e)&&(t.join=!0),64==(64&e)&&(t.update=!0),32==(32&e)&&(t.get=!0),8==(8&e)&&(t.delete=!0),4==(4&e)&&(t.manage=!0),2==(2&e)&&(t.write=!0),1==(1&e)&&(t.read=!0),t},e.prototype.parseToken=function(e){var t=this,n=this._cbor.decodeToken(e);if(void 0!==n){var r=n.res.uuid?Object.keys(n.res.uuid):[],o=Object.keys(n.res.chan),i=Object.keys(n.res.grp),a=n.pat.uuid?Object.keys(n.pat.uuid):[],s=Object.keys(n.pat.chan),u=Object.keys(n.pat.grp),c={version:n.v,timestamp:n.t,ttl:n.ttl,authorized_uuid:n.uuid},l=r.length>0,p=o.length>0,f=i.length>0;(l||p||f)&&(c.resources={},l&&(c.resources.uuids={},r.forEach((function(e){c.resources.uuids[e]=t.extractPermissions(n.res.uuid[e])}))),p&&(c.resources.channels={},o.forEach((function(e){c.resources.channels[e]=t.extractPermissions(n.res.chan[e])}))),f&&(c.resources.groups={},i.forEach((function(e){c.resources.groups[e]=t.extractPermissions(n.res.grp[e])}))));var h=a.length>0,d=s.length>0,y=u.length>0;return(h||d||y)&&(c.patterns={},h&&(c.patterns.uuids={},a.forEach((function(e){c.patterns.uuids[e]=t.extractPermissions(n.pat.uuid[e])}))),d&&(c.patterns.channels={},s.forEach((function(e){c.patterns.channels[e]=t.extractPermissions(n.pat.chan[e])}))),y&&(c.patterns.groups={},u.forEach((function(e){c.patterns.groups[e]=t.extractPermissions(n.pat.grp[e])})))),Object.keys(n.meta).length>0&&(c.meta=n.meta),c.signature=n.sig,c}},e}(),H=function(e){function n(t,n){var r=this.constructor,o=e.call(this,t)||this;return o.name=o.constructor.name,o.status=n,o.message=t,Object.setPrototypeOf(o,r.prototype),o}return t(n,e),n}(Error);function q(e){return(t={message:e}).type="validationError",t.error=!0,t;var t}function z(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.usePatch&&e.usePatch(t,n)?e.patchURL(t,n):e.useGetFile&&e.useGetFile(t,n)?e.getFileURL(t,n):e.getURL(t,n)}function V(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-".concat(e.sdkFamily);e.partnerId&&(t+="-".concat(e.partnerId)),t+="/".concat(e.getVersion());var n=e._getPnsdkSuffix(" ");return n.length>0&&(t+=n),t}function W(e,t,n){return t.usePost&&t.usePost(e,n)?"POST":t.usePatch&&t.usePatch(e,n)?"PATCH":t.useDelete&&t.useDelete(e,n)?"DELETE":t.useGetFile&&t.useGetFile(e,n)?"GETFILE":"GET"}function $(e,t,n,r,o){var i=e.config,a=e.crypto,s=W(e,o,r);n.timestamp=Math.floor((new Date).getTime()/1e3),"PNPublishOperation"===o.getOperation()&&o.usePost&&o.usePost(e,r)&&(s="GET"),"GETFILE"===s&&(s="GET");var u="".concat(s,"\n").concat(i.publishKey,"\n").concat(t,"\n").concat(j.signPamFromParams(n),"\n");if("POST"===s)u+="string"==typeof(c=o.postPayload(e,r))?c:JSON.stringify(c);else if("PATCH"===s){var c;u+="string"==typeof(c=o.patchPayload(e,r))?c:JSON.stringify(c)}var l="v2.".concat(a.HMACSHA256(u));l=(l=(l=l.replace(/\+/g,"-")).replace(/\//g,"_")).replace(/=+$/,""),n.signature=l}function J(e,t){for(var r=[],o=2;o<arguments.length;o++)r[o-2]=arguments[o];var i=e.networking,a=e.config,s=e.telemetryManager,u=e.tokenManager,c=y(),l=null,p=null,f={};t.getOperation()===U.PNTimeOperation||t.getOperation()===U.PNChannelGroupsOperation?l=r[0]:(f=r[0],l=r[1]),"undefined"==typeof Promise||l||(p=j.createPromise());var h=t.validateParams(e,f);if(h)return l?l(q(h)):p?(p.reject(new H("Validation failed, check status for details",q(h))),p.promise):void 0;var d,g=t.prepareParams(e,f),b=z(t,e,f),m={url:b,operation:t.getOperation(),timeout:t.getRequestTimeout(e),headers:t.getRequestHeaders?t.getRequestHeaders():{},ignoreBody:"function"==typeof t.ignoreBody&&t.ignoreBody(e),forceBuffered:"function"==typeof t.forceBuffered?t.forceBuffered(e,f):null,abortSignal:"function"==typeof t.getAbortSignal?t.getAbortSignal(e,f):null};g.uuid=a.UUID,g.pnsdk=V(a);var v=s.operationsLatencyForRequest();if(Object.keys(v).length&&(g=n(n({},g),v)),a.useInstanceId&&(g.instanceid=a.instanceId),a.useRequestId&&(g.requestid=c),t.isAuthSupported()){var _=u.getToken()||a.getAuthKey();_&&(g.auth=_)}a.secretKey&&$(e,b,g,f,t);var O=function(n,r){if(n.error)return t.handleError&&t.handleError(e,f,n),void(l?l(n):p&&p.reject(new H("PubNub call failed, check status for details",n)));s.stopLatencyMeasure(t.getOperation(),c);var o=t.handleResponse(e,r,f);"function"!=typeof(null==o?void 0:o.then)&&(o=Promise.resolve(o)),o.then((function(e){l?l(n,e):p&&p.fulfill(e)})).catch((function(e){if(l){var n=e;t.getOperation()===U.PNSubscribeOperation&&(n={statusCode:400,error:!0,operation:t.getOperation(),errorData:e,category:M.PNUnknownCategory}),l(n,null)}else p&&p.reject(new H("PubNub call failed, check status for details",e))}))};if(s.startLatencyMeasure(t.getOperation(),c),"POST"===W(e,t,f)){var S=t.postPayload(e,f);d=i.POST(g,S,m,O)}else if("PATCH"===W(e,t,f)){S=t.patchPayload(e,f);d=i.PATCH(g,S,m,O)}else d="DELETE"===W(e,t,f)?i.DELETE(g,m,O):"GETFILE"===W(e,t,f)?i.GETFILE(g,m,O):i.GET(g,m,O);return t.getOperation()===U.PNSubscribeOperation?d:p?p.promise:void 0}var Q=Object.freeze({__proto__:null,getOperation:function(){return U.PNAddChannelsToGroupOperation},validateParams:function(e,t){var n=t.channels,r=t.channelGroup,o=e.config;return r?n&&0!==n.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(j.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}},handleResponse:function(){return{}}});var X=Object.freeze({__proto__:null,getOperation:function(){return U.PNRemoveChannelsFromGroupOperation},validateParams:function(e,t){var n=t.channels,r=t.channelGroup,o=e.config;return r?n&&0!==n.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(j.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}},handleResponse:function(){return{}}});var Y=Object.freeze({__proto__:null,getOperation:function(){return U.PNRemoveGroupOperation},validateParams:function(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(j.encodeString(n),"/remove")},isAuthSupported:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},prepareParams:function(){return{}},handleResponse:function(){return{}}});var Z=Object.freeze({__proto__:null,getOperation:function(){return U.PNChannelGroupsOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e){var t=e.config;return"/v1/channel-registration/sub-key/".concat(t.subscribeKey,"/channel-group")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{groups:t.payload.groups}}});var ee=Object.freeze({__proto__:null,getOperation:function(){return U.PNChannelsForGroupOperation},validateParams:function(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(j.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{channels:t.payload.channels}}});var te=Object.freeze({__proto__:null,getOperation:function(){return U.PNPushNotificationEnabledChannelsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.channels,i=t.topic,a=e.config;return n?r?"apns2"!==r||i?o&&0!==o.length?a.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.channels,i=void 0===o?[]:o,a=t.environment,s=void 0===a?"development":a,u=t.topic,c={type:r,add:i.join(",")};return"apns2"===r&&delete(c=n(n({},c),{environment:s,topic:u})).type,c},handleResponse:function(){return{}}});var ne=Object.freeze({__proto__:null,getOperation:function(){return U.PNPushNotificationEnabledChannelsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.channels,i=t.topic,a=e.config;return n?r?"apns2"!==r||i?o&&0!==o.length?a.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.channels,i=void 0===o?[]:o,a=t.environment,s=void 0===a?"development":a,u=t.topic,c={type:r,remove:i.join(",")};return"apns2"===r&&delete(c=n(n({},c),{environment:s,topic:u})).type,c},handleResponse:function(){return{}}});var re=Object.freeze({__proto__:null,getOperation:function(){return U.PNPushNotificationEnabledChannelsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.topic,i=e.config;return n?r?"apns2"!==r||o?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.environment,i=void 0===o?"development":o,a=t.topic,s={type:r};return"apns2"===r&&delete(s=n(n({},s),{environment:i,topic:a})).type,s},handleResponse:function(e,t){return{channels:t}}});var oe=Object.freeze({__proto__:null,getOperation:function(){return U.PNRemoveAllPushNotificationsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.topic,i=e.config;return n?r?"apns2"!==r||o?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n,"/remove"):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n,"/remove")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.environment,i=void 0===o?"development":o,a=t.topic,s={type:r};return"apns2"===r&&delete(s=n(n({},s),{environment:i,topic:a})).type,s},handleResponse:function(){return{}}});var ie=Object.freeze({__proto__:null,getOperation:function(){return U.PNUnsubscribeOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(i),"/leave")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channelGroups,r=void 0===n?[]:n,o={};return r.length>0&&(o["channel-group"]=r.join(",")),o},handleResponse:function(){return{}}});var ae=Object.freeze({__proto__:null,getOperation:function(){return U.PNWhereNowOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.uuid,o=void 0===r?n.UUID:r;return"/v2/presence/sub-key/".concat(n.subscribeKey,"/uuid/").concat(j.encodeString(o))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}});var se=Object.freeze({__proto__:null,getOperation:function(){return U.PNHeartbeatOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(i),"/heartbeat")},isAuthSupported:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},prepareParams:function(e,t){var n=t.channelGroups,r=void 0===n?[]:n,o=t.state,i=void 0===o?{}:o,a=e.config,s={};return r.length>0&&(s["channel-group"]=r.join(",")),s.state=JSON.stringify(i),s.heartbeat=a.getPresenceTimeout(),s},handleResponse:function(){return{}}});var ue=Object.freeze({__proto__:null,getOperation:function(){return U.PNGetStateOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.uuid,o=void 0===r?n.UUID:r,i=t.channels,a=void 0===i?[]:i,s=a.length>0?a.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(s),"/uuid/").concat(o)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channelGroups,r=void 0===n?[]:n,o={};return r.length>0&&(o["channel-group"]=r.join(",")),o},handleResponse:function(e,t,n){var r=n.channels,o=void 0===r?[]:r,i=n.channelGroups,a=void 0===i?[]:i,s={};return 1===o.length&&0===a.length?s[o[0]]=t.payload:s=t.payload,{channels:s}}});var ce=Object.freeze({__proto__:null,getOperation:function(){return U.PNSetStateOperation},validateParams:function(e,t){var n=e.config,r=t.state,o=t.channels,i=void 0===o?[]:o,a=t.channelGroups,s=void 0===a?[]:a;return r?n.subscribeKey?0===i.length&&0===s.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(i),"/uuid/").concat(j.encodeString(n.UUID),"/data")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.state,r=t.channelGroups,o=void 0===r?[]:r,i={};return i.state=JSON.stringify(n),o.length>0&&(i["channel-group"]=o.join(",")),i},handleResponse:function(e,t){return{state:t.payload}}});var le=Object.freeze({__proto__:null,getOperation:function(){return U.PNHereNowOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=t.channelGroups,a=void 0===i?[]:i,s="/v2/presence/sub-key/".concat(n.subscribeKey);if(o.length>0||a.length>0){var u=o.length>0?o.join(","):",";s+="/channel/".concat(j.encodeString(u))}return s},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.channelGroups,o=void 0===r?[]:r,i=t.includeUUIDs,a=void 0===i||i,s=t.includeState,u=void 0!==s&&s,c=t.queryParameters,l=void 0===c?{}:c,p={};return a||(p.disable_uuids=1),u&&(p.state=1),o.length>0&&(p["channel-group"]=o.join(",")),p=n(n({},p),l)},handleResponse:function(e,t,n){var r=n.channels,o=void 0===r?[]:r,i=n.channelGroups,a=void 0===i?[]:i,s=n.includeUUIDs,u=void 0===s||s,c=n.includeState,l=void 0!==c&&c;return o.length>1||a.length>0||0===a.length&&0===o.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach((function(n){var r=t.payload.channels[n],o=[];return e.channels[n]={occupants:o,name:n,occupancy:r.occupancy},u&&r.uuids.forEach((function(e){l?o.push({state:e.state,uuid:e.uuid}):o.push({state:null,uuid:e})})),e})),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[o[0]]={occupants:n,name:o[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach((function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})})),e}()},handleError:function(e,t,n){402!==n.statusCode||this.getURL(e,t).includes("channel")||(n.errorData.message="You have tried to perform a Global Here Now operation, your keyset configuration does not support that. Please provide a channel, or enable the Global Here Now feature from the Portal.")}});var pe=Object.freeze({__proto__:null,getOperation:function(){return U.PNAddMessageActionOperation},validateParams:function(e,t){var n=e.config,r=t.action,o=t.channel;return t.messageTimetoken?n.subscribeKey?o?r?r.value?r.type?r.type.length>15?"Action.type value exceed maximum length of 15":void 0:"Missing Action.type":"Missing Action.value":"Missing Action":"Missing message channel":"Missing Subscribe Key":"Missing message timetoken"},usePost:function(){return!0},postURL:function(e,t){var n=e.config,r=t.channel,o=t.messageTimetoken;return"/v1/message-actions/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(r),"/message/").concat(o)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},getRequestHeaders:function(){return{"Content-Type":"application/json"}},isAuthSupported:function(){return!0},prepareParams:function(){return{}},postPayload:function(e,t){return t.action},handleResponse:function(e,t){return{data:t.data}}});var fe=Object.freeze({__proto__:null,getOperation:function(){return U.PNRemoveMessageActionOperation},validateParams:function(e,t){var n=e.config,r=t.channel,o=t.actionTimetoken;return t.messageTimetoken?o?n.subscribeKey?r?void 0:"Missing message channel":"Missing Subscribe Key":"Missing action timetoken":"Missing message timetoken"},useDelete:function(){return!0},getURL:function(e,t){var n=e.config,r=t.channel,o=t.actionTimetoken,i=t.messageTimetoken;return"/v1/message-actions/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(r),"/message/").concat(i,"/action/").concat(o)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{data:t.data}}});var he=Object.freeze({__proto__:null,getOperation:function(){return U.PNGetMessageActionsOperation},validateParams:function(e,t){var n=e.config,r=t.channel;return n.subscribeKey?r?void 0:"Missing message channel":"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channel;return"/v1/message-actions/".concat(n.subscribeKey,"/channel/").concat(j.encodeString(r))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.limit,r=t.start,o=t.end,i={};return n&&(i.limit=n),r&&(i.start=r),o&&(i.end=o),i},handleResponse:function(e,t){var n={data:t.data,start:null,end:null};return n.data.length&&(n.end=n.data[n.data.length-1].actionTimetoken,n.start=n.data[0].actionTimetoken),n}}),de={getOperation:function(){return U.PNListFilesOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"channel can't be empty"},getURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel),"/files")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n={};return t.limit&&(n.limit=t.limit),t.next&&(n.next=t.next),n},handleResponse:function(e,t){return{status:t.status,data:t.data,next:t.next,count:t.count}}},ye={getOperation:function(){return U.PNGenerateUploadUrlOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.name)?void 0:"name can't be empty":"channel can't be empty"},usePost:function(){return!0},postURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel),"/generate-upload-url")},postPayload:function(e,t){return{name:t.name}},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{status:t.status,data:t.data,file_upload_request:t.file_upload_request}}},ge={getOperation:function(){return U.PNPublishFileOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.fileId)?(null==t?void 0:t.fileName)?void 0:"file name can't be empty":"file id can't be empty":"channel can't be empty"},getURL:function(e,t){var n=e.config,r=n.publishKey,o=n.subscribeKey,i=function(e,t){var n=e.crypto,r=e.config,o=JSON.stringify(t);return r.cipherKey&&(o=n.encrypt(o),o=JSON.stringify(o)),o||""}(e,{message:t.message,file:{name:t.fileName,id:t.fileId}});return"/v1/files/publish-file/".concat(r,"/").concat(o,"/0/").concat(j.encodeString(t.channel),"/0/").concat(j.encodeString(i))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n={};return t.ttl&&(n.ttl=t.ttl),void 0!==t.storeInHistory&&(n.store=t.storeInHistory?"1":"0"),t.meta&&"object"==typeof t.meta&&(n.meta=JSON.stringify(t.meta)),n},handleResponse:function(e,t){return{timetoken:t[2]}}},be=function(e){var t=function(e){var t=this,n=e.generateUploadUrl,r=e.publishFile,a=e.modules,s=a.PubNubFile,u=a.config,c=a.cryptography,l=a.networking;return function(e){var a=e.channel,p=e.file,f=e.message,h=e.cipherKey,d=e.meta,y=e.ttl,g=e.storeInHistory;return o(t,void 0,void 0,(function(){var e,t,o,b,m,v,_,O,S,P,w,k,T,E,A,N,C,j,M,R,U,x,I,D,F,G,K,L;return i(this,(function(i){switch(i.label){case 0:if(!a)throw new H("Validation failed, check status for details",q("channel can't be empty"));if(!p)throw new H("Validation failed, check status for details",q("file can't be empty"));return e=s.create(p),[4,n({channel:a,name:e.name})];case 1:return t=i.sent(),o=t.file_upload_request,b=o.url,m=o.form_fields,v=t.data,_=v.id,O=v.name,s.supportsEncryptFile&&(null!=h?h:u.cipherKey)?[4,c.encryptFile(null!=h?h:u.cipherKey,e,s)]:[3,3];case 2:e=i.sent(),i.label=3;case 3:S=m,e.mimeType&&(S=m.map((function(t){return"Content-Type"===t.key?{key:t.key,value:e.mimeType}:t}))),i.label=4;case 4:return i.trys.push([4,18,,19]),s.supportsFileUri&&p.uri?(k=(w=l).POSTFILE,T=[b,S],[4,e.toFileUri()]):[3,7];case 5:return[4,k.apply(w,T.concat([i.sent()]))];case 6:return P=i.sent(),[3,17];case 7:return s.supportsFile?(A=(E=l).POSTFILE,N=[b,S],[4,e.toFile()]):[3,10];case 8:return[4,A.apply(E,N.concat([i.sent()]))];case 9:return P=i.sent(),[3,17];case 10:return s.supportsBuffer?(j=(C=l).POSTFILE,M=[b,S],[4,e.toBuffer()]):[3,13];case 11:return[4,j.apply(C,M.concat([i.sent()]))];case 12:return P=i.sent(),[3,17];case 13:return s.supportsBlob?(U=(R=l).POSTFILE,x=[b,S],[4,e.toBlob()]):[3,16];case 14:return[4,U.apply(R,x.concat([i.sent()]))];case 15:return P=i.sent(),[3,17];case 16:throw new Error("Unsupported environment");case 17:return[3,19];case 18:throw(I=i.sent()).response&&"string"==typeof I.response.text?(D=I.response.text,F=/<Message>(.*)<\/Message>/gi.exec(D),new H(F?"Upload to bucket failed: ".concat(F[1]):"Upload to bucket failed.",I)):new H("Upload to bucket failed.",I);case 19:if(204!==P.status)throw new H("Upload to bucket was unsuccessful",P);G=u.fileUploadPublishRetryLimit,K=!1,L={timetoken:"0"},i.label=20;case 20:return i.trys.push([20,22,,23]),[4,r({channel:a,message:f,fileId:_,fileName:O,meta:d,storeInHistory:g,ttl:y})];case 21:return L=i.sent(),K=!0,[3,23];case 22:return i.sent(),G-=1,[3,23];case 23:if(!K&&G>0)return[3,20];i.label=24;case 24:if(K)return[2,{timetoken:L.timetoken,id:_,name:O}];throw new H("Publish failed. You may want to execute that operation manually using pubnub.publishFile",{channel:a,id:_,name:O})}}))}))}}(e);return function(e,n){var r=t(e);return"function"==typeof n?(r.then((function(e){return n(null,e)})).catch((function(e){return n(e,null)})),r):r}},me=function(e,t){var n=t.channel,r=t.id,o=t.name,i=e.config,a=e.networking,s=e.tokenManager;if(!n)throw new H("Validation failed, check status for details",q("channel can't be empty"));if(!r)throw new H("Validation failed, check status for details",q("file id can't be empty"));if(!o)throw new H("Validation failed, check status for details",q("file name can't be empty"));var u="/v1/files/".concat(i.subscribeKey,"/channels/").concat(j.encodeString(n),"/files/").concat(r,"/").concat(o),c={};c.uuid=i.getUUID(),c.pnsdk=V(i);var l=s.getToken()||i.getAuthKey();l&&(c.auth=l),i.secretKey&&$(e,u,c,{},{getOperation:function(){return"PubNubGetFileUrlOperation"}});var p=Object.keys(c).map((function(e){return"".concat(encodeURIComponent(e),"=").concat(encodeURIComponent(c[e]))})).join("&");return""!==p?"".concat(a.getStandardOrigin()).concat(u,"?").concat(p):"".concat(a.getStandardOrigin()).concat(u)},ve={getOperation:function(){return U.PNDownloadFileOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.name)?(null==t?void 0:t.id)?void 0:"id can't be empty":"name can't be empty":"channel can't be empty"},useGetFile:function(){return!0},getFileURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel),"/files/").concat(t.id,"/").concat(t.name)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},ignoreBody:function(){return!0},forceBuffered:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t,n){var r=e.PubNubFile,a=e.config,s=e.cryptography;return o(void 0,void 0,void 0,(function(){var e,o,u,c;return i(this,(function(i){switch(i.label){case 0:return e=t.response.body,r.supportsEncryptFile&&(null!==(o=n.cipherKey)&&void 0!==o?o:a.cipherKey)?[4,s.decrypt(null!==(u=n.cipherKey)&&void 0!==u?u:a.cipherKey,e)]:[3,2];case 1:e=i.sent(),i.label=2;case 2:return[2,r.create({data:e,name:null!==(c=t.response.name)&&void 0!==c?c:n.name,mimeType:t.response.type})]}}))}))}},_e={getOperation:function(){return U.PNListFilesOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.id)?(null==t?void 0:t.name)?void 0:"file name can't be empty":"file id can't be empty":"channel can't be empty"},useDelete:function(){return!0},getURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel),"/files/").concat(t.id,"/").concat(t.name)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{status:t.status}}},Oe={getOperation:function(){return U.PNGetAllUUIDMetadataOperation},validateParams:function(){},getURL:function(e){var t=e.config;return"/v2/objects/".concat(t.subscribeKey,"/uuids")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["status","type"]};return(null==t?void 0:t.include)&&(null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),f.include=f.include.join(","),(null===(r=null==t?void 0:t.include)||void 0===r?void 0:r.totalCount)&&(f.count=null===(o=t.include)||void 0===o?void 0:o.totalCount),(null===(i=null==t?void 0:t.page)||void 0===i?void 0:i.next)&&(f.start=null===(a=t.page)||void 0===a?void 0:a.next),(null===(u=null==t?void 0:t.page)||void 0===u?void 0:u.prev)&&(f.end=null===(c=t.page)||void 0===c?void 0:c.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),f.limit=null!==(l=null==t?void 0:t.limit)&&void 0!==l?l:100,(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,next:t.next,prev:t.prev}}},Se={getOperation:function(){return U.PNGetUUIDMetadataOperation},validateParams:function(){},getURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(j.encodeString(null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o=e.config,i={};return i.uuid=null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:o.getUUID(),i.include=["status","type","custom"],(null==t?void 0:t.include)&&!1===(null===(r=t.include)||void 0===r?void 0:r.customFields)&&i.include.pop(),i.include=i.include.join(","),i},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Pe={getOperation:function(){return U.PNSetUUIDMetadataOperation},validateParams:function(e,t){if(!(null==t?void 0:t.data))return"Data cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(j.encodeString(null!==(n=t.uuid)&&void 0!==n?n:r.getUUID()))},patchPayload:function(e,t){return t.data},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o=e.config,i={};return i.uuid=null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:o.getUUID(),i.include=["status","type","custom"],(null==t?void 0:t.include)&&!1===(null===(r=t.include)||void 0===r?void 0:r.customFields)&&i.include.pop(),i.include=i.include.join(","),i},handleResponse:function(e,t){return{status:t.status,data:t.data}}},we={getOperation:function(){return U.PNRemoveUUIDMetadataOperation},validateParams:function(){},getURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(j.encodeString(null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()))},useDelete:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r=e.config;return{uuid:null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()}},handleResponse:function(e,t){return{status:t.status,data:t.data}}},ke={getOperation:function(){return U.PNGetAllChannelMetadataOperation},validateParams:function(){},getURL:function(e){var t=e.config;return"/v2/objects/".concat(t.subscribeKey,"/channels")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["status","type"]};return(null==t?void 0:t.include)&&(null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),f.include=f.include.join(","),(null===(r=null==t?void 0:t.include)||void 0===r?void 0:r.totalCount)&&(f.count=null===(o=t.include)||void 0===o?void 0:o.totalCount),(null===(i=null==t?void 0:t.page)||void 0===i?void 0:i.next)&&(f.start=null===(a=t.page)||void 0===a?void 0:a.next),(null===(u=null==t?void 0:t.page)||void 0===u?void 0:u.prev)&&(f.end=null===(c=t.page)||void 0===c?void 0:c.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),f.limit=null!==(l=null==t?void 0:t.limit)&&void 0!==l?l:100,(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},Te={getOperation:function(){return U.PNGetChannelMetadataOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"Channel cannot be empty"},getURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r={include:["status","type","custom"]};return(null==t?void 0:t.include)&&!1===(null===(n=t.include)||void 0===n?void 0:n.customFields)&&r.include.pop(),r.include=r.include.join(","),r},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Ee={getOperation:function(){return U.PNSetChannelMetadataOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.data)?void 0:"Data cannot be empty":"Channel cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel))},patchPayload:function(e,t){return t.data},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r={include:["status","type","custom"]};return(null==t?void 0:t.include)&&!1===(null===(n=t.include)||void 0===n?void 0:n.customFields)&&r.include.pop(),r.include=r.include.join(","),r},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Ae={getOperation:function(){return U.PNRemoveChannelMetadataOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"Channel cannot be empty"},getURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel))},useDelete:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Ne={getOperation:function(){return U.PNGetMembersOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"UUID cannot be empty"},getURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel),"/uuids")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f,h,d,y={include:["uuid.status","uuid.type","type"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&y.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customUUIDFields)&&y.include.push("uuid.custom"),(null===(i=null===(o=t.include)||void 0===o?void 0:o.UUIDFields)||void 0===i||i)&&y.include.push("uuid")),y.include=y.include.join(","),(null===(a=null==t?void 0:t.include)||void 0===a?void 0:a.totalCount)&&(y.count=null===(u=t.include)||void 0===u?void 0:u.totalCount),(null===(c=null==t?void 0:t.page)||void 0===c?void 0:c.next)&&(y.start=null===(l=t.page)||void 0===l?void 0:l.next),(null===(p=null==t?void 0:t.page)||void 0===p?void 0:p.prev)&&(y.end=null===(f=t.page)||void 0===f?void 0:f.prev),(null==t?void 0:t.filter)&&(y.filter=t.filter),y.limit=null!==(h=null==t?void 0:t.limit)&&void 0!==h?h:100,(null==t?void 0:t.sort)&&(y.sort=Object.entries(null!==(d=t.sort)&&void 0!==d?d:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),y},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},Ce={getOperation:function(){return U.PNSetMembersOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.uuids)&&0!==(null==t?void 0:t.uuids.length)?void 0:"UUIDs cannot be empty":"Channel cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(j.encodeString(t.channel),"/uuids")},patchPayload:function(e,t){var n;return(n={set:[],delete:[]})[t.type]=t.uuids.map((function(e){return"string"==typeof e?{uuid:{id:e}}:{uuid:{id:e.id},custom:e.custom,status:e.status}})),n},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["uuid.status","uuid.type","type"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customUUIDFields)&&f.include.push("uuid.custom"),(null===(o=t.include)||void 0===o?void 0:o.UUIDFields)&&f.include.push("uuid")),f.include=f.include.join(","),(null===(i=null==t?void 0:t.include)||void 0===i?void 0:i.totalCount)&&(f.count=!0),(null===(a=null==t?void 0:t.page)||void 0===a?void 0:a.next)&&(f.start=null===(u=t.page)||void 0===u?void 0:u.next),(null===(c=null==t?void 0:t.page)||void 0===c?void 0:c.prev)&&(f.end=null===(l=t.page)||void 0===l?void 0:l.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),null!=t.limit&&(f.limit=t.limit),(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},je={getOperation:function(){return U.PNGetMembershipsOperation},validateParams:function(){},getURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(j.encodeString(null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()),"/channels")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f,h,d={include:["channel.status","channel.type","status"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&d.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customChannelFields)&&d.include.push("channel.custom"),(null===(o=t.include)||void 0===o?void 0:o.channelFields)&&d.include.push("channel")),d.include=d.include.join(","),(null===(i=null==t?void 0:t.include)||void 0===i?void 0:i.totalCount)&&(d.count=null===(a=t.include)||void 0===a?void 0:a.totalCount),(null===(u=null==t?void 0:t.page)||void 0===u?void 0:u.next)&&(d.start=null===(c=t.page)||void 0===c?void 0:c.next),(null===(l=null==t?void 0:t.page)||void 0===l?void 0:l.prev)&&(d.end=null===(p=t.page)||void 0===p?void 0:p.prev),(null==t?void 0:t.filter)&&(d.filter=t.filter),d.limit=null!==(f=null==t?void 0:t.limit)&&void 0!==f?f:100,(null==t?void 0:t.sort)&&(d.sort=Object.entries(null!==(h=t.sort)&&void 0!==h?h:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),d},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},Me={getOperation:function(){return U.PNSetMembershipsOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channels)||0===(null==t?void 0:t.channels.length))return"Channels cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(j.encodeString(null!==(n=t.uuid)&&void 0!==n?n:r.getUUID()),"/channels")},patchPayload:function(e,t){var n;return(n={set:[],delete:[]})[t.type]=t.channels.map((function(e){return"string"==typeof e?{channel:{id:e}}:{channel:{id:e.id},custom:e.custom,status:e.status}})),n},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["channel.status","channel.type","status"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customChannelFields)&&f.include.push("channel.custom"),(null===(o=t.include)||void 0===o?void 0:o.channelFields)&&f.include.push("channel")),f.include=f.include.join(","),(null===(i=null==t?void 0:t.include)||void 0===i?void 0:i.totalCount)&&(f.count=!0),(null===(a=null==t?void 0:t.page)||void 0===a?void 0:a.next)&&(f.start=null===(u=t.page)||void 0===u?void 0:u.next),(null===(c=null==t?void 0:t.page)||void 0===c?void 0:c.prev)&&(f.end=null===(l=t.page)||void 0===l?void 0:l.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),null!=t.limit&&(f.limit=t.limit),(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}};var Re=Object.freeze({__proto__:null,getOperation:function(){return U.PNAccessManagerAudit},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e){var t=e.config;return"/v2/auth/audit/sub-key/".concat(t.subscribeKey)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(e,t){var n=t.channel,r=t.channelGroup,o=t.authKeys,i=void 0===o?[]:o,a={};return n&&(a.channel=n),r&&(a["channel-group"]=r),i.length>0&&(a.auth=i.join(",")),a},handleResponse:function(e,t){return t.payload}});var Ue=Object.freeze({__proto__:null,getOperation:function(){return U.PNAccessManagerGrant},validateParams:function(e,t){var n=e.config;return n.subscribeKey?n.publishKey?n.secretKey?null==t.uuids||t.authKeys?null==t.uuids||null==t.channels&&null==t.channelGroups?void 0:"Both channel/channelgroup and uuid cannot be used in the same request":"authKeys are required for grant request on uuids":"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"},getURL:function(e){var t=e.config;return"/v2/auth/grant/sub-key/".concat(t.subscribeKey)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(e,t){var n=t.channels,r=void 0===n?[]:n,o=t.channelGroups,i=void 0===o?[]:o,a=t.uuids,s=void 0===a?[]:a,u=t.ttl,c=t.read,l=void 0!==c&&c,p=t.write,f=void 0!==p&&p,h=t.manage,d=void 0!==h&&h,y=t.get,g=void 0!==y&&y,b=t.join,m=void 0!==b&&b,v=t.update,_=void 0!==v&&v,O=t.authKeys,S=void 0===O?[]:O,P=t.delete,w={};return w.r=l?"1":"0",w.w=f?"1":"0",w.m=d?"1":"0",w.d=P?"1":"0",w.g=g?"1":"0",w.j=m?"1":"0",w.u=_?"1":"0",r.length>0&&(w.channel=r.join(",")),i.length>0&&(w["channel-group"]=i.join(",")),S.length>0&&(w.auth=S.join(",")),s.length>0&&(w["target-uuid"]=s.join(",")),(u||0===u)&&(w.ttl=u),w},handleResponse:function(){return{}}});function xe(e){var t,n,r,o,i=void 0!==(null==e?void 0:e.authorizedUserId),a=void 0!==(null===(t=null==e?void 0:e.resources)||void 0===t?void 0:t.users),s=void 0!==(null===(n=null==e?void 0:e.resources)||void 0===n?void 0:n.spaces),u=void 0!==(null===(r=null==e?void 0:e.patterns)||void 0===r?void 0:r.users),c=void 0!==(null===(o=null==e?void 0:e.patterns)||void 0===o?void 0:o.spaces);return u||a||c||s||i}function Ie(e){var t=0;return e.join&&(t|=128),e.update&&(t|=64),e.get&&(t|=32),e.delete&&(t|=8),e.manage&&(t|=4),e.write&&(t|=2),e.read&&(t|=1),t}function De(e,t){if(xe(t))return function(e,t){var n=t.ttl,r=t.resources,o=t.patterns,i=t.meta,a=t.authorizedUserId,s={ttl:0,permissions:{resources:{channels:{},groups:{},uuids:{},users:{},spaces:{}},patterns:{channels:{},groups:{},uuids:{},users:{},spaces:{}},meta:{}}};if(r){var u=r.users,c=r.spaces,l=r.groups;u&&Object.keys(u).forEach((function(e){s.permissions.resources.uuids[e]=Ie(u[e])})),c&&Object.keys(c).forEach((function(e){s.permissions.resources.channels[e]=Ie(c[e])})),l&&Object.keys(l).forEach((function(e){s.permissions.resources.groups[e]=Ie(l[e])}))}if(o){var p=o.users,f=o.spaces,h=o.groups;p&&Object.keys(p).forEach((function(e){s.permissions.patterns.uuids[e]=Ie(p[e])})),f&&Object.keys(f).forEach((function(e){s.permissions.patterns.channels[e]=Ie(f[e])})),h&&Object.keys(h).forEach((function(e){s.permissions.patterns.groups[e]=Ie(h[e])}))}return(n||0===n)&&(s.ttl=n),i&&(s.permissions.meta=i),a&&(s.permissions.uuid="".concat(a)),s}(0,t);var n=t.ttl,r=t.resources,o=t.patterns,i=t.meta,a=t.authorized_uuid,s={ttl:0,permissions:{resources:{channels:{},groups:{},uuids:{},users:{},spaces:{}},patterns:{channels:{},groups:{},uuids:{},users:{},spaces:{}},meta:{}}};if(r){var u=r.uuids,c=r.channels,l=r.groups;u&&Object.keys(u).forEach((function(e){s.permissions.resources.uuids[e]=Ie(u[e])})),c&&Object.keys(c).forEach((function(e){s.permissions.resources.channels[e]=Ie(c[e])})),l&&Object.keys(l).forEach((function(e){s.permissions.resources.groups[e]=Ie(l[e])}))}if(o){var p=o.uuids,f=o.channels,h=o.groups;p&&Object.keys(p).forEach((function(e){s.permissions.patterns.uuids[e]=Ie(p[e])})),f&&Object.keys(f).forEach((function(e){s.permissions.patterns.channels[e]=Ie(f[e])})),h&&Object.keys(h).forEach((function(e){s.permissions.patterns.groups[e]=Ie(h[e])}))}return(n||0===n)&&(s.ttl=n),i&&(s.permissions.meta=i),a&&(s.permissions.uuid="".concat(a)),s}var Fe=Object.freeze({__proto__:null,getOperation:function(){return U.PNAccessManagerGrantToken},extractPermissions:Ie,validateParams:function(e,t){var n,r,o,i,a,s,u=e.config;if(!u.subscribeKey)return"Missing Subscribe Key";if(!u.publishKey)return"Missing Publish Key";if(!u.secretKey)return"Missing Secret Key";if(!t.resources&&!t.patterns)return"Missing either Resources or Patterns.";var c=void 0!==(null==t?void 0:t.authorized_uuid),l=void 0!==(null===(n=null==t?void 0:t.resources)||void 0===n?void 0:n.uuids),p=void 0!==(null===(r=null==t?void 0:t.resources)||void 0===r?void 0:r.channels),f=void 0!==(null===(o=null==t?void 0:t.resources)||void 0===o?void 0:o.groups),h=void 0!==(null===(i=null==t?void 0:t.patterns)||void 0===i?void 0:i.uuids),d=void 0!==(null===(a=null==t?void 0:t.patterns)||void 0===a?void 0:a.channels),y=void 0!==(null===(s=null==t?void 0:t.patterns)||void 0===s?void 0:s.groups),g=c||l||h||p||d||f||y;return xe(t)&&g?"Cannot mix `users`, `spaces` and `authorizedUserId` with `uuids`, `channels`, `groups` and `authorized_uuid`":(!t.resources||t.resources.uuids&&0!==Object.keys(t.resources.uuids).length||t.resources.channels&&0!==Object.keys(t.resources.channels).length||t.resources.groups&&0!==Object.keys(t.resources.groups).length||t.resources.users&&0!==Object.keys(t.resources.users).length||t.resources.spaces&&0!==Object.keys(t.resources.spaces).length)&&(!t.patterns||t.patterns.uuids&&0!==Object.keys(t.patterns.uuids).length||t.patterns.channels&&0!==Object.keys(t.patterns.channels).length||t.patterns.groups&&0!==Object.keys(t.patterns.groups).length||t.patterns.users&&0!==Object.keys(t.patterns.users).length||t.patterns.spaces&&0!==Object.keys(t.patterns.spaces).length)?void 0:"Missing values for either Resources or Patterns."},postURL:function(e){var t=e.config;return"/v3/pam/".concat(t.subscribeKey,"/grant")},usePost:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(){return{}},postPayload:function(e,t){return De(0,t)},handleResponse:function(e,t){return t.data.token}}),Ge={getOperation:function(){return U.PNAccessManagerRevokeToken},validateParams:function(e,t){return e.config.secretKey?t?void 0:"token can't be empty":"Missing Secret Key"},getURL:function(e,t){var n=e.config;return"/v3/pam/".concat(n.subscribeKey,"/grant/").concat(j.encodeString(t))},useDelete:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(e){return{uuid:e.config.getUUID()}},handleResponse:function(e,t){return{status:t.status,data:t.data}}};function Ke(e,t){var n=e.crypto,r=e.config,o=JSON.stringify(t);return r.cipherKey&&(o=n.encrypt(o),o=JSON.stringify(o)),o}var Le=Object.freeze({__proto__:null,getOperation:function(){return U.PNPublishOperation},validateParams:function(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"},usePost:function(e,t){var n=t.sendByPost;return void 0!==n&&n},getURL:function(e,t){var n=e.config,r=t.channel,o=Ke(e,t.message);return"/publish/".concat(n.publishKey,"/").concat(n.subscribeKey,"/0/").concat(j.encodeString(r),"/0/").concat(j.encodeString(o))},postURL:function(e,t){var n=e.config,r=t.channel;return"/publish/".concat(n.publishKey,"/").concat(n.subscribeKey,"/0/").concat(j.encodeString(r),"/0")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},postPayload:function(e,t){return Ke(e,t.message)},prepareParams:function(e,t){var n=t.meta,r=t.replicate,o=void 0===r||r,i=t.storeInHistory,a=t.ttl,s={};return null!=i&&(s.store=i?"1":"0"),a&&(s.ttl=a),!1===o&&(s.norep="true"),n&&"object"==typeof n&&(s.meta=JSON.stringify(n)),s},handleResponse:function(e,t){return{timetoken:t[2]}}});var Be=Object.freeze({__proto__:null,getOperation:function(){return U.PNSignalOperation},validateParams:function(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"},getURL:function(e,t){var n,r=e.config,o=t.channel,i=t.message,a=(n=i,JSON.stringify(n));return"/signal/".concat(r.publishKey,"/").concat(r.subscribeKey,"/0/").concat(j.encodeString(o),"/0/").concat(j.encodeString(a))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{timetoken:t[2]}}});function He(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}var qe=Object.freeze({__proto__:null,getOperation:function(){return U.PNHistoryOperation},validateParams:function(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"},getURL:function(e,t){var n=t.channel,r=e.config;return"/v2/history/sub-key/".concat(r.subscribeKey,"/channel/").concat(j.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.start,r=t.end,o=t.reverse,i=t.count,a=void 0===i?100:i,s=t.stringifiedTimeToken,u=void 0!==s&&s,c=t.includeMeta,l=void 0!==c&&c,p={include_token:"true"};return p.count=a,n&&(p.start=n),r&&(p.end=r),u&&(p.string_message_token="true"),null!=o&&(p.reverse=o.toString()),l&&(p.include_meta="true"),p},handleResponse:function(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return Array.isArray(t[0])&&t[0].forEach((function(t){var r={timetoken:t.timetoken,entry:He(e,t.message)};t.meta&&(r.meta=t.meta),n.messages.push(r)})),n}});var ze=Object.freeze({__proto__:null,getOperation:function(){return U.PNDeleteMessagesOperation},validateParams:function(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"},useDelete:function(){return!0},getURL:function(e,t){var n=t.channel,r=e.config;return"/v3/history/sub-key/".concat(r.subscribeKey,"/channel/").concat(j.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.start,r=t.end,o={};return n&&(o.start=n),r&&(o.end=r),o},handleResponse:function(e,t){return t.payload}});var Ve=Object.freeze({__proto__:null,getOperation:function(){return U.PNMessageCounts},validateParams:function(e,t){var n=t.channels,r=t.timetoken,o=t.channelTimetokens,i=e.config;return n?r&&o?"timetoken and channelTimetokens are incompatible together":o&&o.length>1&&n.length!==o.length?"Length of channelTimetokens and channels do not match":i.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"},getURL:function(e,t){var n=t.channels,r=e.config,o=n.join(",");return"/v3/history/sub-key/".concat(r.subscribeKey,"/message-counts/").concat(j.encodeString(o))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.timetoken,r=t.channelTimetokens,o={};if(r&&1===r.length){var i=s(r,1)[0];o.timetoken=i}else r?o.channelsTimetoken=r.join(","):n&&(o.timetoken=n);return o},handleResponse:function(e,t){return{channels:t.channels}}});var We=Object.freeze({__proto__:null,getOperation:function(){return U.PNFetchMessagesOperation},validateParams:function(e,t){var n=t.channels,r=t.includeMessageActions,o=void 0!==r&&r,i=e.config;if(!n||0===n.length)return"Missing channels";if(!i.subscribeKey)return"Missing Subscribe Key";if(o&&n.length>1)throw new TypeError("History can return actions data for a single channel only. Either pass a single channel or disable the includeMessageActions flag.")},getURL:function(e,t){var n=t.channels,r=void 0===n?[]:n,o=t.includeMessageActions,i=void 0!==o&&o,a=e.config,s=i?"history-with-actions":"history",u=r.length>0?r.join(","):",";return"/v3/".concat(s,"/sub-key/").concat(a.subscribeKey,"/channel/").concat(j.encodeString(u))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channels,r=t.start,o=t.end,i=t.includeMessageActions,a=t.count,s=t.stringifiedTimeToken,u=void 0!==s&&s,c=t.includeMeta,l=void 0!==c&&c,p=t.includeUuid,f=t.includeUUID,h=void 0===f||f,d=t.includeMessageType,y=void 0===d||d,g={};return g.max=a||(n.length>1||!0===i?25:100),r&&(g.start=r),o&&(g.end=o),u&&(g.string_message_token="true"),l&&(g.include_meta="true"),h&&!1!==p&&(g.include_uuid="true"),y&&(g.include_message_type="true"),g},handleResponse:function(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach((function(r){n.channels[r]=[],(t.channels[r]||[]).forEach((function(t){var o={};o.channel=r,o.timetoken=t.timetoken,o.message=function(e,t){var n=e.config,r=e.crypto;if(!n.cipherKey)return t;try{return r.decrypt(t)}catch(e){return t}}(e,t.message),o.messageType=t.message_type,o.uuid=t.uuid,t.actions&&(o.actions=t.actions,o.data=t.actions),t.meta&&(o.meta=t.meta),n.channels[r].push(o)}))})),t.more&&(n.more=t.more),n}});var $e=Object.freeze({__proto__:null,getOperation:function(){return U.PNTimeOperation},getURL:function(){return"/time/0"},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},prepareParams:function(){return{}},isAuthSupported:function(){return!1},handleResponse:function(e,t){return{timetoken:t[0]}},validateParams:function(){}});var Je=Object.freeze({__proto__:null,getOperation:function(){return U.PNSubscribeOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/subscribe/".concat(n.subscribeKey,"/").concat(j.encodeString(i),"/0")},getRequestTimeout:function(e){return e.config.getSubscribeTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=e.config,r=t.state,o=t.channelGroups,i=void 0===o?[]:o,a=t.timetoken,s=t.filterExpression,u=t.region,c={heartbeat:n.getPresenceTimeout()};return i.length>0&&(c["channel-group"]=i.join(",")),s&&s.length>0&&(c["filter-expr"]=s),Object.keys(r).length&&(c.state=JSON.stringify(r)),a&&(c.tt=a),u&&(c.tr=u),c},handleResponse:function(e,t){var n=[];t.m.forEach((function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,messageType:e.e,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)}));var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}}),Qe={getOperation:function(){return U.PNHandshakeOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channels)&&!(null==t?void 0:t.channelGroups))return"channels and channleGroups both should not be empty"},getURL:function(e,t){var n=e.config,r=t.channels?t.channels.join(","):",";return"/v2/subscribe/".concat(n.subscribeKey,"/").concat(j.encodeString(r),"/0")},getRequestTimeout:function(e){return e.config.getSubscribeTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n={};return t.channelGroups&&t.channelGroups.length>0&&(n["channel-group"]=t.channelGroups.join(",")),n.tt=0,n},handleResponse:function(e,t){return{region:t.t.r,timetoken:t.t.t}}},Xe={getOperation:function(){return U.PNReceiveMessagesOperation},validateParams:function(e,t){return(null==t?void 0:t.channels)||(null==t?void 0:t.channelGroups)?(null==t?void 0:t.timetoken)?(null==t?void 0:t.region)?void 0:"region can not be empty":"timetoken can not be empty":"channels and channleGroups both should not be empty"},getURL:function(e,t){var n=e.config,r=t.channels?t.channels.join(","):",";return"/v2/subscribe/".concat(n.subscribeKey,"/").concat(j.encodeString(r),"/0")},getRequestTimeout:function(e){return e.config.getSubscribeTimeout()},isAuthSupported:function(){return!0},getAbortSignal:function(e,t){return t.abortSignal},prepareParams:function(e,t){var n={};return t.channelGroups&&t.channelGroups.length>0&&(n["channel-group"]=t.channelGroups.join(",")),n.tt=t.timetoken,n.tr=t.region,n},handleResponse:function(e,t){var n=[];return t.m.forEach((function(e){var t={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,messageType:e.e,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,publishMetaData:{timetoken:e.p.t,region:e.p.r}};n.push(t)})),{messages:n,metadata:{region:t.t.r,timetoken:t.t.t}}}},Ye=function(){function e(e){void 0===e&&(e=!1),this.sync=e,this.listeners=new Set}return e.prototype.subscribe=function(e){var t=this;return this.listeners.add(e),function(){t.listeners.delete(e)}},e.prototype.notify=function(e){var t=this,n=function(){t.listeners.forEach((function(t){t(e)}))};this.sync?n():setTimeout(n,0)},e}(),Ze=function(){function e(e){this.label=e,this.transitionMap=new Map,this.enterEffects=[],this.exitEffects=[]}return e.prototype.transition=function(e,t){var n;if(this.transitionMap.has(t.type))return null===(n=this.transitionMap.get(t.type))||void 0===n?void 0:n(e,t)},e.prototype.on=function(e,t){return this.transitionMap.set(e,t),this},e.prototype.with=function(e,t){return[this,e,null!=t?t:[]]},e.prototype.onEnter=function(e){return this.enterEffects.push(e),this},e.prototype.onExit=function(e){return this.exitEffects.push(e),this},e}(),et=function(e){function n(){return null!==e&&e.apply(this,arguments)||this}return t(n,e),n.prototype.describe=function(e){return new Ze(e)},n.prototype.start=function(e,t){this.currentState=e,this.currentContext=t,this.notify({type:"engineStarted",state:e,context:t})},n.prototype.transition=function(e){var t,n,r,o,i,u;if(!this.currentState)throw new Error("Start the engine first");this.notify({type:"eventReceived",event:e});var c=this.currentState.transition(this.currentContext,e);if(c){var l=s(c,3),p=l[0],f=l[1],h=l[2];try{for(var d=a(this.currentState.exitEffects),y=d.next();!y.done;y=d.next()){var g=y.value;this.notify({type:"invocationDispatched",invocation:g(this.currentContext)})}}catch(e){t={error:e}}finally{try{y&&!y.done&&(n=d.return)&&n.call(d)}finally{if(t)throw t.error}}var b=this.currentState;this.currentState=p;var m=this.currentContext;this.currentContext=f,this.notify({type:"transitionDone",fromState:b,fromContext:m,toState:p,toContext:f,event:e});try{for(var v=a(h),_=v.next();!_.done;_=v.next()){g=_.value;this.notify({type:"invocationDispatched",invocation:g})}}catch(e){r={error:e}}finally{try{_&&!_.done&&(o=v.return)&&o.call(v)}finally{if(r)throw r.error}}try{for(var O=a(this.currentState.enterEffects),S=O.next();!S.done;S=O.next()){g=S.value;this.notify({type:"invocationDispatched",invocation:g(this.currentContext)})}}catch(e){i={error:e}}finally{try{S&&!S.done&&(u=O.return)&&u.call(O)}finally{if(i)throw i.error}}}},n}(Ye),tt=function(){function e(e){this.dependencies=e,this.instances=new Map,this.handlers=new Map}return e.prototype.on=function(e,t){this.handlers.set(e,t)},e.prototype.dispatch=function(e){if("CANCEL"!==e.type){var t=this.handlers.get(e.type);if(!t)throw new Error("Unhandled invocation '".concat(e.type,"'"));var n=t(e.payload,this.dependencies);e.managed&&this.instances.set(e.type,n),n.start()}else if(this.instances.has(e.payload)){var r=this.instances.get(e.payload);null==r||r.cancel(),this.instances.delete(e.payload)}},e}();function nt(e,t){var n=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return{type:e,payload:null==t?void 0:t.apply(void 0,u([],s(n),!1))}};return n.type=e,n}function rt(e,t){var n=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return{type:e,payload:t.apply(void 0,u([],s(n),!1)),managed:!0}};return n.type=e,n.cancel={type:"CANCEL",payload:e,managed:!1},n}var ot,it,at,st=function(e){function n(){var t=this.constructor,n=e.call(this,"The operation was aborted.")||this;return n.name="AbortError",Object.setPrototypeOf(n,t.prototype),n}return t(n,e),n}(Error),ut=function(e){function n(){var t=null!==e&&e.apply(this,arguments)||this;return t._aborted=!1,t}return t(n,e),Object.defineProperty(n.prototype,"aborted",{get:function(){return this._aborted},enumerable:!1,configurable:!0}),n.prototype.throwIfAborted=function(){if(this._aborted)throw new st},n.prototype.abort=function(){this._aborted=!0,this.notify(new st)},n}(Ye),ct=function(e){function n(t,n,r){var o=e.call(this,t,n)||this;return o.asyncFunction=r,o.abortSignal=new ut,o}return t(n,e),n.prototype.start=function(){this.asyncFunction(this.payload,this.abortSignal,this.dependencies)},n.prototype.cancel=function(){this.abortSignal.abort()},n}((function(e,t){this.payload=e,this.dependencies=t})),lt=function(e){return function(t,n){return new ct(t,n,e)}},pt=rt("HANDSHAKE",(function(e,t){return{channels:e,groups:t}})),ft=rt("RECEIVE_EVENTS",(function(e,t,n){return{channels:e,groups:t,cursor:n}})),ht=(it=function(e){return e},at=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return{type:ot,payload:it.apply(void 0,u([],s(e),!1)),managed:!1}},at.type=ot="EMIT_EVENTS",at),dt=rt("RECONNECT",(function(e){return e})),yt=rt("HANDSHAKE_RECONNECT",(function(e){return e})),gt=nt("SUBSCRIPTION_CHANGE",(function(e,t){return{channels:e,groups:t}})),bt=nt("DISCONNECT",(function(){return{}})),mt=nt("RECONNECT",(function(){return{}}));nt("RESTORE",(function(e,t,n,r){return{channels:e,groups:t,timetoken:n,region:r}}));var vt=nt("HANDSHAKING_SUCCESS",(function(e){return e})),_t=nt("HANDSHAKING_FAILURE",(function(e){return e})),Ot=nt("HANDSHAKING_RECONNECTING_SUCCESS",(function(e){return{cursor:e}})),St=nt("HANDSHAKING_RECONNECTING_FAILURE",(function(e){return e})),Pt=nt("HANDSHAKING_RECONNECTING_GIVEUP",(function(){return{}})),wt=nt("HANDSHAKING_RECONNECTING_RETRY",(function(){return{}})),kt=nt("RECEIVING_SUCCESS",(function(e,t){return{cursor:e,events:t}})),Tt=nt("RECEIVING_FAILURE",(function(e){return e})),Et=nt("RECONNECTING_SUCCESS",(function(e,t){return{cursor:e,events:t}})),At=nt("RECONNECTING_FAILURE",(function(e){return e})),Nt=nt("RECONNECTING_GIVEUP",(function(){return{}})),Ct=nt("RECONNECTING_RETRY",(function(){return{}})),jt=function(e){function n(t,n){var r=e.call(this,n)||this;return r.on(pt.type,lt((function(e,n,a){var s=a.handshake;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:n.throwIfAborted(),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups})];case 2:return r=i.sent(),t.transition(vt(r)),[3,4];case 3:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof H?[2,t.transition(_t(o))]:[3,4];case 4:return[2]}}))}))}))),r.on(ft.type,lt((function(e,n,a){var s=a.receiveEvents;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:n.throwIfAborted(),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups,timetoken:e.cursor.timetoken,region:e.cursor.region})];case 2:return r=i.sent(),t.transition(kt(r.metadata,r.messages)),[3,4];case 3:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof H?[2,t.transition(Tt(o))]:[3,4];case 4:return[2]}}))}))}))),r.on(ht.type,lt((function(e,t,n){return n.receiveEvents,o(r,void 0,void 0,(function(){return i(this,(function(t){return e.length>0&&console.log(e),[2]}))}))}))),r.on(dt.type,lt((function(e,n,a){var s=a.receiveEvents,u=a.shouldRetry,c=a.getRetryDelay,l=a.delay;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:return u(e.reason,e.attempts)?(n.throwIfAborted(),[4,l(c(e.attempts))]):[2,t.transition(Nt())];case 1:i.sent(),n.throwIfAborted(),i.label=2;case 2:return i.trys.push([2,4,,5]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups,timetoken:e.cursor.timetoken,region:e.cursor.region})];case 3:return r=i.sent(),[2,t.transition(Et(r.metadata,r.messages))];case 4:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof H?[2,t.transition(At(o))]:[3,5];case 5:return[2]}}))}))}))),r.on(yt.type,lt((function(e,n,a){var s=a.handshake,u=a.shouldRetry,c=a.getRetryDelay,l=a.delay;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:return u(e.reason,e.attempts)?(n.throwIfAborted(),[4,l(c(e.attempts))]):[2,t.transition(Pt())];case 1:i.sent(),n.throwIfAborted(),i.label=2;case 2:return i.trys.push([2,4,,5]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups})];case 3:return r=i.sent(),[2,t.transition(Ot(r.metadata))];case 4:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof H?[2,t.transition(St(o))]:[3,5];case 5:return[2]}}))}))}))),r}return t(n,e),n}(tt),Mt=new Ze("STOPPED");Mt.on(gt.type,(function(e,t){return Mt.with({channels:t.payload.channels,groups:t.payload.groups})})),Mt.on(mt.type,(function(e){return Gt.with(n({},e))}));var Rt=new Ze("HANDSHAKE_FAILURE");Rt.on(wt.type,(function(e){return Ft.with(n(n({},e),{attempts:0}))})),Rt.on(bt.type,(function(e){return Mt.with({channels:e.channels,groups:e.groups})}));var Ut=new Ze("STOPPED");Ut.on(gt.type,(function(e,t){return Ut.with({channels:t.payload.channels,groups:t.payload.groups,cursor:e.cursor})})),Ut.on(mt.type,(function(e){return Dt.with(n({},e))}));var xt=new Ze("RECEIVE_FAILURE");xt.on(Ct.type,(function(e){return It.with(n(n({},e),{attempts:0}))})),xt.on(bt.type,(function(e){return Ut.with({channels:e.channels,groups:e.groups,cursor:e.cursor})}));var It=new Ze("RECEIVE_RECONNECTING");It.onEnter((function(e){return dt(e)})),It.onExit((function(){return dt.cancel})),It.on(Et.type,(function(e,t){return Dt.with({channels:e.channels,groups:e.groups,cursor:t.payload.cursor},[ht(t.payload.events)])})),It.on(At.type,(function(e,t){return It.with(n(n({},e),{attempts:e.attempts+1,reason:t.payload}))})),It.on(Nt.type,(function(e){return xt.with({groups:e.groups,channels:e.channels,cursor:e.cursor,reason:e.reason})})),It.on(bt.type,(function(e){return Ut.with({channels:e.channels,groups:e.groups,cursor:e.cursor})}));var Dt=new Ze("RECEIVING");Dt.onEnter((function(e){return ft(e.channels,e.groups,e.cursor)})),Dt.onExit((function(){return ft.cancel})),Dt.on(kt.type,(function(e,t){return Dt.with(n(n({},e),{cursor:t.payload.cursor}),[ht(t.payload.events)])})),Dt.on(gt.type,(function(e,t){return 0===t.payload.channels.length&&0===t.payload.groups.length?Kt.with(void 0):Dt.with(n(n({},e),{channels:t.payload.channels,groups:t.payload.groups}))})),Dt.on(Tt.type,(function(e,t){return It.with(n(n({},e),{attempts:0,reason:t.payload}))})),Dt.on(bt.type,(function(e){return Ut.with({channels:e.channels,groups:e.groups,cursor:e.cursor})}));var Ft=new Ze("HANDSHAKE_RECONNECTING");Ft.onEnter((function(e){return yt(e)})),Ft.onExit((function(){return dt.cancel})),Ft.on(Et.type,(function(e,t){return Dt.with({channels:e.channels,groups:e.groups,cursor:t.payload.cursor},[ht(t.payload.events)])})),Ft.on(At.type,(function(e,t){return Ft.with(n(n({},e),{attempts:e.attempts+1,reason:t.payload}))})),Ft.on(Nt.type,(function(e){return Rt.with({groups:e.groups,channels:e.channels,reason:e.reason})})),Ft.on(bt.type,(function(e){return Mt.with({channels:e.channels,groups:e.groups})}));var Gt=new Ze("HANDSHAKING");Gt.onEnter((function(e){return pt(e.channels,e.groups)})),Gt.onExit((function(){return pt.cancel})),Gt.on(gt.type,(function(e,t){return 0===t.payload.channels.length&&0===t.payload.groups.length?Kt.with(void 0):Gt.with({channels:t.payload.channels,groups:t.payload.groups})})),Gt.on(vt.type,(function(e,t){return Dt.with({channels:e.channels,groups:e.groups,cursor:t.payload})})),Gt.on(_t.type,(function(e,t){return Ft.with(n(n({},e),{attempts:0,reason:t.payload}))})),Gt.on(bt.type,(function(e){return Mt.with({channels:e.channels,groups:e.groups})}));var Kt=new Ze("UNSUBSCRIBED");Kt.on(gt.type,(function(e,t){return Gt.with({channels:t.payload.channels,groups:t.payload.groups})}));var Lt=function(){function e(e){var t=this;this.engine=new et,this.channels=[],this.groups=[],this.dispatcher=new jt(this.engine,e),this.engine.subscribe((function(e){"invocationDispatched"===e.type&&t.dispatcher.dispatch(e.invocation)})),this.engine.start(Kt,void 0)}return Object.defineProperty(e.prototype,"_engine",{get:function(){return this.engine},enumerable:!1,configurable:!0}),e.prototype.subscribe=function(e){var t=e.channels,n=e.groups;this.channels=u(u([],s(this.channels),!1),s(null!=t?t:[]),!1),this.groups=u(u([],s(this.groups),!1),s(null!=n?n:[]),!1),this.engine.transition(gt(this.channels,this.groups))},e.prototype.unsubscribe=function(e){var t=e.channels,n=e.groups;this.channels=this.channels.filter((function(e){var n;return null===(n=!(null==t?void 0:t.includes(e)))||void 0===n||n})),this.groups=this.groups.filter((function(e){var t;return null===(t=!(null==n?void 0:n.includes(e)))||void 0===t||t})),this.engine.transition(gt(this.channels.slice(0),this.groups.slice(0)))},e.prototype.unsubscribeAll=function(){this.channels=[],this.groups=[],this.engine.transition(gt(this.channels.slice(0),this.groups.slice(0)))},e.prototype.reconnect=function(){this.engine.transition(mt())},e.prototype.disconnect=function(){this.engine.transition(bt())},e}(),Bt=function(){function e(e){var t=this,r=e.networking,o=e.cbor,i=new g({setup:e});this._config=i;var a=new T({config:i}),c=e.cryptography;r.init(i);var l=new B(i,o);this._tokenManager=l;var p=new x({maximumSamplesCount:6e4});this._telemetryManager=p;var f={config:i,networking:r,crypto:a,cryptography:c,tokenManager:l,telemetryManager:p,PubNubFile:e.PubNubFile};this.File=e.PubNubFile,this.encryptFile=function(e,n){return c.encryptFile(e,n,t.File)},this.decryptFile=function(e,n){return c.decryptFile(e,n,t.File)};var h=J.bind(this,f,$e),d=J.bind(this,f,ie),y=J.bind(this,f,se),b=J.bind(this,f,ce),m=J.bind(this,f,Je),v=new L;if(this._listenerManager=v,this.iAmHere=J.bind(this,f,se),this.iAmAway=J.bind(this,f,ie),this.setPresenceState=J.bind(this,f,ce),this.handshake=J.bind(this,f,Qe),this.receiveMessages=J.bind(this,f,Xe),!0===i.enableSubscribeBeta){var _=new Lt({handshake:this.handshake,receiveEvents:this.receiveMessages});this.subscribe=_.subscribe.bind(_),this.unsubscribe=_.unsubscribe.bind(_),this.eventEngine=_}else{var O=new R({timeEndpoint:h,leaveEndpoint:d,heartbeatEndpoint:y,setStateEndpoint:b,subscribeEndpoint:m,crypto:f.crypto,config:f.config,listenerManager:v,getFileUrl:function(e){return me(f,e)}});this.subscribe=O.adaptSubscribeChange.bind(O),this.unsubscribe=O.adaptUnsubscribeChange.bind(O),this.disconnect=O.disconnect.bind(O),this.reconnect=O.reconnect.bind(O),this.unsubscribeAll=O.unsubscribeAll.bind(O),this.getSubscribedChannels=O.getSubscribedChannels.bind(O),this.getSubscribedChannelGroups=O.getSubscribedChannelGroups.bind(O),this.setState=O.adaptStateChange.bind(O),this.presence=O.adaptPresenceChange.bind(O),this.destroy=function(e){O.unsubscribeAll(e),O.disconnect()}}this.addListener=v.addListener.bind(v),this.removeListener=v.removeListener.bind(v),this.removeAllListeners=v.removeAllListeners.bind(v),this.parseToken=l.parseToken.bind(l),this.setToken=l.setToken.bind(l),this.getToken=l.getToken.bind(l),this.channelGroups={listGroups:J.bind(this,f,Z),listChannels:J.bind(this,f,ee),addChannels:J.bind(this,f,Q),removeChannels:J.bind(this,f,X),deleteGroup:J.bind(this,f,Y)},this.push={addChannels:J.bind(this,f,te),removeChannels:J.bind(this,f,ne),deleteDevice:J.bind(this,f,oe),listChannels:J.bind(this,f,re)},this.hereNow=J.bind(this,f,le),this.whereNow=J.bind(this,f,ae),this.getState=J.bind(this,f,ue),this.grant=J.bind(this,f,Ue),this.grantToken=J.bind(this,f,Fe),this.audit=J.bind(this,f,Re),this.revokeToken=J.bind(this,f,Ge),this.publish=J.bind(this,f,Le),this.fire=function(e,n){return e.replicate=!1,e.storeInHistory=!1,t.publish(e,n)},this.signal=J.bind(this,f,Be),this.history=J.bind(this,f,qe),this.deleteMessages=J.bind(this,f,ze),this.messageCounts=J.bind(this,f,Ve),this.fetchMessages=J.bind(this,f,We),this.addMessageAction=J.bind(this,f,pe),this.removeMessageAction=J.bind(this,f,fe),this.getMessageActions=J.bind(this,f,he),this.listFiles=J.bind(this,f,de);var S=J.bind(this,f,ye);this.publishFile=J.bind(this,f,ge),this.sendFile=be({generateUploadUrl:S,publishFile:this.publishFile,modules:f}),this.getFileUrl=function(e){return me(f,e)},this.downloadFile=J.bind(this,f,ve),this.deleteFile=J.bind(this,f,_e),this.objects={getAllUUIDMetadata:J.bind(this,f,Oe),getUUIDMetadata:J.bind(this,f,Se),setUUIDMetadata:J.bind(this,f,Pe),removeUUIDMetadata:J.bind(this,f,we),getAllChannelMetadata:J.bind(this,f,ke),getChannelMetadata:J.bind(this,f,Te),setChannelMetadata:J.bind(this,f,Ee),removeChannelMetadata:J.bind(this,f,Ae),getChannelMembers:J.bind(this,f,Ne),setChannelMembers:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return J.call.apply(J,u([t,f,Ce,n({type:"set"},e)],s(r),!1))},removeChannelMembers:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return J.call.apply(J,u([t,f,Ce,n({type:"delete"},e)],s(r),!1))},getMemberships:J.bind(this,f,je),setMemberships:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return J.call.apply(J,u([t,f,Me,n({type:"set"},e)],s(r),!1))},removeMemberships:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return J.call.apply(J,u([t,f,Me,n({type:"delete"},e)],s(r),!1))}},this.createUser=function(e){return t.objects.setUUIDMetadata({uuid:e.userId,data:e.data,include:e.include})},this.updateUser=this.createUser,this.removeUser=function(e){return t.objects.removeUUIDMetadata({uuid:null==e?void 0:e.userId})},this.fetchUser=function(e){return t.objects.getUUIDMetadata({uuid:null==e?void 0:e.userId,include:null==e?void 0:e.include})},this.fetchUsers=this.objects.getAllUUIDMetadata,this.createSpace=function(e){return t.objects.setChannelMetadata({channel:e.spaceId,data:e.data,include:e.include})},this.updateSpace=this.createSpace,this.removeSpace=function(e){return t.objects.removeChannelMetadata({channel:e.spaceId})},this.fetchSpace=function(e){return t.objects.getChannelMetadata({channel:e.spaceId,include:e.include})},this.fetchSpaces=this.objects.getAllChannelMetadata,this.addMemberships=function(e){var n,r;return"string"==typeof e.spaceId?t.objects.setChannelMembers({channel:e.spaceId,uuids:null===(n=e.users)||void 0===n?void 0:n.map((function(e){return"string"==typeof e?e:{id:e.userId,custom:e.custom,status:e.status}})),limit:0}):t.objects.setMemberships({uuid:e.userId,channels:null===(r=e.spaces)||void 0===r?void 0:r.map((function(e){return"string"==typeof e?e:{id:e.spaceId,custom:e.custom,status:e.status}})),limit:0})},this.updateMemberships=this.addMemberships,this.removeMemberships=function(e){return"string"==typeof e.spaceId?t.objects.removeChannelMembers({channel:e.spaceId,uuids:e.userIds,limit:0}):t.objects.removeMemberships({uuid:e.userId,channels:e.spaceIds,limit:0})},this.fetchMemberships=function(e){return"string"==typeof e.spaceId?t.objects.getChannelMembers({channel:e.spaceId,filter:e.filter,limit:e.limit,page:e.page,include:{customFields:e.include.customFields,UUIDFields:e.include.userFields,customUUIDFields:e.include.customUserFields,totalCount:e.include.totalCount},sort:null!=e.sort?Object.fromEntries(Object.entries(e.sort).map((function(e){var t=s(e,2),n=t[0],r=t[1];return[n.replace("user","uuid"),r]}))):null}).then((function(e){var t;return e.data=null===(t=e.data)||void 0===t?void 0:t.map((function(e){return{user:e.uuid,custom:e.custom,updated:e.updated,eTag:e.eTag}})),e})):t.objects.getMemberships({uuid:e.userId,filter:e.filter,limit:e.limit,page:e.page,include:{customFields:e.include.customFields,channelFields:e.include.spaceFields,customChannelFields:e.include.customSpaceFields,totalCount:e.include.totalCount},sort:null!=e.sort?Object.fromEntries(Object.entries(e.sort).map((function(e){var t=s(e,2),n=t[0],r=t[1];return[n.replace("space","channel"),r]}))):null}).then((function(e){var t;return e.data=null===(t=e.data)||void 0===t?void 0:t.map((function(e){return{space:e.channel,custom:e.custom,updated:e.updated,eTag:e.eTag}})),e}))},this.time=h,this.stop=this.destroy,this.encrypt=a.encrypt.bind(a),this.decrypt=a.decrypt.bind(a),this.getAuthKey=f.config.getAuthKey.bind(f.config),this.setAuthKey=f.config.setAuthKey.bind(f.config),this.setCipherKey=f.config.setCipherKey.bind(f.config),this.getUUID=f.config.getUUID.bind(f.config),this.setUUID=f.config.setUUID.bind(f.config),this.getUserId=f.config.getUserId.bind(f.config),this.setUserId=f.config.setUserId.bind(f.config),this.getFilterExpression=f.config.getFilterExpression.bind(f.config),this.setFilterExpression=f.config.setFilterExpression.bind(f.config),this.setHeartbeatInterval=f.config.setHeartbeatInterval.bind(f.config),r.hasModule("proxy")&&(this.setProxy=function(e){f.config.setProxy(e),t.reconnect()})}return e.prototype.getVersion=function(){return this._config.getVersion()},e.prototype._addPnsdkSuffix=function(e,t){this._config._addPnsdkSuffix(e,t)},e.prototype.networkDownDetected=function(){this._listenerManager.announceNetworkDown(),this._config.restore?this.disconnect():this.destroy(!0)},e.prototype.networkUpDetected=function(){this._listenerManager.announceNetworkUp(),this.reconnect()},e.notificationPayload=function(e,t){return new K(e,t)},e.generateUUID=function(){return y()},e.OPERATIONS=U,e.CATEGORIES=M,e}(),Ht=function(){function e(e){var t=this;this._modules={},Object.keys(e).forEach((function(n){t._modules[n]=e[n].bind(t)}))}return e.prototype.init=function(e){this._config=e,Array.isArray(this._config.origin)?this._currentSubDomain=Math.floor(Math.random()*this._config.origin.length):this._currentSubDomain=0,this._coreParams={},this.shiftStandardOrigin()},e.prototype.nextOrigin=function(){var e=this._config.secure?"https://":"http://";if("string"==typeof this._config.origin)return"".concat(e).concat(this._config.origin);this._currentSubDomain+=1,this._currentSubDomain>=this._config.origin.length&&(this._currentSubDomain=0);var t=this._config.origin[this._currentSubDomain];return"".concat(e).concat(t)},e.prototype.hasModule=function(e){return e in this._modules},e.prototype.shiftStandardOrigin=function(){return this._standardOrigin=this.nextOrigin(),this._standardOrigin},e.prototype.getStandardOrigin=function(){return this._standardOrigin},e.prototype.POSTFILE=function(e,t,n){return this._modules.postfile(e,t,n)},e.prototype.GETFILE=function(e,t,n){return this._modules.getfile(e,t,n)},e.prototype.POST=function(e,t,n,r){return this._modules.post(e,t,n,r)},e.prototype.PATCH=function(e,t,n,r){return this._modules.patch(e,t,n,r)},e.prototype.GET=function(e,t,n){return this._modules.get(e,t,n)},e.prototype.DELETE=function(e,t,n){return this._modules.del(e,t,n)},e.prototype._detectErrorCategory=function(e){if("ENOTFOUND"===e.code)return M.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return M.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return M.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return M.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return M.PNNetworkIssuesCategory;if(e.timeout)return M.PNTimeoutCategory;if("ETIMEDOUT"===e.code)return M.PNNetworkIssuesCategory;if(e.response){if(e.response.badRequest)return M.PNBadRequestCategory;if(e.response.forbidden)return M.PNAccessDeniedCategory}return M.PNUnknownCategory},e}();function qt(e){var t=function(e){return e&&"object"==typeof e&&e.constructor===Object};if(!t(e))return e;var n={};return Object.keys(e).forEach((function(r){var o=function(e){return"string"==typeof e||e instanceof String}(r),i=r,a=e[r];Array.isArray(r)||o&&r.indexOf(",")>=0?i=(o?r.split(","):r).reduce((function(e,t){return e+=String.fromCharCode(t)}),""):(function(e){return"number"==typeof e&&isFinite(e)}(r)||o&&!isNaN(r))&&(i=String.fromCharCode(o?parseInt(r,10):10));n[i]=t(a)?qt(a):a})),n}var zt=function(){function e(e,t){this._base64ToBinary=t,this._decode=e}return e.prototype.decodeToken=function(e){var t="";e.length%4==3?t="=":e.length%4==2&&(t="==");var n=e.replace(/-/gi,"+").replace(/_/gi,"/")+t,r=this._decode(this._base64ToBinary(n));if("object"==typeof r)return r},e}(),Vt={exports:{}},Wt={exports:{}};!function(e){function t(e){if(e)return function(e){for(var n in t.prototype)e[n]=t.prototype[n];return e}(e)}e.exports=t,t.prototype.on=t.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},t.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},t.prototype.off=t.prototype.removeListener=t.prototype.removeAllListeners=t.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+e];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var o=0;o<r.length;o++)if((n=r[o])===t||n.fn===t){r.splice(o,1);break}return 0===r.length&&delete this._callbacks["$"+e],this},t.prototype.emit=function(e){this._callbacks=this._callbacks||{};for(var t=new Array(arguments.length-1),n=this._callbacks["$"+e],r=1;r<arguments.length;r++)t[r-1]=arguments[r];if(n){r=0;for(var o=(n=n.slice(0)).length;r<o;++r)n[r].apply(this,t)}return this},t.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks["$"+e]||[]},t.prototype.hasListeners=function(e){return!!this.listeners(e).length}}(Wt);var $t=en;en.default=en,en.stable=on,en.stableStringify=on;var Jt="[...]",Qt="[Circular]",Xt=[],Yt=[];function Zt(){return{depthLimit:Number.MAX_SAFE_INTEGER,edgesLimit:Number.MAX_SAFE_INTEGER}}function en(e,t,n,r){var o;void 0===r&&(r=Zt()),nn(e,"",0,[],void 0,0,r);try{o=0===Yt.length?JSON.stringify(e,t,n):JSON.stringify(e,sn(t),n)}catch(e){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;0!==Xt.length;){var i=Xt.pop();4===i.length?Object.defineProperty(i[0],i[1],i[3]):i[0][i[1]]=i[2]}}return o}function tn(e,t,n,r){var o=Object.getOwnPropertyDescriptor(r,n);void 0!==o.get?o.configurable?(Object.defineProperty(r,n,{value:e}),Xt.push([r,n,t,o])):Yt.push([t,n,e]):(r[n]=e,Xt.push([r,n,t]))}function nn(e,t,n,r,o,i,a){var s;if(i+=1,"object"==typeof e&&null!==e){for(s=0;s<r.length;s++)if(r[s]===e)return void tn(Qt,e,t,o);if(void 0!==a.depthLimit&&i>a.depthLimit)return void tn(Jt,e,t,o);if(void 0!==a.edgesLimit&&n+1>a.edgesLimit)return void tn(Jt,e,t,o);if(r.push(e),Array.isArray(e))for(s=0;s<e.length;s++)nn(e[s],s,s,r,e,i,a);else{var u=Object.keys(e);for(s=0;s<u.length;s++){var c=u[s];nn(e[c],c,s,r,e,i,a)}}r.pop()}}function rn(e,t){return e<t?-1:e>t?1:0}function on(e,t,n,r){void 0===r&&(r=Zt());var o,i=an(e,"",0,[],void 0,0,r)||e;try{o=0===Yt.length?JSON.stringify(i,t,n):JSON.stringify(i,sn(t),n)}catch(e){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;0!==Xt.length;){var a=Xt.pop();4===a.length?Object.defineProperty(a[0],a[1],a[3]):a[0][a[1]]=a[2]}}return o}function an(e,t,n,r,o,i,a){var s;if(i+=1,"object"==typeof e&&null!==e){for(s=0;s<r.length;s++)if(r[s]===e)return void tn(Qt,e,t,o);try{if("function"==typeof e.toJSON)return}catch(e){return}if(void 0!==a.depthLimit&&i>a.depthLimit)return void tn(Jt,e,t,o);if(void 0!==a.edgesLimit&&n+1>a.edgesLimit)return void tn(Jt,e,t,o);if(r.push(e),Array.isArray(e))for(s=0;s<e.length;s++)an(e[s],s,s,r,e,i,a);else{var u={},c=Object.keys(e).sort(rn);for(s=0;s<c.length;s++){var l=c[s];an(e[l],l,s,r,e,i,a),u[l]=e[l]}if(void 0===o)return u;Xt.push([o,t,e]),o[t]=u}r.pop()}}function sn(e){return e=void 0!==e?e:function(e,t){return t},function(t,n){if(Yt.length>0)for(var r=0;r<Yt.length;r++){var o=Yt[r];if(o[1]===t&&o[0]===n){n=o[2],Yt.splice(r,1);break}}return e.call(this,t,n)}}var un,cn="undefined"!=typeof Symbol&&Symbol,ln=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0},pn="Function.prototype.bind called on incompatible ",fn=Array.prototype.slice,hn=Object.prototype.toString,dn="[object Function]",yn=function(e){var t=this;if("function"!=typeof t||hn.call(t)!==dn)throw new TypeError(pn+t);for(var n,r=fn.call(arguments,1),o=function(){if(this instanceof n){var o=t.apply(this,r.concat(fn.call(arguments)));return Object(o)===o?o:this}return t.apply(e,r.concat(fn.call(arguments)))},i=Math.max(0,t.length-r.length),a=[],s=0;s<i;s++)a.push("$"+s);if(n=Function("binder","return function ("+a.join(",")+"){ return binder.apply(this,arguments); }")(o),t.prototype){var u=function(){};u.prototype=t.prototype,n.prototype=new u,u.prototype=null}return n},gn=Function.prototype.bind||yn,bn=gn.call(Function.call,Object.prototype.hasOwnProperty),mn=SyntaxError,vn=Function,_n=TypeError,On=function(e){try{return vn('"use strict"; return ('+e+").constructor;")()}catch(e){}},Sn=Object.getOwnPropertyDescriptor;if(Sn)try{Sn({},"")}catch(e){Sn=null}var Pn=function(){throw new _n},wn=Sn?function(){try{return Pn}catch(e){try{return Sn(arguments,"callee").get}catch(e){return Pn}}}():Pn,kn="function"==typeof cn&&"function"==typeof Symbol&&"symbol"==typeof cn("foo")&&"symbol"==typeof Symbol("bar")&&ln(),Tn=Object.getPrototypeOf||function(e){return e.__proto__},En={},An="undefined"==typeof Uint8Array?un:Tn(Uint8Array),Nn={"%AggregateError%":"undefined"==typeof AggregateError?un:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?un:ArrayBuffer,"%ArrayIteratorPrototype%":kn?Tn([][Symbol.iterator]()):un,"%AsyncFromSyncIteratorPrototype%":un,"%AsyncFunction%":En,"%AsyncGenerator%":En,"%AsyncGeneratorFunction%":En,"%AsyncIteratorPrototype%":En,"%Atomics%":"undefined"==typeof Atomics?un:Atomics,"%BigInt%":"undefined"==typeof BigInt?un:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?un:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?un:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?un:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?un:FinalizationRegistry,"%Function%":vn,"%GeneratorFunction%":En,"%Int8Array%":"undefined"==typeof Int8Array?un:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?un:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?un:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":kn?Tn(Tn([][Symbol.iterator]())):un,"%JSON%":"object"==typeof JSON?JSON:un,"%Map%":"undefined"==typeof Map?un:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&kn?Tn((new Map)[Symbol.iterator]()):un,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?un:Promise,"%Proxy%":"undefined"==typeof Proxy?un:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?un:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?un:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&kn?Tn((new Set)[Symbol.iterator]()):un,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?un:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":kn?Tn(""[Symbol.iterator]()):un,"%Symbol%":kn?Symbol:un,"%SyntaxError%":mn,"%ThrowTypeError%":wn,"%TypedArray%":An,"%TypeError%":_n,"%Uint8Array%":"undefined"==typeof Uint8Array?un:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?un:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?un:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?un:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?un:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?un:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?un:WeakSet},Cn=function e(t){var n;if("%AsyncFunction%"===t)n=On("async function () {}");else if("%GeneratorFunction%"===t)n=On("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=On("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&(n=Tn(o.prototype))}return Nn[t]=n,n},jn={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},Mn=gn,Rn=bn,Un=Mn.call(Function.call,Array.prototype.concat),xn=Mn.call(Function.apply,Array.prototype.splice),In=Mn.call(Function.call,String.prototype.replace),Dn=Mn.call(Function.call,String.prototype.slice),Fn=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,Gn=/\\(\\)?/g,Kn=function(e){var t=Dn(e,0,1),n=Dn(e,-1);if("%"===t&&"%"!==n)throw new mn("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new mn("invalid intrinsic syntax, expected opening `%`");var r=[];return In(e,Fn,(function(e,t,n,o){r[r.length]=n?In(o,Gn,"$1"):t||e})),r},Ln=function(e,t){var n,r=e;if(Rn(jn,r)&&(r="%"+(n=jn[r])[0]+"%"),Rn(Nn,r)){var o=Nn[r];if(o===En&&(o=Cn(r)),void 0===o&&!t)throw new _n("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:o}}throw new mn("intrinsic "+e+" does not exist!")},Bn=function(e,t){if("string"!=typeof e||0===e.length)throw new _n("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new _n('"allowMissing" argument must be a boolean');var n=Kn(e),r=n.length>0?n[0]:"",o=Ln("%"+r+"%",t),i=o.name,a=o.value,s=!1,u=o.alias;u&&(r=u[0],xn(n,Un([0,1],u)));for(var c=1,l=!0;c<n.length;c+=1){var p=n[c],f=Dn(p,0,1),h=Dn(p,-1);if(('"'===f||"'"===f||"`"===f||'"'===h||"'"===h||"`"===h)&&f!==h)throw new mn("property names with quotes must have matching quotes");if("constructor"!==p&&l||(s=!0),Rn(Nn,i="%"+(r+="."+p)+"%"))a=Nn[i];else if(null!=a){if(!(p in a)){if(!t)throw new _n("base intrinsic for "+e+" exists, but the property is not available.");return}if(Sn&&c+1>=n.length){var d=Sn(a,p);a=(l=!!d)&&"get"in d&&!("originalValue"in d.get)?d.get:a[p]}else l=Rn(a,p),a=a[p];l&&!s&&(Nn[i]=a)}}return a},Hn={exports:{}};!function(e){var t=gn,n=Bn,r=n("%Function.prototype.apply%"),o=n("%Function.prototype.call%"),i=n("%Reflect.apply%",!0)||t.call(o,r),a=n("%Object.getOwnPropertyDescriptor%",!0),s=n("%Object.defineProperty%",!0),u=n("%Math.max%");if(s)try{s({},"a",{value:1})}catch(e){s=null}e.exports=function(e){var n=i(t,o,arguments);if(a&&s){var r=a(n,"length");r.configurable&&s(n,"length",{value:1+u(0,e.length-(arguments.length-1))})}return n};var c=function(){return i(t,r,arguments)};s?s(e.exports,"apply",{value:c}):e.exports.apply=c}(Hn);var qn=Bn,zn=Hn.exports,Vn=zn(qn("String.prototype.indexOf")),Wn=l(Object.freeze({__proto__:null,default:{}})),$n="function"==typeof Map&&Map.prototype,Jn=Object.getOwnPropertyDescriptor&&$n?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,Qn=$n&&Jn&&"function"==typeof Jn.get?Jn.get:null,Xn=$n&&Map.prototype.forEach,Yn="function"==typeof Set&&Set.prototype,Zn=Object.getOwnPropertyDescriptor&&Yn?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,er=Yn&&Zn&&"function"==typeof Zn.get?Zn.get:null,tr=Yn&&Set.prototype.forEach,nr="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,rr="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,or="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,ir=Boolean.prototype.valueOf,ar=Object.prototype.toString,sr=Function.prototype.toString,ur=String.prototype.match,cr=String.prototype.slice,lr=String.prototype.replace,pr=String.prototype.toUpperCase,fr=String.prototype.toLowerCase,hr=RegExp.prototype.test,dr=Array.prototype.concat,yr=Array.prototype.join,gr=Array.prototype.slice,br=Math.floor,mr="function"==typeof BigInt?BigInt.prototype.valueOf:null,vr=Object.getOwnPropertySymbols,_r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,Or="function"==typeof Symbol&&"object"==typeof Symbol.iterator,Sr="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Or||"symbol")?Symbol.toStringTag:null,Pr=Object.prototype.propertyIsEnumerable,wr=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function kr(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||hr.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var r=e<0?-br(-e):br(e);if(r!==e){var o=String(r),i=cr.call(t,o.length+1);return lr.call(o,n,"$&_")+"."+lr.call(lr.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return lr.call(t,n,"$&_")}var Tr=Wn,Er=Tr.custom,Ar=Rr(Er)?Er:null;function Nr(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function Cr(e){return lr.call(String(e),/"/g,"&quot;")}function jr(e){return!("[object Array]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}function Mr(e){return!("[object RegExp]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}function Rr(e){if(Or)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!_r)return!1;try{return _r.call(e),!0}catch(e){}return!1}var Ur=Object.prototype.hasOwnProperty||function(e){return e in this};function xr(e,t){return Ur.call(e,t)}function Ir(e){return ar.call(e)}function Dr(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function Fr(e,t){if(e.length>t.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return Fr(cr.call(e,0,t.maxStringLength),t)+r}return Nr(lr.call(lr.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Gr),"single",t)}function Gr(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+pr.call(t.toString(16))}function Kr(e){return"Object("+e+")"}function Lr(e){return e+" { ? }"}function Br(e,t,n,r){return e+" ("+t+") {"+(r?Hr(n,r):yr.call(n,", "))+"}"}function Hr(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+yr.call(e,","+n)+"\n"+t.prev}function qr(e,t){var n=jr(e),r=[];if(n){r.length=e.length;for(var o=0;o<e.length;o++)r[o]=xr(e,o)?t(e[o],e):""}var i,a="function"==typeof vr?vr(e):[];if(Or){i={};for(var s=0;s<a.length;s++)i["$"+a[s]]=a[s]}for(var u in e)xr(e,u)&&(n&&String(Number(u))===u&&u<e.length||Or&&i["$"+u]instanceof Symbol||(hr.call(/[^\w$]/,u)?r.push(t(u,e)+": "+t(e[u],e)):r.push(u+": "+t(e[u],e))));if("function"==typeof vr)for(var c=0;c<a.length;c++)Pr.call(e,a[c])&&r.push("["+t(a[c])+"]: "+t(e[a[c]],e));return r}var zr=Bn,Vr=function(e,t){var n=qn(e,!!t);return"function"==typeof n&&Vn(e,".prototype.")>-1?zn(n):n},Wr=function e(t,n,r,o){var i=n||{};if(xr(i,"quoteStyle")&&"single"!==i.quoteStyle&&"double"!==i.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(xr(i,"maxStringLength")&&("number"==typeof i.maxStringLength?i.maxStringLength<0&&i.maxStringLength!==1/0:null!==i.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var a=!xr(i,"customInspect")||i.customInspect;if("boolean"!=typeof a&&"symbol"!==a)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(xr(i,"indent")&&null!==i.indent&&"\t"!==i.indent&&!(parseInt(i.indent,10)===i.indent&&i.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(xr(i,"numericSeparator")&&"boolean"!=typeof i.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var s=i.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return Fr(t,i);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var u=String(t);return s?kr(t,u):u}if("bigint"==typeof t){var c=String(t)+"n";return s?kr(t,c):c}var l=void 0===i.depth?5:i.depth;if(void 0===r&&(r=0),r>=l&&l>0&&"object"==typeof t)return jr(t)?"[Array]":"[Object]";var p=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=yr.call(Array(e.indent+1)," ")}return{base:n,prev:yr.call(Array(t+1),n)}}(i,r);if(void 0===o)o=[];else if(Dr(o,t)>=0)return"[Circular]";function f(t,n,a){if(n&&(o=gr.call(o)).push(n),a){var s={depth:i.depth};return xr(i,"quoteStyle")&&(s.quoteStyle=i.quoteStyle),e(t,s,r+1,o)}return e(t,i,r+1,o)}if("function"==typeof t&&!Mr(t)){var h=function(e){if(e.name)return e.name;var t=ur.call(sr.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),d=qr(t,f);return"[Function"+(h?": "+h:" (anonymous)")+"]"+(d.length>0?" { "+yr.call(d,", ")+" }":"")}if(Rr(t)){var y=Or?lr.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):_r.call(t);return"object"!=typeof t||Or?y:Kr(y)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var g="<"+fr.call(String(t.nodeName)),b=t.attributes||[],m=0;m<b.length;m++)g+=" "+b[m].name+"="+Nr(Cr(b[m].value),"double",i);return g+=">",t.childNodes&&t.childNodes.length&&(g+="..."),g+="</"+fr.call(String(t.nodeName))+">"}if(jr(t)){if(0===t.length)return"[]";var v=qr(t,f);return p&&!function(e){for(var t=0;t<e.length;t++)if(Dr(e[t],"\n")>=0)return!1;return!0}(v)?"["+Hr(v,p)+"]":"[ "+yr.call(v,", ")+" ]"}if(function(e){return!("[object Error]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}(t)){var _=qr(t,f);return"cause"in Error.prototype||!("cause"in t)||Pr.call(t,"cause")?0===_.length?"["+String(t)+"]":"{ ["+String(t)+"] "+yr.call(_,", ")+" }":"{ ["+String(t)+"] "+yr.call(dr.call("[cause]: "+f(t.cause),_),", ")+" }"}if("object"==typeof t&&a){if(Ar&&"function"==typeof t[Ar]&&Tr)return Tr(t,{depth:l-r});if("symbol"!==a&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!Qn||!e||"object"!=typeof e)return!1;try{Qn.call(e);try{er.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var O=[];return Xn&&Xn.call(t,(function(e,n){O.push(f(n,t,!0)+" => "+f(e,t))})),Br("Map",Qn.call(t),O,p)}if(function(e){if(!er||!e||"object"!=typeof e)return!1;try{er.call(e);try{Qn.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var S=[];return tr&&tr.call(t,(function(e){S.push(f(e,t))})),Br("Set",er.call(t),S,p)}if(function(e){if(!nr||!e||"object"!=typeof e)return!1;try{nr.call(e,nr);try{rr.call(e,rr)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return Lr("WeakMap");if(function(e){if(!rr||!e||"object"!=typeof e)return!1;try{rr.call(e,rr);try{nr.call(e,nr)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return Lr("WeakSet");if(function(e){if(!or||!e||"object"!=typeof e)return!1;try{return or.call(e),!0}catch(e){}return!1}(t))return Lr("WeakRef");if(function(e){return!("[object Number]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}(t))return Kr(f(Number(t)));if(function(e){if(!e||"object"!=typeof e||!mr)return!1;try{return mr.call(e),!0}catch(e){}return!1}(t))return Kr(f(mr.call(t)));if(function(e){return!("[object Boolean]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}(t))return Kr(ir.call(t));if(function(e){return!("[object String]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}(t))return Kr(f(String(t)));if(!function(e){return!("[object Date]"!==Ir(e)||Sr&&"object"==typeof e&&Sr in e)}(t)&&!Mr(t)){var P=qr(t,f),w=wr?wr(t)===Object.prototype:t instanceof Object||t.constructor===Object,k=t instanceof Object?"":"null prototype",T=!w&&Sr&&Object(t)===t&&Sr in t?cr.call(Ir(t),8,-1):k?"Object":"",E=(w||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(T||k?"["+yr.call(dr.call([],T||[],k||[]),": ")+"] ":"");return 0===P.length?E+"{}":p?E+"{"+Hr(P,p)+"}":E+"{ "+yr.call(P,", ")+" }"}return String(t)},$r=zr("%TypeError%"),Jr=zr("%WeakMap%",!0),Qr=zr("%Map%",!0),Xr=Vr("WeakMap.prototype.get",!0),Yr=Vr("WeakMap.prototype.set",!0),Zr=Vr("WeakMap.prototype.has",!0),eo=Vr("Map.prototype.get",!0),to=Vr("Map.prototype.set",!0),no=Vr("Map.prototype.has",!0),ro=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n},oo=String.prototype.replace,io=/%20/g,ao="RFC3986",so={default:ao,formatters:{RFC1738:function(e){return oo.call(e,io,"+")},RFC3986:function(e){return String(e)}},RFC1738:"RFC1738",RFC3986:ao},uo=so,co=Object.prototype.hasOwnProperty,lo=Array.isArray,po=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),fo=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r<e.length;++r)void 0!==e[r]&&(n[r]=e[r]);return n},ho={arrayToObject:fo,assign:function(e,t){return Object.keys(t).reduce((function(e,n){return e[n]=t[n],e}),e)},combine:function(e,t){return[].concat(e,t)},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],n=[],r=0;r<t.length;++r)for(var o=t[r],i=o.obj[o.prop],a=Object.keys(i),s=0;s<a.length;++s){var u=a[s],c=i[u];"object"==typeof c&&null!==c&&-1===n.indexOf(c)&&(t.push({obj:i,prop:u}),n.push(c))}return function(e){for(;e.length>1;){var t=e.pop(),n=t.obj[t.prop];if(lo(n)){for(var r=[],o=0;o<n.length;++o)void 0!==n[o]&&r.push(n[o]);t.obj[t.prop]=r}}}(t),e},decode:function(e,t,n){var r=e.replace(/\+/g," ");if("iso-8859-1"===n)return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch(e){return r}},encode:function(e,t,n,r,o){if(0===e.length)return e;var i=e;if("symbol"==typeof e?i=Symbol.prototype.toString.call(e):"string"!=typeof e&&(i=String(e)),"iso-8859-1"===n)return escape(i).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));for(var a="",s=0;s<i.length;++s){var u=i.charCodeAt(s);45===u||46===u||95===u||126===u||u>=48&&u<=57||u>=65&&u<=90||u>=97&&u<=122||o===uo.RFC1738&&(40===u||41===u)?a+=i.charAt(s):u<128?a+=po[u]:u<2048?a+=po[192|u>>6]+po[128|63&u]:u<55296||u>=57344?a+=po[224|u>>12]+po[128|u>>6&63]+po[128|63&u]:(s+=1,u=65536+((1023&u)<<10|1023&i.charCodeAt(s)),a+=po[240|u>>18]+po[128|u>>12&63]+po[128|u>>6&63]+po[128|63&u])}return a},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(lo(e)){for(var n=[],r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)},merge:function e(t,n,r){if(!n)return t;if("object"!=typeof n){if(lo(t))t.push(n);else{if(!t||"object"!=typeof t)return[t,n];(r&&(r.plainObjects||r.allowPrototypes)||!co.call(Object.prototype,n))&&(t[n]=!0)}return t}if(!t||"object"!=typeof t)return[t].concat(n);var o=t;return lo(t)&&!lo(n)&&(o=fo(t,r)),lo(t)&&lo(n)?(n.forEach((function(n,o){if(co.call(t,o)){var i=t[o];i&&"object"==typeof i&&n&&"object"==typeof n?t[o]=e(i,n,r):t.push(n)}else t[o]=n})),t):Object.keys(n).reduce((function(t,o){var i=n[o];return co.call(t,o)?t[o]=e(t[o],i,r):t[o]=i,t}),o)}},yo=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new $r("Side channel does not contain "+Wr(e))},get:function(r){if(Jr&&r&&("object"==typeof r||"function"==typeof r)){if(e)return Xr(e,r)}else if(Qr){if(t)return eo(t,r)}else if(n)return function(e,t){var n=ro(e,t);return n&&n.value}(n,r)},has:function(r){if(Jr&&r&&("object"==typeof r||"function"==typeof r)){if(e)return Zr(e,r)}else if(Qr){if(t)return no(t,r)}else if(n)return function(e,t){return!!ro(e,t)}(n,r);return!1},set:function(r,o){Jr&&r&&("object"==typeof r||"function"==typeof r)?(e||(e=new Jr),Yr(e,r,o)):Qr?(t||(t=new Qr),to(t,r,o)):(n||(n={key:{},next:null}),function(e,t,n){var r=ro(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,o))}};return r},go=ho,bo=so,mo=Object.prototype.hasOwnProperty,vo={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},_o=Array.isArray,Oo=Array.prototype.push,So=function(e,t){Oo.apply(e,_o(t)?t:[t])},Po=Date.prototype.toISOString,wo=bo.default,ko={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:go.encode,encodeValuesOnly:!1,format:wo,formatter:bo.formatters[wo],indices:!1,serializeDate:function(e){return Po.call(e)},skipNulls:!1,strictNullHandling:!1},To={},Eo=function e(t,n,r,o,i,a,s,u,c,l,p,f,h,d,y,g){for(var b,m=t,v=g,_=0,O=!1;void 0!==(v=v.get(To))&&!O;){var S=v.get(t);if(_+=1,void 0!==S){if(S===_)throw new RangeError("Cyclic object value");O=!0}void 0===v.get(To)&&(_=0)}if("function"==typeof u?m=u(n,m):m instanceof Date?m=p(m):"comma"===r&&_o(m)&&(m=go.maybeMap(m,(function(e){return e instanceof Date?p(e):e}))),null===m){if(i)return s&&!d?s(n,ko.encoder,y,"key",f):n;m=""}if("string"==typeof(b=m)||"number"==typeof b||"boolean"==typeof b||"symbol"==typeof b||"bigint"==typeof b||go.isBuffer(m))return s?[h(d?n:s(n,ko.encoder,y,"key",f))+"="+h(s(m,ko.encoder,y,"value",f))]:[h(n)+"="+h(String(m))];var P,w=[];if(void 0===m)return w;if("comma"===r&&_o(m))d&&s&&(m=go.maybeMap(m,s)),P=[{value:m.length>0?m.join(",")||null:void 0}];else if(_o(u))P=u;else{var k=Object.keys(m);P=c?k.sort(c):k}for(var T=o&&_o(m)&&1===m.length?n+"[]":n,E=0;E<P.length;++E){var A=P[E],N="object"==typeof A&&void 0!==A.value?A.value:m[A];if(!a||null!==N){var C=_o(m)?"function"==typeof r?r(T,A):T:T+(l?"."+A:"["+A+"]");g.set(t,_);var j=yo();j.set(To,g),So(w,e(N,C,r,o,i,a,"comma"===r&&d&&_o(m)?null:s,u,c,l,p,f,h,d,y,j))}}return w},Ao=ho,No=Object.prototype.hasOwnProperty,Co=Array.isArray,jo={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:Ao.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},Mo=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},Ro=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},Uo=function(e,t,n,r){if(e){var o=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,a=n.depth>0&&/(\[[^[\]]*])/.exec(o),s=a?o.slice(0,a.index):o,u=[];if(s){if(!n.plainObjects&&No.call(Object.prototype,s)&&!n.allowPrototypes)return;u.push(s)}for(var c=0;n.depth>0&&null!==(a=i.exec(o))&&c<n.depth;){if(c+=1,!n.plainObjects&&No.call(Object.prototype,a[1].slice(1,-1))&&!n.allowPrototypes)return;u.push(a[1])}return a&&u.push("["+o.slice(a.index)+"]"),function(e,t,n,r){for(var o=r?t:Ro(t,n),i=e.length-1;i>=0;--i){var a,s=e[i];if("[]"===s&&n.parseArrays)a=[].concat(o);else{a=n.plainObjects?Object.create(null):{};var u="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,c=parseInt(u,10);n.parseArrays||""!==u?!isNaN(c)&&s!==u&&String(c)===u&&c>=0&&n.parseArrays&&c<=n.arrayLimit?(a=[])[c]=o:"__proto__"!==u&&(a[u]=o):a={0:o}}o=a}return o}(u,t,n,r)}},xo=function(e,t){var n,r=e,o=function(e){if(!e)return ko;if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");var t=e.charset||ko.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var n=bo.default;if(void 0!==e.format){if(!mo.call(bo.formatters,e.format))throw new TypeError("Unknown format option provided.");n=e.format}var r=bo.formatters[n],o=ko.filter;return("function"==typeof e.filter||_o(e.filter))&&(o=e.filter),{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:ko.addQueryPrefix,allowDots:void 0===e.allowDots?ko.allowDots:!!e.allowDots,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:ko.charsetSentinel,delimiter:void 0===e.delimiter?ko.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:ko.encode,encoder:"function"==typeof e.encoder?e.encoder:ko.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:ko.encodeValuesOnly,filter:o,format:n,formatter:r,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:ko.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:ko.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:ko.strictNullHandling}}(t);"function"==typeof o.filter?r=(0,o.filter)("",r):_o(o.filter)&&(n=o.filter);var i,a=[];if("object"!=typeof r||null===r)return"";i=t&&t.arrayFormat in vo?t.arrayFormat:t&&"indices"in t?t.indices?"indices":"repeat":"indices";var s=vo[i];if(t&&"commaRoundTrip"in t&&"boolean"!=typeof t.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var u="comma"===s&&t&&t.commaRoundTrip;n||(n=Object.keys(r)),o.sort&&n.sort(o.sort);for(var c=yo(),l=0;l<n.length;++l){var p=n[l];o.skipNulls&&null===r[p]||So(a,Eo(r[p],p,s,u,o.strictNullHandling,o.skipNulls,o.encode?o.encoder:null,o.filter,o.sort,o.allowDots,o.serializeDate,o.format,o.formatter,o.encodeValuesOnly,o.charset,c))}var f=a.join(o.delimiter),h=!0===o.addQueryPrefix?"?":"";return o.charsetSentinel&&("iso-8859-1"===o.charset?h+="utf8=%26%2310003%3B&":h+="utf8=%E2%9C%93&"),f.length>0?h+f:""},Io={formats:so,parse:function(e,t){var n=function(e){if(!e)return jo;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?jo.charset:e.charset;return{allowDots:void 0===e.allowDots?jo.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:jo.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:jo.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:jo.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:jo.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:jo.comma,decoder:"function"==typeof e.decoder?e.decoder:jo.decoder,delimiter:"string"==typeof e.delimiter||Ao.isRegExp(e.delimiter)?e.delimiter:jo.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:jo.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:jo.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:jo.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:jo.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:jo.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var r="string"==typeof e?function(e,t){var n,r={__proto__:null},o=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,i=t.parameterLimit===1/0?void 0:t.parameterLimit,a=o.split(t.delimiter,i),s=-1,u=t.charset;if(t.charsetSentinel)for(n=0;n<a.length;++n)0===a[n].indexOf("utf8=")&&("utf8=%E2%9C%93"===a[n]?u="utf-8":"utf8=%26%2310003%3B"===a[n]&&(u="iso-8859-1"),s=n,n=a.length);for(n=0;n<a.length;++n)if(n!==s){var c,l,p=a[n],f=p.indexOf("]="),h=-1===f?p.indexOf("="):f+1;-1===h?(c=t.decoder(p,jo.decoder,u,"key"),l=t.strictNullHandling?null:""):(c=t.decoder(p.slice(0,h),jo.decoder,u,"key"),l=Ao.maybeMap(Ro(p.slice(h+1),t),(function(e){return t.decoder(e,jo.decoder,u,"value")}))),l&&t.interpretNumericEntities&&"iso-8859-1"===u&&(l=Mo(l)),p.indexOf("[]=")>-1&&(l=Co(l)?[l]:l),No.call(r,c)?r[c]=Ao.combine(r[c],l):r[c]=l}return r}(e,n):e,o=n.plainObjects?Object.create(null):{},i=Object.keys(r),a=0;a<i.length;++a){var s=i[a],u=Uo(s,r[s],n,"string"==typeof e);o=Ao.merge(o,u,n)}return!0===n.allowSparse?o:Ao.compact(o)},stringify:xo},Do={};!function(e){function t(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return n(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return n(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}e.type=e=>e.split(/ *; */).shift(),e.params=e=>{const n={};var r,o=t(e.split(/ *; */));try{for(o.s();!(r=o.n()).done;){const e=r.value.split(/ *= */),t=e.shift(),o=e.shift();t&&o&&(n[t]=o)}}catch(e){o.e(e)}finally{o.f()}return n},e.parseLinks=e=>{const n={};var r,o=t(e.split(/ *, */));try{for(o.s();!(r=o.n()).done;){const e=r.value.split(/ *; */),t=e[0].slice(1,-1);n[e[1].split(/ *= */)[1].slice(1,-1)]=t}}catch(e){o.e(e)}finally{o.f()}return n},e.cleanHeader=(e,t)=>(delete e["content-type"],delete e["content-length"],delete e["transfer-encoding"],delete e.host,t&&(delete e.authorization,delete e.cookie),e),e.isObject=e=>null!==e&&"object"==typeof e,e.hasOwn=Object.hasOwn||function(e,t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");return Object.prototype.hasOwnProperty.call(new Object(e),t)},e.mixin=(t,n)=>{for(const r in n)e.hasOwn(n,r)&&(t[r]=n[r])}}(Do);const Fo=Wn,Go=Do.isObject,Ko=Do.hasOwn;var Lo=Bo;function Bo(){}Bo.prototype.clearTimeout=function(){return clearTimeout(this._timer),clearTimeout(this._responseTimeoutTimer),clearTimeout(this._uploadTimeoutTimer),delete this._timer,delete this._responseTimeoutTimer,delete this._uploadTimeoutTimer,this},Bo.prototype.parse=function(e){return this._parser=e,this},Bo.prototype.responseType=function(e){return this._responseType=e,this},Bo.prototype.serialize=function(e){return this._serializer=e,this},Bo.prototype.timeout=function(e){if(!e||"object"!=typeof e)return this._timeout=e,this._responseTimeout=0,this._uploadTimeout=0,this;for(const t in e)if(Ko(e,t))switch(t){case"deadline":this._timeout=e.deadline;break;case"response":this._responseTimeout=e.response;break;case"upload":this._uploadTimeout=e.upload;break;default:console.warn("Unknown timeout option",t)}return this},Bo.prototype.retry=function(e,t){return 0!==arguments.length&&!0!==e||(e=1),e<=0&&(e=0),this._maxRetries=e,this._retries=0,this._retryCallback=t,this};const Ho=new Set(["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"]),qo=new Set([408,413,429,500,502,503,504,521,522,524]);Bo.prototype._shouldRetry=function(e,t){if(!this._maxRetries||this._retries++>=this._maxRetries)return!1;if(this._retryCallback)try{const n=this._retryCallback(e,t);if(!0===n)return!0;if(!1===n)return!1}catch(e){console.error(e)}if(t&&t.status&&qo.has(t.status))return!0;if(e){if(e.code&&Ho.has(e.code))return!0;if(e.timeout&&"ECONNABORTED"===e.code)return!0;if(e.crossDomain)return!0}return!1},Bo.prototype._retry=function(){return this.clearTimeout(),this.req&&(this.req=null,this.req=this.request()),this._aborted=!1,this.timedout=!1,this.timedoutError=null,this._end()},Bo.prototype.then=function(e,t){if(!this._fullfilledPromise){const e=this;this._endCalled&&console.warn("Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises"),this._fullfilledPromise=new Promise(((t,n)=>{e.on("abort",(()=>{if(this._maxRetries&&this._maxRetries>this._retries)return;if(this.timedout&&this.timedoutError)return void n(this.timedoutError);const e=new Error("Aborted");e.code="ABORTED",e.status=this.status,e.method=this.method,e.url=this.url,n(e)})),e.end(((e,r)=>{e?n(e):t(r)}))}))}return this._fullfilledPromise.then(e,t)},Bo.prototype.catch=function(e){return this.then(void 0,e)},Bo.prototype.use=function(e){return e(this),this},Bo.prototype.ok=function(e){if("function"!=typeof e)throw new Error("Callback required");return this._okCallback=e,this},Bo.prototype._isResponseOK=function(e){return!!e&&(this._okCallback?this._okCallback(e):e.status>=200&&e.status<300)},Bo.prototype.get=function(e){return this._header[e.toLowerCase()]},Bo.prototype.getHeader=Bo.prototype.get,Bo.prototype.set=function(e,t){if(Go(e)){for(const t in e)Ko(e,t)&&this.set(t,e[t]);return this}return this._header[e.toLowerCase()]=t,this.header[e]=t,this},Bo.prototype.unset=function(e){return delete this._header[e.toLowerCase()],delete this.header[e],this},Bo.prototype.field=function(e,t,n){if(null==e)throw new Error(".field(name, val) name can not be empty");if(this._data)throw new Error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()");if(Go(e)){for(const t in e)Ko(e,t)&&this.field(t,e[t]);return this}if(Array.isArray(t)){for(const n in t)Ko(t,n)&&this.field(e,t[n]);return this}if(null==t)throw new Error(".field(name, val) val can not be empty");return"boolean"==typeof t&&(t=String(t)),n?this._getFormData().append(e,t,n):this._getFormData().append(e,t),this},Bo.prototype.abort=function(){if(this._aborted)return this;if(this._aborted=!0,this.xhr&&this.xhr.abort(),this.req){if(Fo.gte(process.version,"v13.0.0")&&Fo.lt(process.version,"v14.0.0"))throw new Error("Superagent does not work in v13 properly with abort() due to Node.js core changes");this.req.abort()}return this.clearTimeout(),this.emit("abort"),this},Bo.prototype._auth=function(e,t,n,r){switch(n.type){case"basic":this.set("Authorization",`Basic ${r(`${e}:${t}`)}`);break;case"auto":this.username=e,this.password=t;break;case"bearer":this.set("Authorization",`Bearer ${e}`)}return this},Bo.prototype.withCredentials=function(e){return void 0===e&&(e=!0),this._withCredentials=e,this},Bo.prototype.redirects=function(e){return this._maxRedirects=e,this},Bo.prototype.maxResponseSize=function(e){if("number"!=typeof e)throw new TypeError("Invalid argument");return this._maxResponseSize=e,this},Bo.prototype.toJSON=function(){return{method:this.method,url:this.url,data:this._data,headers:this._header}},Bo.prototype.send=function(e){const t=Go(e);let n=this._header["content-type"];if(this._formData)throw new Error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()");if(t&&!this._data)Array.isArray(e)?this._data=[]:this._isHost(e)||(this._data={});else if(e&&this._data&&this._isHost(this._data))throw new Error("Can't merge these send calls");if(t&&Go(this._data))for(const t in e){if("bigint"==typeof e[t]&&!e[t].toJSON)throw new Error("Cannot serialize BigInt value to json");Ko(e,t)&&(this._data[t]=e[t])}else{if("bigint"==typeof e)throw new Error("Cannot send value of type BigInt");"string"==typeof e?(n||this.type("form"),n=this._header["content-type"],n&&(n=n.toLowerCase().trim()),this._data="application/x-www-form-urlencoded"===n?this._data?`${this._data}&${e}`:e:(this._data||"")+e):this._data=e}return!t||this._isHost(e)||n||this.type("json"),this},Bo.prototype.sortQuery=function(e){return this._sort=void 0===e||e,this},Bo.prototype._finalizeQueryString=function(){const e=this._query.join("&");if(e&&(this.url+=(this.url.includes("?")?"&":"?")+e),this._query.length=0,this._sort){const e=this.url.indexOf("?");if(e>=0){const t=this.url.slice(e+1).split("&");"function"==typeof this._sort?t.sort(this._sort):t.sort(),this.url=this.url.slice(0,e)+"?"+t.join("&")}}},Bo.prototype._appendQueryString=()=>{console.warn("Unsupported")},Bo.prototype._timeoutError=function(e,t,n){if(this._aborted)return;const r=new Error(`${e+t}ms exceeded`);r.timeout=t,r.code="ECONNABORTED",r.errno=n,this.timedout=!0,this.timedoutError=r,this.abort(),this.callback(r)},Bo.prototype._setTimeouts=function(){const e=this;this._timeout&&!this._timer&&(this._timer=setTimeout((()=>{e._timeoutError("Timeout of ",e._timeout,"ETIME")}),this._timeout)),this._responseTimeout&&!this._responseTimeoutTimer&&(this._responseTimeoutTimer=setTimeout((()=>{e._timeoutError("Response timeout of ",e._responseTimeout,"ETIMEDOUT")}),this._responseTimeout))};const zo=Do;var Vo=Wo;function Wo(){}function $o(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return Jo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Jo(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function Jo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Qo(){this._defaults=[]}Wo.prototype.get=function(e){return this.header[e.toLowerCase()]},Wo.prototype._setHeaderProperties=function(e){const t=e["content-type"]||"";this.type=zo.type(t);const n=zo.params(t);for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&(this[e]=n[e]);this.links={};try{e.link&&(this.links=zo.parseLinks(e.link))}catch(e){}},Wo.prototype._setStatusProperties=function(e){const t=Math.trunc(e/100);this.statusCode=e,this.status=this.statusCode,this.statusType=t,this.info=1===t,this.ok=2===t,this.redirect=3===t,this.clientError=4===t,this.serverError=5===t,this.error=(4===t||5===t)&&this.toError(),this.created=201===e,this.accepted=202===e,this.noContent=204===e,this.badRequest=400===e,this.unauthorized=401===e,this.notAcceptable=406===e,this.forbidden=403===e,this.notFound=404===e,this.unprocessableEntity=422===e};for(var Xo=0,Yo=["use","on","once","set","query","type","accept","auth","withCredentials","sortQuery","retry","ok","redirects","timeout","buffer","serialize","parse","ca","key","pfx","cert","disableTLSCerts"];Xo<Yo.length;Xo++){const e=Yo[Xo];Qo.prototype[e]=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return this._defaults.push({fn:e,args:n}),this}}Qo.prototype._setDefaults=function(e){var t,n=$o(this._defaults);try{for(n.s();!(t=n.n()).done;){const n=t.value;e[n.fn](...n.args)}}catch(e){n.e(e)}finally{n.f()}};var Zo=Qo;!function(e,t){function n(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return r(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==n.return||n.return()}finally{if(u)throw a}}}}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}let o;"undefined"!=typeof window?o=window:"undefined"==typeof self?(console.warn("Using browser-only version of superagent in non-browser environment"),o=void 0):o=self;const i=Wt.exports,a=$t,s=Io,u=Lo,c=Do.isObject,l=Do.mixin,p=Do.hasOwn,f=Vo,h=Zo;function d(){}e.exports=function(e,n){return"function"==typeof n?new t.Request("GET",e).end(n):1===arguments.length?new t.Request("GET",e):new t.Request(e,n)};const y=t=e.exports;t.Request=S,y.getXHR=()=>{if(o.XMLHttpRequest)return new o.XMLHttpRequest;throw new Error("Browser-only version of superagent could not find XHR")};const g="".trim?e=>e.trim():e=>e.replace(/(^\s*|\s*$)/g,"");function b(e){if(!c(e))return e;const t=[];for(const n in e)p(e,n)&&m(t,n,e[n]);return t.join("&")}function m(e,t,r){if(void 0!==r)if(null!==r)if(Array.isArray(r)){var o,i=n(r);try{for(i.s();!(o=i.n()).done;){m(e,t,o.value)}}catch(e){i.e(e)}finally{i.f()}}else if(c(r))for(const n in r)p(r,n)&&m(e,`${t}[${n}]`,r[n]);else e.push(encodeURI(t)+"="+encodeURIComponent(r));else e.push(encodeURI(t))}function v(e){const t={},n=e.split("&");let r,o;for(let e=0,i=n.length;e<i;++e)r=n[e],o=r.indexOf("="),-1===o?t[decodeURIComponent(r)]="":t[decodeURIComponent(r.slice(0,o))]=decodeURIComponent(r.slice(o+1));return t}function _(e){return/[/+]json($|[^-\w])/i.test(e)}function O(e){this.req=e,this.xhr=this.req.xhr,this.text="HEAD"!==this.req.method&&(""===this.xhr.responseType||"text"===this.xhr.responseType)||void 0===this.xhr.responseType?this.xhr.responseText:null,this.statusText=this.req.xhr.statusText;let t=this.xhr.status;1223===t&&(t=204),this._setStatusProperties(t),this.headers=function(e){const t=e.split(/\r?\n/),n={};let r,o,i,a;for(let e=0,s=t.length;e<s;++e)o=t[e],r=o.indexOf(":"),-1!==r&&(i=o.slice(0,r).toLowerCase(),a=g(o.slice(r+1)),n[i]=a);return n}(this.xhr.getAllResponseHeaders()),this.header=this.headers,this.header["content-type"]=this.xhr.getResponseHeader("content-type"),this._setHeaderProperties(this.header),null===this.text&&e._responseType?this.body=this.xhr.response:this.body="HEAD"===this.req.method?null:this._parseBody(this.text?this.text:this.xhr.response)}function S(e,t){const n=this;this._query=this._query||[],this.method=e,this.url=t,this.header={},this._header={},this.on("end",(()=>{let e,t=null,r=null;try{r=new O(n)}catch(e){return t=new Error("Parser is unable to parse the response"),t.parse=!0,t.original=e,n.xhr?(t.rawResponse=void 0===n.xhr.responseType?n.xhr.responseText:n.xhr.response,t.status=n.xhr.status?n.xhr.status:null,t.statusCode=t.status):(t.rawResponse=null,t.status=null),n.callback(t)}n.emit("response",r);try{n._isResponseOK(r)||(e=new Error(r.statusText||r.text||"Unsuccessful HTTP response"))}catch(t){e=t}e?(e.original=t,e.response=r,e.status=e.status||r.status,n.callback(e,r)):n.callback(null,r)}))}y.serializeObject=b,y.parseString=v,y.types={html:"text/html",json:"application/json",xml:"text/xml",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},y.serialize={"application/x-www-form-urlencoded":s.stringify,"application/json":a},y.parse={"application/x-www-form-urlencoded":v,"application/json":JSON.parse},l(O.prototype,f.prototype),O.prototype._parseBody=function(e){let t=y.parse[this.type];return this.req._parser?this.req._parser(this,e):(!t&&_(this.type)&&(t=y.parse["application/json"]),t&&e&&(e.length>0||e instanceof Object)?t(e):null)},O.prototype.toError=function(){const e=this.req,t=e.method,n=e.url,r=`cannot ${t} ${n} (${this.status})`,o=new Error(r);return o.status=this.status,o.method=t,o.url=n,o},y.Response=O,i(S.prototype),l(S.prototype,u.prototype),S.prototype.type=function(e){return this.set("Content-Type",y.types[e]||e),this},S.prototype.accept=function(e){return this.set("Accept",y.types[e]||e),this},S.prototype.auth=function(e,t,n){1===arguments.length&&(t=""),"object"==typeof t&&null!==t&&(n=t,t=""),n||(n={type:"function"==typeof btoa?"basic":"auto"});const r=n.encoder?n.encoder:e=>{if("function"==typeof btoa)return btoa(e);throw new Error("Cannot use basic auth, btoa is not a function")};return this._auth(e,t,n,r)},S.prototype.query=function(e){return"string"!=typeof e&&(e=b(e)),e&&this._query.push(e),this},S.prototype.attach=function(e,t,n){if(t){if(this._data)throw new Error("superagent can't mix .send() and .attach()");this._getFormData().append(e,t,n||t.name)}return this},S.prototype._getFormData=function(){return this._formData||(this._formData=new o.FormData),this._formData},S.prototype.callback=function(e,t){if(this._shouldRetry(e,t))return this._retry();const n=this._callback;this.clearTimeout(),e&&(this._maxRetries&&(e.retries=this._retries-1),this.emit("error",e)),n(e,t)},S.prototype.crossDomainError=function(){const e=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");e.crossDomain=!0,e.status=this.status,e.method=this.method,e.url=this.url,this.callback(e)},S.prototype.agent=function(){return console.warn("This is not supported in browser version of superagent"),this},S.prototype.ca=S.prototype.agent,S.prototype.buffer=S.prototype.ca,S.prototype.write=()=>{throw new Error("Streaming is not supported in browser version of superagent")},S.prototype.pipe=S.prototype.write,S.prototype._isHost=function(e){return e&&"object"==typeof e&&!Array.isArray(e)&&"[object Object]"!==Object.prototype.toString.call(e)},S.prototype.end=function(e){this._endCalled&&console.warn("Warning: .end() was called twice. This is not supported in superagent"),this._endCalled=!0,this._callback=e||d,this._finalizeQueryString(),this._end()},S.prototype._setUploadTimeout=function(){const e=this;this._uploadTimeout&&!this._uploadTimeoutTimer&&(this._uploadTimeoutTimer=setTimeout((()=>{e._timeoutError("Upload timeout of ",e._uploadTimeout,"ETIMEDOUT")}),this._uploadTimeout))},S.prototype._end=function(){if(this._aborted)return this.callback(new Error("The request has been aborted even before .end() was called"));const e=this;this.xhr=y.getXHR();const t=this.xhr;let n=this._formData||this._data;this._setTimeouts(),t.addEventListener("readystatechange",(()=>{const n=t.readyState;if(n>=2&&e._responseTimeoutTimer&&clearTimeout(e._responseTimeoutTimer),4!==n)return;let r;try{r=t.status}catch(e){r=0}if(!r){if(e.timedout||e._aborted)return;return e.crossDomainError()}e.emit("end")}));const r=(t,n)=>{n.total>0&&(n.percent=n.loaded/n.total*100,100===n.percent&&clearTimeout(e._uploadTimeoutTimer)),n.direction=t,e.emit("progress",n)};if(this.hasListeners("progress"))try{t.addEventListener("progress",r.bind(null,"download")),t.upload&&t.upload.addEventListener("progress",r.bind(null,"upload"))}catch(e){}t.upload&&this._setUploadTimeout();try{this.username&&this.password?t.open(this.method,this.url,!0,this.username,this.password):t.open(this.method,this.url,!0)}catch(e){return this.callback(e)}if(this._withCredentials&&(t.withCredentials=!0),!this._formData&&"GET"!==this.method&&"HEAD"!==this.method&&"string"!=typeof n&&!this._isHost(n)){const e=this._header["content-type"];let t=this._serializer||y.serialize[e?e.split(";")[0]:""];!t&&_(e)&&(t=y.serialize["application/json"]),t&&(n=t(n))}for(const e in this.header)null!==this.header[e]&&p(this.header,e)&&t.setRequestHeader(e,this.header[e]);this._responseType&&(t.responseType=this._responseType),this.emit("request",this),t.send(void 0===n?null:n)},y.agent=()=>new h;for(var P=0,w=["GET","POST","OPTIONS","PATCH","PUT","DELETE"];P<w.length;P++){const e=w[P];h.prototype[e.toLowerCase()]=function(t,n){const r=new y.Request(e,t);return this._setDefaults(r),n&&r.end(n),r}}function k(e,t,n){const r=y("DELETE",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}h.prototype.del=h.prototype.delete,y.get=(e,t,n)=>{const r=y("GET",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},y.head=(e,t,n)=>{const r=y("HEAD",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},y.options=(e,t,n)=>{const r=y("OPTIONS",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},y.del=k,y.delete=k,y.patch=(e,t,n)=>{const r=y("PATCH",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},y.post=(e,t,n)=>{const r=y("POST",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},y.put=(e,t,n)=>{const r=y("PUT",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}}(Vt,Vt.exports);var ei=Vt.exports;function ti(e){var t=(new Date).getTime(),n=(new Date).toISOString(),r=console&&console.log?console:window&&window.console&&window.console.log?window.console:console;r.log("<<<<<"),r.log("[".concat(n,"]"),"\n",e.url,"\n",e.qs),r.log("-----"),e.on("response",(function(n){var o=(new Date).getTime()-t,i=(new Date).toISOString();r.log(">>>>>>"),r.log("[".concat(i," / ").concat(o,"]"),"\n",e.url,"\n",e.qs,"\n",n.text),r.log("-----")}))}function ni(e,t,n){var r=this;this._config.logVerbosity&&(e=e.use(ti)),this._config.proxy&&this._modules.proxy&&(e=this._modules.proxy.call(this,e)),this._config.keepAlive&&this._modules.keepAlive&&(e=this._modules.keepAlive(e));var o=e;if(t.abortSignal)var i=t.abortSignal.subscribe((function(){o.abort(),i()}));return!0===t.forceBuffered?o="undefined"==typeof Blob?o.buffer().responseType("arraybuffer"):o.responseType("arraybuffer"):!1===t.forceBuffered&&(o=o.buffer(!1)),(o=o.timeout(t.timeout)).on("abort",(function(){return n({category:M.PNUnknownCategory,error:!0,operation:t.operation,errorData:new Error("Aborted")},null)})),o.end((function(e,o){var i,a={};if(a.error=null!==e,a.operation=t.operation,o&&o.status&&(a.statusCode=o.status),e){if(e.response&&e.response.text&&!r._config.logVerbosity)try{a.errorData=JSON.parse(e.response.text)}catch(t){a.errorData=e}else a.errorData=e;return a.category=r._detectErrorCategory(e),n(a,null)}if(t.ignoreBody)i={headers:o.headers,redirects:o.redirects,response:o};else try{i=JSON.parse(o.text)}catch(e){return a.errorData=o,a.error=!0,n(a,null)}return i.error&&1===i.error&&i.status&&i.message&&i.service?(a.errorData=i,a.statusCode=i.status,a.error=!0,a.category=r._detectErrorCategory(a),n(a,null)):(i.error&&i.error.message&&(a.errorData=i.error),n(a,i))})),o}function ri(e,t,n){return o(this,void 0,void 0,(function(){var r;return i(this,(function(o){switch(o.label){case 0:return r=ei.post(e),t.forEach((function(e){var t=e.key,n=e.value;r=r.field(t,n)})),r.attach("file",n,{contentType:"application/octet-stream"}),[4,r];case 1:return[2,o.sent()]}}))}))}function oi(e,t,n){var r=ei.get(this.getStandardOrigin()+t.url).set(t.headers).query(e);return ni.call(this,r,t,n)}function ii(e,t,n){var r=ei.get(this.getStandardOrigin()+t.url).set(t.headers).query(e);return ni.call(this,r,t,n)}function ai(e,t,n,r){var o=ei.post(this.getStandardOrigin()+n.url).query(e).set(n.headers).send(t);return ni.call(this,o,n,r)}function si(e,t,n,r){var o=ei.patch(this.getStandardOrigin()+n.url).query(e).set(n.headers).send(t);return ni.call(this,o,n,r)}function ui(e,t,n){var r=ei.delete(this.getStandardOrigin()+t.url).set(t.headers).query(e);return ni.call(this,r,t,n)}function ci(e,t){var n=new Uint8Array(e.byteLength+t.byteLength);return n.set(new Uint8Array(e),0),n.set(new Uint8Array(t),e.byteLength),n.buffer}var li,pi=function(){function e(){}return Object.defineProperty(e.prototype,"algo",{get:function(){return"aes-256-cbc"},enumerable:!1,configurable:!0}),e.prototype.encrypt=function(e,t){return o(this,void 0,void 0,(function(){var n;return i(this,(function(r){switch(r.label){case 0:return[4,this.getKey(e)];case 1:if(n=r.sent(),t instanceof ArrayBuffer)return[2,this.encryptArrayBuffer(n,t)];if("string"==typeof t)return[2,this.encryptString(n,t)];throw new Error("Cannot encrypt this file. In browsers file encryption supports only string or ArrayBuffer")}}))}))},e.prototype.decrypt=function(e,t){return o(this,void 0,void 0,(function(){var n;return i(this,(function(r){switch(r.label){case 0:return[4,this.getKey(e)];case 1:if(n=r.sent(),t instanceof ArrayBuffer)return[2,this.decryptArrayBuffer(n,t)];if("string"==typeof t)return[2,this.decryptString(n,t)];throw new Error("Cannot decrypt this file. In browsers file decryption supports only string or ArrayBuffer")}}))}))},e.prototype.encryptFile=function(e,t,n){return o(this,void 0,void 0,(function(){var r,o,a;return i(this,(function(i){switch(i.label){case 0:return[4,this.getKey(e)];case 1:return r=i.sent(),[4,t.toArrayBuffer()];case 2:return o=i.sent(),[4,this.encryptArrayBuffer(r,o)];case 3:return a=i.sent(),[2,n.create({name:t.name,mimeType:"application/octet-stream",data:a})]}}))}))},e.prototype.decryptFile=function(e,t,n){return o(this,void 0,void 0,(function(){var r,o,a;return i(this,(function(i){switch(i.label){case 0:return[4,this.getKey(e)];case 1:return r=i.sent(),[4,t.toArrayBuffer()];case 2:return o=i.sent(),[4,this.decryptArrayBuffer(r,o)];case 3:return a=i.sent(),[2,n.create({name:t.name,data:a})]}}))}))},e.prototype.getKey=function(e){return o(this,void 0,void 0,(function(){var t,n,r;return i(this,(function(o){switch(o.label){case 0:return t=Buffer.from(e),[4,crypto.subtle.digest("SHA-256",t.buffer)];case 1:return n=o.sent(),r=Buffer.from(Buffer.from(n).toString("hex").slice(0,32),"utf8").buffer,[2,crypto.subtle.importKey("raw",r,"AES-CBC",!0,["encrypt","decrypt"])]}}))}))},e.prototype.encryptArrayBuffer=function(e,t){return o(this,void 0,void 0,(function(){var n,r,o;return i(this,(function(i){switch(i.label){case 0:return n=crypto.getRandomValues(new Uint8Array(16)),r=ci,o=[n.buffer],[4,crypto.subtle.encrypt({name:"AES-CBC",iv:n},e,t)];case 1:return[2,r.apply(void 0,o.concat([i.sent()]))]}}))}))},e.prototype.decryptArrayBuffer=function(e,t){return o(this,void 0,void 0,(function(){var n;return i(this,(function(r){return n=t.slice(0,16),[2,crypto.subtle.decrypt({name:"AES-CBC",iv:n},e,t.slice(16))]}))}))},e.prototype.encryptString=function(e,t){return o(this,void 0,void 0,(function(){var n,r,o,a;return i(this,(function(i){switch(i.label){case 0:return n=crypto.getRandomValues(new Uint8Array(16)),r=Buffer.from(t).buffer,[4,crypto.subtle.encrypt({name:"AES-CBC",iv:n},e,r)];case 1:return o=i.sent(),a=ci(n.buffer,o),[2,Buffer.from(a).toString("utf8")]}}))}))},e.prototype.decryptString=function(e,t){return o(this,void 0,void 0,(function(){var n,r,o,a;return i(this,(function(i){switch(i.label){case 0:return n=Buffer.from(t),r=n.slice(0,16),o=n.slice(16),[4,crypto.subtle.decrypt({name:"AES-CBC",iv:r},e,o)];case 1:return a=i.sent(),[2,Buffer.from(a).toString("utf8")]}}))}))},e.IV_LENGTH=16,e}(),fi=(li=function(){function e(e){if(e instanceof File)this.data=e,this.name=this.data.name,this.mimeType=this.data.type;else if(e.data){var t=e.data;this.data=new File([t],e.name,{type:e.mimeType}),this.name=e.name,e.mimeType&&(this.mimeType=e.mimeType)}if(void 0===this.data)throw new Error("Couldn't construct a file out of supplied options.");if(void 0===this.name)throw new Error("Couldn't guess filename out of the options. Please provide one.")}return e.create=function(e){return new this(e)},e.prototype.toBuffer=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){throw new Error("This feature is only supported in Node.js environments.")}))}))},e.prototype.toStream=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){throw new Error("This feature is only supported in Node.js environments.")}))}))},e.prototype.toFileUri=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){throw new Error("This feature is only supported in react native environments.")}))}))},e.prototype.toBlob=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){return[2,this.data]}))}))},e.prototype.toArrayBuffer=function(){return o(this,void 0,void 0,(function(){var e=this;return i(this,(function(t){return[2,new Promise((function(t,n){var r=new FileReader;r.addEventListener("load",(function(){if(r.result instanceof ArrayBuffer)return t(r.result)})),r.addEventListener("error",(function(){n(r.error)})),r.readAsArrayBuffer(e.data)}))]}))}))},e.prototype.toString=function(){return o(this,void 0,void 0,(function(){var e=this;return i(this,(function(t){return[2,new Promise((function(t,n){var r=new FileReader;r.addEventListener("load",(function(){if("string"==typeof r.result)return t(r.result)})),r.addEventListener("error",(function(){n(r.error)})),r.readAsBinaryString(e.data)}))]}))}))},e.prototype.toFile=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){return[2,this.data]}))}))},e}(),li.supportsFile="undefined"!=typeof File,li.supportsBlob="undefined"!=typeof Blob,li.supportsArrayBuffer="undefined"!=typeof ArrayBuffer,li.supportsBuffer=!1,li.supportsStream=!1,li.supportsString=!0,li.supportsEncryptFile=!0,li.supportsFileUri=!1,li);function hi(e){if(!navigator||!navigator.sendBeacon)return!1;navigator.sendBeacon(e)}var di=function(e){function n(t){var n=this,r=t.listenToBrowserNetworkEvents,o=void 0===r||r;return t.sdkFamily="Web",t.networking=new Ht({del:ui,get:ii,post:ai,patch:si,sendBeacon:hi,getfile:oi,postfile:ri}),t.cbor=new zt((function(e){return qt(f.decode(e))}),b),t.PubNubFile=fi,t.cryptography=new pi,n=e.call(this,t)||this,o&&(window.addEventListener("offline",(function(){n.networkDownDetected()})),window.addEventListener("online",(function(){n.networkUpDetected()}))),n}return t(n,e),n}(Bt);return di}));
exports.decode = void 0;
        this.setCipherKey(setup.cipherKey);
    default_1.prototype.setCipherKey = function (val) {
        return '7.3.3';
        var subscribeEndpoint = _a.subscribeEndpoint, leaveEndpoint = _a.leaveEndpoint, heartbeatEndpoint = _a.heartbeatEndpoint, setStateEndpoint = _a.setStateEndpoint, timeEndpoint = _a.timeEndpoint, getFileUrl = _a.getFileUrl, config = _a.config, crypto = _a.crypto, listenerManager = _a.listenerManager;
                if (_this._config.cipherKey) {
                    var decryptedPayload = _this._crypto.decrypt(message.payload);
                    if (typeof decryptedPayload === 'object' && decryptedPayload !== null) {
                if (_this._config.cipherKey) {
                    announce.message = _this._crypto.decrypt(message.payload);
    var config = modules.config, crypto = modules.crypto;
    if (!config.cipherKey)
        return crypto.decrypt(message);
/**       */
        var PubNubFile = _a.PubNubFile, config = _a.config, cryptography = _a.cryptography;
            var body;
            var _b, _c, _d;
                        if (!(PubNubFile.supportsEncryptFile && ((_b = params.cipherKey) !== null && _b !== void 0 ? _b : config.cipherKey))) return [3 /*break*/, 2];
                        return [4 /*yield*/, cryptography.decrypt((_c = params.cipherKey) !== null && _c !== void 0 ? _c : config.cipherKey, body)];
                        body = _e.sent();
                        _e.label = 2;
                    case 2: return [2 /*return*/, PubNubFile.create({
var preparePayload = function (_a, payload) {
    var crypto = _a.crypto, config = _a.config;
    if (config.cipherKey) {
        stringifiedPayload = crypto.encrypt(stringifiedPayload);
    var generateUploadUrl = _a.generateUploadUrl, publishFile = _a.publishFile, _b = _a.modules, PubNubFile = _b.PubNubFile, config = _b.config, cryptography = _b.cryptography, networking = _b.networking;
            var file, _b, _c, url, formFields, _d, id, name, formFieldsWithMimeType, result, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, e_1, errorBody, reason, retries, wasSuccessful, publishResult, e_2;
            return __generator(this, function (_s) {
                switch (_s.label) {
                        _b = _s.sent(), _c = _b.file_upload_request, url = _c.url, formFields = _c.form_fields, _d = _b.data, id = _d.id, name = _d.name;
                        if (!(PubNubFile.supportsEncryptFile && (cipherKey !== null && cipherKey !== void 0 ? cipherKey : config.cipherKey))) return [3 /*break*/, 3];
                        return [4 /*yield*/, cryptography.encryptFile(cipherKey !== null && cipherKey !== void 0 ? cipherKey : config.cipherKey, file, PubNubFile)];
                        file = _s.sent();
                        _s.label = 3;
                    case 3:
                        _s.label = 4;
                    case 4:
                        _s.trys.push([4, 18, , 19]);
                        if (!(PubNubFile.supportsFileUri && input.uri)) return [3 /*break*/, 7];
                        _f = (_e = networking).POSTFILE;
                        _g = [url, formFieldsWithMimeType];
                        return [4 /*yield*/, file.toFileUri()];
                    case 5: return [4 /*yield*/, _f.apply(_e, _g.concat([_s.sent()]))];
                    case 6:
                        result = _s.sent();
                        return [3 /*break*/, 17];
                        if (!PubNubFile.supportsFile) return [3 /*break*/, 10];
                        _j = (_h = networking).POSTFILE;
                        _k = [url, formFieldsWithMimeType];
                        return [4 /*yield*/, file.toFile()];
                    case 8: return [4 /*yield*/, _j.apply(_h, _k.concat([_s.sent()]))];
                        result = _s.sent();
                        return [3 /*break*/, 17];
                        if (!PubNubFile.supportsBuffer) return [3 /*break*/, 13];
                        _m = (_l = networking).POSTFILE;
                        _o = [url, formFieldsWithMimeType];
                        return [4 /*yield*/, file.toBuffer()];
                    case 11: return [4 /*yield*/, _m.apply(_l, _o.concat([_s.sent()]))];
                        result = _s.sent();
                        return [3 /*break*/, 17];
                        if (!PubNubFile.supportsBlob) return [3 /*break*/, 16];
                        _q = (_p = networking).POSTFILE;
                        _r = [url, formFieldsWithMimeType];
                        return [4 /*yield*/, file.toBlob()];
                    case 14: return [4 /*yield*/, _q.apply(_p, _r.concat([_s.sent()]))];
                        result = _s.sent();
                        return [3 /*break*/, 17];
                    case 16: throw new Error('Unsupported environment');
                    case 17: return [3 /*break*/, 19];
                        e_1 = _s.sent();
                        return [3 /*break*/, 19];
                    case 19:
                        _s.label = 20;
                    case 20:
                        _s.trys.push([20, 22, , 23]);
                    case 21:
                        publishResult = _s.sent();
                        return [3 /*break*/, 23];
                    case 22:
                        e_2 = _s.sent();
                        return [3 /*break*/, 23];
                    case 23:
                        if (!wasSuccessful && retries > 0) return [3 /*break*/, 20];
                        _s.label = 24;
                    case 24:
    var config = modules.config, crypto = modules.crypto;
    if (!config.cipherKey)
        return crypto.decrypt(message);
    var crypto = modules.crypto, config = modules.config;
    if (config.cipherKey) {
        stringifiedPayload = crypto.encrypt(stringifiedPayload);
    return stringifiedPayload;
        this.encryptFile = function (key, file) { return cryptography.encryptFile(key, file, _this.File); };
        this.decryptFile = function (key, file) { return cryptography.decryptFile(key, file, _this.File); };
        this.encrypt = crypto.encrypt.bind(crypto);
        this.decrypt = crypto.decrypt.bind(crypto);
        this.setCipherKey = modules.config.setCipherKey.bind(modules.config);
        var output = new stream_1.PassThrough();
        var bIv = this.getIv();
        var aes = (0, crypto_1.createCipheriv)(this.algo, key, bIv);
        output.write(bIv);
        stream.pipe(aes).pipe(output);
        return output;
                    case 0: return [4 /*yield*/, this.getKey(key)];
                        return [4 /*yield*/, file.toArrayBuffer()];
                        return [4 /*yield*/, file.toArrayBuffer()];
            var bKey, abHash, abKey;
                    case 0:
                        bKey = Buffer.from(key);
                        return [4 /*yield*/, crypto.subtle.digest('SHA-256', bKey.buffer)];
                        abHash = _a.sent();
                        abKey = Buffer.from(Buffer.from(abHash).toString('hex').slice(0, 32), 'utf8').buffer;
            var abIv;
                abIv = ciphertext.slice(0, 16);
                return [2 /*return*/, crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, ciphertext.slice(16))];
                        abPlaintext = Buffer.from(plaintext).buffer;
                        return [2 /*return*/, Buffer.from(ciphertext).toString('utf8')];
                        abCiphertext = Buffer.from(ciphertext);
                        return [2 /*return*/, Buffer.from(abPlaintext).toString('utf8')];
/**       */
var fs_1 = require("fs");
                if (stream instanceof fs_1.ReadStream) {
module.exports = /** @class */ (function (_super) {
    __extends(class_1, _super);
    function class_1(setup) {
        var _this = this;
        setup.cbor = new common_1.default(function (buffer) { return cbor_sync_1.default.decode(Buffer.from(buffer)); }, base64_codec_1.decode);
        setup.networking = new networking_1.default({
            keepAlive: node_1.keepAlive,
            del: web_node_1.del,
            get: web_node_1.get,
            post: web_node_1.post,
            patch: web_node_1.patch,
            proxy: node_1.proxy,
            getfile: web_node_1.getfile,
            postfile: web_node_1.postfile,
        });
        setup.sdkFamily = 'Nodejs';
        setup.PubNubFile = node_3.default;
        setup.cryptography = new node_2.default();
        if (!('ssl' in setup)) {
            setup.ssl = true;
        _this = _super.call(this, setup) || this;
        return _this;
    }
    return class_1;
}(pubnub_common_1.default));
  "version": "7.3.3",
}
    support customp encryption and decryption functions.
    this.setCipherKey(setup.cipherKey);
  setCipherKey(val) {
    return '7.3.3';

        if (this._config.cipherKey) {
          const decryptedPayload = this._crypto.decrypt(message.payload);

          if (typeof decryptedPayload === 'object' && decryptedPayload !== null) {
        if (this._config.cipherKey) {
          announce.message = this._crypto.decrypt(message.payload);
  const { config, crypto } = modules;
  if (!config.cipherKey) return message;

    return crypto.decrypt(message);
  handleResponse: async ({ PubNubFile, config, cryptography }, res, params) => {

    if (PubNubFile.supportsEncryptFile && (params.cipherKey ?? config.cipherKey)) {
      body = await cryptography.decrypt(params.cipherKey ?? config.cipherKey, body);

const preparePayload = ({ crypto, config }, payload) => {

  if (config.cipherKey) {
    stringifiedPayload = crypto.encrypt(stringifiedPayload);

  modules: { PubNubFile, config, cryptography, networking },
    if (PubNubFile.supportsEncryptFile && (cipherKey ?? config.cipherKey)) {
      file = await cryptography.encryptFile(cipherKey ?? config.cipherKey, file, PubNubFile);
  const { config, crypto } = modules;
  if (!config.cipherKey) return message;

    return crypto.decrypt(message);
  const { crypto, config } = modules;
  if (config.cipherKey) {
    stringifiedPayload = crypto.encrypt(stringifiedPayload);

  return stringifiedPayload;
    this.encryptFile = (key, file) => cryptography.encryptFile(key, file, this.File);
    this.decryptFile = (key, file) => cryptography.decryptFile(key, file, this.File);
    this.encrypt = crypto.encrypt.bind(crypto);
    this.decrypt = crypto.decrypt.bind(crypto);
    this.setCipherKey = modules.config.setCipherKey.bind(modules.config);

import { Readable, PassThrough } from 'stream';

  encryptStream(key, stream) {
    const output = new PassThrough();

    const aes = createCipheriv(this.algo, key, bIv);

    output.write(bIv);
    stream.pipe(aes).pipe(output);

    return output;

    const abPlaindata = await file.toArrayBuffer();
    const abCipherdata = await file.toArrayBuffer();

    const bKey = Buffer.from(key);
    const abHash = await crypto.subtle.digest('SHA-256', bKey.buffer);

    const abKey = Buffer.from(Buffer.from(abHash).toString('hex').slice(0, 32), 'utf8').buffer;


    return crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, ciphertext.slice(16));
    const abPlaintext = Buffer.from(plaintext).buffer;
    return Buffer.from(ciphertext).toString('utf8');
    const abCiphertext = Buffer.from(ciphertext);
    return Buffer.from(abPlaintext).toString('utf8');
/**       */

import { ReadStream } from 'fs';
import { IFile, FileClass } from '..';

      if (stream instanceof ReadStream) {

import { loadFixtureFile } from './utils';


  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}
Fixed code:   - date: 2023-10-16
    version: v7.4.0
    changes:
      - type: feature
        text: "Add crypto module that allows configure SDK to encrypt and decrypt messages."
      - type: bug
        text: "Improved security of crypto implementation by adding enhanced AES-CBC cryptor."
version: '7.4.0'
            location: https://github.com/pubnub/javascript/archive/refs/tags/v7.4.0.zip
            location: https://github.com/pubnub/javascript/releases/download/v7.4.0/pubnub.7.4.0.js
## v7.4.0
October 16 2023

#### Added
- Add crypto module that allows configure SDK to encrypt and decrypt messages.

#### Fixed
- Improved security of crypto implementation by adding enhanced AES-CBC cryptor.

PubNub Software Development Kit License Agreement
Copyright © 2023 PubNub Inc. All rights reserved.
Subject to the terms and conditions of the license, you are hereby granted
a non-exclusive, worldwide, royalty-free license to (a) copy and modify
the software in source code or binary form for use with the software services
and interfaces provided by PubNub, and (b) redistribute unmodified copies
of the software to third parties. The software may not be incorporated in
or used to provide any product or service competitive with the products
and services of PubNub.
The above copyright notice and this license shall be included
in or with all copies or substantial portions of the software.
This license does not grant you permission to use the trade names, trademarks,
service marks, or product names of PubNub, except as required for reasonable
and customary use in describing the origin of the software and reproducing
the content of this license.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
EVENT SHALL PUBNUB OR THE AUTHORS OR COPYRIGHT HOLDERS OF THE SOFTWARE BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

https://www.pubnub.com/
https://www.pubnub.com/terms
     * https://cdn.pubnub.com/sdk/javascript/pubnub.7.4.0.js
     * https://cdn.pubnub.com/sdk/javascript/pubnub.7.4.0.min.js
            this.cryptoModule = setup.cryptoModule;
            this.setCipherKey(setup.cipherKey, setup);
        default_1.prototype.setCipherKey = function (val, setup, modules) {
            var _a;
            if (this.cipherKey) {
                this.cryptoModule =
                    (_a = setup.cryptoModule) !== null && _a !== void 0 ? _a : setup.initCryptoModule({ cipherKey: this.cipherKey, useRandomIVs: this.useRandomIVs });
                if (modules)
                    modules.cryptoModule = this.cryptoModule;
            }
            return '7.4.0';
    function encode$1(input) {
        var base64 = '';
        var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
        var bytes = new Uint8Array(input);
        var byteLength = bytes.byteLength;
        var byteRemainder = byteLength % 3;
        var mainLength = byteLength - byteRemainder;
        var a, b, c, d;
        var chunk;
        // Main loop deals with bytes in chunks of 3
        for (var i = 0; i < mainLength; i = i + 3) {
            // Combine the three bytes into a single integer
            chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];
            // Use bitmasks to extract 6-bit segments from the triplet
            a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18
            b = (chunk & 258048) >> 12; // 258048   = (2^6 - 1) << 12
            c = (chunk & 4032) >> 6; // 4032     = (2^6 - 1) << 6
            d = chunk & 63; // 63       = 2^6 - 1
            // Convert the raw binary segments to the appropriate ASCII encoding
            base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];
        }
        // Deal with the remaining bytes and padding
        if (byteRemainder == 1) {
            chunk = bytes[mainLength];
            a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2
            // Set the 4 least significant bits to zero
            b = (chunk & 3) << 4; // 3   = 2^2 - 1
            base64 += encodings[a] + encodings[b] + '==';
        }
        else if (byteRemainder == 2) {
            chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];
            a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10
            b = (chunk & 1008) >> 4; // 1008  = (2^6 - 1) << 4
            // Set the 2 least significant bits to zero
            c = (chunk & 15) << 2; // 15    = 2^4 - 1
            base64 += encodings[a] + encodings[b] + encodings[c] + '=';
        }
        return base64;
    }
    function stringToArrayBuffer(str) {
        var buf = new ArrayBuffer(str.length * 2);
        var bufView = new Uint16Array(buf);
        for (var i = 0, strLen = str.length; i < strLen; i++) {
            bufView[i] = str.charCodeAt(i);
        }
        return buf;
    }
        stringToArrayBuffer: stringToArrayBuffer,
            var subscribeEndpoint = _a.subscribeEndpoint, leaveEndpoint = _a.leaveEndpoint, heartbeatEndpoint = _a.heartbeatEndpoint, setStateEndpoint = _a.setStateEndpoint, timeEndpoint = _a.timeEndpoint, getFileUrl = _a.getFileUrl, config = _a.config, crypto = _a.crypto, listenerManager = _a.listenerManager, cryptoModule = _a.cryptoModule;
            this._cryptoModule = cryptoModule;
            if (this._cryptoModule)
                this._decoder = new TextDecoder();
                    if (_this._cryptoModule) {
                        var decryptedPayload = void 0;
                        try {
                            var decryptedData = _this._cryptoModule.decrypt(message.payload);
                            decryptedPayload =
                                decryptedData instanceof ArrayBuffer ? JSON.parse(_this._decoder.decode(decryptedData)) : decryptedData;
                        }
                        catch (e) {
                            decryptedPayload = null;
                            if (console && console.log) {
                                console.log('decryption error', e.message);
                            }
                        }
                        if (decryptedPayload !== null) {
                    if (_this._cryptoModule) {
                        var decryptedPayload = void 0;
                        try {
                            var decryptedData = _this._cryptoModule.decrypt(message.payload);
                            decryptedPayload =
                                decryptedData instanceof ArrayBuffer ? JSON.parse(_this._decoder.decode(decryptedData)) : decryptedData;
                        }
                        catch (e) {
                            decryptedPayload = null;
                            // eslint-disable-next-line
                            if (console && console.log) {
                                console.log('decryption error', e.message); //eslint-disable-line
                            }
                        }
                        if (decryptedPayload != null) {
                            announce.message = decryptedPayload;
                        }
                        else {
                            announce.message = message.payload;
                        }
    var preparePayload = function (modules, payload) {
        if (modules.cryptoModule) {
            var encrypted = modules.cryptoModule.encrypt(stringifiedPayload);
            stringifiedPayload = typeof encrypted === 'string' ? encrypted : encode$1(encrypted);
        var generateUploadUrl = _a.generateUploadUrl, publishFile = _a.publishFile, _b = _a.modules, PubNubFile = _b.PubNubFile, config = _b.config, cryptography = _b.cryptography, cryptoModule = _b.cryptoModule, networking = _b.networking;
                var file, _b, _c, url, formFields, _d, id, name, _e, formFieldsWithMimeType, result, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, e_1, errorBody, reason, retries, wasSuccessful, publishResult;
                return __generator(this, function (_t) {
                    switch (_t.label) {
                            _b = _t.sent(), _c = _b.file_upload_request, url = _c.url, formFields = _c.form_fields, _d = _b.data, id = _d.id, name = _d.name;
                            if (!(PubNubFile.supportsEncryptFile && (cipherKey || cryptoModule))) return [3 /*break*/, 6];
                            if (!(cipherKey == null)) return [3 /*break*/, 3];
                            return [4 /*yield*/, cryptoModule.encryptFile(file, PubNubFile)];
                            _e = _t.sent();
                            return [3 /*break*/, 5];
                        case 3: return [4 /*yield*/, cryptography.encryptFile(cipherKey, file, PubNubFile)];
                        case 4:
                            _e = _t.sent();
                            _t.label = 5;
                        case 5:
                            file = _e;
                            _t.label = 6;
                        case 6:
                            _t.label = 7;
                            _t.trys.push([7, 21, , 22]);
                            if (!(PubNubFile.supportsFileUri && input.uri)) return [3 /*break*/, 10];
                            _g = (_f = networking).POSTFILE;
                            _h = [url, formFieldsWithMimeType];
                            return [4 /*yield*/, file.toFileUri()];
                        case 8: return [4 /*yield*/, _g.apply(_f, _h.concat([_t.sent()]))];
                            result = _t.sent();
                            return [3 /*break*/, 20];
                            if (!PubNubFile.supportsFile) return [3 /*break*/, 13];
                            _k = (_j = networking).POSTFILE;
                            _l = [url, formFieldsWithMimeType];
                            return [4 /*yield*/, file.toFile()];
                        case 11: return [4 /*yield*/, _k.apply(_j, _l.concat([_t.sent()]))];
                            result = _t.sent();
                            return [3 /*break*/, 20];
                            if (!PubNubFile.supportsBuffer) return [3 /*break*/, 16];
                            _o = (_m = networking).POSTFILE;
                            _p = [url, formFieldsWithMimeType];
                            return [4 /*yield*/, file.toBuffer()];
                        case 14: return [4 /*yield*/, _o.apply(_m, _p.concat([_t.sent()]))];
                            result = _t.sent();
                            return [3 /*break*/, 20];
                        case 16:
                            if (!PubNubFile.supportsBlob) return [3 /*break*/, 19];
                            _r = (_q = networking).POSTFILE;
                            _s = [url, formFieldsWithMimeType];
                            return [4 /*yield*/, file.toBlob()];
                        case 17: return [4 /*yield*/, _r.apply(_q, _s.concat([_t.sent()]))];
                            result = _t.sent();
                            return [3 /*break*/, 20];
                        case 19: throw new Error('Unsupported environment');
                        case 20: return [3 /*break*/, 22];
                        case 21:
                            e_1 = _t.sent();
                        case 22:
                            _t.label = 23;
                        case 23:
                            _t.trys.push([23, 25, , 26]);
                        case 24:
                            publishResult = _t.sent();
                            return [3 /*break*/, 26];
                        case 25:
                            _t.sent();
                            return [3 /*break*/, 26];
                        case 26:
                            if (!wasSuccessful && retries > 0) return [3 /*break*/, 23];
                            _t.label = 27;
                        case 27:
    // Download_file.js
            var PubNubFile = _a.PubNubFile, config = _a.config, cryptography = _a.cryptography, cryptoModule = _a.cryptoModule;
                var body, _b;
                var _c, _d;
                            if (!(PubNubFile.supportsEncryptFile && (params.cipherKey || cryptoModule))) return [3 /*break*/, 5];
                            if (!(params.cipherKey == null)) return [3 /*break*/, 2];
                            return [4 /*yield*/, cryptoModule.decryptFile(PubNubFile.create({ data: body, name: params.name }), PubNubFile)];
                            _b = (_e.sent()).data;
                            return [3 /*break*/, 4];
                        case 2: return [4 /*yield*/, cryptography.decrypt((_c = params.cipherKey) !== null && _c !== void 0 ? _c : config.cipherKey, body)];
                        case 3:
                            _b = _e.sent();
                            _e.label = 4;
                        case 4:
                            body = _b;
                            _e.label = 5;
                        case 5: return [2 /*return*/, PubNubFile.create({
        if (modules.cryptoModule) {
            var encrypted = modules.cryptoModule.encrypt(stringifiedPayload);
            stringifiedPayload = typeof encrypted === 'string' ? encrypted : encode$1(encrypted);
        return stringifiedPayload || '';
        if (!modules.cryptoModule)
            var decryptedData = modules.cryptoModule.decrypt(message);
            var decryptedPayload = decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
            return decryptedPayload;
            if (console && console.log)
                console.log('decryption error', e.message);
        if (!modules.cryptoModule)
            var decryptedData = modules.cryptoModule.decrypt(message);
            var decryptedPayload = decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
            return decryptedPayload;
            if (console && console.log)
                console.log('decryption error', e.message);
            var cryptoModule = this._config.cryptoModule;
                cryptoModule: cryptoModule,
            this.encryptFile = function (key, file) {
                if (arguments.length == 1 && typeof key != 'string' && modules.cryptoModule) {
                    file = key;
                    return modules.cryptoModule.encryptFile(file, this.File);
                }
                return cryptography.encryptFile(key, file, this.File);
            };
            this.decryptFile = function (key, file) {
                if (arguments.length == 1 && typeof key != 'string' && modules.cryptoModule) {
                    file = key;
                    return modules.cryptoModule.decryptFile(file, this.File);
                }
                return cryptography.decryptFile(key, file, this.File);
            };
                    cryptoModule: modules.cryptoModule,
            this.encrypt = function (data, key) {
                if (typeof key === 'undefined' && modules.cryptoModule) {
                    var encrypted = modules.cryptoModule.encrypt(data);
                    return typeof encrypted === 'string' ? encrypted : encode$1(encrypted);
                }
                else {
                    return crypto.encrypt(data, key);
                }
            };
            this.decrypt = function (data, key) {
                if (typeof key === 'undefined' && cryptoModule) {
                    var decrypted = modules.cryptoModule.decrypt(data);
                    return decrypted instanceof ArrayBuffer ? encode$1(decrypted) : decrypted;
                }
                else {
                    return crypto.decrypt(data, key);
                }
            };
            // this.setCipherKey = modules.config.setCipherKey.bind(modules.config);
            this.setCipherKey = function (key) { return modules.config.setCipherKey(key, setup, modules); };
                        case 0:
                            if (file.data.byteLength <= 0)
                                throw new Error('encryption error. empty content');
                            return [4 /*yield*/, this.getKey(key)];
                            return [4 /*yield*/, file.data.arrayBuffer()];
                            return [4 /*yield*/, file.data.arrayBuffer()];
                var digest, hashHex, abKey;
                        case 0: return [4 /*yield*/, crypto.subtle.digest('SHA-256', WebCryptography.encoder.encode(key))];
                            digest = _a.sent();
                            hashHex = Array.from(new Uint8Array(digest))
                                .map(function (b) { return b.toString(16).padStart(2, '0'); })
                                .join('');
                            abKey = WebCryptography.encoder.encode(hashHex.slice(0, 32)).buffer;
                var abIv, data;
                    switch (_a.label) {
                        case 0:
                            abIv = ciphertext.slice(0, 16);
                            if (ciphertext.slice(WebCryptography.IV_LENGTH).byteLength <= 0)
                                throw new Error('decryption error: empty content');
                            return [4 /*yield*/, crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, ciphertext.slice(WebCryptography.IV_LENGTH))];
                        case 1:
                            data = _a.sent();
                            return [2 /*return*/, data];
                    }
                            abPlaintext = WebCryptography.encoder.encode(plaintext).buffer;
                            return [2 /*return*/, WebCryptography.decoder.decode(ciphertext)];
                            abCiphertext = WebCryptography.encoder.encode(ciphertext).buffer;
                            return [2 /*return*/, WebCryptography.decoder.decode(abPlaintext)];
        WebCryptography.encoder = new TextEncoder();
        WebCryptography.decoder = new TextDecoder();
    var LegacyCryptor = /** @class */ (function () {
        function LegacyCryptor(config) {
            this.config = config;
            this.cryptor = new default_1$a({ config: config });
            this.fileCryptor = new WebCryptography();
        }
        Object.defineProperty(LegacyCryptor.prototype, "identifier", {
            get: function () {
                return '';
            },
            enumerable: false,
            configurable: true
        });
        LegacyCryptor.prototype.encrypt = function (data) {
            var stringData = typeof data === 'string' ? data : new TextDecoder().decode(data);
            return {
                data: this.cryptor.encrypt(stringData),
                metadata: null,
            };
        };
        LegacyCryptor.prototype.decrypt = function (encryptedData) {
            var data = typeof encryptedData.data === 'string' ? encryptedData.data : encode$1(encryptedData.data);
            return this.cryptor.decrypt(data);
        };
        LegacyCryptor.prototype.encryptFile = function (file, File) {
            var _a;
            return __awaiter(this, void 0, void 0, function () {
                return __generator(this, function (_b) {
                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
                    //@ts-ignore: can not detect cipherKey from old Config
                    return [2 /*return*/, this.fileCryptor.encryptFile((_a = this.config) === null || _a === void 0 ? void 0 : _a.cipherKey, file, File)];
                });
            });
        };
        LegacyCryptor.prototype.decryptFile = function (file, File) {
            return __awaiter(this, void 0, void 0, function () {
                return __generator(this, function (_a) {
                    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
                    //@ts-ignore: can not detect cipherKey from old Config
                    return [2 /*return*/, this.fileCryptor.decryptFile(this.config.cipherKey, file, File)];
                });
            });
        };
        return LegacyCryptor;
    }());

    var AesCbcCryptor = /** @class */ (function () {
        function AesCbcCryptor(configuration) {
            this.cipherKey = configuration.cipherKey;
            this.CryptoJS = hmacSha256;
            this.encryptedKey = this.CryptoJS.SHA256(this.cipherKey);
        }
        Object.defineProperty(AesCbcCryptor.prototype, "algo", {
            get: function () {
                return 'AES-CBC';
            },
            enumerable: false,
            configurable: true
        });
        Object.defineProperty(AesCbcCryptor.prototype, "identifier", {
            get: function () {
                return 'ACRH';
            },
            enumerable: false,
            configurable: true
        });
        AesCbcCryptor.prototype.getIv = function () {
            return crypto.getRandomValues(new Uint8Array(AesCbcCryptor.BLOCK_SIZE));
        };
        AesCbcCryptor.prototype.getKey = function () {
            return __awaiter(this, void 0, void 0, function () {
                var bKey, abHash;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            bKey = AesCbcCryptor.encoder.encode(this.cipherKey);
                            return [4 /*yield*/, crypto.subtle.digest('SHA-256', bKey.buffer)];
                        case 1:
                            abHash = _a.sent();
                            return [2 /*return*/, crypto.subtle.importKey('raw', abHash, this.algo, true, ['encrypt', 'decrypt'])];
                    }
                });
            });
        };
        AesCbcCryptor.prototype.encrypt = function (data) {
            var stringData = typeof data === 'string' ? data : AesCbcCryptor.decoder.decode(data);
            if (stringData.length === 0)
                throw new Error('encryption error. empty content');
            var abIv = this.getIv();
            return {
                metadata: abIv,
                data: decode$1(this.CryptoJS.AES.encrypt(data, this.encryptedKey, {
                    iv: this.bufferToWordArray(abIv),
                    mode: this.CryptoJS.mode.CBC,
                }).ciphertext.toString(this.CryptoJS.enc.Base64)),
            };
        };
        AesCbcCryptor.prototype.decrypt = function (encryptedData) {
            var iv = this.bufferToWordArray(new Uint8ClampedArray(encryptedData.metadata));
            var data = this.bufferToWordArray(new Uint8ClampedArray(encryptedData.data));
            return AesCbcCryptor.encoder.encode(this.CryptoJS.AES.decrypt({ ciphertext: data }, this.encryptedKey, {
                iv: iv,
                mode: this.CryptoJS.mode.CBC,
            }).toString(this.CryptoJS.enc.Utf8)).buffer;
        };
        AesCbcCryptor.prototype.encryptFileData = function (data) {
            return __awaiter(this, void 0, void 0, function () {
                var key, iv;
                var _a;
                return __generator(this, function (_b) {
                    switch (_b.label) {
                        case 0: return [4 /*yield*/, this.getKey()];
                        case 1:
                            key = _b.sent();
                            iv = this.getIv();
                            _a = {};
                            return [4 /*yield*/, crypto.subtle.encrypt({ name: this.algo, iv: iv }, key, data)];
                        case 2: return [2 /*return*/, (_a.data = _b.sent(),
                                _a.metadata = iv,
                                _a)];
                    }
                });
            });
        };
        AesCbcCryptor.prototype.decryptFileData = function (encryptedData) {
            return __awaiter(this, void 0, void 0, function () {
                var key;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0: return [4 /*yield*/, this.getKey()];
                        case 1:
                            key = _a.sent();
                            return [2 /*return*/, crypto.subtle.decrypt({ name: this.algo, iv: encryptedData.metadata }, key, encryptedData.data)];
                    }
                });
            });
        };
        AesCbcCryptor.prototype.bufferToWordArray = function (b) {
            var wa = [];
            var i;
            for (i = 0; i < b.length; i += 1) {
                wa[(i / 4) | 0] |= b[i] << (24 - 8 * i);
            }
            return this.CryptoJS.lib.WordArray.create(wa, b.length);
        };
        AesCbcCryptor.BLOCK_SIZE = 16;
        AesCbcCryptor.encoder = new TextEncoder();
        AesCbcCryptor.decoder = new TextDecoder();
        return AesCbcCryptor;
    }());

    var CryptoModule = /** @class */ (function () {
        function CryptoModule(cryptoModuleConfiguration) {
            var _a;
            this.defaultCryptor = cryptoModuleConfiguration.default;
            this.cryptors = (_a = cryptoModuleConfiguration.cryptors) !== null && _a !== void 0 ? _a : [];
        }
        // eslint-disable-next-line @typescript-eslint/ban-ts-comment
        //@ts-ignore: type detection issue with old Config type assignment
        CryptoModule.legacyCryptoModule = function (config) {
            var _a;
            return new this({
                default: new LegacyCryptor({
                    cipherKey: config.cipherKey,
                    useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
                }),
                cryptors: [new AesCbcCryptor({ cipherKey: config.cipherKey })],
            });
        };
        CryptoModule.aesCbcCryptoModule = function (config) {
            var _a;
            return new this({
                default: new AesCbcCryptor({ cipherKey: config.cipherKey }),
                cryptors: [
                    new LegacyCryptor({
                        cipherKey: config.cipherKey,
                        useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
                    }),
                ],
            });
        };
        CryptoModule.withDefaultCryptor = function (defaultCryptor) {
            return new this({ default: defaultCryptor });
        };
        CryptoModule.prototype.getAllCryptors = function () {
            return __spreadArray([this.defaultCryptor], __read(this.cryptors), false);
        };
        CryptoModule.prototype.encrypt = function (data) {
            var encrypted = this.defaultCryptor.encrypt(data);
            if (!encrypted.metadata)
                return encrypted.data;
            var headerData = this.getHeaderData(encrypted);
            return this.concatArrayBuffer(headerData, encrypted.data);
        };
        CryptoModule.prototype.decrypt = function (data) {
            var encryptedData = typeof data === 'string' ? decode$1(data) : data;
            var header = CryptorHeader.tryParse(encryptedData);
            var cryptor = this.getCryptor(header);
            var metadata = header.length > 0
                ? encryptedData.slice(header.length - header.metadataLength, header.length)
                : null;
            if (encryptedData.slice(header.length).byteLength <= 0)
                throw new Error('decryption error. empty content');
            return cryptor.decrypt({
                data: encryptedData.slice(header.length),
                metadata: metadata,
            });
        };
        CryptoModule.prototype.encryptFile = function (file, File) {
            return __awaiter(this, void 0, void 0, function () {
                var fileData, encrypted;
                return __generator(this, function (_a) {
                    switch (_a.label) {
                        case 0:
                            if (this.defaultCryptor.identifier === CryptorHeader.LEGACY_IDENTIFIER)
                                return [2 /*return*/, this.defaultCryptor.encryptFile(file, File)];
                            fileData = this.getFileData(file.data);
                            return [4 /*yield*/, this.defaultCryptor.encryptFileData(fileData)];
                        case 1:
                            encrypted = _a.sent();
                            return [2 /*return*/, File.create({
                                    name: file.name,
                                    mimeType: 'application/octet-stream',
                                    data: this.concatArrayBuffer(this.getHeaderData(encrypted), encrypted.data),
                                })];
                    }
                });
            });
        };
        CryptoModule.prototype.decryptFile = function (file, File) {
            return __awaiter(this, void 0, void 0, function () {
                var data, header, cryptor, fileData, metadata, _a, _b;
                var _c;
                return __generator(this, function (_d) {
                    switch (_d.label) {
                        case 0: return [4 /*yield*/, file.data.arrayBuffer()];
                        case 1:
                            data = _d.sent();
                            header = CryptorHeader.tryParse(data);
                            cryptor = this.getCryptor(header);
                            if ((cryptor === null || cryptor === void 0 ? void 0 : cryptor.identifier) === CryptoModule.LEGACY_IDENTIFIER) {
                                return [2 /*return*/, cryptor.decryptFile(file, File)];
                            }
                            fileData = this.getFileData(data);
                            metadata = fileData.slice(header.length - header.metadataLength, header.length);
                            _b = (_a = File).create;
                            _c = {
                                name: file.name
                            };
                            return [4 /*yield*/, this.defaultCryptor.decryptFileData({
                                    data: data.slice(header.length),
                                    metadata: metadata,
                                })];
                        case 2: return [2 /*return*/, _b.apply(_a, [(_c.data = _d.sent(),
                                    _c)])];
                    }
                });
            });
        };
        CryptoModule.prototype.getCryptor = function (header) {
            if (header === '') {
                var cryptor = this.getAllCryptors().find(function (c) { return c.identifier === ''; });
                if (cryptor)
                    return cryptor;
                throw new Error('unknown cryptor error');
            }
            else if (header instanceof CryptorHeaderV1) {
                return this.getCryptorFromId(header.identifier);
            }
        };
        CryptoModule.prototype.getCryptorFromId = function (id) {
            var cryptor = this.getAllCryptors().find(function (c) { return id === c.identifier; });
            if (cryptor) {
                return cryptor;
            }
            throw Error('unknown cryptor error');
        };
        CryptoModule.prototype.concatArrayBuffer = function (ab1, ab2) {
            var tmp = new Uint8Array(ab1.byteLength + ab2.byteLength);
            tmp.set(new Uint8Array(ab1), 0);
            tmp.set(new Uint8Array(ab2), ab1.byteLength);
            return tmp.buffer;
        };
        CryptoModule.prototype.getHeaderData = function (encrypted) {
            if (!encrypted.metadata)
                return;
            var header = CryptorHeader.from(this.defaultCryptor.identifier, encrypted.metadata);
            var headerData = new Uint8Array(header.length);
            var pos = 0;
            headerData.set(header.data, pos);
            pos += header.length - encrypted.metadata.byteLength;
            headerData.set(new Uint8Array(encrypted.metadata), pos);
            return headerData.buffer;
        };
        CryptoModule.prototype.getFileData = function (input) {
            if (input instanceof ArrayBuffer) {
                return input;
            }
            if (typeof input === 'string') {
                return CryptoModule.encoder.encode(input);
            }
            throw new Error('Cannot decrypt/encrypt file. In browsers file decryption supports only string or ArrayBuffer');
        };
        CryptoModule.LEGACY_IDENTIFIER = '';
        CryptoModule.encoder = new TextEncoder();
        CryptoModule.decoder = new TextDecoder();
        return CryptoModule;
    }());
    // CryptorHeader Utility
    var CryptorHeader = /** @class */ (function () {
        function CryptorHeader() {
        }
        CryptorHeader.from = function (id, metadata) {
            if (id === CryptorHeader.LEGACY_IDENTIFIER)
                return;
            return new CryptorHeaderV1(id, metadata.byteLength);
        };
        CryptorHeader.tryParse = function (data) {
            var encryptedData = new Uint8Array(data);
            var sentinel = '';
            var version = null;
            if (encryptedData.byteLength >= 4) {
                sentinel = encryptedData.slice(0, 4);
                if (this.decoder.decode(sentinel) !== CryptorHeader.SENTINEL)
                    return '';
            }
            if (encryptedData.byteLength >= 5) {
                version = encryptedData[4];
            }
            else {
                throw new Error('decryption error. invalid header version');
            }
            if (version > CryptorHeader.MAX_VERSION)
                throw new Error('unknown cryptor error');
            var identifier = '';
            var pos = 5 + CryptorHeader.IDENTIFIER_LENGTH;
            if (encryptedData.byteLength >= pos) {
                identifier = encryptedData.slice(5, pos);
            }
            else {
                throw new Error('decryption error. invalid crypto identifier');
            }
            var metadataLength = null;
            if (encryptedData.byteLength >= pos + 1) {
                metadataLength = encryptedData[pos];
            }
            else {
                throw new Error('decryption error. invalid metadata length');
            }
            pos += 1;
            if (metadataLength === 255 && encryptedData.byteLength >= pos + 2) {
                metadataLength = new Uint16Array(encryptedData.slice(pos, pos + 2)).reduce(function (acc, val) { return (acc << 8) + val; }, 0);
                pos += 2;
            }
            return new CryptorHeaderV1(this.decoder.decode(identifier), metadataLength);
        };
        CryptorHeader.SENTINEL = 'PNED';
        CryptorHeader.LEGACY_IDENTIFIER = '';
        CryptorHeader.IDENTIFIER_LENGTH = 4;
        CryptorHeader.VERSION = 1;
        CryptorHeader.MAX_VERSION = 1;
        CryptorHeader.decoder = new TextDecoder();
        return CryptorHeader;
    }());
    // v1 CryptorHeader
    var CryptorHeaderV1 = /** @class */ (function () {
        function CryptorHeaderV1(id, metadataLength) {
            this._identifier = id;
            this._metadataLength = metadataLength;
        }
        Object.defineProperty(CryptorHeaderV1.prototype, "identifier", {
            get: function () {
                return this._identifier;
            },
            set: function (value) {
                this._identifier = value;
            },
            enumerable: false,
            configurable: true
        });
        Object.defineProperty(CryptorHeaderV1.prototype, "metadataLength", {
            get: function () {
                return this._metadataLength;
            },
            set: function (value) {
                this._metadataLength = value;
            },
            enumerable: false,
            configurable: true
        });
        Object.defineProperty(CryptorHeaderV1.prototype, "version", {
            get: function () {
                return CryptorHeader.VERSION;
            },
            enumerable: false,
            configurable: true
        });
        Object.defineProperty(CryptorHeaderV1.prototype, "length", {
            get: function () {
                return (CryptorHeader.SENTINEL.length +
                    1 +
                    CryptorHeader.IDENTIFIER_LENGTH +
                    (this.metadataLength < 255 ? 1 : 3) +
                    this.metadataLength);
            },
            enumerable: false,
            configurable: true
        });
        Object.defineProperty(CryptorHeaderV1.prototype, "data", {
            get: function () {
                var pos = 0;
                var header = new Uint8Array(this.length);
                var encoder = new TextEncoder();
                header.set(encoder.encode(CryptorHeader.SENTINEL));
                pos += CryptorHeader.SENTINEL.length;
                header[pos] = this.version;
                pos++;
                if (this.identifier)
                    header.set(encoder.encode(this.identifier), pos);
                pos += CryptorHeader.IDENTIFIER_LENGTH;
                var metadataLength = this.metadataLength;
                if (metadataLength < 255) {
                    header[pos] = metadataLength;
                }
                else {
                    header.set([255, metadataLength >> 8, metadataLength & 0xff], pos);
                }
                return header;
            },
            enumerable: false,
            configurable: true
        });
        CryptorHeaderV1.IDENTIFIER_LENGTH = 4;
        CryptorHeaderV1.SENTINEL = 'PNED';
        return CryptorHeaderV1;
    }());

            setup.initCryptoModule = function (cryptoConfiguration) {
                return new CryptoModule({
                    default: new LegacyCryptor({
                        cipherKey: cryptoConfiguration.cipherKey,
                        useRandomIVs: cryptoConfiguration.useRandomIVs,
                    }),
                    cryptors: [new AesCbcCryptor({ cipherKey: cryptoConfiguration.cipherKey })],
                });
            };
        default_1.CryptoModule = CryptoModule;
    ***************************************************************************** */var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};function t(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function r(){this.constructor=t}e(t,n),t.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}var n=function(){return n=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},n.apply(this,arguments)};function r(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function o(e,t,n,r){return new(n||(n=Promise))((function(o,i){function a(e){try{u(r.next(e))}catch(e){i(e)}}function s(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(a,s)}u((r=r.apply(e,t||[])).next())}))}function i(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function s(i){return function(s){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;a;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return a.label++,{value:i[1],done:!1};case 5:a.label++,r=i[1],i=[0];continue;case 7:i=a.ops.pop(),a.trys.pop();continue;default:if(!(o=a.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){a.label=i[1];break}if(6===i[0]&&a.label<o[1]){a.label=o[1],o=i;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(i);break}o[2]&&a.ops.pop(),a.trys.pop();continue}i=t.call(e,a)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,s])}}}function a(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function s(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,i=n.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function u(e,t,n){if(n||2===arguments.length)for(var r,o=0,i=t.length;o<i;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}var c="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function l(e){if(e.__esModule)return e;var t=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(n){var r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:function(){return e[n]}})})),t}var p={exports:{}};!function(e){!function(t,n){var r=Math.pow(2,-24),o=Math.pow(2,32),i=Math.pow(2,53);var a={encode:function(e){var t,r=new ArrayBuffer(256),a=new DataView(r),s=0;function u(e){for(var n=r.byteLength,o=s+e;n<o;)n*=2;if(n!==r.byteLength){var i=a;r=new ArrayBuffer(n),a=new DataView(r);for(var u=s+3>>2,c=0;c<u;++c)a.setUint32(4*c,i.getUint32(4*c))}return t=e,a}function c(){s+=t}function l(e){c(u(1).setUint8(s,e))}function p(e){for(var t=u(e.length),n=0;n<e.length;++n)t.setUint8(s+n,e[n]);c()}function f(e,t){t<24?l(e<<5|t):t<256?(l(e<<5|24),l(t)):t<65536?(l(e<<5|25),function(e){c(u(2).setUint16(s,e))}(t)):t<4294967296?(l(e<<5|26),function(e){c(u(4).setUint32(s,e))}(t)):(l(e<<5|27),function(e){var t=e%o,n=(e-t)/o,r=u(8);r.setUint32(s,n),r.setUint32(s+4,t),c()}(t))}if(function e(t){var r;if(!1===t)return l(244);if(!0===t)return l(245);if(null===t)return l(246);if(t===n)return l(247);switch(typeof t){case"number":if(Math.floor(t)===t){if(0<=t&&t<=i)return f(0,t);if(-i<=t&&t<0)return f(1,-(t+1))}return l(251),function(e){c(u(8).setFloat64(s,e))}(t);case"string":var o=[];for(r=0;r<t.length;++r){var a=t.charCodeAt(r);a<128?o.push(a):a<2048?(o.push(192|a>>6),o.push(128|63&a)):a<55296?(o.push(224|a>>12),o.push(128|a>>6&63),o.push(128|63&a)):(a=(1023&a)<<10,a|=1023&t.charCodeAt(++r),a+=65536,o.push(240|a>>18),o.push(128|a>>12&63),o.push(128|a>>6&63),o.push(128|63&a))}return f(3,o.length),p(o);default:var h;if(Array.isArray(t))for(f(4,h=t.length),r=0;r<h;++r)e(t[r]);else if(t instanceof Uint8Array)f(2,t.length),p(t);else{var d=Object.keys(t);for(f(5,h=d.length),r=0;r<h;++r){var y=d[r];e(y),e(t[y])}}}}(e),"slice"in r)return r.slice(0,s);for(var h=new ArrayBuffer(s),d=new DataView(h),y=0;y<s;++y)d.setUint8(y,a.getUint8(y));return h},decode:function(e,t,i){var a=new DataView(e),s=0;function u(e,t){return s+=t,e}function c(t){return u(new Uint8Array(e,s,t),t)}function l(){return u(a.getUint8(s),1)}function p(){return u(a.getUint16(s),2)}function f(){return u(a.getUint32(s),4)}function h(){return 255===a.getUint8(s)&&(s+=1,!0)}function d(e){if(e<24)return e;if(24===e)return l();if(25===e)return p();if(26===e)return f();if(27===e)return f()*o+f();if(31===e)return-1;throw"Invalid length encoding"}function y(e){var t=l();if(255===t)return-1;var n=d(31&t);if(n<0||t>>5!==e)throw"Invalid indefinite length element";return n}function g(e,t){for(var n=0;n<t;++n){var r=l();128&r&&(r<224?(r=(31&r)<<6|63&l(),t-=1):r<240?(r=(15&r)<<12|(63&l())<<6|63&l(),t-=2):(r=(15&r)<<18|(63&l())<<12|(63&l())<<6|63&l(),t-=3)),r<65536?e.push(r):(r-=65536,e.push(55296|r>>10),e.push(56320|1023&r))}}"function"!=typeof t&&(t=function(e){return e}),"function"!=typeof i&&(i=function(){return n});var b=function e(){var o,f,b=l(),v=b>>5,m=31&b;if(7===v)switch(m){case 25:return function(){var e=new ArrayBuffer(4),t=new DataView(e),n=p(),o=32768&n,i=31744&n,a=1023&n;if(31744===i)i=261120;else if(0!==i)i+=114688;else if(0!==a)return a*r;return t.setUint32(0,o<<16|i<<13|a<<13),t.getFloat32(0)}();case 26:return u(a.getFloat32(s),4);case 27:return u(a.getFloat64(s),8)}if((f=d(m))<0&&(v<2||6<v))throw"Invalid length";switch(v){case 0:return f;case 1:return-1-f;case 2:if(f<0){for(var _=[],O=0;(f=y(v))>=0;)O+=f,_.push(c(f));var S=new Uint8Array(O),P=0;for(o=0;o<_.length;++o)S.set(_[o],P),P+=_[o].length;return S}return c(f);case 3:var w=[];if(f<0)for(;(f=y(v))>=0;)g(w,f);else g(w,f);return String.fromCharCode.apply(null,w);case 4:var E;if(f<0)for(E=[];!h();)E.push(e());else for(E=new Array(f),o=0;o<f;++o)E[o]=e();return E;case 5:var T={};for(o=0;o<f||f<0&&!h();++o){T[e()]=e()}return T;case 6:return t(e(),f);case 7:switch(f){case 20:return!1;case 21:return!0;case 22:return null;case 23:return n;default:return i(f)}}}();if(s!==e.byteLength)throw"Remaining bytes";return b}};e.exports?e.exports=a:t.CBOR||(t.CBOR=a)}(c)}(p);var f=p.exports,h={exports:{}};
!function(e,t){!function(e){var t="0.1.0",n={3:/^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,4:/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,5:/^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,all:/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i};function r(){var e,t,n="";for(e=0;e<32;e++)t=16*Math.random()|0,8!==e&&12!==e&&16!==e&&20!==e||(n+="-"),n+=(12===e?4:16===e?3&t|8:t).toString(16);return n}function o(e,t){var r=n[t||"all"];return r&&r.test(e)||!1}r.isUUID=o,r.VERSION=t,e.uuid=r,e.isUUID=o}(t),null!==e&&(e.exports=t.uuid)}(h,h.exports);var d=h.exports,y=function(){return d.uuid?d.uuid():d()},g=function(){function e(e){var t,n,r,o=e.setup;if(this._PNSDKSuffix={},this.instanceId="pn-".concat(y()),this.secretKey=o.secretKey||o.secret_key,this.subscribeKey=o.subscribeKey||o.subscribe_key,this.publishKey=o.publishKey||o.publish_key,this.sdkName=o.sdkName,this.sdkFamily=o.sdkFamily,this.partnerId=o.partnerId,this.setAuthKey(o.authKey),this.cryptoModule=o.cryptoModule,this.setFilterExpression(o.filterExpression),"string"!=typeof o.origin&&!Array.isArray(o.origin)&&void 0!==o.origin)throw new Error("Origin must be either undefined, a string or a list of strings.");if(this.origin=o.origin||Array.from({length:20},(function(e,t){return"ps".concat(t+1,".pndsn.com")})),this.secure=o.ssl||!1,this.restore=o.restore||!1,this.proxy=o.proxy,this.keepAlive=o.keepAlive,this.keepAliveSettings=o.keepAliveSettings,this.autoNetworkDetection=o.autoNetworkDetection||!1,this.dedupeOnSubscribe=o.dedupeOnSubscribe||!1,this.maximumCacheSize=o.maximumCacheSize||100,this.customEncrypt=o.customEncrypt,this.customDecrypt=o.customDecrypt,this.fileUploadPublishRetryLimit=null!==(t=o.fileUploadPublishRetryLimit)&&void 0!==t?t:5,this.useRandomIVs=null===(n=o.useRandomIVs)||void 0===n||n,this.enableSubscribeBeta=null!==(r=o.enableSubscribeBeta)&&void 0!==r&&r,"undefined"!=typeof location&&"https:"===location.protocol&&(this.secure=!0),this.logVerbosity=o.logVerbosity||!1,this.suppressLeaveEvents=o.suppressLeaveEvents||!1,this.announceFailedHeartbeats=o.announceFailedHeartbeats||!0,this.announceSuccessfulHeartbeats=o.announceSuccessfulHeartbeats||!1,this.useInstanceId=o.useInstanceId||!1,this.useRequestId=o.useRequestId||!1,this.requestMessageCountThreshold=o.requestMessageCountThreshold,this.setTransactionTimeout(o.transactionalRequestTimeout||15e3),this.setSubscribeTimeout(o.subscribeRequestTimeout||31e4),this.setSendBeaconConfig(o.useSendBeacon||!0),o.presenceTimeout?this.setPresenceTimeout(o.presenceTimeout):this._presenceTimeout=300,null!=o.heartbeatInterval&&this.setHeartbeatInterval(o.heartbeatInterval),"string"==typeof o.userId){if("string"==typeof o.uuid)throw new Error("Only one of the following configuration options has to be provided: `uuid` or `userId`");this.setUserId(o.userId)}else{if("string"!=typeof o.uuid)throw new Error("One of the following configuration options has to be provided: `uuid` or `userId`");this.setUUID(o.uuid)}this.setCipherKey(o.cipherKey,o)}return e.prototype.getAuthKey=function(){return this.authKey},e.prototype.setAuthKey=function(e){return this.authKey=e,this},e.prototype.setCipherKey=function(e,t,n){var r;return this.cipherKey=e,this.cipherKey&&(this.cryptoModule=null!==(r=t.cryptoModule)&&void 0!==r?r:t.initCryptoModule({cipherKey:this.cipherKey,useRandomIVs:this.useRandomIVs}),n&&(n.cryptoModule=this.cryptoModule)),this},e.prototype.getUUID=function(){return this.UUID},e.prototype.setUUID=function(e){if(!e||"string"!=typeof e||0===e.trim().length)throw new Error("Missing uuid parameter. Provide a valid string uuid");return this.UUID=e,this},e.prototype.getUserId=function(){return this.UUID},e.prototype.setUserId=function(e){if(!e||"string"!=typeof e||0===e.trim().length)throw new Error("Missing or invalid userId parameter. Provide a valid string userId");return this.UUID=e,this},e.prototype.getFilterExpression=function(){return this.filterExpression},e.prototype.setFilterExpression=function(e){return this.filterExpression=e,this},e.prototype.getPresenceTimeout=function(){return this._presenceTimeout},e.prototype.setPresenceTimeout=function(e){return e>=20?this._presenceTimeout=e:(this._presenceTimeout=20,console.log("WARNING: Presence timeout is less than the minimum. Using minimum value: ",this._presenceTimeout)),this.setHeartbeatInterval(this._presenceTimeout/2-1),this},e.prototype.setProxy=function(e){this.proxy=e},e.prototype.getHeartbeatInterval=function(){return this._heartbeatInterval},e.prototype.setHeartbeatInterval=function(e){return this._heartbeatInterval=e,this},e.prototype.getSubscribeTimeout=function(){return this._subscribeRequestTimeout},e.prototype.setSubscribeTimeout=function(e){return this._subscribeRequestTimeout=e,this},e.prototype.getTransactionTimeout=function(){return this._transactionalRequestTimeout},e.prototype.setTransactionTimeout=function(e){return this._transactionalRequestTimeout=e,this},e.prototype.isSendBeaconEnabled=function(){return this._useSendBeacon},e.prototype.setSendBeaconConfig=function(e){return this._useSendBeacon=e,this},e.prototype.getVersion=function(){return"7.4.0"},e.prototype._addPnsdkSuffix=function(e,t){this._PNSDKSuffix[e]=t},e.prototype._getPnsdkSuffix=function(e){var t=this;return Object.keys(this._PNSDKSuffix).reduce((function(n,r){return n+e+t._PNSDKSuffix[r]}),"")},e}();function b(e){var t=e.replace(/==?$/,""),n=Math.floor(t.length/4*3),r=new ArrayBuffer(n),o=new Uint8Array(r),i=0;function a(){var e=t.charAt(i++),n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(e);if(-1===n)throw new Error("Illegal character at ".concat(i,": ").concat(t.charAt(i-1)));return n}for(var s=0;s<n;s+=3){var u=a(),c=a(),l=a(),p=a(),f=(63&u)<<2|c>>4,h=(15&c)<<4|l>>2,d=(3&l)<<6|p>>0;o[s]=f,64!=l&&(o[s+1]=h),64!=p&&(o[s+2]=d)}return r}function v(e){for(var t,n="",r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=new Uint8Array(e),i=o.byteLength,a=i%3,s=i-a,u=0;u<s;u+=3)n+=r[(16515072&(t=o[u]<<16|o[u+1]<<8|o[u+2]))>>18]+r[(258048&t)>>12]+r[(4032&t)>>6]+r[63&t];return 1==a?n+=r[(252&(t=o[s]))>>2]+r[(3&t)<<4]+"==":2==a&&(n+=r[(64512&(t=o[s]<<8|o[s+1]))>>10]+r[(1008&t)>>4]+r[(15&t)<<2]+"="),n}var m,_,O,S,P,w=w||function(e,t){var n={},r=n.lib={},o=function(){},i=r.Base={extend:function(e){o.prototype=this;var t=new o;return e&&t.mixIn(e),t.hasOwnProperty("init")||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var e=this.extend();return e.init.apply(e,arguments),e},init:function(){},mixIn:function(e){for(var t in e)e.hasOwnProperty(t)&&(this[t]=e[t]);e.hasOwnProperty("toString")&&(this.toString=e.toString)},clone:function(){return this.init.prototype.extend(this)}},a=r.WordArray=i.extend({init:function(e,t){e=this.words=e||[],this.sigBytes=null!=t?t:4*e.length},toString:function(e){return(e||u).stringify(this)},concat:function(e){var t=this.words,n=e.words,r=this.sigBytes;if(e=e.sigBytes,this.clamp(),r%4)for(var o=0;o<e;o++)t[r+o>>>2]|=(n[o>>>2]>>>24-o%4*8&255)<<24-(r+o)%4*8;else if(65535<n.length)for(o=0;o<e;o+=4)t[r+o>>>2]=n[o>>>2];else t.push.apply(t,n);return this.sigBytes+=e,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n=[],r=0;r<t;r+=4)n.push(4294967296*e.random()|0);return new a.init(n,t)}}),s=n.enc={},u=s.Hex={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r<e;r++){var o=t[r>>>2]>>>24-r%4*8&255;n.push((o>>>4).toString(16)),n.push((15&o).toString(16))}return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r+=2)n[r>>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},c=s.Latin1={stringify:function(e){var t=e.words;e=e.sigBytes;for(var n=[],r=0;r<e;r++)n.push(String.fromCharCode(t[r>>>2]>>>24-r%4*8&255));return n.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r<t;r++)n[r>>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},p=r.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,o=n.sigBytes,i=this.blockSize,s=o/(4*i);if(t=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,o=e.min(4*t,o),t){for(var u=0;u<t;u+=i)this._doProcessBlock(r,u);u=r.splice(0,t),n.sigBytes-=o}return new a.init(u,o)},clone:function(){var e=i.clone.call(this);return e._data=this._data.clone(),e},_minBufferSize:0});r.Hasher=p.extend({cfg:i.extend(),init:function(e){this.cfg=this.cfg.extend(e),this.reset()},reset:function(){p.reset.call(this),this._doReset()},update:function(e){return this._append(e),this._process(),this},finalize:function(e){return e&&this._append(e),this._doFinalize()},blockSize:16,_createHelper:function(e){return function(t,n){return new e.init(n).finalize(t)}},_createHmacHelper:function(e){return function(t,n){return new f.HMAC.init(e,n).finalize(t)}}});var f=n.algo={};return n}(Math);!function(e){for(var t=w,n=(o=t.lib).WordArray,r=o.Hasher,o=t.algo,i=[],a=[],s=function(e){return 4294967296*(e-(0|e))|0},u=2,c=0;64>c;){var l;e:{l=u;for(var p=e.sqrt(l),f=2;f<=p;f++)if(!(l%f)){l=!1;break e}l=!0}l&&(8>c&&(i[c]=s(e.pow(u,.5))),a[c]=s(e.pow(u,1/3)),c++),u++}var h=[];o=o.SHA256=r.extend({_doReset:function(){this._hash=new n.init(i.slice(0))},_doProcessBlock:function(e,t){for(var n=this._hash.words,r=n[0],o=n[1],i=n[2],s=n[3],u=n[4],c=n[5],l=n[6],p=n[7],f=0;64>f;f++){if(16>f)h[f]=0|e[t+f];else{var d=h[f-15],y=h[f-2];h[f]=((d<<25|d>>>7)^(d<<14|d>>>18)^d>>>3)+h[f-7]+((y<<15|y>>>17)^(y<<13|y>>>19)^y>>>10)+h[f-16]}d=p+((u<<26|u>>>6)^(u<<21|u>>>11)^(u<<7|u>>>25))+(u&c^~u&l)+a[f]+h[f],y=((r<<30|r>>>2)^(r<<19|r>>>13)^(r<<10|r>>>22))+(r&o^r&i^o&i),p=l,l=c,c=u,u=s+d|0,s=i,i=o,o=r,r=d+y|0}n[0]=n[0]+r|0,n[1]=n[1]+o|0,n[2]=n[2]+i|0,n[3]=n[3]+s|0,n[4]=n[4]+u|0,n[5]=n[5]+c|0,n[6]=n[6]+l|0,n[7]=n[7]+p|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;return n[o>>>5]|=128<<24-o%32,n[14+(o+64>>>9<<4)]=e.floor(r/4294967296),n[15+(o+64>>>9<<4)]=r,t.sigBytes=4*n.length,this._process(),this._hash},clone:function(){var e=r.clone.call(this);return e._hash=this._hash.clone(),e}});t.SHA256=r._createHelper(o),t.HmacSHA256=r._createHmacHelper(o)}(Math),_=(m=w).enc.Utf8,m.algo.HMAC=m.lib.Base.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=_.parse(t));var n=e.blockSize,r=4*n;t.sigBytes>r&&(t=e.finalize(t)),t.clamp();for(var o=this._oKey=t.clone(),i=this._iKey=t.clone(),a=o.words,s=i.words,u=0;u<n;u++)a[u]^=1549556828,s[u]^=909522486;o.sigBytes=i.sigBytes=r,this.reset()},reset:function(){var e=this._hasher;e.reset(),e.update(this._iKey)},update:function(e){return this._hasher.update(e),this},finalize:function(e){var t=this._hasher;return e=t.finalize(e),t.reset(),t.finalize(this._oKey.clone().concat(e))}}),S=(O=w).lib.WordArray,O.enc.Base64={stringify:function(e){var t=e.words,n=e.sigBytes,r=this._map;e.clamp(),e=[];for(var o=0;o<n;o+=3)for(var i=(t[o>>>2]>>>24-o%4*8&255)<<16|(t[o+1>>>2]>>>24-(o+1)%4*8&255)<<8|t[o+2>>>2]>>>24-(o+2)%4*8&255,a=0;4>a&&o+.75*a<n;a++)e.push(r.charAt(i>>>6*(3-a)&63));if(t=r.charAt(64))for(;e.length%4;)e.push(t);return e.join("")},parse:function(e){var t=e.length,n=this._map;(r=n.charAt(64))&&-1!=(r=e.indexOf(r))&&(t=r);for(var r=[],o=0,i=0;i<t;i++)if(i%4){var a=n.indexOf(e.charAt(i-1))<<i%4*2,s=n.indexOf(e.charAt(i))>>>6-i%4*2;r[o>>>2]|=(a|s)<<24-o%4*8,o++}return S.create(r,o)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},function(e){function t(e,t,n,r,o,i,a){return((e=e+(t&n|~t&r)+o+a)<<i|e>>>32-i)+t}function n(e,t,n,r,o,i,a){return((e=e+(t&r|n&~r)+o+a)<<i|e>>>32-i)+t}function r(e,t,n,r,o,i,a){return((e=e+(t^n^r)+o+a)<<i|e>>>32-i)+t}function o(e,t,n,r,o,i,a){return((e=e+(n^(t|~r))+o+a)<<i|e>>>32-i)+t}for(var i=w,a=(u=i.lib).WordArray,s=u.Hasher,u=i.algo,c=[],l=0;64>l;l++)c[l]=4294967296*e.abs(e.sin(l+1))|0;u=u.MD5=s.extend({_doReset:function(){this._hash=new a.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(e,i){for(var a=0;16>a;a++){var s=e[u=i+a];e[u]=16711935&(s<<8|s>>>24)|4278255360&(s<<24|s>>>8)}a=this._hash.words;var u=e[i+0],l=(s=e[i+1],e[i+2]),p=e[i+3],f=e[i+4],h=e[i+5],d=e[i+6],y=e[i+7],g=e[i+8],b=e[i+9],v=e[i+10],m=e[i+11],_=e[i+12],O=e[i+13],S=e[i+14],P=e[i+15],w=t(w=a[0],A=a[1],T=a[2],E=a[3],u,7,c[0]),E=t(E,w,A,T,s,12,c[1]),T=t(T,E,w,A,l,17,c[2]),A=t(A,T,E,w,p,22,c[3]);w=t(w,A,T,E,f,7,c[4]),E=t(E,w,A,T,h,12,c[5]),T=t(T,E,w,A,d,17,c[6]),A=t(A,T,E,w,y,22,c[7]),w=t(w,A,T,E,g,7,c[8]),E=t(E,w,A,T,b,12,c[9]),T=t(T,E,w,A,v,17,c[10]),A=t(A,T,E,w,m,22,c[11]),w=t(w,A,T,E,_,7,c[12]),E=t(E,w,A,T,O,12,c[13]),T=t(T,E,w,A,S,17,c[14]),w=n(w,A=t(A,T,E,w,P,22,c[15]),T,E,s,5,c[16]),E=n(E,w,A,T,d,9,c[17]),T=n(T,E,w,A,m,14,c[18]),A=n(A,T,E,w,u,20,c[19]),w=n(w,A,T,E,h,5,c[20]),E=n(E,w,A,T,v,9,c[21]),T=n(T,E,w,A,P,14,c[22]),A=n(A,T,E,w,f,20,c[23]),w=n(w,A,T,E,b,5,c[24]),E=n(E,w,A,T,S,9,c[25]),T=n(T,E,w,A,p,14,c[26]),A=n(A,T,E,w,g,20,c[27]),w=n(w,A,T,E,O,5,c[28]),E=n(E,w,A,T,l,9,c[29]),T=n(T,E,w,A,y,14,c[30]),w=r(w,A=n(A,T,E,w,_,20,c[31]),T,E,h,4,c[32]),E=r(E,w,A,T,g,11,c[33]),T=r(T,E,w,A,m,16,c[34]),A=r(A,T,E,w,S,23,c[35]),w=r(w,A,T,E,s,4,c[36]),E=r(E,w,A,T,f,11,c[37]),T=r(T,E,w,A,y,16,c[38]),A=r(A,T,E,w,v,23,c[39]),w=r(w,A,T,E,O,4,c[40]),E=r(E,w,A,T,u,11,c[41]),T=r(T,E,w,A,p,16,c[42]),A=r(A,T,E,w,d,23,c[43]),w=r(w,A,T,E,b,4,c[44]),E=r(E,w,A,T,_,11,c[45]),T=r(T,E,w,A,P,16,c[46]),w=o(w,A=r(A,T,E,w,l,23,c[47]),T,E,u,6,c[48]),E=o(E,w,A,T,y,10,c[49]),T=o(T,E,w,A,S,15,c[50]),A=o(A,T,E,w,h,21,c[51]),w=o(w,A,T,E,_,6,c[52]),E=o(E,w,A,T,p,10,c[53]),T=o(T,E,w,A,v,15,c[54]),A=o(A,T,E,w,s,21,c[55]),w=o(w,A,T,E,g,6,c[56]),E=o(E,w,A,T,P,10,c[57]),T=o(T,E,w,A,d,15,c[58]),A=o(A,T,E,w,O,21,c[59]),w=o(w,A,T,E,f,6,c[60]),E=o(E,w,A,T,m,10,c[61]),T=o(T,E,w,A,l,15,c[62]),A=o(A,T,E,w,b,21,c[63]);a[0]=a[0]+w|0,a[1]=a[1]+A|0,a[2]=a[2]+T|0,a[3]=a[3]+E|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;n[o>>>5]|=128<<24-o%32;var i=e.floor(r/4294967296);for(n[15+(o+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),n[14+(o+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(n.length+1),this._process(),n=(t=this._hash).words,r=0;4>r;r++)o=n[r],n[r]=16711935&(o<<8|o>>>24)|4278255360&(o<<24|o>>>8);return t},clone:function(){var e=s.clone.call(this);return e._hash=this._hash.clone(),e}}),i.MD5=s._createHelper(u),i.HmacMD5=s._createHmacHelper(u)}(Math),function(){var e,t=w,n=(e=t.lib).Base,r=e.WordArray,o=(e=t.algo).EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:e.MD5,iterations:1}),init:function(e){this.cfg=this.cfg.extend(e)},compute:function(e,t){for(var n=(s=this.cfg).hasher.create(),o=r.create(),i=o.words,a=s.keySize,s=s.iterations;i.length<a;){u&&n.update(u);var u=n.update(e).finalize(t);n.reset();for(var c=1;c<s;c++)u=n.finalize(u),n.reset();o.concat(u)}return o.sigBytes=4*a,o}});t.EvpKDF=function(e,t,n){return o.create(n).compute(e,t)}}(),w.lib.Cipher||function(e){var t=(h=w).lib,n=t.Base,r=t.WordArray,o=t.BufferedBlockAlgorithm,i=h.enc.Base64,a=h.algo.EvpKDF,s=t.Cipher=o.extend({cfg:n.extend(),createEncryptor:function(e,t){return this.create(this._ENC_XFORM_MODE,e,t)},createDecryptor:function(e,t){return this.create(this._DEC_XFORM_MODE,e,t)},init:function(e,t,n){this.cfg=this.cfg.extend(n),this._xformMode=e,this._key=t,this.reset()},reset:function(){o.reset.call(this),this._doReset()},process:function(e){return this._append(e),this._process()},finalize:function(e){return e&&this._append(e),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(e){return{encrypt:function(t,n,r){return("string"==typeof n?d:f).encrypt(e,t,n,r)},decrypt:function(t,n,r){return("string"==typeof n?d:f).decrypt(e,t,n,r)}}}});t.StreamCipher=s.extend({_doFinalize:function(){return this._process(!0)},blockSize:1});var u=h.mode={},c=function(e,t,n){var r=this._iv;r?this._iv=undefined:r=this._prevBlock;for(var o=0;o<n;o++)e[t+o]^=r[o]},l=(t.BlockCipherMode=n.extend({createEncryptor:function(e,t){return this.Encryptor.create(e,t)},createDecryptor:function(e,t){return this.Decryptor.create(e,t)},init:function(e,t){this._cipher=e,this._iv=t}})).extend();l.Encryptor=l.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize;c.call(this,e,t,r),n.encryptBlock(e,t),this._prevBlock=e.slice(t,t+r)}}),l.Decryptor=l.extend({processBlock:function(e,t){var n=this._cipher,r=n.blockSize,o=e.slice(t,t+r);n.decryptBlock(e,t),c.call(this,e,t,r),this._prevBlock=o}}),u=u.CBC=l,l=(h.pad={}).Pkcs7={pad:function(e,t){for(var n,o=(n=(n=4*t)-e.sigBytes%n)<<24|n<<16|n<<8|n,i=[],a=0;a<n;a+=4)i.push(o);n=r.create(i,n),e.concat(n)},unpad:function(e){e.sigBytes-=255&e.words[e.sigBytes-1>>>2]}},t.BlockCipher=s.extend({cfg:s.cfg.extend({mode:u,padding:l}),reset:function(){s.reset.call(this);var e=(t=this.cfg).iv,t=t.mode;if(this._xformMode==this._ENC_XFORM_MODE)var n=t.createEncryptor;else n=t.createDecryptor,this._minBufferSize=1;this._mode=n.call(t,this,e&&e.words)},_doProcessBlock:function(e,t){this._mode.processBlock(e,t)},_doFinalize:function(){var e=this.cfg.padding;if(this._xformMode==this._ENC_XFORM_MODE){e.pad(this._data,this.blockSize);var t=this._process(!0)}else t=this._process(!0),e.unpad(t);return t},blockSize:4});var p=t.CipherParams=n.extend({init:function(e){this.mixIn(e)},toString:function(e){return(e||this.formatter).stringify(this)}}),f=(u=(h.format={}).OpenSSL={stringify:function(e){var t=e.ciphertext;return((e=e.salt)?r.create([1398893684,1701076831]).concat(e).concat(t):t).toString(i)},parse:function(e){var t=(e=i.parse(e)).words;if(1398893684==t[0]&&1701076831==t[1]){var n=r.create(t.slice(2,4));t.splice(0,4),e.sigBytes-=16}return p.create({ciphertext:e,salt:n})}},t.SerializableCipher=n.extend({cfg:n.extend({format:u}),encrypt:function(e,t,n,r){r=this.cfg.extend(r);var o=e.createEncryptor(n,r);return t=o.finalize(t),o=o.cfg,p.create({ciphertext:t,key:n,iv:o.iv,algorithm:e,mode:o.mode,padding:o.padding,blockSize:e.blockSize,formatter:r.format})},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),e.createDecryptor(n,r).finalize(t.ciphertext)},_parse:function(e,t){return"string"==typeof e?t.parse(e,this):e}})),h=(h.kdf={}).OpenSSL={execute:function(e,t,n,o){return o||(o=r.random(8)),e=a.create({keySize:t+n}).compute(e,o),n=r.create(e.words.slice(t),4*n),e.sigBytes=4*t,p.create({key:e,iv:n,salt:o})}},d=t.PasswordBasedCipher=f.extend({cfg:f.cfg.extend({kdf:h}),encrypt:function(e,t,n,r){return n=(r=this.cfg.extend(r)).kdf.execute(n,e.keySize,e.ivSize),r.iv=n.iv,(e=f.encrypt.call(this,e,t,n.key,r)).mixIn(n),e},decrypt:function(e,t,n,r){return r=this.cfg.extend(r),t=this._parse(t,r.format),n=r.kdf.execute(n,e.keySize,e.ivSize,t.salt),r.iv=n.iv,f.decrypt.call(this,e,t,n.key,r)}})}(),function(){for(var e=w,t=e.lib.BlockCipher,n=e.algo,r=[],o=[],i=[],a=[],s=[],u=[],c=[],l=[],p=[],f=[],h=[],d=0;256>d;d++)h[d]=128>d?d<<1:d<<1^283;var y=0,g=0;for(d=0;256>d;d++){var b=(b=g^g<<1^g<<2^g<<3^g<<4)>>>8^255&b^99;r[y]=b,o[b]=y;var v=h[y],m=h[v],_=h[m],O=257*h[b]^16843008*b;i[y]=O<<24|O>>>8,a[y]=O<<16|O>>>16,s[y]=O<<8|O>>>24,u[y]=O,O=16843009*_^65537*m^257*v^16843008*y,c[b]=O<<24|O>>>8,l[b]=O<<16|O>>>16,p[b]=O<<8|O>>>24,f[b]=O,y?(y=v^h[h[h[_^v]]],g^=h[h[g]]):y=g=1}var S=[0,1,2,4,8,16,32,64,128,27,54];n=n.AES=t.extend({_doReset:function(){for(var e=(n=this._key).words,t=n.sigBytes/4,n=4*((this._nRounds=t+6)+1),o=this._keySchedule=[],i=0;i<n;i++)if(i<t)o[i]=e[i];else{var a=o[i-1];i%t?6<t&&4==i%t&&(a=r[a>>>24]<<24|r[a>>>16&255]<<16|r[a>>>8&255]<<8|r[255&a]):(a=r[(a=a<<8|a>>>24)>>>24]<<24|r[a>>>16&255]<<16|r[a>>>8&255]<<8|r[255&a],a^=S[i/t|0]<<24),o[i]=o[i-t]^a}for(e=this._invKeySchedule=[],t=0;t<n;t++)i=n-t,a=t%4?o[i]:o[i-4],e[t]=4>t||4>=i?a:c[r[a>>>24]]^l[r[a>>>16&255]]^p[r[a>>>8&255]]^f[r[255&a]]},encryptBlock:function(e,t){this._doCryptBlock(e,t,this._keySchedule,i,a,s,u,r)},decryptBlock:function(e,t){var n=e[t+1];e[t+1]=e[t+3],e[t+3]=n,this._doCryptBlock(e,t,this._invKeySchedule,c,l,p,f,o),n=e[t+1],e[t+1]=e[t+3],e[t+3]=n},_doCryptBlock:function(e,t,n,r,o,i,a,s){for(var u=this._nRounds,c=e[t]^n[0],l=e[t+1]^n[1],p=e[t+2]^n[2],f=e[t+3]^n[3],h=4,d=1;d<u;d++){var y=r[c>>>24]^o[l>>>16&255]^i[p>>>8&255]^a[255&f]^n[h++],g=r[l>>>24]^o[p>>>16&255]^i[f>>>8&255]^a[255&c]^n[h++],b=r[p>>>24]^o[f>>>16&255]^i[c>>>8&255]^a[255&l]^n[h++];f=r[f>>>24]^o[c>>>16&255]^i[l>>>8&255]^a[255&p]^n[h++],c=y,l=g,p=b}y=(s[c>>>24]<<24|s[l>>>16&255]<<16|s[p>>>8&255]<<8|s[255&f])^n[h++],g=(s[l>>>24]<<24|s[p>>>16&255]<<16|s[f>>>8&255]<<8|s[255&c])^n[h++],b=(s[p>>>24]<<24|s[f>>>16&255]<<16|s[c>>>8&255]<<8|s[255&l])^n[h++],f=(s[f>>>24]<<24|s[c>>>16&255]<<16|s[l>>>8&255]<<8|s[255&p])^n[h++],e[t]=y,e[t+1]=g,e[t+2]=b,e[t+3]=f},keySize:8});e.AES=t._createHelper(n)}(),w.mode.ECB=((P=w.lib.BlockCipherMode.extend()).Encryptor=P.extend({processBlock:function(e,t){this._cipher.encryptBlock(e,t)}}),P.Decryptor=P.extend({processBlock:function(e,t){this._cipher.decryptBlock(e,t)}}),P);var E=w;function T(e){var t,n=[];for(t=0;t<e.length;t+=1)n[t/4|0]|=e[t]<<24-8*t;return E.lib.WordArray.create(n,e.length)}var A=function(){function e(e){var t=e.config;this._config=t,this._iv="0123456789012345",this._allowedKeyEncodings=["hex","utf8","base64","binary"],this._allowedKeyLengths=[128,256],this._allowedModes=["ecb","cbc"],this._defaultOptions={encryptKey:!0,keyEncoding:"utf8",keyLength:256,mode:"cbc"}}return e.prototype.HMACSHA256=function(e){return E.HmacSHA256(e,this._config.secretKey).toString(E.enc.Base64)},e.prototype.SHA256=function(e){return E.SHA256(e).toString(E.enc.Hex)},e.prototype._parseOptions=function(e){var t=e||{};return t.hasOwnProperty("encryptKey")||(t.encryptKey=this._defaultOptions.encryptKey),t.hasOwnProperty("keyEncoding")||(t.keyEncoding=this._defaultOptions.keyEncoding),t.hasOwnProperty("keyLength")||(t.keyLength=this._defaultOptions.keyLength),t.hasOwnProperty("mode")||(t.mode=this._defaultOptions.mode),-1===this._allowedKeyEncodings.indexOf(t.keyEncoding.toLowerCase())&&(t.keyEncoding=this._defaultOptions.keyEncoding),-1===this._allowedKeyLengths.indexOf(parseInt(t.keyLength,10))&&(t.keyLength=this._defaultOptions.keyLength),-1===this._allowedModes.indexOf(t.mode.toLowerCase())&&(t.mode=this._defaultOptions.mode),t},e.prototype._decodeKey=function(e,t){return"base64"===t.keyEncoding?E.enc.Base64.parse(e):"hex"===t.keyEncoding?E.enc.Hex.parse(e):e},e.prototype._getPaddedKey=function(e,t){return e=this._decodeKey(e,t),t.encryptKey?E.enc.Utf8.parse(this.SHA256(e).slice(0,32)):e},e.prototype._getMode=function(e){return"ecb"===e.mode?E.mode.ECB:E.mode.CBC},e.prototype._getIV=function(e){return"cbc"===e.mode?E.enc.Utf8.parse(this._iv):null},e.prototype._getRandomIV=function(){return E.lib.WordArray.random(16)},e.prototype.encrypt=function(e,t,n){return this._config.customEncrypt?this._config.customEncrypt(e):this.pnEncrypt(e,t,n)},e.prototype.decrypt=function(e,t,n){return this._config.customDecrypt?this._config.customDecrypt(e):this.pnDecrypt(e,t,n)},e.prototype.pnEncrypt=function(e,t,n){if(!t&&!this._config.cipherKey)return e;n=this._parseOptions(n);var r=this._getMode(n),o=this._getPaddedKey(t||this._config.cipherKey,n);if(this._config.useRandomIVs){var i=this._getRandomIV(),a=E.AES.encrypt(e,o,{iv:i,mode:r}).ciphertext;return i.clone().concat(a.clone()).toString(E.enc.Base64)}var s=this._getIV(n);return E.AES.encrypt(e,o,{iv:s,mode:r}).ciphertext.toString(E.enc.Base64)||e},e.prototype.pnDecrypt=function(e,t,n){if(!t&&!this._config.cipherKey)return e;n=this._parseOptions(n);var r=this._getMode(n),o=this._getPaddedKey(t||this._config.cipherKey,n);if(this._config.useRandomIVs){var i=T((u=new Uint8ClampedArray(b(e))).slice(0,16)),a=T(u.slice(16));try{var s=E.AES.decrypt({ciphertext:a},o,{iv:i,mode:r}).toString(E.enc.Utf8);return JSON.parse(s)}catch(e){return null}}else{i=this._getIV(n);try{var u=E.enc.Base64.parse(e);s=E.AES.decrypt({ciphertext:u},o,{iv:i,mode:r}).toString(E.enc.Utf8);return JSON.parse(s)}catch(e){return null}}},e}(),N=function(){function e(e){var t=e.timeEndpoint;this._timeEndpoint=t}return e.prototype.onReconnection=function(e){this._reconnectionCallback=e},e.prototype.startPolling=function(){this._timeTimer=setInterval(this._performTimeLoop.bind(this),3e3)},e.prototype.stopPolling=function(){clearInterval(this._timeTimer)},e.prototype._performTimeLoop=function(){var e=this;this._timeEndpoint((function(t){t.error||(clearInterval(e._timeTimer),e._reconnectionCallback())}))},e}(),k=function(){function e(e){var t=e.config;this.hashHistory=[],this._config=t}return e.prototype.getKey=function(e){var t=function(e){var t=0;if(0===e.length)return t;for(var n=0;n<e.length;n+=1)t=(t<<5)-t+e.charCodeAt(n),t&=t;return t}(JSON.stringify(e.payload)).toString(),n=e.publishMetaData.publishTimetoken;return"".concat(n,"-").concat(t)},e.prototype.isDuplicate=function(e){return this.hashHistory.includes(this.getKey(e))},e.prototype.addEntry=function(e){this.hashHistory.length>=this._config.maximumCacheSize&&this.hashHistory.shift(),this.hashHistory.push(this.getKey(e))},e.prototype.clearHistory=function(){this.hashHistory=[]},e}();function C(e){return encodeURIComponent(e).replace(/[!~*'()]/g,(function(e){return"%".concat(e.charCodeAt(0).toString(16).toUpperCase())}))}function j(e){return function(e){var t=[];return Object.keys(e).forEach((function(e){return t.push(e)})),t}(e).sort()}var M={signPamFromParams:function(e){return j(e).map((function(t){return"".concat(t,"=").concat(C(e[t]))})).join("&")},endsWith:function(e,t){return-1!==e.indexOf(t,this.length-t.length)},createPromise:function(){var e,t;return{promise:new Promise((function(n,r){e=n,t=r})),reject:t,fulfill:e}},encodeString:C,stringToArrayBuffer:function(e){for(var t=new ArrayBuffer(2*e.length),n=new Uint16Array(t),r=0,o=e.length;r<o;r++)n[r]=e.charCodeAt(r);return t}},R={PNNetworkUpCategory:"PNNetworkUpCategory",PNNetworkDownCategory:"PNNetworkDownCategory",PNNetworkIssuesCategory:"PNNetworkIssuesCategory",PNTimeoutCategory:"PNTimeoutCategory",PNBadRequestCategory:"PNBadRequestCategory",PNAccessDeniedCategory:"PNAccessDeniedCategory",PNUnknownCategory:"PNUnknownCategory",PNReconnectedCategory:"PNReconnectedCategory",PNConnectedCategory:"PNConnectedCategory",PNRequestMessageCountExceededCategory:"PNRequestMessageCountExceededCategory"},U=function(){function e(e){var t=e.subscribeEndpoint,n=e.leaveEndpoint,r=e.heartbeatEndpoint,o=e.setStateEndpoint,i=e.timeEndpoint,a=e.getFileUrl,s=e.config,u=e.crypto,c=e.listenerManager,l=e.cryptoModule;this._listenerManager=c,this._config=s,this._leaveEndpoint=n,this._heartbeatEndpoint=r,this._setStateEndpoint=o,this._subscribeEndpoint=t,this._getFileUrl=a,this._crypto=u,this._cryptoModule=l,this._channels={},this._presenceChannels={},this._heartbeatChannels={},this._heartbeatChannelGroups={},this._channelGroups={},this._presenceChannelGroups={},this._pendingChannelSubscriptions=[],this._pendingChannelGroupSubscriptions=[],this._currentTimetoken=0,this._lastTimetoken=0,this._storedTimetoken=null,this._subscriptionStatusAnnounced=!1,this._isOnline=!0,this._reconnectionManager=new N({timeEndpoint:i}),this._dedupingManager=new k({config:s}),this._cryptoModule&&(this._decoder=new TextDecoder)}return e.prototype.adaptStateChange=function(e,t){var n=this,r=e.state,o=e.channels,i=void 0===o?[]:o,a=e.channelGroups,s=void 0===a?[]:a,u=e.withHeartbeat,c=void 0!==u&&u;if(i.forEach((function(e){e in n._channels&&(n._channels[e].state=r)})),s.forEach((function(e){e in n._channelGroups&&(n._channelGroups[e].state=r)})),c){var l={};return i.forEach((function(e){return l[e]=r})),s.forEach((function(e){return l[e]=r})),this._heartbeatEndpoint({channels:i,channelGroups:s,state:l},t)}return this._setStateEndpoint({state:r,channels:i,channelGroups:s},t)},e.prototype.adaptPresenceChange=function(e){var t=this,n=e.connected,r=e.channels,o=void 0===r?[]:r,i=e.channelGroups,a=void 0===i?[]:i;n?(o.forEach((function(e){t._heartbeatChannels[e]={state:{}}})),a.forEach((function(e){t._heartbeatChannelGroups[e]={state:{}}}))):(o.forEach((function(e){e in t._heartbeatChannels&&delete t._heartbeatChannels[e]})),a.forEach((function(e){e in t._heartbeatChannelGroups&&delete t._heartbeatChannelGroups[e]})),!1===this._config.suppressLeaveEvents&&this._leaveEndpoint({channels:o,channelGroups:a},(function(e){t._listenerManager.announceStatus(e)}))),this.reconnect()},e.prototype.adaptSubscribeChange=function(e){var t=this,n=e.timetoken,r=e.channels,o=void 0===r?[]:r,i=e.channelGroups,a=void 0===i?[]:i,s=e.withPresence,u=void 0!==s&&s,c=e.withHeartbeats,l=void 0!==c&&c;this._config.subscribeKey&&""!==this._config.subscribeKey?(n&&(this._lastTimetoken=this._currentTimetoken,this._currentTimetoken=n),"0"!==this._currentTimetoken&&0!==this._currentTimetoken&&(this._storedTimetoken=this._currentTimetoken,this._currentTimetoken=0),o.forEach((function(e){t._channels[e]={state:{}},u&&(t._presenceChannels[e]={}),(l||t._config.getHeartbeatInterval())&&(t._heartbeatChannels[e]={}),t._pendingChannelSubscriptions.push(e)})),a.forEach((function(e){t._channelGroups[e]={state:{}},u&&(t._presenceChannelGroups[e]={}),(l||t._config.getHeartbeatInterval())&&(t._heartbeatChannelGroups[e]={}),t._pendingChannelGroupSubscriptions.push(e)})),this._subscriptionStatusAnnounced=!1,this.reconnect()):console&&console.log&&console.log("subscribe key missing; aborting subscribe")},e.prototype.adaptUnsubscribeChange=function(e,t){var n=this,r=e.channels,o=void 0===r?[]:r,i=e.channelGroups,a=void 0===i?[]:i,s=[],u=[];o.forEach((function(e){e in n._channels&&(delete n._channels[e],s.push(e),e in n._heartbeatChannels&&delete n._heartbeatChannels[e]),e in n._presenceChannels&&(delete n._presenceChannels[e],s.push(e))})),a.forEach((function(e){e in n._channelGroups&&(delete n._channelGroups[e],u.push(e),e in n._heartbeatChannelGroups&&delete n._heartbeatChannelGroups[e]),e in n._presenceChannelGroups&&(delete n._presenceChannelGroups[e],u.push(e))})),0===s.length&&0===u.length||(!1!==this._config.suppressLeaveEvents||t||this._leaveEndpoint({channels:s,channelGroups:u},(function(e){e.affectedChannels=s,e.affectedChannelGroups=u,e.currentTimetoken=n._currentTimetoken,e.lastTimetoken=n._lastTimetoken,n._listenerManager.announceStatus(e)})),0===Object.keys(this._channels).length&&0===Object.keys(this._presenceChannels).length&&0===Object.keys(this._channelGroups).length&&0===Object.keys(this._presenceChannelGroups).length&&(this._lastTimetoken=0,this._currentTimetoken=0,this._storedTimetoken=null,this._region=null,this._reconnectionManager.stopPolling()),this.reconnect())},e.prototype.unsubscribeAll=function(e){this.adaptUnsubscribeChange({channels:this.getSubscribedChannels(),channelGroups:this.getSubscribedChannelGroups()},e)},e.prototype.getHeartbeatChannels=function(){return Object.keys(this._heartbeatChannels)},e.prototype.getHeartbeatChannelGroups=function(){return Object.keys(this._heartbeatChannelGroups)},e.prototype.getSubscribedChannels=function(){return Object.keys(this._channels)},e.prototype.getSubscribedChannelGroups=function(){return Object.keys(this._channelGroups)},e.prototype.reconnect=function(){this._startSubscribeLoop(),this._registerHeartbeatTimer()},e.prototype.disconnect=function(){this._stopSubscribeLoop(),this._stopHeartbeatTimer(),this._reconnectionManager.stopPolling()},e.prototype._registerHeartbeatTimer=function(){this._stopHeartbeatTimer(),0!==this._config.getHeartbeatInterval()&&void 0!==this._config.getHeartbeatInterval()&&(this._performHeartbeatLoop(),this._heartbeatTimer=setInterval(this._performHeartbeatLoop.bind(this),1e3*this._config.getHeartbeatInterval()))},e.prototype._stopHeartbeatTimer=function(){this._heartbeatTimer&&(clearInterval(this._heartbeatTimer),this._heartbeatTimer=null)},e.prototype._performHeartbeatLoop=function(){var e=this,t=this.getHeartbeatChannels(),n=this.getHeartbeatChannelGroups(),r={};if(0!==t.length||0!==n.length){this.getSubscribedChannels().forEach((function(t){var n=e._channels[t].state;Object.keys(n).length&&(r[t]=n)})),this.getSubscribedChannelGroups().forEach((function(t){var n=e._channelGroups[t].state;Object.keys(n).length&&(r[t]=n)}));this._heartbeatEndpoint({channels:t,channelGroups:n,state:r},function(t){t.error&&e._config.announceFailedHeartbeats&&e._listenerManager.announceStatus(t),t.error&&e._config.autoNetworkDetection&&e._isOnline&&(e._isOnline=!1,e.disconnect(),e._listenerManager.announceNetworkDown(),e.reconnect()),!t.error&&e._config.announceSuccessfulHeartbeats&&e._listenerManager.announceStatus(t)}.bind(this))}},e.prototype._startSubscribeLoop=function(){var e=this;this._stopSubscribeLoop();var t={},n=[],r=[];if(Object.keys(this._channels).forEach((function(r){var o=e._channels[r].state;Object.keys(o).length&&(t[r]=o),n.push(r)})),Object.keys(this._presenceChannels).forEach((function(e){n.push("".concat(e,"-pnpres"))})),Object.keys(this._channelGroups).forEach((function(n){var o=e._channelGroups[n].state;Object.keys(o).length&&(t[n]=o),r.push(n)})),Object.keys(this._presenceChannelGroups).forEach((function(e){r.push("".concat(e,"-pnpres"))})),0!==n.length||0!==r.length){var o={channels:n,channelGroups:r,state:t,timetoken:this._currentTimetoken,filterExpression:this._config.filterExpression,region:this._region};this._subscribeCall=this._subscribeEndpoint(o,this._processSubscribeResponse.bind(this))}},e.prototype._processSubscribeResponse=function(e,t){var o=this;if(e.error){if(e.errorData&&"Aborted"===e.errorData.message)return;e.category===R.PNTimeoutCategory?this._startSubscribeLoop():e.category===R.PNNetworkIssuesCategory?(this.disconnect(),e.error&&this._config.autoNetworkDetection&&this._isOnline&&(this._isOnline=!1,this._listenerManager.announceNetworkDown()),this._reconnectionManager.onReconnection((function(){o._config.autoNetworkDetection&&!o._isOnline&&(o._isOnline=!0,o._listenerManager.announceNetworkUp()),o.reconnect(),o._subscriptionStatusAnnounced=!0;var t={category:R.PNReconnectedCategory,operation:e.operation,lastTimetoken:o._lastTimetoken,currentTimetoken:o._currentTimetoken};o._listenerManager.announceStatus(t)})),this._reconnectionManager.startPolling(),this._listenerManager.announceStatus(e)):e.category===R.PNBadRequestCategory?(this._stopHeartbeatTimer(),this._listenerManager.announceStatus(e)):this._listenerManager.announceStatus(e)}else{if(this._storedTimetoken?(this._currentTimetoken=this._storedTimetoken,this._storedTimetoken=null):(this._lastTimetoken=this._currentTimetoken,this._currentTimetoken=t.metadata.timetoken),!this._subscriptionStatusAnnounced){var i={};i.category=R.PNConnectedCategory,i.operation=e.operation,i.affectedChannels=this._pendingChannelSubscriptions,i.subscribedChannels=this.getSubscribedChannels(),i.affectedChannelGroups=this._pendingChannelGroupSubscriptions,i.lastTimetoken=this._lastTimetoken,i.currentTimetoken=this._currentTimetoken,this._subscriptionStatusAnnounced=!0,this._listenerManager.announceStatus(i),this._pendingChannelSubscriptions=[],this._pendingChannelGroupSubscriptions=[]}var a=t.messages||[],s=this._config,u=s.requestMessageCountThreshold,c=s.dedupeOnSubscribe;if(u&&a.length>=u){var l={};l.category=R.PNRequestMessageCountExceededCategory,l.operation=e.operation,this._listenerManager.announceStatus(l)}a.forEach((function(e){var t=e.channel,i=e.subscriptionMatch,a=e.publishMetaData;if(t===i&&(i=null),c){if(o._dedupingManager.isDuplicate(e))return;o._dedupingManager.addEntry(e)}if(M.endsWith(e.channel,"-pnpres"))(y={channel:null,subscription:null}).actualChannel=null!=i?t:null,y.subscribedChannel=null!=i?i:t,t&&(y.channel=t.substring(0,t.lastIndexOf("-pnpres"))),i&&(y.subscription=i.substring(0,i.lastIndexOf("-pnpres"))),y.action=e.payload.action,y.state=e.payload.data,y.timetoken=a.publishTimetoken,y.occupancy=e.payload.occupancy,y.uuid=e.payload.uuid,y.timestamp=e.payload.timestamp,e.payload.join&&(y.join=e.payload.join),e.payload.leave&&(y.leave=e.payload.leave),e.payload.timeout&&(y.timeout=e.payload.timeout),o._listenerManager.announcePresence(y);else if(1===e.messageType){(y={channel:null,subscription:null}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,e.userMetadata&&(y.userMetadata=e.userMetadata),y.message=e.payload,o._listenerManager.announceSignal(y)}else if(2===e.messageType){if((y={channel:null,subscription:null}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,e.userMetadata&&(y.userMetadata=e.userMetadata),y.message={event:e.payload.event,type:e.payload.type,data:e.payload.data},o._listenerManager.announceObjects(y),"uuid"===e.payload.type){var s=o._renameChannelField(y);o._listenerManager.announceUser(n(n({},s),{message:n(n({},s.message),{event:o._renameEvent(s.message.event),type:"user"})}))}else if("channel"===e.payload.type){s=o._renameChannelField(y);o._listenerManager.announceSpace(n(n({},s),{message:n(n({},s.message),{event:o._renameEvent(s.message.event),type:"space"})}))}else if("membership"===e.payload.type){var u=(s=o._renameChannelField(y)).message.data,l=u.uuid,p=u.channel,f=r(u,["uuid","channel"]);f.user=l,f.space=p,o._listenerManager.announceMembership(n(n({},s),{message:n(n({},s.message),{event:o._renameEvent(s.message.event),data:f})}))}}else if(3===e.messageType){(y={}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,y.data={messageTimetoken:e.payload.data.messageTimetoken,actionTimetoken:e.payload.data.actionTimetoken,type:e.payload.data.type,uuid:e.issuingClientId,value:e.payload.data.value},y.event=e.payload.event,o._listenerManager.announceMessageAction(y)}else if(4===e.messageType){(y={}).channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId;var h=e.payload;if(o._cryptoModule){var d=void 0;try{d=(g=o._cryptoModule.decrypt(e.payload))instanceof ArrayBuffer?JSON.parse(o._decoder.decode(g)):g}catch(e){d=null,console&&console.log&&console.log("decryption error",e.message)}null!==d&&(h=d)}e.userMetadata&&(y.userMetadata=e.userMetadata),y.message=h.message,y.file={id:h.file.id,name:h.file.name,url:o._getFileUrl({id:h.file.id,name:h.file.name,channel:t})},o._listenerManager.announceFile(y)}else{var y;if((y={channel:null,subscription:null}).actualChannel=null!=i?t:null,y.subscribedChannel=null!=i?i:t,y.channel=t,y.subscription=i,y.timetoken=a.publishTimetoken,y.publisher=e.issuingClientId,e.userMetadata&&(y.userMetadata=e.userMetadata),o._cryptoModule){d=void 0;try{var g;d=(g=o._cryptoModule.decrypt(e.payload))instanceof ArrayBuffer?JSON.parse(o._decoder.decode(g)):g}catch(e){d=null,console&&console.log&&console.log("decryption error",e.message)}y.message=null!=d?d:e.payload}else y.message=e.payload;o._listenerManager.announceMessage(y)}})),this._region=t.metadata.region,this._startSubscribeLoop()}},e.prototype._stopSubscribeLoop=function(){this._subscribeCall&&("function"==typeof this._subscribeCall.abort&&this._subscribeCall.abort(),this._subscribeCall=null)},e.prototype._renameEvent=function(e){return"set"===e?"updated":"removed"},e.prototype._renameChannelField=function(e){var t=e.channel,n=r(e,["channel"]);return n.spaceId=t,n},e}(),I={PNTimeOperation:"PNTimeOperation",PNHistoryOperation:"PNHistoryOperation",PNDeleteMessagesOperation:"PNDeleteMessagesOperation",PNFetchMessagesOperation:"PNFetchMessagesOperation",PNMessageCounts:"PNMessageCountsOperation",PNSubscribeOperation:"PNSubscribeOperation",PNUnsubscribeOperation:"PNUnsubscribeOperation",PNPublishOperation:"PNPublishOperation",PNSignalOperation:"PNSignalOperation",PNAddMessageActionOperation:"PNAddActionOperation",PNRemoveMessageActionOperation:"PNRemoveMessageActionOperation",PNGetMessageActionsOperation:"PNGetMessageActionsOperation",PNCreateUserOperation:"PNCreateUserOperation",PNUpdateUserOperation:"PNUpdateUserOperation",PNDeleteUserOperation:"PNDeleteUserOperation",PNGetUserOperation:"PNGetUsersOperation",PNGetUsersOperation:"PNGetUsersOperation",PNCreateSpaceOperation:"PNCreateSpaceOperation",PNUpdateSpaceOperation:"PNUpdateSpaceOperation",PNDeleteSpaceOperation:"PNDeleteSpaceOperation",PNGetSpaceOperation:"PNGetSpacesOperation",PNGetSpacesOperation:"PNGetSpacesOperation",PNGetMembersOperation:"PNGetMembersOperation",PNUpdateMembersOperation:"PNUpdateMembersOperation",PNGetMembershipsOperation:"PNGetMembershipsOperation",PNUpdateMembershipsOperation:"PNUpdateMembershipsOperation",PNListFilesOperation:"PNListFilesOperation",PNGenerateUploadUrlOperation:"PNGenerateUploadUrlOperation",PNPublishFileOperation:"PNPublishFileOperation",PNGetFileUrlOperation:"PNGetFileUrlOperation",PNDownloadFileOperation:"PNDownloadFileOperation",PNGetAllUUIDMetadataOperation:"PNGetAllUUIDMetadataOperation",PNGetUUIDMetadataOperation:"PNGetUUIDMetadataOperation",PNSetUUIDMetadataOperation:"PNSetUUIDMetadataOperation",PNRemoveUUIDMetadataOperation:"PNRemoveUUIDMetadataOperation",PNGetAllChannelMetadataOperation:"PNGetAllChannelMetadataOperation",PNGetChannelMetadataOperation:"PNGetChannelMetadataOperation",PNSetChannelMetadataOperation:"PNSetChannelMetadataOperation",PNRemoveChannelMetadataOperation:"PNRemoveChannelMetadataOperation",PNSetMembersOperation:"PNSetMembersOperation",PNSetMembershipsOperation:"PNSetMembershipsOperation",PNPushNotificationEnabledChannelsOperation:"PNPushNotificationEnabledChannelsOperation",PNRemoveAllPushNotificationsOperation:"PNRemoveAllPushNotificationsOperation",PNWhereNowOperation:"PNWhereNowOperation",PNSetStateOperation:"PNSetStateOperation",PNHereNowOperation:"PNHereNowOperation",PNGetStateOperation:"PNGetStateOperation",PNHeartbeatOperation:"PNHeartbeatOperation",PNChannelGroupsOperation:"PNChannelGroupsOperation",PNRemoveGroupOperation:"PNRemoveGroupOperation",PNChannelsForGroupOperation:"PNChannelsForGroupOperation",PNAddChannelsToGroupOperation:"PNAddChannelsToGroupOperation",PNRemoveChannelsFromGroupOperation:"PNRemoveChannelsFromGroupOperation",PNAccessManagerGrant:"PNAccessManagerGrant",PNAccessManagerGrantToken:"PNAccessManagerGrantToken",PNAccessManagerAudit:"PNAccessManagerAudit",PNAccessManagerRevokeToken:"PNAccessManagerRevokeToken",PNHandshakeOperation:"PNHandshakeOperation",PNReceiveMessagesOperation:"PNReceiveMessagesOperation"},x=function(){function e(e){this._maximumSamplesCount=100,this._trackedLatencies={},this._latencies={},this._maximumSamplesCount=e.maximumSamplesCount||this._maximumSamplesCount}return e.prototype.operationsLatencyForRequest=function(){var e=this,t={};return Object.keys(this._latencies).forEach((function(n){var r=e._latencies[n],o=e._averageLatency(r);o>0&&(t["l_".concat(n)]=o)})),t},e.prototype.startLatencyMeasure=function(e,t){e!==I.PNSubscribeOperation&&t&&(this._trackedLatencies[t]=Date.now())},e.prototype.stopLatencyMeasure=function(e,t){if(e!==I.PNSubscribeOperation&&t){var n=this._endpointName(e),r=this._latencies[n],o=this._trackedLatencies[t];r||(this._latencies[n]=[],r=this._latencies[n]),r.push(Date.now()-o),r.length>this._maximumSamplesCount&&r.splice(0,r.length-this._maximumSamplesCount),delete this._trackedLatencies[t]}},e.prototype._averageLatency=function(e){return Math.floor(e.reduce((function(e,t){return e+t}),0)/e.length)},e.prototype._endpointName=function(e){var t=null;switch(e){case I.PNPublishOperation:t="pub";break;case I.PNSignalOperation:t="sig";break;case I.PNHistoryOperation:case I.PNFetchMessagesOperation:case I.PNDeleteMessagesOperation:case I.PNMessageCounts:t="hist";break;case I.PNUnsubscribeOperation:case I.PNWhereNowOperation:case I.PNHereNowOperation:case I.PNHeartbeatOperation:case I.PNSetStateOperation:case I.PNGetStateOperation:t="pres";break;case I.PNAddChannelsToGroupOperation:case I.PNRemoveChannelsFromGroupOperation:case I.PNChannelGroupsOperation:case I.PNRemoveGroupOperation:case I.PNChannelsForGroupOperation:t="cg";break;case I.PNPushNotificationEnabledChannelsOperation:case I.PNRemoveAllPushNotificationsOperation:t="push";break;case I.PNCreateUserOperation:case I.PNUpdateUserOperation:case I.PNDeleteUserOperation:case I.PNGetUserOperation:case I.PNGetUsersOperation:case I.PNCreateSpaceOperation:case I.PNUpdateSpaceOperation:case I.PNDeleteSpaceOperation:case I.PNGetSpaceOperation:case I.PNGetSpacesOperation:case I.PNGetMembersOperation:case I.PNUpdateMembersOperation:case I.PNGetMembershipsOperation:case I.PNUpdateMembershipsOperation:t="obj";break;case I.PNAddMessageActionOperation:case I.PNRemoveMessageActionOperation:case I.PNGetMessageActionsOperation:t="msga";break;case I.PNAccessManagerGrant:case I.PNAccessManagerAudit:t="pam";break;case I.PNAccessManagerGrantToken:case I.PNAccessManagerRevokeToken:t="pamv3";break;default:t="time"}return t},e}(),D=function(){function e(e,t,n){this._payload=e,this._setDefaultPayloadStructure(),this.title=t,this.body=n}return Object.defineProperty(e.prototype,"payload",{get:function(){return this._payload},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"title",{set:function(e){this._title=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"subtitle",{set:function(e){this._subtitle=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"body",{set:function(e){this._body=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"badge",{set:function(e){this._badge=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"sound",{set:function(e){this._sound=e},enumerable:!1,configurable:!0}),e.prototype._setDefaultPayloadStructure=function(){},e.prototype.toObject=function(){return{}},e}(),F=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return t(r,e),Object.defineProperty(r.prototype,"configurations",{set:function(e){e&&e.length&&(this._configurations=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"notification",{get:function(){return this._payload.aps},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"title",{get:function(){return this._title},set:function(e){e&&e.length&&(this._payload.aps.alert.title=e,this._title=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"subtitle",{get:function(){return this._subtitle},set:function(e){e&&e.length&&(this._payload.aps.alert.subtitle=e,this._subtitle=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"body",{get:function(){return this._body},set:function(e){e&&e.length&&(this._payload.aps.alert.body=e,this._body=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"badge",{get:function(){return this._badge},set:function(e){null!=e&&(this._payload.aps.badge=e,this._badge=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"sound",{get:function(){return this._sound},set:function(e){e&&e.length&&(this._payload.aps.sound=e,this._sound=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"silent",{set:function(e){this._isSilent=e},enumerable:!1,configurable:!0}),r.prototype._setDefaultPayloadStructure=function(){this._payload.aps={alert:{}}},r.prototype.toObject=function(){var e=this,t=n({},this._payload),r=t.aps,o=r.alert;if(this._isSilent&&(r["content-available"]=1),"apns2"===this._apnsPushType){if(!this._configurations||!this._configurations.length)throw new ReferenceError("APNS2 configuration is missing");var i=[];this._configurations.forEach((function(t){i.push(e._objectFromAPNS2Configuration(t))})),i.length&&(t.pn_push=i)}return o&&Object.keys(o).length||delete r.alert,this._isSilent&&(delete r.alert,delete r.badge,delete r.sound,o={}),this._isSilent||Object.keys(o).length?t:null},r.prototype._objectFromAPNS2Configuration=function(e){var t=this;if(!e.targets||!e.targets.length)throw new ReferenceError("At least one APNS2 target should be provided");var n=[];e.targets.forEach((function(e){n.push(t._objectFromAPNSTarget(e))}));var r=e.collapseId,o=e.expirationDate,i={auth_method:"token",targets:n,version:"v2"};return r&&r.length&&(i.collapse_id=r),o&&(i.expiration=o.toISOString()),i},r.prototype._objectFromAPNSTarget=function(e){if(!e.topic||!e.topic.length)throw new TypeError("Target 'topic' undefined.");var t=e.topic,n=e.environment,r=void 0===n?"development":n,o=e.excludedDevices,i=void 0===o?[]:o,a={topic:t,environment:r};return i.length&&(a.excluded_devices=i),a},r}(D),G=function(e){function r(){return null!==e&&e.apply(this,arguments)||this}return t(r,e),Object.defineProperty(r.prototype,"backContent",{get:function(){return this._backContent},set:function(e){e&&e.length&&(this._payload.back_content=e,this._backContent=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"backTitle",{get:function(){return this._backTitle},set:function(e){e&&e.length&&(this._payload.back_title=e,this._backTitle=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"count",{get:function(){return this._count},set:function(e){null!=e&&(this._payload.count=e,this._count=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"title",{get:function(){return this._title},set:function(e){e&&e.length&&(this._payload.title=e,this._title=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"type",{get:function(){return this._type},set:function(e){e&&e.length&&(this._payload.type=e,this._type=e)},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"subtitle",{get:function(){return this.backTitle},set:function(e){this.backTitle=e},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"body",{get:function(){return this.backContent},set:function(e){this.backContent=e},enumerable:!1,configurable:!0}),Object.defineProperty(r.prototype,"badge",{get:function(){return this.count},set:function(e){this.count=e},enumerable:!1,configurable:!0}),r.prototype.toObject=function(){return Object.keys(this._payload).length?n({},this._payload):null},r}(D),L=function(e){function o(){return null!==e&&e.apply(this,arguments)||this}return t(o,e),Object.defineProperty(o.prototype,"notification",{get:function(){return this._payload.notification},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"data",{get:function(){return this._payload.data},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"title",{get:function(){return this._title},set:function(e){e&&e.length&&(this._payload.notification.title=e,this._title=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"body",{get:function(){return this._body},set:function(e){e&&e.length&&(this._payload.notification.body=e,this._body=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"sound",{get:function(){return this._sound},set:function(e){e&&e.length&&(this._payload.notification.sound=e,this._sound=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"icon",{get:function(){return this._icon},set:function(e){e&&e.length&&(this._payload.notification.icon=e,this._icon=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"tag",{get:function(){return this._tag},set:function(e){e&&e.length&&(this._payload.notification.tag=e,this._tag=e)},enumerable:!1,configurable:!0}),Object.defineProperty(o.prototype,"silent",{set:function(e){this._isSilent=e},enumerable:!1,configurable:!0}),o.prototype._setDefaultPayloadStructure=function(){this._payload.notification={},this._payload.data={}},o.prototype.toObject=function(){var e=n({},this._payload.data),t=null,o={};if(Object.keys(this._payload).length>2){var i=this._payload;i.notification,i.data;var a=r(i,["notification","data"]);e=n(n({},e),a)}return this._isSilent?e.notification=this._payload.notification:t=this._payload.notification,Object.keys(e).length&&(o.data=e),t&&Object.keys(t).length&&(o.notification=t),Object.keys(o).length?o:null},o}(D),K=function(){function e(e,t){this._payload={apns:{},mpns:{},fcm:{}},this._title=e,this._body=t,this.apns=new F(this._payload.apns,e,t),this.mpns=new G(this._payload.mpns,e,t),this.fcm=new L(this._payload.fcm,e,t)}return Object.defineProperty(e.prototype,"debugging",{set:function(e){this._debugging=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"title",{get:function(){return this._title},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"body",{get:function(){return this._body},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"subtitle",{get:function(){return this._subtitle},set:function(e){this._subtitle=e,this.apns.subtitle=e,this.mpns.subtitle=e,this.fcm.subtitle=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"badge",{get:function(){return this._badge},set:function(e){this._badge=e,this.apns.badge=e,this.mpns.badge=e,this.fcm.badge=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"sound",{get:function(){return this._sound},set:function(e){this._sound=e,this.apns.sound=e,this.mpns.sound=e,this.fcm.sound=e},enumerable:!1,configurable:!0}),e.prototype.buildPayload=function(e){var t={};if(e.includes("apns")||e.includes("apns2")){this.apns._apnsPushType=e.includes("apns")?"apns":"apns2";var n=this.apns.toObject();n&&Object.keys(n).length&&(t.pn_apns=n)}if(e.includes("mpns")){var r=this.mpns.toObject();r&&Object.keys(r).length&&(t.pn_mpns=r)}if(e.includes("fcm")){var o=this.fcm.toObject();o&&Object.keys(o).length&&(t.pn_gcm=o)}return Object.keys(t).length&&this._debugging&&(t.pn_debug=!0),t},e}(),B=function(){function e(){this._listeners=[]}return e.prototype.addListener=function(e){this._listeners.push(e)},e.prototype.removeListener=function(e){var t=[];this._listeners.forEach((function(n){n!==e&&t.push(n)})),this._listeners=t},e.prototype.removeAllListeners=function(){this._listeners=[]},e.prototype.announcePresence=function(e){this._listeners.forEach((function(t){t.presence&&t.presence(e)}))},e.prototype.announceStatus=function(e){this._listeners.forEach((function(t){t.status&&t.status(e)}))},e.prototype.announceMessage=function(e){this._listeners.forEach((function(t){t.message&&t.message(e)}))},e.prototype.announceSignal=function(e){this._listeners.forEach((function(t){t.signal&&t.signal(e)}))},e.prototype.announceMessageAction=function(e){this._listeners.forEach((function(t){t.messageAction&&t.messageAction(e)}))},e.prototype.announceFile=function(e){this._listeners.forEach((function(t){t.file&&t.file(e)}))},e.prototype.announceObjects=function(e){this._listeners.forEach((function(t){t.objects&&t.objects(e)}))},e.prototype.announceUser=function(e){this._listeners.forEach((function(t){t.user&&t.user(e)}))},e.prototype.announceSpace=function(e){this._listeners.forEach((function(t){t.space&&t.space(e)}))},e.prototype.announceMembership=function(e){this._listeners.forEach((function(t){t.membership&&t.membership(e)}))},e.prototype.announceNetworkUp=function(){var e={};e.category=R.PNNetworkUpCategory,this.announceStatus(e)},e.prototype.announceNetworkDown=function(){var e={};e.category=R.PNNetworkDownCategory,this.announceStatus(e)},e}(),H=function(){function e(e,t){this._config=e,this._cbor=t}return e.prototype.setToken=function(e){e&&e.length>0?this._token=e:this._token=void 0},e.prototype.getToken=function(){return this._token},e.prototype.extractPermissions=function(e){var t={read:!1,write:!1,manage:!1,delete:!1,get:!1,update:!1,join:!1};return 128==(128&e)&&(t.join=!0),64==(64&e)&&(t.update=!0),32==(32&e)&&(t.get=!0),8==(8&e)&&(t.delete=!0),4==(4&e)&&(t.manage=!0),2==(2&e)&&(t.write=!0),1==(1&e)&&(t.read=!0),t},e.prototype.parseToken=function(e){var t=this,n=this._cbor.decodeToken(e);if(void 0!==n){var r=n.res.uuid?Object.keys(n.res.uuid):[],o=Object.keys(n.res.chan),i=Object.keys(n.res.grp),a=n.pat.uuid?Object.keys(n.pat.uuid):[],s=Object.keys(n.pat.chan),u=Object.keys(n.pat.grp),c={version:n.v,timestamp:n.t,ttl:n.ttl,authorized_uuid:n.uuid},l=r.length>0,p=o.length>0,f=i.length>0;(l||p||f)&&(c.resources={},l&&(c.resources.uuids={},r.forEach((function(e){c.resources.uuids[e]=t.extractPermissions(n.res.uuid[e])}))),p&&(c.resources.channels={},o.forEach((function(e){c.resources.channels[e]=t.extractPermissions(n.res.chan[e])}))),f&&(c.resources.groups={},i.forEach((function(e){c.resources.groups[e]=t.extractPermissions(n.res.grp[e])}))));var h=a.length>0,d=s.length>0,y=u.length>0;return(h||d||y)&&(c.patterns={},h&&(c.patterns.uuids={},a.forEach((function(e){c.patterns.uuids[e]=t.extractPermissions(n.pat.uuid[e])}))),d&&(c.patterns.channels={},s.forEach((function(e){c.patterns.channels[e]=t.extractPermissions(n.pat.chan[e])}))),y&&(c.patterns.groups={},u.forEach((function(e){c.patterns.groups[e]=t.extractPermissions(n.pat.grp[e])})))),Object.keys(n.meta).length>0&&(c.meta=n.meta),c.signature=n.sig,c}},e}(),q=function(e){function n(t,n){var r=this.constructor,o=e.call(this,t)||this;return o.name=o.constructor.name,o.status=n,o.message=t,Object.setPrototypeOf(o,r.prototype),o}return t(n,e),n}(Error);function z(e){return(t={message:e}).type="validationError",t.error=!0,t;var t}function V(e,t,n){return e.usePost&&e.usePost(t,n)?e.postURL(t,n):e.usePatch&&e.usePatch(t,n)?e.patchURL(t,n):e.useGetFile&&e.useGetFile(t,n)?e.getFileURL(t,n):e.getURL(t,n)}function W(e){if(e.sdkName)return e.sdkName;var t="PubNub-JS-".concat(e.sdkFamily);e.partnerId&&(t+="-".concat(e.partnerId)),t+="/".concat(e.getVersion());var n=e._getPnsdkSuffix(" ");return n.length>0&&(t+=n),t}function J(e,t,n){return t.usePost&&t.usePost(e,n)?"POST":t.usePatch&&t.usePatch(e,n)?"PATCH":t.useDelete&&t.useDelete(e,n)?"DELETE":t.useGetFile&&t.useGetFile(e,n)?"GETFILE":"GET"}function $(e,t,n,r,o){var i=e.config,a=e.crypto,s=J(e,o,r);n.timestamp=Math.floor((new Date).getTime()/1e3),"PNPublishOperation"===o.getOperation()&&o.usePost&&o.usePost(e,r)&&(s="GET"),"GETFILE"===s&&(s="GET");var u="".concat(s,"\n").concat(i.publishKey,"\n").concat(t,"\n").concat(M.signPamFromParams(n),"\n");if("POST"===s)u+="string"==typeof(c=o.postPayload(e,r))?c:JSON.stringify(c);else if("PATCH"===s){var c;u+="string"==typeof(c=o.patchPayload(e,r))?c:JSON.stringify(c)}var l="v2.".concat(a.HMACSHA256(u));l=(l=(l=l.replace(/\+/g,"-")).replace(/\//g,"_")).replace(/=+$/,""),n.signature=l}function Q(e,t){for(var r=[],o=2;o<arguments.length;o++)r[o-2]=arguments[o];var i=e.networking,a=e.config,s=e.telemetryManager,u=e.tokenManager,c=y(),l=null,p=null,f={};t.getOperation()===I.PNTimeOperation||t.getOperation()===I.PNChannelGroupsOperation?l=r[0]:(f=r[0],l=r[1]),"undefined"==typeof Promise||l||(p=M.createPromise());var h=t.validateParams(e,f);if(h)return l?l(z(h)):p?(p.reject(new q("Validation failed, check status for details",z(h))),p.promise):void 0;var d,g=t.prepareParams(e,f),b=V(t,e,f),v={url:b,operation:t.getOperation(),timeout:t.getRequestTimeout(e),headers:t.getRequestHeaders?t.getRequestHeaders():{},ignoreBody:"function"==typeof t.ignoreBody&&t.ignoreBody(e),forceBuffered:"function"==typeof t.forceBuffered?t.forceBuffered(e,f):null,abortSignal:"function"==typeof t.getAbortSignal?t.getAbortSignal(e,f):null};g.uuid=a.UUID,g.pnsdk=W(a);var m=s.operationsLatencyForRequest();if(Object.keys(m).length&&(g=n(n({},g),m)),a.useInstanceId&&(g.instanceid=a.instanceId),a.useRequestId&&(g.requestid=c),t.isAuthSupported()){var _=u.getToken()||a.getAuthKey();_&&(g.auth=_)}a.secretKey&&$(e,b,g,f,t);var O=function(n,r){if(n.error)return t.handleError&&t.handleError(e,f,n),void(l?l(n):p&&p.reject(new q("PubNub call failed, check status for details",n)));s.stopLatencyMeasure(t.getOperation(),c);var o=t.handleResponse(e,r,f);"function"!=typeof(null==o?void 0:o.then)&&(o=Promise.resolve(o)),o.then((function(e){l?l(n,e):p&&p.fulfill(e)})).catch((function(e){if(l){var n=e;t.getOperation()===I.PNSubscribeOperation&&(n={statusCode:400,error:!0,operation:t.getOperation(),errorData:e,category:R.PNUnknownCategory}),l(n,null)}else p&&p.reject(new q("PubNub call failed, check status for details",e))}))};if(s.startLatencyMeasure(t.getOperation(),c),"POST"===J(e,t,f)){var S=t.postPayload(e,f);d=i.POST(g,S,v,O)}else if("PATCH"===J(e,t,f)){S=t.patchPayload(e,f);d=i.PATCH(g,S,v,O)}else d="DELETE"===J(e,t,f)?i.DELETE(g,v,O):"GETFILE"===J(e,t,f)?i.GETFILE(g,v,O):i.GET(g,v,O);return t.getOperation()===I.PNSubscribeOperation?d:p?p.promise:void 0}var X=Object.freeze({__proto__:null,getOperation:function(){return I.PNAddChannelsToGroupOperation},validateParams:function(e,t){var n=t.channels,r=t.channelGroup,o=e.config;return r?n&&0!==n.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(M.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channels;return{add:(void 0===n?[]:n).join(",")}},handleResponse:function(){return{}}});var Y=Object.freeze({__proto__:null,getOperation:function(){return I.PNRemoveChannelsFromGroupOperation},validateParams:function(e,t){var n=t.channels,r=t.channelGroup,o=e.config;return r?n&&0!==n.length?o.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(M.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channels;return{remove:(void 0===n?[]:n).join(",")}},handleResponse:function(){return{}}});var Z=Object.freeze({__proto__:null,getOperation:function(){return I.PNRemoveGroupOperation},validateParams:function(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(M.encodeString(n),"/remove")},isAuthSupported:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},prepareParams:function(){return{}},handleResponse:function(){return{}}});var ee=Object.freeze({__proto__:null,getOperation:function(){return I.PNChannelGroupsOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e){var t=e.config;return"/v1/channel-registration/sub-key/".concat(t.subscribeKey,"/channel-group")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{groups:t.payload.groups}}});var te=Object.freeze({__proto__:null,getOperation:function(){return I.PNChannelsForGroupOperation},validateParams:function(e,t){var n=t.channelGroup,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channel Group"},getURL:function(e,t){var n=t.channelGroup,r=e.config;return"/v1/channel-registration/sub-key/".concat(r.subscribeKey,"/channel-group/").concat(M.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{channels:t.payload.channels}}});var ne=Object.freeze({__proto__:null,getOperation:function(){return I.PNPushNotificationEnabledChannelsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.channels,i=t.topic,a=e.config;return n?r?"apns2"!==r||i?o&&0!==o.length?a.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.channels,i=void 0===o?[]:o,a=t.environment,s=void 0===a?"development":a,u=t.topic,c={type:r,add:i.join(",")};return"apns2"===r&&delete(c=n(n({},c),{environment:s,topic:u})).type,c},handleResponse:function(){return{}}});var re=Object.freeze({__proto__:null,getOperation:function(){return I.PNPushNotificationEnabledChannelsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.channels,i=t.topic,a=e.config;return n?r?"apns2"!==r||i?o&&0!==o.length?a.subscribeKey?void 0:"Missing Subscribe Key":"Missing Channels":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.channels,i=void 0===o?[]:o,a=t.environment,s=void 0===a?"development":a,u=t.topic,c={type:r,remove:i.join(",")};return"apns2"===r&&delete(c=n(n({},c),{environment:s,topic:u})).type,c},handleResponse:function(){return{}}});var oe=Object.freeze({__proto__:null,getOperation:function(){return I.PNPushNotificationEnabledChannelsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.topic,i=e.config;return n?r?"apns2"!==r||o?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.environment,i=void 0===o?"development":o,a=t.topic,s={type:r};return"apns2"===r&&delete(s=n(n({},s),{environment:i,topic:a})).type,s},handleResponse:function(e,t){return{channels:t}}});var ie=Object.freeze({__proto__:null,getOperation:function(){return I.PNRemoveAllPushNotificationsOperation},validateParams:function(e,t){var n=t.device,r=t.pushGateway,o=t.topic,i=e.config;return n?r?"apns2"!==r||o?i.subscribeKey?void 0:"Missing Subscribe Key":"Missing APNS2 topic":"Missing GW Type (pushGateway: gcm, apns or apns2)":"Missing Device ID (device)"},getURL:function(e,t){var n=t.device,r=t.pushGateway,o=e.config;return"apns2"===r?"/v2/push/sub-key/".concat(o.subscribeKey,"/devices-apns2/").concat(n,"/remove"):"/v1/push/sub-key/".concat(o.subscribeKey,"/devices/").concat(n,"/remove")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.pushGateway,o=t.environment,i=void 0===o?"development":o,a=t.topic,s={type:r};return"apns2"===r&&delete(s=n(n({},s),{environment:i,topic:a})).type,s},handleResponse:function(){return{}}});var ae=Object.freeze({__proto__:null,getOperation:function(){return I.PNUnsubscribeOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(i),"/leave")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channelGroups,r=void 0===n?[]:n,o={};return r.length>0&&(o["channel-group"]=r.join(",")),o},handleResponse:function(){return{}}});var se=Object.freeze({__proto__:null,getOperation:function(){return I.PNWhereNowOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.uuid,o=void 0===r?n.UUID:r;return"/v2/presence/sub-key/".concat(n.subscribeKey,"/uuid/").concat(M.encodeString(o))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return t.payload?{channels:t.payload.channels}:{channels:[]}}});var ue=Object.freeze({__proto__:null,getOperation:function(){return I.PNHeartbeatOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(i),"/heartbeat")},isAuthSupported:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},prepareParams:function(e,t){var n=t.channelGroups,r=void 0===n?[]:n,o=t.state,i=void 0===o?{}:o,a=e.config,s={};return r.length>0&&(s["channel-group"]=r.join(",")),s.state=JSON.stringify(i),s.heartbeat=a.getPresenceTimeout(),s},handleResponse:function(){return{}}});var ce=Object.freeze({__proto__:null,getOperation:function(){return I.PNGetStateOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.uuid,o=void 0===r?n.UUID:r,i=t.channels,a=void 0===i?[]:i,s=a.length>0?a.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(s),"/uuid/").concat(o)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channelGroups,r=void 0===n?[]:n,o={};return r.length>0&&(o["channel-group"]=r.join(",")),o},handleResponse:function(e,t,n){var r=n.channels,o=void 0===r?[]:r,i=n.channelGroups,a=void 0===i?[]:i,s={};return 1===o.length&&0===a.length?s[o[0]]=t.payload:s=t.payload,{channels:s}}});var le=Object.freeze({__proto__:null,getOperation:function(){return I.PNSetStateOperation},validateParams:function(e,t){var n=e.config,r=t.state,o=t.channels,i=void 0===o?[]:o,a=t.channelGroups,s=void 0===a?[]:a;return r?n.subscribeKey?0===i.length&&0===s.length?"Please provide a list of channels and/or channel-groups":void 0:"Missing Subscribe Key":"Missing State"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/presence/sub-key/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(i),"/uuid/").concat(M.encodeString(n.UUID),"/data")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.state,r=t.channelGroups,o=void 0===r?[]:r,i={};return i.state=JSON.stringify(n),o.length>0&&(i["channel-group"]=o.join(",")),i},handleResponse:function(e,t){return{state:t.payload}}});var pe=Object.freeze({__proto__:null,getOperation:function(){return I.PNHereNowOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=t.channelGroups,a=void 0===i?[]:i,s="/v2/presence/sub-key/".concat(n.subscribeKey);if(o.length>0||a.length>0){var u=o.length>0?o.join(","):",";s+="/channel/".concat(M.encodeString(u))}return s},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var r=t.channelGroups,o=void 0===r?[]:r,i=t.includeUUIDs,a=void 0===i||i,s=t.includeState,u=void 0!==s&&s,c=t.queryParameters,l=void 0===c?{}:c,p={};return a||(p.disable_uuids=1),u&&(p.state=1),o.length>0&&(p["channel-group"]=o.join(",")),p=n(n({},p),l)},handleResponse:function(e,t,n){var r=n.channels,o=void 0===r?[]:r,i=n.channelGroups,a=void 0===i?[]:i,s=n.includeUUIDs,u=void 0===s||s,c=n.includeState,l=void 0!==c&&c;return o.length>1||a.length>0||0===a.length&&0===o.length?function(){var e={};return e.totalChannels=t.payload.total_channels,e.totalOccupancy=t.payload.total_occupancy,e.channels={},Object.keys(t.payload.channels).forEach((function(n){var r=t.payload.channels[n],o=[];return e.channels[n]={occupants:o,name:n,occupancy:r.occupancy},u&&r.uuids.forEach((function(e){l?o.push({state:e.state,uuid:e.uuid}):o.push({state:null,uuid:e})})),e})),e}():function(){var e={},n=[];return e.totalChannels=1,e.totalOccupancy=t.occupancy,e.channels={},e.channels[o[0]]={occupants:n,name:o[0],occupancy:t.occupancy},u&&t.uuids&&t.uuids.forEach((function(e){l?n.push({state:e.state,uuid:e.uuid}):n.push({state:null,uuid:e})})),e}()},handleError:function(e,t,n){402!==n.statusCode||this.getURL(e,t).includes("channel")||(n.errorData.message="You have tried to perform a Global Here Now operation, your keyset configuration does not support that. Please provide a channel, or enable the Global Here Now feature from the Portal.")}});var fe=Object.freeze({__proto__:null,getOperation:function(){return I.PNAddMessageActionOperation},validateParams:function(e,t){var n=e.config,r=t.action,o=t.channel;return t.messageTimetoken?n.subscribeKey?o?r?r.value?r.type?r.type.length>15?"Action.type value exceed maximum length of 15":void 0:"Missing Action.type":"Missing Action.value":"Missing Action":"Missing message channel":"Missing Subscribe Key":"Missing message timetoken"},usePost:function(){return!0},postURL:function(e,t){var n=e.config,r=t.channel,o=t.messageTimetoken;return"/v1/message-actions/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(r),"/message/").concat(o)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},getRequestHeaders:function(){return{"Content-Type":"application/json"}},isAuthSupported:function(){return!0},prepareParams:function(){return{}},postPayload:function(e,t){return t.action},handleResponse:function(e,t){return{data:t.data}}});var he=Object.freeze({__proto__:null,getOperation:function(){return I.PNRemoveMessageActionOperation},validateParams:function(e,t){var n=e.config,r=t.channel,o=t.actionTimetoken;return t.messageTimetoken?o?n.subscribeKey?r?void 0:"Missing message channel":"Missing Subscribe Key":"Missing action timetoken":"Missing message timetoken"},useDelete:function(){return!0},getURL:function(e,t){var n=e.config,r=t.channel,o=t.actionTimetoken,i=t.messageTimetoken;return"/v1/message-actions/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(r),"/message/").concat(i,"/action/").concat(o)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{data:t.data}}});var de=Object.freeze({__proto__:null,getOperation:function(){return I.PNGetMessageActionsOperation},validateParams:function(e,t){var n=e.config,r=t.channel;return n.subscribeKey?r?void 0:"Missing message channel":"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channel;return"/v1/message-actions/".concat(n.subscribeKey,"/channel/").concat(M.encodeString(r))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.limit,r=t.start,o=t.end,i={};return n&&(i.limit=n),r&&(i.start=r),o&&(i.end=o),i},handleResponse:function(e,t){var n={data:t.data,start:null,end:null};return n.data.length&&(n.end=n.data[n.data.length-1].actionTimetoken,n.start=n.data[0].actionTimetoken),n}}),ye={getOperation:function(){return I.PNListFilesOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"channel can't be empty"},getURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel),"/files")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n={};return t.limit&&(n.limit=t.limit),t.next&&(n.next=t.next),n},handleResponse:function(e,t){return{status:t.status,data:t.data,next:t.next,count:t.count}}},ge={getOperation:function(){return I.PNGenerateUploadUrlOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.name)?void 0:"name can't be empty":"channel can't be empty"},usePost:function(){return!0},postURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel),"/generate-upload-url")},postPayload:function(e,t){return{name:t.name}},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{status:t.status,data:t.data,file_upload_request:t.file_upload_request}}},be={getOperation:function(){return I.PNPublishFileOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.fileId)?(null==t?void 0:t.fileName)?void 0:"file name can't be empty":"file id can't be empty":"channel can't be empty"},getURL:function(e,t){var n=e.config,r=n.publishKey,o=n.subscribeKey,i=function(e,t){var n=JSON.stringify(t);if(e.cryptoModule){var r=e.cryptoModule.encrypt(n);n="string"==typeof r?r:v(r),n=JSON.stringify(n)}return n||""}(e,{message:t.message,file:{name:t.fileName,id:t.fileId}});return"/v1/files/publish-file/".concat(r,"/").concat(o,"/0/").concat(M.encodeString(t.channel),"/0/").concat(M.encodeString(i))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n={};return t.ttl&&(n.ttl=t.ttl),void 0!==t.storeInHistory&&(n.store=t.storeInHistory?"1":"0"),t.meta&&"object"==typeof t.meta&&(n.meta=JSON.stringify(t.meta)),n},handleResponse:function(e,t){return{timetoken:t[2]}}},ve=function(e){var t=function(e){var t=this,n=e.generateUploadUrl,r=e.publishFile,a=e.modules,s=a.PubNubFile,u=a.config,c=a.cryptography,l=a.cryptoModule,p=a.networking;return function(e){var a=e.channel,f=e.file,h=e.message,d=e.cipherKey,y=e.meta,g=e.ttl,b=e.storeInHistory;return o(t,void 0,void 0,(function(){var e,t,o,v,m,_,O,S,P,w,E,T,A,N,k,C,j,M,R,U,I,x,D,F,G,L,K,B,H;return i(this,(function(i){switch(i.label){case 0:if(!a)throw new q("Validation failed, check status for details",z("channel can't be empty"));if(!f)throw new q("Validation failed, check status for details",z("file can't be empty"));return e=s.create(f),[4,n({channel:a,name:e.name})];case 1:return t=i.sent(),o=t.file_upload_request,v=o.url,m=o.form_fields,_=t.data,O=_.id,S=_.name,s.supportsEncryptFile&&(d||l)?null!=d?[3,3]:[4,l.encryptFile(e,s)]:[3,6];case 2:return P=i.sent(),[3,5];case 3:return[4,c.encryptFile(d,e,s)];case 4:P=i.sent(),i.label=5;case 5:e=P,i.label=6;case 6:w=m,e.mimeType&&(w=m.map((function(t){return"Content-Type"===t.key?{key:t.key,value:e.mimeType}:t}))),i.label=7;case 7:return i.trys.push([7,21,,22]),s.supportsFileUri&&f.uri?(A=(T=p).POSTFILE,N=[v,w],[4,e.toFileUri()]):[3,10];case 8:return[4,A.apply(T,N.concat([i.sent()]))];case 9:return E=i.sent(),[3,20];case 10:return s.supportsFile?(C=(k=p).POSTFILE,j=[v,w],[4,e.toFile()]):[3,13];case 11:return[4,C.apply(k,j.concat([i.sent()]))];case 12:return E=i.sent(),[3,20];case 13:return s.supportsBuffer?(R=(M=p).POSTFILE,U=[v,w],[4,e.toBuffer()]):[3,16];case 14:return[4,R.apply(M,U.concat([i.sent()]))];case 15:return E=i.sent(),[3,20];case 16:return s.supportsBlob?(x=(I=p).POSTFILE,D=[v,w],[4,e.toBlob()]):[3,19];case 17:return[4,x.apply(I,D.concat([i.sent()]))];case 18:return E=i.sent(),[3,20];case 19:throw new Error("Unsupported environment");case 20:return[3,22];case 21:throw(F=i.sent()).response&&"string"==typeof F.response.text?(G=F.response.text,L=/<Message>(.*)<\/Message>/gi.exec(G),new q(L?"Upload to bucket failed: ".concat(L[1]):"Upload to bucket failed.",F)):new q("Upload to bucket failed.",F);case 22:if(204!==E.status)throw new q("Upload to bucket was unsuccessful",E);K=u.fileUploadPublishRetryLimit,B=!1,H={timetoken:"0"},i.label=23;case 23:return i.trys.push([23,25,,26]),[4,r({channel:a,message:h,fileId:O,fileName:S,meta:y,storeInHistory:b,ttl:g})];case 24:return H=i.sent(),B=!0,[3,26];case 25:return i.sent(),K-=1,[3,26];case 26:if(!B&&K>0)return[3,23];i.label=27;case 27:if(B)return[2,{timetoken:H.timetoken,id:O,name:S}];throw new q("Publish failed. You may want to execute that operation manually using pubnub.publishFile",{channel:a,id:O,name:S})}}))}))}}(e);return function(e,n){var r=t(e);return"function"==typeof n?(r.then((function(e){return n(null,e)})).catch((function(e){return n(e,null)})),r):r}},me=function(e,t){var n=t.channel,r=t.id,o=t.name,i=e.config,a=e.networking,s=e.tokenManager;if(!n)throw new q("Validation failed, check status for details",z("channel can't be empty"));if(!r)throw new q("Validation failed, check status for details",z("file id can't be empty"));if(!o)throw new q("Validation failed, check status for details",z("file name can't be empty"));var u="/v1/files/".concat(i.subscribeKey,"/channels/").concat(M.encodeString(n),"/files/").concat(r,"/").concat(o),c={};c.uuid=i.getUUID(),c.pnsdk=W(i);var l=s.getToken()||i.getAuthKey();l&&(c.auth=l),i.secretKey&&$(e,u,c,{},{getOperation:function(){return"PubNubGetFileUrlOperation"}});var p=Object.keys(c).map((function(e){return"".concat(encodeURIComponent(e),"=").concat(encodeURIComponent(c[e]))})).join("&");return""!==p?"".concat(a.getStandardOrigin()).concat(u,"?").concat(p):"".concat(a.getStandardOrigin()).concat(u)},_e={getOperation:function(){return I.PNDownloadFileOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.name)?(null==t?void 0:t.id)?void 0:"id can't be empty":"name can't be empty":"channel can't be empty"},useGetFile:function(){return!0},getFileURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel),"/files/").concat(t.id,"/").concat(t.name)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},ignoreBody:function(){return!0},forceBuffered:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t,n){var r=e.PubNubFile,a=e.config,s=e.cryptography,u=e.cryptoModule;return o(void 0,void 0,void 0,(function(){var e,o,c,l;return i(this,(function(i){switch(i.label){case 0:return e=t.response.body,r.supportsEncryptFile&&(n.cipherKey||u)?null!=n.cipherKey?[3,2]:[4,u.decryptFile(r.create({data:e,name:n.name}),r)]:[3,5];case 1:return o=i.sent().data,[3,4];case 2:return[4,s.decrypt(null!==(c=n.cipherKey)&&void 0!==c?c:a.cipherKey,e)];case 3:o=i.sent(),i.label=4;case 4:e=o,i.label=5;case 5:return[2,r.create({data:e,name:null!==(l=t.response.name)&&void 0!==l?l:n.name,mimeType:t.response.type})]}}))}))}},Oe={getOperation:function(){return I.PNListFilesOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.id)?(null==t?void 0:t.name)?void 0:"file name can't be empty":"file id can't be empty":"channel can't be empty"},useDelete:function(){return!0},getURL:function(e,t){var n=e.config;return"/v1/files/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel),"/files/").concat(t.id,"/").concat(t.name)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{status:t.status}}},Se={getOperation:function(){return I.PNGetAllUUIDMetadataOperation},validateParams:function(){},getURL:function(e){var t=e.config;return"/v2/objects/".concat(t.subscribeKey,"/uuids")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["status","type"]};return(null==t?void 0:t.include)&&(null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),f.include=f.include.join(","),(null===(r=null==t?void 0:t.include)||void 0===r?void 0:r.totalCount)&&(f.count=null===(o=t.include)||void 0===o?void 0:o.totalCount),(null===(i=null==t?void 0:t.page)||void 0===i?void 0:i.next)&&(f.start=null===(a=t.page)||void 0===a?void 0:a.next),(null===(u=null==t?void 0:t.page)||void 0===u?void 0:u.prev)&&(f.end=null===(c=t.page)||void 0===c?void 0:c.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),f.limit=null!==(l=null==t?void 0:t.limit)&&void 0!==l?l:100,(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,next:t.next,prev:t.prev}}},Pe={getOperation:function(){return I.PNGetUUIDMetadataOperation},validateParams:function(){},getURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(M.encodeString(null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o=e.config,i={};return i.uuid=null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:o.getUUID(),i.include=["status","type","custom"],(null==t?void 0:t.include)&&!1===(null===(r=t.include)||void 0===r?void 0:r.customFields)&&i.include.pop(),i.include=i.include.join(","),i},handleResponse:function(e,t){return{status:t.status,data:t.data}}},we={getOperation:function(){return I.PNSetUUIDMetadataOperation},validateParams:function(e,t){if(!(null==t?void 0:t.data))return"Data cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(M.encodeString(null!==(n=t.uuid)&&void 0!==n?n:r.getUUID()))},patchPayload:function(e,t){return t.data},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o=e.config,i={};return i.uuid=null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:o.getUUID(),i.include=["status","type","custom"],(null==t?void 0:t.include)&&!1===(null===(r=t.include)||void 0===r?void 0:r.customFields)&&i.include.pop(),i.include=i.include.join(","),i},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Ee={getOperation:function(){return I.PNRemoveUUIDMetadataOperation},validateParams:function(){},getURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(M.encodeString(null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()))},useDelete:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r=e.config;return{uuid:null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()}},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Te={getOperation:function(){return I.PNGetAllChannelMetadataOperation},validateParams:function(){},getURL:function(e){var t=e.config;return"/v2/objects/".concat(t.subscribeKey,"/channels")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["status","type"]};return(null==t?void 0:t.include)&&(null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),f.include=f.include.join(","),(null===(r=null==t?void 0:t.include)||void 0===r?void 0:r.totalCount)&&(f.count=null===(o=t.include)||void 0===o?void 0:o.totalCount),(null===(i=null==t?void 0:t.page)||void 0===i?void 0:i.next)&&(f.start=null===(a=t.page)||void 0===a?void 0:a.next),(null===(u=null==t?void 0:t.page)||void 0===u?void 0:u.prev)&&(f.end=null===(c=t.page)||void 0===c?void 0:c.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),f.limit=null!==(l=null==t?void 0:t.limit)&&void 0!==l?l:100,(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},Ae={getOperation:function(){return I.PNGetChannelMetadataOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"Channel cannot be empty"},getURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r={include:["status","type","custom"]};return(null==t?void 0:t.include)&&!1===(null===(n=t.include)||void 0===n?void 0:n.customFields)&&r.include.pop(),r.include=r.include.join(","),r},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Ne={getOperation:function(){return I.PNSetChannelMetadataOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.data)?void 0:"Data cannot be empty":"Channel cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel))},patchPayload:function(e,t){return t.data},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r={include:["status","type","custom"]};return(null==t?void 0:t.include)&&!1===(null===(n=t.include)||void 0===n?void 0:n.customFields)&&r.include.pop(),r.include=r.include.join(","),r},handleResponse:function(e,t){return{status:t.status,data:t.data}}},ke={getOperation:function(){return I.PNRemoveChannelMetadataOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"Channel cannot be empty"},getURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel))},useDelete:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{status:t.status,data:t.data}}},Ce={getOperation:function(){return I.PNGetMembersOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channel))return"UUID cannot be empty"},getURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel),"/uuids")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f,h,d,y={include:["uuid.status","uuid.type","type"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&y.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customUUIDFields)&&y.include.push("uuid.custom"),(null===(i=null===(o=t.include)||void 0===o?void 0:o.UUIDFields)||void 0===i||i)&&y.include.push("uuid")),y.include=y.include.join(","),(null===(a=null==t?void 0:t.include)||void 0===a?void 0:a.totalCount)&&(y.count=null===(u=t.include)||void 0===u?void 0:u.totalCount),(null===(c=null==t?void 0:t.page)||void 0===c?void 0:c.next)&&(y.start=null===(l=t.page)||void 0===l?void 0:l.next),(null===(p=null==t?void 0:t.page)||void 0===p?void 0:p.prev)&&(y.end=null===(f=t.page)||void 0===f?void 0:f.prev),(null==t?void 0:t.filter)&&(y.filter=t.filter),y.limit=null!==(h=null==t?void 0:t.limit)&&void 0!==h?h:100,(null==t?void 0:t.sort)&&(y.sort=Object.entries(null!==(d=t.sort)&&void 0!==d?d:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),y},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},je={getOperation:function(){return I.PNSetMembersOperation},validateParams:function(e,t){return(null==t?void 0:t.channel)?(null==t?void 0:t.uuids)&&0!==(null==t?void 0:t.uuids.length)?void 0:"UUIDs cannot be empty":"Channel cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n=e.config;return"/v2/objects/".concat(n.subscribeKey,"/channels/").concat(M.encodeString(t.channel),"/uuids")},patchPayload:function(e,t){var n;return(n={set:[],delete:[]})[t.type]=t.uuids.map((function(e){return"string"==typeof e?{uuid:{id:e}}:{uuid:{id:e.id},custom:e.custom,status:e.status}})),n},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["uuid.status","uuid.type","type"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customUUIDFields)&&f.include.push("uuid.custom"),(null===(o=t.include)||void 0===o?void 0:o.UUIDFields)&&f.include.push("uuid")),f.include=f.include.join(","),(null===(i=null==t?void 0:t.include)||void 0===i?void 0:i.totalCount)&&(f.count=!0),(null===(a=null==t?void 0:t.page)||void 0===a?void 0:a.next)&&(f.start=null===(u=t.page)||void 0===u?void 0:u.next),(null===(c=null==t?void 0:t.page)||void 0===c?void 0:c.prev)&&(f.end=null===(l=t.page)||void 0===l?void 0:l.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),null!=t.limit&&(f.limit=t.limit),(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},Me={getOperation:function(){return I.PNGetMembershipsOperation},validateParams:function(){},getURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(M.encodeString(null!==(n=null==t?void 0:t.uuid)&&void 0!==n?n:r.getUUID()),"/channels")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f,h,d={include:["channel.status","channel.type","status"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&d.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customChannelFields)&&d.include.push("channel.custom"),(null===(o=t.include)||void 0===o?void 0:o.channelFields)&&d.include.push("channel")),d.include=d.include.join(","),(null===(i=null==t?void 0:t.include)||void 0===i?void 0:i.totalCount)&&(d.count=null===(a=t.include)||void 0===a?void 0:a.totalCount),(null===(u=null==t?void 0:t.page)||void 0===u?void 0:u.next)&&(d.start=null===(c=t.page)||void 0===c?void 0:c.next),(null===(l=null==t?void 0:t.page)||void 0===l?void 0:l.prev)&&(d.end=null===(p=t.page)||void 0===p?void 0:p.prev),(null==t?void 0:t.filter)&&(d.filter=t.filter),d.limit=null!==(f=null==t?void 0:t.limit)&&void 0!==f?f:100,(null==t?void 0:t.sort)&&(d.sort=Object.entries(null!==(h=t.sort)&&void 0!==h?h:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),d},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}},Re={getOperation:function(){return I.PNSetMembershipsOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channels)||0===(null==t?void 0:t.channels.length))return"Channels cannot be empty"},usePatch:function(){return!0},patchURL:function(e,t){var n,r=e.config;return"/v2/objects/".concat(r.subscribeKey,"/uuids/").concat(M.encodeString(null!==(n=t.uuid)&&void 0!==n?n:r.getUUID()),"/channels")},patchPayload:function(e,t){var n;return(n={set:[],delete:[]})[t.type]=t.channels.map((function(e){return"string"==typeof e?{channel:{id:e}}:{channel:{id:e.id},custom:e.custom,status:e.status}})),n},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n,r,o,i,a,u,c,l,p,f={include:["channel.status","channel.type","status"]};return(null==t?void 0:t.include)&&((null===(n=t.include)||void 0===n?void 0:n.customFields)&&f.include.push("custom"),(null===(r=t.include)||void 0===r?void 0:r.customChannelFields)&&f.include.push("channel.custom"),(null===(o=t.include)||void 0===o?void 0:o.channelFields)&&f.include.push("channel")),f.include=f.include.join(","),(null===(i=null==t?void 0:t.include)||void 0===i?void 0:i.totalCount)&&(f.count=!0),(null===(a=null==t?void 0:t.page)||void 0===a?void 0:a.next)&&(f.start=null===(u=t.page)||void 0===u?void 0:u.next),(null===(c=null==t?void 0:t.page)||void 0===c?void 0:c.prev)&&(f.end=null===(l=t.page)||void 0===l?void 0:l.prev),(null==t?void 0:t.filter)&&(f.filter=t.filter),null!=t.limit&&(f.limit=t.limit),(null==t?void 0:t.sort)&&(f.sort=Object.entries(null!==(p=t.sort)&&void 0!==p?p:{}).map((function(e){var t=s(e,2),n=t[0],r=t[1];return"asc"===r||"desc"===r?"".concat(n,":").concat(r):n}))),f},handleResponse:function(e,t){return{status:t.status,data:t.data,totalCount:t.totalCount,prev:t.prev,next:t.next}}};var Ue=Object.freeze({__proto__:null,getOperation:function(){return I.PNAccessManagerAudit},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e){var t=e.config;return"/v2/auth/audit/sub-key/".concat(t.subscribeKey)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(e,t){var n=t.channel,r=t.channelGroup,o=t.authKeys,i=void 0===o?[]:o,a={};return n&&(a.channel=n),r&&(a["channel-group"]=r),i.length>0&&(a.auth=i.join(",")),a},handleResponse:function(e,t){return t.payload}});var Ie=Object.freeze({__proto__:null,getOperation:function(){return I.PNAccessManagerGrant},validateParams:function(e,t){var n=e.config;return n.subscribeKey?n.publishKey?n.secretKey?null==t.uuids||t.authKeys?null==t.uuids||null==t.channels&&null==t.channelGroups?void 0:"Both channel/channelgroup and uuid cannot be used in the same request":"authKeys are required for grant request on uuids":"Missing Secret Key":"Missing Publish Key":"Missing Subscribe Key"},getURL:function(e){var t=e.config;return"/v2/auth/grant/sub-key/".concat(t.subscribeKey)},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(e,t){var n=t.channels,r=void 0===n?[]:n,o=t.channelGroups,i=void 0===o?[]:o,a=t.uuids,s=void 0===a?[]:a,u=t.ttl,c=t.read,l=void 0!==c&&c,p=t.write,f=void 0!==p&&p,h=t.manage,d=void 0!==h&&h,y=t.get,g=void 0!==y&&y,b=t.join,v=void 0!==b&&b,m=t.update,_=void 0!==m&&m,O=t.authKeys,S=void 0===O?[]:O,P=t.delete,w={};return w.r=l?"1":"0",w.w=f?"1":"0",w.m=d?"1":"0",w.d=P?"1":"0",w.g=g?"1":"0",w.j=v?"1":"0",w.u=_?"1":"0",r.length>0&&(w.channel=r.join(",")),i.length>0&&(w["channel-group"]=i.join(",")),S.length>0&&(w.auth=S.join(",")),s.length>0&&(w["target-uuid"]=s.join(",")),(u||0===u)&&(w.ttl=u),w},handleResponse:function(){return{}}});function xe(e){var t,n,r,o,i=void 0!==(null==e?void 0:e.authorizedUserId),a=void 0!==(null===(t=null==e?void 0:e.resources)||void 0===t?void 0:t.users),s=void 0!==(null===(n=null==e?void 0:e.resources)||void 0===n?void 0:n.spaces),u=void 0!==(null===(r=null==e?void 0:e.patterns)||void 0===r?void 0:r.users),c=void 0!==(null===(o=null==e?void 0:e.patterns)||void 0===o?void 0:o.spaces);return u||a||c||s||i}function De(e){var t=0;return e.join&&(t|=128),e.update&&(t|=64),e.get&&(t|=32),e.delete&&(t|=8),e.manage&&(t|=4),e.write&&(t|=2),e.read&&(t|=1),t}function Fe(e,t){if(xe(t))return function(e,t){var n=t.ttl,r=t.resources,o=t.patterns,i=t.meta,a=t.authorizedUserId,s={ttl:0,permissions:{resources:{channels:{},groups:{},uuids:{},users:{},spaces:{}},patterns:{channels:{},groups:{},uuids:{},users:{},spaces:{}},meta:{}}};if(r){var u=r.users,c=r.spaces,l=r.groups;u&&Object.keys(u).forEach((function(e){s.permissions.resources.uuids[e]=De(u[e])})),c&&Object.keys(c).forEach((function(e){s.permissions.resources.channels[e]=De(c[e])})),l&&Object.keys(l).forEach((function(e){s.permissions.resources.groups[e]=De(l[e])}))}if(o){var p=o.users,f=o.spaces,h=o.groups;p&&Object.keys(p).forEach((function(e){s.permissions.patterns.uuids[e]=De(p[e])})),f&&Object.keys(f).forEach((function(e){s.permissions.patterns.channels[e]=De(f[e])})),h&&Object.keys(h).forEach((function(e){s.permissions.patterns.groups[e]=De(h[e])}))}return(n||0===n)&&(s.ttl=n),i&&(s.permissions.meta=i),a&&(s.permissions.uuid="".concat(a)),s}(0,t);var n=t.ttl,r=t.resources,o=t.patterns,i=t.meta,a=t.authorized_uuid,s={ttl:0,permissions:{resources:{channels:{},groups:{},uuids:{},users:{},spaces:{}},patterns:{channels:{},groups:{},uuids:{},users:{},spaces:{}},meta:{}}};if(r){var u=r.uuids,c=r.channels,l=r.groups;u&&Object.keys(u).forEach((function(e){s.permissions.resources.uuids[e]=De(u[e])})),c&&Object.keys(c).forEach((function(e){s.permissions.resources.channels[e]=De(c[e])})),l&&Object.keys(l).forEach((function(e){s.permissions.resources.groups[e]=De(l[e])}))}if(o){var p=o.uuids,f=o.channels,h=o.groups;p&&Object.keys(p).forEach((function(e){s.permissions.patterns.uuids[e]=De(p[e])})),f&&Object.keys(f).forEach((function(e){s.permissions.patterns.channels[e]=De(f[e])})),h&&Object.keys(h).forEach((function(e){s.permissions.patterns.groups[e]=De(h[e])}))}return(n||0===n)&&(s.ttl=n),i&&(s.permissions.meta=i),a&&(s.permissions.uuid="".concat(a)),s}var Ge=Object.freeze({__proto__:null,getOperation:function(){return I.PNAccessManagerGrantToken},extractPermissions:De,validateParams:function(e,t){var n,r,o,i,a,s,u=e.config;if(!u.subscribeKey)return"Missing Subscribe Key";if(!u.publishKey)return"Missing Publish Key";if(!u.secretKey)return"Missing Secret Key";if(!t.resources&&!t.patterns)return"Missing either Resources or Patterns.";var c=void 0!==(null==t?void 0:t.authorized_uuid),l=void 0!==(null===(n=null==t?void 0:t.resources)||void 0===n?void 0:n.uuids),p=void 0!==(null===(r=null==t?void 0:t.resources)||void 0===r?void 0:r.channels),f=void 0!==(null===(o=null==t?void 0:t.resources)||void 0===o?void 0:o.groups),h=void 0!==(null===(i=null==t?void 0:t.patterns)||void 0===i?void 0:i.uuids),d=void 0!==(null===(a=null==t?void 0:t.patterns)||void 0===a?void 0:a.channels),y=void 0!==(null===(s=null==t?void 0:t.patterns)||void 0===s?void 0:s.groups),g=c||l||h||p||d||f||y;return xe(t)&&g?"Cannot mix `users`, `spaces` and `authorizedUserId` with `uuids`, `channels`, `groups` and `authorized_uuid`":(!t.resources||t.resources.uuids&&0!==Object.keys(t.resources.uuids).length||t.resources.channels&&0!==Object.keys(t.resources.channels).length||t.resources.groups&&0!==Object.keys(t.resources.groups).length||t.resources.users&&0!==Object.keys(t.resources.users).length||t.resources.spaces&&0!==Object.keys(t.resources.spaces).length)&&(!t.patterns||t.patterns.uuids&&0!==Object.keys(t.patterns.uuids).length||t.patterns.channels&&0!==Object.keys(t.patterns.channels).length||t.patterns.groups&&0!==Object.keys(t.patterns.groups).length||t.patterns.users&&0!==Object.keys(t.patterns.users).length||t.patterns.spaces&&0!==Object.keys(t.patterns.spaces).length)?void 0:"Missing values for either Resources or Patterns."},postURL:function(e){var t=e.config;return"/v3/pam/".concat(t.subscribeKey,"/grant")},usePost:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(){return{}},postPayload:function(e,t){return Fe(0,t)},handleResponse:function(e,t){return t.data.token}}),Le={getOperation:function(){return I.PNAccessManagerRevokeToken},validateParams:function(e,t){return e.config.secretKey?t?void 0:"token can't be empty":"Missing Secret Key"},getURL:function(e,t){var n=e.config;return"/v3/pam/".concat(n.subscribeKey,"/grant/").concat(M.encodeString(t))},useDelete:function(){return!0},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!1},prepareParams:function(e){return{uuid:e.config.getUUID()}},handleResponse:function(e,t){return{status:t.status,data:t.data}}};function Ke(e,t){var n=JSON.stringify(t);if(e.cryptoModule){var r=e.cryptoModule.encrypt(n);n="string"==typeof r?r:v(r),n=JSON.stringify(n)}return n||""}var Be=Object.freeze({__proto__:null,getOperation:function(){return I.PNPublishOperation},validateParams:function(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"},usePost:function(e,t){var n=t.sendByPost;return void 0!==n&&n},getURL:function(e,t){var n=e.config,r=t.channel,o=Ke(e,t.message);return"/publish/".concat(n.publishKey,"/").concat(n.subscribeKey,"/0/").concat(M.encodeString(r),"/0/").concat(M.encodeString(o))},postURL:function(e,t){var n=e.config,r=t.channel;return"/publish/".concat(n.publishKey,"/").concat(n.subscribeKey,"/0/").concat(M.encodeString(r),"/0")},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},postPayload:function(e,t){return Ke(e,t.message)},prepareParams:function(e,t){var n=t.meta,r=t.replicate,o=void 0===r||r,i=t.storeInHistory,a=t.ttl,s={};return null!=i&&(s.store=i?"1":"0"),a&&(s.ttl=a),!1===o&&(s.norep="true"),n&&"object"==typeof n&&(s.meta=JSON.stringify(n)),s},handleResponse:function(e,t){return{timetoken:t[2]}}});var He=Object.freeze({__proto__:null,getOperation:function(){return I.PNSignalOperation},validateParams:function(e,t){var n=e.config,r=t.message;return t.channel?r?n.subscribeKey?void 0:"Missing Subscribe Key":"Missing Message":"Missing Channel"},getURL:function(e,t){var n,r=e.config,o=t.channel,i=t.message,a=(n=i,JSON.stringify(n));return"/signal/".concat(r.publishKey,"/").concat(r.subscribeKey,"/0/").concat(M.encodeString(o),"/0/").concat(M.encodeString(a))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(){return{}},handleResponse:function(e,t){return{timetoken:t[2]}}});function qe(e,t){if(!e.cryptoModule)return t;try{var n=e.cryptoModule.decrypt(t);return n instanceof ArrayBuffer?JSON.parse((new TextDecoder).decode(n)):n}catch(e){return console&&console.log&&console.log("decryption error",e.message),t}}var ze=Object.freeze({__proto__:null,getOperation:function(){return I.PNHistoryOperation},validateParams:function(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"},getURL:function(e,t){var n=t.channel,r=e.config;return"/v2/history/sub-key/".concat(r.subscribeKey,"/channel/").concat(M.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.start,r=t.end,o=t.reverse,i=t.count,a=void 0===i?100:i,s=t.stringifiedTimeToken,u=void 0!==s&&s,c=t.includeMeta,l=void 0!==c&&c,p={include_token:"true"};return p.count=a,n&&(p.start=n),r&&(p.end=r),u&&(p.string_message_token="true"),null!=o&&(p.reverse=o.toString()),l&&(p.include_meta="true"),p},handleResponse:function(e,t){var n={messages:[],startTimeToken:t[1],endTimeToken:t[2]};return Array.isArray(t[0])&&t[0].forEach((function(t){var r={timetoken:t.timetoken,entry:qe(e,t.message)};t.meta&&(r.meta=t.meta),n.messages.push(r)})),n}});var Ve=Object.freeze({__proto__:null,getOperation:function(){return I.PNDeleteMessagesOperation},validateParams:function(e,t){var n=t.channel,r=e.config;return n?r.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"},useDelete:function(){return!0},getURL:function(e,t){var n=t.channel,r=e.config;return"/v3/history/sub-key/".concat(r.subscribeKey,"/channel/").concat(M.encodeString(n))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.start,r=t.end,o={};return n&&(o.start=n),r&&(o.end=r),o},handleResponse:function(e,t){return t.payload}});var We=Object.freeze({__proto__:null,getOperation:function(){return I.PNMessageCounts},validateParams:function(e,t){var n=t.channels,r=t.timetoken,o=t.channelTimetokens,i=e.config;return n?r&&o?"timetoken and channelTimetokens are incompatible together":o&&o.length>1&&n.length!==o.length?"Length of channelTimetokens and channels do not match":i.subscribeKey?void 0:"Missing Subscribe Key":"Missing channel"},getURL:function(e,t){var n=t.channels,r=e.config,o=n.join(",");return"/v3/history/sub-key/".concat(r.subscribeKey,"/message-counts/").concat(M.encodeString(o))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.timetoken,r=t.channelTimetokens,o={};if(r&&1===r.length){var i=s(r,1)[0];o.timetoken=i}else r?o.channelsTimetoken=r.join(","):n&&(o.timetoken=n);return o},handleResponse:function(e,t){return{channels:t.channels}}});var Je=Object.freeze({__proto__:null,getOperation:function(){return I.PNFetchMessagesOperation},validateParams:function(e,t){var n=t.channels,r=t.includeMessageActions,o=void 0!==r&&r,i=e.config;if(!n||0===n.length)return"Missing channels";if(!i.subscribeKey)return"Missing Subscribe Key";if(o&&n.length>1)throw new TypeError("History can return actions data for a single channel only. Either pass a single channel or disable the includeMessageActions flag.")},getURL:function(e,t){var n=t.channels,r=void 0===n?[]:n,o=t.includeMessageActions,i=void 0!==o&&o,a=e.config,s=i?"history-with-actions":"history",u=r.length>0?r.join(","):",";return"/v3/".concat(s,"/sub-key/").concat(a.subscribeKey,"/channel/").concat(M.encodeString(u))},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=t.channels,r=t.start,o=t.end,i=t.includeMessageActions,a=t.count,s=t.stringifiedTimeToken,u=void 0!==s&&s,c=t.includeMeta,l=void 0!==c&&c,p=t.includeUuid,f=t.includeUUID,h=void 0===f||f,d=t.includeMessageType,y=void 0===d||d,g={};return g.max=a||(n.length>1||!0===i?25:100),r&&(g.start=r),o&&(g.end=o),u&&(g.string_message_token="true"),l&&(g.include_meta="true"),h&&!1!==p&&(g.include_uuid="true"),y&&(g.include_message_type="true"),g},handleResponse:function(e,t){var n={channels:{}};return Object.keys(t.channels||{}).forEach((function(r){n.channels[r]=[],(t.channels[r]||[]).forEach((function(t){var o={};o.channel=r,o.timetoken=t.timetoken,o.message=function(e,t){if(!e.cryptoModule)return t;try{var n=e.cryptoModule.decrypt(t);return n instanceof ArrayBuffer?JSON.parse((new TextDecoder).decode(n)):n}catch(e){return console&&console.log&&console.log("decryption error",e.message),t}}(e,t.message),o.messageType=t.message_type,o.uuid=t.uuid,t.actions&&(o.actions=t.actions,o.data=t.actions),t.meta&&(o.meta=t.meta),n.channels[r].push(o)}))})),t.more&&(n.more=t.more),n}});var $e=Object.freeze({__proto__:null,getOperation:function(){return I.PNTimeOperation},getURL:function(){return"/time/0"},getRequestTimeout:function(e){return e.config.getTransactionTimeout()},prepareParams:function(){return{}},isAuthSupported:function(){return!1},handleResponse:function(e,t){return{timetoken:t[0]}},validateParams:function(){}});var Qe=Object.freeze({__proto__:null,getOperation:function(){return I.PNSubscribeOperation},validateParams:function(e){if(!e.config.subscribeKey)return"Missing Subscribe Key"},getURL:function(e,t){var n=e.config,r=t.channels,o=void 0===r?[]:r,i=o.length>0?o.join(","):",";return"/v2/subscribe/".concat(n.subscribeKey,"/").concat(M.encodeString(i),"/0")},getRequestTimeout:function(e){return e.config.getSubscribeTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n=e.config,r=t.state,o=t.channelGroups,i=void 0===o?[]:o,a=t.timetoken,s=t.filterExpression,u=t.region,c={heartbeat:n.getPresenceTimeout()};return i.length>0&&(c["channel-group"]=i.join(",")),s&&s.length>0&&(c["filter-expr"]=s),Object.keys(r).length&&(c.state=JSON.stringify(r)),a&&(c.tt=a),u&&(c.tr=u),c},handleResponse:function(e,t){var n=[];t.m.forEach((function(e){var t={publishTimetoken:e.p.t,region:e.p.r},r={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,messageType:e.e,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,userMetadata:e.u,publishMetaData:t};n.push(r)}));var r={timetoken:t.t.t,region:t.t.r};return{messages:n,metadata:r}}}),Xe={getOperation:function(){return I.PNHandshakeOperation},validateParams:function(e,t){if(!(null==t?void 0:t.channels)&&!(null==t?void 0:t.channelGroups))return"channels and channleGroups both should not be empty"},getURL:function(e,t){var n=e.config,r=t.channels?t.channels.join(","):",";return"/v2/subscribe/".concat(n.subscribeKey,"/").concat(M.encodeString(r),"/0")},getRequestTimeout:function(e){return e.config.getSubscribeTimeout()},isAuthSupported:function(){return!0},prepareParams:function(e,t){var n={};return t.channelGroups&&t.channelGroups.length>0&&(n["channel-group"]=t.channelGroups.join(",")),n.tt=0,n},handleResponse:function(e,t){return{region:t.t.r,timetoken:t.t.t}}},Ye={getOperation:function(){return I.PNReceiveMessagesOperation},validateParams:function(e,t){return(null==t?void 0:t.channels)||(null==t?void 0:t.channelGroups)?(null==t?void 0:t.timetoken)?(null==t?void 0:t.region)?void 0:"region can not be empty":"timetoken can not be empty":"channels and channleGroups both should not be empty"},getURL:function(e,t){var n=e.config,r=t.channels?t.channels.join(","):",";return"/v2/subscribe/".concat(n.subscribeKey,"/").concat(M.encodeString(r),"/0")},getRequestTimeout:function(e){return e.config.getSubscribeTimeout()},isAuthSupported:function(){return!0},getAbortSignal:function(e,t){return t.abortSignal},prepareParams:function(e,t){var n={};return t.channelGroups&&t.channelGroups.length>0&&(n["channel-group"]=t.channelGroups.join(",")),n.tt=t.timetoken,n.tr=t.region,n},handleResponse:function(e,t){var n=[];return t.m.forEach((function(e){var t={shard:parseInt(e.a,10),subscriptionMatch:e.b,channel:e.c,messageType:e.e,payload:e.d,flags:e.f,issuingClientId:e.i,subscribeKey:e.k,originationTimetoken:e.o,publishMetaData:{timetoken:e.p.t,region:e.p.r}};n.push(t)})),{messages:n,metadata:{region:t.t.r,timetoken:t.t.t}}}},Ze=function(){function e(e){void 0===e&&(e=!1),this.sync=e,this.listeners=new Set}return e.prototype.subscribe=function(e){var t=this;return this.listeners.add(e),function(){t.listeners.delete(e)}},e.prototype.notify=function(e){var t=this,n=function(){t.listeners.forEach((function(t){t(e)}))};this.sync?n():setTimeout(n,0)},e}(),et=function(){function e(e){this.label=e,this.transitionMap=new Map,this.enterEffects=[],this.exitEffects=[]}return e.prototype.transition=function(e,t){var n;if(this.transitionMap.has(t.type))return null===(n=this.transitionMap.get(t.type))||void 0===n?void 0:n(e,t)},e.prototype.on=function(e,t){return this.transitionMap.set(e,t),this},e.prototype.with=function(e,t){return[this,e,null!=t?t:[]]},e.prototype.onEnter=function(e){return this.enterEffects.push(e),this},e.prototype.onExit=function(e){return this.exitEffects.push(e),this},e}(),tt=function(e){function n(){return null!==e&&e.apply(this,arguments)||this}return t(n,e),n.prototype.describe=function(e){return new et(e)},n.prototype.start=function(e,t){this.currentState=e,this.currentContext=t,this.notify({type:"engineStarted",state:e,context:t})},n.prototype.transition=function(e){var t,n,r,o,i,u;if(!this.currentState)throw new Error("Start the engine first");this.notify({type:"eventReceived",event:e});var c=this.currentState.transition(this.currentContext,e);if(c){var l=s(c,3),p=l[0],f=l[1],h=l[2];try{for(var d=a(this.currentState.exitEffects),y=d.next();!y.done;y=d.next()){var g=y.value;this.notify({type:"invocationDispatched",invocation:g(this.currentContext)})}}catch(e){t={error:e}}finally{try{y&&!y.done&&(n=d.return)&&n.call(d)}finally{if(t)throw t.error}}var b=this.currentState;this.currentState=p;var v=this.currentContext;this.currentContext=f,this.notify({type:"transitionDone",fromState:b,fromContext:v,toState:p,toContext:f,event:e});try{for(var m=a(h),_=m.next();!_.done;_=m.next()){g=_.value;this.notify({type:"invocationDispatched",invocation:g})}}catch(e){r={error:e}}finally{try{_&&!_.done&&(o=m.return)&&o.call(m)}finally{if(r)throw r.error}}try{for(var O=a(this.currentState.enterEffects),S=O.next();!S.done;S=O.next()){g=S.value;this.notify({type:"invocationDispatched",invocation:g(this.currentContext)})}}catch(e){i={error:e}}finally{try{S&&!S.done&&(u=O.return)&&u.call(O)}finally{if(i)throw i.error}}}},n}(Ze),nt=function(){function e(e){this.dependencies=e,this.instances=new Map,this.handlers=new Map}return e.prototype.on=function(e,t){this.handlers.set(e,t)},e.prototype.dispatch=function(e){if("CANCEL"!==e.type){var t=this.handlers.get(e.type);if(!t)throw new Error("Unhandled invocation '".concat(e.type,"'"));var n=t(e.payload,this.dependencies);e.managed&&this.instances.set(e.type,n),n.start()}else if(this.instances.has(e.payload)){var r=this.instances.get(e.payload);null==r||r.cancel(),this.instances.delete(e.payload)}},e}();function rt(e,t){var n=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return{type:e,payload:null==t?void 0:t.apply(void 0,u([],s(n),!1))}};return n.type=e,n}function ot(e,t){var n=function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];return{type:e,payload:t.apply(void 0,u([],s(n),!1)),managed:!0}};return n.type=e,n.cancel={type:"CANCEL",payload:e,managed:!1},n}var it,at,st,ut=function(e){function n(){var t=this.constructor,n=e.call(this,"The operation was aborted.")||this;return n.name="AbortError",Object.setPrototypeOf(n,t.prototype),n}return t(n,e),n}(Error),ct=function(e){function n(){var t=null!==e&&e.apply(this,arguments)||this;return t._aborted=!1,t}return t(n,e),Object.defineProperty(n.prototype,"aborted",{get:function(){return this._aborted},enumerable:!1,configurable:!0}),n.prototype.throwIfAborted=function(){if(this._aborted)throw new ut},n.prototype.abort=function(){this._aborted=!0,this.notify(new ut)},n}(Ze),lt=function(e){function n(t,n,r){var o=e.call(this,t,n)||this;return o.asyncFunction=r,o.abortSignal=new ct,o}return t(n,e),n.prototype.start=function(){this.asyncFunction(this.payload,this.abortSignal,this.dependencies)},n.prototype.cancel=function(){this.abortSignal.abort()},n}((function(e,t){this.payload=e,this.dependencies=t})),pt=function(e){return function(t,n){return new lt(t,n,e)}},ft=ot("HANDSHAKE",(function(e,t){return{channels:e,groups:t}})),ht=ot("RECEIVE_EVENTS",(function(e,t,n){return{channels:e,groups:t,cursor:n}})),dt=(at=function(e){return e},st=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return{type:it,payload:at.apply(void 0,u([],s(e),!1)),managed:!1}},st.type=it="EMIT_EVENTS",st),yt=ot("RECONNECT",(function(e){return e})),gt=ot("HANDSHAKE_RECONNECT",(function(e){return e})),bt=rt("SUBSCRIPTION_CHANGE",(function(e,t){return{channels:e,groups:t}})),vt=rt("DISCONNECT",(function(){return{}})),mt=rt("RECONNECT",(function(){return{}}));rt("RESTORE",(function(e,t,n,r){return{channels:e,groups:t,timetoken:n,region:r}}));var _t=rt("HANDSHAKING_SUCCESS",(function(e){return e})),Ot=rt("HANDSHAKING_FAILURE",(function(e){return e})),St=rt("HANDSHAKING_RECONNECTING_SUCCESS",(function(e){return{cursor:e}})),Pt=rt("HANDSHAKING_RECONNECTING_FAILURE",(function(e){return e})),wt=rt("HANDSHAKING_RECONNECTING_GIVEUP",(function(){return{}})),Et=rt("HANDSHAKING_RECONNECTING_RETRY",(function(){return{}})),Tt=rt("RECEIVING_SUCCESS",(function(e,t){return{cursor:e,events:t}})),At=rt("RECEIVING_FAILURE",(function(e){return e})),Nt=rt("RECONNECTING_SUCCESS",(function(e,t){return{cursor:e,events:t}})),kt=rt("RECONNECTING_FAILURE",(function(e){return e})),Ct=rt("RECONNECTING_GIVEUP",(function(){return{}})),jt=rt("RECONNECTING_RETRY",(function(){return{}})),Mt=function(e){function n(t,n){var r=e.call(this,n)||this;return r.on(ft.type,pt((function(e,n,a){var s=a.handshake;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:n.throwIfAborted(),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups})];case 2:return r=i.sent(),t.transition(_t(r)),[3,4];case 3:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof q?[2,t.transition(Ot(o))]:[3,4];case 4:return[2]}}))}))}))),r.on(ht.type,pt((function(e,n,a){var s=a.receiveEvents;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:n.throwIfAborted(),i.label=1;case 1:return i.trys.push([1,3,,4]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups,timetoken:e.cursor.timetoken,region:e.cursor.region})];case 2:return r=i.sent(),t.transition(Tt(r.metadata,r.messages)),[3,4];case 3:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof q?[2,t.transition(At(o))]:[3,4];case 4:return[2]}}))}))}))),r.on(dt.type,pt((function(e,t,n){return n.receiveEvents,o(r,void 0,void 0,(function(){return i(this,(function(t){return e.length>0&&console.log(e),[2]}))}))}))),r.on(yt.type,pt((function(e,n,a){var s=a.receiveEvents,u=a.shouldRetry,c=a.getRetryDelay,l=a.delay;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:return u(e.reason,e.attempts)?(n.throwIfAborted(),[4,l(c(e.attempts))]):[2,t.transition(Ct())];case 1:i.sent(),n.throwIfAborted(),i.label=2;case 2:return i.trys.push([2,4,,5]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups,timetoken:e.cursor.timetoken,region:e.cursor.region})];case 3:return r=i.sent(),[2,t.transition(Nt(r.metadata,r.messages))];case 4:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof q?[2,t.transition(kt(o))]:[3,5];case 5:return[2]}}))}))}))),r.on(gt.type,pt((function(e,n,a){var s=a.handshake,u=a.shouldRetry,c=a.getRetryDelay,l=a.delay;return o(r,void 0,void 0,(function(){var r,o;return i(this,(function(i){switch(i.label){case 0:return u(e.reason,e.attempts)?(n.throwIfAborted(),[4,l(c(e.attempts))]):[2,t.transition(wt())];case 1:i.sent(),n.throwIfAborted(),i.label=2;case 2:return i.trys.push([2,4,,5]),[4,s({abortSignal:n,channels:e.channels,channelGroups:e.groups})];case 3:return r=i.sent(),[2,t.transition(St(r.metadata))];case 4:return(o=i.sent())instanceof Error&&"Aborted"===o.message?[2]:o instanceof q?[2,t.transition(Pt(o))]:[3,5];case 5:return[2]}}))}))}))),r}return t(n,e),n}(nt),Rt=new et("STOPPED");Rt.on(bt.type,(function(e,t){return Rt.with({channels:t.payload.channels,groups:t.payload.groups})})),Rt.on(mt.type,(function(e){return Lt.with(n({},e))}));var Ut=new et("HANDSHAKE_FAILURE");Ut.on(Et.type,(function(e){return Gt.with(n(n({},e),{attempts:0}))})),Ut.on(vt.type,(function(e){return Rt.with({channels:e.channels,groups:e.groups})}));var It=new et("STOPPED");It.on(bt.type,(function(e,t){return It.with({channels:t.payload.channels,groups:t.payload.groups,cursor:e.cursor})})),It.on(mt.type,(function(e){return Ft.with(n({},e))}));var xt=new et("RECEIVE_FAILURE");xt.on(jt.type,(function(e){return Dt.with(n(n({},e),{attempts:0}))})),xt.on(vt.type,(function(e){return It.with({channels:e.channels,groups:e.groups,cursor:e.cursor})}));var Dt=new et("RECEIVE_RECONNECTING");Dt.onEnter((function(e){return yt(e)})),Dt.onExit((function(){return yt.cancel})),Dt.on(Nt.type,(function(e,t){return Ft.with({channels:e.channels,groups:e.groups,cursor:t.payload.cursor},[dt(t.payload.events)])})),Dt.on(kt.type,(function(e,t){return Dt.with(n(n({},e),{attempts:e.attempts+1,reason:t.payload}))})),Dt.on(Ct.type,(function(e){return xt.with({groups:e.groups,channels:e.channels,cursor:e.cursor,reason:e.reason})})),Dt.on(vt.type,(function(e){return It.with({channels:e.channels,groups:e.groups,cursor:e.cursor})}));var Ft=new et("RECEIVING");Ft.onEnter((function(e){return ht(e.channels,e.groups,e.cursor)})),Ft.onExit((function(){return ht.cancel})),Ft.on(Tt.type,(function(e,t){return Ft.with(n(n({},e),{cursor:t.payload.cursor}),[dt(t.payload.events)])})),Ft.on(bt.type,(function(e,t){return 0===t.payload.channels.length&&0===t.payload.groups.length?Kt.with(void 0):Ft.with(n(n({},e),{channels:t.payload.channels,groups:t.payload.groups}))})),Ft.on(At.type,(function(e,t){return Dt.with(n(n({},e),{attempts:0,reason:t.payload}))})),Ft.on(vt.type,(function(e){return It.with({channels:e.channels,groups:e.groups,cursor:e.cursor})}));var Gt=new et("HANDSHAKE_RECONNECTING");Gt.onEnter((function(e){return gt(e)})),Gt.onExit((function(){return yt.cancel})),Gt.on(Nt.type,(function(e,t){return Ft.with({channels:e.channels,groups:e.groups,cursor:t.payload.cursor},[dt(t.payload.events)])})),Gt.on(kt.type,(function(e,t){return Gt.with(n(n({},e),{attempts:e.attempts+1,reason:t.payload}))})),Gt.on(Ct.type,(function(e){return Ut.with({groups:e.groups,channels:e.channels,reason:e.reason})})),Gt.on(vt.type,(function(e){return Rt.with({channels:e.channels,groups:e.groups})}));var Lt=new et("HANDSHAKING");Lt.onEnter((function(e){return ft(e.channels,e.groups)})),Lt.onExit((function(){return ft.cancel})),Lt.on(bt.type,(function(e,t){return 0===t.payload.channels.length&&0===t.payload.groups.length?Kt.with(void 0):Lt.with({channels:t.payload.channels,groups:t.payload.groups})})),Lt.on(_t.type,(function(e,t){return Ft.with({channels:e.channels,groups:e.groups,cursor:t.payload})})),Lt.on(Ot.type,(function(e,t){return Gt.with(n(n({},e),{attempts:0,reason:t.payload}))})),Lt.on(vt.type,(function(e){return Rt.with({channels:e.channels,groups:e.groups})}));var Kt=new et("UNSUBSCRIBED");Kt.on(bt.type,(function(e,t){return Lt.with({channels:t.payload.channels,groups:t.payload.groups})}));var Bt=function(){function e(e){var t=this;this.engine=new tt,this.channels=[],this.groups=[],this.dispatcher=new Mt(this.engine,e),this.engine.subscribe((function(e){"invocationDispatched"===e.type&&t.dispatcher.dispatch(e.invocation)})),this.engine.start(Kt,void 0)}return Object.defineProperty(e.prototype,"_engine",{get:function(){return this.engine},enumerable:!1,configurable:!0}),e.prototype.subscribe=function(e){var t=e.channels,n=e.groups;this.channels=u(u([],s(this.channels),!1),s(null!=t?t:[]),!1),this.groups=u(u([],s(this.groups),!1),s(null!=n?n:[]),!1),this.engine.transition(bt(this.channels,this.groups))},e.prototype.unsubscribe=function(e){var t=e.channels,n=e.groups;this.channels=this.channels.filter((function(e){var n;return null===(n=!(null==t?void 0:t.includes(e)))||void 0===n||n})),this.groups=this.groups.filter((function(e){var t;return null===(t=!(null==n?void 0:n.includes(e)))||void 0===t||t})),this.engine.transition(bt(this.channels.slice(0),this.groups.slice(0)))},e.prototype.unsubscribeAll=function(){this.channels=[],this.groups=[],this.engine.transition(bt(this.channels.slice(0),this.groups.slice(0)))},e.prototype.reconnect=function(){this.engine.transition(mt())},e.prototype.disconnect=function(){this.engine.transition(vt())},e}(),Ht=function(){function e(e){var t=this,r=e.networking,o=e.cbor,i=new g({setup:e});this._config=i;var a=new A({config:i}),c=e.cryptography;r.init(i);var l=new H(i,o);this._tokenManager=l;var p=new x({maximumSamplesCount:6e4});this._telemetryManager=p;var f=this._config.cryptoModule,h={config:i,networking:r,crypto:a,cryptography:c,tokenManager:l,telemetryManager:p,PubNubFile:e.PubNubFile,cryptoModule:f};this.File=e.PubNubFile,this.encryptFile=function(e,t){return 1==arguments.length&&"string"!=typeof e&&h.cryptoModule?(t=e,h.cryptoModule.encryptFile(t,this.File)):c.encryptFile(e,t,this.File)},this.decryptFile=function(e,t){return 1==arguments.length&&"string"!=typeof e&&h.cryptoModule?(t=e,h.cryptoModule.decryptFile(t,this.File)):c.decryptFile(e,t,this.File)};var d=Q.bind(this,h,$e),y=Q.bind(this,h,ae),b=Q.bind(this,h,ue),m=Q.bind(this,h,le),_=Q.bind(this,h,Qe),O=new B;if(this._listenerManager=O,this.iAmHere=Q.bind(this,h,ue),this.iAmAway=Q.bind(this,h,ae),this.setPresenceState=Q.bind(this,h,le),this.handshake=Q.bind(this,h,Xe),this.receiveMessages=Q.bind(this,h,Ye),!0===i.enableSubscribeBeta){var S=new Bt({handshake:this.handshake,receiveEvents:this.receiveMessages});this.subscribe=S.subscribe.bind(S),this.unsubscribe=S.unsubscribe.bind(S),this.eventEngine=S}else{var P=new U({timeEndpoint:d,leaveEndpoint:y,heartbeatEndpoint:b,setStateEndpoint:m,subscribeEndpoint:_,crypto:h.crypto,config:h.config,listenerManager:O,getFileUrl:function(e){return me(h,e)},cryptoModule:h.cryptoModule});this.subscribe=P.adaptSubscribeChange.bind(P),this.unsubscribe=P.adaptUnsubscribeChange.bind(P),this.disconnect=P.disconnect.bind(P),this.reconnect=P.reconnect.bind(P),this.unsubscribeAll=P.unsubscribeAll.bind(P),this.getSubscribedChannels=P.getSubscribedChannels.bind(P),this.getSubscribedChannelGroups=P.getSubscribedChannelGroups.bind(P),this.setState=P.adaptStateChange.bind(P),this.presence=P.adaptPresenceChange.bind(P),this.destroy=function(e){P.unsubscribeAll(e),P.disconnect()}}this.addListener=O.addListener.bind(O),this.removeListener=O.removeListener.bind(O),this.removeAllListeners=O.removeAllListeners.bind(O),this.parseToken=l.parseToken.bind(l),this.setToken=l.setToken.bind(l),this.getToken=l.getToken.bind(l),this.channelGroups={listGroups:Q.bind(this,h,ee),listChannels:Q.bind(this,h,te),addChannels:Q.bind(this,h,X),removeChannels:Q.bind(this,h,Y),deleteGroup:Q.bind(this,h,Z)},this.push={addChannels:Q.bind(this,h,ne),removeChannels:Q.bind(this,h,re),deleteDevice:Q.bind(this,h,ie),listChannels:Q.bind(this,h,oe)},this.hereNow=Q.bind(this,h,pe),this.whereNow=Q.bind(this,h,se),this.getState=Q.bind(this,h,ce),this.grant=Q.bind(this,h,Ie),this.grantToken=Q.bind(this,h,Ge),this.audit=Q.bind(this,h,Ue),this.revokeToken=Q.bind(this,h,Le),this.publish=Q.bind(this,h,Be),this.fire=function(e,n){return e.replicate=!1,e.storeInHistory=!1,t.publish(e,n)},this.signal=Q.bind(this,h,He),this.history=Q.bind(this,h,ze),this.deleteMessages=Q.bind(this,h,Ve),this.messageCounts=Q.bind(this,h,We),this.fetchMessages=Q.bind(this,h,Je),this.addMessageAction=Q.bind(this,h,fe),this.removeMessageAction=Q.bind(this,h,he),this.getMessageActions=Q.bind(this,h,de),this.listFiles=Q.bind(this,h,ye);var w=Q.bind(this,h,ge);this.publishFile=Q.bind(this,h,be),this.sendFile=ve({generateUploadUrl:w,publishFile:this.publishFile,modules:h}),this.getFileUrl=function(e){return me(h,e)},this.downloadFile=Q.bind(this,h,_e),this.deleteFile=Q.bind(this,h,Oe),this.objects={getAllUUIDMetadata:Q.bind(this,h,Se),getUUIDMetadata:Q.bind(this,h,Pe),setUUIDMetadata:Q.bind(this,h,we),removeUUIDMetadata:Q.bind(this,h,Ee),getAllChannelMetadata:Q.bind(this,h,Te),getChannelMetadata:Q.bind(this,h,Ae),setChannelMetadata:Q.bind(this,h,Ne),removeChannelMetadata:Q.bind(this,h,ke),getChannelMembers:Q.bind(this,h,Ce),setChannelMembers:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return Q.call.apply(Q,u([t,h,je,n({type:"set"},e)],s(r),!1))},removeChannelMembers:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return Q.call.apply(Q,u([t,h,je,n({type:"delete"},e)],s(r),!1))},getMemberships:Q.bind(this,h,Me),setMemberships:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return Q.call.apply(Q,u([t,h,Re,n({type:"set"},e)],s(r),!1))},removeMemberships:function(e){for(var r=[],o=1;o<arguments.length;o++)r[o-1]=arguments[o];return Q.call.apply(Q,u([t,h,Re,n({type:"delete"},e)],s(r),!1))}},this.createUser=function(e){return t.objects.setUUIDMetadata({uuid:e.userId,data:e.data,include:e.include})},this.updateUser=this.createUser,this.removeUser=function(e){return t.objects.removeUUIDMetadata({uuid:null==e?void 0:e.userId})},this.fetchUser=function(e){return t.objects.getUUIDMetadata({uuid:null==e?void 0:e.userId,include:null==e?void 0:e.include})},this.fetchUsers=this.objects.getAllUUIDMetadata,this.createSpace=function(e){return t.objects.setChannelMetadata({channel:e.spaceId,data:e.data,include:e.include})},this.updateSpace=this.createSpace,this.removeSpace=function(e){return t.objects.removeChannelMetadata({channel:e.spaceId})},this.fetchSpace=function(e){return t.objects.getChannelMetadata({channel:e.spaceId,include:e.include})},this.fetchSpaces=this.objects.getAllChannelMetadata,this.addMemberships=function(e){var n,r;return"string"==typeof e.spaceId?t.objects.setChannelMembers({channel:e.spaceId,uuids:null===(n=e.users)||void 0===n?void 0:n.map((function(e){return"string"==typeof e?e:{id:e.userId,custom:e.custom,status:e.status}})),limit:0}):t.objects.setMemberships({uuid:e.userId,channels:null===(r=e.spaces)||void 0===r?void 0:r.map((function(e){return"string"==typeof e?e:{id:e.spaceId,custom:e.custom,status:e.status}})),limit:0})},this.updateMemberships=this.addMemberships,this.removeMemberships=function(e){return"string"==typeof e.spaceId?t.objects.removeChannelMembers({channel:e.spaceId,uuids:e.userIds,limit:0}):t.objects.removeMemberships({uuid:e.userId,channels:e.spaceIds,limit:0})},this.fetchMemberships=function(e){return"string"==typeof e.spaceId?t.objects.getChannelMembers({channel:e.spaceId,filter:e.filter,limit:e.limit,page:e.page,include:{customFields:e.include.customFields,UUIDFields:e.include.userFields,customUUIDFields:e.include.customUserFields,totalCount:e.include.totalCount},sort:null!=e.sort?Object.fromEntries(Object.entries(e.sort).map((function(e){var t=s(e,2),n=t[0],r=t[1];return[n.replace("user","uuid"),r]}))):null}).then((function(e){var t;return e.data=null===(t=e.data)||void 0===t?void 0:t.map((function(e){return{user:e.uuid,custom:e.custom,updated:e.updated,eTag:e.eTag}})),e})):t.objects.getMemberships({uuid:e.userId,filter:e.filter,limit:e.limit,page:e.page,include:{customFields:e.include.customFields,channelFields:e.include.spaceFields,customChannelFields:e.include.customSpaceFields,totalCount:e.include.totalCount},sort:null!=e.sort?Object.fromEntries(Object.entries(e.sort).map((function(e){var t=s(e,2),n=t[0],r=t[1];return[n.replace("space","channel"),r]}))):null}).then((function(e){var t;return e.data=null===(t=e.data)||void 0===t?void 0:t.map((function(e){return{space:e.channel,custom:e.custom,updated:e.updated,eTag:e.eTag}})),e}))},this.time=d,this.stop=this.destroy,this.encrypt=function(e,t){if(void 0===t&&h.cryptoModule){var n=h.cryptoModule.encrypt(e);return"string"==typeof n?n:v(n)}return a.encrypt(e,t)},this.decrypt=function(e,t){if(void 0===t&&f){var n=h.cryptoModule.decrypt(e);return n instanceof ArrayBuffer?v(n):n}return a.decrypt(e,t)},this.getAuthKey=h.config.getAuthKey.bind(h.config),this.setAuthKey=h.config.setAuthKey.bind(h.config),this.getUUID=h.config.getUUID.bind(h.config),this.setUUID=h.config.setUUID.bind(h.config),this.getUserId=h.config.getUserId.bind(h.config),this.setUserId=h.config.setUserId.bind(h.config),this.getFilterExpression=h.config.getFilterExpression.bind(h.config),this.setFilterExpression=h.config.setFilterExpression.bind(h.config),this.setCipherKey=function(t){return h.config.setCipherKey(t,e,h)},this.setHeartbeatInterval=h.config.setHeartbeatInterval.bind(h.config),r.hasModule("proxy")&&(this.setProxy=function(e){h.config.setProxy(e),t.reconnect()})}return e.prototype.getVersion=function(){return this._config.getVersion()},e.prototype._addPnsdkSuffix=function(e,t){this._config._addPnsdkSuffix(e,t)},e.prototype.networkDownDetected=function(){this._listenerManager.announceNetworkDown(),this._config.restore?this.disconnect():this.destroy(!0)},e.prototype.networkUpDetected=function(){this._listenerManager.announceNetworkUp(),this.reconnect()},e.notificationPayload=function(e,t){return new K(e,t)},e.generateUUID=function(){return y()},e.OPERATIONS=I,e.CATEGORIES=R,e}(),qt=function(){function e(e){var t=this;this._modules={},Object.keys(e).forEach((function(n){t._modules[n]=e[n].bind(t)}))}return e.prototype.init=function(e){this._config=e,Array.isArray(this._config.origin)?this._currentSubDomain=Math.floor(Math.random()*this._config.origin.length):this._currentSubDomain=0,this._coreParams={},this.shiftStandardOrigin()},e.prototype.nextOrigin=function(){var e=this._config.secure?"https://":"http://";if("string"==typeof this._config.origin)return"".concat(e).concat(this._config.origin);this._currentSubDomain+=1,this._currentSubDomain>=this._config.origin.length&&(this._currentSubDomain=0);var t=this._config.origin[this._currentSubDomain];return"".concat(e).concat(t)},e.prototype.hasModule=function(e){return e in this._modules},e.prototype.shiftStandardOrigin=function(){return this._standardOrigin=this.nextOrigin(),this._standardOrigin},e.prototype.getStandardOrigin=function(){return this._standardOrigin},e.prototype.POSTFILE=function(e,t,n){return this._modules.postfile(e,t,n)},e.prototype.GETFILE=function(e,t,n){return this._modules.getfile(e,t,n)},e.prototype.POST=function(e,t,n,r){return this._modules.post(e,t,n,r)},e.prototype.PATCH=function(e,t,n,r){return this._modules.patch(e,t,n,r)},e.prototype.GET=function(e,t,n){return this._modules.get(e,t,n)},e.prototype.DELETE=function(e,t,n){return this._modules.del(e,t,n)},e.prototype._detectErrorCategory=function(e){if("ENOTFOUND"===e.code)return R.PNNetworkIssuesCategory;if("ECONNREFUSED"===e.code)return R.PNNetworkIssuesCategory;if("ECONNRESET"===e.code)return R.PNNetworkIssuesCategory;if("EAI_AGAIN"===e.code)return R.PNNetworkIssuesCategory;if(0===e.status||e.hasOwnProperty("status")&&void 0===e.status)return R.PNNetworkIssuesCategory;if(e.timeout)return R.PNTimeoutCategory;if("ETIMEDOUT"===e.code)return R.PNNetworkIssuesCategory;if(e.response){if(e.response.badRequest)return R.PNBadRequestCategory;if(e.response.forbidden)return R.PNAccessDeniedCategory}return R.PNUnknownCategory},e}();function zt(e){var t=function(e){return e&&"object"==typeof e&&e.constructor===Object};if(!t(e))return e;var n={};return Object.keys(e).forEach((function(r){var o=function(e){return"string"==typeof e||e instanceof String}(r),i=r,a=e[r];Array.isArray(r)||o&&r.indexOf(",")>=0?i=(o?r.split(","):r).reduce((function(e,t){return e+=String.fromCharCode(t)}),""):(function(e){return"number"==typeof e&&isFinite(e)}(r)||o&&!isNaN(r))&&(i=String.fromCharCode(o?parseInt(r,10):10));n[i]=t(a)?zt(a):a})),n}var Vt=function(){function e(e,t){this._base64ToBinary=t,this._decode=e}return e.prototype.decodeToken=function(e){var t="";e.length%4==3?t="=":e.length%4==2&&(t="==");var n=e.replace(/-/gi,"+").replace(/_/gi,"/")+t,r=this._decode(this._base64ToBinary(n));if("object"==typeof r)return r},e}(),Wt={exports:{}},Jt={exports:{}};!function(e){function t(e){if(e)return function(e){for(var n in t.prototype)e[n]=t.prototype[n];return e}(e)}e.exports=t,t.prototype.on=t.prototype.addEventListener=function(e,t){return this._callbacks=this._callbacks||{},(this._callbacks["$"+e]=this._callbacks["$"+e]||[]).push(t),this},t.prototype.once=function(e,t){function n(){this.off(e,n),t.apply(this,arguments)}return n.fn=t,this.on(e,n),this},t.prototype.off=t.prototype.removeListener=t.prototype.removeAllListeners=t.prototype.removeEventListener=function(e,t){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n,r=this._callbacks["$"+e];if(!r)return this;if(1==arguments.length)return delete this._callbacks["$"+e],this;for(var o=0;o<r.length;o++)if((n=r[o])===t||n.fn===t){r.splice(o,1);break}return 0===r.length&&delete this._callbacks["$"+e],this},t.prototype.emit=function(e){this._callbacks=this._callbacks||{};for(var t=new Array(arguments.length-1),n=this._callbacks["$"+e],r=1;r<arguments.length;r++)t[r-1]=arguments[r];if(n){r=0;for(var o=(n=n.slice(0)).length;r<o;++r)n[r].apply(this,t)}return this},t.prototype.listeners=function(e){return this._callbacks=this._callbacks||{},this._callbacks["$"+e]||[]},t.prototype.hasListeners=function(e){return!!this.listeners(e).length}}(Jt);var $t=tn;tn.default=tn,tn.stable=an,tn.stableStringify=an;var Qt="[...]",Xt="[Circular]",Yt=[],Zt=[];function en(){return{depthLimit:Number.MAX_SAFE_INTEGER,edgesLimit:Number.MAX_SAFE_INTEGER}}function tn(e,t,n,r){var o;void 0===r&&(r=en()),rn(e,"",0,[],void 0,0,r);try{o=0===Zt.length?JSON.stringify(e,t,n):JSON.stringify(e,un(t),n)}catch(e){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;0!==Yt.length;){var i=Yt.pop();4===i.length?Object.defineProperty(i[0],i[1],i[3]):i[0][i[1]]=i[2]}}return o}function nn(e,t,n,r){var o=Object.getOwnPropertyDescriptor(r,n);void 0!==o.get?o.configurable?(Object.defineProperty(r,n,{value:e}),Yt.push([r,n,t,o])):Zt.push([t,n,e]):(r[n]=e,Yt.push([r,n,t]))}function rn(e,t,n,r,o,i,a){var s;if(i+=1,"object"==typeof e&&null!==e){for(s=0;s<r.length;s++)if(r[s]===e)return void nn(Xt,e,t,o);if(void 0!==a.depthLimit&&i>a.depthLimit)return void nn(Qt,e,t,o);if(void 0!==a.edgesLimit&&n+1>a.edgesLimit)return void nn(Qt,e,t,o);if(r.push(e),Array.isArray(e))for(s=0;s<e.length;s++)rn(e[s],s,s,r,e,i,a);else{var u=Object.keys(e);for(s=0;s<u.length;s++){var c=u[s];rn(e[c],c,s,r,e,i,a)}}r.pop()}}function on(e,t){return e<t?-1:e>t?1:0}function an(e,t,n,r){void 0===r&&(r=en());var o,i=sn(e,"",0,[],void 0,0,r)||e;try{o=0===Zt.length?JSON.stringify(i,t,n):JSON.stringify(i,un(t),n)}catch(e){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{for(;0!==Yt.length;){var a=Yt.pop();4===a.length?Object.defineProperty(a[0],a[1],a[3]):a[0][a[1]]=a[2]}}return o}function sn(e,t,n,r,o,i,a){var s;if(i+=1,"object"==typeof e&&null!==e){for(s=0;s<r.length;s++)if(r[s]===e)return void nn(Xt,e,t,o);try{if("function"==typeof e.toJSON)return}catch(e){return}if(void 0!==a.depthLimit&&i>a.depthLimit)return void nn(Qt,e,t,o);if(void 0!==a.edgesLimit&&n+1>a.edgesLimit)return void nn(Qt,e,t,o);if(r.push(e),Array.isArray(e))for(s=0;s<e.length;s++)sn(e[s],s,s,r,e,i,a);else{var u={},c=Object.keys(e).sort(on);for(s=0;s<c.length;s++){var l=c[s];sn(e[l],l,s,r,e,i,a),u[l]=e[l]}if(void 0===o)return u;Yt.push([o,t,e]),o[t]=u}r.pop()}}function un(e){return e=void 0!==e?e:function(e,t){return t},function(t,n){if(Zt.length>0)for(var r=0;r<Zt.length;r++){var o=Zt[r];if(o[1]===t&&o[0]===n){n=o[2],Zt.splice(r,1);break}}return e.call(this,t,n)}}var cn,ln="undefined"!=typeof Symbol&&Symbol,pn=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),n=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(n))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var r=Object.getOwnPropertySymbols(e);if(1!==r.length||r[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0},fn="Function.prototype.bind called on incompatible ",hn=Array.prototype.slice,dn=Object.prototype.toString,yn="[object Function]",gn=function(e){var t=this;if("function"!=typeof t||dn.call(t)!==yn)throw new TypeError(fn+t);for(var n,r=hn.call(arguments,1),o=function(){if(this instanceof n){var o=t.apply(this,r.concat(hn.call(arguments)));return Object(o)===o?o:this}return t.apply(e,r.concat(hn.call(arguments)))},i=Math.max(0,t.length-r.length),a=[],s=0;s<i;s++)a.push("$"+s);if(n=Function("binder","return function ("+a.join(",")+"){ return binder.apply(this,arguments); }")(o),t.prototype){var u=function(){};u.prototype=t.prototype,n.prototype=new u,u.prototype=null}return n},bn=Function.prototype.bind||gn,vn=bn.call(Function.call,Object.prototype.hasOwnProperty),mn=SyntaxError,_n=Function,On=TypeError,Sn=function(e){try{return _n('"use strict"; return ('+e+").constructor;")()}catch(e){}},Pn=Object.getOwnPropertyDescriptor;if(Pn)try{Pn({},"")}catch(e){Pn=null}var wn=function(){throw new On},En=Pn?function(){try{return wn}catch(e){try{return Pn(arguments,"callee").get}catch(e){return wn}}}():wn,Tn="function"==typeof ln&&"function"==typeof Symbol&&"symbol"==typeof ln("foo")&&"symbol"==typeof Symbol("bar")&&pn(),An=Object.getPrototypeOf||function(e){return e.__proto__},Nn={},kn="undefined"==typeof Uint8Array?cn:An(Uint8Array),Cn={"%AggregateError%":"undefined"==typeof AggregateError?cn:AggregateError,"%Array%":Array,"%ArrayBuffer%":"undefined"==typeof ArrayBuffer?cn:ArrayBuffer,"%ArrayIteratorPrototype%":Tn?An([][Symbol.iterator]()):cn,"%AsyncFromSyncIteratorPrototype%":cn,"%AsyncFunction%":Nn,"%AsyncGenerator%":Nn,"%AsyncGeneratorFunction%":Nn,"%AsyncIteratorPrototype%":Nn,"%Atomics%":"undefined"==typeof Atomics?cn:Atomics,"%BigInt%":"undefined"==typeof BigInt?cn:BigInt,"%Boolean%":Boolean,"%DataView%":"undefined"==typeof DataView?cn:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":Error,"%eval%":eval,"%EvalError%":EvalError,"%Float32Array%":"undefined"==typeof Float32Array?cn:Float32Array,"%Float64Array%":"undefined"==typeof Float64Array?cn:Float64Array,"%FinalizationRegistry%":"undefined"==typeof FinalizationRegistry?cn:FinalizationRegistry,"%Function%":_n,"%GeneratorFunction%":Nn,"%Int8Array%":"undefined"==typeof Int8Array?cn:Int8Array,"%Int16Array%":"undefined"==typeof Int16Array?cn:Int16Array,"%Int32Array%":"undefined"==typeof Int32Array?cn:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":Tn?An(An([][Symbol.iterator]())):cn,"%JSON%":"object"==typeof JSON?JSON:cn,"%Map%":"undefined"==typeof Map?cn:Map,"%MapIteratorPrototype%":"undefined"!=typeof Map&&Tn?An((new Map)[Symbol.iterator]()):cn,"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":"undefined"==typeof Promise?cn:Promise,"%Proxy%":"undefined"==typeof Proxy?cn:Proxy,"%RangeError%":RangeError,"%ReferenceError%":ReferenceError,"%Reflect%":"undefined"==typeof Reflect?cn:Reflect,"%RegExp%":RegExp,"%Set%":"undefined"==typeof Set?cn:Set,"%SetIteratorPrototype%":"undefined"!=typeof Set&&Tn?An((new Set)[Symbol.iterator]()):cn,"%SharedArrayBuffer%":"undefined"==typeof SharedArrayBuffer?cn:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":Tn?An(""[Symbol.iterator]()):cn,"%Symbol%":Tn?Symbol:cn,"%SyntaxError%":mn,"%ThrowTypeError%":En,"%TypedArray%":kn,"%TypeError%":On,"%Uint8Array%":"undefined"==typeof Uint8Array?cn:Uint8Array,"%Uint8ClampedArray%":"undefined"==typeof Uint8ClampedArray?cn:Uint8ClampedArray,"%Uint16Array%":"undefined"==typeof Uint16Array?cn:Uint16Array,"%Uint32Array%":"undefined"==typeof Uint32Array?cn:Uint32Array,"%URIError%":URIError,"%WeakMap%":"undefined"==typeof WeakMap?cn:WeakMap,"%WeakRef%":"undefined"==typeof WeakRef?cn:WeakRef,"%WeakSet%":"undefined"==typeof WeakSet?cn:WeakSet},jn=function e(t){var n;if("%AsyncFunction%"===t)n=Sn("async function () {}");else if("%GeneratorFunction%"===t)n=Sn("function* () {}");else if("%AsyncGeneratorFunction%"===t)n=Sn("async function* () {}");else if("%AsyncGenerator%"===t){var r=e("%AsyncGeneratorFunction%");r&&(n=r.prototype)}else if("%AsyncIteratorPrototype%"===t){var o=e("%AsyncGenerator%");o&&(n=An(o.prototype))}return Cn[t]=n,n},Mn={"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},Rn=bn,Un=vn,In=Rn.call(Function.call,Array.prototype.concat),xn=Rn.call(Function.apply,Array.prototype.splice),Dn=Rn.call(Function.call,String.prototype.replace),Fn=Rn.call(Function.call,String.prototype.slice),Gn=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,Ln=/\\(\\)?/g,Kn=function(e){var t=Fn(e,0,1),n=Fn(e,-1);if("%"===t&&"%"!==n)throw new mn("invalid intrinsic syntax, expected closing `%`");if("%"===n&&"%"!==t)throw new mn("invalid intrinsic syntax, expected opening `%`");var r=[];return Dn(e,Gn,(function(e,t,n,o){r[r.length]=n?Dn(o,Ln,"$1"):t||e})),r},Bn=function(e,t){var n,r=e;if(Un(Mn,r)&&(r="%"+(n=Mn[r])[0]+"%"),Un(Cn,r)){var o=Cn[r];if(o===Nn&&(o=jn(r)),void 0===o&&!t)throw new On("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:n,name:r,value:o}}throw new mn("intrinsic "+e+" does not exist!")},Hn=function(e,t){if("string"!=typeof e||0===e.length)throw new On("intrinsic name must be a non-empty string");if(arguments.length>1&&"boolean"!=typeof t)throw new On('"allowMissing" argument must be a boolean');var n=Kn(e),r=n.length>0?n[0]:"",o=Bn("%"+r+"%",t),i=o.name,a=o.value,s=!1,u=o.alias;u&&(r=u[0],xn(n,In([0,1],u)));for(var c=1,l=!0;c<n.length;c+=1){var p=n[c],f=Fn(p,0,1),h=Fn(p,-1);if(('"'===f||"'"===f||"`"===f||'"'===h||"'"===h||"`"===h)&&f!==h)throw new mn("property names with quotes must have matching quotes");if("constructor"!==p&&l||(s=!0),Un(Cn,i="%"+(r+="."+p)+"%"))a=Cn[i];else if(null!=a){if(!(p in a)){if(!t)throw new On("base intrinsic for "+e+" exists, but the property is not available.");return}if(Pn&&c+1>=n.length){var d=Pn(a,p);a=(l=!!d)&&"get"in d&&!("originalValue"in d.get)?d.get:a[p]}else l=Un(a,p),a=a[p];l&&!s&&(Cn[i]=a)}}return a},qn={exports:{}};!function(e){var t=bn,n=Hn,r=n("%Function.prototype.apply%"),o=n("%Function.prototype.call%"),i=n("%Reflect.apply%",!0)||t.call(o,r),a=n("%Object.getOwnPropertyDescriptor%",!0),s=n("%Object.defineProperty%",!0),u=n("%Math.max%");if(s)try{s({},"a",{value:1})}catch(e){s=null}e.exports=function(e){var n=i(t,o,arguments);if(a&&s){var r=a(n,"length");r.configurable&&s(n,"length",{value:1+u(0,e.length-(arguments.length-1))})}return n};var c=function(){return i(t,r,arguments)};s?s(e.exports,"apply",{value:c}):e.exports.apply=c}(qn);var zn=Hn,Vn=qn.exports,Wn=Vn(zn("String.prototype.indexOf")),Jn=l(Object.freeze({__proto__:null,default:{}})),$n="function"==typeof Map&&Map.prototype,Qn=Object.getOwnPropertyDescriptor&&$n?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,Xn=$n&&Qn&&"function"==typeof Qn.get?Qn.get:null,Yn=$n&&Map.prototype.forEach,Zn="function"==typeof Set&&Set.prototype,er=Object.getOwnPropertyDescriptor&&Zn?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,tr=Zn&&er&&"function"==typeof er.get?er.get:null,nr=Zn&&Set.prototype.forEach,rr="function"==typeof WeakMap&&WeakMap.prototype?WeakMap.prototype.has:null,or="function"==typeof WeakSet&&WeakSet.prototype?WeakSet.prototype.has:null,ir="function"==typeof WeakRef&&WeakRef.prototype?WeakRef.prototype.deref:null,ar=Boolean.prototype.valueOf,sr=Object.prototype.toString,ur=Function.prototype.toString,cr=String.prototype.match,lr=String.prototype.slice,pr=String.prototype.replace,fr=String.prototype.toUpperCase,hr=String.prototype.toLowerCase,dr=RegExp.prototype.test,yr=Array.prototype.concat,gr=Array.prototype.join,br=Array.prototype.slice,vr=Math.floor,mr="function"==typeof BigInt?BigInt.prototype.valueOf:null,_r=Object.getOwnPropertySymbols,Or="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?Symbol.prototype.toString:null,Sr="function"==typeof Symbol&&"object"==typeof Symbol.iterator,Pr="function"==typeof Symbol&&Symbol.toStringTag&&(typeof Symbol.toStringTag===Sr||"symbol")?Symbol.toStringTag:null,wr=Object.prototype.propertyIsEnumerable,Er=("function"==typeof Reflect?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(e){return e.__proto__}:null);function Tr(e,t){if(e===1/0||e===-1/0||e!=e||e&&e>-1e3&&e<1e3||dr.call(/e/,t))return t;var n=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if("number"==typeof e){var r=e<0?-vr(-e):vr(e);if(r!==e){var o=String(r),i=lr.call(t,o.length+1);return pr.call(o,n,"$&_")+"."+pr.call(pr.call(i,/([0-9]{3})/g,"$&_"),/_$/,"")}}return pr.call(t,n,"$&_")}var Ar=Jn,Nr=Ar.custom,kr=Ur(Nr)?Nr:null;function Cr(e,t,n){var r="double"===(n.quoteStyle||t)?'"':"'";return r+e+r}function jr(e){return pr.call(String(e),/"/g,"&quot;")}function Mr(e){return!("[object Array]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}function Rr(e){return!("[object RegExp]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}function Ur(e){if(Sr)return e&&"object"==typeof e&&e instanceof Symbol;if("symbol"==typeof e)return!0;if(!e||"object"!=typeof e||!Or)return!1;try{return Or.call(e),!0}catch(e){}return!1}var Ir=Object.prototype.hasOwnProperty||function(e){return e in this};function xr(e,t){return Ir.call(e,t)}function Dr(e){return sr.call(e)}function Fr(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function Gr(e,t){if(e.length>t.maxStringLength){var n=e.length-t.maxStringLength,r="... "+n+" more character"+(n>1?"s":"");return Gr(lr.call(e,0,t.maxStringLength),t)+r}return Cr(pr.call(pr.call(e,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,Lr),"single",t)}function Lr(e){var t=e.charCodeAt(0),n={8:"b",9:"t",10:"n",12:"f",13:"r"}[t];return n?"\\"+n:"\\x"+(t<16?"0":"")+fr.call(t.toString(16))}function Kr(e){return"Object("+e+")"}function Br(e){return e+" { ? }"}function Hr(e,t,n,r){return e+" ("+t+") {"+(r?qr(n,r):gr.call(n,", "))+"}"}function qr(e,t){if(0===e.length)return"";var n="\n"+t.prev+t.base;return n+gr.call(e,","+n)+"\n"+t.prev}function zr(e,t){var n=Mr(e),r=[];if(n){r.length=e.length;for(var o=0;o<e.length;o++)r[o]=xr(e,o)?t(e[o],e):""}var i,a="function"==typeof _r?_r(e):[];if(Sr){i={};for(var s=0;s<a.length;s++)i["$"+a[s]]=a[s]}for(var u in e)xr(e,u)&&(n&&String(Number(u))===u&&u<e.length||Sr&&i["$"+u]instanceof Symbol||(dr.call(/[^\w$]/,u)?r.push(t(u,e)+": "+t(e[u],e)):r.push(u+": "+t(e[u],e))));if("function"==typeof _r)for(var c=0;c<a.length;c++)wr.call(e,a[c])&&r.push("["+t(a[c])+"]: "+t(e[a[c]],e));return r}var Vr=Hn,Wr=function(e,t){var n=zn(e,!!t);return"function"==typeof n&&Wn(e,".prototype.")>-1?Vn(n):n},Jr=function e(t,n,r,o){var i=n||{};if(xr(i,"quoteStyle")&&"single"!==i.quoteStyle&&"double"!==i.quoteStyle)throw new TypeError('option "quoteStyle" must be "single" or "double"');if(xr(i,"maxStringLength")&&("number"==typeof i.maxStringLength?i.maxStringLength<0&&i.maxStringLength!==1/0:null!==i.maxStringLength))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var a=!xr(i,"customInspect")||i.customInspect;if("boolean"!=typeof a&&"symbol"!==a)throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(xr(i,"indent")&&null!==i.indent&&"\t"!==i.indent&&!(parseInt(i.indent,10)===i.indent&&i.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(xr(i,"numericSeparator")&&"boolean"!=typeof i.numericSeparator)throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var s=i.numericSeparator;if(void 0===t)return"undefined";if(null===t)return"null";if("boolean"==typeof t)return t?"true":"false";if("string"==typeof t)return Gr(t,i);if("number"==typeof t){if(0===t)return 1/0/t>0?"0":"-0";var u=String(t);return s?Tr(t,u):u}if("bigint"==typeof t){var c=String(t)+"n";return s?Tr(t,c):c}var l=void 0===i.depth?5:i.depth;if(void 0===r&&(r=0),r>=l&&l>0&&"object"==typeof t)return Mr(t)?"[Array]":"[Object]";var p=function(e,t){var n;if("\t"===e.indent)n="\t";else{if(!("number"==typeof e.indent&&e.indent>0))return null;n=gr.call(Array(e.indent+1)," ")}return{base:n,prev:gr.call(Array(t+1),n)}}(i,r);if(void 0===o)o=[];else if(Fr(o,t)>=0)return"[Circular]";function f(t,n,a){if(n&&(o=br.call(o)).push(n),a){var s={depth:i.depth};return xr(i,"quoteStyle")&&(s.quoteStyle=i.quoteStyle),e(t,s,r+1,o)}return e(t,i,r+1,o)}if("function"==typeof t&&!Rr(t)){var h=function(e){if(e.name)return e.name;var t=cr.call(ur.call(e),/^function\s*([\w$]+)/);if(t)return t[1];return null}(t),d=zr(t,f);return"[Function"+(h?": "+h:" (anonymous)")+"]"+(d.length>0?" { "+gr.call(d,", ")+" }":"")}if(Ur(t)){var y=Sr?pr.call(String(t),/^(Symbol\(.*\))_[^)]*$/,"$1"):Or.call(t);return"object"!=typeof t||Sr?y:Kr(y)}if(function(e){if(!e||"object"!=typeof e)return!1;if("undefined"!=typeof HTMLElement&&e instanceof HTMLElement)return!0;return"string"==typeof e.nodeName&&"function"==typeof e.getAttribute}(t)){for(var g="<"+hr.call(String(t.nodeName)),b=t.attributes||[],v=0;v<b.length;v++)g+=" "+b[v].name+"="+Cr(jr(b[v].value),"double",i);return g+=">",t.childNodes&&t.childNodes.length&&(g+="..."),g+="</"+hr.call(String(t.nodeName))+">"}if(Mr(t)){if(0===t.length)return"[]";var m=zr(t,f);return p&&!function(e){for(var t=0;t<e.length;t++)if(Fr(e[t],"\n")>=0)return!1;return!0}(m)?"["+qr(m,p)+"]":"[ "+gr.call(m,", ")+" ]"}if(function(e){return!("[object Error]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}(t)){var _=zr(t,f);return"cause"in Error.prototype||!("cause"in t)||wr.call(t,"cause")?0===_.length?"["+String(t)+"]":"{ ["+String(t)+"] "+gr.call(_,", ")+" }":"{ ["+String(t)+"] "+gr.call(yr.call("[cause]: "+f(t.cause),_),", ")+" }"}if("object"==typeof t&&a){if(kr&&"function"==typeof t[kr]&&Ar)return Ar(t,{depth:l-r});if("symbol"!==a&&"function"==typeof t.inspect)return t.inspect()}if(function(e){if(!Xn||!e||"object"!=typeof e)return!1;try{Xn.call(e);try{tr.call(e)}catch(e){return!0}return e instanceof Map}catch(e){}return!1}(t)){var O=[];return Yn&&Yn.call(t,(function(e,n){O.push(f(n,t,!0)+" => "+f(e,t))})),Hr("Map",Xn.call(t),O,p)}if(function(e){if(!tr||!e||"object"!=typeof e)return!1;try{tr.call(e);try{Xn.call(e)}catch(e){return!0}return e instanceof Set}catch(e){}return!1}(t)){var S=[];return nr&&nr.call(t,(function(e){S.push(f(e,t))})),Hr("Set",tr.call(t),S,p)}if(function(e){if(!rr||!e||"object"!=typeof e)return!1;try{rr.call(e,rr);try{or.call(e,or)}catch(e){return!0}return e instanceof WeakMap}catch(e){}return!1}(t))return Br("WeakMap");if(function(e){if(!or||!e||"object"!=typeof e)return!1;try{or.call(e,or);try{rr.call(e,rr)}catch(e){return!0}return e instanceof WeakSet}catch(e){}return!1}(t))return Br("WeakSet");if(function(e){if(!ir||!e||"object"!=typeof e)return!1;try{return ir.call(e),!0}catch(e){}return!1}(t))return Br("WeakRef");if(function(e){return!("[object Number]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}(t))return Kr(f(Number(t)));if(function(e){if(!e||"object"!=typeof e||!mr)return!1;try{return mr.call(e),!0}catch(e){}return!1}(t))return Kr(f(mr.call(t)));if(function(e){return!("[object Boolean]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}(t))return Kr(ar.call(t));if(function(e){return!("[object String]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}(t))return Kr(f(String(t)));if(!function(e){return!("[object Date]"!==Dr(e)||Pr&&"object"==typeof e&&Pr in e)}(t)&&!Rr(t)){var P=zr(t,f),w=Er?Er(t)===Object.prototype:t instanceof Object||t.constructor===Object,E=t instanceof Object?"":"null prototype",T=!w&&Pr&&Object(t)===t&&Pr in t?lr.call(Dr(t),8,-1):E?"Object":"",A=(w||"function"!=typeof t.constructor?"":t.constructor.name?t.constructor.name+" ":"")+(T||E?"["+gr.call(yr.call([],T||[],E||[]),": ")+"] ":"");return 0===P.length?A+"{}":p?A+"{"+qr(P,p)+"}":A+"{ "+gr.call(P,", ")+" }"}return String(t)},$r=Vr("%TypeError%"),Qr=Vr("%WeakMap%",!0),Xr=Vr("%Map%",!0),Yr=Wr("WeakMap.prototype.get",!0),Zr=Wr("WeakMap.prototype.set",!0),eo=Wr("WeakMap.prototype.has",!0),to=Wr("Map.prototype.get",!0),no=Wr("Map.prototype.set",!0),ro=Wr("Map.prototype.has",!0),oo=function(e,t){for(var n,r=e;null!==(n=r.next);r=n)if(n.key===t)return r.next=n.next,n.next=e.next,e.next=n,n},io=String.prototype.replace,ao=/%20/g,so="RFC3986",uo={default:so,formatters:{RFC1738:function(e){return io.call(e,ao,"+")},RFC3986:function(e){return String(e)}},RFC1738:"RFC1738",RFC3986:so},co=uo,lo=Object.prototype.hasOwnProperty,po=Array.isArray,fo=function(){for(var e=[],t=0;t<256;++t)e.push("%"+((t<16?"0":"")+t.toString(16)).toUpperCase());return e}(),ho=function(e,t){for(var n=t&&t.plainObjects?Object.create(null):{},r=0;r<e.length;++r)void 0!==e[r]&&(n[r]=e[r]);return n},yo={arrayToObject:ho,assign:function(e,t){return Object.keys(t).reduce((function(e,n){return e[n]=t[n],e}),e)},combine:function(e,t){return[].concat(e,t)},compact:function(e){for(var t=[{obj:{o:e},prop:"o"}],n=[],r=0;r<t.length;++r)for(var o=t[r],i=o.obj[o.prop],a=Object.keys(i),s=0;s<a.length;++s){var u=a[s],c=i[u];"object"==typeof c&&null!==c&&-1===n.indexOf(c)&&(t.push({obj:i,prop:u}),n.push(c))}return function(e){for(;e.length>1;){var t=e.pop(),n=t.obj[t.prop];if(po(n)){for(var r=[],o=0;o<n.length;++o)void 0!==n[o]&&r.push(n[o]);t.obj[t.prop]=r}}}(t),e},decode:function(e,t,n){var r=e.replace(/\+/g," ");if("iso-8859-1"===n)return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch(e){return r}},encode:function(e,t,n,r,o){if(0===e.length)return e;var i=e;if("symbol"==typeof e?i=Symbol.prototype.toString.call(e):"string"!=typeof e&&(i=String(e)),"iso-8859-1"===n)return escape(i).replace(/%u[0-9a-f]{4}/gi,(function(e){return"%26%23"+parseInt(e.slice(2),16)+"%3B"}));for(var a="",s=0;s<i.length;++s){var u=i.charCodeAt(s);45===u||46===u||95===u||126===u||u>=48&&u<=57||u>=65&&u<=90||u>=97&&u<=122||o===co.RFC1738&&(40===u||41===u)?a+=i.charAt(s):u<128?a+=fo[u]:u<2048?a+=fo[192|u>>6]+fo[128|63&u]:u<55296||u>=57344?a+=fo[224|u>>12]+fo[128|u>>6&63]+fo[128|63&u]:(s+=1,u=65536+((1023&u)<<10|1023&i.charCodeAt(s)),a+=fo[240|u>>18]+fo[128|u>>12&63]+fo[128|u>>6&63]+fo[128|63&u])}return a},isBuffer:function(e){return!(!e||"object"!=typeof e)&&!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},isRegExp:function(e){return"[object RegExp]"===Object.prototype.toString.call(e)},maybeMap:function(e,t){if(po(e)){for(var n=[],r=0;r<e.length;r+=1)n.push(t(e[r]));return n}return t(e)},merge:function e(t,n,r){if(!n)return t;if("object"!=typeof n){if(po(t))t.push(n);else{if(!t||"object"!=typeof t)return[t,n];(r&&(r.plainObjects||r.allowPrototypes)||!lo.call(Object.prototype,n))&&(t[n]=!0)}return t}if(!t||"object"!=typeof t)return[t].concat(n);var o=t;return po(t)&&!po(n)&&(o=ho(t,r)),po(t)&&po(n)?(n.forEach((function(n,o){if(lo.call(t,o)){var i=t[o];i&&"object"==typeof i&&n&&"object"==typeof n?t[o]=e(i,n,r):t.push(n)}else t[o]=n})),t):Object.keys(n).reduce((function(t,o){var i=n[o];return lo.call(t,o)?t[o]=e(t[o],i,r):t[o]=i,t}),o)}},go=function(){var e,t,n,r={assert:function(e){if(!r.has(e))throw new $r("Side channel does not contain "+Jr(e))},get:function(r){if(Qr&&r&&("object"==typeof r||"function"==typeof r)){if(e)return Yr(e,r)}else if(Xr){if(t)return to(t,r)}else if(n)return function(e,t){var n=oo(e,t);return n&&n.value}(n,r)},has:function(r){if(Qr&&r&&("object"==typeof r||"function"==typeof r)){if(e)return eo(e,r)}else if(Xr){if(t)return ro(t,r)}else if(n)return function(e,t){return!!oo(e,t)}(n,r);return!1},set:function(r,o){Qr&&r&&("object"==typeof r||"function"==typeof r)?(e||(e=new Qr),Zr(e,r,o)):Xr?(t||(t=new Xr),no(t,r,o)):(n||(n={key:{},next:null}),function(e,t,n){var r=oo(e,t);r?r.value=n:e.next={key:t,next:e.next,value:n}}(n,r,o))}};return r},bo=yo,vo=uo,mo=Object.prototype.hasOwnProperty,_o={brackets:function(e){return e+"[]"},comma:"comma",indices:function(e,t){return e+"["+t+"]"},repeat:function(e){return e}},Oo=Array.isArray,So=Array.prototype.push,Po=function(e,t){So.apply(e,Oo(t)?t:[t])},wo=Date.prototype.toISOString,Eo=vo.default,To={addQueryPrefix:!1,allowDots:!1,charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encoder:bo.encode,encodeValuesOnly:!1,format:Eo,formatter:vo.formatters[Eo],indices:!1,serializeDate:function(e){return wo.call(e)},skipNulls:!1,strictNullHandling:!1},Ao={},No=function e(t,n,r,o,i,a,s,u,c,l,p,f,h,d,y,g){for(var b,v=t,m=g,_=0,O=!1;void 0!==(m=m.get(Ao))&&!O;){var S=m.get(t);if(_+=1,void 0!==S){if(S===_)throw new RangeError("Cyclic object value");O=!0}void 0===m.get(Ao)&&(_=0)}if("function"==typeof u?v=u(n,v):v instanceof Date?v=p(v):"comma"===r&&Oo(v)&&(v=bo.maybeMap(v,(function(e){return e instanceof Date?p(e):e}))),null===v){if(i)return s&&!d?s(n,To.encoder,y,"key",f):n;v=""}if("string"==typeof(b=v)||"number"==typeof b||"boolean"==typeof b||"symbol"==typeof b||"bigint"==typeof b||bo.isBuffer(v))return s?[h(d?n:s(n,To.encoder,y,"key",f))+"="+h(s(v,To.encoder,y,"value",f))]:[h(n)+"="+h(String(v))];var P,w=[];if(void 0===v)return w;if("comma"===r&&Oo(v))d&&s&&(v=bo.maybeMap(v,s)),P=[{value:v.length>0?v.join(",")||null:void 0}];else if(Oo(u))P=u;else{var E=Object.keys(v);P=c?E.sort(c):E}for(var T=o&&Oo(v)&&1===v.length?n+"[]":n,A=0;A<P.length;++A){var N=P[A],k="object"==typeof N&&void 0!==N.value?N.value:v[N];if(!a||null!==k){var C=Oo(v)?"function"==typeof r?r(T,N):T:T+(l?"."+N:"["+N+"]");g.set(t,_);var j=go();j.set(Ao,g),Po(w,e(k,C,r,o,i,a,"comma"===r&&d&&Oo(v)?null:s,u,c,l,p,f,h,d,y,j))}}return w},ko=yo,Co=Object.prototype.hasOwnProperty,jo=Array.isArray,Mo={allowDots:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decoder:ko.decode,delimiter:"&",depth:5,ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},Ro=function(e){return e.replace(/&#(\d+);/g,(function(e,t){return String.fromCharCode(parseInt(t,10))}))},Uo=function(e,t){return e&&"string"==typeof e&&t.comma&&e.indexOf(",")>-1?e.split(","):e},Io=function(e,t,n,r){if(e){var o=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,i=/(\[[^[\]]*])/g,a=n.depth>0&&/(\[[^[\]]*])/.exec(o),s=a?o.slice(0,a.index):o,u=[];if(s){if(!n.plainObjects&&Co.call(Object.prototype,s)&&!n.allowPrototypes)return;u.push(s)}for(var c=0;n.depth>0&&null!==(a=i.exec(o))&&c<n.depth;){if(c+=1,!n.plainObjects&&Co.call(Object.prototype,a[1].slice(1,-1))&&!n.allowPrototypes)return;u.push(a[1])}return a&&u.push("["+o.slice(a.index)+"]"),function(e,t,n,r){for(var o=r?t:Uo(t,n),i=e.length-1;i>=0;--i){var a,s=e[i];if("[]"===s&&n.parseArrays)a=[].concat(o);else{a=n.plainObjects?Object.create(null):{};var u="["===s.charAt(0)&&"]"===s.charAt(s.length-1)?s.slice(1,-1):s,c=parseInt(u,10);n.parseArrays||""!==u?!isNaN(c)&&s!==u&&String(c)===u&&c>=0&&n.parseArrays&&c<=n.arrayLimit?(a=[])[c]=o:"__proto__"!==u&&(a[u]=o):a={0:o}}o=a}return o}(u,t,n,r)}},xo=function(e,t){var n,r=e,o=function(e){if(!e)return To;if(null!==e.encoder&&void 0!==e.encoder&&"function"!=typeof e.encoder)throw new TypeError("Encoder has to be a function.");var t=e.charset||To.charset;if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var n=vo.default;if(void 0!==e.format){if(!mo.call(vo.formatters,e.format))throw new TypeError("Unknown format option provided.");n=e.format}var r=vo.formatters[n],o=To.filter;return("function"==typeof e.filter||Oo(e.filter))&&(o=e.filter),{addQueryPrefix:"boolean"==typeof e.addQueryPrefix?e.addQueryPrefix:To.addQueryPrefix,allowDots:void 0===e.allowDots?To.allowDots:!!e.allowDots,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:To.charsetSentinel,delimiter:void 0===e.delimiter?To.delimiter:e.delimiter,encode:"boolean"==typeof e.encode?e.encode:To.encode,encoder:"function"==typeof e.encoder?e.encoder:To.encoder,encodeValuesOnly:"boolean"==typeof e.encodeValuesOnly?e.encodeValuesOnly:To.encodeValuesOnly,filter:o,format:n,formatter:r,serializeDate:"function"==typeof e.serializeDate?e.serializeDate:To.serializeDate,skipNulls:"boolean"==typeof e.skipNulls?e.skipNulls:To.skipNulls,sort:"function"==typeof e.sort?e.sort:null,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:To.strictNullHandling}}(t);"function"==typeof o.filter?r=(0,o.filter)("",r):Oo(o.filter)&&(n=o.filter);var i,a=[];if("object"!=typeof r||null===r)return"";i=t&&t.arrayFormat in _o?t.arrayFormat:t&&"indices"in t?t.indices?"indices":"repeat":"indices";var s=_o[i];if(t&&"commaRoundTrip"in t&&"boolean"!=typeof t.commaRoundTrip)throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var u="comma"===s&&t&&t.commaRoundTrip;n||(n=Object.keys(r)),o.sort&&n.sort(o.sort);for(var c=go(),l=0;l<n.length;++l){var p=n[l];o.skipNulls&&null===r[p]||Po(a,No(r[p],p,s,u,o.strictNullHandling,o.skipNulls,o.encode?o.encoder:null,o.filter,o.sort,o.allowDots,o.serializeDate,o.format,o.formatter,o.encodeValuesOnly,o.charset,c))}var f=a.join(o.delimiter),h=!0===o.addQueryPrefix?"?":"";return o.charsetSentinel&&("iso-8859-1"===o.charset?h+="utf8=%26%2310003%3B&":h+="utf8=%E2%9C%93&"),f.length>0?h+f:""},Do={formats:uo,parse:function(e,t){var n=function(e){if(!e)return Mo;if(null!==e.decoder&&void 0!==e.decoder&&"function"!=typeof e.decoder)throw new TypeError("Decoder has to be a function.");if(void 0!==e.charset&&"utf-8"!==e.charset&&"iso-8859-1"!==e.charset)throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=void 0===e.charset?Mo.charset:e.charset;return{allowDots:void 0===e.allowDots?Mo.allowDots:!!e.allowDots,allowPrototypes:"boolean"==typeof e.allowPrototypes?e.allowPrototypes:Mo.allowPrototypes,allowSparse:"boolean"==typeof e.allowSparse?e.allowSparse:Mo.allowSparse,arrayLimit:"number"==typeof e.arrayLimit?e.arrayLimit:Mo.arrayLimit,charset:t,charsetSentinel:"boolean"==typeof e.charsetSentinel?e.charsetSentinel:Mo.charsetSentinel,comma:"boolean"==typeof e.comma?e.comma:Mo.comma,decoder:"function"==typeof e.decoder?e.decoder:Mo.decoder,delimiter:"string"==typeof e.delimiter||ko.isRegExp(e.delimiter)?e.delimiter:Mo.delimiter,depth:"number"==typeof e.depth||!1===e.depth?+e.depth:Mo.depth,ignoreQueryPrefix:!0===e.ignoreQueryPrefix,interpretNumericEntities:"boolean"==typeof e.interpretNumericEntities?e.interpretNumericEntities:Mo.interpretNumericEntities,parameterLimit:"number"==typeof e.parameterLimit?e.parameterLimit:Mo.parameterLimit,parseArrays:!1!==e.parseArrays,plainObjects:"boolean"==typeof e.plainObjects?e.plainObjects:Mo.plainObjects,strictNullHandling:"boolean"==typeof e.strictNullHandling?e.strictNullHandling:Mo.strictNullHandling}}(t);if(""===e||null==e)return n.plainObjects?Object.create(null):{};for(var r="string"==typeof e?function(e,t){var n,r={__proto__:null},o=t.ignoreQueryPrefix?e.replace(/^\?/,""):e,i=t.parameterLimit===1/0?void 0:t.parameterLimit,a=o.split(t.delimiter,i),s=-1,u=t.charset;if(t.charsetSentinel)for(n=0;n<a.length;++n)0===a[n].indexOf("utf8=")&&("utf8=%E2%9C%93"===a[n]?u="utf-8":"utf8=%26%2310003%3B"===a[n]&&(u="iso-8859-1"),s=n,n=a.length);for(n=0;n<a.length;++n)if(n!==s){var c,l,p=a[n],f=p.indexOf("]="),h=-1===f?p.indexOf("="):f+1;-1===h?(c=t.decoder(p,Mo.decoder,u,"key"),l=t.strictNullHandling?null:""):(c=t.decoder(p.slice(0,h),Mo.decoder,u,"key"),l=ko.maybeMap(Uo(p.slice(h+1),t),(function(e){return t.decoder(e,Mo.decoder,u,"value")}))),l&&t.interpretNumericEntities&&"iso-8859-1"===u&&(l=Ro(l)),p.indexOf("[]=")>-1&&(l=jo(l)?[l]:l),Co.call(r,c)?r[c]=ko.combine(r[c],l):r[c]=l}return r}(e,n):e,o=n.plainObjects?Object.create(null):{},i=Object.keys(r),a=0;a<i.length;++a){var s=i[a],u=Io(s,r[s],n,"string"==typeof e);o=ko.merge(o,u,n)}return!0===n.allowSparse?o:ko.compact(o)},stringify:xo},Fo={};!function(e){function t(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return n(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return n(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==r.return||r.return()}finally{if(u)throw a}}}}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}e.type=e=>e.split(/ *; */).shift(),e.params=e=>{const n={};var r,o=t(e.split(/ *; */));try{for(o.s();!(r=o.n()).done;){const e=r.value.split(/ *= */),t=e.shift(),o=e.shift();t&&o&&(n[t]=o)}}catch(e){o.e(e)}finally{o.f()}return n},e.parseLinks=e=>{const n={};var r,o=t(e.split(/ *, */));try{for(o.s();!(r=o.n()).done;){const e=r.value.split(/ *; */),t=e[0].slice(1,-1);n[e[1].split(/ *= */)[1].slice(1,-1)]=t}}catch(e){o.e(e)}finally{o.f()}return n},e.cleanHeader=(e,t)=>(delete e["content-type"],delete e["content-length"],delete e["transfer-encoding"],delete e.host,t&&(delete e.authorization,delete e.cookie),e),e.isObject=e=>null!==e&&"object"==typeof e,e.hasOwn=Object.hasOwn||function(e,t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");return Object.prototype.hasOwnProperty.call(new Object(e),t)},e.mixin=(t,n)=>{for(const r in n)e.hasOwn(n,r)&&(t[r]=n[r])}}(Fo);const Go=Jn,Lo=Fo.isObject,Ko=Fo.hasOwn;var Bo=Ho;function Ho(){}Ho.prototype.clearTimeout=function(){return clearTimeout(this._timer),clearTimeout(this._responseTimeoutTimer),clearTimeout(this._uploadTimeoutTimer),delete this._timer,delete this._responseTimeoutTimer,delete this._uploadTimeoutTimer,this},Ho.prototype.parse=function(e){return this._parser=e,this},Ho.prototype.responseType=function(e){return this._responseType=e,this},Ho.prototype.serialize=function(e){return this._serializer=e,this},Ho.prototype.timeout=function(e){if(!e||"object"!=typeof e)return this._timeout=e,this._responseTimeout=0,this._uploadTimeout=0,this;for(const t in e)if(Ko(e,t))switch(t){case"deadline":this._timeout=e.deadline;break;case"response":this._responseTimeout=e.response;break;case"upload":this._uploadTimeout=e.upload;break;default:console.warn("Unknown timeout option",t)}return this},Ho.prototype.retry=function(e,t){return 0!==arguments.length&&!0!==e||(e=1),e<=0&&(e=0),this._maxRetries=e,this._retries=0,this._retryCallback=t,this};const qo=new Set(["ETIMEDOUT","ECONNRESET","EADDRINUSE","ECONNREFUSED","EPIPE","ENOTFOUND","ENETUNREACH","EAI_AGAIN"]),zo=new Set([408,413,429,500,502,503,504,521,522,524]);Ho.prototype._shouldRetry=function(e,t){if(!this._maxRetries||this._retries++>=this._maxRetries)return!1;if(this._retryCallback)try{const n=this._retryCallback(e,t);if(!0===n)return!0;if(!1===n)return!1}catch(e){console.error(e)}if(t&&t.status&&zo.has(t.status))return!0;if(e){if(e.code&&qo.has(e.code))return!0;if(e.timeout&&"ECONNABORTED"===e.code)return!0;if(e.crossDomain)return!0}return!1},Ho.prototype._retry=function(){return this.clearTimeout(),this.req&&(this.req=null,this.req=this.request()),this._aborted=!1,this.timedout=!1,this.timedoutError=null,this._end()},Ho.prototype.then=function(e,t){if(!this._fullfilledPromise){const e=this;this._endCalled&&console.warn("Warning: superagent request was sent twice, because both .end() and .then() were called. Never call .end() if you use promises"),this._fullfilledPromise=new Promise(((t,n)=>{e.on("abort",(()=>{if(this._maxRetries&&this._maxRetries>this._retries)return;if(this.timedout&&this.timedoutError)return void n(this.timedoutError);const e=new Error("Aborted");e.code="ABORTED",e.status=this.status,e.method=this.method,e.url=this.url,n(e)})),e.end(((e,r)=>{e?n(e):t(r)}))}))}return this._fullfilledPromise.then(e,t)},Ho.prototype.catch=function(e){return this.then(void 0,e)},Ho.prototype.use=function(e){return e(this),this},Ho.prototype.ok=function(e){if("function"!=typeof e)throw new Error("Callback required");return this._okCallback=e,this},Ho.prototype._isResponseOK=function(e){return!!e&&(this._okCallback?this._okCallback(e):e.status>=200&&e.status<300)},Ho.prototype.get=function(e){return this._header[e.toLowerCase()]},Ho.prototype.getHeader=Ho.prototype.get,Ho.prototype.set=function(e,t){if(Lo(e)){for(const t in e)Ko(e,t)&&this.set(t,e[t]);return this}return this._header[e.toLowerCase()]=t,this.header[e]=t,this},Ho.prototype.unset=function(e){return delete this._header[e.toLowerCase()],delete this.header[e],this},Ho.prototype.field=function(e,t,n){if(null==e)throw new Error(".field(name, val) name can not be empty");if(this._data)throw new Error(".field() can't be used if .send() is used. Please use only .send() or only .field() & .attach()");if(Lo(e)){for(const t in e)Ko(e,t)&&this.field(t,e[t]);return this}if(Array.isArray(t)){for(const n in t)Ko(t,n)&&this.field(e,t[n]);return this}if(null==t)throw new Error(".field(name, val) val can not be empty");return"boolean"==typeof t&&(t=String(t)),n?this._getFormData().append(e,t,n):this._getFormData().append(e,t),this},Ho.prototype.abort=function(){if(this._aborted)return this;if(this._aborted=!0,this.xhr&&this.xhr.abort(),this.req){if(Go.gte(process.version,"v13.0.0")&&Go.lt(process.version,"v14.0.0"))throw new Error("Superagent does not work in v13 properly with abort() due to Node.js core changes");this.req.abort()}return this.clearTimeout(),this.emit("abort"),this},Ho.prototype._auth=function(e,t,n,r){switch(n.type){case"basic":this.set("Authorization",`Basic ${r(`${e}:${t}`)}`);break;case"auto":this.username=e,this.password=t;break;case"bearer":this.set("Authorization",`Bearer ${e}`)}return this},Ho.prototype.withCredentials=function(e){return void 0===e&&(e=!0),this._withCredentials=e,this},Ho.prototype.redirects=function(e){return this._maxRedirects=e,this},Ho.prototype.maxResponseSize=function(e){if("number"!=typeof e)throw new TypeError("Invalid argument");return this._maxResponseSize=e,this},Ho.prototype.toJSON=function(){return{method:this.method,url:this.url,data:this._data,headers:this._header}},Ho.prototype.send=function(e){const t=Lo(e);let n=this._header["content-type"];if(this._formData)throw new Error(".send() can't be used if .attach() or .field() is used. Please use only .send() or only .field() & .attach()");if(t&&!this._data)Array.isArray(e)?this._data=[]:this._isHost(e)||(this._data={});else if(e&&this._data&&this._isHost(this._data))throw new Error("Can't merge these send calls");if(t&&Lo(this._data))for(const t in e){if("bigint"==typeof e[t]&&!e[t].toJSON)throw new Error("Cannot serialize BigInt value to json");Ko(e,t)&&(this._data[t]=e[t])}else{if("bigint"==typeof e)throw new Error("Cannot send value of type BigInt");"string"==typeof e?(n||this.type("form"),n=this._header["content-type"],n&&(n=n.toLowerCase().trim()),this._data="application/x-www-form-urlencoded"===n?this._data?`${this._data}&${e}`:e:(this._data||"")+e):this._data=e}return!t||this._isHost(e)||n||this.type("json"),this},Ho.prototype.sortQuery=function(e){return this._sort=void 0===e||e,this},Ho.prototype._finalizeQueryString=function(){const e=this._query.join("&");if(e&&(this.url+=(this.url.includes("?")?"&":"?")+e),this._query.length=0,this._sort){const e=this.url.indexOf("?");if(e>=0){const t=this.url.slice(e+1).split("&");"function"==typeof this._sort?t.sort(this._sort):t.sort(),this.url=this.url.slice(0,e)+"?"+t.join("&")}}},Ho.prototype._appendQueryString=()=>{console.warn("Unsupported")},Ho.prototype._timeoutError=function(e,t,n){if(this._aborted)return;const r=new Error(`${e+t}ms exceeded`);r.timeout=t,r.code="ECONNABORTED",r.errno=n,this.timedout=!0,this.timedoutError=r,this.abort(),this.callback(r)},Ho.prototype._setTimeouts=function(){const e=this;this._timeout&&!this._timer&&(this._timer=setTimeout((()=>{e._timeoutError("Timeout of ",e._timeout,"ETIME")}),this._timeout)),this._responseTimeout&&!this._responseTimeoutTimer&&(this._responseTimeoutTimer=setTimeout((()=>{e._timeoutError("Response timeout of ",e._responseTimeout,"ETIMEDOUT")}),this._responseTimeout))};const Vo=Fo;var Wo=Jo;function Jo(){}function $o(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return Qo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Qo(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function Qo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function Xo(){this._defaults=[]}Jo.prototype.get=function(e){return this.header[e.toLowerCase()]},Jo.prototype._setHeaderProperties=function(e){const t=e["content-type"]||"";this.type=Vo.type(t);const n=Vo.params(t);for(const e in n)Object.prototype.hasOwnProperty.call(n,e)&&(this[e]=n[e]);this.links={};try{e.link&&(this.links=Vo.parseLinks(e.link))}catch(e){}},Jo.prototype._setStatusProperties=function(e){const t=Math.trunc(e/100);this.statusCode=e,this.status=this.statusCode,this.statusType=t,this.info=1===t,this.ok=2===t,this.redirect=3===t,this.clientError=4===t,this.serverError=5===t,this.error=(4===t||5===t)&&this.toError(),this.created=201===e,this.accepted=202===e,this.noContent=204===e,this.badRequest=400===e,this.unauthorized=401===e,this.notAcceptable=406===e,this.forbidden=403===e,this.notFound=404===e,this.unprocessableEntity=422===e};for(var Yo=0,Zo=["use","on","once","set","query","type","accept","auth","withCredentials","sortQuery","retry","ok","redirects","timeout","buffer","serialize","parse","ca","key","pfx","cert","disableTLSCerts"];Yo<Zo.length;Yo++){const e=Zo[Yo];Xo.prototype[e]=function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return this._defaults.push({fn:e,args:n}),this}}Xo.prototype._setDefaults=function(e){var t,n=$o(this._defaults);try{for(n.s();!(t=n.n()).done;){const n=t.value;e[n.fn](...n.args)}}catch(e){n.e(e)}finally{n.f()}};var ei=Xo;!function(e,t){function n(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(!e)return;if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return r(e,t)}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,s=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){u=!0,a=e},f:function(){try{s||null==n.return||n.return()}finally{if(u)throw a}}}}function r(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}let o;"undefined"!=typeof window?o=window:"undefined"==typeof self?(console.warn("Using browser-only version of superagent in non-browser environment"),o=void 0):o=self;const i=Jt.exports,a=$t,s=Do,u=Bo,c=Fo.isObject,l=Fo.mixin,p=Fo.hasOwn,f=Wo,h=ei;function d(){}e.exports=function(e,n){return"function"==typeof n?new t.Request("GET",e).end(n):1===arguments.length?new t.Request("GET",e):new t.Request(e,n)};const y=t=e.exports;t.Request=S,y.getXHR=()=>{if(o.XMLHttpRequest)return new o.XMLHttpRequest;throw new Error("Browser-only version of superagent could not find XHR")};const g="".trim?e=>e.trim():e=>e.replace(/(^\s*|\s*$)/g,"");function b(e){if(!c(e))return e;const t=[];for(const n in e)p(e,n)&&v(t,n,e[n]);return t.join("&")}function v(e,t,r){if(void 0!==r)if(null!==r)if(Array.isArray(r)){var o,i=n(r);try{for(i.s();!(o=i.n()).done;){v(e,t,o.value)}}catch(e){i.e(e)}finally{i.f()}}else if(c(r))for(const n in r)p(r,n)&&v(e,`${t}[${n}]`,r[n]);else e.push(encodeURI(t)+"="+encodeURIComponent(r));else e.push(encodeURI(t))}function m(e){const t={},n=e.split("&");let r,o;for(let e=0,i=n.length;e<i;++e)r=n[e],o=r.indexOf("="),-1===o?t[decodeURIComponent(r)]="":t[decodeURIComponent(r.slice(0,o))]=decodeURIComponent(r.slice(o+1));return t}function _(e){return/[/+]json($|[^-\w])/i.test(e)}function O(e){this.req=e,this.xhr=this.req.xhr,this.text="HEAD"!==this.req.method&&(""===this.xhr.responseType||"text"===this.xhr.responseType)||void 0===this.xhr.responseType?this.xhr.responseText:null,this.statusText=this.req.xhr.statusText;let t=this.xhr.status;1223===t&&(t=204),this._setStatusProperties(t),this.headers=function(e){const t=e.split(/\r?\n/),n={};let r,o,i,a;for(let e=0,s=t.length;e<s;++e)o=t[e],r=o.indexOf(":"),-1!==r&&(i=o.slice(0,r).toLowerCase(),a=g(o.slice(r+1)),n[i]=a);return n}(this.xhr.getAllResponseHeaders()),this.header=this.headers,this.header["content-type"]=this.xhr.getResponseHeader("content-type"),this._setHeaderProperties(this.header),null===this.text&&e._responseType?this.body=this.xhr.response:this.body="HEAD"===this.req.method?null:this._parseBody(this.text?this.text:this.xhr.response)}function S(e,t){const n=this;this._query=this._query||[],this.method=e,this.url=t,this.header={},this._header={},this.on("end",(()=>{let e,t=null,r=null;try{r=new O(n)}catch(e){return t=new Error("Parser is unable to parse the response"),t.parse=!0,t.original=e,n.xhr?(t.rawResponse=void 0===n.xhr.responseType?n.xhr.responseText:n.xhr.response,t.status=n.xhr.status?n.xhr.status:null,t.statusCode=t.status):(t.rawResponse=null,t.status=null),n.callback(t)}n.emit("response",r);try{n._isResponseOK(r)||(e=new Error(r.statusText||r.text||"Unsuccessful HTTP response"))}catch(t){e=t}e?(e.original=t,e.response=r,e.status=e.status||r.status,n.callback(e,r)):n.callback(null,r)}))}y.serializeObject=b,y.parseString=m,y.types={html:"text/html",json:"application/json",xml:"text/xml",urlencoded:"application/x-www-form-urlencoded",form:"application/x-www-form-urlencoded","form-data":"application/x-www-form-urlencoded"},y.serialize={"application/x-www-form-urlencoded":s.stringify,"application/json":a},y.parse={"application/x-www-form-urlencoded":m,"application/json":JSON.parse},l(O.prototype,f.prototype),O.prototype._parseBody=function(e){let t=y.parse[this.type];return this.req._parser?this.req._parser(this,e):(!t&&_(this.type)&&(t=y.parse["application/json"]),t&&e&&(e.length>0||e instanceof Object)?t(e):null)},O.prototype.toError=function(){const e=this.req,t=e.method,n=e.url,r=`cannot ${t} ${n} (${this.status})`,o=new Error(r);return o.status=this.status,o.method=t,o.url=n,o},y.Response=O,i(S.prototype),l(S.prototype,u.prototype),S.prototype.type=function(e){return this.set("Content-Type",y.types[e]||e),this},S.prototype.accept=function(e){return this.set("Accept",y.types[e]||e),this},S.prototype.auth=function(e,t,n){1===arguments.length&&(t=""),"object"==typeof t&&null!==t&&(n=t,t=""),n||(n={type:"function"==typeof btoa?"basic":"auto"});const r=n.encoder?n.encoder:e=>{if("function"==typeof btoa)return btoa(e);throw new Error("Cannot use basic auth, btoa is not a function")};return this._auth(e,t,n,r)},S.prototype.query=function(e){return"string"!=typeof e&&(e=b(e)),e&&this._query.push(e),this},S.prototype.attach=function(e,t,n){if(t){if(this._data)throw new Error("superagent can't mix .send() and .attach()");this._getFormData().append(e,t,n||t.name)}return this},S.prototype._getFormData=function(){return this._formData||(this._formData=new o.FormData),this._formData},S.prototype.callback=function(e,t){if(this._shouldRetry(e,t))return this._retry();const n=this._callback;this.clearTimeout(),e&&(this._maxRetries&&(e.retries=this._retries-1),this.emit("error",e)),n(e,t)},S.prototype.crossDomainError=function(){const e=new Error("Request has been terminated\nPossible causes: the network is offline, Origin is not allowed by Access-Control-Allow-Origin, the page is being unloaded, etc.");e.crossDomain=!0,e.status=this.status,e.method=this.method,e.url=this.url,this.callback(e)},S.prototype.agent=function(){return console.warn("This is not supported in browser version of superagent"),this},S.prototype.ca=S.prototype.agent,S.prototype.buffer=S.prototype.ca,S.prototype.write=()=>{throw new Error("Streaming is not supported in browser version of superagent")},S.prototype.pipe=S.prototype.write,S.prototype._isHost=function(e){return e&&"object"==typeof e&&!Array.isArray(e)&&"[object Object]"!==Object.prototype.toString.call(e)},S.prototype.end=function(e){this._endCalled&&console.warn("Warning: .end() was called twice. This is not supported in superagent"),this._endCalled=!0,this._callback=e||d,this._finalizeQueryString(),this._end()},S.prototype._setUploadTimeout=function(){const e=this;this._uploadTimeout&&!this._uploadTimeoutTimer&&(this._uploadTimeoutTimer=setTimeout((()=>{e._timeoutError("Upload timeout of ",e._uploadTimeout,"ETIMEDOUT")}),this._uploadTimeout))},S.prototype._end=function(){if(this._aborted)return this.callback(new Error("The request has been aborted even before .end() was called"));const e=this;this.xhr=y.getXHR();const t=this.xhr;let n=this._formData||this._data;this._setTimeouts(),t.addEventListener("readystatechange",(()=>{const n=t.readyState;if(n>=2&&e._responseTimeoutTimer&&clearTimeout(e._responseTimeoutTimer),4!==n)return;let r;try{r=t.status}catch(e){r=0}if(!r){if(e.timedout||e._aborted)return;return e.crossDomainError()}e.emit("end")}));const r=(t,n)=>{n.total>0&&(n.percent=n.loaded/n.total*100,100===n.percent&&clearTimeout(e._uploadTimeoutTimer)),n.direction=t,e.emit("progress",n)};if(this.hasListeners("progress"))try{t.addEventListener("progress",r.bind(null,"download")),t.upload&&t.upload.addEventListener("progress",r.bind(null,"upload"))}catch(e){}t.upload&&this._setUploadTimeout();try{this.username&&this.password?t.open(this.method,this.url,!0,this.username,this.password):t.open(this.method,this.url,!0)}catch(e){return this.callback(e)}if(this._withCredentials&&(t.withCredentials=!0),!this._formData&&"GET"!==this.method&&"HEAD"!==this.method&&"string"!=typeof n&&!this._isHost(n)){const e=this._header["content-type"];let t=this._serializer||y.serialize[e?e.split(";")[0]:""];!t&&_(e)&&(t=y.serialize["application/json"]),t&&(n=t(n))}for(const e in this.header)null!==this.header[e]&&p(this.header,e)&&t.setRequestHeader(e,this.header[e]);this._responseType&&(t.responseType=this._responseType),this.emit("request",this),t.send(void 0===n?null:n)},y.agent=()=>new h;for(var P=0,w=["GET","POST","OPTIONS","PATCH","PUT","DELETE"];P<w.length;P++){const e=w[P];h.prototype[e.toLowerCase()]=function(t,n){const r=new y.Request(e,t);return this._setDefaults(r),n&&r.end(n),r}}function E(e,t,n){const r=y("DELETE",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}h.prototype.del=h.prototype.delete,y.get=(e,t,n)=>{const r=y("GET",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},y.head=(e,t,n)=>{const r=y("HEAD",e);return"function"==typeof t&&(n=t,t=null),t&&r.query(t),n&&r.end(n),r},y.options=(e,t,n)=>{const r=y("OPTIONS",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},y.del=E,y.delete=E,y.patch=(e,t,n)=>{const r=y("PATCH",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},y.post=(e,t,n)=>{const r=y("POST",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r},y.put=(e,t,n)=>{const r=y("PUT",e);return"function"==typeof t&&(n=t,t=null),t&&r.send(t),n&&r.end(n),r}}(Wt,Wt.exports);var ti=Wt.exports;function ni(e){var t=(new Date).getTime(),n=(new Date).toISOString(),r=console&&console.log?console:window&&window.console&&window.console.log?window.console:console;r.log("<<<<<"),r.log("[".concat(n,"]"),"\n",e.url,"\n",e.qs),r.log("-----"),e.on("response",(function(n){var o=(new Date).getTime()-t,i=(new Date).toISOString();r.log(">>>>>>"),r.log("[".concat(i," / ").concat(o,"]"),"\n",e.url,"\n",e.qs,"\n",n.text),r.log("-----")}))}function ri(e,t,n){var r=this;this._config.logVerbosity&&(e=e.use(ni)),this._config.proxy&&this._modules.proxy&&(e=this._modules.proxy.call(this,e)),this._config.keepAlive&&this._modules.keepAlive&&(e=this._modules.keepAlive(e));var o=e;if(t.abortSignal)var i=t.abortSignal.subscribe((function(){o.abort(),i()}));return!0===t.forceBuffered?o="undefined"==typeof Blob?o.buffer().responseType("arraybuffer"):o.responseType("arraybuffer"):!1===t.forceBuffered&&(o=o.buffer(!1)),(o=o.timeout(t.timeout)).on("abort",(function(){return n({category:R.PNUnknownCategory,error:!0,operation:t.operation,errorData:new Error("Aborted")},null)})),o.end((function(e,o){var i,a={};if(a.error=null!==e,a.operation=t.operation,o&&o.status&&(a.statusCode=o.status),e){if(e.response&&e.response.text&&!r._config.logVerbosity)try{a.errorData=JSON.parse(e.response.text)}catch(t){a.errorData=e}else a.errorData=e;return a.category=r._detectErrorCategory(e),n(a,null)}if(t.ignoreBody)i={headers:o.headers,redirects:o.redirects,response:o};else try{i=JSON.parse(o.text)}catch(e){return a.errorData=o,a.error=!0,n(a,null)}return i.error&&1===i.error&&i.status&&i.message&&i.service?(a.errorData=i,a.statusCode=i.status,a.error=!0,a.category=r._detectErrorCategory(a),n(a,null)):(i.error&&i.error.message&&(a.errorData=i.error),n(a,i))})),o}function oi(e,t,n){return o(this,void 0,void 0,(function(){var r;return i(this,(function(o){switch(o.label){case 0:return r=ti.post(e),t.forEach((function(e){var t=e.key,n=e.value;r=r.field(t,n)})),r.attach("file",n,{contentType:"application/octet-stream"}),[4,r];case 1:return[2,o.sent()]}}))}))}function ii(e,t,n){var r=ti.get(this.getStandardOrigin()+t.url).set(t.headers).query(e);return ri.call(this,r,t,n)}function ai(e,t,n){var r=ti.get(this.getStandardOrigin()+t.url).set(t.headers).query(e);return ri.call(this,r,t,n)}function si(e,t,n,r){var o=ti.post(this.getStandardOrigin()+n.url).query(e).set(n.headers).send(t);return ri.call(this,o,n,r)}function ui(e,t,n,r){var o=ti.patch(this.getStandardOrigin()+n.url).query(e).set(n.headers).send(t);return ri.call(this,o,n,r)}function ci(e,t,n){var r=ti.delete(this.getStandardOrigin()+t.url).set(t.headers).query(e);return ri.call(this,r,t,n)}function li(e,t){var n=new Uint8Array(e.byteLength+t.byteLength);return n.set(new Uint8Array(e),0),n.set(new Uint8Array(t),e.byteLength),n.buffer}var pi,fi=function(){function e(){}return Object.defineProperty(e.prototype,"algo",{get:function(){return"aes-256-cbc"},enumerable:!1,configurable:!0}),e.prototype.encrypt=function(e,t){return o(this,void 0,void 0,(function(){var n;return i(this,(function(r){switch(r.label){case 0:return[4,this.getKey(e)];case 1:if(n=r.sent(),t instanceof ArrayBuffer)return[2,this.encryptArrayBuffer(n,t)];if("string"==typeof t)return[2,this.encryptString(n,t)];throw new Error("Cannot encrypt this file. In browsers file encryption supports only string or ArrayBuffer")}}))}))},e.prototype.decrypt=function(e,t){return o(this,void 0,void 0,(function(){var n;return i(this,(function(r){switch(r.label){case 0:return[4,this.getKey(e)];case 1:if(n=r.sent(),t instanceof ArrayBuffer)return[2,this.decryptArrayBuffer(n,t)];if("string"==typeof t)return[2,this.decryptString(n,t)];throw new Error("Cannot decrypt this file. In browsers file decryption supports only string or ArrayBuffer")}}))}))},e.prototype.encryptFile=function(e,t,n){return o(this,void 0,void 0,(function(){var r,o,a;return i(this,(function(i){switch(i.label){case 0:if(t.data.byteLength<=0)throw new Error("encryption error. empty content");return[4,this.getKey(e)];case 1:return r=i.sent(),[4,t.data.arrayBuffer()];case 2:return o=i.sent(),[4,this.encryptArrayBuffer(r,o)];case 3:return a=i.sent(),[2,n.create({name:t.name,mimeType:"application/octet-stream",data:a})]}}))}))},e.prototype.decryptFile=function(e,t,n){return o(this,void 0,void 0,(function(){var r,o,a;return i(this,(function(i){switch(i.label){case 0:return[4,this.getKey(e)];case 1:return r=i.sent(),[4,t.data.arrayBuffer()];case 2:return o=i.sent(),[4,this.decryptArrayBuffer(r,o)];case 3:return a=i.sent(),[2,n.create({name:t.name,data:a})]}}))}))},e.prototype.getKey=function(t){return o(this,void 0,void 0,(function(){var n,r,o;return i(this,(function(i){switch(i.label){case 0:return[4,crypto.subtle.digest("SHA-256",e.encoder.encode(t))];case 1:return n=i.sent(),r=Array.from(new Uint8Array(n)).map((function(e){return e.toString(16).padStart(2,"0")})).join(""),o=e.encoder.encode(r.slice(0,32)).buffer,[2,crypto.subtle.importKey("raw",o,"AES-CBC",!0,["encrypt","decrypt"])]}}))}))},e.prototype.encryptArrayBuffer=function(e,t){return o(this,void 0,void 0,(function(){var n,r,o;return i(this,(function(i){switch(i.label){case 0:return n=crypto.getRandomValues(new Uint8Array(16)),r=li,o=[n.buffer],[4,crypto.subtle.encrypt({name:"AES-CBC",iv:n},e,t)];case 1:return[2,r.apply(void 0,o.concat([i.sent()]))]}}))}))},e.prototype.decryptArrayBuffer=function(t,n){return o(this,void 0,void 0,(function(){var r;return i(this,(function(o){switch(o.label){case 0:if(r=n.slice(0,16),n.slice(e.IV_LENGTH).byteLength<=0)throw new Error("decryption error: empty content");return[4,crypto.subtle.decrypt({name:"AES-CBC",iv:r},t,n.slice(e.IV_LENGTH))];case 1:return[2,o.sent()]}}))}))},e.prototype.encryptString=function(t,n){return o(this,void 0,void 0,(function(){var r,o,a,s;return i(this,(function(i){switch(i.label){case 0:return r=crypto.getRandomValues(new Uint8Array(16)),o=e.encoder.encode(n).buffer,[4,crypto.subtle.encrypt({name:"AES-CBC",iv:r},t,o)];case 1:return a=i.sent(),s=li(r.buffer,a),[2,e.decoder.decode(s)]}}))}))},e.prototype.decryptString=function(t,n){return o(this,void 0,void 0,(function(){var r,o,a,s;return i(this,(function(i){switch(i.label){case 0:return r=e.encoder.encode(n).buffer,o=r.slice(0,16),a=r.slice(16),[4,crypto.subtle.decrypt({name:"AES-CBC",iv:o},t,a)];case 1:return s=i.sent(),[2,e.decoder.decode(s)]}}))}))},e.IV_LENGTH=16,e.encoder=new TextEncoder,e.decoder=new TextDecoder,e}(),hi=(pi=function(){function e(e){if(e instanceof File)this.data=e,this.name=this.data.name,this.mimeType=this.data.type;else if(e.data){var t=e.data;this.data=new File([t],e.name,{type:e.mimeType}),this.name=e.name,e.mimeType&&(this.mimeType=e.mimeType)}if(void 0===this.data)throw new Error("Couldn't construct a file out of supplied options.");if(void 0===this.name)throw new Error("Couldn't guess filename out of the options. Please provide one.")}return e.create=function(e){return new this(e)},e.prototype.toBuffer=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){throw new Error("This feature is only supported in Node.js environments.")}))}))},e.prototype.toStream=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){throw new Error("This feature is only supported in Node.js environments.")}))}))},e.prototype.toFileUri=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){throw new Error("This feature is only supported in react native environments.")}))}))},e.prototype.toBlob=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){return[2,this.data]}))}))},e.prototype.toArrayBuffer=function(){return o(this,void 0,void 0,(function(){var e=this;return i(this,(function(t){return[2,new Promise((function(t,n){var r=new FileReader;r.addEventListener("load",(function(){if(r.result instanceof ArrayBuffer)return t(r.result)})),r.addEventListener("error",(function(){n(r.error)})),r.readAsArrayBuffer(e.data)}))]}))}))},e.prototype.toString=function(){return o(this,void 0,void 0,(function(){var e=this;return i(this,(function(t){return[2,new Promise((function(t,n){var r=new FileReader;r.addEventListener("load",(function(){if("string"==typeof r.result)return t(r.result)})),r.addEventListener("error",(function(){n(r.error)})),r.readAsBinaryString(e.data)}))]}))}))},e.prototype.toFile=function(){return o(this,void 0,void 0,(function(){return i(this,(function(e){return[2,this.data]}))}))},e}(),pi.supportsFile="undefined"!=typeof File,pi.supportsBlob="undefined"!=typeof Blob,pi.supportsArrayBuffer="undefined"!=typeof ArrayBuffer,pi.supportsBuffer=!1,pi.supportsStream=!1,pi.supportsString=!0,pi.supportsEncryptFile=!0,pi.supportsFileUri=!1,pi),di=function(){function e(e){this.config=e,this.cryptor=new A({config:e}),this.fileCryptor=new fi}return Object.defineProperty(e.prototype,"identifier",{get:function(){return""},enumerable:!1,configurable:!0}),e.prototype.encrypt=function(e){var t="string"==typeof e?e:(new TextDecoder).decode(e);return{data:this.cryptor.encrypt(t),metadata:null}},e.prototype.decrypt=function(e){var t="string"==typeof e.data?e.data:v(e.data);return this.cryptor.decrypt(t)},e.prototype.encryptFile=function(e,t){var n;return o(this,void 0,void 0,(function(){return i(this,(function(r){return[2,this.fileCryptor.encryptFile(null===(n=this.config)||void 0===n?void 0:n.cipherKey,e,t)]}))}))},e.prototype.decryptFile=function(e,t){return o(this,void 0,void 0,(function(){return i(this,(function(n){return[2,this.fileCryptor.decryptFile(this.config.cipherKey,e,t)]}))}))},e}(),yi=function(){function e(e){this.cipherKey=e.cipherKey,this.CryptoJS=E,this.encryptedKey=this.CryptoJS.SHA256(this.cipherKey)}return Object.defineProperty(e.prototype,"algo",{get:function(){return"AES-CBC"},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"identifier",{get:function(){return"ACRH"},enumerable:!1,configurable:!0}),e.prototype.getIv=function(){return crypto.getRandomValues(new Uint8Array(e.BLOCK_SIZE))},e.prototype.getKey=function(){return o(this,void 0,void 0,(function(){var t,n;return i(this,(function(r){switch(r.label){case 0:return t=e.encoder.encode(this.cipherKey),[4,crypto.subtle.digest("SHA-256",t.buffer)];case 1:return n=r.sent(),[2,crypto.subtle.importKey("raw",n,this.algo,!0,["encrypt","decrypt"])]}}))}))},e.prototype.encrypt=function(t){if(0===("string"==typeof t?t:e.decoder.decode(t)).length)throw new Error("encryption error. empty content");var n=this.getIv();return{metadata:n,data:b(this.CryptoJS.AES.encrypt(t,this.encryptedKey,{iv:this.bufferToWordArray(n),mode:this.CryptoJS.mode.CBC}).ciphertext.toString(this.CryptoJS.enc.Base64))}},e.prototype.decrypt=function(t){var n=this.bufferToWordArray(new Uint8ClampedArray(t.metadata)),r=this.bufferToWordArray(new Uint8ClampedArray(t.data));return e.encoder.encode(this.CryptoJS.AES.decrypt({ciphertext:r},this.encryptedKey,{iv:n,mode:this.CryptoJS.mode.CBC}).toString(this.CryptoJS.enc.Utf8)).buffer},e.prototype.encryptFileData=function(e){return o(this,void 0,void 0,(function(){var t,n,r;return i(this,(function(o){switch(o.label){case 0:return[4,this.getKey()];case 1:return t=o.sent(),n=this.getIv(),r={},[4,crypto.subtle.encrypt({name:this.algo,iv:n},t,e)];case 2:return[2,(r.data=o.sent(),r.metadata=n,r)]}}))}))},e.prototype.decryptFileData=function(e){return o(this,void 0,void 0,(function(){var t;return i(this,(function(n){switch(n.label){case 0:return[4,this.getKey()];case 1:return t=n.sent(),[2,crypto.subtle.decrypt({name:this.algo,iv:e.metadata},t,e.data)]}}))}))},e.prototype.bufferToWordArray=function(e){var t,n=[];for(t=0;t<e.length;t+=1)n[t/4|0]|=e[t]<<24-8*t;return this.CryptoJS.lib.WordArray.create(n,e.length)},e.BLOCK_SIZE=16,e.encoder=new TextEncoder,e.decoder=new TextDecoder,e}(),gi=function(){function e(e){var t;this.defaultCryptor=e.default,this.cryptors=null!==(t=e.cryptors)&&void 0!==t?t:[]}return e.legacyCryptoModule=function(e){var t;return new this({default:new di({cipherKey:e.cipherKey,useRandomIVs:null===(t=e.useRandomIVs)||void 0===t||t}),cryptors:[new yi({cipherKey:e.cipherKey})]})},e.aesCbcCryptoModule=function(e){var t;return new this({default:new yi({cipherKey:e.cipherKey}),cryptors:[new di({cipherKey:e.cipherKey,useRandomIVs:null===(t=e.useRandomIVs)||void 0===t||t})]})},e.withDefaultCryptor=function(e){return new this({default:e})},e.prototype.getAllCryptors=function(){return u([this.defaultCryptor],s(this.cryptors),!1)},e.prototype.encrypt=function(e){var t=this.defaultCryptor.encrypt(e);if(!t.metadata)return t.data;var n=this.getHeaderData(t);return this.concatArrayBuffer(n,t.data)},e.prototype.decrypt=function(e){var t="string"==typeof e?b(e):e,n=bi.tryParse(t),r=this.getCryptor(n),o=n.length>0?t.slice(n.length-n.metadataLength,n.length):null;if(t.slice(n.length).byteLength<=0)throw new Error("decryption error. empty content");return r.decrypt({data:t.slice(n.length),metadata:o})},e.prototype.encryptFile=function(e,t){return o(this,void 0,void 0,(function(){var n,r;return i(this,(function(o){switch(o.label){case 0:return this.defaultCryptor.identifier===bi.LEGACY_IDENTIFIER?[2,this.defaultCryptor.encryptFile(e,t)]:(n=this.getFileData(e.data),[4,this.defaultCryptor.encryptFileData(n)]);case 1:return r=o.sent(),[2,t.create({name:e.name,mimeType:"application/octet-stream",data:this.concatArrayBuffer(this.getHeaderData(r),r.data)})]}}))}))},e.prototype.decryptFile=function(t,n){return o(this,void 0,void 0,(function(){var r,o,a,s,u,c,l,p;return i(this,(function(i){switch(i.label){case 0:return[4,t.data.arrayBuffer()];case 1:return r=i.sent(),o=bi.tryParse(r),(null==(a=this.getCryptor(o))?void 0:a.identifier)===e.LEGACY_IDENTIFIER?[2,a.decryptFile(t,n)]:(s=this.getFileData(r),u=s.slice(o.length-o.metadataLength,o.length),l=(c=n).create,p={name:t.name},[4,this.defaultCryptor.decryptFileData({data:r.slice(o.length),metadata:u})]);case 2:return[2,l.apply(c,[(p.data=i.sent(),p)])]}}))}))},e.prototype.getCryptor=function(e){if(""===e){var t=this.getAllCryptors().find((function(e){return""===e.identifier}));if(t)return t;throw new Error("unknown cryptor error")}if(e instanceof vi)return this.getCryptorFromId(e.identifier)},e.prototype.getCryptorFromId=function(e){var t=this.getAllCryptors().find((function(t){return e===t.identifier}));if(t)return t;throw Error("unknown cryptor error")},e.prototype.concatArrayBuffer=function(e,t){var n=new Uint8Array(e.byteLength+t.byteLength);return n.set(new Uint8Array(e),0),n.set(new Uint8Array(t),e.byteLength),n.buffer},e.prototype.getHeaderData=function(e){if(e.metadata){var t=bi.from(this.defaultCryptor.identifier,e.metadata),n=new Uint8Array(t.length),r=0;return n.set(t.data,r),r+=t.length-e.metadata.byteLength,n.set(new Uint8Array(e.metadata),r),n.buffer}},e.prototype.getFileData=function(t){if(t instanceof ArrayBuffer)return t;if("string"==typeof t)return e.encoder.encode(t);throw new Error("Cannot decrypt/encrypt file. In browsers file decryption supports only string or ArrayBuffer")},e.LEGACY_IDENTIFIER="",e.encoder=new TextEncoder,e.decoder=new TextDecoder,e}(),bi=function(){function e(){}return e.from=function(t,n){if(t!==e.LEGACY_IDENTIFIER)return new vi(t,n.byteLength)},e.tryParse=function(t){var n=new Uint8Array(t),r="";if(n.byteLength>=4&&(r=n.slice(0,4),this.decoder.decode(r)!==e.SENTINEL))return"";if(!(n.byteLength>=5))throw new Error("decryption error. invalid header version");if(n[4]>e.MAX_VERSION)throw new Error("unknown cryptor error");var o="",i=5+e.IDENTIFIER_LENGTH;if(!(n.byteLength>=i))throw new Error("decryption error. invalid crypto identifier");o=n.slice(5,i);var a=null;if(!(n.byteLength>=i+1))throw new Error("decryption error. invalid metadata length");return a=n[i],i+=1,255===a&&n.byteLength>=i+2&&(a=new Uint16Array(n.slice(i,i+2)).reduce((function(e,t){return(e<<8)+t}),0),i+=2),new vi(this.decoder.decode(o),a)},e.SENTINEL="PNED",e.LEGACY_IDENTIFIER="",e.IDENTIFIER_LENGTH=4,e.VERSION=1,e.MAX_VERSION=1,e.decoder=new TextDecoder,e}(),vi=function(){function e(e,t){this._identifier=e,this._metadataLength=t}return Object.defineProperty(e.prototype,"identifier",{get:function(){return this._identifier},set:function(e){this._identifier=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"metadataLength",{get:function(){return this._metadataLength},set:function(e){this._metadataLength=e},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"version",{get:function(){return bi.VERSION},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"length",{get:function(){return bi.SENTINEL.length+1+bi.IDENTIFIER_LENGTH+(this.metadataLength<255?1:3)+this.metadataLength},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"data",{get:function(){var e=0,t=new Uint8Array(this.length),n=new TextEncoder;t.set(n.encode(bi.SENTINEL)),t[e+=bi.SENTINEL.length]=this.version,e++,this.identifier&&t.set(n.encode(this.identifier),e),e+=bi.IDENTIFIER_LENGTH;var r=this.metadataLength;return r<255?t[e]=r:t.set([255,r>>8,255&r],e),t},enumerable:!1,configurable:!0}),e.IDENTIFIER_LENGTH=4,e.SENTINEL="PNED",e}();function mi(e){if(!navigator||!navigator.sendBeacon)return!1;navigator.sendBeacon(e)}var _i=function(e){function n(t){var n=this,r=t.listenToBrowserNetworkEvents,o=void 0===r||r;return t.sdkFamily="Web",t.networking=new qt({del:ci,get:ai,post:si,patch:ui,sendBeacon:mi,getfile:ii,postfile:oi}),t.cbor=new Vt((function(e){return zt(f.decode(e))}),b),t.PubNubFile=hi,t.cryptography=new fi,t.initCryptoModule=function(e){return new gi({default:new di({cipherKey:e.cipherKey,useRandomIVs:e.useRandomIVs}),cryptors:[new yi({cipherKey:e.cipherKey})]})},n=e.call(this,t)||this,o&&(window.addEventListener("offline",(function(){n.networkDownDetected()})),window.addEventListener("online",(function(){n.networkUpDetected()}))),n}return t(n,e),n.CryptoModule=gi,n}(Ht);return _i}));
exports.encode = exports.decode = void 0;
function encode(input) {
    var base64 = '';
    var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    var bytes = new Uint8Array(input);
    var byteLength = bytes.byteLength;
    var byteRemainder = byteLength % 3;
    var mainLength = byteLength - byteRemainder;
    var a, b, c, d;
    var chunk;
    // Main loop deals with bytes in chunks of 3
    for (var i = 0; i < mainLength; i = i + 3) {
        // Combine the three bytes into a single integer
        chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];
        // Use bitmasks to extract 6-bit segments from the triplet
        a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18
        b = (chunk & 258048) >> 12; // 258048   = (2^6 - 1) << 12
        c = (chunk & 4032) >> 6; // 4032     = (2^6 - 1) << 6
        d = chunk & 63; // 63       = 2^6 - 1
        // Convert the raw binary segments to the appropriate ASCII encoding
        base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];
    }
    // Deal with the remaining bytes and padding
    if (byteRemainder == 1) {
        chunk = bytes[mainLength];
        a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2
        // Set the 4 least significant bits to zero
        b = (chunk & 3) << 4; // 3   = 2^2 - 1
        base64 += encodings[a] + encodings[b] + '==';
    }
    else if (byteRemainder == 2) {
        chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];
        a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10
        b = (chunk & 1008) >> 4; // 1008  = (2^6 - 1) << 4
        // Set the 2 least significant bits to zero
        c = (chunk & 15) << 2; // 15    = 2^4 - 1
        base64 += encodings[a] + encodings[b] + encodings[c] + '=';
    }
    return base64;
}
exports.encode = encode;
        this.cryptoModule = setup.cryptoModule;
        this.setCipherKey(setup.cipherKey, setup);
    default_1.prototype.setCipherKey = function (val, setup, modules) {
        var _a;
        if (this.cipherKey) {
            this.cryptoModule =
                (_a = setup.cryptoModule) !== null && _a !== void 0 ? _a : setup.initCryptoModule({ cipherKey: this.cipherKey, useRandomIVs: this.useRandomIVs });
            if (modules)
                modules.cryptoModule = this.cryptoModule;
        }
        return '7.4.0';
        var subscribeEndpoint = _a.subscribeEndpoint, leaveEndpoint = _a.leaveEndpoint, heartbeatEndpoint = _a.heartbeatEndpoint, setStateEndpoint = _a.setStateEndpoint, timeEndpoint = _a.timeEndpoint, getFileUrl = _a.getFileUrl, config = _a.config, crypto = _a.crypto, listenerManager = _a.listenerManager, cryptoModule = _a.cryptoModule;
        this._cryptoModule = cryptoModule;
        if (this._cryptoModule)
            this._decoder = new TextDecoder();
                if (_this._cryptoModule) {
                    var decryptedPayload = void 0;
                    try {
                        var decryptedData = _this._cryptoModule.decrypt(message.payload);
                        decryptedPayload =
                            decryptedData instanceof ArrayBuffer ? JSON.parse(_this._decoder.decode(decryptedData)) : decryptedData;
                    }
                    catch (e) {
                        decryptedPayload = null;
                        if (console && console.log) {
                            console.log('decryption error', e.message);
                        }
                    }
                    if (decryptedPayload !== null) {
                if (_this._cryptoModule) {
                    var decryptedPayload = void 0;
                    try {
                        var decryptedData = _this._cryptoModule.decrypt(message.payload);
                        decryptedPayload =
                            decryptedData instanceof ArrayBuffer ? JSON.parse(_this._decoder.decode(decryptedData)) : decryptedData;
                    }
                    catch (e) {
                        decryptedPayload = null;
                        // eslint-disable-next-line
                        if (console && console.log) {
                            console.log('decryption error', e.message); //eslint-disable-line
                        }
                    }
                    if (decryptedPayload != null) {
                        announce.message = decryptedPayload;
                    }
                    else {
                        announce.message = message.payload;
                    }
    if (!modules.cryptoModule)
        var decryptedData = modules.cryptoModule.decrypt(message);
        var decryptedPayload = decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
        return decryptedPayload;
        if (console && console.log)
            console.log('decryption error', e.message);
// Download_file.js
/**       */
        var PubNubFile = _a.PubNubFile, config = _a.config, cryptography = _a.cryptography, cryptoModule = _a.cryptoModule;
            var body, _b;
            var _c, _d;
                        if (!(PubNubFile.supportsEncryptFile && (params.cipherKey || cryptoModule))) return [3 /*break*/, 5];
                        if (!(params.cipherKey == null)) return [3 /*break*/, 2];
                        return [4 /*yield*/, cryptoModule.decryptFile(PubNubFile.create({ data: body, name: params.name }), PubNubFile)];
                        _b = (_e.sent()).data;
                        return [3 /*break*/, 4];
                    case 2: return [4 /*yield*/, cryptography.decrypt((_c = params.cipherKey) !== null && _c !== void 0 ? _c : config.cipherKey, body)];
                    case 3:
                        _b = _e.sent();
                        _e.label = 4;
                    case 4:
                        body = _b;
                        _e.label = 5;
                    case 5: return [2 /*return*/, PubNubFile.create({
var base64_codec_1 = require("../../components/base64_codec");
var preparePayload = function (modules, payload) {
    if (modules.cryptoModule) {
        var encrypted = modules.cryptoModule.encrypt(stringifiedPayload);
        stringifiedPayload = typeof encrypted === 'string' ? encrypted : (0, base64_codec_1.encode)(encrypted);
    var generateUploadUrl = _a.generateUploadUrl, publishFile = _a.publishFile, _b = _a.modules, PubNubFile = _b.PubNubFile, config = _b.config, cryptography = _b.cryptography, cryptoModule = _b.cryptoModule, networking = _b.networking;
            var file, _b, _c, url, formFields, _d, id, name, _e, formFieldsWithMimeType, result, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, e_1, errorBody, reason, retries, wasSuccessful, publishResult, e_2;
            return __generator(this, function (_t) {
                switch (_t.label) {
                        _b = _t.sent(), _c = _b.file_upload_request, url = _c.url, formFields = _c.form_fields, _d = _b.data, id = _d.id, name = _d.name;
                        if (!(PubNubFile.supportsEncryptFile && (cipherKey || cryptoModule))) return [3 /*break*/, 6];
                        if (!(cipherKey == null)) return [3 /*break*/, 3];
                        return [4 /*yield*/, cryptoModule.encryptFile(file, PubNubFile)];
                        _e = _t.sent();
                        return [3 /*break*/, 5];
                    case 3: return [4 /*yield*/, cryptography.encryptFile(cipherKey, file, PubNubFile)];
                    case 4:
                        _e = _t.sent();
                        _t.label = 5;
                    case 5:
                        file = _e;
                        _t.label = 6;
                    case 6:
                        _t.label = 7;
                        _t.trys.push([7, 21, , 22]);
                        if (!(PubNubFile.supportsFileUri && input.uri)) return [3 /*break*/, 10];
                        _g = (_f = networking).POSTFILE;
                        _h = [url, formFieldsWithMimeType];
                        return [4 /*yield*/, file.toFileUri()];
                    case 8: return [4 /*yield*/, _g.apply(_f, _h.concat([_t.sent()]))];
                        result = _t.sent();
                        return [3 /*break*/, 20];
                        if (!PubNubFile.supportsFile) return [3 /*break*/, 13];
                        _k = (_j = networking).POSTFILE;
                        _l = [url, formFieldsWithMimeType];
                        return [4 /*yield*/, file.toFile()];
                    case 11: return [4 /*yield*/, _k.apply(_j, _l.concat([_t.sent()]))];
                        result = _t.sent();
                        return [3 /*break*/, 20];
                        if (!PubNubFile.supportsBuffer) return [3 /*break*/, 16];
                        _o = (_m = networking).POSTFILE;
                        _p = [url, formFieldsWithMimeType];
                        return [4 /*yield*/, file.toBuffer()];
                    case 14: return [4 /*yield*/, _o.apply(_m, _p.concat([_t.sent()]))];
                        result = _t.sent();
                        return [3 /*break*/, 20];
                    case 16:
                        if (!PubNubFile.supportsBlob) return [3 /*break*/, 19];
                        _r = (_q = networking).POSTFILE;
                        _s = [url, formFieldsWithMimeType];
                        return [4 /*yield*/, file.toBlob()];
                    case 17: return [4 /*yield*/, _r.apply(_q, _s.concat([_t.sent()]))];
                        result = _t.sent();
                        return [3 /*break*/, 20];
                    case 19: throw new Error('Unsupported environment');
                    case 20: return [3 /*break*/, 22];
                    case 21:
                        e_1 = _t.sent();
                        return [3 /*break*/, 22];
                    case 22:
                        _t.label = 23;
                    case 23:
                        _t.trys.push([23, 25, , 26]);
                    case 24:
                        publishResult = _t.sent();
                        return [3 /*break*/, 26];
                    case 25:
                        e_2 = _t.sent();
                        return [3 /*break*/, 26];
                    case 26:
                        if (!wasSuccessful && retries > 0) return [3 /*break*/, 23];
                        _t.label = 27;
                    case 27:
    if (!modules.cryptoModule)
        var decryptedData = modules.cryptoModule.decrypt(message);
        var decryptedPayload = decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
        return decryptedPayload;
        if (console && console.log)
            console.log('decryption error', e.message);
var base64_codec_1 = require("../components/base64_codec");
    if (modules.cryptoModule) {
        var encrypted = modules.cryptoModule.encrypt(stringifiedPayload);
        stringifiedPayload = typeof encrypted === 'string' ? encrypted : (0, base64_codec_1.encode)(encrypted);
    return stringifiedPayload || '';
var base64_codec_1 = require("./components/base64_codec");
        var cryptoModule = this._config.cryptoModule;
            cryptoModule: cryptoModule,
        this.encryptFile = function (key, file) {
            if (arguments.length == 1 && typeof key != 'string' && modules.cryptoModule) {
                file = key;
                return modules.cryptoModule.encryptFile(file, this.File);
            }
            return cryptography.encryptFile(key, file, this.File);
        };
        this.decryptFile = function (key, file) {
            if (arguments.length == 1 && typeof key != 'string' && modules.cryptoModule) {
                file = key;
                return modules.cryptoModule.decryptFile(file, this.File);
            }
            return cryptography.decryptFile(key, file, this.File);
        };
                cryptoModule: modules.cryptoModule,
        this.encrypt = function (data, key) {
            if (typeof key === 'undefined' && modules.cryptoModule) {
                var encrypted = modules.cryptoModule.encrypt(data);
                return typeof encrypted === 'string' ? encrypted : (0, base64_codec_1.encode)(encrypted);
            }
            else {
                return crypto.encrypt(data, key);
            }
        };
        this.decrypt = function (data, key) {
            if (typeof key === 'undefined' && cryptoModule) {
                var decrypted = modules.cryptoModule.decrypt(data);
                return decrypted instanceof ArrayBuffer ? (0, base64_codec_1.encode)(decrypted) : decrypted;
            }
            else {
                return crypto.decrypt(data, key);
            }
        };
        // this.setCipherKey = modules.config.setCipherKey.bind(modules.config);
        this.setCipherKey = function (key) { return modules.config.setCipherKey(key, setup, modules); };
function stringToArrayBuffer(str) {
    var buf = new ArrayBuffer(str.length * 2);
    var bufView = new Uint16Array(buf);
    for (var i = 0, strLen = str.length; i < strLen; i++) {
        bufView[i] = str.charCodeAt(i);
    }
    return buf;
}
    stringToArrayBuffer: stringToArrayBuffer,
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var __read = (this && this.__read) || function (o, n) {
    var m = typeof Symbol === "function" && o[Symbol.iterator];
    if (!m) return o;
    var i = m.call(o), r, ar = [], e;
    try {
        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
    }
    catch (error) { e = { error: error }; }
    finally {
        try {
            if (r && !r.done && (m = i["return"])) m.call(i);
        }
        finally { if (e) throw e.error; }
    }
    return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
        if (ar || !(i in from)) {
            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
            ar[i] = from[i];
        }
    }
    return to.concat(ar || Array.prototype.slice.call(from));
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CryptoModule = exports.AesCbcCryptor = exports.LegacyCryptor = void 0;
var stream_1 = require("stream");
var base64_codec_1 = require("../../../core/components/base64_codec");
var legacyCryptor_1 = __importDefault(require("./legacyCryptor"));
exports.LegacyCryptor = legacyCryptor_1.default;
var aesCbcCryptor_1 = __importDefault(require("./aesCbcCryptor"));
exports.AesCbcCryptor = aesCbcCryptor_1.default;
var CryptoModule = /** @class */ (function () {
    function CryptoModule(cryptoModuleConfiguration) {
        var _a;
        this.defaultCryptor = cryptoModuleConfiguration.default;
        this.cryptors = (_a = cryptoModuleConfiguration.cryptors) !== null && _a !== void 0 ? _a : [];
    }
    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
    // @ts-ignore: type detection issue with old Config type assignment
    CryptoModule.legacyCryptoModule = function (config) {
        var _a;
        return new this({
            default: new legacyCryptor_1.default({
                cipherKey: config.cipherKey,
                useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
            }),
            cryptors: [new aesCbcCryptor_1.default({ cipherKey: config.cipherKey })],
        });
    };
    CryptoModule.aesCbcCryptoModule = function (config) {
        var _a;
        return new this({
            default: new aesCbcCryptor_1.default({ cipherKey: config.cipherKey }),
            cryptors: [
                new legacyCryptor_1.default({
                    cipherKey: config.cipherKey,
                    useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
                }),
            ],
        });
    };
    CryptoModule.withDefaultCryptor = function (defaultCryptor) {
        return new this({ default: defaultCryptor });
    };
    CryptoModule.prototype.getAllCryptors = function () {
        return __spreadArray([this.defaultCryptor], __read(this.cryptors), false);
    };
    CryptoModule.prototype.getLegacyCryptor = function () {
        return this.getAllCryptors().find(function (c) { return c.identifier === ''; });
    };
    CryptoModule.prototype.encrypt = function (data) {
        var encrypted = this.defaultCryptor.encrypt(data);
        if (!encrypted.metadata)
            return encrypted.data;
        var header = CryptorHeader.from(this.defaultCryptor.identifier, encrypted.metadata);
        var headerData = new Uint8Array(header.length);
        var pos = 0;
        headerData.set(header.data, pos);
        pos = header.length - encrypted.metadata.length;
        headerData.set(encrypted.metadata, pos);
        return Buffer.concat([headerData, Buffer.from(encrypted.data)]);
    };
    CryptoModule.prototype.decrypt = function (data) {
        var encryptedData = Buffer.from(typeof data === 'string' ? (0, base64_codec_1.decode)(data) : data);
        var header = CryptorHeader.tryParse(encryptedData);
        var cryptor = this.getCryptor(header);
        var metadata = header.length > 0
            ? encryptedData.slice(header.length - header.metadataLength, header.length)
            : null;
        if (encryptedData.slice(header.length).byteLength <= 0)
            throw new Error('decryption error. empty content');
        return cryptor.decrypt({
            data: encryptedData.slice(header.length),
            metadata: metadata,
        });
    };
    CryptoModule.prototype.encryptFile = function (file, File) {
        return __awaiter(this, void 0, void 0, function () {
            var encryptedStream, header, payload, pos, output;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        /**
                         * Files handled differently in case of Legacy cryptor.
                         * (as long as we support legacy need to check on intsance type)
                         */
                        if (this.defaultCryptor.identifier === CryptorHeader.LEGACY_IDENTIFIER)
                            return [2 /*return*/, this.defaultCryptor.encryptFile(file, File)];
                        if (file.data instanceof Buffer) {
                            return [2 /*return*/, File.create({
                                    name: file.name,
                                    mimeType: 'application/octet-stream',
                                    data: Buffer.from(this.encrypt(file.data)),
                                })];
                        }
                        if (!(file.data instanceof stream_1.Readable)) return [3 /*break*/, 2];
                        if (file.contentLength === 0)
                            throw new Error('encryption error. empty content');
                        return [4 /*yield*/, this.defaultCryptor.encryptStream(file.data)];
                    case 1:
                        encryptedStream = _a.sent();
                        header = CryptorHeader.from(this.defaultCryptor.identifier, encryptedStream.metadata);
                        payload = new Uint8Array(header.length);
                        pos = 0;
                        payload.set(header.data, pos);
                        pos += header.length;
                        if (encryptedStream.metadata) {
                            pos -= encryptedStream.metadata.length;
                            payload.set(encryptedStream.metadata, pos);
                        }
                        output = new stream_1.PassThrough();
                        output.write(payload);
                        encryptedStream.stream.pipe(output);
                        return [2 /*return*/, File.create({
                                name: file.name,
                                mimeType: 'application/octet-stream',
                                stream: output,
                            })];
                    case 2: return [2 /*return*/];
                }
            });
        });
    };
    CryptoModule.prototype.decryptFile = function (file, File) {
        return __awaiter(this, void 0, void 0, function () {
            var header, cryptor, stream_2;
            var _this = this;
            return __generator(this, function (_a) {
                if ((file === null || file === void 0 ? void 0 : file.data) instanceof Buffer) {
                    header = CryptorHeader.tryParse(file.data);
                    cryptor = this.getCryptor(header);
                    /**
                     * If It's legacyone then redirect it.
                     * (as long as we support legacy need to check on instance type)
                     */
                    if ((cryptor === null || cryptor === void 0 ? void 0 : cryptor.identifier) === CryptoModule.LEGACY_IDENTIFIER)
                        return [2 /*return*/, cryptor.decryptFile(file, File)];
                    return [2 /*return*/, File.create({
                            name: file.name,
                            data: Buffer.from(this.decrypt(file === null || file === void 0 ? void 0 : file.data)),
                        })];
                }
                if (file.data instanceof stream_1.Readable) {
                    stream_2 = file.data;
                    return [2 /*return*/, new Promise(function (resolve) {
                            stream_2.on('readable', function () { return resolve(_this.onStreamReadable(stream_2, file, File)); });
                        })];
                }
                return [2 /*return*/];
            });
        });
    };
    CryptoModule.prototype.onStreamReadable = function (stream, file, File) {
        return __awaiter(this, void 0, void 0, function () {
            var magicBytes, versionByte, identifier, cryptor, headerSize, _a, _b;
            var _c;
            return __generator(this, function (_d) {
                switch (_d.label) {
                    case 0:
                        stream.removeAllListeners('readable');
                        magicBytes = stream.read(4);
                        if (!CryptorHeader.isSentinel(magicBytes)) {
                            if (magicBytes === null)
                                throw new Error('decryption error. empty content');
                            stream.unshift(magicBytes);
                            return [2 /*return*/, this.decryptLegacyFileStream(stream, file, File)];
                        }
                        versionByte = stream.read(1);
                        CryptorHeader.validateVersion(versionByte[0]);
                        identifier = stream.read(4);
                        cryptor = this.getCryptorFromId(CryptorHeader.tryGetIdentifier(identifier));
                        headerSize = CryptorHeader.tryGetMetadataSizeFromStream(stream);
                        if (file.contentLength <= CryptorHeader.MIN_HEADER_LEGTH + headerSize)
                            throw new Error('decryption error. empty content');
                        _b = (_a = File).create;
                        _c = {
                            name: file.name,
                            mimeType: 'application/octet-stream'
                        };
                        return [4 /*yield*/, cryptor.decryptStream({ stream: stream, metadataLength: headerSize })];
                    case 1: return [2 /*return*/, _b.apply(_a, [(_c.stream = _d.sent(),
                                _c)])];
                }
            });
        });
    };
    CryptoModule.prototype.decryptLegacyFileStream = function (stream, file, File) {
        return __awaiter(this, void 0, void 0, function () {
            var cryptor;
            return __generator(this, function (_a) {
                if (file.contentLength <= 16)
                    throw new Error('decryption error: empty content');
                cryptor = this.getLegacyCryptor();
                if (cryptor) {
                    return [2 /*return*/, cryptor.decryptFile(File.create({
                            name: file.name,
                            stream: stream,
                        }), File)];
                }
                else {
                    throw new Error('unknown cryptor error');
                }
                return [2 /*return*/];
            });
        });
    };
    CryptoModule.prototype.getCryptor = function (header) {
        if (header === '') {
            var cryptor = this.getAllCryptors().find(function (c) { return c.identifier === ''; });
            if (cryptor)
                return cryptor;
            throw new Error('unknown cryptor error');
        }
        else if (header instanceof CryptorHeaderV1) {
            return this.getCryptorFromId(header.identifier);
        }
    };
    CryptoModule.prototype.getCryptorFromId = function (id) {
        var cryptor = this.getAllCryptors().find(function (c) { return id === c.identifier; });
        if (cryptor) {
            return cryptor;
        }
        throw new Error('unknown cryptor error');
    };
    CryptoModule.LEGACY_IDENTIFIER = '';
    return CryptoModule;
}());
exports.CryptoModule = CryptoModule;
// CryptorHeader Utility
var CryptorHeader = /** @class */ (function () {
    function CryptorHeader() {
    }
    CryptorHeader.from = function (id, metadata) {
        if (id === CryptorHeader.LEGACY_IDENTIFIER)
            return;
        return new CryptorHeaderV1(id, metadata.length);
    };
    CryptorHeader.isSentinel = function (bytes) {
        if (bytes && bytes.byteLength >= 4) {
            if (bytes.toString('utf8') == CryptorHeader.SENTINEL)
                return true;
        }
    };
    CryptorHeader.validateVersion = function (data) {
        if (data && data > CryptorHeader.MAX_VERSION)
            throw new Error('decryption error. invalid header version');
        return data;
    };
    CryptorHeader.tryGetIdentifier = function (data) {
        if (data.byteLength < 4) {
            throw new Error('unknown cryptor error. decryption failed');
        }
        else {
            return data.toString('utf8');
        }
    };
    CryptorHeader.tryGetMetadataSizeFromStream = function (stream) {
        var sizeBuf = stream.read(1);
        if (sizeBuf && sizeBuf[0] < 255) {
            return sizeBuf[0];
        }
        if (sizeBuf[0] === 255) {
            var nextBuf = stream.read(2);
            if (nextBuf.length >= 2) {
                return new Uint16Array([nextBuf[0], nextBuf[1]]).reduce(function (acc, val) { return (acc << 8) + val; }, 0);
            }
        }
        throw new Error('decryption error. Invalid metadata size');
    };
    CryptorHeader.tryParse = function (encryptedData) {
        var sentinel = '';
        var version = null;
        if (encryptedData.length >= 4) {
            sentinel = encryptedData.slice(0, 4);
            if (sentinel.toString('utf8') !== CryptorHeader.SENTINEL)
                return '';
        }
        if (encryptedData.length >= 5) {
            version = encryptedData[4];
        }
        else {
            throw new Error('decryption error. invalid header version');
        }
        if (version > CryptorHeader.MAX_VERSION)
            throw new Error('unknown cryptor error');
        var identifier;
        var pos = 5 + CryptorHeader.IDENTIFIER_LENGTH;
        if (encryptedData.length >= pos) {
            identifier = encryptedData.slice(5, pos);
        }
        else {
            throw new Error('decryption error. invalid crypto identifier');
        }
        var metadataLength = null;
        if (encryptedData.length >= pos + 1) {
            metadataLength = encryptedData[pos];
        }
        else {
            throw new Error('decryption error. invalid metadata length');
        }
        pos += 1;
        if (metadataLength === 255 && encryptedData.length >= pos + 2) {
            metadataLength = new Uint16Array(encryptedData.slice(pos, pos + 2)).reduce(function (acc, val) { return (acc << 8) + val; }, 0);
            pos += 2;
        }
        return new CryptorHeaderV1(identifier.toString('utf8'), metadataLength);
    };
    CryptorHeader.SENTINEL = 'PNED';
    CryptorHeader.LEGACY_IDENTIFIER = '';
    CryptorHeader.IDENTIFIER_LENGTH = 4;
    CryptorHeader.VERSION = 1;
    CryptorHeader.MAX_VERSION = 1;
    CryptorHeader.MIN_HEADER_LEGTH = 10;
    return CryptorHeader;
}());
// v1 CryptorHeader
var CryptorHeaderV1 = /** @class */ (function () {
    function CryptorHeaderV1(id, metadataLength) {
        this._identifier = id;
        this._metadataLength = metadataLength;
    }
    Object.defineProperty(CryptorHeaderV1.prototype, "identifier", {
        get: function () {
            return this._identifier;
        },
        set: function (value) {
            this._identifier = value;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(CryptorHeaderV1.prototype, "metadataLength", {
        get: function () {
            return this._metadataLength;
        },
        set: function (value) {
            this._metadataLength = value;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(CryptorHeaderV1.prototype, "version", {
        get: function () {
            return CryptorHeader.VERSION;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(CryptorHeaderV1.prototype, "length", {
        get: function () {
            return (CryptorHeader.SENTINEL.length +
                1 +
                CryptorHeader.IDENTIFIER_LENGTH +
                (this.metadataLength < 255 ? 1 : 3) +
                this.metadataLength);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(CryptorHeaderV1.prototype, "data", {
        get: function () {
            var pos = 0;
            var header = new Uint8Array(this.length);
            header.set(Buffer.from(CryptorHeader.SENTINEL));
            pos += CryptorHeader.SENTINEL.length;
            header[pos] = this.version;
            pos++;
            if (this.identifier)
                header.set(Buffer.from(this.identifier), pos);
            pos += CryptorHeader.IDENTIFIER_LENGTH;
            var metadataLength = this.metadataLength;
            if (metadataLength < 255) {
                header[pos] = metadataLength;
            }
            else {
                header.set([255, metadataLength >> 8, metadataLength & 0xff], pos);
            }
            return header;
        },
        enumerable: false,
        configurable: true
    });
    return CryptorHeaderV1;
}());
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
Object.defineProperty(exports, "__esModule", { value: true });
var stream_1 = require("stream");
var crypto_1 = require("crypto");
var AesCbcCryptor = /** @class */ (function () {
    function AesCbcCryptor(configuration) {
        this.cipherKey = configuration.cipherKey;
    }
    Object.defineProperty(AesCbcCryptor.prototype, "algo", {
        get: function () {
            return 'aes-256-cbc';
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(AesCbcCryptor.prototype, "identifier", {
        get: function () {
            return 'ACRH';
        },
        enumerable: false,
        configurable: true
    });
    AesCbcCryptor.prototype.getIv = function () {
        return (0, crypto_1.randomBytes)(AesCbcCryptor.BLOCK_SIZE);
    };
    AesCbcCryptor.prototype.getKey = function () {
        var sha = (0, crypto_1.createHash)('sha256');
        sha.update(Buffer.from(this.cipherKey, 'utf8'));
        return Buffer.from(sha.digest());
    };
    AesCbcCryptor.prototype.encrypt = function (data) {
        var iv = this.getIv();
        var key = this.getKey();
        var plainData = typeof data === 'string' ? new TextEncoder().encode(data) : data;
        var bPlain = Buffer.from(plainData);
        if (bPlain.byteLength === 0)
            throw new Error('encryption error. empty content');
        var aes = (0, crypto_1.createCipheriv)(this.algo, key, iv);
        return {
            metadata: iv,
            data: Buffer.concat([aes.update(bPlain), aes.final()]),
        };
    };
    AesCbcCryptor.prototype.decrypt = function (encryptedData) {
        var data = typeof encryptedData.data === 'string' ? new TextEncoder().encode(encryptedData.data) : encryptedData.data;
        if (data.byteLength <= 0)
            throw new Error('decryption error: empty content');
        var aes = (0, crypto_1.createDecipheriv)(this.algo, this.getKey(), encryptedData.metadata);
        return Uint8Array.from(Buffer.concat([aes.update(data), aes.final()])).buffer;
    };
    AesCbcCryptor.prototype.encryptStream = function (stream) {
        return __awaiter(this, void 0, void 0, function () {
            var output, bIv, aes;
            return __generator(this, function (_a) {
                output = new stream_1.PassThrough();
                bIv = this.getIv();
                if (stream.readable === false)
                    throw new Error('encryption error. empty stream');
                aes = (0, crypto_1.createCipheriv)(this.algo, this.getKey(), bIv);
                stream.pipe(aes).pipe(output);
                return [2 /*return*/, {
                        stream: output,
                        metadata: bIv,
                        metadataLength: AesCbcCryptor.BLOCK_SIZE,
                    }];
            });
        });
    };
    AesCbcCryptor.prototype.decryptStream = function (encryptedStream) {
        return __awaiter(this, void 0, void 0, function () {
            var decryptedStream, bIv, aes, onReadable;
            var _this = this;
            return __generator(this, function (_a) {
                decryptedStream = new stream_1.PassThrough();
                bIv = Buffer.alloc(0);
                aes = null;
                onReadable = function () {
                    var data = encryptedStream.stream.read();
                    while (data !== null) {
                        if (data) {
                            var bChunk = Buffer.from(data);
                            var sliceLen = encryptedStream.metadataLength - bIv.byteLength;
                            if (bChunk.byteLength < sliceLen) {
                                bIv = Buffer.concat([bIv, bChunk]);
                            }
                            else {
                                bIv = Buffer.concat([bIv, bChunk.slice(0, sliceLen)]);
                                aes = (0, crypto_1.createDecipheriv)(_this.algo, _this.getKey(), bIv);
                                aes.pipe(decryptedStream);
                                aes.write(bChunk.slice(sliceLen));
                            }
                        }
                        data = encryptedStream.stream.read();
                    }
                };
                encryptedStream.stream.on('readable', onReadable);
                encryptedStream.stream.on('end', function () {
                    if (aes) {
                        aes.end();
                    }
                    decryptedStream.end();
                });
                return [2 /*return*/, decryptedStream];
            });
        });
    };
    AesCbcCryptor.BLOCK_SIZE = 16;
    return AesCbcCryptor;
}());
exports.default = AesCbcCryptor;
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var index_1 = __importDefault(require("../../../core/components/cryptography/index"));
var base64_codec_1 = require("../../../core/components/base64_codec");
var node_1 = __importDefault(require("../node"));
var LegacyCryptor = /** @class */ (function () {
    function LegacyCryptor(config) {
        this.config = config;
        this.cryptor = new index_1.default({ config: config });
        this.fileCryptor = new node_1.default();
    }
    Object.defineProperty(LegacyCryptor.prototype, "identifier", {
        get: function () {
            return '';
        },
        enumerable: false,
        configurable: true
    });
    LegacyCryptor.prototype.encrypt = function (data) {
        if (data.length === 0)
            throw new Error('encryption error. empty content');
        return {
            data: this.cryptor.encrypt(data),
            metadata: null,
        };
    };
    LegacyCryptor.prototype.decrypt = function (encryptedData) {
        var data = typeof encryptedData.data === 'string' ? encryptedData.data : (0, base64_codec_1.encode)(encryptedData.data);
        return this.cryptor.decrypt(data);
    };
    LegacyCryptor.prototype.encryptFile = function (file, File) {
        return __awaiter(this, void 0, void 0, function () {
            return __generator(this, function (_a) {
                return [2 /*return*/, this.fileCryptor.encryptFile(this.config.cipherKey, file, File)];
            });
        });
    };
    LegacyCryptor.prototype.decryptFile = function (file, File) {
        return __awaiter(this, void 0, void 0, function () {
            return __generator(this, function (_a) {
                return [2 /*return*/, this.fileCryptor.decryptFile(this.config.cipherKey, file, File)];
            });
        });
    };
    return LegacyCryptor;
}());
exports.default = LegacyCryptor;
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var __read = (this && this.__read) || function (o, n) {
    var m = typeof Symbol === "function" && o[Symbol.iterator];
    if (!m) return o;
    var i = m.call(o), r, ar = [], e;
    try {
        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
    }
    catch (error) { e = { error: error }; }
    finally {
        try {
            if (r && !r.done && (m = i["return"])) m.call(i);
        }
        finally { if (e) throw e.error; }
    }
    return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
        if (ar || !(i in from)) {
            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
            ar[i] = from[i];
        }
    }
    return to.concat(ar || Array.prototype.slice.call(from));
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CryptoModule = exports.AesCbcCryptor = exports.LegacyCryptor = void 0;
var stream_1 = require("stream");
var base64_codec_1 = require("../../../core/components/base64_codec");
var legacyCryptor_1 = __importDefault(require("./legacyCryptor"));
exports.LegacyCryptor = legacyCryptor_1.default;
var aesCbcCryptor_1 = __importDefault(require("./aesCbcCryptor"));
exports.AesCbcCryptor = aesCbcCryptor_1.default;
var CryptoModule = /** @class */ (function () {
    function CryptoModule(cryptoModuleConfiguration) {
        var _a;
        this.defaultCryptor = cryptoModuleConfiguration.default;
        this.cryptors = (_a = cryptoModuleConfiguration.cryptors) !== null && _a !== void 0 ? _a : [];
    }
    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
    // @ts-ignore: type detection issue with old Config type assignment
    CryptoModule.legacyCryptoModule = function (config) {
        var _a;
        return new this({
            default: new legacyCryptor_1.default({
                cipherKey: config.cipherKey,
                useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
            }),
            cryptors: [new aesCbcCryptor_1.default({ cipherKey: config.cipherKey })],
        });
    };
    CryptoModule.aesCbcCryptoModule = function (config) {
        var _a;
        return new this({
            default: new aesCbcCryptor_1.default({ cipherKey: config.cipherKey }),
            cryptors: [
                new legacyCryptor_1.default({
                    cipherKey: config.cipherKey,
                    useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
                }),
            ],
        });
    };
    CryptoModule.withDefaultCryptor = function (defaultCryptor) {
        return new this({ default: defaultCryptor });
    };
    CryptoModule.prototype.getAllCryptors = function () {
        return __spreadArray([this.defaultCryptor], __read(this.cryptors), false);
    };
    CryptoModule.prototype.getLegacyCryptor = function () {
        return this.getAllCryptors().find(function (c) { return c.identifier === ''; });
    };
    CryptoModule.prototype.encrypt = function (data) {
        var encrypted = this.defaultCryptor.encrypt(data);
        if (!encrypted.metadata)
            return encrypted.data;
        var header = CryptorHeader.from(this.defaultCryptor.identifier, encrypted.metadata);
        var headerData = new Uint8Array(header.length);
        var pos = 0;
        headerData.set(header.data, pos);
        pos = header.length - encrypted.metadata.length;
        headerData.set(encrypted.metadata, pos);
        return Buffer.concat([headerData, Buffer.from(encrypted.data)]);
    };
    CryptoModule.prototype.decrypt = function (data) {
        var encryptedData = Buffer.from(typeof data === 'string' ? (0, base64_codec_1.decode)(data) : data);
        var header = CryptorHeader.tryParse(encryptedData);
        var cryptor = this.getCryptor(header);
        var metadata = header.length > 0
            ? encryptedData.slice(header.length - header.metadataLength, header.length)
            : null;
        if (encryptedData.slice(header.length).byteLength <= 0)
            throw new Error('decryption error. empty content');
        return cryptor.decrypt({
            data: encryptedData.slice(header.length),
            metadata: metadata,
        });
    };
    CryptoModule.prototype.encryptFile = function (file, File) {
        return __awaiter(this, void 0, void 0, function () {
            var encryptedStream, header, payload, pos, output;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        /**
                         * Files handled differently in case of Legacy cryptor.
                         * (as long as we support legacy need to check on intsance type)
                         */
                        if (this.defaultCryptor.identifier === CryptorHeader.LEGACY_IDENTIFIER)
                            return [2 /*return*/, this.defaultCryptor.encryptFile(file, File)];
                        if (file.data instanceof Buffer) {
                            return [2 /*return*/, File.create({
                                    name: file.name,
                                    mimeType: 'application/octet-stream',
                                    data: Buffer.from(this.encrypt(file.data)),
                                })];
                        }
                        if (!(file.data instanceof stream_1.Readable)) return [3 /*break*/, 2];
                        if (file.contentLength === 0)
                            throw new Error('encryption error. empty content');
                        return [4 /*yield*/, this.defaultCryptor.encryptStream(file.data)];
                    case 1:
                        encryptedStream = _a.sent();
                        header = CryptorHeader.from(this.defaultCryptor.identifier, encryptedStream.metadata);
                        payload = new Uint8Array(header.length);
                        pos = 0;
                        payload.set(header.data, pos);
                        pos += header.length;
                        if (encryptedStream.metadata) {
                            pos -= encryptedStream.metadata.length;
                            payload.set(encryptedStream.metadata, pos);
                        }
                        output = new stream_1.PassThrough();
                        output.write(payload);
                        encryptedStream.stream.pipe(output);
                        return [2 /*return*/, File.create({
                                name: file.name,
                                mimeType: 'application/octet-stream',
                                stream: output,
                            })];
                    case 2: return [2 /*return*/];
                }
            });
        });
    };
    CryptoModule.prototype.decryptFile = function (file, File) {
        return __awaiter(this, void 0, void 0, function () {
            var header, cryptor, stream_2;
            var _this = this;
            return __generator(this, function (_a) {
                if ((file === null || file === void 0 ? void 0 : file.data) instanceof Buffer) {
                    header = CryptorHeader.tryParse(file.data);
                    cryptor = this.getCryptor(header);
                    /**
                     * If It's legacyone then redirect it.
                     * (as long as we support legacy need to check on instance type)
                     */
                    if ((cryptor === null || cryptor === void 0 ? void 0 : cryptor.identifier) === CryptoModule.LEGACY_IDENTIFIER)
                        return [2 /*return*/, cryptor.decryptFile(file, File)];
                    return [2 /*return*/, File.create({
                            name: file.name,
                            data: Buffer.from(this.decrypt(file === null || file === void 0 ? void 0 : file.data)),
                        })];
                }
                if (file.data instanceof stream_1.Readable) {
                    stream_2 = file.data;
                    return [2 /*return*/, new Promise(function (resolve) {
                            stream_2.on('readable', function () { return resolve(_this.onStreamReadable(stream_2, file, File)); });
                        })];
                }
                return [2 /*return*/];
            });
        });
    };
    CryptoModule.prototype.onStreamReadable = function (stream, file, File) {
        return __awaiter(this, void 0, void 0, function () {
            var magicBytes, versionByte, identifier, cryptor, headerSize, _a, _b;
            var _c;
            return __generator(this, function (_d) {
                switch (_d.label) {
                    case 0:
                        stream.removeAllListeners('readable');
                        magicBytes = stream.read(4);
                        if (!CryptorHeader.isSentinel(magicBytes)) {
                            if (magicBytes === null)
                                throw new Error('decryption error. empty content');
                            stream.unshift(magicBytes);
                            return [2 /*return*/, this.decryptLegacyFileStream(stream, file, File)];
                        }
                        versionByte = stream.read(1);
                        CryptorHeader.validateVersion(versionByte[0]);
                        identifier = stream.read(4);
                        cryptor = this.getCryptorFromId(CryptorHeader.tryGetIdentifier(identifier));
                        headerSize = CryptorHeader.tryGetMetadataSizeFromStream(stream);
                        if (file.contentLength <= CryptorHeader.MIN_HEADER_LEGTH + headerSize)
                            throw new Error('decryption error. empty content');
                        _b = (_a = File).create;
                        _c = {
                            name: file.name,
                            mimeType: 'application/octet-stream'
                        };
                        return [4 /*yield*/, cryptor.decryptStream({ stream: stream, metadataLength: headerSize })];
                    case 1: return [2 /*return*/, _b.apply(_a, [(_c.stream = _d.sent(),
                                _c)])];
                }
            });
        });
    };
    CryptoModule.prototype.decryptLegacyFileStream = function (stream, file, File) {
        return __awaiter(this, void 0, void 0, function () {
            var cryptor;
            return __generator(this, function (_a) {
                if (file.contentLength <= 16)
                    throw new Error('decryption error: empty content');
                cryptor = this.getLegacyCryptor();
                if (cryptor) {
                    return [2 /*return*/, cryptor.decryptFile(File.create({
                            name: file.name,
                            stream: stream,
                        }), File)];
                }
                else {
                    throw new Error('unknown cryptor error');
                }
                return [2 /*return*/];
            });
        });
    };
    CryptoModule.prototype.getCryptor = function (header) {
        if (header === '') {
            var cryptor = this.getAllCryptors().find(function (c) { return c.identifier === ''; });
            if (cryptor)
                return cryptor;
            throw new Error('unknown cryptor error');
        }
        else if (header instanceof CryptorHeaderV1) {
            return this.getCryptorFromId(header.identifier);
        }
    };
    CryptoModule.prototype.getCryptorFromId = function (id) {
        var cryptor = this.getAllCryptors().find(function (c) { return id === c.identifier; });
        if (cryptor) {
            return cryptor;
        }
        throw new Error('unknown cryptor error');
    };
    CryptoModule.LEGACY_IDENTIFIER = '';
    return CryptoModule;
}());
exports.CryptoModule = CryptoModule;
// CryptorHeader Utility
var CryptorHeader = /** @class */ (function () {
    function CryptorHeader() {
    }
    CryptorHeader.from = function (id, metadata) {
        if (id === CryptorHeader.LEGACY_IDENTIFIER)
            return;
        return new CryptorHeaderV1(id, metadata.length);
    };
    CryptorHeader.isSentinel = function (bytes) {
        if (bytes && bytes.byteLength >= 4) {
            if (bytes.toString('utf8') == CryptorHeader.SENTINEL)
                return true;
        }
    };
    CryptorHeader.validateVersion = function (data) {
        if (data && data > CryptorHeader.MAX_VERSION)
            throw new Error('decryption error. invalid header version');
        return data;
    };
    CryptorHeader.tryGetIdentifier = function (data) {
        if (data.byteLength < 4) {
            throw new Error('unknown cryptor error. decryption failed');
        }
        else {
            return data.toString('utf8');
        }
    };
    CryptorHeader.tryGetMetadataSizeFromStream = function (stream) {
        var sizeBuf = stream.read(1);
        if (sizeBuf && sizeBuf[0] < 255) {
            return sizeBuf[0];
        }
        if (sizeBuf[0] === 255) {
            var nextBuf = stream.read(2);
            if (nextBuf.length >= 2) {
                return new Uint16Array([nextBuf[0], nextBuf[1]]).reduce(function (acc, val) { return (acc << 8) + val; }, 0);
            }
        }
        throw new Error('decryption error. Invalid metadata size');
    };
    CryptorHeader.tryParse = function (encryptedData) {
        var sentinel = '';
        var version = null;
        if (encryptedData.length >= 4) {
            sentinel = encryptedData.slice(0, 4);
            if (sentinel.toString('utf8') !== CryptorHeader.SENTINEL)
                return '';
        }
        if (encryptedData.length >= 5) {
            version = encryptedData[4];
        }
        else {
            throw new Error('decryption error. invalid header version');
        }
        if (version > CryptorHeader.MAX_VERSION)
            throw new Error('unknown cryptor error');
        var identifier;
        var pos = 5 + CryptorHeader.IDENTIFIER_LENGTH;
        if (encryptedData.length >= pos) {
            identifier = encryptedData.slice(5, pos);
        }
        else {
            throw new Error('decryption error. invalid crypto identifier');
        }
        var metadataLength = null;
        if (encryptedData.length >= pos + 1) {
            metadataLength = encryptedData[pos];
        }
        else {
            throw new Error('decryption error. invalid metadata length');
        }
        pos += 1;
        if (metadataLength === 255 && encryptedData.length >= pos + 2) {
            metadataLength = new Uint16Array(encryptedData.slice(pos, pos + 2)).reduce(function (acc, val) { return (acc << 8) + val; }, 0);
            pos += 2;
        }
        return new CryptorHeaderV1(identifier.toString('utf8'), metadataLength);
    };
    CryptorHeader.SENTINEL = 'PNED';
    CryptorHeader.LEGACY_IDENTIFIER = '';
    CryptorHeader.IDENTIFIER_LENGTH = 4;
    CryptorHeader.VERSION = 1;
    CryptorHeader.MAX_VERSION = 1;
    CryptorHeader.MIN_HEADER_LEGTH = 10;
    return CryptorHeader;
}());
// v1 CryptorHeader
var CryptorHeaderV1 = /** @class */ (function () {
    function CryptorHeaderV1(id, metadataLength) {
        this._identifier = id;
        this._metadataLength = metadataLength;
    }
    Object.defineProperty(CryptorHeaderV1.prototype, "identifier", {
        get: function () {
            return this._identifier;
        },
        set: function (value) {
            this._identifier = value;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(CryptorHeaderV1.prototype, "metadataLength", {
        get: function () {
            return this._metadataLength;
        },
        set: function (value) {
            this._metadataLength = value;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(CryptorHeaderV1.prototype, "version", {
        get: function () {
            return CryptorHeader.VERSION;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(CryptorHeaderV1.prototype, "length", {
        get: function () {
            return (CryptorHeader.SENTINEL.length +
                1 +
                CryptorHeader.IDENTIFIER_LENGTH +
                (this.metadataLength < 255 ? 1 : 3) +
                this.metadataLength);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(CryptorHeaderV1.prototype, "data", {
        get: function () {
            var pos = 0;
            var header = new Uint8Array(this.length);
            header.set(Buffer.from(CryptorHeader.SENTINEL));
            pos += CryptorHeader.SENTINEL.length;
            header[pos] = this.version;
            pos++;
            if (this.identifier)
                header.set(Buffer.from(this.identifier), pos);
            pos += CryptorHeader.IDENTIFIER_LENGTH;
            var metadataLength = this.metadataLength;
            if (metadataLength < 255) {
                header[pos] = metadataLength;
            }
            else {
                header.set([255, metadataLength >> 8, metadataLength & 0xff], pos);
            }
            return header;
        },
        enumerable: false,
        configurable: true
    });
    return CryptorHeaderV1;
}());
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var hmac_sha256_1 = __importDefault(require("../../../core/components/cryptography/hmac-sha256"));
var base64_codec_1 = require("../../../core/components/base64_codec");
var AesCbcCryptor = /** @class */ (function () {
    function AesCbcCryptor(configuration) {
        this.cipherKey = configuration.cipherKey;
        this.CryptoJS = hmac_sha256_1.default;
        this.encryptedKey = this.CryptoJS.SHA256(this.cipherKey);
    }
    Object.defineProperty(AesCbcCryptor.prototype, "algo", {
        get: function () {
            return 'AES-CBC';
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(AesCbcCryptor.prototype, "identifier", {
        get: function () {
            return 'ACRH';
        },
        enumerable: false,
        configurable: true
    });
    AesCbcCryptor.prototype.getIv = function () {
        return crypto.getRandomValues(new Uint8Array(AesCbcCryptor.BLOCK_SIZE));
    };
    AesCbcCryptor.prototype.getKey = function () {
        return __awaiter(this, void 0, void 0, function () {
            var bKey, abHash;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        bKey = AesCbcCryptor.encoder.encode(this.cipherKey);
                        return [4 /*yield*/, crypto.subtle.digest('SHA-256', bKey.buffer)];
                    case 1:
                        abHash = _a.sent();
                        return [2 /*return*/, crypto.subtle.importKey('raw', abHash, this.algo, true, ['encrypt', 'decrypt'])];
                }
            });
        });
    };
    AesCbcCryptor.prototype.encrypt = function (data) {
        var stringData = typeof data === 'string' ? data : AesCbcCryptor.decoder.decode(data);
        if (stringData.length === 0)
            throw new Error('encryption error. empty content');
        var abIv = this.getIv();
        return {
            metadata: abIv,
            data: (0, base64_codec_1.decode)(this.CryptoJS.AES.encrypt(data, this.encryptedKey, {
                iv: this.bufferToWordArray(abIv),
                mode: this.CryptoJS.mode.CBC,
            }).ciphertext.toString(this.CryptoJS.enc.Base64)),
        };
    };
    AesCbcCryptor.prototype.decrypt = function (encryptedData) {
        var iv = this.bufferToWordArray(new Uint8ClampedArray(encryptedData.metadata));
        var data = this.bufferToWordArray(new Uint8ClampedArray(encryptedData.data));
        return AesCbcCryptor.encoder.encode(this.CryptoJS.AES.decrypt({ ciphertext: data }, this.encryptedKey, {
            iv: iv,
            mode: this.CryptoJS.mode.CBC,
        }).toString(this.CryptoJS.enc.Utf8)).buffer;
    };
    AesCbcCryptor.prototype.encryptFileData = function (data) {
        return __awaiter(this, void 0, void 0, function () {
            var key, iv;
            var _a;
            return __generator(this, function (_b) {
                switch (_b.label) {
                    case 0: return [4 /*yield*/, this.getKey()];
                    case 1:
                        key = _b.sent();
                        iv = this.getIv();
                        _a = {};
                        return [4 /*yield*/, crypto.subtle.encrypt({ name: this.algo, iv: iv }, key, data)];
                    case 2: return [2 /*return*/, (_a.data = _b.sent(),
                            _a.metadata = iv,
                            _a)];
                }
            });
        });
    };
    AesCbcCryptor.prototype.decryptFileData = function (encryptedData) {
        return __awaiter(this, void 0, void 0, function () {
            var key;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0: return [4 /*yield*/, this.getKey()];
                    case 1:
                        key = _a.sent();
                        return [2 /*return*/, crypto.subtle.decrypt({ name: this.algo, iv: encryptedData.metadata }, key, encryptedData.data)];
                }
            });
        });
    };
    AesCbcCryptor.prototype.bufferToWordArray = function (b) {
        var wa = [];
        var i;
        for (i = 0; i < b.length; i += 1) {
            wa[(i / 4) | 0] |= b[i] << (24 - 8 * i);
        }
        return this.CryptoJS.lib.WordArray.create(wa, b.length);
    };
    AesCbcCryptor.BLOCK_SIZE = 16;
    AesCbcCryptor.encoder = new TextEncoder();
    AesCbcCryptor.decoder = new TextDecoder();
    return AesCbcCryptor;
}());
exports.default = AesCbcCryptor;
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var index_1 = __importDefault(require("../../../core/components/cryptography/index"));
var web_1 = __importDefault(require("../web"));
var base64_codec_1 = require("../../../core/components/base64_codec");
var LegacyCryptor = /** @class */ (function () {
    function LegacyCryptor(config) {
        this.config = config;
        this.cryptor = new index_1.default({ config: config });
        this.fileCryptor = new web_1.default();
    }
    Object.defineProperty(LegacyCryptor.prototype, "identifier", {
        get: function () {
            return '';
        },
        enumerable: false,
        configurable: true
    });
    LegacyCryptor.prototype.encrypt = function (data) {
        var stringData = typeof data === 'string' ? data : new TextDecoder().decode(data);
        return {
            data: this.cryptor.encrypt(stringData),
            metadata: null,
        };
    };
    LegacyCryptor.prototype.decrypt = function (encryptedData) {
        var data = typeof encryptedData.data === 'string' ? encryptedData.data : (0, base64_codec_1.encode)(encryptedData.data);
        return this.cryptor.decrypt(data);
    };
    LegacyCryptor.prototype.encryptFile = function (file, File) {
        var _a;
        return __awaiter(this, void 0, void 0, function () {
            return __generator(this, function (_b) {
                // eslint-disable-next-line @typescript-eslint/ban-ts-comment
                //@ts-ignore: can not detect cipherKey from old Config
                return [2 /*return*/, this.fileCryptor.encryptFile((_a = this.config) === null || _a === void 0 ? void 0 : _a.cipherKey, file, File)];
            });
        });
    };
    LegacyCryptor.prototype.decryptFile = function (file, File) {
        return __awaiter(this, void 0, void 0, function () {
            return __generator(this, function (_a) {
                // eslint-disable-next-line @typescript-eslint/ban-ts-comment
                //@ts-ignore: can not detect cipherKey from old Config
                return [2 /*return*/, this.fileCryptor.decryptFile(this.config.cipherKey, file, File)];
            });
        });
    };
    return LegacyCryptor;
}());
exports.default = LegacyCryptor;
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
var __read = (this && this.__read) || function (o, n) {
    var m = typeof Symbol === "function" && o[Symbol.iterator];
    if (!m) return o;
    var i = m.call(o), r, ar = [], e;
    try {
        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
    }
    catch (error) { e = { error: error }; }
    finally {
        try {
            if (r && !r.done && (m = i["return"])) m.call(i);
        }
        finally { if (e) throw e.error; }
    }
    return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
        if (ar || !(i in from)) {
            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
            ar[i] = from[i];
        }
    }
    return to.concat(ar || Array.prototype.slice.call(from));
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CryptoModule = exports.AesCbcCryptor = exports.LegacyCryptor = void 0;
var legacyCryptor_1 = __importDefault(require("./legacyCryptor"));
exports.LegacyCryptor = legacyCryptor_1.default;
var aesCbcCryptor_1 = __importDefault(require("./aesCbcCryptor"));
exports.AesCbcCryptor = aesCbcCryptor_1.default;
var base64_codec_1 = require("../../../core/components/base64_codec");
var CryptoModule = /** @class */ (function () {
    function CryptoModule(cryptoModuleConfiguration) {
        var _a;
        this.defaultCryptor = cryptoModuleConfiguration.default;
        this.cryptors = (_a = cryptoModuleConfiguration.cryptors) !== null && _a !== void 0 ? _a : [];
    }
    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
    //@ts-ignore: type detection issue with old Config type assignment
    CryptoModule.legacyCryptoModule = function (config) {
        var _a;
        return new this({
            default: new legacyCryptor_1.default({
                cipherKey: config.cipherKey,
                useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
            }),
            cryptors: [new aesCbcCryptor_1.default({ cipherKey: config.cipherKey })],
        });
    };
    CryptoModule.aesCbcCryptoModule = function (config) {
        var _a;
        return new this({
            default: new aesCbcCryptor_1.default({ cipherKey: config.cipherKey }),
            cryptors: [
                new legacyCryptor_1.default({
                    cipherKey: config.cipherKey,
                    useRandomIVs: (_a = config.useRandomIVs) !== null && _a !== void 0 ? _a : true,
                }),
            ],
        });
    };
    CryptoModule.withDefaultCryptor = function (defaultCryptor) {
        return new this({ default: defaultCryptor });
    };
    CryptoModule.prototype.getAllCryptors = function () {
        return __spreadArray([this.defaultCryptor], __read(this.cryptors), false);
    };
    CryptoModule.prototype.encrypt = function (data) {
        var encrypted = this.defaultCryptor.encrypt(data);
        if (!encrypted.metadata)
            return encrypted.data;
        var headerData = this.getHeaderData(encrypted);
        return this.concatArrayBuffer(headerData, encrypted.data);
    };
    CryptoModule.prototype.decrypt = function (data) {
        var encryptedData = typeof data === 'string' ? (0, base64_codec_1.decode)(data) : data;
        var header = CryptorHeader.tryParse(encryptedData);
        var cryptor = this.getCryptor(header);
        var metadata = header.length > 0
            ? encryptedData.slice(header.length - header.metadataLength, header.length)
            : null;
        if (encryptedData.slice(header.length).byteLength <= 0)
            throw new Error('decryption error. empty content');
        return cryptor.decrypt({
            data: encryptedData.slice(header.length),
            metadata: metadata,
        });
    };
    CryptoModule.prototype.encryptFile = function (file, File) {
        return __awaiter(this, void 0, void 0, function () {
            var fileData, encrypted;
            return __generator(this, function (_a) {
                switch (_a.label) {
                    case 0:
                        if (this.defaultCryptor.identifier === CryptorHeader.LEGACY_IDENTIFIER)
                            return [2 /*return*/, this.defaultCryptor.encryptFile(file, File)];
                        fileData = this.getFileData(file.data);
                        return [4 /*yield*/, this.defaultCryptor.encryptFileData(fileData)];
                    case 1:
                        encrypted = _a.sent();
                        return [2 /*return*/, File.create({
                                name: file.name,
                                mimeType: 'application/octet-stream',
                                data: this.concatArrayBuffer(this.getHeaderData(encrypted), encrypted.data),
                            })];
                }
            });
        });
    };
    CryptoModule.prototype.decryptFile = function (file, File) {
        return __awaiter(this, void 0, void 0, function () {
            var data, header, cryptor, fileData, metadata, _a, _b;
            var _c;
            return __generator(this, function (_d) {
                switch (_d.label) {
                    case 0: return [4 /*yield*/, file.data.arrayBuffer()];
                    case 1:
                        data = _d.sent();
                        header = CryptorHeader.tryParse(data);
                        cryptor = this.getCryptor(header);
                        if ((cryptor === null || cryptor === void 0 ? void 0 : cryptor.identifier) === CryptoModule.LEGACY_IDENTIFIER) {
                            return [2 /*return*/, cryptor.decryptFile(file, File)];
                        }
                        fileData = this.getFileData(data);
                        metadata = fileData.slice(header.length - header.metadataLength, header.length);
                        _b = (_a = File).create;
                        _c = {
                            name: file.name
                        };
                        return [4 /*yield*/, this.defaultCryptor.decryptFileData({
                                data: data.slice(header.length),
                                metadata: metadata,
                            })];
                    case 2: return [2 /*return*/, _b.apply(_a, [(_c.data = _d.sent(),
                                _c)])];
                }
            });
        });
    };
    CryptoModule.prototype.getCryptor = function (header) {
        if (header === '') {
            var cryptor = this.getAllCryptors().find(function (c) { return c.identifier === ''; });
            if (cryptor)
                return cryptor;
            throw new Error('unknown cryptor error');
        }
        else if (header instanceof CryptorHeaderV1) {
            return this.getCryptorFromId(header.identifier);
        }
    };
    CryptoModule.prototype.getCryptorFromId = function (id) {
        var cryptor = this.getAllCryptors().find(function (c) { return id === c.identifier; });
        if (cryptor) {
            return cryptor;
        }
        throw Error('unknown cryptor error');
    };
    CryptoModule.prototype.concatArrayBuffer = function (ab1, ab2) {
        var tmp = new Uint8Array(ab1.byteLength + ab2.byteLength);
        tmp.set(new Uint8Array(ab1), 0);
        tmp.set(new Uint8Array(ab2), ab1.byteLength);
        return tmp.buffer;
    };
    CryptoModule.prototype.getHeaderData = function (encrypted) {
        if (!encrypted.metadata)
            return;
        var header = CryptorHeader.from(this.defaultCryptor.identifier, encrypted.metadata);
        var headerData = new Uint8Array(header.length);
        var pos = 0;
        headerData.set(header.data, pos);
        pos += header.length - encrypted.metadata.byteLength;
        headerData.set(new Uint8Array(encrypted.metadata), pos);
        return headerData.buffer;
    };
    CryptoModule.prototype.getFileData = function (input) {
        if (input instanceof ArrayBuffer) {
            return input;
        }
        if (typeof input === 'string') {
            return CryptoModule.encoder.encode(input);
        }
        throw new Error('Cannot decrypt/encrypt file. In browsers file decryption supports only string or ArrayBuffer');
    };
    CryptoModule.LEGACY_IDENTIFIER = '';
    CryptoModule.encoder = new TextEncoder();
    CryptoModule.decoder = new TextDecoder();
    return CryptoModule;
}());
exports.CryptoModule = CryptoModule;
// CryptorHeader Utility
var CryptorHeader = /** @class */ (function () {
    function CryptorHeader() {
    }
    CryptorHeader.from = function (id, metadata) {
        if (id === CryptorHeader.LEGACY_IDENTIFIER)
            return;
        return new CryptorHeaderV1(id, metadata.byteLength);
    };
    CryptorHeader.tryParse = function (data) {
        var encryptedData = new Uint8Array(data);
        var sentinel = '';
        var version = null;
        if (encryptedData.byteLength >= 4) {
            sentinel = encryptedData.slice(0, 4);
            if (this.decoder.decode(sentinel) !== CryptorHeader.SENTINEL)
                return '';
        }
        if (encryptedData.byteLength >= 5) {
            version = encryptedData[4];
        }
        else {
            throw new Error('decryption error. invalid header version');
        }
        if (version > CryptorHeader.MAX_VERSION)
            throw new Error('unknown cryptor error');
        var identifier = '';
        var pos = 5 + CryptorHeader.IDENTIFIER_LENGTH;
        if (encryptedData.byteLength >= pos) {
            identifier = encryptedData.slice(5, pos);
        }
        else {
            throw new Error('decryption error. invalid crypto identifier');
        }
        var metadataLength = null;
        if (encryptedData.byteLength >= pos + 1) {
            metadataLength = encryptedData[pos];
        }
        else {
            throw new Error('decryption error. invalid metadata length');
        }
        pos += 1;
        if (metadataLength === 255 && encryptedData.byteLength >= pos + 2) {
            metadataLength = new Uint16Array(encryptedData.slice(pos, pos + 2)).reduce(function (acc, val) { return (acc << 8) + val; }, 0);
            pos += 2;
        }
        return new CryptorHeaderV1(this.decoder.decode(identifier), metadataLength);
    };
    CryptorHeader.SENTINEL = 'PNED';
    CryptorHeader.LEGACY_IDENTIFIER = '';
    CryptorHeader.IDENTIFIER_LENGTH = 4;
    CryptorHeader.VERSION = 1;
    CryptorHeader.MAX_VERSION = 1;
    CryptorHeader.decoder = new TextDecoder();
    return CryptorHeader;
}());
// v1 CryptorHeader
var CryptorHeaderV1 = /** @class */ (function () {
    function CryptorHeaderV1(id, metadataLength) {
        this._identifier = id;
        this._metadataLength = metadataLength;
    }
    Object.defineProperty(CryptorHeaderV1.prototype, "identifier", {
        get: function () {
            return this._identifier;
        },
        set: function (value) {
            this._identifier = value;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(CryptorHeaderV1.prototype, "metadataLength", {
        get: function () {
            return this._metadataLength;
        },
        set: function (value) {
            this._metadataLength = value;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(CryptorHeaderV1.prototype, "version", {
        get: function () {
            return CryptorHeader.VERSION;
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(CryptorHeaderV1.prototype, "length", {
        get: function () {
            return (CryptorHeader.SENTINEL.length +
                1 +
                CryptorHeader.IDENTIFIER_LENGTH +
                (this.metadataLength < 255 ? 1 : 3) +
                this.metadataLength);
        },
        enumerable: false,
        configurable: true
    });
    Object.defineProperty(CryptorHeaderV1.prototype, "data", {
        get: function () {
            var pos = 0;
            var header = new Uint8Array(this.length);
            var encoder = new TextEncoder();
            header.set(encoder.encode(CryptorHeader.SENTINEL));
            pos += CryptorHeader.SENTINEL.length;
            header[pos] = this.version;
            pos++;
            if (this.identifier)
                header.set(encoder.encode(this.identifier), pos);
            pos += CryptorHeader.IDENTIFIER_LENGTH;
            var metadataLength = this.metadataLength;
            if (metadataLength < 255) {
                header[pos] = metadataLength;
            }
            else {
                header.set([255, metadataLength >> 8, metadataLength & 0xff], pos);
            }
            return header;
        },
        enumerable: false,
        configurable: true
    });
    CryptorHeaderV1.IDENTIFIER_LENGTH = 4;
    CryptorHeaderV1.SENTINEL = 'PNED';
    return CryptorHeaderV1;
}());
                        if (file.data.byteLength <= 0)
                            throw new Error('encryption error. empty content');
                        if (file.contentLength === 0)
                            throw new Error('encryption error. empty content');
        if (bCiphertext.byteLength <= 0)
            throw new Error('decryption error: empty content');
        return __awaiter(this, void 0, void 0, function () {
            var bIv, aes, inited;
            return __generator(this, function (_a) {
                bIv = this.getIv();
                aes = (0, crypto_1.createCipheriv)('aes-256-cbc', key, bIv).setAutoPadding(true);
                inited = false;
                return [2 /*return*/, stream.pipe(aes).pipe(new stream_1.Transform({
                        transform: function (chunk, _, cb) {
                            if (!inited) {
                                inited = true;
                                this.push(Buffer.concat([bIv, chunk]));
                            }
                            else {
                                this.push(chunk);
                            }
                            cb();
                        },
                    }))];
            });
        });
                    case 0:
                        if (file.data.byteLength <= 0)
                            throw new Error('encryption error. empty content');
                        return [4 /*yield*/, this.getKey(key)];
                        return [4 /*yield*/, file.data.arrayBuffer()];
                        return [4 /*yield*/, file.data.arrayBuffer()];
            var digest, hashHex, abKey;
                    case 0: return [4 /*yield*/, crypto.subtle.digest('SHA-256', WebCryptography.encoder.encode(key))];
                        digest = _a.sent();
                        hashHex = Array.from(new Uint8Array(digest))
                            .map(function (b) { return b.toString(16).padStart(2, '0'); })
                            .join('');
                        abKey = WebCryptography.encoder.encode(hashHex.slice(0, 32)).buffer;
            var abIv, data;
                switch (_a.label) {
                    case 0:
                        abIv = ciphertext.slice(0, 16);
                        if (ciphertext.slice(WebCryptography.IV_LENGTH).byteLength <= 0)
                            throw new Error('decryption error: empty content');
                        return [4 /*yield*/, crypto.subtle.decrypt({ name: 'AES-CBC', iv: abIv }, key, ciphertext.slice(WebCryptography.IV_LENGTH))];
                    case 1:
                        data = _a.sent();
                        return [2 /*return*/, data];
                }
                        abPlaintext = WebCryptography.encoder.encode(plaintext).buffer;
                        return [2 /*return*/, WebCryptography.decoder.decode(ciphertext)];
                        abCiphertext = WebCryptography.encoder.encode(ciphertext).buffer;
                        return [2 /*return*/, WebCryptography.decoder.decode(abPlaintext)];
    WebCryptography.encoder = new TextEncoder();
    WebCryptography.decoder = new TextDecoder();
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
var fs_1 = __importDefault(require("fs"));
                if (stream instanceof fs_1.default.ReadStream) {
                    this.contentLength = fs_1.default.statSync(stream.path).size;
var _a;
var nodeCryptoModule_1 = require("../crypto/modules/NodeCryptoModule/nodeCryptoModule");
module.exports = (_a = /** @class */ (function (_super) {
        __extends(class_1, _super);
        function class_1(setup) {
            var _this = this;
            setup.cbor = new common_1.default(function (buffer) { return cbor_sync_1.default.decode(Buffer.from(buffer)); }, base64_codec_1.decode);
            setup.networking = new networking_1.default({
                keepAlive: node_1.keepAlive,
                del: web_node_1.del,
                get: web_node_1.get,
                post: web_node_1.post,
                patch: web_node_1.patch,
                proxy: node_1.proxy,
                getfile: web_node_1.getfile,
                postfile: web_node_1.postfile,
            });
            setup.sdkFamily = 'Nodejs';
            setup.PubNubFile = node_3.default;
            setup.cryptography = new node_2.default();
            setup.initCryptoModule = function (cryptoConfiguration) {
                return new nodeCryptoModule_1.CryptoModule({
                    default: new nodeCryptoModule_1.LegacyCryptor({
                        cipherKey: cryptoConfiguration.cipherKey,
                        useRandomIVs: cryptoConfiguration.useRandomIVs,
                    }),
                    cryptors: [new nodeCryptoModule_1.AesCbcCryptor({ cipherKey: cryptoConfiguration.cipherKey })],
                });
            };
            if (!('ssl' in setup)) {
                setup.ssl = true;
            }
            _this = _super.call(this, setup) || this;
            return _this;
        return class_1;
    }(pubnub_common_1.default)),
    _a.CryptoModule = nodeCryptoModule_1.CryptoModule,
    _a);
var webCryptoModule_1 = require("../crypto/modules/WebCryptoModule/webCryptoModule");
        setup.initCryptoModule = function (cryptoConfiguration) {
            return new webCryptoModule_1.CryptoModule({
                default: new webCryptoModule_1.LegacyCryptor({
                    cipherKey: cryptoConfiguration.cipherKey,
                    useRandomIVs: cryptoConfiguration.useRandomIVs,
                }),
                cryptors: [new webCryptoModule_1.AesCbcCryptor({ cipherKey: cryptoConfiguration.cipherKey })],
            });
        };
    default_1.CryptoModule = webCryptoModule_1.CryptoModule;
  "version": "7.4.0",
}

export function encode(input: ArrayBuffer): string {
  let base64 = '';
  const encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

  const bytes = new Uint8Array(input);
  const byteLength = bytes.byteLength;
  const byteRemainder = byteLength % 3;
  const mainLength = byteLength - byteRemainder;

  let a, b, c, d;
  let chunk;

  // Main loop deals with bytes in chunks of 3
  for (let i = 0; i < mainLength; i = i + 3) {
    // Combine the three bytes into a single integer
    chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2];

    // Use bitmasks to extract 6-bit segments from the triplet
    a = (chunk & 16515072) >> 18; // 16515072 = (2^6 - 1) << 18
    b = (chunk & 258048) >> 12; // 258048   = (2^6 - 1) << 12
    c = (chunk & 4032) >> 6; // 4032     = (2^6 - 1) << 6
    d = chunk & 63; // 63       = 2^6 - 1

    // Convert the raw binary segments to the appropriate ASCII encoding
    base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d];
  }

  // Deal with the remaining bytes and padding
  if (byteRemainder == 1) {
    chunk = bytes[mainLength];

    a = (chunk & 252) >> 2; // 252 = (2^6 - 1) << 2

    // Set the 4 least significant bits to zero
    b = (chunk & 3) << 4; // 3   = 2^2 - 1

    base64 += encodings[a] + encodings[b] + '==';
  } else if (byteRemainder == 2) {
    chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1];

    a = (chunk & 64512) >> 10; // 64512 = (2^6 - 1) << 10
    b = (chunk & 1008) >> 4; // 1008  = (2^6 - 1) << 4

    // Set the 2 least significant bits to zero
    c = (chunk & 15) << 2; // 15    = 2^4 - 1

    base64 += encodings[a] + encodings[b] + encodings[c] + '=';
  }

  return base64;
}
    support custom encryption and decryption functions.
  /*
    set cryptoModule to encrypt/decrypt messages and files.
  */
  cryptoModule;

    this.cryptoModule = setup.cryptoModule;
    this.setCipherKey(setup.cipherKey, setup);
  setCipherKey(val, setup, modules) {
    if (this.cipherKey) {
      this.cryptoModule =
        setup.cryptoModule ?? setup.initCryptoModule({ cipherKey: this.cipherKey, useRandomIVs: this.useRandomIVs });
      if (modules) modules.cryptoModule = this.cryptoModule;
    }
    return '7.4.0';
  _cryptoModule;

  _decoder;

    cryptoModule,
    this._cryptoModule = cryptoModule;

    if (this._cryptoModule) this._decoder = new TextDecoder();
        if (this._cryptoModule) {
          let decryptedPayload;
          try {
            const decryptedData = this._cryptoModule.decrypt(message.payload);
            decryptedPayload =
              decryptedData instanceof ArrayBuffer ? JSON.parse(this._decoder.decode(decryptedData)) : decryptedData;
          } catch (e) {
            decryptedPayload = null;
            if (console && console.log) {
              console.log('decryption error', e.message);
            }
          }
          if (decryptedPayload !== null) {
        if (this._cryptoModule) {
          let decryptedPayload;
          try {
            const decryptedData = this._cryptoModule.decrypt(message.payload);
            decryptedPayload =
              decryptedData instanceof ArrayBuffer ? JSON.parse(this._decoder.decode(decryptedData)) : decryptedData;
          } catch (e) {
            decryptedPayload = null;
            // eslint-disable-next-line
            if (console && console.log) {
              console.log('decryption error', e.message); //eslint-disable-line
            }
          }
          if (decryptedPayload != null) {
            announce.message = decryptedPayload;
          } else {
            announce.message = message.payload;
          }
  if (!modules.cryptoModule) return message;
    const decryptedData = modules.cryptoModule.decrypt(message);
    const decryptedPayload =
      decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
    return decryptedPayload;
    if (console && console.log) console.log('decryption error', e.message);
// Download_file.js

  handleResponse: async ({ PubNubFile, config, cryptography, cryptoModule }, res, params) => {
    if (PubNubFile.supportsEncryptFile && (params.cipherKey || cryptoModule)) {
      body =
        params.cipherKey == null
          ? (await cryptoModule.decryptFile(PubNubFile.create({ data: body, name: params.name }), PubNubFile)).data
          : await cryptography.decrypt(params.cipherKey ?? config.cipherKey, body);
import { encode } from '../../components/base64_codec';
const preparePayload = (modules, payload) => {
  if (modules.cryptoModule) {
    const encrypted = modules.cryptoModule.encrypt(stringifiedPayload);
    stringifiedPayload = typeof encrypted === 'string' ? encrypted : encode(encrypted);
  modules: { PubNubFile, config, cryptography, cryptoModule, networking },
    if (PubNubFile.supportsEncryptFile && (cipherKey || cryptoModule)) {
      file =
        cipherKey == null
          ? await cryptoModule.encryptFile(file, PubNubFile)
          : await cryptography.encryptFile(cipherKey, file, PubNubFile);
  if (!modules.cryptoModule) return message;
    const decryptedData = modules.cryptoModule.decrypt(message);
    const decryptedPayload =
      decryptedData instanceof ArrayBuffer ? JSON.parse(new TextDecoder().decode(decryptedData)) : decryptedData;
    return decryptedPayload;
    if (console && console.log) console.log('decryption error', e.message);
import { encode } from '../components/base64_codec';
  if (modules.cryptoModule) {
    const encrypted = modules.cryptoModule.encrypt(stringifiedPayload);
    stringifiedPayload = typeof encrypted === 'string' ? encrypted : encode(encrypted);
  return stringifiedPayload || '';
import { encode } from './components/base64_codec';
    const cryptoModule = this._config.cryptoModule;
      cryptoModule: cryptoModule,
    this.encryptFile = function (key, file) {
      if (arguments.length == 1 && typeof key != 'string' && modules.cryptoModule) {
        file = key;
        return modules.cryptoModule.encryptFile(file, this.File);
      }
      return cryptography.encryptFile(key, file, this.File);
    };
    this.decryptFile = function (key, file) {
      if (arguments.length == 1 && typeof key != 'string' && modules.cryptoModule) {
        file = key;
        return modules.cryptoModule.decryptFile(file, this.File);
      }
      return cryptography.decryptFile(key, file, this.File);
    };
        cryptoModule: modules.cryptoModule,
    this.encrypt = function (data, key) {
      if (typeof key === 'undefined' && modules.cryptoModule) {
        const encrypted = modules.cryptoModule.encrypt(data);
        return typeof encrypted === 'string' ? encrypted : encode(encrypted);
      } else {
        return crypto.encrypt(data, key);
      }
    };
    this.decrypt = function (data, key) {
      if (typeof key === 'undefined' && cryptoModule) {
        const decrypted = modules.cryptoModule.decrypt(data);
        return decrypted instanceof ArrayBuffer ? encode(decrypted) : decrypted;
      } else {
        return crypto.decrypt(data, key);
      }
    };
    // this.setCipherKey = modules.config.setCipherKey.bind(modules.config);
    this.setCipherKey = (key) => modules.config.setCipherKey(key, setup, modules);
function stringToArrayBuffer(str) {
  var buf = new ArrayBuffer(str.length * 2);
  var bufView = new Uint16Array(buf);
  for (var i = 0, strLen = str.length; i < strLen; i++) {
    bufView[i] = str.charCodeAt(i);
  }
  return buf;
}

  stringToArrayBuffer,
export type EncryptedDataType = {
  data: Buffer | string;
  metadata: Buffer | null;
};

export type EncryptedStream = {
  stream: NodeJS.ReadableStream;
  metadataLength: number;
  metadata?: Buffer | undefined;
};

export interface ICryptor {
  get identifier(): string;
  encrypt(data: BufferSource | string): EncryptedDataType;
  decrypt(data: EncryptedDataType): ArrayBuffer;

  encryptStream(stream: NodeJS.ReadableStream): Promise<EncryptedStream>;
  decryptStream(encryptedStream: EncryptedStream): Promise<NodeJS.ReadableStream>;
}
import { EncryptedDataType } from './ICryptor';

export type PubNubFileType = {
  stream: NodeJS.ReadStream;
  data: NodeJS.ReadStream | Buffer;
  name: string;
  mimeType: string;
  contentLength: number;

  create(config: any): PubNubFileType;

  toBuffer(): Buffer;
  toArrayBuffer(): ArrayBuffer;
  toString(): string;
  toStream(): NodeJS.ReadStream;
};

export interface ILegacyCryptor<T extends PubNubFileType> {
  get identifier(): string;

  encrypt(data: string | ArrayBuffer): EncryptedDataType;
  decrypt(data: EncryptedDataType): BufferSource | string;

  encryptFile(file: T, File: T): Promise<T>;
  decryptFile(file: T, File: T): Promise<T>;
}
import { PassThrough } from 'stream';
import { createCipheriv, createDecipheriv, createHash, randomBytes } from 'crypto';
import { ICryptor, EncryptedDataType, EncryptedStream } from './ICryptor';

export default class AesCbcCryptor implements ICryptor {
  static BLOCK_SIZE = 16;

  cipherKey: string;
  constructor(configuration: { cipherKey: string }) {
    this.cipherKey = configuration.cipherKey;
  }

  get algo() {
    return 'aes-256-cbc';
  }

  get identifier() {
    return 'ACRH';
  }

  getIv() {
    return randomBytes(AesCbcCryptor.BLOCK_SIZE);
  }

  getKey() {
    const sha = createHash('sha256');
    sha.update(Buffer.from(this.cipherKey, 'utf8'));
    return Buffer.from(sha.digest());
  }

  encrypt(data: ArrayBuffer | string) {
    const iv = this.getIv();
    const key = this.getKey();
    const plainData = typeof data === 'string' ? new TextEncoder().encode(data) : data;
    const bPlain = Buffer.from(plainData);
    if (bPlain.byteLength === 0) throw new Error('encryption error. empty content');
    const aes = createCipheriv(this.algo, key, iv);

    return {
      metadata: iv,
      data: Buffer.concat([aes.update(bPlain), aes.final()]),
    };
  }

  decrypt(encryptedData: EncryptedDataType) {
    const data =
      typeof encryptedData.data === 'string' ? new TextEncoder().encode(encryptedData.data) : encryptedData.data;
    if (data.byteLength <= 0) throw new Error('decryption error: empty content');
    const aes = createDecipheriv(this.algo, this.getKey(), encryptedData.metadata);
    return Uint8Array.from(Buffer.concat([aes.update(data), aes.final()])).buffer;
  }

  async encryptStream(stream: NodeJS.ReadableStream) {
    const output = new PassThrough();
    const bIv = this.getIv();
    if (stream.readable === false) throw new Error('encryption error. empty stream');
    const aes = createCipheriv(this.algo, this.getKey(), bIv);
    stream.pipe(aes).pipe(output);
    return {
      stream: output,
      metadata: bIv,
      metadataLength: AesCbcCryptor.BLOCK_SIZE,
    };
  }

  async decryptStream(encryptedStream: EncryptedStream) {
    const decryptedStream = new PassThrough();
    let bIv = Buffer.alloc(0);
    let aes: any = null;
    const onReadable = () => {
      let data = encryptedStream.stream.read();
      while (data !== null) {
        if (data) {
          const bChunk = Buffer.from(data);
          const sliceLen = encryptedStream.metadataLength - bIv.byteLength;
          if (bChunk.byteLength < sliceLen) {
            bIv = Buffer.concat([bIv, bChunk]);
          } else {
            bIv = Buffer.concat([bIv, bChunk.slice(0, sliceLen)]);
            aes = createDecipheriv(this.algo, this.getKey(), bIv);
            aes.pipe(decryptedStream);
            aes.write(bChunk.slice(sliceLen));
          }
        }
        data = encryptedStream.stream.read();
      }
    };
    encryptedStream.stream.on('readable', onReadable);
    encryptedStream.stream.on('end', () => {
      if (aes) {
        aes.end();
      }
      decryptedStream.end();
    });
    return decryptedStream;
  }
}
import Crypto from '../../../core/components/cryptography/index';
import { encode } from '../../../core/components/base64_codec';
import FileCryptor from '../node';
import { EncryptedDataType } from './ICryptor';
import { ILegacyCryptor, PubNubFileType } from './ILegacyCryptor';

export default class LegacyCryptor implements ILegacyCryptor<PubNubFileType> {
  config;

  cryptor;
  fileCryptor;

  constructor(config: any) {
    this.config = config;
    this.cryptor = new Crypto({ config });
    this.fileCryptor = new FileCryptor();
  }
  get identifier() {
    return '';
  }
  encrypt(data: string) {
    if (data.length === 0) throw new Error('encryption error. empty content');
    return {
      data: this.cryptor.encrypt(data),
      metadata: null,
    };
  }

  decrypt(encryptedData: EncryptedDataType) {
    const data = typeof encryptedData.data === 'string' ? encryptedData.data : encode(encryptedData.data);
    return this.cryptor.decrypt(data);
  }

  async encryptFile(file: PubNubFileType, File: PubNubFileType) {
    return this.fileCryptor.encryptFile(this.config.cipherKey, file, File);
  }

  async decryptFile(file: PubNubFileType, File: PubNubFileType) {
    return this.fileCryptor.decryptFile(this.config.cipherKey, file, File);
  }
}
import { Readable, PassThrough } from 'stream';
import { decode } from '../../../core/components/base64_codec';
import LegacyCryptor from './legacyCryptor';
import AesCbcCryptor from './aesCbcCryptor';
import { ICryptor } from './ICryptor';
import { ILegacyCryptor, PubNubFileType } from './ILegacyCryptor';

export { LegacyCryptor, AesCbcCryptor };

type CryptorType = ICryptor | ILegacyCryptor<PubNubFileType>;

type CryptoModuleConfiguration = {
  default: CryptorType;
  cryptors?: Array<CryptorType>;
};

export class CryptoModule {
  static LEGACY_IDENTIFIER = '';

  defaultCryptor: CryptorType;
  cryptors: Array<CryptorType>;

  constructor(cryptoModuleConfiguration: CryptoModuleConfiguration) {
    this.defaultCryptor = cryptoModuleConfiguration.default;
    this.cryptors = cryptoModuleConfiguration.cryptors ?? [];
  }

  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
  // @ts-ignore: type detection issue with old Config type assignment
  static legacyCryptoModule(config) {
    return new this({
      default: new LegacyCryptor({
        cipherKey: config.cipherKey,
        useRandomIVs: config.useRandomIVs ?? true,
      }),
      cryptors: [new AesCbcCryptor({ cipherKey: config.cipherKey })],
    });
  }

  static aesCbcCryptoModule(config: any) {
    return new this({
      default: new AesCbcCryptor({ cipherKey: config.cipherKey }),
      cryptors: [
        new LegacyCryptor({
          cipherKey: config.cipherKey,
          useRandomIVs: config.useRandomIVs ?? true,
        }),
      ],
    });
  }
  static withDefaultCryptor(defaultCryptor: CryptorType) {
    return new this({ default: defaultCryptor });
  }

  private getAllCryptors() {
    return [this.defaultCryptor, ...this.cryptors];
  }

  private getLegacyCryptor() {
    return this.getAllCryptors().find((c) => c.identifier === '');
  }

  encrypt(data: ArrayBuffer | string) {
    const encrypted = this.defaultCryptor.encrypt(data);
    if (!encrypted.metadata) return encrypted.data;

    const header = CryptorHeader.from(this.defaultCryptor.identifier, encrypted.metadata);

    const headerData = new Uint8Array(header!.length);
    let pos = 0;
    headerData.set(header!.data, pos);
    pos = header!.length - encrypted.metadata.length;
    headerData.set(encrypted.metadata, pos);
    return Buffer.concat([headerData, Buffer.from(encrypted.data)]);
  }

  decrypt(data: ArrayBuffer | string) {
    const encryptedData = Buffer.from(typeof data === 'string' ? decode(data) : data);
    const header = CryptorHeader.tryParse(encryptedData);
    const cryptor = this.getCryptor(header);
    const metadata =
      header.length > 0
        ? encryptedData.slice(header.length - (header as CryptorHeaderV1).metadataLength, header.length)
        : null;
    if (encryptedData.slice(header.length).byteLength <= 0) throw new Error('decryption error. empty content');
    return cryptor!.decrypt({
      data: encryptedData.slice(header.length),
      metadata: metadata,
    });
  }

  async encryptFile(file: PubNubFileType, File: PubNubFileType) {
    /**
     * Files handled differently in case of Legacy cryptor.
     * (as long as we support legacy need to check on intsance type)
     */
    if (this.defaultCryptor.identifier === CryptorHeader.LEGACY_IDENTIFIER)
      return (this.defaultCryptor as ILegacyCryptor<PubNubFileType>).encryptFile(file, File);
    if (file.data instanceof Buffer) {
      return File.create({
        name: file.name,
        mimeType: 'application/octet-stream',
        data: Buffer.from(this.encrypt(file.data!) as Buffer),
      });
    }
    if (file.data instanceof Readable) {
      if (file.contentLength === 0) throw new Error('encryption error. empty content');
      const encryptedStream = await (this.defaultCryptor as ICryptor).encryptStream(file.data);
      const header = CryptorHeader.from(this.defaultCryptor.identifier, encryptedStream.metadata!);
      const payload = new Uint8Array(header!.length);
      let pos = 0;
      payload.set(header!.data, pos);
      pos += header!.length;
      if (encryptedStream.metadata) {
        pos -= encryptedStream.metadata.length;
        payload.set(encryptedStream.metadata, pos);
      }
      const output = new PassThrough();
      output.write(payload);
      encryptedStream.stream.pipe(output);
      return File.create({
        name: file.name,
        mimeType: 'application/octet-stream',
        stream: output,
      });
    }
  }

  async decryptFile(file: PubNubFileType, File: PubNubFileType) {
    if (file?.data instanceof Buffer) {
      const header = CryptorHeader.tryParse(file.data);
      const cryptor = this.getCryptor(header);
      /**
       * If It's legacyone then redirect it.
       * (as long as we support legacy need to check on instance type)
       */
      if (cryptor?.identifier === CryptoModule.LEGACY_IDENTIFIER)
        return (cryptor as ILegacyCryptor<PubNubFileType>).decryptFile(file, File);
      return File.create({
        name: file.name,
        data: Buffer.from(this.decrypt(file?.data) as ArrayBuffer),
      });
    }

    if (file.data instanceof Readable) {
      const stream = file.data;
      return new Promise((resolve) => {
        stream.on('readable', () => resolve(this.onStreamReadable(stream, file, File)));
      });
    }
  }

  private async onStreamReadable(stream: NodeJS.ReadableStream, file: PubNubFileType, File: PubNubFileType) {
    stream.removeAllListeners('readable');
    const magicBytes = stream.read(4);
    if (!CryptorHeader.isSentinel(magicBytes as Buffer)) {
      if (magicBytes === null) throw new Error('decryption error. empty content');
      stream.unshift(magicBytes);
      return this.decryptLegacyFileStream(stream, file, File);
    }
    const versionByte = stream.read(1);
    CryptorHeader.validateVersion(versionByte[0] as number);
    const identifier = stream.read(4);
    const cryptor = this.getCryptorFromId(CryptorHeader.tryGetIdentifier(identifier as Buffer));
    const headerSize = CryptorHeader.tryGetMetadataSizeFromStream(stream);
    if (file.contentLength <= CryptorHeader.MIN_HEADER_LEGTH + headerSize)
      throw new Error('decryption error. empty content');
    return File.create({
      name: file.name,
      mimeType: 'application/octet-stream',
      stream: await (cryptor as ICryptor).decryptStream({ stream: stream, metadataLength: headerSize as number }),
    });
  }

  private async decryptLegacyFileStream(stream: NodeJS.ReadableStream, file: PubNubFileType, File: PubNubFileType) {
    if (file.contentLength <= 16) throw new Error('decryption error: empty content');
    const cryptor = this.getLegacyCryptor();
    if (cryptor) {
      return (cryptor as ILegacyCryptor<PubNubFileType>).decryptFile(
        File.create({
          name: file.name,
          stream: stream,
        }),
        File,
      );
    } else {
      throw new Error('unknown cryptor error');
    }
  }

  private getCryptor(header: CryptorHeader) {
    if (header === '') {
      const cryptor = this.getAllCryptors().find((c) => c.identifier === '');
      if (cryptor) return cryptor;
      throw new Error('unknown cryptor error');
    } else if (header instanceof CryptorHeaderV1) {
      return this.getCryptorFromId(header.identifier);
    }
  }

  private getCryptorFromId(id: string) {
    const cryptor = this.getAllCryptors().find((c) => id === c.identifier);
    if (cryptor) {
      return cryptor;
    }
    throw new Error('unknown cryptor error');
  }
}

// CryptorHeader Utility
class CryptorHeader {
  static SENTINEL = 'PNED';
  static LEGACY_IDENTIFIER = '';
  static IDENTIFIER_LENGTH = 4;
  static VERSION = 1;
  static MAX_VERSION = 1;
  static MIN_HEADER_LEGTH = 10;

  static from(id: string, metadata: Buffer) {
    if (id === CryptorHeader.LEGACY_IDENTIFIER) return;
    return new CryptorHeaderV1(id, metadata.length);
  }

  static isSentinel(bytes: Buffer) {
    if (bytes && bytes.byteLength >= 4) {
      if (bytes.toString('utf8') == CryptorHeader.SENTINEL) return true;
    }
  }

  static validateVersion(data: number) {
    if (data && data > CryptorHeader.MAX_VERSION) throw new Error('decryption error. invalid header version');
    return data;
  }

  static tryGetIdentifier(data: Buffer) {
    if (data.byteLength < 4) {
      throw new Error('unknown cryptor error. decryption failed');
    } else {
      return data.toString('utf8');
    }
  }

  static tryGetMetadataSizeFromStream(stream: NodeJS.ReadableStream) {
    const sizeBuf = stream.read(1);
    if (sizeBuf && (sizeBuf[0] as number) < 255) {
      return sizeBuf[0] as number;
    }
    if ((sizeBuf[0] as number) === 255) {
      const nextBuf = stream.read(2);
      if (nextBuf.length >= 2) {
        return new Uint16Array([nextBuf[0] as number, nextBuf[1] as number]).reduce((acc, val) => (acc << 8) + val, 0);
      }
    }
    throw new Error('decryption error. Invalid metadata size');
  }
  static tryParse(encryptedData: Buffer) {
    let sentinel: any = '';
    let version = null;
    if (encryptedData.length >= 4) {
      sentinel = encryptedData.slice(0, 4);
      if (sentinel.toString('utf8') !== CryptorHeader.SENTINEL) return '';
    }

    if (encryptedData.length >= 5) {
      version = encryptedData[4];
    } else {
      throw new Error('decryption error. invalid header version');
    }
    if (version > CryptorHeader.MAX_VERSION) throw new Error('unknown cryptor error');

    let identifier: Buffer;
    let pos = 5 + CryptorHeader.IDENTIFIER_LENGTH;
    if (encryptedData.length >= pos) {
      identifier = encryptedData.slice(5, pos);
    } else {
      throw new Error('decryption error. invalid crypto identifier');
    }
    let metadataLength = null;
    if (encryptedData.length >= pos + 1) {
      metadataLength = encryptedData[pos];
    } else {
      throw new Error('decryption error. invalid metadata length');
    }
    pos += 1;
    if (metadataLength === 255 && encryptedData.length >= pos + 2) {
      metadataLength = new Uint16Array(encryptedData.slice(pos, pos + 2)).reduce((acc, val) => (acc << 8) + val, 0);
      pos += 2;
    }
    return new CryptorHeaderV1(identifier.toString('utf8'), metadataLength);
  }
}

// v1 CryptorHeader
class CryptorHeaderV1 {
  _identifier;
  _metadataLength;

  constructor(id: string, metadataLength: number) {
    this._identifier = id;
    this._metadataLength = metadataLength;
  }

  get identifier() {
    return this._identifier;
  }

  set identifier(value) {
    this._identifier = value;
  }

  get metadataLength() {
    return this._metadataLength;
  }

  set metadataLength(value) {
    this._metadataLength = value;
  }

  get version() {
    return CryptorHeader.VERSION;
  }

  get length() {
    return (
      CryptorHeader.SENTINEL.length +
      1 +
      CryptorHeader.IDENTIFIER_LENGTH +
      (this.metadataLength < 255 ? 1 : 3) +
      this.metadataLength
    );
  }

  get data() {
    let pos = 0;
    const header = new Uint8Array(this.length);
    header.set(Buffer.from(CryptorHeader.SENTINEL));
    pos += CryptorHeader.SENTINEL.length;
    header[pos] = this.version;
    pos++;
    if (this.identifier) header.set(Buffer.from(this.identifier), pos);
    pos += CryptorHeader.IDENTIFIER_LENGTH;
    const metadataLength = this.metadataLength;
    if (metadataLength < 255) {
      header[pos] = metadataLength;
    } else {
      header.set([255, metadataLength >> 8, metadataLength & 0xff], pos);
    }
    return header;
  }
}
export type EncryptedDataType = {
  data: ArrayBuffer;
  metadata: ArrayBuffer | null;
};

export interface ICryptor {
  get identifier(): string;
  encrypt(data: ArrayBuffer | string): EncryptedDataType;
  decrypt(data: EncryptedDataType): ArrayBuffer;

  encryptFileData(data: ArrayBuffer): Promise<EncryptedDataType>;
  decryptFileData(data: EncryptedDataType): Promise<ArrayBuffer>;
}
import { EncryptedDataType } from './ICryptor';

export type PubNubFileType = {
  data: File | Blob;
  name: string;
  mimeType: string;

  create(config: any): PubNubFileType;

  toArrayBuffer(): ArrayBuffer;
  toBlob(): Blob;
  toString(): string;
  toFile(): File;
};

export interface ILegacyCryptor<T extends PubNubFileType> {
  get identifier(): string;

  encrypt(data: ArrayBuffer | string): EncryptedDataType;
  decrypt(data: EncryptedDataType): ArrayBuffer | string;

  encryptFile(file: T, File: T): Promise<T>;
  decryptFile(file: T, File: T): Promise<T>;
}
import { ICryptor, EncryptedDataType } from './ICryptor';
import cryptoJS from '../../../core/components/cryptography/hmac-sha256';
import { decode } from '../../../core/components/base64_codec';

export default class AesCbcCryptor implements ICryptor {
  static BLOCK_SIZE = 16;
  static encoder = new TextEncoder();
  static decoder = new TextDecoder();

  cipherKey: string;
  encryptedKey: any;
  CryptoJS: any;

  constructor(configuration: { cipherKey: string }) {
    this.cipherKey = configuration.cipherKey;
    this.CryptoJS = cryptoJS;
    this.encryptedKey = this.CryptoJS.SHA256(this.cipherKey);
  }

  get algo() {
    return 'AES-CBC';
  }

  get identifier() {
    return 'ACRH';
  }

  private getIv() {
    return crypto.getRandomValues(new Uint8Array(AesCbcCryptor.BLOCK_SIZE));
  }

  private async getKey() {
    const bKey = AesCbcCryptor.encoder.encode(this.cipherKey);
    const abHash = await crypto.subtle.digest('SHA-256', bKey.buffer);
    return crypto.subtle.importKey('raw', abHash, this.algo, true, ['encrypt', 'decrypt']);
  }

  encrypt(data: ArrayBuffer | string) {
    const stringData = typeof data === 'string' ? data : AesCbcCryptor.decoder.decode(data);
    if (stringData.length === 0) throw new Error('encryption error. empty content');
    const abIv = this.getIv();
    return {
      metadata: abIv,
      data: decode(
        this.CryptoJS.AES.encrypt(data, this.encryptedKey, {
          iv: this.bufferToWordArray(abIv),
          mode: this.CryptoJS.mode.CBC,
        }).ciphertext.toString(this.CryptoJS.enc.Base64),
      ),
    };
  }

  decrypt(encryptedData: EncryptedDataType) {
    const iv = this.bufferToWordArray(new Uint8ClampedArray(encryptedData.metadata!));
    const data = this.bufferToWordArray(new Uint8ClampedArray(encryptedData.data));
    return AesCbcCryptor.encoder.encode(
      this.CryptoJS.AES.decrypt({ ciphertext: data }, this.encryptedKey, {
        iv,
        mode: this.CryptoJS.mode.CBC,
      }).toString(this.CryptoJS.enc.Utf8),
    ).buffer;
  }

  async encryptFileData(data: ArrayBuffer): Promise<EncryptedDataType> {
    const key = await this.getKey();
    const iv = this.getIv();
    return {
      data: await crypto.subtle.encrypt({ name: this.algo, iv: iv }, key, data),
      metadata: iv,
    };
  }

  async decryptFileData(encryptedData: EncryptedDataType): Promise<ArrayBuffer> {
    const key = await this.getKey();
    return crypto.subtle.decrypt({ name: this.algo, iv: encryptedData.metadata! }, key, encryptedData.data);
  }

  private bufferToWordArray(b: any) {
    const wa: any[] = [];
    let i;
    for (i = 0; i < b.length; i += 1) {
      wa[(i / 4) | 0] |= b[i] << (24 - 8 * i);
    }
    return this.CryptoJS.lib.WordArray.create(wa, b.length);
  }
}
import Crypto from '../../../core/components/cryptography/index';
import FileCryptor from '../web';
import { EncryptedDataType } from './ICryptor';
import { ILegacyCryptor, PubNubFileType } from './ILegacyCryptor';
import { encode } from '../../../core/components/base64_codec';

export default class LegacyCryptor implements ILegacyCryptor<PubNubFileType> {
  config;

  cryptor;
  fileCryptor;

  constructor(config: any) {
    this.config = config;
    this.cryptor = new Crypto({ config });
    this.fileCryptor = new FileCryptor();
  }

  get identifier() {
    return '';
  }
  encrypt(data: ArrayBuffer | string) {
    const stringData = typeof data === 'string' ? data : new TextDecoder().decode(data);
    return {
      data: this.cryptor.encrypt(stringData),
      metadata: null,
    };
  }

  decrypt(encryptedData: EncryptedDataType) {
    const data = typeof encryptedData.data === 'string' ? encryptedData.data : encode(encryptedData.data);
    return this.cryptor.decrypt(data);
  }

  async encryptFile(file: PubNubFileType, File: PubNubFileType) {
    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
    //@ts-ignore: can not detect cipherKey from old Config
    return this.fileCryptor.encryptFile(this.config?.cipherKey, file, File);
  }

  async decryptFile(file: PubNubFileType, File: PubNubFileType) {
    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
    //@ts-ignore: can not detect cipherKey from old Config
    return this.fileCryptor.decryptFile(this.config.cipherKey, file, File);
  }
}
import LegacyCryptor from './legacyCryptor';
import AesCbcCryptor from './aesCbcCryptor';
import { EncryptedDataType, ICryptor } from './ICryptor';
import { ILegacyCryptor, PubNubFileType } from './ILegacyCryptor';
import { decode } from '../../../core/components/base64_codec';

export { LegacyCryptor, AesCbcCryptor };

type CryptorType = ICryptor | ILegacyCryptor<PubNubFileType>;

type CryptoModuleConfiguration = {
  default: CryptorType;
  cryptors?: Array<CryptorType>;
};

export class CryptoModule {
  static LEGACY_IDENTIFIER = '';
  static encoder = new TextEncoder();
  static decoder = new TextDecoder();
  defaultCryptor: CryptorType;
  cryptors: Array<CryptorType>;

  constructor(cryptoModuleConfiguration: CryptoModuleConfiguration) {
    this.defaultCryptor = cryptoModuleConfiguration.default;
    this.cryptors = cryptoModuleConfiguration.cryptors ?? [];
  }

  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
  //@ts-ignore: type detection issue with old Config type assignment
  static legacyCryptoModule(config) {
    return new this({
      default: new LegacyCryptor({
        cipherKey: config.cipherKey,
        useRandomIVs: config.useRandomIVs ?? true,
      }),
      cryptors: [new AesCbcCryptor({ cipherKey: config.cipherKey })],
    });
  }

  static aesCbcCryptoModule(config: any) {
    return new this({
      default: new AesCbcCryptor({ cipherKey: config.cipherKey }),
      cryptors: [
        new LegacyCryptor({
          cipherKey: config.cipherKey,
          useRandomIVs: config.useRandomIVs ?? true,
        }),
      ],
    });
  }

  static withDefaultCryptor(defaultCryptor: CryptorType) {
    return new this({ default: defaultCryptor });
  }

  private getAllCryptors() {
    return [this.defaultCryptor, ...this.cryptors];
  }

  encrypt(data: ArrayBuffer | string) {
    const encrypted = (this.defaultCryptor as ICryptor).encrypt(data);
    if (!encrypted.metadata) return encrypted.data;
    const headerData = this.getHeaderData(encrypted);
    return this.concatArrayBuffer(headerData!, encrypted.data);
  }

  decrypt(data: ArrayBuffer | string) {
    const encryptedData = typeof data === 'string' ? decode(data) : data;
    const header = CryptorHeader.tryParse(encryptedData);
    const cryptor = this.getCryptor(header);
    const metadata =
      header.length > 0
        ? encryptedData.slice(header.length - (header as CryptorHeaderV1).metadataLength, header.length)
        : null;
    if (encryptedData.slice(header.length).byteLength <= 0) throw new Error('decryption error. empty content');
    return cryptor!.decrypt({
      data: encryptedData.slice(header.length),
      metadata: metadata,
    });
  }

  async encryptFile(file: PubNubFileType, File: PubNubFileType) {
    if (this.defaultCryptor.identifier === CryptorHeader.LEGACY_IDENTIFIER)
      return (this.defaultCryptor as ILegacyCryptor<PubNubFileType>).encryptFile(file, File);
    const fileData = this.getFileData(file.data);
    const encrypted = await (this.defaultCryptor as ICryptor).encryptFileData(fileData);
    return File.create({
      name: file.name,
      mimeType: 'application/octet-stream',
      data: this.concatArrayBuffer(this.getHeaderData(encrypted)!, encrypted.data),
    });
  }

  async decryptFile(file: PubNubFileType, File: PubNubFileType) {
    const data = await file.data.arrayBuffer();
    const header = CryptorHeader.tryParse(data);
    const cryptor = this.getCryptor(header);
    if (cryptor?.identifier === CryptoModule.LEGACY_IDENTIFIER) {
      return (cryptor as ILegacyCryptor<PubNubFileType>).decryptFile(file, File);
    }
    const fileData = this.getFileData(data);
    const metadata = fileData.slice(header.length - (header as CryptorHeaderV1).metadataLength, header.length);
    return File.create({
      name: file.name,
      data: await (this.defaultCryptor as ICryptor).decryptFileData({
        data: data.slice(header.length),
        metadata: metadata,
      }),
    });
  }

  private getCryptor(header: string | CryptorHeaderV1) {
    if (header === '') {
      const cryptor = this.getAllCryptors().find((c) => c.identifier === '');
      if (cryptor) return cryptor;
      throw new Error('unknown cryptor error');
    } else if (header instanceof CryptorHeaderV1) {
      return this.getCryptorFromId(header.identifier);
    }
  }

  private getCryptorFromId(id: string) {
    const cryptor = this.getAllCryptors().find((c) => id === c.identifier);
    if (cryptor) {
      return cryptor;
    }
    throw Error('unknown cryptor error');
  }

  private concatArrayBuffer(ab1: ArrayBuffer, ab2: ArrayBuffer) {
    const tmp = new Uint8Array(ab1.byteLength + ab2.byteLength);

    tmp.set(new Uint8Array(ab1), 0);
    tmp.set(new Uint8Array(ab2), ab1.byteLength);

    return tmp.buffer;
  }

  private getHeaderData(encrypted: EncryptedDataType) {
    if (!encrypted.metadata) return;
    const header = CryptorHeader.from(this.defaultCryptor.identifier, encrypted.metadata);
    const headerData = new Uint8Array(header!.length);
    let pos = 0;
    headerData.set(header!.data, pos);
    pos += header!.length - encrypted.metadata.byteLength;
    headerData.set(new Uint8Array(encrypted.metadata), pos);
    return headerData.buffer;
  }

  private getFileData(input: any) {
    if (input instanceof ArrayBuffer) {
      return input;
    }
    if (typeof input === 'string') {
      return CryptoModule.encoder.encode(input);
    }
    throw new Error('Cannot decrypt/encrypt file. In browsers file decryption supports only string or ArrayBuffer');
  }
}

// CryptorHeader Utility
class CryptorHeader {
  static SENTINEL = 'PNED';
  static LEGACY_IDENTIFIER = '';
  static IDENTIFIER_LENGTH = 4;
  static VERSION = 1;
  static MAX_VERSION = 1;
  static decoder = new TextDecoder();

  static from(id: string, metadata: ArrayBuffer) {
    if (id === CryptorHeader.LEGACY_IDENTIFIER) return;
    return new CryptorHeaderV1(id, metadata.byteLength);
  }

  static tryParse(data: ArrayBuffer) {
    const encryptedData = new Uint8Array(data);
    let sentinel: any = '';
    let version = null;
    if (encryptedData.byteLength >= 4) {
      sentinel = encryptedData.slice(0, 4);
      if (this.decoder.decode(sentinel) !== CryptorHeader.SENTINEL) return '';
    }
    if (encryptedData.byteLength >= 5) {
      version = (encryptedData as Uint8Array)[4] as number;
    } else {
      throw new Error('decryption error. invalid header version');
    }
    if (version > CryptorHeader.MAX_VERSION) throw new Error('unknown cryptor error');

    let identifier: any = '';
    let pos = 5 + CryptorHeader.IDENTIFIER_LENGTH;
    if (encryptedData.byteLength >= pos) {
      identifier = encryptedData.slice(5, pos);
    } else {
      throw new Error('decryption error. invalid crypto identifier');
    }
    let metadataLength = null;
    if (encryptedData.byteLength >= pos + 1) {
      metadataLength = (encryptedData as Uint8Array)[pos];
    } else {
      throw new Error('decryption error. invalid metadata length');
    }
    pos += 1;
    if (metadataLength === 255 && encryptedData.byteLength >= pos + 2) {
      metadataLength = new Uint16Array(encryptedData.slice(pos, pos + 2)).reduce((acc, val) => (acc << 8) + val, 0);
      pos += 2;
    }
    return new CryptorHeaderV1(this.decoder.decode(identifier), metadataLength);
  }
}

// v1 CryptorHeader
class CryptorHeaderV1 {
  static IDENTIFIER_LENGTH = 4;
  static SENTINEL = 'PNED';

  _identifier;
  _metadataLength;

  constructor(id: string, metadataLength: number) {
    this._identifier = id;
    this._metadataLength = metadataLength;
  }

  get identifier() {
    return this._identifier;
  }

  set identifier(value) {
    this._identifier = value;
  }

  get metadataLength() {
    return this._metadataLength;
  }

  set metadataLength(value) {
    this._metadataLength = value;
  }

  get version() {
    return CryptorHeader.VERSION;
  }

  get length() {
    return (
      CryptorHeader.SENTINEL.length +
      1 +
      CryptorHeader.IDENTIFIER_LENGTH +
      (this.metadataLength < 255 ? 1 : 3) +
      this.metadataLength
    );
  }

  get data() {
    let pos = 0;
    const header = new Uint8Array(this.length);
    const encoder = new TextEncoder();
    header.set(encoder.encode(CryptorHeader.SENTINEL));
    pos += CryptorHeader.SENTINEL.length;
    header[pos] = this.version;
    pos++;
    if (this.identifier) header.set(encoder.encode(this.identifier), pos);
    pos += CryptorHeader.IDENTIFIER_LENGTH;
    const metadataLength = this.metadataLength;
    if (metadataLength < 255) {
      header[pos] = metadataLength;
    } else {
      header.set([255, metadataLength >> 8, metadataLength & 0xff], pos);
    }
    return header;
  }
}
import { Readable, PassThrough, Transform } from 'stream';
      if (file.data.byteLength <= 0) throw new Error('encryption error. empty content');
      if (file.contentLength === 0) throw new Error('encryption error. empty content');
    if (bCiphertext.byteLength <= 0) throw new Error('decryption error: empty content');
  async encryptStream(key, stream) {
    const aes = createCipheriv('aes-256-cbc', key, bIv).setAutoPadding(true);
    let inited = false;
    return stream.pipe(aes).pipe(
      new Transform({
        transform(chunk, _, cb) {
          if (!inited) {
            inited = true;
            this.push(Buffer.concat([bIv, chunk]));
          } else {
            this.push(chunk);
          }
          cb();
        },
      }),
    );
  static encoder = new TextEncoder();
  static decoder = new TextDecoder();
    if (file.data.byteLength <= 0) throw new Error('encryption error. empty content');
    const abPlaindata = await file.data.arrayBuffer();
    const abCipherdata = await file.data.arrayBuffer();
    const digest = await crypto.subtle.digest('SHA-256', WebCryptography.encoder.encode(key));
    const hashHex = Array.from(new Uint8Array(digest))
      .map((b) => b.toString(16).padStart(2, '0'))
      .join('');
    const abKey = WebCryptography.encoder.encode(hashHex.slice(0, 32)).buffer;
    if (ciphertext.slice(WebCryptography.IV_LENGTH).byteLength <= 0) throw new Error('decryption error: empty content');
    const data = await crypto.subtle.decrypt(
      { name: 'AES-CBC', iv: abIv },
      key,
      ciphertext.slice(WebCryptography.IV_LENGTH),
    );
    return data;
    const abPlaintext = WebCryptography.encoder.encode(plaintext).buffer;
    return WebCryptography.decoder.decode(ciphertext);
    const abCiphertext = WebCryptography.encoder.encode(ciphertext).buffer;
    return WebCryptography.decoder.decode(abPlaintext);
import fs from 'fs';
  contentLength;

      if (stream instanceof fs.ReadStream) {
        this.contentLength = fs.statSync(stream.path).size;
import { CryptoModule, LegacyCryptor, AesCbcCryptor } from '../crypto/modules/NodeCryptoModule/nodeCryptoModule';
  static CryptoModule = CryptoModule;
    setup.initCryptoModule = (cryptoConfiguration: any) => {
      return new CryptoModule({
        default: new LegacyCryptor({
          cipherKey: cryptoConfiguration.cipherKey,
          useRandomIVs: cryptoConfiguration.useRandomIVs,
        }),
        cryptors: [new AesCbcCryptor({ cipherKey: cryptoConfiguration.cipherKey })],
      });
    };

import { CryptoModule, LegacyCryptor, AesCbcCryptor } from '../crypto/modules/WebCryptoModule/webCryptoModule';
  static CryptoModule = CryptoModule;
    setup.initCryptoModule = (cryptoConfiguration) => {
      return new CryptoModule({
        default: new LegacyCryptor({
          cipherKey: cryptoConfiguration.cipherKey,
          useRandomIVs: cryptoConfiguration.useRandomIVs,
        }),
        cryptors: [new AesCbcCryptor({ cipherKey: cryptoConfiguration.cipherKey })],
      });
    };

import { Given, When, Then, Before } from '@cucumber/cucumber';
import { expect } from 'chai';
import fs from 'fs';

import {
  CryptoModule,
  AesCbcCryptor,
  LegacyCryptor,
} from '../../../../lib/crypto/modules/NodeCryptoModule/nodeCryptoModule.js';

Before(function () {
  this.useRandomIVs = true;
});

Given('Crypto module with {string} cryptor', function (cryptorIdentifier: string) {
  this.cryptorIdentifier = cryptorIdentifier;
});

Given(
  'Crypto module with default {string} and additional {string} cryptors',
  function (defaultCryptorId: string, additionalCryptorId: string) {
    this.defaultCryptorId = defaultCryptorId;
    this.additionalCryptorId = additionalCryptorId;
  },
);

Given('with {string} cipher key', function (cipherKey: string) {
  this.cipherKey = cipherKey;
});

Given('with {string} vector', function (vector: string) {
  if (vector === 'constant') this.useRandomIVs = false;
  this._initCryptor = (id: string) => {
    return id === 'legacy'
      ? new LegacyCryptor({ cipherKey: this.cipherKey, useRandomIVs: this.useRandomIVs })
      : new AesCbcCryptor({ cipherKey: this.cipherKey });
  };
});

When('I decrypt {string} file', async function (fileName: string) {
  if (this.cryptorIdentifier === 'acrh') {
    const cryptor = new AesCbcCryptor({ cipherKey: this.cipherKey });
    this.cryptoModule = CryptoModule.withDefaultCryptor(cryptor);
  }
  const pubnub = await this.getPubnub({ subscribeKey: 'key' });
  const fileData = fs.readFileSync(this.getFilePath(fileName));
  const file = pubnub.File.create({
    name: fileName,
    mimeType: 'text/plain',
    data: fileData,
  });
  try {
    const result = await this.cryptoModule.decryptFile(file, pubnub.File);
  } catch (e: any) {
    this.errorMessage = e?.message;
  }
});

When('I decrypt {string} file as {string}', async function (fileName: string, format: string) {
  if (this.defaultCryptorId && this.additionalCryptorId) {
    this.cryptoModule = new CryptoModule({
      default: this._initCryptor(this.defaultCryptorId),
      cryptors: [this._initCryptor(this.additionalCryptorId)],
    });
  } else {
    this.cryptoModule = CryptoModule.withDefaultCryptor(this._initCryptor(this.cryptorIdentifier));
  }

  const pubnub = await this.getPubnub({ subscribeKey: 'key' });

  if (format === 'binary') {
    this.isBinary = true;
    if (!this.useRandomIVs) return;
    let encrypteFile = pubnub.File.create({
      name: fileName,
      data: fs.readFileSync(this.getFilePath(fileName)),
    });
    try {
      this.binaryFileResult = await this.cryptoModule.decryptFile(encrypteFile, pubnub.File);
    } catch (e: any) {
      this.errorMessage = e?.message;
    }
  } else if (format === 'stream') {
    this.isStream = true;
    const filestream = fs.createReadStream(this.getFilePath(fileName));
    this.file = pubnub.File.create({
      name: fileName,
      stream: filestream,
    });
    try {
      this.streamFileResult = await this.cryptoModule.decryptFile(this.file, pubnub.File);
    } catch (e: any) {
      this.errorMessage = e?.message;
    }
  }
});

Then('Decrypted file content equal to the {string} file content', async function (sourceFile: string) {
  if (this.isBinary && !this.useRandomIVs) return;
  if (this.isStream) {
    const fileStream = await this.streamFileResult.toStream();
    const tempFilePath = `${__dirname}/${this.file.name}`;
    const outputStream = fs.createWriteStream(tempFilePath);
    const expected = fs.readFileSync(this.getFilePath(sourceFile));
    fileStream.pipe(outputStream);
    return new Promise((resolve) => {
      outputStream.on('finish', () => {
        try {
          const actual = fs.readFileSync(tempFilePath);
          expect(Buffer.compare(actual, expected.slice(0, actual.length)) === 0).to.be.true;
        } finally {
          fs.unlink(tempFilePath, () => {});
        }
        resolve(0);
      });
    });
  }
  expect(this.binaryFileResult.data.equals(fs.readFileSync(this.getFilePath(sourceFile)))).to.be.true;
});

Then('I receive {string}', async function (result: string) {
  if ((this.isBinaryFile || this.isBinary) && !this.useRandomIVs) return;
  if (result === 'success') {
    expect(this.errorMessage).to.be.undefined;
  } else {
    expect(this.errorMessage).to.have.string(result);
  }
});

Given('Legacy code with {string} cipher key and {string} vector', function (cipherKey: string, vector: string) {
  const cryptor = new LegacyCryptor({ cipherKey: cipherKey, useRandomIVs: vector === 'random' ? true : false });
  this.cryptoModule = CryptoModule.withDefaultCryptor(cryptor);
});

When('I encrypt {string} file as {string}', async function (fileName: string, format: string) {
  this.pubnub = await this.getPubnub({ subscribeKey: 'key' });
  this.fileDataBuffer = fs.readFileSync(this.getFilePath(fileName));
  if (format === 'stream') {
    this.file = this.pubnub.File.create({
      name: fileName,
      mimeType: 'application/octet-stream',
      stream: fs.createReadStream(this.getFilePath(fileName)),
    });
    this.isStream = true;
  } else {
    this.file = this.pubnub.File.create({
      name: fileName,
      mimeType: 'application/octet-stream',
      data: this.fileDataBuffer,
    });
    this.isBinaryFile = true;
  }
  if (!this.cryptoModule) {
    this.cryptoModule = CryptoModule.withDefaultCryptor(this._initCryptor(this.cryptorIdentifier));
  }
  try {
    this.encryptedFile = await this.cryptoModule.encryptFile(this.file, this.pubnub.File);
  } catch (e: any) {
    this.errorMessage = e?.message;
  }
});

Then('Successfully decrypt an encrypted file with legacy code', async function () {
  const decryptedFile = await this.cryptoModule.decryptFile(this.encryptedFile, this.pubnub.File);
  if (this.isStream) {
    const fileStream = await decryptedFile.toStream();
    const tempFilePath = `${__dirname}/${this.file.name}`;
    const outputStream = fs.createWriteStream(tempFilePath);
    fileStream.pipe(outputStream);
    outputStream.on('end', () => {
      const actualFileBuffer = fs.readFileSync(tempFilePath);
      expect(actualFileBuffer).to.equalBytes(this.fileDataBuffer);
      fs.unlink(tempFilePath, () => {});
    });
  } else {
    expect(decryptedFile.data.toString('utf8')).to.equal(this.fileDataBuffer.toString('utf8'));
  }
});

export function getFilePath(filename) {
  return `${process.cwd()}/dist/contract/contract/features/encryption/assets/${filename}`;
}
import { loadFixtureFile, getFilePath } from './utils';
  getFilePath(filename) {
    return getFilePath(filename);
  }
  "include": [
    "src/**/*"
  ],
  "exclude": [
    "node_modules"
  ]
}