CVE-2023-26154 (published 2023-12-06T05:15Z)

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.\r\r**Note:**\r\rIn order to exploit this vulnerability, the attacker needs to invest resources in preparing the attack and brute-force the encryption.

CVSS v3 base score: 5.9, MEDIUM (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N)

Weakness information:
cwe_id: CWE-331
cwe_name: Insufficient Entropy
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.
extended_description: 
            
            
         
         

Fix information:
repo_url: https://github.com/pubnub/javascript
commit_details: repo_url: https://github.com/pubnub/javascript
author: Mohit Tejani
author_date: 2023-10-16 16:44:10+05:30
msg: 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>
repository: repo_url: https://github.com/pubnub/javascript
repo_name: pubnub/javascript
description: PubNub JavaScript SDK docs https://www.pubnub.com/docs/sdks/javascript
repo_language: TypeScript
owner: pubnub
file_changes: filename: .pubnub.yml
change_type: ModificationType.MODIFY
diff: @@ -1,5 +1,12 @@
 ---
 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:
@@ -895,7 +902,7 @@ supported-platforms:
       - '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
@@ -911,7 +918,7 @@ sdks:
           - 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'
@@ -1582,7 +1589,7 @@ sdks:
           - 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'

programming_language: CoffeeScript
filename: CHANGELOG.md
change_type: ModificationType.MODIFY
diff: @@ -1,3 +1,12 @@
+## 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
 

programming_language: Markdown
filename: LICENSE
change_type: ModificationType.MODIFY
diff: @@ -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

programming_language: Markdown
filename: README.md
change_type: ModificationType.MODIFY
diff: @@ -28,8 +28,8 @@ Watch [Getting Started with PubNub JS SDK](https://app.dashcam.io/replay/64ee0d2
      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:
 

programming_language: Markdown
filename: pubnub.js
change_type: ModificationType.MODIFY
diff: @@ -636,7 +636,7 @@
             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.');
@@ -695,6 +695,7 @@
                 }
                 this.setUUID(setup.uuid);
             }
+            this.setCipherKey(setup.cipherKey, setup);
         }
         // exposed setters
         default_1.prototype.getAuthKey = function () {
@@ -704,8 +705,15 @@
             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 () {
@@ -783,7 +791,7 @@
             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;
@@ -841,6 +849,45 @@
         }
         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 */
     /*
@@ -1764,11 +1811,20 @@
         });
         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,
     };
 
     /*       */
@@ -1795,7 +1851,7 @@
 
     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;
@@ -1804,6 +1860,7 @@
             this._subscribeEndpoint = subscribeEndpoint;
             this._getFileUrl = getFileUrl;
             this._crypto = crypto;
+            this._cryptoModule = cryptoModule;
             this._channels = {};
             this._presenceChannels = {};
             this._heartbeatChannels = {};
@@ -1819,6 +1876,8 @@
             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;
@@ -2286,9 +2345,20 @@
                     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;
                         }
                     }
@@ -2322,8 +2392,26 @@
                     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;
@@ -4622,11 +4710,11 @@
     };
 
     /**       */
-    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 || '';
@@ -4681,13 +4769,13 @@
 
     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"));
@@ -4698,13 +4786,21 @@
                             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) {
@@ -4713,48 +4809,48 @@
                                     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);
@@ -4763,16 +4859,16 @@
                             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,
@@ -4782,19 +4878,19 @@
                                     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,
@@ -4861,7 +4957,7 @@
         return "".concat(networking.getStandardOrigin()).concat(url);
     });
 
-    /**       */
+    // Download_file.js
     var endpoint$g = {
         getOperation: function () { return OPERATIONS.PNDownloadFileOperation; },
         validateParams: function (_, params) {
@@ -4889,20 +4985,28 @@
         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,
@@ -5996,13 +6100,13 @@
 
     /*       */
     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;
@@ -6135,13 +6239,16 @@
 
     /*       */
     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;
         }
     }
@@ -6331,13 +6438,16 @@
 
     /*       */
     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;
         }
     }
@@ -7375,6 +7485,7 @@
                 maximumSamplesCount: 60000,
             });
             this._telemetryManager = telemetryManager;
+            var cryptoModule = this._config.cryptoModule;
             var modules = {
                 config: config,
                 networking: networking,
@@ -7383,10 +7494,23 @@
                 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);
@@ -7417,6 +7541,7 @@
                     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);
@@ -7706,18 +7831,35 @@
             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) {
@@ -12534,10 +12676,13 @@
                 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)];
@@ -12560,7 +12705,7 @@
                         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)];
@@ -12576,15 +12721,16 @@
         };
         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'])];
                     }
                 });
@@ -12607,10 +12753,18 @@
         };
         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];
+                    }
                 });
             });
         };
@@ -12621,12 +12775,12 @@
                     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)];
                     }
                 });
             });
@@ -12637,18 +12791,20 @@
                 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;
     }());
 
@@ -12764,6 +12920,443 @@
         _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) {
@@ -12792,6 +13385,15 @@
             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.
@@ -12804,6 +13406,7 @@
             }
             return _this;
         }
+        default_1.CryptoModule = CryptoModule;
         return default_1;
     }(default_1$3));
 

programming_language: JavaScript
filename: pubnub.min.js
change_type: ModificationType.MODIFY
diff: @@ -12,6 +12,6 @@
     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}));

programming_language: JavaScript
filename: base64_codec.js
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,6 @@
 "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.
@@ -48,3 +48,43 @@ function decode(paddedInput) {
     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;

programming_language: JavaScript
filename: config.js
change_type: ModificationType.MODIFY
diff: @@ -22,7 +22,7 @@ var default_1 = /** @class */ (function () {
         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.');
@@ -81,6 +81,7 @@ var default_1 = /** @class */ (function () {
             }
             this.setUUID(setup.uuid);
         }
+        this.setCipherKey(setup.cipherKey, setup);
     }
     // exposed setters
     default_1.prototype.getAuthKey = function () {
@@ -90,8 +91,15 @@ var default_1 = /** @class */ (function () {
         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 () {
@@ -169,7 +177,7 @@ var default_1 = /** @class */ (function () {
         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;

programming_language: JavaScript
filename: subscription_manager.js
change_type: ModificationType.MODIFY
diff: @@ -31,7 +31,7 @@ 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;
@@ -40,6 +40,7 @@ var default_1 = /** @class */ (function () {
         this._subscribeEndpoint = subscribeEndpoint;
         this._getFileUrl = getFileUrl;
         this._crypto = crypto;
+        this._cryptoModule = cryptoModule;
         this._channels = {};
         this._presenceChannels = {};
         this._heartbeatChannels = {};
@@ -55,6 +56,8 @@ var default_1 = /** @class */ (function () {
         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;
@@ -522,9 +525,20 @@ var default_1 = /** @class */ (function () {
                 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;
                     }
                 }
@@ -558,8 +572,26 @@ var default_1 = /** @class */ (function () {
                 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;

programming_language: JavaScript
filename: fetch_messages.js
change_type: ModificationType.MODIFY
diff: @@ -8,13 +8,16 @@ exports.handleResponse = exports.prepareParams = exports.isAuthSupported = expor
 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;
     }
 }

programming_language: JavaScript
filename: download_file.js
change_type: ModificationType.MODIFY
diff: @@ -1,5 +1,5 @@
 "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) {
@@ -40,6 +40,7 @@ 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 = {
@@ -69,20 +70,28 @@ var endpoint = {
     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,

programming_language: JavaScript
filename: publish_file.js
change_type: ModificationType.MODIFY
diff: @@ -6,11 +6,12 @@ var __importDefault = (this && this.__importDefault) || function (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 || '';

programming_language: JavaScript
filename: send_file.js
change_type: ModificationType.MODIFY
diff: @@ -39,13 +39,13 @@ 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"));
@@ -56,13 +56,21 @@ var sendFile = function (_a) {
                         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) {
@@ -71,48 +79,48 @@ var sendFile = function (_a) {
                                 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);
@@ -121,17 +129,17 @@ var sendFile = function (_a) {
                         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,
@@ -141,19 +149,19 @@ var sendFile = function (_a) {
                                 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,

programming_language: JavaScript
filename: get_history.js
change_type: ModificationType.MODIFY
diff: @@ -8,13 +8,16 @@ exports.handleResponse = exports.prepareParams = exports.isAuthSupported = expor
 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;
     }
 }

programming_language: JavaScript
filename: publish.js
change_type: ModificationType.MODIFY
diff: @@ -7,14 +7,15 @@ 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;

programming_language: JavaScript
filename: pubnub-common.js
change_type: ModificationType.MODIFY
diff: @@ -60,6 +60,7 @@ var __importDefault = (this && this.__importDefault) || function (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"));
@@ -141,6 +142,7 @@ var default_1 = /** @class */ (function () {
             maximumSamplesCount: 60000,
         });
         this._telemetryManager = telemetryManager;
+        var cryptoModule = this._config.cryptoModule;
         var modules = {
             config: config,
             networking: networking,
@@ -149,10 +151,23 @@ var default_1 = /** @class */ (function () {
             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);
@@ -183,6 +198,7 @@ var default_1 = /** @class */ (function () {
                 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);
@@ -472,18 +488,35 @@ var default_1 = /** @class */ (function () {
         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) {

programming_language: JavaScript
filename: utils.js
change_type: ModificationType.MODIFY
diff: @@ -26,9 +26,18 @@ function createPromise() {
     });
     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,
 };

programming_language: JavaScript
filename: ICryptor.js
change_type: ModificationType.ADD
diff: @@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });

programming_language: JavaScript
filename: ILegacyCryptor.js
change_type: ModificationType.ADD
diff: @@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });

programming_language: JavaScript
filename: NodeCryptoModule.js
change_type: ModificationType.ADD
diff: @@ -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;
+}());

programming_language: JavaScript
filename: aesCbcCryptor.js
change_type: ModificationType.ADD
diff: @@ -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;

programming_language: JavaScript
filename: legacyCryptor.js
change_type: ModificationType.ADD
diff: @@ -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;

programming_language: JavaScript
filename: nodeCryptoModule.js
change_type: ModificationType.ADD
diff: @@ -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;
+}());

programming_language: JavaScript
filename: ICryptor.js
change_type: ModificationType.ADD
diff: @@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });

programming_language: JavaScript
filename: ILegacyCryptor.js
change_type: ModificationType.ADD
diff: @@ -0,0 +1,2 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });

programming_language: JavaScript
filename: aesCbcCryptor.js
change_type: ModificationType.ADD
diff: @@ -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;

programming_language: JavaScript
filename: legacyCryptor.js
change_type: ModificationType.ADD
diff: @@ -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;

programming_language: JavaScript
filename: webCryptoModule.js
change_type: ModificationType.ADD
diff: @@ -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;
+}());

programming_language: JavaScript
filename: node.js
change_type: ModificationType.MODIFY
diff: @@ -94,6 +94,8 @@ var NodeCryptography = /** @class */ (function () {
                     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,
@@ -104,6 +106,8 @@ var NodeCryptography = /** @class */ (function () {
                                 _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,
@@ -176,16 +180,32 @@ var NodeCryptography = /** @class */ (function () {
     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;

programming_language: JavaScript
filename: web.js
change_type: ModificationType.MODIFY
diff: @@ -96,10 +96,13 @@ var WebCryptography = /** @class */ (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)];
@@ -122,7 +125,7 @@ var WebCryptography = /** @class */ (function () {
                     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)];
@@ -138,15 +141,16 @@ 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'])];
                 }
             });
@@ -169,10 +173,18 @@ 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];
+                }
             });
         });
     };
@@ -183,12 +195,12 @@ var WebCryptography = /** @class */ (function () {
                 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)];
                 }
             });
         });
@@ -199,18 +211,20 @@ var WebCryptography = /** @class */ (function () {
             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;

programming_language: JavaScript
filename: node.js
change_type: ModificationType.MODIFY
diff: @@ -1,5 +1,4 @@
 "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) {
@@ -36,19 +35,23 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
         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) {

programming_language: JavaScript
filename: index.js
change_type: ModificationType.MODIFY
diff: @@ -17,6 +17,7 @@ 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"));
@@ -26,29 +27,41 @@ 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);

programming_language: JavaScript
filename: index.js
change_type: ModificationType.MODIFY
diff: @@ -29,6 +29,7 @@ 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);
@@ -56,6 +57,15 @@ var default_1 = /** @class */ (function (_super) {
         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.
@@ -68,6 +78,7 @@ var default_1 = /** @class */ (function (_super) {
         }
         return _this;
     }
+    default_1.CryptoModule = webCryptoModule_1.CryptoModule;
     return default_1;
 }(pubnub_common_1.default));
 exports.default = default_1;

programming_language: JavaScript
filename: package.json
change_type: ModificationType.MODIFY
diff: @@ -1,6 +1,6 @@
 {
   "name": "pubnub",
-  "version": "7.3.3",
+  "version": "7.4.0",
   "author": "PubNub <support@pubnub.com>",
   "description": "Publish & Subscribe Real-time Messaging with PubNub",
   "scripts": {
@@ -102,4 +102,4 @@
   "engine": {
     "node": ">=0.8"
   }
-}
+}
\ No newline at end of file

programming_language: CoffeeScript
filename: base64_codec.ts
change_type: ModificationType.MODIFY
diff: @@ -53,3 +53,55 @@ export function decode(paddedInput: string): ArrayBuffer {
 
   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;
+}

programming_language: JavaScript
filename: config.js
change_type: ModificationType.MODIFY
diff: @@ -129,7 +129,7 @@ export default class {
   maximumCacheSize;
 
   /*
-    support customp encryption and decryption functions.
+    support custom encryption and decryption functions.
   */
   customEncrypt; // function to support custome encryption of messages
 
@@ -142,6 +142,11 @@ export default class {
   useRandomIVs;
   enableSubscribeBeta;
 
+  /*
+    set cryptoModule to encrypt/decrypt messages and files.
+  */
+  cryptoModule;
+
   constructor({ setup }) {
     this._PNSDKSuffix = {};
 
@@ -153,7 +158,7 @@ export default class {
     this.sdkFamily = setup.sdkFamily;
     this.partnerId = setup.partnerId;
     this.setAuthKey(setup.authKey);
-    this.setCipherKey(setup.cipherKey);
+    this.cryptoModule = setup.cryptoModule;
 
     this.setFilterExpression(setup.filterExpression);
 
@@ -227,6 +232,7 @@ export default class {
 
       this.setUUID(setup.uuid);
     }
+    this.setCipherKey(setup.cipherKey, setup);
   }
 
   // exposed setters
@@ -239,8 +245,13 @@ export default class {
     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;
   }
 
@@ -339,7 +350,7 @@ export default class {
   }
 
   getVersion() {
-    return '7.3.3';
+    return '7.4.0';
   }
 
   _addPnsdkSuffix(name, suffix) {

programming_language: TypeScript
filename: index.js
change_type: ModificationType.MODIFY
diff: @@ -26,7 +26,6 @@ export default class {
 
   constructor({ config }) {
     this._config = config;
-
     this._iv = '0123456789012345';
 
     this._allowedKeyEncodings = ['hex', 'utf8', 'base64', 'binary'];

programming_language: JavaScript
filename: subscription_manager.js
change_type: ModificationType.MODIFY
diff: @@ -58,6 +58,10 @@ export default class {
   _pendingChannelGroupSubscriptions;
   //
 
+  _cryptoModule;
+
+  _decoder;
+
   _dedupingManager;
 
   constructor({
@@ -70,6 +74,7 @@ export default class {
     config,
     crypto,
     listenerManager,
+    cryptoModule,
   }) {
     this._listenerManager = listenerManager;
     this._config = config;
@@ -81,6 +86,7 @@ export default class {
     this._getFileUrl = getFileUrl;
 
     this._crypto = crypto;
+    this._cryptoModule = cryptoModule;
 
     this._channels = {};
     this._presenceChannels = {};
@@ -104,6 +110,8 @@ export default class {
 
     this._reconnectionManager = new ReconnectionManager({ timeEndpoint });
     this._dedupingManager = new DedupingManager({ config });
+
+    if (this._cryptoModule) this._decoder = new TextDecoder();
   }
 
   adaptStateChange(args, callback) {
@@ -683,10 +691,19 @@ export default class {
 
         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;
           }
         }
@@ -727,8 +744,24 @@ export default class {
           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;
         }

programming_language: JavaScript
filename: fetch_messages.js
change_type: ModificationType.MODIFY
diff: @@ -11,12 +11,14 @@ 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;
   }
 }

programming_language: TypeScript
filename: download_file.js
change_type: ModificationType.MODIFY
diff: @@ -1,3 +1,5 @@
+// Download_file.js
+
 /**       */
 
 import operationConstants from '../../constants/operations';
@@ -34,11 +36,13 @@ const endpoint = {
 
   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({

programming_language: TypeScript
filename: publish_file.js
change_type: ModificationType.MODIFY
diff: @@ -1,17 +1,16 @@
 /**       */
 
 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 || '';
 };
 

programming_language: TypeScript
filename: send_file.js
change_type: ModificationType.MODIFY
diff: @@ -3,7 +3,7 @@ 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) {
@@ -27,8 +27,11 @@ const sendFile = function ({
       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;

programming_language: TypeScript
filename: get_history.js
change_type: ModificationType.MODIFY
diff: @@ -5,12 +5,14 @@ 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;
   }
 }

programming_language: TypeScript
filename: publish.js
change_type: ModificationType.MODIFY
diff: @@ -3,17 +3,17 @@
 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() {

programming_language: TypeScript
filename: pubnub-common.js
change_type: ModificationType.MODIFY
diff: @@ -1,5 +1,6 @@
 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';
@@ -291,6 +292,7 @@ export default class {
     });
 
     this._telemetryManager = telemetryManager;
+    const cryptoModule = this._config.cryptoModule;
 
     const modules = {
       config,
@@ -300,12 +302,25 @@ export default class {
       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);
@@ -341,6 +356,7 @@ export default class {
         config: modules.config,
         listenerManager,
         getFileUrl: (params) => getFileUrlFunction(modules, params),
+        cryptoModule: modules.cryptoModule,
       });
 
       this.subscribe = subscriptionManager.adaptSubscribeChange.bind(subscriptionManager);
@@ -664,20 +680,34 @@ export default class {
     // --- 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')) {

programming_language: TypeScript
filename: utils.js
change_type: ModificationType.MODIFY
diff: @@ -32,9 +32,19 @@ 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,
 };

programming_language: JavaScript
filename: ICryptor.ts
change_type: ModificationType.ADD
diff: @@ -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>;
+}

programming_language: TypeScript
filename: ILegacyCryptor.ts
change_type: ModificationType.ADD
diff: @@ -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>;
+}

programming_language: TypeScript
filename: aesCbcCryptor.ts
change_type: ModificationType.ADD
diff: @@ -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;
+  }
+}

programming_language: TypeScript
filename: legacyCryptor.ts
change_type: ModificationType.ADD
diff: @@ -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);
+  }
+}

programming_language: TypeScript
filename: nodeCryptoModule.ts
change_type: ModificationType.ADD
diff: @@ -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;
+  }
+}

programming_language: TypeScript
filename: ICryptor.ts
change_type: ModificationType.ADD
diff: @@ -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>;
+}

programming_language: TypeScript
filename: ILegacyCryptor.ts
change_type: ModificationType.ADD
diff: @@ -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>;
+}

programming_language: TypeScript
filename: aesCbcCryptor.ts
change_type: ModificationType.ADD
diff: @@ -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);
+  }
+}

programming_language: TypeScript
filename: legacyCryptor.ts
change_type: ModificationType.ADD
diff: @@ -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);
+  }
+}

programming_language: TypeScript
filename: webCryptoModule.ts
change_type: ModificationType.ADD
diff: @@ -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;
+  }
+}

programming_language: TypeScript
filename: node.js
change_type: ModificationType.MODIFY
diff: @@ -1,5 +1,5 @@
 /**       */
-import { Readable, PassThrough } from 'stream';
+import { Readable, PassThrough, Transform } from 'stream';
 import { createCipheriv, createDecipheriv, createHash, randomBytes } from 'crypto';
 
 export default class NodeCryptography {
@@ -41,6 +41,7 @@ export default class NodeCryptography {
     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',
@@ -48,6 +49,7 @@ export default class NodeCryptography {
       });
     }
     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',
@@ -118,22 +120,29 @@ 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) {

programming_language: TypeScript
filename: web.js
change_type: ModificationType.MODIFY
diff: @@ -11,6 +11,8 @@ function concatArrayBuffer(ab1, ab2) {
 
 export default class WebCryptography {
   static IV_LENGTH = 16;
+  static encoder = new TextEncoder();
+  static decoder = new TextDecoder();
 
   get algo() {
     return 'aes-256-cbc';
@@ -30,7 +32,6 @@ export default class WebCryptography {
 
   async decrypt(key, input) {
     const cKey = await this.getKey(key);
-
     if (input instanceof ArrayBuffer) {
       return this.decryptArrayBuffer(cKey, input);
     }
@@ -41,9 +42,10 @@ export default class WebCryptography {
   }
 
   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);
 
@@ -57,8 +59,7 @@ 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({
@@ -68,11 +69,11 @@ export default class WebCryptography {
   }
 
   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']);
   }
 
@@ -84,28 +85,33 @@ export default class WebCryptography {
 
   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);
   }
 }

programming_language: TypeScript
filename: node.js
change_type: ModificationType.MODIFY
diff: @@ -1,11 +1,7 @@
-/**       */
-
 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;
 
@@ -29,6 +25,8 @@ const PubNubFile = class PubNubFile {
 
   mimeType;
 
+  contentLength;
+
   static create(config) {
     return new this(config);
   }
@@ -37,9 +35,10 @@ const PubNubFile = class PubNubFile {
     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);

programming_language: TypeScript
filename: index.ts
change_type: ModificationType.MODIFY
diff: @@ -8,8 +8,10 @@ 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({
@@ -27,6 +29,16 @@ export = class extends PubNubCore {
     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;
     }

programming_language: TypeScript
filename: index.js
change_type: ModificationType.MODIFY
diff: @@ -11,6 +11,7 @@ import { del, get, post, patch, getfile, postfile } from '../networking/modules/
 
 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) {
@@ -21,10 +22,10 @@ function sendBeacon(url) {
 }
 
 export default class extends PubNubCore {
+  static CryptoModule = CryptoModule;
   constructor(setup) {
     // extract config.
     const { listenToBrowserNetworkEvents = true } = setup;
-
     setup.sdkFamily = 'Web';
     setup.networking = new Networking({
       del,
@@ -40,6 +41,16 @@ export default class extends PubNubCore {
     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) {

programming_language: TypeScript
filename: cryptoModule.ts
change_type: ModificationType.ADD
diff: @@ -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'));
+  }
+});

programming_language: TypeScript
filename: utils.ts
change_type: ModificationType.MODIFY
diff: @@ -7,3 +7,7 @@ export function loadFixtureFile(persona) {
   );
   return JSON.parse(fileData);
 }
+
+export function getFilePath(filename) {
+  return `${process.cwd()}/dist/contract/contract/features/encryption/assets/${filename}`;
+}

programming_language: TypeScript
filename: world.ts
change_type: ModificationType.MODIFY
diff: @@ -4,7 +4,7 @@ import {
   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 {
@@ -134,6 +134,9 @@ class PubnubWorld extends World{
     }
     return this.fileFixtures[name];
   }
+  getFilePath(filename) {
+    return getFilePath(filename);
+  }
 }
 
 setWorldConstructor(PubnubWorld);

programming_language: JavaScript
filename: tsconfig.json
change_type: ModificationType.MODIFY
diff: @@ -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

programming_language: CoffeeScript