Visible for testing - */ -const MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android. -/** - * The percentage of backoff time to randomize by. - * See - * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic - * for context. - * - *
Visible for testing - */ -const RANDOM_FACTOR = 0.5; -/** - * Based on the backoff method from - * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js. - * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around. - */ -function calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) { - // Calculates an exponentially increasing value. - // Deviation: calculates value from count and a constant interval, so we only need to save value - // and count to restore state. - const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount); - // A random "fuzz" to avoid waves of retries. - // Deviation: randomFactor is required. - const randomWait = Math.round( - // A fraction of the backoff value to add/subtract. - // Deviation: changes multiplication order to improve readability. - RANDOM_FACTOR * - currBaseValue * - // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines - // if we add or subtract. - (Math.random() - 0.5) * - 2); - // Limits backoff to max to avoid effectively permanent backoff. - return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait); +/** + * @license + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** + * The amount of milliseconds to exponentially increase. + */ +const DEFAULT_INTERVAL_MILLIS = 1000; +/** + * The factor to backoff by. + * Should be a number greater than 1. + */ +const DEFAULT_BACKOFF_FACTOR = 2; +/** + * The maximum milliseconds to increase to. + * + *
Visible for testing + */ +const MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android. +/** + * The percentage of backoff time to randomize by. + * See + * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic + * for context. + * + *
Visible for testing
+ */
+const RANDOM_FACTOR = 0.5;
+/**
+ * Based on the backoff method from
+ * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.
+ * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.
+ */
+function calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {
+ // Calculates an exponentially increasing value.
+ // Deviation: calculates value from count and a constant interval, so we only need to save value
+ // and count to restore state.
+ const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);
+ // A random "fuzz" to avoid waves of retries.
+ // Deviation: randomFactor is required.
+ const randomWait = Math.round(
+ // A fraction of the backoff value to add/subtract.
+ // Deviation: changes multiplication order to improve readability.
+ RANDOM_FACTOR *
+ currBaseValue *
+ // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines
+ // if we add or subtract.
+ (Math.random() - 0.5) *
+ 2);
+ // Limits backoff to max to avoid effectively permanent backoff.
+ return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);
}
-/**
- * @license
- * Copyright 2020 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * Provide English ordinal letters after a number
- */
-function ordinal(i) {
- if (!Number.isFinite(i)) {
- return `${i}`;
- }
- return i + indicator(i);
-}
-function indicator(i) {
- i = Math.abs(i);
- const cent = i % 100;
- if (cent >= 10 && cent <= 20) {
- return 'th';
- }
- const dec = i % 10;
- if (dec === 1) {
- return 'st';
- }
- if (dec === 2) {
- return 'nd';
- }
- if (dec === 3) {
- return 'rd';
- }
- return 'th';
+/**
+ * @license
+ * Copyright 2020 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+/**
+ * Provide English ordinal letters after a number
+ */
+function ordinal(i) {
+ if (!Number.isFinite(i)) {
+ return `${i}`;
+ }
+ return i + indicator(i);
+}
+function indicator(i) {
+ i = Math.abs(i);
+ const cent = i % 100;
+ if (cent >= 10 && cent <= 20) {
+ return 'th';
+ }
+ const dec = i % 10;
+ if (dec === 1) {
+ return 'st';
+ }
+ if (dec === 2) {
+ return 'nd';
+ }
+ if (dec === 3) {
+ return 'rd';
+ }
+ return 'th';
}
-/**
- * @license
- * Copyright 2021 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-function getModularInstance(service) {
- if (service && service._delegate) {
- return service._delegate;
- }
- else {
- return service;
- }
+/**
+ * @license
+ * Copyright 2021 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+function getModularInstance(service) {
+ if (service && service._delegate) {
+ return service._delegate;
+ }
+ else {
+ return service;
+ }
}
//# sourceMappingURL=index.esm2017.js.map
+/***/ }),
+
+/***/ "./node_modules/@firebase/util/dist/postinstall.mjs":
+/*!**********************************************************!*\
+ !*** ./node_modules/@firebase/util/dist/postinstall.mjs ***!
+ \**********************************************************/
+/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ getDefaultsFromPostinstall: function() { return /* binding */ getDefaultsFromPostinstall; }
+/* harmony export */ });
+const getDefaultsFromPostinstall = () => (undefined);
+
+
/***/ }),
/***/ "./node_modules/firebase/app/dist/esm/index.esm.js":
@@ -6539,24 +6615,24 @@ __webpack_require__.r(__webpack_exports__);
var name = "firebase";
-var version = "10.14.1";
+var version = "11.6.1";
-/**
- * @license
- * Copyright 2020 Google LLC
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
+/**
+ * @license
+ * Copyright 2020 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
(0,_firebase_app__WEBPACK_IMPORTED_MODULE_0__.registerVersion)(name, version, 'app');
//# sourceMappingURL=index.esm.js.map
@@ -21621,6 +21697,7 @@ if (typeof FIREBASE_INIT != 'undefined' && FIREBASE_INIT && FIREBASE_INIT.measur
gtag('config', FIREBASE_INIT.measurementId);
}
const messageLoader = {
+ 'ar': _ => __webpack_require__.e(/*! import() */ "src_i18n_min_ar_json").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/ar.json */ "./src/i18n.min/ar.json", 19)),
'de': _ => __webpack_require__.e(/*! import() */ "src_i18n_min_de_json").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/de.json */ "./src/i18n.min/de.json", 19)),
'en': _ => __webpack_require__.e(/*! import() */ "src_i18n_min_en_json").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/en.json */ "./src/i18n.min/en.json", 19)),
'es': _ => __webpack_require__.e(/*! import() */ "src_i18n_min_es_json").then(__webpack_require__.t.bind(__webpack_require__, /*! ./i18n.min/es.json */ "./src/i18n.min/es.json", 19)),
diff --git a/umd/index.dev.js.map b/umd/index.dev.js.map
index 664daa7e..285731fe 100644
--- a/umd/index.dev.js.map
+++ b/umd/index.dev.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.dev.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAoE;AACuB;AAC0G;AACtJ;AAClB;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,gBAAgB,GAAG,gBAAgB;AAC7D;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,oDAAM;;AAEzB;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,gBAAgB,sCAAsC,SAAS;AACjG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,cAAc;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,gBAAgB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yDAAyD,SAAS;AAClE;AACA,uEAAuE,SAAS;AAChF,0EAA0E,SAAS;AACnF,sEAAsE,SAAS;AAC/E;AACA;AACA,6EAA6E,SAAS;AACtF;AACA;AACA,iGAAiG,sBAAsB;AACvH,oGAAoG,sBAAsB;AAC1H,oGAAoG,sBAAsB;AAC1H,2GAA2G,sBAAsB;AACjI;AACA;AACA;AACA,0BAA0B,wDAAY;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC;AACxC,uCAAuC;AACvC;AACA;AACA;AACA;AACA,wCAAwC,0DAAS;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF,qBAAqB;AACxG;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,gCAAgC;AAC7E;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;AACA;AACA,sBAAsB;AACtB;AACA,mCAAmC,iEAAiE;AACpG;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,0BAA0B,mEAAmB;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yDAAS;AACrB,YAAY,yDAAS;AACrB;AACA;AACA;AACA,uFAAuF,eAAe;AACtG;AACA;AACA,0BAA0B,mEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,yDAAS,OAAO,2DAAW;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mIAAmI;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,mEAAkB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,iCAAiC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,mEAAmB;AAClE;AACA;AACA;AACA,qEAAqE,eAAe;AACpF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,QAAQ;AAC/B;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,kBAAkB,QAAQ;AAC7E;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA;AACA,0CAA0C,QAAQ;AAClD;AACA;AACA;AACA;AACA,2BAA2B,0DAAS,IAAI,QAAQ,oBAAoB,kBAAkB;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mEAAiB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6DAAa;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2CAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,yDAAa;AACtC;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,cAAc,SAAS,GAAG,kBAAkB;AAC5C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD,aAAa;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,kCAAkC;AACtD,iCAAiC,6EAA6B,kBAAkB,0CAA0C;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa,oEAAoB;AACjC;AACA;AACA;AACA,mBAAmB,yEAAyB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,6EAA6B;AACxC;AACA,qBAAqB,yCAAyC;AAC9D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,0DAAS;AACpC,2BAA2B,0DAAS;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEmW;AACnW;;;;;;;;;;;;;;;;;;ACloC0C;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,oDAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC,WAAW;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,gBAAgB,eAAe,UAAU;AAC1F;AACA;AACA,yCAAyC,WAAW;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,wCAAwC;AACtF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB,gBAAgB,eAAe;AAC/B;AACA;AACA,2BAA2B,UAAU,GAAG,qBAAqB;AAC7D;AACA;AACA,qCAAqC,WAAW;AAChD;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,kCAAkC;AAC/D;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4GAA4G;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,gBAAgB,mCAAmC,UAAU;AACtG;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEmD;AACnD;;;;;;;;;;;;;;;;;;;;;;;ACxZ0F;AAC1C;AACa;AAChC;;AAE7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6BAA6B,QAAQ;AACrC;AACA;AACA,gDAAgD;AAChD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iHAAiH,WAAW;AAC5H;AACA;AACA,yDAAyD,cAAc,4BAA4B,cAAc,cAAc,GAAG,eAAe;AACjJ;AACA;AACA;AACA,0BAA0B,wDAAY;AACtC;AACA;AACA,6BAA6B,yDAAa;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,WAAW;AAC/C,cAAc,sBAAsB,YAAY,UAAU;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,sBAAsB,QAAQ;AAC9B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,yCAAyC,cAAc;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,uBAAuB,EAAE,aAAa;AACpD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2CAA2C,qCAAqC,IAAI,KAAK;AACzF;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,GAAG;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,kBAAkB,GAAG,gBAAgB;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,UAAU;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2CAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,yCAAyC;AACzD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,qCAAqC;AAC/E;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,KAAK;AACxD,cAAc,oCAAoC,GAAG,IAAI;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD,eAAe,aAAa,oDAAoD;AACjI;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,uEAAuE,wBAAwB,WAAW;AAC1G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2EAA2E,wBAAwB,aAAa,oDAAoD;AACpK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,eAAe,gCAAgC;AACxF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,yCAAyC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,KAAK;AAC7C,cAAc,oCAAoC,GAAG,IAAI;AACzD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,YAAY;AACxB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,qBAAqB;AAChD,IAAI,iCAAiC;AACrC,qBAAqB,iCAAiC;AACtD;AACA;AACA;AACA,gCAAgC,qDAAM;AACtC,8BAA8B,2DAAY;AAC1C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,2DAAY;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,2DAAY;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iEAAkB,KAAK,0DAAS;AACpC,IAAI,iEAAkB,KAAK,0DAAS;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAAe;AACf;AACA,8DAAe;;AAE+D;AAC9E;;;;;;;;;;;;;;;;;;ACloCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,4BAA4B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,IAAI,KAAK,cAAc;AACnD;AACA;AACA,sFAAsF,QAAQ;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,IAAI;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;;AAE4D;AAC5D;;;;;;;;;;;;;;;;;;;;;;;;AC1NiC;AACe;AACT;AAC+F;AAC5C;;AAE1F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,sCAAsC;;AAEvC;AACA;AACA;AACA;AACA,mEAAmE;AACnE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC,kCAAkC;;AAEnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,oBAAoB;AACxC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB,2CAAM;AAC3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,UAAU,6CAAQ;AAClB,UAAU,6CAAQ;AAClB,UAAU,6CAAQ;AAClB;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,sBAAsB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,2CAAM;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,WAAW;AAC7B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iHAAiH,WAAW;AAC5H;AACA;AACA;AACA;AACA;AACA;AACA,gJAAgJ,qBAAqB;AACrK,+HAA+H,WAAW;AAC1I;AACA;AACA,yBAAyB,WAAW;AACpC,wHAAwH,WAAW;AACnI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,wDAAY;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4CAA4C,GAAG,mBAAmB;AAC1G;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,4CAA4C,GAAG,MAAM;AAC7F;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,uBAAuB,WAAW;AAClC,cAAc,SAAS,YAAY,UAAU;AAC7C;AACA,4BAA4B,0BAA0B;AACtD;AACA;AACA;AACA;AACA;AACA,qDAAqD,UAAU;AAC/D,KAAK;AACL;AACA,mBAAmB,kCAAkC;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kEAAkE,mBAAmB,6CAA6C;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,UAAU;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iEAAkB,KAAK,0DAAS;AACpC,IAAI,iEAAkB,KAAK,0DAAS;AACpC,IAAI,8DAAe;AACnB;AACA,IAAI,8DAAe;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,yEAAyB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,oEAAoB;AAC5B,QAAQ,iEAAiB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,qDAAM;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,WAAW,2DAAY,CAAC,kEAAkB;AAC1C;AACA;AACA,mBAAmB,iBAAiB;AACpC,gFAAgF;AAChF;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kEAAkB;AAClC;AACA;AACA;AACA,wDAAwD,iBAAiB;AACzE,QAAQ,iBAAiB;AACzB;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kEAAkB;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,iBAAiB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kEAAkB;AAClC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEoH;AACpH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChtCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA,gBAAgB,SAAS;AACzB;AACA;AACA;AACA;AACA;AACA,oBAAoB,eAAe;AACnC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;AACtD;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,kBAAkB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,iBAAiB;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,8BAA8B;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,qBAAM;AACrB,eAAe,qBAAM;AACrB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iEAAiE;AACjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,EAAE;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD,YAAY;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kDAAkD;AAClD;AACA,wCAAwC,MAAM;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,QAAQ;AAC5C;AACA;AACA;AACA;AACA;AACA,2CAA2C,QAAQ,wEAAwE,KAAK;;AAEhI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,QAAQ;AACvD;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,qBAAM;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gDAAgD,MAAM;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,iBAAiB;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,aAAa,GAAG,KAAK;AACjD;AACA;AACA;AACA,+BAA+B,iBAAiB,IAAI,SAAS,GAAG,SAAS;AACzE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mDAAmD,IAAI;AACvD,KAAK;AACL;AACA,mBAAmB,MAAM,IAAI;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY,GAAG;AACf;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,GAAG;AACd,YAAY,QAAQ;AACpB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,aAAa,WAAW;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,yBAAyB;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,yBAAyB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,wBAAwB,oBAAoB;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,4BAA4B,QAAQ;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,QAAQ;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,SAAS;AAClD;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,wBAAwB,OAAO;AAC/B,6BAA6B,QAAQ;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB,2BAA2B;AACnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,cAAc,QAAQ,UAAU,SAAS;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA,qCAAqC;AACrC;AACA;AACA,oDAAoD;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAiD;AACjD,WAAW,QAAQ;AACnB,YAAY;AACZ;AACA;AACA;AACA,oBAAoB,gBAAgB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,EAAE;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAE6/B;AAC7/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACllEgD;AAClB;;AAE9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAAe;AACf;;;;;;;;;;;;;;;;;;;;ACvBoC;AACpC;;;;;;;;;;;;;;;;;;;ACDmE;AACN;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,yCAAyC,IAAI;AAC9E;AACA,wBAAwB,qDAAI;AAC5B;AACA;AACA,oBAAoB,qDAAI,sDAAsD,qDAAI;AAClF,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,UAAU,IAAI;AACxC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,qDAAI;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qDAAY;AACZ;AACA;AACA;AACA,CAAC;;AAE2B;;;;;;;;;;;;;;;;;;;AC9F5B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEqG;;;;;;;;;;;ACxLxF;;AAEb,QAAQ,mBAAO,CAAC,4BAAW;AAC3B,IAAI,KAAqC,EAAE,EAG1C,CAAC;AACF;AACA,EAAE,kBAAkB;AACpB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA,EAAE,mBAAmB;AACrB;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxB+C;AAGxC,MAAMC,QAAQ,GAAG,YAAY,IAAID,wDAAe,IAAI,MAAM,CAAC;AAG3D,MAAME,OAAO,GAAG,kCAAkC;AAGlD,MAAMC,WAAW,GAAG;EAACC,MAAM,EAAE,eAAe;EAAEC,KAAK,EAAE;AAAgB,CAAC;AAGtE,MAAMC,YAAY,GAAGH,WAAW,CAACC,MAAM;AAGvC,MAAMG,eAAe,GAAG,IAAI;AAG5B,MAAMC,cAAc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","sources":["webpack://tinode-webapp/./node_modules/@firebase/app/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/component/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/installations/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/logger/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/messaging/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/util/dist/index.esm2017.js","webpack://tinode-webapp/./node_modules/firebase/app/dist/esm/index.esm.js","webpack://tinode-webapp/./node_modules/firebase/messaging/dist/esm/index.esm.js","webpack://tinode-webapp/./node_modules/idb/build/index.js","webpack://tinode-webapp/./node_modules/idb/build/wrap-idb-value.js","webpack://tinode-webapp/./node_modules/react-dom/client.js","webpack://tinode-webapp/./src/config.js","webpack://tinode-webapp/./src/constants.js","webpack://tinode-webapp/./src/lib/blob-helpers.js","webpack://tinode-webapp/./src/lib/formatters.js","webpack://tinode-webapp/./src/lib/host-name.js","webpack://tinode-webapp/./src/lib/local-storage.js","webpack://tinode-webapp/./src/lib/navigation.js","webpack://tinode-webapp/./src/lib/strformat.js","webpack://tinode-webapp/./src/lib/utils.js","webpack://tinode-webapp/./src/version.js","webpack://tinode-webapp/./src/views/acc-notifications-view.jsx","webpack://tinode-webapp/./src/views/acc-security-view.jsx","webpack://tinode-webapp/./src/views/acc-support-view.jsx","webpack://tinode-webapp/./src/views/contacts-view.jsx","webpack://tinode-webapp/./src/views/info-view.jsx","webpack://tinode-webapp/./src/views/login-view.jsx","webpack://tinode-webapp/./src/views/logo-view.jsx","webpack://tinode-webapp/./src/views/messages-view.jsx","webpack://tinode-webapp/./src/views/new-topic-view.jsx","webpack://tinode-webapp/./src/views/settings-view.jsx","webpack://tinode-webapp/./src/views/sidepanel-view.jsx","webpack://tinode-webapp/./src/views/tinode-web.jsx","webpack://tinode-webapp/./src/views/topic-common-view.jsx","webpack://tinode-webapp/./src/views/validation-view.jsx","webpack://tinode-webapp/./src/widgets/alert.jsx","webpack://tinode-webapp/./src/widgets/attachment.jsx","webpack://tinode-webapp/./src/widgets/audio-player.jsx","webpack://tinode-webapp/./src/widgets/avatar-crop.jsx","webpack://tinode-webapp/./src/widgets/avatar-upload.jsx","webpack://tinode-webapp/./src/widgets/badge-list.jsx","webpack://tinode-webapp/./src/widgets/button-back.jsx","webpack://tinode-webapp/./src/widgets/call-incoming.jsx","webpack://tinode-webapp/./src/widgets/call-message.jsx","webpack://tinode-webapp/./src/widgets/call-panel.jsx","webpack://tinode-webapp/./src/widgets/call-status.jsx","webpack://tinode-webapp/./src/widgets/chat-message.jsx","webpack://tinode-webapp/./src/widgets/checkbox.jsx","webpack://tinode-webapp/./src/widgets/chip-input.jsx","webpack://tinode-webapp/./src/widgets/chip.jsx","webpack://tinode-webapp/./src/widgets/contact-action.jsx","webpack://tinode-webapp/./src/widgets/contact-badges.jsx","webpack://tinode-webapp/./src/widgets/contact-list.jsx","webpack://tinode-webapp/./src/widgets/contact.jsx","webpack://tinode-webapp/./src/widgets/context-menu.jsx","webpack://tinode-webapp/./src/widgets/cropper.jsx","webpack://tinode-webapp/./src/widgets/doc-preview.jsx","webpack://tinode-webapp/./src/widgets/error-panel.jsx","webpack://tinode-webapp/./src/widgets/file-progress.jsx","webpack://tinode-webapp/./src/widgets/forward-dialog.jsx","webpack://tinode-webapp/./src/widgets/group-manager.jsx","webpack://tinode-webapp/./src/widgets/group-subs.jsx","webpack://tinode-webapp/./src/widgets/host-selector.jsx","webpack://tinode-webapp/./src/widgets/image-preview.jsx","webpack://tinode-webapp/./src/widgets/in-place-edit.jsx","webpack://tinode-webapp/./src/widgets/inline-video.jsx","webpack://tinode-webapp/./src/widgets/invitation.jsx","webpack://tinode-webapp/./src/widgets/lazy-image.jsx","webpack://tinode-webapp/./src/widgets/letter-tile.jsx","webpack://tinode-webapp/./src/widgets/load-spinner.jsx","webpack://tinode-webapp/./src/widgets/menu-cancel.jsx","webpack://tinode-webapp/./src/widgets/menu-contacts.jsx","webpack://tinode-webapp/./src/widgets/menu-start.jsx","webpack://tinode-webapp/./src/widgets/meta-message.jsx","webpack://tinode-webapp/./src/widgets/new-topic-by-id.jsx","webpack://tinode-webapp/./src/widgets/new-topic-group.jsx","webpack://tinode-webapp/./src/widgets/permissions-editor.jsx","webpack://tinode-webapp/./src/widgets/received-marker.jsx","webpack://tinode-webapp/./src/widgets/search-contacts.jsx","webpack://tinode-webapp/./src/widgets/send-message.jsx","webpack://tinode-webapp/./src/widgets/show-qrcode.jsx","webpack://tinode-webapp/./src/widgets/side-navbar.jsx","webpack://tinode-webapp/./src/widgets/tag-manager.jsx","webpack://tinode-webapp/./src/widgets/topic-desc-edit.jsx","webpack://tinode-webapp/./src/widgets/topic-security.jsx","webpack://tinode-webapp/./src/widgets/unread-badge.jsx","webpack://tinode-webapp/./src/widgets/uploading-image.jsx","webpack://tinode-webapp/./src/widgets/video-preview.jsx","webpack://tinode-webapp/./src/widgets/visible-password.jsx","webpack://tinode-webapp/external var \"QRCode\"","webpack://tinode-webapp/external var \"React\"","webpack://tinode-webapp/external var \"ReactDOM\"","webpack://tinode-webapp/external var \"ReactIntl\"","webpack://tinode-webapp/external var \"tinode\"","webpack://tinode-webapp/webpack/bootstrap","webpack://tinode-webapp/webpack/runtime/compat get default export","webpack://tinode-webapp/webpack/runtime/create fake namespace object","webpack://tinode-webapp/webpack/runtime/define property getters","webpack://tinode-webapp/webpack/runtime/ensure chunk","webpack://tinode-webapp/webpack/runtime/get javascript chunk filename","webpack://tinode-webapp/webpack/runtime/global","webpack://tinode-webapp/webpack/runtime/hasOwnProperty shorthand","webpack://tinode-webapp/webpack/runtime/load script","webpack://tinode-webapp/webpack/runtime/make namespace object","webpack://tinode-webapp/webpack/runtime/publicPath","webpack://tinode-webapp/webpack/runtime/jsonp chunk loading","webpack://tinode-webapp/./src/index.js"],"sourcesContent":["import { Component, ComponentContainer } from '@firebase/component';\nimport { Logger, setUserLogHandler, setLogLevel as setLogLevel$1 } from '@firebase/logger';\nimport { ErrorFactory, getDefaultAppConfig, deepEqual, isBrowser, isWebWorker, FirebaseError, base64urlEncodeWithoutPadding, isIndexedDBAvailable, validateIndexedDBOpenable } from '@firebase/util';\nexport { FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PlatformLoggerServiceImpl {\r\n constructor(container) {\r\n this.container = container;\r\n }\r\n // In initial implementation, this will be called by installations on\r\n // auth token refresh, and installations will send this string.\r\n getPlatformInfoString() {\r\n const providers = this.container.getProviders();\r\n // Loop through providers and get library/version pairs from any that are\r\n // version components.\r\n return providers\r\n .map(provider => {\r\n if (isVersionServiceProvider(provider)) {\r\n const service = provider.getImmediate();\r\n return `${service.library}/${service.version}`;\r\n }\r\n else {\r\n return null;\r\n }\r\n })\r\n .filter(logString => logString)\r\n .join(' ');\r\n }\r\n}\r\n/**\r\n *\r\n * @param provider check if this provider provides a VersionService\r\n *\r\n * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider\r\n * provides VersionService. The provider is not necessarily a 'app-version'\r\n * provider.\r\n */\r\nfunction isVersionServiceProvider(provider) {\r\n const component = provider.getComponent();\r\n return (component === null || component === void 0 ? void 0 : component.type) === \"VERSION\" /* ComponentType.VERSION */;\r\n}\n\nconst name$q = \"@firebase/app\";\nconst version$1 = \"0.10.13\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logger = new Logger('@firebase/app');\n\nconst name$p = \"@firebase/app-compat\";\n\nconst name$o = \"@firebase/analytics-compat\";\n\nconst name$n = \"@firebase/analytics\";\n\nconst name$m = \"@firebase/app-check-compat\";\n\nconst name$l = \"@firebase/app-check\";\n\nconst name$k = \"@firebase/auth\";\n\nconst name$j = \"@firebase/auth-compat\";\n\nconst name$i = \"@firebase/database\";\n\nconst name$h = \"@firebase/data-connect\";\n\nconst name$g = \"@firebase/database-compat\";\n\nconst name$f = \"@firebase/functions\";\n\nconst name$e = \"@firebase/functions-compat\";\n\nconst name$d = \"@firebase/installations\";\n\nconst name$c = \"@firebase/installations-compat\";\n\nconst name$b = \"@firebase/messaging\";\n\nconst name$a = \"@firebase/messaging-compat\";\n\nconst name$9 = \"@firebase/performance\";\n\nconst name$8 = \"@firebase/performance-compat\";\n\nconst name$7 = \"@firebase/remote-config\";\n\nconst name$6 = \"@firebase/remote-config-compat\";\n\nconst name$5 = \"@firebase/storage\";\n\nconst name$4 = \"@firebase/storage-compat\";\n\nconst name$3 = \"@firebase/firestore\";\n\nconst name$2 = \"@firebase/vertexai-preview\";\n\nconst name$1 = \"@firebase/firestore-compat\";\n\nconst name = \"firebase\";\nconst version = \"10.14.1\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The default app name\r\n *\r\n * @internal\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\r\nconst PLATFORM_LOG_STRING = {\r\n [name$q]: 'fire-core',\r\n [name$p]: 'fire-core-compat',\r\n [name$n]: 'fire-analytics',\r\n [name$o]: 'fire-analytics-compat',\r\n [name$l]: 'fire-app-check',\r\n [name$m]: 'fire-app-check-compat',\r\n [name$k]: 'fire-auth',\r\n [name$j]: 'fire-auth-compat',\r\n [name$i]: 'fire-rtdb',\r\n [name$h]: 'fire-data-connect',\r\n [name$g]: 'fire-rtdb-compat',\r\n [name$f]: 'fire-fn',\r\n [name$e]: 'fire-fn-compat',\r\n [name$d]: 'fire-iid',\r\n [name$c]: 'fire-iid-compat',\r\n [name$b]: 'fire-fcm',\r\n [name$a]: 'fire-fcm-compat',\r\n [name$9]: 'fire-perf',\r\n [name$8]: 'fire-perf-compat',\r\n [name$7]: 'fire-rc',\r\n [name$6]: 'fire-rc-compat',\r\n [name$5]: 'fire-gcs',\r\n [name$4]: 'fire-gcs-compat',\r\n [name$3]: 'fire-fst',\r\n [name$1]: 'fire-fst-compat',\r\n [name$2]: 'fire-vertex',\r\n 'fire-js': 'fire-js',\r\n [name]: 'fire-js-all'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @internal\r\n */\r\nconst _apps = new Map();\r\n/**\r\n * @internal\r\n */\r\nconst _serverApps = new Map();\r\n/**\r\n * Registered components.\r\n *\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst _components = new Map();\r\n/**\r\n * @param component - the component being added to this app's container\r\n *\r\n * @internal\r\n */\r\nfunction _addComponent(app, component) {\r\n try {\r\n app.container.addComponent(component);\r\n }\r\n catch (e) {\r\n logger.debug(`Component ${component.name} failed to register with FirebaseApp ${app.name}`, e);\r\n }\r\n}\r\n/**\r\n *\r\n * @internal\r\n */\r\nfunction _addOrOverwriteComponent(app, component) {\r\n app.container.addOrOverwriteComponent(component);\r\n}\r\n/**\r\n *\r\n * @param component - the component to register\r\n * @returns whether or not the component is registered successfully\r\n *\r\n * @internal\r\n */\r\nfunction _registerComponent(component) {\r\n const componentName = component.name;\r\n if (_components.has(componentName)) {\r\n logger.debug(`There were multiple attempts to register component ${componentName}.`);\r\n return false;\r\n }\r\n _components.set(componentName, component);\r\n // add the component to existing app instances\r\n for (const app of _apps.values()) {\r\n _addComponent(app, component);\r\n }\r\n for (const serverApp of _serverApps.values()) {\r\n _addComponent(serverApp, component);\r\n }\r\n return true;\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n *\r\n * @returns the provider for the service with the matching name\r\n *\r\n * @internal\r\n */\r\nfunction _getProvider(app, name) {\r\n const heartbeatController = app.container\r\n .getProvider('heartbeat')\r\n .getImmediate({ optional: true });\r\n if (heartbeatController) {\r\n void heartbeatController.triggerHeartbeat();\r\n }\r\n return app.container.getProvider(name);\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n * @param instanceIdentifier - service instance identifier in case the service supports multiple instances\r\n *\r\n * @internal\r\n */\r\nfunction _removeServiceInstance(app, name, instanceIdentifier = DEFAULT_ENTRY_NAME) {\r\n _getProvider(app, name).clearInstance(instanceIdentifier);\r\n}\r\n/**\r\n *\r\n * @param obj - an object of type FirebaseApp or FirebaseOptions.\r\n *\r\n * @returns true if the provide object is of type FirebaseApp.\r\n *\r\n * @internal\r\n */\r\nfunction _isFirebaseApp(obj) {\r\n return obj.options !== undefined;\r\n}\r\n/**\r\n *\r\n * @param obj - an object of type FirebaseApp.\r\n *\r\n * @returns true if the provided object is of type FirebaseServerAppImpl.\r\n *\r\n * @internal\r\n */\r\nfunction _isFirebaseServerApp(obj) {\r\n return obj.settings !== undefined;\r\n}\r\n/**\r\n * Test only\r\n *\r\n * @internal\r\n */\r\nfunction _clearComponents() {\r\n _components.clear();\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERRORS = {\r\n [\"no-app\" /* AppError.NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\r\n 'call initializeApp() first',\r\n [\"bad-app-name\" /* AppError.BAD_APP_NAME */]: \"Illegal App name: '{$appName}'\",\r\n [\"duplicate-app\" /* AppError.DUPLICATE_APP */]: \"Firebase App named '{$appName}' already exists with different options or config\",\r\n [\"app-deleted\" /* AppError.APP_DELETED */]: \"Firebase App named '{$appName}' already deleted\",\r\n [\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */]: 'Firebase Server App has been deleted',\r\n [\"no-options\" /* AppError.NO_OPTIONS */]: 'Need to provide options, when not being deployed to hosting via source.',\r\n [\"invalid-app-argument\" /* AppError.INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\r\n 'Firebase App instance.',\r\n [\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */]: 'First argument to `onLog` must be null or a function.',\r\n [\"idb-open\" /* AppError.IDB_OPEN */]: 'Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-get\" /* AppError.IDB_GET */]: 'Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-set\" /* AppError.IDB_WRITE */]: 'Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-delete\" /* AppError.IDB_DELETE */]: 'Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */]: 'FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.',\r\n [\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */]: 'FirebaseServerApp is not for use in browser environments.'\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory('app', 'Firebase', ERRORS);\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FirebaseAppImpl {\r\n constructor(options, config, container) {\r\n this._isDeleted = false;\r\n this._options = Object.assign({}, options);\r\n this._config = Object.assign({}, config);\r\n this._name = config.name;\r\n this._automaticDataCollectionEnabled =\r\n config.automaticDataCollectionEnabled;\r\n this._container = container;\r\n this.container.addComponent(new Component('app', () => this, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n }\r\n get automaticDataCollectionEnabled() {\r\n this.checkDestroyed();\r\n return this._automaticDataCollectionEnabled;\r\n }\r\n set automaticDataCollectionEnabled(val) {\r\n this.checkDestroyed();\r\n this._automaticDataCollectionEnabled = val;\r\n }\r\n get name() {\r\n this.checkDestroyed();\r\n return this._name;\r\n }\r\n get options() {\r\n this.checkDestroyed();\r\n return this._options;\r\n }\r\n get config() {\r\n this.checkDestroyed();\r\n return this._config;\r\n }\r\n get container() {\r\n return this._container;\r\n }\r\n get isDeleted() {\r\n return this._isDeleted;\r\n }\r\n set isDeleted(val) {\r\n this._isDeleted = val;\r\n }\r\n /**\r\n * This function will throw an Error if the App has already been deleted -\r\n * use before performing API actions on the App.\r\n */\r\n checkDestroyed() {\r\n if (this.isDeleted) {\r\n throw ERROR_FACTORY.create(\"app-deleted\" /* AppError.APP_DELETED */, { appName: this._name });\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2023 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FirebaseServerAppImpl extends FirebaseAppImpl {\r\n constructor(options, serverConfig, name, container) {\r\n // Build configuration parameters for the FirebaseAppImpl base class.\r\n const automaticDataCollectionEnabled = serverConfig.automaticDataCollectionEnabled !== undefined\r\n ? serverConfig.automaticDataCollectionEnabled\r\n : false;\r\n // Create the FirebaseAppSettings object for the FirebaseAppImp constructor.\r\n const config = {\r\n name,\r\n automaticDataCollectionEnabled\r\n };\r\n if (options.apiKey !== undefined) {\r\n // Construct the parent FirebaseAppImp object.\r\n super(options, config, container);\r\n }\r\n else {\r\n const appImpl = options;\r\n super(appImpl.options, config, container);\r\n }\r\n // Now construct the data for the FirebaseServerAppImpl.\r\n this._serverConfig = Object.assign({ automaticDataCollectionEnabled }, serverConfig);\r\n this._finalizationRegistry = null;\r\n if (typeof FinalizationRegistry !== 'undefined') {\r\n this._finalizationRegistry = new FinalizationRegistry(() => {\r\n this.automaticCleanup();\r\n });\r\n }\r\n this._refCount = 0;\r\n this.incRefCount(this._serverConfig.releaseOnDeref);\r\n // Do not retain a hard reference to the dref object, otherwise the FinalizationRegistry\r\n // will never trigger.\r\n this._serverConfig.releaseOnDeref = undefined;\r\n serverConfig.releaseOnDeref = undefined;\r\n registerVersion(name$q, version$1, 'serverapp');\r\n }\r\n toJSON() {\r\n return undefined;\r\n }\r\n get refCount() {\r\n return this._refCount;\r\n }\r\n // Increment the reference count of this server app. If an object is provided, register it\r\n // with the finalization registry.\r\n incRefCount(obj) {\r\n if (this.isDeleted) {\r\n return;\r\n }\r\n this._refCount++;\r\n if (obj !== undefined && this._finalizationRegistry !== null) {\r\n this._finalizationRegistry.register(obj, this);\r\n }\r\n }\r\n // Decrement the reference count.\r\n decRefCount() {\r\n if (this.isDeleted) {\r\n return 0;\r\n }\r\n return --this._refCount;\r\n }\r\n // Invoked by the FinalizationRegistry callback to note that this app should go through its\r\n // reference counts and delete itself if no reference count remain. The coordinating logic that\r\n // handles this is in deleteApp(...).\r\n automaticCleanup() {\r\n void deleteApp(this);\r\n }\r\n get settings() {\r\n this.checkDestroyed();\r\n return this._serverConfig;\r\n }\r\n /**\r\n * This function will throw an Error if the App has already been deleted -\r\n * use before performing API actions on the App.\r\n */\r\n checkDestroyed() {\r\n if (this.isDeleted) {\r\n throw ERROR_FACTORY.create(\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The current SDK version.\r\n *\r\n * @public\r\n */\r\nconst SDK_VERSION = version;\r\nfunction initializeApp(_options, rawConfig = {}) {\r\n let options = _options;\r\n if (typeof rawConfig !== 'object') {\r\n const name = rawConfig;\r\n rawConfig = { name };\r\n }\r\n const config = Object.assign({ name: DEFAULT_ENTRY_NAME, automaticDataCollectionEnabled: false }, rawConfig);\r\n const name = config.name;\r\n if (typeof name !== 'string' || !name) {\r\n throw ERROR_FACTORY.create(\"bad-app-name\" /* AppError.BAD_APP_NAME */, {\r\n appName: String(name)\r\n });\r\n }\r\n options || (options = getDefaultAppConfig());\r\n if (!options) {\r\n throw ERROR_FACTORY.create(\"no-options\" /* AppError.NO_OPTIONS */);\r\n }\r\n const existingApp = _apps.get(name);\r\n if (existingApp) {\r\n // return the existing app if options and config deep equal the ones in the existing app.\r\n if (deepEqual(options, existingApp.options) &&\r\n deepEqual(config, existingApp.config)) {\r\n return existingApp;\r\n }\r\n else {\r\n throw ERROR_FACTORY.create(\"duplicate-app\" /* AppError.DUPLICATE_APP */, { appName: name });\r\n }\r\n }\r\n const container = new ComponentContainer(name);\r\n for (const component of _components.values()) {\r\n container.addComponent(component);\r\n }\r\n const newApp = new FirebaseAppImpl(options, config, container);\r\n _apps.set(name, newApp);\r\n return newApp;\r\n}\r\nfunction initializeServerApp(_options, _serverAppConfig) {\r\n if (isBrowser() && !isWebWorker()) {\r\n // FirebaseServerApp isn't designed to be run in browsers.\r\n throw ERROR_FACTORY.create(\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */);\r\n }\r\n if (_serverAppConfig.automaticDataCollectionEnabled === undefined) {\r\n _serverAppConfig.automaticDataCollectionEnabled = false;\r\n }\r\n let appOptions;\r\n if (_isFirebaseApp(_options)) {\r\n appOptions = _options.options;\r\n }\r\n else {\r\n appOptions = _options;\r\n }\r\n // Build an app name based on a hash of the configuration options.\r\n const nameObj = Object.assign(Object.assign({}, _serverAppConfig), appOptions);\r\n // However, Do not mangle the name based on releaseOnDeref, since it will vary between the\r\n // construction of FirebaseServerApp instances. For example, if the object is the request headers.\r\n if (nameObj.releaseOnDeref !== undefined) {\r\n delete nameObj.releaseOnDeref;\r\n }\r\n const hashCode = (s) => {\r\n return [...s].reduce((hash, c) => (Math.imul(31, hash) + c.charCodeAt(0)) | 0, 0);\r\n };\r\n if (_serverAppConfig.releaseOnDeref !== undefined) {\r\n if (typeof FinalizationRegistry === 'undefined') {\r\n throw ERROR_FACTORY.create(\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */, {});\r\n }\r\n }\r\n const nameString = '' + hashCode(JSON.stringify(nameObj));\r\n const existingApp = _serverApps.get(nameString);\r\n if (existingApp) {\r\n existingApp.incRefCount(_serverAppConfig.releaseOnDeref);\r\n return existingApp;\r\n }\r\n const container = new ComponentContainer(nameString);\r\n for (const component of _components.values()) {\r\n container.addComponent(component);\r\n }\r\n const newApp = new FirebaseServerAppImpl(appOptions, _serverAppConfig, nameString, container);\r\n _serverApps.set(nameString, newApp);\r\n return newApp;\r\n}\r\n/**\r\n * Retrieves a {@link @firebase/app#FirebaseApp} instance.\r\n *\r\n * When called with no arguments, the default app is returned. When an app name\r\n * is provided, the app corresponding to that name is returned.\r\n *\r\n * An exception is thrown if the app being retrieved has not yet been\r\n * initialized.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return the default app\r\n * const app = getApp();\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return a named app\r\n * const otherApp = getApp(\"otherApp\");\r\n * ```\r\n *\r\n * @param name - Optional name of the app to return. If no name is\r\n * provided, the default is `\"[DEFAULT]\"`.\r\n *\r\n * @returns The app corresponding to the provided app name.\r\n * If no app name is provided, the default app is returned.\r\n *\r\n * @public\r\n */\r\nfunction getApp(name = DEFAULT_ENTRY_NAME) {\r\n const app = _apps.get(name);\r\n if (!app && name === DEFAULT_ENTRY_NAME && getDefaultAppConfig()) {\r\n return initializeApp();\r\n }\r\n if (!app) {\r\n throw ERROR_FACTORY.create(\"no-app\" /* AppError.NO_APP */, { appName: name });\r\n }\r\n return app;\r\n}\r\n/**\r\n * A (read-only) array of all initialized apps.\r\n * @public\r\n */\r\nfunction getApps() {\r\n return Array.from(_apps.values());\r\n}\r\n/**\r\n * Renders this app unusable and frees the resources of all associated\r\n * services.\r\n *\r\n * @example\r\n * ```javascript\r\n * deleteApp(app)\r\n * .then(function() {\r\n * console.log(\"App deleted successfully\");\r\n * })\r\n * .catch(function(error) {\r\n * console.log(\"Error deleting app:\", error);\r\n * });\r\n * ```\r\n *\r\n * @public\r\n */\r\nasync function deleteApp(app) {\r\n let cleanupProviders = false;\r\n const name = app.name;\r\n if (_apps.has(name)) {\r\n cleanupProviders = true;\r\n _apps.delete(name);\r\n }\r\n else if (_serverApps.has(name)) {\r\n const firebaseServerApp = app;\r\n if (firebaseServerApp.decRefCount() <= 0) {\r\n _serverApps.delete(name);\r\n cleanupProviders = true;\r\n }\r\n }\r\n if (cleanupProviders) {\r\n await Promise.all(app.container\r\n .getProviders()\r\n .map(provider => provider.delete()));\r\n app.isDeleted = true;\r\n }\r\n}\r\n/**\r\n * Registers a library's name and version for platform logging purposes.\r\n * @param library - Name of 1p or 3p library (e.g. firestore, angularfire)\r\n * @param version - Current version of that library.\r\n * @param variant - Bundle variant, e.g., node, rn, etc.\r\n *\r\n * @public\r\n */\r\nfunction registerVersion(libraryKeyOrName, version, variant) {\r\n var _a;\r\n // TODO: We can use this check to whitelist strings when/if we set up\r\n // a good whitelist system.\r\n let library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName;\r\n if (variant) {\r\n library += `-${variant}`;\r\n }\r\n const libraryMismatch = library.match(/\\s|\\//);\r\n const versionMismatch = version.match(/\\s|\\//);\r\n if (libraryMismatch || versionMismatch) {\r\n const warning = [\r\n `Unable to register library \"${library}\" with version \"${version}\":`\r\n ];\r\n if (libraryMismatch) {\r\n warning.push(`library name \"${library}\" contains illegal characters (whitespace or \"/\")`);\r\n }\r\n if (libraryMismatch && versionMismatch) {\r\n warning.push('and');\r\n }\r\n if (versionMismatch) {\r\n warning.push(`version name \"${version}\" contains illegal characters (whitespace or \"/\")`);\r\n }\r\n logger.warn(warning.join(' '));\r\n return;\r\n }\r\n _registerComponent(new Component(`${library}-version`, () => ({ library, version }), \"VERSION\" /* ComponentType.VERSION */));\r\n}\r\n/**\r\n * Sets log handler for all Firebase SDKs.\r\n * @param logCallback - An optional custom log handler that executes user code whenever\r\n * the Firebase SDK makes a logging call.\r\n *\r\n * @public\r\n */\r\nfunction onLog(logCallback, options) {\r\n if (logCallback !== null && typeof logCallback !== 'function') {\r\n throw ERROR_FACTORY.create(\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */);\r\n }\r\n setUserLogHandler(logCallback, options);\r\n}\r\n/**\r\n * Sets log level for all Firebase SDKs.\r\n *\r\n * All of the log types above the current log level are captured (i.e. if\r\n * you set the log level to `info`, errors are logged, but `debug` and\r\n * `verbose` logs are not).\r\n *\r\n * @public\r\n */\r\nfunction setLogLevel(logLevel) {\r\n setLogLevel$1(logLevel);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DB_NAME = 'firebase-heartbeat-database';\r\nconst DB_VERSION = 1;\r\nconst STORE_NAME = 'firebase-heartbeat-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDB(DB_NAME, DB_VERSION, {\r\n upgrade: (db, oldVersion) => {\r\n // We don't use 'break' in this switch statement, the fall-through\r\n // behavior is what we want, because if there are multiple versions between\r\n // the old version and the current version, we want ALL the migrations\r\n // that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (oldVersion) {\r\n case 0:\r\n try {\r\n db.createObjectStore(STORE_NAME);\r\n }\r\n catch (e) {\r\n // Safari/iOS browsers throw occasional exceptions on\r\n // db.createObjectStore() that may be a bug. Avoid blocking\r\n // the rest of the app functionality.\r\n console.warn(e);\r\n }\r\n }\r\n }\r\n }).catch(e => {\r\n throw ERROR_FACTORY.create(\"idb-open\" /* AppError.IDB_OPEN */, {\r\n originalErrorMessage: e.message\r\n });\r\n });\r\n }\r\n return dbPromise;\r\n}\r\nasync function readHeartbeatsFromIndexedDB(app) {\r\n try {\r\n const db = await getDbPromise();\r\n const tx = db.transaction(STORE_NAME);\r\n const result = await tx.objectStore(STORE_NAME).get(computeKey(app));\r\n // We already have the value but tx.done can throw,\r\n // so we need to await it here to catch errors\r\n await tx.done;\r\n return result;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n logger.warn(e.message);\r\n }\r\n else {\r\n const idbGetError = ERROR_FACTORY.create(\"idb-get\" /* AppError.IDB_GET */, {\r\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n logger.warn(idbGetError.message);\r\n }\r\n }\r\n}\r\nasync function writeHeartbeatsToIndexedDB(app, heartbeatObject) {\r\n try {\r\n const db = await getDbPromise();\r\n const tx = db.transaction(STORE_NAME, 'readwrite');\r\n const objectStore = tx.objectStore(STORE_NAME);\r\n await objectStore.put(heartbeatObject, computeKey(app));\r\n await tx.done;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n logger.warn(e.message);\r\n }\r\n else {\r\n const idbGetError = ERROR_FACTORY.create(\"idb-set\" /* AppError.IDB_WRITE */, {\r\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n logger.warn(idbGetError.message);\r\n }\r\n }\r\n}\r\nfunction computeKey(app) {\r\n return `${app.name}!${app.options.appId}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst MAX_HEADER_BYTES = 1024;\r\n// 30 days\r\nconst STORED_HEARTBEAT_RETENTION_MAX_MILLIS = 30 * 24 * 60 * 60 * 1000;\r\nclass HeartbeatServiceImpl {\r\n constructor(container) {\r\n this.container = container;\r\n /**\r\n * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate\r\n * the header string.\r\n * Stores one record per date. This will be consolidated into the standard\r\n * format of one record per user agent string before being sent as a header.\r\n * Populated from indexedDB when the controller is instantiated and should\r\n * be kept in sync with indexedDB.\r\n * Leave public for easier testing.\r\n */\r\n this._heartbeatsCache = null;\r\n const app = this.container.getProvider('app').getImmediate();\r\n this._storage = new HeartbeatStorageImpl(app);\r\n this._heartbeatsCachePromise = this._storage.read().then(result => {\r\n this._heartbeatsCache = result;\r\n return result;\r\n });\r\n }\r\n /**\r\n * Called to report a heartbeat. The function will generate\r\n * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it\r\n * to IndexedDB.\r\n * Note that we only store one heartbeat per day. So if a heartbeat for today is\r\n * already logged, subsequent calls to this function in the same day will be ignored.\r\n */\r\n async triggerHeartbeat() {\r\n var _a, _b;\r\n try {\r\n const platformLogger = this.container\r\n .getProvider('platform-logger')\r\n .getImmediate();\r\n // This is the \"Firebase user agent\" string from the platform logger\r\n // service, not the browser user agent.\r\n const agent = platformLogger.getPlatformInfoString();\r\n const date = getUTCDateString();\r\n if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null) {\r\n this._heartbeatsCache = await this._heartbeatsCachePromise;\r\n // If we failed to construct a heartbeats cache, then return immediately.\r\n if (((_b = this._heartbeatsCache) === null || _b === void 0 ? void 0 : _b.heartbeats) == null) {\r\n return;\r\n }\r\n }\r\n // Do not store a heartbeat if one is already stored for this day\r\n // or if a header has already been sent today.\r\n if (this._heartbeatsCache.lastSentHeartbeatDate === date ||\r\n this._heartbeatsCache.heartbeats.some(singleDateHeartbeat => singleDateHeartbeat.date === date)) {\r\n return;\r\n }\r\n else {\r\n // There is no entry for this date. Create one.\r\n this._heartbeatsCache.heartbeats.push({ date, agent });\r\n }\r\n // Remove entries older than 30 days.\r\n this._heartbeatsCache.heartbeats =\r\n this._heartbeatsCache.heartbeats.filter(singleDateHeartbeat => {\r\n const hbTimestamp = new Date(singleDateHeartbeat.date).valueOf();\r\n const now = Date.now();\r\n return now - hbTimestamp <= STORED_HEARTBEAT_RETENTION_MAX_MILLIS;\r\n });\r\n return this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n catch (e) {\r\n logger.warn(e);\r\n }\r\n }\r\n /**\r\n * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly.\r\n * It also clears all heartbeats from memory as well as in IndexedDB.\r\n *\r\n * NOTE: Consuming product SDKs should not send the header if this method\r\n * returns an empty string.\r\n */\r\n async getHeartbeatsHeader() {\r\n var _a;\r\n try {\r\n if (this._heartbeatsCache === null) {\r\n await this._heartbeatsCachePromise;\r\n }\r\n // If it's still null or the array is empty, there is no data to send.\r\n if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null ||\r\n this._heartbeatsCache.heartbeats.length === 0) {\r\n return '';\r\n }\r\n const date = getUTCDateString();\r\n // Extract as many heartbeats from the cache as will fit under the size limit.\r\n const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(this._heartbeatsCache.heartbeats);\r\n const headerString = base64urlEncodeWithoutPadding(JSON.stringify({ version: 2, heartbeats: heartbeatsToSend }));\r\n // Store last sent date to prevent another being logged/sent for the same day.\r\n this._heartbeatsCache.lastSentHeartbeatDate = date;\r\n if (unsentEntries.length > 0) {\r\n // Store any unsent entries if they exist.\r\n this._heartbeatsCache.heartbeats = unsentEntries;\r\n // This seems more likely than emptying the array (below) to lead to some odd state\r\n // since the cache isn't empty and this will be called again on the next request,\r\n // and is probably safest if we await it.\r\n await this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n else {\r\n this._heartbeatsCache.heartbeats = [];\r\n // Do not wait for this, to reduce latency.\r\n void this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n return headerString;\r\n }\r\n catch (e) {\r\n logger.warn(e);\r\n return '';\r\n }\r\n }\r\n}\r\nfunction getUTCDateString() {\r\n const today = new Date();\r\n // Returns date format 'YYYY-MM-DD'\r\n return today.toISOString().substring(0, 10);\r\n}\r\nfunction extractHeartbeatsForHeader(heartbeatsCache, maxSize = MAX_HEADER_BYTES) {\r\n // Heartbeats grouped by user agent in the standard format to be sent in\r\n // the header.\r\n const heartbeatsToSend = [];\r\n // Single date format heartbeats that are not sent.\r\n let unsentEntries = heartbeatsCache.slice();\r\n for (const singleDateHeartbeat of heartbeatsCache) {\r\n // Look for an existing entry with the same user agent.\r\n const heartbeatEntry = heartbeatsToSend.find(hb => hb.agent === singleDateHeartbeat.agent);\r\n if (!heartbeatEntry) {\r\n // If no entry for this user agent exists, create one.\r\n heartbeatsToSend.push({\r\n agent: singleDateHeartbeat.agent,\r\n dates: [singleDateHeartbeat.date]\r\n });\r\n if (countBytes(heartbeatsToSend) > maxSize) {\r\n // If the header would exceed max size, remove the added heartbeat\r\n // entry and stop adding to the header.\r\n heartbeatsToSend.pop();\r\n break;\r\n }\r\n }\r\n else {\r\n heartbeatEntry.dates.push(singleDateHeartbeat.date);\r\n // If the header would exceed max size, remove the added date\r\n // and stop adding to the header.\r\n if (countBytes(heartbeatsToSend) > maxSize) {\r\n heartbeatEntry.dates.pop();\r\n break;\r\n }\r\n }\r\n // Pop unsent entry from queue. (Skipped if adding the entry exceeded\r\n // quota and the loop breaks early.)\r\n unsentEntries = unsentEntries.slice(1);\r\n }\r\n return {\r\n heartbeatsToSend,\r\n unsentEntries\r\n };\r\n}\r\nclass HeartbeatStorageImpl {\r\n constructor(app) {\r\n this.app = app;\r\n this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck();\r\n }\r\n async runIndexedDBEnvironmentCheck() {\r\n if (!isIndexedDBAvailable()) {\r\n return false;\r\n }\r\n else {\r\n return validateIndexedDBOpenable()\r\n .then(() => true)\r\n .catch(() => false);\r\n }\r\n }\r\n /**\r\n * Read all heartbeats.\r\n */\r\n async read() {\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return { heartbeats: [] };\r\n }\r\n else {\r\n const idbHeartbeatObject = await readHeartbeatsFromIndexedDB(this.app);\r\n if (idbHeartbeatObject === null || idbHeartbeatObject === void 0 ? void 0 : idbHeartbeatObject.heartbeats) {\r\n return idbHeartbeatObject;\r\n }\r\n else {\r\n return { heartbeats: [] };\r\n }\r\n }\r\n }\r\n // overwrite the storage with the provided heartbeats\r\n async overwrite(heartbeatsObject) {\r\n var _a;\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return;\r\n }\r\n else {\r\n const existingHeartbeatsObject = await this.read();\r\n return writeHeartbeatsToIndexedDB(this.app, {\r\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n heartbeats: heartbeatsObject.heartbeats\r\n });\r\n }\r\n }\r\n // add heartbeats\r\n async add(heartbeatsObject) {\r\n var _a;\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return;\r\n }\r\n else {\r\n const existingHeartbeatsObject = await this.read();\r\n return writeHeartbeatsToIndexedDB(this.app, {\r\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n heartbeats: [\r\n ...existingHeartbeatsObject.heartbeats,\r\n ...heartbeatsObject.heartbeats\r\n ]\r\n });\r\n }\r\n }\r\n}\r\n/**\r\n * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped\r\n * in a platform logging header JSON object, stringified, and converted\r\n * to base 64.\r\n */\r\nfunction countBytes(heartbeatsCache) {\r\n // base64 has a restricted set of characters, all of which should be 1 byte.\r\n return base64urlEncodeWithoutPadding(\r\n // heartbeatsCache wrapper properties\r\n JSON.stringify({ version: 2, heartbeats: heartbeatsCache })).length;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerCoreComponents(variant) {\r\n _registerComponent(new Component('platform-logger', container => new PlatformLoggerServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n _registerComponent(new Component('heartbeat', container => new HeartbeatServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n // Register `app` package.\r\n registerVersion(name$q, version$1, variant);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name$q, version$1, 'esm2017');\r\n // Register platform SDK identifier (no version).\r\n registerVersion('fire-js', '');\r\n}\n\n/**\r\n * Firebase App\r\n *\r\n * @remarks This package coordinates the communication between the different Firebase components\r\n * @packageDocumentation\r\n */\r\nregisterCoreComponents('');\n\nexport { SDK_VERSION, DEFAULT_ENTRY_NAME as _DEFAULT_ENTRY_NAME, _addComponent, _addOrOverwriteComponent, _apps, _clearComponents, _components, _getProvider, _isFirebaseApp, _isFirebaseServerApp, _registerComponent, _removeServiceInstance, _serverApps, deleteApp, getApp, getApps, initializeApp, initializeServerApp, onLog, registerVersion, setLogLevel };\n//# sourceMappingURL=index.esm2017.js.map\n","import { Deferred } from '@firebase/util';\n\n/**\r\n * Component for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass Component {\r\n /**\r\n *\r\n * @param name The public service name, e.g. app, auth, firestore, database\r\n * @param instanceFactory Service factory responsible for creating the public interface\r\n * @param type whether the service provided by the component is public or private\r\n */\r\n constructor(name, instanceFactory, type) {\r\n this.name = name;\r\n this.instanceFactory = instanceFactory;\r\n this.type = type;\r\n this.multipleInstances = false;\r\n /**\r\n * Properties to be added to the service namespace\r\n */\r\n this.serviceProps = {};\r\n this.instantiationMode = \"LAZY\" /* InstantiationMode.LAZY */;\r\n this.onInstanceCreated = null;\r\n }\r\n setInstantiationMode(mode) {\r\n this.instantiationMode = mode;\r\n return this;\r\n }\r\n setMultipleInstances(multipleInstances) {\r\n this.multipleInstances = multipleInstances;\r\n return this;\r\n }\r\n setServiceProps(props) {\r\n this.serviceProps = props;\r\n return this;\r\n }\r\n setInstanceCreatedCallback(callback) {\r\n this.onInstanceCreated = callback;\r\n return this;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\r\n * NameServiceMapping[T] is an alias for the type of the instance\r\n */\r\nclass Provider {\r\n constructor(name, container) {\r\n this.name = name;\r\n this.container = container;\r\n this.component = null;\r\n this.instances = new Map();\r\n this.instancesDeferred = new Map();\r\n this.instancesOptions = new Map();\r\n this.onInitCallbacks = new Map();\r\n }\r\n /**\r\n * @param identifier A provider can provide multiple instances of a service\r\n * if this.component.multipleInstances is true.\r\n */\r\n get(identifier) {\r\n // if multipleInstances is not supported, use the default name\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n if (!this.instancesDeferred.has(normalizedIdentifier)) {\r\n const deferred = new Deferred();\r\n this.instancesDeferred.set(normalizedIdentifier, deferred);\r\n if (this.isInitialized(normalizedIdentifier) ||\r\n this.shouldAutoInitialize()) {\r\n // initialize the service if it can be auto-initialized\r\n try {\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n if (instance) {\r\n deferred.resolve(instance);\r\n }\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception during get(), it should not cause\r\n // a fatal error. We just return the unresolved promise in this case.\r\n }\r\n }\r\n }\r\n return this.instancesDeferred.get(normalizedIdentifier).promise;\r\n }\r\n getImmediate(options) {\r\n var _a;\r\n // if multipleInstances is not supported, use the default name\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(options === null || options === void 0 ? void 0 : options.identifier);\r\n const optional = (_a = options === null || options === void 0 ? void 0 : options.optional) !== null && _a !== void 0 ? _a : false;\r\n if (this.isInitialized(normalizedIdentifier) ||\r\n this.shouldAutoInitialize()) {\r\n try {\r\n return this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n }\r\n catch (e) {\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n }\r\n else {\r\n // In case a component is not initialized and should/cannot be auto-initialized at the moment, return null if the optional flag is set, or throw\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw Error(`Service ${this.name} is not available`);\r\n }\r\n }\r\n }\r\n getComponent() {\r\n return this.component;\r\n }\r\n setComponent(component) {\r\n if (component.name !== this.name) {\r\n throw Error(`Mismatching Component ${component.name} for Provider ${this.name}.`);\r\n }\r\n if (this.component) {\r\n throw Error(`Component for ${this.name} has already been provided`);\r\n }\r\n this.component = component;\r\n // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)\r\n if (!this.shouldAutoInitialize()) {\r\n return;\r\n }\r\n // if the service is eager, initialize the default instance\r\n if (isComponentEager(component)) {\r\n try {\r\n this.getOrInitializeService({ instanceIdentifier: DEFAULT_ENTRY_NAME });\r\n }\r\n catch (e) {\r\n // when the instance factory for an eager Component throws an exception during the eager\r\n // initialization, it should not cause a fatal error.\r\n // TODO: Investigate if we need to make it configurable, because some component may want to cause\r\n // a fatal error in this case?\r\n }\r\n }\r\n // Create service instances for the pending promises and resolve them\r\n // NOTE: if this.multipleInstances is false, only the default instance will be created\r\n // and all promises with resolve with it regardless of the identifier.\r\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n try {\r\n // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n instanceDeferred.resolve(instance);\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception, it should not cause\r\n // a fatal error. We just leave the promise unresolved.\r\n }\r\n }\r\n }\r\n clearInstance(identifier = DEFAULT_ENTRY_NAME) {\r\n this.instancesDeferred.delete(identifier);\r\n this.instancesOptions.delete(identifier);\r\n this.instances.delete(identifier);\r\n }\r\n // app.delete() will call this method on every provider to delete the services\r\n // TODO: should we mark the provider as deleted?\r\n async delete() {\r\n const services = Array.from(this.instances.values());\r\n await Promise.all([\r\n ...services\r\n .filter(service => 'INTERNAL' in service) // legacy services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(service => service.INTERNAL.delete()),\r\n ...services\r\n .filter(service => '_delete' in service) // modularized services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(service => service._delete())\r\n ]);\r\n }\r\n isComponentSet() {\r\n return this.component != null;\r\n }\r\n isInitialized(identifier = DEFAULT_ENTRY_NAME) {\r\n return this.instances.has(identifier);\r\n }\r\n getOptions(identifier = DEFAULT_ENTRY_NAME) {\r\n return this.instancesOptions.get(identifier) || {};\r\n }\r\n initialize(opts = {}) {\r\n const { options = {} } = opts;\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(opts.instanceIdentifier);\r\n if (this.isInitialized(normalizedIdentifier)) {\r\n throw Error(`${this.name}(${normalizedIdentifier}) has already been initialized`);\r\n }\r\n if (!this.isComponentSet()) {\r\n throw Error(`Component ${this.name} has not been registered yet`);\r\n }\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier,\r\n options\r\n });\r\n // resolve any pending promise waiting for the service instance\r\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n const normalizedDeferredIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n if (normalizedIdentifier === normalizedDeferredIdentifier) {\r\n instanceDeferred.resolve(instance);\r\n }\r\n }\r\n return instance;\r\n }\r\n /**\r\n *\r\n * @param callback - a function that will be invoked after the provider has been initialized by calling provider.initialize().\r\n * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.\r\n *\r\n * @param identifier An optional instance identifier\r\n * @returns a function to unregister the callback\r\n */\r\n onInit(callback, identifier) {\r\n var _a;\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n const existingCallbacks = (_a = this.onInitCallbacks.get(normalizedIdentifier)) !== null && _a !== void 0 ? _a : new Set();\r\n existingCallbacks.add(callback);\r\n this.onInitCallbacks.set(normalizedIdentifier, existingCallbacks);\r\n const existingInstance = this.instances.get(normalizedIdentifier);\r\n if (existingInstance) {\r\n callback(existingInstance, normalizedIdentifier);\r\n }\r\n return () => {\r\n existingCallbacks.delete(callback);\r\n };\r\n }\r\n /**\r\n * Invoke onInit callbacks synchronously\r\n * @param instance the service instance`\r\n */\r\n invokeOnInitCallbacks(instance, identifier) {\r\n const callbacks = this.onInitCallbacks.get(identifier);\r\n if (!callbacks) {\r\n return;\r\n }\r\n for (const callback of callbacks) {\r\n try {\r\n callback(instance, identifier);\r\n }\r\n catch (_a) {\r\n // ignore errors in the onInit callback\r\n }\r\n }\r\n }\r\n getOrInitializeService({ instanceIdentifier, options = {} }) {\r\n let instance = this.instances.get(instanceIdentifier);\r\n if (!instance && this.component) {\r\n instance = this.component.instanceFactory(this.container, {\r\n instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),\r\n options\r\n });\r\n this.instances.set(instanceIdentifier, instance);\r\n this.instancesOptions.set(instanceIdentifier, options);\r\n /**\r\n * Invoke onInit listeners.\r\n * Note this.component.onInstanceCreated is different, which is used by the component creator,\r\n * while onInit listeners are registered by consumers of the provider.\r\n */\r\n this.invokeOnInitCallbacks(instance, instanceIdentifier);\r\n /**\r\n * Order is important\r\n * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which\r\n * makes `isInitialized()` return true.\r\n */\r\n if (this.component.onInstanceCreated) {\r\n try {\r\n this.component.onInstanceCreated(this.container, instanceIdentifier, instance);\r\n }\r\n catch (_a) {\r\n // ignore errors in the onInstanceCreatedCallback\r\n }\r\n }\r\n }\r\n return instance || null;\r\n }\r\n normalizeInstanceIdentifier(identifier = DEFAULT_ENTRY_NAME) {\r\n if (this.component) {\r\n return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\r\n }\r\n else {\r\n return identifier; // assume multiple instances are supported before the component is provided.\r\n }\r\n }\r\n shouldAutoInitialize() {\r\n return (!!this.component &&\r\n this.component.instantiationMode !== \"EXPLICIT\" /* InstantiationMode.EXPLICIT */);\r\n }\r\n}\r\n// undefined should be passed to the service factory for the default instance\r\nfunction normalizeIdentifierForFactory(identifier) {\r\n return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\r\n}\r\nfunction isComponentEager(component) {\r\n return component.instantiationMode === \"EAGER\" /* InstantiationMode.EAGER */;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass ComponentContainer {\r\n constructor(name) {\r\n this.name = name;\r\n this.providers = new Map();\r\n }\r\n /**\r\n *\r\n * @param component Component being added\r\n * @param overwrite When a component with the same name has already been registered,\r\n * if overwrite is true: overwrite the existing component with the new component and create a new\r\n * provider with the new component. It can be useful in tests where you want to use different mocks\r\n * for different tests.\r\n * if overwrite is false: throw an exception\r\n */\r\n addComponent(component) {\r\n const provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n throw new Error(`Component ${component.name} has already been registered with ${this.name}`);\r\n }\r\n provider.setComponent(component);\r\n }\r\n addOrOverwriteComponent(component) {\r\n const provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n // delete the existing provider from the container, so we can register the new component\r\n this.providers.delete(component.name);\r\n }\r\n this.addComponent(component);\r\n }\r\n /**\r\n * getProvider provides a type safe interface where it can only be called with a field name\r\n * present in NameServiceMapping interface.\r\n *\r\n * Firebase SDKs providing services should extend NameServiceMapping interface to register\r\n * themselves.\r\n */\r\n getProvider(name) {\r\n if (this.providers.has(name)) {\r\n return this.providers.get(name);\r\n }\r\n // create a Provider for a service that hasn't registered with Firebase\r\n const provider = new Provider(name, this);\r\n this.providers.set(name, provider);\r\n return provider;\r\n }\r\n getProviders() {\r\n return Array.from(this.providers.values());\r\n }\r\n}\n\nexport { Component, ComponentContainer, Provider };\n//# sourceMappingURL=index.esm2017.js.map\n","import { _getProvider, getApp, _registerComponent, registerVersion } from '@firebase/app';\nimport { Component } from '@firebase/component';\nimport { ErrorFactory, FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\nconst name = \"@firebase/installations\";\nconst version = \"0.6.9\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PENDING_TIMEOUT_MS = 10000;\r\nconst PACKAGE_VERSION = `w:${version}`;\r\nconst INTERNAL_AUTH_VERSION = 'FIS_v2';\r\nconst INSTALLATIONS_API_URL = 'https://firebaseinstallations.googleapis.com/v1';\r\nconst TOKEN_EXPIRATION_BUFFER = 60 * 60 * 1000; // One hour\r\nconst SERVICE = 'installations';\r\nconst SERVICE_NAME = 'Installations';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERROR_DESCRIPTION_MAP = {\r\n [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\r\n [\"not-registered\" /* ErrorCode.NOT_REGISTERED */]: 'Firebase Installation is not registered.',\r\n [\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */]: 'Firebase Installation not found.',\r\n [\"request-failed\" /* ErrorCode.REQUEST_FAILED */]: '{$requestName} request failed with error \"{$serverCode} {$serverStatus}: {$serverMessage}\"',\r\n [\"app-offline\" /* ErrorCode.APP_OFFLINE */]: 'Could not process request. Application offline.',\r\n [\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */]: \"Can't delete installation while there is a pending registration request.\"\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory(SERVICE, SERVICE_NAME, ERROR_DESCRIPTION_MAP);\r\n/** Returns true if error is a FirebaseError that is based on an error from the server. */\r\nfunction isServerError(error) {\r\n return (error instanceof FirebaseError &&\r\n error.code.includes(\"request-failed\" /* ErrorCode.REQUEST_FAILED */));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getInstallationsEndpoint({ projectId }) {\r\n return `${INSTALLATIONS_API_URL}/projects/${projectId}/installations`;\r\n}\r\nfunction extractAuthTokenInfoFromResponse(response) {\r\n return {\r\n token: response.token,\r\n requestStatus: 2 /* RequestStatus.COMPLETED */,\r\n expiresIn: getExpiresInFromResponseExpiresIn(response.expiresIn),\r\n creationTime: Date.now()\r\n };\r\n}\r\nasync function getErrorFromResponse(requestName, response) {\r\n const responseJson = await response.json();\r\n const errorData = responseJson.error;\r\n return ERROR_FACTORY.create(\"request-failed\" /* ErrorCode.REQUEST_FAILED */, {\r\n requestName,\r\n serverCode: errorData.code,\r\n serverMessage: errorData.message,\r\n serverStatus: errorData.status\r\n });\r\n}\r\nfunction getHeaders({ apiKey }) {\r\n return new Headers({\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n 'x-goog-api-key': apiKey\r\n });\r\n}\r\nfunction getHeadersWithAuth(appConfig, { refreshToken }) {\r\n const headers = getHeaders(appConfig);\r\n headers.append('Authorization', getAuthorizationHeader(refreshToken));\r\n return headers;\r\n}\r\n/**\r\n * Calls the passed in fetch wrapper and returns the response.\r\n * If the returned response has a status of 5xx, re-runs the function once and\r\n * returns the response.\r\n */\r\nasync function retryIfServerError(fn) {\r\n const result = await fn();\r\n if (result.status >= 500 && result.status < 600) {\r\n // Internal Server Error. Retry request.\r\n return fn();\r\n }\r\n return result;\r\n}\r\nfunction getExpiresInFromResponseExpiresIn(responseExpiresIn) {\r\n // This works because the server will never respond with fractions of a second.\r\n return Number(responseExpiresIn.replace('s', '000'));\r\n}\r\nfunction getAuthorizationHeader(refreshToken) {\r\n return `${INTERNAL_AUTH_VERSION} ${refreshToken}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function createInstallationRequest({ appConfig, heartbeatServiceProvider }, { fid }) {\r\n const endpoint = getInstallationsEndpoint(appConfig);\r\n const headers = getHeaders(appConfig);\r\n // If heartbeat service exists, add the heartbeat string to the header.\r\n const heartbeatService = heartbeatServiceProvider.getImmediate({\r\n optional: true\r\n });\r\n if (heartbeatService) {\r\n const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\r\n if (heartbeatsHeader) {\r\n headers.append('x-firebase-client', heartbeatsHeader);\r\n }\r\n }\r\n const body = {\r\n fid,\r\n authVersion: INTERNAL_AUTH_VERSION,\r\n appId: appConfig.appId,\r\n sdkVersion: PACKAGE_VERSION\r\n };\r\n const request = {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(body)\r\n };\r\n const response = await retryIfServerError(() => fetch(endpoint, request));\r\n if (response.ok) {\r\n const responseValue = await response.json();\r\n const registeredInstallationEntry = {\r\n fid: responseValue.fid || fid,\r\n registrationStatus: 2 /* RequestStatus.COMPLETED */,\r\n refreshToken: responseValue.refreshToken,\r\n authToken: extractAuthTokenInfoFromResponse(responseValue.authToken)\r\n };\r\n return registeredInstallationEntry;\r\n }\r\n else {\r\n throw await getErrorFromResponse('Create Installation', response);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Returns a promise that resolves after given time passes. */\r\nfunction sleep(ms) {\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms);\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction bufferToBase64UrlSafe(array) {\r\n const b64 = btoa(String.fromCharCode(...array));\r\n return b64.replace(/\\+/g, '-').replace(/\\//g, '_');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst VALID_FID_PATTERN = /^[cdef][\\w-]{21}$/;\r\nconst INVALID_FID = '';\r\n/**\r\n * Generates a new FID using random values from Web Crypto API.\r\n * Returns an empty string if FID generation fails for any reason.\r\n */\r\nfunction generateFid() {\r\n try {\r\n // A valid FID has exactly 22 base64 characters, which is 132 bits, or 16.5\r\n // bytes. our implementation generates a 17 byte array instead.\r\n const fidByteArray = new Uint8Array(17);\r\n const crypto = self.crypto || self.msCrypto;\r\n crypto.getRandomValues(fidByteArray);\r\n // Replace the first 4 random bits with the constant FID header of 0b0111.\r\n fidByteArray[0] = 0b01110000 + (fidByteArray[0] % 0b00010000);\r\n const fid = encode(fidByteArray);\r\n return VALID_FID_PATTERN.test(fid) ? fid : INVALID_FID;\r\n }\r\n catch (_a) {\r\n // FID generation errored\r\n return INVALID_FID;\r\n }\r\n}\r\n/** Converts a FID Uint8Array to a base64 string representation. */\r\nfunction encode(fidByteArray) {\r\n const b64String = bufferToBase64UrlSafe(fidByteArray);\r\n // Remove the 23rd character that was added because of the extra 4 bits at the\r\n // end of our 17 byte array, and the '=' padding.\r\n return b64String.substr(0, 22);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Returns a string key that can be used to identify the app. */\r\nfunction getKey(appConfig) {\r\n return `${appConfig.appName}!${appConfig.appId}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst fidChangeCallbacks = new Map();\r\n/**\r\n * Calls the onIdChange callbacks with the new FID value, and broadcasts the\r\n * change to other tabs.\r\n */\r\nfunction fidChanged(appConfig, fid) {\r\n const key = getKey(appConfig);\r\n callFidChangeCallbacks(key, fid);\r\n broadcastFidChange(key, fid);\r\n}\r\nfunction addCallback(appConfig, callback) {\r\n // Open the broadcast channel if it's not already open,\r\n // to be able to listen to change events from other tabs.\r\n getBroadcastChannel();\r\n const key = getKey(appConfig);\r\n let callbackSet = fidChangeCallbacks.get(key);\r\n if (!callbackSet) {\r\n callbackSet = new Set();\r\n fidChangeCallbacks.set(key, callbackSet);\r\n }\r\n callbackSet.add(callback);\r\n}\r\nfunction removeCallback(appConfig, callback) {\r\n const key = getKey(appConfig);\r\n const callbackSet = fidChangeCallbacks.get(key);\r\n if (!callbackSet) {\r\n return;\r\n }\r\n callbackSet.delete(callback);\r\n if (callbackSet.size === 0) {\r\n fidChangeCallbacks.delete(key);\r\n }\r\n // Close broadcast channel if there are no more callbacks.\r\n closeBroadcastChannel();\r\n}\r\nfunction callFidChangeCallbacks(key, fid) {\r\n const callbacks = fidChangeCallbacks.get(key);\r\n if (!callbacks) {\r\n return;\r\n }\r\n for (const callback of callbacks) {\r\n callback(fid);\r\n }\r\n}\r\nfunction broadcastFidChange(key, fid) {\r\n const channel = getBroadcastChannel();\r\n if (channel) {\r\n channel.postMessage({ key, fid });\r\n }\r\n closeBroadcastChannel();\r\n}\r\nlet broadcastChannel = null;\r\n/** Opens and returns a BroadcastChannel if it is supported by the browser. */\r\nfunction getBroadcastChannel() {\r\n if (!broadcastChannel && 'BroadcastChannel' in self) {\r\n broadcastChannel = new BroadcastChannel('[Firebase] FID Change');\r\n broadcastChannel.onmessage = e => {\r\n callFidChangeCallbacks(e.data.key, e.data.fid);\r\n };\r\n }\r\n return broadcastChannel;\r\n}\r\nfunction closeBroadcastChannel() {\r\n if (fidChangeCallbacks.size === 0 && broadcastChannel) {\r\n broadcastChannel.close();\r\n broadcastChannel = null;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DATABASE_NAME = 'firebase-installations-database';\r\nconst DATABASE_VERSION = 1;\r\nconst OBJECT_STORE_NAME = 'firebase-installations-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\r\n upgrade: (db, oldVersion) => {\r\n // We don't use 'break' in this switch statement, the fall-through\r\n // behavior is what we want, because if there are multiple versions between\r\n // the old version and the current version, we want ALL the migrations\r\n // that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (oldVersion) {\r\n case 0:\r\n db.createObjectStore(OBJECT_STORE_NAME);\r\n }\r\n }\r\n });\r\n }\r\n return dbPromise;\r\n}\r\n/** Assigns or overwrites the record for the given key with the given value. */\r\nasync function set(appConfig, value) {\r\n const key = getKey(appConfig);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n const objectStore = tx.objectStore(OBJECT_STORE_NAME);\r\n const oldValue = (await objectStore.get(key));\r\n await objectStore.put(value, key);\r\n await tx.done;\r\n if (!oldValue || oldValue.fid !== value.fid) {\r\n fidChanged(appConfig, value.fid);\r\n }\r\n return value;\r\n}\r\n/** Removes record(s) from the objectStore that match the given key. */\r\nasync function remove(appConfig) {\r\n const key = getKey(appConfig);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n await tx.objectStore(OBJECT_STORE_NAME).delete(key);\r\n await tx.done;\r\n}\r\n/**\r\n * Atomically updates a record with the result of updateFn, which gets\r\n * called with the current value. If newValue is undefined, the record is\r\n * deleted instead.\r\n * @return Updated value\r\n */\r\nasync function update(appConfig, updateFn) {\r\n const key = getKey(appConfig);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n const store = tx.objectStore(OBJECT_STORE_NAME);\r\n const oldValue = (await store.get(key));\r\n const newValue = updateFn(oldValue);\r\n if (newValue === undefined) {\r\n await store.delete(key);\r\n }\r\n else {\r\n await store.put(newValue, key);\r\n }\r\n await tx.done;\r\n if (newValue && (!oldValue || oldValue.fid !== newValue.fid)) {\r\n fidChanged(appConfig, newValue.fid);\r\n }\r\n return newValue;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Updates and returns the InstallationEntry from the database.\r\n * Also triggers a registration request if it is necessary and possible.\r\n */\r\nasync function getInstallationEntry(installations) {\r\n let registrationPromise;\r\n const installationEntry = await update(installations.appConfig, oldEntry => {\r\n const installationEntry = updateOrCreateInstallationEntry(oldEntry);\r\n const entryWithPromise = triggerRegistrationIfNecessary(installations, installationEntry);\r\n registrationPromise = entryWithPromise.registrationPromise;\r\n return entryWithPromise.installationEntry;\r\n });\r\n if (installationEntry.fid === INVALID_FID) {\r\n // FID generation failed. Waiting for the FID from the server.\r\n return { installationEntry: await registrationPromise };\r\n }\r\n return {\r\n installationEntry,\r\n registrationPromise\r\n };\r\n}\r\n/**\r\n * Creates a new Installation Entry if one does not exist.\r\n * Also clears timed out pending requests.\r\n */\r\nfunction updateOrCreateInstallationEntry(oldEntry) {\r\n const entry = oldEntry || {\r\n fid: generateFid(),\r\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\r\n };\r\n return clearTimedOutRequest(entry);\r\n}\r\n/**\r\n * If the Firebase Installation is not registered yet, this will trigger the\r\n * registration and return an InProgressInstallationEntry.\r\n *\r\n * If registrationPromise does not exist, the installationEntry is guaranteed\r\n * to be registered.\r\n */\r\nfunction triggerRegistrationIfNecessary(installations, installationEntry) {\r\n if (installationEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\r\n if (!navigator.onLine) {\r\n // Registration required but app is offline.\r\n const registrationPromiseWithError = Promise.reject(ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */));\r\n return {\r\n installationEntry,\r\n registrationPromise: registrationPromiseWithError\r\n };\r\n }\r\n // Try registering. Change status to IN_PROGRESS.\r\n const inProgressEntry = {\r\n fid: installationEntry.fid,\r\n registrationStatus: 1 /* RequestStatus.IN_PROGRESS */,\r\n registrationTime: Date.now()\r\n };\r\n const registrationPromise = registerInstallation(installations, inProgressEntry);\r\n return { installationEntry: inProgressEntry, registrationPromise };\r\n }\r\n else if (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n return {\r\n installationEntry,\r\n registrationPromise: waitUntilFidRegistration(installations)\r\n };\r\n }\r\n else {\r\n return { installationEntry };\r\n }\r\n}\r\n/** This will be executed only once for each new Firebase Installation. */\r\nasync function registerInstallation(installations, installationEntry) {\r\n try {\r\n const registeredInstallationEntry = await createInstallationRequest(installations, installationEntry);\r\n return set(installations.appConfig, registeredInstallationEntry);\r\n }\r\n catch (e) {\r\n if (isServerError(e) && e.customData.serverCode === 409) {\r\n // Server returned a \"FID cannot be used\" error.\r\n // Generate a new ID next time.\r\n await remove(installations.appConfig);\r\n }\r\n else {\r\n // Registration failed. Set FID as not registered.\r\n await set(installations.appConfig, {\r\n fid: installationEntry.fid,\r\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\r\n });\r\n }\r\n throw e;\r\n }\r\n}\r\n/** Call if FID registration is pending in another request. */\r\nasync function waitUntilFidRegistration(installations) {\r\n // Unfortunately, there is no way of reliably observing when a value in\r\n // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\r\n // so we need to poll.\r\n let entry = await updateInstallationRequest(installations.appConfig);\r\n while (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n // createInstallation request still in progress.\r\n await sleep(100);\r\n entry = await updateInstallationRequest(installations.appConfig);\r\n }\r\n if (entry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\r\n // The request timed out or failed in a different call. Try again.\r\n const { installationEntry, registrationPromise } = await getInstallationEntry(installations);\r\n if (registrationPromise) {\r\n return registrationPromise;\r\n }\r\n else {\r\n // if there is no registrationPromise, entry is registered.\r\n return installationEntry;\r\n }\r\n }\r\n return entry;\r\n}\r\n/**\r\n * Called only if there is a CreateInstallation request in progress.\r\n *\r\n * Updates the InstallationEntry in the DB based on the status of the\r\n * CreateInstallation request.\r\n *\r\n * Returns the updated InstallationEntry.\r\n */\r\nfunction updateInstallationRequest(appConfig) {\r\n return update(appConfig, oldEntry => {\r\n if (!oldEntry) {\r\n throw ERROR_FACTORY.create(\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */);\r\n }\r\n return clearTimedOutRequest(oldEntry);\r\n });\r\n}\r\nfunction clearTimedOutRequest(entry) {\r\n if (hasInstallationRequestTimedOut(entry)) {\r\n return {\r\n fid: entry.fid,\r\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\r\n };\r\n }\r\n return entry;\r\n}\r\nfunction hasInstallationRequestTimedOut(installationEntry) {\r\n return (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\r\n installationEntry.registrationTime + PENDING_TIMEOUT_MS < Date.now());\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function generateAuthTokenRequest({ appConfig, heartbeatServiceProvider }, installationEntry) {\r\n const endpoint = getGenerateAuthTokenEndpoint(appConfig, installationEntry);\r\n const headers = getHeadersWithAuth(appConfig, installationEntry);\r\n // If heartbeat service exists, add the heartbeat string to the header.\r\n const heartbeatService = heartbeatServiceProvider.getImmediate({\r\n optional: true\r\n });\r\n if (heartbeatService) {\r\n const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\r\n if (heartbeatsHeader) {\r\n headers.append('x-firebase-client', heartbeatsHeader);\r\n }\r\n }\r\n const body = {\r\n installation: {\r\n sdkVersion: PACKAGE_VERSION,\r\n appId: appConfig.appId\r\n }\r\n };\r\n const request = {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(body)\r\n };\r\n const response = await retryIfServerError(() => fetch(endpoint, request));\r\n if (response.ok) {\r\n const responseValue = await response.json();\r\n const completedAuthToken = extractAuthTokenInfoFromResponse(responseValue);\r\n return completedAuthToken;\r\n }\r\n else {\r\n throw await getErrorFromResponse('Generate Auth Token', response);\r\n }\r\n}\r\nfunction getGenerateAuthTokenEndpoint(appConfig, { fid }) {\r\n return `${getInstallationsEndpoint(appConfig)}/${fid}/authTokens:generate`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a valid authentication token for the installation. Generates a new\r\n * token if one doesn't exist, is expired or about to expire.\r\n *\r\n * Should only be called if the Firebase Installation is registered.\r\n */\r\nasync function refreshAuthToken(installations, forceRefresh = false) {\r\n let tokenPromise;\r\n const entry = await update(installations.appConfig, oldEntry => {\r\n if (!isEntryRegistered(oldEntry)) {\r\n throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\r\n }\r\n const oldAuthToken = oldEntry.authToken;\r\n if (!forceRefresh && isAuthTokenValid(oldAuthToken)) {\r\n // There is a valid token in the DB.\r\n return oldEntry;\r\n }\r\n else if (oldAuthToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n // There already is a token request in progress.\r\n tokenPromise = waitUntilAuthTokenRequest(installations, forceRefresh);\r\n return oldEntry;\r\n }\r\n else {\r\n // No token or token expired.\r\n if (!navigator.onLine) {\r\n throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\r\n }\r\n const inProgressEntry = makeAuthTokenRequestInProgressEntry(oldEntry);\r\n tokenPromise = fetchAuthTokenFromServer(installations, inProgressEntry);\r\n return inProgressEntry;\r\n }\r\n });\r\n const authToken = tokenPromise\r\n ? await tokenPromise\r\n : entry.authToken;\r\n return authToken;\r\n}\r\n/**\r\n * Call only if FID is registered and Auth Token request is in progress.\r\n *\r\n * Waits until the current pending request finishes. If the request times out,\r\n * tries once in this thread as well.\r\n */\r\nasync function waitUntilAuthTokenRequest(installations, forceRefresh) {\r\n // Unfortunately, there is no way of reliably observing when a value in\r\n // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\r\n // so we need to poll.\r\n let entry = await updateAuthTokenRequest(installations.appConfig);\r\n while (entry.authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n // generateAuthToken still in progress.\r\n await sleep(100);\r\n entry = await updateAuthTokenRequest(installations.appConfig);\r\n }\r\n const authToken = entry.authToken;\r\n if (authToken.requestStatus === 0 /* RequestStatus.NOT_STARTED */) {\r\n // The request timed out or failed in a different call. Try again.\r\n return refreshAuthToken(installations, forceRefresh);\r\n }\r\n else {\r\n return authToken;\r\n }\r\n}\r\n/**\r\n * Called only if there is a GenerateAuthToken request in progress.\r\n *\r\n * Updates the InstallationEntry in the DB based on the status of the\r\n * GenerateAuthToken request.\r\n *\r\n * Returns the updated InstallationEntry.\r\n */\r\nfunction updateAuthTokenRequest(appConfig) {\r\n return update(appConfig, oldEntry => {\r\n if (!isEntryRegistered(oldEntry)) {\r\n throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\r\n }\r\n const oldAuthToken = oldEntry.authToken;\r\n if (hasAuthTokenRequestTimedOut(oldAuthToken)) {\r\n return Object.assign(Object.assign({}, oldEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\r\n }\r\n return oldEntry;\r\n });\r\n}\r\nasync function fetchAuthTokenFromServer(installations, installationEntry) {\r\n try {\r\n const authToken = await generateAuthTokenRequest(installations, installationEntry);\r\n const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken });\r\n await set(installations.appConfig, updatedInstallationEntry);\r\n return authToken;\r\n }\r\n catch (e) {\r\n if (isServerError(e) &&\r\n (e.customData.serverCode === 401 || e.customData.serverCode === 404)) {\r\n // Server returned a \"FID not found\" or a \"Invalid authentication\" error.\r\n // Generate a new ID next time.\r\n await remove(installations.appConfig);\r\n }\r\n else {\r\n const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\r\n await set(installations.appConfig, updatedInstallationEntry);\r\n }\r\n throw e;\r\n }\r\n}\r\nfunction isEntryRegistered(installationEntry) {\r\n return (installationEntry !== undefined &&\r\n installationEntry.registrationStatus === 2 /* RequestStatus.COMPLETED */);\r\n}\r\nfunction isAuthTokenValid(authToken) {\r\n return (authToken.requestStatus === 2 /* RequestStatus.COMPLETED */ &&\r\n !isAuthTokenExpired(authToken));\r\n}\r\nfunction isAuthTokenExpired(authToken) {\r\n const now = Date.now();\r\n return (now < authToken.creationTime ||\r\n authToken.creationTime + authToken.expiresIn < now + TOKEN_EXPIRATION_BUFFER);\r\n}\r\n/** Returns an updated InstallationEntry with an InProgressAuthToken. */\r\nfunction makeAuthTokenRequestInProgressEntry(oldEntry) {\r\n const inProgressAuthToken = {\r\n requestStatus: 1 /* RequestStatus.IN_PROGRESS */,\r\n requestTime: Date.now()\r\n };\r\n return Object.assign(Object.assign({}, oldEntry), { authToken: inProgressAuthToken });\r\n}\r\nfunction hasAuthTokenRequestTimedOut(authToken) {\r\n return (authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\r\n authToken.requestTime + PENDING_TIMEOUT_MS < Date.now());\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Creates a Firebase Installation if there isn't one for the app and\r\n * returns the Installation ID.\r\n * @param installations - The `Installations` instance.\r\n *\r\n * @public\r\n */\r\nasync function getId(installations) {\r\n const installationsImpl = installations;\r\n const { installationEntry, registrationPromise } = await getInstallationEntry(installationsImpl);\r\n if (registrationPromise) {\r\n registrationPromise.catch(console.error);\r\n }\r\n else {\r\n // If the installation is already registered, update the authentication\r\n // token if needed.\r\n refreshAuthToken(installationsImpl).catch(console.error);\r\n }\r\n return installationEntry.fid;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a Firebase Installations auth token, identifying the current\r\n * Firebase Installation.\r\n * @param installations - The `Installations` instance.\r\n * @param forceRefresh - Force refresh regardless of token expiration.\r\n *\r\n * @public\r\n */\r\nasync function getToken(installations, forceRefresh = false) {\r\n const installationsImpl = installations;\r\n await completeInstallationRegistration(installationsImpl);\r\n // At this point we either have a Registered Installation in the DB, or we've\r\n // already thrown an error.\r\n const authToken = await refreshAuthToken(installationsImpl, forceRefresh);\r\n return authToken.token;\r\n}\r\nasync function completeInstallationRegistration(installations) {\r\n const { registrationPromise } = await getInstallationEntry(installations);\r\n if (registrationPromise) {\r\n // A createInstallation request is in progress. Wait until it finishes.\r\n await registrationPromise;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function deleteInstallationRequest(appConfig, installationEntry) {\r\n const endpoint = getDeleteEndpoint(appConfig, installationEntry);\r\n const headers = getHeadersWithAuth(appConfig, installationEntry);\r\n const request = {\r\n method: 'DELETE',\r\n headers\r\n };\r\n const response = await retryIfServerError(() => fetch(endpoint, request));\r\n if (!response.ok) {\r\n throw await getErrorFromResponse('Delete Installation', response);\r\n }\r\n}\r\nfunction getDeleteEndpoint(appConfig, { fid }) {\r\n return `${getInstallationsEndpoint(appConfig)}/${fid}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Deletes the Firebase Installation and all associated data.\r\n * @param installations - The `Installations` instance.\r\n *\r\n * @public\r\n */\r\nasync function deleteInstallations(installations) {\r\n const { appConfig } = installations;\r\n const entry = await update(appConfig, oldEntry => {\r\n if (oldEntry && oldEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\r\n // Delete the unregistered entry without sending a deleteInstallation request.\r\n return undefined;\r\n }\r\n return oldEntry;\r\n });\r\n if (entry) {\r\n if (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n // Can't delete while trying to register.\r\n throw ERROR_FACTORY.create(\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */);\r\n }\r\n else if (entry.registrationStatus === 2 /* RequestStatus.COMPLETED */) {\r\n if (!navigator.onLine) {\r\n throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\r\n }\r\n else {\r\n await deleteInstallationRequest(appConfig, entry);\r\n await remove(appConfig);\r\n }\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Sets a new callback that will get called when Installation ID changes.\r\n * Returns an unsubscribe function that will remove the callback when called.\r\n * @param installations - The `Installations` instance.\r\n * @param callback - The callback function that is invoked when FID changes.\r\n * @returns A function that can be called to unsubscribe.\r\n *\r\n * @public\r\n */\r\nfunction onIdChange(installations, callback) {\r\n const { appConfig } = installations;\r\n addCallback(appConfig, callback);\r\n return () => {\r\n removeCallback(appConfig, callback);\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns an instance of {@link Installations} associated with the given\r\n * {@link @firebase/app#FirebaseApp} instance.\r\n * @param app - The {@link @firebase/app#FirebaseApp} instance.\r\n *\r\n * @public\r\n */\r\nfunction getInstallations(app = getApp()) {\r\n const installationsImpl = _getProvider(app, 'installations').getImmediate();\r\n return installationsImpl;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction extractAppConfig(app) {\r\n if (!app || !app.options) {\r\n throw getMissingValueError('App Configuration');\r\n }\r\n if (!app.name) {\r\n throw getMissingValueError('App Name');\r\n }\r\n // Required app config keys\r\n const configKeys = [\r\n 'projectId',\r\n 'apiKey',\r\n 'appId'\r\n ];\r\n for (const keyName of configKeys) {\r\n if (!app.options[keyName]) {\r\n throw getMissingValueError(keyName);\r\n }\r\n }\r\n return {\r\n appName: app.name,\r\n projectId: app.options.projectId,\r\n apiKey: app.options.apiKey,\r\n appId: app.options.appId\r\n };\r\n}\r\nfunction getMissingValueError(valueName) {\r\n return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\r\n valueName\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst INSTALLATIONS_NAME = 'installations';\r\nconst INSTALLATIONS_NAME_INTERNAL = 'installations-internal';\r\nconst publicFactory = (container) => {\r\n const app = container.getProvider('app').getImmediate();\r\n // Throws if app isn't configured properly.\r\n const appConfig = extractAppConfig(app);\r\n const heartbeatServiceProvider = _getProvider(app, 'heartbeat');\r\n const installationsImpl = {\r\n app,\r\n appConfig,\r\n heartbeatServiceProvider,\r\n _delete: () => Promise.resolve()\r\n };\r\n return installationsImpl;\r\n};\r\nconst internalFactory = (container) => {\r\n const app = container.getProvider('app').getImmediate();\r\n // Internal FIS instance relies on public FIS instance.\r\n const installations = _getProvider(app, INSTALLATIONS_NAME).getImmediate();\r\n const installationsInternal = {\r\n getId: () => getId(installations),\r\n getToken: (forceRefresh) => getToken(installations, forceRefresh)\r\n };\r\n return installationsInternal;\r\n};\r\nfunction registerInstallations() {\r\n _registerComponent(new Component(INSTALLATIONS_NAME, publicFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n _registerComponent(new Component(INSTALLATIONS_NAME_INTERNAL, internalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n}\n\n/**\r\n * The Firebase Installations Web SDK.\r\n * This SDK does not work in a Node.js environment.\r\n *\r\n * @packageDocumentation\r\n */\r\nregisterInstallations();\r\nregisterVersion(name, version);\r\n// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\nregisterVersion(name, version, 'esm2017');\n\nexport { deleteInstallations, getId, getInstallations, getToken, onIdChange };\n//# sourceMappingURL=index.esm2017.js.map\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A container for all of the Logger instances\r\n */\r\nconst instances = [];\r\n/**\r\n * The JS SDK supports 5 log levels and also allows a user the ability to\r\n * silence the logs altogether.\r\n *\r\n * The order is a follows:\r\n * DEBUG < VERBOSE < INFO < WARN < ERROR\r\n *\r\n * All of the log types above the current log level will be captured (i.e. if\r\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\r\n * `VERBOSE` logs will not)\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\r\n LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\r\n LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\r\n LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\r\n LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\r\n LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\r\n})(LogLevel || (LogLevel = {}));\r\nconst levelStringToEnum = {\r\n 'debug': LogLevel.DEBUG,\r\n 'verbose': LogLevel.VERBOSE,\r\n 'info': LogLevel.INFO,\r\n 'warn': LogLevel.WARN,\r\n 'error': LogLevel.ERROR,\r\n 'silent': LogLevel.SILENT\r\n};\r\n/**\r\n * The default log level\r\n */\r\nconst defaultLogLevel = LogLevel.INFO;\r\n/**\r\n * By default, `console.debug` is not displayed in the developer console (in\r\n * chrome). To avoid forcing users to have to opt-in to these logs twice\r\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\r\n * logs to the `console.log` function.\r\n */\r\nconst ConsoleMethod = {\r\n [LogLevel.DEBUG]: 'log',\r\n [LogLevel.VERBOSE]: 'log',\r\n [LogLevel.INFO]: 'info',\r\n [LogLevel.WARN]: 'warn',\r\n [LogLevel.ERROR]: 'error'\r\n};\r\n/**\r\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\r\n * messages on to their corresponding console counterparts (if the log method\r\n * is supported by the current log level)\r\n */\r\nconst defaultLogHandler = (instance, logType, ...args) => {\r\n if (logType < instance.logLevel) {\r\n return;\r\n }\r\n const now = new Date().toISOString();\r\n const method = ConsoleMethod[logType];\r\n if (method) {\r\n console[method](`[${now}] ${instance.name}:`, ...args);\r\n }\r\n else {\r\n throw new Error(`Attempted to log a message with an invalid logType (value: ${logType})`);\r\n }\r\n};\r\nclass Logger {\r\n /**\r\n * Gives you an instance of a Logger to capture messages according to\r\n * Firebase's logging scheme.\r\n *\r\n * @param name The name that the logs will be associated with\r\n */\r\n constructor(name) {\r\n this.name = name;\r\n /**\r\n * The log level of the given Logger instance.\r\n */\r\n this._logLevel = defaultLogLevel;\r\n /**\r\n * The main (internal) log handler for the Logger instance.\r\n * Can be set to a new function in internal package code but not by user.\r\n */\r\n this._logHandler = defaultLogHandler;\r\n /**\r\n * The optional, additional, user-defined log handler for the Logger instance.\r\n */\r\n this._userLogHandler = null;\r\n /**\r\n * Capture the current instance for later use\r\n */\r\n instances.push(this);\r\n }\r\n get logLevel() {\r\n return this._logLevel;\r\n }\r\n set logLevel(val) {\r\n if (!(val in LogLevel)) {\r\n throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\r\n }\r\n this._logLevel = val;\r\n }\r\n // Workaround for setter/getter having to be the same type.\r\n setLogLevel(val) {\r\n this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\r\n }\r\n get logHandler() {\r\n return this._logHandler;\r\n }\r\n set logHandler(val) {\r\n if (typeof val !== 'function') {\r\n throw new TypeError('Value assigned to `logHandler` must be a function');\r\n }\r\n this._logHandler = val;\r\n }\r\n get userLogHandler() {\r\n return this._userLogHandler;\r\n }\r\n set userLogHandler(val) {\r\n this._userLogHandler = val;\r\n }\r\n /**\r\n * The functions below are all based on the `console` interface\r\n */\r\n debug(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\r\n this._logHandler(this, LogLevel.DEBUG, ...args);\r\n }\r\n log(...args) {\r\n this._userLogHandler &&\r\n this._userLogHandler(this, LogLevel.VERBOSE, ...args);\r\n this._logHandler(this, LogLevel.VERBOSE, ...args);\r\n }\r\n info(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\r\n this._logHandler(this, LogLevel.INFO, ...args);\r\n }\r\n warn(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\r\n this._logHandler(this, LogLevel.WARN, ...args);\r\n }\r\n error(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\r\n this._logHandler(this, LogLevel.ERROR, ...args);\r\n }\r\n}\r\nfunction setLogLevel(level) {\r\n instances.forEach(inst => {\r\n inst.setLogLevel(level);\r\n });\r\n}\r\nfunction setUserLogHandler(logCallback, options) {\r\n for (const instance of instances) {\r\n let customLogLevel = null;\r\n if (options && options.level) {\r\n customLogLevel = levelStringToEnum[options.level];\r\n }\r\n if (logCallback === null) {\r\n instance.userLogHandler = null;\r\n }\r\n else {\r\n instance.userLogHandler = (instance, level, ...args) => {\r\n const message = args\r\n .map(arg => {\r\n if (arg == null) {\r\n return null;\r\n }\r\n else if (typeof arg === 'string') {\r\n return arg;\r\n }\r\n else if (typeof arg === 'number' || typeof arg === 'boolean') {\r\n return arg.toString();\r\n }\r\n else if (arg instanceof Error) {\r\n return arg.message;\r\n }\r\n else {\r\n try {\r\n return JSON.stringify(arg);\r\n }\r\n catch (ignored) {\r\n return null;\r\n }\r\n }\r\n })\r\n .filter(arg => arg)\r\n .join(' ');\r\n if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\r\n logCallback({\r\n level: LogLevel[level].toLowerCase(),\r\n message,\r\n args,\r\n type: instance.name\r\n });\r\n }\r\n };\r\n }\r\n }\r\n}\n\nexport { LogLevel, Logger, setLogLevel, setUserLogHandler };\n//# sourceMappingURL=index.esm2017.js.map\n","import '@firebase/installations';\nimport { Component } from '@firebase/component';\nimport { openDB, deleteDB } from 'idb';\nimport { ErrorFactory, validateIndexedDBOpenable, isIndexedDBAvailable, areCookiesEnabled, getModularInstance } from '@firebase/util';\nimport { _registerComponent, registerVersion, _getProvider, getApp } from '@firebase/app';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\r\nconst DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\r\nconst DEFAULT_VAPID_KEY = 'BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4';\r\nconst ENDPOINT = 'https://fcmregistrations.googleapis.com/v1';\r\nconst CONSOLE_CAMPAIGN_ID = 'google.c.a.c_id';\r\nconst CONSOLE_CAMPAIGN_NAME = 'google.c.a.c_l';\r\nconst CONSOLE_CAMPAIGN_TIME = 'google.c.a.ts';\r\n/** Set to '1' if Analytics is enabled for the campaign */\r\nconst CONSOLE_CAMPAIGN_ANALYTICS_ENABLED = 'google.c.a.e';\r\nvar MessageType$1;\r\n(function (MessageType) {\r\n MessageType[MessageType[\"DATA_MESSAGE\"] = 1] = \"DATA_MESSAGE\";\r\n MessageType[MessageType[\"DISPLAY_NOTIFICATION\"] = 3] = \"DISPLAY_NOTIFICATION\";\r\n})(MessageType$1 || (MessageType$1 = {}));\n\n/**\r\n * @license\r\n * Copyright 2018 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\r\n * in compliance with the License. You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software distributed under the License\r\n * is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\r\n * or implied. See the License for the specific language governing permissions and limitations under\r\n * the License.\r\n */\r\nvar MessageType;\r\n(function (MessageType) {\r\n MessageType[\"PUSH_RECEIVED\"] = \"push-received\";\r\n MessageType[\"NOTIFICATION_CLICKED\"] = \"notification-clicked\";\r\n})(MessageType || (MessageType = {}));\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction arrayToBase64(array) {\r\n const uint8Array = new Uint8Array(array);\r\n const base64String = btoa(String.fromCharCode(...uint8Array));\r\n return base64String.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\r\n}\r\nfunction base64ToArray(base64String) {\r\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\r\n const base64 = (base64String + padding)\r\n .replace(/\\-/g, '+')\r\n .replace(/_/g, '/');\r\n const rawData = atob(base64);\r\n const outputArray = new Uint8Array(rawData.length);\r\n for (let i = 0; i < rawData.length; ++i) {\r\n outputArray[i] = rawData.charCodeAt(i);\r\n }\r\n return outputArray;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst OLD_DB_NAME = 'fcm_token_details_db';\r\n/**\r\n * The last DB version of 'fcm_token_details_db' was 4. This is one higher, so that the upgrade\r\n * callback is called for all versions of the old DB.\r\n */\r\nconst OLD_DB_VERSION = 5;\r\nconst OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\r\nasync function migrateOldDatabase(senderId) {\r\n if ('databases' in indexedDB) {\r\n // indexedDb.databases() is an IndexedDB v3 API and does not exist in all browsers. TODO: Remove\r\n // typecast when it lands in TS types.\r\n const databases = await indexedDB.databases();\r\n const dbNames = databases.map(db => db.name);\r\n if (!dbNames.includes(OLD_DB_NAME)) {\r\n // old DB didn't exist, no need to open.\r\n return null;\r\n }\r\n }\r\n let tokenDetails = null;\r\n const db = await openDB(OLD_DB_NAME, OLD_DB_VERSION, {\r\n upgrade: async (db, oldVersion, newVersion, upgradeTransaction) => {\r\n var _a;\r\n if (oldVersion < 2) {\r\n // Database too old, skip migration.\r\n return;\r\n }\r\n if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\r\n // Database did not exist. Nothing to do.\r\n return;\r\n }\r\n const objectStore = upgradeTransaction.objectStore(OLD_OBJECT_STORE_NAME);\r\n const value = await objectStore.index('fcmSenderId').get(senderId);\r\n await objectStore.clear();\r\n if (!value) {\r\n // No entry in the database, nothing to migrate.\r\n return;\r\n }\r\n if (oldVersion === 2) {\r\n const oldDetails = value;\r\n if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) {\r\n return;\r\n }\r\n tokenDetails = {\r\n token: oldDetails.fcmToken,\r\n createTime: (_a = oldDetails.createTime) !== null && _a !== void 0 ? _a : Date.now(),\r\n subscriptionOptions: {\r\n auth: oldDetails.auth,\r\n p256dh: oldDetails.p256dh,\r\n endpoint: oldDetails.endpoint,\r\n swScope: oldDetails.swScope,\r\n vapidKey: typeof oldDetails.vapidKey === 'string'\r\n ? oldDetails.vapidKey\r\n : arrayToBase64(oldDetails.vapidKey)\r\n }\r\n };\r\n }\r\n else if (oldVersion === 3) {\r\n const oldDetails = value;\r\n tokenDetails = {\r\n token: oldDetails.fcmToken,\r\n createTime: oldDetails.createTime,\r\n subscriptionOptions: {\r\n auth: arrayToBase64(oldDetails.auth),\r\n p256dh: arrayToBase64(oldDetails.p256dh),\r\n endpoint: oldDetails.endpoint,\r\n swScope: oldDetails.swScope,\r\n vapidKey: arrayToBase64(oldDetails.vapidKey)\r\n }\r\n };\r\n }\r\n else if (oldVersion === 4) {\r\n const oldDetails = value;\r\n tokenDetails = {\r\n token: oldDetails.fcmToken,\r\n createTime: oldDetails.createTime,\r\n subscriptionOptions: {\r\n auth: arrayToBase64(oldDetails.auth),\r\n p256dh: arrayToBase64(oldDetails.p256dh),\r\n endpoint: oldDetails.endpoint,\r\n swScope: oldDetails.swScope,\r\n vapidKey: arrayToBase64(oldDetails.vapidKey)\r\n }\r\n };\r\n }\r\n }\r\n });\r\n db.close();\r\n // Delete all old databases.\r\n await deleteDB(OLD_DB_NAME);\r\n await deleteDB('fcm_vapid_details_db');\r\n await deleteDB('undefined');\r\n return checkTokenDetails(tokenDetails) ? tokenDetails : null;\r\n}\r\nfunction checkTokenDetails(tokenDetails) {\r\n if (!tokenDetails || !tokenDetails.subscriptionOptions) {\r\n return false;\r\n }\r\n const { subscriptionOptions } = tokenDetails;\r\n return (typeof tokenDetails.createTime === 'number' &&\r\n tokenDetails.createTime > 0 &&\r\n typeof tokenDetails.token === 'string' &&\r\n tokenDetails.token.length > 0 &&\r\n typeof subscriptionOptions.auth === 'string' &&\r\n subscriptionOptions.auth.length > 0 &&\r\n typeof subscriptionOptions.p256dh === 'string' &&\r\n subscriptionOptions.p256dh.length > 0 &&\r\n typeof subscriptionOptions.endpoint === 'string' &&\r\n subscriptionOptions.endpoint.length > 0 &&\r\n typeof subscriptionOptions.swScope === 'string' &&\r\n subscriptionOptions.swScope.length > 0 &&\r\n typeof subscriptionOptions.vapidKey === 'string' &&\r\n subscriptionOptions.vapidKey.length > 0);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Exported for tests.\r\nconst DATABASE_NAME = 'firebase-messaging-database';\r\nconst DATABASE_VERSION = 1;\r\nconst OBJECT_STORE_NAME = 'firebase-messaging-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\r\n upgrade: (upgradeDb, oldVersion) => {\r\n // We don't use 'break' in this switch statement, the fall-through behavior is what we want,\r\n // because if there are multiple versions between the old version and the current version, we\r\n // want ALL the migrations that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (oldVersion) {\r\n case 0:\r\n upgradeDb.createObjectStore(OBJECT_STORE_NAME);\r\n }\r\n }\r\n });\r\n }\r\n return dbPromise;\r\n}\r\n/** Gets record(s) from the objectStore that match the given key. */\r\nasync function dbGet(firebaseDependencies) {\r\n const key = getKey(firebaseDependencies);\r\n const db = await getDbPromise();\r\n const tokenDetails = (await db\r\n .transaction(OBJECT_STORE_NAME)\r\n .objectStore(OBJECT_STORE_NAME)\r\n .get(key));\r\n if (tokenDetails) {\r\n return tokenDetails;\r\n }\r\n else {\r\n // Check if there is a tokenDetails object in the old DB.\r\n const oldTokenDetails = await migrateOldDatabase(firebaseDependencies.appConfig.senderId);\r\n if (oldTokenDetails) {\r\n await dbSet(firebaseDependencies, oldTokenDetails);\r\n return oldTokenDetails;\r\n }\r\n }\r\n}\r\n/** Assigns or overwrites the record for the given key with the given value. */\r\nasync function dbSet(firebaseDependencies, tokenDetails) {\r\n const key = getKey(firebaseDependencies);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n await tx.objectStore(OBJECT_STORE_NAME).put(tokenDetails, key);\r\n await tx.done;\r\n return tokenDetails;\r\n}\r\n/** Removes record(s) from the objectStore that match the given key. */\r\nasync function dbRemove(firebaseDependencies) {\r\n const key = getKey(firebaseDependencies);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n await tx.objectStore(OBJECT_STORE_NAME).delete(key);\r\n await tx.done;\r\n}\r\nfunction getKey({ appConfig }) {\r\n return appConfig.appId;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERROR_MAP = {\r\n [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\r\n [\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */]: 'This method is available in a Window context.',\r\n [\"only-available-in-sw\" /* ErrorCode.AVAILABLE_IN_SW */]: 'This method is available in a service worker context.',\r\n [\"permission-default\" /* ErrorCode.PERMISSION_DEFAULT */]: 'The notification permission was not granted and dismissed instead.',\r\n [\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */]: 'The notification permission was not granted and blocked instead.',\r\n [\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */]: \"This browser doesn't support the API's required to use the Firebase SDK.\",\r\n [\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */]: \"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)\",\r\n [\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */]: 'We are unable to register the default service worker. {$browserErrorMessage}',\r\n [\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */]: 'A problem occurred while subscribing the user to FCM: {$errorInfo}',\r\n [\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */]: 'FCM returned no token when subscribing the user to push.',\r\n [\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */]: 'A problem occurred while unsubscribing the ' +\r\n 'user from FCM: {$errorInfo}',\r\n [\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */]: 'A problem occurred while updating the user from FCM: {$errorInfo}',\r\n [\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */]: 'FCM returned no token when updating the user to push.',\r\n [\"use-sw-after-get-token\" /* ErrorCode.USE_SW_AFTER_GET_TOKEN */]: 'The useServiceWorker() method may only be called once and must be ' +\r\n 'called before calling getToken() to ensure your service worker is used.',\r\n [\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */]: 'The input to useServiceWorker() must be a ServiceWorkerRegistration.',\r\n [\"invalid-bg-handler\" /* ErrorCode.INVALID_BG_HANDLER */]: 'The input to setBackgroundMessageHandler() must be a function.',\r\n [\"invalid-vapid-key\" /* ErrorCode.INVALID_VAPID_KEY */]: 'The public VAPID key must be a string.',\r\n [\"use-vapid-key-after-get-token\" /* ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN */]: 'The usePublicVapidKey() method may only be called once and must be ' +\r\n 'called before calling getToken() to ensure your VAPID key is used.'\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory('messaging', 'Messaging', ERROR_MAP);\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function requestGetToken(firebaseDependencies, subscriptionOptions) {\r\n const headers = await getHeaders(firebaseDependencies);\r\n const body = getBody(subscriptionOptions);\r\n const subscribeOptions = {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(body)\r\n };\r\n let responseData;\r\n try {\r\n const response = await fetch(getEndpoint(firebaseDependencies.appConfig), subscribeOptions);\r\n responseData = await response.json();\r\n }\r\n catch (err) {\r\n throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\r\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\r\n });\r\n }\r\n if (responseData.error) {\r\n const message = responseData.error.message;\r\n throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\r\n errorInfo: message\r\n });\r\n }\r\n if (!responseData.token) {\r\n throw ERROR_FACTORY.create(\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */);\r\n }\r\n return responseData.token;\r\n}\r\nasync function requestUpdateToken(firebaseDependencies, tokenDetails) {\r\n const headers = await getHeaders(firebaseDependencies);\r\n const body = getBody(tokenDetails.subscriptionOptions);\r\n const updateOptions = {\r\n method: 'PATCH',\r\n headers,\r\n body: JSON.stringify(body)\r\n };\r\n let responseData;\r\n try {\r\n const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${tokenDetails.token}`, updateOptions);\r\n responseData = await response.json();\r\n }\r\n catch (err) {\r\n throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\r\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\r\n });\r\n }\r\n if (responseData.error) {\r\n const message = responseData.error.message;\r\n throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\r\n errorInfo: message\r\n });\r\n }\r\n if (!responseData.token) {\r\n throw ERROR_FACTORY.create(\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */);\r\n }\r\n return responseData.token;\r\n}\r\nasync function requestDeleteToken(firebaseDependencies, token) {\r\n const headers = await getHeaders(firebaseDependencies);\r\n const unsubscribeOptions = {\r\n method: 'DELETE',\r\n headers\r\n };\r\n try {\r\n const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${token}`, unsubscribeOptions);\r\n const responseData = await response.json();\r\n if (responseData.error) {\r\n const message = responseData.error.message;\r\n throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\r\n errorInfo: message\r\n });\r\n }\r\n }\r\n catch (err) {\r\n throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\r\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\r\n });\r\n }\r\n}\r\nfunction getEndpoint({ projectId }) {\r\n return `${ENDPOINT}/projects/${projectId}/registrations`;\r\n}\r\nasync function getHeaders({ appConfig, installations }) {\r\n const authToken = await installations.getToken();\r\n return new Headers({\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n 'x-goog-api-key': appConfig.apiKey,\r\n 'x-goog-firebase-installations-auth': `FIS ${authToken}`\r\n });\r\n}\r\nfunction getBody({ p256dh, auth, endpoint, vapidKey }) {\r\n const body = {\r\n web: {\r\n endpoint,\r\n auth,\r\n p256dh\r\n }\r\n };\r\n if (vapidKey !== DEFAULT_VAPID_KEY) {\r\n body.web.applicationPubKey = vapidKey;\r\n }\r\n return body;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// UpdateRegistration will be called once every week.\r\nconst TOKEN_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\r\nasync function getTokenInternal(messaging) {\r\n const pushSubscription = await getPushSubscription(messaging.swRegistration, messaging.vapidKey);\r\n const subscriptionOptions = {\r\n vapidKey: messaging.vapidKey,\r\n swScope: messaging.swRegistration.scope,\r\n endpoint: pushSubscription.endpoint,\r\n auth: arrayToBase64(pushSubscription.getKey('auth')),\r\n p256dh: arrayToBase64(pushSubscription.getKey('p256dh'))\r\n };\r\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\r\n if (!tokenDetails) {\r\n // No token, get a new one.\r\n return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\r\n }\r\n else if (!isTokenValid(tokenDetails.subscriptionOptions, subscriptionOptions)) {\r\n // Invalid token, get a new one.\r\n try {\r\n await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\r\n }\r\n catch (e) {\r\n // Suppress errors because of #2364\r\n console.warn(e);\r\n }\r\n return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\r\n }\r\n else if (Date.now() >= tokenDetails.createTime + TOKEN_EXPIRATION_MS) {\r\n // Weekly token refresh\r\n return updateToken(messaging, {\r\n token: tokenDetails.token,\r\n createTime: Date.now(),\r\n subscriptionOptions\r\n });\r\n }\r\n else {\r\n // Valid token, nothing to do.\r\n return tokenDetails.token;\r\n }\r\n}\r\n/**\r\n * This method deletes the token from the database, unsubscribes the token from FCM, and unregisters\r\n * the push subscription if it exists.\r\n */\r\nasync function deleteTokenInternal(messaging) {\r\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\r\n if (tokenDetails) {\r\n await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\r\n await dbRemove(messaging.firebaseDependencies);\r\n }\r\n // Unsubscribe from the push subscription.\r\n const pushSubscription = await messaging.swRegistration.pushManager.getSubscription();\r\n if (pushSubscription) {\r\n return pushSubscription.unsubscribe();\r\n }\r\n // If there's no SW, consider it a success.\r\n return true;\r\n}\r\nasync function updateToken(messaging, tokenDetails) {\r\n try {\r\n const updatedToken = await requestUpdateToken(messaging.firebaseDependencies, tokenDetails);\r\n const updatedTokenDetails = Object.assign(Object.assign({}, tokenDetails), { token: updatedToken, createTime: Date.now() });\r\n await dbSet(messaging.firebaseDependencies, updatedTokenDetails);\r\n return updatedToken;\r\n }\r\n catch (e) {\r\n throw e;\r\n }\r\n}\r\nasync function getNewToken(firebaseDependencies, subscriptionOptions) {\r\n const token = await requestGetToken(firebaseDependencies, subscriptionOptions);\r\n const tokenDetails = {\r\n token,\r\n createTime: Date.now(),\r\n subscriptionOptions\r\n };\r\n await dbSet(firebaseDependencies, tokenDetails);\r\n return tokenDetails.token;\r\n}\r\n/**\r\n * Gets a PushSubscription for the current user.\r\n */\r\nasync function getPushSubscription(swRegistration, vapidKey) {\r\n const subscription = await swRegistration.pushManager.getSubscription();\r\n if (subscription) {\r\n return subscription;\r\n }\r\n return swRegistration.pushManager.subscribe({\r\n userVisibleOnly: true,\r\n // Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key\r\n // submitted to pushManager#subscribe must be of type Uint8Array.\r\n applicationServerKey: base64ToArray(vapidKey)\r\n });\r\n}\r\n/**\r\n * Checks if the saved tokenDetails object matches the configuration provided.\r\n */\r\nfunction isTokenValid(dbOptions, currentOptions) {\r\n const isVapidKeyEqual = currentOptions.vapidKey === dbOptions.vapidKey;\r\n const isEndpointEqual = currentOptions.endpoint === dbOptions.endpoint;\r\n const isAuthEqual = currentOptions.auth === dbOptions.auth;\r\n const isP256dhEqual = currentOptions.p256dh === dbOptions.p256dh;\r\n return isVapidKeyEqual && isEndpointEqual && isAuthEqual && isP256dhEqual;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction externalizePayload(internalPayload) {\r\n const payload = {\r\n from: internalPayload.from,\r\n // eslint-disable-next-line camelcase\r\n collapseKey: internalPayload.collapse_key,\r\n // eslint-disable-next-line camelcase\r\n messageId: internalPayload.fcmMessageId\r\n };\r\n propagateNotificationPayload(payload, internalPayload);\r\n propagateDataPayload(payload, internalPayload);\r\n propagateFcmOptions(payload, internalPayload);\r\n return payload;\r\n}\r\nfunction propagateNotificationPayload(payload, messagePayloadInternal) {\r\n if (!messagePayloadInternal.notification) {\r\n return;\r\n }\r\n payload.notification = {};\r\n const title = messagePayloadInternal.notification.title;\r\n if (!!title) {\r\n payload.notification.title = title;\r\n }\r\n const body = messagePayloadInternal.notification.body;\r\n if (!!body) {\r\n payload.notification.body = body;\r\n }\r\n const image = messagePayloadInternal.notification.image;\r\n if (!!image) {\r\n payload.notification.image = image;\r\n }\r\n const icon = messagePayloadInternal.notification.icon;\r\n if (!!icon) {\r\n payload.notification.icon = icon;\r\n }\r\n}\r\nfunction propagateDataPayload(payload, messagePayloadInternal) {\r\n if (!messagePayloadInternal.data) {\r\n return;\r\n }\r\n payload.data = messagePayloadInternal.data;\r\n}\r\nfunction propagateFcmOptions(payload, messagePayloadInternal) {\r\n var _a, _b, _c, _d, _e;\r\n // fcmOptions.link value is written into notification.click_action. see more in b/232072111\r\n if (!messagePayloadInternal.fcmOptions &&\r\n !((_a = messagePayloadInternal.notification) === null || _a === void 0 ? void 0 : _a.click_action)) {\r\n return;\r\n }\r\n payload.fcmOptions = {};\r\n const link = (_c = (_b = messagePayloadInternal.fcmOptions) === null || _b === void 0 ? void 0 : _b.link) !== null && _c !== void 0 ? _c : (_d = messagePayloadInternal.notification) === null || _d === void 0 ? void 0 : _d.click_action;\r\n if (!!link) {\r\n payload.fcmOptions.link = link;\r\n }\r\n // eslint-disable-next-line camelcase\r\n const analyticsLabel = (_e = messagePayloadInternal.fcmOptions) === null || _e === void 0 ? void 0 : _e.analytics_label;\r\n if (!!analyticsLabel) {\r\n payload.fcmOptions.analyticsLabel = analyticsLabel;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction isConsoleMessage(data) {\r\n // This message has a campaign ID, meaning it was sent using the Firebase Console.\r\n return typeof data === 'object' && !!data && CONSOLE_CAMPAIGN_ID in data;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n_mergeStrings('AzSCbw63g1R0nCw85jG8', 'Iaya3yLKwmgvh7cF0q4');\r\nfunction _mergeStrings(s1, s2) {\r\n const resultArray = [];\r\n for (let i = 0; i < s1.length; i++) {\r\n resultArray.push(s1.charAt(i));\r\n if (i < s2.length) {\r\n resultArray.push(s2.charAt(i));\r\n }\r\n }\r\n return resultArray.join('');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction extractAppConfig(app) {\r\n if (!app || !app.options) {\r\n throw getMissingValueError('App Configuration Object');\r\n }\r\n if (!app.name) {\r\n throw getMissingValueError('App Name');\r\n }\r\n // Required app config keys\r\n const configKeys = [\r\n 'projectId',\r\n 'apiKey',\r\n 'appId',\r\n 'messagingSenderId'\r\n ];\r\n const { options } = app;\r\n for (const keyName of configKeys) {\r\n if (!options[keyName]) {\r\n throw getMissingValueError(keyName);\r\n }\r\n }\r\n return {\r\n appName: app.name,\r\n projectId: options.projectId,\r\n apiKey: options.apiKey,\r\n appId: options.appId,\r\n senderId: options.messagingSenderId\r\n };\r\n}\r\nfunction getMissingValueError(valueName) {\r\n return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\r\n valueName\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MessagingService {\r\n constructor(app, installations, analyticsProvider) {\r\n // logging is only done with end user consent. Default to false.\r\n this.deliveryMetricsExportedToBigQueryEnabled = false;\r\n this.onBackgroundMessageHandler = null;\r\n this.onMessageHandler = null;\r\n this.logEvents = [];\r\n this.isLogServiceStarted = false;\r\n const appConfig = extractAppConfig(app);\r\n this.firebaseDependencies = {\r\n app,\r\n appConfig,\r\n installations,\r\n analyticsProvider\r\n };\r\n }\r\n _delete() {\r\n return Promise.resolve();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function registerDefaultSw(messaging) {\r\n try {\r\n messaging.swRegistration = await navigator.serviceWorker.register(DEFAULT_SW_PATH, {\r\n scope: DEFAULT_SW_SCOPE\r\n });\r\n // The timing when browser updates sw when sw has an update is unreliable from experiment. It\r\n // leads to version conflict when the SDK upgrades to a newer version in the main page, but sw\r\n // is stuck with the old version. For example,\r\n // https://github.com/firebase/firebase-js-sdk/issues/2590 The following line reliably updates\r\n // sw if there was an update.\r\n messaging.swRegistration.update().catch(() => {\r\n /* it is non blocking and we don't care if it failed */\r\n });\r\n }\r\n catch (e) {\r\n throw ERROR_FACTORY.create(\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */, {\r\n browserErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function updateSwReg(messaging, swRegistration) {\r\n if (!swRegistration && !messaging.swRegistration) {\r\n await registerDefaultSw(messaging);\r\n }\r\n if (!swRegistration && !!messaging.swRegistration) {\r\n return;\r\n }\r\n if (!(swRegistration instanceof ServiceWorkerRegistration)) {\r\n throw ERROR_FACTORY.create(\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */);\r\n }\r\n messaging.swRegistration = swRegistration;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function updateVapidKey(messaging, vapidKey) {\r\n if (!!vapidKey) {\r\n messaging.vapidKey = vapidKey;\r\n }\r\n else if (!messaging.vapidKey) {\r\n messaging.vapidKey = DEFAULT_VAPID_KEY;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function getToken$1(messaging, options) {\r\n if (!navigator) {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\r\n }\r\n if (Notification.permission === 'default') {\r\n await Notification.requestPermission();\r\n }\r\n if (Notification.permission !== 'granted') {\r\n throw ERROR_FACTORY.create(\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */);\r\n }\r\n await updateVapidKey(messaging, options === null || options === void 0 ? void 0 : options.vapidKey);\r\n await updateSwReg(messaging, options === null || options === void 0 ? void 0 : options.serviceWorkerRegistration);\r\n return getTokenInternal(messaging);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function logToScion(messaging, messageType, data) {\r\n const eventType = getEventType(messageType);\r\n const analytics = await messaging.firebaseDependencies.analyticsProvider.get();\r\n analytics.logEvent(eventType, {\r\n /* eslint-disable camelcase */\r\n message_id: data[CONSOLE_CAMPAIGN_ID],\r\n message_name: data[CONSOLE_CAMPAIGN_NAME],\r\n message_time: data[CONSOLE_CAMPAIGN_TIME],\r\n message_device_time: Math.floor(Date.now() / 1000)\r\n /* eslint-enable camelcase */\r\n });\r\n}\r\nfunction getEventType(messageType) {\r\n switch (messageType) {\r\n case MessageType.NOTIFICATION_CLICKED:\r\n return 'notification_open';\r\n case MessageType.PUSH_RECEIVED:\r\n return 'notification_foreground';\r\n default:\r\n throw new Error();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function messageEventListener(messaging, event) {\r\n const internalPayload = event.data;\r\n if (!internalPayload.isFirebaseMessaging) {\r\n return;\r\n }\r\n if (messaging.onMessageHandler &&\r\n internalPayload.messageType === MessageType.PUSH_RECEIVED) {\r\n if (typeof messaging.onMessageHandler === 'function') {\r\n messaging.onMessageHandler(externalizePayload(internalPayload));\r\n }\r\n else {\r\n messaging.onMessageHandler.next(externalizePayload(internalPayload));\r\n }\r\n }\r\n // Log to Scion if applicable\r\n const dataPayload = internalPayload.data;\r\n if (isConsoleMessage(dataPayload) &&\r\n dataPayload[CONSOLE_CAMPAIGN_ANALYTICS_ENABLED] === '1') {\r\n await logToScion(messaging, internalPayload.messageType, dataPayload);\r\n }\r\n}\n\nconst name = \"@firebase/messaging\";\nconst version = \"0.12.12\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst WindowMessagingFactory = (container) => {\r\n const messaging = new MessagingService(container.getProvider('app').getImmediate(), container.getProvider('installations-internal').getImmediate(), container.getProvider('analytics-internal'));\r\n navigator.serviceWorker.addEventListener('message', e => messageEventListener(messaging, e));\r\n return messaging;\r\n};\r\nconst WindowMessagingInternalFactory = (container) => {\r\n const messaging = container\r\n .getProvider('messaging')\r\n .getImmediate();\r\n const messagingInternal = {\r\n getToken: (options) => getToken$1(messaging, options)\r\n };\r\n return messagingInternal;\r\n};\r\nfunction registerMessagingInWindow() {\r\n _registerComponent(new Component('messaging', WindowMessagingFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n _registerComponent(new Component('messaging-internal', WindowMessagingInternalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n registerVersion(name, version);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name, version, 'esm2017');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Checks if all required APIs exist in the browser.\r\n * @returns a Promise that resolves to a boolean.\r\n *\r\n * @public\r\n */\r\nasync function isWindowSupported() {\r\n try {\r\n // This throws if open() is unsupported, so adding it to the conditional\r\n // statement below can cause an uncaught error.\r\n await validateIndexedDBOpenable();\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\r\n // might be prohibited to run. In these contexts, an error would be thrown during the messaging\r\n // instantiating phase, informing the developers to import/call isSupported for special handling.\r\n return (typeof window !== 'undefined' &&\r\n isIndexedDBAvailable() &&\r\n areCookiesEnabled() &&\r\n 'serviceWorker' in navigator &&\r\n 'PushManager' in window &&\r\n 'Notification' in window &&\r\n 'fetch' in window &&\r\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\r\n PushSubscription.prototype.hasOwnProperty('getKey'));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function deleteToken$1(messaging) {\r\n if (!navigator) {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\r\n }\r\n if (!messaging.swRegistration) {\r\n await registerDefaultSw(messaging);\r\n }\r\n return deleteTokenInternal(messaging);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction onMessage$1(messaging, nextOrObserver) {\r\n if (!navigator) {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\r\n }\r\n messaging.onMessageHandler = nextOrObserver;\r\n return () => {\r\n messaging.onMessageHandler = null;\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Retrieves a Firebase Cloud Messaging instance.\r\n *\r\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\r\n *\r\n * @public\r\n */\r\nfunction getMessagingInWindow(app = getApp()) {\r\n // Conscious decision to make this async check non-blocking during the messaging instance\r\n // initialization phase for performance consideration. An error would be thrown latter for\r\n // developer's information. Developers can then choose to import and call `isSupported` for\r\n // special handling.\r\n isWindowSupported().then(isSupported => {\r\n // If `isWindowSupported()` resolved, but returned false.\r\n if (!isSupported) {\r\n throw ERROR_FACTORY.create(\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */);\r\n }\r\n }, _ => {\r\n // If `isWindowSupported()` rejected.\r\n throw ERROR_FACTORY.create(\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */);\r\n });\r\n return _getProvider(getModularInstance(app), 'messaging').getImmediate();\r\n}\r\n/**\r\n * Subscribes the {@link Messaging} instance to push notifications. Returns a Firebase Cloud\r\n * Messaging registration token that can be used to send push messages to that {@link Messaging}\r\n * instance.\r\n *\r\n * If notification permission isn't already granted, this method asks the user for permission. The\r\n * returned promise rejects if the user does not allow the app to show notifications.\r\n *\r\n * @param messaging - The {@link Messaging} instance.\r\n * @param options - Provides an optional vapid key and an optional service worker registration.\r\n *\r\n * @returns The promise resolves with an FCM registration token.\r\n *\r\n * @public\r\n */\r\nasync function getToken(messaging, options) {\r\n messaging = getModularInstance(messaging);\r\n return getToken$1(messaging, options);\r\n}\r\n/**\r\n * Deletes the registration token associated with this {@link Messaging} instance and unsubscribes\r\n * the {@link Messaging} instance from the push subscription.\r\n *\r\n * @param messaging - The {@link Messaging} instance.\r\n *\r\n * @returns The promise resolves when the token has been successfully deleted.\r\n *\r\n * @public\r\n */\r\nfunction deleteToken(messaging) {\r\n messaging = getModularInstance(messaging);\r\n return deleteToken$1(messaging);\r\n}\r\n/**\r\n * When a push message is received and the user is currently on a page for your origin, the\r\n * message is passed to the page and an `onMessage()` event is dispatched with the payload of\r\n * the push message.\r\n *\r\n *\r\n * @param messaging - The {@link Messaging} instance.\r\n * @param nextOrObserver - This function, or observer object with `next` defined,\r\n * is called when a message is received and the user is currently viewing your page.\r\n * @returns To stop listening for messages execute this returned function.\r\n *\r\n * @public\r\n */\r\nfunction onMessage(messaging, nextOrObserver) {\r\n messaging = getModularInstance(messaging);\r\n return onMessage$1(messaging, nextOrObserver);\r\n}\n\n/**\r\n * The Firebase Cloud Messaging Web SDK.\r\n * This SDK does not work in a Node.js environment.\r\n *\r\n * @packageDocumentation\r\n */\r\nregisterMessagingInWindow();\n\nexport { deleteToken, getMessagingInWindow as getMessaging, getToken, isWindowSupported as isSupported, onMessage };\n//# sourceMappingURL=index.esm2017.js.map\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.\r\n */\r\nconst CONSTANTS = {\r\n /**\r\n * @define {boolean} Whether this is the client Node.js SDK.\r\n */\r\n NODE_CLIENT: false,\r\n /**\r\n * @define {boolean} Whether this is the Admin Node.js SDK.\r\n */\r\n NODE_ADMIN: false,\r\n /**\r\n * Firebase SDK Version\r\n */\r\n SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws an error if the provided assertion is falsy\r\n */\r\nconst assert = function (assertion, message) {\r\n if (!assertion) {\r\n throw assertionError(message);\r\n }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n */\r\nconst assertionError = function (message) {\r\n return new Error('Firebase Database (' +\r\n CONSTANTS.SDK_VERSION +\r\n ') INTERNAL ASSERT FAILED: ' +\r\n message);\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst stringToByteArray$1 = function (str) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let p = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n let c = str.charCodeAt(i);\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if ((c & 0xfc00) === 0xd800 &&\r\n i + 1 < str.length &&\r\n (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\r\n // Surrogate Pair\r\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param bytes Array of numbers representing characters.\r\n * @return Stringification of the array.\r\n */\r\nconst byteArrayToString = function (bytes) {\r\n // TODO(user): Use native implementations if/when available\r\n const out = [];\r\n let pos = 0, c = 0;\r\n while (pos < bytes.length) {\r\n const c1 = bytes[pos++];\r\n if (c1 < 128) {\r\n out[c++] = String.fromCharCode(c1);\r\n }\r\n else if (c1 > 191 && c1 < 224) {\r\n const c2 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n }\r\n else if (c1 > 239 && c1 < 365) {\r\n // Surrogate Pair\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n const c4 = bytes[pos++];\r\n const u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n 0x10000;\r\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n }\r\n else {\r\n const c2 = bytes[pos++];\r\n const c3 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n }\r\n }\r\n return out.join('');\r\n};\r\n// We define it as an object literal instead of a class because a class compiled down to es5 can't\r\n// be treeshaked. https://github.com/rollup/rollup/issues/1691\r\n// Static lookup maps, lazily populated by init_()\r\nconst base64 = {\r\n /**\r\n * Maps bytes to characters.\r\n */\r\n byteToCharMap_: null,\r\n /**\r\n * Maps characters to bytes.\r\n */\r\n charToByteMap_: null,\r\n /**\r\n * Maps bytes to websafe characters.\r\n * @private\r\n */\r\n byteToCharMapWebSafe_: null,\r\n /**\r\n * Maps websafe characters to bytes.\r\n * @private\r\n */\r\n charToByteMapWebSafe_: null,\r\n /**\r\n * Our default alphabet, shared between\r\n * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n */\r\n ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n /**\r\n * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n */\r\n get ENCODED_VALS() {\r\n return this.ENCODED_VALS_BASE + '+/=';\r\n },\r\n /**\r\n * Our websafe alphabet.\r\n */\r\n get ENCODED_VALS_WEBSAFE() {\r\n return this.ENCODED_VALS_BASE + '-_.';\r\n },\r\n /**\r\n * Whether this browser supports the atob and btoa functions. This extension\r\n * started at Mozilla but is now implemented by many browsers. We use the\r\n * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n * but still allowing the standard per-browser compilations.\r\n *\r\n */\r\n HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n /**\r\n * Base64-encode an array of bytes.\r\n *\r\n * @param input An array of bytes (numbers with\r\n * value in [0, 255]) to encode.\r\n * @param webSafe Boolean indicating we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeByteArray(input, webSafe) {\r\n if (!Array.isArray(input)) {\r\n throw Error('encodeByteArray takes an array as a parameter');\r\n }\r\n this.init_();\r\n const byteToCharMap = webSafe\r\n ? this.byteToCharMapWebSafe_\r\n : this.byteToCharMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length; i += 3) {\r\n const byte1 = input[i];\r\n const haveByte2 = i + 1 < input.length;\r\n const byte2 = haveByte2 ? input[i + 1] : 0;\r\n const haveByte3 = i + 2 < input.length;\r\n const byte3 = haveByte3 ? input[i + 2] : 0;\r\n const outByte1 = byte1 >> 2;\r\n const outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n let outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n let outByte4 = byte3 & 0x3f;\r\n if (!haveByte3) {\r\n outByte4 = 64;\r\n if (!haveByte2) {\r\n outByte3 = 64;\r\n }\r\n }\r\n output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n }\r\n return output.join('');\r\n },\r\n /**\r\n * Base64-encode a string.\r\n *\r\n * @param input A string to encode.\r\n * @param webSafe If true, we should use the\r\n * alternative alphabet.\r\n * @return The base64 encoded string.\r\n */\r\n encodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return btoa(input);\r\n }\r\n return this.encodeByteArray(stringToByteArray$1(input), webSafe);\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * @param input to decode.\r\n * @param webSafe True if we should use the\r\n * alternative alphabet.\r\n * @return string representing the decoded value.\r\n */\r\n decodeString(input, webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !webSafe) {\r\n return atob(input);\r\n }\r\n return byteArrayToString(this.decodeStringToByteArray(input, webSafe));\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * In base-64 decoding, groups of four characters are converted into three\r\n * bytes. If the encoder did not apply padding, the input length may not\r\n * be a multiple of 4.\r\n *\r\n * In this case, the last group will have fewer than 4 characters, and\r\n * padding will be inferred. If the group has one or two characters, it decodes\r\n * to one byte. If the group has three characters, it decodes to two bytes.\r\n *\r\n * @param input Input to decode.\r\n * @param webSafe True if we should use the web-safe alphabet.\r\n * @return bytes representing the decoded value.\r\n */\r\n decodeStringToByteArray(input, webSafe) {\r\n this.init_();\r\n const charToByteMap = webSafe\r\n ? this.charToByteMapWebSafe_\r\n : this.charToByteMap_;\r\n const output = [];\r\n for (let i = 0; i < input.length;) {\r\n const byte1 = charToByteMap[input.charAt(i++)];\r\n const haveByte2 = i < input.length;\r\n const byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n ++i;\r\n const haveByte3 = i < input.length;\r\n const byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n const haveByte4 = i < input.length;\r\n const byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n throw new DecodeBase64StringError();\r\n }\r\n const outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n output.push(outByte1);\r\n if (byte3 !== 64) {\r\n const outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n output.push(outByte2);\r\n if (byte4 !== 64) {\r\n const outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n output.push(outByte3);\r\n }\r\n }\r\n }\r\n return output;\r\n },\r\n /**\r\n * Lazy static initialization function. Called before\r\n * accessing any of the static map variables.\r\n * @private\r\n */\r\n init_() {\r\n if (!this.byteToCharMap_) {\r\n this.byteToCharMap_ = {};\r\n this.charToByteMap_ = {};\r\n this.byteToCharMapWebSafe_ = {};\r\n this.charToByteMapWebSafe_ = {};\r\n // We want quick mappings back and forth, so we precompute two maps.\r\n for (let i = 0; i < this.ENCODED_VALS.length; i++) {\r\n this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n // Be forgiving when decoding and correctly decode both encodings.\r\n if (i >= this.ENCODED_VALS_BASE.length) {\r\n this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n/**\r\n * An error encountered while decoding base64 string.\r\n */\r\nclass DecodeBase64StringError extends Error {\r\n constructor() {\r\n super(...arguments);\r\n this.name = 'DecodeBase64StringError';\r\n }\r\n}\r\n/**\r\n * URL-safe base64 encoding\r\n */\r\nconst base64Encode = function (str) {\r\n const utf8Bytes = stringToByteArray$1(str);\r\n return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 encoding (without \".\" padding in the end).\r\n * e.g. Used in JSON Web Token (JWT) parts.\r\n */\r\nconst base64urlEncodeWithoutPadding = function (str) {\r\n // Use base64url encoding and remove padding in the end (dot characters).\r\n return base64Encode(str).replace(/\\./g, '');\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param str To be decoded\r\n * @return Decoded result, if possible\r\n */\r\nconst base64Decode = function (str) {\r\n try {\r\n return base64.decodeString(str, true);\r\n }\r\n catch (e) {\r\n console.error('base64Decode failed: ', e);\r\n }\r\n return null;\r\n};\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays). Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n *\r\n * Note: we don't merge __proto__ to prevent prototype pollution\r\n */\r\nfunction deepExtend(target, source) {\r\n if (!(source instanceof Object)) {\r\n return source;\r\n }\r\n switch (source.constructor) {\r\n case Date:\r\n // Treat Dates like scalars; if the target date object had any child\r\n // properties - they will be lost!\r\n const dateValue = source;\r\n return new Date(dateValue.getTime());\r\n case Object:\r\n if (target === undefined) {\r\n target = {};\r\n }\r\n break;\r\n case Array:\r\n // Always copy the array source and overwrite the target.\r\n target = [];\r\n break;\r\n default:\r\n // Not a plain Object - treat it as a scalar.\r\n return source;\r\n }\r\n for (const prop in source) {\r\n // use isValidKey to guard against prototype pollution. See https://snyk.io/vuln/SNYK-JS-LODASH-450202\r\n if (!source.hasOwnProperty(prop) || !isValidKey(prop)) {\r\n continue;\r\n }\r\n target[prop] = deepExtend(target[prop], source[prop]);\r\n }\r\n return target;\r\n}\r\nfunction isValidKey(key) {\r\n return key !== '__proto__';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Polyfill for `globalThis` object.\r\n * @returns the `globalThis` object for the given environment.\r\n * @public\r\n */\r\nfunction getGlobal() {\r\n if (typeof self !== 'undefined') {\r\n return self;\r\n }\r\n if (typeof window !== 'undefined') {\r\n return window;\r\n }\r\n if (typeof global !== 'undefined') {\r\n return global;\r\n }\r\n throw new Error('Unable to locate global object.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2022 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst getDefaultsFromGlobal = () => getGlobal().__FIREBASE_DEFAULTS__;\r\n/**\r\n * Attempt to read defaults from a JSON string provided to\r\n * process(.)env(.)__FIREBASE_DEFAULTS__ or a JSON file whose path is in\r\n * process(.)env(.)__FIREBASE_DEFAULTS_PATH__\r\n * The dots are in parens because certain compilers (Vite?) cannot\r\n * handle seeing that variable in comments.\r\n * See https://github.com/firebase/firebase-js-sdk/issues/6838\r\n */\r\nconst getDefaultsFromEnvVariable = () => {\r\n if (typeof process === 'undefined' || typeof process.env === 'undefined') {\r\n return;\r\n }\r\n const defaultsJsonString = process.env.__FIREBASE_DEFAULTS__;\r\n if (defaultsJsonString) {\r\n return JSON.parse(defaultsJsonString);\r\n }\r\n};\r\nconst getDefaultsFromCookie = () => {\r\n if (typeof document === 'undefined') {\r\n return;\r\n }\r\n let match;\r\n try {\r\n match = document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/);\r\n }\r\n catch (e) {\r\n // Some environments such as Angular Universal SSR have a\r\n // `document` object but error on accessing `document.cookie`.\r\n return;\r\n }\r\n const decoded = match && base64Decode(match[1]);\r\n return decoded && JSON.parse(decoded);\r\n};\r\n/**\r\n * Get the __FIREBASE_DEFAULTS__ object. It checks in order:\r\n * (1) if such an object exists as a property of `globalThis`\r\n * (2) if such an object was provided on a shell environment variable\r\n * (3) if such an object exists in a cookie\r\n * @public\r\n */\r\nconst getDefaults = () => {\r\n try {\r\n return (getDefaultsFromGlobal() ||\r\n getDefaultsFromEnvVariable() ||\r\n getDefaultsFromCookie());\r\n }\r\n catch (e) {\r\n /**\r\n * Catch-all for being unable to get __FIREBASE_DEFAULTS__ due\r\n * to any environment case we have not accounted for. Log to\r\n * info instead of swallowing so we can find these unknown cases\r\n * and add paths for them if needed.\r\n */\r\n console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`);\r\n return;\r\n }\r\n};\r\n/**\r\n * Returns emulator host stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a URL host formatted like `127.0.0.1:9999` or `[::1]:4000` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHost = (productName) => { var _a, _b; return (_b = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.emulatorHosts) === null || _b === void 0 ? void 0 : _b[productName]; };\r\n/**\r\n * Returns emulator hostname and port stored in the __FIREBASE_DEFAULTS__ object\r\n * for the given product.\r\n * @returns a pair of hostname and port like `[\"::1\", 4000]` if available\r\n * @public\r\n */\r\nconst getDefaultEmulatorHostnameAndPort = (productName) => {\r\n const host = getDefaultEmulatorHost(productName);\r\n if (!host) {\r\n return undefined;\r\n }\r\n const separatorIndex = host.lastIndexOf(':'); // Finding the last since IPv6 addr also has colons.\r\n if (separatorIndex <= 0 || separatorIndex + 1 === host.length) {\r\n throw new Error(`Invalid host ${host} with no separate hostname and port!`);\r\n }\r\n // eslint-disable-next-line no-restricted-globals\r\n const port = parseInt(host.substring(separatorIndex + 1), 10);\r\n if (host[0] === '[') {\r\n // Bracket-quoted `[ipv6addr]:port` => return \"ipv6addr\" (without brackets).\r\n return [host.substring(1, separatorIndex - 1), port];\r\n }\r\n else {\r\n return [host.substring(0, separatorIndex), port];\r\n }\r\n};\r\n/**\r\n * Returns Firebase app config stored in the __FIREBASE_DEFAULTS__ object.\r\n * @public\r\n */\r\nconst getDefaultAppConfig = () => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.config; };\r\n/**\r\n * Returns an experimental setting on the __FIREBASE_DEFAULTS__ object (properties\r\n * prefixed by \"_\")\r\n * @public\r\n */\r\nconst getExperimentalSetting = (name) => { var _a; return (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a[`_${name}`]; };\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass Deferred {\r\n constructor() {\r\n this.reject = () => { };\r\n this.resolve = () => { };\r\n this.promise = new Promise((resolve, reject) => {\r\n this.resolve = resolve;\r\n this.reject = reject;\r\n });\r\n }\r\n /**\r\n * Our API internals are not promisified and cannot because our callback APIs have subtle expectations around\r\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n */\r\n wrapCallback(callback) {\r\n return (error, value) => {\r\n if (error) {\r\n this.reject(error);\r\n }\r\n else {\r\n this.resolve(value);\r\n }\r\n if (typeof callback === 'function') {\r\n // Attaching noop handler just in case developer wasn't expecting\r\n // promises\r\n this.promise.catch(() => { });\r\n // Some of our callbacks don't expect a value and our own tests\r\n // assert that the parameter length is 1\r\n if (callback.length === 1) {\r\n callback(error);\r\n }\r\n else {\r\n callback(error, value);\r\n }\r\n }\r\n };\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction createMockUserToken(token, projectId) {\r\n if (token.uid) {\r\n throw new Error('The \"uid\" field is no longer supported by mockUserToken. Please use \"sub\" instead for Firebase Auth User ID.');\r\n }\r\n // Unsecured JWTs use \"none\" as the algorithm.\r\n const header = {\r\n alg: 'none',\r\n type: 'JWT'\r\n };\r\n const project = projectId || 'demo-project';\r\n const iat = token.iat || 0;\r\n const sub = token.sub || token.user_id;\r\n if (!sub) {\r\n throw new Error(\"mockUserToken must contain 'sub' or 'user_id' field!\");\r\n }\r\n const payload = Object.assign({ \r\n // Set all required fields to decent defaults\r\n iss: `https://securetoken.google.com/${project}`, aud: project, iat, exp: iat + 3600, auth_time: iat, sub, user_id: sub, firebase: {\r\n sign_in_provider: 'custom',\r\n identities: {}\r\n } }, token);\r\n // Unsecured JWTs use the empty string as a signature.\r\n const signature = '';\r\n return [\r\n base64urlEncodeWithoutPadding(JSON.stringify(header)),\r\n base64urlEncodeWithoutPadding(JSON.stringify(payload)),\r\n signature\r\n ].join('.');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns navigator.userAgent string or '' if it's not defined.\r\n * @return user agent string\r\n */\r\nfunction getUA() {\r\n if (typeof navigator !== 'undefined' &&\r\n typeof navigator['userAgent'] === 'string') {\r\n return navigator['userAgent'];\r\n }\r\n else {\r\n return '';\r\n }\r\n}\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap\r\n * in the Ripple emulator) nor Cordova `onDeviceReady`, which would normally\r\n * wait for a callback.\r\n */\r\nfunction isMobileCordova() {\r\n return (typeof window !== 'undefined' &&\r\n // @ts-ignore Setting up an broadly applicable index signature for Window\r\n // just to deal with this case would probably be a bad idea.\r\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n}\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return true if Node.js environment is detected or specified.\r\n */\r\n// Node detection logic from: https://github.com/iliakan/detect-node/\r\nfunction isNode() {\r\n var _a;\r\n const forceEnvironment = (_a = getDefaults()) === null || _a === void 0 ? void 0 : _a.forceEnvironment;\r\n if (forceEnvironment === 'node') {\r\n return true;\r\n }\r\n else if (forceEnvironment === 'browser') {\r\n return false;\r\n }\r\n try {\r\n return (Object.prototype.toString.call(global.process) === '[object process]');\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * Detect Browser Environment.\r\n * Note: This will return true for certain test frameworks that are incompletely\r\n * mimicking a browser, and should not lead to assuming all browser APIs are\r\n * available.\r\n */\r\nfunction isBrowser() {\r\n return typeof window !== 'undefined' || isWebWorker();\r\n}\r\n/**\r\n * Detect Web Worker context.\r\n */\r\nfunction isWebWorker() {\r\n return (typeof WorkerGlobalScope !== 'undefined' &&\r\n typeof self !== 'undefined' &&\r\n self instanceof WorkerGlobalScope);\r\n}\r\n/**\r\n * Detect Cloudflare Worker context.\r\n */\r\nfunction isCloudflareWorker() {\r\n return (typeof navigator !== 'undefined' &&\r\n navigator.userAgent === 'Cloudflare-Workers');\r\n}\r\nfunction isBrowserExtension() {\r\n const runtime = typeof chrome === 'object'\r\n ? chrome.runtime\r\n : typeof browser === 'object'\r\n ? browser.runtime\r\n : undefined;\r\n return typeof runtime === 'object' && runtime.id !== undefined;\r\n}\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return true if ReactNative environment is detected.\r\n */\r\nfunction isReactNative() {\r\n return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n}\r\n/** Detects Electron apps. */\r\nfunction isElectron() {\r\n return getUA().indexOf('Electron/') >= 0;\r\n}\r\n/** Detects Internet Explorer. */\r\nfunction isIE() {\r\n const ua = getUA();\r\n return ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0;\r\n}\r\n/** Detects Universal Windows Platform apps. */\r\nfunction isUWP() {\r\n return getUA().indexOf('MSAppHost/') >= 0;\r\n}\r\n/**\r\n * Detect whether the current SDK build is the Node version.\r\n *\r\n * @return true if it's the Node SDK build.\r\n */\r\nfunction isNodeSdk() {\r\n return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n}\r\n/** Returns true if we are running in Safari. */\r\nfunction isSafari() {\r\n return (!isNode() &&\r\n !!navigator.userAgent &&\r\n navigator.userAgent.includes('Safari') &&\r\n !navigator.userAgent.includes('Chrome'));\r\n}\r\n/**\r\n * This method checks if indexedDB is supported by current browser/service worker context\r\n * @return true if indexedDB is supported by current browser/service worker context\r\n */\r\nfunction isIndexedDBAvailable() {\r\n try {\r\n return typeof indexedDB === 'object';\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n}\r\n/**\r\n * This method validates browser/sw context for indexedDB by opening a dummy indexedDB database and reject\r\n * if errors occur during the database open operation.\r\n *\r\n * @throws exception if current browser/sw context can't run idb.open (ex: Safari iframe, Firefox\r\n * private browsing)\r\n */\r\nfunction validateIndexedDBOpenable() {\r\n return new Promise((resolve, reject) => {\r\n try {\r\n let preExist = true;\r\n const DB_CHECK_NAME = 'validate-browser-context-for-indexeddb-analytics-module';\r\n const request = self.indexedDB.open(DB_CHECK_NAME);\r\n request.onsuccess = () => {\r\n request.result.close();\r\n // delete database only when it doesn't pre-exist\r\n if (!preExist) {\r\n self.indexedDB.deleteDatabase(DB_CHECK_NAME);\r\n }\r\n resolve(true);\r\n };\r\n request.onupgradeneeded = () => {\r\n preExist = false;\r\n };\r\n request.onerror = () => {\r\n var _a;\r\n reject(((_a = request.error) === null || _a === void 0 ? void 0 : _a.message) || '');\r\n };\r\n }\r\n catch (error) {\r\n reject(error);\r\n }\r\n });\r\n}\r\n/**\r\n *\r\n * This method checks whether cookie is enabled within current browser\r\n * @return true if cookie is enabled within current browser\r\n */\r\nfunction areCookiesEnabled() {\r\n if (typeof navigator === 'undefined' || !navigator.cookieEnabled) {\r\n return false;\r\n }\r\n return true;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Standardized Firebase Error.\r\n *\r\n * Usage:\r\n *\r\n * // TypeScript string literals for type-safe codes\r\n * type Err =\r\n * 'unknown' |\r\n * 'object-not-found'\r\n * ;\r\n *\r\n * // Closure enum for type-safe error codes\r\n * // at-enum {string}\r\n * var Err = {\r\n * UNKNOWN: 'unknown',\r\n * OBJECT_NOT_FOUND: 'object-not-found',\r\n * }\r\n *\r\n * let errors: Map Visible for testing\r\n */\r\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\r\n/**\r\n * The percentage of backoff time to randomize by.\r\n * See\r\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\r\n * for context.\r\n *\r\n * Visible for testing\r\n */\r\nconst RANDOM_FACTOR = 0.5;\r\n/**\r\n * Based on the backoff method from\r\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\r\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\r\n */\r\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\r\n // Calculates an exponentially increasing value.\r\n // Deviation: calculates value from count and a constant interval, so we only need to save value\r\n // and count to restore state.\r\n const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\r\n // A random \"fuzz\" to avoid waves of retries.\r\n // Deviation: randomFactor is required.\r\n const randomWait = Math.round(\r\n // A fraction of the backoff value to add/subtract.\r\n // Deviation: changes multiplication order to improve readability.\r\n RANDOM_FACTOR *\r\n currBaseValue *\r\n // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\r\n // if we add or subtract.\r\n (Math.random() - 0.5) *\r\n 2);\r\n // Limits backoff to max to avoid effectively permanent backoff.\r\n return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provide English ordinal letters after a number\r\n */\r\nfunction ordinal(i) {\r\n if (!Number.isFinite(i)) {\r\n return `${i}`;\r\n }\r\n return i + indicator(i);\r\n}\r\nfunction indicator(i) {\r\n i = Math.abs(i);\r\n const cent = i % 100;\r\n if (cent >= 10 && cent <= 20) {\r\n return 'th';\r\n }\r\n const dec = i % 10;\r\n if (dec === 1) {\r\n return 'st';\r\n }\r\n if (dec === 2) {\r\n return 'nd';\r\n }\r\n if (dec === 3) {\r\n return 'rd';\r\n }\r\n return 'th';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getModularInstance(service) {\r\n if (service && service._delegate) {\r\n return service._delegate;\r\n }\r\n else {\r\n return service;\r\n }\r\n}\n\nexport { CONSTANTS, DecodeBase64StringError, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getDefaults, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isCloudflareWorker, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, isWebWorker, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, uuidv4, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n//# sourceMappingURL=index.esm2017.js.map\n","import { registerVersion } from '@firebase/app';\nexport * from '@firebase/app';\n\nvar name = \"firebase\";\nvar version = \"10.14.1\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nregisterVersion(name, version, 'app');\n//# sourceMappingURL=index.esm.js.map\n","export * from '@firebase/messaging';\n//# sourceMappingURL=index.esm.js.map\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","import { PACKAGE_VERSION } from './version.js';\n\n// Name of this application, used in the User-Agent.\nexport const APP_NAME = 'TinodeWeb/' + (PACKAGE_VERSION || '0.21');\n\n// API key. Use https://github.com/tinode/chat/tree/master/keygen to generate your own\nexport const API_KEY = 'AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K';\n\n// The array of possible hosts to connect to.\nexport const KNOWN_HOSTS = {hosted: 'web.tinode.co', local: 'localhost:6060'};\n\n// Default host name and port to connect to.\nexport const DEFAULT_HOST = KNOWN_HOSTS.hosted;\n\n// Enable console logging.\nexport const LOGGING_ENABLED = true;\n\n// Minimum time between two keypress notifications, milliseconds.\nexport const KEYPRESS_DELAY = 3_000;\n// Delay before sending a read notification, milliseconds.\nexport const READ_DELAY = 1_500;\n\n// The default shortest allowed tag length. Matches the value on the server.\nexport const MIN_TAG_LENGTH = 2;\n// The default greatest allowed tag length. Matches the value on the server.\nexport const MAX_TAG_LENGTH = 96;\n// The default maximum number of tags allowed. Matches the value on the server.\nexport const MAX_TAG_COUNT = 16;\n\n// Access mode for P2P subscriptions initiated by the current user.\nexport const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';\n// Access mode for new group topics created by the current user.\nexport const NEW_GRP_ACCESS_MODE = 'JRWPSAO';\n// Access mode for a channel.\nexport const CHANNEL_ACCESS_MODE = 'JR';\n\n// Access mode for no access.\nexport const NO_ACCESS_MODE = 'N';\n\n// Mediaquery breakpoint between desktop and mobile, in px. Should match the value\n// in @media (max-size: 640px) in base.css\nexport const MEDIA_BREAKPOINT = 640;\n// Size of css 'rem' unit in pixels. Default 1rem = 10pt = 13px.\nexport const REM_SIZE = 13;\n\n// Size of the avatar image: when image dimensions are greater or the image is not square, it's resized to\n// a square of this size or less.\nexport const AVATAR_SIZE = 384;\n\n// Maximum size of an avatar in bytes for sending in-band. Bigger avatars will be sent out of band (as uploads).\nexport const MAX_AVATAR_BYTES = 4096;\n\n// Size of the broken_image shown in MessagesView\nexport const BROKEN_IMAGE_SIZE = 32;\n\n// Size of video preview when dimensions are missing.\nexport const NO_DIMENSIONS_VIDEO = 128;\n\n// Number of chat messages to fetch in one call.\nexport const MESSAGES_PAGE = 24;\n\n// Default maximum in-band (included directly into the message) attachment size which fits into\n// a message of 256K in size. Used when the server-provided value is unavailable. The actual\n// binary size of the attachment should be smaller due to base64 encoding expansion and some overhead,\n// for instance 1024 bytes.\n// Increase this limit to a greater value in production, if desired. Also increase\n// max_message_size in the server config.\nexport const MAX_INBAND_ATTACHMENT_SIZE = 262_144;\n\n// Default absolute maximum attachment size to be used with the server = 8MB.\n// Used when the server-provided value is unavailable. Increase to something like 100MB in production.\nexport const MAX_EXTERN_ATTACHMENT_SIZE = 1 << 23;\n\n// Maximum allowed linear dimension (pixels) of an image sent inline. Larger images will be shrunk\n// to make the larger dimension fit under this size. You may want to adjust it to 1600 or\n// 2400 for production.\nexport const MAX_IMAGE_DIM = 1024;\n\n// Linear dimensions of image preview: shrink image under this size for previews.\nexport const IMAGE_PREVIEW_DIM = 64;\n\n// Linear dimensions of video screencapture: shrink image under this size for previews.\nexport const VIDEO_PREVIEW_DIM = 96;\n\n// Linear dimensions of image thumbnail: shrink image under this size for thumbnails in reply quote previews.\nexport const IMAGE_THUMBNAIL_DIM = 36;\n// Width of video thumbnail: allow it to be wider, but not taller. Use IMAGE_THUMBNAIL_DIM for height.\nexport const VIDEO_THUMBNAIL_WIDTH = 48;\n\n// Maximum number of online users to be shown in a topic title bar. Others will be\n// hidden under \"+X more\"\nexport const MAX_ONLINE_IN_TOPIC = 4;\n\n// Maximum length of user name, topic title, and private comment.\nexport const MAX_TITLE_LENGTH = 60;\n// Maximum length of topic description.\nexport const MAX_TOPIC_DESCRIPTION_LENGTH = 360;\n// Maximum length of user name when displaying a video call.\nexport const MAX_PEER_TITLE_LENGTH = 20;\n\n// Length of message previews in chat list, in characters.\nexport const MESSAGE_PREVIEW_LENGTH = 80;\n\n// Length of a quote in quoted reply (for outgoing messages).\nexport const QUOTED_REPLY_LENGTH = 30;\n// Length of a preview of a forwarded message.\nexport const FORWARDED_PREVIEW_LENGTH = 84;\n// Length of preview for a message being edited.\nexport const EDIT_PREVIEW_LENGTH = 48;\n\n// Minimum duration of an audio recording in milliseconds (2 sec).\nexport const MIN_DURATION = 2_000;\n// Maximum duration of an audio recording in milliseconds (10 min).\nexport const MAX_DURATION = 600_000;\n\n// Link for \"Contact Us\".\nexport const LINK_CONTACT_US = 'mailto:support@tinode.co';\n\n// Link to Privacy Policy.\nexport const LINK_PRIVACY_POLICY = 'https://tinode.co/privacy.html';\n\n// Link to Terms of Service.\nexport const LINK_TERMS_OF_SERVICE = 'https://tinode.co/terms.html';\n\n// When user starts a P2P topic, automatic subscription does not\n// happen until the first message. Setting this option to true enables\n// immediate subscription.\nexport const IMMEDIATE_P2P_SUBSCRIPTION = false;\n\n// URL schemes permitted to appear in links (i.e. no javascript: scheme).\nexport const CLICKABLE_URL_SCHEMES = ['http', 'https', 'ftp', 'ftps'];\n\n// Size of the QR code in the app.\nexport const QRCODE_SIZE = 128;\n\n// How much time has to pass to consider computer awoken from sleep (80 sec).\n// Chrome throttles ticker events in inactive tabs to once per minute. This\n// value ensures that these once-a-minute events do not trigger a reconnect.\nexport const WAKE_UP_TIMEOUT = 80000;\n// Timer interval between checks if computer woke up from sleep (1 sec).\nexport const WAKE_UP_TICK = 1000;\n","// Video call states.\nexport const CALL_STATE_NONE = 0;\nexport const CALL_STATE_OUTGOING_INITATED = 1;\nexport const CALL_STATE_INCOMING_RECEIVED = 2;\nexport const CALL_STATE_IN_PROGRESS = 3;\n\n// Video call message headers representing call state.\nexport const CALL_HEAD_STARTED = 'started';\n","// File and image helper functions.\n\n// Supported image MIME types and corresponding file extensions.\nexport const SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml'];\nexport const MIME_EXTENSIONS = ['jpg', 'gif', 'png', 'svg', 'svg'];\n\n// Get an URL from a theCard photo: either create a data: URL or return reference URL.\nexport function makeImageUrl(photo) {\n if (photo && typeof photo == 'object') {\n if (photo.ref) {\n return photo.ref\n }\n if (photo.data && photo.type) {\n const mime = photo.type.startsWith('image/') ? photo.type : ('image/' + photo.type);\n return 'data:' + mime + ';base64,' + photo.data;\n }\n }\n return null;\n}\n\n// Calculate linear dimensions for scaling image down to fit under a certain size.\n// Returns an object which contains destination sizes, source sizes, and offsets\n// into source (when making square images).\nexport function fitImageSize(width, height, maxWidth, maxHeight, forceSquare) {\n // Sanitize input\n width = width | 0;\n height = height | 0;\n maxWidth = maxWidth | 0;\n maxHeight = maxHeight | 0;\n\n if (width <= 0 || height <= 0 || maxWidth <= 0 || maxHeight <= 0) {\n return null;\n }\n\n if (forceSquare) {\n maxWidth = maxHeight = Math.min(maxWidth, maxHeight);\n }\n\n const scale = Math.min(\n Math.min(width, maxWidth) / width,\n Math.min(height, maxHeight) / height\n );\n\n const size = {\n dstWidth: (width * scale) | 0,\n dstHeight: (height * scale) | 0,\n };\n\n if (forceSquare) {\n // Also calculate parameters for making the image square.\n size.dstWidth = size.dstHeight = Math.min(size.dstWidth, size.dstHeight);\n size.srcWidth = size.srcHeight = Math.min(width, height);\n size.xoffset = ((width - size.srcWidth) / 2) | 0;\n size.yoffset = ((height - size.srcWidth) / 2) | 0;\n } else {\n size.xoffset = size.yoffset = 0;\n size.srcWidth = width;\n size.srcHeight = height;\n }\n return size;\n}\n\n// Ensure file's extension matches mime content type\nexport function fileNameForMime(fname, mime) {\n const idx = SUPPORTED_IMAGE_FORMATS.indexOf(mime);\n if (idx < 0 || !fname) {\n // Unknown mime or empty name.\n return fname;\n }\n const ext = MIME_EXTENSIONS[idx];\n\n const at = fname.lastIndexOf('.');\n if (at >= 0) {\n fname = fname.substring(0, at);\n }\n return fname + '.' + ext;\n}\n\n// Scale uploaded image to fit under certain dimensions and byte size, optionally constraining to a square.\n// Returns a promise which is resolven on success or rejected on failure.\nexport function imageScaled(fileOrBlob, maxWidth, maxHeight, maxSize, forceSquare) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onerror = function(err) {\n reject(new Error(\"Image format unrecognized\"));\n }\n img.onload = async function() {\n // Once the image is loaded, the URL is no longer needed.\n URL.revokeObjectURL(img.src);\n\n // Calculate the desired image dimensions.\n const dim = fitImageSize(img.width, img.height, maxWidth, maxHeight, forceSquare);\n if (!dim) {\n reject(new Error(\"Invalid image\"));\n return;\n }\n let canvas = document.createElement('canvas');\n canvas.width = dim.dstWidth;\n canvas.height = dim.dstHeight;\n let ctx = canvas.getContext('2d');\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\n 0, 0, dim.dstWidth, dim.dstHeight);\n\n const mime = SUPPORTED_IMAGE_FORMATS.includes(fileOrBlob.type) ? fileOrBlob.type : 'image/jpeg';\n // Generate blob to check size of the image.\n let blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n if (!blob) {\n reject(new Error(\"Unsupported image format\"));\n return;\n }\n // Ensure the image is not too large. Shrink the image keeping the aspect ratio.\n // Do nothing if maxsize is <= 0.\n while (maxSize > 0 && blob.length > maxSize) {\n dim.dstWidth = (dim.dstWidth * 0.70710678118) | 0;\n dim.dstHeight = (dim.dstHeight * 0.70710678118) | 0;\n canvas.width = dim.dstWidth;\n canvas.height = dim.dstHeight;\n ctx = canvas.getContext('2d');\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\n 0, 0, dim.dstWidth, dim.dstHeight);\n blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n }\n\n canvas = null;\n resolve({mime: mime, blob: blob, width: dim.dstWidth, height: dim.dstHeight, name: fileNameForMime(fileOrBlob.name, mime)});\n };\n img.src = URL.createObjectURL(fileOrBlob);\n });\n}\n\n// Scale and crop image according to specified dimensions.\n// The coordinates are in unscaled image pixels, i.e. cut the rectangle first then scale it.\n// returns a promise.\nexport function imageCrop(mime, objURL, left, top, width, height, scale) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onerror = _ => {\n reject(new Error(\"Image format unrecognized\"));\n };\n img.onload = _ => {\n // Once the image is loaded, the URL is no longer needed.\n URL.revokeObjectURL(img.src);\n\n let canvas = document.createElement('canvas');\n canvas.width = width * scale;\n canvas.height = height * scale;\n let ctx = canvas.getContext('2d');\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(img, left, top, width, height, 0, 0, canvas.width, canvas.height);\n\n mime = SUPPORTED_IMAGE_FORMATS.includes(mime) ? mime : 'image/jpeg';\n // Generate blob to check size of the image.\n canvas.toBlob((blob) => {\n // Allow GC.\n canvas = null;\n if (blob) {\n resolve({mime: mime, blob: blob, width: width, height: height});\n } else {\n reject(new Error(\"Unsupported image format\"));\n }\n }, mime);\n };\n img.src = objURL;\n });\n}\n\n// Convert file to base64 string.\nexport function fileToBase64(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = _ => {\n reject(reader.error);\n };\n reader.onload = _ => {\n resolve({mime: file.type, bits: reader.result.split(',')[1], name: file.name});\n };\n reader.readAsDataURL(file);\n });\n}\n\n// Convert Blob to base64 string. Returns a promise resolved with the base64 string and mime.\nexport function blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = _ => {\n reject(reader.error);\n };\n reader.onload = _ => {\n resolve({mime: blob.type, bits: reader.result.split(',')[1]});\n };\n reader.readAsDataURL(blob);\n });\n}\n\n// File pasted from the clipboard. It's either an inline image or a file attachment.\nexport function filePasted(event, onImageSuccess, onAttachmentSuccess, onError) {\n const items = (event.clipboardData || event.originalEvent.clipboardData || {}).items;\n if (!items || !items.length) {\n return false;\n }\n\n for (let i in items) {\n const item = items[i];\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (!file) {\n console.error(\"Failed to get file object from pasted file item\", item.kind, item.type);\n onError(\"Failed to get file object from pasted file item\");\n continue;\n }\n if (file.type && file.type.split('/')[0] == 'image') {\n onImageSuccess(file);\n } else {\n onAttachmentSuccess(file);\n }\n // Indicate that the pasted data contains a file.\n return true;\n }\n }\n // No file found.\n return false;\n}\n\n// Get mime type from data URL header.\nexport function getMimeType(header) {\n var mime = /^data:(image\\/[-+a-z0-9.]+);base64/.exec(header);\n return (mime && mime.length > 1) ? mime[1] : null;\n}\n\n// Given length of a binary object in bytes, calculate the length after\n// base64 encoding.\nexport function base64EncodedLen(n) {\n return Math.floor((n + 2) / 3) * 4;\n}\n\n// Given length of a base64-encoded object, calculate decoded size of the\n// pbject in bytes.\nexport function base64DecodedLen(n) {\n return Math.floor(n / 4) * 3;\n}\n\n// Re-encode string to standard base64 encoding with padding.\n// The string may be base64-URL encoded without the padding.\nexport function base64ReEncode(str) {\n if (str) {\n str = str.replace(/-/g, '+').replace(/_/g, '/');\n try {\n str = btoa(atob(str));\n } catch(err) {\n console.error(\"Failed to base64 re-encode string.\", err);\n str = null;\n }\n }\n return str;\n}\n\n// Convert a base64 encoded string with the provided mime type into a Blob.\nexport function base64ToBlob(str, mime) {\n if (!str) {\n return null;\n }\n\n try {\n // Make blob.\n const bin = atob(str);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return new Blob([buf], { type: mime });\n } catch(err) {\n console.error(\"Failed to convert base64 to blob: \", err);\n }\n\n return null;\n}\n\nexport function intArrayToBase64(arr) {\n if (!Array.isArray(arr)) {\n return null;\n }\n try {\n let bin = '';\n new Uint8Array(arr).forEach(b => bin += String.fromCharCode(b));\n return window.btoa(bin);\n } catch (err) {}\n return null;\n}\n\nexport function base64ToIntArray(b64) {\n const arr = [];\n try {\n const bin = window.atob(b64);\n [...bin].forEach(c => {\n arr.push(c.charCodeAt(0));\n });\n return arr;\n } catch (err) {}\n return null;\n}\n","import React from 'react';\nimport { defineMessages } from 'react-intl';\n\nimport { Drafty } from 'tinode-sdk';\n\nimport AudioPlayer from '../widgets/audio-player.jsx'\nimport CallMessage from '../widgets/call-message.jsx'\nimport CallStatus from '../widgets/call-status.jsx';\nimport InlineVideo from '../widgets/inline-video.jsx';\nimport LazyImage from '../widgets/lazy-image.jsx'\nimport UploadingImage from '../widgets/uploading-image.jsx'\n\nimport { BROKEN_IMAGE_SIZE, CLICKABLE_URL_SCHEMES, IMAGE_THUMBNAIL_DIM, NO_DIMENSIONS_VIDEO, REM_SIZE,\n VIDEO_THUMBNAIL_WIDTH } from '../config.js';\nimport { base64ToBlob, blobToBase64, fitImageSize, imageScaled } from './blob-helpers.js';\nimport { idToColorClass, secondsToTime, shortenFileName } from './strformat.js';\nimport { cancelablePromise, sanitizeUrl, sanitizeUrlForMime } from './utils.js';\n\nconst messages = defineMessages({\n drafty_form: {\n id: 'drafty_form',\n defaultMessage: 'Form: ',\n description: 'Comment for form in Drafty'\n },\n drafty_attachment: {\n id: 'drafty_attachment',\n defaultMessage: 'Attachment',\n description: 'Comment for attachment in Drafty'\n },\n drafty_image: {\n id: 'drafty_image',\n defaultMessage: 'Picture',\n description: 'Comment for embedded images in Drafty'\n },\n drafty_video: {\n id: 'drafty_video',\n defaultMessage: 'Video recording',\n description: 'Comment for videos embedded in Drafty'\n },\n drafty_unknown: {\n id: 'drafty_unknown',\n defaultMessage: 'Unsupported',\n description: 'Unsupported entity in drafty'\n }\n});\n\n// The main Drafty formatter: converts Drafty elements into React classes. 'this' is set by the caller.\n// 'this' must contain:\n// viewportWidth:\n// authorizeURL:\n// onImagePreview:\n// onVideoPreview:\n// onFormButtonClick:\n// onQuoteClick:\nexport function fullFormatter(style, data, values, key, stack) {\n if (stack.includes('QQ')) {\n return quoteFormatter.call(this, style, data, values, key);\n }\n\n if (!style) {\n // Unformatted.\n return values;\n }\n\n let el = Drafty.tagName(style);\n let attr = Drafty.attrValue(style, data) || {};\n attr.key = key;\n switch (style) {\n case 'AU':\n // Show audio player.\n if (attr.src) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'audio'));\n attr.duration = data.duration > 0 ? (data.duration | 0) : undefined;\n attr.preview = data.preview;\n attr.loading = 'lazy';\n }\n el = AudioPlayer;\n // Audio element cannot have content.\n values = null;\n break;\n case 'BR':\n values = null;\n break;\n case 'EX':\n // Ignore.\n break;\n case 'HL':\n // Highlighted text. Assign class name.\n attr.className = 'highlight';\n break;\n case 'HD':\n el = null;\n values = null;\n break;\n case 'IM':\n // Additional processing for images\n el = handleImageData.call(this, el, data, attr);\n // Image element cannot have content.\n values = null;\n break;\n case 'BN':\n // Button\n attr.onClick = this.onFormButtonClick;\n let inner = React.Children.map(values, (child) => {\n return typeof child == 'string' ? child : undefined;\n });\n if (!inner || inner.length == 0) {\n inner = [attr.name]\n }\n // Get text which will be sent back when the button is clicked.\n attr['data-title'] = inner.join('');\n break;\n case 'LN':\n if (attr) {\n // Ensure only safe URL schemes are clickable.\n attr.href = typeof attr.href == 'string' ? sanitizeUrl(attr.href, CLICKABLE_URL_SCHEMES) : '';\n }\n break;\n case 'MN':\n // Mention\n attr.className = 'mention'\n if (data) {\n attr.className += ' ' + idToColorClass(data.val, false, true);\n }\n break;\n case 'FM':\n // Form\n attr.className = 'bot-form';\n break;\n case 'RW':\n // Form element formatting is dependent on element content.\n break;\n case 'QQ':\n // Quote/citation.\n attr.className = 'reply-quote'\n attr.onClick = this.onQuoteClick;\n break;\n case 'VC':\n el = CallMessage;\n // Video call messages do not have content.\n values = null;\n if (data) {\n attr.callState = data.state;\n attr.incoming = data.incoming;\n attr.duration = data.duration;\n }\n break;\n case 'VD':\n // Additional processing for videos.\n el = handleVideoData.call(this, el, data, attr);\n // Video element cannot have content.\n values = null;\n break;\n default:\n if (!el) {\n // Unknown element.\n el = React.Fragment;\n attr = {key: key};\n // Generate comment for unknown element.\n let body = values;\n if (!Array.isArray(values) || !values.join('').trim()) {\n body = [{this.formatMessage(messages.drafty_unknown)}];\n }\n values = [extension, ' '].concat(body);\n }\n break;\n }\n if (!el) {\n return values;\n }\n return React.createElement(el, attr, values);\n}\n\n// Additional processing of image data.\nfunction handleImageData(el, data, attr) {\n if (!data) {\n attr.src = 'img/broken_image.png';\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n };\n return el;\n }\n\n attr.className = 'inline-image';\n const dim = fitImageSize(data.width, data.height,\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\n {dstWidth: BROKEN_IMAGE_SIZE, dstHeight: BROKEN_IMAGE_SIZE};\n attr.style = {\n width: dim.dstWidth + 'px',\n height: dim.dstHeight + 'px',\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\n minWidth: dim.dstWidth + 'px',\n minHeight: dim.dstHeight + 'px'\n };\n if (!Drafty.isProcessing(data)) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\n attr.alt = data.name;\n if (attr.src) {\n if (Math.max(data.width || 0, data.height || 0) > IMAGE_THUMBNAIL_DIM) {\n // Allow previews for large enough images.\n attr.onClick = this.onImagePreview;\n attr.className += ' image-clickable';\n }\n attr.loading = 'lazy';\n } else {\n attr.src = null;\n }\n } else {\n // Use custom element instead of Visible for testing\n */\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\n/**\n * The percentage of backoff time to randomize by.\n * See\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\n * for context.\n *\n * Visible for testing\n */\nconst RANDOM_FACTOR = 0.5;\n/**\n * Based on the backoff method from\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\n */\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\n // Calculates an exponentially increasing value.\n // Deviation: calculates value from count and a constant interval, so we only need to save value\n // and count to restore state.\n const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\n // A random \"fuzz\" to avoid waves of retries.\n // Deviation: randomFactor is required.\n const randomWait = Math.round(\n // A fraction of the backoff value to add/subtract.\n // Deviation: changes multiplication order to improve readability.\n RANDOM_FACTOR *\n currBaseValue *\n // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\n // if we add or subtract.\n (Math.random() - 0.5) *\n 2);\n // Limits backoff to max to avoid effectively permanent backoff.\n return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provide English ordinal letters after a number\n */\nfunction ordinal(i) {\n if (!Number.isFinite(i)) {\n return `${i}`;\n }\n return i + indicator(i);\n}\nfunction indicator(i) {\n i = Math.abs(i);\n const cent = i % 100;\n if (cent >= 10 && cent <= 20) {\n return 'th';\n }\n const dec = i % 10;\n if (dec === 1) {\n return 'st';\n }\n if (dec === 2) {\n return 'nd';\n }\n if (dec === 3) {\n return 'rd';\n }\n return 'th';\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getModularInstance(service) {\n if (service && service._delegate) {\n return service._delegate;\n }\n else {\n return service;\n }\n}\n\nexport { CONSTANTS, DecodeBase64StringError, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getDefaults, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isCloudflareWorker, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, isWebWorker, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n//# sourceMappingURL=index.esm2017.js.map\n","const getDefaultsFromPostinstall = () => (undefined);\nexport { getDefaultsFromPostinstall };","import { registerVersion } from '@firebase/app';\nexport * from '@firebase/app';\n\nvar name = \"firebase\";\nvar version = \"11.6.1\";\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nregisterVersion(name, version, 'app');\n//# sourceMappingURL=index.esm.js.map\n","export * from '@firebase/messaging';\n//# sourceMappingURL=index.esm.js.map\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","import { PACKAGE_VERSION } from './version.js';\n\n// Name of this application, used in the User-Agent.\nexport const APP_NAME = 'TinodeWeb/' + (PACKAGE_VERSION || '0.21');\n\n// API key. Use https://github.com/tinode/chat/tree/master/keygen to generate your own\nexport const API_KEY = 'AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K';\n\n// The array of possible hosts to connect to.\nexport const KNOWN_HOSTS = {hosted: 'web.tinode.co', local: 'localhost:6060'};\n\n// Default host name and port to connect to.\nexport const DEFAULT_HOST = KNOWN_HOSTS.hosted;\n\n// Enable console logging.\nexport const LOGGING_ENABLED = true;\n\n// Minimum time between two keypress notifications, milliseconds.\nexport const KEYPRESS_DELAY = 3_000;\n// Delay before sending a read notification, milliseconds.\nexport const READ_DELAY = 1_500;\n\n// The default shortest allowed tag length. Matches the value on the server.\nexport const MIN_TAG_LENGTH = 2;\n// The default greatest allowed tag length. Matches the value on the server.\nexport const MAX_TAG_LENGTH = 96;\n// The default maximum number of tags allowed. Matches the value on the server.\nexport const MAX_TAG_COUNT = 16;\n\n// Access mode for P2P subscriptions initiated by the current user.\nexport const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';\n// Access mode for new group topics created by the current user.\nexport const NEW_GRP_ACCESS_MODE = 'JRWPSAO';\n// Access mode for a channel.\nexport const CHANNEL_ACCESS_MODE = 'JR';\n\n// Access mode for no access.\nexport const NO_ACCESS_MODE = 'N';\n\n// Mediaquery breakpoint between desktop and mobile, in px. Should match the value\n// in @media (max-size: 640px) in base.css\nexport const MEDIA_BREAKPOINT = 640;\n// Size of css 'rem' unit in pixels. Default 1rem = 10pt = 13px.\nexport const REM_SIZE = 13;\n\n// Size of the avatar image: when image dimensions are greater or the image is not square, it's resized to\n// a square of this size or less.\nexport const AVATAR_SIZE = 384;\n\n// Maximum size of an avatar in bytes for sending in-band. Bigger avatars will be sent out of band (as uploads).\nexport const MAX_AVATAR_BYTES = 4096;\n\n// Size of the broken_image shown in MessagesView\nexport const BROKEN_IMAGE_SIZE = 32;\n\n// Size of video preview when dimensions are missing.\nexport const NO_DIMENSIONS_VIDEO = 128;\n\n// Number of chat messages to fetch in one call.\nexport const MESSAGES_PAGE = 24;\n\n// Default maximum in-band (included directly into the message) attachment size which fits into\n// a message of 256K in size. Used when the server-provided value is unavailable. The actual\n// binary size of the attachment should be smaller due to base64 encoding expansion and some overhead,\n// for instance 1024 bytes.\n// Increase this limit to a greater value in production, if desired. Also increase\n// max_message_size in the server config.\nexport const MAX_INBAND_ATTACHMENT_SIZE = 262_144;\n\n// Default absolute maximum attachment size to be used with the server = 8MB.\n// Used when the server-provided value is unavailable. Increase to something like 100MB in production.\nexport const MAX_EXTERN_ATTACHMENT_SIZE = 1 << 23;\n\n// Maximum allowed linear dimension (pixels) of an image sent inline. Larger images will be shrunk\n// to make the larger dimension fit under this size. You may want to adjust it to 1600 or\n// 2400 for production.\nexport const MAX_IMAGE_DIM = 1024;\n\n// Linear dimensions of image preview: shrink image under this size for previews.\nexport const IMAGE_PREVIEW_DIM = 64;\n\n// Linear dimensions of video screencapture: shrink image under this size for previews.\nexport const VIDEO_PREVIEW_DIM = 96;\n\n// Linear dimensions of image thumbnail: shrink image under this size for thumbnails in reply quote previews.\nexport const IMAGE_THUMBNAIL_DIM = 36;\n// Width of video thumbnail: allow it to be wider, but not taller. Use IMAGE_THUMBNAIL_DIM for height.\nexport const VIDEO_THUMBNAIL_WIDTH = 48;\n\n// Maximum number of online users to be shown in a topic title bar. Others will be\n// hidden under \"+X more\"\nexport const MAX_ONLINE_IN_TOPIC = 4;\n\n// Maximum length of user name, topic title, and private comment.\nexport const MAX_TITLE_LENGTH = 60;\n// Maximum length of topic description.\nexport const MAX_TOPIC_DESCRIPTION_LENGTH = 360;\n// Maximum length of user name when displaying a video call.\nexport const MAX_PEER_TITLE_LENGTH = 20;\n\n// Length of message previews in chat list, in characters.\nexport const MESSAGE_PREVIEW_LENGTH = 80;\n\n// Length of a quote in quoted reply (for outgoing messages).\nexport const QUOTED_REPLY_LENGTH = 30;\n// Length of a preview of a forwarded message.\nexport const FORWARDED_PREVIEW_LENGTH = 84;\n// Length of preview for a message being edited.\nexport const EDIT_PREVIEW_LENGTH = 48;\n\n// Minimum duration of an audio recording in milliseconds (2 sec).\nexport const MIN_DURATION = 2_000;\n// Maximum duration of an audio recording in milliseconds (10 min).\nexport const MAX_DURATION = 600_000;\n\n// Link for \"Contact Us\".\nexport const LINK_CONTACT_US = 'mailto:support@tinode.co';\n\n// Link to Privacy Policy.\nexport const LINK_PRIVACY_POLICY = 'https://tinode.co/privacy.html';\n\n// Link to Terms of Service.\nexport const LINK_TERMS_OF_SERVICE = 'https://tinode.co/terms.html';\n\n// When user starts a P2P topic, automatic subscription does not\n// happen until the first message. Setting this option to true enables\n// immediate subscription.\nexport const IMMEDIATE_P2P_SUBSCRIPTION = false;\n\n// URL schemes permitted to appear in links (i.e. no javascript: scheme).\nexport const CLICKABLE_URL_SCHEMES = ['http', 'https', 'ftp', 'ftps'];\n\n// Size of the QR code in the app.\nexport const QRCODE_SIZE = 128;\n\n// How much time has to pass to consider computer awoken from sleep (80 sec).\n// Chrome throttles ticker events in inactive tabs to once per minute. This\n// value ensures that these once-a-minute events do not trigger a reconnect.\nexport const WAKE_UP_TIMEOUT = 80000;\n// Timer interval between checks if computer woke up from sleep (1 sec).\nexport const WAKE_UP_TICK = 1000;\n","// Video call states.\nexport const CALL_STATE_NONE = 0;\nexport const CALL_STATE_OUTGOING_INITATED = 1;\nexport const CALL_STATE_INCOMING_RECEIVED = 2;\nexport const CALL_STATE_IN_PROGRESS = 3;\n\n// Video call message headers representing call state.\nexport const CALL_HEAD_STARTED = 'started';\n","// File and image helper functions.\n\n// Supported image MIME types and corresponding file extensions.\nexport const SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml'];\nexport const MIME_EXTENSIONS = ['jpg', 'gif', 'png', 'svg', 'svg'];\n\n// Get an URL from a theCard photo: either create a data: URL or return reference URL.\nexport function makeImageUrl(photo) {\n if (photo && typeof photo == 'object') {\n if (photo.ref) {\n return photo.ref\n }\n if (photo.data && photo.type) {\n const mime = photo.type.startsWith('image/') ? photo.type : ('image/' + photo.type);\n return 'data:' + mime + ';base64,' + photo.data;\n }\n }\n return null;\n}\n\n// Calculate linear dimensions for scaling image down to fit under a certain size.\n// Returns an object which contains destination sizes, source sizes, and offsets\n// into source (when making square images).\nexport function fitImageSize(width, height, maxWidth, maxHeight, forceSquare) {\n // Sanitize input\n width = width | 0;\n height = height | 0;\n maxWidth = maxWidth | 0;\n maxHeight = maxHeight | 0;\n\n if (width <= 0 || height <= 0 || maxWidth <= 0 || maxHeight <= 0) {\n return null;\n }\n\n if (forceSquare) {\n maxWidth = maxHeight = Math.min(maxWidth, maxHeight);\n }\n\n const scale = Math.min(\n Math.min(width, maxWidth) / width,\n Math.min(height, maxHeight) / height\n );\n\n const size = {\n dstWidth: (width * scale) | 0,\n dstHeight: (height * scale) | 0,\n };\n\n if (forceSquare) {\n // Also calculate parameters for making the image square.\n size.dstWidth = size.dstHeight = Math.min(size.dstWidth, size.dstHeight);\n size.srcWidth = size.srcHeight = Math.min(width, height);\n size.xoffset = ((width - size.srcWidth) / 2) | 0;\n size.yoffset = ((height - size.srcWidth) / 2) | 0;\n } else {\n size.xoffset = size.yoffset = 0;\n size.srcWidth = width;\n size.srcHeight = height;\n }\n return size;\n}\n\n// Ensure file's extension matches mime content type\nexport function fileNameForMime(fname, mime) {\n const idx = SUPPORTED_IMAGE_FORMATS.indexOf(mime);\n if (idx < 0 || !fname) {\n // Unknown mime or empty name.\n return fname;\n }\n const ext = MIME_EXTENSIONS[idx];\n\n const at = fname.lastIndexOf('.');\n if (at >= 0) {\n fname = fname.substring(0, at);\n }\n return fname + '.' + ext;\n}\n\n// Scale uploaded image to fit under certain dimensions and byte size, optionally constraining to a square.\n// Returns a promise which is resolven on success or rejected on failure.\nexport function imageScaled(fileOrBlob, maxWidth, maxHeight, maxSize, forceSquare) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onerror = function(err) {\n reject(new Error(\"Image format unrecognized\"));\n }\n img.onload = async function() {\n // Once the image is loaded, the URL is no longer needed.\n URL.revokeObjectURL(img.src);\n\n // Calculate the desired image dimensions.\n const dim = fitImageSize(img.width, img.height, maxWidth, maxHeight, forceSquare);\n if (!dim) {\n reject(new Error(\"Invalid image\"));\n return;\n }\n let canvas = document.createElement('canvas');\n canvas.width = dim.dstWidth;\n canvas.height = dim.dstHeight;\n let ctx = canvas.getContext('2d');\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\n 0, 0, dim.dstWidth, dim.dstHeight);\n\n const mime = SUPPORTED_IMAGE_FORMATS.includes(fileOrBlob.type) ? fileOrBlob.type : 'image/jpeg';\n // Generate blob to check size of the image.\n let blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n if (!blob) {\n reject(new Error(\"Unsupported image format\"));\n return;\n }\n // Ensure the image is not too large. Shrink the image keeping the aspect ratio.\n // Do nothing if maxsize is <= 0.\n while (maxSize > 0 && blob.length > maxSize) {\n dim.dstWidth = (dim.dstWidth * 0.70710678118) | 0;\n dim.dstHeight = (dim.dstHeight * 0.70710678118) | 0;\n canvas.width = dim.dstWidth;\n canvas.height = dim.dstHeight;\n ctx = canvas.getContext('2d');\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.drawImage(img, dim.xoffset, dim.yoffset, dim.srcWidth, dim.srcHeight,\n 0, 0, dim.dstWidth, dim.dstHeight);\n blob = await new Promise(resolve => canvas.toBlob(resolve, mime));\n }\n\n canvas = null;\n resolve({mime: mime, blob: blob, width: dim.dstWidth, height: dim.dstHeight, name: fileNameForMime(fileOrBlob.name, mime)});\n };\n img.src = URL.createObjectURL(fileOrBlob);\n });\n}\n\n// Scale and crop image according to specified dimensions.\n// The coordinates are in unscaled image pixels, i.e. cut the rectangle first then scale it.\n// returns a promise.\nexport function imageCrop(mime, objURL, left, top, width, height, scale) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onerror = _ => {\n reject(new Error(\"Image format unrecognized\"));\n };\n img.onload = _ => {\n // Once the image is loaded, the URL is no longer needed.\n URL.revokeObjectURL(img.src);\n\n let canvas = document.createElement('canvas');\n canvas.width = width * scale;\n canvas.height = height * scale;\n let ctx = canvas.getContext('2d');\n ctx.imageSmoothingEnabled = true;\n ctx.drawImage(img, left, top, width, height, 0, 0, canvas.width, canvas.height);\n\n mime = SUPPORTED_IMAGE_FORMATS.includes(mime) ? mime : 'image/jpeg';\n // Generate blob to check size of the image.\n canvas.toBlob((blob) => {\n // Allow GC.\n canvas = null;\n if (blob) {\n resolve({mime: mime, blob: blob, width: width, height: height});\n } else {\n reject(new Error(\"Unsupported image format\"));\n }\n }, mime);\n };\n img.src = objURL;\n });\n}\n\n// Convert file to base64 string.\nexport function fileToBase64(file) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = _ => {\n reject(reader.error);\n };\n reader.onload = _ => {\n resolve({mime: file.type, bits: reader.result.split(',')[1], name: file.name});\n };\n reader.readAsDataURL(file);\n });\n}\n\n// Convert Blob to base64 string. Returns a promise resolved with the base64 string and mime.\nexport function blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onerror = _ => {\n reject(reader.error);\n };\n reader.onload = _ => {\n resolve({mime: blob.type, bits: reader.result.split(',')[1]});\n };\n reader.readAsDataURL(blob);\n });\n}\n\n// File pasted from the clipboard. It's either an inline image or a file attachment.\nexport function filePasted(event, onImageSuccess, onAttachmentSuccess, onError) {\n const items = (event.clipboardData || event.originalEvent.clipboardData || {}).items;\n if (!items || !items.length) {\n return false;\n }\n\n for (let i in items) {\n const item = items[i];\n if (item.kind === 'file') {\n const file = item.getAsFile();\n if (!file) {\n console.error(\"Failed to get file object from pasted file item\", item.kind, item.type);\n onError(\"Failed to get file object from pasted file item\");\n continue;\n }\n if (file.type && file.type.split('/')[0] == 'image') {\n onImageSuccess(file);\n } else {\n onAttachmentSuccess(file);\n }\n // Indicate that the pasted data contains a file.\n return true;\n }\n }\n // No file found.\n return false;\n}\n\n// Get mime type from data URL header.\nexport function getMimeType(header) {\n var mime = /^data:(image\\/[-+a-z0-9.]+);base64/.exec(header);\n return (mime && mime.length > 1) ? mime[1] : null;\n}\n\n// Given length of a binary object in bytes, calculate the length after\n// base64 encoding.\nexport function base64EncodedLen(n) {\n return Math.floor((n + 2) / 3) * 4;\n}\n\n// Given length of a base64-encoded object, calculate decoded size of the\n// pbject in bytes.\nexport function base64DecodedLen(n) {\n return Math.floor(n / 4) * 3;\n}\n\n// Re-encode string to standard base64 encoding with padding.\n// The string may be base64-URL encoded without the padding.\nexport function base64ReEncode(str) {\n if (str) {\n str = str.replace(/-/g, '+').replace(/_/g, '/');\n try {\n str = btoa(atob(str));\n } catch(err) {\n console.error(\"Failed to base64 re-encode string.\", err);\n str = null;\n }\n }\n return str;\n}\n\n// Convert a base64 encoded string with the provided mime type into a Blob.\nexport function base64ToBlob(str, mime) {\n if (!str) {\n return null;\n }\n\n try {\n // Make blob.\n const bin = atob(str);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return new Blob([buf], { type: mime });\n } catch(err) {\n console.error(\"Failed to convert base64 to blob: \", err);\n }\n\n return null;\n}\n\nexport function intArrayToBase64(arr) {\n if (!Array.isArray(arr)) {\n return null;\n }\n try {\n let bin = '';\n new Uint8Array(arr).forEach(b => bin += String.fromCharCode(b));\n return window.btoa(bin);\n } catch (err) {}\n return null;\n}\n\nexport function base64ToIntArray(b64) {\n const arr = [];\n try {\n const bin = window.atob(b64);\n [...bin].forEach(c => {\n arr.push(c.charCodeAt(0));\n });\n return arr;\n } catch (err) {}\n return null;\n}\n","import React from 'react';\nimport { defineMessages } from 'react-intl';\n\nimport { Drafty } from 'tinode-sdk';\n\nimport AudioPlayer from '../widgets/audio-player.jsx'\nimport CallMessage from '../widgets/call-message.jsx'\nimport CallStatus from '../widgets/call-status.jsx';\nimport InlineVideo from '../widgets/inline-video.jsx';\nimport LazyImage from '../widgets/lazy-image.jsx'\nimport UploadingImage from '../widgets/uploading-image.jsx'\n\nimport { BROKEN_IMAGE_SIZE, CLICKABLE_URL_SCHEMES, IMAGE_THUMBNAIL_DIM, NO_DIMENSIONS_VIDEO, REM_SIZE,\n VIDEO_THUMBNAIL_WIDTH } from '../config.js';\nimport { base64ToBlob, blobToBase64, fitImageSize, imageScaled } from './blob-helpers.js';\nimport { idToColorClass, secondsToTime, shortenFileName } from './strformat.js';\nimport { cancelablePromise, sanitizeUrl, sanitizeUrlForMime } from './utils.js';\n\nconst messages = defineMessages({\n drafty_form: {\n id: 'drafty_form',\n defaultMessage: 'Form: ',\n description: 'Comment for form in Drafty'\n },\n drafty_attachment: {\n id: 'drafty_attachment',\n defaultMessage: 'Attachment',\n description: 'Comment for attachment in Drafty'\n },\n drafty_image: {\n id: 'drafty_image',\n defaultMessage: 'Picture',\n description: 'Comment for embedded images in Drafty'\n },\n drafty_video: {\n id: 'drafty_video',\n defaultMessage: 'Video recording',\n description: 'Comment for videos embedded in Drafty'\n },\n drafty_unknown: {\n id: 'drafty_unknown',\n defaultMessage: 'Unsupported',\n description: 'Unsupported entity in drafty'\n }\n});\n\n// The main Drafty formatter: converts Drafty elements into React classes. 'this' is set by the caller.\n// 'this' must contain:\n// viewportWidth:\n// authorizeURL:\n// onImagePreview:\n// onVideoPreview:\n// onFormButtonClick:\n// onQuoteClick:\nexport function fullFormatter(style, data, values, key, stack) {\n if (stack.includes('QQ')) {\n return quoteFormatter.call(this, style, data, values, key);\n }\n\n if (!style) {\n // Unformatted.\n return values;\n }\n\n let el = Drafty.tagName(style);\n let attr = Drafty.attrValue(style, data) || {};\n attr.key = key;\n switch (style) {\n case 'AU':\n // Show audio player.\n if (attr.src) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'audio'));\n attr.duration = data.duration > 0 ? (data.duration | 0) : undefined;\n attr.preview = data.preview;\n attr.loading = 'lazy';\n }\n el = AudioPlayer;\n // Audio element cannot have content.\n values = null;\n break;\n case 'BR':\n values = null;\n break;\n case 'EX':\n // Ignore.\n break;\n case 'HL':\n // Highlighted text. Assign class name.\n attr.className = 'highlight';\n break;\n case 'HD':\n el = null;\n values = null;\n break;\n case 'IM':\n // Additional processing for images\n el = handleImageData.call(this, el, data, attr);\n // Image element cannot have content.\n values = null;\n break;\n case 'BN':\n // Button\n attr.onClick = this.onFormButtonClick;\n let inner = React.Children.map(values, (child) => {\n return typeof child == 'string' ? child : undefined;\n });\n if (!inner || inner.length == 0) {\n inner = [attr.name]\n }\n // Get text which will be sent back when the button is clicked.\n attr['data-title'] = inner.join('');\n break;\n case 'LN':\n if (attr) {\n // Ensure only safe URL schemes are clickable.\n attr.href = typeof attr.href == 'string' ? sanitizeUrl(attr.href, CLICKABLE_URL_SCHEMES) : '';\n }\n break;\n case 'MN':\n // Mention\n attr.className = 'mention'\n if (data) {\n attr.className += ' ' + idToColorClass(data.val, false, true);\n }\n break;\n case 'FM':\n // Form\n attr.className = 'bot-form';\n break;\n case 'RW':\n // Form element formatting is dependent on element content.\n break;\n case 'QQ':\n // Quote/citation.\n attr.className = 'reply-quote'\n attr.onClick = this.onQuoteClick;\n break;\n case 'VC':\n el = CallMessage;\n // Video call messages do not have content.\n values = null;\n if (data) {\n attr.callState = data.state;\n attr.incoming = data.incoming;\n attr.duration = data.duration;\n }\n break;\n case 'VD':\n // Additional processing for videos.\n el = handleVideoData.call(this, el, data, attr);\n // Video element cannot have content.\n values = null;\n break;\n default:\n if (!el) {\n // Unknown element.\n el = React.Fragment;\n attr = {key: key};\n // Generate comment for unknown element.\n let body = values;\n if (!Array.isArray(values) || !values.join('').trim()) {\n body = [{this.formatMessage(messages.drafty_unknown)}];\n }\n values = [extension, ' '].concat(body);\n }\n break;\n }\n if (!el) {\n return values;\n }\n return React.createElement(el, attr, values);\n}\n\n// Additional processing of image data.\nfunction handleImageData(el, data, attr) {\n if (!data) {\n attr.src = 'img/broken_image.png';\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n };\n return el;\n }\n\n attr.className = 'inline-image';\n const dim = fitImageSize(data.width, data.height,\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\n {dstWidth: BROKEN_IMAGE_SIZE, dstHeight: BROKEN_IMAGE_SIZE};\n attr.style = {\n width: dim.dstWidth + 'px',\n height: dim.dstHeight + 'px',\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\n minWidth: dim.dstWidth + 'px',\n minHeight: dim.dstHeight + 'px'\n };\n if (!Drafty.isProcessing(data)) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\n attr.alt = data.name;\n if (attr.src) {\n if (Math.max(data.width || 0, data.height || 0) > IMAGE_THUMBNAIL_DIM) {\n // Allow previews for large enough images.\n attr.onClick = this.onImagePreview;\n attr.className += ' image-clickable';\n }\n attr.loading = 'lazy';\n } else {\n attr.src = null;\n }\n } else {\n // Use custom element instead of Visible for testing\r\n */\r\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\r\n/**\r\n * The percentage of backoff time to randomize by.\r\n * See\r\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\r\n * for context.\r\n *\r\n * Visible for testing\r\n */\r\nconst RANDOM_FACTOR = 0.5;\r\n/**\r\n * Based on the backoff method from\r\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\r\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\r\n */\r\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\r\n // Calculates an exponentially increasing value.\r\n // Deviation: calculates value from count and a constant interval, so we only need to save value\r\n // and count to restore state.\r\n const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\r\n // A random \"fuzz\" to avoid waves of retries.\r\n // Deviation: randomFactor is required.\r\n const randomWait = Math.round(\r\n // A fraction of the backoff value to add/subtract.\r\n // Deviation: changes multiplication order to improve readability.\r\n RANDOM_FACTOR *\r\n currBaseValue *\r\n // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\r\n // if we add or subtract.\r\n (Math.random() - 0.5) *\r\n 2);\r\n // Limits backoff to max to avoid effectively permanent backoff.\r\n return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provide English ordinal letters after a number\r\n */\r\nfunction ordinal(i) {\r\n if (!Number.isFinite(i)) {\r\n return `${i}`;\r\n }\r\n return i + indicator(i);\r\n}\r\nfunction indicator(i) {\r\n i = Math.abs(i);\r\n const cent = i % 100;\r\n if (cent >= 10 && cent <= 20) {\r\n return 'th';\r\n }\r\n const dec = i % 10;\r\n if (dec === 1) {\r\n return 'st';\r\n }\r\n if (dec === 2) {\r\n return 'nd';\r\n }\r\n if (dec === 3) {\r\n return 'rd';\r\n }\r\n return 'th';\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getModularInstance(service) {\r\n if (service && service._delegate) {\r\n return service._delegate;\r\n }\r\n else {\r\n return service;\r\n }\r\n}\n\nexport { CONSTANTS, DecodeBase64StringError, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getDefaults, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isCloudflareWorker, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, isWebWorker, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, uuidv4, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n//# sourceMappingURL=index.esm2017.js.map\n","import { Deferred } from '@firebase/util';\n\n/**\r\n * Component for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass Component {\r\n /**\r\n *\r\n * @param name The public service name, e.g. app, auth, firestore, database\r\n * @param instanceFactory Service factory responsible for creating the public interface\r\n * @param type whether the service provided by the component is public or private\r\n */\r\n constructor(name, instanceFactory, type) {\r\n this.name = name;\r\n this.instanceFactory = instanceFactory;\r\n this.type = type;\r\n this.multipleInstances = false;\r\n /**\r\n * Properties to be added to the service namespace\r\n */\r\n this.serviceProps = {};\r\n this.instantiationMode = \"LAZY\" /* InstantiationMode.LAZY */;\r\n this.onInstanceCreated = null;\r\n }\r\n setInstantiationMode(mode) {\r\n this.instantiationMode = mode;\r\n return this;\r\n }\r\n setMultipleInstances(multipleInstances) {\r\n this.multipleInstances = multipleInstances;\r\n return this;\r\n }\r\n setServiceProps(props) {\r\n this.serviceProps = props;\r\n return this;\r\n }\r\n setInstanceCreatedCallback(callback) {\r\n this.onInstanceCreated = callback;\r\n return this;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\r\n * NameServiceMapping[T] is an alias for the type of the instance\r\n */\r\nclass Provider {\r\n constructor(name, container) {\r\n this.name = name;\r\n this.container = container;\r\n this.component = null;\r\n this.instances = new Map();\r\n this.instancesDeferred = new Map();\r\n this.instancesOptions = new Map();\r\n this.onInitCallbacks = new Map();\r\n }\r\n /**\r\n * @param identifier A provider can provide multiple instances of a service\r\n * if this.component.multipleInstances is true.\r\n */\r\n get(identifier) {\r\n // if multipleInstances is not supported, use the default name\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n if (!this.instancesDeferred.has(normalizedIdentifier)) {\r\n const deferred = new Deferred();\r\n this.instancesDeferred.set(normalizedIdentifier, deferred);\r\n if (this.isInitialized(normalizedIdentifier) ||\r\n this.shouldAutoInitialize()) {\r\n // initialize the service if it can be auto-initialized\r\n try {\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n if (instance) {\r\n deferred.resolve(instance);\r\n }\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception during get(), it should not cause\r\n // a fatal error. We just return the unresolved promise in this case.\r\n }\r\n }\r\n }\r\n return this.instancesDeferred.get(normalizedIdentifier).promise;\r\n }\r\n getImmediate(options) {\r\n var _a;\r\n // if multipleInstances is not supported, use the default name\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(options === null || options === void 0 ? void 0 : options.identifier);\r\n const optional = (_a = options === null || options === void 0 ? void 0 : options.optional) !== null && _a !== void 0 ? _a : false;\r\n if (this.isInitialized(normalizedIdentifier) ||\r\n this.shouldAutoInitialize()) {\r\n try {\r\n return this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n }\r\n catch (e) {\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw e;\r\n }\r\n }\r\n }\r\n else {\r\n // In case a component is not initialized and should/cannot be auto-initialized at the moment, return null if the optional flag is set, or throw\r\n if (optional) {\r\n return null;\r\n }\r\n else {\r\n throw Error(`Service ${this.name} is not available`);\r\n }\r\n }\r\n }\r\n getComponent() {\r\n return this.component;\r\n }\r\n setComponent(component) {\r\n if (component.name !== this.name) {\r\n throw Error(`Mismatching Component ${component.name} for Provider ${this.name}.`);\r\n }\r\n if (this.component) {\r\n throw Error(`Component for ${this.name} has already been provided`);\r\n }\r\n this.component = component;\r\n // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)\r\n if (!this.shouldAutoInitialize()) {\r\n return;\r\n }\r\n // if the service is eager, initialize the default instance\r\n if (isComponentEager(component)) {\r\n try {\r\n this.getOrInitializeService({ instanceIdentifier: DEFAULT_ENTRY_NAME });\r\n }\r\n catch (e) {\r\n // when the instance factory for an eager Component throws an exception during the eager\r\n // initialization, it should not cause a fatal error.\r\n // TODO: Investigate if we need to make it configurable, because some component may want to cause\r\n // a fatal error in this case?\r\n }\r\n }\r\n // Create service instances for the pending promises and resolve them\r\n // NOTE: if this.multipleInstances is false, only the default instance will be created\r\n // and all promises with resolve with it regardless of the identifier.\r\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n try {\r\n // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier\r\n });\r\n instanceDeferred.resolve(instance);\r\n }\r\n catch (e) {\r\n // when the instance factory throws an exception, it should not cause\r\n // a fatal error. We just leave the promise unresolved.\r\n }\r\n }\r\n }\r\n clearInstance(identifier = DEFAULT_ENTRY_NAME) {\r\n this.instancesDeferred.delete(identifier);\r\n this.instancesOptions.delete(identifier);\r\n this.instances.delete(identifier);\r\n }\r\n // app.delete() will call this method on every provider to delete the services\r\n // TODO: should we mark the provider as deleted?\r\n async delete() {\r\n const services = Array.from(this.instances.values());\r\n await Promise.all([\r\n ...services\r\n .filter(service => 'INTERNAL' in service) // legacy services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(service => service.INTERNAL.delete()),\r\n ...services\r\n .filter(service => '_delete' in service) // modularized services\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n .map(service => service._delete())\r\n ]);\r\n }\r\n isComponentSet() {\r\n return this.component != null;\r\n }\r\n isInitialized(identifier = DEFAULT_ENTRY_NAME) {\r\n return this.instances.has(identifier);\r\n }\r\n getOptions(identifier = DEFAULT_ENTRY_NAME) {\r\n return this.instancesOptions.get(identifier) || {};\r\n }\r\n initialize(opts = {}) {\r\n const { options = {} } = opts;\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(opts.instanceIdentifier);\r\n if (this.isInitialized(normalizedIdentifier)) {\r\n throw Error(`${this.name}(${normalizedIdentifier}) has already been initialized`);\r\n }\r\n if (!this.isComponentSet()) {\r\n throw Error(`Component ${this.name} has not been registered yet`);\r\n }\r\n const instance = this.getOrInitializeService({\r\n instanceIdentifier: normalizedIdentifier,\r\n options\r\n });\r\n // resolve any pending promise waiting for the service instance\r\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\r\n const normalizedDeferredIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\r\n if (normalizedIdentifier === normalizedDeferredIdentifier) {\r\n instanceDeferred.resolve(instance);\r\n }\r\n }\r\n return instance;\r\n }\r\n /**\r\n *\r\n * @param callback - a function that will be invoked after the provider has been initialized by calling provider.initialize().\r\n * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.\r\n *\r\n * @param identifier An optional instance identifier\r\n * @returns a function to unregister the callback\r\n */\r\n onInit(callback, identifier) {\r\n var _a;\r\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\r\n const existingCallbacks = (_a = this.onInitCallbacks.get(normalizedIdentifier)) !== null && _a !== void 0 ? _a : new Set();\r\n existingCallbacks.add(callback);\r\n this.onInitCallbacks.set(normalizedIdentifier, existingCallbacks);\r\n const existingInstance = this.instances.get(normalizedIdentifier);\r\n if (existingInstance) {\r\n callback(existingInstance, normalizedIdentifier);\r\n }\r\n return () => {\r\n existingCallbacks.delete(callback);\r\n };\r\n }\r\n /**\r\n * Invoke onInit callbacks synchronously\r\n * @param instance the service instance`\r\n */\r\n invokeOnInitCallbacks(instance, identifier) {\r\n const callbacks = this.onInitCallbacks.get(identifier);\r\n if (!callbacks) {\r\n return;\r\n }\r\n for (const callback of callbacks) {\r\n try {\r\n callback(instance, identifier);\r\n }\r\n catch (_a) {\r\n // ignore errors in the onInit callback\r\n }\r\n }\r\n }\r\n getOrInitializeService({ instanceIdentifier, options = {} }) {\r\n let instance = this.instances.get(instanceIdentifier);\r\n if (!instance && this.component) {\r\n instance = this.component.instanceFactory(this.container, {\r\n instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),\r\n options\r\n });\r\n this.instances.set(instanceIdentifier, instance);\r\n this.instancesOptions.set(instanceIdentifier, options);\r\n /**\r\n * Invoke onInit listeners.\r\n * Note this.component.onInstanceCreated is different, which is used by the component creator,\r\n * while onInit listeners are registered by consumers of the provider.\r\n */\r\n this.invokeOnInitCallbacks(instance, instanceIdentifier);\r\n /**\r\n * Order is important\r\n * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which\r\n * makes `isInitialized()` return true.\r\n */\r\n if (this.component.onInstanceCreated) {\r\n try {\r\n this.component.onInstanceCreated(this.container, instanceIdentifier, instance);\r\n }\r\n catch (_a) {\r\n // ignore errors in the onInstanceCreatedCallback\r\n }\r\n }\r\n }\r\n return instance || null;\r\n }\r\n normalizeInstanceIdentifier(identifier = DEFAULT_ENTRY_NAME) {\r\n if (this.component) {\r\n return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\r\n }\r\n else {\r\n return identifier; // assume multiple instances are supported before the component is provided.\r\n }\r\n }\r\n shouldAutoInitialize() {\r\n return (!!this.component &&\r\n this.component.instantiationMode !== \"EXPLICIT\" /* InstantiationMode.EXPLICIT */);\r\n }\r\n}\r\n// undefined should be passed to the service factory for the default instance\r\nfunction normalizeIdentifierForFactory(identifier) {\r\n return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\r\n}\r\nfunction isComponentEager(component) {\r\n return component.instantiationMode === \"EAGER\" /* InstantiationMode.EAGER */;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\r\n */\r\nclass ComponentContainer {\r\n constructor(name) {\r\n this.name = name;\r\n this.providers = new Map();\r\n }\r\n /**\r\n *\r\n * @param component Component being added\r\n * @param overwrite When a component with the same name has already been registered,\r\n * if overwrite is true: overwrite the existing component with the new component and create a new\r\n * provider with the new component. It can be useful in tests where you want to use different mocks\r\n * for different tests.\r\n * if overwrite is false: throw an exception\r\n */\r\n addComponent(component) {\r\n const provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n throw new Error(`Component ${component.name} has already been registered with ${this.name}`);\r\n }\r\n provider.setComponent(component);\r\n }\r\n addOrOverwriteComponent(component) {\r\n const provider = this.getProvider(component.name);\r\n if (provider.isComponentSet()) {\r\n // delete the existing provider from the container, so we can register the new component\r\n this.providers.delete(component.name);\r\n }\r\n this.addComponent(component);\r\n }\r\n /**\r\n * getProvider provides a type safe interface where it can only be called with a field name\r\n * present in NameServiceMapping interface.\r\n *\r\n * Firebase SDKs providing services should extend NameServiceMapping interface to register\r\n * themselves.\r\n */\r\n getProvider(name) {\r\n if (this.providers.has(name)) {\r\n return this.providers.get(name);\r\n }\r\n // create a Provider for a service that hasn't registered with Firebase\r\n const provider = new Provider(name, this);\r\n this.providers.set(name, provider);\r\n return provider;\r\n }\r\n getProviders() {\r\n return Array.from(this.providers.values());\r\n }\r\n}\n\nexport { Component, ComponentContainer, Provider };\n//# sourceMappingURL=index.esm2017.js.map\n","/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A container for all of the Logger instances\r\n */\r\nconst instances = [];\r\n/**\r\n * The JS SDK supports 5 log levels and also allows a user the ability to\r\n * silence the logs altogether.\r\n *\r\n * The order is a follows:\r\n * DEBUG < VERBOSE < INFO < WARN < ERROR\r\n *\r\n * All of the log types above the current log level will be captured (i.e. if\r\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\r\n * `VERBOSE` logs will not)\r\n */\r\nvar LogLevel;\r\n(function (LogLevel) {\r\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\r\n LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\r\n LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\r\n LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\r\n LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\r\n LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\r\n})(LogLevel || (LogLevel = {}));\r\nconst levelStringToEnum = {\r\n 'debug': LogLevel.DEBUG,\r\n 'verbose': LogLevel.VERBOSE,\r\n 'info': LogLevel.INFO,\r\n 'warn': LogLevel.WARN,\r\n 'error': LogLevel.ERROR,\r\n 'silent': LogLevel.SILENT\r\n};\r\n/**\r\n * The default log level\r\n */\r\nconst defaultLogLevel = LogLevel.INFO;\r\n/**\r\n * By default, `console.debug` is not displayed in the developer console (in\r\n * chrome). To avoid forcing users to have to opt-in to these logs twice\r\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\r\n * logs to the `console.log` function.\r\n */\r\nconst ConsoleMethod = {\r\n [LogLevel.DEBUG]: 'log',\r\n [LogLevel.VERBOSE]: 'log',\r\n [LogLevel.INFO]: 'info',\r\n [LogLevel.WARN]: 'warn',\r\n [LogLevel.ERROR]: 'error'\r\n};\r\n/**\r\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\r\n * messages on to their corresponding console counterparts (if the log method\r\n * is supported by the current log level)\r\n */\r\nconst defaultLogHandler = (instance, logType, ...args) => {\r\n if (logType < instance.logLevel) {\r\n return;\r\n }\r\n const now = new Date().toISOString();\r\n const method = ConsoleMethod[logType];\r\n if (method) {\r\n console[method](`[${now}] ${instance.name}:`, ...args);\r\n }\r\n else {\r\n throw new Error(`Attempted to log a message with an invalid logType (value: ${logType})`);\r\n }\r\n};\r\nclass Logger {\r\n /**\r\n * Gives you an instance of a Logger to capture messages according to\r\n * Firebase's logging scheme.\r\n *\r\n * @param name The name that the logs will be associated with\r\n */\r\n constructor(name) {\r\n this.name = name;\r\n /**\r\n * The log level of the given Logger instance.\r\n */\r\n this._logLevel = defaultLogLevel;\r\n /**\r\n * The main (internal) log handler for the Logger instance.\r\n * Can be set to a new function in internal package code but not by user.\r\n */\r\n this._logHandler = defaultLogHandler;\r\n /**\r\n * The optional, additional, user-defined log handler for the Logger instance.\r\n */\r\n this._userLogHandler = null;\r\n /**\r\n * Capture the current instance for later use\r\n */\r\n instances.push(this);\r\n }\r\n get logLevel() {\r\n return this._logLevel;\r\n }\r\n set logLevel(val) {\r\n if (!(val in LogLevel)) {\r\n throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\r\n }\r\n this._logLevel = val;\r\n }\r\n // Workaround for setter/getter having to be the same type.\r\n setLogLevel(val) {\r\n this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\r\n }\r\n get logHandler() {\r\n return this._logHandler;\r\n }\r\n set logHandler(val) {\r\n if (typeof val !== 'function') {\r\n throw new TypeError('Value assigned to `logHandler` must be a function');\r\n }\r\n this._logHandler = val;\r\n }\r\n get userLogHandler() {\r\n return this._userLogHandler;\r\n }\r\n set userLogHandler(val) {\r\n this._userLogHandler = val;\r\n }\r\n /**\r\n * The functions below are all based on the `console` interface\r\n */\r\n debug(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\r\n this._logHandler(this, LogLevel.DEBUG, ...args);\r\n }\r\n log(...args) {\r\n this._userLogHandler &&\r\n this._userLogHandler(this, LogLevel.VERBOSE, ...args);\r\n this._logHandler(this, LogLevel.VERBOSE, ...args);\r\n }\r\n info(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\r\n this._logHandler(this, LogLevel.INFO, ...args);\r\n }\r\n warn(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\r\n this._logHandler(this, LogLevel.WARN, ...args);\r\n }\r\n error(...args) {\r\n this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\r\n this._logHandler(this, LogLevel.ERROR, ...args);\r\n }\r\n}\r\nfunction setLogLevel(level) {\r\n instances.forEach(inst => {\r\n inst.setLogLevel(level);\r\n });\r\n}\r\nfunction setUserLogHandler(logCallback, options) {\r\n for (const instance of instances) {\r\n let customLogLevel = null;\r\n if (options && options.level) {\r\n customLogLevel = levelStringToEnum[options.level];\r\n }\r\n if (logCallback === null) {\r\n instance.userLogHandler = null;\r\n }\r\n else {\r\n instance.userLogHandler = (instance, level, ...args) => {\r\n const message = args\r\n .map(arg => {\r\n if (arg == null) {\r\n return null;\r\n }\r\n else if (typeof arg === 'string') {\r\n return arg;\r\n }\r\n else if (typeof arg === 'number' || typeof arg === 'boolean') {\r\n return arg.toString();\r\n }\r\n else if (arg instanceof Error) {\r\n return arg.message;\r\n }\r\n else {\r\n try {\r\n return JSON.stringify(arg);\r\n }\r\n catch (ignored) {\r\n return null;\r\n }\r\n }\r\n })\r\n .filter(arg => arg)\r\n .join(' ');\r\n if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\r\n logCallback({\r\n level: LogLevel[level].toLowerCase(),\r\n message,\r\n args,\r\n type: instance.name\r\n });\r\n }\r\n };\r\n }\r\n }\r\n}\n\nexport { LogLevel, Logger, setLogLevel, setUserLogHandler };\n//# sourceMappingURL=index.esm2017.js.map\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","import { Component, ComponentContainer } from '@firebase/component';\nimport { Logger, setUserLogHandler, setLogLevel as setLogLevel$1 } from '@firebase/logger';\nimport { ErrorFactory, getDefaultAppConfig, deepEqual, isBrowser, isWebWorker, FirebaseError, base64urlEncodeWithoutPadding, isIndexedDBAvailable, validateIndexedDBOpenable } from '@firebase/util';\nexport { FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass PlatformLoggerServiceImpl {\r\n constructor(container) {\r\n this.container = container;\r\n }\r\n // In initial implementation, this will be called by installations on\r\n // auth token refresh, and installations will send this string.\r\n getPlatformInfoString() {\r\n const providers = this.container.getProviders();\r\n // Loop through providers and get library/version pairs from any that are\r\n // version components.\r\n return providers\r\n .map(provider => {\r\n if (isVersionServiceProvider(provider)) {\r\n const service = provider.getImmediate();\r\n return `${service.library}/${service.version}`;\r\n }\r\n else {\r\n return null;\r\n }\r\n })\r\n .filter(logString => logString)\r\n .join(' ');\r\n }\r\n}\r\n/**\r\n *\r\n * @param provider check if this provider provides a VersionService\r\n *\r\n * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider\r\n * provides VersionService. The provider is not necessarily a 'app-version'\r\n * provider.\r\n */\r\nfunction isVersionServiceProvider(provider) {\r\n const component = provider.getComponent();\r\n return (component === null || component === void 0 ? void 0 : component.type) === \"VERSION\" /* ComponentType.VERSION */;\r\n}\n\nconst name$q = \"@firebase/app\";\nconst version$1 = \"0.10.13\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst logger = new Logger('@firebase/app');\n\nconst name$p = \"@firebase/app-compat\";\n\nconst name$o = \"@firebase/analytics-compat\";\n\nconst name$n = \"@firebase/analytics\";\n\nconst name$m = \"@firebase/app-check-compat\";\n\nconst name$l = \"@firebase/app-check\";\n\nconst name$k = \"@firebase/auth\";\n\nconst name$j = \"@firebase/auth-compat\";\n\nconst name$i = \"@firebase/database\";\n\nconst name$h = \"@firebase/data-connect\";\n\nconst name$g = \"@firebase/database-compat\";\n\nconst name$f = \"@firebase/functions\";\n\nconst name$e = \"@firebase/functions-compat\";\n\nconst name$d = \"@firebase/installations\";\n\nconst name$c = \"@firebase/installations-compat\";\n\nconst name$b = \"@firebase/messaging\";\n\nconst name$a = \"@firebase/messaging-compat\";\n\nconst name$9 = \"@firebase/performance\";\n\nconst name$8 = \"@firebase/performance-compat\";\n\nconst name$7 = \"@firebase/remote-config\";\n\nconst name$6 = \"@firebase/remote-config-compat\";\n\nconst name$5 = \"@firebase/storage\";\n\nconst name$4 = \"@firebase/storage-compat\";\n\nconst name$3 = \"@firebase/firestore\";\n\nconst name$2 = \"@firebase/vertexai-preview\";\n\nconst name$1 = \"@firebase/firestore-compat\";\n\nconst name = \"firebase\";\nconst version = \"10.14.1\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The default app name\r\n *\r\n * @internal\r\n */\r\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\r\nconst PLATFORM_LOG_STRING = {\r\n [name$q]: 'fire-core',\r\n [name$p]: 'fire-core-compat',\r\n [name$n]: 'fire-analytics',\r\n [name$o]: 'fire-analytics-compat',\r\n [name$l]: 'fire-app-check',\r\n [name$m]: 'fire-app-check-compat',\r\n [name$k]: 'fire-auth',\r\n [name$j]: 'fire-auth-compat',\r\n [name$i]: 'fire-rtdb',\r\n [name$h]: 'fire-data-connect',\r\n [name$g]: 'fire-rtdb-compat',\r\n [name$f]: 'fire-fn',\r\n [name$e]: 'fire-fn-compat',\r\n [name$d]: 'fire-iid',\r\n [name$c]: 'fire-iid-compat',\r\n [name$b]: 'fire-fcm',\r\n [name$a]: 'fire-fcm-compat',\r\n [name$9]: 'fire-perf',\r\n [name$8]: 'fire-perf-compat',\r\n [name$7]: 'fire-rc',\r\n [name$6]: 'fire-rc-compat',\r\n [name$5]: 'fire-gcs',\r\n [name$4]: 'fire-gcs-compat',\r\n [name$3]: 'fire-fst',\r\n [name$1]: 'fire-fst-compat',\r\n [name$2]: 'fire-vertex',\r\n 'fire-js': 'fire-js',\r\n [name]: 'fire-js-all'\r\n};\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @internal\r\n */\r\nconst _apps = new Map();\r\n/**\r\n * @internal\r\n */\r\nconst _serverApps = new Map();\r\n/**\r\n * Registered components.\r\n *\r\n * @internal\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst _components = new Map();\r\n/**\r\n * @param component - the component being added to this app's container\r\n *\r\n * @internal\r\n */\r\nfunction _addComponent(app, component) {\r\n try {\r\n app.container.addComponent(component);\r\n }\r\n catch (e) {\r\n logger.debug(`Component ${component.name} failed to register with FirebaseApp ${app.name}`, e);\r\n }\r\n}\r\n/**\r\n *\r\n * @internal\r\n */\r\nfunction _addOrOverwriteComponent(app, component) {\r\n app.container.addOrOverwriteComponent(component);\r\n}\r\n/**\r\n *\r\n * @param component - the component to register\r\n * @returns whether or not the component is registered successfully\r\n *\r\n * @internal\r\n */\r\nfunction _registerComponent(component) {\r\n const componentName = component.name;\r\n if (_components.has(componentName)) {\r\n logger.debug(`There were multiple attempts to register component ${componentName}.`);\r\n return false;\r\n }\r\n _components.set(componentName, component);\r\n // add the component to existing app instances\r\n for (const app of _apps.values()) {\r\n _addComponent(app, component);\r\n }\r\n for (const serverApp of _serverApps.values()) {\r\n _addComponent(serverApp, component);\r\n }\r\n return true;\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n *\r\n * @returns the provider for the service with the matching name\r\n *\r\n * @internal\r\n */\r\nfunction _getProvider(app, name) {\r\n const heartbeatController = app.container\r\n .getProvider('heartbeat')\r\n .getImmediate({ optional: true });\r\n if (heartbeatController) {\r\n void heartbeatController.triggerHeartbeat();\r\n }\r\n return app.container.getProvider(name);\r\n}\r\n/**\r\n *\r\n * @param app - FirebaseApp instance\r\n * @param name - service name\r\n * @param instanceIdentifier - service instance identifier in case the service supports multiple instances\r\n *\r\n * @internal\r\n */\r\nfunction _removeServiceInstance(app, name, instanceIdentifier = DEFAULT_ENTRY_NAME) {\r\n _getProvider(app, name).clearInstance(instanceIdentifier);\r\n}\r\n/**\r\n *\r\n * @param obj - an object of type FirebaseApp or FirebaseOptions.\r\n *\r\n * @returns true if the provide object is of type FirebaseApp.\r\n *\r\n * @internal\r\n */\r\nfunction _isFirebaseApp(obj) {\r\n return obj.options !== undefined;\r\n}\r\n/**\r\n *\r\n * @param obj - an object of type FirebaseApp.\r\n *\r\n * @returns true if the provided object is of type FirebaseServerAppImpl.\r\n *\r\n * @internal\r\n */\r\nfunction _isFirebaseServerApp(obj) {\r\n return obj.settings !== undefined;\r\n}\r\n/**\r\n * Test only\r\n *\r\n * @internal\r\n */\r\nfunction _clearComponents() {\r\n _components.clear();\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERRORS = {\r\n [\"no-app\" /* AppError.NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\r\n 'call initializeApp() first',\r\n [\"bad-app-name\" /* AppError.BAD_APP_NAME */]: \"Illegal App name: '{$appName}'\",\r\n [\"duplicate-app\" /* AppError.DUPLICATE_APP */]: \"Firebase App named '{$appName}' already exists with different options or config\",\r\n [\"app-deleted\" /* AppError.APP_DELETED */]: \"Firebase App named '{$appName}' already deleted\",\r\n [\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */]: 'Firebase Server App has been deleted',\r\n [\"no-options\" /* AppError.NO_OPTIONS */]: 'Need to provide options, when not being deployed to hosting via source.',\r\n [\"invalid-app-argument\" /* AppError.INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\r\n 'Firebase App instance.',\r\n [\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */]: 'First argument to `onLog` must be null or a function.',\r\n [\"idb-open\" /* AppError.IDB_OPEN */]: 'Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-get\" /* AppError.IDB_GET */]: 'Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-set\" /* AppError.IDB_WRITE */]: 'Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"idb-delete\" /* AppError.IDB_DELETE */]: 'Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.',\r\n [\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */]: 'FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.',\r\n [\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */]: 'FirebaseServerApp is not for use in browser environments.'\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory('app', 'Firebase', ERRORS);\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FirebaseAppImpl {\r\n constructor(options, config, container) {\r\n this._isDeleted = false;\r\n this._options = Object.assign({}, options);\r\n this._config = Object.assign({}, config);\r\n this._name = config.name;\r\n this._automaticDataCollectionEnabled =\r\n config.automaticDataCollectionEnabled;\r\n this._container = container;\r\n this.container.addComponent(new Component('app', () => this, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n }\r\n get automaticDataCollectionEnabled() {\r\n this.checkDestroyed();\r\n return this._automaticDataCollectionEnabled;\r\n }\r\n set automaticDataCollectionEnabled(val) {\r\n this.checkDestroyed();\r\n this._automaticDataCollectionEnabled = val;\r\n }\r\n get name() {\r\n this.checkDestroyed();\r\n return this._name;\r\n }\r\n get options() {\r\n this.checkDestroyed();\r\n return this._options;\r\n }\r\n get config() {\r\n this.checkDestroyed();\r\n return this._config;\r\n }\r\n get container() {\r\n return this._container;\r\n }\r\n get isDeleted() {\r\n return this._isDeleted;\r\n }\r\n set isDeleted(val) {\r\n this._isDeleted = val;\r\n }\r\n /**\r\n * This function will throw an Error if the App has already been deleted -\r\n * use before performing API actions on the App.\r\n */\r\n checkDestroyed() {\r\n if (this.isDeleted) {\r\n throw ERROR_FACTORY.create(\"app-deleted\" /* AppError.APP_DELETED */, { appName: this._name });\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2023 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass FirebaseServerAppImpl extends FirebaseAppImpl {\r\n constructor(options, serverConfig, name, container) {\r\n // Build configuration parameters for the FirebaseAppImpl base class.\r\n const automaticDataCollectionEnabled = serverConfig.automaticDataCollectionEnabled !== undefined\r\n ? serverConfig.automaticDataCollectionEnabled\r\n : false;\r\n // Create the FirebaseAppSettings object for the FirebaseAppImp constructor.\r\n const config = {\r\n name,\r\n automaticDataCollectionEnabled\r\n };\r\n if (options.apiKey !== undefined) {\r\n // Construct the parent FirebaseAppImp object.\r\n super(options, config, container);\r\n }\r\n else {\r\n const appImpl = options;\r\n super(appImpl.options, config, container);\r\n }\r\n // Now construct the data for the FirebaseServerAppImpl.\r\n this._serverConfig = Object.assign({ automaticDataCollectionEnabled }, serverConfig);\r\n this._finalizationRegistry = null;\r\n if (typeof FinalizationRegistry !== 'undefined') {\r\n this._finalizationRegistry = new FinalizationRegistry(() => {\r\n this.automaticCleanup();\r\n });\r\n }\r\n this._refCount = 0;\r\n this.incRefCount(this._serverConfig.releaseOnDeref);\r\n // Do not retain a hard reference to the dref object, otherwise the FinalizationRegistry\r\n // will never trigger.\r\n this._serverConfig.releaseOnDeref = undefined;\r\n serverConfig.releaseOnDeref = undefined;\r\n registerVersion(name$q, version$1, 'serverapp');\r\n }\r\n toJSON() {\r\n return undefined;\r\n }\r\n get refCount() {\r\n return this._refCount;\r\n }\r\n // Increment the reference count of this server app. If an object is provided, register it\r\n // with the finalization registry.\r\n incRefCount(obj) {\r\n if (this.isDeleted) {\r\n return;\r\n }\r\n this._refCount++;\r\n if (obj !== undefined && this._finalizationRegistry !== null) {\r\n this._finalizationRegistry.register(obj, this);\r\n }\r\n }\r\n // Decrement the reference count.\r\n decRefCount() {\r\n if (this.isDeleted) {\r\n return 0;\r\n }\r\n return --this._refCount;\r\n }\r\n // Invoked by the FinalizationRegistry callback to note that this app should go through its\r\n // reference counts and delete itself if no reference count remain. The coordinating logic that\r\n // handles this is in deleteApp(...).\r\n automaticCleanup() {\r\n void deleteApp(this);\r\n }\r\n get settings() {\r\n this.checkDestroyed();\r\n return this._serverConfig;\r\n }\r\n /**\r\n * This function will throw an Error if the App has already been deleted -\r\n * use before performing API actions on the App.\r\n */\r\n checkDestroyed() {\r\n if (this.isDeleted) {\r\n throw ERROR_FACTORY.create(\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */);\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * The current SDK version.\r\n *\r\n * @public\r\n */\r\nconst SDK_VERSION = version;\r\nfunction initializeApp(_options, rawConfig = {}) {\r\n let options = _options;\r\n if (typeof rawConfig !== 'object') {\r\n const name = rawConfig;\r\n rawConfig = { name };\r\n }\r\n const config = Object.assign({ name: DEFAULT_ENTRY_NAME, automaticDataCollectionEnabled: false }, rawConfig);\r\n const name = config.name;\r\n if (typeof name !== 'string' || !name) {\r\n throw ERROR_FACTORY.create(\"bad-app-name\" /* AppError.BAD_APP_NAME */, {\r\n appName: String(name)\r\n });\r\n }\r\n options || (options = getDefaultAppConfig());\r\n if (!options) {\r\n throw ERROR_FACTORY.create(\"no-options\" /* AppError.NO_OPTIONS */);\r\n }\r\n const existingApp = _apps.get(name);\r\n if (existingApp) {\r\n // return the existing app if options and config deep equal the ones in the existing app.\r\n if (deepEqual(options, existingApp.options) &&\r\n deepEqual(config, existingApp.config)) {\r\n return existingApp;\r\n }\r\n else {\r\n throw ERROR_FACTORY.create(\"duplicate-app\" /* AppError.DUPLICATE_APP */, { appName: name });\r\n }\r\n }\r\n const container = new ComponentContainer(name);\r\n for (const component of _components.values()) {\r\n container.addComponent(component);\r\n }\r\n const newApp = new FirebaseAppImpl(options, config, container);\r\n _apps.set(name, newApp);\r\n return newApp;\r\n}\r\nfunction initializeServerApp(_options, _serverAppConfig) {\r\n if (isBrowser() && !isWebWorker()) {\r\n // FirebaseServerApp isn't designed to be run in browsers.\r\n throw ERROR_FACTORY.create(\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */);\r\n }\r\n if (_serverAppConfig.automaticDataCollectionEnabled === undefined) {\r\n _serverAppConfig.automaticDataCollectionEnabled = false;\r\n }\r\n let appOptions;\r\n if (_isFirebaseApp(_options)) {\r\n appOptions = _options.options;\r\n }\r\n else {\r\n appOptions = _options;\r\n }\r\n // Build an app name based on a hash of the configuration options.\r\n const nameObj = Object.assign(Object.assign({}, _serverAppConfig), appOptions);\r\n // However, Do not mangle the name based on releaseOnDeref, since it will vary between the\r\n // construction of FirebaseServerApp instances. For example, if the object is the request headers.\r\n if (nameObj.releaseOnDeref !== undefined) {\r\n delete nameObj.releaseOnDeref;\r\n }\r\n const hashCode = (s) => {\r\n return [...s].reduce((hash, c) => (Math.imul(31, hash) + c.charCodeAt(0)) | 0, 0);\r\n };\r\n if (_serverAppConfig.releaseOnDeref !== undefined) {\r\n if (typeof FinalizationRegistry === 'undefined') {\r\n throw ERROR_FACTORY.create(\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */, {});\r\n }\r\n }\r\n const nameString = '' + hashCode(JSON.stringify(nameObj));\r\n const existingApp = _serverApps.get(nameString);\r\n if (existingApp) {\r\n existingApp.incRefCount(_serverAppConfig.releaseOnDeref);\r\n return existingApp;\r\n }\r\n const container = new ComponentContainer(nameString);\r\n for (const component of _components.values()) {\r\n container.addComponent(component);\r\n }\r\n const newApp = new FirebaseServerAppImpl(appOptions, _serverAppConfig, nameString, container);\r\n _serverApps.set(nameString, newApp);\r\n return newApp;\r\n}\r\n/**\r\n * Retrieves a {@link @firebase/app#FirebaseApp} instance.\r\n *\r\n * When called with no arguments, the default app is returned. When an app name\r\n * is provided, the app corresponding to that name is returned.\r\n *\r\n * An exception is thrown if the app being retrieved has not yet been\r\n * initialized.\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return the default app\r\n * const app = getApp();\r\n * ```\r\n *\r\n * @example\r\n * ```javascript\r\n * // Return a named app\r\n * const otherApp = getApp(\"otherApp\");\r\n * ```\r\n *\r\n * @param name - Optional name of the app to return. If no name is\r\n * provided, the default is `\"[DEFAULT]\"`.\r\n *\r\n * @returns The app corresponding to the provided app name.\r\n * If no app name is provided, the default app is returned.\r\n *\r\n * @public\r\n */\r\nfunction getApp(name = DEFAULT_ENTRY_NAME) {\r\n const app = _apps.get(name);\r\n if (!app && name === DEFAULT_ENTRY_NAME && getDefaultAppConfig()) {\r\n return initializeApp();\r\n }\r\n if (!app) {\r\n throw ERROR_FACTORY.create(\"no-app\" /* AppError.NO_APP */, { appName: name });\r\n }\r\n return app;\r\n}\r\n/**\r\n * A (read-only) array of all initialized apps.\r\n * @public\r\n */\r\nfunction getApps() {\r\n return Array.from(_apps.values());\r\n}\r\n/**\r\n * Renders this app unusable and frees the resources of all associated\r\n * services.\r\n *\r\n * @example\r\n * ```javascript\r\n * deleteApp(app)\r\n * .then(function() {\r\n * console.log(\"App deleted successfully\");\r\n * })\r\n * .catch(function(error) {\r\n * console.log(\"Error deleting app:\", error);\r\n * });\r\n * ```\r\n *\r\n * @public\r\n */\r\nasync function deleteApp(app) {\r\n let cleanupProviders = false;\r\n const name = app.name;\r\n if (_apps.has(name)) {\r\n cleanupProviders = true;\r\n _apps.delete(name);\r\n }\r\n else if (_serverApps.has(name)) {\r\n const firebaseServerApp = app;\r\n if (firebaseServerApp.decRefCount() <= 0) {\r\n _serverApps.delete(name);\r\n cleanupProviders = true;\r\n }\r\n }\r\n if (cleanupProviders) {\r\n await Promise.all(app.container\r\n .getProviders()\r\n .map(provider => provider.delete()));\r\n app.isDeleted = true;\r\n }\r\n}\r\n/**\r\n * Registers a library's name and version for platform logging purposes.\r\n * @param library - Name of 1p or 3p library (e.g. firestore, angularfire)\r\n * @param version - Current version of that library.\r\n * @param variant - Bundle variant, e.g., node, rn, etc.\r\n *\r\n * @public\r\n */\r\nfunction registerVersion(libraryKeyOrName, version, variant) {\r\n var _a;\r\n // TODO: We can use this check to whitelist strings when/if we set up\r\n // a good whitelist system.\r\n let library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName;\r\n if (variant) {\r\n library += `-${variant}`;\r\n }\r\n const libraryMismatch = library.match(/\\s|\\//);\r\n const versionMismatch = version.match(/\\s|\\//);\r\n if (libraryMismatch || versionMismatch) {\r\n const warning = [\r\n `Unable to register library \"${library}\" with version \"${version}\":`\r\n ];\r\n if (libraryMismatch) {\r\n warning.push(`library name \"${library}\" contains illegal characters (whitespace or \"/\")`);\r\n }\r\n if (libraryMismatch && versionMismatch) {\r\n warning.push('and');\r\n }\r\n if (versionMismatch) {\r\n warning.push(`version name \"${version}\" contains illegal characters (whitespace or \"/\")`);\r\n }\r\n logger.warn(warning.join(' '));\r\n return;\r\n }\r\n _registerComponent(new Component(`${library}-version`, () => ({ library, version }), \"VERSION\" /* ComponentType.VERSION */));\r\n}\r\n/**\r\n * Sets log handler for all Firebase SDKs.\r\n * @param logCallback - An optional custom log handler that executes user code whenever\r\n * the Firebase SDK makes a logging call.\r\n *\r\n * @public\r\n */\r\nfunction onLog(logCallback, options) {\r\n if (logCallback !== null && typeof logCallback !== 'function') {\r\n throw ERROR_FACTORY.create(\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */);\r\n }\r\n setUserLogHandler(logCallback, options);\r\n}\r\n/**\r\n * Sets log level for all Firebase SDKs.\r\n *\r\n * All of the log types above the current log level are captured (i.e. if\r\n * you set the log level to `info`, errors are logged, but `debug` and\r\n * `verbose` logs are not).\r\n *\r\n * @public\r\n */\r\nfunction setLogLevel(logLevel) {\r\n setLogLevel$1(logLevel);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DB_NAME = 'firebase-heartbeat-database';\r\nconst DB_VERSION = 1;\r\nconst STORE_NAME = 'firebase-heartbeat-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDB(DB_NAME, DB_VERSION, {\r\n upgrade: (db, oldVersion) => {\r\n // We don't use 'break' in this switch statement, the fall-through\r\n // behavior is what we want, because if there are multiple versions between\r\n // the old version and the current version, we want ALL the migrations\r\n // that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (oldVersion) {\r\n case 0:\r\n try {\r\n db.createObjectStore(STORE_NAME);\r\n }\r\n catch (e) {\r\n // Safari/iOS browsers throw occasional exceptions on\r\n // db.createObjectStore() that may be a bug. Avoid blocking\r\n // the rest of the app functionality.\r\n console.warn(e);\r\n }\r\n }\r\n }\r\n }).catch(e => {\r\n throw ERROR_FACTORY.create(\"idb-open\" /* AppError.IDB_OPEN */, {\r\n originalErrorMessage: e.message\r\n });\r\n });\r\n }\r\n return dbPromise;\r\n}\r\nasync function readHeartbeatsFromIndexedDB(app) {\r\n try {\r\n const db = await getDbPromise();\r\n const tx = db.transaction(STORE_NAME);\r\n const result = await tx.objectStore(STORE_NAME).get(computeKey(app));\r\n // We already have the value but tx.done can throw,\r\n // so we need to await it here to catch errors\r\n await tx.done;\r\n return result;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n logger.warn(e.message);\r\n }\r\n else {\r\n const idbGetError = ERROR_FACTORY.create(\"idb-get\" /* AppError.IDB_GET */, {\r\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n logger.warn(idbGetError.message);\r\n }\r\n }\r\n}\r\nasync function writeHeartbeatsToIndexedDB(app, heartbeatObject) {\r\n try {\r\n const db = await getDbPromise();\r\n const tx = db.transaction(STORE_NAME, 'readwrite');\r\n const objectStore = tx.objectStore(STORE_NAME);\r\n await objectStore.put(heartbeatObject, computeKey(app));\r\n await tx.done;\r\n }\r\n catch (e) {\r\n if (e instanceof FirebaseError) {\r\n logger.warn(e.message);\r\n }\r\n else {\r\n const idbGetError = ERROR_FACTORY.create(\"idb-set\" /* AppError.IDB_WRITE */, {\r\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n logger.warn(idbGetError.message);\r\n }\r\n }\r\n}\r\nfunction computeKey(app) {\r\n return `${app.name}!${app.options.appId}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2021 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst MAX_HEADER_BYTES = 1024;\r\n// 30 days\r\nconst STORED_HEARTBEAT_RETENTION_MAX_MILLIS = 30 * 24 * 60 * 60 * 1000;\r\nclass HeartbeatServiceImpl {\r\n constructor(container) {\r\n this.container = container;\r\n /**\r\n * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate\r\n * the header string.\r\n * Stores one record per date. This will be consolidated into the standard\r\n * format of one record per user agent string before being sent as a header.\r\n * Populated from indexedDB when the controller is instantiated and should\r\n * be kept in sync with indexedDB.\r\n * Leave public for easier testing.\r\n */\r\n this._heartbeatsCache = null;\r\n const app = this.container.getProvider('app').getImmediate();\r\n this._storage = new HeartbeatStorageImpl(app);\r\n this._heartbeatsCachePromise = this._storage.read().then(result => {\r\n this._heartbeatsCache = result;\r\n return result;\r\n });\r\n }\r\n /**\r\n * Called to report a heartbeat. The function will generate\r\n * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it\r\n * to IndexedDB.\r\n * Note that we only store one heartbeat per day. So if a heartbeat for today is\r\n * already logged, subsequent calls to this function in the same day will be ignored.\r\n */\r\n async triggerHeartbeat() {\r\n var _a, _b;\r\n try {\r\n const platformLogger = this.container\r\n .getProvider('platform-logger')\r\n .getImmediate();\r\n // This is the \"Firebase user agent\" string from the platform logger\r\n // service, not the browser user agent.\r\n const agent = platformLogger.getPlatformInfoString();\r\n const date = getUTCDateString();\r\n if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null) {\r\n this._heartbeatsCache = await this._heartbeatsCachePromise;\r\n // If we failed to construct a heartbeats cache, then return immediately.\r\n if (((_b = this._heartbeatsCache) === null || _b === void 0 ? void 0 : _b.heartbeats) == null) {\r\n return;\r\n }\r\n }\r\n // Do not store a heartbeat if one is already stored for this day\r\n // or if a header has already been sent today.\r\n if (this._heartbeatsCache.lastSentHeartbeatDate === date ||\r\n this._heartbeatsCache.heartbeats.some(singleDateHeartbeat => singleDateHeartbeat.date === date)) {\r\n return;\r\n }\r\n else {\r\n // There is no entry for this date. Create one.\r\n this._heartbeatsCache.heartbeats.push({ date, agent });\r\n }\r\n // Remove entries older than 30 days.\r\n this._heartbeatsCache.heartbeats =\r\n this._heartbeatsCache.heartbeats.filter(singleDateHeartbeat => {\r\n const hbTimestamp = new Date(singleDateHeartbeat.date).valueOf();\r\n const now = Date.now();\r\n return now - hbTimestamp <= STORED_HEARTBEAT_RETENTION_MAX_MILLIS;\r\n });\r\n return this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n catch (e) {\r\n logger.warn(e);\r\n }\r\n }\r\n /**\r\n * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly.\r\n * It also clears all heartbeats from memory as well as in IndexedDB.\r\n *\r\n * NOTE: Consuming product SDKs should not send the header if this method\r\n * returns an empty string.\r\n */\r\n async getHeartbeatsHeader() {\r\n var _a;\r\n try {\r\n if (this._heartbeatsCache === null) {\r\n await this._heartbeatsCachePromise;\r\n }\r\n // If it's still null or the array is empty, there is no data to send.\r\n if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null ||\r\n this._heartbeatsCache.heartbeats.length === 0) {\r\n return '';\r\n }\r\n const date = getUTCDateString();\r\n // Extract as many heartbeats from the cache as will fit under the size limit.\r\n const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(this._heartbeatsCache.heartbeats);\r\n const headerString = base64urlEncodeWithoutPadding(JSON.stringify({ version: 2, heartbeats: heartbeatsToSend }));\r\n // Store last sent date to prevent another being logged/sent for the same day.\r\n this._heartbeatsCache.lastSentHeartbeatDate = date;\r\n if (unsentEntries.length > 0) {\r\n // Store any unsent entries if they exist.\r\n this._heartbeatsCache.heartbeats = unsentEntries;\r\n // This seems more likely than emptying the array (below) to lead to some odd state\r\n // since the cache isn't empty and this will be called again on the next request,\r\n // and is probably safest if we await it.\r\n await this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n else {\r\n this._heartbeatsCache.heartbeats = [];\r\n // Do not wait for this, to reduce latency.\r\n void this._storage.overwrite(this._heartbeatsCache);\r\n }\r\n return headerString;\r\n }\r\n catch (e) {\r\n logger.warn(e);\r\n return '';\r\n }\r\n }\r\n}\r\nfunction getUTCDateString() {\r\n const today = new Date();\r\n // Returns date format 'YYYY-MM-DD'\r\n return today.toISOString().substring(0, 10);\r\n}\r\nfunction extractHeartbeatsForHeader(heartbeatsCache, maxSize = MAX_HEADER_BYTES) {\r\n // Heartbeats grouped by user agent in the standard format to be sent in\r\n // the header.\r\n const heartbeatsToSend = [];\r\n // Single date format heartbeats that are not sent.\r\n let unsentEntries = heartbeatsCache.slice();\r\n for (const singleDateHeartbeat of heartbeatsCache) {\r\n // Look for an existing entry with the same user agent.\r\n const heartbeatEntry = heartbeatsToSend.find(hb => hb.agent === singleDateHeartbeat.agent);\r\n if (!heartbeatEntry) {\r\n // If no entry for this user agent exists, create one.\r\n heartbeatsToSend.push({\r\n agent: singleDateHeartbeat.agent,\r\n dates: [singleDateHeartbeat.date]\r\n });\r\n if (countBytes(heartbeatsToSend) > maxSize) {\r\n // If the header would exceed max size, remove the added heartbeat\r\n // entry and stop adding to the header.\r\n heartbeatsToSend.pop();\r\n break;\r\n }\r\n }\r\n else {\r\n heartbeatEntry.dates.push(singleDateHeartbeat.date);\r\n // If the header would exceed max size, remove the added date\r\n // and stop adding to the header.\r\n if (countBytes(heartbeatsToSend) > maxSize) {\r\n heartbeatEntry.dates.pop();\r\n break;\r\n }\r\n }\r\n // Pop unsent entry from queue. (Skipped if adding the entry exceeded\r\n // quota and the loop breaks early.)\r\n unsentEntries = unsentEntries.slice(1);\r\n }\r\n return {\r\n heartbeatsToSend,\r\n unsentEntries\r\n };\r\n}\r\nclass HeartbeatStorageImpl {\r\n constructor(app) {\r\n this.app = app;\r\n this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck();\r\n }\r\n async runIndexedDBEnvironmentCheck() {\r\n if (!isIndexedDBAvailable()) {\r\n return false;\r\n }\r\n else {\r\n return validateIndexedDBOpenable()\r\n .then(() => true)\r\n .catch(() => false);\r\n }\r\n }\r\n /**\r\n * Read all heartbeats.\r\n */\r\n async read() {\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return { heartbeats: [] };\r\n }\r\n else {\r\n const idbHeartbeatObject = await readHeartbeatsFromIndexedDB(this.app);\r\n if (idbHeartbeatObject === null || idbHeartbeatObject === void 0 ? void 0 : idbHeartbeatObject.heartbeats) {\r\n return idbHeartbeatObject;\r\n }\r\n else {\r\n return { heartbeats: [] };\r\n }\r\n }\r\n }\r\n // overwrite the storage with the provided heartbeats\r\n async overwrite(heartbeatsObject) {\r\n var _a;\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return;\r\n }\r\n else {\r\n const existingHeartbeatsObject = await this.read();\r\n return writeHeartbeatsToIndexedDB(this.app, {\r\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n heartbeats: heartbeatsObject.heartbeats\r\n });\r\n }\r\n }\r\n // add heartbeats\r\n async add(heartbeatsObject) {\r\n var _a;\r\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\r\n if (!canUseIndexedDB) {\r\n return;\r\n }\r\n else {\r\n const existingHeartbeatsObject = await this.read();\r\n return writeHeartbeatsToIndexedDB(this.app, {\r\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\r\n heartbeats: [\r\n ...existingHeartbeatsObject.heartbeats,\r\n ...heartbeatsObject.heartbeats\r\n ]\r\n });\r\n }\r\n }\r\n}\r\n/**\r\n * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped\r\n * in a platform logging header JSON object, stringified, and converted\r\n * to base 64.\r\n */\r\nfunction countBytes(heartbeatsCache) {\r\n // base64 has a restricted set of characters, all of which should be 1 byte.\r\n return base64urlEncodeWithoutPadding(\r\n // heartbeatsCache wrapper properties\r\n JSON.stringify({ version: 2, heartbeats: heartbeatsCache })).length;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerCoreComponents(variant) {\r\n _registerComponent(new Component('platform-logger', container => new PlatformLoggerServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n _registerComponent(new Component('heartbeat', container => new HeartbeatServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n // Register `app` package.\r\n registerVersion(name$q, version$1, variant);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name$q, version$1, 'esm2017');\r\n // Register platform SDK identifier (no version).\r\n registerVersion('fire-js', '');\r\n}\n\n/**\r\n * Firebase App\r\n *\r\n * @remarks This package coordinates the communication between the different Firebase components\r\n * @packageDocumentation\r\n */\r\nregisterCoreComponents('');\n\nexport { SDK_VERSION, DEFAULT_ENTRY_NAME as _DEFAULT_ENTRY_NAME, _addComponent, _addOrOverwriteComponent, _apps, _clearComponents, _components, _getProvider, _isFirebaseApp, _isFirebaseServerApp, _registerComponent, _removeServiceInstance, _serverApps, deleteApp, getApp, getApps, initializeApp, initializeServerApp, onLog, registerVersion, setLogLevel };\n//# sourceMappingURL=index.esm2017.js.map\n","import { registerVersion } from '@firebase/app';\nexport * from '@firebase/app';\n\nvar name = \"firebase\";\nvar version = \"10.14.1\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nregisterVersion(name, version, 'app');\n//# sourceMappingURL=index.esm.js.map\n","import { _getProvider, getApp, _registerComponent, registerVersion } from '@firebase/app';\nimport { Component } from '@firebase/component';\nimport { ErrorFactory, FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\nconst name = \"@firebase/installations\";\nconst version = \"0.6.9\";\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst PENDING_TIMEOUT_MS = 10000;\r\nconst PACKAGE_VERSION = `w:${version}`;\r\nconst INTERNAL_AUTH_VERSION = 'FIS_v2';\r\nconst INSTALLATIONS_API_URL = 'https://firebaseinstallations.googleapis.com/v1';\r\nconst TOKEN_EXPIRATION_BUFFER = 60 * 60 * 1000; // One hour\r\nconst SERVICE = 'installations';\r\nconst SERVICE_NAME = 'Installations';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERROR_DESCRIPTION_MAP = {\r\n [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\r\n [\"not-registered\" /* ErrorCode.NOT_REGISTERED */]: 'Firebase Installation is not registered.',\r\n [\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */]: 'Firebase Installation not found.',\r\n [\"request-failed\" /* ErrorCode.REQUEST_FAILED */]: '{$requestName} request failed with error \"{$serverCode} {$serverStatus}: {$serverMessage}\"',\r\n [\"app-offline\" /* ErrorCode.APP_OFFLINE */]: 'Could not process request. Application offline.',\r\n [\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */]: \"Can't delete installation while there is a pending registration request.\"\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory(SERVICE, SERVICE_NAME, ERROR_DESCRIPTION_MAP);\r\n/** Returns true if error is a FirebaseError that is based on an error from the server. */\r\nfunction isServerError(error) {\r\n return (error instanceof FirebaseError &&\r\n error.code.includes(\"request-failed\" /* ErrorCode.REQUEST_FAILED */));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction getInstallationsEndpoint({ projectId }) {\r\n return `${INSTALLATIONS_API_URL}/projects/${projectId}/installations`;\r\n}\r\nfunction extractAuthTokenInfoFromResponse(response) {\r\n return {\r\n token: response.token,\r\n requestStatus: 2 /* RequestStatus.COMPLETED */,\r\n expiresIn: getExpiresInFromResponseExpiresIn(response.expiresIn),\r\n creationTime: Date.now()\r\n };\r\n}\r\nasync function getErrorFromResponse(requestName, response) {\r\n const responseJson = await response.json();\r\n const errorData = responseJson.error;\r\n return ERROR_FACTORY.create(\"request-failed\" /* ErrorCode.REQUEST_FAILED */, {\r\n requestName,\r\n serverCode: errorData.code,\r\n serverMessage: errorData.message,\r\n serverStatus: errorData.status\r\n });\r\n}\r\nfunction getHeaders({ apiKey }) {\r\n return new Headers({\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n 'x-goog-api-key': apiKey\r\n });\r\n}\r\nfunction getHeadersWithAuth(appConfig, { refreshToken }) {\r\n const headers = getHeaders(appConfig);\r\n headers.append('Authorization', getAuthorizationHeader(refreshToken));\r\n return headers;\r\n}\r\n/**\r\n * Calls the passed in fetch wrapper and returns the response.\r\n * If the returned response has a status of 5xx, re-runs the function once and\r\n * returns the response.\r\n */\r\nasync function retryIfServerError(fn) {\r\n const result = await fn();\r\n if (result.status >= 500 && result.status < 600) {\r\n // Internal Server Error. Retry request.\r\n return fn();\r\n }\r\n return result;\r\n}\r\nfunction getExpiresInFromResponseExpiresIn(responseExpiresIn) {\r\n // This works because the server will never respond with fractions of a second.\r\n return Number(responseExpiresIn.replace('s', '000'));\r\n}\r\nfunction getAuthorizationHeader(refreshToken) {\r\n return `${INTERNAL_AUTH_VERSION} ${refreshToken}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function createInstallationRequest({ appConfig, heartbeatServiceProvider }, { fid }) {\r\n const endpoint = getInstallationsEndpoint(appConfig);\r\n const headers = getHeaders(appConfig);\r\n // If heartbeat service exists, add the heartbeat string to the header.\r\n const heartbeatService = heartbeatServiceProvider.getImmediate({\r\n optional: true\r\n });\r\n if (heartbeatService) {\r\n const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\r\n if (heartbeatsHeader) {\r\n headers.append('x-firebase-client', heartbeatsHeader);\r\n }\r\n }\r\n const body = {\r\n fid,\r\n authVersion: INTERNAL_AUTH_VERSION,\r\n appId: appConfig.appId,\r\n sdkVersion: PACKAGE_VERSION\r\n };\r\n const request = {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(body)\r\n };\r\n const response = await retryIfServerError(() => fetch(endpoint, request));\r\n if (response.ok) {\r\n const responseValue = await response.json();\r\n const registeredInstallationEntry = {\r\n fid: responseValue.fid || fid,\r\n registrationStatus: 2 /* RequestStatus.COMPLETED */,\r\n refreshToken: responseValue.refreshToken,\r\n authToken: extractAuthTokenInfoFromResponse(responseValue.authToken)\r\n };\r\n return registeredInstallationEntry;\r\n }\r\n else {\r\n throw await getErrorFromResponse('Create Installation', response);\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Returns a promise that resolves after given time passes. */\r\nfunction sleep(ms) {\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms);\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction bufferToBase64UrlSafe(array) {\r\n const b64 = btoa(String.fromCharCode(...array));\r\n return b64.replace(/\\+/g, '-').replace(/\\//g, '_');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst VALID_FID_PATTERN = /^[cdef][\\w-]{21}$/;\r\nconst INVALID_FID = '';\r\n/**\r\n * Generates a new FID using random values from Web Crypto API.\r\n * Returns an empty string if FID generation fails for any reason.\r\n */\r\nfunction generateFid() {\r\n try {\r\n // A valid FID has exactly 22 base64 characters, which is 132 bits, or 16.5\r\n // bytes. our implementation generates a 17 byte array instead.\r\n const fidByteArray = new Uint8Array(17);\r\n const crypto = self.crypto || self.msCrypto;\r\n crypto.getRandomValues(fidByteArray);\r\n // Replace the first 4 random bits with the constant FID header of 0b0111.\r\n fidByteArray[0] = 0b01110000 + (fidByteArray[0] % 0b00010000);\r\n const fid = encode(fidByteArray);\r\n return VALID_FID_PATTERN.test(fid) ? fid : INVALID_FID;\r\n }\r\n catch (_a) {\r\n // FID generation errored\r\n return INVALID_FID;\r\n }\r\n}\r\n/** Converts a FID Uint8Array to a base64 string representation. */\r\nfunction encode(fidByteArray) {\r\n const b64String = bufferToBase64UrlSafe(fidByteArray);\r\n // Remove the 23rd character that was added because of the extra 4 bits at the\r\n // end of our 17 byte array, and the '=' padding.\r\n return b64String.substr(0, 22);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** Returns a string key that can be used to identify the app. */\r\nfunction getKey(appConfig) {\r\n return `${appConfig.appName}!${appConfig.appId}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst fidChangeCallbacks = new Map();\r\n/**\r\n * Calls the onIdChange callbacks with the new FID value, and broadcasts the\r\n * change to other tabs.\r\n */\r\nfunction fidChanged(appConfig, fid) {\r\n const key = getKey(appConfig);\r\n callFidChangeCallbacks(key, fid);\r\n broadcastFidChange(key, fid);\r\n}\r\nfunction addCallback(appConfig, callback) {\r\n // Open the broadcast channel if it's not already open,\r\n // to be able to listen to change events from other tabs.\r\n getBroadcastChannel();\r\n const key = getKey(appConfig);\r\n let callbackSet = fidChangeCallbacks.get(key);\r\n if (!callbackSet) {\r\n callbackSet = new Set();\r\n fidChangeCallbacks.set(key, callbackSet);\r\n }\r\n callbackSet.add(callback);\r\n}\r\nfunction removeCallback(appConfig, callback) {\r\n const key = getKey(appConfig);\r\n const callbackSet = fidChangeCallbacks.get(key);\r\n if (!callbackSet) {\r\n return;\r\n }\r\n callbackSet.delete(callback);\r\n if (callbackSet.size === 0) {\r\n fidChangeCallbacks.delete(key);\r\n }\r\n // Close broadcast channel if there are no more callbacks.\r\n closeBroadcastChannel();\r\n}\r\nfunction callFidChangeCallbacks(key, fid) {\r\n const callbacks = fidChangeCallbacks.get(key);\r\n if (!callbacks) {\r\n return;\r\n }\r\n for (const callback of callbacks) {\r\n callback(fid);\r\n }\r\n}\r\nfunction broadcastFidChange(key, fid) {\r\n const channel = getBroadcastChannel();\r\n if (channel) {\r\n channel.postMessage({ key, fid });\r\n }\r\n closeBroadcastChannel();\r\n}\r\nlet broadcastChannel = null;\r\n/** Opens and returns a BroadcastChannel if it is supported by the browser. */\r\nfunction getBroadcastChannel() {\r\n if (!broadcastChannel && 'BroadcastChannel' in self) {\r\n broadcastChannel = new BroadcastChannel('[Firebase] FID Change');\r\n broadcastChannel.onmessage = e => {\r\n callFidChangeCallbacks(e.data.key, e.data.fid);\r\n };\r\n }\r\n return broadcastChannel;\r\n}\r\nfunction closeBroadcastChannel() {\r\n if (fidChangeCallbacks.size === 0 && broadcastChannel) {\r\n broadcastChannel.close();\r\n broadcastChannel = null;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DATABASE_NAME = 'firebase-installations-database';\r\nconst DATABASE_VERSION = 1;\r\nconst OBJECT_STORE_NAME = 'firebase-installations-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\r\n upgrade: (db, oldVersion) => {\r\n // We don't use 'break' in this switch statement, the fall-through\r\n // behavior is what we want, because if there are multiple versions between\r\n // the old version and the current version, we want ALL the migrations\r\n // that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (oldVersion) {\r\n case 0:\r\n db.createObjectStore(OBJECT_STORE_NAME);\r\n }\r\n }\r\n });\r\n }\r\n return dbPromise;\r\n}\r\n/** Assigns or overwrites the record for the given key with the given value. */\r\nasync function set(appConfig, value) {\r\n const key = getKey(appConfig);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n const objectStore = tx.objectStore(OBJECT_STORE_NAME);\r\n const oldValue = (await objectStore.get(key));\r\n await objectStore.put(value, key);\r\n await tx.done;\r\n if (!oldValue || oldValue.fid !== value.fid) {\r\n fidChanged(appConfig, value.fid);\r\n }\r\n return value;\r\n}\r\n/** Removes record(s) from the objectStore that match the given key. */\r\nasync function remove(appConfig) {\r\n const key = getKey(appConfig);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n await tx.objectStore(OBJECT_STORE_NAME).delete(key);\r\n await tx.done;\r\n}\r\n/**\r\n * Atomically updates a record with the result of updateFn, which gets\r\n * called with the current value. If newValue is undefined, the record is\r\n * deleted instead.\r\n * @return Updated value\r\n */\r\nasync function update(appConfig, updateFn) {\r\n const key = getKey(appConfig);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n const store = tx.objectStore(OBJECT_STORE_NAME);\r\n const oldValue = (await store.get(key));\r\n const newValue = updateFn(oldValue);\r\n if (newValue === undefined) {\r\n await store.delete(key);\r\n }\r\n else {\r\n await store.put(newValue, key);\r\n }\r\n await tx.done;\r\n if (newValue && (!oldValue || oldValue.fid !== newValue.fid)) {\r\n fidChanged(appConfig, newValue.fid);\r\n }\r\n return newValue;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Updates and returns the InstallationEntry from the database.\r\n * Also triggers a registration request if it is necessary and possible.\r\n */\r\nasync function getInstallationEntry(installations) {\r\n let registrationPromise;\r\n const installationEntry = await update(installations.appConfig, oldEntry => {\r\n const installationEntry = updateOrCreateInstallationEntry(oldEntry);\r\n const entryWithPromise = triggerRegistrationIfNecessary(installations, installationEntry);\r\n registrationPromise = entryWithPromise.registrationPromise;\r\n return entryWithPromise.installationEntry;\r\n });\r\n if (installationEntry.fid === INVALID_FID) {\r\n // FID generation failed. Waiting for the FID from the server.\r\n return { installationEntry: await registrationPromise };\r\n }\r\n return {\r\n installationEntry,\r\n registrationPromise\r\n };\r\n}\r\n/**\r\n * Creates a new Installation Entry if one does not exist.\r\n * Also clears timed out pending requests.\r\n */\r\nfunction updateOrCreateInstallationEntry(oldEntry) {\r\n const entry = oldEntry || {\r\n fid: generateFid(),\r\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\r\n };\r\n return clearTimedOutRequest(entry);\r\n}\r\n/**\r\n * If the Firebase Installation is not registered yet, this will trigger the\r\n * registration and return an InProgressInstallationEntry.\r\n *\r\n * If registrationPromise does not exist, the installationEntry is guaranteed\r\n * to be registered.\r\n */\r\nfunction triggerRegistrationIfNecessary(installations, installationEntry) {\r\n if (installationEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\r\n if (!navigator.onLine) {\r\n // Registration required but app is offline.\r\n const registrationPromiseWithError = Promise.reject(ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */));\r\n return {\r\n installationEntry,\r\n registrationPromise: registrationPromiseWithError\r\n };\r\n }\r\n // Try registering. Change status to IN_PROGRESS.\r\n const inProgressEntry = {\r\n fid: installationEntry.fid,\r\n registrationStatus: 1 /* RequestStatus.IN_PROGRESS */,\r\n registrationTime: Date.now()\r\n };\r\n const registrationPromise = registerInstallation(installations, inProgressEntry);\r\n return { installationEntry: inProgressEntry, registrationPromise };\r\n }\r\n else if (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n return {\r\n installationEntry,\r\n registrationPromise: waitUntilFidRegistration(installations)\r\n };\r\n }\r\n else {\r\n return { installationEntry };\r\n }\r\n}\r\n/** This will be executed only once for each new Firebase Installation. */\r\nasync function registerInstallation(installations, installationEntry) {\r\n try {\r\n const registeredInstallationEntry = await createInstallationRequest(installations, installationEntry);\r\n return set(installations.appConfig, registeredInstallationEntry);\r\n }\r\n catch (e) {\r\n if (isServerError(e) && e.customData.serverCode === 409) {\r\n // Server returned a \"FID cannot be used\" error.\r\n // Generate a new ID next time.\r\n await remove(installations.appConfig);\r\n }\r\n else {\r\n // Registration failed. Set FID as not registered.\r\n await set(installations.appConfig, {\r\n fid: installationEntry.fid,\r\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\r\n });\r\n }\r\n throw e;\r\n }\r\n}\r\n/** Call if FID registration is pending in another request. */\r\nasync function waitUntilFidRegistration(installations) {\r\n // Unfortunately, there is no way of reliably observing when a value in\r\n // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\r\n // so we need to poll.\r\n let entry = await updateInstallationRequest(installations.appConfig);\r\n while (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n // createInstallation request still in progress.\r\n await sleep(100);\r\n entry = await updateInstallationRequest(installations.appConfig);\r\n }\r\n if (entry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\r\n // The request timed out or failed in a different call. Try again.\r\n const { installationEntry, registrationPromise } = await getInstallationEntry(installations);\r\n if (registrationPromise) {\r\n return registrationPromise;\r\n }\r\n else {\r\n // if there is no registrationPromise, entry is registered.\r\n return installationEntry;\r\n }\r\n }\r\n return entry;\r\n}\r\n/**\r\n * Called only if there is a CreateInstallation request in progress.\r\n *\r\n * Updates the InstallationEntry in the DB based on the status of the\r\n * CreateInstallation request.\r\n *\r\n * Returns the updated InstallationEntry.\r\n */\r\nfunction updateInstallationRequest(appConfig) {\r\n return update(appConfig, oldEntry => {\r\n if (!oldEntry) {\r\n throw ERROR_FACTORY.create(\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */);\r\n }\r\n return clearTimedOutRequest(oldEntry);\r\n });\r\n}\r\nfunction clearTimedOutRequest(entry) {\r\n if (hasInstallationRequestTimedOut(entry)) {\r\n return {\r\n fid: entry.fid,\r\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\r\n };\r\n }\r\n return entry;\r\n}\r\nfunction hasInstallationRequestTimedOut(installationEntry) {\r\n return (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\r\n installationEntry.registrationTime + PENDING_TIMEOUT_MS < Date.now());\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function generateAuthTokenRequest({ appConfig, heartbeatServiceProvider }, installationEntry) {\r\n const endpoint = getGenerateAuthTokenEndpoint(appConfig, installationEntry);\r\n const headers = getHeadersWithAuth(appConfig, installationEntry);\r\n // If heartbeat service exists, add the heartbeat string to the header.\r\n const heartbeatService = heartbeatServiceProvider.getImmediate({\r\n optional: true\r\n });\r\n if (heartbeatService) {\r\n const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\r\n if (heartbeatsHeader) {\r\n headers.append('x-firebase-client', heartbeatsHeader);\r\n }\r\n }\r\n const body = {\r\n installation: {\r\n sdkVersion: PACKAGE_VERSION,\r\n appId: appConfig.appId\r\n }\r\n };\r\n const request = {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(body)\r\n };\r\n const response = await retryIfServerError(() => fetch(endpoint, request));\r\n if (response.ok) {\r\n const responseValue = await response.json();\r\n const completedAuthToken = extractAuthTokenInfoFromResponse(responseValue);\r\n return completedAuthToken;\r\n }\r\n else {\r\n throw await getErrorFromResponse('Generate Auth Token', response);\r\n }\r\n}\r\nfunction getGenerateAuthTokenEndpoint(appConfig, { fid }) {\r\n return `${getInstallationsEndpoint(appConfig)}/${fid}/authTokens:generate`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a valid authentication token for the installation. Generates a new\r\n * token if one doesn't exist, is expired or about to expire.\r\n *\r\n * Should only be called if the Firebase Installation is registered.\r\n */\r\nasync function refreshAuthToken(installations, forceRefresh = false) {\r\n let tokenPromise;\r\n const entry = await update(installations.appConfig, oldEntry => {\r\n if (!isEntryRegistered(oldEntry)) {\r\n throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\r\n }\r\n const oldAuthToken = oldEntry.authToken;\r\n if (!forceRefresh && isAuthTokenValid(oldAuthToken)) {\r\n // There is a valid token in the DB.\r\n return oldEntry;\r\n }\r\n else if (oldAuthToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n // There already is a token request in progress.\r\n tokenPromise = waitUntilAuthTokenRequest(installations, forceRefresh);\r\n return oldEntry;\r\n }\r\n else {\r\n // No token or token expired.\r\n if (!navigator.onLine) {\r\n throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\r\n }\r\n const inProgressEntry = makeAuthTokenRequestInProgressEntry(oldEntry);\r\n tokenPromise = fetchAuthTokenFromServer(installations, inProgressEntry);\r\n return inProgressEntry;\r\n }\r\n });\r\n const authToken = tokenPromise\r\n ? await tokenPromise\r\n : entry.authToken;\r\n return authToken;\r\n}\r\n/**\r\n * Call only if FID is registered and Auth Token request is in progress.\r\n *\r\n * Waits until the current pending request finishes. If the request times out,\r\n * tries once in this thread as well.\r\n */\r\nasync function waitUntilAuthTokenRequest(installations, forceRefresh) {\r\n // Unfortunately, there is no way of reliably observing when a value in\r\n // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\r\n // so we need to poll.\r\n let entry = await updateAuthTokenRequest(installations.appConfig);\r\n while (entry.authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n // generateAuthToken still in progress.\r\n await sleep(100);\r\n entry = await updateAuthTokenRequest(installations.appConfig);\r\n }\r\n const authToken = entry.authToken;\r\n if (authToken.requestStatus === 0 /* RequestStatus.NOT_STARTED */) {\r\n // The request timed out or failed in a different call. Try again.\r\n return refreshAuthToken(installations, forceRefresh);\r\n }\r\n else {\r\n return authToken;\r\n }\r\n}\r\n/**\r\n * Called only if there is a GenerateAuthToken request in progress.\r\n *\r\n * Updates the InstallationEntry in the DB based on the status of the\r\n * GenerateAuthToken request.\r\n *\r\n * Returns the updated InstallationEntry.\r\n */\r\nfunction updateAuthTokenRequest(appConfig) {\r\n return update(appConfig, oldEntry => {\r\n if (!isEntryRegistered(oldEntry)) {\r\n throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\r\n }\r\n const oldAuthToken = oldEntry.authToken;\r\n if (hasAuthTokenRequestTimedOut(oldAuthToken)) {\r\n return Object.assign(Object.assign({}, oldEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\r\n }\r\n return oldEntry;\r\n });\r\n}\r\nasync function fetchAuthTokenFromServer(installations, installationEntry) {\r\n try {\r\n const authToken = await generateAuthTokenRequest(installations, installationEntry);\r\n const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken });\r\n await set(installations.appConfig, updatedInstallationEntry);\r\n return authToken;\r\n }\r\n catch (e) {\r\n if (isServerError(e) &&\r\n (e.customData.serverCode === 401 || e.customData.serverCode === 404)) {\r\n // Server returned a \"FID not found\" or a \"Invalid authentication\" error.\r\n // Generate a new ID next time.\r\n await remove(installations.appConfig);\r\n }\r\n else {\r\n const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\r\n await set(installations.appConfig, updatedInstallationEntry);\r\n }\r\n throw e;\r\n }\r\n}\r\nfunction isEntryRegistered(installationEntry) {\r\n return (installationEntry !== undefined &&\r\n installationEntry.registrationStatus === 2 /* RequestStatus.COMPLETED */);\r\n}\r\nfunction isAuthTokenValid(authToken) {\r\n return (authToken.requestStatus === 2 /* RequestStatus.COMPLETED */ &&\r\n !isAuthTokenExpired(authToken));\r\n}\r\nfunction isAuthTokenExpired(authToken) {\r\n const now = Date.now();\r\n return (now < authToken.creationTime ||\r\n authToken.creationTime + authToken.expiresIn < now + TOKEN_EXPIRATION_BUFFER);\r\n}\r\n/** Returns an updated InstallationEntry with an InProgressAuthToken. */\r\nfunction makeAuthTokenRequestInProgressEntry(oldEntry) {\r\n const inProgressAuthToken = {\r\n requestStatus: 1 /* RequestStatus.IN_PROGRESS */,\r\n requestTime: Date.now()\r\n };\r\n return Object.assign(Object.assign({}, oldEntry), { authToken: inProgressAuthToken });\r\n}\r\nfunction hasAuthTokenRequestTimedOut(authToken) {\r\n return (authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\r\n authToken.requestTime + PENDING_TIMEOUT_MS < Date.now());\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Creates a Firebase Installation if there isn't one for the app and\r\n * returns the Installation ID.\r\n * @param installations - The `Installations` instance.\r\n *\r\n * @public\r\n */\r\nasync function getId(installations) {\r\n const installationsImpl = installations;\r\n const { installationEntry, registrationPromise } = await getInstallationEntry(installationsImpl);\r\n if (registrationPromise) {\r\n registrationPromise.catch(console.error);\r\n }\r\n else {\r\n // If the installation is already registered, update the authentication\r\n // token if needed.\r\n refreshAuthToken(installationsImpl).catch(console.error);\r\n }\r\n return installationEntry.fid;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a Firebase Installations auth token, identifying the current\r\n * Firebase Installation.\r\n * @param installations - The `Installations` instance.\r\n * @param forceRefresh - Force refresh regardless of token expiration.\r\n *\r\n * @public\r\n */\r\nasync function getToken(installations, forceRefresh = false) {\r\n const installationsImpl = installations;\r\n await completeInstallationRegistration(installationsImpl);\r\n // At this point we either have a Registered Installation in the DB, or we've\r\n // already thrown an error.\r\n const authToken = await refreshAuthToken(installationsImpl, forceRefresh);\r\n return authToken.token;\r\n}\r\nasync function completeInstallationRegistration(installations) {\r\n const { registrationPromise } = await getInstallationEntry(installations);\r\n if (registrationPromise) {\r\n // A createInstallation request is in progress. Wait until it finishes.\r\n await registrationPromise;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function deleteInstallationRequest(appConfig, installationEntry) {\r\n const endpoint = getDeleteEndpoint(appConfig, installationEntry);\r\n const headers = getHeadersWithAuth(appConfig, installationEntry);\r\n const request = {\r\n method: 'DELETE',\r\n headers\r\n };\r\n const response = await retryIfServerError(() => fetch(endpoint, request));\r\n if (!response.ok) {\r\n throw await getErrorFromResponse('Delete Installation', response);\r\n }\r\n}\r\nfunction getDeleteEndpoint(appConfig, { fid }) {\r\n return `${getInstallationsEndpoint(appConfig)}/${fid}`;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Deletes the Firebase Installation and all associated data.\r\n * @param installations - The `Installations` instance.\r\n *\r\n * @public\r\n */\r\nasync function deleteInstallations(installations) {\r\n const { appConfig } = installations;\r\n const entry = await update(appConfig, oldEntry => {\r\n if (oldEntry && oldEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\r\n // Delete the unregistered entry without sending a deleteInstallation request.\r\n return undefined;\r\n }\r\n return oldEntry;\r\n });\r\n if (entry) {\r\n if (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\r\n // Can't delete while trying to register.\r\n throw ERROR_FACTORY.create(\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */);\r\n }\r\n else if (entry.registrationStatus === 2 /* RequestStatus.COMPLETED */) {\r\n if (!navigator.onLine) {\r\n throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\r\n }\r\n else {\r\n await deleteInstallationRequest(appConfig, entry);\r\n await remove(appConfig);\r\n }\r\n }\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Sets a new callback that will get called when Installation ID changes.\r\n * Returns an unsubscribe function that will remove the callback when called.\r\n * @param installations - The `Installations` instance.\r\n * @param callback - The callback function that is invoked when FID changes.\r\n * @returns A function that can be called to unsubscribe.\r\n *\r\n * @public\r\n */\r\nfunction onIdChange(installations, callback) {\r\n const { appConfig } = installations;\r\n addCallback(appConfig, callback);\r\n return () => {\r\n removeCallback(appConfig, callback);\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns an instance of {@link Installations} associated with the given\r\n * {@link @firebase/app#FirebaseApp} instance.\r\n * @param app - The {@link @firebase/app#FirebaseApp} instance.\r\n *\r\n * @public\r\n */\r\nfunction getInstallations(app = getApp()) {\r\n const installationsImpl = _getProvider(app, 'installations').getImmediate();\r\n return installationsImpl;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction extractAppConfig(app) {\r\n if (!app || !app.options) {\r\n throw getMissingValueError('App Configuration');\r\n }\r\n if (!app.name) {\r\n throw getMissingValueError('App Name');\r\n }\r\n // Required app config keys\r\n const configKeys = [\r\n 'projectId',\r\n 'apiKey',\r\n 'appId'\r\n ];\r\n for (const keyName of configKeys) {\r\n if (!app.options[keyName]) {\r\n throw getMissingValueError(keyName);\r\n }\r\n }\r\n return {\r\n appName: app.name,\r\n projectId: app.options.projectId,\r\n apiKey: app.options.apiKey,\r\n appId: app.options.appId\r\n };\r\n}\r\nfunction getMissingValueError(valueName) {\r\n return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\r\n valueName\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst INSTALLATIONS_NAME = 'installations';\r\nconst INSTALLATIONS_NAME_INTERNAL = 'installations-internal';\r\nconst publicFactory = (container) => {\r\n const app = container.getProvider('app').getImmediate();\r\n // Throws if app isn't configured properly.\r\n const appConfig = extractAppConfig(app);\r\n const heartbeatServiceProvider = _getProvider(app, 'heartbeat');\r\n const installationsImpl = {\r\n app,\r\n appConfig,\r\n heartbeatServiceProvider,\r\n _delete: () => Promise.resolve()\r\n };\r\n return installationsImpl;\r\n};\r\nconst internalFactory = (container) => {\r\n const app = container.getProvider('app').getImmediate();\r\n // Internal FIS instance relies on public FIS instance.\r\n const installations = _getProvider(app, INSTALLATIONS_NAME).getImmediate();\r\n const installationsInternal = {\r\n getId: () => getId(installations),\r\n getToken: (forceRefresh) => getToken(installations, forceRefresh)\r\n };\r\n return installationsInternal;\r\n};\r\nfunction registerInstallations() {\r\n _registerComponent(new Component(INSTALLATIONS_NAME, publicFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n _registerComponent(new Component(INSTALLATIONS_NAME_INTERNAL, internalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n}\n\n/**\r\n * The Firebase Installations Web SDK.\r\n * This SDK does not work in a Node.js environment.\r\n *\r\n * @packageDocumentation\r\n */\r\nregisterInstallations();\r\nregisterVersion(name, version);\r\n// BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\nregisterVersion(name, version, 'esm2017');\n\nexport { deleteInstallations, getId, getInstallations, getToken, onIdChange };\n//# sourceMappingURL=index.esm2017.js.map\n","import '@firebase/installations';\nimport { Component } from '@firebase/component';\nimport { openDB, deleteDB } from 'idb';\nimport { ErrorFactory, validateIndexedDBOpenable, isIndexedDBAvailable, areCookiesEnabled, getModularInstance } from '@firebase/util';\nimport { _registerComponent, registerVersion, _getProvider, getApp } from '@firebase/app';\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\r\nconst DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\r\nconst DEFAULT_VAPID_KEY = 'BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4';\r\nconst ENDPOINT = 'https://fcmregistrations.googleapis.com/v1';\r\nconst CONSOLE_CAMPAIGN_ID = 'google.c.a.c_id';\r\nconst CONSOLE_CAMPAIGN_NAME = 'google.c.a.c_l';\r\nconst CONSOLE_CAMPAIGN_TIME = 'google.c.a.ts';\r\n/** Set to '1' if Analytics is enabled for the campaign */\r\nconst CONSOLE_CAMPAIGN_ANALYTICS_ENABLED = 'google.c.a.e';\r\nvar MessageType$1;\r\n(function (MessageType) {\r\n MessageType[MessageType[\"DATA_MESSAGE\"] = 1] = \"DATA_MESSAGE\";\r\n MessageType[MessageType[\"DISPLAY_NOTIFICATION\"] = 3] = \"DISPLAY_NOTIFICATION\";\r\n})(MessageType$1 || (MessageType$1 = {}));\n\n/**\r\n * @license\r\n * Copyright 2018 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\r\n * in compliance with the License. You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software distributed under the License\r\n * is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\r\n * or implied. See the License for the specific language governing permissions and limitations under\r\n * the License.\r\n */\r\nvar MessageType;\r\n(function (MessageType) {\r\n MessageType[\"PUSH_RECEIVED\"] = \"push-received\";\r\n MessageType[\"NOTIFICATION_CLICKED\"] = \"notification-clicked\";\r\n})(MessageType || (MessageType = {}));\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction arrayToBase64(array) {\r\n const uint8Array = new Uint8Array(array);\r\n const base64String = btoa(String.fromCharCode(...uint8Array));\r\n return base64String.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\r\n}\r\nfunction base64ToArray(base64String) {\r\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\r\n const base64 = (base64String + padding)\r\n .replace(/\\-/g, '+')\r\n .replace(/_/g, '/');\r\n const rawData = atob(base64);\r\n const outputArray = new Uint8Array(rawData.length);\r\n for (let i = 0; i < rawData.length; ++i) {\r\n outputArray[i] = rawData.charCodeAt(i);\r\n }\r\n return outputArray;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst OLD_DB_NAME = 'fcm_token_details_db';\r\n/**\r\n * The last DB version of 'fcm_token_details_db' was 4. This is one higher, so that the upgrade\r\n * callback is called for all versions of the old DB.\r\n */\r\nconst OLD_DB_VERSION = 5;\r\nconst OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\r\nasync function migrateOldDatabase(senderId) {\r\n if ('databases' in indexedDB) {\r\n // indexedDb.databases() is an IndexedDB v3 API and does not exist in all browsers. TODO: Remove\r\n // typecast when it lands in TS types.\r\n const databases = await indexedDB.databases();\r\n const dbNames = databases.map(db => db.name);\r\n if (!dbNames.includes(OLD_DB_NAME)) {\r\n // old DB didn't exist, no need to open.\r\n return null;\r\n }\r\n }\r\n let tokenDetails = null;\r\n const db = await openDB(OLD_DB_NAME, OLD_DB_VERSION, {\r\n upgrade: async (db, oldVersion, newVersion, upgradeTransaction) => {\r\n var _a;\r\n if (oldVersion < 2) {\r\n // Database too old, skip migration.\r\n return;\r\n }\r\n if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\r\n // Database did not exist. Nothing to do.\r\n return;\r\n }\r\n const objectStore = upgradeTransaction.objectStore(OLD_OBJECT_STORE_NAME);\r\n const value = await objectStore.index('fcmSenderId').get(senderId);\r\n await objectStore.clear();\r\n if (!value) {\r\n // No entry in the database, nothing to migrate.\r\n return;\r\n }\r\n if (oldVersion === 2) {\r\n const oldDetails = value;\r\n if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) {\r\n return;\r\n }\r\n tokenDetails = {\r\n token: oldDetails.fcmToken,\r\n createTime: (_a = oldDetails.createTime) !== null && _a !== void 0 ? _a : Date.now(),\r\n subscriptionOptions: {\r\n auth: oldDetails.auth,\r\n p256dh: oldDetails.p256dh,\r\n endpoint: oldDetails.endpoint,\r\n swScope: oldDetails.swScope,\r\n vapidKey: typeof oldDetails.vapidKey === 'string'\r\n ? oldDetails.vapidKey\r\n : arrayToBase64(oldDetails.vapidKey)\r\n }\r\n };\r\n }\r\n else if (oldVersion === 3) {\r\n const oldDetails = value;\r\n tokenDetails = {\r\n token: oldDetails.fcmToken,\r\n createTime: oldDetails.createTime,\r\n subscriptionOptions: {\r\n auth: arrayToBase64(oldDetails.auth),\r\n p256dh: arrayToBase64(oldDetails.p256dh),\r\n endpoint: oldDetails.endpoint,\r\n swScope: oldDetails.swScope,\r\n vapidKey: arrayToBase64(oldDetails.vapidKey)\r\n }\r\n };\r\n }\r\n else if (oldVersion === 4) {\r\n const oldDetails = value;\r\n tokenDetails = {\r\n token: oldDetails.fcmToken,\r\n createTime: oldDetails.createTime,\r\n subscriptionOptions: {\r\n auth: arrayToBase64(oldDetails.auth),\r\n p256dh: arrayToBase64(oldDetails.p256dh),\r\n endpoint: oldDetails.endpoint,\r\n swScope: oldDetails.swScope,\r\n vapidKey: arrayToBase64(oldDetails.vapidKey)\r\n }\r\n };\r\n }\r\n }\r\n });\r\n db.close();\r\n // Delete all old databases.\r\n await deleteDB(OLD_DB_NAME);\r\n await deleteDB('fcm_vapid_details_db');\r\n await deleteDB('undefined');\r\n return checkTokenDetails(tokenDetails) ? tokenDetails : null;\r\n}\r\nfunction checkTokenDetails(tokenDetails) {\r\n if (!tokenDetails || !tokenDetails.subscriptionOptions) {\r\n return false;\r\n }\r\n const { subscriptionOptions } = tokenDetails;\r\n return (typeof tokenDetails.createTime === 'number' &&\r\n tokenDetails.createTime > 0 &&\r\n typeof tokenDetails.token === 'string' &&\r\n tokenDetails.token.length > 0 &&\r\n typeof subscriptionOptions.auth === 'string' &&\r\n subscriptionOptions.auth.length > 0 &&\r\n typeof subscriptionOptions.p256dh === 'string' &&\r\n subscriptionOptions.p256dh.length > 0 &&\r\n typeof subscriptionOptions.endpoint === 'string' &&\r\n subscriptionOptions.endpoint.length > 0 &&\r\n typeof subscriptionOptions.swScope === 'string' &&\r\n subscriptionOptions.swScope.length > 0 &&\r\n typeof subscriptionOptions.vapidKey === 'string' &&\r\n subscriptionOptions.vapidKey.length > 0);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Exported for tests.\r\nconst DATABASE_NAME = 'firebase-messaging-database';\r\nconst DATABASE_VERSION = 1;\r\nconst OBJECT_STORE_NAME = 'firebase-messaging-store';\r\nlet dbPromise = null;\r\nfunction getDbPromise() {\r\n if (!dbPromise) {\r\n dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\r\n upgrade: (upgradeDb, oldVersion) => {\r\n // We don't use 'break' in this switch statement, the fall-through behavior is what we want,\r\n // because if there are multiple versions between the old version and the current version, we\r\n // want ALL the migrations that correspond to those versions to run, not only the last one.\r\n // eslint-disable-next-line default-case\r\n switch (oldVersion) {\r\n case 0:\r\n upgradeDb.createObjectStore(OBJECT_STORE_NAME);\r\n }\r\n }\r\n });\r\n }\r\n return dbPromise;\r\n}\r\n/** Gets record(s) from the objectStore that match the given key. */\r\nasync function dbGet(firebaseDependencies) {\r\n const key = getKey(firebaseDependencies);\r\n const db = await getDbPromise();\r\n const tokenDetails = (await db\r\n .transaction(OBJECT_STORE_NAME)\r\n .objectStore(OBJECT_STORE_NAME)\r\n .get(key));\r\n if (tokenDetails) {\r\n return tokenDetails;\r\n }\r\n else {\r\n // Check if there is a tokenDetails object in the old DB.\r\n const oldTokenDetails = await migrateOldDatabase(firebaseDependencies.appConfig.senderId);\r\n if (oldTokenDetails) {\r\n await dbSet(firebaseDependencies, oldTokenDetails);\r\n return oldTokenDetails;\r\n }\r\n }\r\n}\r\n/** Assigns or overwrites the record for the given key with the given value. */\r\nasync function dbSet(firebaseDependencies, tokenDetails) {\r\n const key = getKey(firebaseDependencies);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n await tx.objectStore(OBJECT_STORE_NAME).put(tokenDetails, key);\r\n await tx.done;\r\n return tokenDetails;\r\n}\r\n/** Removes record(s) from the objectStore that match the given key. */\r\nasync function dbRemove(firebaseDependencies) {\r\n const key = getKey(firebaseDependencies);\r\n const db = await getDbPromise();\r\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\r\n await tx.objectStore(OBJECT_STORE_NAME).delete(key);\r\n await tx.done;\r\n}\r\nfunction getKey({ appConfig }) {\r\n return appConfig.appId;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst ERROR_MAP = {\r\n [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\r\n [\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */]: 'This method is available in a Window context.',\r\n [\"only-available-in-sw\" /* ErrorCode.AVAILABLE_IN_SW */]: 'This method is available in a service worker context.',\r\n [\"permission-default\" /* ErrorCode.PERMISSION_DEFAULT */]: 'The notification permission was not granted and dismissed instead.',\r\n [\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */]: 'The notification permission was not granted and blocked instead.',\r\n [\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */]: \"This browser doesn't support the API's required to use the Firebase SDK.\",\r\n [\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */]: \"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)\",\r\n [\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */]: 'We are unable to register the default service worker. {$browserErrorMessage}',\r\n [\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */]: 'A problem occurred while subscribing the user to FCM: {$errorInfo}',\r\n [\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */]: 'FCM returned no token when subscribing the user to push.',\r\n [\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */]: 'A problem occurred while unsubscribing the ' +\r\n 'user from FCM: {$errorInfo}',\r\n [\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */]: 'A problem occurred while updating the user from FCM: {$errorInfo}',\r\n [\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */]: 'FCM returned no token when updating the user to push.',\r\n [\"use-sw-after-get-token\" /* ErrorCode.USE_SW_AFTER_GET_TOKEN */]: 'The useServiceWorker() method may only be called once and must be ' +\r\n 'called before calling getToken() to ensure your service worker is used.',\r\n [\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */]: 'The input to useServiceWorker() must be a ServiceWorkerRegistration.',\r\n [\"invalid-bg-handler\" /* ErrorCode.INVALID_BG_HANDLER */]: 'The input to setBackgroundMessageHandler() must be a function.',\r\n [\"invalid-vapid-key\" /* ErrorCode.INVALID_VAPID_KEY */]: 'The public VAPID key must be a string.',\r\n [\"use-vapid-key-after-get-token\" /* ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN */]: 'The usePublicVapidKey() method may only be called once and must be ' +\r\n 'called before calling getToken() to ensure your VAPID key is used.'\r\n};\r\nconst ERROR_FACTORY = new ErrorFactory('messaging', 'Messaging', ERROR_MAP);\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function requestGetToken(firebaseDependencies, subscriptionOptions) {\r\n const headers = await getHeaders(firebaseDependencies);\r\n const body = getBody(subscriptionOptions);\r\n const subscribeOptions = {\r\n method: 'POST',\r\n headers,\r\n body: JSON.stringify(body)\r\n };\r\n let responseData;\r\n try {\r\n const response = await fetch(getEndpoint(firebaseDependencies.appConfig), subscribeOptions);\r\n responseData = await response.json();\r\n }\r\n catch (err) {\r\n throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\r\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\r\n });\r\n }\r\n if (responseData.error) {\r\n const message = responseData.error.message;\r\n throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\r\n errorInfo: message\r\n });\r\n }\r\n if (!responseData.token) {\r\n throw ERROR_FACTORY.create(\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */);\r\n }\r\n return responseData.token;\r\n}\r\nasync function requestUpdateToken(firebaseDependencies, tokenDetails) {\r\n const headers = await getHeaders(firebaseDependencies);\r\n const body = getBody(tokenDetails.subscriptionOptions);\r\n const updateOptions = {\r\n method: 'PATCH',\r\n headers,\r\n body: JSON.stringify(body)\r\n };\r\n let responseData;\r\n try {\r\n const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${tokenDetails.token}`, updateOptions);\r\n responseData = await response.json();\r\n }\r\n catch (err) {\r\n throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\r\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\r\n });\r\n }\r\n if (responseData.error) {\r\n const message = responseData.error.message;\r\n throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\r\n errorInfo: message\r\n });\r\n }\r\n if (!responseData.token) {\r\n throw ERROR_FACTORY.create(\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */);\r\n }\r\n return responseData.token;\r\n}\r\nasync function requestDeleteToken(firebaseDependencies, token) {\r\n const headers = await getHeaders(firebaseDependencies);\r\n const unsubscribeOptions = {\r\n method: 'DELETE',\r\n headers\r\n };\r\n try {\r\n const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${token}`, unsubscribeOptions);\r\n const responseData = await response.json();\r\n if (responseData.error) {\r\n const message = responseData.error.message;\r\n throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\r\n errorInfo: message\r\n });\r\n }\r\n }\r\n catch (err) {\r\n throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\r\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\r\n });\r\n }\r\n}\r\nfunction getEndpoint({ projectId }) {\r\n return `${ENDPOINT}/projects/${projectId}/registrations`;\r\n}\r\nasync function getHeaders({ appConfig, installations }) {\r\n const authToken = await installations.getToken();\r\n return new Headers({\r\n 'Content-Type': 'application/json',\r\n Accept: 'application/json',\r\n 'x-goog-api-key': appConfig.apiKey,\r\n 'x-goog-firebase-installations-auth': `FIS ${authToken}`\r\n });\r\n}\r\nfunction getBody({ p256dh, auth, endpoint, vapidKey }) {\r\n const body = {\r\n web: {\r\n endpoint,\r\n auth,\r\n p256dh\r\n }\r\n };\r\n if (vapidKey !== DEFAULT_VAPID_KEY) {\r\n body.web.applicationPubKey = vapidKey;\r\n }\r\n return body;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// UpdateRegistration will be called once every week.\r\nconst TOKEN_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\r\nasync function getTokenInternal(messaging) {\r\n const pushSubscription = await getPushSubscription(messaging.swRegistration, messaging.vapidKey);\r\n const subscriptionOptions = {\r\n vapidKey: messaging.vapidKey,\r\n swScope: messaging.swRegistration.scope,\r\n endpoint: pushSubscription.endpoint,\r\n auth: arrayToBase64(pushSubscription.getKey('auth')),\r\n p256dh: arrayToBase64(pushSubscription.getKey('p256dh'))\r\n };\r\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\r\n if (!tokenDetails) {\r\n // No token, get a new one.\r\n return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\r\n }\r\n else if (!isTokenValid(tokenDetails.subscriptionOptions, subscriptionOptions)) {\r\n // Invalid token, get a new one.\r\n try {\r\n await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\r\n }\r\n catch (e) {\r\n // Suppress errors because of #2364\r\n console.warn(e);\r\n }\r\n return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\r\n }\r\n else if (Date.now() >= tokenDetails.createTime + TOKEN_EXPIRATION_MS) {\r\n // Weekly token refresh\r\n return updateToken(messaging, {\r\n token: tokenDetails.token,\r\n createTime: Date.now(),\r\n subscriptionOptions\r\n });\r\n }\r\n else {\r\n // Valid token, nothing to do.\r\n return tokenDetails.token;\r\n }\r\n}\r\n/**\r\n * This method deletes the token from the database, unsubscribes the token from FCM, and unregisters\r\n * the push subscription if it exists.\r\n */\r\nasync function deleteTokenInternal(messaging) {\r\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\r\n if (tokenDetails) {\r\n await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\r\n await dbRemove(messaging.firebaseDependencies);\r\n }\r\n // Unsubscribe from the push subscription.\r\n const pushSubscription = await messaging.swRegistration.pushManager.getSubscription();\r\n if (pushSubscription) {\r\n return pushSubscription.unsubscribe();\r\n }\r\n // If there's no SW, consider it a success.\r\n return true;\r\n}\r\nasync function updateToken(messaging, tokenDetails) {\r\n try {\r\n const updatedToken = await requestUpdateToken(messaging.firebaseDependencies, tokenDetails);\r\n const updatedTokenDetails = Object.assign(Object.assign({}, tokenDetails), { token: updatedToken, createTime: Date.now() });\r\n await dbSet(messaging.firebaseDependencies, updatedTokenDetails);\r\n return updatedToken;\r\n }\r\n catch (e) {\r\n throw e;\r\n }\r\n}\r\nasync function getNewToken(firebaseDependencies, subscriptionOptions) {\r\n const token = await requestGetToken(firebaseDependencies, subscriptionOptions);\r\n const tokenDetails = {\r\n token,\r\n createTime: Date.now(),\r\n subscriptionOptions\r\n };\r\n await dbSet(firebaseDependencies, tokenDetails);\r\n return tokenDetails.token;\r\n}\r\n/**\r\n * Gets a PushSubscription for the current user.\r\n */\r\nasync function getPushSubscription(swRegistration, vapidKey) {\r\n const subscription = await swRegistration.pushManager.getSubscription();\r\n if (subscription) {\r\n return subscription;\r\n }\r\n return swRegistration.pushManager.subscribe({\r\n userVisibleOnly: true,\r\n // Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key\r\n // submitted to pushManager#subscribe must be of type Uint8Array.\r\n applicationServerKey: base64ToArray(vapidKey)\r\n });\r\n}\r\n/**\r\n * Checks if the saved tokenDetails object matches the configuration provided.\r\n */\r\nfunction isTokenValid(dbOptions, currentOptions) {\r\n const isVapidKeyEqual = currentOptions.vapidKey === dbOptions.vapidKey;\r\n const isEndpointEqual = currentOptions.endpoint === dbOptions.endpoint;\r\n const isAuthEqual = currentOptions.auth === dbOptions.auth;\r\n const isP256dhEqual = currentOptions.p256dh === dbOptions.p256dh;\r\n return isVapidKeyEqual && isEndpointEqual && isAuthEqual && isP256dhEqual;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction externalizePayload(internalPayload) {\r\n const payload = {\r\n from: internalPayload.from,\r\n // eslint-disable-next-line camelcase\r\n collapseKey: internalPayload.collapse_key,\r\n // eslint-disable-next-line camelcase\r\n messageId: internalPayload.fcmMessageId\r\n };\r\n propagateNotificationPayload(payload, internalPayload);\r\n propagateDataPayload(payload, internalPayload);\r\n propagateFcmOptions(payload, internalPayload);\r\n return payload;\r\n}\r\nfunction propagateNotificationPayload(payload, messagePayloadInternal) {\r\n if (!messagePayloadInternal.notification) {\r\n return;\r\n }\r\n payload.notification = {};\r\n const title = messagePayloadInternal.notification.title;\r\n if (!!title) {\r\n payload.notification.title = title;\r\n }\r\n const body = messagePayloadInternal.notification.body;\r\n if (!!body) {\r\n payload.notification.body = body;\r\n }\r\n const image = messagePayloadInternal.notification.image;\r\n if (!!image) {\r\n payload.notification.image = image;\r\n }\r\n const icon = messagePayloadInternal.notification.icon;\r\n if (!!icon) {\r\n payload.notification.icon = icon;\r\n }\r\n}\r\nfunction propagateDataPayload(payload, messagePayloadInternal) {\r\n if (!messagePayloadInternal.data) {\r\n return;\r\n }\r\n payload.data = messagePayloadInternal.data;\r\n}\r\nfunction propagateFcmOptions(payload, messagePayloadInternal) {\r\n var _a, _b, _c, _d, _e;\r\n // fcmOptions.link value is written into notification.click_action. see more in b/232072111\r\n if (!messagePayloadInternal.fcmOptions &&\r\n !((_a = messagePayloadInternal.notification) === null || _a === void 0 ? void 0 : _a.click_action)) {\r\n return;\r\n }\r\n payload.fcmOptions = {};\r\n const link = (_c = (_b = messagePayloadInternal.fcmOptions) === null || _b === void 0 ? void 0 : _b.link) !== null && _c !== void 0 ? _c : (_d = messagePayloadInternal.notification) === null || _d === void 0 ? void 0 : _d.click_action;\r\n if (!!link) {\r\n payload.fcmOptions.link = link;\r\n }\r\n // eslint-disable-next-line camelcase\r\n const analyticsLabel = (_e = messagePayloadInternal.fcmOptions) === null || _e === void 0 ? void 0 : _e.analytics_label;\r\n if (!!analyticsLabel) {\r\n payload.fcmOptions.analyticsLabel = analyticsLabel;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction isConsoleMessage(data) {\r\n // This message has a campaign ID, meaning it was sent using the Firebase Console.\r\n return typeof data === 'object' && !!data && CONSOLE_CAMPAIGN_ID in data;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n_mergeStrings('AzSCbw63g1R0nCw85jG8', 'Iaya3yLKwmgvh7cF0q4');\r\nfunction _mergeStrings(s1, s2) {\r\n const resultArray = [];\r\n for (let i = 0; i < s1.length; i++) {\r\n resultArray.push(s1.charAt(i));\r\n if (i < s2.length) {\r\n resultArray.push(s2.charAt(i));\r\n }\r\n }\r\n return resultArray.join('');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction extractAppConfig(app) {\r\n if (!app || !app.options) {\r\n throw getMissingValueError('App Configuration Object');\r\n }\r\n if (!app.name) {\r\n throw getMissingValueError('App Name');\r\n }\r\n // Required app config keys\r\n const configKeys = [\r\n 'projectId',\r\n 'apiKey',\r\n 'appId',\r\n 'messagingSenderId'\r\n ];\r\n const { options } = app;\r\n for (const keyName of configKeys) {\r\n if (!options[keyName]) {\r\n throw getMissingValueError(keyName);\r\n }\r\n }\r\n return {\r\n appName: app.name,\r\n projectId: options.projectId,\r\n apiKey: options.apiKey,\r\n appId: options.appId,\r\n senderId: options.messagingSenderId\r\n };\r\n}\r\nfunction getMissingValueError(valueName) {\r\n return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\r\n valueName\r\n });\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nclass MessagingService {\r\n constructor(app, installations, analyticsProvider) {\r\n // logging is only done with end user consent. Default to false.\r\n this.deliveryMetricsExportedToBigQueryEnabled = false;\r\n this.onBackgroundMessageHandler = null;\r\n this.onMessageHandler = null;\r\n this.logEvents = [];\r\n this.isLogServiceStarted = false;\r\n const appConfig = extractAppConfig(app);\r\n this.firebaseDependencies = {\r\n app,\r\n appConfig,\r\n installations,\r\n analyticsProvider\r\n };\r\n }\r\n _delete() {\r\n return Promise.resolve();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function registerDefaultSw(messaging) {\r\n try {\r\n messaging.swRegistration = await navigator.serviceWorker.register(DEFAULT_SW_PATH, {\r\n scope: DEFAULT_SW_SCOPE\r\n });\r\n // The timing when browser updates sw when sw has an update is unreliable from experiment. It\r\n // leads to version conflict when the SDK upgrades to a newer version in the main page, but sw\r\n // is stuck with the old version. For example,\r\n // https://github.com/firebase/firebase-js-sdk/issues/2590 The following line reliably updates\r\n // sw if there was an update.\r\n messaging.swRegistration.update().catch(() => {\r\n /* it is non blocking and we don't care if it failed */\r\n });\r\n }\r\n catch (e) {\r\n throw ERROR_FACTORY.create(\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */, {\r\n browserErrorMessage: e === null || e === void 0 ? void 0 : e.message\r\n });\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function updateSwReg(messaging, swRegistration) {\r\n if (!swRegistration && !messaging.swRegistration) {\r\n await registerDefaultSw(messaging);\r\n }\r\n if (!swRegistration && !!messaging.swRegistration) {\r\n return;\r\n }\r\n if (!(swRegistration instanceof ServiceWorkerRegistration)) {\r\n throw ERROR_FACTORY.create(\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */);\r\n }\r\n messaging.swRegistration = swRegistration;\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function updateVapidKey(messaging, vapidKey) {\r\n if (!!vapidKey) {\r\n messaging.vapidKey = vapidKey;\r\n }\r\n else if (!messaging.vapidKey) {\r\n messaging.vapidKey = DEFAULT_VAPID_KEY;\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function getToken$1(messaging, options) {\r\n if (!navigator) {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\r\n }\r\n if (Notification.permission === 'default') {\r\n await Notification.requestPermission();\r\n }\r\n if (Notification.permission !== 'granted') {\r\n throw ERROR_FACTORY.create(\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */);\r\n }\r\n await updateVapidKey(messaging, options === null || options === void 0 ? void 0 : options.vapidKey);\r\n await updateSwReg(messaging, options === null || options === void 0 ? void 0 : options.serviceWorkerRegistration);\r\n return getTokenInternal(messaging);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2019 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function logToScion(messaging, messageType, data) {\r\n const eventType = getEventType(messageType);\r\n const analytics = await messaging.firebaseDependencies.analyticsProvider.get();\r\n analytics.logEvent(eventType, {\r\n /* eslint-disable camelcase */\r\n message_id: data[CONSOLE_CAMPAIGN_ID],\r\n message_name: data[CONSOLE_CAMPAIGN_NAME],\r\n message_time: data[CONSOLE_CAMPAIGN_TIME],\r\n message_device_time: Math.floor(Date.now() / 1000)\r\n /* eslint-enable camelcase */\r\n });\r\n}\r\nfunction getEventType(messageType) {\r\n switch (messageType) {\r\n case MessageType.NOTIFICATION_CLICKED:\r\n return 'notification_open';\r\n case MessageType.PUSH_RECEIVED:\r\n return 'notification_foreground';\r\n default:\r\n throw new Error();\r\n }\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function messageEventListener(messaging, event) {\r\n const internalPayload = event.data;\r\n if (!internalPayload.isFirebaseMessaging) {\r\n return;\r\n }\r\n if (messaging.onMessageHandler &&\r\n internalPayload.messageType === MessageType.PUSH_RECEIVED) {\r\n if (typeof messaging.onMessageHandler === 'function') {\r\n messaging.onMessageHandler(externalizePayload(internalPayload));\r\n }\r\n else {\r\n messaging.onMessageHandler.next(externalizePayload(internalPayload));\r\n }\r\n }\r\n // Log to Scion if applicable\r\n const dataPayload = internalPayload.data;\r\n if (isConsoleMessage(dataPayload) &&\r\n dataPayload[CONSOLE_CAMPAIGN_ANALYTICS_ENABLED] === '1') {\r\n await logToScion(messaging, internalPayload.messageType, dataPayload);\r\n }\r\n}\n\nconst name = \"@firebase/messaging\";\nconst version = \"0.12.12\";\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nconst WindowMessagingFactory = (container) => {\r\n const messaging = new MessagingService(container.getProvider('app').getImmediate(), container.getProvider('installations-internal').getImmediate(), container.getProvider('analytics-internal'));\r\n navigator.serviceWorker.addEventListener('message', e => messageEventListener(messaging, e));\r\n return messaging;\r\n};\r\nconst WindowMessagingInternalFactory = (container) => {\r\n const messaging = container\r\n .getProvider('messaging')\r\n .getImmediate();\r\n const messagingInternal = {\r\n getToken: (options) => getToken$1(messaging, options)\r\n };\r\n return messagingInternal;\r\n};\r\nfunction registerMessagingInWindow() {\r\n _registerComponent(new Component('messaging', WindowMessagingFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\r\n _registerComponent(new Component('messaging-internal', WindowMessagingInternalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\r\n registerVersion(name, version);\r\n // BUILD_TARGET will be replaced by values like esm5, esm2017, cjs5, etc during the compilation\r\n registerVersion(name, version, 'esm2017');\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Checks if all required APIs exist in the browser.\r\n * @returns a Promise that resolves to a boolean.\r\n *\r\n * @public\r\n */\r\nasync function isWindowSupported() {\r\n try {\r\n // This throws if open() is unsupported, so adding it to the conditional\r\n // statement below can cause an uncaught error.\r\n await validateIndexedDBOpenable();\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\r\n // might be prohibited to run. In these contexts, an error would be thrown during the messaging\r\n // instantiating phase, informing the developers to import/call isSupported for special handling.\r\n return (typeof window !== 'undefined' &&\r\n isIndexedDBAvailable() &&\r\n areCookiesEnabled() &&\r\n 'serviceWorker' in navigator &&\r\n 'PushManager' in window &&\r\n 'Notification' in window &&\r\n 'fetch' in window &&\r\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\r\n PushSubscription.prototype.hasOwnProperty('getKey'));\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nasync function deleteToken$1(messaging) {\r\n if (!navigator) {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\r\n }\r\n if (!messaging.swRegistration) {\r\n await registerDefaultSw(messaging);\r\n }\r\n return deleteTokenInternal(messaging);\r\n}\n\n/**\r\n * @license\r\n * Copyright 2020 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction onMessage$1(messaging, nextOrObserver) {\r\n if (!navigator) {\r\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\r\n }\r\n messaging.onMessageHandler = nextOrObserver;\r\n return () => {\r\n messaging.onMessageHandler = null;\r\n };\r\n}\n\n/**\r\n * @license\r\n * Copyright 2017 Google LLC\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Retrieves a Firebase Cloud Messaging instance.\r\n *\r\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\r\n *\r\n * @public\r\n */\r\nfunction getMessagingInWindow(app = getApp()) {\r\n // Conscious decision to make this async check non-blocking during the messaging instance\r\n // initialization phase for performance consideration. An error would be thrown latter for\r\n // developer's information. Developers can then choose to import and call `isSupported` for\r\n // special handling.\r\n isWindowSupported().then(isSupported => {\r\n // If `isWindowSupported()` resolved, but returned false.\r\n if (!isSupported) {\r\n throw ERROR_FACTORY.create(\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */);\r\n }\r\n }, _ => {\r\n // If `isWindowSupported()` rejected.\r\n throw ERROR_FACTORY.create(\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */);\r\n });\r\n return _getProvider(getModularInstance(app), 'messaging').getImmediate();\r\n}\r\n/**\r\n * Subscribes the {@link Messaging} instance to push notifications. Returns a Firebase Cloud\r\n * Messaging registration token that can be used to send push messages to that {@link Messaging}\r\n * instance.\r\n *\r\n * If notification permission isn't already granted, this method asks the user for permission. The\r\n * returned promise rejects if the user does not allow the app to show notifications.\r\n *\r\n * @param messaging - The {@link Messaging} instance.\r\n * @param options - Provides an optional vapid key and an optional service worker registration.\r\n *\r\n * @returns The promise resolves with an FCM registration token.\r\n *\r\n * @public\r\n */\r\nasync function getToken(messaging, options) {\r\n messaging = getModularInstance(messaging);\r\n return getToken$1(messaging, options);\r\n}\r\n/**\r\n * Deletes the registration token associated with this {@link Messaging} instance and unsubscribes\r\n * the {@link Messaging} instance from the push subscription.\r\n *\r\n * @param messaging - The {@link Messaging} instance.\r\n *\r\n * @returns The promise resolves when the token has been successfully deleted.\r\n *\r\n * @public\r\n */\r\nfunction deleteToken(messaging) {\r\n messaging = getModularInstance(messaging);\r\n return deleteToken$1(messaging);\r\n}\r\n/**\r\n * When a push message is received and the user is currently on a page for your origin, the\r\n * message is passed to the page and an `onMessage()` event is dispatched with the payload of\r\n * the push message.\r\n *\r\n *\r\n * @param messaging - The {@link Messaging} instance.\r\n * @param nextOrObserver - This function, or observer object with `next` defined,\r\n * is called when a message is received and the user is currently viewing your page.\r\n * @returns To stop listening for messages execute this returned function.\r\n *\r\n * @public\r\n */\r\nfunction onMessage(messaging, nextOrObserver) {\r\n messaging = getModularInstance(messaging);\r\n return onMessage$1(messaging, nextOrObserver);\r\n}\n\n/**\r\n * The Firebase Cloud Messaging Web SDK.\r\n * This SDK does not work in a Node.js environment.\r\n *\r\n * @packageDocumentation\r\n */\r\nregisterMessagingInWindow();\n\nexport { deleteToken, getMessagingInWindow as getMessaging, getToken, isWindowSupported as isSupported, onMessage };\n//# sourceMappingURL=index.esm2017.js.map\n","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class Alert extends React.PureComponent {\n render() {\n return ( Visible for testing\n */\nconst MAX_VALUE_MILLIS = 4 * 60 * 60 * 1000; // Four hours, like iOS and Android.\n/**\n * The percentage of backoff time to randomize by.\n * See\n * http://go/safe-client-behavior#step-1-determine-the-appropriate-retry-interval-to-handle-spike-traffic\n * for context.\n *\n * Visible for testing\n */\nconst RANDOM_FACTOR = 0.5;\n/**\n * Based on the backoff method from\n * https://github.com/google/closure-library/blob/master/closure/goog/math/exponentialbackoff.js.\n * Extracted here so we don't need to pass metadata and a stateful ExponentialBackoff object around.\n */\nfunction calculateBackoffMillis(backoffCount, intervalMillis = DEFAULT_INTERVAL_MILLIS, backoffFactor = DEFAULT_BACKOFF_FACTOR) {\n // Calculates an exponentially increasing value.\n // Deviation: calculates value from count and a constant interval, so we only need to save value\n // and count to restore state.\n const currBaseValue = intervalMillis * Math.pow(backoffFactor, backoffCount);\n // A random \"fuzz\" to avoid waves of retries.\n // Deviation: randomFactor is required.\n const randomWait = Math.round(\n // A fraction of the backoff value to add/subtract.\n // Deviation: changes multiplication order to improve readability.\n RANDOM_FACTOR *\n currBaseValue *\n // A random float (rounded to int by Math.round above) in the range [-1, 1]. Determines\n // if we add or subtract.\n (Math.random() - 0.5) *\n 2);\n // Limits backoff to max to avoid effectively permanent backoff.\n return Math.min(MAX_VALUE_MILLIS, currBaseValue + randomWait);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provide English ordinal letters after a number\n */\nfunction ordinal(i) {\n if (!Number.isFinite(i)) {\n return `${i}`;\n }\n return i + indicator(i);\n}\nfunction indicator(i) {\n i = Math.abs(i);\n const cent = i % 100;\n if (cent >= 10 && cent <= 20) {\n return 'th';\n }\n const dec = i % 10;\n if (dec === 1) {\n return 'st';\n }\n if (dec === 2) {\n return 'nd';\n }\n if (dec === 3) {\n return 'rd';\n }\n return 'th';\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getModularInstance(service) {\n if (service && service._delegate) {\n return service._delegate;\n }\n else {\n return service;\n }\n}\n\nexport { CONSTANTS, DecodeBase64StringError, Deferred, ErrorFactory, FirebaseError, MAX_VALUE_MILLIS, RANDOM_FACTOR, Sha1, areCookiesEnabled, assert, assertionError, async, base64, base64Decode, base64Encode, base64urlEncodeWithoutPadding, calculateBackoffMillis, contains, createMockUserToken, createSubscribe, decode, deepCopy, deepEqual, deepExtend, errorPrefix, extractQuerystring, getDefaultAppConfig, getDefaultEmulatorHost, getDefaultEmulatorHostnameAndPort, getDefaults, getExperimentalSetting, getGlobal, getModularInstance, getUA, isAdmin, isBrowser, isBrowserExtension, isCloudflareWorker, isElectron, isEmpty, isIE, isIndexedDBAvailable, isMobileCordova, isNode, isNodeSdk, isReactNative, isSafari, isUWP, isValidFormat, isValidTimestamp, isWebWorker, issuedAtTime, jsonEval, map, ordinal, promiseWithTimeout, querystring, querystringDecode, safeGet, stringLength, stringToByteArray, stringify, validateArgCount, validateCallback, validateContextObject, validateIndexedDBOpenable, validateNamespace };\n//# sourceMappingURL=index.esm2017.js.map\n","import { Deferred } from '@firebase/util';\n\n/**\n * Component for service name T, e.g. `auth`, `auth-internal`\n */\nclass Component {\n /**\n *\n * @param name The public service name, e.g. app, auth, firestore, database\n * @param instanceFactory Service factory responsible for creating the public interface\n * @param type whether the service provided by the component is public or private\n */\n constructor(name, instanceFactory, type) {\n this.name = name;\n this.instanceFactory = instanceFactory;\n this.type = type;\n this.multipleInstances = false;\n /**\n * Properties to be added to the service namespace\n */\n this.serviceProps = {};\n this.instantiationMode = \"LAZY\" /* InstantiationMode.LAZY */;\n this.onInstanceCreated = null;\n }\n setInstantiationMode(mode) {\n this.instantiationMode = mode;\n return this;\n }\n setMultipleInstances(multipleInstances) {\n this.multipleInstances = multipleInstances;\n return this;\n }\n setServiceProps(props) {\n this.serviceProps = props;\n return this;\n }\n setInstanceCreatedCallback(callback) {\n this.onInstanceCreated = callback;\n return this;\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Provider for instance for service name T, e.g. 'auth', 'auth-internal'\n * NameServiceMapping[T] is an alias for the type of the instance\n */\nclass Provider {\n constructor(name, container) {\n this.name = name;\n this.container = container;\n this.component = null;\n this.instances = new Map();\n this.instancesDeferred = new Map();\n this.instancesOptions = new Map();\n this.onInitCallbacks = new Map();\n }\n /**\n * @param identifier A provider can provide multiple instances of a service\n * if this.component.multipleInstances is true.\n */\n get(identifier) {\n // if multipleInstances is not supported, use the default name\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\n if (!this.instancesDeferred.has(normalizedIdentifier)) {\n const deferred = new Deferred();\n this.instancesDeferred.set(normalizedIdentifier, deferred);\n if (this.isInitialized(normalizedIdentifier) ||\n this.shouldAutoInitialize()) {\n // initialize the service if it can be auto-initialized\n try {\n const instance = this.getOrInitializeService({\n instanceIdentifier: normalizedIdentifier\n });\n if (instance) {\n deferred.resolve(instance);\n }\n }\n catch (e) {\n // when the instance factory throws an exception during get(), it should not cause\n // a fatal error. We just return the unresolved promise in this case.\n }\n }\n }\n return this.instancesDeferred.get(normalizedIdentifier).promise;\n }\n getImmediate(options) {\n var _a;\n // if multipleInstances is not supported, use the default name\n const normalizedIdentifier = this.normalizeInstanceIdentifier(options === null || options === void 0 ? void 0 : options.identifier);\n const optional = (_a = options === null || options === void 0 ? void 0 : options.optional) !== null && _a !== void 0 ? _a : false;\n if (this.isInitialized(normalizedIdentifier) ||\n this.shouldAutoInitialize()) {\n try {\n return this.getOrInitializeService({\n instanceIdentifier: normalizedIdentifier\n });\n }\n catch (e) {\n if (optional) {\n return null;\n }\n else {\n throw e;\n }\n }\n }\n else {\n // In case a component is not initialized and should/cannot be auto-initialized at the moment, return null if the optional flag is set, or throw\n if (optional) {\n return null;\n }\n else {\n throw Error(`Service ${this.name} is not available`);\n }\n }\n }\n getComponent() {\n return this.component;\n }\n setComponent(component) {\n if (component.name !== this.name) {\n throw Error(`Mismatching Component ${component.name} for Provider ${this.name}.`);\n }\n if (this.component) {\n throw Error(`Component for ${this.name} has already been provided`);\n }\n this.component = component;\n // return early without attempting to initialize the component if the component requires explicit initialization (calling `Provider.initialize()`)\n if (!this.shouldAutoInitialize()) {\n return;\n }\n // if the service is eager, initialize the default instance\n if (isComponentEager(component)) {\n try {\n this.getOrInitializeService({ instanceIdentifier: DEFAULT_ENTRY_NAME });\n }\n catch (e) {\n // when the instance factory for an eager Component throws an exception during the eager\n // initialization, it should not cause a fatal error.\n // TODO: Investigate if we need to make it configurable, because some component may want to cause\n // a fatal error in this case?\n }\n }\n // Create service instances for the pending promises and resolve them\n // NOTE: if this.multipleInstances is false, only the default instance will be created\n // and all promises with resolve with it regardless of the identifier.\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\n const normalizedIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\n try {\n // `getOrInitializeService()` should always return a valid instance since a component is guaranteed. use ! to make typescript happy.\n const instance = this.getOrInitializeService({\n instanceIdentifier: normalizedIdentifier\n });\n instanceDeferred.resolve(instance);\n }\n catch (e) {\n // when the instance factory throws an exception, it should not cause\n // a fatal error. We just leave the promise unresolved.\n }\n }\n }\n clearInstance(identifier = DEFAULT_ENTRY_NAME) {\n this.instancesDeferred.delete(identifier);\n this.instancesOptions.delete(identifier);\n this.instances.delete(identifier);\n }\n // app.delete() will call this method on every provider to delete the services\n // TODO: should we mark the provider as deleted?\n async delete() {\n const services = Array.from(this.instances.values());\n await Promise.all([\n ...services\n .filter(service => 'INTERNAL' in service) // legacy services\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map(service => service.INTERNAL.delete()),\n ...services\n .filter(service => '_delete' in service) // modularized services\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n .map(service => service._delete())\n ]);\n }\n isComponentSet() {\n return this.component != null;\n }\n isInitialized(identifier = DEFAULT_ENTRY_NAME) {\n return this.instances.has(identifier);\n }\n getOptions(identifier = DEFAULT_ENTRY_NAME) {\n return this.instancesOptions.get(identifier) || {};\n }\n initialize(opts = {}) {\n const { options = {} } = opts;\n const normalizedIdentifier = this.normalizeInstanceIdentifier(opts.instanceIdentifier);\n if (this.isInitialized(normalizedIdentifier)) {\n throw Error(`${this.name}(${normalizedIdentifier}) has already been initialized`);\n }\n if (!this.isComponentSet()) {\n throw Error(`Component ${this.name} has not been registered yet`);\n }\n const instance = this.getOrInitializeService({\n instanceIdentifier: normalizedIdentifier,\n options\n });\n // resolve any pending promise waiting for the service instance\n for (const [instanceIdentifier, instanceDeferred] of this.instancesDeferred.entries()) {\n const normalizedDeferredIdentifier = this.normalizeInstanceIdentifier(instanceIdentifier);\n if (normalizedIdentifier === normalizedDeferredIdentifier) {\n instanceDeferred.resolve(instance);\n }\n }\n return instance;\n }\n /**\n *\n * @param callback - a function that will be invoked after the provider has been initialized by calling provider.initialize().\n * The function is invoked SYNCHRONOUSLY, so it should not execute any longrunning tasks in order to not block the program.\n *\n * @param identifier An optional instance identifier\n * @returns a function to unregister the callback\n */\n onInit(callback, identifier) {\n var _a;\n const normalizedIdentifier = this.normalizeInstanceIdentifier(identifier);\n const existingCallbacks = (_a = this.onInitCallbacks.get(normalizedIdentifier)) !== null && _a !== void 0 ? _a : new Set();\n existingCallbacks.add(callback);\n this.onInitCallbacks.set(normalizedIdentifier, existingCallbacks);\n const existingInstance = this.instances.get(normalizedIdentifier);\n if (existingInstance) {\n callback(existingInstance, normalizedIdentifier);\n }\n return () => {\n existingCallbacks.delete(callback);\n };\n }\n /**\n * Invoke onInit callbacks synchronously\n * @param instance the service instance`\n */\n invokeOnInitCallbacks(instance, identifier) {\n const callbacks = this.onInitCallbacks.get(identifier);\n if (!callbacks) {\n return;\n }\n for (const callback of callbacks) {\n try {\n callback(instance, identifier);\n }\n catch (_a) {\n // ignore errors in the onInit callback\n }\n }\n }\n getOrInitializeService({ instanceIdentifier, options = {} }) {\n let instance = this.instances.get(instanceIdentifier);\n if (!instance && this.component) {\n instance = this.component.instanceFactory(this.container, {\n instanceIdentifier: normalizeIdentifierForFactory(instanceIdentifier),\n options\n });\n this.instances.set(instanceIdentifier, instance);\n this.instancesOptions.set(instanceIdentifier, options);\n /**\n * Invoke onInit listeners.\n * Note this.component.onInstanceCreated is different, which is used by the component creator,\n * while onInit listeners are registered by consumers of the provider.\n */\n this.invokeOnInitCallbacks(instance, instanceIdentifier);\n /**\n * Order is important\n * onInstanceCreated() should be called after this.instances.set(instanceIdentifier, instance); which\n * makes `isInitialized()` return true.\n */\n if (this.component.onInstanceCreated) {\n try {\n this.component.onInstanceCreated(this.container, instanceIdentifier, instance);\n }\n catch (_a) {\n // ignore errors in the onInstanceCreatedCallback\n }\n }\n }\n return instance || null;\n }\n normalizeInstanceIdentifier(identifier = DEFAULT_ENTRY_NAME) {\n if (this.component) {\n return this.component.multipleInstances ? identifier : DEFAULT_ENTRY_NAME;\n }\n else {\n return identifier; // assume multiple instances are supported before the component is provided.\n }\n }\n shouldAutoInitialize() {\n return (!!this.component &&\n this.component.instantiationMode !== \"EXPLICIT\" /* InstantiationMode.EXPLICIT */);\n }\n}\n// undefined should be passed to the service factory for the default instance\nfunction normalizeIdentifierForFactory(identifier) {\n return identifier === DEFAULT_ENTRY_NAME ? undefined : identifier;\n}\nfunction isComponentEager(component) {\n return component.instantiationMode === \"EAGER\" /* InstantiationMode.EAGER */;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * ComponentContainer that provides Providers for service name T, e.g. `auth`, `auth-internal`\n */\nclass ComponentContainer {\n constructor(name) {\n this.name = name;\n this.providers = new Map();\n }\n /**\n *\n * @param component Component being added\n * @param overwrite When a component with the same name has already been registered,\n * if overwrite is true: overwrite the existing component with the new component and create a new\n * provider with the new component. It can be useful in tests where you want to use different mocks\n * for different tests.\n * if overwrite is false: throw an exception\n */\n addComponent(component) {\n const provider = this.getProvider(component.name);\n if (provider.isComponentSet()) {\n throw new Error(`Component ${component.name} has already been registered with ${this.name}`);\n }\n provider.setComponent(component);\n }\n addOrOverwriteComponent(component) {\n const provider = this.getProvider(component.name);\n if (provider.isComponentSet()) {\n // delete the existing provider from the container, so we can register the new component\n this.providers.delete(component.name);\n }\n this.addComponent(component);\n }\n /**\n * getProvider provides a type safe interface where it can only be called with a field name\n * present in NameServiceMapping interface.\n *\n * Firebase SDKs providing services should extend NameServiceMapping interface to register\n * themselves.\n */\n getProvider(name) {\n if (this.providers.has(name)) {\n return this.providers.get(name);\n }\n // create a Provider for a service that hasn't registered with Firebase\n const provider = new Provider(name, this);\n this.providers.set(name, provider);\n return provider;\n }\n getProviders() {\n return Array.from(this.providers.values());\n }\n}\n\nexport { Component, ComponentContainer, Provider };\n//# sourceMappingURL=index.esm2017.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * A container for all of the Logger instances\n */\nconst instances = [];\n/**\n * The JS SDK supports 5 log levels and also allows a user the ability to\n * silence the logs altogether.\n *\n * The order is a follows:\n * DEBUG < VERBOSE < INFO < WARN < ERROR\n *\n * All of the log types above the current log level will be captured (i.e. if\n * you set the log level to `INFO`, errors will still be logged, but `DEBUG` and\n * `VERBOSE` logs will not)\n */\nvar LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\n LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\n LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\n LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\n LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\n})(LogLevel || (LogLevel = {}));\nconst levelStringToEnum = {\n 'debug': LogLevel.DEBUG,\n 'verbose': LogLevel.VERBOSE,\n 'info': LogLevel.INFO,\n 'warn': LogLevel.WARN,\n 'error': LogLevel.ERROR,\n 'silent': LogLevel.SILENT\n};\n/**\n * The default log level\n */\nconst defaultLogLevel = LogLevel.INFO;\n/**\n * By default, `console.debug` is not displayed in the developer console (in\n * chrome). To avoid forcing users to have to opt-in to these logs twice\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\n * logs to the `console.log` function.\n */\nconst ConsoleMethod = {\n [LogLevel.DEBUG]: 'log',\n [LogLevel.VERBOSE]: 'log',\n [LogLevel.INFO]: 'info',\n [LogLevel.WARN]: 'warn',\n [LogLevel.ERROR]: 'error'\n};\n/**\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\n * messages on to their corresponding console counterparts (if the log method\n * is supported by the current log level)\n */\nconst defaultLogHandler = (instance, logType, ...args) => {\n if (logType < instance.logLevel) {\n return;\n }\n const now = new Date().toISOString();\n const method = ConsoleMethod[logType];\n if (method) {\n console[method](`[${now}] ${instance.name}:`, ...args);\n }\n else {\n throw new Error(`Attempted to log a message with an invalid logType (value: ${logType})`);\n }\n};\nclass Logger {\n /**\n * Gives you an instance of a Logger to capture messages according to\n * Firebase's logging scheme.\n *\n * @param name The name that the logs will be associated with\n */\n constructor(name) {\n this.name = name;\n /**\n * The log level of the given Logger instance.\n */\n this._logLevel = defaultLogLevel;\n /**\n * The main (internal) log handler for the Logger instance.\n * Can be set to a new function in internal package code but not by user.\n */\n this._logHandler = defaultLogHandler;\n /**\n * The optional, additional, user-defined log handler for the Logger instance.\n */\n this._userLogHandler = null;\n /**\n * Capture the current instance for later use\n */\n instances.push(this);\n }\n get logLevel() {\n return this._logLevel;\n }\n set logLevel(val) {\n if (!(val in LogLevel)) {\n throw new TypeError(`Invalid value \"${val}\" assigned to \\`logLevel\\``);\n }\n this._logLevel = val;\n }\n // Workaround for setter/getter having to be the same type.\n setLogLevel(val) {\n this._logLevel = typeof val === 'string' ? levelStringToEnum[val] : val;\n }\n get logHandler() {\n return this._logHandler;\n }\n set logHandler(val) {\n if (typeof val !== 'function') {\n throw new TypeError('Value assigned to `logHandler` must be a function');\n }\n this._logHandler = val;\n }\n get userLogHandler() {\n return this._userLogHandler;\n }\n set userLogHandler(val) {\n this._userLogHandler = val;\n }\n /**\n * The functions below are all based on the `console` interface\n */\n debug(...args) {\n this._userLogHandler && this._userLogHandler(this, LogLevel.DEBUG, ...args);\n this._logHandler(this, LogLevel.DEBUG, ...args);\n }\n log(...args) {\n this._userLogHandler &&\n this._userLogHandler(this, LogLevel.VERBOSE, ...args);\n this._logHandler(this, LogLevel.VERBOSE, ...args);\n }\n info(...args) {\n this._userLogHandler && this._userLogHandler(this, LogLevel.INFO, ...args);\n this._logHandler(this, LogLevel.INFO, ...args);\n }\n warn(...args) {\n this._userLogHandler && this._userLogHandler(this, LogLevel.WARN, ...args);\n this._logHandler(this, LogLevel.WARN, ...args);\n }\n error(...args) {\n this._userLogHandler && this._userLogHandler(this, LogLevel.ERROR, ...args);\n this._logHandler(this, LogLevel.ERROR, ...args);\n }\n}\nfunction setLogLevel(level) {\n instances.forEach(inst => {\n inst.setLogLevel(level);\n });\n}\nfunction setUserLogHandler(logCallback, options) {\n for (const instance of instances) {\n let customLogLevel = null;\n if (options && options.level) {\n customLogLevel = levelStringToEnum[options.level];\n }\n if (logCallback === null) {\n instance.userLogHandler = null;\n }\n else {\n instance.userLogHandler = (instance, level, ...args) => {\n const message = args\n .map(arg => {\n if (arg == null) {\n return null;\n }\n else if (typeof arg === 'string') {\n return arg;\n }\n else if (typeof arg === 'number' || typeof arg === 'boolean') {\n return arg.toString();\n }\n else if (arg instanceof Error) {\n return arg.message;\n }\n else {\n try {\n return JSON.stringify(arg);\n }\n catch (ignored) {\n return null;\n }\n }\n })\n .filter(arg => arg)\n .join(' ');\n if (level >= (customLogLevel !== null && customLogLevel !== void 0 ? customLogLevel : instance.logLevel)) {\n logCallback({\n level: LogLevel[level].toLowerCase(),\n message,\n args,\n type: instance.name\n });\n }\n };\n }\n }\n}\n\nexport { LogLevel, Logger, setLogLevel, setUserLogHandler };\n//# sourceMappingURL=index.esm2017.js.map\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n","import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n","import { Component, ComponentContainer } from '@firebase/component';\nimport { Logger, setUserLogHandler, setLogLevel as setLogLevel$1 } from '@firebase/logger';\nimport { ErrorFactory, base64Decode, getDefaultAppConfig, deepEqual, isBrowser, isWebWorker, FirebaseError, base64urlEncodeWithoutPadding, isIndexedDBAvailable, validateIndexedDBOpenable } from '@firebase/util';\nexport { FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass PlatformLoggerServiceImpl {\n constructor(container) {\n this.container = container;\n }\n // In initial implementation, this will be called by installations on\n // auth token refresh, and installations will send this string.\n getPlatformInfoString() {\n const providers = this.container.getProviders();\n // Loop through providers and get library/version pairs from any that are\n // version components.\n return providers\n .map(provider => {\n if (isVersionServiceProvider(provider)) {\n const service = provider.getImmediate();\n return `${service.library}/${service.version}`;\n }\n else {\n return null;\n }\n })\n .filter(logString => logString)\n .join(' ');\n }\n}\n/**\n *\n * @param provider check if this provider provides a VersionService\n *\n * NOTE: Using Provider<'app-version'> is a hack to indicate that the provider\n * provides VersionService. The provider is not necessarily a 'app-version'\n * provider.\n */\nfunction isVersionServiceProvider(provider) {\n const component = provider.getComponent();\n return (component === null || component === void 0 ? void 0 : component.type) === \"VERSION\" /* ComponentType.VERSION */;\n}\n\nconst name$q = \"@firebase/app\";\nconst version$1 = \"0.11.5\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst logger = new Logger('@firebase/app');\n\nconst name$p = \"@firebase/app-compat\";\n\nconst name$o = \"@firebase/analytics-compat\";\n\nconst name$n = \"@firebase/analytics\";\n\nconst name$m = \"@firebase/app-check-compat\";\n\nconst name$l = \"@firebase/app-check\";\n\nconst name$k = \"@firebase/auth\";\n\nconst name$j = \"@firebase/auth-compat\";\n\nconst name$i = \"@firebase/database\";\n\nconst name$h = \"@firebase/data-connect\";\n\nconst name$g = \"@firebase/database-compat\";\n\nconst name$f = \"@firebase/functions\";\n\nconst name$e = \"@firebase/functions-compat\";\n\nconst name$d = \"@firebase/installations\";\n\nconst name$c = \"@firebase/installations-compat\";\n\nconst name$b = \"@firebase/messaging\";\n\nconst name$a = \"@firebase/messaging-compat\";\n\nconst name$9 = \"@firebase/performance\";\n\nconst name$8 = \"@firebase/performance-compat\";\n\nconst name$7 = \"@firebase/remote-config\";\n\nconst name$6 = \"@firebase/remote-config-compat\";\n\nconst name$5 = \"@firebase/storage\";\n\nconst name$4 = \"@firebase/storage-compat\";\n\nconst name$3 = \"@firebase/firestore\";\n\nconst name$2 = \"@firebase/vertexai\";\n\nconst name$1 = \"@firebase/firestore-compat\";\n\nconst name = \"firebase\";\nconst version = \"11.6.1\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The default app name\n *\n * @internal\n */\nconst DEFAULT_ENTRY_NAME = '[DEFAULT]';\nconst PLATFORM_LOG_STRING = {\n [name$q]: 'fire-core',\n [name$p]: 'fire-core-compat',\n [name$n]: 'fire-analytics',\n [name$o]: 'fire-analytics-compat',\n [name$l]: 'fire-app-check',\n [name$m]: 'fire-app-check-compat',\n [name$k]: 'fire-auth',\n [name$j]: 'fire-auth-compat',\n [name$i]: 'fire-rtdb',\n [name$h]: 'fire-data-connect',\n [name$g]: 'fire-rtdb-compat',\n [name$f]: 'fire-fn',\n [name$e]: 'fire-fn-compat',\n [name$d]: 'fire-iid',\n [name$c]: 'fire-iid-compat',\n [name$b]: 'fire-fcm',\n [name$a]: 'fire-fcm-compat',\n [name$9]: 'fire-perf',\n [name$8]: 'fire-perf-compat',\n [name$7]: 'fire-rc',\n [name$6]: 'fire-rc-compat',\n [name$5]: 'fire-gcs',\n [name$4]: 'fire-gcs-compat',\n [name$3]: 'fire-fst',\n [name$1]: 'fire-fst-compat',\n [name$2]: 'fire-vertex',\n 'fire-js': 'fire-js', // Platform identifier for JS SDK.\n [name]: 'fire-js-all'\n};\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * @internal\n */\nconst _apps = new Map();\n/**\n * @internal\n */\nconst _serverApps = new Map();\n/**\n * Registered components.\n *\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst _components = new Map();\n/**\n * @param component - the component being added to this app's container\n *\n * @internal\n */\nfunction _addComponent(app, component) {\n try {\n app.container.addComponent(component);\n }\n catch (e) {\n logger.debug(`Component ${component.name} failed to register with FirebaseApp ${app.name}`, e);\n }\n}\n/**\n *\n * @internal\n */\nfunction _addOrOverwriteComponent(app, component) {\n app.container.addOrOverwriteComponent(component);\n}\n/**\n *\n * @param component - the component to register\n * @returns whether or not the component is registered successfully\n *\n * @internal\n */\nfunction _registerComponent(component) {\n const componentName = component.name;\n if (_components.has(componentName)) {\n logger.debug(`There were multiple attempts to register component ${componentName}.`);\n return false;\n }\n _components.set(componentName, component);\n // add the component to existing app instances\n for (const app of _apps.values()) {\n _addComponent(app, component);\n }\n for (const serverApp of _serverApps.values()) {\n _addComponent(serverApp, component);\n }\n return true;\n}\n/**\n *\n * @param app - FirebaseApp instance\n * @param name - service name\n *\n * @returns the provider for the service with the matching name\n *\n * @internal\n */\nfunction _getProvider(app, name) {\n const heartbeatController = app.container\n .getProvider('heartbeat')\n .getImmediate({ optional: true });\n if (heartbeatController) {\n void heartbeatController.triggerHeartbeat();\n }\n return app.container.getProvider(name);\n}\n/**\n *\n * @param app - FirebaseApp instance\n * @param name - service name\n * @param instanceIdentifier - service instance identifier in case the service supports multiple instances\n *\n * @internal\n */\nfunction _removeServiceInstance(app, name, instanceIdentifier = DEFAULT_ENTRY_NAME) {\n _getProvider(app, name).clearInstance(instanceIdentifier);\n}\n/**\n *\n * @param obj - an object of type FirebaseApp or FirebaseOptions.\n *\n * @returns true if the provide object is of type FirebaseApp.\n *\n * @internal\n */\nfunction _isFirebaseApp(obj) {\n return obj.options !== undefined;\n}\n/**\n *\n * @param obj - an object of type FirebaseApp.\n *\n * @returns true if the provided object is of type FirebaseServerAppImpl.\n *\n * @internal\n */\nfunction _isFirebaseServerApp(obj) {\n if (obj === null || obj === undefined) {\n return false;\n }\n return obj.settings !== undefined;\n}\n/**\n * Test only\n *\n * @internal\n */\nfunction _clearComponents() {\n _components.clear();\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ERRORS = {\n [\"no-app\" /* AppError.NO_APP */]: \"No Firebase App '{$appName}' has been created - \" +\n 'call initializeApp() first',\n [\"bad-app-name\" /* AppError.BAD_APP_NAME */]: \"Illegal App name: '{$appName}'\",\n [\"duplicate-app\" /* AppError.DUPLICATE_APP */]: \"Firebase App named '{$appName}' already exists with different options or config\",\n [\"app-deleted\" /* AppError.APP_DELETED */]: \"Firebase App named '{$appName}' already deleted\",\n [\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */]: 'Firebase Server App has been deleted',\n [\"no-options\" /* AppError.NO_OPTIONS */]: 'Need to provide options, when not being deployed to hosting via source.',\n [\"invalid-app-argument\" /* AppError.INVALID_APP_ARGUMENT */]: 'firebase.{$appName}() takes either no argument or a ' +\n 'Firebase App instance.',\n [\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */]: 'First argument to `onLog` must be null or a function.',\n [\"idb-open\" /* AppError.IDB_OPEN */]: 'Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.',\n [\"idb-get\" /* AppError.IDB_GET */]: 'Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.',\n [\"idb-set\" /* AppError.IDB_WRITE */]: 'Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.',\n [\"idb-delete\" /* AppError.IDB_DELETE */]: 'Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.',\n [\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */]: 'FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.',\n [\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */]: 'FirebaseServerApp is not for use in browser environments.'\n};\nconst ERROR_FACTORY = new ErrorFactory('app', 'Firebase', ERRORS);\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass FirebaseAppImpl {\n constructor(options, config, container) {\n this._isDeleted = false;\n this._options = Object.assign({}, options);\n this._config = Object.assign({}, config);\n this._name = config.name;\n this._automaticDataCollectionEnabled =\n config.automaticDataCollectionEnabled;\n this._container = container;\n this.container.addComponent(new Component('app', () => this, \"PUBLIC\" /* ComponentType.PUBLIC */));\n }\n get automaticDataCollectionEnabled() {\n this.checkDestroyed();\n return this._automaticDataCollectionEnabled;\n }\n set automaticDataCollectionEnabled(val) {\n this.checkDestroyed();\n this._automaticDataCollectionEnabled = val;\n }\n get name() {\n this.checkDestroyed();\n return this._name;\n }\n get options() {\n this.checkDestroyed();\n return this._options;\n }\n get config() {\n this.checkDestroyed();\n return this._config;\n }\n get container() {\n return this._container;\n }\n get isDeleted() {\n return this._isDeleted;\n }\n set isDeleted(val) {\n this._isDeleted = val;\n }\n /**\n * This function will throw an Error if the App has already been deleted -\n * use before performing API actions on the App.\n */\n checkDestroyed() {\n if (this.isDeleted) {\n throw ERROR_FACTORY.create(\"app-deleted\" /* AppError.APP_DELETED */, { appName: this._name });\n }\n }\n}\n\n/**\n * @license\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Parse the token and check to see if the `exp` claim is in the future.\n// Reports an error to the console if the token or claim could not be parsed, or if `exp` is in\n// the past.\nfunction validateTokenTTL(base64Token, tokenName) {\n const secondPart = base64Decode(base64Token.split('.')[1]);\n if (secondPart === null) {\n console.error(`FirebaseServerApp ${tokenName} is invalid: second part could not be parsed.`);\n return;\n }\n const expClaim = JSON.parse(secondPart).exp;\n if (expClaim === undefined) {\n console.error(`FirebaseServerApp ${tokenName} is invalid: expiration claim could not be parsed`);\n return;\n }\n const exp = JSON.parse(secondPart).exp * 1000;\n const now = new Date().getTime();\n const diff = exp - now;\n if (diff <= 0) {\n console.error(`FirebaseServerApp ${tokenName} is invalid: the token has expired.`);\n }\n}\nclass FirebaseServerAppImpl extends FirebaseAppImpl {\n constructor(options, serverConfig, name, container) {\n // Build configuration parameters for the FirebaseAppImpl base class.\n const automaticDataCollectionEnabled = serverConfig.automaticDataCollectionEnabled !== undefined\n ? serverConfig.automaticDataCollectionEnabled\n : false;\n // Create the FirebaseAppSettings object for the FirebaseAppImp constructor.\n const config = {\n name,\n automaticDataCollectionEnabled\n };\n if (options.apiKey !== undefined) {\n // Construct the parent FirebaseAppImp object.\n super(options, config, container);\n }\n else {\n const appImpl = options;\n super(appImpl.options, config, container);\n }\n // Now construct the data for the FirebaseServerAppImpl.\n this._serverConfig = Object.assign({ automaticDataCollectionEnabled }, serverConfig);\n // Ensure that the current time is within the `authIdtoken` window of validity.\n if (this._serverConfig.authIdToken) {\n validateTokenTTL(this._serverConfig.authIdToken, 'authIdToken');\n }\n // Ensure that the current time is within the `appCheckToken` window of validity.\n if (this._serverConfig.appCheckToken) {\n validateTokenTTL(this._serverConfig.appCheckToken, 'appCheckToken');\n }\n this._finalizationRegistry = null;\n if (typeof FinalizationRegistry !== 'undefined') {\n this._finalizationRegistry = new FinalizationRegistry(() => {\n this.automaticCleanup();\n });\n }\n this._refCount = 0;\n this.incRefCount(this._serverConfig.releaseOnDeref);\n // Do not retain a hard reference to the dref object, otherwise the FinalizationRegistry\n // will never trigger.\n this._serverConfig.releaseOnDeref = undefined;\n serverConfig.releaseOnDeref = undefined;\n registerVersion(name$q, version$1, 'serverapp');\n }\n toJSON() {\n return undefined;\n }\n get refCount() {\n return this._refCount;\n }\n // Increment the reference count of this server app. If an object is provided, register it\n // with the finalization registry.\n incRefCount(obj) {\n if (this.isDeleted) {\n return;\n }\n this._refCount++;\n if (obj !== undefined && this._finalizationRegistry !== null) {\n this._finalizationRegistry.register(obj, this);\n }\n }\n // Decrement the reference count.\n decRefCount() {\n if (this.isDeleted) {\n return 0;\n }\n return --this._refCount;\n }\n // Invoked by the FinalizationRegistry callback to note that this app should go through its\n // reference counts and delete itself if no reference count remain. The coordinating logic that\n // handles this is in deleteApp(...).\n automaticCleanup() {\n void deleteApp(this);\n }\n get settings() {\n this.checkDestroyed();\n return this._serverConfig;\n }\n /**\n * This function will throw an Error if the App has already been deleted -\n * use before performing API actions on the App.\n */\n checkDestroyed() {\n if (this.isDeleted) {\n throw ERROR_FACTORY.create(\"server-app-deleted\" /* AppError.SERVER_APP_DELETED */);\n }\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * The current SDK version.\n *\n * @public\n */\nconst SDK_VERSION = version;\nfunction initializeApp(_options, rawConfig = {}) {\n let options = _options;\n if (typeof rawConfig !== 'object') {\n const name = rawConfig;\n rawConfig = { name };\n }\n const config = Object.assign({ name: DEFAULT_ENTRY_NAME, automaticDataCollectionEnabled: false }, rawConfig);\n const name = config.name;\n if (typeof name !== 'string' || !name) {\n throw ERROR_FACTORY.create(\"bad-app-name\" /* AppError.BAD_APP_NAME */, {\n appName: String(name)\n });\n }\n options || (options = getDefaultAppConfig());\n if (!options) {\n throw ERROR_FACTORY.create(\"no-options\" /* AppError.NO_OPTIONS */);\n }\n const existingApp = _apps.get(name);\n if (existingApp) {\n // return the existing app if options and config deep equal the ones in the existing app.\n if (deepEqual(options, existingApp.options) &&\n deepEqual(config, existingApp.config)) {\n return existingApp;\n }\n else {\n throw ERROR_FACTORY.create(\"duplicate-app\" /* AppError.DUPLICATE_APP */, { appName: name });\n }\n }\n const container = new ComponentContainer(name);\n for (const component of _components.values()) {\n container.addComponent(component);\n }\n const newApp = new FirebaseAppImpl(options, config, container);\n _apps.set(name, newApp);\n return newApp;\n}\nfunction initializeServerApp(_options, _serverAppConfig) {\n if (isBrowser() && !isWebWorker()) {\n // FirebaseServerApp isn't designed to be run in browsers.\n throw ERROR_FACTORY.create(\"invalid-server-app-environment\" /* AppError.INVALID_SERVER_APP_ENVIRONMENT */);\n }\n if (_serverAppConfig.automaticDataCollectionEnabled === undefined) {\n _serverAppConfig.automaticDataCollectionEnabled = false;\n }\n let appOptions;\n if (_isFirebaseApp(_options)) {\n appOptions = _options.options;\n }\n else {\n appOptions = _options;\n }\n // Build an app name based on a hash of the configuration options.\n const nameObj = Object.assign(Object.assign({}, _serverAppConfig), appOptions);\n // However, Do not mangle the name based on releaseOnDeref, since it will vary between the\n // construction of FirebaseServerApp instances. For example, if the object is the request headers.\n if (nameObj.releaseOnDeref !== undefined) {\n delete nameObj.releaseOnDeref;\n }\n const hashCode = (s) => {\n return [...s].reduce((hash, c) => (Math.imul(31, hash) + c.charCodeAt(0)) | 0, 0);\n };\n if (_serverAppConfig.releaseOnDeref !== undefined) {\n if (typeof FinalizationRegistry === 'undefined') {\n throw ERROR_FACTORY.create(\"finalization-registry-not-supported\" /* AppError.FINALIZATION_REGISTRY_NOT_SUPPORTED */, {});\n }\n }\n const nameString = '' + hashCode(JSON.stringify(nameObj));\n const existingApp = _serverApps.get(nameString);\n if (existingApp) {\n existingApp.incRefCount(_serverAppConfig.releaseOnDeref);\n return existingApp;\n }\n const container = new ComponentContainer(nameString);\n for (const component of _components.values()) {\n container.addComponent(component);\n }\n const newApp = new FirebaseServerAppImpl(appOptions, _serverAppConfig, nameString, container);\n _serverApps.set(nameString, newApp);\n return newApp;\n}\n/**\n * Retrieves a {@link @firebase/app#FirebaseApp} instance.\n *\n * When called with no arguments, the default app is returned. When an app name\n * is provided, the app corresponding to that name is returned.\n *\n * An exception is thrown if the app being retrieved has not yet been\n * initialized.\n *\n * @example\n * ```javascript\n * // Return the default app\n * const app = getApp();\n * ```\n *\n * @example\n * ```javascript\n * // Return a named app\n * const otherApp = getApp(\"otherApp\");\n * ```\n *\n * @param name - Optional name of the app to return. If no name is\n * provided, the default is `\"[DEFAULT]\"`.\n *\n * @returns The app corresponding to the provided app name.\n * If no app name is provided, the default app is returned.\n *\n * @public\n */\nfunction getApp(name = DEFAULT_ENTRY_NAME) {\n const app = _apps.get(name);\n if (!app && name === DEFAULT_ENTRY_NAME && getDefaultAppConfig()) {\n return initializeApp();\n }\n if (!app) {\n throw ERROR_FACTORY.create(\"no-app\" /* AppError.NO_APP */, { appName: name });\n }\n return app;\n}\n/**\n * A (read-only) array of all initialized apps.\n * @public\n */\nfunction getApps() {\n return Array.from(_apps.values());\n}\n/**\n * Renders this app unusable and frees the resources of all associated\n * services.\n *\n * @example\n * ```javascript\n * deleteApp(app)\n * .then(function() {\n * console.log(\"App deleted successfully\");\n * })\n * .catch(function(error) {\n * console.log(\"Error deleting app:\", error);\n * });\n * ```\n *\n * @public\n */\nasync function deleteApp(app) {\n let cleanupProviders = false;\n const name = app.name;\n if (_apps.has(name)) {\n cleanupProviders = true;\n _apps.delete(name);\n }\n else if (_serverApps.has(name)) {\n const firebaseServerApp = app;\n if (firebaseServerApp.decRefCount() <= 0) {\n _serverApps.delete(name);\n cleanupProviders = true;\n }\n }\n if (cleanupProviders) {\n await Promise.all(app.container\n .getProviders()\n .map(provider => provider.delete()));\n app.isDeleted = true;\n }\n}\n/**\n * Registers a library's name and version for platform logging purposes.\n * @param library - Name of 1p or 3p library (e.g. firestore, angularfire)\n * @param version - Current version of that library.\n * @param variant - Bundle variant, e.g., node, rn, etc.\n *\n * @public\n */\nfunction registerVersion(libraryKeyOrName, version, variant) {\n var _a;\n // TODO: We can use this check to whitelist strings when/if we set up\n // a good whitelist system.\n let library = (_a = PLATFORM_LOG_STRING[libraryKeyOrName]) !== null && _a !== void 0 ? _a : libraryKeyOrName;\n if (variant) {\n library += `-${variant}`;\n }\n const libraryMismatch = library.match(/\\s|\\//);\n const versionMismatch = version.match(/\\s|\\//);\n if (libraryMismatch || versionMismatch) {\n const warning = [\n `Unable to register library \"${library}\" with version \"${version}\":`\n ];\n if (libraryMismatch) {\n warning.push(`library name \"${library}\" contains illegal characters (whitespace or \"/\")`);\n }\n if (libraryMismatch && versionMismatch) {\n warning.push('and');\n }\n if (versionMismatch) {\n warning.push(`version name \"${version}\" contains illegal characters (whitespace or \"/\")`);\n }\n logger.warn(warning.join(' '));\n return;\n }\n _registerComponent(new Component(`${library}-version`, () => ({ library, version }), \"VERSION\" /* ComponentType.VERSION */));\n}\n/**\n * Sets log handler for all Firebase SDKs.\n * @param logCallback - An optional custom log handler that executes user code whenever\n * the Firebase SDK makes a logging call.\n *\n * @public\n */\nfunction onLog(logCallback, options) {\n if (logCallback !== null && typeof logCallback !== 'function') {\n throw ERROR_FACTORY.create(\"invalid-log-argument\" /* AppError.INVALID_LOG_ARGUMENT */);\n }\n setUserLogHandler(logCallback, options);\n}\n/**\n * Sets log level for all Firebase SDKs.\n *\n * All of the log types above the current log level are captured (i.e. if\n * you set the log level to `info`, errors are logged, but `debug` and\n * `verbose` logs are not).\n *\n * @public\n */\nfunction setLogLevel(logLevel) {\n setLogLevel$1(logLevel);\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DB_NAME = 'firebase-heartbeat-database';\nconst DB_VERSION = 1;\nconst STORE_NAME = 'firebase-heartbeat-store';\nlet dbPromise = null;\nfunction getDbPromise() {\n if (!dbPromise) {\n dbPromise = openDB(DB_NAME, DB_VERSION, {\n upgrade: (db, oldVersion) => {\n // We don't use 'break' in this switch statement, the fall-through\n // behavior is what we want, because if there are multiple versions between\n // the old version and the current version, we want ALL the migrations\n // that correspond to those versions to run, not only the last one.\n // eslint-disable-next-line default-case\n switch (oldVersion) {\n case 0:\n try {\n db.createObjectStore(STORE_NAME);\n }\n catch (e) {\n // Safari/iOS browsers throw occasional exceptions on\n // db.createObjectStore() that may be a bug. Avoid blocking\n // the rest of the app functionality.\n console.warn(e);\n }\n }\n }\n }).catch(e => {\n throw ERROR_FACTORY.create(\"idb-open\" /* AppError.IDB_OPEN */, {\n originalErrorMessage: e.message\n });\n });\n }\n return dbPromise;\n}\nasync function readHeartbeatsFromIndexedDB(app) {\n try {\n const db = await getDbPromise();\n const tx = db.transaction(STORE_NAME);\n const result = await tx.objectStore(STORE_NAME).get(computeKey(app));\n // We already have the value but tx.done can throw,\n // so we need to await it here to catch errors\n await tx.done;\n return result;\n }\n catch (e) {\n if (e instanceof FirebaseError) {\n logger.warn(e.message);\n }\n else {\n const idbGetError = ERROR_FACTORY.create(\"idb-get\" /* AppError.IDB_GET */, {\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\n });\n logger.warn(idbGetError.message);\n }\n }\n}\nasync function writeHeartbeatsToIndexedDB(app, heartbeatObject) {\n try {\n const db = await getDbPromise();\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const objectStore = tx.objectStore(STORE_NAME);\n await objectStore.put(heartbeatObject, computeKey(app));\n await tx.done;\n }\n catch (e) {\n if (e instanceof FirebaseError) {\n logger.warn(e.message);\n }\n else {\n const idbGetError = ERROR_FACTORY.create(\"idb-set\" /* AppError.IDB_WRITE */, {\n originalErrorMessage: e === null || e === void 0 ? void 0 : e.message\n });\n logger.warn(idbGetError.message);\n }\n }\n}\nfunction computeKey(app) {\n return `${app.name}!${app.options.appId}`;\n}\n\n/**\n * @license\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst MAX_HEADER_BYTES = 1024;\nconst MAX_NUM_STORED_HEARTBEATS = 30;\nclass HeartbeatServiceImpl {\n constructor(container) {\n this.container = container;\n /**\n * In-memory cache for heartbeats, used by getHeartbeatsHeader() to generate\n * the header string.\n * Stores one record per date. This will be consolidated into the standard\n * format of one record per user agent string before being sent as a header.\n * Populated from indexedDB when the controller is instantiated and should\n * be kept in sync with indexedDB.\n * Leave public for easier testing.\n */\n this._heartbeatsCache = null;\n const app = this.container.getProvider('app').getImmediate();\n this._storage = new HeartbeatStorageImpl(app);\n this._heartbeatsCachePromise = this._storage.read().then(result => {\n this._heartbeatsCache = result;\n return result;\n });\n }\n /**\n * Called to report a heartbeat. The function will generate\n * a HeartbeatsByUserAgent object, update heartbeatsCache, and persist it\n * to IndexedDB.\n * Note that we only store one heartbeat per day. So if a heartbeat for today is\n * already logged, subsequent calls to this function in the same day will be ignored.\n */\n async triggerHeartbeat() {\n var _a, _b;\n try {\n const platformLogger = this.container\n .getProvider('platform-logger')\n .getImmediate();\n // This is the \"Firebase user agent\" string from the platform logger\n // service, not the browser user agent.\n const agent = platformLogger.getPlatformInfoString();\n const date = getUTCDateString();\n if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null) {\n this._heartbeatsCache = await this._heartbeatsCachePromise;\n // If we failed to construct a heartbeats cache, then return immediately.\n if (((_b = this._heartbeatsCache) === null || _b === void 0 ? void 0 : _b.heartbeats) == null) {\n return;\n }\n }\n // Do not store a heartbeat if one is already stored for this day\n // or if a header has already been sent today.\n if (this._heartbeatsCache.lastSentHeartbeatDate === date ||\n this._heartbeatsCache.heartbeats.some(singleDateHeartbeat => singleDateHeartbeat.date === date)) {\n return;\n }\n else {\n // There is no entry for this date. Create one.\n this._heartbeatsCache.heartbeats.push({ date, agent });\n // If the number of stored heartbeats exceeds the maximum number of stored heartbeats, remove the heartbeat with the earliest date.\n // Since this is executed each time a heartbeat is pushed, the limit can only be exceeded by one, so only one needs to be removed.\n if (this._heartbeatsCache.heartbeats.length > MAX_NUM_STORED_HEARTBEATS) {\n const earliestHeartbeatIdx = getEarliestHeartbeatIdx(this._heartbeatsCache.heartbeats);\n this._heartbeatsCache.heartbeats.splice(earliestHeartbeatIdx, 1);\n }\n }\n return this._storage.overwrite(this._heartbeatsCache);\n }\n catch (e) {\n logger.warn(e);\n }\n }\n /**\n * Returns a base64 encoded string which can be attached to the heartbeat-specific header directly.\n * It also clears all heartbeats from memory as well as in IndexedDB.\n *\n * NOTE: Consuming product SDKs should not send the header if this method\n * returns an empty string.\n */\n async getHeartbeatsHeader() {\n var _a;\n try {\n if (this._heartbeatsCache === null) {\n await this._heartbeatsCachePromise;\n }\n // If it's still null or the array is empty, there is no data to send.\n if (((_a = this._heartbeatsCache) === null || _a === void 0 ? void 0 : _a.heartbeats) == null ||\n this._heartbeatsCache.heartbeats.length === 0) {\n return '';\n }\n const date = getUTCDateString();\n // Extract as many heartbeats from the cache as will fit under the size limit.\n const { heartbeatsToSend, unsentEntries } = extractHeartbeatsForHeader(this._heartbeatsCache.heartbeats);\n const headerString = base64urlEncodeWithoutPadding(JSON.stringify({ version: 2, heartbeats: heartbeatsToSend }));\n // Store last sent date to prevent another being logged/sent for the same day.\n this._heartbeatsCache.lastSentHeartbeatDate = date;\n if (unsentEntries.length > 0) {\n // Store any unsent entries if they exist.\n this._heartbeatsCache.heartbeats = unsentEntries;\n // This seems more likely than emptying the array (below) to lead to some odd state\n // since the cache isn't empty and this will be called again on the next request,\n // and is probably safest if we await it.\n await this._storage.overwrite(this._heartbeatsCache);\n }\n else {\n this._heartbeatsCache.heartbeats = [];\n // Do not wait for this, to reduce latency.\n void this._storage.overwrite(this._heartbeatsCache);\n }\n return headerString;\n }\n catch (e) {\n logger.warn(e);\n return '';\n }\n }\n}\nfunction getUTCDateString() {\n const today = new Date();\n // Returns date format 'YYYY-MM-DD'\n return today.toISOString().substring(0, 10);\n}\nfunction extractHeartbeatsForHeader(heartbeatsCache, maxSize = MAX_HEADER_BYTES) {\n // Heartbeats grouped by user agent in the standard format to be sent in\n // the header.\n const heartbeatsToSend = [];\n // Single date format heartbeats that are not sent.\n let unsentEntries = heartbeatsCache.slice();\n for (const singleDateHeartbeat of heartbeatsCache) {\n // Look for an existing entry with the same user agent.\n const heartbeatEntry = heartbeatsToSend.find(hb => hb.agent === singleDateHeartbeat.agent);\n if (!heartbeatEntry) {\n // If no entry for this user agent exists, create one.\n heartbeatsToSend.push({\n agent: singleDateHeartbeat.agent,\n dates: [singleDateHeartbeat.date]\n });\n if (countBytes(heartbeatsToSend) > maxSize) {\n // If the header would exceed max size, remove the added heartbeat\n // entry and stop adding to the header.\n heartbeatsToSend.pop();\n break;\n }\n }\n else {\n heartbeatEntry.dates.push(singleDateHeartbeat.date);\n // If the header would exceed max size, remove the added date\n // and stop adding to the header.\n if (countBytes(heartbeatsToSend) > maxSize) {\n heartbeatEntry.dates.pop();\n break;\n }\n }\n // Pop unsent entry from queue. (Skipped if adding the entry exceeded\n // quota and the loop breaks early.)\n unsentEntries = unsentEntries.slice(1);\n }\n return {\n heartbeatsToSend,\n unsentEntries\n };\n}\nclass HeartbeatStorageImpl {\n constructor(app) {\n this.app = app;\n this._canUseIndexedDBPromise = this.runIndexedDBEnvironmentCheck();\n }\n async runIndexedDBEnvironmentCheck() {\n if (!isIndexedDBAvailable()) {\n return false;\n }\n else {\n return validateIndexedDBOpenable()\n .then(() => true)\n .catch(() => false);\n }\n }\n /**\n * Read all heartbeats.\n */\n async read() {\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\n if (!canUseIndexedDB) {\n return { heartbeats: [] };\n }\n else {\n const idbHeartbeatObject = await readHeartbeatsFromIndexedDB(this.app);\n if (idbHeartbeatObject === null || idbHeartbeatObject === void 0 ? void 0 : idbHeartbeatObject.heartbeats) {\n return idbHeartbeatObject;\n }\n else {\n return { heartbeats: [] };\n }\n }\n }\n // overwrite the storage with the provided heartbeats\n async overwrite(heartbeatsObject) {\n var _a;\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\n if (!canUseIndexedDB) {\n return;\n }\n else {\n const existingHeartbeatsObject = await this.read();\n return writeHeartbeatsToIndexedDB(this.app, {\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\n heartbeats: heartbeatsObject.heartbeats\n });\n }\n }\n // add heartbeats\n async add(heartbeatsObject) {\n var _a;\n const canUseIndexedDB = await this._canUseIndexedDBPromise;\n if (!canUseIndexedDB) {\n return;\n }\n else {\n const existingHeartbeatsObject = await this.read();\n return writeHeartbeatsToIndexedDB(this.app, {\n lastSentHeartbeatDate: (_a = heartbeatsObject.lastSentHeartbeatDate) !== null && _a !== void 0 ? _a : existingHeartbeatsObject.lastSentHeartbeatDate,\n heartbeats: [\n ...existingHeartbeatsObject.heartbeats,\n ...heartbeatsObject.heartbeats\n ]\n });\n }\n }\n}\n/**\n * Calculate bytes of a HeartbeatsByUserAgent array after being wrapped\n * in a platform logging header JSON object, stringified, and converted\n * to base 64.\n */\nfunction countBytes(heartbeatsCache) {\n // base64 has a restricted set of characters, all of which should be 1 byte.\n return base64urlEncodeWithoutPadding(\n // heartbeatsCache wrapper properties\n JSON.stringify({ version: 2, heartbeats: heartbeatsCache })).length;\n}\n/**\n * Returns the index of the heartbeat with the earliest date.\n * If the heartbeats array is empty, -1 is returned.\n */\nfunction getEarliestHeartbeatIdx(heartbeats) {\n if (heartbeats.length === 0) {\n return -1;\n }\n let earliestHeartbeatIdx = 0;\n let earliestHeartbeatDate = heartbeats[0].date;\n for (let i = 1; i < heartbeats.length; i++) {\n if (heartbeats[i].date < earliestHeartbeatDate) {\n earliestHeartbeatDate = heartbeats[i].date;\n earliestHeartbeatIdx = i;\n }\n }\n return earliestHeartbeatIdx;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction registerCoreComponents(variant) {\n _registerComponent(new Component('platform-logger', container => new PlatformLoggerServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\n _registerComponent(new Component('heartbeat', container => new HeartbeatServiceImpl(container), \"PRIVATE\" /* ComponentType.PRIVATE */));\n // Register `app` package.\n registerVersion(name$q, version$1, variant);\n // BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\n registerVersion(name$q, version$1, 'esm2017');\n // Register platform SDK identifier (no version).\n registerVersion('fire-js', '');\n}\n\n/**\n * Firebase App\n *\n * @remarks This package coordinates the communication between the different Firebase components\n * @packageDocumentation\n */\nregisterCoreComponents('');\n\nexport { SDK_VERSION, DEFAULT_ENTRY_NAME as _DEFAULT_ENTRY_NAME, _addComponent, _addOrOverwriteComponent, _apps, _clearComponents, _components, _getProvider, _isFirebaseApp, _isFirebaseServerApp, _registerComponent, _removeServiceInstance, _serverApps, deleteApp, getApp, getApps, initializeApp, initializeServerApp, onLog, registerVersion, setLogLevel };\n//# sourceMappingURL=index.esm2017.js.map\n","import { registerVersion } from '@firebase/app';\nexport * from '@firebase/app';\n\nvar name = \"firebase\";\nvar version = \"11.6.1\";\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nregisterVersion(name, version, 'app');\n//# sourceMappingURL=index.esm.js.map\n","import { _getProvider, getApp, _registerComponent, registerVersion } from '@firebase/app';\nimport { Component } from '@firebase/component';\nimport { ErrorFactory, FirebaseError } from '@firebase/util';\nimport { openDB } from 'idb';\n\nconst name = \"@firebase/installations\";\nconst version = \"0.6.13\";\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst PENDING_TIMEOUT_MS = 10000;\nconst PACKAGE_VERSION = `w:${version}`;\nconst INTERNAL_AUTH_VERSION = 'FIS_v2';\nconst INSTALLATIONS_API_URL = 'https://firebaseinstallations.googleapis.com/v1';\nconst TOKEN_EXPIRATION_BUFFER = 60 * 60 * 1000; // One hour\nconst SERVICE = 'installations';\nconst SERVICE_NAME = 'Installations';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ERROR_DESCRIPTION_MAP = {\n [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\n [\"not-registered\" /* ErrorCode.NOT_REGISTERED */]: 'Firebase Installation is not registered.',\n [\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */]: 'Firebase Installation not found.',\n [\"request-failed\" /* ErrorCode.REQUEST_FAILED */]: '{$requestName} request failed with error \"{$serverCode} {$serverStatus}: {$serverMessage}\"',\n [\"app-offline\" /* ErrorCode.APP_OFFLINE */]: 'Could not process request. Application offline.',\n [\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */]: \"Can't delete installation while there is a pending registration request.\"\n};\nconst ERROR_FACTORY = new ErrorFactory(SERVICE, SERVICE_NAME, ERROR_DESCRIPTION_MAP);\n/** Returns true if error is a FirebaseError that is based on an error from the server. */\nfunction isServerError(error) {\n return (error instanceof FirebaseError &&\n error.code.includes(\"request-failed\" /* ErrorCode.REQUEST_FAILED */));\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction getInstallationsEndpoint({ projectId }) {\n return `${INSTALLATIONS_API_URL}/projects/${projectId}/installations`;\n}\nfunction extractAuthTokenInfoFromResponse(response) {\n return {\n token: response.token,\n requestStatus: 2 /* RequestStatus.COMPLETED */,\n expiresIn: getExpiresInFromResponseExpiresIn(response.expiresIn),\n creationTime: Date.now()\n };\n}\nasync function getErrorFromResponse(requestName, response) {\n const responseJson = await response.json();\n const errorData = responseJson.error;\n return ERROR_FACTORY.create(\"request-failed\" /* ErrorCode.REQUEST_FAILED */, {\n requestName,\n serverCode: errorData.code,\n serverMessage: errorData.message,\n serverStatus: errorData.status\n });\n}\nfunction getHeaders({ apiKey }) {\n return new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'x-goog-api-key': apiKey\n });\n}\nfunction getHeadersWithAuth(appConfig, { refreshToken }) {\n const headers = getHeaders(appConfig);\n headers.append('Authorization', getAuthorizationHeader(refreshToken));\n return headers;\n}\n/**\n * Calls the passed in fetch wrapper and returns the response.\n * If the returned response has a status of 5xx, re-runs the function once and\n * returns the response.\n */\nasync function retryIfServerError(fn) {\n const result = await fn();\n if (result.status >= 500 && result.status < 600) {\n // Internal Server Error. Retry request.\n return fn();\n }\n return result;\n}\nfunction getExpiresInFromResponseExpiresIn(responseExpiresIn) {\n // This works because the server will never respond with fractions of a second.\n return Number(responseExpiresIn.replace('s', '000'));\n}\nfunction getAuthorizationHeader(refreshToken) {\n return `${INTERNAL_AUTH_VERSION} ${refreshToken}`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function createInstallationRequest({ appConfig, heartbeatServiceProvider }, { fid }) {\n const endpoint = getInstallationsEndpoint(appConfig);\n const headers = getHeaders(appConfig);\n // If heartbeat service exists, add the heartbeat string to the header.\n const heartbeatService = heartbeatServiceProvider.getImmediate({\n optional: true\n });\n if (heartbeatService) {\n const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\n if (heartbeatsHeader) {\n headers.append('x-firebase-client', heartbeatsHeader);\n }\n }\n const body = {\n fid,\n authVersion: INTERNAL_AUTH_VERSION,\n appId: appConfig.appId,\n sdkVersion: PACKAGE_VERSION\n };\n const request = {\n method: 'POST',\n headers,\n body: JSON.stringify(body)\n };\n const response = await retryIfServerError(() => fetch(endpoint, request));\n if (response.ok) {\n const responseValue = await response.json();\n const registeredInstallationEntry = {\n fid: responseValue.fid || fid,\n registrationStatus: 2 /* RequestStatus.COMPLETED */,\n refreshToken: responseValue.refreshToken,\n authToken: extractAuthTokenInfoFromResponse(responseValue.authToken)\n };\n return registeredInstallationEntry;\n }\n else {\n throw await getErrorFromResponse('Create Installation', response);\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Returns a promise that resolves after given time passes. */\nfunction sleep(ms) {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction bufferToBase64UrlSafe(array) {\n const b64 = btoa(String.fromCharCode(...array));\n return b64.replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst VALID_FID_PATTERN = /^[cdef][\\w-]{21}$/;\nconst INVALID_FID = '';\n/**\n * Generates a new FID using random values from Web Crypto API.\n * Returns an empty string if FID generation fails for any reason.\n */\nfunction generateFid() {\n try {\n // A valid FID has exactly 22 base64 characters, which is 132 bits, or 16.5\n // bytes. our implementation generates a 17 byte array instead.\n const fidByteArray = new Uint8Array(17);\n const crypto = self.crypto || self.msCrypto;\n crypto.getRandomValues(fidByteArray);\n // Replace the first 4 random bits with the constant FID header of 0b0111.\n fidByteArray[0] = 0b01110000 + (fidByteArray[0] % 0b00010000);\n const fid = encode(fidByteArray);\n return VALID_FID_PATTERN.test(fid) ? fid : INVALID_FID;\n }\n catch (_a) {\n // FID generation errored\n return INVALID_FID;\n }\n}\n/** Converts a FID Uint8Array to a base64 string representation. */\nfunction encode(fidByteArray) {\n const b64String = bufferToBase64UrlSafe(fidByteArray);\n // Remove the 23rd character that was added because of the extra 4 bits at the\n // end of our 17 byte array, and the '=' padding.\n return b64String.substr(0, 22);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/** Returns a string key that can be used to identify the app. */\nfunction getKey(appConfig) {\n return `${appConfig.appName}!${appConfig.appId}`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst fidChangeCallbacks = new Map();\n/**\n * Calls the onIdChange callbacks with the new FID value, and broadcasts the\n * change to other tabs.\n */\nfunction fidChanged(appConfig, fid) {\n const key = getKey(appConfig);\n callFidChangeCallbacks(key, fid);\n broadcastFidChange(key, fid);\n}\nfunction addCallback(appConfig, callback) {\n // Open the broadcast channel if it's not already open,\n // to be able to listen to change events from other tabs.\n getBroadcastChannel();\n const key = getKey(appConfig);\n let callbackSet = fidChangeCallbacks.get(key);\n if (!callbackSet) {\n callbackSet = new Set();\n fidChangeCallbacks.set(key, callbackSet);\n }\n callbackSet.add(callback);\n}\nfunction removeCallback(appConfig, callback) {\n const key = getKey(appConfig);\n const callbackSet = fidChangeCallbacks.get(key);\n if (!callbackSet) {\n return;\n }\n callbackSet.delete(callback);\n if (callbackSet.size === 0) {\n fidChangeCallbacks.delete(key);\n }\n // Close broadcast channel if there are no more callbacks.\n closeBroadcastChannel();\n}\nfunction callFidChangeCallbacks(key, fid) {\n const callbacks = fidChangeCallbacks.get(key);\n if (!callbacks) {\n return;\n }\n for (const callback of callbacks) {\n callback(fid);\n }\n}\nfunction broadcastFidChange(key, fid) {\n const channel = getBroadcastChannel();\n if (channel) {\n channel.postMessage({ key, fid });\n }\n closeBroadcastChannel();\n}\nlet broadcastChannel = null;\n/** Opens and returns a BroadcastChannel if it is supported by the browser. */\nfunction getBroadcastChannel() {\n if (!broadcastChannel && 'BroadcastChannel' in self) {\n broadcastChannel = new BroadcastChannel('[Firebase] FID Change');\n broadcastChannel.onmessage = e => {\n callFidChangeCallbacks(e.data.key, e.data.fid);\n };\n }\n return broadcastChannel;\n}\nfunction closeBroadcastChannel() {\n if (fidChangeCallbacks.size === 0 && broadcastChannel) {\n broadcastChannel.close();\n broadcastChannel = null;\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DATABASE_NAME = 'firebase-installations-database';\nconst DATABASE_VERSION = 1;\nconst OBJECT_STORE_NAME = 'firebase-installations-store';\nlet dbPromise = null;\nfunction getDbPromise() {\n if (!dbPromise) {\n dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\n upgrade: (db, oldVersion) => {\n // We don't use 'break' in this switch statement, the fall-through\n // behavior is what we want, because if there are multiple versions between\n // the old version and the current version, we want ALL the migrations\n // that correspond to those versions to run, not only the last one.\n // eslint-disable-next-line default-case\n switch (oldVersion) {\n case 0:\n db.createObjectStore(OBJECT_STORE_NAME);\n }\n }\n });\n }\n return dbPromise;\n}\n/** Assigns or overwrites the record for the given key with the given value. */\nasync function set(appConfig, value) {\n const key = getKey(appConfig);\n const db = await getDbPromise();\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n const objectStore = tx.objectStore(OBJECT_STORE_NAME);\n const oldValue = (await objectStore.get(key));\n await objectStore.put(value, key);\n await tx.done;\n if (!oldValue || oldValue.fid !== value.fid) {\n fidChanged(appConfig, value.fid);\n }\n return value;\n}\n/** Removes record(s) from the objectStore that match the given key. */\nasync function remove(appConfig) {\n const key = getKey(appConfig);\n const db = await getDbPromise();\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n await tx.objectStore(OBJECT_STORE_NAME).delete(key);\n await tx.done;\n}\n/**\n * Atomically updates a record with the result of updateFn, which gets\n * called with the current value. If newValue is undefined, the record is\n * deleted instead.\n * @return Updated value\n */\nasync function update(appConfig, updateFn) {\n const key = getKey(appConfig);\n const db = await getDbPromise();\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n const store = tx.objectStore(OBJECT_STORE_NAME);\n const oldValue = (await store.get(key));\n const newValue = updateFn(oldValue);\n if (newValue === undefined) {\n await store.delete(key);\n }\n else {\n await store.put(newValue, key);\n }\n await tx.done;\n if (newValue && (!oldValue || oldValue.fid !== newValue.fid)) {\n fidChanged(appConfig, newValue.fid);\n }\n return newValue;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Updates and returns the InstallationEntry from the database.\n * Also triggers a registration request if it is necessary and possible.\n */\nasync function getInstallationEntry(installations) {\n let registrationPromise;\n const installationEntry = await update(installations.appConfig, oldEntry => {\n const installationEntry = updateOrCreateInstallationEntry(oldEntry);\n const entryWithPromise = triggerRegistrationIfNecessary(installations, installationEntry);\n registrationPromise = entryWithPromise.registrationPromise;\n return entryWithPromise.installationEntry;\n });\n if (installationEntry.fid === INVALID_FID) {\n // FID generation failed. Waiting for the FID from the server.\n return { installationEntry: await registrationPromise };\n }\n return {\n installationEntry,\n registrationPromise\n };\n}\n/**\n * Creates a new Installation Entry if one does not exist.\n * Also clears timed out pending requests.\n */\nfunction updateOrCreateInstallationEntry(oldEntry) {\n const entry = oldEntry || {\n fid: generateFid(),\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\n };\n return clearTimedOutRequest(entry);\n}\n/**\n * If the Firebase Installation is not registered yet, this will trigger the\n * registration and return an InProgressInstallationEntry.\n *\n * If registrationPromise does not exist, the installationEntry is guaranteed\n * to be registered.\n */\nfunction triggerRegistrationIfNecessary(installations, installationEntry) {\n if (installationEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\n if (!navigator.onLine) {\n // Registration required but app is offline.\n const registrationPromiseWithError = Promise.reject(ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */));\n return {\n installationEntry,\n registrationPromise: registrationPromiseWithError\n };\n }\n // Try registering. Change status to IN_PROGRESS.\n const inProgressEntry = {\n fid: installationEntry.fid,\n registrationStatus: 1 /* RequestStatus.IN_PROGRESS */,\n registrationTime: Date.now()\n };\n const registrationPromise = registerInstallation(installations, inProgressEntry);\n return { installationEntry: inProgressEntry, registrationPromise };\n }\n else if (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n return {\n installationEntry,\n registrationPromise: waitUntilFidRegistration(installations)\n };\n }\n else {\n return { installationEntry };\n }\n}\n/** This will be executed only once for each new Firebase Installation. */\nasync function registerInstallation(installations, installationEntry) {\n try {\n const registeredInstallationEntry = await createInstallationRequest(installations, installationEntry);\n return set(installations.appConfig, registeredInstallationEntry);\n }\n catch (e) {\n if (isServerError(e) && e.customData.serverCode === 409) {\n // Server returned a \"FID cannot be used\" error.\n // Generate a new ID next time.\n await remove(installations.appConfig);\n }\n else {\n // Registration failed. Set FID as not registered.\n await set(installations.appConfig, {\n fid: installationEntry.fid,\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\n });\n }\n throw e;\n }\n}\n/** Call if FID registration is pending in another request. */\nasync function waitUntilFidRegistration(installations) {\n // Unfortunately, there is no way of reliably observing when a value in\n // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\n // so we need to poll.\n let entry = await updateInstallationRequest(installations.appConfig);\n while (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n // createInstallation request still in progress.\n await sleep(100);\n entry = await updateInstallationRequest(installations.appConfig);\n }\n if (entry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\n // The request timed out or failed in a different call. Try again.\n const { installationEntry, registrationPromise } = await getInstallationEntry(installations);\n if (registrationPromise) {\n return registrationPromise;\n }\n else {\n // if there is no registrationPromise, entry is registered.\n return installationEntry;\n }\n }\n return entry;\n}\n/**\n * Called only if there is a CreateInstallation request in progress.\n *\n * Updates the InstallationEntry in the DB based on the status of the\n * CreateInstallation request.\n *\n * Returns the updated InstallationEntry.\n */\nfunction updateInstallationRequest(appConfig) {\n return update(appConfig, oldEntry => {\n if (!oldEntry) {\n throw ERROR_FACTORY.create(\"installation-not-found\" /* ErrorCode.INSTALLATION_NOT_FOUND */);\n }\n return clearTimedOutRequest(oldEntry);\n });\n}\nfunction clearTimedOutRequest(entry) {\n if (hasInstallationRequestTimedOut(entry)) {\n return {\n fid: entry.fid,\n registrationStatus: 0 /* RequestStatus.NOT_STARTED */\n };\n }\n return entry;\n}\nfunction hasInstallationRequestTimedOut(installationEntry) {\n return (installationEntry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\n installationEntry.registrationTime + PENDING_TIMEOUT_MS < Date.now());\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function generateAuthTokenRequest({ appConfig, heartbeatServiceProvider }, installationEntry) {\n const endpoint = getGenerateAuthTokenEndpoint(appConfig, installationEntry);\n const headers = getHeadersWithAuth(appConfig, installationEntry);\n // If heartbeat service exists, add the heartbeat string to the header.\n const heartbeatService = heartbeatServiceProvider.getImmediate({\n optional: true\n });\n if (heartbeatService) {\n const heartbeatsHeader = await heartbeatService.getHeartbeatsHeader();\n if (heartbeatsHeader) {\n headers.append('x-firebase-client', heartbeatsHeader);\n }\n }\n const body = {\n installation: {\n sdkVersion: PACKAGE_VERSION,\n appId: appConfig.appId\n }\n };\n const request = {\n method: 'POST',\n headers,\n body: JSON.stringify(body)\n };\n const response = await retryIfServerError(() => fetch(endpoint, request));\n if (response.ok) {\n const responseValue = await response.json();\n const completedAuthToken = extractAuthTokenInfoFromResponse(responseValue);\n return completedAuthToken;\n }\n else {\n throw await getErrorFromResponse('Generate Auth Token', response);\n }\n}\nfunction getGenerateAuthTokenEndpoint(appConfig, { fid }) {\n return `${getInstallationsEndpoint(appConfig)}/${fid}/authTokens:generate`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns a valid authentication token for the installation. Generates a new\n * token if one doesn't exist, is expired or about to expire.\n *\n * Should only be called if the Firebase Installation is registered.\n */\nasync function refreshAuthToken(installations, forceRefresh = false) {\n let tokenPromise;\n const entry = await update(installations.appConfig, oldEntry => {\n if (!isEntryRegistered(oldEntry)) {\n throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\n }\n const oldAuthToken = oldEntry.authToken;\n if (!forceRefresh && isAuthTokenValid(oldAuthToken)) {\n // There is a valid token in the DB.\n return oldEntry;\n }\n else if (oldAuthToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n // There already is a token request in progress.\n tokenPromise = waitUntilAuthTokenRequest(installations, forceRefresh);\n return oldEntry;\n }\n else {\n // No token or token expired.\n if (!navigator.onLine) {\n throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\n }\n const inProgressEntry = makeAuthTokenRequestInProgressEntry(oldEntry);\n tokenPromise = fetchAuthTokenFromServer(installations, inProgressEntry);\n return inProgressEntry;\n }\n });\n const authToken = tokenPromise\n ? await tokenPromise\n : entry.authToken;\n return authToken;\n}\n/**\n * Call only if FID is registered and Auth Token request is in progress.\n *\n * Waits until the current pending request finishes. If the request times out,\n * tries once in this thread as well.\n */\nasync function waitUntilAuthTokenRequest(installations, forceRefresh) {\n // Unfortunately, there is no way of reliably observing when a value in\n // IndexedDB changes (yet, see https://github.com/WICG/indexed-db-observers),\n // so we need to poll.\n let entry = await updateAuthTokenRequest(installations.appConfig);\n while (entry.authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n // generateAuthToken still in progress.\n await sleep(100);\n entry = await updateAuthTokenRequest(installations.appConfig);\n }\n const authToken = entry.authToken;\n if (authToken.requestStatus === 0 /* RequestStatus.NOT_STARTED */) {\n // The request timed out or failed in a different call. Try again.\n return refreshAuthToken(installations, forceRefresh);\n }\n else {\n return authToken;\n }\n}\n/**\n * Called only if there is a GenerateAuthToken request in progress.\n *\n * Updates the InstallationEntry in the DB based on the status of the\n * GenerateAuthToken request.\n *\n * Returns the updated InstallationEntry.\n */\nfunction updateAuthTokenRequest(appConfig) {\n return update(appConfig, oldEntry => {\n if (!isEntryRegistered(oldEntry)) {\n throw ERROR_FACTORY.create(\"not-registered\" /* ErrorCode.NOT_REGISTERED */);\n }\n const oldAuthToken = oldEntry.authToken;\n if (hasAuthTokenRequestTimedOut(oldAuthToken)) {\n return Object.assign(Object.assign({}, oldEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\n }\n return oldEntry;\n });\n}\nasync function fetchAuthTokenFromServer(installations, installationEntry) {\n try {\n const authToken = await generateAuthTokenRequest(installations, installationEntry);\n const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken });\n await set(installations.appConfig, updatedInstallationEntry);\n return authToken;\n }\n catch (e) {\n if (isServerError(e) &&\n (e.customData.serverCode === 401 || e.customData.serverCode === 404)) {\n // Server returned a \"FID not found\" or a \"Invalid authentication\" error.\n // Generate a new ID next time.\n await remove(installations.appConfig);\n }\n else {\n const updatedInstallationEntry = Object.assign(Object.assign({}, installationEntry), { authToken: { requestStatus: 0 /* RequestStatus.NOT_STARTED */ } });\n await set(installations.appConfig, updatedInstallationEntry);\n }\n throw e;\n }\n}\nfunction isEntryRegistered(installationEntry) {\n return (installationEntry !== undefined &&\n installationEntry.registrationStatus === 2 /* RequestStatus.COMPLETED */);\n}\nfunction isAuthTokenValid(authToken) {\n return (authToken.requestStatus === 2 /* RequestStatus.COMPLETED */ &&\n !isAuthTokenExpired(authToken));\n}\nfunction isAuthTokenExpired(authToken) {\n const now = Date.now();\n return (now < authToken.creationTime ||\n authToken.creationTime + authToken.expiresIn < now + TOKEN_EXPIRATION_BUFFER);\n}\n/** Returns an updated InstallationEntry with an InProgressAuthToken. */\nfunction makeAuthTokenRequestInProgressEntry(oldEntry) {\n const inProgressAuthToken = {\n requestStatus: 1 /* RequestStatus.IN_PROGRESS */,\n requestTime: Date.now()\n };\n return Object.assign(Object.assign({}, oldEntry), { authToken: inProgressAuthToken });\n}\nfunction hasAuthTokenRequestTimedOut(authToken) {\n return (authToken.requestStatus === 1 /* RequestStatus.IN_PROGRESS */ &&\n authToken.requestTime + PENDING_TIMEOUT_MS < Date.now());\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Creates a Firebase Installation if there isn't one for the app and\n * returns the Installation ID.\n * @param installations - The `Installations` instance.\n *\n * @public\n */\nasync function getId(installations) {\n const installationsImpl = installations;\n const { installationEntry, registrationPromise } = await getInstallationEntry(installationsImpl);\n if (registrationPromise) {\n registrationPromise.catch(console.error);\n }\n else {\n // If the installation is already registered, update the authentication\n // token if needed.\n refreshAuthToken(installationsImpl).catch(console.error);\n }\n return installationEntry.fid;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns a Firebase Installations auth token, identifying the current\n * Firebase Installation.\n * @param installations - The `Installations` instance.\n * @param forceRefresh - Force refresh regardless of token expiration.\n *\n * @public\n */\nasync function getToken(installations, forceRefresh = false) {\n const installationsImpl = installations;\n await completeInstallationRegistration(installationsImpl);\n // At this point we either have a Registered Installation in the DB, or we've\n // already thrown an error.\n const authToken = await refreshAuthToken(installationsImpl, forceRefresh);\n return authToken.token;\n}\nasync function completeInstallationRegistration(installations) {\n const { registrationPromise } = await getInstallationEntry(installations);\n if (registrationPromise) {\n // A createInstallation request is in progress. Wait until it finishes.\n await registrationPromise;\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function deleteInstallationRequest(appConfig, installationEntry) {\n const endpoint = getDeleteEndpoint(appConfig, installationEntry);\n const headers = getHeadersWithAuth(appConfig, installationEntry);\n const request = {\n method: 'DELETE',\n headers\n };\n const response = await retryIfServerError(() => fetch(endpoint, request));\n if (!response.ok) {\n throw await getErrorFromResponse('Delete Installation', response);\n }\n}\nfunction getDeleteEndpoint(appConfig, { fid }) {\n return `${getInstallationsEndpoint(appConfig)}/${fid}`;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Deletes the Firebase Installation and all associated data.\n * @param installations - The `Installations` instance.\n *\n * @public\n */\nasync function deleteInstallations(installations) {\n const { appConfig } = installations;\n const entry = await update(appConfig, oldEntry => {\n if (oldEntry && oldEntry.registrationStatus === 0 /* RequestStatus.NOT_STARTED */) {\n // Delete the unregistered entry without sending a deleteInstallation request.\n return undefined;\n }\n return oldEntry;\n });\n if (entry) {\n if (entry.registrationStatus === 1 /* RequestStatus.IN_PROGRESS */) {\n // Can't delete while trying to register.\n throw ERROR_FACTORY.create(\"delete-pending-registration\" /* ErrorCode.DELETE_PENDING_REGISTRATION */);\n }\n else if (entry.registrationStatus === 2 /* RequestStatus.COMPLETED */) {\n if (!navigator.onLine) {\n throw ERROR_FACTORY.create(\"app-offline\" /* ErrorCode.APP_OFFLINE */);\n }\n else {\n await deleteInstallationRequest(appConfig, entry);\n await remove(appConfig);\n }\n }\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Sets a new callback that will get called when Installation ID changes.\n * Returns an unsubscribe function that will remove the callback when called.\n * @param installations - The `Installations` instance.\n * @param callback - The callback function that is invoked when FID changes.\n * @returns A function that can be called to unsubscribe.\n *\n * @public\n */\nfunction onIdChange(installations, callback) {\n const { appConfig } = installations;\n addCallback(appConfig, callback);\n return () => {\n removeCallback(appConfig, callback);\n };\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Returns an instance of {@link Installations} associated with the given\n * {@link @firebase/app#FirebaseApp} instance.\n * @param app - The {@link @firebase/app#FirebaseApp} instance.\n *\n * @public\n */\nfunction getInstallations(app = getApp()) {\n const installationsImpl = _getProvider(app, 'installations').getImmediate();\n return installationsImpl;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction extractAppConfig(app) {\n if (!app || !app.options) {\n throw getMissingValueError('App Configuration');\n }\n if (!app.name) {\n throw getMissingValueError('App Name');\n }\n // Required app config keys\n const configKeys = [\n 'projectId',\n 'apiKey',\n 'appId'\n ];\n for (const keyName of configKeys) {\n if (!app.options[keyName]) {\n throw getMissingValueError(keyName);\n }\n }\n return {\n appName: app.name,\n projectId: app.options.projectId,\n apiKey: app.options.apiKey,\n appId: app.options.appId\n };\n}\nfunction getMissingValueError(valueName) {\n return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\n valueName\n });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst INSTALLATIONS_NAME = 'installations';\nconst INSTALLATIONS_NAME_INTERNAL = 'installations-internal';\nconst publicFactory = (container) => {\n const app = container.getProvider('app').getImmediate();\n // Throws if app isn't configured properly.\n const appConfig = extractAppConfig(app);\n const heartbeatServiceProvider = _getProvider(app, 'heartbeat');\n const installationsImpl = {\n app,\n appConfig,\n heartbeatServiceProvider,\n _delete: () => Promise.resolve()\n };\n return installationsImpl;\n};\nconst internalFactory = (container) => {\n const app = container.getProvider('app').getImmediate();\n // Internal FIS instance relies on public FIS instance.\n const installations = _getProvider(app, INSTALLATIONS_NAME).getImmediate();\n const installationsInternal = {\n getId: () => getId(installations),\n getToken: (forceRefresh) => getToken(installations, forceRefresh)\n };\n return installationsInternal;\n};\nfunction registerInstallations() {\n _registerComponent(new Component(INSTALLATIONS_NAME, publicFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\n _registerComponent(new Component(INSTALLATIONS_NAME_INTERNAL, internalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\n}\n\n/**\n * The Firebase Installations Web SDK.\n * This SDK does not work in a Node.js environment.\n *\n * @packageDocumentation\n */\nregisterInstallations();\nregisterVersion(name, version);\n// BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\nregisterVersion(name, version, 'esm2017');\n\nexport { deleteInstallations, getId, getInstallations, getToken, onIdChange };\n//# sourceMappingURL=index.esm2017.js.map\n","import '@firebase/installations';\nimport { Component } from '@firebase/component';\nimport { openDB, deleteDB } from 'idb';\nimport { ErrorFactory, validateIndexedDBOpenable, isIndexedDBAvailable, areCookiesEnabled, getModularInstance } from '@firebase/util';\nimport { _registerComponent, registerVersion, _getProvider, getApp } from '@firebase/app';\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\nconst DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\nconst DEFAULT_VAPID_KEY = 'BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4';\nconst ENDPOINT = 'https://fcmregistrations.googleapis.com/v1';\nconst CONSOLE_CAMPAIGN_ID = 'google.c.a.c_id';\nconst CONSOLE_CAMPAIGN_NAME = 'google.c.a.c_l';\nconst CONSOLE_CAMPAIGN_TIME = 'google.c.a.ts';\n/** Set to '1' if Analytics is enabled for the campaign */\nconst CONSOLE_CAMPAIGN_ANALYTICS_ENABLED = 'google.c.a.e';\nconst DEFAULT_REGISTRATION_TIMEOUT = 10000;\nvar MessageType$1;\n(function (MessageType) {\n MessageType[MessageType[\"DATA_MESSAGE\"] = 1] = \"DATA_MESSAGE\";\n MessageType[MessageType[\"DISPLAY_NOTIFICATION\"] = 3] = \"DISPLAY_NOTIFICATION\";\n})(MessageType$1 || (MessageType$1 = {}));\n\n/**\n * @license\n * Copyright 2018 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except\n * in compliance with the License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under the License\n * is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express\n * or implied. See the License for the specific language governing permissions and limitations under\n * the License.\n */\nvar MessageType;\n(function (MessageType) {\n MessageType[\"PUSH_RECEIVED\"] = \"push-received\";\n MessageType[\"NOTIFICATION_CLICKED\"] = \"notification-clicked\";\n})(MessageType || (MessageType = {}));\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction arrayToBase64(array) {\n const uint8Array = new Uint8Array(array);\n const base64String = btoa(String.fromCharCode(...uint8Array));\n return base64String.replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n}\nfunction base64ToArray(base64String) {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding)\n .replace(/\\-/g, '+')\n .replace(/_/g, '/');\n const rawData = atob(base64);\n const outputArray = new Uint8Array(rawData.length);\n for (let i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n return outputArray;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst OLD_DB_NAME = 'fcm_token_details_db';\n/**\n * The last DB version of 'fcm_token_details_db' was 4. This is one higher, so that the upgrade\n * callback is called for all versions of the old DB.\n */\nconst OLD_DB_VERSION = 5;\nconst OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\nasync function migrateOldDatabase(senderId) {\n if ('databases' in indexedDB) {\n // indexedDb.databases() is an IndexedDB v3 API and does not exist in all browsers. TODO: Remove\n // typecast when it lands in TS types.\n const databases = await indexedDB.databases();\n const dbNames = databases.map(db => db.name);\n if (!dbNames.includes(OLD_DB_NAME)) {\n // old DB didn't exist, no need to open.\n return null;\n }\n }\n let tokenDetails = null;\n const db = await openDB(OLD_DB_NAME, OLD_DB_VERSION, {\n upgrade: async (db, oldVersion, newVersion, upgradeTransaction) => {\n var _a;\n if (oldVersion < 2) {\n // Database too old, skip migration.\n return;\n }\n if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\n // Database did not exist. Nothing to do.\n return;\n }\n const objectStore = upgradeTransaction.objectStore(OLD_OBJECT_STORE_NAME);\n const value = await objectStore.index('fcmSenderId').get(senderId);\n await objectStore.clear();\n if (!value) {\n // No entry in the database, nothing to migrate.\n return;\n }\n if (oldVersion === 2) {\n const oldDetails = value;\n if (!oldDetails.auth || !oldDetails.p256dh || !oldDetails.endpoint) {\n return;\n }\n tokenDetails = {\n token: oldDetails.fcmToken,\n createTime: (_a = oldDetails.createTime) !== null && _a !== void 0 ? _a : Date.now(),\n subscriptionOptions: {\n auth: oldDetails.auth,\n p256dh: oldDetails.p256dh,\n endpoint: oldDetails.endpoint,\n swScope: oldDetails.swScope,\n vapidKey: typeof oldDetails.vapidKey === 'string'\n ? oldDetails.vapidKey\n : arrayToBase64(oldDetails.vapidKey)\n }\n };\n }\n else if (oldVersion === 3) {\n const oldDetails = value;\n tokenDetails = {\n token: oldDetails.fcmToken,\n createTime: oldDetails.createTime,\n subscriptionOptions: {\n auth: arrayToBase64(oldDetails.auth),\n p256dh: arrayToBase64(oldDetails.p256dh),\n endpoint: oldDetails.endpoint,\n swScope: oldDetails.swScope,\n vapidKey: arrayToBase64(oldDetails.vapidKey)\n }\n };\n }\n else if (oldVersion === 4) {\n const oldDetails = value;\n tokenDetails = {\n token: oldDetails.fcmToken,\n createTime: oldDetails.createTime,\n subscriptionOptions: {\n auth: arrayToBase64(oldDetails.auth),\n p256dh: arrayToBase64(oldDetails.p256dh),\n endpoint: oldDetails.endpoint,\n swScope: oldDetails.swScope,\n vapidKey: arrayToBase64(oldDetails.vapidKey)\n }\n };\n }\n }\n });\n db.close();\n // Delete all old databases.\n await deleteDB(OLD_DB_NAME);\n await deleteDB('fcm_vapid_details_db');\n await deleteDB('undefined');\n return checkTokenDetails(tokenDetails) ? tokenDetails : null;\n}\nfunction checkTokenDetails(tokenDetails) {\n if (!tokenDetails || !tokenDetails.subscriptionOptions) {\n return false;\n }\n const { subscriptionOptions } = tokenDetails;\n return (typeof tokenDetails.createTime === 'number' &&\n tokenDetails.createTime > 0 &&\n typeof tokenDetails.token === 'string' &&\n tokenDetails.token.length > 0 &&\n typeof subscriptionOptions.auth === 'string' &&\n subscriptionOptions.auth.length > 0 &&\n typeof subscriptionOptions.p256dh === 'string' &&\n subscriptionOptions.p256dh.length > 0 &&\n typeof subscriptionOptions.endpoint === 'string' &&\n subscriptionOptions.endpoint.length > 0 &&\n typeof subscriptionOptions.swScope === 'string' &&\n subscriptionOptions.swScope.length > 0 &&\n typeof subscriptionOptions.vapidKey === 'string' &&\n subscriptionOptions.vapidKey.length > 0);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// Exported for tests.\nconst DATABASE_NAME = 'firebase-messaging-database';\nconst DATABASE_VERSION = 1;\nconst OBJECT_STORE_NAME = 'firebase-messaging-store';\nlet dbPromise = null;\nfunction getDbPromise() {\n if (!dbPromise) {\n dbPromise = openDB(DATABASE_NAME, DATABASE_VERSION, {\n upgrade: (upgradeDb, oldVersion) => {\n // We don't use 'break' in this switch statement, the fall-through behavior is what we want,\n // because if there are multiple versions between the old version and the current version, we\n // want ALL the migrations that correspond to those versions to run, not only the last one.\n // eslint-disable-next-line default-case\n switch (oldVersion) {\n case 0:\n upgradeDb.createObjectStore(OBJECT_STORE_NAME);\n }\n }\n });\n }\n return dbPromise;\n}\n/** Gets record(s) from the objectStore that match the given key. */\nasync function dbGet(firebaseDependencies) {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n const tokenDetails = (await db\n .transaction(OBJECT_STORE_NAME)\n .objectStore(OBJECT_STORE_NAME)\n .get(key));\n if (tokenDetails) {\n return tokenDetails;\n }\n else {\n // Check if there is a tokenDetails object in the old DB.\n const oldTokenDetails = await migrateOldDatabase(firebaseDependencies.appConfig.senderId);\n if (oldTokenDetails) {\n await dbSet(firebaseDependencies, oldTokenDetails);\n return oldTokenDetails;\n }\n }\n}\n/** Assigns or overwrites the record for the given key with the given value. */\nasync function dbSet(firebaseDependencies, tokenDetails) {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n await tx.objectStore(OBJECT_STORE_NAME).put(tokenDetails, key);\n await tx.done;\n return tokenDetails;\n}\n/** Removes record(s) from the objectStore that match the given key. */\nasync function dbRemove(firebaseDependencies) {\n const key = getKey(firebaseDependencies);\n const db = await getDbPromise();\n const tx = db.transaction(OBJECT_STORE_NAME, 'readwrite');\n await tx.objectStore(OBJECT_STORE_NAME).delete(key);\n await tx.done;\n}\nfunction getKey({ appConfig }) {\n return appConfig.appId;\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst ERROR_MAP = {\n [\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */]: 'Missing App configuration value: \"{$valueName}\"',\n [\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */]: 'This method is available in a Window context.',\n [\"only-available-in-sw\" /* ErrorCode.AVAILABLE_IN_SW */]: 'This method is available in a service worker context.',\n [\"permission-default\" /* ErrorCode.PERMISSION_DEFAULT */]: 'The notification permission was not granted and dismissed instead.',\n [\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */]: 'The notification permission was not granted and blocked instead.',\n [\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */]: \"This browser doesn't support the API's required to use the Firebase SDK.\",\n [\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */]: \"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)\",\n [\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */]: 'We are unable to register the default service worker. {$browserErrorMessage}',\n [\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */]: 'A problem occurred while subscribing the user to FCM: {$errorInfo}',\n [\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */]: 'FCM returned no token when subscribing the user to push.',\n [\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */]: 'A problem occurred while unsubscribing the ' +\n 'user from FCM: {$errorInfo}',\n [\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */]: 'A problem occurred while updating the user from FCM: {$errorInfo}',\n [\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */]: 'FCM returned no token when updating the user to push.',\n [\"use-sw-after-get-token\" /* ErrorCode.USE_SW_AFTER_GET_TOKEN */]: 'The useServiceWorker() method may only be called once and must be ' +\n 'called before calling getToken() to ensure your service worker is used.',\n [\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */]: 'The input to useServiceWorker() must be a ServiceWorkerRegistration.',\n [\"invalid-bg-handler\" /* ErrorCode.INVALID_BG_HANDLER */]: 'The input to setBackgroundMessageHandler() must be a function.',\n [\"invalid-vapid-key\" /* ErrorCode.INVALID_VAPID_KEY */]: 'The public VAPID key must be a string.',\n [\"use-vapid-key-after-get-token\" /* ErrorCode.USE_VAPID_KEY_AFTER_GET_TOKEN */]: 'The usePublicVapidKey() method may only be called once and must be ' +\n 'called before calling getToken() to ensure your VAPID key is used.'\n};\nconst ERROR_FACTORY = new ErrorFactory('messaging', 'Messaging', ERROR_MAP);\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function requestGetToken(firebaseDependencies, subscriptionOptions) {\n const headers = await getHeaders(firebaseDependencies);\n const body = getBody(subscriptionOptions);\n const subscribeOptions = {\n method: 'POST',\n headers,\n body: JSON.stringify(body)\n };\n let responseData;\n try {\n const response = await fetch(getEndpoint(firebaseDependencies.appConfig), subscribeOptions);\n responseData = await response.json();\n }\n catch (err) {\n throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\n });\n }\n if (responseData.error) {\n const message = responseData.error.message;\n throw ERROR_FACTORY.create(\"token-subscribe-failed\" /* ErrorCode.TOKEN_SUBSCRIBE_FAILED */, {\n errorInfo: message\n });\n }\n if (!responseData.token) {\n throw ERROR_FACTORY.create(\"token-subscribe-no-token\" /* ErrorCode.TOKEN_SUBSCRIBE_NO_TOKEN */);\n }\n return responseData.token;\n}\nasync function requestUpdateToken(firebaseDependencies, tokenDetails) {\n const headers = await getHeaders(firebaseDependencies);\n const body = getBody(tokenDetails.subscriptionOptions);\n const updateOptions = {\n method: 'PATCH',\n headers,\n body: JSON.stringify(body)\n };\n let responseData;\n try {\n const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${tokenDetails.token}`, updateOptions);\n responseData = await response.json();\n }\n catch (err) {\n throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\n });\n }\n if (responseData.error) {\n const message = responseData.error.message;\n throw ERROR_FACTORY.create(\"token-update-failed\" /* ErrorCode.TOKEN_UPDATE_FAILED */, {\n errorInfo: message\n });\n }\n if (!responseData.token) {\n throw ERROR_FACTORY.create(\"token-update-no-token\" /* ErrorCode.TOKEN_UPDATE_NO_TOKEN */);\n }\n return responseData.token;\n}\nasync function requestDeleteToken(firebaseDependencies, token) {\n const headers = await getHeaders(firebaseDependencies);\n const unsubscribeOptions = {\n method: 'DELETE',\n headers\n };\n try {\n const response = await fetch(`${getEndpoint(firebaseDependencies.appConfig)}/${token}`, unsubscribeOptions);\n const responseData = await response.json();\n if (responseData.error) {\n const message = responseData.error.message;\n throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\n errorInfo: message\n });\n }\n }\n catch (err) {\n throw ERROR_FACTORY.create(\"token-unsubscribe-failed\" /* ErrorCode.TOKEN_UNSUBSCRIBE_FAILED */, {\n errorInfo: err === null || err === void 0 ? void 0 : err.toString()\n });\n }\n}\nfunction getEndpoint({ projectId }) {\n return `${ENDPOINT}/projects/${projectId}/registrations`;\n}\nasync function getHeaders({ appConfig, installations }) {\n const authToken = await installations.getToken();\n return new Headers({\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n 'x-goog-api-key': appConfig.apiKey,\n 'x-goog-firebase-installations-auth': `FIS ${authToken}`\n });\n}\nfunction getBody({ p256dh, auth, endpoint, vapidKey }) {\n const body = {\n web: {\n endpoint,\n auth,\n p256dh\n }\n };\n if (vapidKey !== DEFAULT_VAPID_KEY) {\n body.web.applicationPubKey = vapidKey;\n }\n return body;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// UpdateRegistration will be called once every week.\nconst TOKEN_EXPIRATION_MS = 7 * 24 * 60 * 60 * 1000; // 7 days\nasync function getTokenInternal(messaging) {\n const pushSubscription = await getPushSubscription(messaging.swRegistration, messaging.vapidKey);\n const subscriptionOptions = {\n vapidKey: messaging.vapidKey,\n swScope: messaging.swRegistration.scope,\n endpoint: pushSubscription.endpoint,\n auth: arrayToBase64(pushSubscription.getKey('auth')),\n p256dh: arrayToBase64(pushSubscription.getKey('p256dh'))\n };\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\n if (!tokenDetails) {\n // No token, get a new one.\n return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\n }\n else if (!isTokenValid(tokenDetails.subscriptionOptions, subscriptionOptions)) {\n // Invalid token, get a new one.\n try {\n await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\n }\n catch (e) {\n // Suppress errors because of #2364\n console.warn(e);\n }\n return getNewToken(messaging.firebaseDependencies, subscriptionOptions);\n }\n else if (Date.now() >= tokenDetails.createTime + TOKEN_EXPIRATION_MS) {\n // Weekly token refresh\n return updateToken(messaging, {\n token: tokenDetails.token,\n createTime: Date.now(),\n subscriptionOptions\n });\n }\n else {\n // Valid token, nothing to do.\n return tokenDetails.token;\n }\n}\n/**\n * This method deletes the token from the database, unsubscribes the token from FCM, and unregisters\n * the push subscription if it exists.\n */\nasync function deleteTokenInternal(messaging) {\n const tokenDetails = await dbGet(messaging.firebaseDependencies);\n if (tokenDetails) {\n await requestDeleteToken(messaging.firebaseDependencies, tokenDetails.token);\n await dbRemove(messaging.firebaseDependencies);\n }\n // Unsubscribe from the push subscription.\n const pushSubscription = await messaging.swRegistration.pushManager.getSubscription();\n if (pushSubscription) {\n return pushSubscription.unsubscribe();\n }\n // If there's no SW, consider it a success.\n return true;\n}\nasync function updateToken(messaging, tokenDetails) {\n try {\n const updatedToken = await requestUpdateToken(messaging.firebaseDependencies, tokenDetails);\n const updatedTokenDetails = Object.assign(Object.assign({}, tokenDetails), { token: updatedToken, createTime: Date.now() });\n await dbSet(messaging.firebaseDependencies, updatedTokenDetails);\n return updatedToken;\n }\n catch (e) {\n throw e;\n }\n}\nasync function getNewToken(firebaseDependencies, subscriptionOptions) {\n const token = await requestGetToken(firebaseDependencies, subscriptionOptions);\n const tokenDetails = {\n token,\n createTime: Date.now(),\n subscriptionOptions\n };\n await dbSet(firebaseDependencies, tokenDetails);\n return tokenDetails.token;\n}\n/**\n * Gets a PushSubscription for the current user.\n */\nasync function getPushSubscription(swRegistration, vapidKey) {\n const subscription = await swRegistration.pushManager.getSubscription();\n if (subscription) {\n return subscription;\n }\n return swRegistration.pushManager.subscribe({\n userVisibleOnly: true,\n // Chrome <= 75 doesn't support base64-encoded VAPID key. For backward compatibility, VAPID key\n // submitted to pushManager#subscribe must be of type Uint8Array.\n applicationServerKey: base64ToArray(vapidKey)\n });\n}\n/**\n * Checks if the saved tokenDetails object matches the configuration provided.\n */\nfunction isTokenValid(dbOptions, currentOptions) {\n const isVapidKeyEqual = currentOptions.vapidKey === dbOptions.vapidKey;\n const isEndpointEqual = currentOptions.endpoint === dbOptions.endpoint;\n const isAuthEqual = currentOptions.auth === dbOptions.auth;\n const isP256dhEqual = currentOptions.p256dh === dbOptions.p256dh;\n return isVapidKeyEqual && isEndpointEqual && isAuthEqual && isP256dhEqual;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction externalizePayload(internalPayload) {\n const payload = {\n from: internalPayload.from,\n // eslint-disable-next-line camelcase\n collapseKey: internalPayload.collapse_key,\n // eslint-disable-next-line camelcase\n messageId: internalPayload.fcmMessageId\n };\n propagateNotificationPayload(payload, internalPayload);\n propagateDataPayload(payload, internalPayload);\n propagateFcmOptions(payload, internalPayload);\n return payload;\n}\nfunction propagateNotificationPayload(payload, messagePayloadInternal) {\n if (!messagePayloadInternal.notification) {\n return;\n }\n payload.notification = {};\n const title = messagePayloadInternal.notification.title;\n if (!!title) {\n payload.notification.title = title;\n }\n const body = messagePayloadInternal.notification.body;\n if (!!body) {\n payload.notification.body = body;\n }\n const image = messagePayloadInternal.notification.image;\n if (!!image) {\n payload.notification.image = image;\n }\n const icon = messagePayloadInternal.notification.icon;\n if (!!icon) {\n payload.notification.icon = icon;\n }\n}\nfunction propagateDataPayload(payload, messagePayloadInternal) {\n if (!messagePayloadInternal.data) {\n return;\n }\n payload.data = messagePayloadInternal.data;\n}\nfunction propagateFcmOptions(payload, messagePayloadInternal) {\n var _a, _b, _c, _d, _e;\n // fcmOptions.link value is written into notification.click_action. see more in b/232072111\n if (!messagePayloadInternal.fcmOptions &&\n !((_a = messagePayloadInternal.notification) === null || _a === void 0 ? void 0 : _a.click_action)) {\n return;\n }\n payload.fcmOptions = {};\n const link = (_c = (_b = messagePayloadInternal.fcmOptions) === null || _b === void 0 ? void 0 : _b.link) !== null && _c !== void 0 ? _c : (_d = messagePayloadInternal.notification) === null || _d === void 0 ? void 0 : _d.click_action;\n if (!!link) {\n payload.fcmOptions.link = link;\n }\n // eslint-disable-next-line camelcase\n const analyticsLabel = (_e = messagePayloadInternal.fcmOptions) === null || _e === void 0 ? void 0 : _e.analytics_label;\n if (!!analyticsLabel) {\n payload.fcmOptions.analyticsLabel = analyticsLabel;\n }\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction isConsoleMessage(data) {\n // This message has a campaign ID, meaning it was sent using the Firebase Console.\n return typeof data === 'object' && !!data && CONSOLE_CAMPAIGN_ID in data;\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n_mergeStrings('AzSCbw63g1R0nCw85jG8', 'Iaya3yLKwmgvh7cF0q4');\nfunction _mergeStrings(s1, s2) {\n const resultArray = [];\n for (let i = 0; i < s1.length; i++) {\n resultArray.push(s1.charAt(i));\n if (i < s2.length) {\n resultArray.push(s2.charAt(i));\n }\n }\n return resultArray.join('');\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction extractAppConfig(app) {\n if (!app || !app.options) {\n throw getMissingValueError('App Configuration Object');\n }\n if (!app.name) {\n throw getMissingValueError('App Name');\n }\n // Required app config keys\n const configKeys = [\n 'projectId',\n 'apiKey',\n 'appId',\n 'messagingSenderId'\n ];\n const { options } = app;\n for (const keyName of configKeys) {\n if (!options[keyName]) {\n throw getMissingValueError(keyName);\n }\n }\n return {\n appName: app.name,\n projectId: options.projectId,\n apiKey: options.apiKey,\n appId: options.appId,\n senderId: options.messagingSenderId\n };\n}\nfunction getMissingValueError(valueName) {\n return ERROR_FACTORY.create(\"missing-app-config-values\" /* ErrorCode.MISSING_APP_CONFIG_VALUES */, {\n valueName\n });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nclass MessagingService {\n constructor(app, installations, analyticsProvider) {\n // logging is only done with end user consent. Default to false.\n this.deliveryMetricsExportedToBigQueryEnabled = false;\n this.onBackgroundMessageHandler = null;\n this.onMessageHandler = null;\n this.logEvents = [];\n this.isLogServiceStarted = false;\n const appConfig = extractAppConfig(app);\n this.firebaseDependencies = {\n app,\n appConfig,\n installations,\n analyticsProvider\n };\n }\n _delete() {\n return Promise.resolve();\n }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function registerDefaultSw(messaging) {\n try {\n messaging.swRegistration = await navigator.serviceWorker.register(DEFAULT_SW_PATH, {\n scope: DEFAULT_SW_SCOPE\n });\n // The timing when browser updates sw when sw has an update is unreliable from experiment. It\n // leads to version conflict when the SDK upgrades to a newer version in the main page, but sw\n // is stuck with the old version. For example,\n // https://github.com/firebase/firebase-js-sdk/issues/2590 The following line reliably updates\n // sw if there was an update.\n messaging.swRegistration.update().catch(() => {\n /* it is non blocking and we don't care if it failed */\n });\n await waitForRegistrationActive(messaging.swRegistration);\n }\n catch (e) {\n throw ERROR_FACTORY.create(\"failed-service-worker-registration\" /* ErrorCode.FAILED_DEFAULT_REGISTRATION */, {\n browserErrorMessage: e === null || e === void 0 ? void 0 : e.message\n });\n }\n}\n/**\n * Waits for registration to become active. MDN documentation claims that\n * a service worker registration should be ready to use after awaiting\n * navigator.serviceWorker.register() but that doesn't seem to be the case in\n * practice, causing the SDK to throw errors when calling\n * swRegistration.pushManager.subscribe() too soon after register(). The only\n * solution seems to be waiting for the service worker registration `state`\n * to become \"active\".\n */\nasync function waitForRegistrationActive(registration) {\n return new Promise((resolve, reject) => {\n const rejectTimeout = setTimeout(() => reject(new Error(`Service worker not registered after ${DEFAULT_REGISTRATION_TIMEOUT} ms`)), DEFAULT_REGISTRATION_TIMEOUT);\n const incomingSw = registration.installing || registration.waiting;\n if (registration.active) {\n clearTimeout(rejectTimeout);\n resolve();\n }\n else if (incomingSw) {\n incomingSw.onstatechange = ev => {\n var _a;\n if (((_a = ev.target) === null || _a === void 0 ? void 0 : _a.state) === 'activated') {\n incomingSw.onstatechange = null;\n clearTimeout(rejectTimeout);\n resolve();\n }\n };\n }\n else {\n clearTimeout(rejectTimeout);\n reject(new Error('No incoming service worker found.'));\n }\n });\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function updateSwReg(messaging, swRegistration) {\n if (!swRegistration && !messaging.swRegistration) {\n await registerDefaultSw(messaging);\n }\n if (!swRegistration && !!messaging.swRegistration) {\n return;\n }\n if (!(swRegistration instanceof ServiceWorkerRegistration)) {\n throw ERROR_FACTORY.create(\"invalid-sw-registration\" /* ErrorCode.INVALID_SW_REGISTRATION */);\n }\n messaging.swRegistration = swRegistration;\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function updateVapidKey(messaging, vapidKey) {\n if (!!vapidKey) {\n messaging.vapidKey = vapidKey;\n }\n else if (!messaging.vapidKey) {\n messaging.vapidKey = DEFAULT_VAPID_KEY;\n }\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function getToken$1(messaging, options) {\n if (!navigator) {\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\n }\n if (Notification.permission === 'default') {\n await Notification.requestPermission();\n }\n if (Notification.permission !== 'granted') {\n throw ERROR_FACTORY.create(\"permission-blocked\" /* ErrorCode.PERMISSION_BLOCKED */);\n }\n await updateVapidKey(messaging, options === null || options === void 0 ? void 0 : options.vapidKey);\n await updateSwReg(messaging, options === null || options === void 0 ? void 0 : options.serviceWorkerRegistration);\n return getTokenInternal(messaging);\n}\n\n/**\n * @license\n * Copyright 2019 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function logToScion(messaging, messageType, data) {\n const eventType = getEventType(messageType);\n const analytics = await messaging.firebaseDependencies.analyticsProvider.get();\n analytics.logEvent(eventType, {\n /* eslint-disable camelcase */\n message_id: data[CONSOLE_CAMPAIGN_ID],\n message_name: data[CONSOLE_CAMPAIGN_NAME],\n message_time: data[CONSOLE_CAMPAIGN_TIME],\n message_device_time: Math.floor(Date.now() / 1000)\n /* eslint-enable camelcase */\n });\n}\nfunction getEventType(messageType) {\n switch (messageType) {\n case MessageType.NOTIFICATION_CLICKED:\n return 'notification_open';\n case MessageType.PUSH_RECEIVED:\n return 'notification_foreground';\n default:\n throw new Error();\n }\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function messageEventListener(messaging, event) {\n const internalPayload = event.data;\n if (!internalPayload.isFirebaseMessaging) {\n return;\n }\n if (messaging.onMessageHandler &&\n internalPayload.messageType === MessageType.PUSH_RECEIVED) {\n if (typeof messaging.onMessageHandler === 'function') {\n messaging.onMessageHandler(externalizePayload(internalPayload));\n }\n else {\n messaging.onMessageHandler.next(externalizePayload(internalPayload));\n }\n }\n // Log to Scion if applicable\n const dataPayload = internalPayload.data;\n if (isConsoleMessage(dataPayload) &&\n dataPayload[CONSOLE_CAMPAIGN_ANALYTICS_ENABLED] === '1') {\n await logToScion(messaging, internalPayload.messageType, dataPayload);\n }\n}\n\nconst name = \"@firebase/messaging\";\nconst version = \"0.12.17\";\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst WindowMessagingFactory = (container) => {\n const messaging = new MessagingService(container.getProvider('app').getImmediate(), container.getProvider('installations-internal').getImmediate(), container.getProvider('analytics-internal'));\n navigator.serviceWorker.addEventListener('message', e => messageEventListener(messaging, e));\n return messaging;\n};\nconst WindowMessagingInternalFactory = (container) => {\n const messaging = container\n .getProvider('messaging')\n .getImmediate();\n const messagingInternal = {\n getToken: (options) => getToken$1(messaging, options)\n };\n return messagingInternal;\n};\nfunction registerMessagingInWindow() {\n _registerComponent(new Component('messaging', WindowMessagingFactory, \"PUBLIC\" /* ComponentType.PUBLIC */));\n _registerComponent(new Component('messaging-internal', WindowMessagingInternalFactory, \"PRIVATE\" /* ComponentType.PRIVATE */));\n registerVersion(name, version);\n // BUILD_TARGET will be replaced by values like esm2017, cjs2017, etc during the compilation\n registerVersion(name, version, 'esm2017');\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Checks if all required APIs exist in the browser.\n * @returns a Promise that resolves to a boolean.\n *\n * @public\n */\nasync function isWindowSupported() {\n try {\n // This throws if open() is unsupported, so adding it to the conditional\n // statement below can cause an uncaught error.\n await validateIndexedDBOpenable();\n }\n catch (e) {\n return false;\n }\n // firebase-js-sdk/issues/2393 reveals that idb#open in Safari iframe and Firefox private browsing\n // might be prohibited to run. In these contexts, an error would be thrown during the messaging\n // instantiating phase, informing the developers to import/call isSupported for special handling.\n return (typeof window !== 'undefined' &&\n isIndexedDBAvailable() &&\n areCookiesEnabled() &&\n 'serviceWorker' in navigator &&\n 'PushManager' in window &&\n 'Notification' in window &&\n 'fetch' in window &&\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\n PushSubscription.prototype.hasOwnProperty('getKey'));\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nasync function deleteToken$1(messaging) {\n if (!navigator) {\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\n }\n if (!messaging.swRegistration) {\n await registerDefaultSw(messaging);\n }\n return deleteTokenInternal(messaging);\n}\n\n/**\n * @license\n * Copyright 2020 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nfunction onMessage$1(messaging, nextOrObserver) {\n if (!navigator) {\n throw ERROR_FACTORY.create(\"only-available-in-window\" /* ErrorCode.AVAILABLE_IN_WINDOW */);\n }\n messaging.onMessageHandler = nextOrObserver;\n return () => {\n messaging.onMessageHandler = null;\n };\n}\n\n/**\n * @license\n * Copyright 2017 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Retrieves a Firebase Cloud Messaging instance.\n *\n * @returns The Firebase Cloud Messaging instance associated with the provided firebase app.\n *\n * @public\n */\nfunction getMessagingInWindow(app = getApp()) {\n // Conscious decision to make this async check non-blocking during the messaging instance\n // initialization phase for performance consideration. An error would be thrown latter for\n // developer's information. Developers can then choose to import and call `isSupported` for\n // special handling.\n isWindowSupported().then(isSupported => {\n // If `isWindowSupported()` resolved, but returned false.\n if (!isSupported) {\n throw ERROR_FACTORY.create(\"unsupported-browser\" /* ErrorCode.UNSUPPORTED_BROWSER */);\n }\n }, _ => {\n // If `isWindowSupported()` rejected.\n throw ERROR_FACTORY.create(\"indexed-db-unsupported\" /* ErrorCode.INDEXED_DB_UNSUPPORTED */);\n });\n return _getProvider(getModularInstance(app), 'messaging').getImmediate();\n}\n/**\n * Subscribes the {@link Messaging} instance to push notifications. Returns a Firebase Cloud\n * Messaging registration token that can be used to send push messages to that {@link Messaging}\n * instance.\n *\n * If notification permission isn't already granted, this method asks the user for permission. The\n * returned promise rejects if the user does not allow the app to show notifications.\n *\n * @param messaging - The {@link Messaging} instance.\n * @param options - Provides an optional vapid key and an optional service worker registration.\n *\n * @returns The promise resolves with an FCM registration token.\n *\n * @public\n */\nasync function getToken(messaging, options) {\n messaging = getModularInstance(messaging);\n return getToken$1(messaging, options);\n}\n/**\n * Deletes the registration token associated with this {@link Messaging} instance and unsubscribes\n * the {@link Messaging} instance from the push subscription.\n *\n * @param messaging - The {@link Messaging} instance.\n *\n * @returns The promise resolves when the token has been successfully deleted.\n *\n * @public\n */\nfunction deleteToken(messaging) {\n messaging = getModularInstance(messaging);\n return deleteToken$1(messaging);\n}\n/**\n * When a push message is received and the user is currently on a page for your origin, the\n * message is passed to the page and an `onMessage()` event is dispatched with the payload of\n * the push message.\n *\n *\n * @param messaging - The {@link Messaging} instance.\n * @param nextOrObserver - This function, or observer object with `next` defined,\n * is called when a message is received and the user is currently viewing your page.\n * @returns To stop listening for messages execute this returned function.\n *\n * @public\n */\nfunction onMessage(messaging, nextOrObserver) {\n messaging = getModularInstance(messaging);\n return onMessage$1(messaging, nextOrObserver);\n}\n\n/**\n * The Firebase Cloud Messaging Web SDK.\n * This SDK does not work in a Node.js environment.\n *\n * @packageDocumentation\n */\nregisterMessagingInWindow();\n\nexport { deleteToken, getMessagingInWindow as getMessaging, getToken, isWindowSupported as isSupported, onMessage };\n//# sourceMappingURL=index.esm2017.js.map\n","import React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class Alert extends React.PureComponent {\n render() {\n return ( Supports conversion of user keyboard input to formatted text: Supports conversion of user keyboard input to formatted text: Supports conversion of user keyboard input to formatted text: Supports conversion of user keyboard input to formatted text:.\n el = UploadingImage;\n }\n\n return el;\n}\n\n// Additional processing of image data.\nfunction handleVideoData(el, data, attr) {\n if (!data) {\n attr.src = 'img/broken_video.png';\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n };\n return el;\n }\n attr.className = 'inline-image';\n const dim = fitImageSize(data.width, data.height,\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\n {dstWidth: NO_DIMENSIONS_VIDEO, dstHeight: NO_DIMENSIONS_VIDEO};\n attr.style = {\n width: dim.dstWidth + 'px',\n height: dim.dstHeight + 'px',\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\n minWidth: dim.dstWidth + 'px',\n minHeight: dim.dstHeight + 'px'\n };\n if (!Drafty.isProcessing(data)) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\n attr.alt = data.name;\n if (data.ref || data.val) {\n attr.onClick = this.onVideoPreview;\n attr.loading = 'lazy';\n }\n el = InlineVideo;\n } else {\n // Use custom element instead of
.\n el = UploadingImage;\n }\n\n return el;\n}\n\n// Converts Drafty object into a one-line preview. 'this' is set by the caller.\n// 'this' must contain:\n// formatMessage: this.props.intl.formatMessage\n// messages: formatjs messages defined with defineMessages.\nexport function previewFormatter(style, data, values, key) {\n if (!style) {\n // Unformatted.\n return values;\n }\n\n let el = Drafty.tagName(style);\n const attr = { key: key };\n switch (style) {\n case 'AU':\n // Voicemail as '[mic] 0:00'.\n el = React.Fragment;\n values = [mic, ' ', secondsToTime(data.duration/1000)];\n break;\n case 'BR':\n // Replace new line with a space.\n el = React.Fragment;\n values = [' '];\n break;\n case 'HL':\n // Make highlight less prominent in preview.\n attr.className = 'highlight preview';\n break;\n case 'LN':\n case 'MN':\n // Disable links in previews.\n el = 'span';\n break;\n case 'IM':\n // Replace image with '[icon] Image'.\n el = React.Fragment;\n values = [photo, ' ', this.formatMessage(messages.drafty_image)];\n break;\n case 'BN':\n el = 'span';\n attr.className = 'flat-button faux';\n break;\n case 'FM':\n el = React.Fragment;\n values = [dashboard,\n this.formatMessage(messages.drafty_form)].concat(' ', values || []);\n break;\n case 'RW':\n el = React.Fragment;\n break;\n case 'EX':\n if (data) {\n if (data.mime == 'application/json') {\n // Ignore JSON attachments: they are form response payloads.\n return null;\n }\n // Clear payload.\n delete data.val;\n delete data.ref;\n }\n el = React.Fragment;\n values = [attachment, ' ', this.formatMessage(messages.drafty_attachment)];\n break;\n case 'VC':\n el = CallStatus;\n if (data) {\n attr.callState = data.state;\n attr.incoming = data.incoming;\n attr.duration = data.duration;\n }\n values = null;\n break;\n case 'QQ':\n case 'HD':\n el = null;\n values = null;\n break;\n case 'VD':\n // Replace image with '[icon] Video'.\n el = React.Fragment;\n values = [play_circle_outline, ' ', this.formatMessage(messages.drafty_video)];\n break;\n default:\n if (!el) {\n // Unknown element.\n el = React.Fragment;\n values = [extension, ' ', this.formatMessage(messages.drafty_unknown)];\n }\n break;\n }\n if (!el) {\n return values;\n }\n return React.createElement(el, attr, values);\n};\n\n// Converts Drafty object into a quoted reply; 'this' is set by the caller.\nfunction inlineImageAttr(attr, data) {\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n maxWidth: IMAGE_THUMBNAIL_DIM + 'px',\n maxHeight: IMAGE_THUMBNAIL_DIM + 'px',\n }\n attr.className = 'inline-image';\n attr.alt = this.formatMessage(messages.drafty_image);\n if (!data) {\n attr.src = 'img/broken_image.png';\n } else {\n attr.src = attr.src || 'img/broken_image.png';\n }\n attr.title = attr.alt;\n return attr;\n}\n\n// Converts Drafty object into a quoted reply; 'this' is set by the caller.\nfunction inlineVideoAttr(attr, data) {\n const dim = fitImageSize(data.width, data.height, VIDEO_THUMBNAIL_WIDTH, IMAGE_THUMBNAIL_DIM);\n attr.style = {\n width: dim.width + 'px',\n height: dim.height + 'px',\n maxWidth: VIDEO_THUMBNAIL_WIDTH + 'px',\n maxHeight: IMAGE_THUMBNAIL_DIM + 'px',\n }\n attr.className = 'inline-image';\n attr.alt = this.formatMessage(messages.drafty_video);\n attr.title = attr.alt;\n if (!data) {\n attr.src = 'img/broken_video.png';\n } else {\n attr.src = attr.src || 'img/broken_video.png';\n }\n return attr;\n}\n\n// Displays a portion of Drafty within 'QQ' quotes. 'this' is set by the caller.\n// 'this' must contain:\n// formatMessage: this.props.intl.formatMessage\n// messages: formatjs messages defined with defineMessages.\n// authorizeURL: this.props.tinode.authorizeURL\n// onQuoteClick: this.handleQuoteClick (optional)\nfunction quoteFormatter(style, data, values, key) {\n if (['BR', 'EX', 'IM', 'MN', 'VD'].includes(style)) {\n let el = Drafty.tagName(style);\n let attr = Drafty.attrValue(style, data) || {};\n attr.key = key;\n switch(style) {\n case 'BR':\n values = null;\n break;\n case 'IM':\n attr = inlineImageAttr.call(this, attr, data);\n values = [React.createElement('img', attr, null), ' ', attr.alt];\n el = React.Fragment;\n // Fragment attributes.\n attr = {key: key};\n break;\n case 'VD':\n attr = inlineVideoAttr.call(this, attr, data);\n values = [React.createElement('img', attr, null), ' ', attr.alt];\n el = React.Fragment;\n // Fragment attributes.\n attr = {key: key};\n break;\n case 'MN':\n el = 'span';\n attr.className = 'mention'\n if (data) {\n attr.className += ' ' + idToColorClass(data.val, false, true);\n }\n break;\n case 'EX':\n let fname;\n if (data) {\n if (data.mime == 'application/json') {\n // Ignore JSON attachments: they are form response payloads.\n return null;\n }\n fname = data.name;\n // Clear payload.\n delete data.val;\n delete data.ref;\n }\n el = React.Fragment;\n values = [attachment,\n shortenFileName(fname, 16) || this.formatMessage(messages.drafty_attachment)];\n break;\n }\n return React.createElement(el, attr, values);\n }\n return previewFormatter.call(this, style, data, values, key);\n}\n\n// Create image thumbnail suitable for inclusion in a quote.\nfunction quoteImageOrVideo(data, isVideo) {\n let promise;\n let bits, ref, mime;\n if (isVideo) {\n bits = data.preview;\n mime = data.premime || 'image/jpeg';\n ref = data.preref;\n } else {\n bits = data.val;\n mime = data.mime;\n ref = data.ref;\n }\n // Get the blob from the image data.\n if (bits) {\n const blob = base64ToBlob(bits, mime);\n if (!blob) {\n throw new Error(\"Invalid image\");\n }\n promise = Promise.resolve(blob);\n } else if (ref) {\n promise = fetch(this.authorizeURL(sanitizeUrlForMime(ref, 'image')))\n .then(evt => {\n if (evt.ok) {\n return evt.blob();\n } else {\n throw new Error(`Image fetch unsuccessful: ${evt.status} ${evt.statusText}`);\n }\n });\n } else {\n throw new Error(\"Missing image data\");\n }\n\n // Scale the blob.\n return promise\n .then(blob => {\n // If it's an image, cut the square from the center of the image and shrink it.\n // If it's a video, allow it to be rectantular.\n return imageScaled(blob, isVideo ? VIDEO_THUMBNAIL_WIDTH : IMAGE_THUMBNAIL_DIM, IMAGE_THUMBNAIL_DIM, -1, !isVideo)\n }).then(scaled => {\n if (isVideo) {\n data.premime = scaled.mime;\n } else {\n data.mime = scaled.mime;\n }\n data.size = scaled.blob.size;\n data.width = scaled.width;\n data.height = scaled.height;\n delete data.ref;\n delete data.preref;\n // Keeping the original file name, if provided: ex.data.name;\n\n data.src = URL.createObjectURL(scaled.blob);\n return blobToBase64(scaled.blob);\n }).then(b64 => {\n if (isVideo) {\n data.preview = b64.bits;\n } else {\n data.val = b64.bits;\n }\n return data;\n }).catch(err => {\n delete data.val;\n delete data.preview;\n delete data.src;\n data.width = IMAGE_THUMBNAIL_DIM;\n data.height = IMAGE_THUMBNAIL_DIM;\n // Rethrow.\n throw err;\n });\n}\n\n// Create a preview of a reply.\nexport function replyFormatter(style, data, values, key, stack) {\n if (style == 'IM' || style == 'VD') {\n const isImage = style == 'IM';\n const attr = isImage ? inlineImageAttr.call(this, {key: key}, data) :\n inlineVideoAttr.call(this, {key: key}, data);\n\n let loadedPromise;\n try {\n loadedPromise = cancelablePromise(quoteImageOrVideo.call(this, data, style == 'VD'));\n } catch (error) {\n console.warn(\"Failed to quote image:\", error.message);\n loadedPromise = cancelablePromise(error);\n }\n attr.whenDone = loadedPromise;\n values = [React.createElement(LazyImage, attr, null), ' ', attr.alt];\n return React.createElement(React.Fragment, {key: key}, values);\n } else if (style == 'QQ') {\n if (stack.includes('QQ')) {\n // Quote inside quote when forwarding a message.\n return React.createElement('span', {key: key},\n [format_quote, ' ']);\n }\n\n const attr = Drafty.attrValue('QQ', data) || {};\n attr.key = key;\n attr.className = 'reply-quote'\n return React.createElement(Drafty.tagName('QQ'), attr, values);\n }\n return quoteFormatter.call(this, style, data, values, key);\n}\n","import { KNOWN_HOSTS, DEFAULT_HOST } from '../config.js';\n\n// Detect server address from the URL\nexport function detectServerAddress() {\n let host = DEFAULT_HOST;\n if (typeof window.location == 'object') {\n if (window.location.protocol == 'file:' || window.location.hostname == 'localhost') {\n host = KNOWN_HOSTS.local;\n } else if (window.location.hostname) {\n host = window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n }\n }\n return host;\n}\n\n// Detect if the page is served over HTTPS.\nexport function isSecureConnection() {\n if (typeof window.location == 'object') {\n return window.location.protocol == 'https:';\n }\n return false;\n}\n\nexport function isLocalHost() {\n if (typeof window.location == 'object') {\n return window.location.hostname == 'localhost';\n }\n return false;\n}\n","// Helper functions for storing values in localStorage.\n// By default localStorage can store only strings, not objects or other types.\n\nexport default class LocalStorageUtil {\n // Replace old object with the new one.\n static setObject(key, value) {\n localStorage.setItem(key, JSON.stringify(value));\n }\n\n // Get stored object.\n static getObject(key) {\n const value = localStorage.getItem(key);\n return value && JSON.parse(value);\n }\n\n // Partially or wholly update stored object.\n static updateObject(key, value) {\n const oldVal = this.getObject(key);\n this.setObject(key, Object.assign(oldVal || {}, value));\n }\n\n // Just a wrapper.\n static removeItem(key) {\n localStorage.removeItem(key);\n }\n}\n","// Utility class for hash navigation.\n\nexport default class HashNavigation {\n // Parse hash as in http://www.example.com/path#hash as if it were\n // path and arguments.\n static parseUrlHash(hash) {\n // Split 'path/?args' into 'path/' and 'args', path -> parts[0], args->path[1].\n const parts = hash.split('?', 2);\n const params = {};\n let path = [];\n if (parts[0]) {\n path = parts[0].replace('#', '').split('/');\n }\n if (parts[1]) {\n parts[1].split('&').forEach((arg) => {\n // Can't use split() because the value may contain '='.\n const eq = arg.indexOf('=');\n if (eq > 0) {\n params[arg.slice(0, eq)] = decodeURIComponent(arg.slice(eq + 1));\n }\n });\n }\n return {path: path, params: params};\n }\n\n static navigateTo(url) {\n window.location.hash = url;\n }\n\n static composeUrlHash(path, params) {\n let url = path.join('/');\n const args = [];\n for (const key in params) {\n if (params.hasOwnProperty(key)) {\n if (params[key] !== undefined) {\n args.push(key + '=' + encodeURIComponent(params[key]));\n }\n }\n }\n if (args.length > 0) {\n url += '?' + args.join('&');\n }\n return url;\n }\n\n static addUrlParam(hash, key, value) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.params[key] = value;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static removeUrlParam(hash, key) {\n const parsed = HashNavigation.parseUrlHash(hash);\n delete parsed.params[key];\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlSidePanel(hash, sidepanel) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.path[0] = sidepanel;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlInfoPanel(hash, infopanel) {\n const parsed = HashNavigation.parseUrlHash(hash);\n if (infopanel) {\n parsed.params.info = infopanel;\n } else {\n delete parsed.params.info;\n }\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlTopic(hash, topic) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.path[1] = topic;\n // Close InfoView on topic change.\n delete parsed.params.info;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n}\n","// Short representation of time in the past.\nexport function shortDateFormat(then, locale) {\n locale = locale || window.navigator.userLanguage || window.navigator.language;\n const now = new Date();\n if (then.getFullYear() == now.getFullYear()) {\n // Same year.\n if (then.getMonth() == now.getMonth() && then.getDate() == now.getDate()) {\n // Same month and day, show time only.\n return then.toLocaleTimeString(locale, {hour12: false, hour: '2-digit', minute: '2-digit'});\n }\n // Different month and/or day, show month day, time.\n return then.toLocaleDateString(locale,\n {hour12: false, month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit'});\n }\n // Different year: just show the date.\n return then.toLocaleDateString(locale, {year: 'numeric', month: 'short', day: 'numeric'});\n}\n\n// Representation a date relative to now.\nexport function relativeDateFormat(then, locale) {\n locale = locale || window.navigator.userLanguage || window.navigator.language;\n const now = new Date();\n const thenDays = Math.floor((then.getTime() - then.getTimezoneOffset() * 60_000) / 86_400_000);\n const nowDays = Math.floor((now.getTime() - now.getTimezoneOffset() * 60_000) / 86_400_000);\n const diff = thenDays - nowDays;\n if (Math.abs(diff) < 2) {\n // Today or yesterday.\n return new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).format(diff, 'day')\n }\n // More than two days: just show the date.\n return new Intl.DateTimeFormat(locale).format(then);\n}\n\n// Convert seconds to [hours:]minutes:seconds, i.e. 156 sec -> 2:36, 3756 sec -> 1:02:36.\n// If
fixedMins is true, then minutes are represented by at least two digits.\nexport function secondsToTime(seconds, fixedMin) {\n if (typeof seconds != 'number') {\n return '';\n }\n\n let min = (Math.floor(seconds / 60) | 0) % 60;\n let hours = Math.floor(seconds / 3600) | 0;\n\n if (fixedMin || hours > 0) {\n min = min < 10 ? `0${min}` : min;\n }\n let sec = (seconds | 0) % 60;\n sec = sec < 10 ? `0${sec}` : sec;\n if (hours == 0) {\n return `${min}:${sec}`;\n }\n return `${hours}:${min}:${sec}`;\n}\n\n// Convert a number of bytes to human-readable format.\nexport function bytesToHumanSize(bytes) {\n if (!bytes || bytes == 0) {\n return '0 Bytes';\n }\n\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const bucket = Math.min(Math.floor(Math.log2(bytes) / 10) | 0, sizes.length-1);\n const count = bytes / Math.pow(1024, bucket);\n const round = bucket > 0 ? (count < 3 ? 2 : (count < 30 ? 1 : 0)) : 0;\n return count.toFixed(round) + ' ' + sizes[bucket];\n}\n\n// Shorten a file name to be under maxLength by clipping out the middle.\nexport function shortenFileName(filename, maxLength) {\n if (typeof filename != 'string') {\n return filename;\n }\n return filename.length > maxLength ?\n filename.slice(0, maxLength/2 - 1) + '…' + filename.slice(1 - maxLength/2) : filename;\n}\n\n// Get 32 bit integer hash value for a string. Ideally it should produce the same value\n// as Java's String#hash().\nfunction stringToColorHash(value) {\n let hash = 0;\n value = '' + value;\n for (let i = 0; i < value.length; i++) {\n hash = ((hash << 5) - hash) + value.charCodeAt(i);\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n}\n\n// User avatar letter color id.\nexport function letterTileColorId(userId) {\n return Math.abs(stringToColorHash(userId)) % 16;\n}\n\n// Converts user or topic ID to a CSS color class. Ideally it should produce the same color value as Java version.\n// params:\n// - {string} id: user or topic ID\n// - {boolean} light: light or dark version of the color.\n// - {boolean} fg: foreground (text) or background color.\nexport function idToColorClass(id, light, fg) {\n return (light ? 'lt-' : 'dk-') + (fg ? 'fg-' : 'bg-') + letterTileColorId(id);\n}\n\n// Takes ISO Alpha-2 country code, like 'US' and converts it to a flag emoji.\nexport function flagEmoji(countryCode) {\n const codePoints = countryCode\n .toUpperCase()\n .split('')\n .map(char => 0x1F1A5 + char.charCodeAt());\n return String.fromCodePoint(...codePoints);\n}\n","// Odds and ends\n\nimport { Tinode } from 'tinode-sdk';\n\n// Make shortcut icon appear with a green dot + show unread count in title.\nexport function updateFavicon(count) {\n const oldIcon = document.getElementById('shortcut-icon');\n const head = document.head || document.getElementsByTagName('head')[0];\n const newIcon = document.createElement('link');\n newIcon.type = 'image/png';\n newIcon.id = 'shortcut-icon';\n newIcon.rel = 'shortcut icon';\n newIcon.href = 'img/logo32x32' + (count > 0 ? 'a' : '') + '.png';\n if (oldIcon) {\n head.removeChild(oldIcon);\n }\n head.appendChild(newIcon);\n\n document.title = (count > 0 ? '('+count+') ' : '') + 'Tinode';\n}\n\n// Create theCard which represents user's or topic's \"public\" info.\nexport function theCard(fn, imageUrl, imageMimeType, note) {\n let card = null;\n fn = fn && fn.trim();\n note = note && note.trim();\n\n if (fn) {\n card = {\n fn: fn\n };\n }\n\n if (typeof note == 'string') {\n card = card || {};\n card.note = note ? note : Tinode.DEL_CHAR;\n }\n\n if (imageUrl) {\n card = card || {};\n let mimeType = imageMimeType;\n // Is this a data URL \"data:[ field: the URL must be a relative URL or\n// have http:, https:, blob: or data: scheme.\n// In case of data: scheme, the URL must must be of the right MIME type such as 'data:{mimeMajor}/XXXX;base64,'.\nexport function sanitizeUrlForMime(url, mimeMajor) {\n if (!url) {\n return null;\n }\n\n const sanitizedUrl = sanitizeUrl(url);\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Is this a data: URL of the appropriate mime type?\n const re = new RegExp(`data:${mimeMajor}\\/[a-z0-9.-]+;base64,`, 'i');\n if (re.test(url.trim())) {\n return url;\n }\n\n return null;\n}\n\n// Append query parameter 'asatt=1' to the URL.\n// It will cause Tinode server to add 'Content-Disposition: attachment' header when serving it.\n// The URL is a string. The URL here is always absolute.\nexport function urlAsAttachment(url) {\n // TODO: check if URL is local or remote, i.e. compare to window.location.origin.\n /*\n if (typeof window.location == 'object') {\n if (!url.startsWith(window.location.origin)) {\n return url;\n }\n }\n */\n // Check if the URL is a data or blob. Do not alter such URLs.\n if (url.startsWith('data:') || url.startsWith('blob:')) {\n return url;\n }\n\n // Split URL into host+path, query, fragment.\n let query = '', fragment = '';\n const idxF = url.indexOf('#');\n if (idxF > 0) {\n fragment = url.substring(idxF+1);\n url = url.substring(0, idxF);\n }\n const idxQ = url.indexOf('?');\n if (idxQ > 0) {\n query = url.substring(idxQ+1);\n url = url.substring(0, idxQ);\n }\n // Add parameter and reassemble.\n const params = new URLSearchParams(query);\n params.append('asatt', '1');\n return `${url}?${params.toString()}` + (fragment ? `#${fragment}` : '');\n}\n\n// Given message's received status, return name and color of a delivery indicator icon.\nexport function deliveryMarker(received) {\n switch (received) {\n case Tinode.MESSAGE_STATUS_SENDING:\n return { name: 'access_time' }; // watch face\n case Tinode.MESSAGE_STATUS_FAILED:\n case Tinode.MESSAGE_STATUS_FATAL:\n return { name: 'warning', color: 'danger-color' }; // yellow icon /!\\\n case Tinode.MESSAGE_STATUS_SENT:\n return { name: 'done' }; // checkmark\n case Tinode.MESSAGE_STATUS_RECEIVED:\n return { name: 'done_all' }; // double checkmark\n case Tinode.MESSAGE_STATUS_READ:\n return { name: 'done_all', color: 'blue' }; // blue double checkmark\n }\n return null;\n}\n\n// Wraps a promise to make it cancelable.\n// The parameter can be either a promise or an error. If it's an error, the wrapped promise is\n// created in a rejected state.\nexport function cancelablePromise(promise) {\n let hasCanceled = false;\n\n const wrappedPromise = promise instanceof Error ?\n Promise.reject(promise) :\n new Promise((resolve, reject) => {\n promise.then(\n result => hasCanceled ? reject({isCanceled: true}) : resolve(result),\n error => hasCanceled ? reject({isCanceled: true}) : reject(error)\n );\n });\n\n return {\n promise: wrappedPromise,\n cancel() {\n hasCanceled = true;\n },\n };\n};\n\n// Clips string to the specified length.\nexport function clipStr(str, length) {\n return str && str.substring(0, length);\n}\n","// This is a generated file. Don't edit.\n\nexport const PACKAGE_VERSION = \"0.23.1\";\n","// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport CheckBox from '../widgets/checkbox.jsx';\n\nexport default class EditAccountView extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleCheckboxClick = this.handleCheckboxClick.bind(this);\n }\n\n handleCheckboxClick(what, checked) {\n if (what == 'sound') {\n this.props.onToggleMessageSounds(checked);\n } else if (what == 'alert') {\n this.props.onTogglePushNotifications(checked);\n } else if (what == 'incognito') {\n this.props.onToggleIncognitoMode(checked);\n }\n }\n\n render() {\n return (\n
: null}\n {messageNodes}\n
\n :\n this.props.readOnly && this.props.uid ?\n
\n {contactNodes}\n
\n :\n null\n }\n
: null}\n \n {menu}\n
\n );\n }\n}\n\nexport default injectIntl(ContextMenu);\n","// Image zoom and crop widget.\n\nimport React from 'react';\n\nconst DEFAULT_MAX_ZOOM = 2.5;\n\nexport default class Cropper extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n // Coordinates of the top left corner of the image in container coordinates.\n panX: 0,\n panY: 0,\n // Origin of the zoom in image coordinates.\n originX: 0,\n originY: 0,\n // Zoom scale.\n zoom: 1,\n // Zoom min and max.\n minZoom: 0,\n maxZoom: DEFAULT_MAX_ZOOM,\n };\n\n // References to DOM elements for hooking up events and getting screen dimensions.\n // The transparent element which captures mouse moves (moves with the image).\n this.overlay = React.createRef();\n // The image cutout window or view port (static).\n this.cutout = React.createRef();\n // Scaled and translated image preview.\n this.preview = React.createRef();\n // The main container (static).\n this.boundingBox = React.createRef();\n\n // The original image width and height before any scaling.\n this.imageWidth = 0;\n this.imageHeight = 0;\n\n // Mouse position when dragging.\n this.mouseX = 0\n this.mouseY = 0;\n // Length of the previous mouse move when dragging.\n this.prevDistance = 0;\n\n // Bounding rectangles of static elements.\n this.cutoutRect = {};\n this.bBoxRect = {};\n // Center of the bounding box.\n this.originX = 0;\n this.originY = 0;\n\n this.initScaling = this.initScaling.bind(this);\n this.onZoom = this.onZoom.bind(this);\n this.handleZoom = this.handleZoom.bind(this);\n this.mouseDown = this.mouseDown.bind(this);\n this.mouseUp = this.mouseUp.bind(this);\n this.mouseMove = this.mouseMove.bind(this);\n this.mouseTouch = this.mouseTouch.bind(this);\n this.positionAll = this.positionAll.bind(this);\n this.translate = this.translate.bind(this);\n }\n\n componentDidMount() {\n this.overlay.current.addEventListener('mousedown', this.mouseDown, { passive: true });\n this.overlay.current.addEventListener('touchstart', this.mouseDown, { passive: true });\n\n // The rectangle position is in viewport coordinates.\n this.bBoxRect = this.boundingBox.current.getBoundingClientRect();\n // Center of the bounding box in container coordinates.\n this.originX = this.bBoxRect.width / 2;\n this.originY = this.bBoxRect.height / 2;\n\n // The rectangle position is in viewport coordinates.\n this.cutoutRect = this.cutout.current.getBoundingClientRect();\n }\n\n componentWillUnmount() {\n this.overlay.current.removeEventListener('mousedown', this.mouseDown);\n this.overlay.current.removeEventListener('touchstart', this.mouseDown);\n }\n\n // Position all elements.\n positionAll(panX, panY, zoom) {\n // Zoom origin in image preview coordinates.\n this.setState({\n panX: panX,\n panY: panY,\n zoom: zoom,\n originX: this.originX - panX,\n originY: this.originY - panY,\n });\n\n // Pass cut out coordinates to caller.\n const left = (this.originX - panX) * zoom - this.originX;\n const top = (this.originY - panY) * zoom - this.originY;\n this.props.onChange(\n (left + this.cutoutRect.left - this.bBoxRect.left) / zoom,\n (top + this.cutoutRect.top - this.bBoxRect.top) / zoom,\n this.cutoutRect.width / zoom,\n this.cutoutRect.height / zoom,\n zoom);\n }\n\n // Check if new location is within the limits.\n static checkBound(currPan, img, cutout, delta) {\n let nextDiff = Math.min(0, cutout[0] - img[0] - delta, img[1] - cutout[1] + delta);\n if (nextDiff == 0) {\n // Cutout is completely within the image.\n currPan += delta;\n } else if (Math.min(0, cutout[0] - img[0], img[1] - cutout[1]) < nextDiff) {\n // Cutout is outside of the range but closer to the bound.\n currPan += delta;\n }\n return currPan;\n }\n\n initScaling() {\n // Initialize components.\n const imgRect = this.preview.current.getBoundingClientRect();\n\n this.imageWidth = imgRect.width;\n this.imageHeight = imgRect.height;\n\n // Set zoom slider's min and max values. Make sure the scaled image cannot be smaller than the cutout.\n const minZoom = Math.max(this.cutoutRect.width / imgRect.width, this.cutoutRect.height / imgRect.height);\n this.setState({\n minZoom: minZoom,\n maxZoom: Math.max(DEFAULT_MAX_ZOOM, minZoom + 1)\n });\n\n // Initial zoom level fills the bounding box at the smallest image dimension and overflows the largest, i.e. \"fill\" not \"fit\".\n const zoom = Math.max(this.bBoxRect.width / imgRect.width, this.bBoxRect.height / imgRect.height);\n // Converting from viewport coordinates to container, then panning.\n const panX = this.cutoutRect.left - this.bBoxRect.left -\n (imgRect.width - this.cutoutRect.width) / 2;\n const panY = this.cutoutRect.top - this.bBoxRect.top -\n (imgRect.height - this.cutoutRect.height) / 2;\n\n this.positionAll(panX, panY, zoom);\n }\n\n onZoom(e) {\n this.handleZoom(e.target.value);\n }\n\n handleZoom(zoom) {\n let panX = this.state.panX;\n let panY = this.state.panY;\n\n // Ensure that the image at the new zoom is not outside of the cutout boundaries.\n // Calculate image coordinates at the new zoom.\n const imgLeft = this.originX - (this.originX - panX) * zoom;\n const imgRight = imgLeft + this.imageWidth * zoom;\n // Cutout in the same coordinates as the image.\n const coLeft = this.cutoutRect.left - this.bBoxRect.left;\n const coRight = coLeft + this.cutoutRect.width;\n if (coLeft < imgLeft) {\n panX -= imgLeft - coLeft;\n } else if (coRight > imgRight) {\n panX += coRight - imgRight;\n }\n const imgTop = this.originY - (this.originY - panY) * zoom;\n const imgBottom = imgTop + this.imageHeight * zoom;\n const coTop = this.cutoutRect.top - this.bBoxRect.top;\n const coBottom = coTop + this.cutoutRect.height;\n if (coTop < imgTop) {\n panY -= imgTop - coTop;\n } else if (coBottom > imgBottom) {\n panY += coBottom - imgBottom;\n }\n\n this.positionAll(panX, panY, zoom);\n }\n\n mouseDown(e) {\n if (e.touches) {\n this.mouseX = e.touches[0].pageX;\n this.mouseY = e.touches[0].pageY;\n } else {\n this.mouseX = e.pageX;\n this.mouseY = e.pageY;\n }\n\n window.addEventListener('mousemove', this.mouseMove, { passive: false });\n window.addEventListener('touchmove', this.mouseTouch, { passive: false });\n window.addEventListener('mouseup', this.mouseUp, { passive: true });\n window.addEventListener('touchend', this.mouseUp, { passive: true });\n // Disable text selection in the entire document.\n document.body.style['userSelect'] = 'none';\n }\n\n // Perform image panning.\n translate(pageX, pageY) {\n const dX = pageX - this.mouseX;\n const dY = pageY - this.mouseY;\n\n this.mouseX = pageX;\n this.mouseY = pageY;\n\n // Make sure the image is within the cutout window.\n const imgRect = this.preview.current.getBoundingClientRect();\n\n // Check if the new position is within the boundaries, and if not if it's closer to them.\n let panX = Cropper.checkBound(this.state.panX, [imgRect.left, imgRect.right],\n [this.cutoutRect.left, this.cutoutRect.right], dX);\n let panY = Cropper.checkBound(this.state.panY, [imgRect.top, imgRect.bottom],\n [this.cutoutRect.top, this.cutoutRect.bottom], dY);\n\n this.positionAll(panX, panY, this.state.zoom);\n }\n\n // Image panning.\n mouseMove(e) {\n e.preventDefault();\n this.translate(e.pageX, e.pageY);\n }\n\n mouseTouch(e) {\n e.preventDefault();\n\n if (e.touches.length == 1) {\n this.translate(e.touches[0].pageX, e.touches[0].pageY);\n return;\n }\n\n // Image zooming by pinching.\n const [touch0, touch1] = e.touches;\n const distance = Math.sqrt((touch0.pageX - touch1.pageX) * (touch0.pageX - touch1.pageX) +\n (touch0.pageY - touch1.pageY) * (touch0.pageY - touch1.pageY));\n\n if (!this.prevDistance) {\n this.prevDistance = distance / this.state.zoom;\n }\n\n let scale = (distance / this.prevDistance);\n this.handleZoom(Math.max(this.minZoom, Math.min(this.maxZoom, scale)));\n }\n\n mouseUp(e) {\n window.removeEventListener('mousemove', this.mouseMove);\n window.removeEventListener('touchmove', this.mouseTouch);\n window.removeEventListener('mouseup', this.mouseUp);\n window.removeEventListener('touchend', this.mouseUp);\n // Re-enable text selection.\n document.body.style['userSelect'] = '';\n\n this.positionAll(this.state.panX, this.state.panY, this.state.zoom);\n }\n\n render() {\n // transform3d: position and scale.\n const t3d = `translate3d(${this.state.panX}px, ${this.state.panY}px, 0) scale(${this.state.zoom})`;\n // transformOrigin: zoom origin.\n const orig = `${this.state.originX}px ${this.state.originY}px`;\n\n // Overlay position and size are exactly equal to the position and size of the transformed image\n // except it uses different coordinates.\n const overlay = {\n top: `${this.originY - this.state.originY * this.state.zoom}px`,\n left: `${this.originX - this.state.originX * this.state.zoom}px`,\n width: `${this.imageWidth * this.state.zoom}px`,\n height: `${this.imageHeight * this.state.zoom}px`\n };\n return (\n \n \n \n
\n
}\n {e.target.onerror = null; e.target.src=\"../img/broken_image.png\"}} />;\n } else {\n avatar = null;\n }\n return avatar;\n }\n}\n","import React from 'react';\n\nexport default class LoadSpinner extends React.PureComponent {\n render() {\n const className = 'load-spinner-box' + (this.props.large ? ' large' : '')\n + (this.props.clear ? ' clear' : '') + (this.props.centered ? ' centered' : '');\n return (this.props.show ?\n
\n \n \n );\n }\n\n return (\n {names[c]} \n {skip.indexOf(c) < 0 ?\n {this.props.compare ? \n : null}\n
: null}\n \n \n {this.props.compare ?\n
\n \n :\n null}\n \n {items}\n {this.props.modeTitle} \n {this.props.compareTitle} \n
\n
\n \n .\n el = UploadingImage;\n }\n\n return el;\n}\n\n// Additional processing of image data.\nfunction handleVideoData(el, data, attr) {\n if (!data) {\n attr.src = 'img/broken_video.png';\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n };\n return el;\n }\n attr.className = 'inline-image';\n const dim = fitImageSize(data.width, data.height,\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\n {dstWidth: NO_DIMENSIONS_VIDEO, dstHeight: NO_DIMENSIONS_VIDEO};\n attr.style = {\n width: dim.dstWidth + 'px',\n height: dim.dstHeight + 'px',\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\n minWidth: dim.dstWidth + 'px',\n minHeight: dim.dstHeight + 'px'\n };\n if (!Drafty.isProcessing(data)) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\n attr.alt = data.name;\n if (data.ref || data.val) {\n attr.onClick = this.onVideoPreview;\n attr.loading = 'lazy';\n }\n el = InlineVideo;\n } else {\n // Use custom element instead of
.\n el = UploadingImage;\n }\n\n return el;\n}\n\n// Converts Drafty object into a one-line preview. 'this' is set by the caller.\n// 'this' must contain:\n// formatMessage: this.props.intl.formatMessage\n// messages: formatjs messages defined with defineMessages.\nexport function previewFormatter(style, data, values, key) {\n if (!style) {\n // Unformatted.\n return values;\n }\n\n let el = Drafty.tagName(style);\n const attr = { key: key };\n switch (style) {\n case 'AU':\n // Voicemail as '[mic] 0:00'.\n el = React.Fragment;\n values = [mic, ' ', secondsToTime(data.duration/1000)];\n break;\n case 'BR':\n // Replace new line with a space.\n el = React.Fragment;\n values = [' '];\n break;\n case 'HL':\n // Make highlight less prominent in preview.\n attr.className = 'highlight preview';\n break;\n case 'LN':\n case 'MN':\n // Disable links in previews.\n el = 'span';\n break;\n case 'IM':\n // Replace image with '[icon] Image'.\n el = React.Fragment;\n values = [photo, ' ', this.formatMessage(messages.drafty_image)];\n break;\n case 'BN':\n el = 'span';\n attr.className = 'flat-button faux';\n break;\n case 'FM':\n el = React.Fragment;\n values = [dashboard,\n this.formatMessage(messages.drafty_form)].concat(' ', values || []);\n break;\n case 'RW':\n el = React.Fragment;\n break;\n case 'EX':\n if (data) {\n if (data.mime == 'application/json') {\n // Ignore JSON attachments: they are form response payloads.\n return null;\n }\n // Clear payload.\n delete data.val;\n delete data.ref;\n }\n el = React.Fragment;\n values = [attachment, ' ', this.formatMessage(messages.drafty_attachment)];\n break;\n case 'VC':\n el = CallStatus;\n if (data) {\n attr.callState = data.state;\n attr.incoming = data.incoming;\n attr.duration = data.duration;\n }\n values = null;\n break;\n case 'QQ':\n case 'HD':\n el = null;\n values = null;\n break;\n case 'VD':\n // Replace image with '[icon] Video'.\n el = React.Fragment;\n values = [play_circle_outline, ' ', this.formatMessage(messages.drafty_video)];\n break;\n default:\n if (!el) {\n // Unknown element.\n el = React.Fragment;\n values = [extension, ' ', this.formatMessage(messages.drafty_unknown)];\n }\n break;\n }\n if (!el) {\n return values;\n }\n return React.createElement(el, attr, values);\n};\n\n// Converts Drafty object into a quoted reply; 'this' is set by the caller.\nfunction inlineImageAttr(attr, data) {\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n maxWidth: IMAGE_THUMBNAIL_DIM + 'px',\n maxHeight: IMAGE_THUMBNAIL_DIM + 'px',\n }\n attr.className = 'inline-image';\n attr.alt = this.formatMessage(messages.drafty_image);\n if (!data) {\n attr.src = 'img/broken_image.png';\n } else {\n attr.src = attr.src || 'img/broken_image.png';\n }\n attr.title = attr.alt;\n return attr;\n}\n\n// Converts Drafty object into a quoted reply; 'this' is set by the caller.\nfunction inlineVideoAttr(attr, data) {\n const dim = fitImageSize(data.width, data.height, VIDEO_THUMBNAIL_WIDTH, IMAGE_THUMBNAIL_DIM);\n attr.style = {\n width: dim.width + 'px',\n height: dim.height + 'px',\n maxWidth: VIDEO_THUMBNAIL_WIDTH + 'px',\n maxHeight: IMAGE_THUMBNAIL_DIM + 'px',\n }\n attr.className = 'inline-image';\n attr.alt = this.formatMessage(messages.drafty_video);\n attr.title = attr.alt;\n if (!data) {\n attr.src = 'img/broken_video.png';\n } else {\n attr.src = attr.src || 'img/broken_video.png';\n }\n return attr;\n}\n\n// Displays a portion of Drafty within 'QQ' quotes. 'this' is set by the caller.\n// 'this' must contain:\n// formatMessage: this.props.intl.formatMessage\n// messages: formatjs messages defined with defineMessages.\n// authorizeURL: this.props.tinode.authorizeURL\n// onQuoteClick: this.handleQuoteClick (optional)\nfunction quoteFormatter(style, data, values, key) {\n if (['BR', 'EX', 'IM', 'MN', 'VD'].includes(style)) {\n let el = Drafty.tagName(style);\n let attr = Drafty.attrValue(style, data) || {};\n attr.key = key;\n switch(style) {\n case 'BR':\n values = null;\n break;\n case 'IM':\n attr = inlineImageAttr.call(this, attr, data);\n values = [React.createElement('img', attr, null), ' ', attr.alt];\n el = React.Fragment;\n // Fragment attributes.\n attr = {key: key};\n break;\n case 'VD':\n attr = inlineVideoAttr.call(this, attr, data);\n values = [React.createElement('img', attr, null), ' ', attr.alt];\n el = React.Fragment;\n // Fragment attributes.\n attr = {key: key};\n break;\n case 'MN':\n el = 'span';\n attr.className = 'mention'\n if (data) {\n attr.className += ' ' + idToColorClass(data.val, false, true);\n }\n break;\n case 'EX':\n let fname;\n if (data) {\n if (data.mime == 'application/json') {\n // Ignore JSON attachments: they are form response payloads.\n return null;\n }\n fname = data.name;\n // Clear payload.\n delete data.val;\n delete data.ref;\n }\n el = React.Fragment;\n values = [attachment,\n shortenFileName(fname, 16) || this.formatMessage(messages.drafty_attachment)];\n break;\n }\n return React.createElement(el, attr, values);\n }\n return previewFormatter.call(this, style, data, values, key);\n}\n\n// Create image thumbnail suitable for inclusion in a quote.\nfunction quoteImageOrVideo(data, isVideo) {\n let promise;\n let bits, ref, mime;\n if (isVideo) {\n bits = data.preview;\n mime = data.premime || 'image/jpeg';\n ref = data.preref;\n } else {\n bits = data.val;\n mime = data.mime;\n ref = data.ref;\n }\n // Get the blob from the image data.\n if (bits) {\n const blob = base64ToBlob(bits, mime);\n if (!blob) {\n throw new Error(\"Invalid image\");\n }\n promise = Promise.resolve(blob);\n } else if (ref) {\n promise = fetch(this.authorizeURL(sanitizeUrlForMime(ref, 'image')))\n .then(evt => {\n if (evt.ok) {\n return evt.blob();\n } else {\n throw new Error(`Image fetch unsuccessful: ${evt.status} ${evt.statusText}`);\n }\n });\n } else {\n throw new Error(\"Missing image data\");\n }\n\n // Scale the blob.\n return promise\n .then(blob => {\n // If it's an image, cut the square from the center of the image and shrink it.\n // If it's a video, allow it to be rectantular.\n return imageScaled(blob, isVideo ? VIDEO_THUMBNAIL_WIDTH : IMAGE_THUMBNAIL_DIM, IMAGE_THUMBNAIL_DIM, -1, !isVideo)\n }).then(scaled => {\n if (isVideo) {\n data.premime = scaled.mime;\n } else {\n data.mime = scaled.mime;\n }\n data.size = scaled.blob.size;\n data.width = scaled.width;\n data.height = scaled.height;\n delete data.ref;\n delete data.preref;\n // Keeping the original file name, if provided: ex.data.name;\n\n data.src = URL.createObjectURL(scaled.blob);\n return blobToBase64(scaled.blob);\n }).then(b64 => {\n if (isVideo) {\n data.preview = b64.bits;\n } else {\n data.val = b64.bits;\n }\n return data;\n }).catch(err => {\n delete data.val;\n delete data.preview;\n delete data.src;\n data.width = IMAGE_THUMBNAIL_DIM;\n data.height = IMAGE_THUMBNAIL_DIM;\n // Rethrow.\n throw err;\n });\n}\n\n// Create a preview of a reply.\nexport function replyFormatter(style, data, values, key, stack) {\n if (style == 'IM' || style == 'VD') {\n const isImage = style == 'IM';\n const attr = isImage ? inlineImageAttr.call(this, {key: key}, data) :\n inlineVideoAttr.call(this, {key: key}, data);\n\n let loadedPromise;\n try {\n loadedPromise = cancelablePromise(quoteImageOrVideo.call(this, data, style == 'VD'));\n } catch (error) {\n console.warn(\"Failed to quote image:\", error.message);\n loadedPromise = cancelablePromise(error);\n }\n attr.whenDone = loadedPromise;\n values = [React.createElement(LazyImage, attr, null), ' ', attr.alt];\n return React.createElement(React.Fragment, {key: key}, values);\n } else if (style == 'QQ') {\n if (stack.includes('QQ')) {\n // Quote inside quote when forwarding a message.\n return React.createElement('span', {key: key},\n [format_quote, ' ']);\n }\n\n const attr = Drafty.attrValue('QQ', data) || {};\n attr.key = key;\n attr.className = 'reply-quote'\n return React.createElement(Drafty.tagName('QQ'), attr, values);\n }\n return quoteFormatter.call(this, style, data, values, key);\n}\n","import { KNOWN_HOSTS, DEFAULT_HOST } from '../config.js';\n\n// Detect server address from the URL\nexport function detectServerAddress() {\n let host = DEFAULT_HOST;\n if (typeof window.location == 'object') {\n if (window.location.protocol == 'file:' || window.location.hostname == 'localhost') {\n host = KNOWN_HOSTS.local;\n } else if (window.location.hostname) {\n host = window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n }\n }\n return host;\n}\n\n// Detect if the page is served over HTTPS.\nexport function isSecureConnection() {\n if (typeof window.location == 'object') {\n return window.location.protocol == 'https:';\n }\n return false;\n}\n\nexport function isLocalHost() {\n if (typeof window.location == 'object') {\n return window.location.hostname == 'localhost';\n }\n return false;\n}\n","// Helper functions for storing values in localStorage.\n// By default localStorage can store only strings, not objects or other types.\n\nexport default class LocalStorageUtil {\n // Replace old object with the new one.\n static setObject(key, value) {\n localStorage.setItem(key, JSON.stringify(value));\n }\n\n // Get stored object.\n static getObject(key) {\n const value = localStorage.getItem(key);\n return value && JSON.parse(value);\n }\n\n // Partially or wholly update stored object.\n static updateObject(key, value) {\n const oldVal = this.getObject(key);\n this.setObject(key, Object.assign(oldVal || {}, value));\n }\n\n // Just a wrapper.\n static removeItem(key) {\n localStorage.removeItem(key);\n }\n}\n","// Utility class for hash navigation.\n\nexport default class HashNavigation {\n // Parse hash as in http://www.example.com/path#hash as if it were\n // path and arguments.\n static parseUrlHash(hash) {\n // Split 'path/?args' into 'path/' and 'args', path -> parts[0], args->path[1].\n const parts = hash.split('?', 2);\n const params = {};\n let path = [];\n if (parts[0]) {\n path = parts[0].replace('#', '').split('/');\n }\n if (parts[1]) {\n parts[1].split('&').forEach((arg) => {\n // Can't use split() because the value may contain '='.\n const eq = arg.indexOf('=');\n if (eq > 0) {\n params[arg.slice(0, eq)] = decodeURIComponent(arg.slice(eq + 1));\n }\n });\n }\n return {path: path, params: params};\n }\n\n static navigateTo(url) {\n window.location.hash = url;\n }\n\n static composeUrlHash(path, params) {\n let url = path.join('/');\n const args = [];\n for (const key in params) {\n if (params.hasOwnProperty(key)) {\n if (params[key] !== undefined) {\n args.push(key + '=' + encodeURIComponent(params[key]));\n }\n }\n }\n if (args.length > 0) {\n url += '?' + args.join('&');\n }\n return url;\n }\n\n static addUrlParam(hash, key, value) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.params[key] = value;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static removeUrlParam(hash, key) {\n const parsed = HashNavigation.parseUrlHash(hash);\n delete parsed.params[key];\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlSidePanel(hash, sidepanel) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.path[0] = sidepanel;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlInfoPanel(hash, infopanel) {\n const parsed = HashNavigation.parseUrlHash(hash);\n if (infopanel) {\n parsed.params.info = infopanel;\n } else {\n delete parsed.params.info;\n }\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlTopic(hash, topic) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.path[1] = topic;\n // Close InfoView on topic change.\n delete parsed.params.info;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n}\n","// Short representation of time in the past.\nexport function shortDateFormat(then, locale) {\n locale = locale || window.navigator.userLanguage || window.navigator.language;\n const now = new Date();\n if (then.getFullYear() == now.getFullYear()) {\n // Same year.\n if (then.getMonth() == now.getMonth() && then.getDate() == now.getDate()) {\n // Same month and day, show time only.\n return then.toLocaleTimeString(locale, {hour12: false, hour: '2-digit', minute: '2-digit'});\n }\n // Different month and/or day, show month day, time.\n return then.toLocaleDateString(locale,\n {hour12: false, month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit'});\n }\n // Different year: just show the date.\n return then.toLocaleDateString(locale, {year: 'numeric', month: 'short', day: 'numeric'});\n}\n\n// Representation a date relative to now.\nexport function relativeDateFormat(then, locale) {\n locale = locale || window.navigator.userLanguage || window.navigator.language;\n const now = new Date();\n const thenDays = Math.floor((then.getTime() - then.getTimezoneOffset() * 60_000) / 86_400_000);\n const nowDays = Math.floor((now.getTime() - now.getTimezoneOffset() * 60_000) / 86_400_000);\n const diff = thenDays - nowDays;\n if (Math.abs(diff) < 2) {\n // Today or yesterday.\n return new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).format(diff, 'day')\n }\n // More than two days: just show the date.\n return new Intl.DateTimeFormat(locale).format(then);\n}\n\n// Convert seconds to [hours:]minutes:seconds, i.e. 156 sec -> 2:36, 3756 sec -> 1:02:36.\n// If
fixedMins is true, then minutes are represented by at least two digits.\nexport function secondsToTime(seconds, fixedMin) {\n if (typeof seconds != 'number') {\n return '';\n }\n\n let min = (Math.floor(seconds / 60) | 0) % 60;\n let hours = Math.floor(seconds / 3600) | 0;\n\n if (fixedMin || hours > 0) {\n min = min < 10 ? `0${min}` : min;\n }\n let sec = (seconds | 0) % 60;\n sec = sec < 10 ? `0${sec}` : sec;\n if (hours == 0) {\n return `${min}:${sec}`;\n }\n return `${hours}:${min}:${sec}`;\n}\n\n// Convert a number of bytes to human-readable format.\nexport function bytesToHumanSize(bytes) {\n if (!bytes || bytes == 0) {\n return '0 Bytes';\n }\n\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const bucket = Math.min(Math.floor(Math.log2(bytes) / 10) | 0, sizes.length-1);\n const count = bytes / Math.pow(1024, bucket);\n const round = bucket > 0 ? (count < 3 ? 2 : (count < 30 ? 1 : 0)) : 0;\n return count.toFixed(round) + ' ' + sizes[bucket];\n}\n\n// Shorten a file name to be under maxLength by clipping out the middle.\nexport function shortenFileName(filename, maxLength) {\n if (typeof filename != 'string') {\n return filename;\n }\n return filename.length > maxLength ?\n filename.slice(0, maxLength/2 - 1) + '…' + filename.slice(1 - maxLength/2) : filename;\n}\n\n// Get 32 bit integer hash value for a string. Ideally it should produce the same value\n// as Java's String#hash().\nfunction stringToColorHash(value) {\n let hash = 0;\n value = '' + value;\n for (let i = 0; i < value.length; i++) {\n hash = ((hash << 5) - hash) + value.charCodeAt(i);\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n}\n\n// User avatar letter color id.\nexport function letterTileColorId(userId) {\n return Math.abs(stringToColorHash(userId)) % 16;\n}\n\n// Converts user or topic ID to a CSS color class. Ideally it should produce the same color value as Java version.\n// params:\n// - {string} id: user or topic ID\n// - {boolean} light: light or dark version of the color.\n// - {boolean} fg: foreground (text) or background color.\nexport function idToColorClass(id, light, fg) {\n return (light ? 'lt-' : 'dk-') + (fg ? 'fg-' : 'bg-') + letterTileColorId(id);\n}\n\n// Takes ISO Alpha-2 country code, like 'US' and converts it to a flag emoji.\nexport function flagEmoji(countryCode) {\n const codePoints = countryCode\n .toUpperCase()\n .split('')\n .map(char => 0x1F1A5 + char.charCodeAt());\n return String.fromCodePoint(...codePoints);\n}\n","// Odds and ends\n\nimport { Tinode } from 'tinode-sdk';\n\n// Make shortcut icon appear with a green dot + show unread count in title.\nexport function updateFavicon(count) {\n const oldIcon = document.getElementById('shortcut-icon');\n const head = document.head || document.getElementsByTagName('head')[0];\n const newIcon = document.createElement('link');\n newIcon.type = 'image/png';\n newIcon.id = 'shortcut-icon';\n newIcon.rel = 'shortcut icon';\n newIcon.href = 'img/logo32x32' + (count > 0 ? 'a' : '') + '.png';\n if (oldIcon) {\n head.removeChild(oldIcon);\n }\n head.appendChild(newIcon);\n\n document.title = (count > 0 ? '('+count+') ' : '') + 'Tinode';\n}\n\n// Create theCard which represents user's or topic's \"public\" info.\nexport function theCard(fn, imageUrl, imageMimeType, note) {\n let card = null;\n fn = fn && fn.trim();\n note = note && note.trim();\n\n if (fn) {\n card = {\n fn: fn\n };\n }\n\n if (typeof note == 'string') {\n card = card || {};\n card.note = note ? note : Tinode.DEL_CHAR;\n }\n\n if (imageUrl) {\n card = card || {};\n let mimeType = imageMimeType;\n // Is this a data URL \"data:[ field: the URL must be a relative URL or\n// have http:, https:, blob: or data: scheme.\n// In case of data: scheme, the URL must must be of the right MIME type such as 'data:{mimeMajor}/XXXX;base64,'.\nexport function sanitizeUrlForMime(url, mimeMajor) {\n if (!url) {\n return null;\n }\n\n const sanitizedUrl = sanitizeUrl(url);\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Is this a data: URL of the appropriate mime type?\n const re = new RegExp(`data:${mimeMajor}\\/[a-z0-9.-]+;base64,`, 'i');\n if (re.test(url.trim())) {\n return url;\n }\n\n return null;\n}\n\n// Append query parameter 'asatt=1' to the URL.\n// It will cause Tinode server to add 'Content-Disposition: attachment' header when serving it.\n// The URL is a string. The URL here is always absolute.\nexport function urlAsAttachment(url) {\n // TODO: check if URL is local or remote, i.e. compare to window.location.origin.\n /*\n if (typeof window.location == 'object') {\n if (!url.startsWith(window.location.origin)) {\n return url;\n }\n }\n */\n // Check if the URL is a data or blob. Do not alter such URLs.\n if (url.startsWith('data:') || url.startsWith('blob:')) {\n return url;\n }\n\n // Split URL into host+path, query, fragment.\n let query = '', fragment = '';\n const idxF = url.indexOf('#');\n if (idxF > 0) {\n fragment = url.substring(idxF+1);\n url = url.substring(0, idxF);\n }\n const idxQ = url.indexOf('?');\n if (idxQ > 0) {\n query = url.substring(idxQ+1);\n url = url.substring(0, idxQ);\n }\n // Add parameter and reassemble.\n const params = new URLSearchParams(query);\n params.append('asatt', '1');\n return `${url}?${params.toString()}` + (fragment ? `#${fragment}` : '');\n}\n\n// Given message's received status, return name and color of a delivery indicator icon.\nexport function deliveryMarker(received) {\n switch (received) {\n case Tinode.MESSAGE_STATUS_SENDING:\n return { name: 'access_time' }; // watch face\n case Tinode.MESSAGE_STATUS_FAILED:\n case Tinode.MESSAGE_STATUS_FATAL:\n return { name: 'warning', color: 'danger-color' }; // yellow icon /!\\\n case Tinode.MESSAGE_STATUS_SENT:\n return { name: 'done' }; // checkmark\n case Tinode.MESSAGE_STATUS_RECEIVED:\n return { name: 'done_all' }; // double checkmark\n case Tinode.MESSAGE_STATUS_READ:\n return { name: 'done_all', color: 'blue' }; // blue double checkmark\n }\n return null;\n}\n\n// Wraps a promise to make it cancelable.\n// The parameter can be either a promise or an error. If it's an error, the wrapped promise is\n// created in a rejected state.\nexport function cancelablePromise(promise) {\n let hasCanceled = false;\n\n const wrappedPromise = promise instanceof Error ?\n Promise.reject(promise) :\n new Promise((resolve, reject) => {\n promise.then(\n result => hasCanceled ? reject({isCanceled: true}) : resolve(result),\n error => hasCanceled ? reject({isCanceled: true}) : reject(error)\n );\n });\n\n return {\n promise: wrappedPromise,\n cancel() {\n hasCanceled = true;\n },\n };\n};\n\n// Clips string to the specified length.\nexport function clipStr(str, length) {\n return str && str.substring(0, length);\n}\n","// This is a generated file. Don't edit.\n\nexport const PACKAGE_VERSION = \"0.23.1\";\n","// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport CheckBox from '../widgets/checkbox.jsx';\n\nexport default class EditAccountView extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.handleCheckboxClick = this.handleCheckboxClick.bind(this);\n }\n\n handleCheckboxClick(what, checked) {\n if (what == 'sound') {\n this.props.onToggleMessageSounds(checked);\n } else if (what == 'alert') {\n this.props.onTogglePushNotifications(checked);\n } else if (what == 'incognito') {\n this.props.onToggleIncognitoMode(checked);\n }\n }\n\n render() {\n return (\n
: null}\n {messageNodes}\n
\n :\n this.props.readOnly && this.props.uid ?\n
\n {contactNodes}\n
\n :\n null\n }\n
: null}\n \n {menu}\n
\n );\n }\n}\n\nexport default injectIntl(ContextMenu);\n","// Image zoom and crop widget.\n\nimport React from 'react';\n\nconst DEFAULT_MAX_ZOOM = 2.5;\n\nexport default class Cropper extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n // Coordinates of the top left corner of the image in container coordinates.\n panX: 0,\n panY: 0,\n // Origin of the zoom in image coordinates.\n originX: 0,\n originY: 0,\n // Zoom scale.\n zoom: 1,\n // Zoom min and max.\n minZoom: 0,\n maxZoom: DEFAULT_MAX_ZOOM,\n };\n\n // References to DOM elements for hooking up events and getting screen dimensions.\n // The transparent element which captures mouse moves (moves with the image).\n this.overlay = React.createRef();\n // The image cutout window or view port (static).\n this.cutout = React.createRef();\n // Scaled and translated image preview.\n this.preview = React.createRef();\n // The main container (static).\n this.boundingBox = React.createRef();\n\n // The original image width and height before any scaling.\n this.imageWidth = 0;\n this.imageHeight = 0;\n\n // Mouse position when dragging.\n this.mouseX = 0\n this.mouseY = 0;\n // Length of the previous mouse move when dragging.\n this.prevDistance = 0;\n\n // Bounding rectangles of static elements.\n this.cutoutRect = {};\n this.bBoxRect = {};\n // Center of the bounding box.\n this.originX = 0;\n this.originY = 0;\n\n this.initScaling = this.initScaling.bind(this);\n this.onZoom = this.onZoom.bind(this);\n this.handleZoom = this.handleZoom.bind(this);\n this.mouseDown = this.mouseDown.bind(this);\n this.mouseUp = this.mouseUp.bind(this);\n this.mouseMove = this.mouseMove.bind(this);\n this.mouseTouch = this.mouseTouch.bind(this);\n this.positionAll = this.positionAll.bind(this);\n this.translate = this.translate.bind(this);\n }\n\n componentDidMount() {\n this.overlay.current.addEventListener('mousedown', this.mouseDown, { passive: true });\n this.overlay.current.addEventListener('touchstart', this.mouseDown, { passive: true });\n\n // The rectangle position is in viewport coordinates.\n this.bBoxRect = this.boundingBox.current.getBoundingClientRect();\n // Center of the bounding box in container coordinates.\n this.originX = this.bBoxRect.width / 2;\n this.originY = this.bBoxRect.height / 2;\n\n // The rectangle position is in viewport coordinates.\n this.cutoutRect = this.cutout.current.getBoundingClientRect();\n }\n\n componentWillUnmount() {\n this.overlay.current.removeEventListener('mousedown', this.mouseDown);\n this.overlay.current.removeEventListener('touchstart', this.mouseDown);\n }\n\n // Position all elements.\n positionAll(panX, panY, zoom) {\n // Zoom origin in image preview coordinates.\n this.setState({\n panX: panX,\n panY: panY,\n zoom: zoom,\n originX: this.originX - panX,\n originY: this.originY - panY,\n });\n\n // Pass cut out coordinates to caller.\n const left = (this.originX - panX) * zoom - this.originX;\n const top = (this.originY - panY) * zoom - this.originY;\n this.props.onChange(\n (left + this.cutoutRect.left - this.bBoxRect.left) / zoom,\n (top + this.cutoutRect.top - this.bBoxRect.top) / zoom,\n this.cutoutRect.width / zoom,\n this.cutoutRect.height / zoom,\n zoom);\n }\n\n // Check if new location is within the limits.\n static checkBound(currPan, img, cutout, delta) {\n let nextDiff = Math.min(0, cutout[0] - img[0] - delta, img[1] - cutout[1] + delta);\n if (nextDiff == 0) {\n // Cutout is completely within the image.\n currPan += delta;\n } else if (Math.min(0, cutout[0] - img[0], img[1] - cutout[1]) < nextDiff) {\n // Cutout is outside of the range but closer to the bound.\n currPan += delta;\n }\n return currPan;\n }\n\n initScaling() {\n // Initialize components.\n const imgRect = this.preview.current.getBoundingClientRect();\n\n this.imageWidth = imgRect.width;\n this.imageHeight = imgRect.height;\n\n // Set zoom slider's min and max values. Make sure the scaled image cannot be smaller than the cutout.\n const minZoom = Math.max(this.cutoutRect.width / imgRect.width, this.cutoutRect.height / imgRect.height);\n this.setState({\n minZoom: minZoom,\n maxZoom: Math.max(DEFAULT_MAX_ZOOM, minZoom + 1)\n });\n\n // Initial zoom level fills the bounding box at the smallest image dimension and overflows the largest, i.e. \"fill\" not \"fit\".\n const zoom = Math.max(this.bBoxRect.width / imgRect.width, this.bBoxRect.height / imgRect.height);\n // Converting from viewport coordinates to container, then panning.\n const panX = this.cutoutRect.left - this.bBoxRect.left -\n (imgRect.width - this.cutoutRect.width) / 2;\n const panY = this.cutoutRect.top - this.bBoxRect.top -\n (imgRect.height - this.cutoutRect.height) / 2;\n\n this.positionAll(panX, panY, zoom);\n }\n\n onZoom(e) {\n this.handleZoom(e.target.value);\n }\n\n handleZoom(zoom) {\n let panX = this.state.panX;\n let panY = this.state.panY;\n\n // Ensure that the image at the new zoom is not outside of the cutout boundaries.\n // Calculate image coordinates at the new zoom.\n const imgLeft = this.originX - (this.originX - panX) * zoom;\n const imgRight = imgLeft + this.imageWidth * zoom;\n // Cutout in the same coordinates as the image.\n const coLeft = this.cutoutRect.left - this.bBoxRect.left;\n const coRight = coLeft + this.cutoutRect.width;\n if (coLeft < imgLeft) {\n panX -= imgLeft - coLeft;\n } else if (coRight > imgRight) {\n panX += coRight - imgRight;\n }\n const imgTop = this.originY - (this.originY - panY) * zoom;\n const imgBottom = imgTop + this.imageHeight * zoom;\n const coTop = this.cutoutRect.top - this.bBoxRect.top;\n const coBottom = coTop + this.cutoutRect.height;\n if (coTop < imgTop) {\n panY -= imgTop - coTop;\n } else if (coBottom > imgBottom) {\n panY += coBottom - imgBottom;\n }\n\n this.positionAll(panX, panY, zoom);\n }\n\n mouseDown(e) {\n if (e.touches) {\n this.mouseX = e.touches[0].pageX;\n this.mouseY = e.touches[0].pageY;\n } else {\n this.mouseX = e.pageX;\n this.mouseY = e.pageY;\n }\n\n window.addEventListener('mousemove', this.mouseMove, { passive: false });\n window.addEventListener('touchmove', this.mouseTouch, { passive: false });\n window.addEventListener('mouseup', this.mouseUp, { passive: true });\n window.addEventListener('touchend', this.mouseUp, { passive: true });\n // Disable text selection in the entire document.\n document.body.style['userSelect'] = 'none';\n }\n\n // Perform image panning.\n translate(pageX, pageY) {\n const dX = pageX - this.mouseX;\n const dY = pageY - this.mouseY;\n\n this.mouseX = pageX;\n this.mouseY = pageY;\n\n // Make sure the image is within the cutout window.\n const imgRect = this.preview.current.getBoundingClientRect();\n\n // Check if the new position is within the boundaries, and if not if it's closer to them.\n let panX = Cropper.checkBound(this.state.panX, [imgRect.left, imgRect.right],\n [this.cutoutRect.left, this.cutoutRect.right], dX);\n let panY = Cropper.checkBound(this.state.panY, [imgRect.top, imgRect.bottom],\n [this.cutoutRect.top, this.cutoutRect.bottom], dY);\n\n this.positionAll(panX, panY, this.state.zoom);\n }\n\n // Image panning.\n mouseMove(e) {\n e.preventDefault();\n this.translate(e.pageX, e.pageY);\n }\n\n mouseTouch(e) {\n e.preventDefault();\n\n if (e.touches.length == 1) {\n this.translate(e.touches[0].pageX, e.touches[0].pageY);\n return;\n }\n\n // Image zooming by pinching.\n const [touch0, touch1] = e.touches;\n const distance = Math.sqrt((touch0.pageX - touch1.pageX) * (touch0.pageX - touch1.pageX) +\n (touch0.pageY - touch1.pageY) * (touch0.pageY - touch1.pageY));\n\n if (!this.prevDistance) {\n this.prevDistance = distance / this.state.zoom;\n }\n\n let scale = (distance / this.prevDistance);\n this.handleZoom(Math.max(this.minZoom, Math.min(this.maxZoom, scale)));\n }\n\n mouseUp(e) {\n window.removeEventListener('mousemove', this.mouseMove);\n window.removeEventListener('touchmove', this.mouseTouch);\n window.removeEventListener('mouseup', this.mouseUp);\n window.removeEventListener('touchend', this.mouseUp);\n // Re-enable text selection.\n document.body.style['userSelect'] = '';\n\n this.positionAll(this.state.panX, this.state.panY, this.state.zoom);\n }\n\n render() {\n // transform3d: position and scale.\n const t3d = `translate3d(${this.state.panX}px, ${this.state.panY}px, 0) scale(${this.state.zoom})`;\n // transformOrigin: zoom origin.\n const orig = `${this.state.originX}px ${this.state.originY}px`;\n\n // Overlay position and size are exactly equal to the position and size of the transformed image\n // except it uses different coordinates.\n const overlay = {\n top: `${this.originY - this.state.originY * this.state.zoom}px`,\n left: `${this.originX - this.state.originX * this.state.zoom}px`,\n width: `${this.imageWidth * this.state.zoom}px`,\n height: `${this.imageHeight * this.state.zoom}px`\n };\n return (\n \n \n \n
\n
}\n {e.target.onerror = null; e.target.src=\"../img/broken_image.png\"}} />;\n } else {\n avatar = null;\n }\n return avatar;\n }\n}\n","import React from 'react';\n\nexport default class LoadSpinner extends React.PureComponent {\n render() {\n const className = 'load-spinner-box' + (this.props.large ? ' large' : '')\n + (this.props.clear ? ' clear' : '') + (this.props.centered ? ' centered' : '');\n return (this.props.show ?\n
\n \n \n );\n }\n\n return (\n {names[c]} \n {skip.indexOf(c) < 0 ?\n {this.props.compare ? \n : null}\n
: null}\n \n \n {this.props.compare ?\n
\n \n :\n null}\n \n {items}\n {this.props.modeTitle} \n {this.props.compareTitle} \n
\n
\n \n 0?(e=[],this.props.badges.map((t=>{const s=t.color?" "+t.color:"";t.icon?e.push(l().createElement("i",{className:"material-icons as-badge"+s,key:t.key||t.icon},Is[t.icon]||t.icon)):e.push(l().createElement("span",{className:"badge"+s,key:t.key||t.name},t.name))})),l().createElement(l().Fragment,null,e)):null}}var Fs=r(6904);class Rs extends l().PureComponent{render(){return this.props.count>0?l().createElement("span",{className:"unread"},this.props.count>9?"9+":this.props.count):null}}var xs=r(5053),Us=r(8589);class Ls extends l().PureComponent{render(){const e=["busy","declined","disconnected","missed"].includes(this.props.callState),t="material-icons medium "+(e?"red":"green"),s=this.props.incoming?e?"call_missed":"call_received":e?"call_missed_outgoing":"call_made";let a;if(e)switch(this.props.callState){case"busy":a=l().createElement(d.FormattedMessage,{id:"call_busy",defaultMessage:[{type:0,value:"busy"}]});break;case"declined":a=l().createElement(d.FormattedMessage,{id:"call_declined",defaultMessage:[{type:0,value:"declined"}]});break;case"missed":a=this.props.incoming?l().createElement(d.FormattedMessage,{id:"call_missed",defaultMessage:[{type:0,value:"missed"}]}):l().createElement(d.FormattedMessage,{id:"call_cancelled",defaultMessage:[{type:0,value:"cancelled"}]});break;default:a=l().createElement(d.FormattedMessage,{id:"call_disconnected",defaultMessage:[{type:0,value:"disconnected"}]})}else a=l().createElement("span",null,(0,Us.Ye)(this.props.duration/1e3));return l().createElement("div",{className:"call-message"},l().createElement("div",null,l().createElement("i",{className:"material-icons big gray"},"call")),l().createElement("div",{className:"flex-column narrow"},l().createElement("div",null,this.props.incoming?l().createElement(d.FormattedMessage,{id:"calls_incoming",defaultMessage:[{type:0,value:"Incoming call"}]}):l().createElement(d.FormattedMessage,{id:"calls_outgoing",defaultMessage:[{type:0,value:"Outgoing call"}]})),l().createElement("div",{className:"duration"},l().createElement("i",{className:t},s)," ",a)))}}class Os extends l().PureComponent{render(){const e=["busy","declined","disconnected","missed"].includes(this.props.callState),t=this.props.incoming?e?"call_missed":"call_received":e?"call_missed_outgoing":"call_made";let s;if(e)switch(this.props.callState){case"busy":s=l().createElement(d.FormattedMessage,{id:"call_busy",defaultMessage:[{type:0,value:"busy"}]});break;case"declined":s=l().createElement(d.FormattedMessage,{id:"call_declined",defaultMessage:[{type:0,value:"declined"}]});break;case"missed":s=this.props.incoming?l().createElement(d.FormattedMessage,{id:"call_missed",defaultMessage:[{type:0,value:"missed"}]}):l().createElement(d.FormattedMessage,{id:"call_cancelled",defaultMessage:[{type:0,value:"cancelled"}]});break;default:s=l().createElement(d.FormattedMessage,{id:"call_disconnected",defaultMessage:[{type:0,value:"disconnected"}]})}else s=["accepted","started"].includes(this.props.callState)&&!this.props.duration?l().createElement(d.FormattedMessage,{id:"call_in_progress",defaultMessage:[{type:0,value:"in progress"}]}):l().createElement("span",null,(0,Us.Ye)(this.props.duration/1e3));return l().createElement(l().Fragment,null,l().createElement("div",{className:"composed-material"},l().createElement("i",{className:"material-icons"},"call"),l().createElement("i",{className:"material-icons second"},t))," ",s)}}class qs extends l().PureComponent{constructor(e){super(e),this.videoRef=l().createRef(),this.handleClick=this.handleClick.bind(this)}handleClick(e){this.props.onClick&&this.props.onClick(e)}render(){const e=(0,Us.Ye)(this.props["data-duration"]/1e3),t="inline-video"+(this.props.onClick?" image-clickable":"");return l().createElement("div",{className:t},l().createElement("img",this.props),l().createElement("div",{className:"play-control"},this.props.onClick?l().createElement("i",{className:"material-icons white bigger"},"play_arrow"):l().createElement("img",{src:"img/broken_video.png",style:{filter:"invert(100%)"},width:"36",height:"36"})),e?l().createElement("div",{className:"duration"},e):null)}}class Bs extends l().PureComponent{constructor(e){super(e),this.state={src:this.props.isvideo?"img/blankvid.png":"img/blankimg.png",style:Object.assign({padding:"4px"},this.props.style),className:this.props.className,alt:this.props.alt,onClick:this.props.onClick}}componentDidMount(){this.props.whenDone.promise.then((e=>this.setState({src:e.src,style:{...this.state.style,padding:0}}))).catch((e=>this.setState({src:this.props.isvideo?"img/broken_video.png":"img/broken_image.png"})))}componentWillUnmount(){this.props.whenDone.cancel()}componentDidUpdate(e){e.whenDone!=this.props.whenDone&&(this.setState({src:this.props.isvideo?"img/blankvid.png":"img/blankimg.png",style:{...this.state.style,padding:"4px"}}),this.props.whenDone.promise.then((e=>this.setState({src:e.src,style:{...this.state.style,padding:0}}))).catch((e=>this.setState({src:this.props.isvideo?"img/broken_video.png":"img/broken_image.png"}))))}render(){return l().createElement("img",this.state)}}class js extends l().PureComponent{render(){return l().createElement("div",{className:"uploader"},l().createElement("div",null,l().createElement("span",{style:{width:100*this.props.progress+"%"}})),this.props.progress<.999?l().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCancel()}},l().createElement("i",{className:"material-icons"},"close")," ",l().createElement(d.FormattedMessage,{id:"action_cancel",defaultMessage:[{type:0,value:"cancel"}]})):l().createElement(d.FormattedMessage,{id:"upload_finishing",defaultMessage:[{type:0,value:"finishing..."}]}))}}class Vs extends l().PureComponent{constructor(e){super(e)}render(){return l().createElement("div",{className:"inline-image"},l().createElement("img",this.props),l().createElement("div",{className:"rounded-container"},l().createElement(js,{progress:this.props.progress,onCancel:this.props.onCancelUpload})))}}var Hs=r(6110),Ws=r(3540);const zs=(0,d.defineMessages)({drafty_form:{id:"drafty_form",defaultMessage:[{type:0,value:"Form:"}]},drafty_attachment:{id:"drafty_attachment",defaultMessage:[{type:0,value:"Attachment"}]},drafty_image:{id:"drafty_image",defaultMessage:[{type:0,value:"Picture"}]},drafty_video:{id:"drafty_video",defaultMessage:[{type:0,value:"Video recording"}]},drafty_unknown:{id:"drafty_unknown",defaultMessage:[{type:0,value:"Unsupported"}]}});function Ks(e,t,s,a,i){if(i.includes("QQ"))return Xs.call(this,e,t,s,a);if(!e)return s;let n=_s.Drafty.tagName(e),r=_s.Drafty.attrValue(e,t)||{};switch(r.key=a,e){case"AU":r.src&&(r.src=this.authorizeURL((0,Ws.wk)(r.src,"audio")),r.duration=t.duration>0?0|t.duration:void 0,r.preview=t.preview,r.loading="lazy"),n=xs.A,s=null;break;case"BR":s=null;break;case"EX":case"RW":break;case"HL":r.className="highlight";break;case"HD":n=null,s=null;break;case"IM":n=Gs.call(this,n,t,r),s=null;break;case"BN":r.onClick=this.onFormButtonClick;let e=l().Children.map(s,(e=>"string"==typeof e?e:void 0));e&&0!=e.length||(e=[r.name]),r["data-title"]=e.join("");break;case"LN":r&&(r.href="string"==typeof r.href?(0,Ws.Jf)(r.href,ks.kA):"");break;case"MN":r.className="mention",t&&(r.className+=" "+(0,Us.kJ)(t.val,!1,!0));break;case"FM":r.className="bot-form";break;case"QQ":r.className="reply-quote",r.onClick=this.onQuoteClick;break;case"VC":n=Ls,s=null,t&&(r.callState=t.state,r.incoming=t.incoming,r.duration=t.duration);break;case"VD":n=$s.call(this,n,t,r),s=null;break;default:if(!n){n=l().Fragment,r={key:a};let e=s;Array.isArray(s)&&s.join("").trim()||(e=[l().createElement("span",{key:"x1",className:"gray"},this.formatMessage(zs.drafty_unknown))]),s=[l().createElement("i",{key:"x0",className:"material-icons gray"},"extension")," "].concat(e)}}return n?l().createElement(n,r,s):s}function Gs(e,t,s){if(!t)return s.src="img/broken_image.png",s.style={width:ks._g+"px",height:ks._g+"px"},e;s.className="inline-image";const a=(0,Hs.ae)(t.width,t.height,this.viewportWidth>0?Math.min(this.viewportWidth-6.5*ks.JS,34.5*ks.JS):34.5*ks.JS,24*ks.JS,!1)||{dstWidth:ks._j,dstHeight:ks._j};return s.style={width:a.dstWidth+"px",height:a.dstHeight+"px",minWidth:a.dstWidth+"px",minHeight:a.dstHeight+"px"},_s.Drafty.isProcessing(t)?e=Vs:(s.src=this.authorizeURL((0,Ws.wk)(s.src,"image")),s.alt=t.name,s.src?(Math.max(t.width||0,t.height||0)>ks._g&&(s.onClick=this.onImagePreview,s.className+=" image-clickable"),s.loading="lazy"):s.src=null),e}function $s(e,t,s){if(!t)return s.src="img/broken_video.png",s.style={width:ks._g+"px",height:ks._g+"px"},e;s.className="inline-image";const a=(0,Hs.ae)(t.width,t.height,this.viewportWidth>0?Math.min(this.viewportWidth-6.5*ks.JS,34.5*ks.JS):34.5*ks.JS,24*ks.JS,!1)||{dstWidth:ks.qV,dstHeight:ks.qV};return s.style={width:a.dstWidth+"px",height:a.dstHeight+"px",minWidth:a.dstWidth+"px",minHeight:a.dstHeight+"px"},_s.Drafty.isProcessing(t)?e=Vs:(s.src=this.authorizeURL((0,Ws.wk)(s.src,"image")),s.alt=t.name,(t.ref||t.val)&&(s.onClick=this.onVideoPreview,s.loading="lazy"),e=qs),e}function Qs(e,t,s,a){if(!e)return s;let i=_s.Drafty.tagName(e);const n={key:a};switch(e){case"AU":i=l().Fragment,s=[l().createElement("i",{key:"au",className:"material-icons"},"mic")," ",(0,Us.Ye)(t.duration/1e3)];break;case"BR":i=l().Fragment,s=[" "];break;case"HL":n.className="highlight preview";break;case"LN":case"MN":i="span";break;case"IM":i=l().Fragment,s=[l().createElement("i",{key:"im",className:"material-icons"},"photo")," ",this.formatMessage(zs.drafty_image)];break;case"BN":i="span",n.className="flat-button faux";break;case"FM":i=l().Fragment,s=[l().createElement("i",{key:"fm",className:"material-icons"},"dashboard"),this.formatMessage(zs.drafty_form)].concat(" ",s||[]);break;case"RW":i=l().Fragment;break;case"EX":if(t){if("application/json"==t.mime)return null;delete t.val,delete t.ref}i=l().Fragment,s=[l().createElement("i",{key:"ex",className:"material-icons"},"attachment")," ",this.formatMessage(zs.drafty_attachment)];break;case"VC":i=Os,t&&(n.callState=t.state,n.incoming=t.incoming,n.duration=t.duration),s=null;break;case"QQ":case"HD":i=null,s=null;break;case"VD":i=l().Fragment,s=[l().createElement("i",{key:"im",className:"material-icons"},"play_circle_outline")," ",this.formatMessage(zs.drafty_video)];break;default:i||(i=l().Fragment,s=[l().createElement("i",{key:"x0",className:"material-icons gray"},"extension")," ",this.formatMessage(zs.drafty_unknown)])}return i?l().createElement(i,n,s):s}function Js(e,t){return e.style={width:ks._g+"px",height:ks._g+"px",maxWidth:ks._g+"px",maxHeight:ks._g+"px"},e.className="inline-image",e.alt=this.formatMessage(zs.drafty_image),e.src=t&&e.src||"img/broken_image.png",e.title=e.alt,e}function Ys(e,t){const s=(0,Hs.ae)(t.width,t.height,ks.iq,ks._g);return e.style={width:s.width+"px",height:s.height+"px",maxWidth:ks.iq+"px",maxHeight:ks._g+"px"},e.className="inline-image",e.alt=this.formatMessage(zs.drafty_video),e.title=e.alt,e.src=t&&e.src||"img/broken_video.png",e}function Xs(e,t,s,a){if(["BR","EX","IM","MN","VD"].includes(e)){let i=_s.Drafty.tagName(e),n=_s.Drafty.attrValue(e,t)||{};switch(n.key=a,e){case"BR":s=null;break;case"IM":n=Js.call(this,n,t),s=[l().createElement("img",n,null)," ",n.alt],i=l().Fragment,n={key:a};break;case"VD":n=Ys.call(this,n,t),s=[l().createElement("img",n,null)," ",n.alt],i=l().Fragment,n={key:a};break;case"MN":i="span",n.className="mention",t&&(n.className+=" "+(0,Us.kJ)(t.val,!1,!0));break;case"EX":let e;if(t){if("application/json"==t.mime)return null;e=t.name,delete t.val,delete t.ref}i=l().Fragment,s=[l().createElement("i",{key:"ex",className:"material-icons"},"attachment"),(0,Us.Tu)(e,16)||this.formatMessage(zs.drafty_attachment)]}return l().createElement(i,n,s)}return Qs.call(this,e,t,s,a)}function Zs(e,t){let s,a,i,n;if(t?(a=e.preview,n=e.premime||"image/jpeg",i=e.preref):(a=e.val,n=e.mime,i=e.ref),a){const e=(0,Hs.i)(a,n);if(!e)throw new Error("Invalid image");s=Promise.resolve(e)}else{if(!i)throw new Error("Missing image data");s=fetch(this.authorizeURL((0,Ws.wk)(i,"image"))).then((e=>{if(e.ok)return e.blob();throw new Error(`Image fetch unsuccessful: ${e.status} ${e.statusText}`)}))}return s.then((e=>(0,Hs.ag)(e,t?ks.iq:ks._g,ks._g,-1,!t))).then((s=>(t?e.premime=s.mime:e.mime=s.mime,e.size=s.blob.size,e.width=s.width,e.height=s.height,delete e.ref,delete e.preref,e.src=URL.createObjectURL(s.blob),(0,Hs.Sk)(s.blob)))).then((s=>(t?e.preview=s.bits:e.val=s.bits,e))).catch((t=>{throw delete e.val,delete e.preview,delete e.src,e.width=ks._g,e.height=ks._g,t}))}function ea(e,t,s,a,i){if("IM"==e||"VD"==e){const i="IM"==e?Js.call(this,{key:a},t):Ys.call(this,{key:a},t);let n;try{n=(0,Ws.iE)(Zs.call(this,t,"VD"==e))}catch(e){console.warn("Failed to quote image:",e.message),n=(0,Ws.iE)(e)}return i.whenDone=n,s=[l().createElement(Bs,i,null)," ",i.alt],l().createElement(l().Fragment,{key:a},s)}if("QQ"==e){if(i.includes("QQ"))return l().createElement("span",{key:a},[l().createElement("i",{key:"qq",className:"material-icons"},"format_quote")," "]);const e=_s.Drafty.attrValue("QQ",t)||{};return e.key=a,e.className="reply-quote",l().createElement(_s.Drafty.tagName("QQ"),e,s)}return Xs.call(this,e,t,s,a)}class ta extends l().Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this),this.handleContextClick=this.handleContextClick.bind(this)}handleClick(e){e.preventDefault(),e.stopPropagation(),this.props.onSelected&&this.props.onSelected(this.props.item,this.props.index)}handleContextClick(e){e.preventDefault(),e.stopPropagation(),this.props.showContextMenu({topicName:this.props.item,y:e.pageY,x:e.pageX})}render(){let e=this.props.title;e?e.length>30&&(e=e.substring(0,28)+"…"):e=l().createElement("i",null,l().createElement(d.FormattedMessage,{id:"unnamed_topic",defaultMessage:[{type:0,value:"Unnamed"}]}));const t=this.props.now?"online":"offline",s=!this.props.avatar||this.props.avatar,a=this.props.badges?this.props.badges.slice():[],i=[];let n;this.props.isVerified&&i.push({icon:"verified",color:"verified-color"}),this.props.isStaff&&i.push({icon:"staff",color:"staff-color"}),this.props.isDangerous&&i.push({icon:"dangerous",color:"danger-color"}),this.props.acs&&(this.props.showMode&&a.push({name:this.props.acs.getMode(),key:"mode"}),this.props.acs.isMuted()&&i.push({icon:"muted"}),this.props.acs.isJoiner()||i.push({icon:"banned"})),"string"==typeof this.props.preview?n=this.props.preview:_s.Drafty.isValid(this.props.preview)?n=l().createElement(l().Fragment,null,_s.Drafty.format(this.props.preview,Qs,{formatMessage:this.props.intl.formatMessage,previewIsResponse:this.props.previewIsResponse})):this.props.preview&&(n=l().createElement(l().Fragment,null,l().createElement("i",{className:"material-icons gray"},"warning_amber")," ",l().createElement("i",{className:"gray"},l().createElement(d.FormattedMessage,{id:"invalid_content",defaultMessage:[{type:0,value:"invalid content"}]}))));const r=(0,Ws.LO)(this.props.received),o=r?l().createElement("i",{className:"material-icons small space-right"+(r.color?" "+r.color:"")},r.name):null,c="contact-title"+(this.props.deleted?" deleted":"");return l().createElement("li",{className:!this.props.showCheckmark&&this.props.selected?"selected":null,onClick:this.handleClick},l().createElement("div",{className:"avatar-box"},l().createElement(Fs.A,{tinode:this.props.tinode,avatar:s,title:this.props.title,topic:this.props.item,deleted:this.props.deleted}),this.props.deleted?l().createElement("i",{className:"deleted material-icons"},"cancel"):this.props.showOnline?l().createElement("span",{className:t}):this.props.showCheckmark&&this.props.selected?l().createElement("i",{className:"checkmark material-icons"},"check_circle"):null),l().createElement("div",{className:"text-box"},l().createElement("div",null,l().createElement("span",{className:c},e),this.props.isGroup?l().createElement("i",{className:"material-icons as-badge"},"group"):null,this.props.isChannel?l().createElement("img",{src:"/img/channel.png",className:"channel",alt:"channel"}):null,l().createElement(Ps,{badges:i}),this.props.deleted?null:l().createElement(Rs,{count:this.props.unread})),this.props.showMode?l().createElement("span",null,l().createElement(Ps,{badges:a})):this.props.small?null:l().createElement("div",{className:"contact-comment"},o,l().createElement("span",null,n||this.props.comment||" "))),this.props.showContextMenu?l().createElement("span",{className:"menuTrigger"},l().createElement("a",{href:"#",onClick:this.handleContextClick},l().createElement("i",{className:"material-icons"},"expand_more"))):null)}}var sa=(0,d.injectIntl)(ta);class aa extends l().PureComponent{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}handleClick(e){e.preventDefault(),e.stopPropagation(),this.props.onAction(this.props.action)}render(){const{formatMessage:e}=this.props.intl;return l().createElement("li",{onClick:this.handleClick,className:"action"},l().createElement("div",{className:"action-text"},e(this.props.title,this.props.values)))}}var ia=(0,d.injectIntl)(aa);const na=(0,d.defineMessages)({badge_you:{id:"badge_you",defaultMessage:[{type:0,value:"you"}]},badge_owner:{id:"badge_owner",defaultMessage:[{type:0,value:"owner"}]}});class ra extends l().Component{render(){const{formatMessage:e}=this.props.intl,t=Array.isArray(this.props.topicSelected),s=[];let a=0;return this.props.contacts&&this.props.contacts.length>0&&this.props.contacts.map((i=>{if(i.action)s.push(l().createElement(ia,{title:i.title,action:i.action,values:i.values,key:i.action,onAction:this.props.onAction}));else{const n=this.props.showMode?i.user:i.topic||i.user;if(this.props.filterFunc&&this.props.filter){const e=[n];if(i.private&&i.private.comment&&e.push((""+i.private.comment).toLowerCase()),i.public&&i.public.fn&&e.push((""+i.public.fn).toLowerCase()),!this.props.filterFunc(this.props.filter,e))return}const r=_s.Tinode.isChannelTopicName(n),o=!r&&_s.Tinode.isGroupTopicName(n),c=t?this.props.topicSelected.indexOf(n)>-1:this.props.topicSelected===n,d=[];this.props.showMode&&(n==this.props.myUserId&&d.push({name:e(na.badge_you),color:"green"}),i.acs&&i.acs.isOwner()&&d.push({name:e(na.badge_owner),color:"blue"}));const h=Array.isArray(i.private)?i.private.join(","):i.private?i.private.comment:null;let p,u,m,g;if(!this.props.showMode&&i.latestMessage){const e=i.latestMessage();e&&(u=e.head?e.head.forwarded:null,g=e._status||i.msgStatus(e,!0),m=e.from!=this.props.myUserId,e.content&&(p="string"==typeof e.content?e.content.substr(0,ks.sT):_s.Drafty.preview(e.content,ks.sT)))}s.push(l().createElement(sa,{tinode:this.props.tinode,title:i.public?i.public.fn:null,avatar:(0,Hs.to)(i.public?i.public.photo:null),comment:h,preview:p,previewIsResponse:m,forwarded:u,received:g,unread:this.props.showUnread?i.unread:0,now:i.online&&this.props.connected,acs:i.acs,showMode:this.props.showMode,badges:d,showCheckmark:t,selected:c,showOnline:this.props.showOnline&&!r,isChannel:r,isGroup:o,showContextMenu:this.props.showContextMenu,isVerified:i.trusted&&i.trusted.verified,isStaff:i.trusted&&i.trusted.staff,isDangerous:i.trusted&&i.trusted.danger,deleted:i._deleted,onSelected:this.props.onTopicSelected,item:n,index:s.length,key:n})),a++}}),this),l().createElement("div",{className:this.props.noScroll?null:"scrollable-panel"},0==a?l().createElement("div",{className:"center-medium-text",dangerouslySetInnerHTML:{__html:this.props.emptyListMessage}}):null,s.length>0?l().createElement("ul",{className:"contact-box"},s):null)}}var oa=(0,d.injectIntl)(ra);class la extends l().PureComponent{constructor(e){super(e),this.state={edited:!1,search:""},this.handleSearchChange=this.handleSearchChange.bind(this),this.handleSearch=this.handleSearch.bind(this),this.handleClear=this.handleClear.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}componentWillUnmount(){this.state.edited&&(this.setState({search:"",edited:!1}),this.props.onSearchContacts(_s.Tinode.DEL_CHAR))}handleSearchChange(e){this.setState({search:e.target.value})}handleSearch(e){e.preventDefault();const t=this.state.search.trim();this.setState({edited:t.length>0}),this.props.onSearchContacts(t.length>0?t:_s.Tinode.DEL_CHAR)}handleClear(e){e.preventDefault(),this.state.edited&&this.props.onSearchContacts(_s.Tinode.DEL_CHAR),this.setState({search:"",edited:!1})}handleKeyDown(e){"Enter"===e.key?this.handleSearch(e):"Escape"===e.key&&this.handleClear()}render(){return l().createElement("div",{className:"panel-form"},l().createElement("div",{className:"panel-form-row"},l().createElement("i",{className:"material-icons search"},"search"),l().createElement("input",{className:"search",type:"text",placeholder:this.props.placeholder,value:this.state.search,onChange:this.handleSearchChange,onKeyDown:this.handleKeyDown,required:!0,autoFocus:!0}),this.state.search?l().createElement("a",{href:"#",onClick:this.handleClear},l().createElement("i",{className:"material-icons"},"highlight_off")):l().createElement("span",null,l().createElement("i",{className:"material-icons"}," "))))}}class ca extends l().Component{constructor(e){super(e),this.state={query:null},this.handleEscapeKey=this.handleEscapeKey.bind(this),this.handleClose=this.handleClose.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleContactSelected=this.handleContactSelected.bind(this)}componentDidMount(){this.props.onInitFind()}handleEscapeKey(e){27===e.keyCode&&this.props.hide(!1)}handleClose(e){e.preventDefault(),this.props.hide(!1)}handleSearchContacts(e){this.setState({query:_s.Tinode.isNullValue(e)?null:e}),this.props.onSearchContacts(e)}handleContactSelected(e){this.props.onTopicSelected(e),this.props.hide(!0)}render(){let e=null!=this.state.query?this.props.searchResults:this.props.contacts;return e=e.filter((e=>e.name!=this.props.topicSelected&&e.acs.isJoiner()&&e.acs.isWriter())),l().createElement("div",{className:"alert-container"},l().createElement("div",{className:"forward-dialog"},l().createElement("div",{className:"title with-control"},l().createElement("div",null,l().createElement(d.FormattedMessage,{id:"forward_to",defaultMessage:[{type:0,value:"Forward to"}],desription:"Title of the contact selector dialog when forwarding a message"})),l().createElement("div",null,l().createElement("a",{href:"#",onClick:this.handleClose},l().createElement("i",{className:"material-icons"},"close")))),l().createElement(d.FormattedMessage,{id:"forward_to_search_placeholder",defaultMessage:[{type:0,value:"Search contacts"}]},(e=>l().createElement(la,{placeholder:e,onSearchContacts:this.handleSearchContacts}))),l().createElement(d.FormattedMessage,{id:"search_no_results",defaultMessage:[{type:0,value:"Search returned no results"}]},(t=>l().createElement(oa,{tinode:this.props.tinode,contacts:e,myUserId:this.props.myUserId,emptyListMessage:t,showOnline:!1,showUnread:!1,showContextMenu:!1,onTopicSelected:this.handleContactSelected})))))}}var da=r(635);const ha="started",pa=new Audio("audio/call-in.m4a");class ua extends l().Component{constructor(e){super(e),this.state={topic:null,fullName:void 0,avatar:null,trustedBadges:[],previousMetaDesc:void 0},this.resetDesc=this.resetDesc.bind(this),this.onMetaDesc=this.onMetaDesc.bind(this),this.handleRejectCall=this.handleRejectCall.bind(this),this.handleAcceptCall=this.handleAcceptCall.bind(this),this.ringTimer=null}componentDidMount(){const e=this.props.tinode.getTopic(this.props.topic);e&&(this.resetDesc(e),2==this.props.callState&&(pa.play().catch((e=>{})),this.ringTimer=setInterval((e=>{pa.play().catch((e=>{}))}),2e3),this.props.onRinging(this.props.topic,this.props.seq)))}componentDidUpdate(e){const t=this.props.tinode.getTopic(e.topic);t&&(this.onMetaDesc!=t.onMetaDesc&&(this.previousMetaDesc=t.onMetaDesc,t.onMetaDesc=this.onMetaDesc),this.state.topic!=e.topic&&(this.setState({topic:e.topic}),this.resetDesc(t,e)))}componentWillUnmount(){null!=this.ringTimer&&(clearInterval(this.ringTimer),pa.pause());const e=this.props.tinode.getTopic(this.props.topic);e&&(this.setState({topic:null}),e.onMetaDesc=this.previousMetaDesc)}resetDesc(e){const t=[];if(e.trusted)for(const[s,a]of Object.entries(e.trusted))a&&t.push(s);this.setState({fullName:(0,Ws.iL)(e.public?e.public.fn:void 0,ks.tS),avatar:(0,Hs.to)(e.public?e.public.photo:null),trustedBadges:t})}onMetaDesc(e){const t=this.props.tinode.getTopic(this.props.topic);t&&(this.resetDesc(t),this.previousMetaDesc&&this.previousMetaDesc!=this.onMetaDesc&&this.previousMetaDesc(e))}handleAcceptCall(){this.props.onAcceptCall(this.props.topic)}handleRejectCall(){this.props.onReject(this.props.topic,this.props.seq),this.props.onClose()}render(){return l().createElement("div",{className:"alert-container"},l().createElement("div",{className:"incoming-call"},l().createElement("div",{className:"caller-card incoming pulse"},l().createElement("div",{className:"avatar-box"},l().createElement(Fs.A,{tinode:this.props.tinode,avatar:this.state.avatar||!0,topic:this.props.topic,title:this.state.fullName})),l().createElement("div",{className:"caller-name"},(0,Ws.iL)(this.state.fullName,ks.mu),l().createElement(da.A,{short:!0,trustedBadges:this.state.trustedBadges}))),l().createElement("div",{className:"controls"},2==this.props.callState?l().createElement(l().Fragment,null,l().createElement("button",{className:"danger",onClick:this.handleRejectCall},l().createElement("i",{className:"material-icons"},"call_end")),l().createElement("button",{className:"positive",onClick:this.handleAcceptCall},l().createElement("i",{className:"material-icons"},"call"))):null)))}}var ma=r(9418),ga=r(1166);class fa extends l().PureComponent{render(){return l().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCancel()}},l().createElement("i",{className:"material-icons"},"close"))}}class va extends l().PureComponent{constructor(e){super(e),this.state={show:!1},this.hide=this.hide.bind(this)}componentDidUpdate(e){e.level!==this.props.level&&this.setState({show:!!this.props.level})}hide(){this.setState({show:!1}),this.props.onClearError&&this.props.onClearError()}render(){const e={err:"error",warn:"warning",info:"info"}[this.props.level]||"",t="info-box "+e;return l().createElement("div",{className:t},l().createElement("div",{className:"icon"},l().createElement("i",{className:"material-icons"},e)),l().createElement("span",null,this.props.text,this.props.action?l().createElement(l().Fragment,null," ",l().createElement("a",{href:"#",style:{whiteSpace:"nowrap"},onClick:e=>{e.preventDefault(),this.props.action()}},this.props.actionText)):null),l().createElement("div",{className:"cancel"},l().createElement(fa,{onCancel:this.hide})))}}class ba extends l().PureComponent{constructor(e){super(e),this.handleCancel=this.handleCancel.bind(this)}handleCancel(e){e.preventDefault(),this.props.onCancel(this.props.topic,this.props.index)}render(){const e=this.props.title||this.props.topic,t=this.props.invalid?"chip invalid":"chip";return l().createElement("div",{className:t},this.props.noAvatar?l().createElement("span",{className:"spacer"}):l().createElement("div",{className:"avatar-box"},l().createElement(Fs.A,{tinode:this.props.tinode,avatar:this.props.avatar||!0,topic:this.props.topic,title:this.props.title})),l().createElement("span",null,e),this.props.onCancel&&!this.props.required?l().createElement("a",{href:"#",onClick:this.handleCancel},"×"):l().createElement("span",{className:"spacer"}))}}class Ea extends l().Component{constructor(e){super(e),this.state=Ea.deriveStateFromProps(e),this.state.input="",this.state.focused=!1,this.handleTextInput=this.handleTextInput.bind(this),this.removeChipAt=this.removeChipAt.bind(this),this.handleChipCancel=this.handleChipCancel.bind(this),this.handleFocusGained=this.handleFocusGained.bind(this),this.handleFocusLost=this.handleFocusLost.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}static deriveStateFromProps(e){return{placeholder:e.chips?"":e.prompt,sortedChips:Ea.sortChips(e.chips,e.staticMembers),chipIndex:Ea.indexChips(e.chips)}}componentDidUpdate(e,t){e.chips==this.props.chips&&e.staticMembers==this.props.staticMembers&&e.prompt==this.props.prompt||this.setState(Ea.deriveStateFromProps(this.props)),(!t||this.props.chips.length>t.sortedChips.length)&&this.setState({input:""})}static indexChips(e){const t={};let s=0;return e.map((e=>{t[e.user]=s,s++})),t}static sortChips(e,t){const s=[],a=[];return e.map((e=>{t&&t.includes(e.user)?s.push(e):a.push(e)})),s.concat(a)}handleTextInput(e){this.setState({input:e.target.value}),this.props.filterFunc&&this.props.filterFunc(e.target.value)}removeChipAt(e){const t=this.state.sortedChips[e];this.props.onChipRemoved(t.user,this.state.chipIndex[t.user])}handleChipCancel(e,t){this.removeChipAt(t)}handleFocusGained(){this.setState({focused:!0})}handleFocusLost(){this.setState({focused:!1}),this.props.onFocusLost&&this.props.onFocusLost(this.state.input)}handleKeyDown(e){if("Backspace"===e.key){if(0==this.state.input.length&&this.state.sortedChips.length>0){const e=this.state.sortedChips.length-1;this.state.sortedChips[e].user!==this.props.staticMembers&&this.removeChipAt(e)}}else"Enter"===e.key?this.props.onEnter&&this.props.onEnter(this.state.input):"Escape"===e.key&&this.props.onCancel&&this.props.onCancel()}render(){const e=[];let t=0;const s=this.props.staticMembers||[];this.state.sortedChips.map((a=>{e.push(l().createElement(ba,{tinode:this.props.tinode,onCancel:this.handleChipCancel,avatar:(0,Hs.to)(a.public?a.public.photo:null),title:a.public?a.public.fn:void 0,noAvatar:this.props.avatarDisabled,topic:a.user,required:s.includes(a.user),invalid:a.invalid,index:t,key:a.user})),t++}));const a="chip-input"+(this.state.focused?" focused":""),i=!(this.props.tabIndex>0);return l().createElement("div",{className:a},e,l().createElement("input",{type:"text",placeholder:this.state.placeholder,onChange:this.handleTextInput,onFocus:this.handleFocusGained,onBlur:this.handleFocusLost,onKeyDown:this.handleKeyDown,value:this.state.input,tabIndex:this.props.tabIndex,autoFocus:i}))}}const ya=(0,d.defineMessages)({no_contacts:{id:"no_contacts",defaultMessage:[{type:0,value:"You have no contacts :-("}]},contacts_not_found_short:{id:"contacts_not_found_short",defaultMessage:[{type:0,value:"No contacts match '"},{type:1,value:"query"},{type:0,value:"'"}]}});class wa extends l().Component{constructor(e){super(e),this.state={members:e.members,index:wa.indexMembers(e.members),staticMembers:wa.staticMembers(e.members,e.keepInitialMembers,e.requiredMember),contactFilter:"",noContactsMessage:e.intl.formatMessage(ya.no_contacts),selectedContacts:wa.selectedContacts(e.members)},this.handleContactSelected=this.handleContactSelected.bind(this),this.handleMemberRemoved=this.handleMemberRemoved.bind(this),this.handleContactFilter=this.handleContactFilter.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}static indexMembers(e){let t={};return e.map((e=>{t[e.user]={delta:0,present:!0}})),t}static staticMembers(e,t,s){let a=[];return e.map((e=>{(t||e.user==s)&&a.push(e.user)})),a}static selectedContacts(e){let t=[];return e.map((e=>{t.push(e.user)})),t}handleContactSelected(e,t){let s=this.state.index[e];if(s){if(s.present)return;s.delta+=1,s.present=!0}else s={delta:1,present:!0};let a=this.state.members.slice();a.push(this.props.contacts[t]);const i=wa.selectedContacts(a),n=this.state.index;n[e]=s,this.setState({members:a,index:n,selectedContacts:i})}handleMemberRemoved(e,t){const s=this.state.index[e];if(!s||!s.present)return;s.present=!1,s.delta-=1;let a=this.state.members.slice();a.splice(t,1);const i=wa.selectedContacts(a),n=this.state.index;n[e]=s,this.setState({members:a,index:n,selectedContacts:i})}handleContactFilter(e){const{formatMessage:t}=this.props.intl,s=e?t(ya.contacts_not_found_short,{query:e}):t(ya.no_contacts);this.setState({contactFilter:e,noContactsMessage:s})}static doContactFiltering(e,t){if(e){for(let s=0;s
"},{type:0,value:"¯∖_(ツ)_/¯"}]},(e=>l().createElement(oa,{tinode:this.props.tinode,connected:this.props.connected,contacts:this.state.contactList,emptyListMessage:e,topicSelected:this.props.topicSelected,myUserId:this.props.myUserId,showOnline:!0,showUnread:!0,onTopicSelected:this.props.onTopicSelected,showContextMenu:this.props.showContextMenu,onAction:this.handleAction})))}}class Ni extends l().PureComponent{constructor(e){super(e),this.handleCheckboxClick=this.handleCheckboxClick.bind(this)}handleCheckboxClick(e,t){"sound"==e?this.props.onToggleMessageSounds(t):"alert"==e?this.props.onTogglePushNotifications(t):"incognito"==e&&this.props.onToggleIncognitoMode(t)}render(){return l().createElement("div",{className:"scrollable-panel"},l().createElement("div",{className:"panel-form-row"},l().createElement("label",{htmlFor:"message-sound"},l().createElement(d.FormattedMessage,{id:"label_message_sound",defaultMessage:[{type:0,value:"Message sound:"}]})),l().createElement(ga.A,{name:"sound",id:"message-sound",checked:this.props.messageSounds,onChange:this.handleCheckboxClick})),l().createElement("div",{className:"panel-form-row"},l().createElement("label",{htmlFor:"desktop-alerts"},this.props.desktopAlertsEnabled?l().createElement(d.FormattedMessage,{id:"label_push_notifications",defaultMessage:[{type:0,value:"Notification alerts:"}]}):l().createElement(d.FormattedMessage,{id:"label_push_notifications_disabled",defaultMessage:[{type:0,value:"Notification alerts (requires HTTPS):"}]})),l().createElement(ga.A,{name:"alert",id:"desktop-alerts",checked:this.props.desktopAlerts,onChange:this.props.desktopAlertsEnabled?this.handleCheckboxClick:null})),l().createElement("div",{className:"panel-form-row"},l().createElement("label",{htmlFor:"incognito-mode"},l().createElement(d.FormattedMessage,{id:"label_incognito_mode",defaultMessage:[{type:0,value:"Incognito mode:"}]})),l().createElement(ga.A,{name:"incognito",id:"incognito-mode",checked:this.props.incognitoMode,onChange:this.handleCheckboxClick})))}}const Ii=(0,d.defineMessages)({delete_account:{id:"delete_account",defaultMessage:[{type:0,value:"Delete account"}]},delete_account_warning:{id:"delete_account_warning",defaultMessage:[{type:0,value:"Are you sure you want to delete your account? It cannot be undone."}]}});class Pi extends l().Component{constructor(e){super(e);const t=this.props.tinode.getMeTopic();let s=0;t.contacts((e=>{e.acs&&!e.acs.isJoiner()&&s++}));const a=t.getDefaultAccess();this.state={auth:a?a.auth:null,anon:a?a.anon:null,showPermissionEditorFor:void 0,blockedCount:s},this.handlePasswordUpdate=this.handlePasswordUpdate.bind(this),this.handleLaunchPermissionsEditor=this.handleLaunchPermissionsEditor.bind(this),this.handleHidePermissionsEditor=this.handleHidePermissionsEditor.bind(this),this.handlePermissionsChanged=this.handlePermissionsChanged.bind(this),this.handleDeleteAccount=this.handleDeleteAccount.bind(this)}handlePasswordUpdate(e){this.setState({password:e}),this.props.onUpdatePassword(e)}handleLaunchPermissionsEditor(e){this.setState({showPermissionEditorFor:e,editedPermissions:this.state[e]})}handleHidePermissionsEditor(){this.setState({showPermissionEditorFor:void 0})}handlePermissionsChanged(e){let t={};t[this.state.showPermissionEditorFor]=e,this.props.onUpdateAccountDesc("me",void 0,void 0,t);let s={showPermissionEditorFor:void 0};s[this.state.showPermissionEditorFor]=e,this.setState(s)}handleDeleteAccount(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(Ii.delete_account),t(Ii.delete_account_warning),(e=>this.props.onDeleteAccount()),null,!0,null)}render(){return l().createElement(l().Fragment,null,this.state.showPermissionEditorFor?l().createElement(_a,{mode:this.state.editedPermissions,skip:"O",onSubmit:this.handlePermissionsChanged,onCancel:this.handleHidePermissionsEditor}):l().createElement("div",{className:"scrollable-panel"},l().createElement("div",{className:"panel-form-column"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_password",defaultMessage:[{type:0,value:"Password"}]})),l().createElement("div",null,l().createElement(d.FormattedMessage,{id:"password_unchanged_prompt",defaultMessage:[{type:0,value:"Unchanged"}]},(e=>l().createElement(Ia,{placeholder:e,type:"password",onFinished:this.handlePasswordUpdate}))))),l().createElement("div",{className:"hr"}),l().createElement("div",{className:"panel-form-column"},l().createElement("a",{href:"#",className:"danger flat-button",onClick:e=>{e.preventDefault(),this.props.onLogout()}},l().createElement("i",{className:"material-icons"},"exit_to_app")," ",l().createElement(d.FormattedMessage,{id:"button_logout",defaultMessage:[{type:0,value:"Logout"}]})),l().createElement("a",{href:"#",className:"danger flat-button",onClick:e=>{this.handleDeleteAccount(e)}},l().createElement("i",{className:"material-icons"},"delete")," ",l().createElement(d.FormattedMessage,{id:"button_delete_account",defaultMessage:[{type:0,value:"Delete account"}]}))),l().createElement("div",{className:"hr"}),l().createElement("div",{className:"panel-form-column"},l().createElement("div",null,l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_default_access_mode",defaultMessage:[{type:0,value:"Default access mode:"}]}))),l().createElement("div",{className:"quoted"},l().createElement("div",null,"Auth: ",l().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"auth")},this.state.auth)),l().createElement("div",null,"Anon: ",l().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"anon")},this.state.anon)))),this.state.blockedCount>0?l().createElement(l().Fragment,null,l().createElement("div",{className:"hr"}),l().createElement("div",{className:"panel-form-row"},l().createElement("i",{className:"material-icons"},"block")," ",l().createElement("a",{href:"#",className:"gray",onClick:e=>{e.preventDefault(),this.props.onShowBlocked()}},l().createElement(d.FormattedMessage,{id:"blocked_contacts_link",defaultMessage:[{type:0,value:"Blocked contacts ("},{type:1,value:"count"},{type:0,value:")"}],values:{count:this.state.blockedCount}})))):null))}}var Fi=(0,d.injectIntl)(Pi);class Ri extends l().PureComponent{render(){return l().createElement("div",{className:"scrollable-panel"},l().createElement("div",{className:"panel-form-column"},l().createElement("a",{href:ks.fi,className:"flat-button",target:"_blank"},l().createElement("i",{className:"material-icons"},"email")," ",l().createElement(d.FormattedMessage,{id:"link_contact_us",defaultMessage:[{type:0,value:"Contact Us"}]})),l().createElement("a",{href:ks.V9,className:"flat-button",target:"_blank"},l().createElement("i",{className:"material-icons"},"description")," ",l().createElement(d.FormattedMessage,{id:"link_terms_of_service",defaultMessage:[{type:0,value:"Terms of Service"}]})),l().createElement("a",{href:ks.RS,className:"flat-button",target:"_blank"},l().createElement("i",{className:"material-icons"},"policy")," ",l().createElement(d.FormattedMessage,{id:"link_privacy_policy",defaultMessage:[{type:0,value:"Privacy Policy"}]}))),l().createElement("div",{className:"hr"}),l().createElement("div",{className:"panel-form-column"},l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_client",defaultMessage:[{type:0,value:"Client:"}]})),ks.C3),l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_sdk",defaultMessage:[{type:0,value:"SDK:"}]})),_s.Tinode.getLibrary()),l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_server",defaultMessage:[{type:0,value:"Server:"}]})),this.props.serverVersion),l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_server_address",defaultMessage:[{type:0,value:"Server address:"}]})),this.props.serverAddress)))}}class xi extends l().Component{constructor(e){super(e),this.state={login:e.login,password:"",hostName:e.serverAddress,saveToken:e.persist},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e.target.value})}handleToggleSaveToken(){this.props.onPersistenceChange(!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.props.onLogin(this.state.login.trim(),this.state.password.trim())}render(){let e="primary";return this.props.disabled&&(e+=" disabled"),l().createElement("form",{id:"login-form",onSubmit:this.handleSubmit},l().createElement(d.FormattedMessage,{id:"login_prompt",defaultMessage:[{type:0,value:"Login"}]},(e=>l().createElement("input",{type:"text",id:"inputLogin",placeholder:e,autoComplete:"username",autoCorrect:"off",autoCapitalize:"none",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0}))),l().createElement(d.FormattedMessage,{id:"password_prompt",defaultMessage:[{type:0,value:"Password"}]},(e=>l().createElement(Na.A,{type:"password",id:"inputPassword",placeholder:e,autoComplete:"current-password",value:this.state.password,onChange:this.handlePasswordChange,required:!0}))),l().createElement("div",{className:"panel-form-row"},l().createElement(ga.A,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),l().createElement("label",{htmlFor:"save-token"}," ",l().createElement(d.FormattedMessage,{id:"stay_logged_in",defaultMessage:[{type:0,value:"Stay logged in"}]})),l().createElement("a",{href:"#reset"},l().createElement(d.FormattedMessage,{id:"forgot_password_link",defaultMessage:[{type:0,value:"Forgot password?"}]}))),l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{className:e,type:"submit"},l().createElement(d.FormattedMessage,{id:"button_sign_in",defaultMessage:[{type:0,value:"Sign in"}]}))))}}const Ui=(0,d.defineMessages)({invalid_id:{id:"error_invalid_id",defaultMessage:[{type:0,value:"Invalid ID"}]}});class Li extends l().PureComponent{constructor(e){super(e),this.qrCodeRef=l().createRef(),this.state={groupId:""},this.handleChange=this.handleChange.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}componentDidMount(){new(ka())(this.qrCodeRef.current,{text:this.props.myURI,width:ks.Tn,height:ks.Tn})}handleChange(e){this.setState({groupId:e.target.value})}handleKeyPress(e){"Enter"===e.key&&this.handleSubmit(e)}handleSubmit(e){if(e.preventDefault(),this.state.groupId){const e=this.state.groupId.trim(),t=e.substring(0,3);e.length>3&&["usr","grp","chn"].includes(t)?this.props.onSubmit(e):this.props.onError(this.props.intl.formatMessage(Ui.invalid_id),"err")}}render(){return l().createElement("div",{className:"panel-form"},l().createElement("div",{className:"panel-form-row"},l().createElement(d.FormattedMessage,{id:"group_user_id_prompt",defaultMessage:[{type:0,value:"Group or User ID"}]},(e=>l().createElement("input",{type:"text",placeholder:e,value:this.state.groupId,onChange:this.handleChange,onKeyDown:this.handleKeyPress,required:!0,autoFocus:!0})))),l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{className:"primary",onClick:this.handleSubmit},l().createElement(d.FormattedMessage,{id:"button_subscribe",defaultMessage:[{type:0,value:"Subscribe"}]}))),l().createElement("br",null),l().createElement("div",{className:"panel-form-column"},l().createElement("label",{className:"small"},"Scan my ID:"),l().createElement("div",{className:"qr-code",ref:this.qrCodeRef})))}}var Oi=(0,d.injectIntl)(Li);class qi extends l().PureComponent{constructor(e){super(e),this.fullName=l().createRef(),this.state={fullName:"",private:"",description:"",imageUrl:null,tags:[],isChannel:!1,newAvatar:null,newAvatarMime:null},this.handleFieldEdit=this.handleFieldEdit.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleAvatarCropped=this.handleAvatarCropped.bind(this),this.handleAvatarCropCancel=this.handleAvatarCropCancel.bind(this),this.uploadAvatar=this.uploadAvatar.bind(this),this.handleTagsChanged=this.handleTagsChanged.bind(this),this.handleChannelToggle=this.handleChannelToggle.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}componentDidMount(){}handleFieldEdit(e,t){this.setState({[e]:t.target.value||""})}handleImageChanged(e,t){this.setState({newAvatar:t,newAvatarMime:e})}handleAvatarCropped(e,t,s,a){const i=t?URL.createObjectURL(t):null;this.setState({imageUrl:i,newAvatar:null,newAvatarMime:null}),t&&this.uploadAvatar(e,t,s,a)}handleAvatarCropCancel(){this.setState({newAvatar:null,newAvatarMime:null})}uploadAvatar(e,t,s,a){const i=e=>{let{mime:t,blob:s}=e;if(s.size>ks.Z7){this.props.tinode.getLargeFileHelper().upload(s).then((e=>this.setState({imageUrl:e}))).catch((e=>this.props.onError(e.message,"err")))}else(0,Hs.Sk)(s).then((e=>this.setState({imageUrl:(0,Hs.to)({data:e.bits,type:t})})))};s>ks.eQ||a>ks.eQ||s!=a?(0,Hs.ag)(t,ks.eQ,ks.eQ,ks.qy,!0).then((e=>i(e))).catch((e=>this.props.onError(e.message,"err"))):i({mime:e,blob:t,width:s,height:a})}handleTagsChanged(e){this.setState({tags:e})}handleChannelToggle(){this.setState({isChannel:!this.state.isChannel})}handleSubmit(e){e.preventDefault();const t=this.state.fullName.trim().substring(0,ks.tS),s=this.state.private.trim().substring(0,ks.tS),a=this.state.description.trim().substring(0,ks.lQ);t&&this.props.onSubmit(t,a,this.state.imageUrl,s,this.state.tags,this.state.isChannel)}render(){if(this.state.newAvatar)return l().createElement(Da.A,{avatar:this.state.newAvatar,mime:this.state.newAvatarMime,onSubmit:this.handleAvatarCropped,onCancel:this.handleAvatarCropCancel,onError:this.props.onError});let e="primary";return this.props.disabled&&(e+=" disabled"),l().createElement("form",{className:"panel-form",onSubmit:this.handleSubmit},l().createElement("div",{className:"panel-form-column"},l().createElement("center",null,l().createElement(ma.A,{tinode:this.props.tinode,avatar:this.state.imageUrl,onError:this.props.onError,onImageUpdated:this.handleImageChanged})),l().createElement("div",{className:"group"},l().createElement("label",{className:"small",htmlFor:"new-topic-fn"},l().createElement(d.FormattedMessage,{id:"label_topic_name",defaultMessage:[{type:0,value:"Name"}]})),l().createElement(d.FormattedMessage,{id:"topic_name_editing_placeholder",defaultMessage:[{type:0,value:"Freeform name of the group"}]},(e=>l().createElement("input",{type:"text",id:"new-topic-fn",placeholder:e,ref:this.fullName,value:this.state.fullName,onChange:this.handleFieldEdit.bind(this,"fullName"),autoFocus:!0,required:!0,tabIndex:0})))),l().createElement("div",{className:"group"},l().createElement("label",{className:"small",htmlFor:"new-topic-priv"},l().createElement(d.FormattedMessage,{id:"label_private",defaultMessage:[{type:0,value:"Private comment"}]})),l().createElement(d.FormattedMessage,{id:"private_editing_placeholder",defaultMessage:[{type:0,value:"Visible to you only"}]},(e=>l().createElement("input",{type:"text",id:"new-topic-priv",placeholder:e,value:this.state.private,onChange:this.handleFieldEdit.bind(this,"private"),tabIndex:1})))),l().createElement("div",{className:"group"},l().createElement("label",{className:"small",htmlFor:"new-topic-desc"},l().createElement(d.FormattedMessage,{id:"label_description",defaultMessage:[{type:0,value:"Description"}]})),l().createElement(d.FormattedMessage,{id:"description_editing_placeholder",defaultMessage:[{type:0,value:"Description (optional)"}]},(e=>l().createElement("input",{type:"text",id:"new-topic-desc",placeholder:e,value:this.state.description,onChange:this.handleFieldEdit.bind(this,"description"),tabIndex:2}))))),l().createElement("div",{className:"panel-form-row"},l().createElement(ga.A,{checked:this.state.isChannel,tabIndex:3,onChange:this.handleChannelToggle})," ",l().createElement("label",{onClick:this.handleChannelToggle},l().createElement(d.FormattedMessage,{id:"channel_prompt",defaultMessage:[{type:0,value:"This is a channel"}]}))),l().createElement(d.FormattedMessage,{id:"title_tag_manager",defaultMessage:[{type:0,value:"Tags (search & discovery)"}]},(e=>l().createElement(Pa,{tinode:this.props.tinode,tags:this.state.tags,activated:!0,onTagsChanged:this.handleTagsChanged,tabIndex:4,title:e}))),l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{className:e},l().createElement(d.FormattedMessage,{id:"button_create",defaultMessage:[{type:0,value:"Create"}]}))))}}const Bi=(0,d.defineMessages)({search_for_contacts:{id:"search_for_contacts",defaultMessage:[{type:0,value:"Use search to find contacts"}]},search_no_results:{id:"search_no_results",defaultMessage:[{type:0,value:"Search returned no results"}]},search_placeholder:{id:"search_placeholder",defaultMessage:[{type:0,value:"List like alice@example.com, +17025550003..."}]}});class ji extends l().Component{constructor(e){super(e),this.state={tabSelected:"find",searchQuery:null},this.handleTabClick=this.handleTabClick.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleSearchResultSelected=this.handleSearchResultSelected.bind(this),this.handleNewGroupSubmit=this.handleNewGroupSubmit.bind(this),this.handleGroupByID=this.handleGroupByID.bind(this)}componentDidMount(){this.props.onInitFind()}handleTabClick(e){e.preventDefault(),vi.A.navigateTo(vi.A.addUrlParam(window.location.hash,"tab",e.currentTarget.dataset.id)),this.setState({tabSelected:e.currentTarget.dataset.id})}handleSearchContacts(e){this.props.onSearchContacts(e),this.setState({searchQuery:_s.Tinode.isNullValue(e)?null:e})}handleSearchResultSelected(e){"find"==this.state.tabSelected&&(vi.A.navigateTo(vi.A.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(e))}handleNewGroupSubmit(e,t,s,a,i,n){vi.A.navigateTo(vi.A.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(void 0,{public:(0,Ws.k6)(e,s,null,t),private:a,tags:i},n)}handleGroupByID(e){vi.A.navigateTo(vi.A.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(e)}render(){const{formatMessage:e}=this.props.intl,t=e(this.state.searchQuery?Bi.search_no_results:Bi.search_for_contacts),s=e(Bi.search_placeholder);return l().createElement("div",{className:"flex-column"},l().createElement("ul",{className:"tabbar"},l().createElement("li",{className:"find"===this.state.tabSelected?"active":null},l().createElement("a",{href:"#","data-id":"find",onClick:this.handleTabClick},l().createElement(d.FormattedMessage,{id:"tabtitle_find_user",defaultMessage:[{type:0,value:"find"}]}))),l().createElement("li",{className:"grp"===this.state.tabSelected?"active":null},l().createElement("a",{href:"#","data-id":"grp",onClick:this.handleTabClick},l().createElement(d.FormattedMessage,{id:"tabtitle_new_group",defaultMessage:[{type:0,value:"new group"}]}))),l().createElement("li",{className:"byid"===this.state.tabSelected?"active":null},l().createElement("a",{href:"#","data-id":"byid",onClick:this.handleTabClick},l().createElement(d.FormattedMessage,{id:"tabtitle_group_by_id",defaultMessage:[{type:0,value:"by id"}]})))),"grp"===this.state.tabSelected?l().createElement(qi,{tinode:this.props.tinode,onSubmit:this.handleNewGroupSubmit,onError:this.props.onError}):"byid"===this.state.tabSelected?l().createElement(Oi,{myURI:_s.Tinode.URI_TOPIC_ID_PREFIX+this.props.tinode.getCurrentUserID(),onSubmit:this.handleGroupByID,onError:this.props.onError}):l().createElement("div",{className:"flex-column"},l().createElement(la,{placeholder:s,onSearchContacts:this.handleSearchContacts}),l().createElement(oa,{tinode:this.props.tinode,contacts:this.props.searchResults,myUserId:this.props.myUserId,emptyListMessage:t,showOnline:!1,showUnread:!1,showContextMenu:!1,onTopicSelected:this.handleSearchResultSelected})))}}var Vi=(0,d.injectIntl)(ji);class Hi extends l().PureComponent{constructor(e){super(e),this.state={hostName:e.serverAddress,changed:!1},this.handleHostNameChange=this.handleHostNameChange.bind(this),this.handleEditingFinished=this.handleEditingFinished.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}handleHostNameChange(e){this.setState({hostName:e.target.value,changed:!0})}handleEditingFinished(){this.state.changed&&(this.setState({changed:!1}),this.props.onServerAddressChange(this.state.hostName.trim()))}handleKeyDown(e){"Enter"==e.key&&this.handleEditingFinished()}render(){var e=[];for(let t in ks.SE){let s=ks.SE[t];e.push(l().createElement("option",{key:s,value:s}))}return l().createElement("div",{className:"panel-form-row"},l().createElement("input",{type:"search",id:"host-name",placeholder:this.props.hostName,list:"known-hosts",className:"quoted",value:this.state.hostName,onChange:this.handleHostNameChange,onBlur:this.handleEditingFinished,onKeyDown:this.handleKeyDown,required:!0}),l().createElement("datalist",{id:"known-hosts"},e))}}class Wi extends l().PureComponent{constructor(e){super(e),this.state={transport:e.transport||"def",serverAddress:e.serverAddress,secureConnection:e.secureConnection},this.handleSubmit=this.handleSubmit.bind(this),this.handleTransportSelected=this.handleTransportSelected.bind(this),this.handleServerAddressChange=this.handleServerAddressChange.bind(this),this.handleToggleSecure=this.handleToggleSecure.bind(this)}handleSubmit(e){e.preventDefault(),this.props.onUpdate({transport:this.state.transport,serverAddress:this.state.serverAddress,secureConnection:this.state.secureConnection})}handleTransportSelected(e){this.setState({transport:e.currentTarget.value})}handleServerAddressChange(e){this.setState({serverAddress:e})}handleToggleSecure(e){this.setState({secureConnection:!this.state.secureConnection})}render(){const e={def:"default",ws:"websocket",lp:"long polling"},t=[];return["def","ws","lp"].map((s=>{const a="transport-"+s,i=e[s];t.push(l().createElement("li",{key:s},l().createElement("input",{type:"radio",id:a,name:"transport-select",value:s,checked:this.state.transport===s,onChange:this.handleTransportSelected}),l().createElement("label",{htmlFor:a},i)))})),l().createElement("form",{id:"settings-form",className:"panel-form",onSubmit:this.handleSubmit},l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_server_to_use",defaultMessage:[{type:0,value:"Server to use:"}]}))),l().createElement(Hi,{serverAddress:this.state.serverAddress,onServerAddressChange:this.handleServerAddressChange}),l().createElement("div",{className:"panel-form-row"},l().createElement(ga.A,{id:"secure-connection",name:"secure-connection",checked:this.state.secureConnection,className:"quoted",onChange:this.handleToggleSecure}),l().createElement("label",{htmlFor:"secure-connection"},l().createElement(d.FormattedMessage,{id:"label_use_secure_connection",defaultMessage:[{type:0,value:"Use secure connection"}]}))),l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_wire_transport",defaultMessage:[{type:0,value:"Wire transport:"}]}))),l().createElement("div",{className:"panel-form-row"},l().createElement("ul",{className:"quoted"},t)),l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{type:"submit",className:"primary"},l().createElement(d.FormattedMessage,{id:"button_update",defaultMessage:[{type:0,value:"Update"}]}))))}}const zi=(0,d.defineMessages)({phone:{id:"phone_dative",defaultMessage:[{type:0,value:"phone"}]},email:{id:"email_dative",defaultMessage:[{type:0,value:"email"}]}});class Ki extends l().PureComponent{constructor(e){super(e),this.state={code:e.credCode||"",codeReceived:e.credCode},this.handleCodeChange=this.handleCodeChange.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}static getDerivedStateFromProps(e,t){return e.credCode!=t.codeReceived?{code:e.credCode||"",codeReceived:e.credCode}:t}componentDidMount(){this.props.credCode&&this.props.onSubmit(this.props.credMethod,this.props.credCode,this.props.credToken)}componentDidUpdate(e,t){this.state.codeReceived&&this.state.code&&this.state.code!=t.code&&this.props.onSubmit(this.props.credMethod,this.state.code,this.props.credToken)}handleCodeChange(e){this.setState({code:e.target.value.replace(/[^\d]/g,"")})}handleKeyPress(e){"Enter"===e.key?this.handleSubmit(e):"Escape"==e.key&&this.handleCancel(e)}handleSubmit(e){e.preventDefault(),this.state.code&&this.state.code.trim()&&this.props.onSubmit(this.props.credMethod,this.state.code.trim(),this.props.credToken)}handleCancel(e){e.preventDefault(),this.props.onCancel()}render(){const{formatMessage:e}=this.props.intl,t={email:e(zi.email),tel:e(zi.phone)}[this.props.credMethod]||this.props.credMethod;return l().createElement("div",{className:"panel-form"},l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small gray",htmlFor:"enter-confirmation-code"},l().createElement(d.FormattedMessage,{id:"enter_confirmation_code_prompt",defaultMessage:[{type:0,value:"Confirmation code"}],values:{method:t}}))),l().createElement("div",{className:"panel-form-row"},l().createElement(d.FormattedMessage,{id:"numeric_confirmation_code_prompt",defaultMessage:[{type:0,value:"Numbers only"}]},(e=>l().createElement("input",{type:"text",id:"enter-confirmation-code",placeholder:e,value:this.state.code,onChange:this.handleCodeChange,onKeyDown:this.handleKeyPress,required:!0})))),l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{className:"secondary",onClick:this.handleCancel},l().createElement(d.FormattedMessage,{id:"button_cancel",defaultMessage:[{type:0,value:"Cancel"}]})),l().createElement("button",{className:"primary",onClick:this.handleSubmit},l().createElement(d.FormattedMessage,{id:"button_confirm",defaultMessage:[{type:0,value:"Confirm"}]}))))}}var Gi=(0,d.injectIntl)(Ki);const $i=l().lazy((e=>Promise.all([r.e(961),r.e(271)]).then(r.bind(r,4271)))),Qi=l().lazy((e=>Promise.all([r.e(961),r.e(996)]).then(r.bind(r,3996)))),Ji=l().lazy((e=>Promise.all([r.e(961),r.e(993)]).then(r.bind(r,3993)))),Yi=(0,d.defineMessages)({login:{id:"sidepanel_title_login",defaultMessage:[{type:0,value:"Sign In"}]},register:{id:"sidepanel_title_register",defaultMessage:[{type:0,value:"Create Account"}]},settings:{id:"sidepanel_title_settings",defaultMessage:[{type:0,value:"Settings"}]},edit:{id:"sidepanel_title_account_settings",defaultMessage:[{type:0,value:"Account Settings"}]},general:{id:"panel_title_general",defaultMessage:[{type:0,value:"General"}]},security:{id:"panel_title_security",defaultMessage:[{type:0,value:"Security"}]},crop:{id:"panel_title_crop",defaultMessage:[{type:0,value:"Drag to Adjust"}]},notif:{id:"sidepanel_title_acc_notifications",defaultMessage:[{type:0,value:"Notifications"}]},support:{id:"sidepanel_title_acc_support",defaultMessage:[{type:0,value:"Support"}]},newtpk:{id:"sidepanel_title_newtpk",defaultMessage:[{type:0,value:"Start New Chat"}]},cred:{id:"sidepanel_title_cred",defaultMessage:[{type:0,value:"Confirm Credentials"}]},reset:{id:"sidepanel_title_reset",defaultMessage:[{type:0,value:"Reset Password"}]},archive:{id:"sidepanel_title_archive",defaultMessage:[{type:0,value:"Archived Chats"}]},blocked:{id:"sidepanel_title_blocked",defaultMessage:[{type:0,value:"Blocked Chats"}]}});class Xi extends l().PureComponent{constructor(e){super(e),this.handleNewTopic=this.handleNewTopic.bind(this)}handleNewTopic(){this.props.onNavigate("newtpk")}render(){const{formatMessage:e}=this.props.intl,t=this.props.state||(this.props.myUserId?"contacts":"login");let s,a,i,n;return"contacts"==t?(s=this.props.title,a=!this.props.avatar||this.props.avatar,i=this.props.trustedBadges):(s=e(Yi[t]),a=!1,i=null),-1==["login","contacts"].indexOf(t)&&(n=this.props.onCancel),l().createElement("div",{id:"sidepanel"},l().createElement(ki,{state:t,title:s,avatar:a,tinode:this.props.tinode,trustedBadges:i,myUserId:this.props.myUserId,onSignUp:this.props.onSignUp,onSettings:this.props.onSettings,onNewTopic:this.handleNewTopic,onCancel:n}),l().createElement(va,{level:this.props.errorLevel,text:this.props.errorText,action:this.props.errorAction,actionText:this.props.errorActionText,onClearError:this.props.onError}),l().createElement(hi.A,{show:this.props.loadSpinnerVisible}),"login"===t?l().createElement(xi,{login:this.props.login,disabled:this.props.loginDisabled,persist:this.props.persist,onLogin:this.props.onLoginRequest,onPersistenceChange:this.props.onPersistenceChange}):"register"===t?l().createElement(o.Suspense,{fallback:l().createElement("div",{className:"panel-form-row"},l().createElement(d.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},l().createElement(Qi,{tinode:this.props.tinode,reqCredMethod:this.props.reqCredMethod,onShowCountrySelector:this.props.onShowCountrySelector,onCreateAccount:this.props.onCreateAccount,onCancel:this.props.onCancel,onError:this.props.onError})):"settings"===t?l().createElement(Wi,{transport:this.props.transport,serverAddress:this.props.serverAddress,secureConnection:this.props.secureConnection,onCancel:this.props.onCancel,onUpdate:this.props.onGlobalSettings}):"edit"===t?l().createElement(o.Suspense,{fallback:l().createElement("div",{className:"panel-form-row"},l().createElement(d.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},l().createElement($i,{tinode:this.props.tinode,myUserId:this.props.myUserId,trustedBadges:this.props.trustedBadges,reqCredMethod:this.props.reqCredMethod,onShowCountrySelector:this.props.onShowCountrySelector,onNavigate:this.props.onNavigate,onCredAdd:this.props.onCredAdd,onCredDelete:this.props.onCredDelete,onCredConfirm:this.props.onCredConfirm,onError:this.props.onError})):"general"===t||"crop"===t?l().createElement(Ra,{topic:"me",tinode:this.props.tinode,myUserId:this.props.myUserId,reqCredMethod:this.props.reqCredMethod,onUpdateTopicDesc:this.props.onUpdateAccountDesc,onUpdateTagsRequest:this.props.onUpdateAccountTags,onError:this.props.onError}):"notif"===t?l().createElement(Ni,{messageSounds:this.props.messageSounds,desktopAlerts:this.props.desktopAlerts,desktopAlertsEnabled:this.props.desktopAlertsEnabled,incognitoMode:this.props.incognitoMode,onTogglePushNotifications:this.props.onTogglePushNotifications,onToggleMessageSounds:this.props.onToggleMessageSounds,onToggleIncognitoMode:this.props.onToggleIncognitoMode}):"security"===t?l().createElement(Fi,{tinode:this.props.tinode,onUpdateAccountDesc:this.props.onUpdateAccountDesc,onUpdatePassword:this.props.onUpdatePassword,onLogout:this.props.onLogout,onDeleteAccount:this.props.onDeleteAccount,onShowAlert:this.props.onShowAlert,onShowBlocked:this.props.onShowBlocked}):"support"===t?l().createElement(Ri,{serverAddress:this.props.serverAddress,serverVersion:this.props.serverVersion}):"contacts"===t||"archive"==t||"blocked"==t?l().createElement(Di,{tinode:this.props.tinode,myUserId:this.props.myUserId,connected:this.props.connected,topicSelected:this.props.topicSelected,archive:"archive"==t,blocked:"blocked"==t,chatList:this.props.chatList,showContextMenu:this.props.showContextMenu,onTopicSelected:this.props.onTopicSelected,onShowArchive:this.props.onShowArchive}):"newtpk"===t?l().createElement(Vi,{tinode:this.props.tinode,searchResults:this.props.searchResults,onInitFind:this.props.onInitFind,onSearchContacts:this.props.onSearchContacts,onCreateTopic:this.props.onCreateTopic,onError:this.props.onError}):"cred"===t?l().createElement(Gi,{credCode:this.props.credCode,credMethod:this.props.credMethod,credToken:this.props.credToken,onSubmit:this.props.onValidateCredentials,onCancel:this.props.onCancel}):"reset"===t?l().createElement(o.Suspense,{fallback:l().createElement("div",{className:"panel-form-row"},l().createElement(d.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},l().createElement(Ji,{tinode:this.props.tinode,reqCredMethod:this.props.reqCredMethod,onShowCountrySelector:this.props.onShowCountrySelector,onRequest:this.props.onPasswordResetRequest,onReset:this.props.onResetPassword,onCancel:this.props.onCancel,onError:this.props.onError})):null)}}var Zi=(0,d.injectIntl)(Xi),en=r(257);function tn(){let e=ks.HX;return"object"==typeof window.location&&("file:"==window.location.protocol||"localhost"==window.location.hostname?e=ks.SE.local:window.location.hostname&&(e=window.location.hostname+(window.location.port?":"+window.location.port:""))),e}function sn(){return"object"==typeof window.location&&"https:"==window.location.protocol}var an=r(8262);const nn=l().lazy((e=>r.e(316).then(r.bind(r,4316)))),rn=new Audio("audio/msg.m4a"),on=(0,d.defineMessages)({reconnect_countdown:{id:"reconnect_countdown",defaultMessage:[{type:0,value:"Disconnected. Reconnecting in "},{type:1,value:"seconds"},{type:0,value:"…"}]},reconnect_now:{id:"reconnect_now",defaultMessage:[{type:0,value:"Try now"}]},push_init_failed:{id:"push_init_failed",defaultMessage:[{type:0,value:"Failed to initialize push notifications"}]},invalid_security_token:{id:"invalid_security_token",defaultMessage:[{type:0,value:"Invalid security token"}]},no_connection:{id:"no_connection",defaultMessage:[{type:0,value:"No connection"}]},code_doesnot_match:{id:"code_doesnot_match",defaultMessage:[{type:0,value:"Code does not match"}]},menu_item_info:{id:"menu_item_info",defaultMessage:[{type:0,value:"Info"}]},menu_item_audio_call:{id:"menu_item_audio_call",defaultMessage:[{type:0,value:"Call"}]},menu_item_video_call:{id:"menu_item_video_call",defaultMessage:[{type:0,value:"Video call"}]},cred_confirmed_successfully:{id:"cred_confirmed_successfully",defaultMessage:[{type:0,value:"Confirmed successfully"}]},password_reset_success:{id:"password_reset_success",defaultMessage:[{type:0,value:"Password reset successfully"}]}});class ln extends l().Component{constructor(e){super(e),this.selfRef=l().createRef(),this.state=this.getBlankState(),this.handleResize=this.handleResize.bind(this),this.handleHashRoute=this.handleHashRoute.bind(this),this.handleOnline=this.handleOnline.bind(this),this.checkForAppUpdate=this.checkForAppUpdate.bind(this),this.handleVisibilityEvent=this.handleVisibilityEvent.bind(this),this.handleError=this.handleError.bind(this),this.handleLoginRequest=this.handleLoginRequest.bind(this),this.handlePersistenceChange=this.handlePersistenceChange.bind(this),this.handleConnected=this.handleConnected.bind(this),this.handleAutoreconnectIteration=this.handleAutoreconnectIteration.bind(this),this.doLogin=this.doLogin.bind(this),this.handleLoginSuccessful=this.handleLoginSuccessful.bind(this),this.handleDisconnect=this.handleDisconnect.bind(this),this.tnMeMetaDesc=this.tnMeMetaDesc.bind(this),this.tnMeContactUpdate=this.tnMeContactUpdate.bind(this),this.tnMeSubsUpdated=this.tnMeSubsUpdated.bind(this),this.resetContactList=this.resetContactList.bind(this),this.tnInitFind=this.tnInitFind.bind(this),this.tnFndSubsUpdated=this.tnFndSubsUpdated.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleTopicSelected=this.handleTopicSelected.bind(this),this.handleHideMessagesView=this.handleHideMessagesView.bind(this),this.handleSendMessage=this.handleSendMessage.bind(this),this.handleNewChatInvitation=this.handleNewChatInvitation.bind(this),this.handleNewAccount=this.handleNewAccount.bind(this),this.handleNewAccountRequest=this.handleNewAccountRequest.bind(this),this.handleUpdatePasswordRequest=this.handleUpdatePasswordRequest.bind(this),this.handleUpdateAccountTagsRequest=this.handleUpdateAccountTagsRequest.bind(this),this.handleToggleIncognitoMode=this.handleToggleIncognitoMode.bind(this),this.handleSettings=this.handleSettings.bind(this),this.handleGlobalSettings=this.handleGlobalSettings.bind(this),this.handleShowArchive=this.handleShowArchive.bind(this),this.handleShowBlocked=this.handleShowBlocked.bind(this),this.handleToggleMessageSounds=this.handleToggleMessageSounds.bind(this),this.handleCredAdd=this.handleCredAdd.bind(this),this.handleCredDelete=this.handleCredDelete.bind(this),this.handleCredConfirm=this.handleCredConfirm.bind(this),this.initFCMessaging=this.initFCMessaging.bind(this),this.toggleFCMToken=this.toggleFCMToken.bind(this),this.handlePushMessage=this.handlePushMessage.bind(this),this.handleSidepanelCancel=this.handleSidepanelCancel.bind(this),this.handleStartTopicRequest=this.handleStartTopicRequest.bind(this),this.handleNewTopicCreated=this.handleNewTopicCreated.bind(this),this.handleTopicUpdateRequest=this.handleTopicUpdateRequest.bind(this),this.handleUnarchive=this.handleUnarchive.bind(this),this.handleChangePermissions=this.handleChangePermissions.bind(this),this.handleTagsUpdateRequest=this.handleTagsUpdateRequest.bind(this),this.handleLogout=this.handleLogout.bind(this),this.handleDeleteAccount=this.handleDeleteAccount.bind(this),this.handleDeleteTopicRequest=this.handleDeleteTopicRequest.bind(this),this.handleDeleteMessagesRequest=this.handleDeleteMessagesRequest.bind(this),this.handleLeaveUnsubRequest=this.handleLeaveUnsubRequest.bind(this),this.handleBlockTopicRequest=this.handleBlockTopicRequest.bind(this),this.handleReportTopic=this.handleReportTopic.bind(this),this.handleShowContextMenu=this.handleShowContextMenu.bind(this),this.defaultTopicContextMenu=this.defaultTopicContextMenu.bind(this),this.handleHideContextMenu=this.handleHideContextMenu.bind(this),this.handleShowAlert=this.handleShowAlert.bind(this),this.handleShowInfoView=this.handleShowInfoView.bind(this),this.handleMemberUpdateRequest=this.handleMemberUpdateRequest.bind(this),this.handleValidateCredentialsRequest=this.handleValidateCredentialsRequest.bind(this),this.handlePasswordResetRequest=this.handlePasswordResetRequest.bind(this),this.handleResetPassword=this.handleResetPassword.bind(this),this.handleContextMenuAction=this.handleContextMenuAction.bind(this),this.handleShowCountrySelector=this.handleShowCountrySelector.bind(this),this.handleShowForwardDialog=this.handleShowForwardDialog.bind(this),this.handleHideForwardDialog=this.handleHideForwardDialog.bind(this),this.handleStartVideoCall=this.handleStartVideoCall.bind(this),this.handleStartAudioCall=this.handleStartAudioCall.bind(this),this.handleInfoMessage=this.handleInfoMessage.bind(this),this.handleDataMessage=this.handleDataMessage.bind(this),this.handleCallClose=this.handleCallClose.bind(this),this.handleCallInvite=this.handleCallInvite.bind(this),this.handleCallRinging=this.handleCallRinging.bind(this),this.handleCallHangup=this.handleCallHangup.bind(this),this.handleCallSendOffer=this.handleCallSendOffer.bind(this),this.handleCallIceCandidate=this.handleCallIceCandidate.bind(this),this.handleCallSendAnswer=this.handleCallSendAnswer.bind(this),this.handleCallAccept=this.handleCallAccept.bind(this),this.sendMessageToTopic=this.sendMessageToTopic.bind(this),this.callTimeoutTimer=null}getBlankState(){const e=an.A.getObject("settings")||{},t=!!an.A.getObject("keep-logged-in");return{connected:!1,ready:!1,autoLogin:!1,transport:e.transport||null,serverAddress:e.serverAddress||tn(),secureConnection:void 0===e.secureConnection?sn():e.secureConnection,serverVersion:"no connection",messageSounds:!e.messageSoundsOff,incognitoMode:!1,desktopAlerts:t&&!!e.desktopAlerts,desktopAlertsEnabled:(sn()||"object"==typeof window.location&&"localhost"==window.location.hostname)&&void 0!==Ve&&"undefined"!=typeof navigator&&"undefined"!=typeof FIREBASE_INIT,firebaseToken:t?an.A.getObject("firebase-token"):null,applicationVisible:!document.hidden,errorText:"",errorLevel:null,errorAction:void 0,errorActionText:null,sidePanelSelected:"login",sidePanelTitle:null,sidePanelAvatar:null,myTrustedBadges:[],loadSpinnerVisible:!1,login:"",password:"",persist:t,myUserId:null,liveConnection:navigator.onLine,topicSelected:"",topicSelectedOnline:!1,topicSelectedAcs:null,newTopicParams:null,loginDisabled:!1,displayMobile:window.innerWidth<=ks.VJ,infoPanel:void 0,mobilePanel:"sidepanel",callTopic:void 0,callState:0,callAudioOnly:void 0,callShouldStart:!1,contextMenuVisible:!1,contextMenuBounds:null,contextMenuClickAt:null,contextMenuParams:null,contextMenuItems:[],forwardDialogVisible:!1,forwardMessage:null,alertVisible:!1,alertParams:{},chatList:[],searchResults:[],searchableContacts:[],reqCredMethod:void 0,credMethod:void 0,credCode:void 0,credToken:void 0,requestedTopic:void 0}}componentDidMount(){if(window.addEventListener("resize",this.handleResize),this.handleOnlineOn=e=>{this.handleOnline(!0)},window.addEventListener("online",this.handleOnlineOn),this.handleOnlineOff=e=>{this.handleOnline(!1)},window.addEventListener("offline",this.handleOnlineOff),window.addEventListener("hashchange",this.handleHashRoute),"function"==typeof BroadcastChannel){new BroadcastChannel("tinode-sw").addEventListener("message",this.handlePushMessage)}else console.warn("Your browser does not support BroadcastChannel. Some features will not be available");this.lastWakeUpCheck=(new Date).getTime(),this.wakeUpTicker=setInterval((e=>{const t=(new Date).getTime();t-this.lastWakeUpCheck>ks.hT&&this.handleOnlineOn(),this.lastWakeUpCheck=t}),ks.ZW),document.addEventListener("visibilitychange",this.handleVisibilityEvent),this.setState({viewportWidth:document.documentElement.clientWidth,viewportHeight:document.documentElement.clientHeight}),new Promise(((e,t)=>{this.tinode=ln.tnSetup(this.state.serverAddress,sn(),this.state.transport,this.props.intl.locale,this.state.persist,e),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.tinode.onInfoMessage=this.handleInfoMessage,this.tinode.onDataMessage=this.handleDataMessage})).then((e=>{this.state.desktopAlertsEnabled&&this.initFCMessaging().catch((e=>{})),this.resetContactList();const t=this.state.persist?an.A.getObject("auth-token"):void 0;t&&(this.setState({autoLogin:!0}),t.expires=new Date(t.expires),this.tinode.setAuthToken(t),this.tinode.connect().catch((e=>{this.handleError(e.message,"err")})));const s=vi.A.parseUrlHash(window.location.hash);if(["cred","reset","register"].includes(s.path[0]))this.handleHashRoute();else{this.setState({requestedTopic:s.path[1]});const e=s.params&&s.params.cred_done?vi.A.addUrlParam("","cred_done",s.params.cred_done):"";vi.A.navigateTo(e)}}))}componentWillUnmount(){window.removeEventListener("resize",this.handleResize),window.removeEventListener("hashchange",this.handleHashRoute),window.removeEventListener("online",this.handleOnlineOn),window.removeEventListener("offline",this.handleOnlineOff),document.removeEventListener("visibilitychange",this.handleVisibilityEvent),clearInterval(this.wakeUpTicker)}static tnSetup(e,t,s,a,i,n){const r=new _s.Tinode({appName:ks.C3,host:e,apiKey:ks.Lq,transport:s,secure:t,persist:i},n);return r.setHumanLanguage(a),r.enableLogging(ks.U3,!0),r}handlePushMessage(e){this.tinode.oobNotification(e.data||{})}initFCMessaging(){const{formatMessage:e,locale:t}=this.props.intl,s=(t,s)=>{console.error(t,s),this.handleError(e(on.push_init_failed),"err"),this.setState({firebaseToken:null}),an.A.updateObject("settings",{desktopAlerts:!1})};try{return this.fcm=ws(Ve(FIREBASE_INIT,ks.C3)),navigator.serviceWorker.getRegistration("/service-worker.js").then((e=>e||navigator.serviceWorker.register("/service-worker.js").then((e=>(this.checkForAppUpdate(e),e))))).then((e=>((e.active||e.installing).postMessage(JSON.stringify({locale:t,version:en.i})),ln.requestFCMToken(this.fcm,e)))).then((e=>{const t=an.A.getObject("keep-logged-in");e!=this.state.firebaseToken&&(this.tinode.setDeviceToken(e),t&&an.A.setObject("firebase-token",e)),this.setState({firebaseToken:e,desktopAlerts:!0}),t&&an.A.updateObject("settings",{desktopAlerts:!0}),Ms(this.fcm,(e=>{this.handlePushMessage(e)}))})).catch((e=>{throw s(e),e}))}catch(e){return s(e),Promise.reject(e)}}static requestFCMToken(e,t){return Cs(e,{serviceWorkerRegistration:t,vapidKey:FIREBASE_INIT.messagingVapidKey}).then((t=>{if(t)return t;if("undefined"!=typeof Notification)return Notification.requestPermission().then((t=>{if("granted"===t)return Cs(e,{serviceWorkerRegistration:reg,vapidKey:FIREBASE_INIT.messagingVapidKey}).then((e=>{if(e)return e;throw new Error("Failed to initialize notifications")}));throw new Error("No permission to send notifications: "+t)}));throw new Error("Notifications are not supported")}))}handleResize(){const e=document.documentElement.clientWidth<=ks.VJ;this.setState({viewportWidth:document.documentElement.clientWidth,viewportHeight:document.documentElement.clientHeight}),this.state.displayMobile!=e&&this.setState({displayMobile:e})}checkForAppUpdate(e){e.onupdatefound=t=>{const s=e.installing;s.onstatechange=e=>{if("installed"==s.state&&navigator.serviceWorker.controller){const e=l().createElement(l().Fragment,null,l().createElement(d.FormattedMessage,{id:"update_available",defaultMessage:[{type:0,value:"Update available."}]})," ",l().createElement("a",{href:""},l().createElement(d.FormattedMessage,{id:"reload_update",defaultMessage:[{type:0,value:"Reload"}]})),".");this.handleError(e,"info")}}}}handleHashRoute(){const e=vi.A.parseUrlHash(window.location.hash),t={infoPanel:e.params.info,newTopicTabSelected:e.params.tab};if(e.path&&e.path.length>0){["register","settings","edit","notif","security","support","general","crop","cred","reset","newtpk","archive","blocked","contacts",""].includes(e.path[0])?t.sidePanelSelected=e.path[0]:console.warn("Unknown sidepanel view",e.path[0]);let s=e.path[1]||null;s!=this.state.topicSelected&&(_s.Tinode.topicType(s)?t.mobilePanel="topic-view":(s=null,t.mobilePanel="sidepanel"),Object.assign(t,{topicSelected:s,topicSelectedAcs:this.tinode.getTopicAccessMode(s)}))}else Object.assign(t,{sidePanelSelected:"",topicSelected:null});e.params.method&&(t.credMethod=e.params.method),e.params.code&&(t.credCode=e.params.code),e.params.token&&(t.credToken=e.params.token),e.params.cred_done&&Object.assign(t,ln.stateForError(this.props.intl.formatMessage(on.cred_confirmed_successfully),"info")),this.setState(t)}handleOnline(e){e?(this.handleError(),clearInterval(this.reconnectCountdown),this.tinode.reconnect()):this.handleError(this.props.intl.formatMessage(on.no_connection),"warn"),this.setState({liveConnection:e})}handleVisibilityEvent(){this.setState({applicationVisible:!document.hidden})}static stateForError(e,t,s,a){return{errorText:e,errorLevel:t,errorAction:s,errorActionText:a,callShouldStart:!1}}handleError(e,t,s,a){this.setState(ln.stateForError(e,t,s,a))}handleLoginRequest(e,t){this.setState({loginDisabled:!0,login:e,password:t,loadSpinnerVisible:!0,autoLogin:!0}),this.handleError("",null),this.tinode.isConnected()?this.doLogin(e,t,null,{meth:this.state.credMethod,resp:this.state.credCode}):this.tinode.connect().catch((e=>{this.setState({loginDisabled:!1,autoLogin:!1,loadSpinnerVisible:!1}),this.handleError(e.message,"err")})),this.state.desktopAlertsEnabled&&!this.state.firebaseToken&&this.initFCMessaging()}handlePersistenceChange(e){e?this.tinode.initStorage().then((e=>{an.A.setObject("keep-logged-in",!0),this.setState({persist:!0})})):this.tinode.clearStorage().then((e=>{an.A.setObject("keep-logged-in",!1),this.setState({persist:!1})}))}handleConnected(){clearInterval(this.reconnectCountdown),this.handleError();const e=this.tinode.getServerInfo();this.setState({serverVersion:e.ver+" "+(e.build?e.build:"none"),reqCredMethod:((e.reqCred||{}).auth||[])[0]||"email"}),this.state.autoLogin&&this.doLogin(this.state.login,this.state.password,null,{meth:this.state.credMethod,resp:this.state.credCode})}handleAutoreconnectIteration(e,t){if(clearInterval(this.reconnectCountdown),e<0)return void this.handleError();if(t)return void t.then((e=>{this.handleError()})).catch((e=>{this.handleError(e.message,"err")}));const{formatMessage:s}=this.props.intl;let a=e/1e3;a|=0,this.reconnectCountdown=setInterval((e=>{if(a<-10)return clearInterval(this.reconnectCountdown),void this.tinode.reconnect();const t=a>99?(0,Us.Ye)(a):a;this.handleError(s(on.reconnect_countdown,{seconds:t}),"warn",(e=>{clearInterval(this.reconnectCountdown),this.tinode.reconnect()}),s(on.reconnect_now)),a-=1}),1e3)}handleDisconnect(e){this.setState({connected:!1,ready:!1,topicSelectedOnline:!1,errorText:e&&e.message?e.message:"Disconnected",errorLevel:e&&e.message?"err":"warn",loginDisabled:!1,contextMenuVisible:!1,forwardDialogVisible:!1,serverVersion:"no connection"})}doLogin(e,t,s,a){if(this.tinode.isAuthenticated())return void vi.A.navigateTo("");let i=s||(this.tinode.getAuthToken()||{}).token;if(!(e&&t||i))return vi.A.navigateTo(""),void this.setState({loginDisabled:!1});a=_s.Tinode.credential(a);let n,r=this.tinode.isConnected()?Promise.resolve():this.tinode.connect();e&&t?(i=null,this.setState({password:null}),n=r.then((s=>this.tinode.loginBasic(e,t,a)))):n=r.then((e=>this.tinode.loginToken(i,a))),n.then((e=>{e.code>=300&&"validate credentials"===e.text?(this.setState({loadSpinnerVisible:!1}),a&&this.handleError(this.props.intl.formatMessage(on.code_doesnot_match),"warn"),ln.navigateToCredentialsView(e.params)):this.handleLoginSuccessful()})).catch((e=>{const t=e.code>=500;this.setState({loginDisabled:!1,credMethod:void 0,credCode:void 0,loadSpinnerVisible:!1,autoLogin:t}),this.handleError(e.message,"err"),console.warn("Login failed",e),t||(i&&this.handleLogout(),vi.A.navigateTo(""))}))}static navigateToCredentialsView(e){const t=vi.A.parseUrlHash(window.location.hash);t.path[0]="cred",t.params.method=e.cred[0],t.params.token=e.token,t.params.code=e.code,vi.A.navigateTo(vi.A.composeUrlHash(t.path,t.params))}handleLoginSuccessful(){this.handleError(),an.A.getObject("keep-logged-in")&&an.A.setObject("auth-token",this.tinode.getAuthToken());const e=this.state.requestedTopic,t=this.tinode.getMeTopic();t.onMetaDesc=this.tnMeMetaDesc,t.onContactUpdate=this.tnMeContactUpdate,t.onSubsUpdated=this.tnMeSubsUpdated,this.setState({connected:!0,credMethod:void 0,credCode:void 0,credToken:void 0,myUserId:this.tinode.getCurrentUserID(),autoLogin:!0,requestedTopic:void 0}),t.subscribe(t.startMetaQuery().withLaterSub().withDesc().withTags().withCred().build()).catch((e=>{this.tinode.disconnect(),localStorage.removeItem("auth-token"),this.handleError(e.message,"err"),vi.A.navigateTo("")})).finally((e=>{this.setState({loadSpinnerVisible:!1})}));let s=vi.A.setUrlSidePanel(window.location.hash,"contacts");e&&(s=vi.A.setUrlTopic(s,e)),vi.A.navigateTo(s)}tnMeMetaDesc(e){if(e){if(e.public&&this.setState({sidePanelTitle:e.public.fn,sidePanelAvatar:(0,Hs.to)(e.public.photo)}),e.trusted){const t=[];for(const[s,a]of Object.entries(e.trusted))a&&t.push(s);this.setState({myTrustedBadges:t})}e.acs&&this.setState({incognitoMode:!e.acs.isPresencer()})}}tnMeContactUpdate(e,t){if("on"==e||"off"==e)this.resetContactList(),this.state.topicSelected==t.topic&&this.setState({topicSelectedOnline:"on"==e});else if("read"==e)this.resetContactList();else if("msg"==e&&t){const e=this.tinode.getTopic(t.topic),s=e&&e.isArchived();t.unread>0&&this.state.messageSounds&&!s&&(document.hidden||this.state.topicSelected!=t.topic)&&rn.play().catch((e=>{})),this.resetContactList()}else"recv"==e||("gone"==e||"unsub"==e?(this.state.topicSelected==t.topic&&this.handleTopicSelected(null),this.resetContactList()):"acs"==e?this.state.topicSelected==t.topic&&this.setState({topicSelectedAcs:t.acs}):"del"==e||"upd"==e||"call"==e||console.info("Unsupported (yet) presence update:",e,"in",(t||{}).topic))}tnMeSubsUpdated(e){this.resetContactList()}static prepareSearchableContacts(e,t){const s={};for(const t of e)_s.Tinode.isP2PTopicName(t.topic)&&(s[t.topic]={user:t.topic,updated:t.updated,public:t.public,private:t.private,acs:t.acs});for(const e of t)s[e.user]||(s[e.user]=e);return Object.values(s)}resetContactList(){const e={chatList:[]};this.state.ready||(e.ready=!0),this.tinode.getMeTopic().contacts((t=>{t.topic||t.user||(t.topic=t.name),e.chatList.push(t),this.state.topicSelected==t.topic&&(e.topicSelectedOnline=t.online,e.topicSelectedAcs=t.acs)}));const t=new Date(0);e.chatList.sort(((e,s)=>(e.touched||t).getTime()-(s.touched||t).getTime())),e.searchableContacts=ln.prepareSearchableContacts(e.chatList,this.state.searchResults),this.setState(e)}tnInitFind(){const e=this.tinode.getFndTopic();e.onSubsUpdated=this.tnFndSubsUpdated,e.isSubscribed()?this.tnFndSubsUpdated():e.subscribe(e.startMetaQuery().withSub().build()).catch((e=>{this.handleError(e.message,"err")}))}tnFndSubsUpdated(){const e=[];this.tinode.getFndTopic().contacts((t=>{e.push(t)})),this.setState({searchResults:e,searchableContacts:ln.prepareSearchableContacts(this.state.chatList,e)})}handleSearchContacts(e){const t=this.tinode.getFndTopic();t.setMeta({desc:{public:e}}).then((e=>t.getMeta(t.startMetaQuery().withSub().build()))).catch((e=>this.handleError(e.message,"err")))}handleTopicSelected(e){this.state.newTopicParams&&this.state.newTopicParams._topicName!=e&&this.setState({newTopicParams:null}),e?(this.setState({errorText:"",errorLevel:null,mobilePanel:"topic-view",infoPanel:void 0}),this.state.topicSelected!=e&&(this.setState({topicSelectedOnline:this.tinode.isTopicOnline(e),topicSelectedAcs:this.tinode.getTopicAccessMode(e),forwardMessage:null}),vi.A.navigateTo(vi.A.setUrlTopic("",e)))):(this.setState({topicSelected:null,errorText:"",errorLevel:null,mobilePanel:"sidepanel",topicSelectedOnline:!1,topicSelectedAcs:null,infoPanel:void 0,forwardMessage:null}),vi.A.navigateTo(vi.A.setUrlTopic("",null)))}handleHideMessagesView(){this.setState({mobilePanel:"sidepanel"}),vi.A.navigateTo(vi.A.setUrlTopic(window.location.hash,null))}handleSendMessage(e,t,s,a){const i=this.tinode.getTopic(this.state.topicSelected);return this.sendMessageToTopic(i,e,t,s,a)}sendMessageToTopic(e,t,s,a,i){(t=e.createMessage(t,!1))._uploader=a,i&&(t.head=Object.assign(t.head||{},i));const n=[];if(s&&n.push(s),!e.isSubscribed()){const s=e.subscribe().then((s=>{let a=[];e.queuedMessages((s=>{s._sending||s.seq==t.seq||(s.head&&s.head.webrtc?a.push(s.seq):e.isSubscribed()&&e.publishMessage(s))})),a.length>0&&e.delMessagesList(a,!0)}));n.push(s)}return e.publishDraft(t,Promise.all(n)).then((t=>(e.isArchived()&&e.archive(!1),t))).catch((e=>this.handleError(e.message,"err")))}handleNewChatInvitation(e,t){const s=this.tinode.getTopic(e);let a=null;switch(t){case"accept":const i=s.getAccessMode().getGiven();a=s.setMeta({sub:{mode:i}}),s.isP2PType()&&(a=a.then((t=>s.setMeta({sub:{user:e,mode:i}}))));break;case"delete":a=s.delTopic(!0);break;case"block":const n=s.getAccessMode().updateWant("-JP").getWant();a=s.setMeta({sub:{mode:n}}).then((e=>this.handleTopicSelected(null)));break;default:console.warn("Unknown invitation action",'"'+t+'""')}null!=a&&a.catch((e=>this.handleError(e.message,"err")))}handleNewAccount(){this.handleError(),vi.A.navigateTo(vi.A.setUrlSidePanel(window.location.hash,"register"))}handleNewAccountRequest(e,t,s,a,i){this.handleError(),this.tinode.connect(this.state.serverAddress).then((n=>{let r;return s&&s.photo&&s.photo.ref&&(r=[s.photo.ref]),this.tinode.createAccountBasic(e,t,{public:s,tags:i,cred:_s.Tinode.credential(a),attachments:r})})).then((e=>{e.code>=300&&"validate credentials"==e.text?ln.navigateToCredentialsView(e.params):this.handleLoginSuccessful(this)})).catch((e=>{this.handleError(e.message,"err")}))}handleToggleIncognitoMode(e){this.setState({incognitoMode:null});const t=this.tinode.getMeTopic(),s=t.getAccessMode().updateWant(e?"-P":"+P").getWant();t.setMeta({sub:{mode:s}}).catch((t=>{this.setState({incognitoMode:!e}),this.handleError(t.message,"err")}))}handleUpdateAccountTagsRequest(e,t){this.tinode.getMeTopic().setMeta({tags:t}).catch((e=>this.handleError(e.message,"err")))}handleSettings(){this.handleError(),vi.A.navigateTo(vi.A.setUrlSidePanel(window.location.hash,this.state.myUserId?"edit":"settings"))}handleGlobalSettings(e){const t=e.serverAddress||this.state.serverAddress,s=e.transport||this.state.transport,a=void 0===e.secureConnection?this.state.secureConnection:e.secureConnection;this.tinode&&(this.tinode.clearStorage(),this.tinode.onDisconnect=void 0,this.tinode.disconnect()),this.tinode=ln.tnSetup(t,a,s,this.props.intl.locale,an.A.getObject("keep-logged-in")),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.tinode.onInfoMessage=this.handleInfoMessage,this.tinode.onDataMessage=this.handleDataMessage,this.setState({serverAddress:t,transport:s,secureConnection:a}),an.A.setObject("settings",{serverAddress:t,transport:s,secureConnection:a}),vi.A.navigateTo(vi.A.setUrlSidePanel(window.location.hash,""))}handleShowArchive(){vi.A.navigateTo(vi.A.setUrlSidePanel(window.location.hash,this.state.myUserId?"archive":""))}handleShowBlocked(){vi.A.navigateTo(vi.A.setUrlSidePanel(window.location.hash,this.state.myUserId?"blocked":""))}toggleFCMToken(e){e?(this.setState({desktopAlerts:null}),this.state.firebaseToken?(this.setState({desktopAlerts:!0}),an.A.getObject("keep-logged-in")&&an.A.updateObject("settings",{desktopAlerts:!0})):this.initFCMessaging()):this.state.firebaseToken&&this.fcm?Ss(this.fcm).catch((e=>{console.error("Unable to delete token.",e)})).finally((e=>{an.A.updateObject("settings",{desktopAlerts:!1}),localStorage.removeItem("firebase-token"),this.setState({desktopAlerts:!1,firebaseToken:null}),this.tinode.setDeviceToken(null)})):(this.setState({desktopAlerts:!1,firebaseToken:null}),an.A.updateObject("settings",{desktopAlerts:!1}))}handleToggleMessageSounds(e){this.setState({messageSounds:e}),an.A.updateObject("settings",{messageSoundsOff:!e})}handleCredAdd(e,t){this.tinode.getMeTopic().setMeta({cred:{meth:e,val:t}}).catch((e=>this.handleError(e.message,"err")))}handleCredDelete(e,t){this.tinode.getMeTopic().delCredential(e,t).catch((e=>this.handleError(e.message,"err")))}handleCredConfirm(e,t){ln.navigateToCredentialsView({cred:[e],code:t})}handleSidepanelCancel(){const e=vi.A.parseUrlHash(window.location.hash);let t="";["security","support","general","notif"].includes(e.path[0])?t="edit":"crop"==e.path[0]?t="general":"blocked"==e.path[0]?t="security":this.state.myUserId&&(t="contacts"),e.path[0]=t,e.params&&(delete e.params.code,delete e.params.method,delete e.params.tab,delete e.params.scheme,delete e.params.token),vi.A.navigateTo(vi.A.composeUrlHash(e.path,e.params)),this.setState({errorText:"",errorLevel:null})}basicNavigator(e){vi.A.navigateTo(vi.A.setUrlSidePanel(window.location.hash,e))}infoNavigator(e){vi.A.navigateTo(vi.A.setUrlInfoPanel(window.location.hash,e))}handleStartTopicRequest(e,t,s){if(e&&this.tinode.isTopicCached(e))return void this.handleTopicSelected(e);const a={};_s.Tinode.isP2PTopicName(e)?(a.sub={mode:ks.cZ},a.desc={defacs:{auth:ks.cZ}}):(e=e||this.tinode.newGroupTopicName(s),t&&(a.desc={public:t.public,private:{comment:t.private}},a.tags=t.tags)),a._topicName=e,this.setState({newTopicParams:a},(t=>{this.handleTopicSelected(e)}))}handleNewTopicCreated(e,t){let s={};this.state.callShouldStart&&(s={callState:3,callShouldStart:!1}),this.state.topicSelected==e&&e!=t&&(s.topicSelected=t),this.setState(s,(e=>{vi.A.navigateTo(vi.A.setUrlTopic("",t))}))}handleTopicUpdateRequest(e,t,s,a){this.handleError();const i=this.tinode.getTopic(e);if(i){const e={};let n;t&&(t.photo&&(t.photo.ref&&t.photo.ref!=_s.Tinode.DEL_CHAR?n=[t.photo.ref]:t.photo.data&&t.photo.data!=_s.Tinode.DEL_CHAR||(t.photo=_s.Tinode.DEL_CHAR)),e.public=t),"string"==typeof s&&(e.private=s===_s.Tinode.DEL_CHAR?_s.Tinode.DEL_CHAR:{comment:s}),a&&(e.defacs=a),i.setMeta({desc:e,attachments:n}).catch((e=>this.handleError(e.message,"err")))}}handleUnarchive(e){const t=this.tinode.getTopic(e);t&&t.archive(!1).catch((e=>this.handleError(e.message,"err")))}handleUpdatePasswordRequest(e){this.handleError(),e&&this.tinode.updateAccountBasic(null,this.tinode.getCurrentLogin(),e).catch((e=>this.handleError(e.message,"err")))}handleChangePermissions(e,t,s){const a=this.tinode.getTopic(e);if(a){const e=a.getAccessMode();s?(e.updateGiven(t),t=e.getGiven()):(e.updateWant(t),t=e.getWant()),a.setMeta({sub:{user:s,mode:t}}).catch((e=>this.handleError(e.message,"err")))}}handleTagsUpdateRequest(e,t){const s=this.tinode.getTopic(e);s&&s.setMeta({tags:t}).catch((e=>this.handleError(e.message,"err")))}handleLogout(){let e;(0,Ws.OM)(0),localStorage.removeItem("auth-token"),localStorage.removeItem("firebase-token"),localStorage.removeItem("settings"),this.state.firebaseToken&&Ss(this.fcm),clearInterval(this.reconnectCountdown),this.tinode?(e=this.tinode.clearStorage(),this.tinode.onDisconnect=void 0,this.tinode.disconnect()):e=Promose.resolve(),this.setState(this.getBlankState()),e.then((e=>{this.tinode=ln.tnSetup(this.state.serverAddress,sn(),this.state.transport,this.props.intl.locale,an.A.getObject("keep-logged-in"),(e=>{this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.tinode.onInfoMessage=this.handleInfoMessage,this.tinode.onDataMessage=this.handleDataMessage,vi.A.navigateTo("")}))}))}handleDeleteAccount(){this.tinode.delCurrentUser(!0).then((e=>{this.handleLogout()}))}handleDeleteTopicRequest(e){const t=this.tinode.getTopic(e);t&&t.delTopic(!0).then((e=>{vi.A.navigateTo(vi.A.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")}))}handleDeleteMessagesRequest(e){const t=this.tinode.getTopic(e);t&&t.delMessagesAll(!0).catch((e=>this.handleError(e.message,"err")))}handleLeaveUnsubRequest(e){const t=this.tinode.getTopic(e);t&&t.leave(!0).then((e=>{vi.A.navigateTo(vi.A.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")}))}handleBlockTopicRequest(e){const t=this.tinode.getTopic(e);t&&t.updateMode(null,"-JP").then((e=>{vi.A.navigateTo(vi.A.setUrlTopic(window.location.hash,""))})).catch((e=>this.handleError(e.message,"err")))}handleReportTopic(e){const t=this.tinode.getTopic(e);t&&(this.tinode.report("report",e),t.updateMode(null,"-JP").then((e=>{vi.A.navigateTo(vi.A.setUrlTopic(window.location.hash,""))})).catch((e=>this.handleError(e.message,"err"))))}handleShowContextMenu(e,t){this.setState({contextMenuVisible:!0,contextMenuClickAt:{x:e.x,y:e.y},contextMenuParams:e,contextMenuItems:t||this.defaultTopicContextMenu(e.topicName),contextMenuBounds:this.selfRef.current.getBoundingClientRect()})}handleShowForwardDialog(e){"newtpk"==this.state.sidePanelSelected&&this.handleSidepanelCancel();const t="➦ "+e.userName,s="string"==typeof e.content?_s.Drafty.init(e.content):_s.Drafty.forwardedContent(e.content),a=_s.Drafty.preview(s,ks.TR,!0),i=_s.Drafty.append(_s.Drafty.appendLineBreak(_s.Drafty.mention(t,e.userFrom)),s),n=_s.Drafty.quote(t,e.userFrom,a),r={forwarded:e.topicName+":"+e.seq};this.setState({forwardDialogVisible:!0,forwardMessage:{head:r,msg:i,preview:n}})}defaultTopicContextMenu(e){const t=this.tinode.getTopic(e);if(t._deleted)return["topic_delete"];let s=!1,a=!1,i=!1,n=!1,r=!1,o=!1,l=!1;if(t){n=t.isSubscribed(),o=t.isArchived();const e=t.getAccessMode();e&&(s=e.isMuted(),a=!e.isJoiner(),i=!e.isJoiner("want"),r=e.isDeleter())}return l=!!this.tinode.getServerParam("iceServers"),[n?{title:this.props.intl.formatMessage(on.menu_item_info),handler:this.handleShowInfoView}:null,n&&_s.Tinode.isP2PTopicName(e)&&l?{title:this.props.intl.formatMessage(on.menu_item_audio_call),handler:this.handleStartAudioCall}:null,n&&_s.Tinode.isP2PTopicName(e)&&l?{title:this.props.intl.formatMessage(on.menu_item_video_call),handler:this.handleStartVideoCall}:null,n?"messages_clear":null,n&&r?"messages_clear_hard":null,s?a?null:"topic_unmute":"topic_mute",i?"topic_unblock":"topic_block",o?"topic_restore":"topic_archive","topic_delete"]}handleHideContextMenu(){this.setState({contextMenuVisible:!1,contextMenuClickAt:null,contextMenuParams:null,contextMenuBounds:null})}handleHideForwardDialog(e){this.setState({forwardDialogVisible:!1,forwardMessage:e?this.state.forwardMessage:null})}handleContextMenuAction(e,t,s){"topic_archive"==e?t&&s.topicName&&s.topicName==this.state.topicSelected&&t.then((e=>{this.handleTopicSelected(null)})):"menu_item_forward"==e&&this.handleShowForwardDialog(s)}handleShowAlert(e,t,s,a,i,n){this.setState({alertVisible:!0,alertParams:{title:e,content:t,onConfirm:s,confirm:a,onReject:i,reject:n}})}handleShowInfoView(){vi.A.navigateTo(vi.A.addUrlParam(window.location.hash,"info","info")),this.setState({infoPanel:"info"})}handleMemberUpdateRequest(e,t,s){if(!e)return;const a=this.tinode.getTopic(e);a&&(t&&t.length>0&&t.map((e=>{a.invite(e,null).catch((e=>this.handleError(e.message,"err")))})),s&&s.length>0&&s.map((e=>{a.delSubscription(e).catch((e=>this.handleError(e.message,"err")))})))}handleValidateCredentialsRequest(e,t,s){this.tinode.isAuthenticated()?this.tinode.getMeTopic().setMeta({cred:{meth:e,resp:t}}).then((e=>vi.A.navigateTo(vi.A.setUrlSidePanel(window.location.hash,"contacts")))).catch((e=>this.handleError(e.message,"err"))):(this.setState({credMethod:e,credCode:t,credToken:s}),this.doLogin(null,null,s,{meth:e,resp:t}))}handlePasswordResetRequest(e,t){return this.tinode.connect().then((s=>this.tinode.requestResetAuthSecret("basic",e,t))).catch((e=>{this.handleError(e.message,"err")}))}handleResetPassword(e,t){const s=(0,Hs.$Z)(t.secret);s&&t.scheme?this.tinode.connect().then((a=>this.tinode.updateAccountBasic(null,null,e,{scheme:t.scheme,secret:s}))).then((e=>{this.handleError(this.props.intl.formatMessage(on.password_reset_success),"info"),vi.A.navigateTo("")})).catch((e=>{this.handleError(e.message,"err")})):this.handleError(this.props.intl.formatMessage(on.invalid_security_token),"err")}handleShowCountrySelector(e,t,s){this.handleShowAlert("Select country",l().createElement(o.Suspense,{fallback:l().createElement("div",null,l().createElement(d.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},l().createElement(nn,{selected:e,onSubmit:(e,t)=>{this.setState({alertVisible:!1}),s(e,t)}})),null,null,(e=>{}),"Cancel")}handleStartVideoCall(){this.setState({callTopic:this.state.topicSelected,callState:1,callAudioOnly:!1})}handleStartAudioCall(){this.setState({callTopic:this.state.topicSelected,callState:1,callAudioOnly:!0})}handleCallInvite(e,t,s,a){switch(s){case 1:const s={webrtc:ha,aonly:!!a};this.handleSendMessage(_s.Drafty.videoCall(a),void 0,void 0,s).then((e=>{e.code<200||e.code>=300||!e.params||!e.params.seq?this.handleCallClose():this.setState({callSeq:e.params.seq})}));break;case 3:const i=this.tinode.getTopic(e);if(!i)return;i.videoCall("accept",t)}}handleCallRinging(e,t){const s=this.tinode.getTopic(e);s&&s.videoCall("ringing",t)}handleCallHangup(e,t){const s=this.tinode.getTopic(e);s&&s.videoCall("hang-up",t)}handleCallSendOffer(e,t,s){const a=this.tinode.getTopic(e);a&&a.videoCall("offer",t,s)}handleCallIceCandidate(e,t,s){const a=this.tinode.getTopic(e);a&&a.videoCall("ice-candidate",t,s)}handleCallSendAnswer(e,t,s){const a=this.tinode.getTopic(e);a&&a.videoCall("answer",t,s)}handleCallClose(){this.callTimeoutTimer&&clearTimeout(this.callTimeoutTimer),this.setState({callTopic:void 0,callState:0,callAudioOnly:void 0})}handleCallAccept(e){const t=this.tinode.getTopic(e);t&&(t.isSubscribed()?(this.handleTopicSelected(this.state.callTopic),this.setState({callState:3})):this.setState({callShouldStart:!0},(e=>this.handleTopicSelected(this.state.callTopic))))}handleInfoMessage(e){if("call"==e.what)switch(e.event){case"accept":if(_s.Tinode.isMeTopicName(e.topic)&&this.tinode.isMe(e.from))return void this.setState({callTopic:null,callState:0,callSeq:null,callAudioOnly:void 0});e.topic==this.state.callTopic&&this.setState({callState:3});break;case"hang-up":this.handleCallClose()}}handleDataMessage(e){if(e.head&&e.head.webrtc&&e.head.webrtc==ha){const t=this.tinode.getTopic(e.topic);if(t){const s=t.latestMsgVersion(e.seq)||e;s.head&&s.head.webrtc&&s.head.webrtc==ha&&e.from!=this.state.myUserId&&(0==this.state.callState?this.setState({callTopic:e.topic,callState:2,callSeq:e.seq,callAudioOnly:!!s.head.aonly}):this.handleCallHangup(e.topic,e.seq))}else console.warn("Received vc data message from unknown topic",e.topic)}}render(){return l().createElement("div",{id:"app-container",ref:this.selfRef},this.state.contextMenuVisible?l().createElement(Ns,{tinode:this.tinode,bounds:this.state.contextMenuBounds,clickAt:this.state.contextMenuClickAt,params:this.state.contextMenuParams,items:this.state.contextMenuItems,hide:this.handleHideContextMenu,onShowAlert:this.handleShowAlert,onAction:this.handleContextMenuAction,onTopicRemoved:e=>{e==this.state.topicSelected&&this.handleTopicSelected(null)},onError:this.handleError}):null,this.state.forwardDialogVisible?l().createElement(ca,{tinode:this.tinode,contacts:this.state.chatList,topicSelected:this.state.topicSelected,myUserId:this.state.myUserId,hide:this.handleHideForwardDialog,onInitFind:this.tnInitFind,searchResults:this.state.searchResults,onSearchContacts:this.handleSearchContacts,onTopicSelected:this.handleStartTopicRequest}):null,this.state.callTopic&&2==this.state.callState?l().createElement(ua,{tinode:this.tinode,topic:this.state.callTopic,seq:this.state.callSeq,callState:this.state.callState,audioOnly:this.state.callAudioOnly,onClose:this.handleCallClose,onRinging:this.handleCallRinging,onAcceptCall:this.handleCallAccept,onReject:this.handleCallHangup}):null,this.state.alertVisible?l().createElement(Ts,{title:this.state.alertParams.title,content:this.state.alertParams.content,onReject:this.state.alertParams.onReject?e=>this.setState({alertVisible:!1}):null,reject:this.state.alertParams.reject,onConfirm:this.state.alertParams.onConfirm?e=>{this.setState({alertVisible:!1}),this.state.alertParams.onConfirm()}:null,confirm:this.state.alertParams.confirm}):null,this.state.displayMobile&&"sidepanel"!=this.state.mobilePanel?null:l().createElement(Zi,{tinode:this.tinode,connected:this.state.connected,displayMobile:this.state.displayMobile,state:this.state.sidePanelSelected,title:this.state.sidePanelTitle,avatar:this.state.sidePanelAvatar,trustedBadges:this.state.myTrustedBadges,login:this.state.login,persist:this.state.persist,myUserId:this.state.myUserId,loginDisabled:this.state.loginDisabled,loadSpinnerVisible:this.state.loadSpinnerVisible,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,topicSelected:this.state.topicSelected,chatList:this.state.chatList,credMethod:this.state.credMethod,credCode:this.state.credCode,credToken:this.state.credToken,transport:this.state.transport,messageSounds:this.state.messageSounds,desktopAlerts:this.state.desktopAlerts,desktopAlertsEnabled:this.state.desktopAlertsEnabled,incognitoMode:this.state.incognitoMode,serverAddress:this.state.serverAddress,secureConnection:this.state.secureConnection,serverVersion:this.state.serverVersion,reqCredMethod:this.state.reqCredMethod,onGlobalSettings:this.handleGlobalSettings,onSignUp:this.handleNewAccount,onSettings:this.handleSettings,onNavigate:this.basicNavigator,onLoginRequest:this.handleLoginRequest,onPersistenceChange:this.handlePersistenceChange,onCreateAccount:this.handleNewAccountRequest,onUpdateAccountDesc:this.handleTopicUpdateRequest,onUpdatePassword:this.handleUpdatePasswordRequest,onUpdateAccountTags:this.handleUpdateAccountTagsRequest,onTogglePushNotifications:this.toggleFCMToken,onToggleMessageSounds:this.handleToggleMessageSounds,onToggleIncognitoMode:this.handleToggleIncognitoMode,onCredAdd:this.handleCredAdd,onCredDelete:this.handleCredDelete,onCredConfirm:this.handleCredConfirm,onTopicSelected:this.handleTopicSelected,onCreateTopic:this.handleStartTopicRequest,onLogout:this.handleLogout,onDeleteAccount:this.handleDeleteAccount,onShowAlert:this.handleShowAlert,onCancel:this.handleSidepanelCancel,onError:this.handleError,onValidateCredentials:this.handleValidateCredentialsRequest,onPasswordResetRequest:this.handlePasswordResetRequest,onResetPassword:this.handleResetPassword,onShowArchive:this.handleShowArchive,onShowBlocked:this.handleShowBlocked,onShowCountrySelector:this.handleShowCountrySelector,onInitFind:this.tnInitFind,searchResults:this.state.searchResults,onSearchContacts:this.handleSearchContacts,showContextMenu:this.handleShowContextMenu}),!this.state.displayMobile||"topic-view"==this.state.mobilePanel&&!this.state.infoPanel?l().createElement(Si,{tinode:this.tinode,connected:this.state.connected,ready:this.state.ready,online:this.state.topicSelectedOnline,acs:this.state.topicSelectedAcs,displayMobile:this.state.displayMobile,viewportWidth:this.state.viewportWidth,viewportHeight:this.state.viewportHeight,topic:this.state.topicSelected,myUserId:this.state.myUserId,myUserName:this.state.sidePanelTitle,serverVersion:this.state.serverVersion,serverAddress:this.state.serverAddress,applicationVisible:this.state.applicationVisible,forwardMessage:this.state.forwardMessage,onCancelForwardMessage:this.handleHideForwardDialog,callTopic:this.state.callTopic,callSeq:this.state.callSeq,callState:this.state.callState,callAudioOnly:this.state.callAudioOnly,onCallHangup:this.handleCallHangup,onCallInvite:this.handleCallInvite,onCallSendOffer:this.handleCallSendOffer,onCallIceCandidate:this.handleCallIceCandidate,onCallSendAnswer:this.handleCallSendAnswer,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,newTopicParams:this.state.newTopicParams,onHideMessagesView:this.handleHideMessagesView,onError:this.handleError,onNewTopicCreated:this.handleNewTopicCreated,showContextMenu:this.handleShowContextMenu,onChangePermissions:this.handleChangePermissions,onNewChat:this.handleNewChatInvitation,sendMessage:this.handleSendMessage,onVideoCallClosed:this.handleCallClose}):null,this.state.infoPanel?l().createElement(Ba,{tinode:this.tinode,connected:this.state.connected,displayMobile:this.state.displayMobile,topic:this.state.topicSelected,searchableContacts:this.state.searchableContacts,myUserId:this.state.myUserId,panel:this.state.infoPanel,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,onNavigate:this.infoNavigator,onTopicDescUpdateRequest:this.handleTopicUpdateRequest,onShowAlert:this.handleShowAlert,onChangePermissions:this.handleChangePermissions,onMemberUpdateRequest:this.handleMemberUpdateRequest,onDeleteTopic:this.handleDeleteTopicRequest,onDeleteMessages:this.handleDeleteMessagesRequest,onLeaveTopic:this.handleLeaveUnsubRequest,onBlockTopic:this.handleBlockTopicRequest,onReportTopic:this.handleReportTopic,onAddMember:this.handleManageGroupMembers,onTopicTagsUpdateRequest:this.handleTagsUpdateRequest,onTopicUnArchive:this.handleUnarchive,onInitFind:this.tnInitFind,onError:this.handleError,showContextMenu:this.handleShowContextMenu}):null)}}var cn=(0,d.injectIntl)(ln);if("undefined"!=typeof FIREBASE_INIT&&FIREBASE_INIT&&FIREBASE_INIT.measurementId){const vn=document.getElementsByTagName("head")[0];let bn=document.createElement("script");function En(){dataLayer.push(arguments)}bn.src="https://www.googletagmanager.com/gtag/js?id="+FIREBASE_INIT.measurementId,bn.async=!0,vn.prepend(bn),window.dataLayer=window.dataLayer||[],En("js",new Date),En("config",FIREBASE_INIT.measurementId)}const dn={de:e=>r.e(175).then(r.t.bind(r,2175,19)),en:e=>r.e(399).then(r.t.bind(r,3399,19)),es:e=>r.e(64).then(r.t.bind(r,6064,19)),fr:e=>r.e(500).then(r.t.bind(r,2500,19)),ko:e=>r.e(186).then(r.t.bind(r,1186,19)),ro:e=>r.e(780).then(r.t.bind(r,8399,19)),ru:e=>r.e(553).then(r.t.bind(r,5553,19)),th:e=>r.e(536).then(r.t.bind(r,2536,19)),uk:e=>r.e(552).then(r.t.bind(r,4552,19)),zh:e=>r.e(570).then(r.t.bind(r,570,19)),"zh-TW":e=>r.e(744).then(r.t.bind(r,5744,19))},{params:hn}=vi.A.parseUrlHash(window.location.hash),pn=hn&&hn.hl||navigator.languages&&navigator.languages[0]||navigator.language||navigator.userLanguage||"en",un=pn.replace("_","-"),mn=un.split("-")[0].toLowerCase(),gn=dn[un]?pn:dn[mn]?mn:"en";document.getElementsByTagName("html")[0].setAttribute("lang",gn);const fn=(0,c.H)(document.getElementById("mountPoint"));dn[gn]().then((e=>fn.render(l().createElement(d.IntlProvider,{locale:pn,messages:e,textComponent:l().Fragment},l().createElement(cn,null)))))}();
+!function(){"use strict";var e,t,s,a,i={221:function(e,t,s){s.d(t,{A:function(){return l}});var a=s(1594),i=s.n(a),n=s(8181);class r extends i().Component{constructor(e){super(e),this.state={panX:0,panY:0,originX:0,originY:0,zoom:1,minZoom:0,maxZoom:2.5},this.overlay=i().createRef(),this.cutout=i().createRef(),this.preview=i().createRef(),this.boundingBox=i().createRef(),this.imageWidth=0,this.imageHeight=0,this.mouseX=0,this.mouseY=0,this.prevDistance=0,this.cutoutRect={},this.bBoxRect={},this.originX=0,this.originY=0,this.initScaling=this.initScaling.bind(this),this.onZoom=this.onZoom.bind(this),this.handleZoom=this.handleZoom.bind(this),this.mouseDown=this.mouseDown.bind(this),this.mouseUp=this.mouseUp.bind(this),this.mouseMove=this.mouseMove.bind(this),this.mouseTouch=this.mouseTouch.bind(this),this.positionAll=this.positionAll.bind(this),this.translate=this.translate.bind(this)}componentDidMount(){this.overlay.current.addEventListener("mousedown",this.mouseDown,{passive:!0}),this.overlay.current.addEventListener("touchstart",this.mouseDown,{passive:!0}),this.bBoxRect=this.boundingBox.current.getBoundingClientRect(),this.originX=this.bBoxRect.width/2,this.originY=this.bBoxRect.height/2,this.cutoutRect=this.cutout.current.getBoundingClientRect()}componentWillUnmount(){this.overlay.current.removeEventListener("mousedown",this.mouseDown),this.overlay.current.removeEventListener("touchstart",this.mouseDown)}positionAll(e,t,s){this.setState({panX:e,panY:t,zoom:s,originX:this.originX-e,originY:this.originY-t});const a=(this.originX-e)*s-this.originX,i=(this.originY-t)*s-this.originY;this.props.onChange((a+this.cutoutRect.left-this.bBoxRect.left)/s,(i+this.cutoutRect.top-this.bBoxRect.top)/s,this.cutoutRect.width/s,this.cutoutRect.height/s,s)}static checkBound(e,t,s,a){let i=Math.min(0,s[0]-t[0]-a,t[1]-s[1]+a);return(0==i||Math.min(0,s[0]-t[0],t[1]-s[1])i&&(t+=r-i);const o=this.originY-(this.originY-s)*e,l=o+this.imageHeight*e,c=this.cutoutRect.top-this.bBoxRect.top,d=c+this.cutoutRect.height;c0?(e=[],this.props.badges.map((t=>{const s=t.color?" "+t.color:"";t.icon?e.push(l().createElement("i",{className:"material-icons as-badge"+s,key:t.key||t.icon},Ps[t.icon]||t.icon)):e.push(l().createElement("span",{className:"badge"+s,key:t.key||t.name},t.name))})),l().createElement(l().Fragment,null,e)):null}}var Rs=r(6904);class xs extends l().PureComponent{render(){return this.props.count>0?l().createElement("span",{className:"unread"},this.props.count>9?"9+":this.props.count):null}}var Us=r(5053),Ls=r(8589);class Os extends l().PureComponent{render(){const e=["busy","declined","disconnected","missed"].includes(this.props.callState),t="material-icons medium "+(e?"red":"green"),s=this.props.incoming?e?"call_missed":"call_received":e?"call_missed_outgoing":"call_made";let a;if(e)switch(this.props.callState){case"busy":a=l().createElement(d.FormattedMessage,{id:"call_busy",defaultMessage:[{type:0,value:"busy"}]});break;case"declined":a=l().createElement(d.FormattedMessage,{id:"call_declined",defaultMessage:[{type:0,value:"declined"}]});break;case"missed":a=this.props.incoming?l().createElement(d.FormattedMessage,{id:"call_missed",defaultMessage:[{type:0,value:"missed"}]}):l().createElement(d.FormattedMessage,{id:"call_cancelled",defaultMessage:[{type:0,value:"cancelled"}]});break;default:a=l().createElement(d.FormattedMessage,{id:"call_disconnected",defaultMessage:[{type:0,value:"disconnected"}]})}else a=l().createElement("span",null,(0,Ls.Ye)(this.props.duration/1e3));return l().createElement("div",{className:"call-message"},l().createElement("div",null,l().createElement("i",{className:"material-icons big gray"},"call")),l().createElement("div",{className:"flex-column narrow"},l().createElement("div",null,this.props.incoming?l().createElement(d.FormattedMessage,{id:"calls_incoming",defaultMessage:[{type:0,value:"Incoming call"}]}):l().createElement(d.FormattedMessage,{id:"calls_outgoing",defaultMessage:[{type:0,value:"Outgoing call"}]})),l().createElement("div",{className:"duration"},l().createElement("i",{className:t},s)," ",a)))}}class qs extends l().PureComponent{render(){const e=["busy","declined","disconnected","missed"].includes(this.props.callState),t=this.props.incoming?e?"call_missed":"call_received":e?"call_missed_outgoing":"call_made";let s;if(e)switch(this.props.callState){case"busy":s=l().createElement(d.FormattedMessage,{id:"call_busy",defaultMessage:[{type:0,value:"busy"}]});break;case"declined":s=l().createElement(d.FormattedMessage,{id:"call_declined",defaultMessage:[{type:0,value:"declined"}]});break;case"missed":s=this.props.incoming?l().createElement(d.FormattedMessage,{id:"call_missed",defaultMessage:[{type:0,value:"missed"}]}):l().createElement(d.FormattedMessage,{id:"call_cancelled",defaultMessage:[{type:0,value:"cancelled"}]});break;default:s=l().createElement(d.FormattedMessage,{id:"call_disconnected",defaultMessage:[{type:0,value:"disconnected"}]})}else s=["accepted","started"].includes(this.props.callState)&&!this.props.duration?l().createElement(d.FormattedMessage,{id:"call_in_progress",defaultMessage:[{type:0,value:"in progress"}]}):l().createElement("span",null,(0,Ls.Ye)(this.props.duration/1e3));return l().createElement(l().Fragment,null,l().createElement("div",{className:"composed-material"},l().createElement("i",{className:"material-icons"},"call"),l().createElement("i",{className:"material-icons second"},t))," ",s)}}class Bs extends l().PureComponent{constructor(e){super(e),this.videoRef=l().createRef(),this.handleClick=this.handleClick.bind(this)}handleClick(e){this.props.onClick&&this.props.onClick(e)}render(){const e=(0,Ls.Ye)(this.props["data-duration"]/1e3),t="inline-video"+(this.props.onClick?" image-clickable":"");return l().createElement("div",{className:t},l().createElement("img",this.props),l().createElement("div",{className:"play-control"},this.props.onClick?l().createElement("i",{className:"material-icons white bigger"},"play_arrow"):l().createElement("img",{src:"img/broken_video.png",style:{filter:"invert(100%)"},width:"36",height:"36"})),e?l().createElement("div",{className:"duration"},e):null)}}class js extends l().PureComponent{constructor(e){super(e),this.state={src:this.props.isvideo?"img/blankvid.png":"img/blankimg.png",style:Object.assign({padding:"4px"},this.props.style),className:this.props.className,alt:this.props.alt,onClick:this.props.onClick}}componentDidMount(){this.props.whenDone.promise.then((e=>this.setState({src:e.src,style:{...this.state.style,padding:0}}))).catch((e=>this.setState({src:this.props.isvideo?"img/broken_video.png":"img/broken_image.png"})))}componentWillUnmount(){this.props.whenDone.cancel()}componentDidUpdate(e){e.whenDone!=this.props.whenDone&&(this.setState({src:this.props.isvideo?"img/blankvid.png":"img/blankimg.png",style:{...this.state.style,padding:"4px"}}),this.props.whenDone.promise.then((e=>this.setState({src:e.src,style:{...this.state.style,padding:0}}))).catch((e=>this.setState({src:this.props.isvideo?"img/broken_video.png":"img/broken_image.png"}))))}render(){return l().createElement("img",this.state)}}class Vs extends l().PureComponent{render(){return l().createElement("div",{className:"uploader"},l().createElement("div",null,l().createElement("span",{style:{width:100*this.props.progress+"%"}})),this.props.progress<.999?l().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCancel()}},l().createElement("i",{className:"material-icons"},"close")," ",l().createElement(d.FormattedMessage,{id:"action_cancel",defaultMessage:[{type:0,value:"cancel"}]})):l().createElement(d.FormattedMessage,{id:"upload_finishing",defaultMessage:[{type:0,value:"finishing..."}]}))}}class Hs extends l().PureComponent{constructor(e){super(e)}render(){return l().createElement("div",{className:"inline-image"},l().createElement("img",this.props),l().createElement("div",{className:"rounded-container"},l().createElement(Vs,{progress:this.props.progress,onCancel:this.props.onCancelUpload})))}}var Ws=r(6110),zs=r(3540);const Ks=(0,d.defineMessages)({drafty_form:{id:"drafty_form",defaultMessage:[{type:0,value:"Form:"}]},drafty_attachment:{id:"drafty_attachment",defaultMessage:[{type:0,value:"Attachment"}]},drafty_image:{id:"drafty_image",defaultMessage:[{type:0,value:"Picture"}]},drafty_video:{id:"drafty_video",defaultMessage:[{type:0,value:"Video recording"}]},drafty_unknown:{id:"drafty_unknown",defaultMessage:[{type:0,value:"Unsupported"}]}});function Gs(e,t,s,a,i){if(i.includes("QQ"))return Zs.call(this,e,t,s,a);if(!e)return s;let n=Ts.Drafty.tagName(e),r=Ts.Drafty.attrValue(e,t)||{};switch(r.key=a,e){case"AU":r.src&&(r.src=this.authorizeURL((0,zs.wk)(r.src,"audio")),r.duration=t.duration>0?0|t.duration:void 0,r.preview=t.preview,r.loading="lazy"),n=Us.A,s=null;break;case"BR":s=null;break;case"EX":case"RW":break;case"HL":r.className="highlight";break;case"HD":n=null,s=null;break;case"IM":n=$s.call(this,n,t,r),s=null;break;case"BN":r.onClick=this.onFormButtonClick;let e=l().Children.map(s,(e=>"string"==typeof e?e:void 0));e&&0!=e.length||(e=[r.name]),r["data-title"]=e.join("");break;case"LN":r&&(r.href="string"==typeof r.href?(0,zs.Jf)(r.href,As.kA):"");break;case"MN":r.className="mention",t&&(r.className+=" "+(0,Ls.kJ)(t.val,!1,!0));break;case"FM":r.className="bot-form";break;case"QQ":r.className="reply-quote",r.onClick=this.onQuoteClick;break;case"VC":n=Os,s=null,t&&(r.callState=t.state,r.incoming=t.incoming,r.duration=t.duration);break;case"VD":n=Qs.call(this,n,t,r),s=null;break;default:if(!n){n=l().Fragment,r={key:a};let e=s;Array.isArray(s)&&s.join("").trim()||(e=[l().createElement("span",{key:"x1",className:"gray"},this.formatMessage(Ks.drafty_unknown))]),s=[l().createElement("i",{key:"x0",className:"material-icons gray"},"extension")," "].concat(e)}}return n?l().createElement(n,r,s):s}function $s(e,t,s){if(!t)return s.src="img/broken_image.png",s.style={width:As._g+"px",height:As._g+"px"},e;s.className="inline-image";const a=(0,Ws.ae)(t.width,t.height,this.viewportWidth>0?Math.min(this.viewportWidth-6.5*As.JS,34.5*As.JS):34.5*As.JS,24*As.JS,!1)||{dstWidth:As._j,dstHeight:As._j};return s.style={width:a.dstWidth+"px",height:a.dstHeight+"px",minWidth:a.dstWidth+"px",minHeight:a.dstHeight+"px"},Ts.Drafty.isProcessing(t)?e=Hs:(s.src=this.authorizeURL((0,zs.wk)(s.src,"image")),s.alt=t.name,s.src?(Math.max(t.width||0,t.height||0)>As._g&&(s.onClick=this.onImagePreview,s.className+=" image-clickable"),s.loading="lazy"):s.src=null),e}function Qs(e,t,s){if(!t)return s.src="img/broken_video.png",s.style={width:As._g+"px",height:As._g+"px"},e;s.className="inline-image";const a=(0,Ws.ae)(t.width,t.height,this.viewportWidth>0?Math.min(this.viewportWidth-6.5*As.JS,34.5*As.JS):34.5*As.JS,24*As.JS,!1)||{dstWidth:As.qV,dstHeight:As.qV};return s.style={width:a.dstWidth+"px",height:a.dstHeight+"px",minWidth:a.dstWidth+"px",minHeight:a.dstHeight+"px"},Ts.Drafty.isProcessing(t)?e=Hs:(s.src=this.authorizeURL((0,zs.wk)(s.src,"image")),s.alt=t.name,(t.ref||t.val)&&(s.onClick=this.onVideoPreview,s.loading="lazy"),e=Bs),e}function Js(e,t,s,a){if(!e)return s;let i=Ts.Drafty.tagName(e);const n={key:a};switch(e){case"AU":i=l().Fragment,s=[l().createElement("i",{key:"au",className:"material-icons"},"mic")," ",(0,Ls.Ye)(t.duration/1e3)];break;case"BR":i=l().Fragment,s=[" "];break;case"HL":n.className="highlight preview";break;case"LN":case"MN":i="span";break;case"IM":i=l().Fragment,s=[l().createElement("i",{key:"im",className:"material-icons"},"photo")," ",this.formatMessage(Ks.drafty_image)];break;case"BN":i="span",n.className="flat-button faux";break;case"FM":i=l().Fragment,s=[l().createElement("i",{key:"fm",className:"material-icons"},"dashboard"),this.formatMessage(Ks.drafty_form)].concat(" ",s||[]);break;case"RW":i=l().Fragment;break;case"EX":if(t){if("application/json"==t.mime)return null;delete t.val,delete t.ref}i=l().Fragment,s=[l().createElement("i",{key:"ex",className:"material-icons"},"attachment")," ",this.formatMessage(Ks.drafty_attachment)];break;case"VC":i=qs,t&&(n.callState=t.state,n.incoming=t.incoming,n.duration=t.duration),s=null;break;case"QQ":case"HD":i=null,s=null;break;case"VD":i=l().Fragment,s=[l().createElement("i",{key:"im",className:"material-icons"},"play_circle_outline")," ",this.formatMessage(Ks.drafty_video)];break;default:i||(i=l().Fragment,s=[l().createElement("i",{key:"x0",className:"material-icons gray"},"extension")," ",this.formatMessage(Ks.drafty_unknown)])}return i?l().createElement(i,n,s):s}function Ys(e,t){return e.style={width:As._g+"px",height:As._g+"px",maxWidth:As._g+"px",maxHeight:As._g+"px"},e.className="inline-image",e.alt=this.formatMessage(Ks.drafty_image),e.src=t&&e.src||"img/broken_image.png",e.title=e.alt,e}function Xs(e,t){const s=(0,Ws.ae)(t.width,t.height,As.iq,As._g);return e.style={width:s.width+"px",height:s.height+"px",maxWidth:As.iq+"px",maxHeight:As._g+"px"},e.className="inline-image",e.alt=this.formatMessage(Ks.drafty_video),e.title=e.alt,e.src=t&&e.src||"img/broken_video.png",e}function Zs(e,t,s,a){if(["BR","EX","IM","MN","VD"].includes(e)){let i=Ts.Drafty.tagName(e),n=Ts.Drafty.attrValue(e,t)||{};switch(n.key=a,e){case"BR":s=null;break;case"IM":n=Ys.call(this,n,t),s=[l().createElement("img",n,null)," ",n.alt],i=l().Fragment,n={key:a};break;case"VD":n=Xs.call(this,n,t),s=[l().createElement("img",n,null)," ",n.alt],i=l().Fragment,n={key:a};break;case"MN":i="span",n.className="mention",t&&(n.className+=" "+(0,Ls.kJ)(t.val,!1,!0));break;case"EX":let e;if(t){if("application/json"==t.mime)return null;e=t.name,delete t.val,delete t.ref}i=l().Fragment,s=[l().createElement("i",{key:"ex",className:"material-icons"},"attachment"),(0,Ls.Tu)(e,16)||this.formatMessage(Ks.drafty_attachment)]}return l().createElement(i,n,s)}return Js.call(this,e,t,s,a)}function ea(e,t){let s,a,i,n;if(t?(a=e.preview,n=e.premime||"image/jpeg",i=e.preref):(a=e.val,n=e.mime,i=e.ref),a){const e=(0,Ws.i)(a,n);if(!e)throw new Error("Invalid image");s=Promise.resolve(e)}else{if(!i)throw new Error("Missing image data");s=fetch(this.authorizeURL((0,zs.wk)(i,"image"))).then((e=>{if(e.ok)return e.blob();throw new Error(`Image fetch unsuccessful: ${e.status} ${e.statusText}`)}))}return s.then((e=>(0,Ws.ag)(e,t?As.iq:As._g,As._g,-1,!t))).then((s=>(t?e.premime=s.mime:e.mime=s.mime,e.size=s.blob.size,e.width=s.width,e.height=s.height,delete e.ref,delete e.preref,e.src=URL.createObjectURL(s.blob),(0,Ws.Sk)(s.blob)))).then((s=>(t?e.preview=s.bits:e.val=s.bits,e))).catch((t=>{throw delete e.val,delete e.preview,delete e.src,e.width=As._g,e.height=As._g,t}))}function ta(e,t,s,a,i){if("IM"==e||"VD"==e){const i="IM"==e?Ys.call(this,{key:a},t):Xs.call(this,{key:a},t);let n;try{n=(0,zs.iE)(ea.call(this,t,"VD"==e))}catch(e){console.warn("Failed to quote image:",e.message),n=(0,zs.iE)(e)}return i.whenDone=n,s=[l().createElement(js,i,null)," ",i.alt],l().createElement(l().Fragment,{key:a},s)}if("QQ"==e){if(i.includes("QQ"))return l().createElement("span",{key:a},[l().createElement("i",{key:"qq",className:"material-icons"},"format_quote")," "]);const e=Ts.Drafty.attrValue("QQ",t)||{};return e.key=a,e.className="reply-quote",l().createElement(Ts.Drafty.tagName("QQ"),e,s)}return Zs.call(this,e,t,s,a)}class sa extends l().Component{constructor(e){super(e),this.handleClick=this.handleClick.bind(this),this.handleContextClick=this.handleContextClick.bind(this)}handleClick(e){e.preventDefault(),e.stopPropagation(),this.props.onSelected&&this.props.onSelected(this.props.item,this.props.index)}handleContextClick(e){e.preventDefault(),e.stopPropagation(),this.props.showContextMenu({topicName:this.props.item,y:e.pageY,x:e.pageX})}render(){let e=this.props.title;e?e.length>30&&(e=e.substring(0,28)+"…"):e=l().createElement("i",null,l().createElement(d.FormattedMessage,{id:"unnamed_topic",defaultMessage:[{type:0,value:"Unnamed"}]}));const t=this.props.now?"online":"offline",s=!this.props.avatar||this.props.avatar,a=this.props.badges?this.props.badges.slice():[],i=[];let n;this.props.isVerified&&i.push({icon:"verified",color:"verified-color"}),this.props.isStaff&&i.push({icon:"staff",color:"staff-color"}),this.props.isDangerous&&i.push({icon:"dangerous",color:"danger-color"}),this.props.acs&&(this.props.showMode&&a.push({name:this.props.acs.getMode(),key:"mode"}),this.props.acs.isMuted()&&i.push({icon:"muted"}),this.props.acs.isJoiner()||i.push({icon:"banned"})),"string"==typeof this.props.preview?n=this.props.preview:Ts.Drafty.isValid(this.props.preview)?n=l().createElement(l().Fragment,null,Ts.Drafty.format(this.props.preview,Js,{formatMessage:this.props.intl.formatMessage,previewIsResponse:this.props.previewIsResponse})):this.props.preview&&(n=l().createElement(l().Fragment,null,l().createElement("i",{className:"material-icons gray"},"warning_amber")," ",l().createElement("i",{className:"gray"},l().createElement(d.FormattedMessage,{id:"invalid_content",defaultMessage:[{type:0,value:"invalid content"}]}))));const r=(0,zs.LO)(this.props.received),o=r?l().createElement("i",{className:"material-icons small space-right"+(r.color?" "+r.color:"")},r.name):null,c="contact-title"+(this.props.deleted?" deleted":"");return l().createElement("li",{className:!this.props.showCheckmark&&this.props.selected?"selected":null,onClick:this.handleClick},l().createElement("div",{className:"avatar-box"},l().createElement(Rs.A,{tinode:this.props.tinode,avatar:s,title:this.props.title,topic:this.props.item,deleted:this.props.deleted}),this.props.deleted?l().createElement("i",{className:"deleted material-icons"},"cancel"):this.props.showOnline?l().createElement("span",{className:t}):this.props.showCheckmark&&this.props.selected?l().createElement("i",{className:"checkmark material-icons"},"check_circle"):null),l().createElement("div",{className:"text-box"},l().createElement("div",null,l().createElement("span",{className:c},e),this.props.isGroup?l().createElement("i",{className:"material-icons as-badge"},"group"):null,this.props.isChannel?l().createElement("img",{src:"/img/channel.png",className:"channel",alt:"channel"}):null,l().createElement(Fs,{badges:i}),this.props.deleted?null:l().createElement(xs,{count:this.props.unread})),this.props.showMode?l().createElement("span",null,l().createElement(Fs,{badges:a})):this.props.small?null:l().createElement("div",{className:"contact-comment"},o,l().createElement("span",null,n||this.props.comment||" "))),this.props.showContextMenu?l().createElement("span",{className:"menuTrigger"},l().createElement("a",{href:"#",onClick:this.handleContextClick},l().createElement("i",{className:"material-icons"},"expand_more"))):null)}}var aa=(0,d.injectIntl)(sa);class ia extends l().PureComponent{constructor(e){super(e),this.handleClick=this.handleClick.bind(this)}handleClick(e){e.preventDefault(),e.stopPropagation(),this.props.onAction(this.props.action)}render(){const{formatMessage:e}=this.props.intl;return l().createElement("li",{onClick:this.handleClick,className:"action"},l().createElement("div",{className:"action-text"},e(this.props.title,this.props.values)))}}var na=(0,d.injectIntl)(ia);const ra=(0,d.defineMessages)({badge_you:{id:"badge_you",defaultMessage:[{type:0,value:"you"}]},badge_owner:{id:"badge_owner",defaultMessage:[{type:0,value:"owner"}]}});class oa extends l().Component{render(){const{formatMessage:e}=this.props.intl,t=Array.isArray(this.props.topicSelected),s=[];let a=0;return this.props.contacts&&this.props.contacts.length>0&&this.props.contacts.map((i=>{if(i.action)s.push(l().createElement(na,{title:i.title,action:i.action,values:i.values,key:i.action,onAction:this.props.onAction}));else{const n=this.props.showMode?i.user:i.topic||i.user;if(this.props.filterFunc&&this.props.filter){const e=[n];if(i.private&&i.private.comment&&e.push((""+i.private.comment).toLowerCase()),i.public&&i.public.fn&&e.push((""+i.public.fn).toLowerCase()),!this.props.filterFunc(this.props.filter,e))return}const r=Ts.Tinode.isChannelTopicName(n),o=!r&&Ts.Tinode.isGroupTopicName(n),c=t?this.props.topicSelected.indexOf(n)>-1:this.props.topicSelected===n,d=[];this.props.showMode&&(n==this.props.myUserId&&d.push({name:e(ra.badge_you),color:"green"}),i.acs&&i.acs.isOwner()&&d.push({name:e(ra.badge_owner),color:"blue"}));const h=Array.isArray(i.private)?i.private.join(","):i.private?i.private.comment:null;let p,u,m,g;if(!this.props.showMode&&i.latestMessage){const e=i.latestMessage();e&&(u=e.head?e.head.forwarded:null,g=e._status||i.msgStatus(e,!0),m=e.from!=this.props.myUserId,e.content&&(p="string"==typeof e.content?e.content.substr(0,As.sT):Ts.Drafty.preview(e.content,As.sT)))}s.push(l().createElement(aa,{tinode:this.props.tinode,title:i.public?i.public.fn:null,avatar:(0,Ws.to)(i.public?i.public.photo:null),comment:h,preview:p,previewIsResponse:m,forwarded:u,received:g,unread:this.props.showUnread?i.unread:0,now:i.online&&this.props.connected,acs:i.acs,showMode:this.props.showMode,badges:d,showCheckmark:t,selected:c,showOnline:this.props.showOnline&&!r,isChannel:r,isGroup:o,showContextMenu:this.props.showContextMenu,isVerified:i.trusted&&i.trusted.verified,isStaff:i.trusted&&i.trusted.staff,isDangerous:i.trusted&&i.trusted.danger,deleted:i._deleted,onSelected:this.props.onTopicSelected,item:n,index:s.length,key:n})),a++}}),this),l().createElement("div",{className:this.props.noScroll?null:"scrollable-panel"},0==a?l().createElement("div",{className:"center-medium-text",dangerouslySetInnerHTML:{__html:this.props.emptyListMessage}}):null,s.length>0?l().createElement("ul",{className:"contact-box"},s):null)}}var la=(0,d.injectIntl)(oa);class ca extends l().PureComponent{constructor(e){super(e),this.state={edited:!1,search:""},this.handleSearchChange=this.handleSearchChange.bind(this),this.handleSearch=this.handleSearch.bind(this),this.handleClear=this.handleClear.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}componentWillUnmount(){this.state.edited&&(this.setState({search:"",edited:!1}),this.props.onSearchContacts(Ts.Tinode.DEL_CHAR))}handleSearchChange(e){this.setState({search:e.target.value})}handleSearch(e){e.preventDefault();const t=this.state.search.trim();this.setState({edited:t.length>0}),this.props.onSearchContacts(t.length>0?t:Ts.Tinode.DEL_CHAR)}handleClear(e){e.preventDefault(),this.state.edited&&this.props.onSearchContacts(Ts.Tinode.DEL_CHAR),this.setState({search:"",edited:!1})}handleKeyDown(e){"Enter"===e.key?this.handleSearch(e):"Escape"===e.key&&this.handleClear()}render(){return l().createElement("div",{className:"panel-form"},l().createElement("div",{className:"panel-form-row"},l().createElement("i",{className:"material-icons search"},"search"),l().createElement("input",{className:"search",type:"text",placeholder:this.props.placeholder,value:this.state.search,onChange:this.handleSearchChange,onKeyDown:this.handleKeyDown,required:!0,autoFocus:!0}),this.state.search?l().createElement("a",{href:"#",onClick:this.handleClear},l().createElement("i",{className:"material-icons"},"highlight_off")):l().createElement("span",null,l().createElement("i",{className:"material-icons"}," "))))}}class da extends l().Component{constructor(e){super(e),this.state={query:null},this.handleEscapeKey=this.handleEscapeKey.bind(this),this.handleClose=this.handleClose.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleContactSelected=this.handleContactSelected.bind(this)}componentDidMount(){this.props.onInitFind()}handleEscapeKey(e){27===e.keyCode&&this.props.hide(!1)}handleClose(e){e.preventDefault(),this.props.hide(!1)}handleSearchContacts(e){this.setState({query:Ts.Tinode.isNullValue(e)?null:e}),this.props.onSearchContacts(e)}handleContactSelected(e){this.props.onTopicSelected(e),this.props.hide(!0)}render(){let e=null!=this.state.query?this.props.searchResults:this.props.contacts;return e=e.filter((e=>e.name!=this.props.topicSelected&&e.acs.isJoiner()&&e.acs.isWriter())),l().createElement("div",{className:"alert-container"},l().createElement("div",{className:"forward-dialog"},l().createElement("div",{className:"title with-control"},l().createElement("div",null,l().createElement(d.FormattedMessage,{id:"forward_to",defaultMessage:[{type:0,value:"Forward to"}],desription:"Title of the contact selector dialog when forwarding a message"})),l().createElement("div",null,l().createElement("a",{href:"#",onClick:this.handleClose},l().createElement("i",{className:"material-icons"},"close")))),l().createElement(d.FormattedMessage,{id:"forward_to_search_placeholder",defaultMessage:[{type:0,value:"Search contacts"}]},(e=>l().createElement(ca,{placeholder:e,onSearchContacts:this.handleSearchContacts}))),l().createElement(d.FormattedMessage,{id:"search_no_results",defaultMessage:[{type:0,value:"Search returned no results"}]},(t=>l().createElement(la,{tinode:this.props.tinode,contacts:e,myUserId:this.props.myUserId,emptyListMessage:t,showOnline:!1,showUnread:!1,showContextMenu:!1,onTopicSelected:this.handleContactSelected})))))}}var ha=r(635);const pa="started",ua=new Audio("audio/call-in.m4a");class ma extends l().Component{constructor(e){super(e),this.state={topic:null,fullName:void 0,avatar:null,trustedBadges:[],previousMetaDesc:void 0},this.resetDesc=this.resetDesc.bind(this),this.onMetaDesc=this.onMetaDesc.bind(this),this.handleRejectCall=this.handleRejectCall.bind(this),this.handleAcceptCall=this.handleAcceptCall.bind(this),this.ringTimer=null}componentDidMount(){const e=this.props.tinode.getTopic(this.props.topic);e&&(this.resetDesc(e),2==this.props.callState&&(ua.play().catch((e=>{})),this.ringTimer=setInterval((e=>{ua.play().catch((e=>{}))}),2e3),this.props.onRinging(this.props.topic,this.props.seq)))}componentDidUpdate(e){const t=this.props.tinode.getTopic(e.topic);t&&(this.onMetaDesc!=t.onMetaDesc&&(this.previousMetaDesc=t.onMetaDesc,t.onMetaDesc=this.onMetaDesc),this.state.topic!=e.topic&&(this.setState({topic:e.topic}),this.resetDesc(t,e)))}componentWillUnmount(){null!=this.ringTimer&&(clearInterval(this.ringTimer),ua.pause());const e=this.props.tinode.getTopic(this.props.topic);e&&(this.setState({topic:null}),e.onMetaDesc=this.previousMetaDesc)}resetDesc(e){const t=[];if(e.trusted)for(const[s,a]of Object.entries(e.trusted))a&&t.push(s);this.setState({fullName:(0,zs.iL)(e.public?e.public.fn:void 0,As.tS),avatar:(0,Ws.to)(e.public?e.public.photo:null),trustedBadges:t})}onMetaDesc(e){const t=this.props.tinode.getTopic(this.props.topic);t&&(this.resetDesc(t),this.previousMetaDesc&&this.previousMetaDesc!=this.onMetaDesc&&this.previousMetaDesc(e))}handleAcceptCall(){this.props.onAcceptCall(this.props.topic)}handleRejectCall(){this.props.onReject(this.props.topic,this.props.seq),this.props.onClose()}render(){return l().createElement("div",{className:"alert-container"},l().createElement("div",{className:"incoming-call"},l().createElement("div",{className:"caller-card incoming pulse"},l().createElement("div",{className:"avatar-box"},l().createElement(Rs.A,{tinode:this.props.tinode,avatar:this.state.avatar||!0,topic:this.props.topic,title:this.state.fullName})),l().createElement("div",{className:"caller-name"},(0,zs.iL)(this.state.fullName,As.mu),l().createElement(ha.A,{short:!0,trustedBadges:this.state.trustedBadges}))),l().createElement("div",{className:"controls"},2==this.props.callState?l().createElement(l().Fragment,null,l().createElement("button",{className:"danger",onClick:this.handleRejectCall},l().createElement("i",{className:"material-icons"},"call_end")),l().createElement("button",{className:"positive",onClick:this.handleAcceptCall},l().createElement("i",{className:"material-icons"},"call"))):null)))}}var ga=r(9418),fa=r(1166);class va extends l().PureComponent{render(){return l().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCancel()}},l().createElement("i",{className:"material-icons"},"close"))}}class ba extends l().PureComponent{constructor(e){super(e),this.state={show:!1},this.hide=this.hide.bind(this)}componentDidUpdate(e){e.level!==this.props.level&&this.setState({show:!!this.props.level})}hide(){this.setState({show:!1}),this.props.onClearError&&this.props.onClearError()}render(){const e={err:"error",warn:"warning",info:"info"}[this.props.level]||"",t="info-box "+e;return l().createElement("div",{className:t},l().createElement("div",{className:"icon"},l().createElement("i",{className:"material-icons"},e)),l().createElement("span",null,this.props.text,this.props.action?l().createElement(l().Fragment,null," ",l().createElement("a",{href:"#",style:{whiteSpace:"nowrap"},onClick:e=>{e.preventDefault(),this.props.action()}},this.props.actionText)):null),l().createElement("div",{className:"cancel"},l().createElement(va,{onCancel:this.hide})))}}class Ea extends l().PureComponent{constructor(e){super(e),this.handleCancel=this.handleCancel.bind(this)}handleCancel(e){e.preventDefault(),this.props.onCancel(this.props.topic,this.props.index)}render(){const e=this.props.title||this.props.topic,t=this.props.invalid?"chip invalid":"chip";return l().createElement("div",{className:t},this.props.noAvatar?l().createElement("span",{className:"spacer"}):l().createElement("div",{className:"avatar-box"},l().createElement(Rs.A,{tinode:this.props.tinode,avatar:this.props.avatar||!0,topic:this.props.topic,title:this.props.title})),l().createElement("span",null,e),this.props.onCancel&&!this.props.required?l().createElement("a",{href:"#",onClick:this.handleCancel},"×"):l().createElement("span",{className:"spacer"}))}}class ya extends l().Component{constructor(e){super(e),this.state=ya.deriveStateFromProps(e),this.state.input="",this.state.focused=!1,this.handleTextInput=this.handleTextInput.bind(this),this.removeChipAt=this.removeChipAt.bind(this),this.handleChipCancel=this.handleChipCancel.bind(this),this.handleFocusGained=this.handleFocusGained.bind(this),this.handleFocusLost=this.handleFocusLost.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}static deriveStateFromProps(e){return{placeholder:e.chips?"":e.prompt,sortedChips:ya.sortChips(e.chips,e.staticMembers),chipIndex:ya.indexChips(e.chips)}}componentDidUpdate(e,t){e.chips==this.props.chips&&e.staticMembers==this.props.staticMembers&&e.prompt==this.props.prompt||this.setState(ya.deriveStateFromProps(this.props)),(!t||this.props.chips.length>t.sortedChips.length)&&this.setState({input:""})}static indexChips(e){const t={};let s=0;return e.map((e=>{t[e.user]=s,s++})),t}static sortChips(e,t){const s=[],a=[];return e.map((e=>{t&&t.includes(e.user)?s.push(e):a.push(e)})),s.concat(a)}handleTextInput(e){this.setState({input:e.target.value}),this.props.filterFunc&&this.props.filterFunc(e.target.value)}removeChipAt(e){const t=this.state.sortedChips[e];this.props.onChipRemoved(t.user,this.state.chipIndex[t.user])}handleChipCancel(e,t){this.removeChipAt(t)}handleFocusGained(){this.setState({focused:!0})}handleFocusLost(){this.setState({focused:!1}),this.props.onFocusLost&&this.props.onFocusLost(this.state.input)}handleKeyDown(e){if("Backspace"===e.key){if(0==this.state.input.length&&this.state.sortedChips.length>0){const e=this.state.sortedChips.length-1;this.state.sortedChips[e].user!==this.props.staticMembers&&this.removeChipAt(e)}}else"Enter"===e.key?this.props.onEnter&&this.props.onEnter(this.state.input):"Escape"===e.key&&this.props.onCancel&&this.props.onCancel()}render(){const e=[];let t=0;const s=this.props.staticMembers||[];this.state.sortedChips.map((a=>{e.push(l().createElement(Ea,{tinode:this.props.tinode,onCancel:this.handleChipCancel,avatar:(0,Ws.to)(a.public?a.public.photo:null),title:a.public?a.public.fn:void 0,noAvatar:this.props.avatarDisabled,topic:a.user,required:s.includes(a.user),invalid:a.invalid,index:t,key:a.user})),t++}));const a="chip-input"+(this.state.focused?" focused":""),i=!(this.props.tabIndex>0);return l().createElement("div",{className:a},e,l().createElement("input",{type:"text",placeholder:this.state.placeholder,onChange:this.handleTextInput,onFocus:this.handleFocusGained,onBlur:this.handleFocusLost,onKeyDown:this.handleKeyDown,value:this.state.input,tabIndex:this.props.tabIndex,autoFocus:i}))}}const wa=(0,d.defineMessages)({no_contacts:{id:"no_contacts",defaultMessage:[{type:0,value:"You have no contacts :-("}]},contacts_not_found_short:{id:"contacts_not_found_short",defaultMessage:[{type:0,value:"No contacts match '"},{type:1,value:"query"},{type:0,value:"'"}]}});class Ca extends l().Component{constructor(e){super(e),this.state={members:e.members,index:Ca.indexMembers(e.members),staticMembers:Ca.staticMembers(e.members,e.keepInitialMembers,e.requiredMember),contactFilter:"",noContactsMessage:e.intl.formatMessage(wa.no_contacts),selectedContacts:Ca.selectedContacts(e.members)},this.handleContactSelected=this.handleContactSelected.bind(this),this.handleMemberRemoved=this.handleMemberRemoved.bind(this),this.handleContactFilter=this.handleContactFilter.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}static indexMembers(e){let t={};return e.map((e=>{t[e.user]={delta:0,present:!0}})),t}static staticMembers(e,t,s){let a=[];return e.map((e=>{(t||e.user==s)&&a.push(e.user)})),a}static selectedContacts(e){let t=[];return e.map((e=>{t.push(e.user)})),t}handleContactSelected(e,t){let s=this.state.index[e];if(s){if(s.present)return;s.delta+=1,s.present=!0}else s={delta:1,present:!0};let a=this.state.members.slice();a.push(this.props.contacts[t]);const i=Ca.selectedContacts(a),n=this.state.index;n[e]=s,this.setState({members:a,index:n,selectedContacts:i})}handleMemberRemoved(e,t){const s=this.state.index[e];if(!s||!s.present)return;s.present=!1,s.delta-=1;let a=this.state.members.slice();a.splice(t,1);const i=Ca.selectedContacts(a),n=this.state.index;n[e]=s,this.setState({members:a,index:n,selectedContacts:i})}handleContactFilter(e){const{formatMessage:t}=this.props.intl,s=e?t(wa.contacts_not_found_short,{query:e}):t(wa.no_contacts);this.setState({contactFilter:e,noContactsMessage:s})}static doContactFiltering(e,t){if(e){for(let s=0;s
"},{type:0,value:"¯∖_(ツ)_/¯"}]},(e=>l().createElement(la,{tinode:this.props.tinode,connected:this.props.connected,contacts:this.state.contactList,emptyListMessage:e,topicSelected:this.props.topicSelected,myUserId:this.props.myUserId,showOnline:!0,showUnread:!0,onTopicSelected:this.props.onTopicSelected,showContextMenu:this.props.showContextMenu,onAction:this.handleAction})))}}class Ii extends l().PureComponent{constructor(e){super(e),this.handleCheckboxClick=this.handleCheckboxClick.bind(this)}handleCheckboxClick(e,t){"sound"==e?this.props.onToggleMessageSounds(t):"alert"==e?this.props.onTogglePushNotifications(t):"incognito"==e&&this.props.onToggleIncognitoMode(t)}render(){return l().createElement("div",{className:"scrollable-panel"},l().createElement("div",{className:"panel-form-row"},l().createElement("label",{htmlFor:"message-sound"},l().createElement(d.FormattedMessage,{id:"label_message_sound",defaultMessage:[{type:0,value:"Message sound:"}]})),l().createElement(fa.A,{name:"sound",id:"message-sound",checked:this.props.messageSounds,onChange:this.handleCheckboxClick})),l().createElement("div",{className:"panel-form-row"},l().createElement("label",{htmlFor:"desktop-alerts"},this.props.desktopAlertsEnabled?l().createElement(d.FormattedMessage,{id:"label_push_notifications",defaultMessage:[{type:0,value:"Notification alerts:"}]}):l().createElement(d.FormattedMessage,{id:"label_push_notifications_disabled",defaultMessage:[{type:0,value:"Notification alerts (requires HTTPS):"}]})),l().createElement(fa.A,{name:"alert",id:"desktop-alerts",checked:this.props.desktopAlerts,onChange:this.props.desktopAlertsEnabled?this.handleCheckboxClick:null})),l().createElement("div",{className:"panel-form-row"},l().createElement("label",{htmlFor:"incognito-mode"},l().createElement(d.FormattedMessage,{id:"label_incognito_mode",defaultMessage:[{type:0,value:"Incognito mode:"}]})),l().createElement(fa.A,{name:"incognito",id:"incognito-mode",checked:this.props.incognitoMode,onChange:this.handleCheckboxClick})))}}const Pi=(0,d.defineMessages)({delete_account:{id:"delete_account",defaultMessage:[{type:0,value:"Delete account"}]},delete_account_warning:{id:"delete_account_warning",defaultMessage:[{type:0,value:"Are you sure you want to delete your account? It cannot be undone."}]}});class Fi extends l().Component{constructor(e){super(e);const t=this.props.tinode.getMeTopic();let s=0;t.contacts((e=>{e.acs&&!e.acs.isJoiner()&&s++}));const a=t.getDefaultAccess();this.state={auth:a?a.auth:null,anon:a?a.anon:null,showPermissionEditorFor:void 0,blockedCount:s},this.handlePasswordUpdate=this.handlePasswordUpdate.bind(this),this.handleLaunchPermissionsEditor=this.handleLaunchPermissionsEditor.bind(this),this.handleHidePermissionsEditor=this.handleHidePermissionsEditor.bind(this),this.handlePermissionsChanged=this.handlePermissionsChanged.bind(this),this.handleDeleteAccount=this.handleDeleteAccount.bind(this)}handlePasswordUpdate(e){this.setState({password:e}),this.props.onUpdatePassword(e)}handleLaunchPermissionsEditor(e){this.setState({showPermissionEditorFor:e,editedPermissions:this.state[e]})}handleHidePermissionsEditor(){this.setState({showPermissionEditorFor:void 0})}handlePermissionsChanged(e){let t={};t[this.state.showPermissionEditorFor]=e,this.props.onUpdateAccountDesc("me",void 0,void 0,t);let s={showPermissionEditorFor:void 0};s[this.state.showPermissionEditorFor]=e,this.setState(s)}handleDeleteAccount(e){e.preventDefault();const{formatMessage:t}=this.props.intl;this.props.onShowAlert(t(Pi.delete_account),t(Pi.delete_account_warning),(e=>this.props.onDeleteAccount()),null,!0,null)}render(){return l().createElement(l().Fragment,null,this.state.showPermissionEditorFor?l().createElement(Ta,{mode:this.state.editedPermissions,skip:"O",onSubmit:this.handlePermissionsChanged,onCancel:this.handleHidePermissionsEditor}):l().createElement("div",{className:"scrollable-panel"},l().createElement("div",{className:"panel-form-column"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_password",defaultMessage:[{type:0,value:"Password"}]})),l().createElement("div",null,l().createElement(d.FormattedMessage,{id:"password_unchanged_prompt",defaultMessage:[{type:0,value:"Unchanged"}]},(e=>l().createElement(Pa,{placeholder:e,type:"password",onFinished:this.handlePasswordUpdate}))))),l().createElement("div",{className:"hr"}),l().createElement("div",{className:"panel-form-column"},l().createElement("a",{href:"#",className:"danger flat-button",onClick:e=>{e.preventDefault(),this.props.onLogout()}},l().createElement("i",{className:"material-icons"},"exit_to_app")," ",l().createElement(d.FormattedMessage,{id:"button_logout",defaultMessage:[{type:0,value:"Logout"}]})),l().createElement("a",{href:"#",className:"danger flat-button",onClick:e=>{this.handleDeleteAccount(e)}},l().createElement("i",{className:"material-icons"},"delete")," ",l().createElement(d.FormattedMessage,{id:"button_delete_account",defaultMessage:[{type:0,value:"Delete account"}]}))),l().createElement("div",{className:"hr"}),l().createElement("div",{className:"panel-form-column"},l().createElement("div",null,l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_default_access_mode",defaultMessage:[{type:0,value:"Default access mode:"}]}))),l().createElement("div",{className:"quoted"},l().createElement("div",null,"Auth: ",l().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"auth")},this.state.auth)),l().createElement("div",null,"Anon: ",l().createElement("tt",{className:"clickable",onClick:this.handleLaunchPermissionsEditor.bind(this,"anon")},this.state.anon)))),this.state.blockedCount>0?l().createElement(l().Fragment,null,l().createElement("div",{className:"hr"}),l().createElement("div",{className:"panel-form-row"},l().createElement("i",{className:"material-icons"},"block")," ",l().createElement("a",{href:"#",className:"gray",onClick:e=>{e.preventDefault(),this.props.onShowBlocked()}},l().createElement(d.FormattedMessage,{id:"blocked_contacts_link",defaultMessage:[{type:0,value:"Blocked contacts ("},{type:1,value:"count"},{type:0,value:")"}],values:{count:this.state.blockedCount}})))):null))}}var Ri=(0,d.injectIntl)(Fi);class xi extends l().PureComponent{render(){return l().createElement("div",{className:"scrollable-panel"},l().createElement("div",{className:"panel-form-column"},l().createElement("a",{href:As.fi,className:"flat-button",target:"_blank"},l().createElement("i",{className:"material-icons"},"email")," ",l().createElement(d.FormattedMessage,{id:"link_contact_us",defaultMessage:[{type:0,value:"Contact Us"}]})),l().createElement("a",{href:As.V9,className:"flat-button",target:"_blank"},l().createElement("i",{className:"material-icons"},"description")," ",l().createElement(d.FormattedMessage,{id:"link_terms_of_service",defaultMessage:[{type:0,value:"Terms of Service"}]})),l().createElement("a",{href:As.RS,className:"flat-button",target:"_blank"},l().createElement("i",{className:"material-icons"},"policy")," ",l().createElement(d.FormattedMessage,{id:"link_privacy_policy",defaultMessage:[{type:0,value:"Privacy Policy"}]}))),l().createElement("div",{className:"hr"}),l().createElement("div",{className:"panel-form-column"},l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_client",defaultMessage:[{type:0,value:"Client:"}]})),As.C3),l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_sdk",defaultMessage:[{type:0,value:"SDK:"}]})),Ts.Tinode.getLibrary()),l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_server",defaultMessage:[{type:0,value:"Server:"}]})),this.props.serverVersion),l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_server_address",defaultMessage:[{type:0,value:"Server address:"}]})),this.props.serverAddress)))}}class Ui extends l().Component{constructor(e){super(e),this.state={login:e.login,password:"",hostName:e.serverAddress,saveToken:e.persist},this.handleLoginChange=this.handleLoginChange.bind(this),this.handlePasswordChange=this.handlePasswordChange.bind(this),this.handleToggleSaveToken=this.handleToggleSaveToken.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}handleLoginChange(e){this.setState({login:e.target.value})}handlePasswordChange(e){this.setState({password:e.target.value})}handleToggleSaveToken(){this.props.onPersistenceChange(!this.state.saveToken),this.setState({saveToken:!this.state.saveToken})}handleSubmit(e){e.preventDefault(),this.props.onLogin(this.state.login.trim(),this.state.password.trim())}render(){let e="primary";return this.props.disabled&&(e+=" disabled"),l().createElement("form",{id:"login-form",onSubmit:this.handleSubmit},l().createElement(d.FormattedMessage,{id:"login_prompt",defaultMessage:[{type:0,value:"Login"}]},(e=>l().createElement("input",{type:"text",id:"inputLogin",placeholder:e,autoComplete:"username",autoCorrect:"off",autoCapitalize:"none",value:this.state.login,onChange:this.handleLoginChange,required:!0,autoFocus:!0}))),l().createElement(d.FormattedMessage,{id:"password_prompt",defaultMessage:[{type:0,value:"Password"}]},(e=>l().createElement(Ia.A,{type:"password",id:"inputPassword",placeholder:e,autoComplete:"current-password",value:this.state.password,onChange:this.handlePasswordChange,required:!0}))),l().createElement("div",{className:"panel-form-row"},l().createElement(fa.A,{id:"save-token",name:"save-token",checked:this.state.saveToken,onChange:this.handleToggleSaveToken}),l().createElement("label",{htmlFor:"save-token"}," ",l().createElement(d.FormattedMessage,{id:"stay_logged_in",defaultMessage:[{type:0,value:"Stay logged in"}]})),l().createElement("a",{href:"#reset"},l().createElement(d.FormattedMessage,{id:"forgot_password_link",defaultMessage:[{type:0,value:"Forgot password?"}]}))),l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{className:e,type:"submit"},l().createElement(d.FormattedMessage,{id:"button_sign_in",defaultMessage:[{type:0,value:"Sign in"}]}))))}}const Li=(0,d.defineMessages)({invalid_id:{id:"error_invalid_id",defaultMessage:[{type:0,value:"Invalid ID"}]}});class Oi extends l().PureComponent{constructor(e){super(e),this.qrCodeRef=l().createRef(),this.state={groupId:""},this.handleChange=this.handleChange.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}componentDidMount(){new(Aa())(this.qrCodeRef.current,{text:this.props.myURI,width:As.Tn,height:As.Tn})}handleChange(e){this.setState({groupId:e.target.value})}handleKeyPress(e){"Enter"===e.key&&this.handleSubmit(e)}handleSubmit(e){if(e.preventDefault(),this.state.groupId){const e=this.state.groupId.trim(),t=e.substring(0,3);e.length>3&&["usr","grp","chn"].includes(t)?this.props.onSubmit(e):this.props.onError(this.props.intl.formatMessage(Li.invalid_id),"err")}}render(){return l().createElement("div",{className:"panel-form"},l().createElement("div",{className:"panel-form-row"},l().createElement(d.FormattedMessage,{id:"group_user_id_prompt",defaultMessage:[{type:0,value:"Group or User ID"}]},(e=>l().createElement("input",{type:"text",placeholder:e,value:this.state.groupId,onChange:this.handleChange,onKeyDown:this.handleKeyPress,required:!0,autoFocus:!0})))),l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{className:"primary",onClick:this.handleSubmit},l().createElement(d.FormattedMessage,{id:"button_subscribe",defaultMessage:[{type:0,value:"Subscribe"}]}))),l().createElement("br",null),l().createElement("div",{className:"panel-form-column"},l().createElement("label",{className:"small"},"Scan my ID:"),l().createElement("div",{className:"qr-code",ref:this.qrCodeRef})))}}var qi=(0,d.injectIntl)(Oi);class Bi extends l().PureComponent{constructor(e){super(e),this.fullName=l().createRef(),this.state={fullName:"",private:"",description:"",imageUrl:null,tags:[],isChannel:!1,newAvatar:null,newAvatarMime:null},this.handleFieldEdit=this.handleFieldEdit.bind(this),this.handleImageChanged=this.handleImageChanged.bind(this),this.handleAvatarCropped=this.handleAvatarCropped.bind(this),this.handleAvatarCropCancel=this.handleAvatarCropCancel.bind(this),this.uploadAvatar=this.uploadAvatar.bind(this),this.handleTagsChanged=this.handleTagsChanged.bind(this),this.handleChannelToggle=this.handleChannelToggle.bind(this),this.handleSubmit=this.handleSubmit.bind(this)}componentDidMount(){}handleFieldEdit(e,t){this.setState({[e]:t.target.value||""})}handleImageChanged(e,t){this.setState({newAvatar:t,newAvatarMime:e})}handleAvatarCropped(e,t,s,a){const i=t?URL.createObjectURL(t):null;this.setState({imageUrl:i,newAvatar:null,newAvatarMime:null}),t&&this.uploadAvatar(e,t,s,a)}handleAvatarCropCancel(){this.setState({newAvatar:null,newAvatarMime:null})}uploadAvatar(e,t,s,a){const i=e=>{let{mime:t,blob:s}=e;if(s.size>As.Z7){this.props.tinode.getLargeFileHelper().upload(s).then((e=>this.setState({imageUrl:e}))).catch((e=>this.props.onError(e.message,"err")))}else(0,Ws.Sk)(s).then((e=>this.setState({imageUrl:(0,Ws.to)({data:e.bits,type:t})})))};s>As.eQ||a>As.eQ||s!=a?(0,Ws.ag)(t,As.eQ,As.eQ,As.qy,!0).then((e=>i(e))).catch((e=>this.props.onError(e.message,"err"))):i({mime:e,blob:t,width:s,height:a})}handleTagsChanged(e){this.setState({tags:e})}handleChannelToggle(){this.setState({isChannel:!this.state.isChannel})}handleSubmit(e){e.preventDefault();const t=this.state.fullName.trim().substring(0,As.tS),s=this.state.private.trim().substring(0,As.tS),a=this.state.description.trim().substring(0,As.lQ);t&&this.props.onSubmit(t,a,this.state.imageUrl,s,this.state.tags,this.state.isChannel)}render(){if(this.state.newAvatar)return l().createElement(Na.A,{avatar:this.state.newAvatar,mime:this.state.newAvatarMime,onSubmit:this.handleAvatarCropped,onCancel:this.handleAvatarCropCancel,onError:this.props.onError});let e="primary";return this.props.disabled&&(e+=" disabled"),l().createElement("form",{className:"panel-form",onSubmit:this.handleSubmit},l().createElement("div",{className:"panel-form-column"},l().createElement("center",null,l().createElement(ga.A,{tinode:this.props.tinode,avatar:this.state.imageUrl,onError:this.props.onError,onImageUpdated:this.handleImageChanged})),l().createElement("div",{className:"group"},l().createElement("label",{className:"small",htmlFor:"new-topic-fn"},l().createElement(d.FormattedMessage,{id:"label_topic_name",defaultMessage:[{type:0,value:"Name"}]})),l().createElement(d.FormattedMessage,{id:"topic_name_editing_placeholder",defaultMessage:[{type:0,value:"Freeform name of the group"}]},(e=>l().createElement("input",{type:"text",id:"new-topic-fn",placeholder:e,ref:this.fullName,value:this.state.fullName,onChange:this.handleFieldEdit.bind(this,"fullName"),autoFocus:!0,required:!0,tabIndex:0})))),l().createElement("div",{className:"group"},l().createElement("label",{className:"small",htmlFor:"new-topic-priv"},l().createElement(d.FormattedMessage,{id:"label_private",defaultMessage:[{type:0,value:"Private comment"}]})),l().createElement(d.FormattedMessage,{id:"private_editing_placeholder",defaultMessage:[{type:0,value:"Visible to you only"}]},(e=>l().createElement("input",{type:"text",id:"new-topic-priv",placeholder:e,value:this.state.private,onChange:this.handleFieldEdit.bind(this,"private"),tabIndex:1})))),l().createElement("div",{className:"group"},l().createElement("label",{className:"small",htmlFor:"new-topic-desc"},l().createElement(d.FormattedMessage,{id:"label_description",defaultMessage:[{type:0,value:"Description"}]})),l().createElement(d.FormattedMessage,{id:"description_editing_placeholder",defaultMessage:[{type:0,value:"Description (optional)"}]},(e=>l().createElement("input",{type:"text",id:"new-topic-desc",placeholder:e,value:this.state.description,onChange:this.handleFieldEdit.bind(this,"description"),tabIndex:2}))))),l().createElement("div",{className:"panel-form-row"},l().createElement(fa.A,{checked:this.state.isChannel,tabIndex:3,onChange:this.handleChannelToggle})," ",l().createElement("label",{onClick:this.handleChannelToggle},l().createElement(d.FormattedMessage,{id:"channel_prompt",defaultMessage:[{type:0,value:"This is a channel"}]}))),l().createElement(d.FormattedMessage,{id:"title_tag_manager",defaultMessage:[{type:0,value:"Tags (search & discovery)"}]},(e=>l().createElement(Fa,{tinode:this.props.tinode,tags:this.state.tags,activated:!0,onTagsChanged:this.handleTagsChanged,tabIndex:4,title:e}))),l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{className:e},l().createElement(d.FormattedMessage,{id:"button_create",defaultMessage:[{type:0,value:"Create"}]}))))}}const ji=(0,d.defineMessages)({search_for_contacts:{id:"search_for_contacts",defaultMessage:[{type:0,value:"Use search to find contacts"}]},search_no_results:{id:"search_no_results",defaultMessage:[{type:0,value:"Search returned no results"}]},search_placeholder:{id:"search_placeholder",defaultMessage:[{type:0,value:"List like alice@example.com, +17025550003..."}]}});class Vi extends l().Component{constructor(e){super(e),this.state={tabSelected:"find",searchQuery:null},this.handleTabClick=this.handleTabClick.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleSearchResultSelected=this.handleSearchResultSelected.bind(this),this.handleNewGroupSubmit=this.handleNewGroupSubmit.bind(this),this.handleGroupByID=this.handleGroupByID.bind(this)}componentDidMount(){this.props.onInitFind()}handleTabClick(e){e.preventDefault(),bi.A.navigateTo(bi.A.addUrlParam(window.location.hash,"tab",e.currentTarget.dataset.id)),this.setState({tabSelected:e.currentTarget.dataset.id})}handleSearchContacts(e){this.props.onSearchContacts(e),this.setState({searchQuery:Ts.Tinode.isNullValue(e)?null:e})}handleSearchResultSelected(e){"find"==this.state.tabSelected&&(bi.A.navigateTo(bi.A.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(e))}handleNewGroupSubmit(e,t,s,a,i,n){bi.A.navigateTo(bi.A.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(void 0,{public:(0,zs.k6)(e,s,null,t),private:a,tags:i},n)}handleGroupByID(e){bi.A.navigateTo(bi.A.removeUrlParam(window.location.hash,"tab")),this.props.onCreateTopic(e)}render(){const{formatMessage:e}=this.props.intl,t=e(this.state.searchQuery?ji.search_no_results:ji.search_for_contacts),s=e(ji.search_placeholder);return l().createElement("div",{className:"flex-column"},l().createElement("ul",{className:"tabbar"},l().createElement("li",{className:"find"===this.state.tabSelected?"active":null},l().createElement("a",{href:"#","data-id":"find",onClick:this.handleTabClick},l().createElement(d.FormattedMessage,{id:"tabtitle_find_user",defaultMessage:[{type:0,value:"find"}]}))),l().createElement("li",{className:"grp"===this.state.tabSelected?"active":null},l().createElement("a",{href:"#","data-id":"grp",onClick:this.handleTabClick},l().createElement(d.FormattedMessage,{id:"tabtitle_new_group",defaultMessage:[{type:0,value:"new group"}]}))),l().createElement("li",{className:"byid"===this.state.tabSelected?"active":null},l().createElement("a",{href:"#","data-id":"byid",onClick:this.handleTabClick},l().createElement(d.FormattedMessage,{id:"tabtitle_group_by_id",defaultMessage:[{type:0,value:"by id"}]})))),"grp"===this.state.tabSelected?l().createElement(Bi,{tinode:this.props.tinode,onSubmit:this.handleNewGroupSubmit,onError:this.props.onError}):"byid"===this.state.tabSelected?l().createElement(qi,{myURI:Ts.Tinode.URI_TOPIC_ID_PREFIX+this.props.tinode.getCurrentUserID(),onSubmit:this.handleGroupByID,onError:this.props.onError}):l().createElement("div",{className:"flex-column"},l().createElement(ca,{placeholder:s,onSearchContacts:this.handleSearchContacts}),l().createElement(la,{tinode:this.props.tinode,contacts:this.props.searchResults,myUserId:this.props.myUserId,emptyListMessage:t,showOnline:!1,showUnread:!1,showContextMenu:!1,onTopicSelected:this.handleSearchResultSelected})))}}var Hi=(0,d.injectIntl)(Vi);class Wi extends l().PureComponent{constructor(e){super(e),this.state={hostName:e.serverAddress,changed:!1},this.handleHostNameChange=this.handleHostNameChange.bind(this),this.handleEditingFinished=this.handleEditingFinished.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}handleHostNameChange(e){this.setState({hostName:e.target.value,changed:!0})}handleEditingFinished(){this.state.changed&&(this.setState({changed:!1}),this.props.onServerAddressChange(this.state.hostName.trim()))}handleKeyDown(e){"Enter"==e.key&&this.handleEditingFinished()}render(){var e=[];for(let t in As.SE){let s=As.SE[t];e.push(l().createElement("option",{key:s,value:s}))}return l().createElement("div",{className:"panel-form-row"},l().createElement("input",{type:"search",id:"host-name",placeholder:this.props.hostName,list:"known-hosts",className:"quoted",value:this.state.hostName,onChange:this.handleHostNameChange,onBlur:this.handleEditingFinished,onKeyDown:this.handleKeyDown,required:!0}),l().createElement("datalist",{id:"known-hosts"},e))}}class zi extends l().PureComponent{constructor(e){super(e),this.state={transport:e.transport||"def",serverAddress:e.serverAddress,secureConnection:e.secureConnection},this.handleSubmit=this.handleSubmit.bind(this),this.handleTransportSelected=this.handleTransportSelected.bind(this),this.handleServerAddressChange=this.handleServerAddressChange.bind(this),this.handleToggleSecure=this.handleToggleSecure.bind(this)}handleSubmit(e){e.preventDefault(),this.props.onUpdate({transport:this.state.transport,serverAddress:this.state.serverAddress,secureConnection:this.state.secureConnection})}handleTransportSelected(e){this.setState({transport:e.currentTarget.value})}handleServerAddressChange(e){this.setState({serverAddress:e})}handleToggleSecure(e){this.setState({secureConnection:!this.state.secureConnection})}render(){const e={def:"default",ws:"websocket",lp:"long polling"},t=[];return["def","ws","lp"].map((s=>{const a="transport-"+s,i=e[s];t.push(l().createElement("li",{key:s},l().createElement("input",{type:"radio",id:a,name:"transport-select",value:s,checked:this.state.transport===s,onChange:this.handleTransportSelected}),l().createElement("label",{htmlFor:a},i)))})),l().createElement("form",{id:"settings-form",className:"panel-form",onSubmit:this.handleSubmit},l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_server_to_use",defaultMessage:[{type:0,value:"Server to use:"}]}))),l().createElement(Wi,{serverAddress:this.state.serverAddress,onServerAddressChange:this.handleServerAddressChange}),l().createElement("div",{className:"panel-form-row"},l().createElement(fa.A,{id:"secure-connection",name:"secure-connection",checked:this.state.secureConnection,className:"quoted",onChange:this.handleToggleSecure}),l().createElement("label",{htmlFor:"secure-connection"},l().createElement(d.FormattedMessage,{id:"label_use_secure_connection",defaultMessage:[{type:0,value:"Use secure connection"}]}))),l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small"},l().createElement(d.FormattedMessage,{id:"label_wire_transport",defaultMessage:[{type:0,value:"Wire transport:"}]}))),l().createElement("div",{className:"panel-form-row"},l().createElement("ul",{className:"quoted"},t)),l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{type:"submit",className:"primary"},l().createElement(d.FormattedMessage,{id:"button_update",defaultMessage:[{type:0,value:"Update"}]}))))}}const Ki=(0,d.defineMessages)({phone:{id:"phone_dative",defaultMessage:[{type:0,value:"phone"}]},email:{id:"email_dative",defaultMessage:[{type:0,value:"email"}]}});class Gi extends l().PureComponent{constructor(e){super(e),this.state={code:e.credCode||"",codeReceived:e.credCode},this.handleCodeChange=this.handleCodeChange.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleSubmit=this.handleSubmit.bind(this),this.handleCancel=this.handleCancel.bind(this)}static getDerivedStateFromProps(e,t){return e.credCode!=t.codeReceived?{code:e.credCode||"",codeReceived:e.credCode}:t}componentDidMount(){this.props.credCode&&this.props.onSubmit(this.props.credMethod,this.props.credCode,this.props.credToken)}componentDidUpdate(e,t){this.state.codeReceived&&this.state.code&&this.state.code!=t.code&&this.props.onSubmit(this.props.credMethod,this.state.code,this.props.credToken)}handleCodeChange(e){this.setState({code:e.target.value.replace(/[^\d]/g,"")})}handleKeyPress(e){"Enter"===e.key?this.handleSubmit(e):"Escape"==e.key&&this.handleCancel(e)}handleSubmit(e){e.preventDefault(),this.state.code&&this.state.code.trim()&&this.props.onSubmit(this.props.credMethod,this.state.code.trim(),this.props.credToken)}handleCancel(e){e.preventDefault(),this.props.onCancel()}render(){const{formatMessage:e}=this.props.intl,t={email:e(Ki.email),tel:e(Ki.phone)}[this.props.credMethod]||this.props.credMethod;return l().createElement("div",{className:"panel-form"},l().createElement("div",{className:"panel-form-row"},l().createElement("label",{className:"small gray",htmlFor:"enter-confirmation-code"},l().createElement(d.FormattedMessage,{id:"enter_confirmation_code_prompt",defaultMessage:[{type:0,value:"Confirmation code"}],values:{method:t}}))),l().createElement("div",{className:"panel-form-row"},l().createElement(d.FormattedMessage,{id:"numeric_confirmation_code_prompt",defaultMessage:[{type:0,value:"Numbers only"}]},(e=>l().createElement("input",{type:"text",id:"enter-confirmation-code",placeholder:e,value:this.state.code,onChange:this.handleCodeChange,onKeyDown:this.handleKeyPress,required:!0})))),l().createElement("div",{className:"dialog-buttons"},l().createElement("button",{className:"secondary",onClick:this.handleCancel},l().createElement(d.FormattedMessage,{id:"button_cancel",defaultMessage:[{type:0,value:"Cancel"}]})),l().createElement("button",{className:"primary",onClick:this.handleSubmit},l().createElement(d.FormattedMessage,{id:"button_confirm",defaultMessage:[{type:0,value:"Confirm"}]}))))}}var $i=(0,d.injectIntl)(Gi);const Qi=l().lazy((e=>Promise.all([r.e(961),r.e(271)]).then(r.bind(r,4271)))),Ji=l().lazy((e=>Promise.all([r.e(961),r.e(996)]).then(r.bind(r,3996)))),Yi=l().lazy((e=>Promise.all([r.e(961),r.e(993)]).then(r.bind(r,3993)))),Xi=(0,d.defineMessages)({login:{id:"sidepanel_title_login",defaultMessage:[{type:0,value:"Sign In"}]},register:{id:"sidepanel_title_register",defaultMessage:[{type:0,value:"Create Account"}]},settings:{id:"sidepanel_title_settings",defaultMessage:[{type:0,value:"Settings"}]},edit:{id:"sidepanel_title_account_settings",defaultMessage:[{type:0,value:"Account Settings"}]},general:{id:"panel_title_general",defaultMessage:[{type:0,value:"General"}]},security:{id:"panel_title_security",defaultMessage:[{type:0,value:"Security"}]},crop:{id:"panel_title_crop",defaultMessage:[{type:0,value:"Drag to Adjust"}]},notif:{id:"sidepanel_title_acc_notifications",defaultMessage:[{type:0,value:"Notifications"}]},support:{id:"sidepanel_title_acc_support",defaultMessage:[{type:0,value:"Support"}]},newtpk:{id:"sidepanel_title_newtpk",defaultMessage:[{type:0,value:"Start New Chat"}]},cred:{id:"sidepanel_title_cred",defaultMessage:[{type:0,value:"Confirm Credentials"}]},reset:{id:"sidepanel_title_reset",defaultMessage:[{type:0,value:"Reset Password"}]},archive:{id:"sidepanel_title_archive",defaultMessage:[{type:0,value:"Archived Chats"}]},blocked:{id:"sidepanel_title_blocked",defaultMessage:[{type:0,value:"Blocked Chats"}]}});class Zi extends l().PureComponent{constructor(e){super(e),this.handleNewTopic=this.handleNewTopic.bind(this)}handleNewTopic(){this.props.onNavigate("newtpk")}render(){const{formatMessage:e}=this.props.intl,t=this.props.state||(this.props.myUserId?"contacts":"login");let s,a,i,n;return"contacts"==t?(s=this.props.title,a=!this.props.avatar||this.props.avatar,i=this.props.trustedBadges):(s=e(Xi[t]),a=!1,i=null),-1==["login","contacts"].indexOf(t)&&(n=this.props.onCancel),l().createElement("div",{id:"sidepanel"},l().createElement(Ai,{state:t,title:s,avatar:a,tinode:this.props.tinode,trustedBadges:i,myUserId:this.props.myUserId,onSignUp:this.props.onSignUp,onSettings:this.props.onSettings,onNewTopic:this.handleNewTopic,onCancel:n}),l().createElement(ba,{level:this.props.errorLevel,text:this.props.errorText,action:this.props.errorAction,actionText:this.props.errorActionText,onClearError:this.props.onError}),l().createElement(pi.A,{show:this.props.loadSpinnerVisible}),"login"===t?l().createElement(Ui,{login:this.props.login,disabled:this.props.loginDisabled,persist:this.props.persist,onLogin:this.props.onLoginRequest,onPersistenceChange:this.props.onPersistenceChange}):"register"===t?l().createElement(o.Suspense,{fallback:l().createElement("div",{className:"panel-form-row"},l().createElement(d.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},l().createElement(Ji,{tinode:this.props.tinode,reqCredMethod:this.props.reqCredMethod,onShowCountrySelector:this.props.onShowCountrySelector,onCreateAccount:this.props.onCreateAccount,onCancel:this.props.onCancel,onError:this.props.onError})):"settings"===t?l().createElement(zi,{transport:this.props.transport,serverAddress:this.props.serverAddress,secureConnection:this.props.secureConnection,onCancel:this.props.onCancel,onUpdate:this.props.onGlobalSettings}):"edit"===t?l().createElement(o.Suspense,{fallback:l().createElement("div",{className:"panel-form-row"},l().createElement(d.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},l().createElement(Qi,{tinode:this.props.tinode,myUserId:this.props.myUserId,trustedBadges:this.props.trustedBadges,reqCredMethod:this.props.reqCredMethod,onShowCountrySelector:this.props.onShowCountrySelector,onNavigate:this.props.onNavigate,onCredAdd:this.props.onCredAdd,onCredDelete:this.props.onCredDelete,onCredConfirm:this.props.onCredConfirm,onError:this.props.onError})):"general"===t||"crop"===t?l().createElement(xa,{topic:"me",tinode:this.props.tinode,myUserId:this.props.myUserId,reqCredMethod:this.props.reqCredMethod,onUpdateTopicDesc:this.props.onUpdateAccountDesc,onUpdateTagsRequest:this.props.onUpdateAccountTags,onError:this.props.onError}):"notif"===t?l().createElement(Ii,{messageSounds:this.props.messageSounds,desktopAlerts:this.props.desktopAlerts,desktopAlertsEnabled:this.props.desktopAlertsEnabled,incognitoMode:this.props.incognitoMode,onTogglePushNotifications:this.props.onTogglePushNotifications,onToggleMessageSounds:this.props.onToggleMessageSounds,onToggleIncognitoMode:this.props.onToggleIncognitoMode}):"security"===t?l().createElement(Ri,{tinode:this.props.tinode,onUpdateAccountDesc:this.props.onUpdateAccountDesc,onUpdatePassword:this.props.onUpdatePassword,onLogout:this.props.onLogout,onDeleteAccount:this.props.onDeleteAccount,onShowAlert:this.props.onShowAlert,onShowBlocked:this.props.onShowBlocked}):"support"===t?l().createElement(xi,{serverAddress:this.props.serverAddress,serverVersion:this.props.serverVersion}):"contacts"===t||"archive"==t||"blocked"==t?l().createElement(Ni,{tinode:this.props.tinode,myUserId:this.props.myUserId,connected:this.props.connected,topicSelected:this.props.topicSelected,archive:"archive"==t,blocked:"blocked"==t,chatList:this.props.chatList,showContextMenu:this.props.showContextMenu,onTopicSelected:this.props.onTopicSelected,onShowArchive:this.props.onShowArchive}):"newtpk"===t?l().createElement(Hi,{tinode:this.props.tinode,searchResults:this.props.searchResults,onInitFind:this.props.onInitFind,onSearchContacts:this.props.onSearchContacts,onCreateTopic:this.props.onCreateTopic,onError:this.props.onError}):"cred"===t?l().createElement($i,{credCode:this.props.credCode,credMethod:this.props.credMethod,credToken:this.props.credToken,onSubmit:this.props.onValidateCredentials,onCancel:this.props.onCancel}):"reset"===t?l().createElement(o.Suspense,{fallback:l().createElement("div",{className:"panel-form-row"},l().createElement(d.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},l().createElement(Yi,{tinode:this.props.tinode,reqCredMethod:this.props.reqCredMethod,onShowCountrySelector:this.props.onShowCountrySelector,onRequest:this.props.onPasswordResetRequest,onReset:this.props.onResetPassword,onCancel:this.props.onCancel,onError:this.props.onError})):null)}}var en=(0,d.injectIntl)(Zi),tn=r(257);function sn(){let e=As.HX;return"object"==typeof window.location&&("file:"==window.location.protocol||"localhost"==window.location.hostname?e=As.SE.local:window.location.hostname&&(e=window.location.hostname+(window.location.port?":"+window.location.port:""))),e}function an(){return"object"==typeof window.location&&"https:"==window.location.protocol}var nn=r(8262);const rn=l().lazy((e=>r.e(316).then(r.bind(r,4316)))),on=new Audio("audio/msg.m4a"),ln=(0,d.defineMessages)({reconnect_countdown:{id:"reconnect_countdown",defaultMessage:[{type:0,value:"Disconnected. Reconnecting in "},{type:1,value:"seconds"},{type:0,value:"…"}]},reconnect_now:{id:"reconnect_now",defaultMessage:[{type:0,value:"Try now"}]},push_init_failed:{id:"push_init_failed",defaultMessage:[{type:0,value:"Failed to initialize push notifications"}]},invalid_security_token:{id:"invalid_security_token",defaultMessage:[{type:0,value:"Invalid security token"}]},no_connection:{id:"no_connection",defaultMessage:[{type:0,value:"No connection"}]},code_doesnot_match:{id:"code_doesnot_match",defaultMessage:[{type:0,value:"Code does not match"}]},menu_item_info:{id:"menu_item_info",defaultMessage:[{type:0,value:"Info"}]},menu_item_audio_call:{id:"menu_item_audio_call",defaultMessage:[{type:0,value:"Call"}]},menu_item_video_call:{id:"menu_item_video_call",defaultMessage:[{type:0,value:"Video call"}]},cred_confirmed_successfully:{id:"cred_confirmed_successfully",defaultMessage:[{type:0,value:"Confirmed successfully"}]},password_reset_success:{id:"password_reset_success",defaultMessage:[{type:0,value:"Password reset successfully"}]}});class cn extends l().Component{constructor(e){super(e),this.selfRef=l().createRef(),this.state=this.getBlankState(),this.handleResize=this.handleResize.bind(this),this.handleHashRoute=this.handleHashRoute.bind(this),this.handleOnline=this.handleOnline.bind(this),this.checkForAppUpdate=this.checkForAppUpdate.bind(this),this.handleVisibilityEvent=this.handleVisibilityEvent.bind(this),this.handleError=this.handleError.bind(this),this.handleLoginRequest=this.handleLoginRequest.bind(this),this.handlePersistenceChange=this.handlePersistenceChange.bind(this),this.handleConnected=this.handleConnected.bind(this),this.handleAutoreconnectIteration=this.handleAutoreconnectIteration.bind(this),this.doLogin=this.doLogin.bind(this),this.handleLoginSuccessful=this.handleLoginSuccessful.bind(this),this.handleDisconnect=this.handleDisconnect.bind(this),this.tnMeMetaDesc=this.tnMeMetaDesc.bind(this),this.tnMeContactUpdate=this.tnMeContactUpdate.bind(this),this.tnMeSubsUpdated=this.tnMeSubsUpdated.bind(this),this.resetContactList=this.resetContactList.bind(this),this.tnInitFind=this.tnInitFind.bind(this),this.tnFndSubsUpdated=this.tnFndSubsUpdated.bind(this),this.handleSearchContacts=this.handleSearchContacts.bind(this),this.handleTopicSelected=this.handleTopicSelected.bind(this),this.handleHideMessagesView=this.handleHideMessagesView.bind(this),this.handleSendMessage=this.handleSendMessage.bind(this),this.handleNewChatInvitation=this.handleNewChatInvitation.bind(this),this.handleNewAccount=this.handleNewAccount.bind(this),this.handleNewAccountRequest=this.handleNewAccountRequest.bind(this),this.handleUpdatePasswordRequest=this.handleUpdatePasswordRequest.bind(this),this.handleUpdateAccountTagsRequest=this.handleUpdateAccountTagsRequest.bind(this),this.handleToggleIncognitoMode=this.handleToggleIncognitoMode.bind(this),this.handleSettings=this.handleSettings.bind(this),this.handleGlobalSettings=this.handleGlobalSettings.bind(this),this.handleShowArchive=this.handleShowArchive.bind(this),this.handleShowBlocked=this.handleShowBlocked.bind(this),this.handleToggleMessageSounds=this.handleToggleMessageSounds.bind(this),this.handleCredAdd=this.handleCredAdd.bind(this),this.handleCredDelete=this.handleCredDelete.bind(this),this.handleCredConfirm=this.handleCredConfirm.bind(this),this.initFCMessaging=this.initFCMessaging.bind(this),this.toggleFCMToken=this.toggleFCMToken.bind(this),this.handlePushMessage=this.handlePushMessage.bind(this),this.handleSidepanelCancel=this.handleSidepanelCancel.bind(this),this.handleStartTopicRequest=this.handleStartTopicRequest.bind(this),this.handleNewTopicCreated=this.handleNewTopicCreated.bind(this),this.handleTopicUpdateRequest=this.handleTopicUpdateRequest.bind(this),this.handleUnarchive=this.handleUnarchive.bind(this),this.handleChangePermissions=this.handleChangePermissions.bind(this),this.handleTagsUpdateRequest=this.handleTagsUpdateRequest.bind(this),this.handleLogout=this.handleLogout.bind(this),this.handleDeleteAccount=this.handleDeleteAccount.bind(this),this.handleDeleteTopicRequest=this.handleDeleteTopicRequest.bind(this),this.handleDeleteMessagesRequest=this.handleDeleteMessagesRequest.bind(this),this.handleLeaveUnsubRequest=this.handleLeaveUnsubRequest.bind(this),this.handleBlockTopicRequest=this.handleBlockTopicRequest.bind(this),this.handleReportTopic=this.handleReportTopic.bind(this),this.handleShowContextMenu=this.handleShowContextMenu.bind(this),this.defaultTopicContextMenu=this.defaultTopicContextMenu.bind(this),this.handleHideContextMenu=this.handleHideContextMenu.bind(this),this.handleShowAlert=this.handleShowAlert.bind(this),this.handleShowInfoView=this.handleShowInfoView.bind(this),this.handleMemberUpdateRequest=this.handleMemberUpdateRequest.bind(this),this.handleValidateCredentialsRequest=this.handleValidateCredentialsRequest.bind(this),this.handlePasswordResetRequest=this.handlePasswordResetRequest.bind(this),this.handleResetPassword=this.handleResetPassword.bind(this),this.handleContextMenuAction=this.handleContextMenuAction.bind(this),this.handleShowCountrySelector=this.handleShowCountrySelector.bind(this),this.handleShowForwardDialog=this.handleShowForwardDialog.bind(this),this.handleHideForwardDialog=this.handleHideForwardDialog.bind(this),this.handleStartVideoCall=this.handleStartVideoCall.bind(this),this.handleStartAudioCall=this.handleStartAudioCall.bind(this),this.handleInfoMessage=this.handleInfoMessage.bind(this),this.handleDataMessage=this.handleDataMessage.bind(this),this.handleCallClose=this.handleCallClose.bind(this),this.handleCallInvite=this.handleCallInvite.bind(this),this.handleCallRinging=this.handleCallRinging.bind(this),this.handleCallHangup=this.handleCallHangup.bind(this),this.handleCallSendOffer=this.handleCallSendOffer.bind(this),this.handleCallIceCandidate=this.handleCallIceCandidate.bind(this),this.handleCallSendAnswer=this.handleCallSendAnswer.bind(this),this.handleCallAccept=this.handleCallAccept.bind(this),this.sendMessageToTopic=this.sendMessageToTopic.bind(this),this.callTimeoutTimer=null}getBlankState(){const e=nn.A.getObject("settings")||{},t=!!nn.A.getObject("keep-logged-in");return{connected:!1,ready:!1,autoLogin:!1,transport:e.transport||null,serverAddress:e.serverAddress||sn(),secureConnection:void 0===e.secureConnection?an():e.secureConnection,serverVersion:"no connection",messageSounds:!e.messageSoundsOff,incognitoMode:!1,desktopAlerts:t&&!!e.desktopAlerts,desktopAlertsEnabled:(an()||"object"==typeof window.location&&"localhost"==window.location.hostname)&&void 0!==Ve&&"undefined"!=typeof navigator&&"undefined"!=typeof FIREBASE_INIT,firebaseToken:t?nn.A.getObject("firebase-token"):null,applicationVisible:!document.hidden,errorText:"",errorLevel:null,errorAction:void 0,errorActionText:null,sidePanelSelected:"login",sidePanelTitle:null,sidePanelAvatar:null,myTrustedBadges:[],loadSpinnerVisible:!1,login:"",password:"",persist:t,myUserId:null,liveConnection:navigator.onLine,topicSelected:"",topicSelectedOnline:!1,topicSelectedAcs:null,newTopicParams:null,loginDisabled:!1,displayMobile:window.innerWidth<=As.VJ,infoPanel:void 0,mobilePanel:"sidepanel",callTopic:void 0,callState:0,callAudioOnly:void 0,callShouldStart:!1,contextMenuVisible:!1,contextMenuBounds:null,contextMenuClickAt:null,contextMenuParams:null,contextMenuItems:[],forwardDialogVisible:!1,forwardMessage:null,alertVisible:!1,alertParams:{},chatList:[],searchResults:[],searchableContacts:[],reqCredMethod:void 0,credMethod:void 0,credCode:void 0,credToken:void 0,requestedTopic:void 0}}componentDidMount(){if(window.addEventListener("resize",this.handleResize),this.handleOnlineOn=e=>{this.handleOnline(!0)},window.addEventListener("online",this.handleOnlineOn),this.handleOnlineOff=e=>{this.handleOnline(!1)},window.addEventListener("offline",this.handleOnlineOff),window.addEventListener("hashchange",this.handleHashRoute),"function"==typeof BroadcastChannel){new BroadcastChannel("tinode-sw").addEventListener("message",this.handlePushMessage)}else console.warn("Your browser does not support BroadcastChannel. Some features will not be available");this.lastWakeUpCheck=(new Date).getTime(),this.wakeUpTicker=setInterval((e=>{const t=(new Date).getTime();t-this.lastWakeUpCheck>As.hT&&this.handleOnlineOn(),this.lastWakeUpCheck=t}),As.ZW),document.addEventListener("visibilitychange",this.handleVisibilityEvent),this.setState({viewportWidth:document.documentElement.clientWidth,viewportHeight:document.documentElement.clientHeight}),new Promise(((e,t)=>{this.tinode=cn.tnSetup(this.state.serverAddress,an(),this.state.transport,this.props.intl.locale,this.state.persist,e),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.tinode.onInfoMessage=this.handleInfoMessage,this.tinode.onDataMessage=this.handleDataMessage})).then((e=>{this.state.desktopAlertsEnabled&&this.initFCMessaging().catch((e=>{})),this.resetContactList();const t=this.state.persist?nn.A.getObject("auth-token"):void 0;t&&(this.setState({autoLogin:!0}),t.expires=new Date(t.expires),this.tinode.setAuthToken(t),this.tinode.connect().catch((e=>{this.handleError(e.message,"err")})));const s=bi.A.parseUrlHash(window.location.hash);if(["cred","reset","register"].includes(s.path[0]))this.handleHashRoute();else{this.setState({requestedTopic:s.path[1]});const e=s.params&&s.params.cred_done?bi.A.addUrlParam("","cred_done",s.params.cred_done):"";bi.A.navigateTo(e)}}))}componentWillUnmount(){window.removeEventListener("resize",this.handleResize),window.removeEventListener("hashchange",this.handleHashRoute),window.removeEventListener("online",this.handleOnlineOn),window.removeEventListener("offline",this.handleOnlineOff),document.removeEventListener("visibilitychange",this.handleVisibilityEvent),clearInterval(this.wakeUpTicker)}static tnSetup(e,t,s,a,i,n){const r=new Ts.Tinode({appName:As.C3,host:e,apiKey:As.Lq,transport:s,secure:t,persist:i},n);return r.setHumanLanguage(a),r.enableLogging(As.U3,!0),r}handlePushMessage(e){this.tinode.oobNotification(e.data||{})}initFCMessaging(){const{formatMessage:e,locale:t}=this.props.intl,s=(t,s)=>{console.error(t,s),this.handleError(e(ln.push_init_failed),"err"),this.setState({firebaseToken:null}),nn.A.updateObject("settings",{desktopAlerts:!1})};try{return this.fcm=Cs(Ve(FIREBASE_INIT,As.C3)),navigator.serviceWorker.getRegistration("/service-worker.js").then((e=>e||navigator.serviceWorker.register("/service-worker.js").then((e=>(this.checkForAppUpdate(e),e))))).then((e=>((e.active||e.installing).postMessage(JSON.stringify({locale:t,version:tn.i})),cn.requestFCMToken(this.fcm,e)))).then((e=>{const t=nn.A.getObject("keep-logged-in");e!=this.state.firebaseToken&&(this.tinode.setDeviceToken(e),t&&nn.A.setObject("firebase-token",e)),this.setState({firebaseToken:e,desktopAlerts:!0}),t&&nn.A.updateObject("settings",{desktopAlerts:!0}),_s(this.fcm,(e=>{this.handlePushMessage(e)}))})).catch((e=>{throw s(e),e}))}catch(e){return s(e),Promise.reject(e)}}static requestFCMToken(e,t){return Ss(e,{serviceWorkerRegistration:t,vapidKey:FIREBASE_INIT.messagingVapidKey}).then((t=>{if(t)return t;if("undefined"!=typeof Notification)return Notification.requestPermission().then((t=>{if("granted"===t)return Ss(e,{serviceWorkerRegistration:reg,vapidKey:FIREBASE_INIT.messagingVapidKey}).then((e=>{if(e)return e;throw new Error("Failed to initialize notifications")}));throw new Error("No permission to send notifications: "+t)}));throw new Error("Notifications are not supported")}))}handleResize(){const e=document.documentElement.clientWidth<=As.VJ;this.setState({viewportWidth:document.documentElement.clientWidth,viewportHeight:document.documentElement.clientHeight}),this.state.displayMobile!=e&&this.setState({displayMobile:e})}checkForAppUpdate(e){e.onupdatefound=t=>{const s=e.installing;s.onstatechange=e=>{if("installed"==s.state&&navigator.serviceWorker.controller){const e=l().createElement(l().Fragment,null,l().createElement(d.FormattedMessage,{id:"update_available",defaultMessage:[{type:0,value:"Update available."}]})," ",l().createElement("a",{href:""},l().createElement(d.FormattedMessage,{id:"reload_update",defaultMessage:[{type:0,value:"Reload"}]})),".");this.handleError(e,"info")}}}}handleHashRoute(){const e=bi.A.parseUrlHash(window.location.hash),t={infoPanel:e.params.info,newTopicTabSelected:e.params.tab};if(e.path&&e.path.length>0){["register","settings","edit","notif","security","support","general","crop","cred","reset","newtpk","archive","blocked","contacts",""].includes(e.path[0])?t.sidePanelSelected=e.path[0]:console.warn("Unknown sidepanel view",e.path[0]);let s=e.path[1]||null;s!=this.state.topicSelected&&(Ts.Tinode.topicType(s)?t.mobilePanel="topic-view":(s=null,t.mobilePanel="sidepanel"),Object.assign(t,{topicSelected:s,topicSelectedAcs:this.tinode.getTopicAccessMode(s)}))}else Object.assign(t,{sidePanelSelected:"",topicSelected:null});e.params.method&&(t.credMethod=e.params.method),e.params.code&&(t.credCode=e.params.code),e.params.token&&(t.credToken=e.params.token),e.params.cred_done&&Object.assign(t,cn.stateForError(this.props.intl.formatMessage(ln.cred_confirmed_successfully),"info")),this.setState(t)}handleOnline(e){e?(this.handleError(),clearInterval(this.reconnectCountdown),this.tinode.reconnect()):this.handleError(this.props.intl.formatMessage(ln.no_connection),"warn"),this.setState({liveConnection:e})}handleVisibilityEvent(){this.setState({applicationVisible:!document.hidden})}static stateForError(e,t,s,a){return{errorText:e,errorLevel:t,errorAction:s,errorActionText:a,callShouldStart:!1}}handleError(e,t,s,a){this.setState(cn.stateForError(e,t,s,a))}handleLoginRequest(e,t){this.setState({loginDisabled:!0,login:e,password:t,loadSpinnerVisible:!0,autoLogin:!0}),this.handleError("",null),this.tinode.isConnected()?this.doLogin(e,t,null,{meth:this.state.credMethod,resp:this.state.credCode}):this.tinode.connect().catch((e=>{this.setState({loginDisabled:!1,autoLogin:!1,loadSpinnerVisible:!1}),this.handleError(e.message,"err")})),this.state.desktopAlertsEnabled&&!this.state.firebaseToken&&this.initFCMessaging()}handlePersistenceChange(e){e?this.tinode.initStorage().then((e=>{nn.A.setObject("keep-logged-in",!0),this.setState({persist:!0})})):this.tinode.clearStorage().then((e=>{nn.A.setObject("keep-logged-in",!1),this.setState({persist:!1})}))}handleConnected(){clearInterval(this.reconnectCountdown),this.handleError();const e=this.tinode.getServerInfo();this.setState({serverVersion:e.ver+" "+(e.build?e.build:"none"),reqCredMethod:((e.reqCred||{}).auth||[])[0]||"email"}),this.state.autoLogin&&this.doLogin(this.state.login,this.state.password,null,{meth:this.state.credMethod,resp:this.state.credCode})}handleAutoreconnectIteration(e,t){if(clearInterval(this.reconnectCountdown),e<0)return void this.handleError();if(t)return void t.then((e=>{this.handleError()})).catch((e=>{this.handleError(e.message,"err")}));const{formatMessage:s}=this.props.intl;let a=e/1e3;a|=0,this.reconnectCountdown=setInterval((e=>{if(a<-10)return clearInterval(this.reconnectCountdown),void this.tinode.reconnect();const t=a>99?(0,Ls.Ye)(a):a;this.handleError(s(ln.reconnect_countdown,{seconds:t}),"warn",(e=>{clearInterval(this.reconnectCountdown),this.tinode.reconnect()}),s(ln.reconnect_now)),a-=1}),1e3)}handleDisconnect(e){this.setState({connected:!1,ready:!1,topicSelectedOnline:!1,errorText:e&&e.message?e.message:"Disconnected",errorLevel:e&&e.message?"err":"warn",loginDisabled:!1,contextMenuVisible:!1,forwardDialogVisible:!1,serverVersion:"no connection"})}doLogin(e,t,s,a){if(this.tinode.isAuthenticated())return void bi.A.navigateTo("");let i=s||(this.tinode.getAuthToken()||{}).token;if(!(e&&t||i))return bi.A.navigateTo(""),void this.setState({loginDisabled:!1});a=Ts.Tinode.credential(a);let n,r=this.tinode.isConnected()?Promise.resolve():this.tinode.connect();e&&t?(i=null,this.setState({password:null}),n=r.then((s=>this.tinode.loginBasic(e,t,a)))):n=r.then((e=>this.tinode.loginToken(i,a))),n.then((e=>{e.code>=300&&"validate credentials"===e.text?(this.setState({loadSpinnerVisible:!1}),a&&this.handleError(this.props.intl.formatMessage(ln.code_doesnot_match),"warn"),cn.navigateToCredentialsView(e.params)):this.handleLoginSuccessful()})).catch((e=>{const t=e.code>=500;this.setState({loginDisabled:!1,credMethod:void 0,credCode:void 0,loadSpinnerVisible:!1,autoLogin:t}),this.handleError(e.message,"err"),console.warn("Login failed",e),t||(i&&this.handleLogout(),bi.A.navigateTo(""))}))}static navigateToCredentialsView(e){const t=bi.A.parseUrlHash(window.location.hash);t.path[0]="cred",t.params.method=e.cred[0],t.params.token=e.token,t.params.code=e.code,bi.A.navigateTo(bi.A.composeUrlHash(t.path,t.params))}handleLoginSuccessful(){this.handleError(),nn.A.getObject("keep-logged-in")&&nn.A.setObject("auth-token",this.tinode.getAuthToken());const e=this.state.requestedTopic,t=this.tinode.getMeTopic();t.onMetaDesc=this.tnMeMetaDesc,t.onContactUpdate=this.tnMeContactUpdate,t.onSubsUpdated=this.tnMeSubsUpdated,this.setState({connected:!0,credMethod:void 0,credCode:void 0,credToken:void 0,myUserId:this.tinode.getCurrentUserID(),autoLogin:!0,requestedTopic:void 0}),t.subscribe(t.startMetaQuery().withLaterSub().withDesc().withTags().withCred().build()).catch((e=>{this.tinode.disconnect(),localStorage.removeItem("auth-token"),this.handleError(e.message,"err"),bi.A.navigateTo("")})).finally((e=>{this.setState({loadSpinnerVisible:!1})}));let s=bi.A.setUrlSidePanel(window.location.hash,"contacts");e&&(s=bi.A.setUrlTopic(s,e)),bi.A.navigateTo(s)}tnMeMetaDesc(e){if(e){if(e.public&&this.setState({sidePanelTitle:e.public.fn,sidePanelAvatar:(0,Ws.to)(e.public.photo)}),e.trusted){const t=[];for(const[s,a]of Object.entries(e.trusted))a&&t.push(s);this.setState({myTrustedBadges:t})}e.acs&&this.setState({incognitoMode:!e.acs.isPresencer()})}}tnMeContactUpdate(e,t){if("on"==e||"off"==e)this.resetContactList(),this.state.topicSelected==t.topic&&this.setState({topicSelectedOnline:"on"==e});else if("read"==e)this.resetContactList();else if("msg"==e&&t){const e=this.tinode.getTopic(t.topic),s=e&&e.isArchived();t.unread>0&&this.state.messageSounds&&!s&&(document.hidden||this.state.topicSelected!=t.topic)&&on.play().catch((e=>{})),this.resetContactList()}else"recv"==e||("gone"==e||"unsub"==e?(this.state.topicSelected==t.topic&&this.handleTopicSelected(null),this.resetContactList()):"acs"==e?this.state.topicSelected==t.topic&&this.setState({topicSelectedAcs:t.acs}):"del"==e||"upd"==e||"call"==e||console.info("Unsupported (yet) presence update:",e,"in",(t||{}).topic))}tnMeSubsUpdated(e){this.resetContactList()}static prepareSearchableContacts(e,t){const s={};for(const t of e)Ts.Tinode.isP2PTopicName(t.topic)&&(s[t.topic]={user:t.topic,updated:t.updated,public:t.public,private:t.private,acs:t.acs});for(const e of t)s[e.user]||(s[e.user]=e);return Object.values(s)}resetContactList(){const e={chatList:[]};this.state.ready||(e.ready=!0),this.tinode.getMeTopic().contacts((t=>{t.topic||t.user||(t.topic=t.name),e.chatList.push(t),this.state.topicSelected==t.topic&&(e.topicSelectedOnline=t.online,e.topicSelectedAcs=t.acs)}));const t=new Date(0);e.chatList.sort(((e,s)=>(e.touched||t).getTime()-(s.touched||t).getTime())),e.searchableContacts=cn.prepareSearchableContacts(e.chatList,this.state.searchResults),this.setState(e)}tnInitFind(){const e=this.tinode.getFndTopic();e.onSubsUpdated=this.tnFndSubsUpdated,e.isSubscribed()?this.tnFndSubsUpdated():e.subscribe(e.startMetaQuery().withSub().build()).catch((e=>{this.handleError(e.message,"err")}))}tnFndSubsUpdated(){const e=[];this.tinode.getFndTopic().contacts((t=>{e.push(t)})),this.setState({searchResults:e,searchableContacts:cn.prepareSearchableContacts(this.state.chatList,e)})}handleSearchContacts(e){const t=this.tinode.getFndTopic();t.setMeta({desc:{public:e}}).then((e=>t.getMeta(t.startMetaQuery().withSub().build()))).catch((e=>this.handleError(e.message,"err")))}handleTopicSelected(e){this.state.newTopicParams&&this.state.newTopicParams._topicName!=e&&this.setState({newTopicParams:null}),e?(this.setState({errorText:"",errorLevel:null,mobilePanel:"topic-view",infoPanel:void 0}),this.state.topicSelected!=e&&(this.setState({topicSelectedOnline:this.tinode.isTopicOnline(e),topicSelectedAcs:this.tinode.getTopicAccessMode(e),forwardMessage:null}),bi.A.navigateTo(bi.A.setUrlTopic("",e)))):(this.setState({topicSelected:null,errorText:"",errorLevel:null,mobilePanel:"sidepanel",topicSelectedOnline:!1,topicSelectedAcs:null,infoPanel:void 0,forwardMessage:null}),bi.A.navigateTo(bi.A.setUrlTopic("",null)))}handleHideMessagesView(){this.setState({mobilePanel:"sidepanel"}),bi.A.navigateTo(bi.A.setUrlTopic(window.location.hash,null))}handleSendMessage(e,t,s,a){const i=this.tinode.getTopic(this.state.topicSelected);return this.sendMessageToTopic(i,e,t,s,a)}sendMessageToTopic(e,t,s,a,i){(t=e.createMessage(t,!1))._uploader=a,i&&(t.head=Object.assign(t.head||{},i));const n=[];if(s&&n.push(s),!e.isSubscribed()){const s=e.subscribe().then((s=>{let a=[];e.queuedMessages((s=>{s._sending||s.seq==t.seq||(s.head&&s.head.webrtc?a.push(s.seq):e.isSubscribed()&&e.publishMessage(s))})),a.length>0&&e.delMessagesList(a,!0)}));n.push(s)}return e.publishDraft(t,Promise.all(n)).then((t=>(e.isArchived()&&e.archive(!1),t))).catch((e=>this.handleError(e.message,"err")))}handleNewChatInvitation(e,t){const s=this.tinode.getTopic(e);let a=null;switch(t){case"accept":const i=s.getAccessMode().getGiven();a=s.setMeta({sub:{mode:i}}),s.isP2PType()&&(a=a.then((t=>s.setMeta({sub:{user:e,mode:i}}))));break;case"delete":a=s.delTopic(!0);break;case"block":const n=s.getAccessMode().updateWant("-JP").getWant();a=s.setMeta({sub:{mode:n}}).then((e=>this.handleTopicSelected(null)));break;default:console.warn("Unknown invitation action",'"'+t+'""')}null!=a&&a.catch((e=>this.handleError(e.message,"err")))}handleNewAccount(){this.handleError(),bi.A.navigateTo(bi.A.setUrlSidePanel(window.location.hash,"register"))}handleNewAccountRequest(e,t,s,a,i){this.handleError(),this.tinode.connect(this.state.serverAddress).then((n=>{let r;return s&&s.photo&&s.photo.ref&&(r=[s.photo.ref]),this.tinode.createAccountBasic(e,t,{public:s,tags:i,cred:Ts.Tinode.credential(a),attachments:r})})).then((e=>{e.code>=300&&"validate credentials"==e.text?cn.navigateToCredentialsView(e.params):this.handleLoginSuccessful(this)})).catch((e=>{this.handleError(e.message,"err")}))}handleToggleIncognitoMode(e){this.setState({incognitoMode:null});const t=this.tinode.getMeTopic(),s=t.getAccessMode().updateWant(e?"-P":"+P").getWant();t.setMeta({sub:{mode:s}}).catch((t=>{this.setState({incognitoMode:!e}),this.handleError(t.message,"err")}))}handleUpdateAccountTagsRequest(e,t){this.tinode.getMeTopic().setMeta({tags:t}).catch((e=>this.handleError(e.message,"err")))}handleSettings(){this.handleError(),bi.A.navigateTo(bi.A.setUrlSidePanel(window.location.hash,this.state.myUserId?"edit":"settings"))}handleGlobalSettings(e){const t=e.serverAddress||this.state.serverAddress,s=e.transport||this.state.transport,a=void 0===e.secureConnection?this.state.secureConnection:e.secureConnection;this.tinode&&(this.tinode.clearStorage(),this.tinode.onDisconnect=void 0,this.tinode.disconnect()),this.tinode=cn.tnSetup(t,a,s,this.props.intl.locale,nn.A.getObject("keep-logged-in")),this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.tinode.onInfoMessage=this.handleInfoMessage,this.tinode.onDataMessage=this.handleDataMessage,this.setState({serverAddress:t,transport:s,secureConnection:a}),nn.A.setObject("settings",{serverAddress:t,transport:s,secureConnection:a}),bi.A.navigateTo(bi.A.setUrlSidePanel(window.location.hash,""))}handleShowArchive(){bi.A.navigateTo(bi.A.setUrlSidePanel(window.location.hash,this.state.myUserId?"archive":""))}handleShowBlocked(){bi.A.navigateTo(bi.A.setUrlSidePanel(window.location.hash,this.state.myUserId?"blocked":""))}toggleFCMToken(e){e?(this.setState({desktopAlerts:null}),this.state.firebaseToken?(this.setState({desktopAlerts:!0}),nn.A.getObject("keep-logged-in")&&nn.A.updateObject("settings",{desktopAlerts:!0})):this.initFCMessaging()):this.state.firebaseToken&&this.fcm?Ms(this.fcm).catch((e=>{console.error("Unable to delete token.",e)})).finally((e=>{nn.A.updateObject("settings",{desktopAlerts:!1}),localStorage.removeItem("firebase-token"),this.setState({desktopAlerts:!1,firebaseToken:null}),this.tinode.setDeviceToken(null)})):(this.setState({desktopAlerts:!1,firebaseToken:null}),nn.A.updateObject("settings",{desktopAlerts:!1}))}handleToggleMessageSounds(e){this.setState({messageSounds:e}),nn.A.updateObject("settings",{messageSoundsOff:!e})}handleCredAdd(e,t){this.tinode.getMeTopic().setMeta({cred:{meth:e,val:t}}).catch((e=>this.handleError(e.message,"err")))}handleCredDelete(e,t){this.tinode.getMeTopic().delCredential(e,t).catch((e=>this.handleError(e.message,"err")))}handleCredConfirm(e,t){cn.navigateToCredentialsView({cred:[e],code:t})}handleSidepanelCancel(){const e=bi.A.parseUrlHash(window.location.hash);let t="";["security","support","general","notif"].includes(e.path[0])?t="edit":"crop"==e.path[0]?t="general":"blocked"==e.path[0]?t="security":this.state.myUserId&&(t="contacts"),e.path[0]=t,e.params&&(delete e.params.code,delete e.params.method,delete e.params.tab,delete e.params.scheme,delete e.params.token),bi.A.navigateTo(bi.A.composeUrlHash(e.path,e.params)),this.setState({errorText:"",errorLevel:null})}basicNavigator(e){bi.A.navigateTo(bi.A.setUrlSidePanel(window.location.hash,e))}infoNavigator(e){bi.A.navigateTo(bi.A.setUrlInfoPanel(window.location.hash,e))}handleStartTopicRequest(e,t,s){if(e&&this.tinode.isTopicCached(e))return void this.handleTopicSelected(e);const a={};Ts.Tinode.isP2PTopicName(e)?(a.sub={mode:As.cZ},a.desc={defacs:{auth:As.cZ}}):(e=e||this.tinode.newGroupTopicName(s),t&&(a.desc={public:t.public,private:{comment:t.private}},a.tags=t.tags)),a._topicName=e,this.setState({newTopicParams:a},(t=>{this.handleTopicSelected(e)}))}handleNewTopicCreated(e,t){let s={};this.state.callShouldStart&&(s={callState:3,callShouldStart:!1}),this.state.topicSelected==e&&e!=t&&(s.topicSelected=t),this.setState(s,(e=>{bi.A.navigateTo(bi.A.setUrlTopic("",t))}))}handleTopicUpdateRequest(e,t,s,a){this.handleError();const i=this.tinode.getTopic(e);if(i){const e={};let n;t&&(t.photo&&(t.photo.ref&&t.photo.ref!=Ts.Tinode.DEL_CHAR?n=[t.photo.ref]:t.photo.data&&t.photo.data!=Ts.Tinode.DEL_CHAR||(t.photo=Ts.Tinode.DEL_CHAR)),e.public=t),"string"==typeof s&&(e.private=s===Ts.Tinode.DEL_CHAR?Ts.Tinode.DEL_CHAR:{comment:s}),a&&(e.defacs=a),i.setMeta({desc:e,attachments:n}).catch((e=>this.handleError(e.message,"err")))}}handleUnarchive(e){const t=this.tinode.getTopic(e);t&&t.archive(!1).catch((e=>this.handleError(e.message,"err")))}handleUpdatePasswordRequest(e){this.handleError(),e&&this.tinode.updateAccountBasic(null,this.tinode.getCurrentLogin(),e).catch((e=>this.handleError(e.message,"err")))}handleChangePermissions(e,t,s){const a=this.tinode.getTopic(e);if(a){const e=a.getAccessMode();s?(e.updateGiven(t),t=e.getGiven()):(e.updateWant(t),t=e.getWant()),a.setMeta({sub:{user:s,mode:t}}).catch((e=>this.handleError(e.message,"err")))}}handleTagsUpdateRequest(e,t){const s=this.tinode.getTopic(e);s&&s.setMeta({tags:t}).catch((e=>this.handleError(e.message,"err")))}handleLogout(){let e;(0,zs.OM)(0),localStorage.removeItem("auth-token"),localStorage.removeItem("firebase-token"),localStorage.removeItem("settings"),this.state.firebaseToken&&Ms(this.fcm),clearInterval(this.reconnectCountdown),this.tinode?(e=this.tinode.clearStorage(),this.tinode.onDisconnect=void 0,this.tinode.disconnect()):e=Promose.resolve(),this.setState(this.getBlankState()),e.then((e=>{this.tinode=cn.tnSetup(this.state.serverAddress,an(),this.state.transport,this.props.intl.locale,nn.A.getObject("keep-logged-in"),(e=>{this.tinode.onConnect=this.handleConnected,this.tinode.onDisconnect=this.handleDisconnect,this.tinode.onAutoreconnectIteration=this.handleAutoreconnectIteration,this.tinode.onInfoMessage=this.handleInfoMessage,this.tinode.onDataMessage=this.handleDataMessage,bi.A.navigateTo("")}))}))}handleDeleteAccount(){this.tinode.delCurrentUser(!0).then((e=>{this.handleLogout()}))}handleDeleteTopicRequest(e){const t=this.tinode.getTopic(e);t&&t.delTopic(!0).then((e=>{bi.A.navigateTo(bi.A.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")}))}handleDeleteMessagesRequest(e){const t=this.tinode.getTopic(e);t&&t.delMessagesAll(!0).catch((e=>this.handleError(e.message,"err")))}handleLeaveUnsubRequest(e){const t=this.tinode.getTopic(e);t&&t.leave(!0).then((e=>{bi.A.navigateTo(bi.A.setUrlTopic(window.location.hash,""))})).catch((e=>{this.handleError(e.message,"err")}))}handleBlockTopicRequest(e){const t=this.tinode.getTopic(e);t&&t.updateMode(null,"-JP").then((e=>{bi.A.navigateTo(bi.A.setUrlTopic(window.location.hash,""))})).catch((e=>this.handleError(e.message,"err")))}handleReportTopic(e){const t=this.tinode.getTopic(e);t&&(this.tinode.report("report",e),t.updateMode(null,"-JP").then((e=>{bi.A.navigateTo(bi.A.setUrlTopic(window.location.hash,""))})).catch((e=>this.handleError(e.message,"err"))))}handleShowContextMenu(e,t){this.setState({contextMenuVisible:!0,contextMenuClickAt:{x:e.x,y:e.y},contextMenuParams:e,contextMenuItems:t||this.defaultTopicContextMenu(e.topicName),contextMenuBounds:this.selfRef.current.getBoundingClientRect()})}handleShowForwardDialog(e){"newtpk"==this.state.sidePanelSelected&&this.handleSidepanelCancel();const t="➦ "+e.userName,s="string"==typeof e.content?Ts.Drafty.init(e.content):Ts.Drafty.forwardedContent(e.content),a=Ts.Drafty.preview(s,As.TR,!0),i=Ts.Drafty.append(Ts.Drafty.appendLineBreak(Ts.Drafty.mention(t,e.userFrom)),s),n=Ts.Drafty.quote(t,e.userFrom,a),r={forwarded:e.topicName+":"+e.seq};this.setState({forwardDialogVisible:!0,forwardMessage:{head:r,msg:i,preview:n}})}defaultTopicContextMenu(e){const t=this.tinode.getTopic(e);if(t._deleted)return["topic_delete"];let s=!1,a=!1,i=!1,n=!1,r=!1,o=!1,l=!1;if(t){n=t.isSubscribed(),o=t.isArchived();const e=t.getAccessMode();e&&(s=e.isMuted(),a=!e.isJoiner(),i=!e.isJoiner("want"),r=e.isDeleter())}return l=!!this.tinode.getServerParam("iceServers"),[n?{title:this.props.intl.formatMessage(ln.menu_item_info),handler:this.handleShowInfoView}:null,n&&Ts.Tinode.isP2PTopicName(e)&&l?{title:this.props.intl.formatMessage(ln.menu_item_audio_call),handler:this.handleStartAudioCall}:null,n&&Ts.Tinode.isP2PTopicName(e)&&l?{title:this.props.intl.formatMessage(ln.menu_item_video_call),handler:this.handleStartVideoCall}:null,n?"messages_clear":null,n&&r?"messages_clear_hard":null,s?a?null:"topic_unmute":"topic_mute",i?"topic_unblock":"topic_block",o?"topic_restore":"topic_archive","topic_delete"]}handleHideContextMenu(){this.setState({contextMenuVisible:!1,contextMenuClickAt:null,contextMenuParams:null,contextMenuBounds:null})}handleHideForwardDialog(e){this.setState({forwardDialogVisible:!1,forwardMessage:e?this.state.forwardMessage:null})}handleContextMenuAction(e,t,s){"topic_archive"==e?t&&s.topicName&&s.topicName==this.state.topicSelected&&t.then((e=>{this.handleTopicSelected(null)})):"menu_item_forward"==e&&this.handleShowForwardDialog(s)}handleShowAlert(e,t,s,a,i,n){this.setState({alertVisible:!0,alertParams:{title:e,content:t,onConfirm:s,confirm:a,onReject:i,reject:n}})}handleShowInfoView(){bi.A.navigateTo(bi.A.addUrlParam(window.location.hash,"info","info")),this.setState({infoPanel:"info"})}handleMemberUpdateRequest(e,t,s){if(!e)return;const a=this.tinode.getTopic(e);a&&(t&&t.length>0&&t.map((e=>{a.invite(e,null).catch((e=>this.handleError(e.message,"err")))})),s&&s.length>0&&s.map((e=>{a.delSubscription(e).catch((e=>this.handleError(e.message,"err")))})))}handleValidateCredentialsRequest(e,t,s){this.tinode.isAuthenticated()?this.tinode.getMeTopic().setMeta({cred:{meth:e,resp:t}}).then((e=>bi.A.navigateTo(bi.A.setUrlSidePanel(window.location.hash,"contacts")))).catch((e=>this.handleError(e.message,"err"))):(this.setState({credMethod:e,credCode:t,credToken:s}),this.doLogin(null,null,s,{meth:e,resp:t}))}handlePasswordResetRequest(e,t){return this.tinode.connect().then((s=>this.tinode.requestResetAuthSecret("basic",e,t))).catch((e=>{this.handleError(e.message,"err")}))}handleResetPassword(e,t){const s=(0,Ws.$Z)(t.secret);s&&t.scheme?this.tinode.connect().then((a=>this.tinode.updateAccountBasic(null,null,e,{scheme:t.scheme,secret:s}))).then((e=>{this.handleError(this.props.intl.formatMessage(ln.password_reset_success),"info"),bi.A.navigateTo("")})).catch((e=>{this.handleError(e.message,"err")})):this.handleError(this.props.intl.formatMessage(ln.invalid_security_token),"err")}handleShowCountrySelector(e,t,s){this.handleShowAlert("Select country",l().createElement(o.Suspense,{fallback:l().createElement("div",null,l().createElement(d.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},l().createElement(rn,{selected:e,onSubmit:(e,t)=>{this.setState({alertVisible:!1}),s(e,t)}})),null,null,(e=>{}),"Cancel")}handleStartVideoCall(){this.setState({callTopic:this.state.topicSelected,callState:1,callAudioOnly:!1})}handleStartAudioCall(){this.setState({callTopic:this.state.topicSelected,callState:1,callAudioOnly:!0})}handleCallInvite(e,t,s,a){switch(s){case 1:const s={webrtc:pa,aonly:!!a};this.handleSendMessage(Ts.Drafty.videoCall(a),void 0,void 0,s).then((e=>{e.code<200||e.code>=300||!e.params||!e.params.seq?this.handleCallClose():this.setState({callSeq:e.params.seq})}));break;case 3:const i=this.tinode.getTopic(e);if(!i)return;i.videoCall("accept",t)}}handleCallRinging(e,t){const s=this.tinode.getTopic(e);s&&s.videoCall("ringing",t)}handleCallHangup(e,t){const s=this.tinode.getTopic(e);s&&s.videoCall("hang-up",t)}handleCallSendOffer(e,t,s){const a=this.tinode.getTopic(e);a&&a.videoCall("offer",t,s)}handleCallIceCandidate(e,t,s){const a=this.tinode.getTopic(e);a&&a.videoCall("ice-candidate",t,s)}handleCallSendAnswer(e,t,s){const a=this.tinode.getTopic(e);a&&a.videoCall("answer",t,s)}handleCallClose(){this.callTimeoutTimer&&clearTimeout(this.callTimeoutTimer),this.setState({callTopic:void 0,callState:0,callAudioOnly:void 0})}handleCallAccept(e){const t=this.tinode.getTopic(e);t&&(t.isSubscribed()?(this.handleTopicSelected(this.state.callTopic),this.setState({callState:3})):this.setState({callShouldStart:!0},(e=>this.handleTopicSelected(this.state.callTopic))))}handleInfoMessage(e){if("call"==e.what)switch(e.event){case"accept":if(Ts.Tinode.isMeTopicName(e.topic)&&this.tinode.isMe(e.from))return void this.setState({callTopic:null,callState:0,callSeq:null,callAudioOnly:void 0});e.topic==this.state.callTopic&&this.setState({callState:3});break;case"hang-up":this.handleCallClose()}}handleDataMessage(e){if(e.head&&e.head.webrtc&&e.head.webrtc==pa){const t=this.tinode.getTopic(e.topic);if(t){const s=t.latestMsgVersion(e.seq)||e;s.head&&s.head.webrtc&&s.head.webrtc==pa&&e.from!=this.state.myUserId&&(0==this.state.callState?this.setState({callTopic:e.topic,callState:2,callSeq:e.seq,callAudioOnly:!!s.head.aonly}):this.handleCallHangup(e.topic,e.seq))}else console.warn("Received vc data message from unknown topic",e.topic)}}render(){return l().createElement("div",{id:"app-container",ref:this.selfRef},this.state.contextMenuVisible?l().createElement(Is,{tinode:this.tinode,bounds:this.state.contextMenuBounds,clickAt:this.state.contextMenuClickAt,params:this.state.contextMenuParams,items:this.state.contextMenuItems,hide:this.handleHideContextMenu,onShowAlert:this.handleShowAlert,onAction:this.handleContextMenuAction,onTopicRemoved:e=>{e==this.state.topicSelected&&this.handleTopicSelected(null)},onError:this.handleError}):null,this.state.forwardDialogVisible?l().createElement(da,{tinode:this.tinode,contacts:this.state.chatList,topicSelected:this.state.topicSelected,myUserId:this.state.myUserId,hide:this.handleHideForwardDialog,onInitFind:this.tnInitFind,searchResults:this.state.searchResults,onSearchContacts:this.handleSearchContacts,onTopicSelected:this.handleStartTopicRequest}):null,this.state.callTopic&&2==this.state.callState?l().createElement(ma,{tinode:this.tinode,topic:this.state.callTopic,seq:this.state.callSeq,callState:this.state.callState,audioOnly:this.state.callAudioOnly,onClose:this.handleCallClose,onRinging:this.handleCallRinging,onAcceptCall:this.handleCallAccept,onReject:this.handleCallHangup}):null,this.state.alertVisible?l().createElement(ks,{title:this.state.alertParams.title,content:this.state.alertParams.content,onReject:this.state.alertParams.onReject?e=>this.setState({alertVisible:!1}):null,reject:this.state.alertParams.reject,onConfirm:this.state.alertParams.onConfirm?e=>{this.setState({alertVisible:!1}),this.state.alertParams.onConfirm()}:null,confirm:this.state.alertParams.confirm}):null,this.state.displayMobile&&"sidepanel"!=this.state.mobilePanel?null:l().createElement(en,{tinode:this.tinode,connected:this.state.connected,displayMobile:this.state.displayMobile,state:this.state.sidePanelSelected,title:this.state.sidePanelTitle,avatar:this.state.sidePanelAvatar,trustedBadges:this.state.myTrustedBadges,login:this.state.login,persist:this.state.persist,myUserId:this.state.myUserId,loginDisabled:this.state.loginDisabled,loadSpinnerVisible:this.state.loadSpinnerVisible,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,topicSelected:this.state.topicSelected,chatList:this.state.chatList,credMethod:this.state.credMethod,credCode:this.state.credCode,credToken:this.state.credToken,transport:this.state.transport,messageSounds:this.state.messageSounds,desktopAlerts:this.state.desktopAlerts,desktopAlertsEnabled:this.state.desktopAlertsEnabled,incognitoMode:this.state.incognitoMode,serverAddress:this.state.serverAddress,secureConnection:this.state.secureConnection,serverVersion:this.state.serverVersion,reqCredMethod:this.state.reqCredMethod,onGlobalSettings:this.handleGlobalSettings,onSignUp:this.handleNewAccount,onSettings:this.handleSettings,onNavigate:this.basicNavigator,onLoginRequest:this.handleLoginRequest,onPersistenceChange:this.handlePersistenceChange,onCreateAccount:this.handleNewAccountRequest,onUpdateAccountDesc:this.handleTopicUpdateRequest,onUpdatePassword:this.handleUpdatePasswordRequest,onUpdateAccountTags:this.handleUpdateAccountTagsRequest,onTogglePushNotifications:this.toggleFCMToken,onToggleMessageSounds:this.handleToggleMessageSounds,onToggleIncognitoMode:this.handleToggleIncognitoMode,onCredAdd:this.handleCredAdd,onCredDelete:this.handleCredDelete,onCredConfirm:this.handleCredConfirm,onTopicSelected:this.handleTopicSelected,onCreateTopic:this.handleStartTopicRequest,onLogout:this.handleLogout,onDeleteAccount:this.handleDeleteAccount,onShowAlert:this.handleShowAlert,onCancel:this.handleSidepanelCancel,onError:this.handleError,onValidateCredentials:this.handleValidateCredentialsRequest,onPasswordResetRequest:this.handlePasswordResetRequest,onResetPassword:this.handleResetPassword,onShowArchive:this.handleShowArchive,onShowBlocked:this.handleShowBlocked,onShowCountrySelector:this.handleShowCountrySelector,onInitFind:this.tnInitFind,searchResults:this.state.searchResults,onSearchContacts:this.handleSearchContacts,showContextMenu:this.handleShowContextMenu}),!this.state.displayMobile||"topic-view"==this.state.mobilePanel&&!this.state.infoPanel?l().createElement(Mi,{tinode:this.tinode,connected:this.state.connected,ready:this.state.ready,online:this.state.topicSelectedOnline,acs:this.state.topicSelectedAcs,displayMobile:this.state.displayMobile,viewportWidth:this.state.viewportWidth,viewportHeight:this.state.viewportHeight,topic:this.state.topicSelected,myUserId:this.state.myUserId,myUserName:this.state.sidePanelTitle,serverVersion:this.state.serverVersion,serverAddress:this.state.serverAddress,applicationVisible:this.state.applicationVisible,forwardMessage:this.state.forwardMessage,onCancelForwardMessage:this.handleHideForwardDialog,callTopic:this.state.callTopic,callSeq:this.state.callSeq,callState:this.state.callState,callAudioOnly:this.state.callAudioOnly,onCallHangup:this.handleCallHangup,onCallInvite:this.handleCallInvite,onCallSendOffer:this.handleCallSendOffer,onCallIceCandidate:this.handleCallIceCandidate,onCallSendAnswer:this.handleCallSendAnswer,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,newTopicParams:this.state.newTopicParams,onHideMessagesView:this.handleHideMessagesView,onError:this.handleError,onNewTopicCreated:this.handleNewTopicCreated,showContextMenu:this.handleShowContextMenu,onChangePermissions:this.handleChangePermissions,onNewChat:this.handleNewChatInvitation,sendMessage:this.handleSendMessage,onVideoCallClosed:this.handleCallClose}):null,this.state.infoPanel?l().createElement(ja,{tinode:this.tinode,connected:this.state.connected,displayMobile:this.state.displayMobile,topic:this.state.topicSelected,searchableContacts:this.state.searchableContacts,myUserId:this.state.myUserId,panel:this.state.infoPanel,errorText:this.state.errorText,errorLevel:this.state.errorLevel,errorAction:this.state.errorAction,errorActionText:this.state.errorActionText,onNavigate:this.infoNavigator,onTopicDescUpdateRequest:this.handleTopicUpdateRequest,onShowAlert:this.handleShowAlert,onChangePermissions:this.handleChangePermissions,onMemberUpdateRequest:this.handleMemberUpdateRequest,onDeleteTopic:this.handleDeleteTopicRequest,onDeleteMessages:this.handleDeleteMessagesRequest,onLeaveTopic:this.handleLeaveUnsubRequest,onBlockTopic:this.handleBlockTopicRequest,onReportTopic:this.handleReportTopic,onAddMember:this.handleManageGroupMembers,onTopicTagsUpdateRequest:this.handleTagsUpdateRequest,onTopicUnArchive:this.handleUnarchive,onInitFind:this.tnInitFind,onError:this.handleError,showContextMenu:this.handleShowContextMenu}):null)}}var dn=(0,d.injectIntl)(cn);if("undefined"!=typeof FIREBASE_INIT&&FIREBASE_INIT&&FIREBASE_INIT.measurementId){const bn=document.getElementsByTagName("head")[0];let En=document.createElement("script");function yn(){dataLayer.push(arguments)}En.src="https://www.googletagmanager.com/gtag/js?id="+FIREBASE_INIT.measurementId,En.async=!0,bn.prepend(En),window.dataLayer=window.dataLayer||[],yn("js",new Date),yn("config",FIREBASE_INIT.measurementId)}const hn={ar:e=>r.e(143).then(r.t.bind(r,7143,19)),de:e=>r.e(175).then(r.t.bind(r,2175,19)),en:e=>r.e(399).then(r.t.bind(r,3399,19)),es:e=>r.e(64).then(r.t.bind(r,6064,19)),fr:e=>r.e(500).then(r.t.bind(r,2500,19)),ko:e=>r.e(186).then(r.t.bind(r,1186,19)),ro:e=>r.e(780).then(r.t.bind(r,8399,19)),ru:e=>r.e(553).then(r.t.bind(r,5553,19)),th:e=>r.e(536).then(r.t.bind(r,2536,19)),uk:e=>r.e(552).then(r.t.bind(r,4552,19)),zh:e=>r.e(570).then(r.t.bind(r,570,19)),"zh-TW":e=>r.e(744).then(r.t.bind(r,5744,19))},{params:pn}=bi.A.parseUrlHash(window.location.hash),un=pn&&pn.hl||navigator.languages&&navigator.languages[0]||navigator.language||navigator.userLanguage||"en",mn=un.replace("_","-"),gn=mn.split("-")[0].toLowerCase(),fn=hn[mn]?un:hn[gn]?gn:"en";document.getElementsByTagName("html")[0].setAttribute("lang",fn);const vn=(0,c.H)(document.getElementById("mountPoint"));hn[fn]().then((e=>vn.render(l().createElement(d.IntlProvider,{locale:un,messages:e,textComponent:l().Fragment},l().createElement(dn,null)))))}();
//# sourceMappingURL=index.prod.js.map
\ No newline at end of file
diff --git a/umd/index.prod.js.map b/umd/index.prod.js.map
index d6631764..6986836f 100644
--- a/umd/index.prod.js.map
+++ b/umd/index.prod.js.map
@@ -1 +1 @@
-{"version":3,"file":"index.prod.js","mappings":"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","sources":["webpack://tinode-webapp/webpack/runtime/create fake namespace object","webpack://tinode-webapp/webpack/runtime/load script","webpack://tinode-webapp/./src/widgets/cropper.jsx","webpack://tinode-webapp/./src/widgets/avatar-crop.jsx","webpack://tinode-webapp/./src/version.js","webpack://tinode-webapp/./src/widgets/badge-list.jsx","webpack://tinode-webapp/./src/widgets/load-spinner.jsx","webpack://tinode-webapp/./src/widgets/checkbox.jsx","webpack://tinode-webapp/external var \"React\"","webpack://tinode-webapp/./src/lib/utils.js","webpack://tinode-webapp/external var \"tinode\"","webpack://tinode-webapp/./src/widgets/audio-player.jsx","webpack://tinode-webapp/external var \"ReactDOM\"","webpack://tinode-webapp/./node_modules/react-dom/client.js","webpack://tinode-webapp/./src/lib/blob-helpers.js","webpack://tinode-webapp/./src/widgets/visible-password.jsx","webpack://tinode-webapp/./src/widgets/letter-tile.jsx","webpack://tinode-webapp/./src/lib/navigation.js","webpack://tinode-webapp/external var \"ReactIntl\"","webpack://tinode-webapp/./src/lib/local-storage.js","webpack://tinode-webapp/./src/lib/strformat.js","webpack://tinode-webapp/./src/config.js","webpack://tinode-webapp/./src/widgets/avatar-upload.jsx","webpack://tinode-webapp/webpack/bootstrap","webpack://tinode-webapp/webpack/runtime/compat get default export","webpack://tinode-webapp/webpack/runtime/define property getters","webpack://tinode-webapp/webpack/runtime/ensure chunk","webpack://tinode-webapp/webpack/runtime/get javascript chunk filename","webpack://tinode-webapp/webpack/runtime/global","webpack://tinode-webapp/webpack/runtime/hasOwnProperty shorthand","webpack://tinode-webapp/webpack/runtime/make namespace object","webpack://tinode-webapp/webpack/runtime/publicPath","webpack://tinode-webapp/webpack/runtime/jsonp chunk loading","webpack://tinode-webapp/./node_modules/@firebase/util/dist/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/component/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/logger/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/idb/build/wrap-idb-value.js","webpack://tinode-webapp/./node_modules/idb/build/index.js","webpack://tinode-webapp/./node_modules/@firebase/app/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/firebase/app/dist/esm/index.esm.js","webpack://tinode-webapp/./node_modules/@firebase/installations/dist/esm/index.esm2017.js","webpack://tinode-webapp/./node_modules/@firebase/messaging/dist/esm/index.esm2017.js","webpack://tinode-webapp/./src/widgets/alert.jsx","webpack://tinode-webapp/./src/widgets/context-menu.jsx","webpack://tinode-webapp/./src/widgets/contact-badges.jsx","webpack://tinode-webapp/./src/widgets/unread-badge.jsx","webpack://tinode-webapp/./src/widgets/call-message.jsx","webpack://tinode-webapp/./src/widgets/call-status.jsx","webpack://tinode-webapp/./src/widgets/inline-video.jsx","webpack://tinode-webapp/./src/widgets/lazy-image.jsx","webpack://tinode-webapp/./src/widgets/file-progress.jsx","webpack://tinode-webapp/./src/widgets/uploading-image.jsx","webpack://tinode-webapp/./src/lib/formatters.js","webpack://tinode-webapp/./src/widgets/contact.jsx","webpack://tinode-webapp/./src/widgets/contact-action.jsx","webpack://tinode-webapp/./src/widgets/contact-list.jsx","webpack://tinode-webapp/./src/widgets/search-contacts.jsx","webpack://tinode-webapp/./src/widgets/forward-dialog.jsx","webpack://tinode-webapp/./src/constants.js","webpack://tinode-webapp/./src/widgets/call-incoming.jsx","webpack://tinode-webapp/./src/widgets/menu-cancel.jsx","webpack://tinode-webapp/./src/widgets/error-panel.jsx","webpack://tinode-webapp/./src/widgets/chip.jsx","webpack://tinode-webapp/./src/widgets/chip-input.jsx","webpack://tinode-webapp/./src/widgets/group-manager.jsx","webpack://tinode-webapp/./src/widgets/permissions-editor.jsx","webpack://tinode-webapp/external var \"QRCode\"","webpack://tinode-webapp/./src/widgets/show-qrcode.jsx","webpack://tinode-webapp/./src/widgets/in-place-edit.jsx","webpack://tinode-webapp/./src/widgets/tag-manager.jsx","webpack://tinode-webapp/./src/widgets/topic-desc-edit.jsx","webpack://tinode-webapp/./src/views/topic-common-view.jsx","webpack://tinode-webapp/./src/widgets/topic-security.jsx","webpack://tinode-webapp/./src/views/info-view.jsx","webpack://tinode-webapp/./src/widgets/call-panel.jsx","webpack://tinode-webapp/./src/widgets/attachment.jsx","webpack://tinode-webapp/./src/widgets/received-marker.jsx","webpack://tinode-webapp/./src/widgets/chat-message.jsx","webpack://tinode-webapp/./src/widgets/send-message.jsx","webpack://tinode-webapp/./src/widgets/doc-preview.jsx","webpack://tinode-webapp/./src/widgets/group-subs.jsx","webpack://tinode-webapp/./src/widgets/image-preview.jsx","webpack://tinode-webapp/./src/widgets/invitation.jsx","webpack://tinode-webapp/./src/views/logo-view.jsx","webpack://tinode-webapp/./src/widgets/meta-message.jsx","webpack://tinode-webapp/./src/widgets/video-preview.jsx","webpack://tinode-webapp/./src/views/messages-view.jsx","webpack://tinode-webapp/./src/widgets/button-back.jsx","webpack://tinode-webapp/./src/widgets/menu-contacts.jsx","webpack://tinode-webapp/./src/widgets/menu-start.jsx","webpack://tinode-webapp/./src/widgets/side-navbar.jsx","webpack://tinode-webapp/./src/views/contacts-view.jsx","webpack://tinode-webapp/./src/views/acc-notifications-view.jsx","webpack://tinode-webapp/./src/views/acc-security-view.jsx","webpack://tinode-webapp/./src/views/acc-support-view.jsx","webpack://tinode-webapp/./src/views/login-view.jsx","webpack://tinode-webapp/./src/widgets/new-topic-by-id.jsx","webpack://tinode-webapp/./src/widgets/new-topic-group.jsx","webpack://tinode-webapp/./src/views/new-topic-view.jsx","webpack://tinode-webapp/./src/widgets/host-selector.jsx","webpack://tinode-webapp/./src/views/settings-view.jsx","webpack://tinode-webapp/./src/views/validation-view.jsx","webpack://tinode-webapp/./src/views/sidepanel-view.jsx","webpack://tinode-webapp/./src/lib/host-name.js","webpack://tinode-webapp/./src/views/tinode-web.jsx","webpack://tinode-webapp/./src/index.js"],"sourcesContent":["var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"tinode-webapp:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// Image zoom and crop widget.\n\nimport React from 'react';\n\nconst DEFAULT_MAX_ZOOM = 2.5;\n\nexport default class Cropper extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n // Coordinates of the top left corner of the image in container coordinates.\n panX: 0,\n panY: 0,\n // Origin of the zoom in image coordinates.\n originX: 0,\n originY: 0,\n // Zoom scale.\n zoom: 1,\n // Zoom min and max.\n minZoom: 0,\n maxZoom: DEFAULT_MAX_ZOOM,\n };\n\n // References to DOM elements for hooking up events and getting screen dimensions.\n // The transparent element which captures mouse moves (moves with the image).\n this.overlay = React.createRef();\n // The image cutout window or view port (static).\n this.cutout = React.createRef();\n // Scaled and translated image preview.\n this.preview = React.createRef();\n // The main container (static).\n this.boundingBox = React.createRef();\n\n // The original image width and height before any scaling.\n this.imageWidth = 0;\n this.imageHeight = 0;\n\n // Mouse position when dragging.\n this.mouseX = 0\n this.mouseY = 0;\n // Length of the previous mouse move when dragging.\n this.prevDistance = 0;\n\n // Bounding rectangles of static elements.\n this.cutoutRect = {};\n this.bBoxRect = {};\n // Center of the bounding box.\n this.originX = 0;\n this.originY = 0;\n\n this.initScaling = this.initScaling.bind(this);\n this.onZoom = this.onZoom.bind(this);\n this.handleZoom = this.handleZoom.bind(this);\n this.mouseDown = this.mouseDown.bind(this);\n this.mouseUp = this.mouseUp.bind(this);\n this.mouseMove = this.mouseMove.bind(this);\n this.mouseTouch = this.mouseTouch.bind(this);\n this.positionAll = this.positionAll.bind(this);\n this.translate = this.translate.bind(this);\n }\n\n componentDidMount() {\n this.overlay.current.addEventListener('mousedown', this.mouseDown, { passive: true });\n this.overlay.current.addEventListener('touchstart', this.mouseDown, { passive: true });\n\n // The rectangle position is in viewport coordinates.\n this.bBoxRect = this.boundingBox.current.getBoundingClientRect();\n // Center of the bounding box in container coordinates.\n this.originX = this.bBoxRect.width / 2;\n this.originY = this.bBoxRect.height / 2;\n\n // The rectangle position is in viewport coordinates.\n this.cutoutRect = this.cutout.current.getBoundingClientRect();\n }\n\n componentWillUnmount() {\n this.overlay.current.removeEventListener('mousedown', this.mouseDown);\n this.overlay.current.removeEventListener('touchstart', this.mouseDown);\n }\n\n // Position all elements.\n positionAll(panX, panY, zoom) {\n // Zoom origin in image preview coordinates.\n this.setState({\n panX: panX,\n panY: panY,\n zoom: zoom,\n originX: this.originX - panX,\n originY: this.originY - panY,\n });\n\n // Pass cut out coordinates to caller.\n const left = (this.originX - panX) * zoom - this.originX;\n const top = (this.originY - panY) * zoom - this.originY;\n this.props.onChange(\n (left + this.cutoutRect.left - this.bBoxRect.left) / zoom,\n (top + this.cutoutRect.top - this.bBoxRect.top) / zoom,\n this.cutoutRect.width / zoom,\n this.cutoutRect.height / zoom,\n zoom);\n }\n\n // Check if new location is within the limits.\n static checkBound(currPan, img, cutout, delta) {\n let nextDiff = Math.min(0, cutout[0] - img[0] - delta, img[1] - cutout[1] + delta);\n if (nextDiff == 0) {\n // Cutout is completely within the image.\n currPan += delta;\n } else if (Math.min(0, cutout[0] - img[0], img[1] - cutout[1]) < nextDiff) {\n // Cutout is outside of the range but closer to the bound.\n currPan += delta;\n }\n return currPan;\n }\n\n initScaling() {\n // Initialize components.\n const imgRect = this.preview.current.getBoundingClientRect();\n\n this.imageWidth = imgRect.width;\n this.imageHeight = imgRect.height;\n\n // Set zoom slider's min and max values. Make sure the scaled image cannot be smaller than the cutout.\n const minZoom = Math.max(this.cutoutRect.width / imgRect.width, this.cutoutRect.height / imgRect.height);\n this.setState({\n minZoom: minZoom,\n maxZoom: Math.max(DEFAULT_MAX_ZOOM, minZoom + 1)\n });\n\n // Initial zoom level fills the bounding box at the smallest image dimension and overflows the largest, i.e. \"fill\" not \"fit\".\n const zoom = Math.max(this.bBoxRect.width / imgRect.width, this.bBoxRect.height / imgRect.height);\n // Converting from viewport coordinates to container, then panning.\n const panX = this.cutoutRect.left - this.bBoxRect.left -\n (imgRect.width - this.cutoutRect.width) / 2;\n const panY = this.cutoutRect.top - this.bBoxRect.top -\n (imgRect.height - this.cutoutRect.height) / 2;\n\n this.positionAll(panX, panY, zoom);\n }\n\n onZoom(e) {\n this.handleZoom(e.target.value);\n }\n\n handleZoom(zoom) {\n let panX = this.state.panX;\n let panY = this.state.panY;\n\n // Ensure that the image at the new zoom is not outside of the cutout boundaries.\n // Calculate image coordinates at the new zoom.\n const imgLeft = this.originX - (this.originX - panX) * zoom;\n const imgRight = imgLeft + this.imageWidth * zoom;\n // Cutout in the same coordinates as the image.\n const coLeft = this.cutoutRect.left - this.bBoxRect.left;\n const coRight = coLeft + this.cutoutRect.width;\n if (coLeft < imgLeft) {\n panX -= imgLeft - coLeft;\n } else if (coRight > imgRight) {\n panX += coRight - imgRight;\n }\n const imgTop = this.originY - (this.originY - panY) * zoom;\n const imgBottom = imgTop + this.imageHeight * zoom;\n const coTop = this.cutoutRect.top - this.bBoxRect.top;\n const coBottom = coTop + this.cutoutRect.height;\n if (coTop < imgTop) {\n panY -= imgTop - coTop;\n } else if (coBottom > imgBottom) {\n panY += coBottom - imgBottom;\n }\n\n this.positionAll(panX, panY, zoom);\n }\n\n mouseDown(e) {\n if (e.touches) {\n this.mouseX = e.touches[0].pageX;\n this.mouseY = e.touches[0].pageY;\n } else {\n this.mouseX = e.pageX;\n this.mouseY = e.pageY;\n }\n\n window.addEventListener('mousemove', this.mouseMove, { passive: false });\n window.addEventListener('touchmove', this.mouseTouch, { passive: false });\n window.addEventListener('mouseup', this.mouseUp, { passive: true });\n window.addEventListener('touchend', this.mouseUp, { passive: true });\n // Disable text selection in the entire document.\n document.body.style['userSelect'] = 'none';\n }\n\n // Perform image panning.\n translate(pageX, pageY) {\n const dX = pageX - this.mouseX;\n const dY = pageY - this.mouseY;\n\n this.mouseX = pageX;\n this.mouseY = pageY;\n\n // Make sure the image is within the cutout window.\n const imgRect = this.preview.current.getBoundingClientRect();\n\n // Check if the new position is within the boundaries, and if not if it's closer to them.\n let panX = Cropper.checkBound(this.state.panX, [imgRect.left, imgRect.right],\n [this.cutoutRect.left, this.cutoutRect.right], dX);\n let panY = Cropper.checkBound(this.state.panY, [imgRect.top, imgRect.bottom],\n [this.cutoutRect.top, this.cutoutRect.bottom], dY);\n\n this.positionAll(panX, panY, this.state.zoom);\n }\n\n // Image panning.\n mouseMove(e) {\n e.preventDefault();\n this.translate(e.pageX, e.pageY);\n }\n\n mouseTouch(e) {\n e.preventDefault();\n\n if (e.touches.length == 1) {\n this.translate(e.touches[0].pageX, e.touches[0].pageY);\n return;\n }\n\n // Image zooming by pinching.\n const [touch0, touch1] = e.touches;\n const distance = Math.sqrt((touch0.pageX - touch1.pageX) * (touch0.pageX - touch1.pageX) +\n (touch0.pageY - touch1.pageY) * (touch0.pageY - touch1.pageY));\n\n if (!this.prevDistance) {\n this.prevDistance = distance / this.state.zoom;\n }\n\n let scale = (distance / this.prevDistance);\n this.handleZoom(Math.max(this.minZoom, Math.min(this.maxZoom, scale)));\n }\n\n mouseUp(e) {\n window.removeEventListener('mousemove', this.mouseMove);\n window.removeEventListener('touchmove', this.mouseTouch);\n window.removeEventListener('mouseup', this.mouseUp);\n window.removeEventListener('touchend', this.mouseUp);\n // Re-enable text selection.\n document.body.style['userSelect'] = '';\n\n this.positionAll(this.state.panX, this.state.panY, this.state.zoom);\n }\n\n render() {\n // transform3d: position and scale.\n const t3d = `translate3d(${this.state.panX}px, ${this.state.panY}px, 0) scale(${this.state.zoom})`;\n // transformOrigin: zoom origin.\n const orig = `${this.state.originX}px ${this.state.originY}px`;\n\n // Overlay position and size are exactly equal to the position and size of the transformed image\n // except it uses different coordinates.\n const overlay = {\n top: `${this.originY - this.state.originY * this.state.zoom}px`,\n left: `${this.originX - this.state.originX * this.state.zoom}px`,\n width: `${this.imageWidth * this.state.zoom}px`,\n height: `${this.imageHeight * this.state.zoom}px`\n };\n return (\n \n \n \n
field: the URL must be a relative URL or\n// have http:, https:, blob: or data: scheme.\n// In case of data: scheme, the URL must must be of the right MIME type such as 'data:{mimeMajor}/XXXX;base64,'.\nexport function sanitizeUrlForMime(url, mimeMajor) {\n if (!url) {\n return null;\n }\n\n const sanitizedUrl = sanitizeUrl(url);\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Is this a data: URL of the appropriate mime type?\n const re = new RegExp(`data:${mimeMajor}\\/[a-z0-9.-]+;base64,`, 'i');\n if (re.test(url.trim())) {\n return url;\n }\n\n return null;\n}\n\n// Append query parameter 'asatt=1' to the URL.\n// It will cause Tinode server to add 'Content-Disposition: attachment' header when serving it.\n// The URL is a string. The URL here is always absolute.\nexport function urlAsAttachment(url) {\n // TODO: check if URL is local or remote, i.e. compare to window.location.origin.\n /*\n if (typeof window.location == 'object') {\n if (!url.startsWith(window.location.origin)) {\n return url;\n }\n }\n */\n // Check if the URL is a data or blob. Do not alter such URLs.\n if (url.startsWith('data:') || url.startsWith('blob:')) {\n return url;\n }\n\n // Split URL into host+path, query, fragment.\n let query = '', fragment = '';\n const idxF = url.indexOf('#');\n if (idxF > 0) {\n fragment = url.substring(idxF+1);\n url = url.substring(0, idxF);\n }\n const idxQ = url.indexOf('?');\n if (idxQ > 0) {\n query = url.substring(idxQ+1);\n url = url.substring(0, idxQ);\n }\n // Add parameter and reassemble.\n const params = new URLSearchParams(query);\n params.append('asatt', '1');\n return `${url}?${params.toString()}` + (fragment ? `#${fragment}` : '');\n}\n\n// Given message's received status, return name and color of a delivery indicator icon.\nexport function deliveryMarker(received) {\n switch (received) {\n case Tinode.MESSAGE_STATUS_SENDING:\n return { name: 'access_time' }; // watch face\n case Tinode.MESSAGE_STATUS_FAILED:\n case Tinode.MESSAGE_STATUS_FATAL:\n return { name: 'warning', color: 'danger-color' }; // yellow icon /!\\\n case Tinode.MESSAGE_STATUS_SENT:\n return { name: 'done' }; // checkmark\n case Tinode.MESSAGE_STATUS_RECEIVED:\n return { name: 'done_all' }; // double checkmark\n case Tinode.MESSAGE_STATUS_READ:\n return { name: 'done_all', color: 'blue' }; // blue double checkmark\n }\n return null;\n}\n\n// Wraps a promise to make it cancelable.\n// The parameter can be either a promise or an error. If it's an error, the wrapped promise is\n// created in a rejected state.\nexport function cancelablePromise(promise) {\n let hasCanceled = false;\n\n const wrappedPromise = promise instanceof Error ?\n Promise.reject(promise) :\n new Promise((resolve, reject) => {\n promise.then(\n result => hasCanceled ? reject({isCanceled: true}) : resolve(result),\n error => hasCanceled ? reject({isCanceled: true}) : reject(error)\n );\n });\n\n return {\n promise: wrappedPromise,\n cancel() {\n hasCanceled = true;\n },\n };\n};\n\n// Clips string to the specified length.\nexport function clipStr(str, length) {\n return str && str.substring(0, length);\n}\n","module.exports = tinode;","// Audio recorder widget.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat';\nimport { base64ToIntArray } from '../lib/blob-helpers';\n\n// Make canvas bigger than the element size to reduce blurring.\nconst CANVAS_UPSCALING = 2.0;\n// Thickness of a visualization bar.\nconst LINE_WIDTH = 3 * CANVAS_UPSCALING;\n// Spacing between two visualization bars.\nconst SPACING = 2 * CANVAS_UPSCALING;\n// Color of histogram bars.\nconst BAR_COLOR = '#888A';\nconst BAR_COLOR_DARK = '#666C';\nconst THUMB_COLOR = '#444E';\n// Minimum number of amplitude bars to draw.\nconst MIN_PREVIEW_LENGTH = 16;\n\nconst messages = defineMessages({\n icon_title_play: {\n id: 'icon_title_play',\n defaultMessage: 'Play recording',\n description: 'Icon tool tip for starting audio playback'\n }\n});\n\nclass AudioPlayer extends React.PureComponent {\n constructor(props) {\n super(props);\n\n let preview = base64ToIntArray(this.props.preview);\n if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\n preview = null;\n }\n\n this.state = {\n canPlay: false,\n playing: false,\n currentTime: '0:00',\n duration: this.props.duration > 0 ? secondsToTime(this.props.duration / 1000) : '-:--',\n longMin: this.props.duration >= 600000,\n preview: preview\n };\n\n this.initAudio = this.initAudio.bind(this);\n this.initCanvas = this.initCanvas.bind(this);\n this.resampleBars = this.resampleBars.bind(this);\n this.visualize = this.visualize.bind(this);\n\n this.handlePlay = this.handlePlay.bind(this);\n this.handleSeek = this.handleSeek.bind(this);\n this.handleError = this.handleError.bind(this);\n\n this.audioPlayer = null;\n\n this.viewBuffer = [];\n this.canvasRef = React.createRef();\n }\n\n componentDidMount() {\n if (this.props.src) {\n this.initAudio();\n }\n\n this.initCanvas();\n }\n\n componentWillUnmount() {\n if (this.audioPlayer) {\n this.audioPlayer.onloadedmetadata = null;\n this.audioPlayer.ontimeupdate = null;\n this.audioPlayer.onended = null;\n this.audioPlayer.pause();\n this.audioPlayer = null;\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.src != prevProps.src) {\n this.initAudio();\n }\n\n if (this.props.preview != prevProps.preview) {\n let preview = base64ToIntArray(this.props.preview);\n if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\n preview = null;\n }\n this.setState({preview: preview}, this.initCanvas);\n }\n }\n\n initAudio() {\n this.audioPlayer = new Audio(this.props.src);\n this.audioPlayer.onloadedmetadata = _ => this.setState({canPlay: true});\n this.audioPlayer.ontimeupdate = _ => this.setState({\n currentTime: secondsToTime(this.audioPlayer.currentTime, this.state.longMin)\n });\n this.audioPlayer.onended = _ => {\n this.audioPlayer.currentTime = 0;\n this.setState({playing: false, currentTime: secondsToTime(0, this.state.longMin)})\n }\n }\n\n initCanvas() {\n // Force canvas aspect ratio to match one of the element + upscale canvas to reduce blurring.\n this.canvasRef.current.width = this.canvasRef.current.offsetWidth * CANVAS_UPSCALING;\n this.canvasRef.current.height = this.canvasRef.current.offsetHeight * CANVAS_UPSCALING;\n\n this.canvasContext = this.canvasRef.current.getContext('2d');\n this.canvasContext.lineCap = 'round';\n\n this.viewBuffer = this.resampleBars(this.state.preview);\n this.visualize();\n }\n\n // Draw amplitude of sound.\n visualize() {\n if (!this.canvasRef.current) {\n return;\n }\n\n const width = this.effectiveWidth;\n const height = this.canvasRef.current.height;\n\n this.canvasContext.lineWidth = LINE_WIDTH;\n\n const drawFrame = _ => {\n if (!this.canvasRef.current || !this.audioPlayer) {\n // The component is unmounted.\n return;\n }\n\n this.canvasContext.clearRect(0, 0, this.canvasRef.current.width, height);\n\n if (this.viewBuffer) {\n if (this.state.playing) {\n window.requestAnimationFrame(drawFrame);\n }\n\n // Current playback position.\n const thumbAt = this.props.duration ?\n Math.max(0, Math.min(this.audioPlayer.currentTime * 1000 / this.props.duration, 1)) * (width - LINE_WIDTH * 2) : -1;\n\n // Draw amplitude bars.\n this.canvasContext.beginPath();\n this.canvasContext.strokeStyle = BAR_COLOR_DARK;\n for (let i = 0; i < this.viewBuffer.length; i++) {\n let x = 1 + i * (LINE_WIDTH + SPACING) + LINE_WIDTH * 0.5;\n let y = Math.max(this.viewBuffer[i] * height * 0.9, 1);\n\n const color = x < thumbAt ? BAR_COLOR_DARK : BAR_COLOR;\n if (this.canvasContext.strokeStyle != color) {\n this.canvasContext.stroke();\n this.canvasContext.beginPath();\n this.canvasContext.strokeStyle = color;\n }\n\n this.canvasContext.moveTo(x, (height - y) * 0.5);\n this.canvasContext.lineTo(x, (height + y) * 0.5);\n }\n // Actually draw the bars on canvas.\n this.canvasContext.stroke();\n\n // Draw thumb.\n if (this.props.duration) {\n this.canvasContext.beginPath();\n this.canvasContext.arc(thumbAt + LINE_WIDTH * 2, height * 0.5, LINE_WIDTH * 2, 0, 2 * Math.PI);\n this.canvasContext.fillStyle = THUMB_COLOR;\n this.canvasContext.fill();\n }\n }\n }\n\n drawFrame();\n }\n\n // Quick and dirty downsampling of the original preview bars into a smaller (or equal) number of bars we can display here.\n resampleBars(original) {\n const dstCount = ((this.canvasRef.current.width - SPACING) / (LINE_WIDTH + SPACING)) | 0;\n // Remove extra padding on the right due to fractional bar which is not drawn.\n this.effectiveWidth = dstCount * (LINE_WIDTH + SPACING) + SPACING;\n\n if (!Array.isArray(original) || original.length == 0) {\n return Array.apply(null, Array(dstCount)).map(_ => 0.01);\n }\n\n const factor = original.length / dstCount;\n let amps = [];\n let maxAmp = -1;\n for (let i=0; i
{e.target.onerror = null; e.target.src=\"../img/broken_image.png\"}} />;\n } else {\n avatar = null;\n }\n return avatar;\n }\n}\n","// Utility class for hash navigation.\n\nexport default class HashNavigation {\n // Parse hash as in http://www.example.com/path#hash as if it were\n // path and arguments.\n static parseUrlHash(hash) {\n // Split 'path/?args' into 'path/' and 'args', path -> parts[0], args->path[1].\n const parts = hash.split('?', 2);\n const params = {};\n let path = [];\n if (parts[0]) {\n path = parts[0].replace('#', '').split('/');\n }\n if (parts[1]) {\n parts[1].split('&').forEach((arg) => {\n // Can't use split() because the value may contain '='.\n const eq = arg.indexOf('=');\n if (eq > 0) {\n params[arg.slice(0, eq)] = decodeURIComponent(arg.slice(eq + 1));\n }\n });\n }\n return {path: path, params: params};\n }\n\n static navigateTo(url) {\n window.location.hash = url;\n }\n\n static composeUrlHash(path, params) {\n let url = path.join('/');\n const args = [];\n for (const key in params) {\n if (params.hasOwnProperty(key)) {\n if (params[key] !== undefined) {\n args.push(key + '=' + encodeURIComponent(params[key]));\n }\n }\n }\n if (args.length > 0) {\n url += '?' + args.join('&');\n }\n return url;\n }\n\n static addUrlParam(hash, key, value) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.params[key] = value;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static removeUrlParam(hash, key) {\n const parsed = HashNavigation.parseUrlHash(hash);\n delete parsed.params[key];\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlSidePanel(hash, sidepanel) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.path[0] = sidepanel;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlInfoPanel(hash, infopanel) {\n const parsed = HashNavigation.parseUrlHash(hash);\n if (infopanel) {\n parsed.params.info = infopanel;\n } else {\n delete parsed.params.info;\n }\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlTopic(hash, topic) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.path[1] = topic;\n // Close InfoView on topic change.\n delete parsed.params.info;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n}\n","module.exports = ReactIntl;","// Helper functions for storing values in localStorage.\n// By default localStorage can store only strings, not objects or other types.\n\nexport default class LocalStorageUtil {\n // Replace old object with the new one.\n static setObject(key, value) {\n localStorage.setItem(key, JSON.stringify(value));\n }\n\n // Get stored object.\n static getObject(key) {\n const value = localStorage.getItem(key);\n return value && JSON.parse(value);\n }\n\n // Partially or wholly update stored object.\n static updateObject(key, value) {\n const oldVal = this.getObject(key);\n this.setObject(key, Object.assign(oldVal || {}, value));\n }\n\n // Just a wrapper.\n static removeItem(key) {\n localStorage.removeItem(key);\n }\n}\n","// Short representation of time in the past.\nexport function shortDateFormat(then, locale) {\n locale = locale || window.navigator.userLanguage || window.navigator.language;\n const now = new Date();\n if (then.getFullYear() == now.getFullYear()) {\n // Same year.\n if (then.getMonth() == now.getMonth() && then.getDate() == now.getDate()) {\n // Same month and day, show time only.\n return then.toLocaleTimeString(locale, {hour12: false, hour: '2-digit', minute: '2-digit'});\n }\n // Different month and/or day, show month day, time.\n return then.toLocaleDateString(locale,\n {hour12: false, month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit'});\n }\n // Different year: just show the date.\n return then.toLocaleDateString(locale, {year: 'numeric', month: 'short', day: 'numeric'});\n}\n\n// Representation a date relative to now.\nexport function relativeDateFormat(then, locale) {\n locale = locale || window.navigator.userLanguage || window.navigator.language;\n const now = new Date();\n const thenDays = Math.floor((then.getTime() - then.getTimezoneOffset() * 60_000) / 86_400_000);\n const nowDays = Math.floor((now.getTime() - now.getTimezoneOffset() * 60_000) / 86_400_000);\n const diff = thenDays - nowDays;\n if (Math.abs(diff) < 2) {\n // Today or yesterday.\n return new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).format(diff, 'day')\n }\n // More than two days: just show the date.\n return new Intl.DateTimeFormat(locale).format(then);\n}\n\n// Convert seconds to [hours:]minutes:seconds, i.e. 156 sec -> 2:36, 3756 sec -> 1:02:36.\n// If
fixedMins is true, then minutes are represented by at least two digits.\nexport function secondsToTime(seconds, fixedMin) {\n if (typeof seconds != 'number') {\n return '';\n }\n\n let min = (Math.floor(seconds / 60) | 0) % 60;\n let hours = Math.floor(seconds / 3600) | 0;\n\n if (fixedMin || hours > 0) {\n min = min < 10 ? `0${min}` : min;\n }\n let sec = (seconds | 0) % 60;\n sec = sec < 10 ? `0${sec}` : sec;\n if (hours == 0) {\n return `${min}:${sec}`;\n }\n return `${hours}:${min}:${sec}`;\n}\n\n// Convert a number of bytes to human-readable format.\nexport function bytesToHumanSize(bytes) {\n if (!bytes || bytes == 0) {\n return '0 Bytes';\n }\n\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const bucket = Math.min(Math.floor(Math.log2(bytes) / 10) | 0, sizes.length-1);\n const count = bytes / Math.pow(1024, bucket);\n const round = bucket > 0 ? (count < 3 ? 2 : (count < 30 ? 1 : 0)) : 0;\n return count.toFixed(round) + ' ' + sizes[bucket];\n}\n\n// Shorten a file name to be under maxLength by clipping out the middle.\nexport function shortenFileName(filename, maxLength) {\n if (typeof filename != 'string') {\n return filename;\n }\n return filename.length > maxLength ?\n filename.slice(0, maxLength/2 - 1) + '…' + filename.slice(1 - maxLength/2) : filename;\n}\n\n// Get 32 bit integer hash value for a string. Ideally it should produce the same value\n// as Java's String#hash().\nfunction stringToColorHash(value) {\n let hash = 0;\n value = '' + value;\n for (let i = 0; i < value.length; i++) {\n hash = ((hash << 5) - hash) + value.charCodeAt(i);\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n}\n\n// User avatar letter color id.\nexport function letterTileColorId(userId) {\n return Math.abs(stringToColorHash(userId)) % 16;\n}\n\n// Converts user or topic ID to a CSS color class. Ideally it should produce the same color value as Java version.\n// params:\n// - {string} id: user or topic ID\n// - {boolean} light: light or dark version of the color.\n// - {boolean} fg: foreground (text) or background color.\nexport function idToColorClass(id, light, fg) {\n return (light ? 'lt-' : 'dk-') + (fg ? 'fg-' : 'bg-') + letterTileColorId(id);\n}\n\n// Takes ISO Alpha-2 country code, like 'US' and converts it to a flag emoji.\nexport function flagEmoji(countryCode) {\n const codePoints = countryCode\n .toUpperCase()\n .split('')\n .map(char => 0x1F1A5 + char.charCodeAt());\n return String.fromCodePoint(...codePoints);\n}\n","import { PACKAGE_VERSION } from './version.js';\n\n// Name of this application, used in the User-Agent.\nexport const APP_NAME = 'TinodeWeb/' + (PACKAGE_VERSION || '0.21');\n\n// API key. Use https://github.com/tinode/chat/tree/master/keygen to generate your own\nexport const API_KEY = 'AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K';\n\n// The array of possible hosts to connect to.\nexport const KNOWN_HOSTS = {hosted: 'web.tinode.co', local: 'localhost:6060'};\n\n// Default host name and port to connect to.\nexport const DEFAULT_HOST = KNOWN_HOSTS.hosted;\n\n// Enable console logging.\nexport const LOGGING_ENABLED = true;\n\n// Minimum time between two keypress notifications, milliseconds.\nexport const KEYPRESS_DELAY = 3_000;\n// Delay before sending a read notification, milliseconds.\nexport const READ_DELAY = 1_500;\n\n// The default shortest allowed tag length. Matches the value on the server.\nexport const MIN_TAG_LENGTH = 2;\n// The default greatest allowed tag length. Matches the value on the server.\nexport const MAX_TAG_LENGTH = 96;\n// The default maximum number of tags allowed. Matches the value on the server.\nexport const MAX_TAG_COUNT = 16;\n\n// Access mode for P2P subscriptions initiated by the current user.\nexport const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';\n// Access mode for new group topics created by the current user.\nexport const NEW_GRP_ACCESS_MODE = 'JRWPSAO';\n// Access mode for a channel.\nexport const CHANNEL_ACCESS_MODE = 'JR';\n\n// Access mode for no access.\nexport const NO_ACCESS_MODE = 'N';\n\n// Mediaquery breakpoint between desktop and mobile, in px. Should match the value\n// in @media (max-size: 640px) in base.css\nexport const MEDIA_BREAKPOINT = 640;\n// Size of css 'rem' unit in pixels. Default 1rem = 10pt = 13px.\nexport const REM_SIZE = 13;\n\n// Size of the avatar image: when image dimensions are greater or the image is not square, it's resized to\n// a square of this size or less.\nexport const AVATAR_SIZE = 384;\n\n// Maximum size of an avatar in bytes for sending in-band. Bigger avatars will be sent out of band (as uploads).\nexport const MAX_AVATAR_BYTES = 4096;\n\n// Size of the broken_image shown in MessagesView\nexport const BROKEN_IMAGE_SIZE = 32;\n\n// Size of video preview when dimensions are missing.\nexport const NO_DIMENSIONS_VIDEO = 128;\n\n// Number of chat messages to fetch in one call.\nexport const MESSAGES_PAGE = 24;\n\n// Default maximum in-band (included directly into the message) attachment size which fits into\n// a message of 256K in size. Used when the server-provided value is unavailable. The actual\n// binary size of the attachment should be smaller due to base64 encoding expansion and some overhead,\n// for instance 1024 bytes.\n// Increase this limit to a greater value in production, if desired. Also increase\n// max_message_size in the server config.\nexport const MAX_INBAND_ATTACHMENT_SIZE = 262_144;\n\n// Default absolute maximum attachment size to be used with the server = 8MB.\n// Used when the server-provided value is unavailable. Increase to something like 100MB in production.\nexport const MAX_EXTERN_ATTACHMENT_SIZE = 1 << 23;\n\n// Maximum allowed linear dimension (pixels) of an image sent inline. Larger images will be shrunk\n// to make the larger dimension fit under this size. You may want to adjust it to 1600 or\n// 2400 for production.\nexport const MAX_IMAGE_DIM = 1024;\n\n// Linear dimensions of image preview: shrink image under this size for previews.\nexport const IMAGE_PREVIEW_DIM = 64;\n\n// Linear dimensions of video screencapture: shrink image under this size for previews.\nexport const VIDEO_PREVIEW_DIM = 96;\n\n// Linear dimensions of image thumbnail: shrink image under this size for thumbnails in reply quote previews.\nexport const IMAGE_THUMBNAIL_DIM = 36;\n// Width of video thumbnail: allow it to be wider, but not taller. Use IMAGE_THUMBNAIL_DIM for height.\nexport const VIDEO_THUMBNAIL_WIDTH = 48;\n\n// Maximum number of online users to be shown in a topic title bar. Others will be\n// hidden under \"+X more\"\nexport const MAX_ONLINE_IN_TOPIC = 4;\n\n// Maximum length of user name, topic title, and private comment.\nexport const MAX_TITLE_LENGTH = 60;\n// Maximum length of topic description.\nexport const MAX_TOPIC_DESCRIPTION_LENGTH = 360;\n// Maximum length of user name when displaying a video call.\nexport const MAX_PEER_TITLE_LENGTH = 20;\n\n// Length of message previews in chat list, in characters.\nexport const MESSAGE_PREVIEW_LENGTH = 80;\n\n// Length of a quote in quoted reply (for outgoing messages).\nexport const QUOTED_REPLY_LENGTH = 30;\n// Length of a preview of a forwarded message.\nexport const FORWARDED_PREVIEW_LENGTH = 84;\n// Length of preview for a message being edited.\nexport const EDIT_PREVIEW_LENGTH = 48;\n\n// Minimum duration of an audio recording in milliseconds (2 sec).\nexport const MIN_DURATION = 2_000;\n// Maximum duration of an audio recording in milliseconds (10 min).\nexport const MAX_DURATION = 600_000;\n\n// Link for \"Contact Us\".\nexport const LINK_CONTACT_US = 'mailto:support@tinode.co';\n\n// Link to Privacy Policy.\nexport const LINK_PRIVACY_POLICY = 'https://tinode.co/privacy.html';\n\n// Link to Terms of Service.\nexport const LINK_TERMS_OF_SERVICE = 'https://tinode.co/terms.html';\n\n// When user starts a P2P topic, automatic subscription does not\n// happen until the first message. Setting this option to true enables\n// immediate subscription.\nexport const IMMEDIATE_P2P_SUBSCRIPTION = false;\n\n// URL schemes permitted to appear in links (i.e. no javascript: scheme).\nexport const CLICKABLE_URL_SCHEMES = ['http', 'https', 'ftp', 'ftps'];\n\n// Size of the QR code in the app.\nexport const QRCODE_SIZE = 128;\n\n// How much time has to pass to consider computer awoken from sleep (80 sec).\n// Chrome throttles ticker events in inactive tabs to once per minute. This\n// value ensures that these once-a-minute events do not trigger a reconnect.\nexport const WAKE_UP_TIMEOUT = 80000;\n// Timer interval between checks if computer woke up from sleep (1 sec).\nexport const WAKE_UP_TICK = 1000;\n","import React from 'react';\n\nimport LetterTile from './letter-tile.jsx';\nimport LoadSpinner from './load-spinner.jsx';\n\nimport { sanitizeUrlForMime } from '../lib/utils.js';\n\nimport { AVATAR_SIZE } from '../config.js';\n\nexport default class AvatarUpload extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n source: props.avatar\n };\n\n this.handleFileReceived = this.handleFileReceived.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.avatar != prevProps.avatar) {\n this.setState({source: this.props.avatar});\n }\n }\n\n handleFileReceived(e) {\n const image = e.target.files[0];\n this.props.onImageUpdated(image.type, URL.createObjectURL(image), image.name);\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n render() {\n // Randomize id value in case more than one AvatarUpload is shown\n // at the same time.\n const randId = 'file-input-avatar-' + ('' + Math.random()).substring(0, 4);\n const className = 'avatar-upload' + (this.props.readOnly ? ' read-only' : '');\n return (\n :\n this.props.readOnly && this.props.uid ?\n
\n {menu}\n
\n );\n }\n}\n\nexport default injectIntl(ContextMenu);\n","import React from 'react';\n\nconst icon_mapping = {'muted': 'notifications_off', 'banned': 'block', 'staff': 'verified_user'};\n\n/* Contact's labels: [you], or icons [muted], [blocked] */\nexport default class ContactBadges extends React.PureComponent {\n render() {\n let badges = null;\n if (this.props.badges && this.props.badges.length > 0) {\n badges = [];\n this.props.badges.map((b) => {\n const color = (b.color ? ' ' + b.color : '');\n if (b.icon) {\n badges.push({icon_mapping[b.icon] || b.icon});\n } else {\n badges.push({b.name});\n }\n });\n return <>{badges}>;\n }\n return null;\n }\n};\n","// The counter of unread messages in the topic.\nimport React from 'react';\n\nexport default class UnreadBadge extends React.PureComponent {\n render() {\n return (this.props.count > 0 ?\n {this.props.count > 9 ? \"9+\" : this.props.count}\n : null);\n }\n};\n","// Chat message describing a video or voice call.\n\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat.js';\n\nexport default class CallMessage extends React.PureComponent {\n render() {\n const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);\n const successClass = 'material-icons medium ' + (isCallDropped ? 'red' : 'green');\n const callIcon = this.props.incoming ?\n (isCallDropped ? 'call_missed' : 'call_received') :\n (isCallDropped ? 'call_missed_outgoing' : 'call_made');\n let duration;\n if (isCallDropped) {\n switch (this.props.callState) {\n case 'busy':\n duration =
}\n .\n el = UploadingImage;\n }\n\n return el;\n}\n\n// Additional processing of image data.\nfunction handleVideoData(el, data, attr) {\n if (!data) {\n attr.src = 'img/broken_video.png';\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n };\n return el;\n }\n attr.className = 'inline-image';\n const dim = fitImageSize(data.width, data.height,\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\n {dstWidth: NO_DIMENSIONS_VIDEO, dstHeight: NO_DIMENSIONS_VIDEO};\n attr.style = {\n width: dim.dstWidth + 'px',\n height: dim.dstHeight + 'px',\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\n minWidth: dim.dstWidth + 'px',\n minHeight: dim.dstHeight + 'px'\n };\n if (!Drafty.isProcessing(data)) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\n attr.alt = data.name;\n if (data.ref || data.val) {\n attr.onClick = this.onVideoPreview;\n attr.loading = 'lazy';\n }\n el = InlineVideo;\n } else {\n // Use custom element instead of
.\n el = UploadingImage;\n }\n\n return el;\n}\n\n// Converts Drafty object into a one-line preview. 'this' is set by the caller.\n// 'this' must contain:\n// formatMessage: this.props.intl.formatMessage\n// messages: formatjs messages defined with defineMessages.\nexport function previewFormatter(style, data, values, key) {\n if (!style) {\n // Unformatted.\n return values;\n }\n\n let el = Drafty.tagName(style);\n const attr = { key: key };\n switch (style) {\n case 'AU':\n // Voicemail as '[mic] 0:00'.\n el = React.Fragment;\n values = [mic, ' ', secondsToTime(data.duration/1000)];\n break;\n case 'BR':\n // Replace new line with a space.\n el = React.Fragment;\n values = [' '];\n break;\n case 'HL':\n // Make highlight less prominent in preview.\n attr.className = 'highlight preview';\n break;\n case 'LN':\n case 'MN':\n // Disable links in previews.\n el = 'span';\n break;\n case 'IM':\n // Replace image with '[icon] Image'.\n el = React.Fragment;\n values = [photo, ' ', this.formatMessage(messages.drafty_image)];\n break;\n case 'BN':\n el = 'span';\n attr.className = 'flat-button faux';\n break;\n case 'FM':\n el = React.Fragment;\n values = [dashboard,\n this.formatMessage(messages.drafty_form)].concat(' ', values || []);\n break;\n case 'RW':\n el = React.Fragment;\n break;\n case 'EX':\n if (data) {\n if (data.mime == 'application/json') {\n // Ignore JSON attachments: they are form response payloads.\n return null;\n }\n // Clear payload.\n delete data.val;\n delete data.ref;\n }\n el = React.Fragment;\n values = [attachment, ' ', this.formatMessage(messages.drafty_attachment)];\n break;\n case 'VC':\n el = CallStatus;\n if (data) {\n attr.callState = data.state;\n attr.incoming = data.incoming;\n attr.duration = data.duration;\n }\n values = null;\n break;\n case 'QQ':\n case 'HD':\n el = null;\n values = null;\n break;\n case 'VD':\n // Replace image with '[icon] Video'.\n el = React.Fragment;\n values = [play_circle_outline, ' ', this.formatMessage(messages.drafty_video)];\n break;\n default:\n if (!el) {\n // Unknown element.\n el = React.Fragment;\n values = [extension, ' ', this.formatMessage(messages.drafty_unknown)];\n }\n break;\n }\n if (!el) {\n return values;\n }\n return React.createElement(el, attr, values);\n};\n\n// Converts Drafty object into a quoted reply; 'this' is set by the caller.\nfunction inlineImageAttr(attr, data) {\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n maxWidth: IMAGE_THUMBNAIL_DIM + 'px',\n maxHeight: IMAGE_THUMBNAIL_DIM + 'px',\n }\n attr.className = 'inline-image';\n attr.alt = this.formatMessage(messages.drafty_image);\n if (!data) {\n attr.src = 'img/broken_image.png';\n } else {\n attr.src = attr.src || 'img/broken_image.png';\n }\n attr.title = attr.alt;\n return attr;\n}\n\n// Converts Drafty object into a quoted reply; 'this' is set by the caller.\nfunction inlineVideoAttr(attr, data) {\n const dim = fitImageSize(data.width, data.height, VIDEO_THUMBNAIL_WIDTH, IMAGE_THUMBNAIL_DIM);\n attr.style = {\n width: dim.width + 'px',\n height: dim.height + 'px',\n maxWidth: VIDEO_THUMBNAIL_WIDTH + 'px',\n maxHeight: IMAGE_THUMBNAIL_DIM + 'px',\n }\n attr.className = 'inline-image';\n attr.alt = this.formatMessage(messages.drafty_video);\n attr.title = attr.alt;\n if (!data) {\n attr.src = 'img/broken_video.png';\n } else {\n attr.src = attr.src || 'img/broken_video.png';\n }\n return attr;\n}\n\n// Displays a portion of Drafty within 'QQ' quotes. 'this' is set by the caller.\n// 'this' must contain:\n// formatMessage: this.props.intl.formatMessage\n// messages: formatjs messages defined with defineMessages.\n// authorizeURL: this.props.tinode.authorizeURL\n// onQuoteClick: this.handleQuoteClick (optional)\nfunction quoteFormatter(style, data, values, key) {\n if (['BR', 'EX', 'IM', 'MN', 'VD'].includes(style)) {\n let el = Drafty.tagName(style);\n let attr = Drafty.attrValue(style, data) || {};\n attr.key = key;\n switch(style) {\n case 'BR':\n values = null;\n break;\n case 'IM':\n attr = inlineImageAttr.call(this, attr, data);\n values = [React.createElement('img', attr, null), ' ', attr.alt];\n el = React.Fragment;\n // Fragment attributes.\n attr = {key: key};\n break;\n case 'VD':\n attr = inlineVideoAttr.call(this, attr, data);\n values = [React.createElement('img', attr, null), ' ', attr.alt];\n el = React.Fragment;\n // Fragment attributes.\n attr = {key: key};\n break;\n case 'MN':\n el = 'span';\n attr.className = 'mention'\n if (data) {\n attr.className += ' ' + idToColorClass(data.val, false, true);\n }\n break;\n case 'EX':\n let fname;\n if (data) {\n if (data.mime == 'application/json') {\n // Ignore JSON attachments: they are form response payloads.\n return null;\n }\n fname = data.name;\n // Clear payload.\n delete data.val;\n delete data.ref;\n }\n el = React.Fragment;\n values = [attachment,\n shortenFileName(fname, 16) || this.formatMessage(messages.drafty_attachment)];\n break;\n }\n return React.createElement(el, attr, values);\n }\n return previewFormatter.call(this, style, data, values, key);\n}\n\n// Create image thumbnail suitable for inclusion in a quote.\nfunction quoteImageOrVideo(data, isVideo) {\n let promise;\n let bits, ref, mime;\n if (isVideo) {\n bits = data.preview;\n mime = data.premime || 'image/jpeg';\n ref = data.preref;\n } else {\n bits = data.val;\n mime = data.mime;\n ref = data.ref;\n }\n // Get the blob from the image data.\n if (bits) {\n const blob = base64ToBlob(bits, mime);\n if (!blob) {\n throw new Error(\"Invalid image\");\n }\n promise = Promise.resolve(blob);\n } else if (ref) {\n promise = fetch(this.authorizeURL(sanitizeUrlForMime(ref, 'image')))\n .then(evt => {\n if (evt.ok) {\n return evt.blob();\n } else {\n throw new Error(`Image fetch unsuccessful: ${evt.status} ${evt.statusText}`);\n }\n });\n } else {\n throw new Error(\"Missing image data\");\n }\n\n // Scale the blob.\n return promise\n .then(blob => {\n // If it's an image, cut the square from the center of the image and shrink it.\n // If it's a video, allow it to be rectantular.\n return imageScaled(blob, isVideo ? VIDEO_THUMBNAIL_WIDTH : IMAGE_THUMBNAIL_DIM, IMAGE_THUMBNAIL_DIM, -1, !isVideo)\n }).then(scaled => {\n if (isVideo) {\n data.premime = scaled.mime;\n } else {\n data.mime = scaled.mime;\n }\n data.size = scaled.blob.size;\n data.width = scaled.width;\n data.height = scaled.height;\n delete data.ref;\n delete data.preref;\n // Keeping the original file name, if provided: ex.data.name;\n\n data.src = URL.createObjectURL(scaled.blob);\n return blobToBase64(scaled.blob);\n }).then(b64 => {\n if (isVideo) {\n data.preview = b64.bits;\n } else {\n data.val = b64.bits;\n }\n return data;\n }).catch(err => {\n delete data.val;\n delete data.preview;\n delete data.src;\n data.width = IMAGE_THUMBNAIL_DIM;\n data.height = IMAGE_THUMBNAIL_DIM;\n // Rethrow.\n throw err;\n });\n}\n\n// Create a preview of a reply.\nexport function replyFormatter(style, data, values, key, stack) {\n if (style == 'IM' || style == 'VD') {\n const isImage = style == 'IM';\n const attr = isImage ? inlineImageAttr.call(this, {key: key}, data) :\n inlineVideoAttr.call(this, {key: key}, data);\n\n let loadedPromise;\n try {\n loadedPromise = cancelablePromise(quoteImageOrVideo.call(this, data, style == 'VD'));\n } catch (error) {\n console.warn(\"Failed to quote image:\", error.message);\n loadedPromise = cancelablePromise(error);\n }\n attr.whenDone = loadedPromise;\n values = [React.createElement(LazyImage, attr, null), ' ', attr.alt];\n return React.createElement(React.Fragment, {key: key}, values);\n } else if (style == 'QQ') {\n if (stack.includes('QQ')) {\n // Quote inside quote when forwarding a message.\n return React.createElement('span', {key: key},\n [format_quote, ' ']);\n }\n\n const attr = Drafty.attrValue('QQ', data) || {};\n attr.key = key;\n attr.className = 'reply-quote'\n return React.createElement(Drafty.tagName('QQ'), attr, values);\n }\n return quoteFormatter.call(this, style, data, values, key);\n}\n","// A single topic or user.\nimport React from 'react';\nimport { FormattedMessage, injectIntl } from 'react-intl';\n\nimport ContactBadges from './contact-badges.jsx';\nimport LetterTile from './letter-tile.jsx';\nimport UnreadBadge from './unread-badge.jsx';\n\nimport { Drafty } from 'tinode-sdk';\n\nimport { previewFormatter } from '../lib/formatters.js';\nimport { deliveryMarker } from '../lib/utils.js';\n\nclass Contact extends React.Component {\n constructor(props) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleContextClick = this.handleContextClick.bind(this);\n }\n\n handleClick(e) {\n e.preventDefault();\n e.stopPropagation();\n if (this.props.onSelected) {\n // Index this.props.index is used by GroupManager.\n this.props.onSelected(this.props.item, this.props.index);\n }\n }\n\n handleContextClick(e) {\n e.preventDefault();\n e.stopPropagation();\n this.props.showContextMenu({ topicName: this.props.item, y: e.pageY, x: e.pageX });\n }\n\n render() {\n let title = this.props.title;\n if (!title) {\n title =
: null}\n \n {contactNodes}\n
\n :\n null\n }\n \n \n );\n }\n\n return (\n {names[c]} \n {skip.indexOf(c) < 0 ?\n {this.props.compare ? \n : null}\n
: null}\n \n \n {this.props.compare ?\n
\n \n :\n null}\n \n {items}\n {this.props.modeTitle} \n {this.props.compareTitle} \n
\n
\n \n
: null}\n
\n {messageNodes}\n
\n
\n \n \n \n
field: the URL must be a relative URL or\n// have http:, https:, blob: or data: scheme.\n// In case of data: scheme, the URL must must be of the right MIME type such as 'data:{mimeMajor}/XXXX;base64,'.\nexport function sanitizeUrlForMime(url, mimeMajor) {\n if (!url) {\n return null;\n }\n\n const sanitizedUrl = sanitizeUrl(url);\n if (sanitizedUrl) {\n return sanitizedUrl;\n }\n\n // Is this a data: URL of the appropriate mime type?\n const re = new RegExp(`data:${mimeMajor}\\/[a-z0-9.-]+;base64,`, 'i');\n if (re.test(url.trim())) {\n return url;\n }\n\n return null;\n}\n\n// Append query parameter 'asatt=1' to the URL.\n// It will cause Tinode server to add 'Content-Disposition: attachment' header when serving it.\n// The URL is a string. The URL here is always absolute.\nexport function urlAsAttachment(url) {\n // TODO: check if URL is local or remote, i.e. compare to window.location.origin.\n /*\n if (typeof window.location == 'object') {\n if (!url.startsWith(window.location.origin)) {\n return url;\n }\n }\n */\n // Check if the URL is a data or blob. Do not alter such URLs.\n if (url.startsWith('data:') || url.startsWith('blob:')) {\n return url;\n }\n\n // Split URL into host+path, query, fragment.\n let query = '', fragment = '';\n const idxF = url.indexOf('#');\n if (idxF > 0) {\n fragment = url.substring(idxF+1);\n url = url.substring(0, idxF);\n }\n const idxQ = url.indexOf('?');\n if (idxQ > 0) {\n query = url.substring(idxQ+1);\n url = url.substring(0, idxQ);\n }\n // Add parameter and reassemble.\n const params = new URLSearchParams(query);\n params.append('asatt', '1');\n return `${url}?${params.toString()}` + (fragment ? `#${fragment}` : '');\n}\n\n// Given message's received status, return name and color of a delivery indicator icon.\nexport function deliveryMarker(received) {\n switch (received) {\n case Tinode.MESSAGE_STATUS_SENDING:\n return { name: 'access_time' }; // watch face\n case Tinode.MESSAGE_STATUS_FAILED:\n case Tinode.MESSAGE_STATUS_FATAL:\n return { name: 'warning', color: 'danger-color' }; // yellow icon /!\\\n case Tinode.MESSAGE_STATUS_SENT:\n return { name: 'done' }; // checkmark\n case Tinode.MESSAGE_STATUS_RECEIVED:\n return { name: 'done_all' }; // double checkmark\n case Tinode.MESSAGE_STATUS_READ:\n return { name: 'done_all', color: 'blue' }; // blue double checkmark\n }\n return null;\n}\n\n// Wraps a promise to make it cancelable.\n// The parameter can be either a promise or an error. If it's an error, the wrapped promise is\n// created in a rejected state.\nexport function cancelablePromise(promise) {\n let hasCanceled = false;\n\n const wrappedPromise = promise instanceof Error ?\n Promise.reject(promise) :\n new Promise((resolve, reject) => {\n promise.then(\n result => hasCanceled ? reject({isCanceled: true}) : resolve(result),\n error => hasCanceled ? reject({isCanceled: true}) : reject(error)\n );\n });\n\n return {\n promise: wrappedPromise,\n cancel() {\n hasCanceled = true;\n },\n };\n};\n\n// Clips string to the specified length.\nexport function clipStr(str, length) {\n return str && str.substring(0, length);\n}\n","module.exports = tinode;","// Audio recorder widget.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat';\nimport { base64ToIntArray } from '../lib/blob-helpers';\n\n// Make canvas bigger than the element size to reduce blurring.\nconst CANVAS_UPSCALING = 2.0;\n// Thickness of a visualization bar.\nconst LINE_WIDTH = 3 * CANVAS_UPSCALING;\n// Spacing between two visualization bars.\nconst SPACING = 2 * CANVAS_UPSCALING;\n// Color of histogram bars.\nconst BAR_COLOR = '#888A';\nconst BAR_COLOR_DARK = '#666C';\nconst THUMB_COLOR = '#444E';\n// Minimum number of amplitude bars to draw.\nconst MIN_PREVIEW_LENGTH = 16;\n\nconst messages = defineMessages({\n icon_title_play: {\n id: 'icon_title_play',\n defaultMessage: 'Play recording',\n description: 'Icon tool tip for starting audio playback'\n }\n});\n\nclass AudioPlayer extends React.PureComponent {\n constructor(props) {\n super(props);\n\n let preview = base64ToIntArray(this.props.preview);\n if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\n preview = null;\n }\n\n this.state = {\n canPlay: false,\n playing: false,\n currentTime: '0:00',\n duration: this.props.duration > 0 ? secondsToTime(this.props.duration / 1000) : '-:--',\n longMin: this.props.duration >= 600000,\n preview: preview\n };\n\n this.initAudio = this.initAudio.bind(this);\n this.initCanvas = this.initCanvas.bind(this);\n this.resampleBars = this.resampleBars.bind(this);\n this.visualize = this.visualize.bind(this);\n\n this.handlePlay = this.handlePlay.bind(this);\n this.handleSeek = this.handleSeek.bind(this);\n this.handleError = this.handleError.bind(this);\n\n this.audioPlayer = null;\n\n this.viewBuffer = [];\n this.canvasRef = React.createRef();\n }\n\n componentDidMount() {\n if (this.props.src) {\n this.initAudio();\n }\n\n this.initCanvas();\n }\n\n componentWillUnmount() {\n if (this.audioPlayer) {\n this.audioPlayer.onloadedmetadata = null;\n this.audioPlayer.ontimeupdate = null;\n this.audioPlayer.onended = null;\n this.audioPlayer.pause();\n this.audioPlayer = null;\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.src != prevProps.src) {\n this.initAudio();\n }\n\n if (this.props.preview != prevProps.preview) {\n let preview = base64ToIntArray(this.props.preview);\n if (!Array.isArray(preview) || preview.length < MIN_PREVIEW_LENGTH) {\n preview = null;\n }\n this.setState({preview: preview}, this.initCanvas);\n }\n }\n\n initAudio() {\n this.audioPlayer = new Audio(this.props.src);\n this.audioPlayer.onloadedmetadata = _ => this.setState({canPlay: true});\n this.audioPlayer.ontimeupdate = _ => this.setState({\n currentTime: secondsToTime(this.audioPlayer.currentTime, this.state.longMin)\n });\n this.audioPlayer.onended = _ => {\n this.audioPlayer.currentTime = 0;\n this.setState({playing: false, currentTime: secondsToTime(0, this.state.longMin)})\n }\n }\n\n initCanvas() {\n // Force canvas aspect ratio to match one of the element + upscale canvas to reduce blurring.\n this.canvasRef.current.width = this.canvasRef.current.offsetWidth * CANVAS_UPSCALING;\n this.canvasRef.current.height = this.canvasRef.current.offsetHeight * CANVAS_UPSCALING;\n\n this.canvasContext = this.canvasRef.current.getContext('2d');\n this.canvasContext.lineCap = 'round';\n\n this.viewBuffer = this.resampleBars(this.state.preview);\n this.visualize();\n }\n\n // Draw amplitude of sound.\n visualize() {\n if (!this.canvasRef.current) {\n return;\n }\n\n const width = this.effectiveWidth;\n const height = this.canvasRef.current.height;\n\n this.canvasContext.lineWidth = LINE_WIDTH;\n\n const drawFrame = _ => {\n if (!this.canvasRef.current || !this.audioPlayer) {\n // The component is unmounted.\n return;\n }\n\n this.canvasContext.clearRect(0, 0, this.canvasRef.current.width, height);\n\n if (this.viewBuffer) {\n if (this.state.playing) {\n window.requestAnimationFrame(drawFrame);\n }\n\n // Current playback position.\n const thumbAt = this.props.duration ?\n Math.max(0, Math.min(this.audioPlayer.currentTime * 1000 / this.props.duration, 1)) * (width - LINE_WIDTH * 2) : -1;\n\n // Draw amplitude bars.\n this.canvasContext.beginPath();\n this.canvasContext.strokeStyle = BAR_COLOR_DARK;\n for (let i = 0; i < this.viewBuffer.length; i++) {\n let x = 1 + i * (LINE_WIDTH + SPACING) + LINE_WIDTH * 0.5;\n let y = Math.max(this.viewBuffer[i] * height * 0.9, 1);\n\n const color = x < thumbAt ? BAR_COLOR_DARK : BAR_COLOR;\n if (this.canvasContext.strokeStyle != color) {\n this.canvasContext.stroke();\n this.canvasContext.beginPath();\n this.canvasContext.strokeStyle = color;\n }\n\n this.canvasContext.moveTo(x, (height - y) * 0.5);\n this.canvasContext.lineTo(x, (height + y) * 0.5);\n }\n // Actually draw the bars on canvas.\n this.canvasContext.stroke();\n\n // Draw thumb.\n if (this.props.duration) {\n this.canvasContext.beginPath();\n this.canvasContext.arc(thumbAt + LINE_WIDTH * 2, height * 0.5, LINE_WIDTH * 2, 0, 2 * Math.PI);\n this.canvasContext.fillStyle = THUMB_COLOR;\n this.canvasContext.fill();\n }\n }\n }\n\n drawFrame();\n }\n\n // Quick and dirty downsampling of the original preview bars into a smaller (or equal) number of bars we can display here.\n resampleBars(original) {\n const dstCount = ((this.canvasRef.current.width - SPACING) / (LINE_WIDTH + SPACING)) | 0;\n // Remove extra padding on the right due to fractional bar which is not drawn.\n this.effectiveWidth = dstCount * (LINE_WIDTH + SPACING) + SPACING;\n\n if (!Array.isArray(original) || original.length == 0) {\n return Array.apply(null, Array(dstCount)).map(_ => 0.01);\n }\n\n const factor = original.length / dstCount;\n let amps = [];\n let maxAmp = -1;\n for (let i=0; i
{e.target.onerror = null; e.target.src=\"../img/broken_image.png\"}} />;\n } else {\n avatar = null;\n }\n return avatar;\n }\n}\n","// Utility class for hash navigation.\n\nexport default class HashNavigation {\n // Parse hash as in http://www.example.com/path#hash as if it were\n // path and arguments.\n static parseUrlHash(hash) {\n // Split 'path/?args' into 'path/' and 'args', path -> parts[0], args->path[1].\n const parts = hash.split('?', 2);\n const params = {};\n let path = [];\n if (parts[0]) {\n path = parts[0].replace('#', '').split('/');\n }\n if (parts[1]) {\n parts[1].split('&').forEach((arg) => {\n // Can't use split() because the value may contain '='.\n const eq = arg.indexOf('=');\n if (eq > 0) {\n params[arg.slice(0, eq)] = decodeURIComponent(arg.slice(eq + 1));\n }\n });\n }\n return {path: path, params: params};\n }\n\n static navigateTo(url) {\n window.location.hash = url;\n }\n\n static composeUrlHash(path, params) {\n let url = path.join('/');\n const args = [];\n for (const key in params) {\n if (params.hasOwnProperty(key)) {\n if (params[key] !== undefined) {\n args.push(key + '=' + encodeURIComponent(params[key]));\n }\n }\n }\n if (args.length > 0) {\n url += '?' + args.join('&');\n }\n return url;\n }\n\n static addUrlParam(hash, key, value) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.params[key] = value;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static removeUrlParam(hash, key) {\n const parsed = HashNavigation.parseUrlHash(hash);\n delete parsed.params[key];\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlSidePanel(hash, sidepanel) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.path[0] = sidepanel;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlInfoPanel(hash, infopanel) {\n const parsed = HashNavigation.parseUrlHash(hash);\n if (infopanel) {\n parsed.params.info = infopanel;\n } else {\n delete parsed.params.info;\n }\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n\n static setUrlTopic(hash, topic) {\n const parsed = HashNavigation.parseUrlHash(hash);\n parsed.path[1] = topic;\n // Close InfoView on topic change.\n delete parsed.params.info;\n return HashNavigation.composeUrlHash(parsed.path, parsed.params);\n }\n}\n","module.exports = ReactIntl;","// Helper functions for storing values in localStorage.\n// By default localStorage can store only strings, not objects or other types.\n\nexport default class LocalStorageUtil {\n // Replace old object with the new one.\n static setObject(key, value) {\n localStorage.setItem(key, JSON.stringify(value));\n }\n\n // Get stored object.\n static getObject(key) {\n const value = localStorage.getItem(key);\n return value && JSON.parse(value);\n }\n\n // Partially or wholly update stored object.\n static updateObject(key, value) {\n const oldVal = this.getObject(key);\n this.setObject(key, Object.assign(oldVal || {}, value));\n }\n\n // Just a wrapper.\n static removeItem(key) {\n localStorage.removeItem(key);\n }\n}\n","// Short representation of time in the past.\nexport function shortDateFormat(then, locale) {\n locale = locale || window.navigator.userLanguage || window.navigator.language;\n const now = new Date();\n if (then.getFullYear() == now.getFullYear()) {\n // Same year.\n if (then.getMonth() == now.getMonth() && then.getDate() == now.getDate()) {\n // Same month and day, show time only.\n return then.toLocaleTimeString(locale, {hour12: false, hour: '2-digit', minute: '2-digit'});\n }\n // Different month and/or day, show month day, time.\n return then.toLocaleDateString(locale,\n {hour12: false, month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit'});\n }\n // Different year: just show the date.\n return then.toLocaleDateString(locale, {year: 'numeric', month: 'short', day: 'numeric'});\n}\n\n// Representation a date relative to now.\nexport function relativeDateFormat(then, locale) {\n locale = locale || window.navigator.userLanguage || window.navigator.language;\n const now = new Date();\n const thenDays = Math.floor((then.getTime() - then.getTimezoneOffset() * 60_000) / 86_400_000);\n const nowDays = Math.floor((now.getTime() - now.getTimezoneOffset() * 60_000) / 86_400_000);\n const diff = thenDays - nowDays;\n if (Math.abs(diff) < 2) {\n // Today or yesterday.\n return new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).format(diff, 'day')\n }\n // More than two days: just show the date.\n return new Intl.DateTimeFormat(locale).format(then);\n}\n\n// Convert seconds to [hours:]minutes:seconds, i.e. 156 sec -> 2:36, 3756 sec -> 1:02:36.\n// If
fixedMins is true, then minutes are represented by at least two digits.\nexport function secondsToTime(seconds, fixedMin) {\n if (typeof seconds != 'number') {\n return '';\n }\n\n let min = (Math.floor(seconds / 60) | 0) % 60;\n let hours = Math.floor(seconds / 3600) | 0;\n\n if (fixedMin || hours > 0) {\n min = min < 10 ? `0${min}` : min;\n }\n let sec = (seconds | 0) % 60;\n sec = sec < 10 ? `0${sec}` : sec;\n if (hours == 0) {\n return `${min}:${sec}`;\n }\n return `${hours}:${min}:${sec}`;\n}\n\n// Convert a number of bytes to human-readable format.\nexport function bytesToHumanSize(bytes) {\n if (!bytes || bytes == 0) {\n return '0 Bytes';\n }\n\n const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n const bucket = Math.min(Math.floor(Math.log2(bytes) / 10) | 0, sizes.length-1);\n const count = bytes / Math.pow(1024, bucket);\n const round = bucket > 0 ? (count < 3 ? 2 : (count < 30 ? 1 : 0)) : 0;\n return count.toFixed(round) + ' ' + sizes[bucket];\n}\n\n// Shorten a file name to be under maxLength by clipping out the middle.\nexport function shortenFileName(filename, maxLength) {\n if (typeof filename != 'string') {\n return filename;\n }\n return filename.length > maxLength ?\n filename.slice(0, maxLength/2 - 1) + '…' + filename.slice(1 - maxLength/2) : filename;\n}\n\n// Get 32 bit integer hash value for a string. Ideally it should produce the same value\n// as Java's String#hash().\nfunction stringToColorHash(value) {\n let hash = 0;\n value = '' + value;\n for (let i = 0; i < value.length; i++) {\n hash = ((hash << 5) - hash) + value.charCodeAt(i);\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n}\n\n// User avatar letter color id.\nexport function letterTileColorId(userId) {\n return Math.abs(stringToColorHash(userId)) % 16;\n}\n\n// Converts user or topic ID to a CSS color class. Ideally it should produce the same color value as Java version.\n// params:\n// - {string} id: user or topic ID\n// - {boolean} light: light or dark version of the color.\n// - {boolean} fg: foreground (text) or background color.\nexport function idToColorClass(id, light, fg) {\n return (light ? 'lt-' : 'dk-') + (fg ? 'fg-' : 'bg-') + letterTileColorId(id);\n}\n\n// Takes ISO Alpha-2 country code, like 'US' and converts it to a flag emoji.\nexport function flagEmoji(countryCode) {\n const codePoints = countryCode\n .toUpperCase()\n .split('')\n .map(char => 0x1F1A5 + char.charCodeAt());\n return String.fromCodePoint(...codePoints);\n}\n","import { PACKAGE_VERSION } from './version.js';\n\n// Name of this application, used in the User-Agent.\nexport const APP_NAME = 'TinodeWeb/' + (PACKAGE_VERSION || '0.21');\n\n// API key. Use https://github.com/tinode/chat/tree/master/keygen to generate your own\nexport const API_KEY = 'AQEAAAABAAD_rAp4DJh05a1HAwFT3A6K';\n\n// The array of possible hosts to connect to.\nexport const KNOWN_HOSTS = {hosted: 'web.tinode.co', local: 'localhost:6060'};\n\n// Default host name and port to connect to.\nexport const DEFAULT_HOST = KNOWN_HOSTS.hosted;\n\n// Enable console logging.\nexport const LOGGING_ENABLED = true;\n\n// Minimum time between two keypress notifications, milliseconds.\nexport const KEYPRESS_DELAY = 3_000;\n// Delay before sending a read notification, milliseconds.\nexport const READ_DELAY = 1_500;\n\n// The default shortest allowed tag length. Matches the value on the server.\nexport const MIN_TAG_LENGTH = 2;\n// The default greatest allowed tag length. Matches the value on the server.\nexport const MAX_TAG_LENGTH = 96;\n// The default maximum number of tags allowed. Matches the value on the server.\nexport const MAX_TAG_COUNT = 16;\n\n// Access mode for P2P subscriptions initiated by the current user.\nexport const DEFAULT_P2P_ACCESS_MODE = 'JRWPS';\n// Access mode for new group topics created by the current user.\nexport const NEW_GRP_ACCESS_MODE = 'JRWPSAO';\n// Access mode for a channel.\nexport const CHANNEL_ACCESS_MODE = 'JR';\n\n// Access mode for no access.\nexport const NO_ACCESS_MODE = 'N';\n\n// Mediaquery breakpoint between desktop and mobile, in px. Should match the value\n// in @media (max-size: 640px) in base.css\nexport const MEDIA_BREAKPOINT = 640;\n// Size of css 'rem' unit in pixels. Default 1rem = 10pt = 13px.\nexport const REM_SIZE = 13;\n\n// Size of the avatar image: when image dimensions are greater or the image is not square, it's resized to\n// a square of this size or less.\nexport const AVATAR_SIZE = 384;\n\n// Maximum size of an avatar in bytes for sending in-band. Bigger avatars will be sent out of band (as uploads).\nexport const MAX_AVATAR_BYTES = 4096;\n\n// Size of the broken_image shown in MessagesView\nexport const BROKEN_IMAGE_SIZE = 32;\n\n// Size of video preview when dimensions are missing.\nexport const NO_DIMENSIONS_VIDEO = 128;\n\n// Number of chat messages to fetch in one call.\nexport const MESSAGES_PAGE = 24;\n\n// Default maximum in-band (included directly into the message) attachment size which fits into\n// a message of 256K in size. Used when the server-provided value is unavailable. The actual\n// binary size of the attachment should be smaller due to base64 encoding expansion and some overhead,\n// for instance 1024 bytes.\n// Increase this limit to a greater value in production, if desired. Also increase\n// max_message_size in the server config.\nexport const MAX_INBAND_ATTACHMENT_SIZE = 262_144;\n\n// Default absolute maximum attachment size to be used with the server = 8MB.\n// Used when the server-provided value is unavailable. Increase to something like 100MB in production.\nexport const MAX_EXTERN_ATTACHMENT_SIZE = 1 << 23;\n\n// Maximum allowed linear dimension (pixels) of an image sent inline. Larger images will be shrunk\n// to make the larger dimension fit under this size. You may want to adjust it to 1600 or\n// 2400 for production.\nexport const MAX_IMAGE_DIM = 1024;\n\n// Linear dimensions of image preview: shrink image under this size for previews.\nexport const IMAGE_PREVIEW_DIM = 64;\n\n// Linear dimensions of video screencapture: shrink image under this size for previews.\nexport const VIDEO_PREVIEW_DIM = 96;\n\n// Linear dimensions of image thumbnail: shrink image under this size for thumbnails in reply quote previews.\nexport const IMAGE_THUMBNAIL_DIM = 36;\n// Width of video thumbnail: allow it to be wider, but not taller. Use IMAGE_THUMBNAIL_DIM for height.\nexport const VIDEO_THUMBNAIL_WIDTH = 48;\n\n// Maximum number of online users to be shown in a topic title bar. Others will be\n// hidden under \"+X more\"\nexport const MAX_ONLINE_IN_TOPIC = 4;\n\n// Maximum length of user name, topic title, and private comment.\nexport const MAX_TITLE_LENGTH = 60;\n// Maximum length of topic description.\nexport const MAX_TOPIC_DESCRIPTION_LENGTH = 360;\n// Maximum length of user name when displaying a video call.\nexport const MAX_PEER_TITLE_LENGTH = 20;\n\n// Length of message previews in chat list, in characters.\nexport const MESSAGE_PREVIEW_LENGTH = 80;\n\n// Length of a quote in quoted reply (for outgoing messages).\nexport const QUOTED_REPLY_LENGTH = 30;\n// Length of a preview of a forwarded message.\nexport const FORWARDED_PREVIEW_LENGTH = 84;\n// Length of preview for a message being edited.\nexport const EDIT_PREVIEW_LENGTH = 48;\n\n// Minimum duration of an audio recording in milliseconds (2 sec).\nexport const MIN_DURATION = 2_000;\n// Maximum duration of an audio recording in milliseconds (10 min).\nexport const MAX_DURATION = 600_000;\n\n// Link for \"Contact Us\".\nexport const LINK_CONTACT_US = 'mailto:support@tinode.co';\n\n// Link to Privacy Policy.\nexport const LINK_PRIVACY_POLICY = 'https://tinode.co/privacy.html';\n\n// Link to Terms of Service.\nexport const LINK_TERMS_OF_SERVICE = 'https://tinode.co/terms.html';\n\n// When user starts a P2P topic, automatic subscription does not\n// happen until the first message. Setting this option to true enables\n// immediate subscription.\nexport const IMMEDIATE_P2P_SUBSCRIPTION = false;\n\n// URL schemes permitted to appear in links (i.e. no javascript: scheme).\nexport const CLICKABLE_URL_SCHEMES = ['http', 'https', 'ftp', 'ftps'];\n\n// Size of the QR code in the app.\nexport const QRCODE_SIZE = 128;\n\n// How much time has to pass to consider computer awoken from sleep (80 sec).\n// Chrome throttles ticker events in inactive tabs to once per minute. This\n// value ensures that these once-a-minute events do not trigger a reconnect.\nexport const WAKE_UP_TIMEOUT = 80000;\n// Timer interval between checks if computer woke up from sleep (1 sec).\nexport const WAKE_UP_TICK = 1000;\n","import React from 'react';\n\nimport LetterTile from './letter-tile.jsx';\nimport LoadSpinner from './load-spinner.jsx';\n\nimport { sanitizeUrlForMime } from '../lib/utils.js';\n\nimport { AVATAR_SIZE } from '../config.js';\n\nexport default class AvatarUpload extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n source: props.avatar\n };\n\n this.handleFileReceived = this.handleFileReceived.bind(this);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.avatar != prevProps.avatar) {\n this.setState({source: this.props.avatar});\n }\n }\n\n handleFileReceived(e) {\n const image = e.target.files[0];\n this.props.onImageUpdated(image.type, URL.createObjectURL(image), image.name);\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n render() {\n // Randomize id value in case more than one AvatarUpload is shown\n // at the same time.\n const randId = 'file-input-avatar-' + ('' + Math.random()).substring(0, 4);\n const className = 'avatar-upload' + (this.props.readOnly ? ' read-only' : '');\n return (\n :\n this.props.readOnly && this.props.uid ?\n
\n {menu}\n
\n );\n }\n}\n\nexport default injectIntl(ContextMenu);\n","import React from 'react';\n\nconst icon_mapping = {'muted': 'notifications_off', 'banned': 'block', 'staff': 'verified_user'};\n\n/* Contact's labels: [you], or icons [muted], [blocked] */\nexport default class ContactBadges extends React.PureComponent {\n render() {\n let badges = null;\n if (this.props.badges && this.props.badges.length > 0) {\n badges = [];\n this.props.badges.map((b) => {\n const color = (b.color ? ' ' + b.color : '');\n if (b.icon) {\n badges.push({icon_mapping[b.icon] || b.icon});\n } else {\n badges.push({b.name});\n }\n });\n return <>{badges}>;\n }\n return null;\n }\n};\n","// The counter of unread messages in the topic.\nimport React from 'react';\n\nexport default class UnreadBadge extends React.PureComponent {\n render() {\n return (this.props.count > 0 ?\n {this.props.count > 9 ? \"9+\" : this.props.count}\n : null);\n }\n};\n","// Chat message describing a video or voice call.\n\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nimport { secondsToTime } from '../lib/strformat.js';\n\nexport default class CallMessage extends React.PureComponent {\n render() {\n const isCallDropped = ['busy', 'declined', 'disconnected', 'missed'].includes(this.props.callState);\n const successClass = 'material-icons medium ' + (isCallDropped ? 'red' : 'green');\n const callIcon = this.props.incoming ?\n (isCallDropped ? 'call_missed' : 'call_received') :\n (isCallDropped ? 'call_missed_outgoing' : 'call_made');\n let duration;\n if (isCallDropped) {\n switch (this.props.callState) {\n case 'busy':\n duration =
}\n .\n el = UploadingImage;\n }\n\n return el;\n}\n\n// Additional processing of image data.\nfunction handleVideoData(el, data, attr) {\n if (!data) {\n attr.src = 'img/broken_video.png';\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n };\n return el;\n }\n attr.className = 'inline-image';\n const dim = fitImageSize(data.width, data.height,\n this.viewportWidth > 0 ? Math.min(this.viewportWidth - REM_SIZE * 6.5, REM_SIZE * 34.5) :\n REM_SIZE * 34.5, REM_SIZE * 24, false) ||\n {dstWidth: NO_DIMENSIONS_VIDEO, dstHeight: NO_DIMENSIONS_VIDEO};\n attr.style = {\n width: dim.dstWidth + 'px',\n height: dim.dstHeight + 'px',\n // Looks like a Chrome bug: broken image does not respect 'width' and 'height'.\n minWidth: dim.dstWidth + 'px',\n minHeight: dim.dstHeight + 'px'\n };\n if (!Drafty.isProcessing(data)) {\n attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image'));\n attr.alt = data.name;\n if (data.ref || data.val) {\n attr.onClick = this.onVideoPreview;\n attr.loading = 'lazy';\n }\n el = InlineVideo;\n } else {\n // Use custom element instead of
.\n el = UploadingImage;\n }\n\n return el;\n}\n\n// Converts Drafty object into a one-line preview. 'this' is set by the caller.\n// 'this' must contain:\n// formatMessage: this.props.intl.formatMessage\n// messages: formatjs messages defined with defineMessages.\nexport function previewFormatter(style, data, values, key) {\n if (!style) {\n // Unformatted.\n return values;\n }\n\n let el = Drafty.tagName(style);\n const attr = { key: key };\n switch (style) {\n case 'AU':\n // Voicemail as '[mic] 0:00'.\n el = React.Fragment;\n values = [mic, ' ', secondsToTime(data.duration/1000)];\n break;\n case 'BR':\n // Replace new line with a space.\n el = React.Fragment;\n values = [' '];\n break;\n case 'HL':\n // Make highlight less prominent in preview.\n attr.className = 'highlight preview';\n break;\n case 'LN':\n case 'MN':\n // Disable links in previews.\n el = 'span';\n break;\n case 'IM':\n // Replace image with '[icon] Image'.\n el = React.Fragment;\n values = [photo, ' ', this.formatMessage(messages.drafty_image)];\n break;\n case 'BN':\n el = 'span';\n attr.className = 'flat-button faux';\n break;\n case 'FM':\n el = React.Fragment;\n values = [dashboard,\n this.formatMessage(messages.drafty_form)].concat(' ', values || []);\n break;\n case 'RW':\n el = React.Fragment;\n break;\n case 'EX':\n if (data) {\n if (data.mime == 'application/json') {\n // Ignore JSON attachments: they are form response payloads.\n return null;\n }\n // Clear payload.\n delete data.val;\n delete data.ref;\n }\n el = React.Fragment;\n values = [attachment, ' ', this.formatMessage(messages.drafty_attachment)];\n break;\n case 'VC':\n el = CallStatus;\n if (data) {\n attr.callState = data.state;\n attr.incoming = data.incoming;\n attr.duration = data.duration;\n }\n values = null;\n break;\n case 'QQ':\n case 'HD':\n el = null;\n values = null;\n break;\n case 'VD':\n // Replace image with '[icon] Video'.\n el = React.Fragment;\n values = [play_circle_outline, ' ', this.formatMessage(messages.drafty_video)];\n break;\n default:\n if (!el) {\n // Unknown element.\n el = React.Fragment;\n values = [extension, ' ', this.formatMessage(messages.drafty_unknown)];\n }\n break;\n }\n if (!el) {\n return values;\n }\n return React.createElement(el, attr, values);\n};\n\n// Converts Drafty object into a quoted reply; 'this' is set by the caller.\nfunction inlineImageAttr(attr, data) {\n attr.style = {\n width: IMAGE_THUMBNAIL_DIM + 'px',\n height: IMAGE_THUMBNAIL_DIM + 'px',\n maxWidth: IMAGE_THUMBNAIL_DIM + 'px',\n maxHeight: IMAGE_THUMBNAIL_DIM + 'px',\n }\n attr.className = 'inline-image';\n attr.alt = this.formatMessage(messages.drafty_image);\n if (!data) {\n attr.src = 'img/broken_image.png';\n } else {\n attr.src = attr.src || 'img/broken_image.png';\n }\n attr.title = attr.alt;\n return attr;\n}\n\n// Converts Drafty object into a quoted reply; 'this' is set by the caller.\nfunction inlineVideoAttr(attr, data) {\n const dim = fitImageSize(data.width, data.height, VIDEO_THUMBNAIL_WIDTH, IMAGE_THUMBNAIL_DIM);\n attr.style = {\n width: dim.width + 'px',\n height: dim.height + 'px',\n maxWidth: VIDEO_THUMBNAIL_WIDTH + 'px',\n maxHeight: IMAGE_THUMBNAIL_DIM + 'px',\n }\n attr.className = 'inline-image';\n attr.alt = this.formatMessage(messages.drafty_video);\n attr.title = attr.alt;\n if (!data) {\n attr.src = 'img/broken_video.png';\n } else {\n attr.src = attr.src || 'img/broken_video.png';\n }\n return attr;\n}\n\n// Displays a portion of Drafty within 'QQ' quotes. 'this' is set by the caller.\n// 'this' must contain:\n// formatMessage: this.props.intl.formatMessage\n// messages: formatjs messages defined with defineMessages.\n// authorizeURL: this.props.tinode.authorizeURL\n// onQuoteClick: this.handleQuoteClick (optional)\nfunction quoteFormatter(style, data, values, key) {\n if (['BR', 'EX', 'IM', 'MN', 'VD'].includes(style)) {\n let el = Drafty.tagName(style);\n let attr = Drafty.attrValue(style, data) || {};\n attr.key = key;\n switch(style) {\n case 'BR':\n values = null;\n break;\n case 'IM':\n attr = inlineImageAttr.call(this, attr, data);\n values = [React.createElement('img', attr, null), ' ', attr.alt];\n el = React.Fragment;\n // Fragment attributes.\n attr = {key: key};\n break;\n case 'VD':\n attr = inlineVideoAttr.call(this, attr, data);\n values = [React.createElement('img', attr, null), ' ', attr.alt];\n el = React.Fragment;\n // Fragment attributes.\n attr = {key: key};\n break;\n case 'MN':\n el = 'span';\n attr.className = 'mention'\n if (data) {\n attr.className += ' ' + idToColorClass(data.val, false, true);\n }\n break;\n case 'EX':\n let fname;\n if (data) {\n if (data.mime == 'application/json') {\n // Ignore JSON attachments: they are form response payloads.\n return null;\n }\n fname = data.name;\n // Clear payload.\n delete data.val;\n delete data.ref;\n }\n el = React.Fragment;\n values = [attachment,\n shortenFileName(fname, 16) || this.formatMessage(messages.drafty_attachment)];\n break;\n }\n return React.createElement(el, attr, values);\n }\n return previewFormatter.call(this, style, data, values, key);\n}\n\n// Create image thumbnail suitable for inclusion in a quote.\nfunction quoteImageOrVideo(data, isVideo) {\n let promise;\n let bits, ref, mime;\n if (isVideo) {\n bits = data.preview;\n mime = data.premime || 'image/jpeg';\n ref = data.preref;\n } else {\n bits = data.val;\n mime = data.mime;\n ref = data.ref;\n }\n // Get the blob from the image data.\n if (bits) {\n const blob = base64ToBlob(bits, mime);\n if (!blob) {\n throw new Error(\"Invalid image\");\n }\n promise = Promise.resolve(blob);\n } else if (ref) {\n promise = fetch(this.authorizeURL(sanitizeUrlForMime(ref, 'image')))\n .then(evt => {\n if (evt.ok) {\n return evt.blob();\n } else {\n throw new Error(`Image fetch unsuccessful: ${evt.status} ${evt.statusText}`);\n }\n });\n } else {\n throw new Error(\"Missing image data\");\n }\n\n // Scale the blob.\n return promise\n .then(blob => {\n // If it's an image, cut the square from the center of the image and shrink it.\n // If it's a video, allow it to be rectantular.\n return imageScaled(blob, isVideo ? VIDEO_THUMBNAIL_WIDTH : IMAGE_THUMBNAIL_DIM, IMAGE_THUMBNAIL_DIM, -1, !isVideo)\n }).then(scaled => {\n if (isVideo) {\n data.premime = scaled.mime;\n } else {\n data.mime = scaled.mime;\n }\n data.size = scaled.blob.size;\n data.width = scaled.width;\n data.height = scaled.height;\n delete data.ref;\n delete data.preref;\n // Keeping the original file name, if provided: ex.data.name;\n\n data.src = URL.createObjectURL(scaled.blob);\n return blobToBase64(scaled.blob);\n }).then(b64 => {\n if (isVideo) {\n data.preview = b64.bits;\n } else {\n data.val = b64.bits;\n }\n return data;\n }).catch(err => {\n delete data.val;\n delete data.preview;\n delete data.src;\n data.width = IMAGE_THUMBNAIL_DIM;\n data.height = IMAGE_THUMBNAIL_DIM;\n // Rethrow.\n throw err;\n });\n}\n\n// Create a preview of a reply.\nexport function replyFormatter(style, data, values, key, stack) {\n if (style == 'IM' || style == 'VD') {\n const isImage = style == 'IM';\n const attr = isImage ? inlineImageAttr.call(this, {key: key}, data) :\n inlineVideoAttr.call(this, {key: key}, data);\n\n let loadedPromise;\n try {\n loadedPromise = cancelablePromise(quoteImageOrVideo.call(this, data, style == 'VD'));\n } catch (error) {\n console.warn(\"Failed to quote image:\", error.message);\n loadedPromise = cancelablePromise(error);\n }\n attr.whenDone = loadedPromise;\n values = [React.createElement(LazyImage, attr, null), ' ', attr.alt];\n return React.createElement(React.Fragment, {key: key}, values);\n } else if (style == 'QQ') {\n if (stack.includes('QQ')) {\n // Quote inside quote when forwarding a message.\n return React.createElement('span', {key: key},\n [format_quote, ' ']);\n }\n\n const attr = Drafty.attrValue('QQ', data) || {};\n attr.key = key;\n attr.className = 'reply-quote'\n return React.createElement(Drafty.tagName('QQ'), attr, values);\n }\n return quoteFormatter.call(this, style, data, values, key);\n}\n","// A single topic or user.\nimport React from 'react';\nimport { FormattedMessage, injectIntl } from 'react-intl';\n\nimport ContactBadges from './contact-badges.jsx';\nimport LetterTile from './letter-tile.jsx';\nimport UnreadBadge from './unread-badge.jsx';\n\nimport { Drafty } from 'tinode-sdk';\n\nimport { previewFormatter } from '../lib/formatters.js';\nimport { deliveryMarker } from '../lib/utils.js';\n\nclass Contact extends React.Component {\n constructor(props) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleContextClick = this.handleContextClick.bind(this);\n }\n\n handleClick(e) {\n e.preventDefault();\n e.stopPropagation();\n if (this.props.onSelected) {\n // Index this.props.index is used by GroupManager.\n this.props.onSelected(this.props.item, this.props.index);\n }\n }\n\n handleContextClick(e) {\n e.preventDefault();\n e.stopPropagation();\n this.props.showContextMenu({ topicName: this.props.item, y: e.pageY, x: e.pageX });\n }\n\n render() {\n let title = this.props.title;\n if (!title) {\n title =
: null}\n \n {contactNodes}\n
\n :\n null\n }\n \n \n );\n }\n\n return (\n {names[c]} \n {skip.indexOf(c) < 0 ?\n {this.props.compare ? \n : null}\n
: null}\n \n \n {this.props.compare ?\n
\n \n :\n null}\n \n {items}\n {this.props.modeTitle} \n {this.props.compareTitle} \n
\n
\n \n
: null}\n
\n {messageNodes}\n
\n
\n
¯∖_(ツ)_/¯","contacts_not_found_short":"لا توجد جهات اتصال تطابق \'\'{query}\'\'","credential_email_prompt":"البريد الإلكتروني للتسجيل","delete_account":"حذف الحساب","delete_account_warning":"هل أنت متأكد من أنك تريد حذف حسابك؟ لا يمكن التراجع عن هذا الإجراء.","delete_messages_warning":"هل أنت متأكد من أنك تريد حذف جميع الرسائل للجميع؟ لا يمكن التراجع عن هذا الإجراء.","download_action":"تحميل","drafty_attachment":"مرفق","drafty_form":"نموذج:","drafty_image":"صورة","email_dative":"البريد الإلكتروني","email_prompt":"البريد الإلكتروني، مثال: jdoe@example.com","enable_peers_messaging":"تفعيل","enter_confirmation_code_prompt":"رمز التأكيد","error_invalid_id":"معرف غير صالح","file_attachment_too_large":"حجم الملف {size} يتجاوز الحد {limit}.","forgot_password_link":"نسيت كلمة المرور؟","full_name_prompt":"الاسم الكامل، مثال: جون دو","granted_permissions":"ممنوح","group_has_no_members":"لا يوجد أعضاء","group_user_id_prompt":"معرف المجموعة أو المستخدم","image_caption_prompt":"وصف الصورة","invalid_content":"محتوى غير صالح","invalid_security_token":"رمز الأمان غير صالح","label_client":"العميل:","label_content_type":"نوع المحتوى:","label_default_access_mode":"وضع الوصول الافتراضي:","label_file_name":"اسم الملف:","label_group_members":"أعضاء المجموعة:","label_incognito_mode":"وضع التخفي:","label_message_sound":"صوت الرسالة:","label_muting_topic":"صامت:","label_other_user":"آخر","label_password":"كلمة المرور","label_permissions":"الصلاحيات:","label_private":"تعليق خاص","label_push_notifications":"تنبيهات الإشعارات:","label_push_notifications_disabled":"تنبيهات الإشعارات (يتطلب HTTPS):","label_reset_password":"إرسال بريد إلكتروني لإعادة تعيين كلمة المرور:","label_sdk":"SDK:","label_server":"الخادم:","label_server_address":"عنوان الخادم:","label_server_to_use":"الخادم المراد استخدامه:","label_size":"الحجم:","label_topic_name":"الاسم","label_user_contacts":"جهات الاتصال","label_user_id":"المعرف:","label_wire_transport":"نقل البيانات:","label_you":"أنت:","label_your_name":"اسمك","label_your_permissions":"صلاحياتك:","last_seen_timestamp":"آخر ظهور","leave_chat_warning":"هل أنت متأكد من أنك تريد مغادرة هذه المحادثة؟","link_contact_us":"اتصل بنا","link_privacy_policy":"سياسة الخصوصية","link_terms_of_service":"شروط الخدمة","login_prompt":"تسجيل الدخول","menu_item_archive_topic":"أرشفة","menu_item_block":"حظر","menu_item_clear_messages":"مسح الرسائل","menu_item_clear_messages_for_all":"مسح للجميع","menu_item_delete":"حذف","menu_item_delete_for_all":"حذف للجميع","menu_item_delete_topic":"حذف","menu_item_edit_permissions":"تعديل الصلاحيات","menu_item_info":"معلومات","menu_item_member_delete":"إزالة","menu_item_mute":"كتم","menu_item_reply":"رد","menu_item_restore_topic":"استعادة","menu_item_send_retry":"إعادة المحاولة","menu_item_unblock":"إلغاء الحظر","menu_item_unmute":"إلغاء الكتم","message_sending":"جاري الإرسال...","message_sending_failed":"فشل","messages_not_readable":"لا يمكن الوصول إلى الرسائل","messaging_disabled_prompt":"المراسلة معطلة","more_online_members":"+{overflow} آخرون","new_message_prompt":"رسالة جديدة","new_password_placeholder":"أدخل كلمة المرور الجديدة","no_connection":"لا يوجد اتصال","no_contacts":"ليس لديك جهات اتصال :-(","numeric_confirmation_code_prompt":"أرقام فقط","online_now":"متصل الآن","password_prompt":"كلمة المرور","password_unchanged_prompt":"لم يتغير","peers_messaging_disabled":"المراسلة معطلة للطرف الآخر","permission_admin":"الموافقة ({val})","permission_delete":"حذف ({val})","permission_join":"انضمام ({val})","permission_owner":"مالك ({val})","permission_pres":"تلقي الإشعارات ({val})","permission_read":"قراءة ({val})","permission_share":"مشاركة ({val})","permission_write":"كتابة ({val})","phone_dative":"هاتف","private_editing_placeholder":"مرئي لك فقط","push_init_failed":"فشل في تهيئة الإشعارات","reconnect_countdown":"تم قطع الاتصال. إعادة الاتصال خلال {seconds}...","reconnect_now":"حاول الآن","reload_update":"إعادة تحميل","report_chat_warning":"هل أنت متأكد من أنك تريد حظر والإبلاغ عن هذه المحادثة؟","requested_permissions":"مطلوب","save_attachment":"حفظ","search_for_contacts":"استخدم البحث للعثور على جهات الاتصال","search_no_results":"لم يسفر البحث عن أي نتائج","search_placeholder":"قائمة مثل alice@example.com، +17025550003...","sidepanel_title_acc_notifications":"الإشعارات","sidepanel_title_acc_support":"الدعم","sidepanel_title_account_settings":"إعدادات الحساب","sidepanel_title_archive":"المحادثات المؤرشفة","sidepanel_title_blocked":"المحادثات المحظورة","sidepanel_title_cred":"تأكيد بيانات الاعتماد","sidepanel_title_login":"تسجيل الدخول","sidepanel_title_newtpk":"بدء محادثة جديدة","sidepanel_title_register":"إنشاء حساب","sidepanel_title_reset":"إعادة تعيين كلمة المرور","sidepanel_title_settings":"الإعدادات","stay_logged_in":"البقاء متصلاً","tabtitle_find_user":"بحث","tabtitle_group_by_id":"بواسطة المعرف","tabtitle_new_group":"مجموعة جديدة","tags_editor_no_tags":"أضف بعض الوسوم","tags_not_found":"لا توجد وسوم محددة. أضف بعضها.","title_all_contacts":"جميع جهات الاتصال","title_group_members":"أعضاء المجموعة","title_manage_tags":"إدارة","title_not_found":"غير موجود","title_permissions":"الصلاحيات","title_tag_manager":"الوسوم (البحث والاكتشاف)","topic_block_warning":"هل أنت متأكد من أنك تريد حظر هذه المحادثة؟","topic_delete_warning":"هل أنت متأكد من أنك تريد حذف هذه المحادثة؟ لا يمكن التراجع عن هذا الإجراء.","topic_name_editing_placeholder":"اسم حر للمجموعة","unnamed_topic":"بدون اسم","update_available":"يتوفر تحديث.","upload_finishing":"جاري الإنهاء...","user_not_found":"غير موجود","description_editing_placeholder":"وصف اختياري","label_description":"الوصف","button_security":"الأمان","panel_title_crop":"اسحب للتعديل","panel_title_general":"عام","panel_title_members":"الأعضاء","panel_title_security":"الأمان","panel_title_info":"معلومات","permissions_anonymous":"مجهول","permissions_authenticated":"مصادق عليه","topic_delete":"حذف المحادثة","permissions_user":"صلاحيات المستخدم","password_reset_email_sent":"تم إرسال بريد إلكتروني يحتوي على رمز الأمان.","label_unarchive_topic":"مؤرشف:","menu_item_forward":"إعادة توجيه","forward_to":"إعادة توجيه إلى","forward_to_search_placeholder":"البحث عن جهات الاتصال","label_new_password":"كلمة المرور الجديدة","drafty_unknown":"غير مدعوم","calls_incoming":"مكالمة واردة","calls_outgoing":"مكالمة صادرة","calls_you_label":"أنت","menu_item_video_call":"مكالمة فيديو","already_in_call":"أنت بالفعل في مكالمة جارية!","call_cancelled":"تم الإلغاء","call_missed":"فائتة","call_declined":"تم الرفض","call_disconnected":"تم قطع الاتصال","label_use_secure_connection":"استخدام اتصال آمن","cred_confirmed_successfully":"تم التأكيد بنجاح","menu_item_edit":"تعديل","editing_message":"جاري التعديل","message_edited_marker":"، تم التعديل","icon_title_add_image":"إضافة صورة","icon_title_attach_file":"إرفاق ملف","icon_title_delete":"حذف التسجيل","icon_title_pause":"إيقاف مؤقت","icon_title_play":"تشغيل","icon_title_record_voice":"تسجيل رسالة صوتية","icon_title_resume":"استئناف","icon_title_send":"إرسال رسالة","drag_file":"اسحب الملف هنا","drafty_video":"تسجيل فيديو","call_in_progress":"جارية","menu_item_audio_call":"مكالمة","unrecognized_video_format":"تنسيق هذا الفيديو غير معروف","loading_note":"جاري التحميل...","password_i_have_code":"لدي رمز","label_reset_password_tel":"إرسال رسالة نصية لإعادة تعيين كلمة المرور:","mobile_phone_number":"رقم الهاتف المحمول","password_reset_sms_sent":"تم إرسال رسالة نصية تحتوي على رمز الأمان.","mobile_number_required":"رقم الهاتف المحمول مطلوب","current_email":"البريد الإلكتروني الحالي","current_phone":"رقم الهاتف الحالي","new_email":"بريد إلكتروني جديد","new_phone_number":"رقم هاتف جديد","change_email":"تغيير البريد الإلكتروني","change_phone":"تغيير رقم الهاتف","call_busy":"مشغول","failed_to_init_audio":"فشل في تهيئة تسجيل الصوت","password_reset_success":"تم إعادة تعيين كلمة المرور بنجاح","scan_qr_code":"مسح رمز QR"}');
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/umd/tinode.dev.js b/umd/tinode.dev.js
index 74141f95..8ffdcf11 100644
--- a/umd/tinode.dev.js
+++ b/umd/tinode.dev.js
@@ -286,9 +286,8 @@ class CBuffer {
getAt(at) {
return this.buffer[at];
}
- getLast(at) {
- at |= 0;
- return this.buffer.length > at ? this.buffer[this.buffer.length - 1 - at] : undefined;
+ getLast(filter) {
+ return filter ? this.buffer.findLast(filter) : this.buffer[this.buffer.length - 1];
}
put() {
let insert;
@@ -319,8 +318,8 @@ class CBuffer {
this.buffer = [];
}
forEach(callback, startIdx, beforeIdx, context) {
- startIdx = startIdx | 0;
- beforeIdx = beforeIdx || this.buffer.length;
+ startIdx = Math.max(0, startIdx | 0);
+ beforeIdx = Math.min(beforeIdx || this.buffer.length, this.buffer.length);
for (let i = startIdx; i < beforeIdx; i++) {
callback.call(context, this.buffer[i], i > startIdx ? this.buffer[i - 1] : undefined, i < beforeIdx - 1 ? this.buffer[i + 1] : undefined, i);
}
@@ -384,6 +383,7 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ EXPIRE_PROMISES_TIMEOUT: () => (/* binding */ EXPIRE_PROMISES_TIMEOUT),
/* harmony export */ LIBRARY: () => (/* binding */ LIBRARY),
/* harmony export */ LOCAL_SEQID: () => (/* binding */ LOCAL_SEQID),
+/* harmony export */ MAX_PINNED_COUNT: () => (/* binding */ MAX_PINNED_COUNT),
/* harmony export */ MESSAGE_STATUS_FAILED: () => (/* binding */ MESSAGE_STATUS_FAILED),
/* harmony export */ MESSAGE_STATUS_FATAL: () => (/* binding */ MESSAGE_STATUS_FATAL),
/* harmony export */ MESSAGE_STATUS_NONE: () => (/* binding */ MESSAGE_STATUS_NONE),
@@ -395,6 +395,9 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ MESSAGE_STATUS_TO_ME: () => (/* binding */ MESSAGE_STATUS_TO_ME),
/* harmony export */ PROTOCOL_VERSION: () => (/* binding */ PROTOCOL_VERSION),
/* harmony export */ RECV_TIMEOUT: () => (/* binding */ RECV_TIMEOUT),
+/* harmony export */ TAG_ALIAS: () => (/* binding */ TAG_ALIAS),
+/* harmony export */ TAG_EMAIL: () => (/* binding */ TAG_EMAIL),
+/* harmony export */ TAG_PHONE: () => (/* binding */ TAG_PHONE),
/* harmony export */ TOPIC_CHAN: () => (/* binding */ TOPIC_CHAN),
/* harmony export */ TOPIC_FND: () => (/* binding */ TOPIC_FND),
/* harmony export */ TOPIC_GRP: () => (/* binding */ TOPIC_GRP),
@@ -402,6 +405,7 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ TOPIC_NEW: () => (/* binding */ TOPIC_NEW),
/* harmony export */ TOPIC_NEW_CHAN: () => (/* binding */ TOPIC_NEW_CHAN),
/* harmony export */ TOPIC_P2P: () => (/* binding */ TOPIC_P2P),
+/* harmony export */ TOPIC_SLF: () => (/* binding */ TOPIC_SLF),
/* harmony export */ TOPIC_SYS: () => (/* binding */ TOPIC_SYS),
/* harmony export */ USER_NEW: () => (/* binding */ USER_NEW),
/* harmony export */ VERSION: () => (/* binding */ VERSION)
@@ -411,13 +415,14 @@ __webpack_require__.r(__webpack_exports__);
const PROTOCOL_VERSION = '0';
-const VERSION = _version_js__WEBPACK_IMPORTED_MODULE_0__.PACKAGE_VERSION || '0.21';
+const VERSION = _version_js__WEBPACK_IMPORTED_MODULE_0__.PACKAGE_VERSION || '0.24';
const LIBRARY = 'tinodejs/' + VERSION;
const TOPIC_NEW = 'new';
const TOPIC_NEW_CHAN = 'nch';
const TOPIC_ME = 'me';
const TOPIC_FND = 'fnd';
const TOPIC_SYS = 'sys';
+const TOPIC_SLF = 'slf';
const TOPIC_CHAN = 'chn';
const TOPIC_GRP = 'grp';
const TOPIC_P2P = 'p2p';
@@ -437,6 +442,10 @@ const EXPIRE_PROMISES_PERIOD = 1000;
const RECV_TIMEOUT = 100;
const DEFAULT_MESSAGES_PAGE = 24;
const DEL_CHAR = '\u2421';
+const MAX_PINNED_COUNT = 5;
+const TAG_ALIAS = 'alias:';
+const TAG_EMAIL = 'email:';
+const TAG_PHONE = 'tel:';
/***/ }),
@@ -782,7 +791,7 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ "default": () => (/* binding */ DB)
/* harmony export */ });
-const DB_VERSION = 1;
+const DB_VERSION = 3;
const DB_NAME = 'tinode-web';
let IDBProvider;
class DB {
@@ -845,6 +854,12 @@ class DB {
this.db.createObjectStore('message', {
keyPath: ['topic', 'seq']
});
+ const dellog = this.db.createObjectStore('dellog', {
+ keyPath: ['topic', 'low', 'hi']
+ });
+ dellog.createIndex('topic_clear', ['topic', 'clear'], {
+ unique: false
+ });
};
});
}
@@ -1117,21 +1132,50 @@ class DB {
});
}
readMessages(topicName, query, callback, context) {
+ query = query || {};
if (!this.isReady()) {
return this.disabled ? Promise.resolve([]) : Promise.reject(new Error("not initialized"));
}
+ const trx = this.db.transaction(['message']);
+ let result = [];
+ if (Array.isArray(query.ranges)) {
+ return new Promise((resolve, reject) => {
+ trx.onerror = event => {
+ this.#logger('PCache', 'readMessages', event.target.error);
+ reject(event.target.error);
+ };
+ let count = 0;
+ query.ranges.forEach(range => {
+ const key = range.hi ? IDBKeyRange.bound([topicName, range.low], [topicName, range.hi], false, true) : IDBKeyRange.only([topicName, range.low]);
+ trx.objectStore('message').getAll(key).onsuccess = event => {
+ const msgs = event.target.result;
+ if (msgs) {
+ if (callback) {
+ callback.call(context, msgs);
+ }
+ if (Array.isArray(msgs)) {
+ result = result.concat(msgs);
+ } else {
+ result.push(msgs);
+ }
+ }
+ count++;
+ if (count == query.ranges.length) {
+ resolve(result);
+ }
+ };
+ });
+ });
+ }
return new Promise((resolve, reject) => {
- query = query || {};
const since = query.since > 0 ? query.since : 0;
const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;
const limit = query.limit | 0;
- const result = [];
- const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);
- const trx = this.db.transaction(['message']);
trx.onerror = event => {
this.#logger('PCache', 'readMessages', event.target.error);
reject(event.target.error);
};
+ const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);
trx.objectStore('message').openCursor(range, 'prev').onsuccess = event => {
const cursor = event.target.result;
if (cursor) {
@@ -1150,7 +1194,119 @@ class DB {
};
});
}
- static #topic_fields = ['created', 'updated', 'deleted', 'read', 'recv', 'seq', 'clear', 'defacs', 'creds', 'public', 'trusted', 'private', 'touched', '_deleted'];
+ addDelLog(topicName, delId, ranges) {
+ if (!this.isReady()) {
+ return this.disabled ? Promise.resolve() : Promise.reject(new Error("not initialized"));
+ }
+ return new Promise((resolve, reject) => {
+ const trx = this.db.transaction(['dellog'], 'readwrite');
+ trx.onsuccess = event => {
+ resolve(event.target.result);
+ };
+ trx.onerror = event => {
+ this.#logger('PCache', 'addDelLog', event.target.error);
+ reject(event.target.error);
+ };
+ ranges.forEach(r => trx.objectStore('dellog').add({
+ topic: topicName,
+ clear: delId,
+ low: r.low,
+ hi: r.hi || r.low + 1
+ }));
+ trx.commit();
+ });
+ }
+ readDelLog(topicName, query) {
+ query = query || {};
+ if (!this.isReady()) {
+ return this.disabled ? Promise.resolve([]) : Promise.reject(new Error("not initialized"));
+ }
+ const trx = this.db.transaction(['dellog']);
+ let result = [];
+ if (Array.isArray(query.ranges)) {
+ return new Promise((resolve, reject) => {
+ trx.onerror = event => {
+ this.#logger('PCache', 'readDelLog', event.target.error);
+ reject(event.target.error);
+ };
+ let count = 0;
+ query.ranges.forEach(range => {
+ const hi = range.hi || range.low + 1;
+ const key = IDBKeyRange.bound([topicName, 0, range.low], [topicName, hi, Number.MAX_SAFE_INTEGER], false, true);
+ trx.objectStore('dellog').getAll(key).onsuccess = event => {
+ const entries = event.target.result;
+ if (entries) {
+ if (Array.isArray(entries)) {
+ result = result.concat(entries.map(entry => {
+ return {
+ low: entry.low,
+ hi: entry.hi
+ };
+ }));
+ } else {
+ result.push({
+ low: entries.low,
+ hi: entries.hi
+ });
+ }
+ }
+ count++;
+ if (count == query.ranges.length) {
+ resolve(result);
+ }
+ };
+ });
+ });
+ }
+ return new Promise((resolve, reject) => {
+ const since = query.since > 0 ? query.since : 0;
+ const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;
+ const limit = query.limit | 0;
+ trx.onerror = event => {
+ this.#logger('PCache', 'readDelLog', event.target.error);
+ reject(event.target.error);
+ };
+ let count = 0;
+ const result = [];
+ const range = IDBKeyRange.bound([topicName, 0, since], [topicName, before, Number.MAX_SAFE_INTEGER], false, true);
+ trx.objectStore('dellog').openCursor(range, 'prev').onsuccess = event => {
+ const cursor = event.target.result;
+ if (cursor) {
+ result.push({
+ low: cursor.value.low,
+ hi: cursor.value.hi
+ });
+ count += cursor.value.hi - cursor.value.low;
+ if (limit <= 0 || count < limit) {
+ cursor.continue();
+ } else {
+ resolve(result);
+ }
+ } else {
+ resolve(result);
+ }
+ };
+ });
+ }
+ maxDelId(topicName) {
+ if (!this.isReady()) {
+ return this.disabled ? Promise.resolve(0) : Promise.reject(new Error("not initialized"));
+ }
+ return new Promise((resolve, reject) => {
+ const trx = this.db.transaction(['dellog']);
+ trx.onerror = event => {
+ this.#logger('PCache', 'maxDelId', event.target.error);
+ reject(event.target.error);
+ };
+ const index = trx.objectStore('dellog').index('topic_clear');
+ index.openCursor(IDBKeyRange.bound([topicName, 0], [topicName, Number.MAX_SAFE_INTEGER]), 'prev').onsuccess = event => {
+ if (event.target.result) {
+ resolve(event.target.result.value);
+ }
+ };
+ });
+ }
+ static #topic_fields = ['created', 'updated', 'deleted', 'touched', 'read', 'recv', 'seq', 'clear', 'defacs', 'creds', 'public', 'trusted', 'private', '_aux', '_deleted'];
static #deserializeTopic(topic, src) {
DB.#topic_fields.forEach(f => {
if (src.hasOwnProperty(f)) {
@@ -2972,6 +3128,87 @@ if (true) {
/***/ }),
+/***/ "./src/fnd-topic.js":
+/*!**************************!*\
+ !*** ./src/fnd-topic.js ***!
+ \**************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": () => (/* binding */ TopicFnd)
+/* harmony export */ });
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config.js */ "./src/config.js");
+/* harmony import */ var _topic_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./topic.js */ "./src/topic.js");
+/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils.js */ "./src/utils.js");
+
+
+
+
+
+class TopicFnd extends _topic_js__WEBPACK_IMPORTED_MODULE_1__["default"] {
+ _contacts = {};
+ constructor(callbacks) {
+ super(_config_js__WEBPACK_IMPORTED_MODULE_0__.TOPIC_FND, callbacks);
+ }
+ _processMetaSubs(subs) {
+ let updateCount = Object.getOwnPropertyNames(this._contacts).length;
+ this._contacts = {};
+ for (let idx in subs) {
+ let sub = subs[idx];
+ const indexBy = sub.topic ? sub.topic : sub.user;
+ sub = (0,_utils_js__WEBPACK_IMPORTED_MODULE_2__.mergeToCache)(this._contacts, indexBy, sub);
+ updateCount++;
+ if (this.onMetaSub) {
+ this.onMetaSub(sub);
+ }
+ }
+ if (updateCount > 0 && this.onSubsUpdated) {
+ this.onSubsUpdated(Object.keys(this._contacts));
+ }
+ }
+ publish() {
+ return Promise.reject(new Error("Publishing to 'fnd' is not supported"));
+ }
+ setMeta(params) {
+ return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {
+ if (Object.keys(this._contacts).length > 0) {
+ this._contacts = {};
+ if (this.onSubsUpdated) {
+ this.onSubsUpdated([]);
+ }
+ }
+ });
+ }
+ checkTagUniqueness(tag, caller) {
+ return new Promise((resolve, reject) => {
+ this.subscribe().then(_ => this.setMeta({
+ desc: {
+ public: tag
+ }
+ })).then(_ => this.getMeta(this.startMetaQuery().withTags().build())).then(meta => {
+ if (!meta || !Array.isArray(meta.tags) || meta.tags.length == 0) {
+ resolve(true);
+ }
+ const tags = meta.tags.filter(t => t !== caller);
+ resolve(tags.length == 0);
+ }).catch(err => {
+ reject(err);
+ });
+ });
+ }
+ contacts(callback, context) {
+ const cb = callback || this.onMetaSub;
+ if (cb) {
+ for (let idx in this._contacts) {
+ cb.call(context, this._contacts[idx], idx, this._contacts);
+ }
+ }
+ }
+}
+
+/***/ }),
+
/***/ "./src/large-file.js":
/*!***************************!*\
!*** ./src/large-file.js ***!
@@ -3208,6 +3445,296 @@ class LargeFileHelper {
/***/ }),
+/***/ "./src/me-topic.js":
+/*!*************************!*\
+ !*** ./src/me-topic.js ***!
+ \*************************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ "default": () => (/* binding */ TopicMe)
+/* harmony export */ });
+/* harmony import */ var _access_mode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./access-mode.js */ "./src/access-mode.js");
+/* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config.js */ "./src/config.js");
+/* harmony import */ var _topic_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./topic.js */ "./src/topic.js");
+/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils.js */ "./src/utils.js");
+
+
+
+
+
+
+class TopicMe extends _topic_js__WEBPACK_IMPORTED_MODULE_2__["default"] {
+ onContactUpdate;
+ constructor(callbacks) {
+ super(_config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME, callbacks);
+ if (callbacks) {
+ this.onContactUpdate = callbacks.onContactUpdate;
+ }
+ }
+ _processMetaDesc(desc) {
+ const turnOff = desc.acs && !desc.acs.isPresencer() && this.acs && this.acs.isPresencer();
+ (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.mergeObj)(this, desc);
+ this._tinode._db.updTopic(this);
+ this._updateCachedUser(this._tinode._myUID, desc);
+ if (turnOff) {
+ this._tinode.mapTopics(cont => {
+ if (cont.online) {
+ cont.online = false;
+ cont.seen = Object.assign(cont.seen || {}, {
+ when: new Date()
+ });
+ this._refreshContact('off', cont);
+ }
+ });
+ }
+ if (this.onMetaDesc) {
+ this.onMetaDesc(this);
+ }
+ }
+ _processMetaSubs(subs) {
+ let updateCount = 0;
+ subs.forEach(sub => {
+ const topicName = sub.topic;
+ if (topicName == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_FND || topicName == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME) {
+ return;
+ }
+ sub.online = !!sub.online;
+ let cont = null;
+ if (sub.deleted) {
+ cont = sub;
+ this._tinode.cacheRemTopic(topicName);
+ this._tinode._db.remTopic(topicName);
+ } else {
+ if (typeof sub.seq != 'undefined') {
+ sub.seq = sub.seq | 0;
+ sub.recv = sub.recv | 0;
+ sub.read = sub.read | 0;
+ sub.unread = sub.seq - sub.read;
+ }
+ const topic = this._tinode.getTopic(topicName);
+ if (topic._new) {
+ delete topic._new;
+ }
+ cont = (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.mergeObj)(topic, sub);
+ this._tinode._db.updTopic(cont);
+ if (_topic_js__WEBPACK_IMPORTED_MODULE_2__["default"].isP2PTopicName(topicName)) {
+ this._cachePutUser(topicName, cont);
+ this._tinode._db.updUser(topicName, cont.public);
+ }
+ if (!sub._noForwarding && topic) {
+ sub._noForwarding = true;
+ topic._processMetaDesc(sub);
+ }
+ }
+ updateCount++;
+ if (this.onMetaSub) {
+ this.onMetaSub(cont);
+ }
+ });
+ if (this.onSubsUpdated && updateCount > 0) {
+ const keys = [];
+ subs.forEach(s => {
+ keys.push(s.topic);
+ });
+ this.onSubsUpdated(keys, updateCount);
+ }
+ }
+ _processMetaCreds(creds, upd) {
+ if (creds.length == 1 && creds[0] == _config_js__WEBPACK_IMPORTED_MODULE_1__.DEL_CHAR) {
+ creds = [];
+ }
+ if (upd) {
+ creds.forEach(cr => {
+ if (cr.val) {
+ let idx = this._credentials.findIndex(el => {
+ return el.meth == cr.meth && el.val == cr.val;
+ });
+ if (idx < 0) {
+ if (!cr.done) {
+ idx = this._credentials.findIndex(el => {
+ return el.meth == cr.meth && !el.done;
+ });
+ if (idx >= 0) {
+ this._credentials.splice(idx, 1);
+ }
+ }
+ this._credentials.push(cr);
+ } else {
+ this._credentials[idx].done = cr.done;
+ }
+ } else if (cr.resp) {
+ const idx = this._credentials.findIndex(el => {
+ return el.meth == cr.meth && !el.done;
+ });
+ if (idx >= 0) {
+ this._credentials[idx].done = true;
+ }
+ }
+ });
+ } else {
+ this._credentials = creds;
+ }
+ if (this.onCredsUpdated) {
+ this.onCredsUpdated(this._credentials);
+ }
+ }
+ _routePres(pres) {
+ if (pres.what == 'term') {
+ this._resetSub();
+ return;
+ }
+ if (pres.what == 'upd' && pres.src == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME) {
+ this.getMeta(this.startMetaQuery().withDesc().build());
+ return;
+ }
+ const cont = this._tinode.cacheGetTopic(pres.src);
+ if (cont) {
+ switch (pres.what) {
+ case 'on':
+ cont.online = true;
+ break;
+ case 'off':
+ if (cont.online) {
+ cont.online = false;
+ cont.seen = Object.assign(cont.seen || {}, {
+ when: new Date()
+ });
+ }
+ break;
+ case 'msg':
+ cont._updateReceived(pres.seq, pres.act);
+ break;
+ case 'upd':
+ this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());
+ break;
+ case 'acs':
+ if (!pres.tgt) {
+ if (cont.acs) {
+ cont.acs.updateAll(pres.dacs);
+ } else {
+ cont.acs = new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"]().updateAll(pres.dacs);
+ }
+ cont.touched = new Date();
+ }
+ break;
+ case 'ua':
+ cont.seen = {
+ when: new Date(),
+ ua: pres.ua
+ };
+ break;
+ case 'recv':
+ pres.seq = pres.seq | 0;
+ cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;
+ break;
+ case 'read':
+ pres.seq = pres.seq | 0;
+ cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;
+ cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;
+ cont.unread = cont.seq - cont.read;
+ break;
+ case 'gone':
+ this._tinode.cacheRemTopic(pres.src);
+ if (!cont._deleted) {
+ cont._deleted = true;
+ cont._attached = false;
+ this._tinode._db.markTopicAsDeleted(pres.src, true);
+ } else {
+ this._tinode._db.remTopic(pres.src);
+ }
+ break;
+ case 'del':
+ break;
+ default:
+ this._tinode.logger("INFO: Unsupported presence update in 'me'", pres.what);
+ }
+ this._refreshContact(pres.what, cont);
+ } else {
+ if (pres.what == 'acs') {
+ const acs = new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"](pres.dacs);
+ if (!acs || acs.mode == _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"]._INVALID) {
+ this._tinode.logger("ERROR: Invalid access mode update", pres.src, pres.dacs);
+ return;
+ } else if (acs.mode == _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"]._NONE) {
+ this._tinode.logger("WARNING: Removing non-existent subscription", pres.src, pres.dacs);
+ return;
+ } else {
+ this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());
+ const dummy = this._tinode.getTopic(pres.src);
+ dummy.topic = pres.src;
+ dummy.online = false;
+ dummy.acs = acs;
+ this._tinode._db.updTopic(dummy);
+ }
+ } else if (pres.what == 'tags') {
+ this.getMeta(this.startMetaQuery().withTags().build());
+ } else if (pres.what == 'msg') {
+ this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());
+ const dummy = this._tinode.getTopic(pres.src);
+ dummy._deleted = false;
+ this._tinode._db.updTopic(dummy);
+ }
+ this._refreshContact(pres.what, cont);
+ }
+ if (this.onPres) {
+ this.onPres(pres);
+ }
+ }
+ _refreshContact(what, cont) {
+ if (this.onContactUpdate) {
+ this.onContactUpdate(what, cont);
+ }
+ }
+ publish() {
+ return Promise.reject(new Error("Publishing to 'me' is not supported"));
+ }
+ delCredential(method, value) {
+ if (!this._attached) {
+ return Promise.reject(new Error("Cannot delete credential in inactive 'me' topic"));
+ }
+ return this._tinode.delCredential(method, value).then(ctrl => {
+ const index = this._credentials.findIndex(el => {
+ return el.meth == method && el.val == value;
+ });
+ if (index > -1) {
+ this._credentials.splice(index, 1);
+ }
+ if (this.onCredsUpdated) {
+ this.onCredsUpdated(this._credentials);
+ }
+ return ctrl;
+ });
+ }
+ contacts(callback, filter, context) {
+ this._tinode.mapTopics((c, idx) => {
+ if (c.isCommType() && (!filter || filter(c))) {
+ callback.call(context, c, idx);
+ }
+ });
+ }
+ getContact(name) {
+ return this._tinode.cacheGetTopic(name);
+ }
+ getAccessMode(name) {
+ if (name) {
+ const cont = this._tinode.cacheGetTopic(name);
+ return cont ? cont.acs : null;
+ }
+ return this.acs;
+ }
+ isArchived(name) {
+ const cont = this._tinode.cacheGetTopic(name);
+ return cont && cont.private && !!cont.private.arch;
+ }
+ getCredentials() {
+ return this._credentials;
+ }
+}
+
+/***/ }),
+
/***/ "./src/meta-builder.js":
/*!*****************************!*\
!*** ./src/meta-builder.js ***!
@@ -3218,6 +3745,9 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ MetaGetBuilder)
/* harmony export */ });
+/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./src/utils.js");
+
+
class MetaGetBuilder {
constructor(parent) {
@@ -3244,6 +3774,16 @@ class MetaGetBuilder {
withLaterData(limit) {
return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);
}
+ withDataRanges(ranges, limit) {
+ this.what['data'] = {
+ ranges: (0,_utils__WEBPACK_IMPORTED_MODULE_0__.normalizeRanges)(ranges, this.topic._maxSeq),
+ limit: limit
+ };
+ return this;
+ }
+ withDataList(list) {
+ return this.withDataRanges((0,_utils__WEBPACK_IMPORTED_MODULE_0__.listToRanges)(list));
+ }
withEarlierData(limit) {
return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);
}
@@ -3290,6 +3830,10 @@ class MetaGetBuilder {
}
return this;
}
+ withAux() {
+ this.what['aux'] = true;
+ return this;
+ }
withDel(since, limit) {
if (since || limit) {
this.what['del'] = {
@@ -3308,7 +3852,7 @@ class MetaGetBuilder {
build() {
const what = [];
let params = {};
- ['data', 'sub', 'desc', 'tags', 'cred', 'del'].forEach(key => {
+ ['data', 'sub', 'desc', 'tags', 'cred', 'aux', 'del'].forEach(key => {
if (this.what.hasOwnProperty(key)) {
what.push(key);
if (Object.getOwnPropertyNames(this.what[key]).length > 0) {
@@ -3335,9 +3879,7 @@ class MetaGetBuilder {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ Topic: () => (/* binding */ Topic),
-/* harmony export */ TopicFnd: () => (/* binding */ TopicFnd),
-/* harmony export */ TopicMe: () => (/* binding */ TopicMe)
+/* harmony export */ "default": () => (/* binding */ Topic)
/* harmony export */ });
/* harmony import */ var _access_mode_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./access-mode.js */ "./src/access-mode.js");
/* harmony import */ var _cbuffer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cbuffer.js */ "./src/cbuffer.js");
@@ -3376,6 +3918,7 @@ class Topic {
this._recvNotificationTimer = null;
this._tags = [];
this._credentials = [];
+ this._aux = {};
this._messageVersions = {};
this._messages = new _cbuffer_js__WEBPACK_IMPORTED_MODULE_1__["default"]((a, b) => {
return a.seq - b.seq;
@@ -3395,6 +3938,7 @@ class Topic {
this.onSubsUpdated = callbacks.onSubsUpdated;
this.onTagsUpdated = callbacks.onTagsUpdated;
this.onCredsUpdated = callbacks.onCredsUpdated;
+ this.onAuxUpdated = callbacks.onAuxUpdated;
this.onDeleteTopic = callbacks.onDeleteTopic;
this.onAllMessagesReceived = callbacks.onAllMessagesReceived;
}
@@ -3408,13 +3952,17 @@ class Topic {
'nch': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_GRP,
'chn': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_GRP,
'usr': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_P2P,
- 'sys': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_SYS
+ 'sys': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_SYS,
+ 'slf': _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_SLF
};
return types[typeof name == 'string' ? name.substring(0, 3) : 'xxx'];
}
static isMeTopicName(name) {
return Topic.topicType(name) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_ME;
}
+ static isSelfTopicName(name) {
+ return Topic.topicType(name) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_SLF;
+ }
static isGroupTopicName(name) {
return Topic.topicType(name) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_GRP;
}
@@ -3422,7 +3970,7 @@ class Topic {
return Topic.topicType(name) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_P2P;
}
static isCommTopicName(name) {
- return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name);
+ return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name) || Topic.isSelfTopicName(name);
}
static isNewGroupTopicName(name) {
return typeof name == 'string' && (name.substring(0, 3) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_NEW || name.substring(0, 3) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_NEW_CHAN);
@@ -3430,6 +3978,9 @@ class Topic {
static isChannelTopicName(name) {
return typeof name == 'string' && (name.substring(0, 3) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_CHAN || name.substring(0, 3) == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_NEW_CHAN);
}
+ static #isReplacementMsg(pub) {
+ return pub.head && pub.head.replace;
+ }
isSubscribed() {
return this._attached;
}
@@ -3575,10 +4126,11 @@ class Topic {
getMeta(params) {
return this._tinode.getMeta(this.name, params);
}
- getMessagesPage(limit, forward) {
- let query = forward ? this.startMetaQuery().withLaterData(limit) : this.startMetaQuery().withEarlierData(limit);
+ getMessagesPage(limit, gaps, min, max, newer) {
+ let query = gaps ? this.startMetaQuery().withDataRanges(gaps, limit) : newer ? this.startMetaQuery().withData(min, undefined, limit) : this.startMetaQuery().withData(undefined, max, limit);
return this._loadMessages(this._tinode._db, query.extract('data')).then(count => {
- if (count == limit) {
+ gaps = this.msgHasMoreMessages(min, max, newer);
+ if (gaps.length == 0) {
return Promise.resolve({
topic: this.name,
code: 200,
@@ -3588,16 +4140,53 @@ class Topic {
});
}
limit -= count;
- query = forward ? this.startMetaQuery().withLaterData(limit) : this.startMetaQuery().withEarlierData(limit);
- let promise = this.getMeta(query.build());
- if (!forward) {
- promise = promise.then(ctrl => {
- if (ctrl && ctrl.params && !ctrl.params.count) {
- this._noEarlierMsgs = true;
+ query = this.startMetaQuery().withDataRanges(gaps, limit);
+ return this.getMeta(query.build());
+ });
+ }
+ getPinnedMessages() {
+ const pins = this.aux('pins');
+ if (!Array.isArray(pins)) {
+ return Promise.resolve(0);
+ }
+ const loaded = [];
+ let remains = pins;
+ return this._tinode._db.readMessages(this.name, {
+ ranges: (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.listToRanges)(remains)
+ }).then(msgs => {
+ msgs.forEach(data => {
+ if (data) {
+ loaded.push(data.seq);
+ this._messages.put(data);
+ this._maybeUpdateMessageVersionsCache(data);
+ }
+ });
+ if (loaded.length < pins.length) {
+ remains = pins.filter(seq => !loaded.includes(seq));
+ return this._tinode._db.readMessages(this.name, {
+ ranges: (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.listToRanges)(remains)
+ });
+ }
+ return null;
+ }).then(ranges => {
+ if (ranges) {
+ remains.forEach(seq => {
+ if (ranges.find(r => r.low <= seq && r.hi > seq)) {
+ loaded.push(seq);
}
});
}
- return promise;
+ if (loaded.length == pins.length) {
+ return Promise.resolve({
+ topic: this.name,
+ code: 200,
+ params: {
+ count: loaded.length
+ }
+ });
+ }
+ remains = pins.filter(seq => !loaded.includes(seq));
+ return this.getMeta(this.startMetaQuery().withDataList(remains).build());
});
}
setMeta(params) {
@@ -3636,6 +4225,9 @@ class Topic {
if (params.cred) {
this._processMetaCreds([params.cred], true);
}
+ if (params.aux) {
+ this._processMetaAux(params.aux);
+ }
return ctrl;
});
}
@@ -3669,32 +4261,43 @@ class Topic {
}
});
}
+ pinMessage(seq, pin) {
+ let pinned = this.aux('pins');
+ if (!Array.isArray(pinned)) {
+ pinned = [];
+ }
+ let changed = false;
+ if (pin) {
+ if (!pinned.includes(seq)) {
+ changed = true;
+ if (pinned.length == _config_js__WEBPACK_IMPORTED_MODULE_3__.MAX_PINNED_COUNT) {
+ pinned.shift();
+ }
+ pinned.push(seq);
+ }
+ } else {
+ if (pinned.includes(seq)) {
+ changed = true;
+ pinned = pinned.filter(id => id != seq);
+ if (pinned.length == 0) {
+ pinned = _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR;
+ }
+ }
+ }
+ if (changed) {
+ return this.setMeta({
+ aux: {
+ pins: pinned
+ }
+ });
+ }
+ return Promise.resolve();
+ }
delMessages(ranges, hard) {
if (!this._attached) {
return Promise.reject(new Error("Cannot delete messages in inactive topic"));
}
- ranges.sort((r1, r2) => {
- if (r1.low < r2.low) {
- return true;
- }
- if (r1.low == r2.low) {
- return !r2.hi || r1.hi >= r2.hi;
- }
- return false;
- });
- let tosend = ranges.reduce((out, r) => {
- if (r.low < _config_js__WEBPACK_IMPORTED_MODULE_3__.LOCAL_SEQID) {
- if (!r.hi || r.hi < _config_js__WEBPACK_IMPORTED_MODULE_3__.LOCAL_SEQID) {
- out.push(r);
- } else {
- out.push({
- low: r.low,
- hi: this._maxSeq + 1
- });
- }
- }
- return out;
- }, []);
+ const tosend = (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.normalizeRanges)(ranges, this._maxSeq);
let result;
if (tosend.length > 0) {
result = this._tinode.delMessages(this.name, tosend, hard);
@@ -3707,15 +4310,23 @@ class Topic {
}
return result.then(ctrl => {
if (ctrl.params.del > this._maxDel) {
- this._maxDel = ctrl.params.del;
+ this._maxDel = Math.max(ctrl.params.del, this._maxDel);
+ this.clear = Math.max(ctrl.params.del, this.clear);
}
- ranges.forEach(r => {
- if (r.hi) {
- this.flushMessageRange(r.low, r.hi);
+ ranges.forEach(rec => {
+ if (rec.hi) {
+ this.flushMessageRange(rec.low, rec.hi);
} else {
- this.flushMessage(r.low);
+ this.flushMessage(rec.low);
}
+ this._messages.put({
+ seq: rec.low,
+ low: rec.low,
+ hi: rec.hi,
+ _deleted: true
+ });
});
+ this._tinode._db.addDelLog(this.name, ctrl.params.del, ranges);
if (this.onData) {
this.onData();
}
@@ -3733,25 +4344,7 @@ class Topic {
}], hardDel);
}
delMessagesList(list, hardDel) {
- list.sort((a, b) => a - b);
- let ranges = list.reduce((out, id) => {
- if (out.length == 0) {
- out.push({
- low: id
- });
- } else {
- let prev = out[out.length - 1];
- if (!prev.hi && id != prev.low + 1 || id > prev.hi) {
- out.push({
- low: id
- });
- } else {
- prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;
- }
- }
- return out;
- }, []);
- return this.delMessages(ranges, hardDel);
+ return this.delMessages((0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.listToRanges)(list), hardDel);
}
delMessagesEdits(seq, hardDel) {
const list = [seq];
@@ -3898,6 +4491,16 @@ class Topic {
tags() {
return this._tags.slice(0);
}
+ aux(key) {
+ return this._aux[key];
+ }
+ alias() {
+ const alias = this._tags && this._tags.find(t => t.startsWith(_config_js__WEBPACK_IMPORTED_MODULE_3__.TAG_ALIAS));
+ if (!alias) {
+ return undefined;
+ }
+ return alias.substring(_config_js__WEBPACK_IMPORTED_MODULE_3__.TAG_ALIAS.length);
+ }
subscriber(uid) {
return this._users[uid];
}
@@ -3923,7 +4526,10 @@ class Topic {
if (startIdx != -1 && beforeIdx != -1) {
let msgs = [];
this._messages.forEach((msg, unused1, unused2, i) => {
- if (this._isReplacementMsg(msg)) {
+ if (Topic.#isReplacementMsg(msg)) {
+ return;
+ }
+ if (msg._deleted) {
return;
}
const latest = this.latestMsgVersion(msg.seq) || msg;
@@ -3954,7 +4560,7 @@ class Topic {
return undefined;
}
latestMessage() {
- return this._messages.getLast();
+ return this._messages.getLast(msg => !msg._deleted);
}
latestMsgVersion(seq) {
const versions = this._messageVersions[seq];
@@ -3997,8 +4603,41 @@ class Topic {
msgRecvCount(seq) {
return this.msgReceiptCount('recv', seq);
}
- msgHasMoreMessages(newer) {
- return newer ? this.seq > this._maxSeq : this._minSeq > 1 && !this._noEarlierMsgs;
+ msgHasMoreMessages(min, max, newer) {
+ const gaps = [];
+ if (min >= max) {
+ return gaps;
+ }
+ let maxSeq = 0;
+ let gap;
+ this._messages.forEach((msg, prev) => {
+ const p = prev || {
+ seq: 0
+ };
+ const expected = p._deleted ? p.hi : p.seq + 1;
+ if (msg.seq > expected) {
+ gap = {
+ low: expected,
+ hi: msg.seq
+ };
+ } else {
+ gap = null;
+ }
+ if (gap && (newer ? gap.hi >= min : gap.low < max)) {
+ gaps.push(gap);
+ }
+ maxSeq = expected;
+ });
+ if (maxSeq < this.seq) {
+ gap = {
+ low: maxSeq + 1,
+ hi: this.seq + 1
+ };
+ if (newer ? gap.hi >= min : gap.low < max) {
+ gaps.push(gap);
+ }
+ }
+ return gaps;
}
isNewMessage(seqId) {
return this._maxSeq <= seqId;
@@ -4077,6 +4716,9 @@ class Topic {
isMeType() {
return Topic.isMeTopicName(this.name);
}
+ isSelfType() {
+ return Topic.isSelfTopicName(this.name);
+ }
isChannelType() {
return Topic.isChannelTopicName(this.name);
}
@@ -4116,11 +4758,8 @@ class Topic {
}
return status;
}
- _isReplacementMsg(pub) {
- return pub.head && pub.head.replace;
- }
_maybeUpdateMessageVersionsCache(msg) {
- if (!this._isReplacementMsg(msg)) {
+ if (!Topic.#isReplacementMsg(msg)) {
if (this._messageVersions[msg.seq]) {
this._messageVersions[msg.seq].filter(version => version.from == msg.from);
if (this._messageVersions[msg.seq].isEmpty()) {
@@ -4164,11 +4803,15 @@ class Topic {
}
const outgoing = !this.isChannelType() && !data.from || this._tinode.isMe(data.from);
if (data.head && data.head.webrtc && data.head.mime == _drafty_js__WEBPACK_IMPORTED_MODULE_4___default().getContentType() && data.content) {
- data.content = _drafty_js__WEBPACK_IMPORTED_MODULE_4___default().updateVideoCall(data.content, {
+ const upd = {
state: data.head.webrtc,
duration: data.head['webrtc-duration'],
incoming: !outgoing
- });
+ };
+ if (data.head.vc) {
+ upd.vc = true;
+ }
+ data.content = _drafty_js__WEBPACK_IMPORTED_MODULE_4___default().updateVideoCall(data.content, upd);
}
if (!data._noForwarding) {
this._messages.put(data);
@@ -4206,6 +4849,9 @@ class Topic {
if (meta.cred) {
this._processMetaCreds(meta.cred);
}
+ if (meta.aux) {
+ this._processMetaAux(meta.aux);
+ }
if (this.onMeta) {
this.onMeta(meta);
}
@@ -4233,6 +4879,9 @@ class Topic {
this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());
}
break;
+ case 'aux':
+ this.getMeta(this.startMetaQuery().withAux().build());
+ break;
case 'acs':
uid = pres.src || this._tinode.getCurrentUserID();
user = this._users[uid];
@@ -4349,32 +4998,45 @@ class Topic {
}
}
_processMetaTags(tags) {
- if (tags.length == 1 && tags[0] == _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR) {
+ if (tags == _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR || tags.length == 1 && tags[0] == _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR) {
tags = [];
}
this._tags = tags;
+ this._tinode._db.updTopic(this);
if (this.onTagsUpdated) {
this.onTagsUpdated(tags);
}
}
_processMetaCreds(creds) {}
+ _processMetaAux(aux) {
+ aux = !aux || aux == _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR ? {} : aux;
+ this._aux = (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.mergeObj)(this._aux, aux);
+ this._tinode._db.updTopic(this);
+ if (this.onAuxUpdated) {
+ this.onAuxUpdated(this._aux);
+ }
+ }
_processDelMessages(clear, delseq) {
this._maxDel = Math.max(clear, this._maxDel);
this.clear = Math.max(clear, this.clear);
- const topic = this;
let count = 0;
if (Array.isArray(delseq)) {
- delseq.forEach(function (range) {
- if (!range.hi) {
+ delseq.forEach(rec => {
+ if (!rec.hi) {
count++;
- topic.flushMessage(range.low);
+ this.flushMessage(rec.low);
} else {
- for (let i = range.low; i < range.hi; i++) {
- count++;
- topic.flushMessage(i);
- }
+ count += rec.hi - rec.low;
+ this.flushMessageRange(rec.low, rec.hi);
}
+ this._messages.put({
+ seq: rec.low,
+ low: rec.low,
+ hi: rec.hi,
+ _deleted: true
+ });
});
+ this._tinode._db.addDelLog(this.name, clear, delseq);
}
if (count > 0) {
if (this.onData) {
@@ -4423,17 +5085,11 @@ class Topic {
_getQueuedSeqId() {
return this._queuedSeqId++;
}
- _loadMessages(db, params) {
- const {
- since,
- before,
- limit
- } = params || {};
- return db.readMessages(this.name, {
- since: since,
- before: before,
- limit: limit || _config_js__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MESSAGES_PAGE
- }).then(msgs => {
+ _loadMessages(db, query) {
+ query = query || {};
+ query.limit = query.limit || _config_js__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_MESSAGES_PAGE;
+ let count = 0;
+ return db.readMessages(this.name, query).then(msgs => {
msgs.forEach(data => {
if (data.seq > this._maxSeq) {
this._maxSeq = data.seq;
@@ -4444,7 +5100,18 @@ class Topic {
this._messages.put(data);
this._maybeUpdateMessageVersionsCache(data);
});
- return msgs.length;
+ count = msgs.length;
+ }).then(_ => db.readDelLog(this.name, query)).then(dellog => {
+ return dellog.forEach(rec => {
+ this._messages.put({
+ seq: rec.low,
+ low: rec.low,
+ hi: rec.hi,
+ _deleted: true
+ });
+ });
+ }).then(_ => {
+ return count;
});
}
_updateReceived(seq, act) {
@@ -4458,315 +5125,6 @@ class Topic {
this._tinode._db.updTopic(this);
}
}
-class TopicMe extends Topic {
- onContactUpdate;
- constructor(callbacks) {
- super(_config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_ME, callbacks);
- if (callbacks) {
- this.onContactUpdate = callbacks.onContactUpdate;
- }
- }
- _processMetaDesc(desc) {
- const turnOff = desc.acs && !desc.acs.isPresencer() && this.acs && this.acs.isPresencer();
- (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.mergeObj)(this, desc);
- this._tinode._db.updTopic(this);
- this._updateCachedUser(this._tinode._myUID, desc);
- if (turnOff) {
- this._tinode.mapTopics(cont => {
- if (cont.online) {
- cont.online = false;
- cont.seen = Object.assign(cont.seen || {}, {
- when: new Date()
- });
- this._refreshContact('off', cont);
- }
- });
- }
- if (this.onMetaDesc) {
- this.onMetaDesc(this);
- }
- }
- _processMetaSubs(subs) {
- let updateCount = 0;
- subs.forEach(sub => {
- const topicName = sub.topic;
- if (topicName == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_FND || topicName == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_ME) {
- return;
- }
- sub.online = !!sub.online;
- let cont = null;
- if (sub.deleted) {
- cont = sub;
- this._tinode.cacheRemTopic(topicName);
- this._tinode._db.remTopic(topicName);
- } else {
- if (typeof sub.seq != 'undefined') {
- sub.seq = sub.seq | 0;
- sub.recv = sub.recv | 0;
- sub.read = sub.read | 0;
- sub.unread = sub.seq - sub.read;
- }
- const topic = this._tinode.getTopic(topicName);
- if (topic._new) {
- delete topic._new;
- }
- cont = (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.mergeObj)(topic, sub);
- this._tinode._db.updTopic(cont);
- if (Topic.isP2PTopicName(topicName)) {
- this._cachePutUser(topicName, cont);
- this._tinode._db.updUser(topicName, cont.public);
- }
- if (!sub._noForwarding && topic) {
- sub._noForwarding = true;
- topic._processMetaDesc(sub);
- }
- }
- updateCount++;
- if (this.onMetaSub) {
- this.onMetaSub(cont);
- }
- });
- if (this.onSubsUpdated && updateCount > 0) {
- const keys = [];
- subs.forEach(s => {
- keys.push(s.topic);
- });
- this.onSubsUpdated(keys, updateCount);
- }
- }
- _processMetaCreds(creds, upd) {
- if (creds.length == 1 && creds[0] == _config_js__WEBPACK_IMPORTED_MODULE_3__.DEL_CHAR) {
- creds = [];
- }
- if (upd) {
- creds.forEach(cr => {
- if (cr.val) {
- let idx = this._credentials.findIndex(el => {
- return el.meth == cr.meth && el.val == cr.val;
- });
- if (idx < 0) {
- if (!cr.done) {
- idx = this._credentials.findIndex(el => {
- return el.meth == cr.meth && !el.done;
- });
- if (idx >= 0) {
- this._credentials.splice(idx, 1);
- }
- }
- this._credentials.push(cr);
- } else {
- this._credentials[idx].done = cr.done;
- }
- } else if (cr.resp) {
- const idx = this._credentials.findIndex(el => {
- return el.meth == cr.meth && !el.done;
- });
- if (idx >= 0) {
- this._credentials[idx].done = true;
- }
- }
- });
- } else {
- this._credentials = creds;
- }
- if (this.onCredsUpdated) {
- this.onCredsUpdated(this._credentials);
- }
- }
- _routePres(pres) {
- if (pres.what == 'term') {
- this._resetSub();
- return;
- }
- if (pres.what == 'upd' && pres.src == _config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_ME) {
- this.getMeta(this.startMetaQuery().withDesc().build());
- return;
- }
- const cont = this._tinode.cacheGetTopic(pres.src);
- if (cont) {
- switch (pres.what) {
- case 'on':
- cont.online = true;
- break;
- case 'off':
- if (cont.online) {
- cont.online = false;
- cont.seen = Object.assign(cont.seen || {}, {
- when: new Date()
- });
- }
- break;
- case 'msg':
- cont._updateReceived(pres.seq, pres.act);
- break;
- case 'upd':
- this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());
- break;
- case 'acs':
- if (!pres.tgt) {
- if (cont.acs) {
- cont.acs.updateAll(pres.dacs);
- } else {
- cont.acs = new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"]().updateAll(pres.dacs);
- }
- cont.touched = new Date();
- }
- break;
- case 'ua':
- cont.seen = {
- when: new Date(),
- ua: pres.ua
- };
- break;
- case 'recv':
- pres.seq = pres.seq | 0;
- cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;
- break;
- case 'read':
- pres.seq = pres.seq | 0;
- cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;
- cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;
- cont.unread = cont.seq - cont.read;
- break;
- case 'gone':
- this._tinode.cacheRemTopic(pres.src);
- if (!cont._deleted) {
- cont._deleted = true;
- cont._attached = false;
- this._tinode._db.markTopicAsDeleted(pres.src, true);
- } else {
- this._tinode._db.remTopic(pres.src);
- }
- break;
- case 'del':
- break;
- default:
- this._tinode.logger("INFO: Unsupported presence update in 'me'", pres.what);
- }
- this._refreshContact(pres.what, cont);
- } else {
- if (pres.what == 'acs') {
- const acs = new _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"](pres.dacs);
- if (!acs || acs.mode == _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"]._INVALID) {
- this._tinode.logger("ERROR: Invalid access mode update", pres.src, pres.dacs);
- return;
- } else if (acs.mode == _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"]._NONE) {
- this._tinode.logger("WARNING: Removing non-existent subscription", pres.src, pres.dacs);
- return;
- } else {
- this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());
- const dummy = this._tinode.getTopic(pres.src);
- dummy.online = false;
- dummy.acs = acs;
- this._tinode._db.updTopic(dummy);
- }
- } else if (pres.what == 'tags') {
- this.getMeta(this.startMetaQuery().withTags().build());
- } else if (pres.what == 'msg') {
- this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());
- const dummy = this._tinode.getTopic(pres.src);
- dummy._deleted = false;
- this._tinode._db.updTopic(dummy);
- }
- this._refreshContact(pres.what, cont);
- }
- if (this.onPres) {
- this.onPres(pres);
- }
- }
- _refreshContact(what, cont) {
- if (this.onContactUpdate) {
- this.onContactUpdate(what, cont);
- }
- }
- publish() {
- return Promise.reject(new Error("Publishing to 'me' is not supported"));
- }
- delCredential(method, value) {
- if (!this._attached) {
- return Promise.reject(new Error("Cannot delete credential in inactive 'me' topic"));
- }
- return this._tinode.delCredential(method, value).then(ctrl => {
- const index = this._credentials.findIndex(el => {
- return el.meth == method && el.val == value;
- });
- if (index > -1) {
- this._credentials.splice(index, 1);
- }
- if (this.onCredsUpdated) {
- this.onCredsUpdated(this._credentials);
- }
- return ctrl;
- });
- }
- contacts(callback, filter, context) {
- this._tinode.mapTopics((c, idx) => {
- if (c.isCommType() && (!filter || filter(c))) {
- callback.call(context, c, idx);
- }
- });
- }
- getContact(name) {
- return this._tinode.cacheGetTopic(name);
- }
- getAccessMode(name) {
- if (name) {
- const cont = this._tinode.cacheGetTopic(name);
- return cont ? cont.acs : null;
- }
- return this.acs;
- }
- isArchived(name) {
- const cont = this._tinode.cacheGetTopic(name);
- return cont && cont.private && !!cont.private.arch;
- }
- getCredentials() {
- return this._credentials;
- }
-}
-class TopicFnd extends Topic {
- _contacts = {};
- constructor(callbacks) {
- super(_config_js__WEBPACK_IMPORTED_MODULE_3__.TOPIC_FND, callbacks);
- }
- _processMetaSubs(subs) {
- let updateCount = Object.getOwnPropertyNames(this._contacts).length;
- this._contacts = {};
- for (let idx in subs) {
- let sub = subs[idx];
- const indexBy = sub.topic ? sub.topic : sub.user;
- sub = (0,_utils_js__WEBPACK_IMPORTED_MODULE_6__.mergeToCache)(this._contacts, indexBy, sub);
- updateCount++;
- if (this.onMetaSub) {
- this.onMetaSub(sub);
- }
- }
- if (updateCount > 0 && this.onSubsUpdated) {
- this.onSubsUpdated(Object.keys(this._contacts));
- }
- }
- publish() {
- return Promise.reject(new Error("Publishing to 'fnd' is not supported"));
- }
- setMeta(params) {
- return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {
- if (Object.keys(this._contacts).length > 0) {
- this._contacts = {};
- if (this.onSubsUpdated) {
- this.onSubsUpdated([]);
- }
- }
- });
- }
- contacts(callback, context) {
- const cb = callback || this.onMetaSub;
- if (cb) {
- for (let idx in this._contacts) {
- cb.call(context, this._contacts[idx], idx, this._contacts);
- }
- }
- }
-}
/***/ }),
@@ -4778,11 +5136,15 @@ class TopicFnd extends Topic {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ clipInRange: () => (/* binding */ clipInRange),
+/* harmony export */ clipOutRange: () => (/* binding */ clipOutRange),
/* harmony export */ isUrlRelative: () => (/* binding */ isUrlRelative),
/* harmony export */ jsonParseHelper: () => (/* binding */ jsonParseHelper),
+/* harmony export */ listToRanges: () => (/* binding */ listToRanges),
/* harmony export */ mergeObj: () => (/* binding */ mergeObj),
/* harmony export */ mergeToCache: () => (/* binding */ mergeToCache),
/* harmony export */ normalizeArray: () => (/* binding */ normalizeArray),
+/* harmony export */ normalizeRanges: () => (/* binding */ normalizeRanges),
/* harmony export */ rfc3339DateString: () => (/* binding */ rfc3339DateString),
/* harmony export */ simplify: () => (/* binding */ simplify)
/* harmony export */ });
@@ -4894,7 +5256,7 @@ function normalizeArray(arr) {
}
}
}
- out.sort().filter(function (item, pos, ary) {
+ out = out.sort().filter((item, pos, ary) => {
return !pos || item != ary[pos - 1];
});
}
@@ -4903,6 +5265,105 @@ function normalizeArray(arr) {
}
return out;
}
+function normalizeRanges(ranges, maxSeq) {
+ if (!Array.isArray(ranges)) {
+ return [];
+ }
+ ranges.sort((r1, r2) => {
+ if (r1.low < r2.low) {
+ return -1;
+ }
+ if (r1.low == r2.low) {
+ return (r2.hi | 0) - r1.hi;
+ }
+ return 1;
+ });
+ ranges = ranges.reduce((out, r) => {
+ if (r.low < _config_js__WEBPACK_IMPORTED_MODULE_1__.LOCAL_SEQID && r.low > 0) {
+ if (!r.hi || r.hi < _config_js__WEBPACK_IMPORTED_MODULE_1__.LOCAL_SEQID) {
+ out.push(r);
+ } else {
+ out.push({
+ low: r.low,
+ hi: maxSeq + 1
+ });
+ }
+ }
+ return out;
+ }, []);
+ ranges = ranges.reduce((out, r) => {
+ if (out.length == 0) {
+ out.push(r);
+ } else {
+ let prev = out[out.length - 1];
+ if (r.low <= prev.hi) {
+ prev.hi = Math.max(prev.hi, r.hi);
+ } else {
+ out.push(r);
+ }
+ }
+ return out;
+ }, []);
+ return ranges;
+}
+function listToRanges(list) {
+ list.sort((a, b) => a - b);
+ return list.reduce((out, id) => {
+ if (out.length == 0) {
+ out.push({
+ low: id
+ });
+ } else {
+ let prev = out[out.length - 1];
+ if (!prev.hi && id != prev.low + 1 || id > prev.hi) {
+ out.push({
+ low: id
+ });
+ } else {
+ prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;
+ }
+ }
+ return out;
+ }, []);
+}
+function clipOutRange(src, clip) {
+ if (clip.hi <= src.low || clip.low >= src.hi) {
+ return [src];
+ }
+ if (clip.low <= src.low) {
+ if (clip.hi >= src.hi) {
+ return [];
+ }
+ return [{
+ low: clip.hi,
+ hi: src.hi
+ }];
+ }
+ const result = [{
+ low: src.low,
+ hi: clip.low
+ }];
+ if (clip.hi < src.hi) {
+ result.push({
+ low: clip.hi,
+ hi: src.hi
+ });
+ }
+ return result;
+}
+function clipInRange(src, clip) {
+ if (clip.hi <= src.low || clip.low >= src.hi) {
+ return null;
+ }
+ if (src.low >= clip.low && src.hi <= clip.hi) {
+ return src;
+ }
+ return {
+ low: Math.max(src.low, clip.low),
+ hi: Math.min(src.hi, clip.hi)
+ };
+ return result;
+}
/***/ }),
@@ -4916,7 +5377,7 @@ __webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ PACKAGE_VERSION: () => (/* binding */ PACKAGE_VERSION)
/* harmony export */ });
-const PACKAGE_VERSION = "0.23.1";
+const PACKAGE_VERSION = "0.24.0-rc1";
/***/ })
@@ -5022,14 +5483,16 @@ __webpack_require__.r(__webpack_exports__);
/* harmony import */ var _large_file_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./large-file.js */ "./src/large-file.js");
/* harmony import */ var _meta_builder_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./meta-builder.js */ "./src/meta-builder.js");
/* harmony import */ var _topic_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./topic.js */ "./src/topic.js");
-/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils.js */ "./src/utils.js");
+/* harmony import */ var _fnd_topic_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./fnd-topic.js */ "./src/fnd-topic.js");
+/* harmony import */ var _me_topic_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./me-topic.js */ "./src/me-topic.js");
+/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils.js */ "./src/utils.js");
/**
* @module tinode-sdk
*
- * @copyright 2015-2022 Tinode LLC.
+ * @copyright 2015-2025 Tinode LLC.
* @summary Javascript bindings for Tinode.
* @license Apache 2.0
- * @version 0.20
+ * @version 0.24
*
* See https://github.com/tinode/webapp for real-life usage.
*
@@ -5079,6 +5542,8 @@ __webpack_require__.r(__webpack_exports__);
+
+
let WebSocketProvider;
if (typeof WebSocket != 'undefined') {
WebSocketProvider = WebSocket;
@@ -5157,7 +5622,7 @@ function b64EncodeUnicode(str) {
}
function jsonBuildHelper(key, val) {
if (val instanceof Date) {
- val = (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.rfc3339DateString)(val);
+ val = (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.rfc3339DateString)(val);
} else if (val instanceof _access_mode_js__WEBPACK_IMPORTED_MODULE_0__["default"]) {
val = val.jsonHelper();
} else if (val === undefined || val === null || val === false || Array.isArray(val) && val.length == 0 || typeof val == 'object' && Object.keys(val).length == 0) {
@@ -5290,9 +5755,7 @@ class Tinode {
}
};
this._persist = config.persist;
- this._db = new _db_js__WEBPACK_IMPORTED_MODULE_4__["default"](err => {
- this.logger('DB', err);
- }, this.logger);
+ this._db = new _db_js__WEBPACK_IMPORTED_MODULE_4__["default"](this.logger, this.logger);
if (this._persist) {
const prom = [];
this._db.initDatabase().then(_ => {
@@ -5302,21 +5765,24 @@ class Tinode {
return;
}
if (data.name == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME) {
- topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__.TopicMe();
+ topic = new _me_topic_js__WEBPACK_IMPORTED_MODULE_10__["default"]();
} else if (data.name == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_FND) {
- topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__.TopicFnd();
+ topic = new _fnd_topic_js__WEBPACK_IMPORTED_MODULE_9__["default"]();
} else {
- topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic(data.name);
+ topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__["default"](data.name);
}
this._db.deserializeTopic(topic, data);
this.#attachCacheToTopic(topic);
topic._cachePutSelf();
+ this._db.maxDelId(topic.name).then(clear => {
+ topic._maxDel = Math.max(topic._maxDel, clear || 0);
+ });
delete topic._new;
prom.push(topic._loadMessages(this._db));
});
}).then(_ => {
return this._db.mapUsers(data => {
- this.#cachePut('user', data.uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.mergeObj)({}, data.public));
+ this.#cachePut('user', data.uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.mergeObj)({}, data.public));
});
}).then(_ => {
return Promise.all(prom);
@@ -5380,7 +5846,7 @@ class Tinode {
if (id) {
promise = this.#makePromise(id);
}
- pkt = (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.simplify)(pkt);
+ pkt = (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.simplify)(pkt);
let msg = JSON.stringify(pkt);
this.logger("out: " + (this._trimLongStrings ? JSON.stringify(pkt, jsonLoggerHelper) : msg));
try {
@@ -5406,7 +5872,7 @@ class Tinode {
}
return;
}
- let pkt = JSON.parse(data, _utils_js__WEBPACK_IMPORTED_MODULE_9__.jsonParseHelper);
+ let pkt = JSON.parse(data, _utils_js__WEBPACK_IMPORTED_MODULE_11__.jsonParseHelper);
if (!pkt) {
this.logger("in: " + data);
this.logger("ERROR: failed to parse data");
@@ -5615,7 +6081,7 @@ class Tinode {
'desc': {},
'sub': {},
'tags': [],
- 'ephemeral': {}
+ 'aux': {}
}
};
case 'del':
@@ -5667,13 +6133,13 @@ class Tinode {
if (pub) {
return {
user: uid,
- public: (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.mergeObj)({}, pub)
+ public: (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.mergeObj)({}, pub)
};
}
return undefined;
};
topic._cachePutUser = (uid, user) => {
- this.#cachePut('user', uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.mergeObj)({}, user.public));
+ this.#cachePut('user', uid, (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.mergeObj)({}, user.public));
};
topic._cacheDelUser = uid => {
this.#cacheDel('user', uid);
@@ -5724,25 +6190,28 @@ class Tinode {
return null;
}
static topicType(name) {
- return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.topicType(name);
+ return _topic_js__WEBPACK_IMPORTED_MODULE_8__["default"].topicType(name);
}
static isMeTopicName(name) {
- return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.isMeTopicName(name);
+ return _topic_js__WEBPACK_IMPORTED_MODULE_8__["default"].isMeTopicName(name);
+ }
+ static isSelfTopicName(name) {
+ return _topic_js__WEBPACK_IMPORTED_MODULE_8__["default"].isSelfTopicName(name);
}
static isGroupTopicName(name) {
- return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.isGroupTopicName(name);
+ return _topic_js__WEBPACK_IMPORTED_MODULE_8__["default"].isGroupTopicName(name);
}
static isP2PTopicName(name) {
- return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.isP2PTopicName(name);
+ return _topic_js__WEBPACK_IMPORTED_MODULE_8__["default"].isP2PTopicName(name);
}
static isCommTopicName(name) {
- return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.isCommTopicName(name);
+ return _topic_js__WEBPACK_IMPORTED_MODULE_8__["default"].isCommTopicName(name);
}
static isNewGroupTopicName(name) {
- return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.isNewGroupTopicName(name);
+ return _topic_js__WEBPACK_IMPORTED_MODULE_8__["default"].isNewGroupTopicName(name);
}
static isChannelTopicName(name) {
- return _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic.isChannelTopicName(name);
+ return _topic_js__WEBPACK_IMPORTED_MODULE_8__["default"].isChannelTopicName(name);
}
static getVersion() {
return _config_js__WEBPACK_IMPORTED_MODULE_1__.VERSION;
@@ -5766,6 +6235,52 @@ class Tinode {
static isServerAssignedSeq(seq) {
return seq > 0 && seq < _config_js__WEBPACK_IMPORTED_MODULE_1__.LOCAL_SEQID;
}
+ static isValidTagValue(tag) {
+ const ALIAS_REGEX = /^[a-z0-9][a-z0-9_\-]{3,23}$/i;
+ return tag && typeof tag == 'string' && tag.length > 3 && tag.length < 24 && ALIAS_REGEX.test(tag);
+ }
+ static tagSplit(tag) {
+ if (!tag) {
+ return null;
+ }
+ tag = tag.trim();
+ const splitAt = tag.indexOf(':');
+ if (splitAt <= 0) {
+ return null;
+ }
+ const value = tag.substring(splitAt + 1);
+ if (!value) {
+ return null;
+ }
+ return {
+ prefix: tag.substring(0, splitAt),
+ value: value
+ };
+ }
+ static setUniqueTag(tags, uniqueTag) {
+ if (!tags || tags.length == 0) {
+ return [uniqueTag];
+ }
+ const parts = Tinode.tagSplit(uniqueTag);
+ if (!parts) {
+ return tags;
+ }
+ tags = tags.filter(tag => tag && !tag.startsWith(parts.prefix));
+ tags.push(uniqueTag);
+ return tags;
+ }
+ static clearTagPrefix(tags, prefix) {
+ if (!tags || tags.length == 0) {
+ return [];
+ }
+ return tags.filter(tag => tag && !tag.startsWith(prefix));
+ }
+ static tagByPrefix(tags, prefix) {
+ if (!tags) {
+ return undefined;
+ }
+ return tags.find(tag => tag && tag.startsWith(prefix));
+ }
getNextUniqueId() {
return this._messageId != 0 ? '' + this._messageId++ : undefined;
}
@@ -5803,7 +6318,7 @@ class Tinode {
if (typeof url != 'string') {
return url;
}
- if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.isUrlRelative)(url)) {
+ if ((0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.isUrlRelative)(url)) {
const base = 'scheme://host/';
const parsed = new URL(url, base);
if (this._apiKey) {
@@ -5834,7 +6349,7 @@ class Tinode {
pkt.acc.tmpsecret = params.secret;
if (Array.isArray(params.attachments) && params.attachments.length > 0) {
pkt.extra = {
- attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.isUrlRelative)(ref))
+ attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.isUrlRelative)(ref))
};
}
}
@@ -5943,12 +6458,15 @@ class Tinode {
}
if (Array.isArray(setParams.attachments) && setParams.attachments.length > 0) {
pkt.extra = {
- attachments: setParams.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.isUrlRelative)(ref))
+ attachments: setParams.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.isUrlRelative)(ref))
};
}
if (setParams.tags) {
pkt.sub.set.tags = setParams.tags;
}
+ if (setParams.aux) {
+ pkt.sub.set.aux = setParams.aux;
+ }
}
return this.#send(pkt, pkt.sub.id);
}
@@ -5983,7 +6501,7 @@ class Tinode {
};
if (attachments) {
msg.extra = {
- attachments: attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.isUrlRelative)(ref))
+ attachments: attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.isUrlRelative)(ref))
};
}
return this.#send(msg, pub.id);
@@ -6056,14 +6574,14 @@ class Tinode {
}
getMeta(topic, params) {
const pkt = this.#initPacket('get', topic);
- pkt.get = (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.mergeObj)(pkt.get, params);
+ pkt.get = (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.mergeObj)(pkt.get, params);
return this.#send(pkt, pkt.get.id);
}
setMeta(topic, params) {
const pkt = this.#initPacket('set', topic);
const what = [];
if (params) {
- ['desc', 'sub', 'tags', 'cred', 'ephemeral'].forEach(function (key) {
+ ['desc', 'sub', 'tags', 'cred', 'aux'].forEach(key => {
if (params.hasOwnProperty(key)) {
what.push(key);
pkt.set[key] = params[key];
@@ -6071,7 +6589,7 @@ class Tinode {
});
if (Array.isArray(params.attachments) && params.attachments.length > 0) {
pkt.extra = {
- attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_9__.isUrlRelative)(ref))
+ attachments: params.attachments.filter(ref => (0,_utils_js__WEBPACK_IMPORTED_MODULE_11__.isUrlRelative)(ref))
};
}
}
@@ -6142,11 +6660,11 @@ class Tinode {
let topic = this.#cacheGet('topic', topicName);
if (!topic && topicName) {
if (topicName == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_ME) {
- topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__.TopicMe();
+ topic = new _me_topic_js__WEBPACK_IMPORTED_MODULE_10__["default"]();
} else if (topicName == _config_js__WEBPACK_IMPORTED_MODULE_1__.TOPIC_FND) {
- topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__.TopicFnd();
+ topic = new _fnd_topic_js__WEBPACK_IMPORTED_MODULE_9__["default"]();
} else {
- topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__.Topic(topicName);
+ topic = new _topic_js__WEBPACK_IMPORTED_MODULE_8__["default"](topicName);
}
this.#attachCacheToTopic(topic);
topic._cachePutSelf();
@@ -6247,10 +6765,16 @@ Tinode.MESSAGE_STATUS_TO_ME = _config_js__WEBPACK_IMPORTED_MODULE_1__.MESSAGE_ST
Tinode.DEL_CHAR = _config_js__WEBPACK_IMPORTED_MODULE_1__.DEL_CHAR;
Tinode.MAX_MESSAGE_SIZE = 'maxMessageSize';
Tinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';
+Tinode.MIN_TAG_LENGTH = 'minTagLength';
+Tinode.MAX_TAG_LENGTH = 'maxTagLength';
Tinode.MAX_TAG_COUNT = 'maxTagCount';
Tinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';
Tinode.REQ_CRED_VALIDATORS = 'reqCred';
+Tinode.MSG_DELETE_AGE = 'msgDelAge';
Tinode.URI_TOPIC_ID_PREFIX = 'tinode:topic/';
+Tinode.TAG_ALIAS = _config_js__WEBPACK_IMPORTED_MODULE_1__.TAG_ALIAS;
+Tinode.TAG_EMAIL = _config_js__WEBPACK_IMPORTED_MODULE_1__.TAG_EMAIL;
+Tinode.TAG_PHONE = _config_js__WEBPACK_IMPORTED_MODULE_1__.TAG_PHONE;
})();
/******/ return __webpack_exports__;
diff --git a/umd/tinode.dev.js.map b/umd/tinode.dev.js.map
index 1b65500c..fc1c9530 100644
--- a/umd/tinode.dev.js.map
+++ b/umd/tinode.dev.js.map
@@ -1 +1 @@
-{"version":3,"file":"tinode.dev.js","mappings":"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","sources":["webpack://tinode/webpack/universalModuleDefinition","webpack://tinode/./src/access-mode.js","webpack://tinode/./src/cbuffer.js","webpack://tinode/./src/comm-error.js","webpack://tinode/./src/config.js","webpack://tinode/./src/connection.js","webpack://tinode/./src/db.js","webpack://tinode/./src/drafty.js","webpack://tinode/./src/large-file.js","webpack://tinode/./src/meta-builder.js","webpack://tinode/./src/topic.js","webpack://tinode/./src/utils.js","webpack://tinode/./version.js","webpack://tinode/webpack/bootstrap","webpack://tinode/webpack/runtime/compat get default export","webpack://tinode/webpack/runtime/define property getters","webpack://tinode/webpack/runtime/global","webpack://tinode/webpack/runtime/hasOwnProperty shorthand","webpack://tinode/webpack/runtime/make namespace object","webpack://tinode/./src/tinode.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tinode\"] = factory();\n\telse\n\t\troot[\"tinode\"] = factory();\n})(this, () => {\nreturn ","/**\n * @file Access control model.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\n/**\n * Helper class for handling access mode.\n *\n * @class AccessMode\n * @memberof Tinode\n *\n * @param {AccessMode|Object=} acs - AccessMode to copy or access mode object received from the server.\n */\nexport default class AccessMode {\n constructor(acs) {\n if (acs) {\n this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n this.mode = acs.mode ? (typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode)) :\n (this.given & this.want);\n }\n }\n\n static #checkFlag(val, side, flag) {\n side = side || 'mode';\n if (['given', 'want', 'mode'].includes(side)) {\n return ((val[side] & flag) != 0);\n }\n throw new Error(`Invalid AccessMode component '${side}'`);\n }\n /**\n * Parse string into an access mode value.\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {string | Number} mode - either a String representation of the access mode to parse or a set of bits to assign.\n * @returns {number} - Access mode as a numeric value.\n */\n static decode(str) {\n if (!str) {\n return null;\n } else if (typeof str == 'number') {\n return str & AccessMode._BITMASK;\n } else if (str === 'N' || str === 'n') {\n return AccessMode._NONE;\n }\n\n const bitmask = {\n 'J': AccessMode._JOIN,\n 'R': AccessMode._READ,\n 'W': AccessMode._WRITE,\n 'P': AccessMode._PRES,\n 'A': AccessMode._APPROVE,\n 'S': AccessMode._SHARE,\n 'D': AccessMode._DELETE,\n 'O': AccessMode._OWNER\n };\n\n let m0 = AccessMode._NONE;\n\n for (let i = 0; i < str.length; i++) {\n const bit = bitmask[str.charAt(i).toUpperCase()];\n if (!bit) {\n // Unrecognized bit, skip.\n continue;\n }\n m0 |= bit;\n }\n return m0;\n }\n /**\n * Convert numeric representation of the access mode into a string.\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to convert to a string.\n * @returns {string} - Access mode as a string.\n */\n static encode(val) {\n if (val === null || val === AccessMode._INVALID) {\n return null;\n } else if (val === AccessMode._NONE) {\n return 'N';\n }\n\n const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n let res = '';\n for (let i = 0; i < bitmask.length; i++) {\n if ((val & (1 << i)) != 0) {\n res = res + bitmask[i];\n }\n }\n return res;\n }\n /**\n * Update numeric representation of access mode with the new value. The value\n * is one of the following:\n * - a string starting with '+' or '-' then the bits to add or remove, e.g. '+R-W' or '-PS'.\n * - a new value of access mode\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to update.\n * @param {string} upd - update to apply to val.\n * @returns {number} - updated access mode.\n */\n static update(val, upd) {\n if (!upd || typeof upd != 'string') {\n return val;\n }\n\n let action = upd.charAt(0);\n if (action == '+' || action == '-') {\n let val0 = val;\n // Split delta-string like '+ABC-DEF+Z' into an array of parts including + and -.\n const parts = upd.split(/([-+])/);\n // Starting iteration from 1 because String.split() creates an array with the first empty element.\n // Iterating by 2 because we parse pairs +/- then data.\n for (let i = 1; i < parts.length - 1; i += 2) {\n action = parts[i];\n const m0 = AccessMode.decode(parts[i + 1]);\n if (m0 == AccessMode._INVALID) {\n return val;\n }\n if (m0 == null) {\n continue;\n }\n if (action === '+') {\n val0 |= m0;\n } else if (action === '-') {\n val0 &= ~m0;\n }\n }\n val = val0;\n } else {\n // The string is an explicit new value 'ABC' rather than delta.\n const val0 = AccessMode.decode(upd);\n if (val0 != AccessMode._INVALID) {\n val = val0;\n }\n }\n\n return val;\n }\n /**\n * Bits present in a1 but missing in a2.\n *\n * @static\n * @memberof Tinode\n *\n * @param {number | string} a1 - access mode to subtract from.\n * @param {number | string} a2 - access mode to subtract.\n * @returns {number} access mode with bits present in a1 but missing in a2.\n */\n static diff(a1, a2) {\n a1 = AccessMode.decode(a1);\n a2 = AccessMode.decode(a2);\n\n if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n return AccessMode._INVALID;\n }\n return a1 & ~a2;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Custom formatter\n */\n toString() {\n return '{\"mode\": \"' + AccessMode.encode(this.mode) +\n '\", \"given\": \"' + AccessMode.encode(this.given) +\n '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Converts numeric values to strings.\n */\n jsonHelper() {\n return {\n mode: AccessMode.encode(this.mode),\n given: AccessMode.encode(this.given),\n want: AccessMode.encode(this.want)\n };\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign value to 'mode'.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} m - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setMode(m) {\n this.mode = AccessMode.decode(m);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update mode value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateMode(u) {\n this.mode = AccessMode.update(this.mode, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get mode value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - mode value.\n */\n getMode() {\n return AccessMode.encode(this.mode);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign given value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} g - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setGiven(g) {\n this.given = AccessMode.decode(g);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'given' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateGiven(u) {\n this.given = AccessMode.update(this.given, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'given' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - given value.\n */\n getGiven() {\n return AccessMode.encode(this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} w - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setWant(w) {\n this.want = AccessMode.decode(w);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateWant(u) {\n this.want = AccessMode.update(this.want, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'want' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - want value.\n */\n getWant() {\n return AccessMode.encode(this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'want' but missing in 'given'.\n * Inverse of {@link Tinode.AccessMode#getExcessive}\n *\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in want but missing in given.\n */\n getMissing() {\n return AccessMode.encode(this.want & ~this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'given' but missing in 'want'.\n * Inverse of {@link Tinode.AccessMode#getMissing}\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in given but missing in want.\n */\n getExcessive() {\n return AccessMode.encode(this.given & ~this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want', 'give', and 'mode' values.\n * @memberof Tinode.AccessMode\n *\n * @param {AccessMode} val - new access mode value.\n * @returns {AccessMode} - this AccessMode.\n */\n updateAll(val) {\n if (val) {\n this.updateGiven(val.given);\n this.updateWant(val.want);\n this.mode = this.given & this.want;\n }\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Owner (O) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isOwner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isPresencer(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is NOT set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isMuted(side) {\n return !this.isPresencer(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Join (J) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isJoiner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Reader (R) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isReader(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._READ);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Writer (W) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isWriter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Approver (A) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isApprover(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O) or Approver (A) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isAdmin(side) {\n return this.isOwner(side) || this.isApprover(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O), Approver (A), or Sharer (S) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isSharer(side) {\n return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Deleter (D) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isDeleter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n }\n}\n\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\n\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES |\n AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n","/**\n * @file In-memory sorted cache of objects.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n/**\n * In-memory sorted cache of objects.\n *\n * @class CBuffer\n * @memberof Tinode\n * @protected\n *\n * @param {function} compare custom comparator of objects. Takes two parameters a and b;\n * returns -1 if a < b, 0 if a == b, 1 otherwise.\n * @param {boolean} unique enforce element uniqueness: when true replace existing element with a new\n * one on conflict; when false keep both elements.\n */\nexport default class CBuffer {\n #comparator = undefined;\n #unique = false;\n buffer = [];\n\n constructor(compare_, unique_) {\n this.#comparator = compare_ || ((a, b) => {\n return a === b ? 0 : a < b ? -1 : 1;\n });\n this.#unique = unique_;\n }\n\n #findNearest(elem, arr, exact) {\n let start = 0;\n let end = arr.length - 1;\n let pivot = 0;\n let diff = 0;\n let found = false;\n\n while (start <= end) {\n pivot = (start + end) / 2 | 0;\n diff = this.#comparator(arr[pivot], elem);\n if (diff < 0) {\n start = pivot + 1;\n } else if (diff > 0) {\n end = pivot - 1;\n } else {\n found = true;\n break;\n }\n }\n if (found) {\n return {\n idx: pivot,\n exact: true\n };\n }\n if (exact) {\n return {\n idx: -1\n };\n }\n // Not exact - insertion point\n return {\n idx: diff < 0 ? pivot + 1 : pivot\n };\n }\n\n // Insert element into a sorted array.\n #insertSorted(elem, arr) {\n const found = this.#findNearest(elem, arr, false);\n const count = (found.exact && this.#unique) ? 1 : 0;\n arr.splice(found.idx, count, elem);\n return arr;\n }\n\n /**\n * Get an element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to fetch from.\n * @returns {Object} Element at the given position or undefined.\n */\n getAt(at) {\n return this.buffer[at];\n }\n\n /**\n * Convenience method for getting the element from the end of the buffer.\n * @memberof Tinode.CBuffer#\n * @param {number} at - position to fetch from, counting from the end;\n * undefined or null mean \"last\".\n * @returns {Object} The last element in the buffer or undefined if buffer is empty.\n */\n getLast(at) {\n at |= 0;\n return this.buffer.length > at ? this.buffer[this.buffer.length - 1 - at] : undefined;\n }\n\n /**\n * Add new element(s) to the buffer. Variadic: takes one or more arguments. If an array is passed as a single\n * argument, its elements are inserted individually.\n * @memberof Tinode.CBuffer#\n *\n * @param {...Object|Array} - One or more objects to insert.\n */\n put() {\n let insert;\n // inspect arguments: if array, insert its elements, if one or more non-array arguments, insert them one by one\n if (arguments.length == 1 && Array.isArray(arguments[0])) {\n insert = arguments[0];\n } else {\n insert = arguments;\n }\n for (let idx in insert) {\n this.#insertSorted(insert[idx], this.buffer);\n }\n }\n\n /**\n * Remove element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to delete at.\n * @returns {Object} Element at the given position or undefined.\n */\n delAt(at) {\n at |= 0;\n let r = this.buffer.splice(at, 1);\n if (r && r.length > 0) {\n return r[0];\n }\n return undefined;\n }\n\n /**\n * Remove elements between two positions.\n * @memberof Tinode.CBuffer#\n * @param {number} since - Position to delete from (inclusive).\n * @param {number} before - Position to delete to (exclusive).\n *\n * @returns {Array} array of removed elements (could be zero length).\n */\n delRange(since, before) {\n return this.buffer.splice(since, before - since);\n }\n\n /**\n * Return the number of elements the buffer holds.\n * @memberof Tinode.CBuffer#\n * @return {number} Number of elements in the buffer.\n */\n length() {\n return this.buffer.length;\n }\n\n /**\n * Reset the buffer discarding all elements\n * @memberof Tinode.CBuffer#\n */\n reset() {\n this.buffer = [];\n }\n\n /**\n * Callback for iterating contents of buffer. See {@link Tinode.CBuffer#forEach}.\n * @callback ForEachCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {Object} prev - Previous element of the buffer.\n * @param {Object} next - Next element of the buffer.\n * @param {number} index - Index of the current element.\n */\n\n /**\n * Apply given callback to all elements of the buffer.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.ForEachCallbackType} callback - Function to call for each element.\n * @param {number} startIdx - Optional index to start iterating from (inclusive).\n * @param {number} beforeIdx - Optional index to stop iterating before (exclusive).\n * @param {Object} context - calling context (i.e. value of this in callback)\n */\n forEach(callback, startIdx, beforeIdx, context) {\n startIdx = startIdx | 0;\n beforeIdx = beforeIdx || this.buffer.length;\n\n for (let i = startIdx; i < beforeIdx; i++) {\n callback.call(context, this.buffer[i],\n (i > startIdx ? this.buffer[i - 1] : undefined),\n (i < beforeIdx - 1 ? this.buffer[i + 1] : undefined), i);\n }\n }\n\n /**\n * Find element in buffer using buffer's comparison function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Object} elem - element to find.\n * @param {boolean=} nearest - when true and exact match is not found, return the nearest element (insertion point).\n * @returns {number} index of the element in the buffer or -1.\n */\n find(elem, nearest) {\n const {\n idx\n } = this.#findNearest(elem, this.buffer, !nearest);\n return idx;\n }\n\n /**\n * Callback for filtering the buffer. See {@link Tinode.CBuffer#filter}.\n * @callback FilterCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {number} index - Index of the current element.\n * @returns {boolen} true to keep the element, false to remove.\n */\n\n /**\n * Remove all elements that do not pass the test implemented by the provided callback function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.FilterCallbackType} callback - Function to call for each element.\n * @param {Object} context - calling context (i.e. value of this in the callback)\n */\n filter(callback, context) {\n let count = 0;\n for (let i = 0; i < this.buffer.length; i++) {\n if (callback.call(context, this.buffer[i], i)) {\n this.buffer[count] = this.buffer[i];\n count++;\n }\n }\n\n this.buffer.splice(count);\n }\n\n /**\n * Check if buffer is empty.\n * @returns {boolean} true if the buffer is empty, false otherwise.\n */\n isEmpty() {\n return this.buffer.length == 0;\n }\n}\n","/**\n * @file Throwable error with numeric error code.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nexport default class CommError extends Error {\n constructor(message, code) {\n super(`${message} (${code})`);\n this.name = 'CommError';\n this.code = code;\n }\n}\n","/**\n * @file Global constants and configuration parameters.\n *\n * @copyright 2015-2023 Tinode LLC\n */\n'use strict';\n\nimport {\n PACKAGE_VERSION\n} from '../version.js';\n\n// Global constants\nexport const PROTOCOL_VERSION = '0'; // Major component of the version, e.g. '0' in '0.17.1'.\nexport const VERSION = PACKAGE_VERSION || '0.21';\nexport const LIBRARY = 'tinodejs/' + VERSION;\n\n// Topic name prefixes.\nexport const TOPIC_NEW = 'new';\nexport const TOPIC_NEW_CHAN = 'nch';\nexport const TOPIC_ME = 'me';\nexport const TOPIC_FND = 'fnd';\nexport const TOPIC_SYS = 'sys';\nexport const TOPIC_CHAN = 'chn';\nexport const TOPIC_GRP = 'grp';\nexport const TOPIC_P2P = 'p2p';\nexport const USER_NEW = 'new';\n\n// Starting value of a locally-generated seqId used for pending messages.\nexport const LOCAL_SEQID = 0xFFFFFFF;\n\n// Status codes.\nexport const MESSAGE_STATUS_NONE = 0; // Status not assigned.\nexport const MESSAGE_STATUS_QUEUED = 10; // Local ID assigned, in progress to be sent.\nexport const MESSAGE_STATUS_SENDING = 20; // Transmission started.\nexport const MESSAGE_STATUS_FAILED = 30; // At least one attempt was made to send the message.\nexport const MESSAGE_STATUS_FATAL = 40; // Message sending failed and it should not be retried.\nexport const MESSAGE_STATUS_SENT = 50; // Delivered to the server.\nexport const MESSAGE_STATUS_RECEIVED = 60; // Received by the client.\nexport const MESSAGE_STATUS_READ = 70; // Read by the user.\nexport const MESSAGE_STATUS_TO_ME = 80; // The message is received from another user.\n\n// Reject unresolved futures after this many milliseconds.\nexport const EXPIRE_PROMISES_TIMEOUT = 5_000;\n// Periodicity of garbage collection of unresolved futures.\nexport const EXPIRE_PROMISES_PERIOD = 1_000;\n\n// Delay before acknowledging that a message was recived.\nexport const RECV_TIMEOUT = 100;\n\n// Default number of messages to pull into memory from persistent cache.\nexport const DEFAULT_MESSAGES_PAGE = 24;\n\n// Unicode DEL character indicating data was deleted.\nexport const DEL_CHAR = '\\u2421';\n","/**\n * @file Abstraction layer for websocket and long polling connections.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n jsonParseHelper\n} from './utils.js';\n\nlet WebSocketProvider;\nlet XHRProvider;\n\n// Error code to return in case of a network problem.\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\n\n// Error code to return when user disconnected from server.\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\n\n// Settings for exponential backoff\nconst _BOFF_BASE = 2000; // 2000 milliseconds, minimum delay between reconnects\nconst _BOFF_MAX_ITER = 10; // Maximum delay between reconnects 2^10 * 2000 ~ 34 minutes\nconst _BOFF_JITTER = 0.3; // Add random delay\n\n// Helper function for creating an endpoint URL.\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n let url = null;\n\n if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n url = `${protocol}://${host}`;\n if (url.charAt(url.length - 1) !== '/') {\n url += '/';\n }\n url += 'v' + version + '/channels';\n if (['http', 'https'].includes(protocol)) {\n // Long polling endpoint ends with \"lp\", i.e.\n // '/v0/channels/lp' vs just '/v0/channels' for ws\n url += '/lp';\n }\n url += '?apikey=' + apiKey;\n }\n return url;\n}\n\n/**\n * An abstraction for a websocket or a long polling connection.\n *\n * @class Connection\n * @memberof Tinode\n\n * @param {Object} config - configuration parameters.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - Network transport to use, either \"ws\"/\"wss\" for websocket or\n * lp for long polling.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} version_ - Major value of the protocol version, e.g. '0' in '0.17.1'.\n * @param {boolean} autoreconnect_ - If connection is lost, try to reconnect automatically.\n */\nexport default class Connection {\n // Logger, does nothing by default.\n static #log = _ => {};\n\n #boffTimer = null;\n #boffIteration = 0;\n #boffClosed = false; // Indicator if the socket was manually closed - don't autoreconnect if true.\n\n // Websocket.\n #socket = null;\n\n host;\n secure;\n apiKey;\n\n version;\n autoreconnect;\n\n initialized;\n\n // (config.host, config.apiKey, config.transport, config.secure), PROTOCOL_VERSION, true\n constructor(config, version_, autoreconnect_) {\n this.host = config.host;\n this.secure = config.secure;\n this.apiKey = config.apiKey;\n\n this.version = version_;\n this.autoreconnect = autoreconnect_;\n\n if (config.transport === 'lp') {\n // explicit request to use long polling\n this.#init_lp();\n this.initialized = 'lp';\n } else if (config.transport === 'ws') {\n // explicit request to use web socket\n // if websockets are not available, horrible things will happen\n this.#init_ws();\n this.initialized = 'ws';\n }\n\n if (!this.initialized) {\n // Invalid or undefined network transport.\n Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n }\n }\n\n /**\n * To use Connection in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n * @memberof Connection\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n }\n\n /**\n * Assign a non-default logger.\n * @static\n * @memberof Connection\n * @param {function} l variadic logging function.\n */\n static set logger(l) {\n Connection.#log = l;\n }\n\n /**\n * Initiate a new connection\n * @memberof Tinode.Connection#\n * @param {string} host_ Host name to connect to; if null the old host name will be used.\n * @param {boolean} force Force new connection even if one already exists.\n * @return {Promise} Promise resolved/rejected when the connection call completes, resolution is called without\n * parameters, rejection passes the {Error} as parameter.\n */\n connect(host_, force) {\n return Promise.reject(null);\n }\n\n /**\n * Try to restore a network connection, also reset backoff.\n * @memberof Tinode.Connection#\n *\n * @param {boolean} force - reconnect even if there is a live connection already.\n */\n reconnect(force) {}\n\n /**\n * Terminate the network connection\n * @memberof Tinode.Connection#\n */\n disconnect() {}\n\n /**\n * Send a string to the server.\n * @memberof Tinode.Connection#\n *\n * @param {string} msg - String to send.\n * @throws Throws an exception if the underlying connection is not live.\n */\n sendText(msg) {}\n\n /**\n * Check if connection is alive.\n * @memberof Tinode.Connection#\n * @returns {boolean} true if connection is live, false otherwise.\n */\n isConnected() {\n return false;\n }\n\n /**\n * Get the name of the current network transport.\n * @memberof Tinode.Connection#\n * @returns {string} name of the transport such as \"ws\" or \"lp\".\n */\n transport() {\n return this.initialized;\n }\n\n /**\n * Send network probe to check if connection is indeed live.\n * @memberof Tinode.Connection#\n */\n probe() {\n this.sendText('1');\n }\n\n /**\n * Reset autoreconnect counter to zero.\n * @memberof Tinode.Connection#\n */\n backoffReset() {\n this.#boffReset();\n }\n\n // Backoff implementation - reconnect after a timeout.\n #boffReconnect() {\n // Clear timer\n clearTimeout(this.#boffTimer);\n // Calculate when to fire the reconnect attempt\n const timeout = _BOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + _BOFF_JITTER * Math.random()));\n // Update iteration counter for future use\n this.#boffIteration = (this.#boffIteration >= _BOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1);\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout);\n }\n\n this.#boffTimer = setTimeout(_ => {\n Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n // Maybe the socket was closed while we waited for the timer?\n if (!this.#boffClosed) {\n const prom = this.connect();\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(0, prom);\n } else {\n // Suppress error if it's not used.\n prom.catch(_ => {\n /* do nothing */\n });\n }\n } else if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(-1);\n }\n }, timeout);\n }\n\n // Terminate auto-reconnect process.\n #boffStop() {\n clearTimeout(this.#boffTimer);\n this.#boffTimer = null;\n }\n\n // Reset auto-reconnect iteration counter.\n #boffReset() {\n this.#boffIteration = 0;\n }\n\n // Initialization for long polling.\n #init_lp() {\n const XDR_UNSENT = 0; // Client has been created. open() not called yet.\n const XDR_OPENED = 1; // open() has been called.\n const XDR_HEADERS_RECEIVED = 2; // send() has been called, and headers and status are available.\n const XDR_LOADING = 3; // Downloading; responseText holds partial data.\n const XDR_DONE = 4; // The operation is complete.\n\n // Fully composed endpoint URL, with API key & SID\n let _lpURL = null;\n\n let _poller = null;\n let _sender = null;\n\n let lp_sender = (url_) => {\n const sender = new XHRProvider();\n sender.onreadystatechange = (evt) => {\n if (sender.readyState == XDR_DONE && sender.status >= 400) {\n // Some sort of error response\n throw new CommError(\"LP sender failed\", sender.status);\n }\n };\n\n sender.open('POST', url_, true);\n return sender;\n }\n\n let lp_poller = (url_, resolve, reject) => {\n let poller = new XHRProvider();\n let promiseCompleted = false;\n\n poller.onreadystatechange = evt => {\n if (poller.readyState == XDR_DONE) {\n if (poller.status == 201) { // 201 == HTTP.Created, get SID\n let pkt = JSON.parse(poller.responseText, jsonParseHelper);\n _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n poller = lp_poller(_lpURL);\n poller.send(null);\n if (this.onOpen) {\n this.onOpen();\n }\n\n if (resolve) {\n promiseCompleted = true;\n resolve();\n }\n\n if (this.autoreconnect) {\n this.#boffStop();\n }\n } else if (poller.status > 0 && poller.status < 400) { // 0 = network error; 400 = HTTP.BadRequest\n if (this.onMessage) {\n this.onMessage(poller.responseText);\n }\n poller = lp_poller(_lpURL);\n poller.send(null);\n } else {\n // Don't throw an error here, gracefully handle server errors\n if (reject && !promiseCompleted) {\n promiseCompleted = true;\n reject(poller.responseText);\n }\n if (this.onMessage && poller.responseText) {\n this.onMessage(poller.responseText);\n }\n if (this.onDisconnect) {\n const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n this.onDisconnect(new CommError(text, code), code);\n }\n\n // Polling has stopped. Indicate it by setting poller to null.\n poller = null;\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n }\n }\n };\n // Using POST to avoid caching response by service worker.\n poller.open('POST', url_, true);\n return poller;\n }\n\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (_poller) {\n if (!force) {\n return Promise.resolve();\n }\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n Connection.#log(\"LP connecting to:\", url);\n _poller = lp_poller(url, resolve, reject);\n _poller.send(null);\n }).catch(err => {\n Connection.#log(\"LP connection failed:\", err);\n });\n };\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (_sender) {\n _sender.onreadystatechange = undefined;\n _sender.abort();\n _sender = null;\n }\n if (_poller) {\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (this.onDisconnect) {\n this.onDisconnect(new CommError(NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n }\n // Ensure it's reconstructed\n _lpURL = null;\n };\n\n this.sendText = (msg) => {\n _sender = lp_sender(_lpURL);\n if (_sender && (_sender.readyState == XDR_OPENED)) {\n _sender.send(msg);\n } else {\n throw new Error(\"Long poller failed to connect\");\n }\n };\n\n this.isConnected = _ => {\n return (_poller && true);\n };\n }\n\n // Initialization for Websocket\n #init_ws() {\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (this.#socket) {\n if (!force && this.#socket.readyState == this.#socket.OPEN) {\n // Issue a probe request to be sure the connection is live.\n // This is a non-blocking call.\n this.probe();\n return Promise.resolve();\n }\n this.#socket.close();\n this.#socket = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n\n Connection.#log(\"WS connecting to: \", url);\n\n // It throws when the server is not accessible but the exception cannot be caught:\n // https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation/31003057\n const conn = new WebSocketProvider(url);\n\n conn.onerror = err => {\n reject(err);\n };\n\n conn.onopen = _ => {\n if (this.autoreconnect) {\n this.#boffStop();\n }\n\n if (this.onOpen) {\n this.onOpen();\n }\n\n resolve();\n };\n\n conn.onclose = _ => {\n this.#socket = null;\n\n if (this.onDisconnect) {\n const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n this.onDisconnect(new CommError(this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n }\n\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n };\n\n conn.onmessage = evt => {\n if (this.onMessage) {\n this.onMessage(evt.data);\n }\n };\n\n this.#socket = conn;\n });\n }\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (!this.#socket) {\n return;\n }\n this.#socket.close();\n this.#socket = null;\n };\n\n this.sendText = msg => {\n if (this.#socket && (this.#socket.readyState == this.#socket.OPEN)) {\n this.#socket.send(msg);\n } else {\n throw new Error(\"Websocket is not connected\");\n }\n };\n\n this.isConnected = _ => {\n return (this.#socket && (this.#socket.readyState == this.#socket.OPEN));\n };\n }\n\n // Callbacks:\n\n /**\n * A callback to pass incoming messages to. See {@link Tinode.Connection#onMessage}.\n * @callback Tinode.Connection.OnMessage\n * @memberof Tinode.Connection\n * @param {string} message - Message to process.\n */\n onMessage = undefined;\n\n /**\n * A callback for reporting a dropped connection.\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onDisconnect = undefined;\n\n /**\n * A callback called when the connection is ready to be used for sending. For websockets it's socket open,\n * for long polling it's readyState=1 (OPENED)\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onOpen = undefined;\n\n /**\n * A callback to notify of reconnection attempts. See {@link Tinode.Connection#onAutoreconnectIteration}.\n * @memberof Tinode.Connection\n * @callback AutoreconnectIterationType\n * @param {string} timeout - time till the next reconnect attempt in milliseconds. -1 means reconnect was skipped.\n * @param {Promise} promise resolved or rejected when the reconnect attemp completes.\n *\n */\n /**\n * A callback to inform when the next attampt to reconnect will happen and to receive connection promise.\n * @memberof Tinode.Connection#\n * @type {Tinode.Connection.AutoreconnectIterationType}\n */\n onAutoreconnectIteration = undefined;\n}\n\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n","/**\n * @file Helper methods for dealing with IndexedDB cache of messages, users, and topics.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst DB_VERSION = 1;\nconst DB_NAME = 'tinode-web';\n\nlet IDBProvider;\n\nexport default class DB {\n #onError = _ => {};\n #logger = _ => {};\n\n // Instance of IndexDB.\n db = null;\n // Indicator that the cache is disabled.\n disabled = true;\n\n constructor(onError, logger) {\n this.#onError = onError || this.#onError;\n this.#logger = logger || this.#logger;\n }\n\n #mapObjects(source, callback, context) {\n if (!this.db) {\n return disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction([source]);\n trx.onerror = event => {\n this.#logger('PCache', 'mapObjects', source, event.target.error);\n reject(event.target.error);\n };\n trx.objectStore(source).getAll().onsuccess = event => {\n if (callback) {\n event.target.result.forEach(topic => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n /**\n * Initialize persistent cache: open or create/upgrade if needed.\n * @returns {Promise} promise to be resolved/rejected when the DB is initialized.\n */\n initDatabase() {\n return new Promise((resolve, reject) => {\n // Open the database and initialize callbacks.\n const req = IDBProvider.open(DB_NAME, DB_VERSION);\n req.onsuccess = event => {\n this.db = event.target.result;\n this.disabled = false;\n resolve(this.db);\n };\n req.onerror = event => {\n this.#logger('PCache', \"failed to initialize\", event);\n reject(event.target.error);\n this.#onError(event.target.error);\n };\n req.onupgradeneeded = event => {\n this.db = event.target.result;\n\n this.db.onerror = event => {\n this.#logger('PCache', \"failed to create storage\", event);\n this.#onError(event.target.error);\n };\n\n // Individual object stores.\n // Object store (table) for topics. The primary key is topic name.\n this.db.createObjectStore('topic', {\n keyPath: 'name'\n });\n\n // Users object store. UID is the primary key.\n this.db.createObjectStore('user', {\n keyPath: 'uid'\n });\n\n // Subscriptions object store topic <-> user. Topic name + UID is the primary key.\n this.db.createObjectStore('subscription', {\n keyPath: ['topic', 'uid']\n });\n\n // Messages object store. The primary key is topic name + seq.\n this.db.createObjectStore('message', {\n keyPath: ['topic', 'seq']\n });\n };\n });\n }\n\n /**\n * Delete persistent cache.\n */\n deleteDatabase() {\n // Close connection, otherwise operations will fail with 'onblocked'.\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return new Promise((resolve, reject) => {\n const req = IDBProvider.deleteDatabase(DB_NAME);\n req.onblocked = _ => {\n if (this.db) {\n this.db.close();\n }\n const err = new Error(\"blocked\");\n this.#logger('PCache', 'deleteDatabase', err);\n reject(err);\n };\n req.onsuccess = _ => {\n this.db = null;\n this.disabled = true;\n resolve(true);\n };\n req.onerror = event => {\n this.#logger('PCache', 'deleteDatabase', event.target.error);\n reject(event.target.error);\n };\n });\n }\n\n /**\n * Check if persistent cache is ready for use.\n * @memberOf DB\n * @returns {boolean} true if cache is ready, false otherwise.\n */\n isReady() {\n return !!this.db;\n }\n\n // Topics.\n\n /**\n * Save to cache or update topic in persistent cache.\n * @memberOf DB\n * @param {Topic} topic - topic to be added or updated.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updTopic(topic) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updTopic', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(topic.name);\n req.onsuccess = _ => {\n trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n trx.commit();\n };\n });\n }\n\n /**\n * Mark or unmark topic as deleted.\n * @memberOf DB\n * @param {string} name - name of the topic to mark or unmark.\n * @param {boolean} deleted - status\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n markTopicAsDeleted(name, deleted) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(name);\n req.onsuccess = event => {\n const topic = event.target.result;\n if (topic && topic._deleted != deleted) {\n topic._deleted = deleted;\n trx.objectStore('topic').put(topic);\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove topic from persistent cache.\n * @memberOf DB\n * @param {string} name - name of the topic to remove from database.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remTopic(name) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remTopic', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('topic').delete(IDBKeyRange.only(name));\n trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored topic.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapTopics(callback, context) {\n return this.#mapObjects('topic', callback, context);\n }\n\n /**\n * Copy data from serialized object to topic.\n * @memberOf DB\n * @param {Topic} topic - target to deserialize to.\n * @param {Object} src - serialized data to copy from.\n */\n deserializeTopic(topic, src) {\n DB.#deserializeTopic(topic, src);\n }\n\n // Users.\n /**\n * Add or update user object in the persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to save or update.\n * @param {Object} pub - user's public information.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updUser(uid, pub) {\n if (arguments.length < 2 || pub === undefined) {\n // No point inupdating user with invalid data.\n return;\n }\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').put({\n uid: uid,\n public: pub\n });\n trx.commit();\n });\n }\n\n /**\n * Remove user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to remove from the cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').delete(IDBKeyRange.only(uid));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored user.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapUsers(callback, context) {\n return this.#mapObjects('user', callback, context);\n }\n\n /**\n * Read a single user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to fetch from cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n getUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user']);\n trx.oncomplete = event => {\n const user = event.target.result;\n resolve({\n user: user.uid,\n public: user.public\n });\n };\n trx.onerror = event => {\n this.#logger('PCache', 'getUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').get(uid);\n });\n }\n\n // Subscriptions.\n /**\n * Add or update subscription in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {string} uid - ID of the subscribed user.\n * @param {Object} sub - subscription to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updSubscription(topicName, uid, sub) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updSubscription', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').get([topicName, uid]).onsuccess = (event) => {\n trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n trx.commit();\n };\n });\n }\n\n /**\n * Execute a callback for each cached subscription in a given topic.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the subscriptions.\n * @param {function} callback - function to call for each subscription.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapSubscriptions(topicName, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'mapSubscriptions', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = (event) => {\n if (callback) {\n event.target.result.forEach((topic) => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n // Messages.\n\n /**\n * Save message to persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {Object} msg - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addMessage(msg) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addMessage', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n trx.commit();\n });\n }\n\n /**\n * Update delivery status of a message stored in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update\n * @param {number} status - new delivery status of the message.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageStatus(topicName, seq, status) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageStatus', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (!src || src._status == status) {\n trx.commit();\n return;\n }\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n _status: status\n }));\n trx.commit();\n };\n });\n }\n\n /**\n * Remove one or more messages from persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} from - id of the message to remove or lower boundary when removing range (inclusive).\n * @param {number=} to - upper boundary (exclusive) when removing a range of messages.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remMessages(topicName, from, to) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n if (!from && !to) {\n from = 0;\n to = Number.MAX_SAFE_INTEGER;\n }\n const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) :\n IDBKeyRange.only([topicName, from]);\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = (event) => {\n resolve(event.target.result);\n };\n trx.onerror = (event) => {\n this.#logger('PCache', 'remMessages', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').delete(range);\n trx.commit();\n });\n }\n\n /**\n * Retrieve messages from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve messages from.\n * @param {function} callback to call for each retrieved message.\n * @param {Object} query - parameters of the message range to retrieve.\n * @param {number=} query.since - the least message ID to retrieve (inclusive).\n * @param {number=} query.before - the greatest message ID to retrieve (exclusive).\n * @param {number=} query.limit - the maximum number of messages to retrieve.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readMessages(topicName, query, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n query = query || {};\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n const result = [];\n const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n const trx = this.db.transaction(['message']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n // Iterate in descending order.\n trx.objectStore('message').openCursor(range, 'prev').onsuccess = (event) => {\n const cursor = event.target.result;\n if (cursor) {\n if (callback) {\n callback.call(context, cursor.value);\n }\n result.push(cursor.value);\n if (limit <= 0 || result.length < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n // Private methods.\n\n // Serializable topic fields.\n static #topic_fields = ['created', 'updated', 'deleted', 'read', 'recv', 'seq', 'clear', 'defacs',\n 'creds', 'public', 'trusted', 'private', 'touched', '_deleted'\n ];\n\n // Copy data from src to Topic object.\n static #deserializeTopic(topic, src) {\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n topic[f] = src[f];\n }\n });\n if (Array.isArray(src.tags)) {\n topic._tags = src.tags;\n }\n if (src.acs) {\n topic.setAccessMode(src.acs);\n }\n topic.seq |= 0;\n topic.read |= 0;\n topic.unread = Math.max(0, topic.seq - topic.read);\n }\n\n // Copy values from 'src' to 'dst'. Allocate dst if it's null or undefined.\n static #serializeTopic(dst, src) {\n const res = dst || {\n name: src.name\n };\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n res[f] = src[f];\n }\n });\n if (Array.isArray(src._tags)) {\n res.tags = src._tags;\n }\n if (src.acs) {\n res.acs = src.getAccessMode().jsonHelper();\n }\n return res;\n }\n\n static #serializeSubscription(dst, topicName, uid, sub) {\n const fields = ['updated', 'mode', 'read', 'recv', 'clear', 'lastSeen', 'userAgent'];\n const res = dst || {\n topic: topicName,\n uid: uid\n };\n\n fields.forEach((f) => {\n if (sub.hasOwnProperty(f)) {\n res[f] = sub[f];\n }\n });\n\n return res;\n }\n\n static #serializeMessage(dst, msg) {\n // Serializable fields.\n const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content'];\n const res = dst || {};\n fields.forEach((f) => {\n if (msg.hasOwnProperty(f)) {\n res[f] = msg[f];\n }\n });\n return res;\n }\n\n /**\n * To use DB in a non browser context, supply indexedDB provider.\n * @static\n * @memberof DB\n * @param idbProvider indexedDB provider, e.g. for node require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IDBProvider = idbProvider;\n }\n}\n","/**\n * @copyright 2015-2024 Tinode LLC.\n * @summary Minimally rich text representation and formatting for Tinode.\n * @license Apache 2.0\n *\n * @file Basic parser and formatter for very simple text markup. Mostly targeted at\n * mobile use cases similar to Telegram, WhatsApp, and FB Messenger.\n *\n * \n *
\n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> abc def\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n * abc\n * this is *bold*, `code` and _italic_, ~strike~\n * combined *bold and _italic_*\n * an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n * this is a @mention and a #hashtag in a string\n * second #hashtag\n *
\n *\n * Sample JSON representation of the text above:\n * {\n * \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n * \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n * \"fmt\": [\n * { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n * { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n * { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n * { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n * { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n * { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n * ],\n * \"ent\": [\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n * { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n * { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n * ]\n * }\n */\n\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst JSON_MIME_TYPE = 'application/json';\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview',\n 'ref', 'size', 'state', 'url', 'val', 'width'\n];\n\n// Intl.Segmenter is not available in Firefox 124 and earlier. FF 125 with support for Intl.Segmenter\n// was released on April 15, 2024. Polyfill is included in the top package (webapp).\nconst segmenter = new Intl.Segmenter();\n\n// Regular expressions for parsing inline formats. Javascript does not support lookbehind,\n// so it's a bit messy.\nconst INLINE_STYLES = [\n // Strong = bold, *bold text*\n {\n name: 'ST',\n start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n end: /[^\\s*](\\*)(?=$|[\\W_])/\n },\n // Emphesized = italic, _italic text_\n {\n name: 'EM',\n start: /(?:^|\\W)(_)[^\\s_]/,\n end: /[^\\s_](_)(?=$|\\W)/\n },\n // Deleted, ~strike this though~\n {\n name: 'DL',\n start: /(?:^|[\\W_])(~)[^\\s~]/,\n end: /[^\\s~](~)(?=$|[\\W_])/\n },\n // Code block `this is monospace`\n {\n name: 'CO',\n start: /(?:^|\\W)(`)[^`]/,\n end: /[^`](`)(?=$|\\W)/\n }\n];\n\n// Relative weights of formatting spans. Greater index in array means greater weight.\nconst FMT_WEIGHT = ['QQ'];\n\n// RegExps for entity extraction (RF = reference)\nconst ENTITY_TYPES = [\n // URLs\n {\n name: 'LN',\n dataName: 'url',\n pack: function(val) {\n // Check if the protocol is specified, if not use http\n if (!/^[a-z]+:\\/\\//i.test(val)) {\n val = 'http://' + val;\n }\n return {\n url: val\n };\n },\n re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n },\n // Mentions @user (must be 2 or more characters)\n {\n name: 'MN',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n },\n // Hashtags #hashtag, like metion 2 or more characters.\n {\n name: 'HT',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n }\n];\n\n// HTML tag name suggestions\nconst FORMAT_TAGS = {\n AU: {\n html_tag: 'audio',\n md_tag: undefined,\n isVoid: false\n },\n BN: {\n html_tag: 'button',\n md_tag: undefined,\n isVoid: false\n },\n BR: {\n html_tag: 'br',\n md_tag: '\\n',\n isVoid: true\n },\n CO: {\n html_tag: 'tt',\n md_tag: '`',\n isVoid: false\n },\n DL: {\n html_tag: 'del',\n md_tag: '~',\n isVoid: false\n },\n EM: {\n html_tag: 'i',\n md_tag: '_',\n isVoid: false\n },\n EX: {\n html_tag: '',\n md_tag: undefined,\n isVoid: true\n },\n FM: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n HD: {\n html_tag: '',\n md_tag: undefined,\n isVoid: false\n },\n HL: {\n html_tag: 'span',\n md_tag: undefined,\n isVoid: false\n },\n HT: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n IM: {\n html_tag: 'img',\n md_tag: undefined,\n isVoid: false\n },\n LN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n MN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n RW: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false,\n },\n QQ: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n ST: {\n html_tag: 'b',\n md_tag: '*',\n isVoid: false\n },\n VC: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VD: {\n html_tag: 'video',\n md_tag: undefined,\n isVoid: false\n }\n};\n\n// Convert base64-encoded string into Blob.\nfunction base64toObjectUrl(b64, contentType, logger) {\n if (!b64) {\n return null;\n }\n\n try {\n const bin = atob(b64);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return URL.createObjectURL(new Blob([buf], {\n type: contentType\n }));\n } catch (err) {\n if (logger) {\n logger(\"Drafty: failed to convert object.\", err.message);\n }\n }\n\n return null;\n}\n\nfunction base64toDataUrl(b64, contentType) {\n if (!b64) {\n return null;\n }\n contentType = contentType || 'image/jpeg';\n return 'data:' + contentType + ';base64,' + b64;\n}\n\n// Helpers for converting Drafty to HTML.\nconst DECORATORS = {\n // Visial styles\n ST: {\n open: _ => '',\n close: _ => ''\n },\n EM: {\n open: _ => '',\n close: _ => ''\n },\n DL: {\n open: _ => '',\n close: _ => ''\n },\n CO: {\n open: _ => '',\n close: _ => ''\n },\n // Line break\n BR: {\n open: _ => '
',\n close: _ => ''\n },\n // Hidden element\n HD: {\n open: _ => '',\n close: _ => ''\n },\n // Highlighted element.\n HL: {\n open: _ => '',\n close: _ => ''\n },\n // Link (URL)\n LN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n href: data.url,\n target: '_blank'\n } : null;\n },\n },\n // Mention\n MN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Hashtag\n HT: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Button\n BN: {\n open: _ => '',\n props: (data) => {\n return data ? {\n 'data-act': data.act,\n 'data-val': data.val,\n 'data-name': data.name,\n 'data-ref': data.ref\n } : null;\n },\n },\n // Audio recording\n AU: {\n open: (data) => {\n const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n return '',\n props: (data) => {\n if (!data) return null;\n return {\n // Embedded data or external link.\n src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-duration': data.duration,\n 'data-name': data.name,\n 'data-size': data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0),\n 'data-mime': data.mime,\n };\n }\n },\n // Image\n IM: {\n open: data => {\n // Don't use data.ref for preview: it's a security risk.\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n const downloadUrl = data.ref || previewUrl;\n return (data.name ? '' : '') +\n '';\n },\n close: data => {\n return (data.name ? '' : '');\n },\n props: data => {\n if (!data) return null;\n return {\n // Temporary preview, or permanent preview, or external link.\n src: base64toDataUrl(data._tempPreview, data.mime) ||\n data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n title: data.name,\n alt: data.name,\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n },\n },\n // Form - structured layout of elements.\n FM: {\n open: _ => '
';\n },\n close: _ => '',\n props: data => {\n if (!data) return null;\n const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return {\n // Embedded data or external link.\n src: poster,\n 'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-preview': poster,\n 'data-duration': data.duration | 0,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n }\n },\n};\n\n/**\n * The main object which performs all the formatting actions.\n * @class Drafty\n * @constructor\n */\nconst Drafty = function() {\n this.txt = '';\n this.fmt = [];\n this.ent = [];\n}\n\n/**\n * Initialize Drafty document to a plain text string.\n *\n * @param {string} plainText - string to use as Drafty content.\n *\n * @returns new Drafty document or null is plainText is not a string or undefined.\n */\nDrafty.init = function(plainText) {\n if (typeof plainText == 'undefined') {\n plainText = '';\n } else if (typeof plainText != 'string') {\n return null;\n }\n\n return {\n txt: plainText\n };\n}\n\n/**\n * Parse plain text into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} content - plain-text content to parse.\n * @return {Drafty} parsed document or null if the source is not plain text.\n */\nDrafty.parse = function(content) {\n // Make sure we are parsing strings only.\n if (typeof content != 'string') {\n return null;\n }\n\n // Split text into lines. It makes further processing easier.\n const lines = content.split(/\\r?\\n/);\n\n // Holds entities referenced from text\n const entityMap = [];\n const entityIndex = {};\n\n // Processing lines one by one, hold intermediate result in blx.\n const blx = [];\n lines.forEach((line) => {\n let spans = [];\n let entities;\n\n // Find formatted spans in the string.\n // Try to match each style.\n INLINE_STYLES.forEach((tag) => {\n // Each style could be matched multiple times.\n spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n });\n\n let block;\n if (spans.length == 0) {\n block = {\n txt: line\n };\n } else {\n // Sort spans by style occurence early -> late, then by length: first long then short.\n spans.sort((a, b) => {\n const diff = a.at - b.at;\n return diff != 0 ? diff : b.end - a.end;\n });\n\n // Convert an array of possibly overlapping spans into a tree.\n spans = toSpanTree(spans);\n\n // Build a tree representation of the entire string, not\n // just the formatted parts.\n const chunks = chunkify(line, 0, line.length, spans);\n\n const drafty = draftify(chunks, 0);\n\n block = {\n txt: drafty.txt,\n fmt: drafty.fmt\n };\n }\n\n // Extract entities from the cleaned up string.\n entities = extractEntities(block.txt);\n if (entities.length > 0) {\n const ranges = [];\n for (let i in entities) {\n // {offset: match['index'], unique: match[0], len: match[0].length, data: ent.packer(), type: ent.name}\n const entity = entities[i];\n let index = entityIndex[entity.unique];\n if (!index) {\n index = entityMap.length;\n entityIndex[entity.unique] = index;\n entityMap.push({\n tp: entity.type,\n data: entity.data\n });\n }\n ranges.push({\n at: entity.offset,\n len: entity.len,\n key: index\n });\n }\n block.ent = ranges;\n }\n\n blx.push(block);\n });\n\n const result = {\n txt: ''\n };\n\n // Merge lines and save line breaks as BR inline formatting.\n if (blx.length > 0) {\n result.txt = blx[0].txt;\n result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n\n if (result.fmt.length) {\n const segments = segmenter.segment(result.txt);\n for (const ele of result.fmt) {\n ({\n at: ele.at,\n len: ele.len\n } =\n toGraphemeValues(ele, segments, result.txt));\n }\n }\n\n for (let i = 1; i < blx.length; i++) {\n const block = blx[i];\n const offset = stringToGraphemes(result.txt).length + 1;\n\n result.fmt.push({\n tp: 'BR',\n len: 1,\n at: offset - 1\n });\n\n let segments = {};\n\n result.txt += ' ' + block.txt;\n if (block.fmt) {\n segments = segmenter.segment(block.txt);\n result.fmt = result.fmt.concat(\n block.fmt.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n if (block.ent) {\n if (isEmptyObject(segments)) {\n segments = segmenter.segment(block.txt);\n }\n result.fmt = result.fmt.concat(\n block.ent.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n }\n\n if (result.fmt.length == 0) {\n delete result.fmt;\n }\n\n if (entityMap.length > 0) {\n result.ent = entityMap;\n }\n }\n return result;\n}\n\n/**\n * Append one Drafty document to another.\n *\n * @param {Drafty} first - Drafty document to append to.\n * @param {Drafty|string} second - Drafty document or string being appended.\n *\n * @return {Drafty} first document with the second appended to it.\n */\nDrafty.append = function(first, second) {\n if (!first) {\n return second;\n }\n if (!second) {\n return first;\n }\n\n first.txt = first.txt || '';\n const len = stringToGraphemes(first.txt).length;\n\n if (typeof second == 'string') {\n first.txt += second;\n } else if (second.txt) {\n first.txt += second.txt;\n }\n\n if (Array.isArray(second.fmt)) {\n first.fmt = first.fmt || [];\n if (Array.isArray(second.ent)) {\n first.ent = first.ent || [];\n }\n second.fmt.forEach(src => {\n const fmt = {\n at: (src.at | 0) + len,\n len: src.len | 0\n };\n // Special case for the outside of the normal rendering flow styles.\n if (src.at == -1) {\n fmt.at = -1;\n fmt.len = 0;\n }\n if (src.tp) {\n fmt.tp = src.tp;\n } else {\n fmt.key = first.ent.length;\n first.ent.push(second.ent[src.key || 0]);\n }\n first.fmt.push(fmt);\n });\n }\n\n return first;\n}\n\n/**\n * Description of an image to attach.\n * @typedef {Object} ImageDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the image, e.g. \"image/png\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded image content. Could be null/undefined.\n * @property {string} preview - base64-encoded thumbnail of the image.\n * @property {integer} width - width of the image.\n * @property {integer} height - height of the image.\n * @property {string} filename - file name suggestion for downloading the image.\n * @property {integer} size - size of the image in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded image preview used during upload process; not serializable.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {integer} at - index where the object is inserted. The length of the image is always 1.\n * @param {ImageDesc} imageDesc - object with image paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertImage = function(content, at, imageDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'IM',\n data: {\n mime: imageDesc.mime,\n ref: imageDesc.refurl,\n val: imageDesc.bits || imageDesc.preview,\n width: imageDesc.width,\n height: imageDesc.height,\n name: imageDesc.filename,\n size: imageDesc.size | 0,\n }\n };\n\n if (imageDesc.urlPromise) {\n ex.data._tempPreview = imageDesc._tempPreview;\n ex.data._processing = true;\n imageDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of a video to attach.\n * @typedef {Object} VideoDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the video, e.g. \"video/mpeg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - in-band base64-encoded image data. Could be null/undefined.\n * @property {string} preview - base64-encoded screencapture from the video. Could be null/undefined.\n * @property {string} preref - reference to screencapture from the video. Could be null/undefined.\n * @property {integer} width - width of the video.\n * @property {integer} height - height of the video.\n * @property {integer} duration - duration of the video.\n * @property {string} filename - file name suggestion for downloading the video.\n * @property {integer} size - size of the video in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded screencapture used during upload process; not serializable.\n * @property {Promise} urlPromise - array of two promises, which return URLs of video and preview uploads correspondingly\n * (either could be null).\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add video to.\n * @param {integer} at - index where the object is inserted. The length of the video is always 1.\n * @param {VideoDesc} videoDesc - object with video paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertVideo = function(content, at, videoDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'VD',\n data: {\n mime: videoDesc.mime,\n ref: videoDesc.refurl,\n val: videoDesc.bits,\n preref: videoDesc.preref,\n preview: videoDesc.preview,\n width: videoDesc.width,\n height: videoDesc.height,\n duration: videoDesc.duration | 0,\n name: videoDesc.filename,\n size: videoDesc.size | 0,\n }\n };\n\n if (videoDesc.urlPromise) {\n ex.data._tempPreview = videoDesc._tempPreview;\n ex.data._processing = true;\n videoDesc.urlPromise.then(\n urls => {\n ex.data.ref = urls[0];\n ex.data.preref = urls[1];\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of an audio recording to attach.\n * @typedef {Object} AudioDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the audio, e.g. \"audio/ogg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded audio content. Could be null/undefined.\n * @property {integer} duration - duration of the record in milliseconds.\n * @property {string} preview - base64 encoded short array of amplitude values 0..100.\n * @property {string} filename - file name suggestion for downloading the audio.\n * @property {integer} size - size of the recording in bytes. Treat is as an untrusted hint.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert audio recording into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add audio record to.\n * @param {integer} at - index where the object is inserted. The length of the record is always 1.\n * @param {AudioDesc} audioDesc - object with the audio paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertAudio = function(content, at, audioDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'AU',\n data: {\n mime: audioDesc.mime,\n val: audioDesc.bits,\n duration: audioDesc.duration | 0,\n preview: audioDesc.preview,\n name: audioDesc.filename,\n size: audioDesc.size | 0,\n ref: audioDesc.refurl\n }\n };\n\n if (audioDesc.urlPromise) {\n ex.data._processing = true;\n audioDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Create a (self-contained) video call Drafty document.\n * @memberof Drafty\n * @static\n * @param {boolean} audioOnly
true if the call is initially audio-only.\n * @returns Video Call drafty document.\n */\nDrafty.videoCall = function(audioOnly) {\n const content = {\n txt: ' ',\n fmt: [{\n at: 0,\n len: 1,\n key: 0\n }],\n ent: [{\n tp: 'VC',\n data: {\n aonly: audioOnly\n },\n }]\n };\n return content;\n}\n\n/**\n * Update video call (VC) entity with the new status and duration.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - VC document to update.\n * @param {object} params - new video call parameters.\n * @param {string} params.state - state of video call.\n * @param {number} params.duration - duration of the video call in milliseconds.\n *\n * @returns the same document with update applied.\n */\nDrafty.updateVideoCall = function(content, params) {\n // The video element could be just a format or a format + entity.\n // Must ensure it's the latter first.\n const fmt = ((content || {}).fmt || [])[0];\n if (!fmt) {\n // Unrecognized content.\n return content;\n }\n\n let ent;\n if (fmt.tp == 'VC') {\n // Just a format, convert to format + entity.\n delete fmt.tp;\n fmt.key = 0;\n ent = {\n tp: 'VC'\n };\n content.ent = [ent];\n } else {\n ent = (content.ent || [])[fmt.key | 0];\n if (!ent || ent.tp != 'VC') {\n // Not a VC entity.\n return content;\n }\n }\n ent.data = ent.data || {};\n Object.assign(ent.data, params);\n return content;\n}\n\n/**\n * Create a quote to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} header - Quote header (title, etc.).\n * @param {string} uid - UID of the author to mention.\n * @param {Drafty} body - Body of the quoted message.\n *\n * @returns Reply quote Drafty doc with the quote formatting.\n */\nDrafty.quote = function(header, uid, body) {\n const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n\n // Wrap into a quote.\n quote.fmt.push({\n at: 0,\n len: stringToGraphemes(quote.txt).length,\n tp: 'QQ'\n });\n\n return quote;\n}\n\n/**\n * Create a Drafty document with a mention.\n *\n * @param {string} name - mentioned name.\n * @param {string} uid - mentioned user ID.\n *\n * @returns {Drafty} document with the mention.\n */\nDrafty.mention = function(name, uid) {\n return {\n txt: name || '',\n fmt: [{\n at: 0,\n len: stringToGraphemes(name || '').length,\n key: 0\n }],\n ent: [{\n tp: 'MN',\n data: {\n val: uid\n }\n }]\n };\n}\n\n/**\n * Append a link to a Drafty document.\n *\n * @param {Drafty} content - Drafty document to append link to.\n * @param {Object} linkData - Link info in format {txt: 'ankor text', url: 'http://...'}.\n *\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLink = function(content, linkData) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: content.txt.length,\n len: linkData.txt.length,\n key: content.ent.length\n });\n content.txt += linkData.txt;\n\n const ex = {\n tp: 'LN',\n data: {\n url: linkData.url\n }\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Append image to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {ImageDesc} imageDesc - object with image paramenets.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendImage = function(content, imageDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n}\n\n/**\n * Append audio recodring to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add recording to.\n * @param {AudioDesc} audioDesc - object with audio data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendAudio = function(content, audioDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n}\n\n/**\n * Description of a file to attach.\n * @typedef {Object} AttachmentDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the attachment, e.g. \"application/octet-stream\"\n * @property {string} data - base64-encoded in-band content of small attachments. Could be null/undefined.\n * @property {string} filename - file name suggestion for downloading the attachment.\n * @property {integer} size - size of the file in bytes. Treat is as an untrusted hint.\n * @property {string} refurl - reference to the out-of-band content. Could be null/undefined.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Attach file to Drafty content. Either as a blob or as a reference.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to attach file to.\n * @param {AttachmentDesc} object - containing attachment description and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.attachFile = function(content, attachmentDesc) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'EX',\n data: {\n mime: attachmentDesc.mime,\n val: attachmentDesc.data,\n name: attachmentDesc.filename,\n ref: attachmentDesc.refurl,\n size: attachmentDesc.size | 0\n }\n }\n if (attachmentDesc.urlPromise) {\n ex.data._processing = true;\n attachmentDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n /* catch the error, otherwise it will appear in the console. */\n ex.data._processing = undefined;\n }\n );\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Wraps drafty document into a simple formatting style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - document or string to wrap into a style.\n * @param {string} style - two-letter style to wrap into.\n * @param {number} at - index where the style starts, default 0.\n * @param {number} len - length of the form content, default all of it.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapInto = function(content, style, at, len) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at || 0,\n len: len || content.txt.length,\n tp: style,\n });\n\n return content;\n}\n\n/**\n * Wraps content into an interactive form.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - to wrap into a form.\n * @param {number} at - index where the forms starts.\n * @param {number} len - length of the form content.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapAsForm = function(content, at, len) {\n return Drafty.wrapInto(content, 'FM', at, len);\n}\n\n/**\n * Insert clickable button into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {number} at - location where the button is inserted.\n * @param {number} len - the length of the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertButton = function(content, at, len, name, actionType, actionValue, refUrl) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n\n if (!content || !content.txt || content.txt.length < at + len) {\n return null;\n }\n\n if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n return null;\n }\n // Ensure refUrl is a string.\n if (actionType == 'url' && !refUrl) {\n return null;\n }\n refUrl = '' + refUrl;\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: len,\n key: content.ent.length\n });\n content.ent.push({\n tp: 'BN',\n data: {\n act: actionType,\n val: actionValue,\n ref: refUrl,\n name: name\n }\n });\n\n return content;\n}\n\n/**\n * Append clickable button to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {string} title - the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendButton = function(content, title, name, actionType, actionValue, refUrl) {\n content = content || {\n txt: ''\n };\n const at = content.txt.length;\n content.txt += title;\n return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n}\n\n/**\n * Attach a generic JS object. The object is attached as a json string.\n * Intended for representing a form response.\n *\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to attach file to.\n * @param {Object} data - data to convert to json string and attach.\n * @returns {Drafty} the same document as content.\n */\nDrafty.attachJSON = function(content, data) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n content.ent.push({\n tp: 'EX',\n data: {\n mime: JSON_MIME_TYPE,\n val: data\n }\n });\n\n return content;\n}\n/**\n * Append line break to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append linebreak to.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLineBreak = function(content) {\n content = content || {\n txt: ''\n };\n content.fmt = content.fmt || [];\n content.fmt.push({\n at: stringToGraphemes(content.txt).length,\n len: 1,\n tp: 'BR'\n });\n content.txt += ' ';\n\n return content;\n}\n/**\n * Given Drafty document, convert it to HTML.\n * No attempt is made to strip pre-existing html markup.\n * This is potentially unsafe because content.txt may contain malicious HTML\n * markup.\n * @memberof Tinode.Drafty\n * @static\n *\n * @param {Drafty} doc - document to convert.\n *\n * @returns {string} HTML-representation of content.\n */\nDrafty.UNSAFE_toHTML = function(doc) {\n const tree = draftyToTree(doc);\n const htmlFormatter = function(type, data, values) {\n const tag = DECORATORS[type];\n let result = values ? values.join('') : '';\n if (tag) {\n result = tag.open(data) + result + tag.close(data);\n }\n return result;\n };\n return treeBottomUp(tree, htmlFormatter, 0);\n}\n\n/**\n * Callback for applying custom formatting to a Drafty document.\n * Called once for each style span.\n * @memberof Drafty\n * @static\n *\n * @callback Formatter\n * @param {string} style - style code such as \"ST\" or \"IM\".\n * @param {Object} data - entity's data.\n * @param {Object} values - possibly styled subspans contained in this style span.\n * @param {number} index - index of the element guaranteed to be unique.\n */\n\n/**\n * Convert Drafty document to a representation suitable for display.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|Object} content - Drafty document to transform.\n * @param {Formatter} formatter - callback which formats individual elements.\n * @param {Object} context - context provided to formatter as this.\n *\n * @return {Object} transformed object\n */\nDrafty.format = function(original, formatter, context) {\n return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n}\n\n/**\n * Shorten Drafty document making the drafty text no longer than the limit.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characrets to shorten to.\n * @param {boolean} light - remove heavy data from entities.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.shorten = function(original, limit, light) {\n let tree = draftyToTree(original);\n tree = shortenTree(tree, limit, '…');\n if (tree && light) {\n tree = lightEntity(tree);\n }\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Transform Drafty doc for forwarding: strip leading @mention and any leading line breaks or whitespace.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.forwardedContent = function(original) {\n let tree = draftyToTree(original);\n const rmMention = function(node) {\n if (node.type == 'MN') {\n if (!node.parent || !node.parent.type) {\n return null;\n }\n }\n return node;\n }\n // Strip leading mention.\n tree = treeTopDown(tree, rmMention);\n // Remove leading whitespace.\n tree = lTrim(tree);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Prepare Drafty doc for wrapping into QQ as a reply:\n * - Replace forwarding mention with symbol '➦' and remove data (UID).\n * - Remove quoted text completely.\n * - Replace line breaks with spaces.\n * - Strip entities of heavy content.\n * - Move attachments to the end of the document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.replyContent = function(original, limit) {\n const convMNnQQnBR = function(node) {\n if (node.type == 'QQ') {\n return null;\n } else if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n delete node.data;\n }\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.type;\n delete node.children;\n }\n return node;\n }\n\n let tree = draftyToTree(original);\n if (!tree) {\n return original;\n }\n\n // Strip leading mention.\n tree = treeTopDown(tree, convMNnQQnBR);\n // Move attachments to the end of the doc.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n // Shorten the doc.\n tree = shortenTree(tree, limit, '…');\n // Strip heavy elements except IM.data['val'] and VD.data['preview'] (have to keep them to generate previews later).\n const filter = node => {\n switch (node.type) {\n case 'IM':\n return ['val'];\n case 'VD':\n return ['preview'];\n }\n return null;\n };\n tree = lightEntity(tree, filter);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n\n/**\n * Generate drafty preview:\n * - Shorten the document.\n * - Strip all heavy entity data leaving just inline styles and entity references.\n * - Replace line breaks with spaces.\n * - Replace content of QQ with a space.\n * - Replace forwarding mention with symbol '➦'.\n * move all attachments to the end of the document and make them visible.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @param {boolean} forwarding - this a forwarding message preview.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.preview = function(original, limit, forwarding) {\n let tree = draftyToTree(original);\n\n // Move attachments to the end.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n\n // Convert leading mention to '➦' and replace QQ and BR with a space ' '.\n const convMNnQQnBR = function(node) {\n if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n }\n } else if (node.type == 'QQ') {\n node.text = ' ';\n delete node.children;\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.children;\n delete node.type;\n }\n return node;\n }\n tree = treeTopDown(tree, convMNnQQnBR);\n\n tree = shortenTree(tree, limit, '…');\n if (forwarding) {\n // Keep some IM and VD data for preview.\n const filter = {\n IM: ['val'],\n VD: ['preview']\n };\n tree = lightEntity(tree, node => {\n return filter[node.type];\n });\n } else {\n tree = lightEntity(tree);\n }\n\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Given Drafty document, convert it to plain text.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text.\n * @returns {string} plain-text representation of the drafty document.\n */\nDrafty.toPlainText = function(content) {\n return typeof content == 'string' ? content : content.txt;\n}\n\n/**\n * Check if the document has no markup and no entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for presence of markup.\n * @returns true is content is plain text, false otherwise.\n */\nDrafty.isPlainText = function(content) {\n return typeof content == 'string' || !(content.fmt || content.ent);\n}\n\n/**\n * Convert document to plain text with markdown. All elements which cannot\n * be represented in markdown are stripped.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text with markdown.\n */\nDrafty.toMarkdown = function(content) {\n let tree = draftyToTree(content);\n const mdFormatter = function(type, _, values) {\n const def = FORMAT_TAGS[type];\n let result = (values ? values.join('') : '');\n if (def) {\n if (def.isVoid) {\n result = def.md_tag || '';\n } else if (def.md_tag) {\n result = def.md_tag + result + def.md_tag;\n }\n }\n return result;\n };\n return treeBottomUp(tree, mdFormatter, 0);\n}\n\n/**\n * Checks if the object represets is a valid Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for validity.\n * @returns true is content is valid, false otherwise.\n */\nDrafty.isValid = function(content) {\n if (!content) {\n return false;\n }\n\n const {\n txt,\n fmt,\n ent\n } = content;\n\n if (!txt && txt !== '' && !fmt && !ent) {\n return false;\n }\n\n const txt_type = typeof txt;\n if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n return false;\n }\n\n if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n return false;\n }\n\n if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if the drafty document has attachments: style EX and outside of normal rendering flow,\n * i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for attachments.\n * @returns true if there are attachments.\n */\nDrafty.hasAttachments = function(content) {\n if (!Array.isArray(content.fmt)) {\n return false;\n }\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n return ent && ent.tp == 'EX' && ent.data;\n }\n }\n return false;\n}\n\n/**\n * Callback for enumerating entities in a Drafty document.\n * Called once for each entity.\n * @memberof Drafty\n * @static\n *\n * @callback EntityCallback\n * @param {Object} data entity data.\n * @param {string} entity type.\n * @param {number} index entity's index in `content.ent`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate attachments: style EX and outside of normal rendering flow, i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to process for attachments.\n * @param {EntityCallback} callback - callback to call for each attachment.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.attachments = function(content, callback, context) {\n if (!Array.isArray(content.fmt)) {\n return;\n }\n let count = 0;\n for (let i in content.fmt) {\n let fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n if (ent && ent.tp == 'EX' && ent.data) {\n if (callback.call(context, ent.data, count++, 'EX')) {\n break;\n }\n }\n }\n };\n}\n\n/**\n * Check if the drafty document has entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for entities.\n * @returns true if there are entities.\n */\nDrafty.hasEntities = function(content) {\n return content.ent && content.ent.length > 0;\n}\n\n/**\n * Enumerate entities. Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @param {EntityCallback} callback - callback to call for each entity.\n * @param {Object} context - value of \"this\" for callback.\n *\n */\nDrafty.entities = function(content, callback, context) {\n if (content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n if (content.ent[i]) {\n if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Callback for enumerating styles (inline formats) in a Drafty document.\n * Called once for each style.\n * @memberof Drafty\n * @static\n *\n * @callback StyleCallback\n * @param {string} tp - format type.\n * @param {number} at - starting position of the format in text.\n * @param {number} len - extent of the format in characters.\n * @param {number} key - index of the entity if format is a reference.\n * @param {number} index - style's index in `content.fmt`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate styles (inline formats). Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with styles (formats) to enumerate.\n * @param {StyleCallback} callback - callback to call for each format.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.styles = function(content, callback, context) {\n if (content.fmt && content.fmt.length > 0) {\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt) {\n if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Remove unrecognized fields from entity data\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @returns content.\n */\nDrafty.sanitizeEntities = function(content) {\n if (content && content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n const ent = content.ent[i];\n if (ent && ent.data) {\n const data = copyEntData(ent.data);\n if (data) {\n content.ent[i].data = data;\n } else {\n delete content.ent[i].data;\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Given the entity, get URL which can be used for downloading\n * entity data.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the URl from.\n * @returns {string} URL to download entity data or null.\n */\nDrafty.getDownloadUrl = function(entData) {\n let url = null;\n if (entData.mime != JSON_MIME_TYPE && entData.val) {\n url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n } else if (typeof entData.ref == 'string') {\n url = entData.ref;\n }\n return url;\n}\n\n/**\n * Check if the entity data is not ready for sending, such as being uploaded to the server.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n * @returns {boolean} true if upload is in progress, false otherwise.\n */\nDrafty.isProcessing = function(entData) {\n return !!entData._processing;\n}\n\n/**\n * Given the entity, get URL which can be used for previewing\n * the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n *\n * @returns {string} url for previewing or null if no such url is available.\n */\nDrafty.getPreviewUrl = function(entData) {\n return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n}\n\n/**\n * Get approximate size of the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the size for.\n * @returns {number} size of entity data in bytes.\n */\nDrafty.getEntitySize = function(entData) {\n // Either size hint or length of value. The value is base64 encoded,\n // the actual object size is smaller than the encoded length.\n return entData.size ? entData.size : entData.val ? (entData.val.length * 0.75) | 0 : 0;\n}\n\n/**\n * Get entity mime type.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the type for.\n * @returns {string} mime type of entity.\n */\nDrafty.getEntityMimeType = function(entData) {\n return entData.mime || 'text/plain';\n}\n\n/**\n * Get HTML tag for a given two-letter style name.\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style, like ST or LN.\n *\n * @returns {string} HTML tag name if style is found, {code: undefined} if style is falsish or not found.\n */\nDrafty.tagName = function(style) {\n return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n}\n\n/**\n * For a given data bundle generate an object with HTML attributes,\n * for instance, given {url: \"http://www.example.com/\"} return\n * {href: \"http://www.example.com/\"}\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style to generate attributes for.\n * @param {Object} data - data bundle to convert to attributes\n *\n * @returns {Object} object with HTML attributes.\n */\nDrafty.attrValue = function(style, data) {\n if (data && DECORATORS[style] && DECORATORS[style].props) {\n return DECORATORS[style].props(data);\n }\n\n return undefined;\n}\n\n/**\n * Drafty MIME type.\n * @memberof Drafty\n * @static\n *\n * @returns {string} content-Type \"text/x-drafty\".\n */\nDrafty.getContentType = function() {\n return DRAFTY_MIME_TYPE;\n}\n\n// =================\n// Utility methods.\n// =================\n\n// Take a string and defined earlier style spans, re-compose them into a tree where each leaf is\n// a same-style (including unstyled) string. I.e. 'hello *bold _italic_* and ~more~ world' ->\n// ('hello ', (b: 'bold ', (i: 'italic')), ' and ', (s: 'more'), ' world');\n//\n// This is needed in order to clear markup, i.e. 'hello *world*' -> 'hello world' and convert\n// ranges from markup-ed offsets to plain text offsets.\nfunction chunkify(line, start, end, spans) {\n const chunks = [];\n\n if (spans.length == 0) {\n return [];\n }\n\n for (let i in spans) {\n // Get the next chunk from the queue\n const span = spans[i];\n\n // Grab the initial unstyled chunk\n if (span.at > start) {\n chunks.push({\n txt: line.slice(start, span.at)\n });\n }\n\n // Grab the styled chunk. It may include subchunks.\n const chunk = {\n tp: span.tp\n };\n const chld = chunkify(line, span.at + 1, span.end, span.children);\n if (chld.length > 0) {\n chunk.children = chld;\n } else {\n chunk.txt = span.txt;\n }\n chunks.push(chunk);\n start = span.end + 1; // '+1' is to skip the formatting character\n }\n\n // Grab the remaining unstyled chunk, after the last span\n if (start < end) {\n chunks.push({\n txt: line.slice(start, end)\n });\n }\n\n return chunks;\n}\n\n// Detect starts and ends of formatting spans. Unformatted spans are\n// ignored at this stage.\nfunction spannify(original, re_start, re_end, type) {\n const result = [];\n let index = 0;\n let line = original.slice(0); // make a copy;\n\n while (line.length > 0) {\n // match[0]; // match, like '*abc*'\n // match[1]; // match captured in parenthesis, like 'abc'\n // match['index']; // offset where the match started.\n\n // Find the opening token.\n const start = re_start.exec(line);\n if (start == null) {\n break;\n }\n\n // Because javascript RegExp does not support lookbehind, the actual offset may not point\n // at the markup character. Find it in the matched string.\n let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n // Clip the processed part of the string.\n line = line.slice(start_offset + 1);\n // start_offset is an offset within the clipped string. Convert to original index.\n start_offset += index;\n // Index now point to the beginning of 'line' within the 'original' string.\n index = start_offset + 1;\n\n // Find the matching closing token.\n const end = re_end ? re_end.exec(line) : null;\n if (end == null) {\n break;\n }\n let end_offset = end['index'] + end[0].indexOf(end[1]);\n // Clip the processed part of the string.\n line = line.slice(end_offset + 1);\n // Update offsets\n end_offset += index;\n // Index now points to the beginning of 'line' within the 'original' string.\n index = end_offset + 1;\n\n result.push({\n txt: original.slice(start_offset + 1, end_offset),\n children: [],\n at: start_offset,\n end: end_offset,\n tp: type\n });\n }\n\n return result;\n}\n\n// Convert linear array or spans into a tree representation.\n// Keep standalone and nested spans, throw away partially overlapping spans.\nfunction toSpanTree(spans) {\n if (spans.length == 0) {\n return [];\n }\n\n const tree = [spans[0]];\n let last = spans[0];\n for (let i = 1; i < spans.length; i++) {\n // Keep spans which start after the end of the previous span or those which\n // are complete within the previous span.\n if (spans[i].at > last.end) {\n // Span is completely outside of the previous span.\n tree.push(spans[i]);\n last = spans[i];\n } else if (spans[i].end <= last.end) {\n // Span is fully inside of the previous span. Push to subnode.\n last.children.push(spans[i]);\n }\n // Span could partially overlap, ignoring it as invalid.\n }\n\n // Recursively rearrange the subnodes.\n for (let i in tree) {\n tree[i].children = toSpanTree(tree[i].children);\n }\n\n return tree;\n}\n\n// Convert drafty document to a tree.\nfunction draftyToTree(doc) {\n if (!doc) {\n return null;\n }\n\n doc = (typeof doc == 'string') ? {\n txt: doc\n } : doc;\n let {\n txt,\n fmt,\n ent\n } = doc;\n\n txt = txt || '';\n if (!Array.isArray(ent)) {\n ent = [];\n }\n\n if (!Array.isArray(fmt) || fmt.length == 0) {\n if (ent.length == 0) {\n return {\n text: txt\n };\n }\n\n // Handle special case when all values in fmt are 0 and fmt therefore is skipped.\n fmt = [{\n at: 0,\n len: 0,\n key: 0\n }];\n }\n\n // Sanitize spans.\n const spans = [];\n const attachments = [];\n fmt.forEach((span) => {\n if (!span || typeof span != 'object') {\n return;\n }\n\n if (!['undefined', 'number'].includes(typeof span.at)) {\n // Present, but non-numeric 'at'.\n return;\n }\n if (!['undefined', 'number'].includes(typeof span.len)) {\n // Present, but non-numeric 'len'.\n return;\n }\n let at = span.at | 0;\n let len = span.len | 0;\n if (len < 0) {\n // Invalid span length.\n return;\n }\n\n let key = span.key || 0;\n if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n // Invalid key value.\n return;\n }\n\n if (at <= -1) {\n // Attachment. Store attachments separately.\n attachments.push({\n start: -1,\n end: 0,\n key: key\n });\n return;\n } else if (at + len > stringToGraphemes(txt).length) {\n // Span is out of bounds.\n return;\n }\n\n if (!span.tp) {\n if (ent.length > 0 && (typeof ent[key] == 'object')) {\n spans.push({\n start: at,\n end: at + len,\n key: key\n });\n }\n } else {\n spans.push({\n type: span.tp,\n start: at,\n end: at + len\n });\n }\n });\n\n // Sort spans first by start index (asc) then by length (desc), then by weight.\n spans.sort((a, b) => {\n let diff = a.start - b.start;\n if (diff != 0) {\n return diff;\n }\n diff = b.end - a.end;\n if (diff != 0) {\n return diff;\n }\n return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n });\n\n // Move attachments to the end of the list.\n if (attachments.length > 0) {\n spans.push(...attachments);\n }\n\n spans.forEach((span) => {\n if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n span.type = ent[span.key].tp;\n span.data = ent[span.key].data;\n }\n\n // Is type still undefined? Hide the invalid element!\n if (!span.type) {\n span.type = 'HD';\n }\n });\n\n const graphemes = stringToGraphemes(txt);\n let tree = spansToTree({}, graphemes, 0, graphemes.length, spans);\n\n // Flatten tree nodes.\n const flatten = function(node) {\n if (Array.isArray(node.children) && node.children.length == 1) {\n // Unwrap.\n const child = node.children[0];\n if (!node.type) {\n const parent = node.parent;\n node = child;\n node.parent = parent;\n } else if (!child.type && !child.children) {\n node.text = child.text;\n delete node.children;\n }\n }\n return node;\n }\n tree = treeTopDown(tree, flatten);\n\n return tree;\n}\n\n// Add tree node to a parent tree.\nfunction addNode(parent, n) {\n if (!n) {\n return parent;\n }\n\n if (!parent.children) {\n parent.children = [];\n }\n\n // If text is present, move it to a subnode.\n if (parent.text) {\n parent.children.push({\n text: parent.text,\n parent: parent\n });\n delete parent.text;\n }\n\n n.parent = parent;\n parent.children.push(n);\n\n return parent;\n}\n\n// Returns a tree of nodes.\nfunction spansToTree(parent, graphemes, start, end, spans) {\n if (!spans || spans.length == 0) {\n if (start < end) {\n addNode(parent, {\n text: graphemes.slice(start, end)\n .map(segment => segment.segment)\n .join('')\n });\n }\n return parent;\n }\n\n // Process subspans.\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n if (span.start < 0 && span.type == 'EX') {\n addNode(parent, {\n type: span.type,\n data: span.data,\n key: span.key,\n att: true\n });\n continue;\n }\n\n // Add un-styled range before the styled span starts.\n if (start < span.start) {\n addNode(parent, {\n text: graphemes.slice(start, span.start)\n .map(segment => segment.segment)\n .join('')\n });\n start = span.start;\n }\n\n // Get all spans which are within the current span.\n const subspans = [];\n while (i < spans.length - 1) {\n const inner = spans[i + 1];\n if (inner.start < 0) {\n // Attachments are in the end. Stop.\n break;\n } else if (inner.start < span.end) {\n if (inner.end <= span.end) {\n const tag = FORMAT_TAGS[inner.tp] || {};\n if (inner.start < inner.end || tag.isVoid) {\n // Valid subspan: completely within the current span and\n // either non-zero length or zero length is acceptable.\n subspans.push(inner);\n }\n }\n i++;\n // Overlapping subspans are ignored.\n } else {\n // Past the end of the current span. Stop.\n break;\n }\n }\n\n addNode(parent, spansToTree({\n type: span.type,\n data: span.data,\n key: span.key\n }, graphemes, start, span.end, subspans));\n start = span.end;\n }\n\n // Add the last unformatted range.\n if (start < end) {\n addNode(parent, {\n text: graphemes\n .slice(start, end)\n .map((segment) => segment.segment)\n .join('')\n });\n }\n\n return parent;\n}\n\n// Append a tree to a Drafty doc.\nfunction treeToDrafty(doc, tree, keymap) {\n if (!tree) {\n return doc;\n }\n\n doc.txt = doc.txt || '';\n\n // Checkpoint to measure length of the current tree node.\n const start = stringToGraphemes(doc.txt).length;\n\n if (tree.text) {\n doc.txt += tree.text;\n } else if (Array.isArray(tree.children)) {\n tree.children.forEach((c) => {\n treeToDrafty(doc, c, keymap);\n });\n }\n\n if (tree.type) {\n const len = stringToGraphemes(doc.txt).length - start;\n doc.fmt = doc.fmt || [];\n if (Object.keys(tree.data || {}).length > 0) {\n doc.ent = doc.ent || [];\n const newKey = (typeof keymap[tree.key] == 'undefined') ? doc.ent.length : keymap[tree.key];\n keymap[tree.key] = newKey;\n doc.ent[newKey] = {\n tp: tree.type,\n data: tree.data\n };\n if (tree.att) {\n // Attachment.\n doc.fmt.push({\n at: -1,\n len: 0,\n key: newKey\n });\n } else {\n doc.fmt.push({\n at: start,\n len: len,\n key: newKey\n });\n }\n } else {\n doc.fmt.push({\n tp: tree.type,\n at: start,\n len: len\n });\n }\n }\n return doc;\n}\n\n// Traverse the tree top down transforming the nodes: apply transformer to every tree node.\nfunction treeTopDown(src, transformer, context) {\n if (!src) {\n return null;\n }\n\n let dst = transformer.call(context, src);\n if (!dst || !dst.children) {\n return dst;\n }\n\n const children = [];\n for (let i in dst.children) {\n let n = dst.children[i];\n if (n) {\n n = treeTopDown(n, transformer, context);\n if (n) {\n children.push(n);\n }\n }\n }\n\n if (children.length == 0) {\n dst.children = null;\n } else {\n dst.children = children;\n }\n\n return dst;\n}\n\n// Traverse the tree bottom-up: apply formatter to every node.\n// The formatter must maintain its state through context.\nfunction treeBottomUp(src, formatter, index, stack, context) {\n if (!src) {\n return null;\n }\n\n if (stack && src.type) {\n stack.push(src.type);\n }\n\n let values = [];\n for (let i in src.children) {\n const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n if (n) {\n values.push(n);\n }\n }\n if (values.length == 0) {\n if (src.text) {\n values = [src.text];\n } else {\n values = null;\n }\n }\n\n if (stack && src.type) {\n stack.pop();\n }\n\n return formatter.call(context, src.type, src.data, values, index, stack);\n}\n\n// Clip tree to the provided limit.\nfunction shortenTree(tree, limit, tail) {\n if (!tree) {\n return null;\n }\n\n if (tail) {\n limit -= tail.length;\n }\n\n const shortener = function(node) {\n if (limit <= -1) {\n // Limit -1 means the doc was already clipped.\n return null;\n }\n\n if (node.att) {\n // Attachments are unchanged.\n return node;\n }\n if (limit == 0) {\n node.text = tail;\n limit = -1;\n } else if (node.text) {\n const graphemes = stringToGraphemes(node.text);\n if (graphemes.length > limit) {\n node.text = graphemes\n .slice(0, limit)\n .map((segment) => segment.segment)\n .join('') + tail;\n limit = -1;\n } else {\n limit -= graphemes.length;\n }\n }\n return node;\n }\n\n return treeTopDown(tree, shortener);\n}\n\n// Strip heavy entities from a tree.\nfunction lightEntity(tree, allow) {\n const lightCopy = node => {\n const data = copyEntData(node.data, true, allow ? allow(node) : null);\n if (data) {\n node.data = data;\n } else {\n delete node.data;\n }\n return node;\n }\n return treeTopDown(tree, lightCopy);\n}\n\n// Remove spaces and breaks on the left.\nfunction lTrim(tree) {\n if (tree.type == 'BR') {\n tree = null;\n } else if (tree.text) {\n if (!tree.type) {\n tree.text = tree.text.trimStart();\n if (!tree.text) {\n tree = null;\n }\n }\n } else if (!tree.type && tree.children && tree.children.length > 0) {\n const c = lTrim(tree.children[0]);\n if (c) {\n tree.children[0] = c;\n } else {\n tree.children.shift();\n if (!tree.type && tree.children.length == 0) {\n tree = null;\n }\n }\n }\n return tree;\n}\n\n// Move attachments to the end. Attachments must be at the top level, no need to traverse the tree.\nfunction attachmentsToEnd(tree, limit) {\n if (!tree) {\n return null;\n }\n\n if (tree.att) {\n tree.text = ' ';\n delete tree.att;\n delete tree.children;\n } else if (tree.children) {\n const attachments = [];\n const children = [];\n for (let i in tree.children) {\n const c = tree.children[i];\n if (c.att) {\n if (attachments.length == limit) {\n // Too many attachments to preview;\n continue;\n }\n if (c.data['mime'] == JSON_MIME_TYPE) {\n // JSON attachments are not shown in preview.\n continue;\n }\n\n delete c.att;\n delete c.children;\n c.text = ' ';\n attachments.push(c);\n } else {\n children.push(c);\n }\n }\n tree.children = children.concat(attachments);\n }\n return tree;\n}\n\n// Get a list of entities from a text.\nfunction extractEntities(line) {\n let match;\n let extracted = [];\n ENTITY_TYPES.forEach((entity) => {\n while ((match = entity.re.exec(line)) !== null) {\n extracted.push({\n offset: match['index'],\n len: match[0].length,\n unique: match[0],\n data: entity.pack(match[0]),\n type: entity.name\n });\n }\n });\n\n if (extracted.length == 0) {\n return extracted;\n }\n\n // Remove entities detected inside other entities, like #hashtag in a URL.\n extracted.sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let idx = -1;\n extracted = extracted.filter((el) => {\n const result = (el.offset > idx);\n idx = el.offset + el.len;\n return result;\n });\n\n return extracted;\n}\n\n// Convert the chunks into format suitable for serialization.\nfunction draftify(chunks, startAt) {\n let plain = '';\n let ranges = [];\n for (let i in chunks) {\n const chunk = chunks[i];\n if (!chunk.txt) {\n const drafty = draftify(chunk.children, plain.length + startAt);\n chunk.txt = drafty.txt;\n ranges = ranges.concat(drafty.fmt);\n }\n\n if (chunk.tp) {\n ranges.push({\n at: plain.length + startAt,\n len: chunk.txt.length,\n tp: chunk.tp\n });\n }\n\n plain += chunk.txt;\n }\n return {\n txt: plain,\n fmt: ranges\n };\n}\n\n// Create a copy of entity data with (light=false) or without (light=true) the large payload.\n// The array 'allow' contains a list of fields exempt from stripping.\nfunction copyEntData(data, light, allow) {\n if (data && Object.entries(data).length > 0) {\n allow = allow || [];\n const dc = {};\n ALLOWED_ENT_FIELDS.forEach(key => {\n if (data[key]) {\n if (light && !allow.includes(key) &&\n (typeof data[key] == 'string' || Array.isArray(data[key])) &&\n data[key].length > MAX_PREVIEW_DATA_SIZE) {\n return;\n }\n if (typeof data[key] == 'object') {\n return;\n }\n dc[key] = data[key];\n }\n });\n\n if (Object.entries(dc).length != 0) {\n return dc;\n }\n }\n return null;\n}\n\n// Returns true if object is empty, if undefined returns true\nfunction isEmptyObject(obj) {\n return Object.keys(obj ?? {}).length == 0;\n};\n\n\n// Returns an array (of length equal to the length of the original string) such that each index\n// denotes the position of char in string in a grapheme array (created from that string)\n// Eg: string: \"Hi👋🏼Hi\" -> [0,1,2,2,2,2,3,4]\nfunction graphemeIndices(graphemes) {\n const result = [];\n let graphemeIndex = 0;\n let charIndex = 0;\n\n // Iterate over the grapheme clusters.\n for (const {\n segment\n }\n of graphemes) {\n // Map the character indices to the grapheme index.\n for (let i = 0; i < segment.length; i++) {\n result[charIndex + i] = graphemeIndex;\n }\n\n // Increment the character index by the length of the grapheme cluster.\n charIndex += segment.length;\n\n // Increment the grapheme index.\n graphemeIndex++;\n }\n\n return result;\n}\n\n// Convert fmt.at and fmt.len from character-expressed index and length to grapheme-expressed\n// index and length.\nfunction toGraphemeValues(fmt, segments, txt) {\n segments = segments ?? segmenter.segment(txt);\n\n const indices = graphemeIndices(segments);\n\n const correctAt = indices[fmt.at];\n const correctLen = fmt.at + fmt.len <= txt.length ?\n indices[fmt.at + fmt.len - 1] - correctAt : fmt.len;\n\n return {\n at: correctAt,\n len: correctLen + 1\n };\n}\n\n// Convert string to graphme cluster array.\nfunction stringToGraphemes(str) {\n return Array.from(segmenter.segment(str));\n}\n\nif (typeof module != 'undefined') {\n module.exports = Drafty;\n}\n","/**\n * @file Utilities for uploading and downloading files.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n isUrlRelative,\n jsonParseHelper\n} from './utils.js';\n\nlet XHRProvider;\n\nfunction addURLParam(relUrl, key, value) {\n const url = new URL(relUrl, window.location.origin);\n url.searchParams.append(key, value);\n return url.toString().substring(window.location.origin.length);\n}\n\n/**\n * @class LargeFileHelper - utilities for uploading and downloading files out of band.\n * Don't instantiate this class directly. Use {Tinode.getLargeFileHelper} instead.\n * @memberof Tinode\n *\n * @param {Tinode} tinode - the main Tinode object.\n * @param {string} version - protocol version, i.e. '0'.\n */\nexport default class LargeFileHelper {\n constructor(tinode, version) {\n this._tinode = tinode;\n this._version = version;\n\n this._apiKey = tinode._apiKey;\n this._authToken = tinode.getAuthToken();\n\n // Ongoing requests.\n this.xhr = [];\n }\n\n /**\n * Start uploading the file to an endpoint at baseUrl.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} baseUrl base URL of upload server.\n * @param {File|Blob} data data to upload.\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n let url = `/v${this._version}/file/u/`;\n if (baseUrl) {\n let base = baseUrl;\n if (base.endsWith('/')) {\n // Removing trailing slash.\n base = base.slice(0, -1);\n }\n if (base.startsWith('http://') || base.startsWith('https://')) {\n url = base + url;\n } else {\n throw new Error(`Invalid base URL '${baseUrl}'`);\n }\n }\n\n const instance = this;\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n xhr.open('POST', url, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n if (this._authToken) {\n xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n }\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n xhr.upload.onprogress = e => {\n if (e.lengthComputable) {\n if (onProgress) {\n onProgress(e.loaded / e.total);\n }\n if (this.onProgress) {\n this.onProgress(e.loaded / e.total);\n }\n }\n };\n\n xhr.onload = function() {\n let pkt;\n try {\n pkt = JSON.parse(this.response, jsonParseHelper);\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n pkt = {\n ctrl: {\n code: this.status,\n text: this.statusText\n }\n };\n }\n\n if (this.status >= 200 && this.status < 300) {\n if (toResolve) {\n toResolve(pkt.ctrl.params.url);\n }\n if (onSuccess) {\n onSuccess(pkt.ctrl);\n }\n } else if (this.status >= 400) {\n if (toReject) {\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n }\n if (onFailure) {\n onFailure(pkt.ctrl);\n }\n } else {\n instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(e || new Error(\"failed\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n xhr.onabort = function(e) {\n if (toReject) {\n toReject(new Error(\"upload cancelled by user\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n try {\n const form = new FormData();\n form.append('file', data);\n form.set('id', this._tinode.getNextUniqueId());\n if (avatarFor) {\n form.set('topic', avatarFor);\n }\n xhr.send(form);\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onFailure) {\n onFailure(null);\n }\n }\n\n return result;\n }\n /**\n * Start uploading the file to default endpoint.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {File|Blob} data to upload\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n }\n /**\n * Download the file from a given URL using GET request. This method works with the Tinode server only.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} relativeUrl - URL to download the file from. Must be relative url, i.e. must not contain the host.\n * @param {string=} filename - file name to use for the downloaded file.\n *\n * @returns {Promise} resolved/rejected when the download is completed/failed.\n */\n download(relativeUrl, filename, mimetype, onProgress, onError) {\n if (!isUrlRelative(relativeUrl)) {\n // As a security measure refuse to download from an absolute URL.\n if (onError) {\n onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n }\n return;\n }\n if (!this._authToken) {\n if (onError) {\n onError(\"Must authenticate first\");\n }\n return;\n }\n const instance = this;\n\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n // Add '&asatt=1' to URL to request 'Content-Disposition: attachment' response header.\n relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n\n // Get data as blob (stored by the browser as a temporary file).\n xhr.open('GET', relativeUrl, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n xhr.responseType = 'blob';\n\n xhr.onprogress = function(e) {\n if (onProgress) {\n // Passing e.loaded instead of e.loaded/e.total because e.total\n // is always 0 with gzip compression enabled by the server.\n onProgress(e.loaded);\n }\n };\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n // The blob needs to be saved as file. There is no known way to\n // save the blob as file other than to fake a click on an .\n xhr.onload = function() {\n if (this.status == 200) {\n const link = document.createElement('a');\n // URL.createObjectURL is not available in non-browser environment. This call will fail.\n link.href = window.URL.createObjectURL(new Blob([this.response], {\n type: mimetype\n }));\n link.style.display = 'none';\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(link.href);\n if (toResolve) {\n toResolve();\n }\n } else if (this.status >= 400 && toReject) {\n // The this.responseText is undefined, must use this.response which is a blob.\n // Need to convert this.response to JSON. The blob can only be accessed by the\n // FileReader.\n const reader = new FileReader();\n reader.onload = function() {\n try {\n const pkt = JSON.parse(this.result, jsonParseHelper);\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n toReject(err);\n }\n };\n reader.readAsText(this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(new Error(\"failed\"));\n }\n if (onError) {\n onError(e);\n }\n };\n\n xhr.onabort = function() {\n if (toReject) {\n toReject(null);\n }\n };\n\n try {\n xhr.send();\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onError) {\n onError(err);\n }\n }\n\n return result;\n }\n /**\n * Try to cancel all ongoing uploads or downloads.\n * @memberof Tinode.LargeFileHelper#\n */\n cancel() {\n this.xhr.forEach(req => {\n if (req.readyState < 4) {\n req.abort();\n }\n });\n }\n /**\n * To use LargeFileHelper in a non browser context, supply XMLHttpRequest provider.\n * @static\n * @memberof LargeFileHelper\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProvider(xhrProvider) {\n XHRProvider = xhrProvider;\n }\n}\n","/**\n * @file Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n/**\n * Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @class MetaGetBuilder\n * @memberof Tinode\n *\n * @param {Tinode.Topic} parent topic which instantiated this builder.\n */\nexport default class MetaGetBuilder {\n constructor(parent) {\n this.topic = parent;\n this.what = {};\n }\n\n // Get timestamp of the most recent desc update.\n #get_desc_ims() {\n return this.topic._deleted ? undefined : this.topic.updated;\n }\n\n // Get timestamp of the most recent subs update.\n #get_subs_ims() {\n if (this.topic.isP2PType()) {\n return this.#get_desc_ims();\n }\n return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n }\n /**\n * Add query parameters to fetch messages within explicit limits.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - messages newer than this (inclusive);\n * @param {number=} before - older than this (exclusive)\n * @param {number=} limit - number of messages to fetch\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withData(since, before, limit) {\n this.what['data'] = {\n since: since,\n before: before,\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages newer than the latest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of messages to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterData(limit) {\n return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n }\n /**\n * Add query parameters to fetch messages older than the earliest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of messages to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withEarlierData(limit) {\n return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the given timestamp.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch messages newer than this timestamp.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDesc(ims) {\n this.what['desc'] = {\n ims: ims\n };\n return this;\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDesc() {\n return this.withDesc(this.#get_desc_ims());\n }\n /**\n * Add query parameters to fetch subscriptions.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {number=} limit - maximum number of subscriptions to fetch.\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withSub(ims, limit, userOrTopic) {\n const opts = {\n ims: ims,\n limit: limit\n };\n if (this.topic.getType() == 'me') {\n opts.topic = userOrTopic;\n } else {\n opts.user = userOrTopic;\n }\n this.what['sub'] = opts;\n return this;\n }\n /**\n * Add query parameters to fetch a single subscription.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withOneSub(ims, userOrTopic) {\n return this.withSub(ims, undefined, userOrTopic);\n }\n /**\n * Add query parameters to fetch a single subscription if it's been updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterOneSub(userOrTopic) {\n return this.withOneSub(this.topic._lastSubsUpdate, userOrTopic);\n }\n /**\n * Add query parameters to fetch subscriptions updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of subscriptions to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterSub(limit) {\n return this.withSub(this.#get_subs_ims(), limit);\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withTags() {\n this.what['tags'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch user's credentials. 'me' topic only.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withCred() {\n if (this.topic.getType() == 'me') {\n this.what['cred'] = true;\n } else {\n this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\", this.topic.getType());\n }\n return this;\n }\n /**\n * Add query parameters to fetch deleted messages within explicit limits. Any/all parameters can be null.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - ids of messages deleted since this 'del' id (inclusive)\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDel(since, limit) {\n if (since || limit) {\n this.what['del'] = {\n since: since,\n limit: limit\n };\n }\n return this;\n }\n /**\n * Add query parameters to fetch messages deleted after the saved 'del' id.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDel(limit) {\n // Specify 'since' only if we have already received some messages. If\n // we have no locally cached messages then we don't care if any messages were deleted.\n return this.withDel(this.topic._maxSeq > 0 ? this.topic._maxDel + 1 : undefined, limit);\n }\n\n /**\n * Extract subquery: get an object that contains specified subquery.\n * @memberof Tinode.MetaGetBuilder#\n * @param {string} what - subquery to return: one of 'data', 'sub', 'desc', 'tags', 'cred', 'del'.\n * @returns {Object} requested subquery or undefined.\n */\n extract(what) {\n return this.what[what];\n }\n\n /**\n * Construct parameters.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.GetQuery} Get query\n */\n build() {\n const what = [];\n let params = {};\n ['data', 'sub', 'desc', 'tags', 'cred', 'del'].forEach((key) => {\n if (this.what.hasOwnProperty(key)) {\n what.push(key);\n if (Object.getOwnPropertyNames(this.what[key]).length > 0) {\n params[key] = this.what[key];\n }\n }\n });\n if (what.length > 0) {\n params.what = what.join(' ');\n } else {\n params = undefined;\n }\n return params;\n }\n}\n","/**\n * @file Topic management.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport CBuffer from './cbuffer.js';\nimport CommError from './comm-error.js';\nimport * as Const from './config.js';\nimport Drafty from './drafty.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n mergeObj,\n mergeToCache,\n normalizeArray\n} from './utils.js';\n\n/**\n * Topic is a class representing a logical communication channel.\n */\nexport class Topic {\n /**\n * @callback onData\n * @param {Data} data - Data packet\n */\n\n /**\n * Create topic.\n * @param {string} name - Name of the topic to create.\n * @param {Object=} callbacks - Object with various event callbacks.\n * @param {onData} callbacks.onData - Callback which receives a {data} message.\n * @param {callback} callbacks.onMeta - Callback which receives a {meta} message.\n * @param {callback} callbacks.onPres - Callback which receives a {pres} message.\n * @param {callback} callbacks.onInfo - Callback which receives an {info} message.\n * @param {callback} callbacks.onMetaDesc - Callback which receives changes to topic desctioption {@link desc}.\n * @param {callback} callbacks.onMetaSub - Called for a single subscription record change.\n * @param {callback} callbacks.onSubsUpdated - Called after a batch of subscription changes have been recieved and cached.\n * @param {callback} callbacks.onDeleteTopic - Called after the topic is deleted.\n * @param {callback} callbacls.onAllMessagesReceived - Called when all requested {data} messages have been recived.\n */\n constructor(name, callbacks) {\n // Parent Tinode object.\n this._tinode = null;\n\n // Server-provided data, locally immutable.\n // topic name\n this.name = name;\n // Timestamp when the topic was created.\n this.created = null;\n // Timestamp when the topic was last updated.\n this.updated = null;\n // Timestamp of the last messages\n this.touched = new Date(0);\n // Access mode, see AccessMode\n this.acs = new AccessMode(null);\n // Per-topic private data (accessible by current user only).\n this.private = null;\n // Per-topic public data (accessible by all users).\n this.public = null;\n // Per-topic system-provided data (accessible by all users).\n this.trusted = null;\n\n // Locally cached data\n // Subscribed users, for tracking read/recv/msg notifications.\n this._users = {};\n\n // Current value of locally issued seqId, used for pending messages.\n this._queuedSeqId = Const.LOCAL_SEQID;\n\n // The maximum known {data.seq} value.\n this._maxSeq = 0;\n // The minimum known {data.seq} value.\n this._minSeq = 0;\n // Indicator that the last request for earlier messages returned 0.\n this._noEarlierMsgs = false;\n // The maximum known deletion ID.\n this._maxDel = 0;\n // Timer object used to send 'recv' notifications.\n this._recvNotificationTimer = null;\n\n // User discovery tags\n this._tags = [];\n // Credentials such as email or phone number.\n this._credentials = [];\n // Message versions cache (e.g. for edited messages).\n // Keys: original message seq ID.\n // Values: CBuffers containing newer versions of the original message\n // ordered by seq id.\n this._messageVersions = {};\n // Message cache, sorted by message seq values, from old to new.\n this._messages = new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n // Boolean, true if the topic is currently live\n this._attached = false;\n // Timestap of the most recently updated subscription.\n this._lastSubsUpdate = new Date(0);\n // Topic created but not yet synced with the server. Used only during initialization.\n this._new = true;\n // The topic is deleted at the server, this is a local copy.\n this._deleted = false;\n\n // Timer used to trgger {leave} request after a delay.\n this._delayedLeaveTimer = null;\n\n // Callbacks\n if (callbacks) {\n this.onData = callbacks.onData;\n this.onMeta = callbacks.onMeta;\n this.onPres = callbacks.onPres;\n this.onInfo = callbacks.onInfo;\n // A single desc update;\n this.onMetaDesc = callbacks.onMetaDesc;\n // A single subscription record;\n this.onMetaSub = callbacks.onMetaSub;\n // All subscription records received;\n this.onSubsUpdated = callbacks.onSubsUpdated;\n this.onTagsUpdated = callbacks.onTagsUpdated;\n this.onCredsUpdated = callbacks.onCredsUpdated;\n this.onDeleteTopic = callbacks.onDeleteTopic;\n this.onAllMessagesReceived = callbacks.onAllMessagesReceived;\n }\n }\n\n // Static methods.\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n const types = {\n 'me': Const.TOPIC_ME,\n 'fnd': Const.TOPIC_FND,\n 'grp': Const.TOPIC_GRP,\n 'new': Const.TOPIC_GRP,\n 'nch': Const.TOPIC_GRP,\n 'chn': Const.TOPIC_GRP,\n 'usr': Const.TOPIC_P2P,\n 'sys': Const.TOPIC_SYS\n };\n return types[(typeof name == 'string') ? name.substring(0, 3) : 'xxx'];\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_ME;\n }\n\n /**\n * Check if the given topic name is a name of a group topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_GRP;\n }\n\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_P2P;\n }\n\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name);\n }\n\n /**\n * Check if the topic name is a name of a new topic.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_NEW || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic name is a name of a channel.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_CHAN || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic is subscribed.\n * @returns {boolean} True is topic is attached/subscribed, false otherwise.\n */\n isSubscribed() {\n return this._attached;\n }\n\n /**\n * Request topic to subscribe. Wrapper for {@link Tinode#subscribe}.\n *\n * @param {Tinode.GetQuery=} getParams - get query parameters.\n * @param {Tinode.SetParams=} setParams - set parameters.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n subscribe(getParams, setParams) {\n // Clear request to leave topic.\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = null;\n\n // If the topic is already subscribed, return resolved promise\n if (this._attached) {\n return Promise.resolve(this);\n }\n\n // Send subscribe message, handle async response.\n // If topic name is explicitly provided, use it. If no name, then it's a new group topic,\n // use \"new\".\n return this._tinode.subscribe(this.name || Const.TOPIC_NEW, getParams, setParams).then(ctrl => {\n if (ctrl.code >= 300) {\n // Do nothing if subscription status has not changed.\n return ctrl;\n }\n\n this._attached = true;\n this._deleted = false;\n this.acs = (ctrl.params && ctrl.params.acs) ? ctrl.params.acs : this.acs;\n\n // Set topic name for new topics and add it to cache.\n if (this._new) {\n delete this._new;\n\n if (this.name != ctrl.topic) {\n // Name may change new123456 -> grpAbCdEf. Remove from cache under the old name.\n this._cacheDelSelf();\n this.name = ctrl.topic;\n }\n this._cachePutSelf();\n\n this.created = ctrl.ts;\n this.updated = ctrl.ts;\n\n if (this.name != Const.TOPIC_ME && this.name != Const.TOPIC_FND) {\n // Add the new topic to the list of contacts maintained by the 'me' topic.\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (setParams && setParams.desc) {\n setParams.desc._noForwarding = true;\n this._processMetaDesc(setParams.desc);\n }\n }\n return ctrl;\n });\n }\n\n /**\n * Create a draft of a message without sending it to the server.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Content to wrap in a draft.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * session. Otherwise the server will send a copy of the message to sender.\n *\n * @returns {Object} message draft.\n */\n createMessage(data, noEcho) {\n return this._tinode.createMessage(this.name, data, noEcho);\n }\n\n /**\n * Immediately publish data to topic. Wrapper for {@link Tinode#publish}.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Message to publish, either plain string or a Drafty object.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publish(data, noEcho) {\n return this.publishMessage(this.createMessage(data, noEcho));\n }\n\n /**\n * Publish message created by {@link Tinode.Topic#createMessage}.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - {data} object to publish. Must be created by {@link Tinode.Topic#createMessage}\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publishMessage(pub) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot publish on inactive topic\"));\n }\n if (this._sending) {\n return Promise.reject(new Error(\"The message is already being sent\"));\n }\n\n // Send data.\n pub._sending = true;\n pub._failed = false;\n\n // Extract refereces to attachments and out of band image records.\n let attachments = null;\n if (Drafty.hasEntities(pub.content)) {\n attachments = [];\n Drafty.entities(pub.content, data => {\n if (data) {\n if (data.ref) {\n attachments.push(data.ref);\n }\n if (data.preref) {\n attachments.push(data.preref);\n }\n }\n });\n if (attachments.length == 0) {\n attachments = null;\n }\n }\n\n return this._tinode.publishMessage(pub, attachments).then(ctrl => {\n pub._sending = false;\n pub.ts = ctrl.ts;\n this.swapMessageId(pub, ctrl.params.seq);\n this._maybeUpdateMessageVersionsCache(pub);\n this._routeData(pub);\n return ctrl;\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message rejected by the server\", err);\n pub._sending = false;\n pub._failed = true;\n if (this.onData) {\n this.onData();\n }\n });\n }\n\n /**\n * Add message to local message cache, send to the server when the promise is resolved.\n * If promise is null or undefined, the message will be sent immediately.\n * The message is sent when the\n * The message should be created by {@link Tinode.Topic#createMessage}.\n * This is probably not the final API.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - Message to use as a draft.\n * @param {Promise} prom - Message will be sent when this promise is resolved, discarded if rejected.\n *\n * @returns {Promise} derived promise.\n */\n publishDraft(pub, prom) {\n const seq = pub.seq || this._getQueuedSeqId();\n if (!pub._noForwarding) {\n // The 'seq', 'ts', and 'from' are added to mimic {data}. They are removed later\n // before the message is sent.\n pub._noForwarding = true;\n pub.seq = seq;\n pub.ts = new Date();\n pub.from = this._tinode.getCurrentUserID();\n\n // Don't need an echo message because the message is added to local cache right away.\n pub.noecho = true;\n // Add to cache.\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n\n if (this.onData) {\n this.onData(pub);\n }\n }\n // If promise is provided, send the queued message when it's resolved.\n // If no promise is provided, create a resolved one and send immediately.\n return (prom || Promise.resolve())\n .then(_ => {\n if (pub._cancelled) {\n return {\n code: 300,\n text: \"cancelled\"\n };\n }\n return this.publishMessage(pub);\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message draft rejected\", err);\n pub._sending = false;\n pub._failed = true;\n pub._fatal = err instanceof CommError ? (err.code >= 400 && err.code < 500) : false;\n if (this.onData) {\n this.onData();\n }\n // Rethrow to let caller know that the operation failed.\n throw err;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean=} unsub - If true, unsubscribe, otherwise just leave.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n leave(unsub) {\n // It's possible to unsubscribe (unsub==true) from inactive topic.\n if (!this._attached && !unsub) {\n return Promise.reject(new Error(\"Cannot leave inactive topic\"));\n }\n\n // Send a 'leave' message, handle async response\n return this._tinode.leave(this.name, unsub).then(ctrl => {\n this._resetSub();\n if (unsub) {\n this._gone();\n }\n return ctrl;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe after a delay. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} unsub - If true, unsubscribe, otherwise just leave.\n * @param {number} delay - time in milliseconds to delay leave request.\n */\n leaveDelayed(unsub, delay) {\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = setTimeout(_ => {\n this._delayedLeaveTimer = null;\n this.leave(unsub)\n }, delay);\n }\n\n /**\n * Request topic metadata from the server.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.GetQuery} request parameters\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMeta(params) {\n // Send {get} message, return promise.\n return this._tinode.getMeta(this.name, params);\n }\n\n /**\n * Request more messages from the server\n * @memberof Tinode.Topic#\n *\n * @param {number} limit number of messages to get.\n * @param {boolean} forward if true, request newer messages.\n */\n getMessagesPage(limit, forward) {\n let query = forward ?\n this.startMetaQuery().withLaterData(limit) :\n this.startMetaQuery().withEarlierData(limit);\n\n // First try fetching from DB, then from the server.\n return this._loadMessages(this._tinode._db, query.extract('data'))\n .then((count) => {\n if (count == limit) {\n // Got enough messages from local cache.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: count\n }\n });\n }\n\n // Reduce the count of requested messages.\n limit -= count;\n // Update query with new values loaded from DB.\n query = forward ? this.startMetaQuery().withLaterData(limit) :\n this.startMetaQuery().withEarlierData(limit);\n let promise = this.getMeta(query.build());\n if (!forward) {\n promise = promise.then(ctrl => {\n if (ctrl && ctrl.params && !ctrl.params.count) {\n this._noEarlierMsgs = true;\n }\n });\n }\n return promise;\n });\n }\n /**\n * Update topic metadata.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n if (params.tags) {\n params.tags = normalizeArray(params.tags);\n }\n // Send Set message, handle async response.\n return this._tinode.setMeta(this.name, params)\n .then(ctrl => {\n if (ctrl && ctrl.code >= 300) {\n // Not modified\n return ctrl;\n }\n\n if (params.sub) {\n params.sub.topic = this.name;\n if (ctrl.params && ctrl.params.acs) {\n params.sub.acs = ctrl.params.acs;\n params.sub.updated = ctrl.ts;\n }\n if (!params.sub.user) {\n // This is a subscription update of the current user.\n // Assign user ID otherwise the update will be ignored by _processMetaSubs.\n params.sub.user = this._tinode.getCurrentUserID();\n if (!params.desc) {\n // Force update to topic's asc.\n params.desc = {};\n }\n }\n params.sub._noForwarding = true;\n this._processMetaSubs([params.sub]);\n }\n\n if (params.desc) {\n if (ctrl.params && ctrl.params.acs) {\n params.desc.acs = ctrl.params.acs;\n params.desc.updated = ctrl.ts;\n }\n this._processMetaDesc(params.desc);\n }\n\n if (params.tags) {\n this._processMetaTags(params.tags);\n }\n if (params.cred) {\n this._processMetaCreds([params.cred], true);\n }\n\n return ctrl;\n });\n }\n /**\n * Update access mode of the current user or of another topic subsriber.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - UID of the user to update or null to update current user.\n * @param {string} update - the update value, full or delta.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n updateMode(uid, update) {\n const user = uid ? this.subscriber(uid) : null;\n const am = user ?\n user.acs.updateGiven(update).getGiven() :\n this.getAccessMode().updateWant(update).getWant();\n\n return this.setMeta({\n sub: {\n user: uid,\n mode: am\n }\n });\n }\n /**\n * Create new topic subscription. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to invite\n * @param {string=} mode - Access mode. null means to use default.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n invite(uid, mode) {\n return this.setMeta({\n sub: {\n user: uid,\n mode: mode\n }\n });\n }\n /**\n * Archive or un-archive the topic. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} arch - true to archive the topic, false otherwise.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n archive(arch) {\n if (this.private && (!this.private.arch == !arch)) {\n return Promise.resolve(arch);\n }\n return this.setMeta({\n desc: {\n private: {\n arch: arch ? true : Const.DEL_CHAR\n }\n }\n });\n }\n /**\n * Delete messages. Hard-deleting messages requires Owner permission.\n * Wrapper for {@link Tinode#delMessages}.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.DelRange[]} ranges - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessages(ranges, hard) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete messages in inactive topic\"));\n }\n\n // Sort ranges in accending order by low, the descending by hi.\n ranges.sort((r1, r2) => {\n if (r1.low < r2.low) {\n return true;\n }\n if (r1.low == r2.low) {\n return !r2.hi || (r1.hi >= r2.hi);\n }\n return false;\n });\n\n // Remove pending messages from ranges possibly clipping some ranges.\n let tosend = ranges.reduce((out, r) => {\n if (r.low < Const.LOCAL_SEQID) {\n if (!r.hi || r.hi < Const.LOCAL_SEQID) {\n out.push(r);\n } else {\n // Clip hi to max allowed value.\n out.push({\n low: r.low,\n hi: this._maxSeq + 1\n });\n }\n }\n return out;\n }, []);\n\n // Send {del} message, return promise\n let result;\n if (tosend.length > 0) {\n result = this._tinode.delMessages(this.name, tosend, hard);\n } else {\n result = Promise.resolve({\n params: {\n del: 0\n }\n });\n }\n // Update local cache.\n return result.then(ctrl => {\n if (ctrl.params.del > this._maxDel) {\n this._maxDel = ctrl.params.del;\n }\n\n ranges.forEach((r) => {\n if (r.hi) {\n this.flushMessageRange(r.low, r.hi);\n } else {\n this.flushMessage(r.low);\n }\n });\n\n if (this.onData) {\n // Calling with no parameters to indicate the messages were deleted.\n this.onData();\n }\n return ctrl;\n });\n }\n /**\n * Delete all messages. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesAll(hardDel) {\n if (!this._maxSeq || this._maxSeq <= 0) {\n // There are no messages to delete.\n return Promise.resolve();\n }\n return this.delMessages([{\n low: 1,\n hi: this._maxSeq + 1,\n _all: true\n }], hardDel);\n }\n\n /**\n * Delete multiple messages defined by their IDs. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {Array.recv, read.\n * @param {number} seq - ID or the message read or received.\n */\n note(what, seq) {\n if (!this._attached) {\n // Cannot sending {note} on an inactive topic\".\n return;\n }\n\n // Update local cache with the new count.\n const user = this._users[this._tinode.getCurrentUserID()];\n let update = false;\n if (user) {\n // Self-subscription is found.\n if (!user[what] || user[what] < seq) {\n user[what] = seq;\n update = true;\n }\n } else {\n // Self-subscription is not found.\n update = (this[what] | 0) < seq;\n }\n\n if (update) {\n // Send notification to the server.\n this._tinode.note(this.name, what, seq);\n // Update locally cached contact with the new count.\n this._updateMyReadRecv(what, seq);\n\n if (this.acs != null && !this.acs.isMuted()) {\n const me = this._tinode.getMeTopic();\n // Sent a notification to 'me' listeners.\n me._refreshContact(what, this);\n }\n }\n }\n\n /**\n * Send a 'recv' receipt. Wrapper for {@link Tinode#noteRecv}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge.\n */\n noteRecv(seq) {\n this.note('recv', seq);\n }\n /**\n * Send a 'read' receipt. Wrapper for {@link Tinode#noteRead}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge or 0/undefined to acknowledge the latest messages.\n */\n noteRead(seq) {\n seq = seq || this._maxSeq;\n if (seq > 0) {\n this.note('read', seq);\n }\n }\n /**\n * Send a key-press notification. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n */\n noteKeyPress() {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name);\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification than a video or audio message is . Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param audioOnly - true if the recording is audio-only, false if it's a video recording.\n */\n noteRecording(audioOnly) {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, audioOnly ? 'kpa' : 'kpv');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n\n /**\n * Send a {note what='call'}. Wrapper for {@link Tinode#videoCall}.\n * @memberof Tinode#\n *\n * @param {string} evt - Call event.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(evt, seq, payload) {\n if (!this._attached && !['ringing', 'hang-up'].includes(evt)) {\n // Cannot {call} on an inactive topic\".\n return;\n }\n return this._tinode.videoCall(this.name, seq, evt, payload);\n }\n\n // Update cached read/recv/unread counts for the current user.\n _updateMyReadRecv(what, seq, ts) {\n let oldVal, doUpdate = false;\n\n seq = seq | 0;\n this.seq = this.seq | 0;\n this.read = this.read | 0;\n this.recv = this.recv | 0;\n switch (what) {\n case 'recv':\n oldVal = this.recv;\n this.recv = Math.max(this.recv, seq);\n doUpdate = (oldVal != this.recv);\n break;\n case 'read':\n oldVal = this.read;\n this.read = Math.max(this.read, seq);\n doUpdate = (oldVal != this.read);\n break;\n case 'msg':\n oldVal = this.seq;\n this.seq = Math.max(this.seq, seq);\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = (oldVal != this.seq);\n break;\n }\n\n // Sanity checks.\n if (this.recv < this.read) {\n this.recv = this.read;\n doUpdate = true;\n }\n if (this.seq < this.recv) {\n this.seq = this.recv;\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = true;\n }\n this.unread = this.seq - this.read;\n return doUpdate;\n }\n /**\n * Get user description from global cache. The user does not need to be a\n * subscriber of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to fetch.\n * @return {Object} user description or undefined.\n */\n userDesc(uid) {\n // TODO: handle asynchronous requests\n const user = this._cacheGetUser(uid);\n if (user) {\n return user; // Promise.resolve(user)\n }\n }\n /**\n * Get description of the p2p peer from subscription cache.\n * @memberof Tinode.Topic#\n *\n * @return {Object} peer's description or undefined.\n */\n p2pPeerDesc() {\n if (!this.isP2PType()) {\n return undefined;\n }\n return this._users[this.name];\n }\n /**\n * Iterate over cached subscribers. If callback is undefined, use this.onMetaSub.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive subscribers one by one.\n * @param {Object=} context - Value of `this` inside the `callback`.\n */\n subscribers(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._users) {\n cb.call(context, this._users[idx], idx, this._users);\n }\n }\n }\n /**\n * Get a copy of cached tags.\n * @memberof Tinode.Topic#\n *\n * @return {Array.callback for each version (excluding original).\n * If callback is undefined, does nothing.\n * @memberof Tinode.Topic#\n *\n * @param {number} origSeq - seq ID of the original message.\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messageVersions(origSeq, callback, context) {\n if (!callback) {\n // No callback? We are done then.\n return;\n }\n const versions = this._messageVersions[origSeq];\n if (!versions) {\n return;\n }\n versions.forEach(callback, undefined, undefined, context);\n }\n /**\n * Iterate over cached messages: call callback for each message in the range [sinceIdx, beforeIdx).\n * If callback is undefined, use this.onData.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {number} sinceId - Optional seqId to start iterating from (inclusive).\n * @param {number} beforeId - Optional seqId to stop iterating before it is reached (exclusive).\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messages(callback, sinceId, beforeId, context) {\n const cb = (callback || this.onData);\n if (cb) {\n const startIdx = typeof sinceId == 'number' ? this._messages.find({\n seq: sinceId\n }, true) : undefined;\n const beforeIdx = typeof beforeId == 'number' ? this._messages.find({\n seq: beforeId\n }, true) : undefined;\n if (startIdx != -1 && beforeIdx != -1) {\n // Step 1. Filter out all replacement messages and\n // save displayable messages in a temporary buffer.\n let msgs = [];\n this._messages.forEach((msg, unused1, unused2, i) => {\n if (this._isReplacementMsg(msg)) {\n // Skip replacements.\n return;\n }\n // In case the massage was edited, replace timestamp of the version with the original's timestamp.\n const latest = this.latestMsgVersion(msg.seq) || msg;\n if (!latest._origTs) {\n latest._origTs = latest.ts;\n latest._origSeq = latest.seq;\n latest.ts = msg.ts;\n latest.seq = msg.seq;\n }\n msgs.push({\n data: latest,\n idx: i\n });\n }, startIdx, beforeIdx, {});\n // Step 2. Loop over displayble messages invoking cb on each of them.\n msgs.forEach((val, i) => {\n cb.call(context, val.data,\n (i > 0 ? msgs[i - 1].data : undefined),\n (i < msgs.length - 1 ? msgs[i + 1].data : undefined), val.idx);\n });\n }\n }\n }\n /**\n * Get the message from cache by seq.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message seqId to search for.\n * @returns {Object} the message with the given seq or undefined, if no such message is found.\n */\n findMessage(seq) {\n const idx = this._messages.find({\n seq: seq\n });\n if (idx >= 0) {\n return this._messages.getAt(idx);\n }\n return undefined;\n }\n /**\n * Get the most recent message from cache. This method counts all messages, including deleted ranges.\n * @memberof Tinode.Topic#\n *\n * @returns {Object} the most recent cached message or undefined, if no messages are cached.\n */\n latestMessage() {\n return this._messages.getLast();\n }\n /**\n * Get the latest version for message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message.\n * @returns {Object} the latest version of the message or null if message not found.\n */\n latestMsgVersion(seq) {\n const versions = this._messageVersions[seq];\n return versions ? versions.getLast() : null;\n }\n /**\n * Get the maximum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest seq ID in cache.\n */\n maxMsgSeq() {\n return this._maxSeq;\n }\n /**\n * Get the minimum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the smallest seq ID in cache or 0.\n */\n minMsgSeq() {\n return this._minSeq;\n }\n /**\n * Get the maximum deletion ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest deletion ID.\n */\n maxClearId() {\n return this._maxDel;\n }\n /**\n * Get the number of messages in the cache.\n * @memberof Tinode.Topic#\n *\n * @returns {number} count of cached messages.\n */\n messageCount() {\n return this._messages.length();\n }\n /**\n * Iterate over cached unsent messages. Wraps {@link Tinode.Topic#messages}.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of this inside the callback.\n */\n queuedMessages(callback, context) {\n if (!callback) {\n throw new Error(\"Callback must be provided\");\n }\n this.messages(callback, Const.LOCAL_SEQID, undefined, context);\n }\n /**\n * Get the number of topic subscribers who marked this message as either recv or read\n * Current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what action to consider: received \"recv\" or read \"read\".\n * @param {number} seq - ID or the message read or received.\n *\n * @returns {number} the number of subscribers who marked the message with the given ID as read or received.\n */\n msgReceiptCount(what, seq) {\n let count = 0;\n if (seq > 0) {\n const me = this._tinode.getCurrentUserID();\n for (let idx in this._users) {\n const user = this._users[idx];\n if (user.user !== me && user[what] >= seq) {\n count++;\n }\n }\n }\n return count;\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as read.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message id to check.\n * @returns {number} number of subscribers who claim to have received the message.\n */\n msgReadCount(seq) {\n return this.msgReceiptCount('read', seq);\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as received.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - Message id to check.\n * @returns {number} Number of subscribers who claim to have received the message.\n */\n msgRecvCount(seq) {\n return this.msgReceiptCount('recv', seq);\n }\n /**\n * Check if cached message IDs indicate that the server may have more messages.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} newer - if true, check for newer messages only.\n */\n msgHasMoreMessages(newer) {\n return newer ? this.seq > this._maxSeq :\n // _minSeq could be more than 1, but earlier messages could have been deleted.\n (this._minSeq > 1 && !this._noEarlierMsgs);\n }\n /**\n * Check if the given seq Id is id of the most recent message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to check\n */\n isNewMessage(seqId) {\n return this._maxSeq <= seqId;\n }\n /**\n * Remove one message from local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to remove from cache.\n * @returns {Message} removed message or undefined if such message was not found.\n */\n flushMessage(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n delete this._messageVersions[seqId];\n if (idx >= 0) {\n this._tinode._db.remMessages(this.name, seqId);\n return this._messages.delAt(idx);\n }\n return undefined;\n }\n /**\n * Remove a range of messages from the local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} fromId seq ID of the first message to remove (inclusive).\n * @param {number} untilId seqID of the last message to remove (exclusive).\n *\n * @returns {Message[]} array of removed messages (could be empty).\n */\n flushMessageRange(fromId, untilId) {\n // Remove range from persistent cache.\n this._tinode._db.remMessages(this.name, fromId, untilId);\n\n // Remove all versions keyed by IDs in the range.\n for (let i = fromId; i < untilId; i++) {\n delete this._messageVersions[i];\n }\n\n // start, end: find insertion points (nearest == true).\n const since = this._messages.find({\n seq: fromId\n }, true);\n return since >= 0 ? this._messages.delRange(since, this._messages.find({\n seq: untilId\n }, true)) : [];\n }\n /**\n * Update message's seqId.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub message object.\n * @param {number} newSeqId new seq id for pub.\n */\n swapMessageId(pub, newSeqId) {\n const idx = this._messages.find(pub);\n const numMessages = this._messages.length();\n if (0 <= idx && idx < numMessages) {\n // Remove message with the old seq ID.\n this._messages.delAt(idx);\n this._tinode._db.remMessages(this.name, pub.seq);\n // Add message with the new seq ID.\n pub.seq = newSeqId;\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n }\n }\n /**\n * Attempt to stop message from being sent.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to stop sending and remove from cache.\n *\n * @returns {boolean} true if message was cancelled, false otherwise.\n */\n cancelSend(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n if (idx >= 0) {\n const msg = this._messages.getAt(idx);\n const status = this.msgStatus(msg);\n if (status == Const.MESSAGE_STATUS_QUEUED ||\n status == Const.MESSAGE_STATUS_FAILED ||\n status == Const.MESSAGE_STATUS_FATAL) {\n this._tinode._db.remMessages(this.name, seqId);\n msg._cancelled = true;\n this._messages.delAt(idx);\n if (this.onData) {\n // Calling with no parameters to indicate the message was deleted.\n this.onData();\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Get type of the topic: me, p2p, grp, fnd...\n * @memberof Tinode.Topic#\n *\n * @returns {string} One of 'me', 'p2p', 'grp', 'fnd', 'sys' or undefined.\n */\n getType() {\n return Topic.topicType(this.name);\n }\n /**\n * Get current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.AccessMode} - user's access mode\n */\n getAccessMode() {\n return this.acs;\n }\n /**\n * Set current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @param {AccessMode | Object} acs - access mode to set.\n */\n setAccessMode(acs) {\n return this.acs = new AccessMode(acs);\n }\n /**\n * Get topic's default access mode.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.DefAcs} - access mode, such as {auth: `RWP`, anon: `N`}.\n */\n getDefaultAccess() {\n return this.defacs;\n }\n /**\n * Initialize new meta {@link Tinode.GetQuery} builder. The query is attched to the current topic.\n * It will not work correctly if used with a different topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.MetaGetBuilder} query attached to the current topic.\n */\n startMetaQuery() {\n return new MetaGetBuilder(this);\n }\n /**\n * Check if topic is archived, i.e. private.arch == true.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is archived, false otherwise.\n */\n isArchived() {\n return this.private && !!this.private.arch;\n }\n /**\n * Check if topic is a 'me' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'me' topic, false otherwise.\n */\n isMeType() {\n return Topic.isMeTopicName(this.name);\n }\n /**\n * Check if topic is a channel.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a channel, false otherwise.\n */\n isChannelType() {\n return Topic.isChannelTopicName(this.name);\n }\n /**\n * Check if topic is a group topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a group, false otherwise.\n */\n isGroupType() {\n return Topic.isGroupTopicName(this.name);\n }\n /**\n * Check if topic is a p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p topic, false otherwise.\n */\n isP2PType() {\n return Topic.isP2PTopicName(this.name);\n }\n /**\n * Check if topic is a communication topic, i.e. a group or p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p or group topic, false otherwise.\n */\n isCommType() {\n return Topic.isCommTopicName(this.name);\n }\n /**\n * Get status (queued, sent, received etc) of a given message in the context\n * of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {Message} msg - message to check for status.\n * @param {boolean} upd - update chached message status.\n *\n * @returns message status constant.\n */\n msgStatus(msg, upd) {\n let status = Const.MESSAGE_STATUS_NONE;\n if (this._tinode.isMe(msg.from)) {\n if (msg._sending) {\n status = Const.MESSAGE_STATUS_SENDING;\n } else if (msg._fatal || msg._cancelled) {\n status = Const.MESSAGE_STATUS_FATAL;\n } else if (msg._failed) {\n status = Const.MESSAGE_STATUS_FAILED;\n } else if (msg.seq >= Const.LOCAL_SEQID) {\n status = Const.MESSAGE_STATUS_QUEUED;\n } else if (this.msgReadCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_READ;\n } else if (this.msgRecvCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_RECEIVED;\n } else if (msg.seq > 0) {\n status = Const.MESSAGE_STATUS_SENT;\n }\n } else {\n status = Const.MESSAGE_STATUS_TO_ME;\n }\n\n if (upd && msg._status != status) {\n msg._status = status;\n this._tinode._db.updMessageStatus(this.name, msg.seq, status);\n }\n\n return status;\n }\n\n // Returns true if pub is meant to replace another message (e.g. original message was edited).\n _isReplacementMsg(pub) {\n return pub.head && pub.head.replace;\n }\n\n // If msg is a replacement for another message, save the msg in the message versions cache\n // as a newer version for the message it's supposed to replace.\n _maybeUpdateMessageVersionsCache(msg) {\n if (!this._isReplacementMsg(msg)) {\n // Check if this message is the original in the chain of edits and if so\n // ensure all version have the same sender.\n if (this._messageVersions[msg.seq]) {\n // Remove versions with different 'from'.\n this._messageVersions[msg.seq].filter(version => version.from == msg.from);\n if (this._messageVersions[msg.seq].isEmpty()) {\n delete this._messageVersions[msg.seq];\n }\n }\n return;\n }\n\n const targetSeq = parseInt(msg.head.replace.split(':')[1]);\n if (targetSeq > msg.seq) {\n // Substitutes are supposed to have higher seq ids.\n return;\n }\n const targetMsg = this.findMessage(targetSeq);\n if (targetMsg && targetMsg.from != msg.from) {\n // Substitute cannot change the sender.\n return;\n }\n const versions = this._messageVersions[targetSeq] || new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n versions.put(msg);\n this._messageVersions[targetSeq] = versions;\n }\n\n // Process data message\n _routeData(data) {\n if (data.content) {\n if (!this.touched || this.touched < data.ts) {\n this.touched = data.ts;\n this._tinode._db.updTopic(this);\n }\n }\n\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n this.msgStatus(data, true);\n // Ackn receiving the message.\n clearTimeout(this._recvNotificationTimer);\n this._recvNotificationTimer = setTimeout(_ => {\n this._recvNotificationTimer = null;\n this.noteRecv(this._maxSeq);\n }, Const.RECV_TIMEOUT);\n }\n\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n\n const outgoing = ((!this.isChannelType() && !data.from) || this._tinode.isMe(data.from));\n\n if (data.head && data.head.webrtc && data.head.mime == Drafty.getContentType() && data.content) {\n // Rewrite VC body with info from the headers.\n data.content = Drafty.updateVideoCall(data.content, {\n state: data.head.webrtc,\n duration: data.head['webrtc-duration'],\n incoming: !outgoing,\n });\n }\n\n if (!data._noForwarding) {\n this._messages.put(data);\n this._tinode._db.addMessage(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n\n if (this.onData) {\n this.onData(data);\n }\n\n // Update locally cached contact with the new message count.\n const what = outgoing ? 'read' : 'msg';\n this._updateMyReadRecv(what, data.seq, data.ts);\n\n if (!outgoing && data.from) {\n // Mark messages as read by the sender.\n this._routeInfo({\n what: 'read',\n from: data.from,\n seq: data.seq,\n _noForwarding: true\n });\n }\n\n // Notify 'me' listeners of the change.\n this._tinode.getMeTopic()._refreshContact(what, this);\n }\n\n // Process metadata message\n _routeMeta(meta) {\n if (meta.desc) {\n this._processMetaDesc(meta.desc);\n }\n if (meta.sub && meta.sub.length > 0) {\n this._processMetaSubs(meta.sub);\n }\n if (meta.del) {\n this._processDelMessages(meta.del.clear, meta.del.delseq);\n }\n if (meta.tags) {\n this._processMetaTags(meta.tags);\n }\n if (meta.cred) {\n this._processMetaCreds(meta.cred);\n }\n if (this.onMeta) {\n this.onMeta(meta);\n }\n }\n // Process presence change message\n _routePres(pres) {\n let user, uid;\n switch (pres.what) {\n case 'del':\n // Delete cached messages.\n this._processDelMessages(pres.clear, pres.delseq);\n break;\n case 'on':\n case 'off':\n // Update online status of a subscription.\n user = this._users[pres.src];\n if (user) {\n user.online = pres.what == 'on';\n } else {\n this._tinode.logger(\"WARNING: Presence update for an unknown user\", this.name, pres.src);\n }\n break;\n case 'term':\n // Attachment to topic is terminated probably due to cluster rehashing.\n this._resetSub();\n break;\n case 'upd':\n // A topic subscriber has updated his description.\n // Issue {get sub} only if the current user has no p2p topics with the updated user (p2p name is not in cache).\n // Otherwise 'me' will issue a {get desc} request.\n if (pres.src && !this._tinode.isTopicCached(pres.src)) {\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n }\n break;\n case 'acs':\n uid = pres.src || this._tinode.getCurrentUserID();\n user = this._users[uid];\n if (!user) {\n // Update for an unknown user: notification of a new subscription.\n const acs = new AccessMode().updateAll(pres.dacs);\n if (acs && acs.mode != AccessMode._NONE) {\n user = this._cacheGetUser(uid);\n if (!user) {\n user = {\n user: uid,\n acs: acs\n };\n this.getMeta(this.startMetaQuery().withOneSub(undefined, uid).build());\n } else {\n user.acs = acs;\n }\n user.updated = new Date();\n this._processMetaSubs([user]);\n }\n } else {\n // Known user\n user.acs.updateAll(pres.dacs);\n // Update user's access mode.\n this._processMetaSubs([{\n user: uid,\n updated: new Date(),\n acs: user.acs\n }]);\n }\n break;\n default:\n this._tinode.logger(\"INFO: Ignored presence update\", pres.what);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n // Process {info} message\n _routeInfo(info) {\n switch (info.what) {\n case 'recv':\n case 'read':\n const user = this._users[info.from];\n if (user) {\n user[info.what] = info.seq;\n if (user.recv < user.read) {\n user.recv = user.read;\n }\n }\n const msg = this.latestMessage();\n if (msg) {\n this.msgStatus(msg, true);\n }\n\n // If this is an update from the current user, update the cache with the new count.\n if (this._tinode.isMe(info.from) && !info._noForwarding) {\n this._updateMyReadRecv(info.what, info.seq);\n }\n\n // Notify 'me' listener of the status change.\n this._tinode.getMeTopic()._refreshContact(info.what, this);\n break;\n case 'kp':\n case 'kpa':\n case 'kpv':\n // Typing or audio/video recording notification. Do nothing.\n break;\n case 'call':\n // Do nothing here.\n break;\n default:\n this._tinode.logger(\"INFO: Ignored info update\", info.what);\n }\n\n if (this.onInfo) {\n this.onInfo(info);\n }\n }\n // Called by Tinode when meta.desc packet is received.\n // Called by 'me' topic on contact update (desc._noForwarding is true).\n _processMetaDesc(desc) {\n if (this.isP2PType()) {\n // Synthetic desc may include defacs for p2p topics which is useless.\n // Remove it.\n delete desc.defacs;\n\n // Update to p2p desc is the same as user update. Update cached user.\n this._tinode._db.updUser(this.name, desc.public);\n }\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n // Update persistent cache.\n this._tinode._db.updTopic(this);\n\n // Notify 'me' listener, if available:\n if (this.name !== Const.TOPIC_ME && !desc._noForwarding) {\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n // Called by Tinode when meta.sub is recived or in response to received\n // {ctrl} after setMeta-sub.\n _processMetaSubs(subs) {\n for (let idx in subs) {\n const sub = subs[idx];\n\n // Fill defaults.\n sub.online = !!sub.online;\n // Update timestamp of the most recent subscription update.\n this._lastSubsUpdate = new Date(Math.max(this._lastSubsUpdate, sub.updated));\n\n let user = null;\n if (!sub.deleted) {\n // If this is a change to user's own permissions, update them in topic too.\n // Desc will update 'me' topic.\n if (this._tinode.isMe(sub.user) && sub.acs) {\n this._processMetaDesc({\n updated: sub.updated,\n touched: sub.touched,\n acs: sub.acs\n });\n }\n user = this._updateCachedUser(sub.user, sub);\n } else {\n // Subscription is deleted, remove it from topic (but leave in Users cache)\n delete this._users[sub.user];\n user = sub;\n }\n\n if (this.onMetaSub) {\n this.onMetaSub(user);\n }\n }\n\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n }\n // Called by Tinode when meta.tags is recived.\n _processMetaTags(tags) {\n if (tags.length == 1 && tags[0] == Const.DEL_CHAR) {\n tags = [];\n }\n this._tags = tags;\n if (this.onTagsUpdated) {\n this.onTagsUpdated(tags);\n }\n }\n // Do nothing for topics other than 'me'\n _processMetaCreds(creds) {}\n // Delete cached messages and update cached transaction IDs\n _processDelMessages(clear, delseq) {\n this._maxDel = Math.max(clear, this._maxDel);\n this.clear = Math.max(clear, this.clear);\n const topic = this;\n let count = 0;\n if (Array.isArray(delseq)) {\n delseq.forEach(function(range) {\n if (!range.hi) {\n count++;\n topic.flushMessage(range.low);\n } else {\n for (let i = range.low; i < range.hi; i++) {\n count++;\n topic.flushMessage(i);\n }\n }\n });\n }\n\n if (count > 0) {\n // this._updateDeletedRanges();\n\n if (this.onData) {\n this.onData();\n }\n }\n }\n // Topic is informed that the entire response to {get what=data} has been received.\n _allMessagesReceived(count) {\n\n if (this.onAllMessagesReceived) {\n this.onAllMessagesReceived(count);\n }\n }\n // Reset subscribed state\n _resetSub() {\n this._attached = false;\n }\n // This topic is either deleted or unsubscribed from.\n _gone() {\n this._messages.reset();\n this._tinode._db.remMessages(this.name);\n this._users = {};\n this.acs = new AccessMode(null);\n this.private = null;\n this.public = null;\n this.trusted = null;\n this._maxSeq = 0;\n this._minSeq = 0;\n this._attached = false;\n\n const me = this._tinode.getMeTopic();\n if (me) {\n me._routePres({\n _noForwarding: true,\n what: 'gone',\n topic: Const.TOPIC_ME,\n src: this.name\n });\n }\n if (this.onDeleteTopic) {\n this.onDeleteTopic();\n }\n }\n // Update global user cache and local subscribers cache.\n // Don't call this method for non-subscribers.\n _updateCachedUser(uid, obj) {\n // Fetch user object from the global cache.\n // This is a clone of the stored object\n let cached = this._cacheGetUser(uid);\n cached = mergeObj(cached || {}, obj);\n // Save to global cache\n this._cachePutUser(uid, cached);\n // Save to the list of topic subsribers.\n return mergeToCache(this._users, uid, cached);\n }\n // Get local seqId for a queued message.\n _getQueuedSeqId() {\n return this._queuedSeqId++;\n }\n\n // Load most recent messages from persistent cache.\n _loadMessages(db, params) {\n const {\n since,\n before,\n limit\n } = params || {};\n return db.readMessages(this.name, {\n since: since,\n before: before,\n limit: limit || Const.DEFAULT_MESSAGES_PAGE\n })\n .then(msgs => {\n msgs.forEach((data) => {\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n }\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n });\n return msgs.length;\n });\n }\n // Push or {pres}: message received.\n _updateReceived(seq, act) {\n this.touched = new Date();\n this.seq = seq | 0;\n // Check if message is sent by the current user. If so it's been read already.\n if (!act || this._tinode.isMe(act)) {\n this.read = this.read ? Math.max(this.read, this.seq) : this.seq;\n this.recv = this.recv ? Math.max(this.read, this.recv) : this.read;\n }\n this.unread = this.seq - (this.read | 0);\n this._tinode._db.updTopic(this);\n }\n}\n\n/**\n * @class TopicMe - special case of {@link Tinode.Topic} for\n * managing data of the current user, including contact list.\n * @extends Tinode.Topic\n * @memberof Tinode\n *\n * @param {TopicMe.Callbacks} callbacks - Callbacks to receive various events.\n */\nexport class TopicMe extends Topic {\n onContactUpdate;\n\n constructor(callbacks) {\n super(Const.TOPIC_ME, callbacks);\n\n // me-specific callbacks\n if (callbacks) {\n this.onContactUpdate = callbacks.onContactUpdate;\n }\n }\n\n // Override the original Topic._processMetaDesc.\n _processMetaDesc(desc) {\n // Check if online contacts need to be turned off because P permission was removed.\n const turnOff = (desc.acs && !desc.acs.isPresencer()) && (this.acs && this.acs.isPresencer());\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n this._tinode._db.updTopic(this);\n // Update current user's record in the global cache.\n this._updateCachedUser(this._tinode._myUID, desc);\n\n // 'P' permission was removed. All topics are offline now.\n if (turnOff) {\n this._tinode.mapTopics((cont) => {\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n this._refreshContact('off', cont);\n }\n });\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = 0;\n subs.forEach((sub) => {\n const topicName = sub.topic;\n // Don't show 'me' and 'fnd' topics in the list of contacts.\n if (topicName == Const.TOPIC_FND || topicName == Const.TOPIC_ME) {\n return;\n }\n sub.online = !!sub.online;\n\n let cont = null;\n if (sub.deleted) {\n cont = sub;\n this._tinode.cacheRemTopic(topicName);\n this._tinode._db.remTopic(topicName);\n } else {\n // Ensure the values are defined and are integers.\n if (typeof sub.seq != 'undefined') {\n sub.seq = sub.seq | 0;\n sub.recv = sub.recv | 0;\n sub.read = sub.read | 0;\n sub.unread = sub.seq - sub.read;\n }\n\n const topic = this._tinode.getTopic(topicName);\n if (topic._new) {\n delete topic._new;\n }\n\n cont = mergeObj(topic, sub);\n this._tinode._db.updTopic(cont);\n\n if (Topic.isP2PTopicName(topicName)) {\n this._cachePutUser(topicName, cont);\n this._tinode._db.updUser(topicName, cont.public);\n }\n // Notify topic of the update if it's an external update.\n if (!sub._noForwarding && topic) {\n sub._noForwarding = true;\n topic._processMetaDesc(sub);\n }\n }\n\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(cont);\n }\n });\n\n if (this.onSubsUpdated && updateCount > 0) {\n const keys = [];\n subs.forEach((s) => {\n keys.push(s.topic);\n });\n this.onSubsUpdated(keys, updateCount);\n }\n }\n\n // Called by Tinode when meta.sub is recived.\n _processMetaCreds(creds, upd) {\n if (creds.length == 1 && creds[0] == Const.DEL_CHAR) {\n creds = [];\n }\n if (upd) {\n creds.forEach((cr) => {\n if (cr.val) {\n // Adding a credential.\n let idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && el.val == cr.val;\n });\n if (idx < 0) {\n // Not found.\n if (!cr.done) {\n // Unconfirmed credential replaces previous unconfirmed credential of the same method.\n idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n // Remove previous unconfirmed credential.\n this._credentials.splice(idx, 1);\n }\n }\n this._credentials.push(cr);\n } else {\n // Found. Maybe change 'done' status.\n this._credentials[idx].done = cr.done;\n }\n } else if (cr.resp) {\n // Handle credential confirmation.\n const idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n this._credentials[idx].done = true;\n }\n }\n });\n } else {\n this._credentials = creds;\n }\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n }\n\n // Process presence change message\n _routePres(pres) {\n if (pres.what == 'term') {\n // The 'me' topic itself is detached. Mark as unsubscribed.\n this._resetSub();\n return;\n }\n\n if (pres.what == 'upd' && pres.src == Const.TOPIC_ME) {\n // Update to me's description. Request updated value.\n this.getMeta(this.startMetaQuery().withDesc().build());\n return;\n }\n\n const cont = this._tinode.cacheGetTopic(pres.src);\n if (cont) {\n switch (pres.what) {\n case 'on': // topic came online\n cont.online = true;\n break;\n case 'off': // topic went offline\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n }\n break;\n case 'msg': // new message received\n cont._updateReceived(pres.seq, pres.act);\n break;\n case 'upd': // desc updated\n // Request updated subscription.\n this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());\n break;\n case 'acs': // access mode changed\n // If 'tgt' is not set then this is an update to the permissions of the current user.\n // Otherwise it's an update to group topic subscriber permissions while the topic is offline.\n // Just gnore it then.\n if (!pres.tgt) {\n if (cont.acs) {\n cont.acs.updateAll(pres.dacs);\n } else {\n cont.acs = new AccessMode().updateAll(pres.dacs);\n }\n cont.touched = new Date();\n }\n break;\n case 'ua':\n // user agent changed.\n cont.seen = {\n when: new Date(),\n ua: pres.ua\n };\n break;\n case 'recv':\n // user's other session marked some messges as received.\n pres.seq = pres.seq | 0;\n cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;\n break;\n case 'read':\n // user's other session marked some messages as read.\n pres.seq = pres.seq | 0;\n cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;\n cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;\n cont.unread = cont.seq - cont.read;\n break;\n case 'gone':\n // topic deleted or unsubscribed from.\n this._tinode.cacheRemTopic(pres.src);\n if (!cont._deleted) {\n cont._deleted = true;\n cont._attached = false;\n this._tinode._db.markTopicAsDeleted(pres.src, true);\n } else {\n this._tinode._db.remTopic(pres.src);\n }\n break;\n case 'del':\n // Update topic.del value.\n break;\n default:\n this._tinode.logger(\"INFO: Unsupported presence update in 'me'\", pres.what);\n }\n\n this._refreshContact(pres.what, cont);\n } else {\n if (pres.what == 'acs') {\n // New subscriptions and deleted/banned subscriptions have full\n // access mode (no + or - in the dacs string). Changes to known subscriptions are sent as\n // deltas, but they should not happen here.\n const acs = new AccessMode(pres.dacs);\n if (!acs || acs.mode == AccessMode._INVALID) {\n this._tinode.logger(\"ERROR: Invalid access mode update\", pres.src, pres.dacs);\n return;\n } else if (acs.mode == AccessMode._NONE) {\n this._tinode.logger(\"WARNING: Removing non-existent subscription\", pres.src, pres.dacs);\n return;\n } else {\n // New subscription. Send request for the full description.\n // Using .withOneSub (not .withLaterOneSub) to make sure IfModifiedSince is not set.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create a dummy entry to catch online status update.\n const dummy = this._tinode.getTopic(pres.src);\n dummy.online = false;\n dummy.acs = acs;\n this._tinode._db.updTopic(dummy);\n }\n } else if (pres.what == 'tags') {\n this.getMeta(this.startMetaQuery().withTags().build());\n } else if (pres.what == 'msg') {\n // Message received for un unknown (previously deleted) topic.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create an entry to catch updates and messages.\n const dummy = this._tinode.getTopic(pres.src);\n dummy._deleted = false;\n this._tinode._db.updTopic(dummy);\n }\n\n this._refreshContact(pres.what, cont);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Contact is updated, execute callbacks.\n _refreshContact(what, cont) {\n if (this.onContactUpdate) {\n this.onContactUpdate(what, cont);\n }\n }\n\n /**\n * Publishing to TopicMe is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicMe#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'me' is not supported\"));\n }\n\n /**\n * Delete validation credential.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delCredential(method, value).then(ctrl => {\n // Remove deleted credential from the cache.\n const index = this._credentials.findIndex((el) => {\n return el.meth == method && el.val == value;\n });\n if (index > -1) {\n this._credentials.splice(index, 1);\n }\n // Notify listeners\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n return ctrl;\n });\n }\n\n /**\n * @callback contactFilter\n * @param {Object} contact to check for inclusion.\n * @returns {boolean} true if contact should be processed, false to exclude it.\n */\n /**\n * Iterate over cached contacts.\n *\n * @function\n * @memberof Tinode.TopicMe#\n * @param {TopicMe.ContactCallback} callback - Callback to call for each contact.\n * @param {contactFilter=} filter - Optionally filter contacts; include all if filter is false-ish, otherwise\n * include those for which filter returns true-ish.\n * @param {Object=} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, filter, context) {\n this._tinode.mapTopics((c, idx) => {\n if (c.isCommType() && (!filter || filter(c))) {\n callback.call(context, c, idx);\n }\n });\n }\n\n /**\n * Get a contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get, either a UID (for p2p topics) or a topic name.\n * @returns {Tinode.Contact} - Contact or `undefined`.\n */\n getContact(name) {\n return this._tinode.cacheGetTopic(name);\n }\n\n /**\n * Get access mode of a given contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get access mode for, either a UID (for p2p topics)\n * or a topic name; if missing, access mode for the 'me' topic itself.\n * @returns {string} - access mode, such as `RWP`.\n */\n getAccessMode(name) {\n if (name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont ? cont.acs : null;\n }\n return this.acs;\n }\n\n /**\n * Check if contact is archived, i.e. contact.private.arch == true.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to check archived status, either a UID (for p2p topics) or a topic name.\n * @returns {boolean} - true if contact is archived, false otherwise.\n */\n isArchived(name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont && cont.private && !!cont.private.arch;\n }\n\n /**\n * @typedef Tinode.Credential\n * @memberof Tinode\n * @type Object\n * @property {string} meth - validation method such as 'email' or 'tel'.\n * @property {string} val - credential value, i.e. 'jdoe@example.com' or '+17025551234'\n * @property {boolean} done - true if credential is validated.\n */\n /**\n * Get the user's credentials: email, phone, etc.\n * @memberof Tinode.TopicMe#\n *\n * @returns {Tinode.Credential[]} - array of credentials.\n */\n getCredentials() {\n return this._credentials;\n }\n}\n\n/**\n * Special case of {@link Tinode.Topic} for searching for contacts and group topics\n * @extends Tinode.Topic\n *\n */\nexport class TopicFnd extends Topic {\n // List of users and topics uid or topic_name -> Contact object)\n _contacts = {};\n\n /**\n * Create TopicFnd.\n *\n * @param {TopicFnd.Callbacks} callbacks - Callbacks to receive various events.\n */\n constructor(callbacks) {\n super(Const.TOPIC_FND, callbacks);\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = Object.getOwnPropertyNames(this._contacts).length;\n // Reset contact list.\n this._contacts = {};\n for (let idx in subs) {\n let sub = subs[idx];\n const indexBy = sub.topic ? sub.topic : sub.user;\n\n sub = mergeToCache(this._contacts, indexBy, sub);\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(sub);\n }\n }\n\n if (updateCount > 0 && this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._contacts));\n }\n }\n\n /**\n * Publishing to TopicFnd is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicFnd#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"));\n }\n\n /**\n * setMeta to TopicFnd resets contact list in addition to sending the message.\n * @memberof Tinode.TopicFnd#\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {\n if (Object.keys(this._contacts).length > 0) {\n this._contacts = {};\n if (this.onSubsUpdated) {\n this.onSubsUpdated([]);\n }\n }\n });\n }\n\n /**\n * Iterate over found contacts. If callback is undefined, use {@link this.onMetaSub}.\n * @function\n * @memberof Tinode.TopicFnd#\n * @param {TopicFnd.ContactCallback} callback - Callback to call for each contact.\n * @param {Object} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._contacts) {\n cb.call(context, this._contacts[idx], idx, this._contacts);\n }\n }\n }\n}\n","/**\n * @file Utilities used in multiple places.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport {\n DEL_CHAR\n} from './config.js';\n\n// Attempt to convert date and AccessMode strings to objects.\nexport function jsonParseHelper(key, val) {\n // Try to convert string timestamps with optional milliseconds to Date,\n // e.g. 2015-09-02T01:45:43[.123]Z\n if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n const date = new Date(val);\n if (!isNaN(date)) {\n return date;\n }\n } else if (key === 'acs' && typeof val === 'object') {\n return new AccessMode(val);\n }\n return val;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\nfunction isValidDate(d) {\n return (d instanceof Date) && !isNaN(d) && (d.getTime() != 0);\n}\n\n// RFC3339 formater of Date\nexport function rfc3339DateString(d) {\n if (!isValidDate(d)) {\n return undefined;\n }\n\n const pad = function(val, sp) {\n sp = sp || 2;\n return '0'.repeat(sp - ('' + val).length) + val;\n };\n\n const millis = d.getUTCMilliseconds();\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +\n 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +\n (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\n\n// Recursively merge src's own properties to dst.\n// Ignore properties where ignore[property] is true.\n// Array and Date objects are shallow-copied.\nexport function mergeObj(dst, src, ignore) {\n if (typeof src != 'object') {\n if (src === undefined) {\n return dst;\n }\n if (src === DEL_CHAR) {\n return undefined;\n }\n return src;\n }\n // JS is crazy: typeof null is 'object'.\n if (src === null) {\n return src;\n }\n\n // Handle Date\n if (src instanceof Date && !isNaN(src)) {\n return (!dst || !(dst instanceof Date) || isNaN(dst) || dst < src) ? src : dst;\n }\n\n // Access mode\n if (src instanceof AccessMode) {\n return new AccessMode(src);\n }\n\n // Handle Array\n if (src instanceof Array) {\n return src;\n }\n\n if (!dst || dst === DEL_CHAR) {\n dst = src.constructor();\n }\n\n for (let prop in src) {\n if (src.hasOwnProperty(prop) && (!ignore || !ignore[prop]) && (prop != '_noForwarding')) {\n try {\n dst[prop] = mergeObj(dst[prop], src[prop]);\n } catch (err) {\n // FIXME: probably need to log something here.\n }\n }\n }\n return dst;\n}\n\n// Update object stored in a cache. Returns updated value.\nexport function mergeToCache(cache, key, newval, ignore) {\n cache[key] = mergeObj(cache[key], newval, ignore);\n return cache[key];\n}\n\n// Strips all values from an object of they evaluate to false or if their name starts with '_'.\n// Used on all outgoing object before serialization to string.\nexport function simplify(obj) {\n Object.keys(obj).forEach((key) => {\n if (key[0] == '_') {\n // Strip fields like \"obj._key\".\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n // Strip empty arrays.\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (obj[key] instanceof Date) {\n // Strip invalid or zero date.\n if (!isValidDate(obj[key])) {\n delete obj[key];\n }\n } else if (typeof obj[key] == 'object') {\n simplify(obj[key]);\n // Strip empty objects.\n if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n delete obj[key];\n }\n }\n });\n return obj;\n};\n\n\n// Trim whitespace, strip empty and duplicate elements elements.\n// If the result is an empty array, add a single element \"\\u2421\" (Unicode Del character).\nexport function normalizeArray(arr) {\n let out = [];\n if (Array.isArray(arr)) {\n // Trim, throw away very short and empty tags.\n for (let i = 0, l = arr.length; i < l; i++) {\n let t = arr[i];\n if (t) {\n t = t.trim().toLowerCase();\n if (t.length > 1) {\n out.push(t);\n }\n }\n }\n out.sort().filter(function(item, pos, ary) {\n return !pos || item != ary[pos - 1];\n });\n }\n if (out.length == 0) {\n // Add single tag with a Unicode Del character, otherwise an ampty array\n // is ambiguos. The Del tag will be stripped by the server.\n out.push(DEL_CHAR);\n }\n return out;\n}\n","export const PACKAGE_VERSION = \"0.23.1\";\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @module tinode-sdk\n *\n * @copyright 2015-2022 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.20\n *\n * See https://github.com/tinode/webapp for real-life usage.\n *\n * @example\n * \n * \n * \n *\n * \n * ...\n * \n * \n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport CommError from './comm-error.js';\nimport Connection from './connection.js';\nimport DBCache from './db.js';\nimport Drafty from './drafty.js';\nimport LargeFileHelper from './large-file.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n Topic,\n TopicMe,\n TopicFnd\n} from './topic.js';\n\nimport {\n isUrlRelative,\n jsonParseHelper,\n mergeObj,\n rfc3339DateString,\n simplify\n} from './utils.js';\n\n// Re-export AccessMode\nexport {\n AccessMode\n};\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n WebSocketProvider = WebSocket;\n}\n\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n XHRProvider = XMLHttpRequest;\n}\n\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n IndexedDBProvider = indexedDB;\n}\n\n// Re-export Drafty.\nexport {\n Drafty\n}\n\ninitForNonBrowserApp();\n\n// Utility functions\n\n// Polyfill for non-browser context, e.g. NodeJs.\nfunction initForNonBrowserApp() {\n // Tinode requirement in native mode because react native doesn't provide Base64 method\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n if (typeof btoa == 'undefined') {\n global.btoa = function(input = '') {\n let str = input;\n let output = '';\n\n for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n\n charCode = str.charCodeAt(i += 3 / 4);\n\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n }\n block = block << 8 | charCode;\n }\n\n return output;\n };\n }\n\n if (typeof atob == 'undefined') {\n global.atob = function(input = '') {\n let str = input.replace(/=+$/, '');\n let output = '';\n\n if (str.length % 4 == 1) {\n throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++);\n\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n\n return output;\n };\n }\n\n if (typeof window == 'undefined') {\n global.window = {\n WebSocket: WebSocketProvider,\n XMLHttpRequest: XHRProvider,\n indexedDB: IndexedDBProvider,\n URL: {\n createObjectURL: function() {\n throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n }\n }\n }\n }\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n DBCache.setDatabaseProvider(IndexedDBProvider);\n}\n\n// Detect find most useful network transport.\nfunction detectTransport() {\n if (typeof window == 'object') {\n if (window['WebSocket']) {\n return 'ws';\n } else if (window['XMLHttpRequest']) {\n // The browser or node has no websockets, using long polling.\n return 'lp';\n }\n }\n return null;\n}\n\n// btoa replacement. Stock btoa fails on on non-Latin1 strings.\nfunction b64EncodeUnicode(str) {\n // The encodeURIComponent percent-encodes UTF-8 string,\n // then the percent encoding is converted into raw bytes which\n // can be fed into btoa.\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n}\n\n// JSON stringify helper - pre-processor for JSON.stringify\nfunction jsonBuildHelper(key, val) {\n if (val instanceof Date) {\n // Convert javascript Date objects to rfc3339 strings\n val = rfc3339DateString(val);\n } else if (val instanceof AccessMode) {\n val = val.jsonHelper();\n } else if (val === undefined || val === null || val === false ||\n (Array.isArray(val) && val.length == 0) ||\n ((typeof val == 'object') && (Object.keys(val).length == 0))) {\n // strip out empty elements while serializing objects to JSON\n return undefined;\n }\n\n return val;\n};\n\n// Trims very long strings (encoded images) to make logged packets more readable.\nfunction jsonLoggerHelper(key, val) {\n if (typeof val == 'string' && val.length > 128) {\n return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n }\n return jsonBuildHelper(key, val);\n};\n\n// Parse browser user agent to extract browser name and version.\nfunction getBrowserInfo(ua, product) {\n ua = ua || '';\n let reactnative = '';\n // Check if this is a ReactNative app.\n if (/reactnative/i.test(product)) {\n reactnative = 'ReactNative; ';\n }\n let result;\n // Remove useless string.\n ua = ua.replace(' (KHTML, like Gecko)', '');\n // Test for WebKit-based browser.\n let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n if (m) {\n // List of common strings, from more useful to less useful.\n // All unknown strings get the highest (-1) priority.\n const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n let tmp = ua.substr(m.index + m[0].length).split(' ');\n let tokens = [];\n let version; // 1.0 in Version/1.0 or undefined;\n // Split string like 'Name/0.0.0' into ['Name', '0.0.0', 3] where the last element is the priority.\n for (let i = 0; i < tmp.length; i++) {\n let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n if (m2) {\n // Unknown values are highest priority (-1).\n tokens.push([m2[1], m2[2], priority.findIndex((e) => {\n return m2[1].toLowerCase().startsWith(e);\n })]);\n if (m2[1] == 'Version') {\n version = m2[2];\n }\n }\n }\n // Sort by priority: more interesting is earlier than less interesting.\n tokens.sort((a, b) => {\n return a[2] - b[2];\n });\n if (tokens.length > 0) {\n // Return the least common browser string and version.\n if (tokens[0][0].toLowerCase().startsWith('edg')) {\n tokens[0][0] = 'Edge';\n } else if (tokens[0][0] == 'OPR') {\n tokens[0][0] = 'Opera';\n } else if (tokens[0][0] == 'Safari' && version) {\n tokens[0][1] = version;\n }\n result = tokens[0][0] + '/' + tokens[0][1];\n } else {\n // Failed to ID the browser. Return the webkit version.\n result = m[1];\n }\n } else if (/firefox/i.test(ua)) {\n m = /Firefox\\/([.\\d]+)/g.exec(ua);\n if (m) {\n result = 'Firefox/' + m[1];\n } else {\n result = 'Firefox/?';\n }\n } else {\n // Neither AppleWebKit nor Firefox. Try the last resort.\n m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n if (m) {\n result = m[1] + '/' + m[2];\n } else {\n m = ua.split(' ');\n result = m[0];\n }\n }\n\n // Shorten the version to one dot 'a.bb.ccc.d -> a.bb' at most.\n m = result.split('/');\n if (m.length > 1) {\n const v = m[1].split('.');\n const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n result = `${m[0]}/${v[0]}${minor}`;\n }\n return reactnative + result;\n}\n\n/**\n * The main class for interacting with Tinode server.\n */\nexport class Tinode {\n _host;\n _secure;\n\n _appName;\n\n // API Key.\n _apiKey;\n\n // Name and version of the browser.\n _browser = '';\n _platform;\n // Hardware\n _hwos = 'undefined';\n _humanLanguage = 'xx';\n\n // Logging to console enabled\n _loggingEnabled = false;\n // When logging, trip long strings (base64-encoded images) for readability\n _trimLongStrings = false;\n // UID of the currently authenticated user.\n _myUID = null;\n // Status of connection: authenticated or not.\n _authenticated = false;\n // Login used in the last successful basic authentication\n _login = null;\n // Token which can be used for login instead of login/password.\n _authToken = null;\n // Counter of received packets\n _inPacketCount = 0;\n // Counter for generating unique message IDs\n _messageId = Math.floor((Math.random() * 0xFFFF) + 0xFFFF);\n // Information about the server, if connected\n _serverInfo = null;\n // Push notification token. Called deviceToken for consistency with the Android SDK.\n _deviceToken = null;\n\n // Cache of pending promises by message id.\n _pendingPromises = {};\n // The Timeout object returned by the reject expired promises setInterval.\n _expirePromises = null;\n\n // Websocket or long polling connection.\n _connection = null;\n\n // Use indexDB for caching topics and messages.\n _persist = false;\n // IndexedDB wrapper object.\n _db = null;\n\n // Tinode's cache of objects\n _cache = {};\n\n /**\n * Create Tinode object.\n *\n * @param {Object} config - configuration parameters.\n * @param {string} config.appName - Name of the calling application to be reported in the User Agent.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - See {@link Tinode.Connection#transport}.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} config.platform - Optional platform identifier, one of \"ios\", \"web\", \"android\".\n * @param {boolen} config.persist - Use IndexedDB persistent storage.\n * @param {function} onComplete - callback to call when initialization is completed.\n */\n constructor(config, onComplete) {\n this._host = config.host;\n this._secure = config.secure;\n\n // Client-provided application name, format null if no valid credentials were given.\n */\n static credential(meth, val, params, resp) {\n if (typeof meth == 'object') {\n ({\n val,\n params,\n resp,\n meth\n } = meth);\n }\n if (meth && (val || resp)) {\n return [{\n 'meth': meth,\n 'val': val,\n 'resp': resp,\n 'params': params\n }];\n }\n return null;\n }\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n return Topic.topicType(name);\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.isMeTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a group topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.isGroupTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.isP2PTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isCommTopicName(name);\n }\n /**\n * Check if the topic name is a name of a new topic.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return Topic.isNewGroupTopicName(name);\n }\n /**\n * Check if the topic name is a name of a channel.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return Topic.isChannelTopicName(name);\n }\n /**\n * Get information about the current version of this Tinode client library.\n * @returns {string} semantic version of the library, e.g. \"0.15.5-rc1\".\n */\n static getVersion() {\n return Const.VERSION;\n }\n /**\n * To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n *\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n }\n /**\n * To use Tinode in a non browser context, supply indexedDB provider.\n * @static\n *\n * @param idbProvider indexedDB provider, e.g. for nodeJS , require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IndexedDBProvider = idbProvider;\n\n DBCache.setDatabaseProvider(IndexedDBProvider);\n }\n /**\n * Return information about the current name and version of this Tinode library.\n * @static\n *\n * @returns {string} the name of the library and it's version.\n */\n static getLibrary() {\n return Const.LIBRARY;\n }\n /**\n * Check if the given string represents NULL value as defined by Tinode ('\\u2421').\n * @param {string} str - string to check for NULL value.\n * @returns {boolean} true if string represents NULL value, false otherwise.\n */\n static isNullValue(str) {\n return str === Const.DEL_CHAR;\n }\n /**\n * Check if the given seq ID is likely to be issued by the server as oppisite to being temporary locally assigned ID.\n * @param {int} seq - seq ID to check.\n * @returns {boolean} true if seq is likely server-issued, false otherwise.\n */\n static isServerAssignedSeq(seq) {\n return seq > 0 && seq < Const.LOCAL_SEQID;\n }\n\n // Instance methods.\n\n // Generates unique message IDs\n getNextUniqueId() {\n return (this._messageId != 0) ? '' + this._messageId++ : undefined;\n };\n\n /**\n * Connect to the server.\n *\n * @param {string} host_ - name of the host to connect to.\n * @return {Promise} Promise resolved/rejected when the connection call completes:\n * resolve() is called without parameters, reject() receives the\n * Error as a single parameter.\n */\n connect(host_) {\n return this._connection.connect(host_);\n }\n\n /**\n * Attempt to reconnect to the server immediately.\n *\n * @param {string} force - if true, reconnect even if there is a connection already.\n */\n reconnect(force) {\n this._connection.reconnect(force);\n }\n\n /**\n * Disconnect from the server.\n */\n disconnect() {\n this._connection.disconnect();\n }\n\n /**\n * Clear persistent cache: remove IndexedDB.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n clearStorage() {\n if (this._db.isReady()) {\n return this._db.deleteDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Initialize persistent cache: create IndexedDB cache.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n initStorage() {\n if (!this._db.isReady()) {\n return this._db.initDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Send a network probe message to make sure the connection is alive.\n */\n networkProbe() {\n this._connection.probe();\n }\n\n /**\n * Check for live connection to server.\n *\n * @returns {boolean} true if there is a live connection, false otherwise.\n */\n isConnected() {\n return this._connection.isConnected();\n }\n\n /**\n * Check if connection is authenticated (last login was successful).\n *\n * @returns {boolean} true if authenticated, false otherwise.\n */\n isAuthenticated() {\n return this._authenticated;\n }\n\n /**\n * Add API key and auth token to the relative URL making it usable for getting data\n * from the server in a simple HTTP GET request.\n *\n * @param {string} URL - URL to wrap.\n * @returns {string} URL with appended API key and token, if valid token is present.\n */\n authorizeURL(url) {\n if (typeof url != 'string') {\n return url;\n }\n\n if (isUrlRelative(url)) {\n // Fake base to make the relative URL parseable.\n const base = 'scheme://host/';\n const parsed = new URL(url, base);\n if (this._apiKey) {\n parsed.searchParams.append('apikey', this._apiKey);\n }\n if (this._authToken && this._authToken.token) {\n parsed.searchParams.append('auth', 'token');\n parsed.searchParams.append('secret', this._authToken.token);\n }\n // Convert back to string and strip fake base URL except for the root slash.\n url = parsed.toString().substring(base.length - 1);\n }\n return url;\n }\n\n /**\n * @typedef AccountParams\n * @type {Object}\n * @property {DefAcs=} defacs - Default access parameters for user's me topic.\n * @property {Object=} public - Public application-defined data exposed on me topic.\n * @property {Object=} private - Private application-defined data accessible on me topic.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n * @property {Array.me for authenticated users.\n * @property {string=} anon - Access mode for me for anonymous users.\n */\n\n /**\n * Create or update an account.\n *\n * @param {string} uid - User id to update\n * @param {string} scheme - Authentication scheme; \"basic\" and \"anonymous\" are the currently supported schemes.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n account(uid, scheme, secret, login, params) {\n const pkt = this.#initPacket('acc');\n pkt.acc.user = uid;\n pkt.acc.scheme = scheme;\n pkt.acc.secret = secret;\n // Log in to the new account using selected scheme\n pkt.acc.login = login;\n\n if (params) {\n pkt.acc.desc.defacs = params.defacs;\n pkt.acc.desc.public = params.public;\n pkt.acc.desc.private = params.private;\n pkt.acc.desc.trusted = params.trusted;\n\n pkt.acc.tags = params.tags;\n pkt.acc.cred = params.cred;\n\n pkt.acc.tmpscheme = params.scheme;\n pkt.acc.tmpsecret = params.secret;\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n return this.#send(pkt, pkt.acc.id);\n }\n\n /**\n * Create a new user. Wrapper for {@link Tinode#account}.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccount(scheme, secret, login, params) {\n let promise = this.account(Const.USER_NEW, scheme, secret, login, params);\n if (login) {\n promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n }\n return promise;\n }\n\n /**\n * Create user with 'basic' authentication scheme and immediately\n * use it for authentication. Wrapper for {@link Tinode#account}.\n *\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccountBasic(username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.createAccount('basic',\n b64EncodeUnicode(username + ':' + password), true, params);\n }\n\n /**\n * Update user's credentials for 'basic' authentication scheme. Wrapper for {@link Tinode#account}.\n *\n * @param {string} uid - User ID to update.\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n updateAccountBasic(uid, username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.account(uid, 'basic',\n b64EncodeUnicode(username + ':' + password), false, params);\n }\n\n /**\n * Send handshake to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n hello() {\n const pkt = this.#initPacket('hi');\n\n return this.#send(pkt, pkt.hi.id)\n .then(ctrl => {\n // Reset backoff counter on successful connection.\n this._connection.backoffReset();\n\n // Server response contains server protocol version, build, constraints,\n // session ID for long polling. Save them.\n if (ctrl.params) {\n this._serverInfo = ctrl.params;\n }\n\n if (this.onConnect) {\n this.onConnect();\n }\n\n return ctrl;\n }).catch(err => {\n this._connection.reconnect(true);\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n });\n }\n\n /**\n * Set or refresh the push notifications/device token. If the client is connected,\n * the deviceToken can be sent to the server.\n *\n * @param {string} dt - token obtained from the provider or false,\n * null or undefined to clear the token.\n *\n * @returns true if attempt was made to send the update to the server.\n */\n setDeviceToken(dt) {\n let sent = false;\n // Convert any falsish value to null.\n dt = dt || null;\n if (dt != this._deviceToken) {\n this._deviceToken = dt;\n if (this.isConnected() && this.isAuthenticated()) {\n this.#send({\n 'hi': {\n 'dev': dt || Tinode.DEL_CHAR\n }\n });\n sent = true;\n }\n }\n return sent;\n }\n\n /**\n * @typedef Credential\n * @type {Object}\n * @property {string} meth - validation method.\n * @property {string} val - value to validate (e.g. email or phone number).\n * @property {string} resp - validation response.\n * @property {Object} params - validation parameters.\n */\n /**\n * Authenticate current session.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n login(scheme, secret, cred) {\n const pkt = this.#initPacket('login');\n pkt.login.scheme = scheme;\n pkt.login.secret = secret;\n pkt.login.cred = cred;\n\n return this.#send(pkt, pkt.login.id)\n .then(ctrl => this.#loginSuccessful(ctrl));\n }\n\n /**\n * Wrapper for {@link Tinode#login} with basic authentication\n *\n * @param {string} uname - User name.\n * @param {string} password - Password.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginBasic(uname, password, cred) {\n return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred)\n .then(ctrl => {\n this._login = uname;\n return ctrl;\n });\n }\n\n /**\n * Wrapper for {@link Tinode#login} with token authentication\n *\n * @param {string} token - Token received in response to earlier login.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginToken(token, cred) {\n return this.login('token', token, cred);\n }\n\n /**\n * Send a request for resetting an authentication secret.\n *\n * @param {string} scheme - authentication scheme to reset.\n * @param {string} method - method to use for resetting the secret, such as \"email\" or \"tel\".\n * @param {string} value - value of the credential to use, a specific email address or a phone number.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving the server reply.\n */\n requestResetAuthSecret(scheme, method, value) {\n return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n }\n\n /**\n * @typedef AuthToken\n * @type {Object}\n * @property {string} token - Token value.\n * @property {Date} expires - Token expiration time.\n */\n /**\n * Get stored authentication token.\n *\n * @returns {AuthToken} authentication token.\n */\n getAuthToken() {\n if (this._authToken && (this._authToken.expires.getTime() > Date.now())) {\n return this._authToken;\n } else {\n this._authToken = null;\n }\n return null;\n }\n\n /**\n * Application may provide a saved authentication token.\n *\n * @param {AuthToken} token - authentication token.\n */\n setAuthToken(token) {\n this._authToken = token;\n }\n\n /**\n * @typedef SetParams\n * @type {Object}\n * @property {SetDesc=} desc - Topic initialization parameters when creating a new topic or a new subscription.\n * @property {SetSub=} sub - Subscription initialization parameters.\n * @property {Array.true, detach and unsubscribe, otherwise just detach.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n leave(topic, unsub) {\n const pkt = this.#initPacket('leave', topic);\n pkt.leave.unsub = unsub;\n\n return this.#send(pkt, pkt.leave.id);\n }\n\n /**\n * Create message draft without sending it to the server.\n *\n * @param {string} topic - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Object} new message which can be sent to the server or otherwise used.\n */\n createMessage(topic, content, noEcho) {\n const pkt = this.#initPacket('pub', topic);\n\n let dft = typeof content == 'string' ? Drafty.parse(content) : content;\n if (dft && !Drafty.isPlainText(dft)) {\n pkt.pub.head = {\n mime: Drafty.getContentType()\n };\n content = dft;\n }\n pkt.pub.noecho = noEcho;\n pkt.pub.content = content;\n\n return pkt.pub;\n }\n\n /**\n * Publish {data} message to topic.\n *\n * @param {string} topicName - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publish(topicName, content, noEcho) {\n return this.publishMessage(\n this.createMessage(topicName, content, noEcho)\n );\n }\n\n /**\n * Publish message to topic. The message should be created by {@link Tinode#createMessage}.\n *\n * @param {Object} pub - Message to publish.\n * @param {Array.'me' topic.\n *\n * @param {string} method - validation method such as 'email' or 'tel'.\n * @param {string} value - validation value, i.e. 'alice@example.com'.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n const pkt = this.#initPacket('del', Const.TOPIC_ME);\n pkt.del.what = 'cred';\n pkt.del.cred = {\n meth: method,\n val: value\n };\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Request to delete account of the current user.\n *\n * @param {boolean} hard - hard-delete user.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCurrentUser(hard) {\n const pkt = this.#initPacket('del', null);\n pkt.del.what = 'user';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id).then(_ => {\n this._myUID = null;\n });\n }\n\n /**\n * Notify server that a message or messages were read or received. Does NOT return promise.\n *\n * @param {string} topicName - Name of the topic where the mesage is being aknowledged.\n * @param {string} what - Action being aknowledged, either \"read\" or \"recv\".\n * @param {number} seq - Maximum id of the message being acknowledged.\n * @throws {Error} if seq is invalid.\n */\n note(topicName, what, seq) {\n if (seq <= 0 || seq >= Const.LOCAL_SEQID) {\n throw new Error(`Invalid message id ${seq}`);\n }\n\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = what;\n pkt.note.seq = seq;\n this.#send(pkt);\n }\n\n /**\n * Broadcast a key-press notification to topic subscribers. Used to show\n * typing notifications \"user X is typing...\".\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {string=} type - notification to send, default is 'kp'.\n */\n noteKeyPress(topicName, type) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = type || 'kp';\n this.#send(pkt);\n }\n\n /**\n * Send a video call notification to topic subscribers (including dialing,\n * hangup, etc.).\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} evt - Call event.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(topicName, seq, evt, payload) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'call';\n pkt.note.event = evt;\n pkt.note.payload = payload;\n this.#send(pkt, pkt.note.id);\n }\n\n /**\n * Get a named topic, either pull it from cache or create a new instance.\n * There is a single instance of topic for each name.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested or newly created topic or undefined if topic name is invalid.\n */\n getTopic(topicName) {\n let topic = this.#cacheGet('topic', topicName);\n if (!topic && topicName) {\n if (topicName == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (topicName == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(topicName);\n }\n // Cache management.\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Don't save to DB here: a record will be added when the topic is subscribed.\n }\n return topic;\n }\n\n /**\n * Get a named topic from cache.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested topic or undefined if topic is not found in cache.\n */\n cacheGetTopic(topicName) {\n return this.#cacheGet('topic', topicName);\n }\n\n /**\n * Remove named topic from cache.\n *\n * @param {string} topicName - Name of the topic to remove from cache.\n */\n cacheRemTopic(topicName) {\n this.#cacheDel('topic', topicName);\n }\n\n /**\n * Iterate over cached topics.\n *\n * @param {Function} func - callback to call for each topic.\n * @param {Object} context - 'this' inside the 'func'.\n */\n mapTopics(func, context) {\n this.#cacheMap('topic', func, context);\n }\n\n /**\n * Check if named topic is already present in cache.\n *\n * @param {string} topicName - Name of the topic to check.\n * @returns {boolean} true if topic is found in cache, false otherwise.\n */\n isTopicCached(topicName) {\n return !!this.#cacheGet('topic', topicName);\n }\n\n /**\n * Generate unique name like 'new123456' suitable for creating a new group topic.\n *\n * @param {boolean} isChan - if the topic is channel-enabled.\n * @returns {string} name which can be used for creating a new group topic.\n */\n newGroupTopicName(isChan) {\n return (isChan ? Const.TOPIC_NEW_CHAN : Const.TOPIC_NEW) + this.getNextUniqueId();\n }\n\n /**\n * Instantiate 'me' topic or get it from cache.\n *\n * @returns {TopicMe} Instance of 'me' topic.\n */\n getMeTopic() {\n return this.getTopic(Const.TOPIC_ME);\n }\n\n /**\n * Instantiate 'fnd' (find) topic or get it from cache.\n *\n * @returns {Topic} Instance of 'fnd' topic.\n */\n getFndTopic() {\n return this.getTopic(Const.TOPIC_FND);\n }\n\n /**\n * Create a new {@link LargeFileHelper} instance\n *\n * @returns {LargeFileHelper} instance of a {@link Tinode.LargeFileHelper}.\n */\n getLargeFileHelper() {\n return new LargeFileHelper(this, Const.PROTOCOL_VERSION);\n }\n\n /**\n * Get the UID of the the current authenticated user.\n *\n * @returns {string} UID of the current user or undefined if the session is not yet\n * authenticated or if there is no session.\n */\n getCurrentUserID() {\n return this._myUID;\n }\n\n /**\n * Check if the given user ID is equal to the current user's UID.\n *\n * @param {string} uid - UID to check.\n *\n * @returns {boolean} true if the given UID belongs to the current logged in user.\n */\n isMe(uid) {\n return this._myUID === uid;\n }\n\n /**\n * Get login used for last successful authentication.\n *\n * @returns {string} login last used successfully or undefined.\n */\n getCurrentLogin() {\n return this._login;\n }\n\n /**\n * Return information about the server: protocol version and build timestamp.\n *\n * @returns {Object} build and version of the server or null if there is no connection or\n * if the first server response has not been received yet.\n */\n getServerInfo() {\n return this._serverInfo;\n }\n\n /**\n * Report a topic for abuse. Wrapper for {@link Tinode#publish}.\n *\n * @param {string} action - the only supported action is 'report'.\n * @param {string} target - name of the topic being reported.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n report(action, target) {\n return this.publish(Const.TOPIC_SYS, Drafty.attachJSON(null, {\n 'action': action,\n 'target': target\n }));\n }\n\n /**\n * Return server-provided configuration value.\n *\n * @param {string} name of the value to return.\n * @param {Object} defaultValue to return in case the parameter is not set or not found.\n *\n * @returns {Object} named value.\n */\n getServerParam(name, defaultValue) {\n return this._serverInfo && this._serverInfo[name] || defaultValue;\n }\n\n /**\n * Toggle console logging. Logging is off by default.\n *\n * @param {boolean} enabled - Set to true to enable logging to console.\n * @param {boolean} trimLongStrings - Set to true to trim long strings.\n */\n enableLogging(enabled, trimLongStrings) {\n this._loggingEnabled = enabled;\n this._trimLongStrings = enabled && trimLongStrings;\n }\n\n /**\n * Set UI language to report to the server. Must be called before 'hi' is sent, otherwise it will not be used.\n *\n * @param {string} hl - human (UI) language, like \"en_US\" or \"zh-Hans\".\n */\n setHumanLanguage(hl) {\n if (hl) {\n this._humanLanguage = hl;\n }\n }\n\n /**\n * Check if given topic is online.\n *\n * @param {string} name of the topic to test.\n * @returns {boolean} true if topic is online, false otherwise.\n */\n isTopicOnline(name) {\n const topic = this.#cacheGet('topic', name);\n return topic && topic.online;\n }\n\n /**\n * Get access mode for the given contact.\n *\n * @param {string} name of the topic to query.\n * @returns {AccessMode} access mode if topic is found, null otherwise.\n */\n getTopicAccessMode(name) {\n const topic = this.#cacheGet('topic', name);\n return topic ? topic.acs : null;\n }\n\n /**\n * Include message ID into all subsequest messages to server instructin it to send aknowledgemens.\n * Required for promises to function. Default is \"on\".\n *\n * @param {boolean} status - Turn aknowledgemens on or off.\n * @deprecated\n */\n wantAkn(status) {\n if (status) {\n this._messageId = Math.floor((Math.random() * 0xFFFFFF) + 0xFFFFFF);\n } else {\n this._messageId = 0;\n }\n }\n\n // Callbacks:\n /**\n * Callback to report when the websocket is opened. The callback has no parameters.\n *\n * @type {onWebsocketOpen}\n */\n onWebsocketOpen = undefined;\n\n /**\n * @typedef ServerParams\n *\n * @type {Object}\n * @property {string} ver - Server version\n * @property {string} build - Server build\n * @property {string=} sid - Session ID, long polling connections only.\n */\n\n /**\n * @callback onConnect\n * @param {number} code - Result code\n * @param {string} text - Text epxplaining the completion, i.e \"OK\" or an error message.\n * @param {ServerParams} params - Parameters returned by the server.\n */\n /**\n * Callback to report when connection with Tinode server is established.\n * @type {onConnect}\n */\n onConnect = undefined;\n\n /**\n * Callback to report when connection is lost. The callback has no parameters.\n * @type {onDisconnect}\n */\n onDisconnect = undefined;\n\n /**\n * @callback onLogin\n * @param {number} code - NUmeric completion code, same as HTTP status codes.\n * @param {string} text - Explanation of the completion code.\n */\n /**\n * Callback to report login completion.\n * @type {onLogin}\n */\n onLogin = undefined;\n\n /**\n * Callback to receive {ctrl} (control) messages.\n * @type {onCtrlMessage}\n */\n onCtrlMessage = undefined;\n\n /**\n * Callback to recieve {data} (content) messages.\n * @type {onDataMessage}\n */\n onDataMessage = undefined;\n\n /**\n * Callback to receive {pres} (presence) messages.\n * @type {onPresMessage}\n */\n onPresMessage = undefined;\n\n /**\n * Callback to receive all messages as objects.\n * @type {onMessage}\n */\n onMessage = undefined;\n\n /**\n * Callback to receive all messages as unparsed text.\n * @type {onRawMessage}\n */\n onRawMessage = undefined;\n\n /**\n * Callback to receive server responses to network probes. See {@link Tinode#networkProbe}\n * @type {onNetworkProbe}\n */\n onNetworkProbe = undefined;\n\n /**\n * Callback to be notified when exponential backoff is iterating.\n * @type {onAutoreconnectIteration}\n */\n onAutoreconnectIteration = undefined;\n};\n\n// Exported constants\nTinode.MESSAGE_STATUS_NONE = Const.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = Const.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = Const.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = Const.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = Const.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = Const.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = Const.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = Const.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = Const.MESSAGE_STATUS_TO_ME;\n\n// Unicode [del] symbol.\nTinode.DEL_CHAR = Const.DEL_CHAR;\n\n// Names of keys to server-provided configuration limits.\nTinode.MAX_MESSAGE_SIZE = 'maxMessageSize';\nTinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nTinode.MAX_TAG_COUNT = 'maxTagCount';\nTinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nTinode.REQ_CRED_VALIDATORS = 'reqCred';\n\n// Tinode URI topic ID prefix, 'scheme:path/'.\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:topic/';\n"],"names":["AccessMode","constructor","acs","given","decode","want","mode","checkFlag","#checkFlag","val","side","flag","includes","Error","str","_BITMASK","_NONE","bitmask","_JOIN","_READ","_WRITE","_PRES","_APPROVE","_SHARE","_DELETE","_OWNER","m0","i","length","bit","charAt","toUpperCase","encode","_INVALID","res","update","upd","action","val0","parts","split","diff","a1","a2","toString","jsonHelper","setMode","m","updateMode","u","getMode","setGiven","g","updateGiven","getGiven","setWant","w","updateWant","getWant","getMissing","getExcessive","updateAll","isOwner","isPresencer","isMuted","isJoiner","isReader","isWriter","isApprover","isAdmin","isSharer","isDeleter","CBuffer","comparator","undefined","unique","buffer","compare_","unique_","a","b","findNearest","#findNearest","elem","arr","exact","start","end","pivot","found","idx","insertSorted","#insertSorted","count","splice","getAt","at","getLast","put","insert","arguments","Array","isArray","delAt","r","delRange","since","before","reset","forEach","callback","startIdx","beforeIdx","context","call","find","nearest","filter","isEmpty","CommError","message","code","name","PACKAGE_VERSION","PROTOCOL_VERSION","VERSION","LIBRARY","TOPIC_NEW","TOPIC_NEW_CHAN","TOPIC_ME","TOPIC_FND","TOPIC_SYS","TOPIC_CHAN","TOPIC_GRP","TOPIC_P2P","USER_NEW","LOCAL_SEQID","MESSAGE_STATUS_NONE","MESSAGE_STATUS_QUEUED","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","MESSAGE_STATUS_TO_ME","EXPIRE_PROMISES_TIMEOUT","EXPIRE_PROMISES_PERIOD","RECV_TIMEOUT","DEFAULT_MESSAGES_PAGE","DEL_CHAR","jsonParseHelper","WebSocketProvider","XHRProvider","NETWORK_ERROR","NETWORK_ERROR_TEXT","NETWORK_USER","NETWORK_USER_TEXT","_BOFF_BASE","_BOFF_MAX_ITER","_BOFF_JITTER","makeBaseUrl","host","protocol","version","apiKey","url","Connection","log","_","boffTimer","boffIteration","boffClosed","socket","secure","autoreconnect","initialized","config","version_","autoreconnect_","transport","init_lp","init_ws","setNetworkProviders","wsProvider","xhrProvider","logger","l","connect","host_","force","Promise","reject","reconnect","disconnect","sendText","msg","isConnected","probe","backoffReset","boffReset","boffReconnect","#boffReconnect","clearTimeout","timeout","Math","pow","random","onAutoreconnectIteration","setTimeout","prom","catch","boffStop","#boffStop","#boffReset","#init_lp","XDR_UNSENT","XDR_OPENED","XDR_HEADERS_RECEIVED","XDR_LOADING","XDR_DONE","_lpURL","_poller","_sender","lp_sender","url_","sender","onreadystatechange","evt","readyState","status","open","lp_poller","resolve","poller","promiseCompleted","pkt","JSON","parse","responseText","ctrl","params","sid","send","onOpen","onMessage","onDisconnect","text","abort","err","#init_ws","OPEN","close","conn","onerror","onopen","onclose","onmessage","data","DB_VERSION","DB_NAME","IDBProvider","DB","onError","db","disabled","mapObjects","#mapObjects","source","trx","transaction","event","target","error","objectStore","getAll","onsuccess","result","topic","initDatabase","req","onupgradeneeded","createObjectStore","keyPath","deleteDatabase","onblocked","isReady","updTopic","oncomplete","get","serializeTopic","commit","markTopicAsDeleted","deleted","_deleted","remTopic","delete","IDBKeyRange","only","bound","Number","MAX_SAFE_INTEGER","mapTopics","deserializeTopic","src","updUser","uid","pub","public","remUser","mapUsers","getUser","user","updSubscription","topicName","sub","serializeSubscription","mapSubscriptions","addMessage","add","serializeMessage","updMessageStatus","seq","_status","remMessages","from","to","range","readMessages","query","limit","openCursor","cursor","value","push","continue","topic_fields","#deserializeTopic","f","hasOwnProperty","tags","_tags","setAccessMode","read","unread","max","#serializeTopic","dst","getAccessMode","#serializeSubscription","fields","#serializeMessage","setDatabaseProvider","idbProvider","MAX_FORM_ELEMENTS","MAX_PREVIEW_ATTACHMENTS","MAX_PREVIEW_DATA_SIZE","JSON_MIME_TYPE","DRAFTY_MIME_TYPE","ALLOWED_ENT_FIELDS","segmenter","Intl","Segmenter","INLINE_STYLES","FMT_WEIGHT","ENTITY_TYPES","dataName","pack","test","re","slice","FORMAT_TAGS","AU","html_tag","md_tag","isVoid","BN","BR","CO","DL","EM","EX","FM","HD","HL","HT","IM","LN","MN","RW","QQ","ST","VC","VD","base64toObjectUrl","b64","contentType","bin","atob","buf","ArrayBuffer","Uint8Array","charCodeAt","URL","createObjectURL","Blob","type","base64toDataUrl","DECORATORS","props","href","id","act","ref","mime","Drafty","duration","size","tmpPreviewUrl","_tempPreview","previewUrl","downloadUrl","width","height","title","alt","state","preview","premime","poster","preref","txt","fmt","ent","init","plainText","content","lines","entityMap","entityIndex","blx","line","spans","entities","tag","concat","spannify","block","sort","toSpanTree","chunks","chunkify","drafty","draftify","extractEntities","ranges","entity","index","tp","offset","len","key","segments","segment","ele","toGraphemeValues","stringToGraphemes","map","s","correctAt","correctLen","isEmptyObject","append","first","second","insertImage","imageDesc","ex","refurl","bits","filename","urlPromise","_processing","then","insertVideo","videoDesc","urls","insertAudio","audioDesc","videoCall","audioOnly","aonly","updateVideoCall","Object","assign","quote","header","body","appendLineBreak","mention","appendLink","linkData","appendImage","appendAudio","attachFile","attachmentDesc","wrapInto","style","wrapAsForm","insertButton","actionType","actionValue","refUrl","indexOf","appendButton","attachJSON","UNSAFE_toHTML","doc","tree","draftyToTree","htmlFormatter","values","join","treeBottomUp","format","original","formatter","shorten","light","shortenTree","lightEntity","treeToDrafty","forwardedContent","rmMention","node","parent","treeTopDown","lTrim","replyContent","convMNnQQnBR","startsWith","children","attachmentsToEnd","forwarding","toPlainText","isPlainText","toMarkdown","mdFormatter","def","isValid","txt_type","hasAttachments","attachments","hasEntities","styles","sanitizeEntities","copyEntData","getDownloadUrl","entData","isProcessing","getPreviewUrl","getEntitySize","getEntityMimeType","tagName","attrValue","getContentType","span","chunk","chld","re_start","re_end","exec","start_offset","lastIndexOf","end_offset","last","graphemes","spansToTree","flatten","child","addNode","n","att","subspans","inner","keymap","c","keys","newKey","transformer","stack","pop","tail","shortener","allow","lightCopy","trimStart","shift","match","extracted","el","startAt","plain","entries","dc","obj","graphemeIndices","graphemeIndex","charIndex","indices","module","exports","isUrlRelative","addURLParam","relUrl","window","location","origin","searchParams","substring","LargeFileHelper","tinode","_tinode","_version","_apiKey","_authToken","getAuthToken","xhr","uploadWithBaseUrl","baseUrl","avatarFor","onProgress","onSuccess","onFailure","base","endsWith","instance","setRequestHeader","token","toResolve","toReject","upload","onprogress","e","lengthComputable","loaded","total","onload","response","statusText","onabort","form","FormData","set","getNextUniqueId","_secure","_host","download","relativeUrl","mimetype","responseType","link","document","createElement","display","setAttribute","appendChild","click","removeChild","revokeObjectURL","reader","FileReader","readAsText","cancel","setNetworkProvider","MetaGetBuilder","what","get_desc_ims","#get_desc_ims","updated","get_subs_ims","#get_subs_ims","isP2PType","_lastSubsUpdate","withData","withLaterData","_maxSeq","withEarlierData","_minSeq","withDesc","ims","withLaterDesc","withSub","userOrTopic","opts","getType","withOneSub","withLaterOneSub","withLaterSub","withTags","withCred","withDel","withLaterDel","_maxDel","extract","build","getOwnPropertyNames","Const","mergeObj","mergeToCache","normalizeArray","Topic","callbacks","created","touched","Date","private","trusted","_users","_queuedSeqId","_noEarlierMsgs","_recvNotificationTimer","_credentials","_messageVersions","_messages","_attached","_new","_delayedLeaveTimer","onData","onMeta","onPres","onInfo","onMetaDesc","onMetaSub","onSubsUpdated","onTagsUpdated","onCredsUpdated","onDeleteTopic","onAllMessagesReceived","topicType","types","isMeTopicName","isGroupTopicName","isP2PTopicName","isCommTopicName","isNewGroupTopicName","isChannelTopicName","isSubscribed","subscribe","getParams","setParams","_cacheDelSelf","_cachePutSelf","ts","me","getMeTopic","desc","_noForwarding","_processMetaDesc","createMessage","noEcho","publish","publishMessage","_sending","_failed","swapMessageId","_maybeUpdateMessageVersionsCache","_routeData","publishDraft","_getQueuedSeqId","getCurrentUserID","noecho","_db","_cancelled","_fatal","leave","unsub","_resetSub","_gone","leaveDelayed","delay","getMeta","getMessagesPage","forward","startMetaQuery","_loadMessages","promise","setMeta","_processMetaSubs","_processMetaTags","cred","_processMetaCreds","subscriber","am","invite","archive","arch","delMessages","hard","r1","r2","low","hi","tosend","reduce","out","del","flushMessageRange","flushMessage","delMessagesAll","hardDel","_all","delMessagesList","list","prev","delMessagesEdits","messageVersions","delTopic","delSubscription","note","_updateMyReadRecv","_refreshContact","noteRecv","noteRead","noteKeyPress","noteRecording","payload","oldVal","doUpdate","recv","userDesc","_cacheGetUser","p2pPeerDesc","subscribers","cb","origSeq","versions","messages","sinceId","beforeId","msgs","unused1","unused2","_isReplacementMsg","latest","latestMsgVersion","_origTs","_origSeq","findMessage","latestMessage","maxMsgSeq","minMsgSeq","maxClearId","messageCount","queuedMessages","msgReceiptCount","msgReadCount","msgRecvCount","msgHasMoreMessages","newer","isNewMessage","seqId","fromId","untilId","newSeqId","numMessages","cancelSend","msgStatus","getDefaultAccess","defacs","isArchived","isMeType","isChannelType","isGroupType","isCommType","isMe","head","replace","targetSeq","parseInt","targetMsg","outgoing","webrtc","incoming","_routeInfo","_routeMeta","meta","_processDelMessages","clear","delseq","_routePres","pres","online","isTopicCached","dacs","info","subs","_updateCachedUser","creds","_allMessagesReceived","cached","_cachePutUser","_updateReceived","TopicMe","onContactUpdate","turnOff","_myUID","cont","seen","when","updateCount","cacheRemTopic","getTopic","cr","findIndex","meth","done","resp","cacheGetTopic","tgt","ua","dummy","delCredential","method","contacts","getContact","getCredentials","TopicFnd","_contacts","indexBy","getPrototypeOf","prototype","date","isNaN","isValidDate","d","getTime","rfc3339DateString","pad","sp","repeat","millis","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","ignore","prop","cache","newval","simplify","t","trim","toLowerCase","item","pos","ary","DBCache","WebSocket","XMLHttpRequest","IndexedDBProvider","indexedDB","initForNonBrowserApp","chars","btoa","global","input","output","charCode","bc","bs","String","fromCharCode","detectTransport","b64EncodeUnicode","encodeURIComponent","toSolidBytes","p1","jsonBuildHelper","jsonLoggerHelper","getBrowserInfo","product","reactnative","priority","tmp","substr","tokens","m2","v","minor","Tinode","_appName","_browser","_platform","_hwos","_humanLanguage","_loggingEnabled","_trimLongStrings","_authenticated","_login","_inPacketCount","_messageId","floor","_serverInfo","_deviceToken","_pendingPromises","_expirePromises","_connection","_persist","_cache","onComplete","appName","platform","navigator","userAgent","language","dispatchMessage","connectionOpen","disconnected","persist","cacheGet","attachCacheToTopic","cachePut","all","dateString","_len","args","_key","console","makePromise","#makePromise","execPromise","#execPromise","onOK","errorText","#send","stringify","#dispatchMessage","onRawMessage","onNetworkProbe","onCtrlMessage","onMetaMessage","onDataMessage","onPresMessage","onInfoMessage","#connectionOpen","setInterval","expires","hello","#disconnected","clearInterval","cacheMap","getUserAgent","#getUserAgent","initPacket","#initPacket","#cachePut","#cacheGet","cacheDel","#cacheDel","#cacheMap","func","#attachCacheToTopic","_cacheDelUser","loginSuccessful","#loginSuccessful","onLogin","credential","getVersion","getLibrary","isNullValue","isServerAssignedSeq","clearStorage","initStorage","networkProbe","isAuthenticated","authorizeURL","parsed","account","scheme","secret","login","acc","tmpscheme","tmpsecret","extra","createAccount","createAccountBasic","username","password","updateAccountBasic","onConnect","setDeviceToken","dt","sent","loginBasic","uname","loginToken","requestResetAuthSecret","now","setAuthToken","dft","oobNotification","xfrom","finally","modeGiven","modeWant","delCurrentUser","newGroupTopicName","isChan","getFndTopic","getLargeFileHelper","getCurrentLogin","getServerInfo","report","getServerParam","defaultValue","enableLogging","enabled","trimLongStrings","setHumanLanguage","hl","isTopicOnline","getTopicAccessMode","wantAkn","onWebsocketOpen","MAX_MESSAGE_SIZE","MAX_SUBSCRIBER_COUNT","MAX_TAG_COUNT","MAX_FILE_UPLOAD_SIZE","REQ_CRED_VALIDATORS","URI_TOPIC_ID_PREFIX"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"tinode.dev.js","mappings":"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","sources":["webpack://tinode/webpack/universalModuleDefinition","webpack://tinode/./src/access-mode.js","webpack://tinode/./src/cbuffer.js","webpack://tinode/./src/comm-error.js","webpack://tinode/./src/config.js","webpack://tinode/./src/connection.js","webpack://tinode/./src/db.js","webpack://tinode/./src/drafty.js","webpack://tinode/./src/fnd-topic.js","webpack://tinode/./src/large-file.js","webpack://tinode/./src/me-topic.js","webpack://tinode/./src/meta-builder.js","webpack://tinode/./src/topic.js","webpack://tinode/./src/utils.js","webpack://tinode/./version.js","webpack://tinode/webpack/bootstrap","webpack://tinode/webpack/runtime/compat get default export","webpack://tinode/webpack/runtime/define property getters","webpack://tinode/webpack/runtime/global","webpack://tinode/webpack/runtime/hasOwnProperty shorthand","webpack://tinode/webpack/runtime/make namespace object","webpack://tinode/./src/tinode.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tinode\"] = factory();\n\telse\n\t\troot[\"tinode\"] = factory();\n})(this, () => {\nreturn ","/**\n * @file Access control model.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\n/**\n * Helper class for handling access mode.\n *\n * @class AccessMode\n * @memberof Tinode\n *\n * @param {AccessMode|Object=} acs - AccessMode to copy or access mode object received from the server.\n */\nexport default class AccessMode {\n constructor(acs) {\n if (acs) {\n this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n this.mode = acs.mode ? (typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode)) :\n (this.given & this.want);\n }\n }\n\n static #checkFlag(val, side, flag) {\n side = side || 'mode';\n if (['given', 'want', 'mode'].includes(side)) {\n return ((val[side] & flag) != 0);\n }\n throw new Error(`Invalid AccessMode component '${side}'`);\n }\n /**\n * Parse string into an access mode value.\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {string | Number} mode - either a String representation of the access mode to parse or a set of bits to assign.\n * @returns {number} - Access mode as a numeric value.\n */\n static decode(str) {\n if (!str) {\n return null;\n } else if (typeof str == 'number') {\n return str & AccessMode._BITMASK;\n } else if (str === 'N' || str === 'n') {\n return AccessMode._NONE;\n }\n\n const bitmask = {\n 'J': AccessMode._JOIN,\n 'R': AccessMode._READ,\n 'W': AccessMode._WRITE,\n 'P': AccessMode._PRES,\n 'A': AccessMode._APPROVE,\n 'S': AccessMode._SHARE,\n 'D': AccessMode._DELETE,\n 'O': AccessMode._OWNER\n };\n\n let m0 = AccessMode._NONE;\n\n for (let i = 0; i < str.length; i++) {\n const bit = bitmask[str.charAt(i).toUpperCase()];\n if (!bit) {\n // Unrecognized bit, skip.\n continue;\n }\n m0 |= bit;\n }\n return m0;\n }\n /**\n * Convert numeric representation of the access mode into a string.\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to convert to a string.\n * @returns {string} - Access mode as a string.\n */\n static encode(val) {\n if (val === null || val === AccessMode._INVALID) {\n return null;\n } else if (val === AccessMode._NONE) {\n return 'N';\n }\n\n const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n let res = '';\n for (let i = 0; i < bitmask.length; i++) {\n if ((val & (1 << i)) != 0) {\n res = res + bitmask[i];\n }\n }\n return res;\n }\n /**\n * Update numeric representation of access mode with the new value. The value\n * is one of the following:\n * - a string starting with '+' or '-' then the bits to add or remove, e.g. '+R-W' or '-PS'.\n * - a new value of access mode\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to update.\n * @param {string} upd - update to apply to val.\n * @returns {number} - updated access mode.\n */\n static update(val, upd) {\n if (!upd || typeof upd != 'string') {\n return val;\n }\n\n let action = upd.charAt(0);\n if (action == '+' || action == '-') {\n let val0 = val;\n // Split delta-string like '+ABC-DEF+Z' into an array of parts including + and -.\n const parts = upd.split(/([-+])/);\n // Starting iteration from 1 because String.split() creates an array with the first empty element.\n // Iterating by 2 because we parse pairs +/- then data.\n for (let i = 1; i < parts.length - 1; i += 2) {\n action = parts[i];\n const m0 = AccessMode.decode(parts[i + 1]);\n if (m0 == AccessMode._INVALID) {\n return val;\n }\n if (m0 == null) {\n continue;\n }\n if (action === '+') {\n val0 |= m0;\n } else if (action === '-') {\n val0 &= ~m0;\n }\n }\n val = val0;\n } else {\n // The string is an explicit new value 'ABC' rather than delta.\n const val0 = AccessMode.decode(upd);\n if (val0 != AccessMode._INVALID) {\n val = val0;\n }\n }\n\n return val;\n }\n /**\n * Bits present in a1 but missing in a2.\n *\n * @static\n * @memberof Tinode\n *\n * @param {number | string} a1 - access mode to subtract from.\n * @param {number | string} a2 - access mode to subtract.\n * @returns {number} access mode with bits present in a1 but missing in a2.\n */\n static diff(a1, a2) {\n a1 = AccessMode.decode(a1);\n a2 = AccessMode.decode(a2);\n\n if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n return AccessMode._INVALID;\n }\n return a1 & ~a2;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Custom formatter\n */\n toString() {\n return '{\"mode\": \"' + AccessMode.encode(this.mode) +\n '\", \"given\": \"' + AccessMode.encode(this.given) +\n '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Converts numeric values to strings.\n */\n jsonHelper() {\n return {\n mode: AccessMode.encode(this.mode),\n given: AccessMode.encode(this.given),\n want: AccessMode.encode(this.want)\n };\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign value to 'mode'.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} m - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setMode(m) {\n this.mode = AccessMode.decode(m);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update mode value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateMode(u) {\n this.mode = AccessMode.update(this.mode, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get mode value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - mode value.\n */\n getMode() {\n return AccessMode.encode(this.mode);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign given value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} g - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setGiven(g) {\n this.given = AccessMode.decode(g);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'given' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateGiven(u) {\n this.given = AccessMode.update(this.given, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'given' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - given value.\n */\n getGiven() {\n return AccessMode.encode(this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} w - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setWant(w) {\n this.want = AccessMode.decode(w);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateWant(u) {\n this.want = AccessMode.update(this.want, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'want' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - want value.\n */\n getWant() {\n return AccessMode.encode(this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'want' but missing in 'given'.\n * Inverse of {@link Tinode.AccessMode#getExcessive}\n *\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in want but missing in given.\n */\n getMissing() {\n return AccessMode.encode(this.want & ~this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'given' but missing in 'want'.\n * Inverse of {@link Tinode.AccessMode#getMissing}\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in given but missing in want.\n */\n getExcessive() {\n return AccessMode.encode(this.given & ~this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want', 'give', and 'mode' values.\n * @memberof Tinode.AccessMode\n *\n * @param {AccessMode} val - new access mode value.\n * @returns {AccessMode} - this AccessMode.\n */\n updateAll(val) {\n if (val) {\n this.updateGiven(val.given);\n this.updateWant(val.want);\n this.mode = this.given & this.want;\n }\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Owner (O) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isOwner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isPresencer(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is NOT set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isMuted(side) {\n return !this.isPresencer(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Join (J) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isJoiner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Reader (R) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isReader(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._READ);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Writer (W) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isWriter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Approver (A) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isApprover(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O) or Approver (A) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isAdmin(side) {\n return this.isOwner(side) || this.isApprover(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O), Approver (A), or Sharer (S) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isSharer(side) {\n return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Deleter (D) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isDeleter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n }\n}\n\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\n\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES |\n AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n","/**\n * @file In-memory sorted cache of objects.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\n/**\n * In-memory sorted cache of objects.\n *\n * @class CBuffer\n * @memberof Tinode\n * @protected\n *\n * @param {function} compare custom comparator of objects. Takes two parameters a and b;\n * returns -1 if a < b, 0 if a == b, 1 otherwise.\n * @param {boolean} unique enforce element uniqueness: when true replace existing element with a new\n * one on conflict; when false keep both elements.\n */\nexport default class CBuffer {\n #comparator = undefined;\n #unique = false;\n buffer = [];\n\n constructor(compare_, unique_) {\n this.#comparator = compare_ || ((a, b) => {\n return a === b ? 0 : a < b ? -1 : 1;\n });\n this.#unique = unique_;\n }\n\n #findNearest(elem, arr, exact) {\n let start = 0;\n let end = arr.length - 1;\n let pivot = 0;\n let diff = 0;\n let found = false;\n\n while (start <= end) {\n pivot = (start + end) / 2 | 0;\n diff = this.#comparator(arr[pivot], elem);\n if (diff < 0) {\n start = pivot + 1;\n } else if (diff > 0) {\n end = pivot - 1;\n } else {\n found = true;\n break;\n }\n }\n if (found) {\n return {\n idx: pivot,\n exact: true\n };\n }\n if (exact) {\n return {\n idx: -1\n };\n }\n // Not exact - insertion point\n return {\n idx: diff < 0 ? pivot + 1 : pivot\n };\n }\n\n // Insert element into a sorted array.\n #insertSorted(elem, arr) {\n const found = this.#findNearest(elem, arr, false);\n const count = (found.exact && this.#unique) ? 1 : 0;\n arr.splice(found.idx, count, elem);\n return arr;\n }\n\n /**\n * Get an element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to fetch from.\n * @returns {Object} Element at the given position or undefined.\n */\n getAt(at) {\n return this.buffer[at];\n }\n\n /**\n * Convenience method for getting the last element from the buffer.\n * @memberof Tinode.CBuffer#\n * @param {function} filter - optional filter to apply to elements. If filter is provided, the search\n * for the last element starts from the end of the buffer and goes backwards until the filter returns true.\n * @returns {Object} The last element in the buffer or undefined if buffer is empty.\n */\n getLast(filter) {\n return filter ?\n this.buffer.findLast(filter) :\n this.buffer[this.buffer.length - 1];\n }\n\n /**\n * Insert new element(s) to the buffer at the correct position according to the sort method.\n * Variadic: takes one or more arguments. If an array is passed as a single argument, its\n * elements are inserted individually.\n * @memberof Tinode.CBuffer#\n *\n * @param {...Object|Array} - One or more objects to insert.\n */\n put() {\n let insert;\n // inspect arguments: if array, insert its elements, if one or more non-array arguments, insert them one by one\n if (arguments.length == 1 && Array.isArray(arguments[0])) {\n insert = arguments[0];\n } else {\n insert = arguments;\n }\n for (let idx in insert) {\n this.#insertSorted(insert[idx], this.buffer);\n }\n }\n\n /**\n * Remove element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to delete at.\n * @returns {Object} Element at the given position or undefined.\n */\n delAt(at) {\n at |= 0;\n let r = this.buffer.splice(at, 1);\n if (r && r.length > 0) {\n return r[0];\n }\n return undefined;\n }\n\n /**\n * Remove elements between two positions.\n * @memberof Tinode.CBuffer#\n * @param {number} since - Position to delete from (inclusive).\n * @param {number} before - Position to delete to (exclusive).\n *\n * @returns {Array} array of removed elements (could be zero length).\n */\n delRange(since, before) {\n return this.buffer.splice(since, before - since);\n }\n\n /**\n * Return the number of elements the buffer holds.\n * @memberof Tinode.CBuffer#\n * @return {number} Number of elements in the buffer.\n */\n length() {\n return this.buffer.length;\n }\n\n /**\n * Reset the buffer discarding all elements\n * @memberof Tinode.CBuffer#\n */\n reset() {\n this.buffer = [];\n }\n\n /**\n * Callback for iterating contents of buffer. See {@link Tinode.CBuffer#forEach}.\n * @callback ForEachCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {Object} prev - Previous element of the buffer.\n * @param {Object} next - Next element of the buffer.\n * @param {number} index - Index of the current element.\n */\n\n /**\n * Apply given callback to all elements of the buffer.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.ForEachCallbackType} callback - Function to call for each element.\n * @param {number} startIdx - Optional index to start iterating from (inclusive), default: 0.\n * @param {number} beforeIdx - Optional index to stop iterating before (exclusive), default: length of the buffer.\n * @param {Object} context - calling context (i.e. value of this in callback)\n */\n forEach(callback, startIdx, beforeIdx, context) {\n startIdx = Math.max(0, startIdx | 0);\n beforeIdx = Math.min(beforeIdx || this.buffer.length, this.buffer.length);\n\n for (let i = startIdx; i < beforeIdx; i++) {\n callback.call(context, this.buffer[i],\n (i > startIdx ? this.buffer[i - 1] : undefined),\n (i < beforeIdx - 1 ? this.buffer[i + 1] : undefined), i);\n }\n }\n\n /**\n * Find element in buffer using buffer's comparison function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Object} elem - element to find.\n * @param {boolean=} nearest - when true and exact match is not found, return the nearest element (insertion point).\n * @returns {number} index of the element in the buffer or -1.\n */\n find(elem, nearest) {\n const {\n idx\n } = this.#findNearest(elem, this.buffer, !nearest);\n return idx;\n }\n\n /**\n * Callback for filtering the buffer. See {@link Tinode.CBuffer#filter}.\n * @callback FilterCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {number} index - Index of the current element.\n * @returns {boolen} true to keep the element, false to remove.\n */\n\n /**\n * Remove all elements that do not pass the test implemented by the provided callback function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.FilterCallbackType} callback - Function to call for each element.\n * @param {Object} context - calling context (i.e. value of this in the callback)\n */\n filter(callback, context) {\n let count = 0;\n for (let i = 0; i < this.buffer.length; i++) {\n if (callback.call(context, this.buffer[i], i)) {\n this.buffer[count] = this.buffer[i];\n count++;\n }\n }\n\n this.buffer.splice(count);\n }\n\n /**\n * Check if buffer is empty.\n * @returns {boolean} true if the buffer is empty, false otherwise.\n */\n isEmpty() {\n return this.buffer.length == 0;\n }\n}\n","/**\n * @file Throwable error with numeric error code.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nexport default class CommError extends Error {\n constructor(message, code) {\n super(`${message} (${code})`);\n this.name = 'CommError';\n this.code = code;\n }\n}\n","/**\n * @file Global constants and configuration parameters.\n *\n * @copyright 2015-2025 Tinode LLC\n */\n'use strict';\n\nimport {\n PACKAGE_VERSION\n} from '../version.js';\n\n// Global constants\nexport const PROTOCOL_VERSION = '0'; // Major component of the version, e.g. '0' in '0.17.1'.\nexport const VERSION = PACKAGE_VERSION || '0.24';\nexport const LIBRARY = 'tinodejs/' + VERSION;\n\n// Topic name prefixes.\nexport const TOPIC_NEW = 'new';\nexport const TOPIC_NEW_CHAN = 'nch';\nexport const TOPIC_ME = 'me';\nexport const TOPIC_FND = 'fnd';\nexport const TOPIC_SYS = 'sys';\nexport const TOPIC_SLF = 'slf';\nexport const TOPIC_CHAN = 'chn';\nexport const TOPIC_GRP = 'grp';\nexport const TOPIC_P2P = 'p2p';\nexport const USER_NEW = 'new';\n\n// Starting value of a locally-generated seqId used for pending messages.\nexport const LOCAL_SEQID = 0xFFFFFFF;\n\n// Status codes.\nexport const MESSAGE_STATUS_NONE = 0; // Status not assigned.\nexport const MESSAGE_STATUS_QUEUED = 10; // Local ID assigned, in progress to be sent.\nexport const MESSAGE_STATUS_SENDING = 20; // Transmission started.\nexport const MESSAGE_STATUS_FAILED = 30; // At least one attempt was made to send the message.\nexport const MESSAGE_STATUS_FATAL = 40; // Message sending failed and it should not be retried.\nexport const MESSAGE_STATUS_SENT = 50; // Delivered to the server.\nexport const MESSAGE_STATUS_RECEIVED = 60; // Received by the client.\nexport const MESSAGE_STATUS_READ = 70; // Read by the user.\nexport const MESSAGE_STATUS_TO_ME = 80; // The message is received from another user.\n\n// Reject unresolved futures after this many milliseconds.\nexport const EXPIRE_PROMISES_TIMEOUT = 5_000;\n// Periodicity of garbage collection of unresolved futures.\nexport const EXPIRE_PROMISES_PERIOD = 1_000;\n\n// Delay before acknowledging that a message was recived.\nexport const RECV_TIMEOUT = 100;\n\n// Default number of messages to pull into memory from persistent cache.\nexport const DEFAULT_MESSAGES_PAGE = 24;\n\n// Unicode DEL character indicating data was deleted.\nexport const DEL_CHAR = '\\u2421';\n\n// Maximum number of pinnned messages;\nexport const MAX_PINNED_COUNT = 5;\n\n// Tag prefixes for alias, email, phone.\nexport const TAG_ALIAS = 'alias:';\nexport const TAG_EMAIL = 'email:';\nexport const TAG_PHONE = 'tel:';\n","/**\n * @file Abstraction layer for websocket and long polling connections.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n jsonParseHelper\n} from './utils.js';\n\nlet WebSocketProvider;\nlet XHRProvider;\n\n// Error code to return in case of a network problem.\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\n\n// Error code to return when user disconnected from server.\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\n\n// Settings for exponential backoff\nconst _BOFF_BASE = 2000; // 2000 milliseconds, minimum delay between reconnects\nconst _BOFF_MAX_ITER = 10; // Maximum delay between reconnects 2^10 * 2000 ~ 34 minutes\nconst _BOFF_JITTER = 0.3; // Add random delay\n\n// Helper function for creating an endpoint URL.\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n let url = null;\n\n if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n url = `${protocol}://${host}`;\n if (url.charAt(url.length - 1) !== '/') {\n url += '/';\n }\n url += 'v' + version + '/channels';\n if (['http', 'https'].includes(protocol)) {\n // Long polling endpoint ends with \"lp\", i.e.\n // '/v0/channels/lp' vs just '/v0/channels' for ws\n url += '/lp';\n }\n url += '?apikey=' + apiKey;\n }\n return url;\n}\n\n/**\n * An abstraction for a websocket or a long polling connection.\n *\n * @class Connection\n * @memberof Tinode\n\n * @param {Object} config - configuration parameters.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - Network transport to use, either \"ws\"/\"wss\" for websocket or\n * lp for long polling.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} version_ - Major value of the protocol version, e.g. '0' in '0.17.1'.\n * @param {boolean} autoreconnect_ - If connection is lost, try to reconnect automatically.\n */\nexport default class Connection {\n // Logger, does nothing by default.\n static #log = _ => {};\n\n #boffTimer = null;\n #boffIteration = 0;\n #boffClosed = false; // Indicator if the socket was manually closed - don't autoreconnect if true.\n\n // Websocket.\n #socket = null;\n\n host;\n secure;\n apiKey;\n\n version;\n autoreconnect;\n\n initialized;\n\n // (config.host, config.apiKey, config.transport, config.secure), PROTOCOL_VERSION, true\n constructor(config, version_, autoreconnect_) {\n this.host = config.host;\n this.secure = config.secure;\n this.apiKey = config.apiKey;\n\n this.version = version_;\n this.autoreconnect = autoreconnect_;\n\n if (config.transport === 'lp') {\n // explicit request to use long polling\n this.#init_lp();\n this.initialized = 'lp';\n } else if (config.transport === 'ws') {\n // explicit request to use web socket\n // if websockets are not available, horrible things will happen\n this.#init_ws();\n this.initialized = 'ws';\n }\n\n if (!this.initialized) {\n // Invalid or undefined network transport.\n Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n }\n }\n\n /**\n * To use Connection in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n * @memberof Connection\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n }\n\n /**\n * Assign a non-default logger.\n * @static\n * @memberof Connection\n * @param {function} l variadic logging function.\n */\n static set logger(l) {\n Connection.#log = l;\n }\n\n /**\n * Initiate a new connection\n * @memberof Tinode.Connection#\n * @param {string} host_ Host name to connect to; if null the old host name will be used.\n * @param {boolean} force Force new connection even if one already exists.\n * @return {Promise} Promise resolved/rejected when the connection call completes, resolution is called without\n * parameters, rejection passes the {Error} as parameter.\n */\n connect(host_, force) {\n return Promise.reject(null);\n }\n\n /**\n * Try to restore a network connection, also reset backoff.\n * @memberof Tinode.Connection#\n *\n * @param {boolean} force - reconnect even if there is a live connection already.\n */\n reconnect(force) {}\n\n /**\n * Terminate the network connection\n * @memberof Tinode.Connection#\n */\n disconnect() {}\n\n /**\n * Send a string to the server.\n * @memberof Tinode.Connection#\n *\n * @param {string} msg - String to send.\n * @throws Throws an exception if the underlying connection is not live.\n */\n sendText(msg) {}\n\n /**\n * Check if connection is alive.\n * @memberof Tinode.Connection#\n * @returns {boolean} true if connection is live, false otherwise.\n */\n isConnected() {\n return false;\n }\n\n /**\n * Get the name of the current network transport.\n * @memberof Tinode.Connection#\n * @returns {string} name of the transport such as \"ws\" or \"lp\".\n */\n transport() {\n return this.initialized;\n }\n\n /**\n * Send network probe to check if connection is indeed live.\n * @memberof Tinode.Connection#\n */\n probe() {\n this.sendText('1');\n }\n\n /**\n * Reset autoreconnect counter to zero.\n * @memberof Tinode.Connection#\n */\n backoffReset() {\n this.#boffReset();\n }\n\n // Backoff implementation - reconnect after a timeout.\n #boffReconnect() {\n // Clear timer\n clearTimeout(this.#boffTimer);\n // Calculate when to fire the reconnect attempt\n const timeout = _BOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + _BOFF_JITTER * Math.random()));\n // Update iteration counter for future use\n this.#boffIteration = (this.#boffIteration >= _BOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1);\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout);\n }\n\n this.#boffTimer = setTimeout(_ => {\n Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n // Maybe the socket was closed while we waited for the timer?\n if (!this.#boffClosed) {\n const prom = this.connect();\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(0, prom);\n } else {\n // Suppress error if it's not used.\n prom.catch(_ => {\n /* do nothing */\n });\n }\n } else if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(-1);\n }\n }, timeout);\n }\n\n // Terminate auto-reconnect process.\n #boffStop() {\n clearTimeout(this.#boffTimer);\n this.#boffTimer = null;\n }\n\n // Reset auto-reconnect iteration counter.\n #boffReset() {\n this.#boffIteration = 0;\n }\n\n // Initialization for long polling.\n #init_lp() {\n const XDR_UNSENT = 0; // Client has been created. open() not called yet.\n const XDR_OPENED = 1; // open() has been called.\n const XDR_HEADERS_RECEIVED = 2; // send() has been called, and headers and status are available.\n const XDR_LOADING = 3; // Downloading; responseText holds partial data.\n const XDR_DONE = 4; // The operation is complete.\n\n // Fully composed endpoint URL, with API key & SID\n let _lpURL = null;\n\n let _poller = null;\n let _sender = null;\n\n let lp_sender = (url_) => {\n const sender = new XHRProvider();\n sender.onreadystatechange = (evt) => {\n if (sender.readyState == XDR_DONE && sender.status >= 400) {\n // Some sort of error response\n throw new CommError(\"LP sender failed\", sender.status);\n }\n };\n\n sender.open('POST', url_, true);\n return sender;\n }\n\n let lp_poller = (url_, resolve, reject) => {\n let poller = new XHRProvider();\n let promiseCompleted = false;\n\n poller.onreadystatechange = evt => {\n if (poller.readyState == XDR_DONE) {\n if (poller.status == 201) { // 201 == HTTP.Created, get SID\n let pkt = JSON.parse(poller.responseText, jsonParseHelper);\n _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n poller = lp_poller(_lpURL);\n poller.send(null);\n if (this.onOpen) {\n this.onOpen();\n }\n\n if (resolve) {\n promiseCompleted = true;\n resolve();\n }\n\n if (this.autoreconnect) {\n this.#boffStop();\n }\n } else if (poller.status > 0 && poller.status < 400) { // 0 = network error; 400 = HTTP.BadRequest\n if (this.onMessage) {\n this.onMessage(poller.responseText);\n }\n poller = lp_poller(_lpURL);\n poller.send(null);\n } else {\n // Don't throw an error here, gracefully handle server errors\n if (reject && !promiseCompleted) {\n promiseCompleted = true;\n reject(poller.responseText);\n }\n if (this.onMessage && poller.responseText) {\n this.onMessage(poller.responseText);\n }\n if (this.onDisconnect) {\n const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n this.onDisconnect(new CommError(text, code), code);\n }\n\n // Polling has stopped. Indicate it by setting poller to null.\n poller = null;\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n }\n }\n };\n // Using POST to avoid caching response by service worker.\n poller.open('POST', url_, true);\n return poller;\n }\n\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (_poller) {\n if (!force) {\n return Promise.resolve();\n }\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n Connection.#log(\"LP connecting to:\", url);\n _poller = lp_poller(url, resolve, reject);\n _poller.send(null);\n }).catch(err => {\n Connection.#log(\"LP connection failed:\", err);\n });\n };\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (_sender) {\n _sender.onreadystatechange = undefined;\n _sender.abort();\n _sender = null;\n }\n if (_poller) {\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (this.onDisconnect) {\n this.onDisconnect(new CommError(NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n }\n // Ensure it's reconstructed\n _lpURL = null;\n };\n\n this.sendText = (msg) => {\n _sender = lp_sender(_lpURL);\n if (_sender && (_sender.readyState == XDR_OPENED)) {\n _sender.send(msg);\n } else {\n throw new Error(\"Long poller failed to connect\");\n }\n };\n\n this.isConnected = _ => {\n return (_poller && true);\n };\n }\n\n // Initialization for Websocket\n #init_ws() {\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (this.#socket) {\n if (!force && this.#socket.readyState == this.#socket.OPEN) {\n // Issue a probe request to be sure the connection is live.\n // This is a non-blocking call.\n this.probe();\n return Promise.resolve();\n }\n this.#socket.close();\n this.#socket = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n\n Connection.#log(\"WS connecting to: \", url);\n\n // It throws when the server is not accessible but the exception cannot be caught:\n // https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation/31003057\n const conn = new WebSocketProvider(url);\n\n conn.onerror = err => {\n reject(err);\n };\n\n conn.onopen = _ => {\n if (this.autoreconnect) {\n this.#boffStop();\n }\n\n if (this.onOpen) {\n this.onOpen();\n }\n\n resolve();\n };\n\n conn.onclose = _ => {\n this.#socket = null;\n\n if (this.onDisconnect) {\n const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n this.onDisconnect(new CommError(this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n }\n\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n };\n\n conn.onmessage = evt => {\n if (this.onMessage) {\n this.onMessage(evt.data);\n }\n };\n\n this.#socket = conn;\n });\n }\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (!this.#socket) {\n return;\n }\n this.#socket.close();\n this.#socket = null;\n };\n\n this.sendText = msg => {\n if (this.#socket && (this.#socket.readyState == this.#socket.OPEN)) {\n this.#socket.send(msg);\n } else {\n throw new Error(\"Websocket is not connected\");\n }\n };\n\n this.isConnected = _ => {\n return (this.#socket && (this.#socket.readyState == this.#socket.OPEN));\n };\n }\n\n // Callbacks:\n\n /**\n * A callback to pass incoming messages to. See {@link Tinode.Connection#onMessage}.\n * @callback Tinode.Connection.OnMessage\n * @memberof Tinode.Connection\n * @param {string} message - Message to process.\n */\n onMessage = undefined;\n\n /**\n * A callback for reporting a dropped connection.\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onDisconnect = undefined;\n\n /**\n * A callback called when the connection is ready to be used for sending. For websockets it's socket open,\n * for long polling it's readyState=1 (OPENED)\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onOpen = undefined;\n\n /**\n * A callback to notify of reconnection attempts. See {@link Tinode.Connection#onAutoreconnectIteration}.\n * @memberof Tinode.Connection\n * @callback AutoreconnectIterationType\n * @param {string} timeout - time till the next reconnect attempt in milliseconds. -1 means reconnect was skipped.\n * @param {Promise} promise resolved or rejected when the reconnect attemp completes.\n *\n */\n /**\n * A callback to inform when the next attampt to reconnect will happen and to receive connection promise.\n * @memberof Tinode.Connection#\n * @type {Tinode.Connection.AutoreconnectIterationType}\n */\n onAutoreconnectIteration = undefined;\n}\n\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n","/**\n * @file Helper methods for dealing with IndexedDB cache of messages, users, and topics.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst DB_VERSION = 3;\nconst DB_NAME = 'tinode-web';\n\nlet IDBProvider;\n\nexport default class DB {\n #onError = _ => {};\n #logger = _ => {};\n\n // Instance of IndexDB.\n db = null;\n // Indicator that the cache is disabled.\n disabled = true;\n\n constructor(onError, logger) {\n this.#onError = onError || this.#onError;\n this.#logger = logger || this.#logger;\n }\n\n #mapObjects(source, callback, context) {\n if (!this.db) {\n return disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction([source]);\n trx.onerror = event => {\n this.#logger('PCache', 'mapObjects', source, event.target.error);\n reject(event.target.error);\n };\n trx.objectStore(source).getAll().onsuccess = event => {\n if (callback) {\n event.target.result.forEach(topic => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n /**\n * Initialize persistent cache: open or create/upgrade if needed.\n * @returns {Promise} promise to be resolved/rejected when the DB is initialized.\n */\n initDatabase() {\n return new Promise((resolve, reject) => {\n // Open the database and initialize callbacks.\n const req = IDBProvider.open(DB_NAME, DB_VERSION);\n req.onsuccess = event => {\n this.db = event.target.result;\n this.disabled = false;\n resolve(this.db);\n };\n req.onerror = event => {\n this.#logger('PCache', \"failed to initialize\", event);\n reject(event.target.error);\n this.#onError(event.target.error);\n };\n req.onupgradeneeded = event => {\n this.db = event.target.result;\n\n this.db.onerror = event => {\n this.#logger('PCache', \"failed to create storage\", event);\n this.#onError(event.target.error);\n };\n\n // Individual object stores.\n // Object store (table) for topics. The primary key is topic name.\n this.db.createObjectStore('topic', {\n keyPath: 'name'\n });\n\n // Users object store. UID is the primary key.\n this.db.createObjectStore('user', {\n keyPath: 'uid'\n });\n\n // Subscriptions object store topic <-> user. Topic name + UID is the primary key.\n this.db.createObjectStore('subscription', {\n keyPath: ['topic', 'uid']\n });\n\n // Messages object store. The primary key is topic name + seq.\n this.db.createObjectStore('message', {\n keyPath: ['topic', 'seq']\n });\n\n // Records of deleted message ranges. The primary key is topic name + low seq.\n const dellog = this.db.createObjectStore('dellog', {\n keyPath: ['topic', 'low', 'hi']\n });\n dellog.createIndex('topic_clear', ['topic', 'clear'], {\n unique: false\n });\n };\n });\n }\n\n /**\n * Delete persistent cache.\n */\n deleteDatabase() {\n // Close connection, otherwise operations will fail with 'onblocked'.\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return new Promise((resolve, reject) => {\n const req = IDBProvider.deleteDatabase(DB_NAME);\n req.onblocked = _ => {\n if (this.db) {\n this.db.close();\n }\n const err = new Error(\"blocked\");\n this.#logger('PCache', 'deleteDatabase', err);\n reject(err);\n };\n req.onsuccess = _ => {\n this.db = null;\n this.disabled = true;\n resolve(true);\n };\n req.onerror = event => {\n this.#logger('PCache', 'deleteDatabase', event.target.error);\n reject(event.target.error);\n };\n });\n }\n\n /**\n * Check if persistent cache is ready for use.\n * @memberOf DB\n * @returns {boolean} true if cache is ready, false otherwise.\n */\n isReady() {\n return !!this.db;\n }\n\n // Topics.\n\n /**\n * Save to cache or update topic in persistent cache.\n * @memberOf DB\n * @param {Topic} topic - topic to be added or updated.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updTopic(topic) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updTopic', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(topic.name);\n req.onsuccess = _ => {\n trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n trx.commit();\n };\n });\n }\n\n /**\n * Mark or unmark topic as deleted.\n * @memberOf DB\n * @param {string} name - name of the topic to mark or unmark.\n * @param {boolean} deleted - status\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n markTopicAsDeleted(name, deleted) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(name);\n req.onsuccess = event => {\n const topic = event.target.result;\n if (topic && topic._deleted != deleted) {\n topic._deleted = deleted;\n trx.objectStore('topic').put(topic);\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove topic from persistent cache.\n * @memberOf DB\n * @param {string} name - name of the topic to remove from database.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remTopic(name) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remTopic', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('topic').delete(IDBKeyRange.only(name));\n trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored topic.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapTopics(callback, context) {\n return this.#mapObjects('topic', callback, context);\n }\n\n /**\n * Copy data from serialized object to topic.\n * @memberOf DB\n * @param {Topic} topic - target to deserialize to.\n * @param {Object} src - serialized data to copy from.\n */\n deserializeTopic(topic, src) {\n DB.#deserializeTopic(topic, src);\n }\n\n // Users.\n /**\n * Add or update user object in the persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to save or update.\n * @param {Object} pub - user's public information.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updUser(uid, pub) {\n if (arguments.length < 2 || pub === undefined) {\n // No point inupdating user with invalid data.\n return;\n }\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').put({\n uid: uid,\n public: pub\n });\n trx.commit();\n });\n }\n\n /**\n * Remove user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to remove from the cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').delete(IDBKeyRange.only(uid));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored user.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapUsers(callback, context) {\n return this.#mapObjects('user', callback, context);\n }\n\n /**\n * Read a single user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to fetch from cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n getUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user']);\n trx.oncomplete = event => {\n const user = event.target.result;\n resolve({\n user: user.uid,\n public: user.public\n });\n };\n trx.onerror = event => {\n this.#logger('PCache', 'getUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').get(uid);\n });\n }\n\n // Subscriptions.\n /**\n * Add or update subscription in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {string} uid - ID of the subscribed user.\n * @param {Object} sub - subscription to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updSubscription(topicName, uid, sub) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updSubscription', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').get([topicName, uid]).onsuccess = (event) => {\n trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n trx.commit();\n };\n });\n }\n\n /**\n * Execute a callback for each cached subscription in a given topic.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the subscriptions.\n * @param {function} callback - function to call for each subscription.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapSubscriptions(topicName, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'mapSubscriptions', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = (event) => {\n if (callback) {\n event.target.result.forEach((topic) => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n // Messages.\n\n /**\n * Save message to persistent cache.\n * @memberOf DB\n * @param {Object} msg - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addMessage(msg) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addMessage', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n trx.commit();\n });\n }\n\n /**\n * Update delivery status of a message stored in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update\n * @param {number} status - new delivery status of the message.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageStatus(topicName, seq, status) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageStatus', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (!src || src._status == status) {\n trx.commit();\n return;\n }\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n _status: status\n }));\n trx.commit();\n };\n });\n }\n\n /**\n * Remove one or more messages from persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} from - id of the message to remove or lower boundary when removing range (inclusive).\n * @param {number=} to - upper boundary (exclusive) when removing a range of messages.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remMessages(topicName, from, to) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n if (!from && !to) {\n from = 0;\n to = Number.MAX_SAFE_INTEGER;\n }\n const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) :\n IDBKeyRange.only([topicName, from]);\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remMessages', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').delete(range);\n trx.commit();\n });\n }\n\n /**\n * Retrieve messages from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve messages from.\n * @param {function} callback to call for each retrieved message.\n * @param {GetDataType} query - parameters of the message range to retrieve.\n *\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readMessages(topicName, query, callback, context) {\n query = query || {};\n\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n const trx = this.db.transaction(['message']);\n let result = [];\n\n // Handle individual message ranges.\n if (Array.isArray(query.ranges)) {\n return new Promise((resolve, reject) => {\n trx.onerror = event => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n query.ranges.forEach(range => {\n const key = range.hi ? IDBKeyRange.bound([topicName, range.low], [topicName, range.hi], false, true) :\n IDBKeyRange.only([topicName, range.low]);\n trx.objectStore('message').getAll(key).onsuccess = event => {\n const msgs = event.target.result;\n if (msgs) {\n if (callback) {\n callback.call(context, msgs);\n }\n if (Array.isArray(msgs)) {\n result = result.concat(msgs);\n } else {\n result.push(msgs);\n }\n }\n count++;\n if (count == query.ranges.length) {\n resolve(result);\n }\n };\n });\n });\n }\n\n // Handle single range.\n return new Promise((resolve, reject) => {\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n trx.onerror = event => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n\n const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n // Iterate in descending order.\n trx.objectStore('message').openCursor(range, 'prev')\n .onsuccess = event => {\n const cursor = event.target.result;\n if (cursor) {\n if (callback) {\n callback.call(context, cursor.value);\n }\n result.push(cursor.value);\n if (limit <= 0 || result.length < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n // Delete log\n\n /**\n * Add records of deleted messages.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} delId - id of the deletion transaction.\n * @param {Array.require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IDBProvider = idbProvider;\n }\n}\n","/**\n * @copyright 2015-2024 Tinode LLC.\n * @summary Minimally rich text representation and formatting for Tinode.\n * @license Apache 2.0\n *\n * @file Basic parser and formatter for very simple text markup. Mostly targeted at\n * mobile use cases similar to Telegram, WhatsApp, and FB Messenger.\n *\n * \n *
\n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> abc def\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n * abc\n * this is *bold*, `code` and _italic_, ~strike~\n * combined *bold and _italic_*\n * an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n * this is a @mention and a #hashtag in a string\n * second #hashtag\n *
\n *\n * Sample JSON representation of the text above:\n * {\n * \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n * \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n * \"fmt\": [\n * { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n * { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n * { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n * { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n * { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n * { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n * ],\n * \"ent\": [\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n * { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n * { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n * ]\n * }\n */\n\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst JSON_MIME_TYPE = 'application/json';\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview',\n 'ref', 'size', 'state', 'url', 'val', 'width'\n];\n\n// Intl.Segmenter is not available in Firefox 124 and earlier. FF 125 with support for Intl.Segmenter\n// was released on April 15, 2024. Polyfill is included in the top package (webapp).\nconst segmenter = new Intl.Segmenter();\n\n// Regular expressions for parsing inline formats. Javascript does not support lookbehind,\n// so it's a bit messy.\nconst INLINE_STYLES = [\n // Strong = bold, *bold text*\n {\n name: 'ST',\n start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n end: /[^\\s*](\\*)(?=$|[\\W_])/\n },\n // Emphesized = italic, _italic text_\n {\n name: 'EM',\n start: /(?:^|\\W)(_)[^\\s_]/,\n end: /[^\\s_](_)(?=$|\\W)/\n },\n // Deleted, ~strike this though~\n {\n name: 'DL',\n start: /(?:^|[\\W_])(~)[^\\s~]/,\n end: /[^\\s~](~)(?=$|[\\W_])/\n },\n // Code block `this is monospace`\n {\n name: 'CO',\n start: /(?:^|\\W)(`)[^`]/,\n end: /[^`](`)(?=$|\\W)/\n }\n];\n\n// Relative weights of formatting spans. Greater index in array means greater weight.\nconst FMT_WEIGHT = ['QQ'];\n\n// RegExps for entity extraction (RF = reference)\nconst ENTITY_TYPES = [\n // URLs\n {\n name: 'LN',\n dataName: 'url',\n pack: function(val) {\n // Check if the protocol is specified, if not use http\n if (!/^[a-z]+:\\/\\//i.test(val)) {\n val = 'http://' + val;\n }\n return {\n url: val\n };\n },\n re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n },\n // Mentions @user (must be 2 or more characters)\n {\n name: 'MN',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n },\n // Hashtags #hashtag, like metion 2 or more characters.\n {\n name: 'HT',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n }\n];\n\n// HTML tag name suggestions\nconst FORMAT_TAGS = {\n AU: {\n html_tag: 'audio',\n md_tag: undefined,\n isVoid: false\n },\n BN: {\n html_tag: 'button',\n md_tag: undefined,\n isVoid: false\n },\n BR: {\n html_tag: 'br',\n md_tag: '\\n',\n isVoid: true\n },\n CO: {\n html_tag: 'tt',\n md_tag: '`',\n isVoid: false\n },\n DL: {\n html_tag: 'del',\n md_tag: '~',\n isVoid: false\n },\n EM: {\n html_tag: 'i',\n md_tag: '_',\n isVoid: false\n },\n EX: {\n html_tag: '',\n md_tag: undefined,\n isVoid: true\n },\n FM: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n HD: {\n html_tag: '',\n md_tag: undefined,\n isVoid: false\n },\n HL: {\n html_tag: 'span',\n md_tag: undefined,\n isVoid: false\n },\n HT: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n IM: {\n html_tag: 'img',\n md_tag: undefined,\n isVoid: false\n },\n LN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n MN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n RW: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false,\n },\n QQ: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n ST: {\n html_tag: 'b',\n md_tag: '*',\n isVoid: false\n },\n VC: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VD: {\n html_tag: 'video',\n md_tag: undefined,\n isVoid: false\n }\n};\n\n// Convert base64-encoded string into Blob.\nfunction base64toObjectUrl(b64, contentType, logger) {\n if (!b64) {\n return null;\n }\n\n try {\n const bin = atob(b64);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return URL.createObjectURL(new Blob([buf], {\n type: contentType\n }));\n } catch (err) {\n if (logger) {\n logger(\"Drafty: failed to convert object.\", err.message);\n }\n }\n\n return null;\n}\n\nfunction base64toDataUrl(b64, contentType) {\n if (!b64) {\n return null;\n }\n contentType = contentType || 'image/jpeg';\n return 'data:' + contentType + ';base64,' + b64;\n}\n\n// Helpers for converting Drafty to HTML.\nconst DECORATORS = {\n // Visial styles\n ST: {\n open: _ => '',\n close: _ => ''\n },\n EM: {\n open: _ => '',\n close: _ => ''\n },\n DL: {\n open: _ => '',\n close: _ => ''\n },\n CO: {\n open: _ => '',\n close: _ => ''\n },\n // Line break\n BR: {\n open: _ => '
',\n close: _ => ''\n },\n // Hidden element\n HD: {\n open: _ => '',\n close: _ => ''\n },\n // Highlighted element.\n HL: {\n open: _ => '',\n close: _ => ''\n },\n // Link (URL)\n LN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n href: data.url,\n target: '_blank'\n } : null;\n },\n },\n // Mention\n MN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Hashtag\n HT: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Button\n BN: {\n open: _ => '',\n props: (data) => {\n return data ? {\n 'data-act': data.act,\n 'data-val': data.val,\n 'data-name': data.name,\n 'data-ref': data.ref\n } : null;\n },\n },\n // Audio recording\n AU: {\n open: (data) => {\n const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n return '',\n props: (data) => {\n if (!data) return null;\n return {\n // Embedded data or external link.\n src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-duration': data.duration,\n 'data-name': data.name,\n 'data-size': data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0),\n 'data-mime': data.mime,\n };\n }\n },\n // Image\n IM: {\n open: data => {\n // Don't use data.ref for preview: it's a security risk.\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n const downloadUrl = data.ref || previewUrl;\n return (data.name ? '' : '') +\n '';\n },\n close: data => {\n return (data.name ? '' : '');\n },\n props: data => {\n if (!data) return null;\n return {\n // Temporary preview, or permanent preview, or external link.\n src: base64toDataUrl(data._tempPreview, data.mime) ||\n data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n title: data.name,\n alt: data.name,\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n },\n },\n // Form - structured layout of elements.\n FM: {\n open: _ => '
';\n },\n close: _ => '',\n props: data => {\n if (!data) return null;\n const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return {\n // Embedded data or external link.\n src: poster,\n 'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-preview': poster,\n 'data-duration': data.duration | 0,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n }\n },\n};\n\n/**\n * The main object which performs all the formatting actions.\n * @class Drafty\n * @constructor\n */\nconst Drafty = function() {\n this.txt = '';\n this.fmt = [];\n this.ent = [];\n}\n\n/**\n * Initialize Drafty document to a plain text string.\n *\n * @param {string} plainText - string to use as Drafty content.\n *\n * @returns new Drafty document or null is plainText is not a string or undefined.\n */\nDrafty.init = function(plainText) {\n if (typeof plainText == 'undefined') {\n plainText = '';\n } else if (typeof plainText != 'string') {\n return null;\n }\n\n return {\n txt: plainText\n };\n}\n\n/**\n * Parse plain text into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} content - plain-text content to parse.\n * @return {Drafty} parsed document or null if the source is not plain text.\n */\nDrafty.parse = function(content) {\n // Make sure we are parsing strings only.\n if (typeof content != 'string') {\n return null;\n }\n\n // Split text into lines. It makes further processing easier.\n const lines = content.split(/\\r?\\n/);\n\n // Holds entities referenced from text\n const entityMap = [];\n const entityIndex = {};\n\n // Processing lines one by one, hold intermediate result in blx.\n const blx = [];\n lines.forEach((line) => {\n let spans = [];\n let entities;\n\n // Find formatted spans in the string.\n // Try to match each style.\n INLINE_STYLES.forEach((tag) => {\n // Each style could be matched multiple times.\n spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n });\n\n let block;\n if (spans.length == 0) {\n block = {\n txt: line\n };\n } else {\n // Sort spans by style occurence early -> late, then by length: first long then short.\n spans.sort((a, b) => {\n const diff = a.at - b.at;\n return diff != 0 ? diff : b.end - a.end;\n });\n\n // Convert an array of possibly overlapping spans into a tree.\n spans = toSpanTree(spans);\n\n // Build a tree representation of the entire string, not\n // just the formatted parts.\n const chunks = chunkify(line, 0, line.length, spans);\n\n const drafty = draftify(chunks, 0);\n\n block = {\n txt: drafty.txt,\n fmt: drafty.fmt\n };\n }\n\n // Extract entities from the cleaned up string.\n entities = extractEntities(block.txt);\n if (entities.length > 0) {\n const ranges = [];\n for (let i in entities) {\n // {offset: match['index'], unique: match[0], len: match[0].length, data: ent.packer(), type: ent.name}\n const entity = entities[i];\n let index = entityIndex[entity.unique];\n if (!index) {\n index = entityMap.length;\n entityIndex[entity.unique] = index;\n entityMap.push({\n tp: entity.type,\n data: entity.data\n });\n }\n ranges.push({\n at: entity.offset,\n len: entity.len,\n key: index\n });\n }\n block.ent = ranges;\n }\n\n blx.push(block);\n });\n\n const result = {\n txt: ''\n };\n\n // Merge lines and save line breaks as BR inline formatting.\n if (blx.length > 0) {\n result.txt = blx[0].txt;\n result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n\n if (result.fmt.length) {\n const segments = segmenter.segment(result.txt);\n for (const ele of result.fmt) {\n ({\n at: ele.at,\n len: ele.len\n } =\n toGraphemeValues(ele, segments, result.txt));\n }\n }\n\n for (let i = 1; i < blx.length; i++) {\n const block = blx[i];\n const offset = stringToGraphemes(result.txt).length + 1;\n\n result.fmt.push({\n tp: 'BR',\n len: 1,\n at: offset - 1\n });\n\n let segments = {};\n\n result.txt += ' ' + block.txt;\n if (block.fmt) {\n segments = segmenter.segment(block.txt);\n result.fmt = result.fmt.concat(\n block.fmt.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n if (block.ent) {\n if (isEmptyObject(segments)) {\n segments = segmenter.segment(block.txt);\n }\n result.fmt = result.fmt.concat(\n block.ent.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n }\n\n if (result.fmt.length == 0) {\n delete result.fmt;\n }\n\n if (entityMap.length > 0) {\n result.ent = entityMap;\n }\n }\n return result;\n}\n\n/**\n * Append one Drafty document to another.\n *\n * @param {Drafty} first - Drafty document to append to.\n * @param {Drafty|string} second - Drafty document or string being appended.\n *\n * @return {Drafty} first document with the second appended to it.\n */\nDrafty.append = function(first, second) {\n if (!first) {\n return second;\n }\n if (!second) {\n return first;\n }\n\n first.txt = first.txt || '';\n const len = stringToGraphemes(first.txt).length;\n\n if (typeof second == 'string') {\n first.txt += second;\n } else if (second.txt) {\n first.txt += second.txt;\n }\n\n if (Array.isArray(second.fmt)) {\n first.fmt = first.fmt || [];\n if (Array.isArray(second.ent)) {\n first.ent = first.ent || [];\n }\n second.fmt.forEach(src => {\n const fmt = {\n at: (src.at | 0) + len,\n len: src.len | 0\n };\n // Special case for the outside of the normal rendering flow styles.\n if (src.at == -1) {\n fmt.at = -1;\n fmt.len = 0;\n }\n if (src.tp) {\n fmt.tp = src.tp;\n } else {\n fmt.key = first.ent.length;\n first.ent.push(second.ent[src.key || 0]);\n }\n first.fmt.push(fmt);\n });\n }\n\n return first;\n}\n\n/**\n * Description of an image to attach.\n * @typedef {Object} ImageDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the image, e.g. \"image/png\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded image content. Could be null/undefined.\n * @property {string} preview - base64-encoded thumbnail of the image.\n * @property {integer} width - width of the image.\n * @property {integer} height - height of the image.\n * @property {string} filename - file name suggestion for downloading the image.\n * @property {integer} size - size of the image in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded image preview used during upload process; not serializable.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {integer} at - index where the object is inserted. The length of the image is always 1.\n * @param {ImageDesc} imageDesc - object with image paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertImage = function(content, at, imageDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'IM',\n data: {\n mime: imageDesc.mime,\n ref: imageDesc.refurl,\n val: imageDesc.bits || imageDesc.preview,\n width: imageDesc.width,\n height: imageDesc.height,\n name: imageDesc.filename,\n size: imageDesc.size | 0,\n }\n };\n\n if (imageDesc.urlPromise) {\n ex.data._tempPreview = imageDesc._tempPreview;\n ex.data._processing = true;\n imageDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of a video to attach.\n * @typedef {Object} VideoDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the video, e.g. \"video/mpeg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - in-band base64-encoded image data. Could be null/undefined.\n * @property {string} preview - base64-encoded screencapture from the video. Could be null/undefined.\n * @property {string} preref - reference to screencapture from the video. Could be null/undefined.\n * @property {integer} width - width of the video.\n * @property {integer} height - height of the video.\n * @property {integer} duration - duration of the video.\n * @property {string} filename - file name suggestion for downloading the video.\n * @property {integer} size - size of the video in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded screencapture used during upload process; not serializable.\n * @property {Promise} urlPromise - array of two promises, which return URLs of video and preview uploads correspondingly\n * (either could be null).\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add video to.\n * @param {integer} at - index where the object is inserted. The length of the video is always 1.\n * @param {VideoDesc} videoDesc - object with video paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertVideo = function(content, at, videoDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'VD',\n data: {\n mime: videoDesc.mime,\n ref: videoDesc.refurl,\n val: videoDesc.bits,\n preref: videoDesc.preref,\n preview: videoDesc.preview,\n width: videoDesc.width,\n height: videoDesc.height,\n duration: videoDesc.duration | 0,\n name: videoDesc.filename,\n size: videoDesc.size | 0,\n }\n };\n\n if (videoDesc.urlPromise) {\n ex.data._tempPreview = videoDesc._tempPreview;\n ex.data._processing = true;\n videoDesc.urlPromise.then(\n urls => {\n ex.data.ref = urls[0];\n ex.data.preref = urls[1];\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of an audio recording to attach.\n * @typedef {Object} AudioDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the audio, e.g. \"audio/ogg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded audio content. Could be null/undefined.\n * @property {integer} duration - duration of the record in milliseconds.\n * @property {string} preview - base64 encoded short array of amplitude values 0..100.\n * @property {string} filename - file name suggestion for downloading the audio.\n * @property {integer} size - size of the recording in bytes. Treat is as an untrusted hint.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert audio recording into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add audio record to.\n * @param {integer} at - index where the object is inserted. The length of the record is always 1.\n * @param {AudioDesc} audioDesc - object with the audio paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertAudio = function(content, at, audioDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'AU',\n data: {\n mime: audioDesc.mime,\n val: audioDesc.bits,\n duration: audioDesc.duration | 0,\n preview: audioDesc.preview,\n name: audioDesc.filename,\n size: audioDesc.size | 0,\n ref: audioDesc.refurl\n }\n };\n\n if (audioDesc.urlPromise) {\n ex.data._processing = true;\n audioDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Create a (self-contained) video call Drafty document.\n * @memberof Drafty\n * @static\n * @param {boolean} audioOnly
true if the call is initially audio-only.\n * @returns Video Call drafty document.\n */\nDrafty.videoCall = function(audioOnly) {\n const content = {\n txt: ' ',\n fmt: [{\n at: 0,\n len: 1,\n key: 0\n }],\n ent: [{\n tp: 'VC',\n data: {\n aonly: audioOnly\n },\n }]\n };\n return content;\n}\n\n/**\n * Update video call (VC) entity with the new status and duration.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - VC document to update.\n * @param {object} params - new video call parameters.\n * @param {string} params.state - state of video call.\n * @param {number} params.duration - duration of the video call in milliseconds.\n *\n * @returns the same document with update applied.\n */\nDrafty.updateVideoCall = function(content, params) {\n // The video element could be just a format or a format + entity.\n // Must ensure it's the latter first.\n const fmt = ((content || {}).fmt || [])[0];\n if (!fmt) {\n // Unrecognized content.\n return content;\n }\n\n let ent;\n if (fmt.tp == 'VC') {\n // Just a format, convert to format + entity.\n delete fmt.tp;\n fmt.key = 0;\n ent = {\n tp: 'VC'\n };\n content.ent = [ent];\n } else {\n ent = (content.ent || [])[fmt.key | 0];\n if (!ent || ent.tp != 'VC') {\n // Not a VC entity.\n return content;\n }\n }\n ent.data = ent.data || {};\n Object.assign(ent.data, params);\n return content;\n}\n\n/**\n * Create a quote to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} header - Quote header (title, etc.).\n * @param {string} uid - UID of the author to mention.\n * @param {Drafty} body - Body of the quoted message.\n *\n * @returns Reply quote Drafty doc with the quote formatting.\n */\nDrafty.quote = function(header, uid, body) {\n const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n\n // Wrap into a quote.\n quote.fmt.push({\n at: 0,\n len: stringToGraphemes(quote.txt).length,\n tp: 'QQ'\n });\n\n return quote;\n}\n\n/**\n * Create a Drafty document with a mention.\n *\n * @param {string} name - mentioned name.\n * @param {string} uid - mentioned user ID.\n *\n * @returns {Drafty} document with the mention.\n */\nDrafty.mention = function(name, uid) {\n return {\n txt: name || '',\n fmt: [{\n at: 0,\n len: stringToGraphemes(name || '').length,\n key: 0\n }],\n ent: [{\n tp: 'MN',\n data: {\n val: uid\n }\n }]\n };\n}\n\n/**\n * Append a link to a Drafty document.\n *\n * @param {Drafty} content - Drafty document to append link to.\n * @param {Object} linkData - Link info in format {txt: 'ankor text', url: 'http://...'}.\n *\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLink = function(content, linkData) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: content.txt.length,\n len: linkData.txt.length,\n key: content.ent.length\n });\n content.txt += linkData.txt;\n\n const ex = {\n tp: 'LN',\n data: {\n url: linkData.url\n }\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Append image to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {ImageDesc} imageDesc - object with image paramenets.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendImage = function(content, imageDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n}\n\n/**\n * Append audio recodring to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add recording to.\n * @param {AudioDesc} audioDesc - object with audio data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendAudio = function(content, audioDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n}\n\n/**\n * Description of a file to attach.\n * @typedef {Object} AttachmentDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the attachment, e.g. \"application/octet-stream\"\n * @property {string} data - base64-encoded in-band content of small attachments. Could be null/undefined.\n * @property {string} filename - file name suggestion for downloading the attachment.\n * @property {integer} size - size of the file in bytes. Treat is as an untrusted hint.\n * @property {string} refurl - reference to the out-of-band content. Could be null/undefined.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Attach file to Drafty content. Either as a blob or as a reference.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to attach file to.\n * @param {AttachmentDesc} object - containing attachment description and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.attachFile = function(content, attachmentDesc) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'EX',\n data: {\n mime: attachmentDesc.mime,\n val: attachmentDesc.data,\n name: attachmentDesc.filename,\n ref: attachmentDesc.refurl,\n size: attachmentDesc.size | 0\n }\n }\n if (attachmentDesc.urlPromise) {\n ex.data._processing = true;\n attachmentDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n /* catch the error, otherwise it will appear in the console. */\n ex.data._processing = undefined;\n }\n );\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Wraps drafty document into a simple formatting style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - document or string to wrap into a style.\n * @param {string} style - two-letter style to wrap into.\n * @param {number} at - index where the style starts, default 0.\n * @param {number} len - length of the form content, default all of it.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapInto = function(content, style, at, len) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at || 0,\n len: len || content.txt.length,\n tp: style,\n });\n\n return content;\n}\n\n/**\n * Wraps content into an interactive form.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - to wrap into a form.\n * @param {number} at - index where the forms starts.\n * @param {number} len - length of the form content.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapAsForm = function(content, at, len) {\n return Drafty.wrapInto(content, 'FM', at, len);\n}\n\n/**\n * Insert clickable button into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {number} at - location where the button is inserted.\n * @param {number} len - the length of the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertButton = function(content, at, len, name, actionType, actionValue, refUrl) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n\n if (!content || !content.txt || content.txt.length < at + len) {\n return null;\n }\n\n if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n return null;\n }\n // Ensure refUrl is a string.\n if (actionType == 'url' && !refUrl) {\n return null;\n }\n refUrl = '' + refUrl;\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: len,\n key: content.ent.length\n });\n content.ent.push({\n tp: 'BN',\n data: {\n act: actionType,\n val: actionValue,\n ref: refUrl,\n name: name\n }\n });\n\n return content;\n}\n\n/**\n * Append clickable button to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {string} title - the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendButton = function(content, title, name, actionType, actionValue, refUrl) {\n content = content || {\n txt: ''\n };\n const at = content.txt.length;\n content.txt += title;\n return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n}\n\n/**\n * Attach a generic JS object. The object is attached as a json string.\n * Intended for representing a form response.\n *\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to attach file to.\n * @param {Object} data - data to convert to json string and attach.\n * @returns {Drafty} the same document as content.\n */\nDrafty.attachJSON = function(content, data) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n content.ent.push({\n tp: 'EX',\n data: {\n mime: JSON_MIME_TYPE,\n val: data\n }\n });\n\n return content;\n}\n/**\n * Append line break to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append linebreak to.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLineBreak = function(content) {\n content = content || {\n txt: ''\n };\n content.fmt = content.fmt || [];\n content.fmt.push({\n at: stringToGraphemes(content.txt).length,\n len: 1,\n tp: 'BR'\n });\n content.txt += ' ';\n\n return content;\n}\n/**\n * Given Drafty document, convert it to HTML.\n * No attempt is made to strip pre-existing html markup.\n * This is potentially unsafe because content.txt may contain malicious HTML\n * markup.\n * @memberof Tinode.Drafty\n * @static\n *\n * @param {Drafty} doc - document to convert.\n *\n * @returns {string} HTML-representation of content.\n */\nDrafty.UNSAFE_toHTML = function(doc) {\n const tree = draftyToTree(doc);\n const htmlFormatter = function(type, data, values) {\n const tag = DECORATORS[type];\n let result = values ? values.join('') : '';\n if (tag) {\n result = tag.open(data) + result + tag.close(data);\n }\n return result;\n };\n return treeBottomUp(tree, htmlFormatter, 0);\n}\n\n/**\n * Callback for applying custom formatting to a Drafty document.\n * Called once for each style span.\n * @memberof Drafty\n * @static\n *\n * @callback Formatter\n * @param {string} style - style code such as \"ST\" or \"IM\".\n * @param {Object} data - entity's data.\n * @param {Object} values - possibly styled subspans contained in this style span.\n * @param {number} index - index of the element guaranteed to be unique.\n */\n\n/**\n * Convert Drafty document to a representation suitable for display.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|Object} content - Drafty document to transform.\n * @param {Formatter} formatter - callback which formats individual elements.\n * @param {Object} context - context provided to formatter as this.\n *\n * @return {Object} transformed object\n */\nDrafty.format = function(original, formatter, context) {\n return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n}\n\n/**\n * Shorten Drafty document making the drafty text no longer than the limit.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characrets to shorten to.\n * @param {boolean} light - remove heavy data from entities.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.shorten = function(original, limit, light) {\n let tree = draftyToTree(original);\n tree = shortenTree(tree, limit, '…');\n if (tree && light) {\n tree = lightEntity(tree);\n }\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Transform Drafty doc for forwarding: strip leading @mention and any leading line breaks or whitespace.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.forwardedContent = function(original) {\n let tree = draftyToTree(original);\n const rmMention = function(node) {\n if (node.type == 'MN') {\n if (!node.parent || !node.parent.type) {\n return null;\n }\n }\n return node;\n }\n // Strip leading mention.\n tree = treeTopDown(tree, rmMention);\n // Remove leading whitespace.\n tree = lTrim(tree);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Prepare Drafty doc for wrapping into QQ as a reply:\n * - Replace forwarding mention with symbol '➦' and remove data (UID).\n * - Remove quoted text completely.\n * - Replace line breaks with spaces.\n * - Strip entities of heavy content.\n * - Move attachments to the end of the document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.replyContent = function(original, limit) {\n const convMNnQQnBR = function(node) {\n if (node.type == 'QQ') {\n return null;\n } else if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n delete node.data;\n }\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.type;\n delete node.children;\n }\n return node;\n }\n\n let tree = draftyToTree(original);\n if (!tree) {\n return original;\n }\n\n // Strip leading mention.\n tree = treeTopDown(tree, convMNnQQnBR);\n // Move attachments to the end of the doc.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n // Shorten the doc.\n tree = shortenTree(tree, limit, '…');\n // Strip heavy elements except IM.data['val'] and VD.data['preview'] (have to keep them to generate previews later).\n const filter = node => {\n switch (node.type) {\n case 'IM':\n return ['val'];\n case 'VD':\n return ['preview'];\n }\n return null;\n };\n tree = lightEntity(tree, filter);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n\n/**\n * Generate drafty preview:\n * - Shorten the document.\n * - Strip all heavy entity data leaving just inline styles and entity references.\n * - Replace line breaks with spaces.\n * - Replace content of QQ with a space.\n * - Replace forwarding mention with symbol '➦'.\n * move all attachments to the end of the document and make them visible.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @param {boolean} forwarding - this a forwarding message preview.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.preview = function(original, limit, forwarding) {\n let tree = draftyToTree(original);\n\n // Move attachments to the end.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n\n // Convert leading mention to '➦' and replace QQ and BR with a space ' '.\n const convMNnQQnBR = function(node) {\n if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n }\n } else if (node.type == 'QQ') {\n node.text = ' ';\n delete node.children;\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.children;\n delete node.type;\n }\n return node;\n }\n tree = treeTopDown(tree, convMNnQQnBR);\n\n tree = shortenTree(tree, limit, '…');\n if (forwarding) {\n // Keep some IM and VD data for preview.\n const filter = {\n IM: ['val'],\n VD: ['preview']\n };\n tree = lightEntity(tree, node => {\n return filter[node.type];\n });\n } else {\n tree = lightEntity(tree);\n }\n\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Given Drafty document, convert it to plain text.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text.\n * @returns {string} plain-text representation of the drafty document.\n */\nDrafty.toPlainText = function(content) {\n return typeof content == 'string' ? content : content.txt;\n}\n\n/**\n * Check if the document has no markup and no entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for presence of markup.\n * @returns true is content is plain text, false otherwise.\n */\nDrafty.isPlainText = function(content) {\n return typeof content == 'string' || !(content.fmt || content.ent);\n}\n\n/**\n * Convert document to plain text with markdown. All elements which cannot\n * be represented in markdown are stripped.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text with markdown.\n */\nDrafty.toMarkdown = function(content) {\n let tree = draftyToTree(content);\n const mdFormatter = function(type, _, values) {\n const def = FORMAT_TAGS[type];\n let result = (values ? values.join('') : '');\n if (def) {\n if (def.isVoid) {\n result = def.md_tag || '';\n } else if (def.md_tag) {\n result = def.md_tag + result + def.md_tag;\n }\n }\n return result;\n };\n return treeBottomUp(tree, mdFormatter, 0);\n}\n\n/**\n * Checks if the object represets is a valid Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for validity.\n * @returns true is content is valid, false otherwise.\n */\nDrafty.isValid = function(content) {\n if (!content) {\n return false;\n }\n\n const {\n txt,\n fmt,\n ent\n } = content;\n\n if (!txt && txt !== '' && !fmt && !ent) {\n return false;\n }\n\n const txt_type = typeof txt;\n if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n return false;\n }\n\n if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n return false;\n }\n\n if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if the drafty document has attachments: style EX and outside of normal rendering flow,\n * i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for attachments.\n * @returns true if there are attachments.\n */\nDrafty.hasAttachments = function(content) {\n if (!Array.isArray(content.fmt)) {\n return false;\n }\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n return ent && ent.tp == 'EX' && ent.data;\n }\n }\n return false;\n}\n\n/**\n * Callback for enumerating entities in a Drafty document.\n * Called once for each entity.\n * @memberof Drafty\n * @static\n *\n * @callback EntityCallback\n * @param {Object} data entity data.\n * @param {string} entity type.\n * @param {number} index entity's index in `content.ent`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate attachments: style EX and outside of normal rendering flow, i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to process for attachments.\n * @param {EntityCallback} callback - callback to call for each attachment.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.attachments = function(content, callback, context) {\n if (!Array.isArray(content.fmt)) {\n return;\n }\n let count = 0;\n for (let i in content.fmt) {\n let fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n if (ent && ent.tp == 'EX' && ent.data) {\n if (callback.call(context, ent.data, count++, 'EX')) {\n break;\n }\n }\n }\n };\n}\n\n/**\n * Check if the drafty document has entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for entities.\n * @returns true if there are entities.\n */\nDrafty.hasEntities = function(content) {\n return content.ent && content.ent.length > 0;\n}\n\n/**\n * Enumerate entities. Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @param {EntityCallback} callback - callback to call for each entity.\n * @param {Object} context - value of \"this\" for callback.\n *\n */\nDrafty.entities = function(content, callback, context) {\n if (content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n if (content.ent[i]) {\n if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Callback for enumerating styles (inline formats) in a Drafty document.\n * Called once for each style.\n * @memberof Drafty\n * @static\n *\n * @callback StyleCallback\n * @param {string} tp - format type.\n * @param {number} at - starting position of the format in text.\n * @param {number} len - extent of the format in characters.\n * @param {number} key - index of the entity if format is a reference.\n * @param {number} index - style's index in `content.fmt`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate styles (inline formats). Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with styles (formats) to enumerate.\n * @param {StyleCallback} callback - callback to call for each format.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.styles = function(content, callback, context) {\n if (content.fmt && content.fmt.length > 0) {\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt) {\n if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Remove unrecognized fields from entity data\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @returns content.\n */\nDrafty.sanitizeEntities = function(content) {\n if (content && content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n const ent = content.ent[i];\n if (ent && ent.data) {\n const data = copyEntData(ent.data);\n if (data) {\n content.ent[i].data = data;\n } else {\n delete content.ent[i].data;\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Given the entity, get URL which can be used for downloading\n * entity data.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the URl from.\n * @returns {string} URL to download entity data or null.\n */\nDrafty.getDownloadUrl = function(entData) {\n let url = null;\n if (entData.mime != JSON_MIME_TYPE && entData.val) {\n url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n } else if (typeof entData.ref == 'string') {\n url = entData.ref;\n }\n return url;\n}\n\n/**\n * Check if the entity data is not ready for sending, such as being uploaded to the server.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n * @returns {boolean} true if upload is in progress, false otherwise.\n */\nDrafty.isProcessing = function(entData) {\n return !!entData._processing;\n}\n\n/**\n * Given the entity, get URL which can be used for previewing\n * the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n *\n * @returns {string} url for previewing or null if no such url is available.\n */\nDrafty.getPreviewUrl = function(entData) {\n return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n}\n\n/**\n * Get approximate size of the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the size for.\n * @returns {number} size of entity data in bytes.\n */\nDrafty.getEntitySize = function(entData) {\n // Either size hint or length of value. The value is base64 encoded,\n // the actual object size is smaller than the encoded length.\n return entData.size ? entData.size : entData.val ? (entData.val.length * 0.75) | 0 : 0;\n}\n\n/**\n * Get entity mime type.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the type for.\n * @returns {string} mime type of entity.\n */\nDrafty.getEntityMimeType = function(entData) {\n return entData.mime || 'text/plain';\n}\n\n/**\n * Get HTML tag for a given two-letter style name.\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style, like ST or LN.\n *\n * @returns {string} HTML tag name if style is found, {code: undefined} if style is falsish or not found.\n */\nDrafty.tagName = function(style) {\n return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n}\n\n/**\n * For a given data bundle generate an object with HTML attributes,\n * for instance, given {url: \"http://www.example.com/\"} return\n * {href: \"http://www.example.com/\"}\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style to generate attributes for.\n * @param {Object} data - data bundle to convert to attributes\n *\n * @returns {Object} object with HTML attributes.\n */\nDrafty.attrValue = function(style, data) {\n if (data && DECORATORS[style] && DECORATORS[style].props) {\n return DECORATORS[style].props(data);\n }\n\n return undefined;\n}\n\n/**\n * Drafty MIME type.\n * @memberof Drafty\n * @static\n *\n * @returns {string} content-Type \"text/x-drafty\".\n */\nDrafty.getContentType = function() {\n return DRAFTY_MIME_TYPE;\n}\n\n// =================\n// Utility methods.\n// =================\n\n// Take a string and defined earlier style spans, re-compose them into a tree where each leaf is\n// a same-style (including unstyled) string. I.e. 'hello *bold _italic_* and ~more~ world' ->\n// ('hello ', (b: 'bold ', (i: 'italic')), ' and ', (s: 'more'), ' world');\n//\n// This is needed in order to clear markup, i.e. 'hello *world*' -> 'hello world' and convert\n// ranges from markup-ed offsets to plain text offsets.\nfunction chunkify(line, start, end, spans) {\n const chunks = [];\n\n if (spans.length == 0) {\n return [];\n }\n\n for (let i in spans) {\n // Get the next chunk from the queue\n const span = spans[i];\n\n // Grab the initial unstyled chunk\n if (span.at > start) {\n chunks.push({\n txt: line.slice(start, span.at)\n });\n }\n\n // Grab the styled chunk. It may include subchunks.\n const chunk = {\n tp: span.tp\n };\n const chld = chunkify(line, span.at + 1, span.end, span.children);\n if (chld.length > 0) {\n chunk.children = chld;\n } else {\n chunk.txt = span.txt;\n }\n chunks.push(chunk);\n start = span.end + 1; // '+1' is to skip the formatting character\n }\n\n // Grab the remaining unstyled chunk, after the last span\n if (start < end) {\n chunks.push({\n txt: line.slice(start, end)\n });\n }\n\n return chunks;\n}\n\n// Detect starts and ends of formatting spans. Unformatted spans are\n// ignored at this stage.\nfunction spannify(original, re_start, re_end, type) {\n const result = [];\n let index = 0;\n let line = original.slice(0); // make a copy;\n\n while (line.length > 0) {\n // match[0]; // match, like '*abc*'\n // match[1]; // match captured in parenthesis, like 'abc'\n // match['index']; // offset where the match started.\n\n // Find the opening token.\n const start = re_start.exec(line);\n if (start == null) {\n break;\n }\n\n // Because javascript RegExp does not support lookbehind, the actual offset may not point\n // at the markup character. Find it in the matched string.\n let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n // Clip the processed part of the string.\n line = line.slice(start_offset + 1);\n // start_offset is an offset within the clipped string. Convert to original index.\n start_offset += index;\n // Index now point to the beginning of 'line' within the 'original' string.\n index = start_offset + 1;\n\n // Find the matching closing token.\n const end = re_end ? re_end.exec(line) : null;\n if (end == null) {\n break;\n }\n let end_offset = end['index'] + end[0].indexOf(end[1]);\n // Clip the processed part of the string.\n line = line.slice(end_offset + 1);\n // Update offsets\n end_offset += index;\n // Index now points to the beginning of 'line' within the 'original' string.\n index = end_offset + 1;\n\n result.push({\n txt: original.slice(start_offset + 1, end_offset),\n children: [],\n at: start_offset,\n end: end_offset,\n tp: type\n });\n }\n\n return result;\n}\n\n// Convert linear array or spans into a tree representation.\n// Keep standalone and nested spans, throw away partially overlapping spans.\nfunction toSpanTree(spans) {\n if (spans.length == 0) {\n return [];\n }\n\n const tree = [spans[0]];\n let last = spans[0];\n for (let i = 1; i < spans.length; i++) {\n // Keep spans which start after the end of the previous span or those which\n // are complete within the previous span.\n if (spans[i].at > last.end) {\n // Span is completely outside of the previous span.\n tree.push(spans[i]);\n last = spans[i];\n } else if (spans[i].end <= last.end) {\n // Span is fully inside of the previous span. Push to subnode.\n last.children.push(spans[i]);\n }\n // Span could partially overlap, ignoring it as invalid.\n }\n\n // Recursively rearrange the subnodes.\n for (let i in tree) {\n tree[i].children = toSpanTree(tree[i].children);\n }\n\n return tree;\n}\n\n// Convert drafty document to a tree.\nfunction draftyToTree(doc) {\n if (!doc) {\n return null;\n }\n\n doc = (typeof doc == 'string') ? {\n txt: doc\n } : doc;\n let {\n txt,\n fmt,\n ent\n } = doc;\n\n txt = txt || '';\n if (!Array.isArray(ent)) {\n ent = [];\n }\n\n if (!Array.isArray(fmt) || fmt.length == 0) {\n if (ent.length == 0) {\n return {\n text: txt\n };\n }\n\n // Handle special case when all values in fmt are 0 and fmt therefore is skipped.\n fmt = [{\n at: 0,\n len: 0,\n key: 0\n }];\n }\n\n // Sanitize spans.\n const spans = [];\n const attachments = [];\n fmt.forEach((span) => {\n if (!span || typeof span != 'object') {\n return;\n }\n\n if (!['undefined', 'number'].includes(typeof span.at)) {\n // Present, but non-numeric 'at'.\n return;\n }\n if (!['undefined', 'number'].includes(typeof span.len)) {\n // Present, but non-numeric 'len'.\n return;\n }\n let at = span.at | 0;\n let len = span.len | 0;\n if (len < 0) {\n // Invalid span length.\n return;\n }\n\n let key = span.key || 0;\n if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n // Invalid key value.\n return;\n }\n\n if (at <= -1) {\n // Attachment. Store attachments separately.\n attachments.push({\n start: -1,\n end: 0,\n key: key\n });\n return;\n } else if (at + len > stringToGraphemes(txt).length) {\n // Span is out of bounds.\n return;\n }\n\n if (!span.tp) {\n if (ent.length > 0 && (typeof ent[key] == 'object')) {\n spans.push({\n start: at,\n end: at + len,\n key: key\n });\n }\n } else {\n spans.push({\n type: span.tp,\n start: at,\n end: at + len\n });\n }\n });\n\n // Sort spans first by start index (asc) then by length (desc), then by weight.\n spans.sort((a, b) => {\n let diff = a.start - b.start;\n if (diff != 0) {\n return diff;\n }\n diff = b.end - a.end;\n if (diff != 0) {\n return diff;\n }\n return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n });\n\n // Move attachments to the end of the list.\n if (attachments.length > 0) {\n spans.push(...attachments);\n }\n\n spans.forEach((span) => {\n if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n span.type = ent[span.key].tp;\n span.data = ent[span.key].data;\n }\n\n // Is type still undefined? Hide the invalid element!\n if (!span.type) {\n span.type = 'HD';\n }\n });\n\n const graphemes = stringToGraphemes(txt);\n let tree = spansToTree({}, graphemes, 0, graphemes.length, spans);\n\n // Flatten tree nodes.\n const flatten = function(node) {\n if (Array.isArray(node.children) && node.children.length == 1) {\n // Unwrap.\n const child = node.children[0];\n if (!node.type) {\n const parent = node.parent;\n node = child;\n node.parent = parent;\n } else if (!child.type && !child.children) {\n node.text = child.text;\n delete node.children;\n }\n }\n return node;\n }\n tree = treeTopDown(tree, flatten);\n\n return tree;\n}\n\n// Add tree node to a parent tree.\nfunction addNode(parent, n) {\n if (!n) {\n return parent;\n }\n\n if (!parent.children) {\n parent.children = [];\n }\n\n // If text is present, move it to a subnode.\n if (parent.text) {\n parent.children.push({\n text: parent.text,\n parent: parent\n });\n delete parent.text;\n }\n\n n.parent = parent;\n parent.children.push(n);\n\n return parent;\n}\n\n// Returns a tree of nodes.\nfunction spansToTree(parent, graphemes, start, end, spans) {\n if (!spans || spans.length == 0) {\n if (start < end) {\n addNode(parent, {\n text: graphemes.slice(start, end)\n .map(segment => segment.segment)\n .join('')\n });\n }\n return parent;\n }\n\n // Process subspans.\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n if (span.start < 0 && span.type == 'EX') {\n addNode(parent, {\n type: span.type,\n data: span.data,\n key: span.key,\n att: true\n });\n continue;\n }\n\n // Add un-styled range before the styled span starts.\n if (start < span.start) {\n addNode(parent, {\n text: graphemes.slice(start, span.start)\n .map(segment => segment.segment)\n .join('')\n });\n start = span.start;\n }\n\n // Get all spans which are within the current span.\n const subspans = [];\n while (i < spans.length - 1) {\n const inner = spans[i + 1];\n if (inner.start < 0) {\n // Attachments are in the end. Stop.\n break;\n } else if (inner.start < span.end) {\n if (inner.end <= span.end) {\n const tag = FORMAT_TAGS[inner.tp] || {};\n if (inner.start < inner.end || tag.isVoid) {\n // Valid subspan: completely within the current span and\n // either non-zero length or zero length is acceptable.\n subspans.push(inner);\n }\n }\n i++;\n // Overlapping subspans are ignored.\n } else {\n // Past the end of the current span. Stop.\n break;\n }\n }\n\n addNode(parent, spansToTree({\n type: span.type,\n data: span.data,\n key: span.key\n }, graphemes, start, span.end, subspans));\n start = span.end;\n }\n\n // Add the last unformatted range.\n if (start < end) {\n addNode(parent, {\n text: graphemes\n .slice(start, end)\n .map((segment) => segment.segment)\n .join('')\n });\n }\n\n return parent;\n}\n\n// Append a tree to a Drafty doc.\nfunction treeToDrafty(doc, tree, keymap) {\n if (!tree) {\n return doc;\n }\n\n doc.txt = doc.txt || '';\n\n // Checkpoint to measure length of the current tree node.\n const start = stringToGraphemes(doc.txt).length;\n\n if (tree.text) {\n doc.txt += tree.text;\n } else if (Array.isArray(tree.children)) {\n tree.children.forEach((c) => {\n treeToDrafty(doc, c, keymap);\n });\n }\n\n if (tree.type) {\n const len = stringToGraphemes(doc.txt).length - start;\n doc.fmt = doc.fmt || [];\n if (Object.keys(tree.data || {}).length > 0) {\n doc.ent = doc.ent || [];\n const newKey = (typeof keymap[tree.key] == 'undefined') ? doc.ent.length : keymap[tree.key];\n keymap[tree.key] = newKey;\n doc.ent[newKey] = {\n tp: tree.type,\n data: tree.data\n };\n if (tree.att) {\n // Attachment.\n doc.fmt.push({\n at: -1,\n len: 0,\n key: newKey\n });\n } else {\n doc.fmt.push({\n at: start,\n len: len,\n key: newKey\n });\n }\n } else {\n doc.fmt.push({\n tp: tree.type,\n at: start,\n len: len\n });\n }\n }\n return doc;\n}\n\n// Traverse the tree top down transforming the nodes: apply transformer to every tree node.\nfunction treeTopDown(src, transformer, context) {\n if (!src) {\n return null;\n }\n\n let dst = transformer.call(context, src);\n if (!dst || !dst.children) {\n return dst;\n }\n\n const children = [];\n for (let i in dst.children) {\n let n = dst.children[i];\n if (n) {\n n = treeTopDown(n, transformer, context);\n if (n) {\n children.push(n);\n }\n }\n }\n\n if (children.length == 0) {\n dst.children = null;\n } else {\n dst.children = children;\n }\n\n return dst;\n}\n\n// Traverse the tree bottom-up: apply formatter to every node.\n// The formatter must maintain its state through context.\nfunction treeBottomUp(src, formatter, index, stack, context) {\n if (!src) {\n return null;\n }\n\n if (stack && src.type) {\n stack.push(src.type);\n }\n\n let values = [];\n for (let i in src.children) {\n const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n if (n) {\n values.push(n);\n }\n }\n if (values.length == 0) {\n if (src.text) {\n values = [src.text];\n } else {\n values = null;\n }\n }\n\n if (stack && src.type) {\n stack.pop();\n }\n\n return formatter.call(context, src.type, src.data, values, index, stack);\n}\n\n// Clip tree to the provided limit.\nfunction shortenTree(tree, limit, tail) {\n if (!tree) {\n return null;\n }\n\n if (tail) {\n limit -= tail.length;\n }\n\n const shortener = function(node) {\n if (limit <= -1) {\n // Limit -1 means the doc was already clipped.\n return null;\n }\n\n if (node.att) {\n // Attachments are unchanged.\n return node;\n }\n if (limit == 0) {\n node.text = tail;\n limit = -1;\n } else if (node.text) {\n const graphemes = stringToGraphemes(node.text);\n if (graphemes.length > limit) {\n node.text = graphemes\n .slice(0, limit)\n .map((segment) => segment.segment)\n .join('') + tail;\n limit = -1;\n } else {\n limit -= graphemes.length;\n }\n }\n return node;\n }\n\n return treeTopDown(tree, shortener);\n}\n\n// Strip heavy entities from a tree.\nfunction lightEntity(tree, allow) {\n const lightCopy = node => {\n const data = copyEntData(node.data, true, allow ? allow(node) : null);\n if (data) {\n node.data = data;\n } else {\n delete node.data;\n }\n return node;\n }\n return treeTopDown(tree, lightCopy);\n}\n\n// Remove spaces and breaks on the left.\nfunction lTrim(tree) {\n if (tree.type == 'BR') {\n tree = null;\n } else if (tree.text) {\n if (!tree.type) {\n tree.text = tree.text.trimStart();\n if (!tree.text) {\n tree = null;\n }\n }\n } else if (!tree.type && tree.children && tree.children.length > 0) {\n const c = lTrim(tree.children[0]);\n if (c) {\n tree.children[0] = c;\n } else {\n tree.children.shift();\n if (!tree.type && tree.children.length == 0) {\n tree = null;\n }\n }\n }\n return tree;\n}\n\n// Move attachments to the end. Attachments must be at the top level, no need to traverse the tree.\nfunction attachmentsToEnd(tree, limit) {\n if (!tree) {\n return null;\n }\n\n if (tree.att) {\n tree.text = ' ';\n delete tree.att;\n delete tree.children;\n } else if (tree.children) {\n const attachments = [];\n const children = [];\n for (let i in tree.children) {\n const c = tree.children[i];\n if (c.att) {\n if (attachments.length == limit) {\n // Too many attachments to preview;\n continue;\n }\n if (c.data['mime'] == JSON_MIME_TYPE) {\n // JSON attachments are not shown in preview.\n continue;\n }\n\n delete c.att;\n delete c.children;\n c.text = ' ';\n attachments.push(c);\n } else {\n children.push(c);\n }\n }\n tree.children = children.concat(attachments);\n }\n return tree;\n}\n\n// Get a list of entities from a text.\nfunction extractEntities(line) {\n let match;\n let extracted = [];\n ENTITY_TYPES.forEach((entity) => {\n while ((match = entity.re.exec(line)) !== null) {\n extracted.push({\n offset: match['index'],\n len: match[0].length,\n unique: match[0],\n data: entity.pack(match[0]),\n type: entity.name\n });\n }\n });\n\n if (extracted.length == 0) {\n return extracted;\n }\n\n // Remove entities detected inside other entities, like #hashtag in a URL.\n extracted.sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let idx = -1;\n extracted = extracted.filter((el) => {\n const result = (el.offset > idx);\n idx = el.offset + el.len;\n return result;\n });\n\n return extracted;\n}\n\n// Convert the chunks into format suitable for serialization.\nfunction draftify(chunks, startAt) {\n let plain = '';\n let ranges = [];\n for (let i in chunks) {\n const chunk = chunks[i];\n if (!chunk.txt) {\n const drafty = draftify(chunk.children, plain.length + startAt);\n chunk.txt = drafty.txt;\n ranges = ranges.concat(drafty.fmt);\n }\n\n if (chunk.tp) {\n ranges.push({\n at: plain.length + startAt,\n len: chunk.txt.length,\n tp: chunk.tp\n });\n }\n\n plain += chunk.txt;\n }\n return {\n txt: plain,\n fmt: ranges\n };\n}\n\n// Create a copy of entity data with (light=false) or without (light=true) the large payload.\n// The array 'allow' contains a list of fields exempt from stripping.\nfunction copyEntData(data, light, allow) {\n if (data && Object.entries(data).length > 0) {\n allow = allow || [];\n const dc = {};\n ALLOWED_ENT_FIELDS.forEach(key => {\n if (data[key]) {\n if (light && !allow.includes(key) &&\n (typeof data[key] == 'string' || Array.isArray(data[key])) &&\n data[key].length > MAX_PREVIEW_DATA_SIZE) {\n return;\n }\n if (typeof data[key] == 'object') {\n return;\n }\n dc[key] = data[key];\n }\n });\n\n if (Object.entries(dc).length != 0) {\n return dc;\n }\n }\n return null;\n}\n\n// Returns true if object is empty, if undefined returns true\nfunction isEmptyObject(obj) {\n return Object.keys(obj ?? {}).length == 0;\n};\n\n\n// Returns an array (of length equal to the length of the original string) such that each index\n// denotes the position of char in string in a grapheme array (created from that string)\n// Eg: string: \"Hi👋🏼Hi\" -> [0,1,2,2,2,2,3,4]\nfunction graphemeIndices(graphemes) {\n const result = [];\n let graphemeIndex = 0;\n let charIndex = 0;\n\n // Iterate over the grapheme clusters.\n for (const {\n segment\n }\n of graphemes) {\n // Map the character indices to the grapheme index.\n for (let i = 0; i < segment.length; i++) {\n result[charIndex + i] = graphemeIndex;\n }\n\n // Increment the character index by the length of the grapheme cluster.\n charIndex += segment.length;\n\n // Increment the grapheme index.\n graphemeIndex++;\n }\n\n return result;\n}\n\n// Convert fmt.at and fmt.len from character-expressed index and length to grapheme-expressed\n// index and length.\nfunction toGraphemeValues(fmt, segments, txt) {\n segments = segments ?? segmenter.segment(txt);\n\n const indices = graphemeIndices(segments);\n\n const correctAt = indices[fmt.at];\n const correctLen = fmt.at + fmt.len <= txt.length ?\n indices[fmt.at + fmt.len - 1] - correctAt : fmt.len;\n\n return {\n at: correctAt,\n len: correctLen + 1\n };\n}\n\n// Convert string to graphme cluster array.\nfunction stringToGraphemes(str) {\n return Array.from(segmenter.segment(str));\n}\n\nif (typeof module != 'undefined') {\n module.exports = Drafty;\n}\n","/**\n * @file Definition of 'fnd' topic.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport * as Const from './config.js';\nimport Topic from './topic.js';\nimport {\n mergeToCache\n} from './utils.js';\n\n\n/**\n * Special case of {@link Tinode.Topic} for searching for contacts and group topics\n * @extends Tinode.Topic\n *\n */\nexport default class TopicFnd extends Topic {\n // List of users and topics uid or topic_name -> Contact object)\n _contacts = {};\n\n /**\n * Create TopicFnd.\n *\n * @param {TopicFnd.Callbacks} callbacks - Callbacks to receive various events.\n */\n constructor(callbacks) {\n super(Const.TOPIC_FND, callbacks);\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = Object.getOwnPropertyNames(this._contacts).length;\n // Reset contact list.\n this._contacts = {};\n for (let idx in subs) {\n let sub = subs[idx];\n const indexBy = sub.topic ? sub.topic : sub.user;\n\n sub = mergeToCache(this._contacts, indexBy, sub);\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(sub);\n }\n }\n\n if (updateCount > 0 && this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._contacts));\n }\n }\n\n /**\n * Publishing to TopicFnd is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicFnd#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"));\n }\n\n /**\n * setMeta to TopicFnd resets contact list in addition to sending the message.\n * @memberof Tinode.TopicFnd#\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {\n if (Object.keys(this._contacts).length > 0) {\n this._contacts = {};\n if (this.onSubsUpdated) {\n this.onSubsUpdated([]);\n }\n }\n });\n }\n\n /**\n * Check if the given tag is unique by asking the server.\n * @param tag tag to check.\n * @return promise to be resolved with true if the tag is unique, false otherwise.\n */\n checkTagUniqueness(tag, caller) {\n return new Promise((resolve, reject) => {\n this.subscribe()\n .then(_ => this.setMeta({\n desc: {\n public: tag\n }\n }))\n .then(_ => this.getMeta(this.startMetaQuery().withTags().build()))\n .then(meta => {\n if (!meta || !Array.isArray(meta.tags) || meta.tags.length == 0) {\n resolve(true);\n }\n const tags = meta.tags.filter(t => t !== caller);\n resolve(tags.length == 0);\n })\n .catch(err => {\n reject(err);\n });\n });\n }\n\n /**\n * Iterate over found contacts. If callback is undefined, use {@link this.onMetaSub}.\n * @function\n * @memberof Tinode.TopicFnd#\n * @param {TopicFnd.ContactCallback} callback - Callback to call for each contact.\n * @param {Object} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._contacts) {\n cb.call(context, this._contacts[idx], idx, this._contacts);\n }\n }\n }\n}\n","/**\n * @file Utilities for uploading and downloading files.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n isUrlRelative,\n jsonParseHelper\n} from './utils.js';\n\nlet XHRProvider;\n\nfunction addURLParam(relUrl, key, value) {\n const url = new URL(relUrl, window.location.origin);\n url.searchParams.append(key, value);\n return url.toString().substring(window.location.origin.length);\n}\n\n/**\n * @class LargeFileHelper - utilities for uploading and downloading files out of band.\n * Don't instantiate this class directly. Use {Tinode.getLargeFileHelper} instead.\n * @memberof Tinode\n *\n * @param {Tinode} tinode - the main Tinode object.\n * @param {string} version - protocol version, i.e. '0'.\n */\nexport default class LargeFileHelper {\n constructor(tinode, version) {\n this._tinode = tinode;\n this._version = version;\n\n this._apiKey = tinode._apiKey;\n this._authToken = tinode.getAuthToken();\n\n // Ongoing requests.\n this.xhr = [];\n }\n\n /**\n * Start uploading the file to an endpoint at baseUrl.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} baseUrl base URL of upload server.\n * @param {File|Blob} data data to upload.\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n let url = `/v${this._version}/file/u/`;\n if (baseUrl) {\n let base = baseUrl;\n if (base.endsWith('/')) {\n // Removing trailing slash.\n base = base.slice(0, -1);\n }\n if (base.startsWith('http://') || base.startsWith('https://')) {\n url = base + url;\n } else {\n throw new Error(`Invalid base URL '${baseUrl}'`);\n }\n }\n\n const instance = this;\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n xhr.open('POST', url, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n if (this._authToken) {\n xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n }\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n xhr.upload.onprogress = e => {\n if (e.lengthComputable) {\n if (onProgress) {\n onProgress(e.loaded / e.total);\n }\n if (this.onProgress) {\n this.onProgress(e.loaded / e.total);\n }\n }\n };\n\n xhr.onload = function() {\n let pkt;\n try {\n pkt = JSON.parse(this.response, jsonParseHelper);\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n pkt = {\n ctrl: {\n code: this.status,\n text: this.statusText\n }\n };\n }\n\n if (this.status >= 200 && this.status < 300) {\n if (toResolve) {\n toResolve(pkt.ctrl.params.url);\n }\n if (onSuccess) {\n onSuccess(pkt.ctrl);\n }\n } else if (this.status >= 400) {\n if (toReject) {\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n }\n if (onFailure) {\n onFailure(pkt.ctrl);\n }\n } else {\n instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(e || new Error(\"failed\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n xhr.onabort = function(e) {\n if (toReject) {\n toReject(new Error(\"upload cancelled by user\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n try {\n const form = new FormData();\n form.append('file', data);\n form.set('id', this._tinode.getNextUniqueId());\n if (avatarFor) {\n form.set('topic', avatarFor);\n }\n xhr.send(form);\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onFailure) {\n onFailure(null);\n }\n }\n\n return result;\n }\n /**\n * Start uploading the file to default endpoint.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {File|Blob} data to upload\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n }\n /**\n * Download the file from a given URL using GET request. This method works with the Tinode server only.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} relativeUrl - URL to download the file from. Must be relative url, i.e. must not contain the host.\n * @param {string=} filename - file name to use for the downloaded file.\n *\n * @returns {Promise} resolved/rejected when the download is completed/failed.\n */\n download(relativeUrl, filename, mimetype, onProgress, onError) {\n if (!isUrlRelative(relativeUrl)) {\n // As a security measure refuse to download from an absolute URL.\n if (onError) {\n onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n }\n return;\n }\n if (!this._authToken) {\n if (onError) {\n onError(\"Must authenticate first\");\n }\n return;\n }\n const instance = this;\n\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n // Add '&asatt=1' to URL to request 'Content-Disposition: attachment' response header.\n relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n\n // Get data as blob (stored by the browser as a temporary file).\n xhr.open('GET', relativeUrl, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n xhr.responseType = 'blob';\n\n xhr.onprogress = function(e) {\n if (onProgress) {\n // Passing e.loaded instead of e.loaded/e.total because e.total\n // is always 0 with gzip compression enabled by the server.\n onProgress(e.loaded);\n }\n };\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n // The blob needs to be saved as file. There is no known way to\n // save the blob as file other than to fake a click on an .\n xhr.onload = function() {\n if (this.status == 200) {\n const link = document.createElement('a');\n // URL.createObjectURL is not available in non-browser environment. This call will fail.\n link.href = window.URL.createObjectURL(new Blob([this.response], {\n type: mimetype\n }));\n link.style.display = 'none';\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(link.href);\n if (toResolve) {\n toResolve();\n }\n } else if (this.status >= 400 && toReject) {\n // The this.responseText is undefined, must use this.response which is a blob.\n // Need to convert this.response to JSON. The blob can only be accessed by the\n // FileReader.\n const reader = new FileReader();\n reader.onload = function() {\n try {\n const pkt = JSON.parse(this.result, jsonParseHelper);\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n toReject(err);\n }\n };\n reader.readAsText(this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(new Error(\"failed\"));\n }\n if (onError) {\n onError(e);\n }\n };\n\n xhr.onabort = function() {\n if (toReject) {\n toReject(null);\n }\n };\n\n try {\n xhr.send();\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onError) {\n onError(err);\n }\n }\n\n return result;\n }\n /**\n * Try to cancel all ongoing uploads or downloads.\n * @memberof Tinode.LargeFileHelper#\n */\n cancel() {\n this.xhr.forEach(req => {\n if (req.readyState < 4) {\n req.abort();\n }\n });\n }\n /**\n * To use LargeFileHelper in a non browser context, supply XMLHttpRequest provider.\n * @static\n * @memberof LargeFileHelper\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProvider(xhrProvider) {\n XHRProvider = xhrProvider;\n }\n}\n","/**\n * @file Definition of 'me' topic.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport Topic from './topic.js';\nimport {\n mergeObj\n} from './utils.js';\n\n/**\n * @class TopicMe - special case of {@link Tinode.Topic} for\n * managing data of the current user, including contact list.\n * @extends Tinode.Topic\n * @memberof Tinode\n *\n * @param {TopicMe.Callbacks} callbacks - Callbacks to receive various events.\n */\nexport default class TopicMe extends Topic {\n onContactUpdate;\n\n constructor(callbacks) {\n super(Const.TOPIC_ME, callbacks);\n\n // me-specific callbacks\n if (callbacks) {\n this.onContactUpdate = callbacks.onContactUpdate;\n }\n }\n\n // Override the original Topic._processMetaDesc.\n _processMetaDesc(desc) {\n // Check if online contacts need to be turned off because P permission was removed.\n const turnOff = (desc.acs && !desc.acs.isPresencer()) && (this.acs && this.acs.isPresencer());\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n this._tinode._db.updTopic(this);\n // Update current user's record in the global cache.\n this._updateCachedUser(this._tinode._myUID, desc);\n\n // 'P' permission was removed. All topics are offline now.\n if (turnOff) {\n this._tinode.mapTopics((cont) => {\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n this._refreshContact('off', cont);\n }\n });\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = 0;\n subs.forEach((sub) => {\n const topicName = sub.topic;\n // Don't show 'me' and 'fnd' topics in the list of contacts.\n if (topicName == Const.TOPIC_FND || topicName == Const.TOPIC_ME) {\n return;\n }\n sub.online = !!sub.online;\n\n let cont = null;\n if (sub.deleted) {\n cont = sub;\n this._tinode.cacheRemTopic(topicName);\n this._tinode._db.remTopic(topicName);\n } else {\n // Ensure the values are defined and are integers.\n if (typeof sub.seq != 'undefined') {\n sub.seq = sub.seq | 0;\n sub.recv = sub.recv | 0;\n sub.read = sub.read | 0;\n sub.unread = sub.seq - sub.read;\n }\n\n const topic = this._tinode.getTopic(topicName);\n if (topic._new) {\n delete topic._new;\n }\n\n cont = mergeObj(topic, sub);\n this._tinode._db.updTopic(cont);\n\n if (Topic.isP2PTopicName(topicName)) {\n this._cachePutUser(topicName, cont);\n this._tinode._db.updUser(topicName, cont.public);\n }\n // Notify topic of the update if it's an external update.\n if (!sub._noForwarding && topic) {\n sub._noForwarding = true;\n topic._processMetaDesc(sub);\n }\n }\n\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(cont);\n }\n });\n\n if (this.onSubsUpdated && updateCount > 0) {\n const keys = [];\n subs.forEach((s) => {\n keys.push(s.topic);\n });\n this.onSubsUpdated(keys, updateCount);\n }\n }\n\n // Called by Tinode when meta.sub is recived.\n _processMetaCreds(creds, upd) {\n if (creds.length == 1 && creds[0] == Const.DEL_CHAR) {\n creds = [];\n }\n if (upd) {\n creds.forEach((cr) => {\n if (cr.val) {\n // Adding a credential.\n let idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && el.val == cr.val;\n });\n if (idx < 0) {\n // Not found.\n if (!cr.done) {\n // Unconfirmed credential replaces previous unconfirmed credential of the same method.\n idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n // Remove previous unconfirmed credential.\n this._credentials.splice(idx, 1);\n }\n }\n this._credentials.push(cr);\n } else {\n // Found. Maybe change 'done' status.\n this._credentials[idx].done = cr.done;\n }\n } else if (cr.resp) {\n // Handle credential confirmation.\n const idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n this._credentials[idx].done = true;\n }\n }\n });\n } else {\n this._credentials = creds;\n }\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n }\n\n // Process presence change message\n _routePres(pres) {\n if (pres.what == 'term') {\n // The 'me' topic itself is detached. Mark as unsubscribed.\n this._resetSub();\n return;\n }\n\n if (pres.what == 'upd' && pres.src == Const.TOPIC_ME) {\n // Update to me's description. Request updated value.\n this.getMeta(this.startMetaQuery().withDesc().build());\n return;\n }\n\n const cont = this._tinode.cacheGetTopic(pres.src);\n if (cont) {\n switch (pres.what) {\n case 'on': // topic came online\n cont.online = true;\n break;\n case 'off': // topic went offline\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n }\n break;\n case 'msg': // new message received\n cont._updateReceived(pres.seq, pres.act);\n break;\n case 'upd': // desc updated\n // Request updated subscription.\n this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());\n break;\n case 'acs': // access mode changed\n // If 'tgt' is not set then this is an update to the permissions of the current user.\n // Otherwise it's an update to group topic subscriber permissions while the topic is offline.\n // Just gnore it then.\n if (!pres.tgt) {\n if (cont.acs) {\n cont.acs.updateAll(pres.dacs);\n } else {\n cont.acs = new AccessMode().updateAll(pres.dacs);\n }\n cont.touched = new Date();\n }\n break;\n case 'ua':\n // user agent changed.\n cont.seen = {\n when: new Date(),\n ua: pres.ua\n };\n break;\n case 'recv':\n // user's other session marked some messges as received.\n pres.seq = pres.seq | 0;\n cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;\n break;\n case 'read':\n // user's other session marked some messages as read.\n pres.seq = pres.seq | 0;\n cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;\n cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;\n cont.unread = cont.seq - cont.read;\n break;\n case 'gone':\n // topic deleted or unsubscribed from.\n this._tinode.cacheRemTopic(pres.src);\n if (!cont._deleted) {\n cont._deleted = true;\n cont._attached = false;\n this._tinode._db.markTopicAsDeleted(pres.src, true);\n } else {\n this._tinode._db.remTopic(pres.src);\n }\n break;\n case 'del':\n // Update topic.del value.\n break;\n default:\n this._tinode.logger(\"INFO: Unsupported presence update in 'me'\", pres.what);\n }\n\n this._refreshContact(pres.what, cont);\n } else {\n if (pres.what == 'acs') {\n // New subscriptions and deleted/banned subscriptions have full\n // access mode (no + or - in the dacs string). Changes to known subscriptions are sent as\n // deltas, but they should not happen here.\n const acs = new AccessMode(pres.dacs);\n if (!acs || acs.mode == AccessMode._INVALID) {\n this._tinode.logger(\"ERROR: Invalid access mode update\", pres.src, pres.dacs);\n return;\n } else if (acs.mode == AccessMode._NONE) {\n this._tinode.logger(\"WARNING: Removing non-existent subscription\", pres.src, pres.dacs);\n return;\n } else {\n // New subscription. Send request for the full description.\n // Using .withOneSub (not .withLaterOneSub) to make sure IfModifiedSince is not set.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create a dummy entry to catch online status update.\n const dummy = this._tinode.getTopic(pres.src);\n dummy.topic = pres.src;\n dummy.online = false;\n dummy.acs = acs;\n this._tinode._db.updTopic(dummy);\n }\n } else if (pres.what == 'tags') {\n this.getMeta(this.startMetaQuery().withTags().build());\n } else if (pres.what == 'msg') {\n // Message received for un unknown (previously deleted) topic.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create an entry to catch updates and messages.\n const dummy = this._tinode.getTopic(pres.src);\n dummy._deleted = false;\n this._tinode._db.updTopic(dummy);\n }\n\n this._refreshContact(pres.what, cont);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Contact is updated, execute callbacks.\n _refreshContact(what, cont) {\n if (this.onContactUpdate) {\n this.onContactUpdate(what, cont);\n }\n }\n\n /**\n * Publishing to TopicMe is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicMe#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'me' is not supported\"));\n }\n\n /**\n * Delete validation credential.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delCredential(method, value).then(ctrl => {\n // Remove deleted credential from the cache.\n const index = this._credentials.findIndex((el) => {\n return el.meth == method && el.val == value;\n });\n if (index > -1) {\n this._credentials.splice(index, 1);\n }\n // Notify listeners\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n return ctrl;\n });\n }\n\n /**\n * @callback contactFilter\n * @param {Object} contact to check for inclusion.\n * @returns {boolean} true if contact should be processed, false to exclude it.\n */\n /**\n * Iterate over cached contacts.\n *\n * @function\n * @memberof Tinode.TopicMe#\n * @param {TopicMe.ContactCallback} callback - Callback to call for each contact.\n * @param {contactFilter=} filter - Optionally filter contacts; include all if filter is false-ish, otherwise\n * include those for which filter returns true-ish.\n * @param {Object=} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, filter, context) {\n this._tinode.mapTopics((c, idx) => {\n if (c.isCommType() && (!filter || filter(c))) {\n callback.call(context, c, idx);\n }\n });\n }\n\n /**\n * Get a contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get, either a UID (for p2p topics) or a topic name.\n * @returns {Tinode.Contact} - Contact or `undefined`.\n */\n getContact(name) {\n return this._tinode.cacheGetTopic(name);\n }\n\n /**\n * Get access mode of a given contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get access mode for, either a UID (for p2p topics)\n * or a topic name; if missing, access mode for the 'me' topic itself.\n * @returns {string} - access mode, such as `RWP`.\n */\n getAccessMode(name) {\n if (name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont ? cont.acs : null;\n }\n return this.acs;\n }\n\n /**\n * Check if contact is archived, i.e. contact.private.arch == true.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to check archived status, either a UID (for p2p topics) or a topic name.\n * @returns {boolean} - true if contact is archived, false otherwise.\n */\n isArchived(name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont && cont.private && !!cont.private.arch;\n }\n\n /**\n * @typedef Tinode.Credential\n * @memberof Tinode\n * @type Object\n * @property {string} meth - validation method such as 'email' or 'tel'.\n * @property {string} val - credential value, i.e. 'jdoe@example.com' or '+17025551234'\n * @property {boolean} done - true if credential is validated.\n */\n /**\n * Get the user's credentials: email, phone, etc.\n * @memberof Tinode.TopicMe#\n *\n * @returns {Tinode.Credential[]} - array of credentials.\n */\n getCredentials() {\n return this._credentials;\n }\n}\n","/**\n * @file Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport {\n listToRanges,\n normalizeRanges\n} from './utils';\n\n/**\n * Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @class MetaGetBuilder\n * @memberof Tinode\n *\n * @param {Tinode.Topic} parent topic which instantiated this builder.\n */\nexport default class MetaGetBuilder {\n constructor(parent) {\n this.topic = parent;\n this.what = {};\n }\n\n // Get timestamp of the most recent desc update.\n #get_desc_ims() {\n return this.topic._deleted ? undefined : this.topic.updated;\n }\n\n // Get timestamp of the most recent subs update.\n #get_subs_ims() {\n if (this.topic.isP2PType()) {\n return this.#get_desc_ims();\n }\n return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n }\n /**\n * Add query parameters to fetch messages within explicit limits.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - messages newer than this (inclusive);\n * @param {number=} before - older than this (exclusive)\n * @param {number=} limit - number of messages to fetch\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withData(since, before, limit) {\n this.what['data'] = {\n since: since,\n before: before,\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages newer than the latest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of messages to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterData(limit) {\n return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n }\n /**\n * Add query parameters to fetch messages within ID ranges.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Array.this object.\n */\n withDataRanges(ranges, limit) {\n this.what['data'] = {\n ranges: normalizeRanges(ranges, this.topic._maxSeq),\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages by an array of IDs.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number[]} list - array of seq IDs to fetch.\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDataList(list) {\n return this.withDataRanges(listToRanges(list));\n }\n /**\n * Add query parameters to fetch messages older than the earliest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of messages to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withEarlierData(limit) {\n return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the given timestamp.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch messages newer than this timestamp.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDesc(ims) {\n this.what['desc'] = {\n ims: ims\n };\n return this;\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDesc() {\n return this.withDesc(this.#get_desc_ims());\n }\n /**\n * Add query parameters to fetch subscriptions.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {number=} limit - maximum number of subscriptions to fetch.\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withSub(ims, limit, userOrTopic) {\n const opts = {\n ims: ims,\n limit: limit\n };\n if (this.topic.getType() == 'me') {\n opts.topic = userOrTopic;\n } else {\n opts.user = userOrTopic;\n }\n this.what['sub'] = opts;\n return this;\n }\n /**\n * Add query parameters to fetch a single subscription.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withOneSub(ims, userOrTopic) {\n return this.withSub(ims, undefined, userOrTopic);\n }\n /**\n * Add query parameters to fetch a single subscription if it's been updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterOneSub(userOrTopic) {\n return this.withOneSub(this.topic._lastSubsUpdate, userOrTopic);\n }\n /**\n * Add query parameters to fetch subscriptions updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of subscriptions to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterSub(limit) {\n return this.withSub(this.#get_subs_ims(), limit);\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withTags() {\n this.what['tags'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch user's credentials. 'me' topic only.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withCred() {\n if (this.topic.getType() == 'me') {\n this.what['cred'] = true;\n } else {\n this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\", this.topic.getType());\n }\n return this;\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withAux() {\n this.what['aux'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch deleted messages within explicit limits. Any/all parameters can be null.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - ids of messages deleted since this 'del' id (inclusive)\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDel(since, limit) {\n if (since || limit) {\n this.what['del'] = {\n since: since,\n limit: limit\n };\n }\n return this;\n }\n /**\n * Add query parameters to fetch messages deleted after the saved 'del' id.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDel(limit) {\n // Specify 'since' only if we have already received some messages. If\n // we have no locally cached messages then we don't care if any messages were deleted.\n return this.withDel(this.topic._maxSeq > 0 ? this.topic._maxDel + 1 : undefined, limit);\n }\n\n /**\n * Extract subquery: get an object that contains specified subquery.\n * @memberof Tinode.MetaGetBuilder#\n * @param {string} what - subquery to return: one of 'data', 'sub', 'desc', 'tags', 'cred', 'del'.\n * @returns {Object} requested subquery or undefined.\n */\n extract(what) {\n return this.what[what];\n }\n\n /**\n * Construct parameters.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.GetQuery} Get query\n */\n build() {\n const what = [];\n let params = {};\n ['data', 'sub', 'desc', 'tags', 'cred', 'aux', 'del'].forEach((key) => {\n if (this.what.hasOwnProperty(key)) {\n what.push(key);\n if (Object.getOwnPropertyNames(this.what[key]).length > 0) {\n params[key] = this.what[key];\n }\n }\n });\n if (what.length > 0) {\n params.what = what.join(' ');\n } else {\n params = undefined;\n }\n return params;\n }\n}\n","/**\n * @file Topic management.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport CBuffer from './cbuffer.js';\nimport CommError from './comm-error.js';\nimport * as Const from './config.js';\nimport Drafty from './drafty.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n listToRanges,\n mergeObj,\n mergeToCache,\n normalizeArray,\n normalizeRanges\n} from './utils.js';\n\n/**\n * Topic is a class representing a logical communication channel.\n */\nexport default class Topic {\n /**\n * @callback onData\n * @param {Data} data - Data packet\n */\n\n /**\n * Create topic.\n * @param {string} name - Name of the topic to create.\n * @param {Object=} callbacks - Object with various event callbacks.\n * @param {onData} callbacks.onData - Callback which receives a {data} message.\n * @param {callback} callbacks.onMeta - Callback which receives a {meta} message.\n * @param {callback} callbacks.onPres - Callback which receives a {pres} message.\n * @param {callback} callbacks.onInfo - Callback which receives an {info} message.\n * @param {callback} callbacks.onMetaDesc - Callback which receives changes to topic desctioption {@link desc}.\n * @param {callback} callbacks.onMetaSub - Called for a single subscription record change.\n * @param {callback} callbacks.onSubsUpdated - Called after a batch of subscription changes have been recieved and cached.\n * @param {callback} callbacks.onDeleteTopic - Called after the topic is deleted.\n * @param {callback} callbacls.onAllMessagesReceived - Called when all requested {data} messages have been recived.\n */\n constructor(name, callbacks) {\n // Parent Tinode object.\n this._tinode = null;\n\n // Server-provided data, locally immutable.\n // topic name\n this.name = name;\n // Timestamp when the topic was created.\n this.created = null;\n // Timestamp when the topic was last updated.\n this.updated = null;\n // Timestamp of the last messages\n this.touched = new Date(0);\n // Access mode, see AccessMode\n this.acs = new AccessMode(null);\n // Per-topic private data (accessible by current user only).\n this.private = null;\n // Per-topic public data (accessible by all users).\n this.public = null;\n // Per-topic system-provided data (accessible by all users).\n this.trusted = null;\n\n // Locally cached data\n // Subscribed users, for tracking read/recv/msg notifications.\n this._users = {};\n\n // Current value of locally issued seqId, used for pending messages.\n this._queuedSeqId = Const.LOCAL_SEQID;\n\n // The maximum known {data.seq} value.\n this._maxSeq = 0;\n // The minimum known {data.seq} value.\n this._minSeq = 0;\n // Indicator that the last request for earlier messages returned 0.\n this._noEarlierMsgs = false;\n // The maximum known deletion ID.\n this._maxDel = 0;\n // Timer object used to send 'recv' notifications.\n this._recvNotificationTimer = null;\n\n // User discovery tags\n this._tags = [];\n // Credentials such as email or phone number.\n this._credentials = [];\n // Auxiliary data\n this._aux = {};\n\n // Message versions cache (e.g. for edited messages).\n // Keys: original message seq ID.\n // Values: CBuffers containing newer versions of the original message\n // ordered by seq id.\n this._messageVersions = {};\n // Message cache, sorted by message seq values, from old to new.\n this._messages = new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n // Boolean, true if the topic is currently live\n this._attached = false;\n // Timestap of the most recently updated subscription.\n this._lastSubsUpdate = new Date(0);\n // Topic created but not yet synced with the server. Used only during initialization.\n this._new = true;\n // The topic is deleted at the server, this is a local copy.\n this._deleted = false;\n\n // Timer used to trgger {leave} request after a delay.\n this._delayedLeaveTimer = null;\n\n // Callbacks\n if (callbacks) {\n this.onData = callbacks.onData;\n this.onMeta = callbacks.onMeta;\n this.onPres = callbacks.onPres;\n this.onInfo = callbacks.onInfo;\n // A single desc update;\n this.onMetaDesc = callbacks.onMetaDesc;\n // A single subscription record;\n this.onMetaSub = callbacks.onMetaSub;\n // All subscription records received;\n this.onSubsUpdated = callbacks.onSubsUpdated;\n this.onTagsUpdated = callbacks.onTagsUpdated;\n this.onCredsUpdated = callbacks.onCredsUpdated;\n this.onAuxUpdated = callbacks.onAuxUpdated;\n this.onDeleteTopic = callbacks.onDeleteTopic;\n this.onAllMessagesReceived = callbacks.onAllMessagesReceived;\n }\n }\n\n // Static methods.\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n const types = {\n 'me': Const.TOPIC_ME,\n 'fnd': Const.TOPIC_FND,\n 'grp': Const.TOPIC_GRP,\n 'new': Const.TOPIC_GRP,\n 'nch': Const.TOPIC_GRP,\n 'chn': Const.TOPIC_GRP,\n 'usr': Const.TOPIC_P2P,\n 'sys': Const.TOPIC_SYS,\n 'slf': Const.TOPIC_SLF\n };\n return types[(typeof name == 'string') ? name.substring(0, 3) : 'xxx'];\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_ME;\n }\n\n /**\n * Check if the given topic name is a name of a 'slf' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'slf' topic, false otherwise.\n */\n static isSelfTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_SLF;\n }\n\n /**\n * Check if the given topic name is a name of a group topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_GRP;\n }\n\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_P2P;\n }\n\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name) || Topic.isSelfTopicName(name);\n }\n\n /**\n * Check if the topic name is a name of a new topic.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_NEW || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic name is a name of a channel.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_CHAN || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n // Returns true if pub is meant to replace another message (e.g. original message was edited).\n static #isReplacementMsg(pub) {\n return pub.head && pub.head.replace;\n }\n\n /**\n * Check if the topic is subscribed.\n * @returns {boolean} True is topic is attached/subscribed, false otherwise.\n */\n isSubscribed() {\n return this._attached;\n }\n\n /**\n * Request topic to subscribe. Wrapper for {@link Tinode#subscribe}.\n *\n * @param {Tinode.GetQuery=} getParams - get query parameters.\n * @param {Tinode.SetParams=} setParams - set parameters.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n subscribe(getParams, setParams) {\n // Clear request to leave topic.\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = null;\n\n // If the topic is already subscribed, return resolved promise\n if (this._attached) {\n return Promise.resolve(this);\n }\n\n // Send subscribe message, handle async response.\n // If topic name is explicitly provided, use it. If no name, then it's a new group topic,\n // use \"new\".\n return this._tinode.subscribe(this.name || Const.TOPIC_NEW, getParams, setParams).then(ctrl => {\n if (ctrl.code >= 300) {\n // Do nothing if subscription status has not changed.\n return ctrl;\n }\n\n this._attached = true;\n this._deleted = false;\n this.acs = (ctrl.params && ctrl.params.acs) ? ctrl.params.acs : this.acs;\n\n // Set topic name for new topics and add it to cache.\n if (this._new) {\n delete this._new;\n\n if (this.name != ctrl.topic) {\n // Name may change new123456 -> grpAbCdEf. Remove from cache under the old name.\n this._cacheDelSelf();\n this.name = ctrl.topic;\n }\n this._cachePutSelf();\n\n this.created = ctrl.ts;\n this.updated = ctrl.ts;\n\n if (this.name != Const.TOPIC_ME && this.name != Const.TOPIC_FND) {\n // Add the new topic to the list of contacts maintained by the 'me' topic.\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (setParams && setParams.desc) {\n setParams.desc._noForwarding = true;\n this._processMetaDesc(setParams.desc);\n }\n }\n return ctrl;\n });\n }\n\n /**\n * Create a draft of a message without sending it to the server.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Content to wrap in a draft.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * session. Otherwise the server will send a copy of the message to sender.\n *\n * @returns {Object} message draft.\n */\n createMessage(data, noEcho) {\n return this._tinode.createMessage(this.name, data, noEcho);\n }\n\n /**\n * Immediately publish data to topic. Wrapper for {@link Tinode#publish}.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Message to publish, either plain string or a Drafty object.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publish(data, noEcho) {\n return this.publishMessage(this.createMessage(data, noEcho));\n }\n\n /**\n * Publish message created by {@link Tinode.Topic#createMessage}.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - {data} object to publish. Must be created by {@link Tinode.Topic#createMessage}\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publishMessage(pub) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot publish on inactive topic\"));\n }\n if (this._sending) {\n return Promise.reject(new Error(\"The message is already being sent\"));\n }\n\n // Send data.\n pub._sending = true;\n pub._failed = false;\n\n // Extract refereces to attachments and out of band image records.\n let attachments = null;\n if (Drafty.hasEntities(pub.content)) {\n attachments = [];\n Drafty.entities(pub.content, data => {\n if (data) {\n if (data.ref) {\n attachments.push(data.ref);\n }\n if (data.preref) {\n attachments.push(data.preref);\n }\n }\n });\n if (attachments.length == 0) {\n attachments = null;\n }\n }\n\n return this._tinode.publishMessage(pub, attachments).then(ctrl => {\n pub._sending = false;\n pub.ts = ctrl.ts;\n this.swapMessageId(pub, ctrl.params.seq);\n this._maybeUpdateMessageVersionsCache(pub);\n this._routeData(pub);\n return ctrl;\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message rejected by the server\", err);\n pub._sending = false;\n pub._failed = true;\n if (this.onData) {\n this.onData();\n }\n });\n }\n\n /**\n * Add message to local message cache, send to the server when the promise is resolved.\n * If promise is null or undefined, the message will be sent immediately.\n * The message is sent when the\n * The message should be created by {@link Tinode.Topic#createMessage}.\n * This is probably not the final API.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - Message to use as a draft.\n * @param {Promise} prom - Message will be sent when this promise is resolved, discarded if rejected.\n *\n * @returns {Promise} derived promise.\n */\n publishDraft(pub, prom) {\n const seq = pub.seq || this._getQueuedSeqId();\n if (!pub._noForwarding) {\n // The 'seq', 'ts', and 'from' are added to mimic {data}. They are removed later\n // before the message is sent.\n pub._noForwarding = true;\n pub.seq = seq;\n pub.ts = new Date();\n pub.from = this._tinode.getCurrentUserID();\n\n // Don't need an echo message because the message is added to local cache right away.\n pub.noecho = true;\n // Add to cache.\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n\n if (this.onData) {\n this.onData(pub);\n }\n }\n // If promise is provided, send the queued message when it's resolved.\n // If no promise is provided, create a resolved one and send immediately.\n return (prom || Promise.resolve())\n .then(_ => {\n if (pub._cancelled) {\n return {\n code: 300,\n text: \"cancelled\"\n };\n }\n return this.publishMessage(pub);\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message draft rejected\", err);\n pub._sending = false;\n pub._failed = true;\n pub._fatal = err instanceof CommError ? (err.code >= 400 && err.code < 500) : false;\n if (this.onData) {\n this.onData();\n }\n // Rethrow to let caller know that the operation failed.\n throw err;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean=} unsub - If true, unsubscribe, otherwise just leave.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n leave(unsub) {\n // It's possible to unsubscribe (unsub==true) from inactive topic.\n if (!this._attached && !unsub) {\n return Promise.reject(new Error(\"Cannot leave inactive topic\"));\n }\n\n // Send a 'leave' message, handle async response\n return this._tinode.leave(this.name, unsub).then(ctrl => {\n this._resetSub();\n if (unsub) {\n this._gone();\n }\n return ctrl;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe after a delay. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} unsub - If true, unsubscribe, otherwise just leave.\n * @param {number} delay - time in milliseconds to delay leave request.\n */\n leaveDelayed(unsub, delay) {\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = setTimeout(_ => {\n this._delayedLeaveTimer = null;\n this.leave(unsub)\n }, delay);\n }\n\n /**\n * Request topic metadata from the local cache or from the server.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.GetQuery} request parameters\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMeta(params) {\n // Send {get} message, return promise.\n return this._tinode.getMeta(this.name, params);\n }\n\n /**\n * Request more messages from the server. The goal is to load continous range of messages\n * covering at least between 'min' and 'max' + one full page forward (newer = true) or backwards\n * (newer=false).\n * @memberof Tinode.Topic#\n *\n * @param {number} limit number of messages to get.\n * @param {Array.null means to use default.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n invite(uid, mode) {\n return this.setMeta({\n sub: {\n user: uid,\n mode: mode\n }\n });\n }\n /**\n * Archive or un-archive the topic. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} arch - true to archive the topic, false otherwise.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n archive(arch) {\n if (this.private && (!this.private.arch == !arch)) {\n return Promise.resolve(arch);\n }\n return this.setMeta({\n desc: {\n private: {\n arch: arch ? true : Const.DEL_CHAR\n }\n }\n });\n }\n /**\n * Set message as pinned or unpinned by adding it to aux.pins array. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - seq ID of the message to pin or un-pin.\n * @param {boolean} pin - true to pin the message, false to un-pin.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n pinMessage(seq, pin) {\n let pinned = this.aux('pins');\n if (!Array.isArray(pinned)) {\n pinned = [];\n }\n let changed = false;\n if (pin) {\n if (!pinned.includes(seq)) {\n changed = true;\n if (pinned.length == Const.MAX_PINNED_COUNT) {\n pinned.shift();\n }\n pinned.push(seq);\n }\n } else {\n if (pinned.includes(seq)) {\n changed = true;\n pinned = pinned.filter(id => id != seq);\n if (pinned.length == 0) {\n pinned = Const.DEL_CHAR;\n }\n }\n }\n if (changed) {\n return this.setMeta({\n aux: {\n pins: pinned\n }\n });\n }\n return Promise.resolve();\n }\n /**\n * Delete messages. Hard-deleting messages requires Deleter (D) permission.\n * Wrapper for {@link Tinode#delMessages}.\n * @memberof Tinode.Topic#\n *\n * @param {Array.recv, read.\n * @param {number} seq - ID or the message read or received.\n */\n note(what, seq) {\n if (!this._attached) {\n // Cannot sending {note} on an inactive topic\".\n return;\n }\n\n // Update local cache with the new count.\n const user = this._users[this._tinode.getCurrentUserID()];\n let update = false;\n if (user) {\n // Self-subscription is found.\n if (!user[what] || user[what] < seq) {\n user[what] = seq;\n update = true;\n }\n } else {\n // Self-subscription is not found.\n update = (this[what] | 0) < seq;\n }\n\n if (update) {\n // Send notification to the server.\n this._tinode.note(this.name, what, seq);\n // Update locally cached contact with the new count.\n this._updateMyReadRecv(what, seq);\n\n if (this.acs != null && !this.acs.isMuted()) {\n const me = this._tinode.getMeTopic();\n // Sent a notification to 'me' listeners.\n me._refreshContact(what, this);\n }\n }\n }\n\n /**\n * Send a 'recv' receipt. Wrapper for {@link Tinode#noteRecv}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge.\n */\n noteRecv(seq) {\n this.note('recv', seq);\n }\n /**\n * Send a 'read' receipt. Wrapper for {@link Tinode#noteRead}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge or 0/undefined to acknowledge the latest messages.\n */\n noteRead(seq) {\n seq = seq || this._maxSeq;\n if (seq > 0) {\n this.note('read', seq);\n }\n }\n /**\n * Send a key-press notification. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n */\n noteKeyPress() {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name);\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification than a video or audio message is . Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param audioOnly - true if the recording is audio-only, false if it's a video recording.\n */\n noteRecording(audioOnly) {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, audioOnly ? 'kpa' : 'kpv');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n\n /**\n * Send a {note what='call'}. Wrapper for {@link Tinode#videoCall}.\n * @memberof Tinode#\n *\n * @param {string} evt - Call event.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(evt, seq, payload) {\n if (!this._attached && !['ringing', 'hang-up'].includes(evt)) {\n // Cannot {call} on an inactive topic\".\n return;\n }\n return this._tinode.videoCall(this.name, seq, evt, payload);\n }\n\n // Update cached read/recv/unread counts for the current user.\n _updateMyReadRecv(what, seq, ts) {\n let oldVal, doUpdate = false;\n\n seq = seq | 0;\n this.seq = this.seq | 0;\n this.read = this.read | 0;\n this.recv = this.recv | 0;\n switch (what) {\n case 'recv':\n oldVal = this.recv;\n this.recv = Math.max(this.recv, seq);\n doUpdate = (oldVal != this.recv);\n break;\n case 'read':\n oldVal = this.read;\n this.read = Math.max(this.read, seq);\n doUpdate = (oldVal != this.read);\n break;\n case 'msg':\n oldVal = this.seq;\n this.seq = Math.max(this.seq, seq);\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = (oldVal != this.seq);\n break;\n }\n\n // Sanity checks.\n if (this.recv < this.read) {\n this.recv = this.read;\n doUpdate = true;\n }\n if (this.seq < this.recv) {\n this.seq = this.recv;\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = true;\n }\n this.unread = this.seq - this.read;\n return doUpdate;\n }\n /**\n * Get user description from global cache. The user does not need to be a\n * subscriber of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to fetch.\n * @return {Object} user description or undefined.\n */\n userDesc(uid) {\n // TODO: handle asynchronous requests\n const user = this._cacheGetUser(uid);\n if (user) {\n return user; // Promise.resolve(user)\n }\n }\n /**\n * Get description of the p2p peer from subscription cache.\n * @memberof Tinode.Topic#\n *\n * @return {Object} peer's description or undefined.\n */\n p2pPeerDesc() {\n if (!this.isP2PType()) {\n return undefined;\n }\n return this._users[this.name];\n }\n /**\n * Iterate over cached subscribers. If callback is undefined, use this.onMetaSub.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive subscribers one by one.\n * @param {Object=} context - Value of `this` inside the `callback`.\n */\n subscribers(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._users) {\n cb.call(context, this._users[idx], idx, this._users);\n }\n }\n }\n /**\n * Get a copy of cached tags.\n * @memberof Tinode.Topic#\n *\n * @return {Array.key or undefined.\n */\n aux(key) {\n return this._aux[key];\n }\n /**\n * Get alias value (unique tag with alias: prefix), if present.\n * The prefix is stripped off.\n * @memberof Tinode.Topic#\n * @return {string} alias or undefined.\n */\n alias() {\n const alias = this._tags && this._tags.find(t => t.startsWith(Const.TAG_ALIAS));\n if (!alias) {\n return undefined;\n }\n // Remove 'alias:' prefix.\n return alias.substring(Const.TAG_ALIAS.length);\n }\n\n /**\n * Get cached subscription for the given user ID.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - id of the user to query for\n * @return user description or undefined.\n */\n subscriber(uid) {\n return this._users[uid];\n }\n /**\n * Iterate over versions of a message: call callback for each version (excluding original).\n * If callback is undefined, does nothing.\n * @memberof Tinode.Topic#\n *\n * @param {number} origSeq - seq ID of the original message.\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messageVersions(origSeq, callback, context) {\n if (!callback) {\n // No callback? We are done then.\n return;\n }\n const versions = this._messageVersions[origSeq];\n if (!versions) {\n return;\n }\n versions.forEach(callback, undefined, undefined, context);\n }\n /**\n * Iterate over cached messages: call callback for each message in the range [sinceIdx, beforeIdx).\n * If callback is undefined, use this.onData.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {number} sinceId - Optional seqId to start iterating from (inclusive).\n * @param {number} beforeId - Optional seqId to stop iterating before it is reached (exclusive).\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messages(callback, sinceId, beforeId, context) {\n const cb = (callback || this.onData);\n if (cb) {\n const startIdx = typeof sinceId == 'number' ? this._messages.find({\n seq: sinceId\n }, true) : undefined;\n const beforeIdx = typeof beforeId == 'number' ? this._messages.find({\n seq: beforeId\n }, true) : undefined;\n if (startIdx != -1 && beforeIdx != -1) {\n // Step 1. Filter out all replacement messages and\n // save displayable messages in a temporary buffer.\n let msgs = [];\n this._messages.forEach((msg, unused1, unused2, i) => {\n if (Topic.#isReplacementMsg(msg)) {\n // Skip replacements.\n return;\n }\n if (msg._deleted) {\n // Skip deleted ranges.\n return;\n }\n // In case the massage was edited, replace timestamp of the version with the original's timestamp.\n const latest = this.latestMsgVersion(msg.seq) || msg;\n if (!latest._origTs) {\n latest._origTs = latest.ts;\n latest._origSeq = latest.seq;\n latest.ts = msg.ts;\n latest.seq = msg.seq;\n }\n msgs.push({\n data: latest,\n idx: i\n });\n }, startIdx, beforeIdx, {});\n // Step 2. Loop over displayble messages invoking cb on each of them.\n msgs.forEach((val, i) => {\n cb.call(context, val.data,\n (i > 0 ? msgs[i - 1].data : undefined),\n (i < msgs.length - 1 ? msgs[i + 1].data : undefined), val.idx);\n });\n }\n }\n }\n /**\n * Get the message from cache by literal seq (does not resolve message edits).\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message seqId to search for.\n * @returns {Object} the message with the given seq or undefined, if no such message is found.\n */\n findMessage(seq) {\n const idx = this._messages.find({\n seq: seq\n });\n if (idx >= 0) {\n return this._messages.getAt(idx);\n }\n return undefined;\n }\n /**\n * Get the most recent non-deleted message from cache.\n * @memberof Tinode.Topic#\n *\n * @returns {Object} the most recent cached message or undefined, if no messages are cached.\n */\n latestMessage() {\n return this._messages.getLast(msg => !msg._deleted);\n }\n /**\n * Get the latest version for message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message.\n * @returns {Object} the latest version of the message or null if message not found.\n */\n latestMsgVersion(seq) {\n const versions = this._messageVersions[seq];\n return versions ? versions.getLast() : null;\n }\n /**\n * Get the maximum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest seq ID in cache.\n */\n maxMsgSeq() {\n return this._maxSeq;\n }\n /**\n * Get the minimum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the smallest seq ID in cache or 0.\n */\n minMsgSeq() {\n return this._minSeq;\n }\n /**\n * Get the maximum deletion ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest deletion ID.\n */\n maxClearId() {\n return this._maxDel;\n }\n /**\n * Get the number of messages in the cache.\n * @memberof Tinode.Topic#\n *\n * @returns {number} count of cached messages.\n */\n messageCount() {\n return this._messages.length();\n }\n /**\n * Iterate over cached unsent messages. Wraps {@link Tinode.Topic#messages}.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of this inside the callback.\n */\n queuedMessages(callback, context) {\n if (!callback) {\n throw new Error(\"Callback must be provided\");\n }\n this.messages(callback, Const.LOCAL_SEQID, undefined, context);\n }\n /**\n * Get the number of topic subscribers who marked this message as either recv or read\n * Current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what action to consider: received \"recv\" or read \"read\".\n * @param {number} seq - ID or the message read or received.\n *\n * @returns {number} the number of subscribers who marked the message with the given ID as read or received.\n */\n msgReceiptCount(what, seq) {\n let count = 0;\n if (seq > 0) {\n const me = this._tinode.getCurrentUserID();\n for (let idx in this._users) {\n const user = this._users[idx];\n if (user.user !== me && user[what] >= seq) {\n count++;\n }\n }\n }\n return count;\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as read.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message id to check.\n * @returns {number} number of subscribers who claim to have received the message.\n */\n msgReadCount(seq) {\n return this.msgReceiptCount('read', seq);\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as received.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - Message id to check.\n * @returns {number} Number of subscribers who claim to have received the message.\n */\n msgRecvCount(seq) {\n return this.msgReceiptCount('recv', seq);\n }\n /**\n * Check if cached message IDs indicate that the server may have more messages.\n * @memberof Tinode.Topic#\n *\n * @param {number} min - smallest seq ID loaded range.\n * @param {number} max - greatest seq ID in loaded range.\n * @param {boolean} newer - if true, check for newer messages only.\n * @returns {Array.true if message was cancelled, false otherwise.\n */\n cancelSend(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n if (idx >= 0) {\n const msg = this._messages.getAt(idx);\n const status = this.msgStatus(msg);\n if (status == Const.MESSAGE_STATUS_QUEUED ||\n status == Const.MESSAGE_STATUS_FAILED ||\n status == Const.MESSAGE_STATUS_FATAL) {\n this._tinode._db.remMessages(this.name, seqId);\n msg._cancelled = true;\n this._messages.delAt(idx);\n if (this.onData) {\n // Calling with no parameters to indicate the message was deleted.\n this.onData();\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Get type of the topic: me, p2p, grp, fnd...\n * @memberof Tinode.Topic#\n *\n * @returns {string} One of 'me', 'p2p', 'grp', 'fnd', 'sys' or undefined.\n */\n getType() {\n return Topic.topicType(this.name);\n }\n /**\n * Get current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.AccessMode} - user's access mode\n */\n getAccessMode() {\n return this.acs;\n }\n /**\n * Set current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @param {AccessMode | Object} acs - access mode to set.\n */\n setAccessMode(acs) {\n return this.acs = new AccessMode(acs);\n }\n /**\n * Get topic's default access mode.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.DefAcs} - access mode, such as {auth: `RWP`, anon: `N`}.\n */\n getDefaultAccess() {\n return this.defacs;\n }\n /**\n * Initialize new meta {@link Tinode.GetQuery} builder. The query is attched to the current topic.\n * It will not work correctly if used with a different topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.MetaGetBuilder} query attached to the current topic.\n */\n startMetaQuery() {\n return new MetaGetBuilder(this);\n }\n /**\n * Check if topic is archived, i.e. private.arch == true.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is archived, false otherwise.\n */\n isArchived() {\n return this.private && !!this.private.arch;\n }\n /**\n * Check if topic is a 'me' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'me' topic, false otherwise.\n */\n isMeType() {\n return Topic.isMeTopicName(this.name);\n }\n /**\n * Check if topic is a 'slf' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'slf' topic, false otherwise.\n */\n isSelfType() {\n return Topic.isSelfTopicName(this.name);\n }\n /**\n * Check if topic is a channel.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a channel, false otherwise.\n */\n isChannelType() {\n return Topic.isChannelTopicName(this.name);\n }\n /**\n * Check if topic is a group topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a group, false otherwise.\n */\n isGroupType() {\n return Topic.isGroupTopicName(this.name);\n }\n /**\n * Check if topic is a p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p topic, false otherwise.\n */\n isP2PType() {\n return Topic.isP2PTopicName(this.name);\n }\n /**\n * Check if topic is a communication topic, i.e. a group or p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p or group topic, false otherwise.\n */\n isCommType() {\n return Topic.isCommTopicName(this.name);\n }\n /**\n * Get status (queued, sent, received etc) of a given message in the context\n * of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {Message} msg - message to check for status.\n * @param {boolean} upd - update chached message status.\n *\n * @returns message status constant.\n */\n msgStatus(msg, upd) {\n let status = Const.MESSAGE_STATUS_NONE;\n if (this._tinode.isMe(msg.from)) {\n if (msg._sending) {\n status = Const.MESSAGE_STATUS_SENDING;\n } else if (msg._fatal || msg._cancelled) {\n status = Const.MESSAGE_STATUS_FATAL;\n } else if (msg._failed) {\n status = Const.MESSAGE_STATUS_FAILED;\n } else if (msg.seq >= Const.LOCAL_SEQID) {\n status = Const.MESSAGE_STATUS_QUEUED;\n } else if (this.msgReadCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_READ;\n } else if (this.msgRecvCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_RECEIVED;\n } else if (msg.seq > 0) {\n status = Const.MESSAGE_STATUS_SENT;\n }\n } else {\n status = Const.MESSAGE_STATUS_TO_ME;\n }\n\n if (upd && msg._status != status) {\n msg._status = status;\n this._tinode._db.updMessageStatus(this.name, msg.seq, status);\n }\n\n return status;\n }\n\n // If msg is a replacement for another message, save the msg in the message versions cache\n // as a newer version for the message it's supposed to replace.\n _maybeUpdateMessageVersionsCache(msg) {\n if (!Topic.#isReplacementMsg(msg)) {\n // Check if this message is the original in the chain of edits and if so\n // ensure all version have the same sender.\n if (this._messageVersions[msg.seq]) {\n // Remove versions with different 'from'.\n this._messageVersions[msg.seq].filter(version => version.from == msg.from);\n if (this._messageVersions[msg.seq].isEmpty()) {\n delete this._messageVersions[msg.seq];\n }\n }\n return;\n }\n\n const targetSeq = parseInt(msg.head.replace.split(':')[1]);\n if (targetSeq > msg.seq) {\n // Substitutes are supposed to have higher seq ids.\n return;\n }\n const targetMsg = this.findMessage(targetSeq);\n if (targetMsg && targetMsg.from != msg.from) {\n // Substitute cannot change the sender.\n return;\n }\n const versions = this._messageVersions[targetSeq] || new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n versions.put(msg);\n this._messageVersions[targetSeq] = versions;\n }\n\n // Process data message\n _routeData(data) {\n if (data.content) {\n if (!this.touched || this.touched < data.ts) {\n this.touched = data.ts;\n this._tinode._db.updTopic(this);\n }\n }\n\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n this.msgStatus(data, true);\n // Ackn receiving the message.\n clearTimeout(this._recvNotificationTimer);\n this._recvNotificationTimer = setTimeout(_ => {\n this._recvNotificationTimer = null;\n this.noteRecv(this._maxSeq);\n }, Const.RECV_TIMEOUT);\n }\n\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n\n const outgoing = ((!this.isChannelType() && !data.from) || this._tinode.isMe(data.from));\n\n if (data.head && data.head.webrtc && data.head.mime == Drafty.getContentType() && data.content) {\n // Rewrite VC body with info from the headers.\n const upd = {\n state: data.head.webrtc,\n duration: data.head['webrtc-duration'],\n incoming: !outgoing,\n };\n if (data.head.vc) {\n upd.vc = true;\n }\n data.content = Drafty.updateVideoCall(data.content, upd);\n }\n\n if (!data._noForwarding) {\n this._messages.put(data);\n this._tinode._db.addMessage(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n\n if (this.onData) {\n this.onData(data);\n }\n\n // Update locally cached contact with the new message count.\n const what = outgoing ? 'read' : 'msg';\n this._updateMyReadRecv(what, data.seq, data.ts);\n\n if (!outgoing && data.from) {\n // Mark messages as read by the sender.\n this._routeInfo({\n what: 'read',\n from: data.from,\n seq: data.seq,\n _noForwarding: true\n });\n }\n\n // Notify 'me' listeners of the change.\n this._tinode.getMeTopic()._refreshContact(what, this);\n }\n\n // Process metadata message\n _routeMeta(meta) {\n if (meta.desc) {\n this._processMetaDesc(meta.desc);\n }\n if (meta.sub && meta.sub.length > 0) {\n this._processMetaSubs(meta.sub);\n }\n if (meta.del) {\n this._processDelMessages(meta.del.clear, meta.del.delseq);\n }\n if (meta.tags) {\n this._processMetaTags(meta.tags);\n }\n if (meta.cred) {\n this._processMetaCreds(meta.cred);\n }\n if (meta.aux) {\n this._processMetaAux(meta.aux);\n }\n if (this.onMeta) {\n this.onMeta(meta);\n }\n }\n // Process presence change message\n _routePres(pres) {\n let user, uid;\n switch (pres.what) {\n case 'del':\n // Delete cached messages.\n this._processDelMessages(pres.clear, pres.delseq);\n break;\n case 'on':\n case 'off':\n // Update online status of a subscription.\n user = this._users[pres.src];\n if (user) {\n user.online = pres.what == 'on';\n } else {\n this._tinode.logger(\"WARNING: Presence update for an unknown user\", this.name, pres.src);\n }\n break;\n case 'term':\n // Attachment to topic is terminated probably due to cluster rehashing.\n this._resetSub();\n break;\n case 'upd':\n // A topic subscriber has updated his description.\n // Issue {get sub} only if the current user has no p2p topics with the updated user (p2p name is not in cache).\n // Otherwise 'me' will issue a {get desc} request.\n if (pres.src && !this._tinode.isTopicCached(pres.src)) {\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n }\n break;\n case 'aux':\n // Auxiliary data updated.\n this.getMeta(this.startMetaQuery().withAux().build());\n break;\n case 'acs':\n uid = pres.src || this._tinode.getCurrentUserID();\n user = this._users[uid];\n if (!user) {\n // Update for an unknown user: notification of a new subscription.\n const acs = new AccessMode().updateAll(pres.dacs);\n if (acs && acs.mode != AccessMode._NONE) {\n user = this._cacheGetUser(uid);\n if (!user) {\n user = {\n user: uid,\n acs: acs\n };\n this.getMeta(this.startMetaQuery().withOneSub(undefined, uid).build());\n } else {\n user.acs = acs;\n }\n user.updated = new Date();\n this._processMetaSubs([user]);\n }\n } else {\n // Known user\n user.acs.updateAll(pres.dacs);\n // Update user's access mode.\n this._processMetaSubs([{\n user: uid,\n updated: new Date(),\n acs: user.acs\n }]);\n }\n break;\n default:\n this._tinode.logger(\"INFO: Ignored presence update\", pres.what);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n // Process {info} message\n _routeInfo(info) {\n switch (info.what) {\n case 'recv':\n case 'read':\n const user = this._users[info.from];\n if (user) {\n user[info.what] = info.seq;\n if (user.recv < user.read) {\n user.recv = user.read;\n }\n }\n const msg = this.latestMessage();\n if (msg) {\n this.msgStatus(msg, true);\n }\n\n // If this is an update from the current user, update the cache with the new count.\n if (this._tinode.isMe(info.from) && !info._noForwarding) {\n this._updateMyReadRecv(info.what, info.seq);\n }\n\n // Notify 'me' listener of the status change.\n this._tinode.getMeTopic()._refreshContact(info.what, this);\n break;\n case 'kp':\n case 'kpa':\n case 'kpv':\n // Typing or audio/video recording notification. Do nothing.\n break;\n case 'call':\n // Do nothing here.\n break;\n default:\n this._tinode.logger(\"INFO: Ignored info update\", info.what);\n }\n\n if (this.onInfo) {\n this.onInfo(info);\n }\n }\n // Called by Tinode when meta.desc packet is received.\n // Called by 'me' topic on contact update (desc._noForwarding is true).\n _processMetaDesc(desc) {\n if (this.isP2PType()) {\n // Synthetic desc may include defacs for p2p topics which is useless.\n // Remove it.\n delete desc.defacs;\n\n // Update to p2p desc is the same as user update. Update cached user.\n this._tinode._db.updUser(this.name, desc.public);\n }\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n // Update persistent cache.\n this._tinode._db.updTopic(this);\n\n // Notify 'me' listener, if available:\n if (this.name !== Const.TOPIC_ME && !desc._noForwarding) {\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n // Called by Tinode when meta.sub is recived or in response to received\n // {ctrl} after setMeta-sub.\n _processMetaSubs(subs) {\n for (let idx in subs) {\n const sub = subs[idx];\n\n // Fill defaults.\n sub.online = !!sub.online;\n // Update timestamp of the most recent subscription update.\n this._lastSubsUpdate = new Date(Math.max(this._lastSubsUpdate, sub.updated));\n\n let user = null;\n if (!sub.deleted) {\n // If this is a change to user's own permissions, update them in topic too.\n // Desc will update 'me' topic.\n if (this._tinode.isMe(sub.user) && sub.acs) {\n this._processMetaDesc({\n updated: sub.updated,\n touched: sub.touched,\n acs: sub.acs\n });\n }\n user = this._updateCachedUser(sub.user, sub);\n } else {\n // Subscription is deleted, remove it from topic (but leave in Users cache)\n delete this._users[sub.user];\n user = sub;\n }\n\n if (this.onMetaSub) {\n this.onMetaSub(user);\n }\n }\n\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n }\n // Called by Tinode when meta.tags is recived.\n _processMetaTags(tags) {\n if (tags == Const.DEL_CHAR || (tags.length == 1 && tags[0] == Const.DEL_CHAR)) {\n tags = [];\n }\n this._tags = tags;\n this._tinode._db.updTopic(this);\n if (this.onTagsUpdated) {\n this.onTagsUpdated(tags);\n }\n }\n // Do nothing for topics other than 'me'\n _processMetaCreds(creds) {}\n\n // Called by Tinode when meta.aux is recived.\n _processMetaAux(aux) {\n aux = (!aux || aux == Const.DEL_CHAR) ? {} : aux;\n this._aux = mergeObj(this._aux, aux);\n this._tinode._db.updTopic(this);\n if (this.onAuxUpdated) {\n this.onAuxUpdated(this._aux);\n }\n }\n\n // Delete cached messages and update cached transaction IDs\n _processDelMessages(clear, delseq) {\n this._maxDel = Math.max(clear, this._maxDel);\n this.clear = Math.max(clear, this.clear);\n let count = 0;\n if (Array.isArray(delseq)) {\n delseq.forEach(rec => {\n if (!rec.hi) {\n count++;\n this.flushMessage(rec.low);\n } else {\n count += rec.hi - rec.low;\n this.flushMessageRange(rec.low, rec.hi);\n }\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n\n this._tinode._db.addDelLog(this.name, clear, delseq);\n }\n\n if (count > 0) {\n if (this.onData) {\n this.onData();\n }\n }\n }\n // Topic is informed that the entire response to {get what=data} has been received.\n _allMessagesReceived(count) {\n\n if (this.onAllMessagesReceived) {\n this.onAllMessagesReceived(count);\n }\n }\n // Reset subscribed state\n _resetSub() {\n this._attached = false;\n }\n // This topic is either deleted or unsubscribed from.\n _gone() {\n this._messages.reset();\n this._tinode._db.remMessages(this.name);\n this._users = {};\n this.acs = new AccessMode(null);\n this.private = null;\n this.public = null;\n this.trusted = null;\n this._maxSeq = 0;\n this._minSeq = 0;\n this._attached = false;\n\n const me = this._tinode.getMeTopic();\n if (me) {\n me._routePres({\n _noForwarding: true,\n what: 'gone',\n topic: Const.TOPIC_ME,\n src: this.name\n });\n }\n if (this.onDeleteTopic) {\n this.onDeleteTopic();\n }\n }\n // Update global user cache and local subscribers cache.\n // Don't call this method for non-subscribers.\n _updateCachedUser(uid, obj) {\n // Fetch user object from the global cache.\n // This is a clone of the stored object\n let cached = this._cacheGetUser(uid);\n cached = mergeObj(cached || {}, obj);\n // Save to global cache\n this._cachePutUser(uid, cached);\n // Save to the list of topic subsribers.\n return mergeToCache(this._users, uid, cached);\n }\n // Get local seqId for a queued message.\n _getQueuedSeqId() {\n return this._queuedSeqId++;\n }\n\n // Load most recent messages from persistent cache.\n _loadMessages(db, query) {\n query = query || {};\n query.limit = query.limit || Const.DEFAULT_MESSAGES_PAGE;\n\n // Count of message loaded from DB.\n let count = 0;\n return db.readMessages(this.name, query)\n .then(msgs => {\n msgs.forEach(data => {\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n }\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n });\n count = msgs.length;\n })\n .then(_ => db.readDelLog(this.name, query))\n .then(dellog => {\n return dellog.forEach(rec => {\n this._messages.put({\n seq: rec.low,\n low: rec.low,\n hi: rec.hi,\n _deleted: true\n });\n });\n })\n .then(_ => {\n // DEBUG\n return count;\n });\n }\n\n // Push or {pres}: message received.\n _updateReceived(seq, act) {\n this.touched = new Date();\n this.seq = seq | 0;\n // Check if message is sent by the current user. If so it's been read already.\n if (!act || this._tinode.isMe(act)) {\n this.read = this.read ? Math.max(this.read, this.seq) : this.seq;\n this.recv = this.recv ? Math.max(this.read, this.recv) : this.read;\n }\n this.unread = this.seq - (this.read | 0);\n this._tinode._db.updTopic(this);\n }\n}\n","/**\n * @file Utilities used in multiple places.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport {\n DEL_CHAR,\n LOCAL_SEQID\n} from './config.js';\n\n// Attempt to convert date and AccessMode strings to objects.\nexport function jsonParseHelper(key, val) {\n // Try to convert string timestamps with optional milliseconds to Date,\n // e.g. 2015-09-02T01:45:43[.123]Z\n if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n const date = new Date(val);\n if (!isNaN(date)) {\n return date;\n }\n } else if (key === 'acs' && typeof val === 'object') {\n return new AccessMode(val);\n }\n return val;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\nfunction isValidDate(d) {\n return (d instanceof Date) && !isNaN(d) && (d.getTime() != 0);\n}\n\n// RFC3339 formater of Date\nexport function rfc3339DateString(d) {\n if (!isValidDate(d)) {\n return undefined;\n }\n\n const pad = function(val, sp) {\n sp = sp || 2;\n return '0'.repeat(sp - ('' + val).length) + val;\n };\n\n const millis = d.getUTCMilliseconds();\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +\n 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +\n (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\n\n// Recursively merge src's own properties to dst.\n// Ignore properties where ignore[property] is true.\n// Array and Date objects are shallow-copied.\nexport function mergeObj(dst, src, ignore) {\n if (typeof src != 'object') {\n if (src === undefined) {\n return dst;\n }\n if (src === DEL_CHAR) {\n return undefined;\n }\n return src;\n }\n // JS is crazy: typeof null is 'object'.\n if (src === null) {\n return src;\n }\n\n // Handle Date\n if (src instanceof Date && !isNaN(src)) {\n return (!dst || !(dst instanceof Date) || isNaN(dst) || dst < src) ? src : dst;\n }\n\n // Access mode\n if (src instanceof AccessMode) {\n return new AccessMode(src);\n }\n\n // Handle Array\n if (src instanceof Array) {\n return src;\n }\n\n if (!dst || dst === DEL_CHAR) {\n dst = src.constructor();\n }\n\n for (let prop in src) {\n if (src.hasOwnProperty(prop) && (!ignore || !ignore[prop]) && (prop != '_noForwarding')) {\n try {\n dst[prop] = mergeObj(dst[prop], src[prop]);\n } catch (err) {\n // FIXME: probably need to log something here.\n }\n }\n }\n return dst;\n}\n\n// Update object stored in a cache. Returns updated value.\nexport function mergeToCache(cache, key, newval, ignore) {\n cache[key] = mergeObj(cache[key], newval, ignore);\n return cache[key];\n}\n\n// Strips all values from an object of they evaluate to false or if their name starts with '_'.\n// Used on all outgoing object before serialization to string.\nexport function simplify(obj) {\n Object.keys(obj).forEach((key) => {\n if (key[0] == '_') {\n // Strip fields like \"obj._key\".\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n // Strip empty arrays.\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (obj[key] instanceof Date) {\n // Strip invalid or zero date.\n if (!isValidDate(obj[key])) {\n delete obj[key];\n }\n } else if (typeof obj[key] == 'object') {\n simplify(obj[key]);\n // Strip empty objects.\n if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n delete obj[key];\n }\n }\n });\n return obj;\n};\n\n\n// Trim whitespace, convert to lowercase, strip empty, short, and duplicate elements elements.\n// If the result is an empty array, add a single element \"\\u2421\" (Unicode Del character).\nexport function normalizeArray(arr) {\n let out = [];\n if (Array.isArray(arr)) {\n // Trim, throw away very short and empty tags.\n for (let i = 0, l = arr.length; i < l; i++) {\n let t = arr[i];\n if (t) {\n t = t.trim().toLowerCase();\n if (t.length > 1) {\n out.push(t);\n }\n }\n }\n out = out.sort().filter((item, pos, ary) => {\n return !pos || item != ary[pos - 1];\n });\n }\n if (out.length == 0) {\n // Add single tag with a Unicode Del character, otherwise an ampty array\n // is ambiguos. The Del tag will be stripped by the server.\n out.push(DEL_CHAR);\n }\n return out;\n}\n\n// Convert input to valid ranges of IDs.\nexport function normalizeRanges(ranges, maxSeq) {\n if (!Array.isArray(ranges)) {\n return [];\n }\n\n // Sort ranges in accending order by low, then descending by hi.\n ranges.sort((r1, r2) => {\n if (r1.low < r2.low) {\n return -1;\n }\n if (r1.low == r2.low) {\n return (r2.hi | 0) - r1.hi;\n }\n return 1;\n });\n\n // Remove pending messages from ranges possibly clipping some ranges.\n ranges = ranges.reduce((out, r) => {\n if (r.low < LOCAL_SEQID && r.low > 0) {\n if (!r.hi || r.hi < LOCAL_SEQID) {\n out.push(r);\n } else {\n // Clip hi to max allowed value.\n out.push({\n low: r.low,\n hi: maxSeq + 1\n });\n }\n }\n return out;\n }, []);\n\n // Merge overlapping ranges.\n ranges = ranges.reduce((out, r) => {\n if (out.length == 0) {\n out.push(r);\n } else {\n let prev = out[out.length - 1];\n if (r.low <= prev.hi) {\n prev.hi = Math.max(prev.hi, r.hi);\n } else {\n out.push(r);\n }\n }\n return out;\n }, []);\n\n return ranges;\n}\n\n// Convert array of IDs to array of ranges.\nexport function listToRanges(list) {\n // Sort the list in ascending order\n list.sort((a, b) => a - b);\n // Convert the array of IDs to ranges.\n return list.reduce((out, id) => {\n if (out.length == 0) {\n // First element.\n out.push({\n low: id\n });\n } else {\n let prev = out[out.length - 1];\n if ((!prev.hi && (id != prev.low + 1)) || (id > prev.hi)) {\n // New range.\n out.push({\n low: id\n });\n } else {\n // Expand existing range.\n prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;\n }\n }\n return out;\n }, []);\n}\n\n// Cuts 'clip' range out of the 'src' range.\n// Returns an array with 0, 1 or 2 elements.\nexport function clipOutRange(src, clip) {\n if (clip.hi <= src.low || clip.low >= src.hi) {\n // Clip is completely outside of src, no intersection.\n return [src];\n }\n\n\n if (clip.low <= src.low) {\n if (clip.hi >= src.hi) {\n // The source range is completely inside the clipping range.\n return [];\n }\n // Partial clipping at the top.\n return [{\n low: clip.hi,\n hi: src.hi\n }];\n }\n\n // Range on the lower end.\n const result = [{\n low: src.low,\n hi: clip.low\n }];\n if (clip.hi < src.hi) {\n // Maybe a range on the higher end, if clip is completely inside the source.\n result.push({\n low: clip.hi,\n hi: src.hi\n });\n }\n\n return result;\n}\n\n// Cuts 'src' range to be completely within 'clip' range.\n// Returns clipped range or null if 'src' is outside of 'clip'.\nexport function clipInRange(src, clip) {\n if (clip.hi <= src.low || clip.low >= src.hi) {\n // The src is completely outside of the clip, no intersection.\n return null;\n }\n\n if (src.low >= clip.low && src.hi <= clip.hi) {\n // Src is completely within the clip, return the entire src.\n return src;\n }\n\n // Partial overlap.\n return {\n low: Math.max(src.low, clip.low),\n hi: Math.min(src.hi, clip.hi)\n };\n\n return result;\n}\n","export const PACKAGE_VERSION = \"0.24.0-rc1\";\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @module tinode-sdk\n *\n * @copyright 2015-2025 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.24\n *\n * See https://github.com/tinode/webapp for real-life usage.\n *\n * @example\n * \n * \n * \n *\n * \n * ...\n * \n * \n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport CommError from './comm-error.js';\nimport Connection from './connection.js';\nimport DBCache from './db.js';\nimport Drafty from './drafty.js';\nimport LargeFileHelper from './large-file.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport Topic from './topic.js';\nimport TopicFnd from './fnd-topic.js';\nimport TopicMe from './me-topic.js';\n\nimport {\n isUrlRelative,\n jsonParseHelper,\n mergeObj,\n rfc3339DateString,\n simplify\n} from './utils.js';\n\n// Re-export AccessMode\nexport {\n AccessMode\n};\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n WebSocketProvider = WebSocket;\n}\n\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n XHRProvider = XMLHttpRequest;\n}\n\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n IndexedDBProvider = indexedDB;\n}\n\n// Re-export Drafty.\nexport {\n Drafty\n}\n\ninitForNonBrowserApp();\n\n// Utility functions\n\n// Polyfill for non-browser context, e.g. NodeJs.\nfunction initForNonBrowserApp() {\n // Tinode requirement in native mode because react native doesn't provide Base64 method\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n if (typeof btoa == 'undefined') {\n global.btoa = function(input = '') {\n let str = input;\n let output = '';\n\n for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n\n charCode = str.charCodeAt(i += 3 / 4);\n\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n }\n block = block << 8 | charCode;\n }\n\n return output;\n };\n }\n\n if (typeof atob == 'undefined') {\n global.atob = function(input = '') {\n let str = input.replace(/=+$/, '');\n let output = '';\n\n if (str.length % 4 == 1) {\n throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++);\n\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n\n return output;\n };\n }\n\n if (typeof window == 'undefined') {\n global.window = {\n WebSocket: WebSocketProvider,\n XMLHttpRequest: XHRProvider,\n indexedDB: IndexedDBProvider,\n URL: {\n createObjectURL: function() {\n throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n }\n }\n }\n }\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n DBCache.setDatabaseProvider(IndexedDBProvider);\n}\n\n// Detect find most useful network transport.\nfunction detectTransport() {\n if (typeof window == 'object') {\n if (window['WebSocket']) {\n return 'ws';\n } else if (window['XMLHttpRequest']) {\n // The browser or node has no websockets, using long polling.\n return 'lp';\n }\n }\n return null;\n}\n\n// btoa replacement. Stock btoa fails on on non-Latin1 strings.\nfunction b64EncodeUnicode(str) {\n // The encodeURIComponent percent-encodes UTF-8 string,\n // then the percent encoding is converted into raw bytes which\n // can be fed into btoa.\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n}\n\n// JSON stringify helper - pre-processor for JSON.stringify\nfunction jsonBuildHelper(key, val) {\n if (val instanceof Date) {\n // Convert javascript Date objects to rfc3339 strings\n val = rfc3339DateString(val);\n } else if (val instanceof AccessMode) {\n val = val.jsonHelper();\n } else if (val === undefined || val === null || val === false ||\n (Array.isArray(val) && val.length == 0) ||\n ((typeof val == 'object') && (Object.keys(val).length == 0))) {\n // strip out empty elements while serializing objects to JSON\n return undefined;\n }\n\n return val;\n};\n\n// Trims very long strings (encoded images) to make logged packets more readable.\nfunction jsonLoggerHelper(key, val) {\n if (typeof val == 'string' && val.length > 128) {\n return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n }\n return jsonBuildHelper(key, val);\n};\n\n// Parse browser user agent to extract browser name and version.\nfunction getBrowserInfo(ua, product) {\n ua = ua || '';\n let reactnative = '';\n // Check if this is a ReactNative app.\n if (/reactnative/i.test(product)) {\n reactnative = 'ReactNative; ';\n }\n let result;\n // Remove useless string.\n ua = ua.replace(' (KHTML, like Gecko)', '');\n // Test for WebKit-based browser.\n let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n if (m) {\n // List of common strings, from more useful to less useful.\n // All unknown strings get the highest (-1) priority.\n const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n let tmp = ua.substr(m.index + m[0].length).split(' ');\n let tokens = [];\n let version; // 1.0 in Version/1.0 or undefined;\n // Split string like 'Name/0.0.0' into ['Name', '0.0.0', 3] where the last element is the priority.\n for (let i = 0; i < tmp.length; i++) {\n let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n if (m2) {\n // Unknown values are highest priority (-1).\n tokens.push([m2[1], m2[2], priority.findIndex((e) => {\n return m2[1].toLowerCase().startsWith(e);\n })]);\n if (m2[1] == 'Version') {\n version = m2[2];\n }\n }\n }\n // Sort by priority: more interesting is earlier than less interesting.\n tokens.sort((a, b) => {\n return a[2] - b[2];\n });\n if (tokens.length > 0) {\n // Return the least common browser string and version.\n if (tokens[0][0].toLowerCase().startsWith('edg')) {\n tokens[0][0] = 'Edge';\n } else if (tokens[0][0] == 'OPR') {\n tokens[0][0] = 'Opera';\n } else if (tokens[0][0] == 'Safari' && version) {\n tokens[0][1] = version;\n }\n result = tokens[0][0] + '/' + tokens[0][1];\n } else {\n // Failed to ID the browser. Return the webkit version.\n result = m[1];\n }\n } else if (/firefox/i.test(ua)) {\n m = /Firefox\\/([.\\d]+)/g.exec(ua);\n if (m) {\n result = 'Firefox/' + m[1];\n } else {\n result = 'Firefox/?';\n }\n } else {\n // Neither AppleWebKit nor Firefox. Try the last resort.\n m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n if (m) {\n result = m[1] + '/' + m[2];\n } else {\n m = ua.split(' ');\n result = m[0];\n }\n }\n\n // Shorten the version to one dot 'a.bb.ccc.d -> a.bb' at most.\n m = result.split('/');\n if (m.length > 1) {\n const v = m[1].split('.');\n const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n result = `${m[0]}/${v[0]}${minor}`;\n }\n return reactnative + result;\n}\n\n/**\n * The main class for interacting with Tinode server.\n */\nexport class Tinode {\n _host;\n _secure;\n\n _appName;\n\n // API Key.\n _apiKey;\n\n // Name and version of the browser.\n _browser = '';\n _platform;\n // Hardware\n _hwos = 'undefined';\n _humanLanguage = 'xx';\n\n // Logging to console enabled\n _loggingEnabled = false;\n // When logging, trip long strings (base64-encoded images) for readability\n _trimLongStrings = false;\n // UID of the currently authenticated user.\n _myUID = null;\n // Status of connection: authenticated or not.\n _authenticated = false;\n // Login used in the last successful basic authentication\n _login = null;\n // Token which can be used for login instead of login/password.\n _authToken = null;\n // Counter of received packets\n _inPacketCount = 0;\n // Counter for generating unique message IDs\n _messageId = Math.floor((Math.random() * 0xFFFF) + 0xFFFF);\n // Information about the server, if connected\n _serverInfo = null;\n // Push notification token. Called deviceToken for consistency with the Android SDK.\n _deviceToken = null;\n\n // Cache of pending promises by message id.\n _pendingPromises = {};\n // The Timeout object returned by the reject expired promises setInterval.\n _expirePromises = null;\n\n // Websocket or long polling connection.\n _connection = null;\n\n // Use indexDB for caching topics and messages.\n _persist = false;\n // IndexedDB wrapper object.\n _db = null;\n\n // Tinode's cache of objects\n _cache = {};\n\n /**\n * Create Tinode object.\n *\n * @param {Object} config - configuration parameters.\n * @param {string} config.appName - Name of the calling application to be reported in the User Agent.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - See {@link Tinode.Connection#transport}.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} config.platform - Optional platform identifier, one of \"ios\", \"web\", \"android\".\n * @param {boolen} config.persist - Use IndexedDB persistent storage.\n * @param {function} onComplete - callback to call when initialization is completed.\n */\n constructor(config, onComplete) {\n this._host = config.host;\n this._secure = config.secure;\n\n // Client-provided application name, format null if no valid credentials were given.\n */\n static credential(meth, val, params, resp) {\n if (typeof meth == 'object') {\n ({\n val,\n params,\n resp,\n meth\n } = meth);\n }\n if (meth && (val || resp)) {\n return [{\n 'meth': meth,\n 'val': val,\n 'resp': resp,\n 'params': params\n }];\n }\n return null;\n }\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n return Topic.topicType(name);\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.isMeTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a 'slf' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'slf' topic, false otherwise.\n */\n static isSelfTopicName(name) {\n return Topic.isSelfTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a group topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.isGroupTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.isP2PTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isCommTopicName(name);\n }\n /**\n * Check if the topic name is a name of a new topic.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return Topic.isNewGroupTopicName(name);\n }\n /**\n * Check if the topic name is a name of a channel.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return Topic.isChannelTopicName(name);\n }\n /**\n * Get information about the current version of this Tinode client library.\n * @returns {string} semantic version of the library, e.g. \"0.15.5-rc1\".\n */\n static getVersion() {\n return Const.VERSION;\n }\n /**\n * To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n *\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n }\n /**\n * To use Tinode in a non browser context, supply indexedDB provider.\n * @static\n *\n * @param idbProvider indexedDB provider, e.g. for nodeJS , require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IndexedDBProvider = idbProvider;\n\n DBCache.setDatabaseProvider(IndexedDBProvider);\n }\n /**\n * Return information about the current name and version of this Tinode library.\n * @static\n *\n * @returns {string} the name of the library and it's version.\n */\n static getLibrary() {\n return Const.LIBRARY;\n }\n /**\n * Check if the given string represents NULL value as defined by Tinode ('\\u2421').\n * @param {string} str - string to check for NULL value.\n * @returns {boolean} true if string represents NULL value, false otherwise.\n */\n static isNullValue(str) {\n return str === Const.DEL_CHAR;\n }\n /**\n * Check if the given seq ID is likely to be issued by the server as oppisite to being temporary locally assigned ID.\n * @param {int} seq - seq ID to check.\n * @returns {boolean} true if seq is likely server-issued, false otherwise.\n */\n static isServerAssignedSeq(seq) {\n return seq > 0 && seq < Const.LOCAL_SEQID;\n }\n\n /**\n * Check if the given string is a valid tag value.\n * @param {string} tag - string to check.\n * @returns {boolean} true if the string is a valid tag value, false otherwise.\n */\n static isValidTagValue(tag) {\n // 4-24 characters, starting with letter or digit, then letters, digits, hyphen, underscore.\n const ALIAS_REGEX = /^[a-z0-9][a-z0-9_\\-]{3,23}$/i;\n return tag && typeof tag == 'string' && tag.length > 3 && tag.length < 24 && ALIAS_REGEX.test(tag);\n }\n\n /**\n * Split fully-qualified tag into prefix and value.\n */\n static tagSplit(tag) {\n if (!tag) {\n return null;\n }\n\n tag = tag.trim();\n\n const splitAt = tag.indexOf(':');\n if (splitAt <= 0) {\n // Invalid syntax.\n return null;\n }\n\n const value = tag.substring(splitAt + 1);\n if (!value) {\n return null;\n }\n return {\n prefix: tag.substring(0, splitAt),\n value: value\n };\n }\n\n /**\n * Set a unique namespace tag.\n * If the tag with this namespace is already present then it's replaced with the new tag.\n * @param uniqueTag tag to add, must be fully-qualified; if null or empty, no action is taken.\n */\n static setUniqueTag(tags, uniqueTag) {\n if (!tags || tags.length == 0) {\n // No tags, just add the new one.\n return [uniqueTag];\n }\n\n const parts = Tinode.tagSplit(uniqueTag)\n if (!parts) {\n // Invalid tag.\n return tags;\n }\n\n // Remove the old tag with the same prefix.\n tags = tags.filter(tag => tag && !tag.startsWith(parts.prefix));\n // Add the new tag.\n tags.push(uniqueTag);\n return tags;\n }\n\n /**\n * Remove a unique tag with the given prefix.\n * @param prefix prefix to remove\n */\n static clearTagPrefix(tags, prefix) {\n if (!tags || tags.length == 0) {\n return [];\n }\n return tags.filter(tag => tag && !tag.startsWith(prefix));\n }\n\n /**\n * Find the first tag with the given prefix.\n * @param prefix prefix to search for.\n * @return the first tag with the given prefix if found or undefined.\n */\n static tagByPrefix(tags, prefix) {\n if (!tags) {\n return undefined;\n }\n\n return tags.find(tag => tag && tag.startsWith(prefix));\n }\n\n // Instance methods.\n\n // Generates unique message IDs\n getNextUniqueId() {\n return (this._messageId != 0) ? '' + this._messageId++ : undefined;\n };\n\n /**\n * Connect to the server.\n *\n * @param {string} host_ - name of the host to connect to.\n * @return {Promise} Promise resolved/rejected when the connection call completes:\n * resolve() is called without parameters, reject() receives the\n * Error as a single parameter.\n */\n connect(host_) {\n return this._connection.connect(host_);\n }\n\n /**\n * Attempt to reconnect to the server immediately.\n *\n * @param {string} force - if true, reconnect even if there is a connection already.\n */\n reconnect(force) {\n this._connection.reconnect(force);\n }\n\n /**\n * Disconnect from the server.\n */\n disconnect() {\n this._connection.disconnect();\n }\n\n /**\n * Clear persistent cache: remove IndexedDB.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n clearStorage() {\n if (this._db.isReady()) {\n return this._db.deleteDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Initialize persistent cache: create IndexedDB cache.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n initStorage() {\n if (!this._db.isReady()) {\n return this._db.initDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Send a network probe message to make sure the connection is alive.\n */\n networkProbe() {\n this._connection.probe();\n }\n\n /**\n * Check for live connection to server.\n *\n * @returns {boolean} true if there is a live connection, false otherwise.\n */\n isConnected() {\n return this._connection.isConnected();\n }\n\n /**\n * Check if connection is authenticated (last login was successful).\n *\n * @returns {boolean} true if authenticated, false otherwise.\n */\n isAuthenticated() {\n return this._authenticated;\n }\n\n /**\n * Add API key and auth token to the relative URL making it usable for getting data\n * from the server in a simple HTTP GET request.\n *\n * @param {string} URL - URL to wrap.\n * @returns {string} URL with appended API key and token, if valid token is present.\n */\n authorizeURL(url) {\n if (typeof url != 'string') {\n return url;\n }\n\n if (isUrlRelative(url)) {\n // Fake base to make the relative URL parseable.\n const base = 'scheme://host/';\n const parsed = new URL(url, base);\n if (this._apiKey) {\n parsed.searchParams.append('apikey', this._apiKey);\n }\n if (this._authToken && this._authToken.token) {\n parsed.searchParams.append('auth', 'token');\n parsed.searchParams.append('secret', this._authToken.token);\n }\n // Convert back to string and strip fake base URL except for the root slash.\n url = parsed.toString().substring(base.length - 1);\n }\n return url;\n }\n\n /**\n * @typedef AccountParams\n * @type {Object}\n * @property {DefAcs=} defacs - Default access parameters for user's me topic.\n * @property {Object=} public - Public application-defined data exposed on me topic.\n * @property {Object=} private - Private application-defined data accessible on me topic.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n * @property {Array.me for authenticated users.\n * @property {string=} anon - Access mode for me for anonymous users.\n */\n\n /**\n * Create or update an account.\n *\n * @param {string} uid - User id to update\n * @param {string} scheme - Authentication scheme; \"basic\" and \"anonymous\" are the currently supported schemes.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n account(uid, scheme, secret, login, params) {\n const pkt = this.#initPacket('acc');\n pkt.acc.user = uid;\n pkt.acc.scheme = scheme;\n pkt.acc.secret = secret;\n // Log in to the new account using selected scheme\n pkt.acc.login = login;\n\n if (params) {\n pkt.acc.desc.defacs = params.defacs;\n pkt.acc.desc.public = params.public;\n pkt.acc.desc.private = params.private;\n pkt.acc.desc.trusted = params.trusted;\n\n pkt.acc.tags = params.tags;\n pkt.acc.cred = params.cred;\n\n pkt.acc.tmpscheme = params.scheme;\n pkt.acc.tmpsecret = params.secret;\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n return this.#send(pkt, pkt.acc.id);\n }\n\n /**\n * Create a new user. Wrapper for {@link Tinode#account}.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccount(scheme, secret, login, params) {\n let promise = this.account(Const.USER_NEW, scheme, secret, login, params);\n if (login) {\n promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n }\n return promise;\n }\n\n /**\n * Create user with 'basic' authentication scheme and immediately\n * use it for authentication. Wrapper for {@link Tinode#account}.\n *\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccountBasic(username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.createAccount('basic',\n b64EncodeUnicode(username + ':' + password), true, params);\n }\n\n /**\n * Update user's credentials for 'basic' authentication scheme. Wrapper for {@link Tinode#account}.\n *\n * @param {string} uid - User ID to update.\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n updateAccountBasic(uid, username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.account(uid, 'basic',\n b64EncodeUnicode(username + ':' + password), false, params);\n }\n\n /**\n * Send handshake to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n hello() {\n const pkt = this.#initPacket('hi');\n\n return this.#send(pkt, pkt.hi.id)\n .then(ctrl => {\n // Reset backoff counter on successful connection.\n this._connection.backoffReset();\n\n // Server response contains server protocol version, build, constraints,\n // session ID for long polling. Save them.\n if (ctrl.params) {\n this._serverInfo = ctrl.params;\n }\n\n if (this.onConnect) {\n this.onConnect();\n }\n\n return ctrl;\n }).catch(err => {\n this._connection.reconnect(true);\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n });\n }\n\n /**\n * Set or refresh the push notifications/device token. If the client is connected,\n * the deviceToken can be sent to the server.\n *\n * @param {string} dt - token obtained from the provider or false,\n * null or undefined to clear the token.\n *\n * @returns true if attempt was made to send the update to the server.\n */\n setDeviceToken(dt) {\n let sent = false;\n // Convert any falsish value to null.\n dt = dt || null;\n if (dt != this._deviceToken) {\n this._deviceToken = dt;\n if (this.isConnected() && this.isAuthenticated()) {\n this.#send({\n 'hi': {\n 'dev': dt || Tinode.DEL_CHAR\n }\n });\n sent = true;\n }\n }\n return sent;\n }\n\n /**\n * @typedef Credential\n * @type {Object}\n * @property {string} meth - validation method.\n * @property {string} val - value to validate (e.g. email or phone number).\n * @property {string} resp - validation response.\n * @property {Object} params - validation parameters.\n */\n /**\n * Authenticate current session.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n login(scheme, secret, cred) {\n const pkt = this.#initPacket('login');\n pkt.login.scheme = scheme;\n pkt.login.secret = secret;\n pkt.login.cred = cred;\n\n return this.#send(pkt, pkt.login.id)\n .then(ctrl => this.#loginSuccessful(ctrl));\n }\n\n /**\n * Wrapper for {@link Tinode#login} with basic authentication\n *\n * @param {string} uname - User name.\n * @param {string} password - Password.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginBasic(uname, password, cred) {\n return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred)\n .then(ctrl => {\n this._login = uname;\n return ctrl;\n });\n }\n\n /**\n * Wrapper for {@link Tinode#login} with token authentication\n *\n * @param {string} token - Token received in response to earlier login.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginToken(token, cred) {\n return this.login('token', token, cred);\n }\n\n /**\n * Send a request for resetting an authentication secret.\n *\n * @param {string} scheme - authentication scheme to reset.\n * @param {string} method - method to use for resetting the secret, such as \"email\" or \"tel\".\n * @param {string} value - value of the credential to use, a specific email address or a phone number.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving the server reply.\n */\n requestResetAuthSecret(scheme, method, value) {\n return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n }\n\n /**\n * @typedef AuthToken\n * @type {Object}\n * @property {string} token - Token value.\n * @property {Date} expires - Token expiration time.\n */\n /**\n * Get stored authentication token.\n *\n * @returns {AuthToken} authentication token.\n */\n getAuthToken() {\n if (this._authToken && (this._authToken.expires.getTime() > Date.now())) {\n return this._authToken;\n } else {\n this._authToken = null;\n }\n return null;\n }\n\n /**\n * Application may provide a saved authentication token.\n *\n * @param {AuthToken} token - authentication token.\n */\n setAuthToken(token) {\n this._authToken = token;\n }\n\n /**\n * @typedef SetParams\n * @type {Object}\n * @property {SetDesc=} desc - Topic initialization parameters when creating a new topic or a new subscription.\n * @property {SetSub=} sub - Subscription initialization parameters.\n * @property {Array.true, detach and unsubscribe, otherwise just detach.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n leave(topic, unsub) {\n const pkt = this.#initPacket('leave', topic);\n pkt.leave.unsub = unsub;\n\n return this.#send(pkt, pkt.leave.id);\n }\n\n /**\n * Create message draft without sending it to the server.\n *\n * @param {string} topic - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Object} new message which can be sent to the server or otherwise used.\n */\n createMessage(topic, content, noEcho) {\n const pkt = this.#initPacket('pub', topic);\n\n let dft = typeof content == 'string' ? Drafty.parse(content) : content;\n if (dft && !Drafty.isPlainText(dft)) {\n pkt.pub.head = {\n mime: Drafty.getContentType()\n };\n content = dft;\n }\n pkt.pub.noecho = noEcho;\n pkt.pub.content = content;\n\n return pkt.pub;\n }\n\n /**\n * Publish {data} message to topic.\n *\n * @param {string} topicName - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publish(topicName, content, noEcho) {\n return this.publishMessage(\n this.createMessage(topicName, content, noEcho)\n );\n }\n\n /**\n * Publish message to topic. The message should be created by {@link Tinode#createMessage}.\n *\n * @param {Object} pub - Message to publish.\n * @param {Array.'me' topic.\n *\n * @param {string} method - validation method such as 'email' or 'tel'.\n * @param {string} value - validation value, i.e. 'alice@example.com'.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n const pkt = this.#initPacket('del', Const.TOPIC_ME);\n pkt.del.what = 'cred';\n pkt.del.cred = {\n meth: method,\n val: value\n };\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Request to delete account of the current user.\n *\n * @param {boolean} hard - hard-delete user.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCurrentUser(hard) {\n const pkt = this.#initPacket('del', null);\n pkt.del.what = 'user';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id).then(_ => {\n this._myUID = null;\n });\n }\n\n /**\n * Notify server that a message or messages were read or received. Does NOT return promise.\n *\n * @param {string} topicName - Name of the topic where the mesage is being aknowledged.\n * @param {string} what - Action being aknowledged, either \"read\" or \"recv\".\n * @param {number} seq - Maximum id of the message being acknowledged.\n * @throws {Error} if seq is invalid.\n */\n note(topicName, what, seq) {\n if (seq <= 0 || seq >= Const.LOCAL_SEQID) {\n throw new Error(`Invalid message id ${seq}`);\n }\n\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = what;\n pkt.note.seq = seq;\n this.#send(pkt);\n }\n\n /**\n * Broadcast a key-press notification to topic subscribers. Used to show\n * typing notifications \"user X is typing...\".\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {string=} type - notification to send, default is 'kp'.\n */\n noteKeyPress(topicName, type) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = type || 'kp';\n this.#send(pkt);\n }\n\n /**\n * Send a video call notification to topic subscribers (including dialing,\n * hangup, etc.).\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} evt - Call event.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(topicName, seq, evt, payload) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'call';\n pkt.note.event = evt;\n pkt.note.payload = payload;\n this.#send(pkt, pkt.note.id);\n }\n\n /**\n * Get a named topic, either pull it from cache or create a new instance.\n * There is a single instance of topic for each name.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested or newly created topic or undefined if topic name is invalid.\n */\n getTopic(topicName) {\n let topic = this.#cacheGet('topic', topicName);\n if (!topic && topicName) {\n if (topicName == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (topicName == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(topicName);\n }\n // Cache management.\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Don't save to DB here: a record will be added when the topic is subscribed.\n }\n return topic;\n }\n\n /**\n * Get a named topic from cache.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested topic or undefined if topic is not found in cache.\n */\n cacheGetTopic(topicName) {\n return this.#cacheGet('topic', topicName);\n }\n\n /**\n * Remove named topic from cache.\n *\n * @param {string} topicName - Name of the topic to remove from cache.\n */\n cacheRemTopic(topicName) {\n this.#cacheDel('topic', topicName);\n }\n\n /**\n * Iterate over cached topics.\n *\n * @param {Function} func - callback to call for each topic.\n * @param {Object} context - 'this' inside the 'func'.\n */\n mapTopics(func, context) {\n this.#cacheMap('topic', func, context);\n }\n\n /**\n * Check if named topic is already present in cache.\n *\n * @param {string} topicName - Name of the topic to check.\n * @returns {boolean} true if topic is found in cache, false otherwise.\n */\n isTopicCached(topicName) {\n return !!this.#cacheGet('topic', topicName);\n }\n\n /**\n * Generate unique name like 'new123456' suitable for creating a new group topic.\n *\n * @param {boolean} isChan - if the topic is channel-enabled.\n * @returns {string} name which can be used for creating a new group topic.\n */\n newGroupTopicName(isChan) {\n return (isChan ? Const.TOPIC_NEW_CHAN : Const.TOPIC_NEW) + this.getNextUniqueId();\n }\n\n /**\n * Instantiate 'me' topic or get it from cache.\n *\n * @returns {TopicMe} Instance of 'me' topic.\n */\n getMeTopic() {\n return this.getTopic(Const.TOPIC_ME);\n }\n\n /**\n * Instantiate 'fnd' (find) topic or get it from cache.\n *\n * @returns {Topic} Instance of 'fnd' topic.\n */\n getFndTopic() {\n return this.getTopic(Const.TOPIC_FND);\n }\n\n /**\n * Create a new {@link LargeFileHelper} instance\n *\n * @returns {LargeFileHelper} instance of a {@link Tinode.LargeFileHelper}.\n */\n getLargeFileHelper() {\n return new LargeFileHelper(this, Const.PROTOCOL_VERSION);\n }\n\n /**\n * Get the UID of the the current authenticated user.\n *\n * @returns {string} UID of the current user or undefined if the session is not yet\n * authenticated or if there is no session.\n */\n getCurrentUserID() {\n return this._myUID;\n }\n\n /**\n * Check if the given user ID is equal to the current user's UID.\n *\n * @param {string} uid - UID to check.\n *\n * @returns {boolean} true if the given UID belongs to the current logged in user.\n */\n isMe(uid) {\n return this._myUID === uid;\n }\n\n /**\n * Get login used for last successful authentication.\n *\n * @returns {string} login last used successfully or undefined.\n */\n getCurrentLogin() {\n return this._login;\n }\n\n /**\n * Return information about the server: protocol version and build timestamp.\n *\n * @returns {Object} build and version of the server or null if there is no connection or\n * if the first server response has not been received yet.\n */\n getServerInfo() {\n return this._serverInfo;\n }\n\n /**\n * Report a topic for abuse. Wrapper for {@link Tinode#publish}.\n *\n * @param {string} action - the only supported action is 'report'.\n * @param {string} target - name of the topic being reported.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n report(action, target) {\n return this.publish(Const.TOPIC_SYS, Drafty.attachJSON(null, {\n 'action': action,\n 'target': target\n }));\n }\n\n /**\n * Return server-provided configuration value.\n *\n * @param {string} name of the value to return.\n * @param {Object} defaultValue to return in case the parameter is not set or not found.\n *\n * @returns {Object} named value.\n */\n getServerParam(name, defaultValue) {\n return this._serverInfo && this._serverInfo[name] || defaultValue;\n }\n\n /**\n * Toggle console logging. Logging is off by default.\n *\n * @param {boolean} enabled - Set to true to enable logging to console.\n * @param {boolean} trimLongStrings - Set to true to trim long strings.\n */\n enableLogging(enabled, trimLongStrings) {\n this._loggingEnabled = enabled;\n this._trimLongStrings = enabled && trimLongStrings;\n }\n\n /**\n * Set UI language to report to the server. Must be called before 'hi' is sent, otherwise it will not be used.\n *\n * @param {string} hl - human (UI) language, like \"en_US\" or \"zh-Hans\".\n */\n setHumanLanguage(hl) {\n if (hl) {\n this._humanLanguage = hl;\n }\n }\n\n /**\n * Check if given topic is online.\n *\n * @param {string} name of the topic to test.\n * @returns {boolean} true if topic is online, false otherwise.\n */\n isTopicOnline(name) {\n const topic = this.#cacheGet('topic', name);\n return topic && topic.online;\n }\n\n /**\n * Get access mode for the given contact.\n *\n * @param {string} name of the topic to query.\n * @returns {AccessMode} access mode if topic is found, null otherwise.\n */\n getTopicAccessMode(name) {\n const topic = this.#cacheGet('topic', name);\n return topic ? topic.acs : null;\n }\n\n /**\n * Include message ID into all subsequest messages to server instructin it to send aknowledgemens.\n * Required for promises to function. Default is \"on\".\n *\n * @param {boolean} status - Turn aknowledgemens on or off.\n * @deprecated\n */\n wantAkn(status) {\n if (status) {\n this._messageId = Math.floor((Math.random() * 0xFFFFFF) + 0xFFFFFF);\n } else {\n this._messageId = 0;\n }\n }\n\n // Callbacks:\n /**\n * Callback to report when the websocket is opened. The callback has no parameters.\n *\n * @type {onWebsocketOpen}\n */\n onWebsocketOpen = undefined;\n\n /**\n * @typedef ServerParams\n *\n * @type {Object}\n * @property {string} ver - Server version\n * @property {string} build - Server build\n * @property {string=} sid - Session ID, long polling connections only.\n */\n\n /**\n * @callback onConnect\n * @param {number} code - Result code\n * @param {string} text - Text epxplaining the completion, i.e \"OK\" or an error message.\n * @param {ServerParams} params - Parameters returned by the server.\n */\n /**\n * Callback to report when connection with Tinode server is established.\n * @type {onConnect}\n */\n onConnect = undefined;\n\n /**\n * Callback to report when connection is lost. The callback has no parameters.\n * @type {onDisconnect}\n */\n onDisconnect = undefined;\n\n /**\n * @callback onLogin\n * @param {number} code - NUmeric completion code, same as HTTP status codes.\n * @param {string} text - Explanation of the completion code.\n */\n /**\n * Callback to report login completion.\n * @type {onLogin}\n */\n onLogin = undefined;\n\n /**\n * Callback to receive {ctrl} (control) messages.\n * @type {onCtrlMessage}\n */\n onCtrlMessage = undefined;\n\n /**\n * Callback to recieve {data} (content) messages.\n * @type {onDataMessage}\n */\n onDataMessage = undefined;\n\n /**\n * Callback to receive {pres} (presence) messages.\n * @type {onPresMessage}\n */\n onPresMessage = undefined;\n\n /**\n * Callback to receive all messages as objects.\n * @type {onMessage}\n */\n onMessage = undefined;\n\n /**\n * Callback to receive all messages as unparsed text.\n * @type {onRawMessage}\n */\n onRawMessage = undefined;\n\n /**\n * Callback to receive server responses to network probes. See {@link Tinode#networkProbe}\n * @type {onNetworkProbe}\n */\n onNetworkProbe = undefined;\n\n /**\n * Callback to be notified when exponential backoff is iterating.\n * @type {onAutoreconnectIteration}\n */\n onAutoreconnectIteration = undefined;\n};\n\n// Exported constants\nTinode.MESSAGE_STATUS_NONE = Const.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = Const.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = Const.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = Const.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = Const.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = Const.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = Const.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = Const.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = Const.MESSAGE_STATUS_TO_ME;\n\n// Unicode [del] symbol.\nTinode.DEL_CHAR = Const.DEL_CHAR;\n\n// Names of keys to server-provided configuration limits.\nTinode.MAX_MESSAGE_SIZE = 'maxMessageSize';\nTinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nTinode.MIN_TAG_LENGTH = 'minTagLength';\nTinode.MAX_TAG_LENGTH = 'maxTagLength';\nTinode.MAX_TAG_COUNT = 'maxTagCount';\nTinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nTinode.REQ_CRED_VALIDATORS = 'reqCred';\nTinode.MSG_DELETE_AGE = 'msgDelAge';\n\n// Tinode URI topic ID prefix, 'scheme:path/'.\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:topic/';\n\n// Tag prefixes for alias, email, phone.\nTinode.TAG_ALIAS = Const.TAG_ALIAS;\nTinode.TAG_EMAIL = Const.TAG_EMAIL;\nTinode.TAG_PHONE = Const.TAG_PHONE;\n"],"names":["AccessMode","constructor","acs","given","decode","want","mode","checkFlag","#checkFlag","val","side","flag","includes","Error","str","_BITMASK","_NONE","bitmask","_JOIN","_READ","_WRITE","_PRES","_APPROVE","_SHARE","_DELETE","_OWNER","m0","i","length","bit","charAt","toUpperCase","encode","_INVALID","res","update","upd","action","val0","parts","split","diff","a1","a2","toString","jsonHelper","setMode","m","updateMode","u","getMode","setGiven","g","updateGiven","getGiven","setWant","w","updateWant","getWant","getMissing","getExcessive","updateAll","isOwner","isPresencer","isMuted","isJoiner","isReader","isWriter","isApprover","isAdmin","isSharer","isDeleter","CBuffer","comparator","undefined","unique","buffer","compare_","unique_","a","b","findNearest","#findNearest","elem","arr","exact","start","end","pivot","found","idx","insertSorted","#insertSorted","count","splice","getAt","at","getLast","filter","findLast","put","insert","arguments","Array","isArray","delAt","r","delRange","since","before","reset","forEach","callback","startIdx","beforeIdx","context","Math","max","min","call","find","nearest","isEmpty","CommError","message","code","name","PACKAGE_VERSION","PROTOCOL_VERSION","VERSION","LIBRARY","TOPIC_NEW","TOPIC_NEW_CHAN","TOPIC_ME","TOPIC_FND","TOPIC_SYS","TOPIC_SLF","TOPIC_CHAN","TOPIC_GRP","TOPIC_P2P","USER_NEW","LOCAL_SEQID","MESSAGE_STATUS_NONE","MESSAGE_STATUS_QUEUED","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","MESSAGE_STATUS_TO_ME","EXPIRE_PROMISES_TIMEOUT","EXPIRE_PROMISES_PERIOD","RECV_TIMEOUT","DEFAULT_MESSAGES_PAGE","DEL_CHAR","MAX_PINNED_COUNT","TAG_ALIAS","TAG_EMAIL","TAG_PHONE","jsonParseHelper","WebSocketProvider","XHRProvider","NETWORK_ERROR","NETWORK_ERROR_TEXT","NETWORK_USER","NETWORK_USER_TEXT","_BOFF_BASE","_BOFF_MAX_ITER","_BOFF_JITTER","makeBaseUrl","host","protocol","version","apiKey","url","Connection","log","_","boffTimer","boffIteration","boffClosed","socket","secure","autoreconnect","initialized","config","version_","autoreconnect_","transport","init_lp","init_ws","setNetworkProviders","wsProvider","xhrProvider","logger","l","connect","host_","force","Promise","reject","reconnect","disconnect","sendText","msg","isConnected","probe","backoffReset","boffReset","boffReconnect","#boffReconnect","clearTimeout","timeout","pow","random","onAutoreconnectIteration","setTimeout","prom","catch","boffStop","#boffStop","#boffReset","#init_lp","XDR_UNSENT","XDR_OPENED","XDR_HEADERS_RECEIVED","XDR_LOADING","XDR_DONE","_lpURL","_poller","_sender","lp_sender","url_","sender","onreadystatechange","evt","readyState","status","open","lp_poller","resolve","poller","promiseCompleted","pkt","JSON","parse","responseText","ctrl","params","sid","send","onOpen","onMessage","onDisconnect","text","abort","err","#init_ws","OPEN","close","conn","onerror","onopen","onclose","onmessage","data","DB_VERSION","DB_NAME","IDBProvider","DB","onError","db","disabled","mapObjects","#mapObjects","source","trx","transaction","event","target","error","objectStore","getAll","onsuccess","result","topic","initDatabase","req","onupgradeneeded","createObjectStore","keyPath","dellog","createIndex","deleteDatabase","onblocked","isReady","updTopic","oncomplete","get","serializeTopic","commit","markTopicAsDeleted","deleted","_deleted","remTopic","delete","IDBKeyRange","only","bound","Number","MAX_SAFE_INTEGER","mapTopics","deserializeTopic","src","updUser","uid","pub","public","remUser","mapUsers","getUser","user","updSubscription","topicName","sub","serializeSubscription","mapSubscriptions","addMessage","add","serializeMessage","updMessageStatus","seq","_status","remMessages","from","to","range","readMessages","query","ranges","key","hi","low","msgs","concat","push","limit","openCursor","cursor","value","continue","addDelLog","delId","clear","readDelLog","entries","map","entry","maxDelId","index","topic_fields","#deserializeTopic","f","hasOwnProperty","tags","_tags","setAccessMode","read","unread","#serializeTopic","dst","getAccessMode","#serializeSubscription","fields","#serializeMessage","setDatabaseProvider","idbProvider","MAX_FORM_ELEMENTS","MAX_PREVIEW_ATTACHMENTS","MAX_PREVIEW_DATA_SIZE","JSON_MIME_TYPE","DRAFTY_MIME_TYPE","ALLOWED_ENT_FIELDS","segmenter","Intl","Segmenter","INLINE_STYLES","FMT_WEIGHT","ENTITY_TYPES","dataName","pack","test","re","slice","FORMAT_TAGS","AU","html_tag","md_tag","isVoid","BN","BR","CO","DL","EM","EX","FM","HD","HL","HT","IM","LN","MN","RW","QQ","ST","VC","VD","base64toObjectUrl","b64","contentType","bin","atob","buf","ArrayBuffer","Uint8Array","charCodeAt","URL","createObjectURL","Blob","type","base64toDataUrl","DECORATORS","props","href","id","act","ref","mime","Drafty","duration","size","tmpPreviewUrl","_tempPreview","previewUrl","downloadUrl","width","height","title","alt","state","preview","premime","poster","preref","txt","fmt","ent","init","plainText","content","lines","entityMap","entityIndex","blx","line","spans","entities","tag","spannify","block","sort","toSpanTree","chunks","chunkify","drafty","draftify","extractEntities","entity","tp","offset","len","segments","segment","ele","toGraphemeValues","stringToGraphemes","s","correctAt","correctLen","isEmptyObject","append","first","second","insertImage","imageDesc","ex","refurl","bits","filename","urlPromise","_processing","then","insertVideo","videoDesc","urls","insertAudio","audioDesc","videoCall","audioOnly","aonly","updateVideoCall","Object","assign","quote","header","body","appendLineBreak","mention","appendLink","linkData","appendImage","appendAudio","attachFile","attachmentDesc","wrapInto","style","wrapAsForm","insertButton","actionType","actionValue","refUrl","indexOf","appendButton","attachJSON","UNSAFE_toHTML","doc","tree","draftyToTree","htmlFormatter","values","join","treeBottomUp","format","original","formatter","shorten","light","shortenTree","lightEntity","treeToDrafty","forwardedContent","rmMention","node","parent","treeTopDown","lTrim","replyContent","convMNnQQnBR","startsWith","children","attachmentsToEnd","forwarding","toPlainText","isPlainText","toMarkdown","mdFormatter","def","isValid","txt_type","hasAttachments","attachments","hasEntities","styles","sanitizeEntities","copyEntData","getDownloadUrl","entData","isProcessing","getPreviewUrl","getEntitySize","getEntityMimeType","tagName","attrValue","getContentType","span","chunk","chld","re_start","re_end","exec","start_offset","lastIndexOf","end_offset","last","graphemes","spansToTree","flatten","child","addNode","n","att","subspans","inner","keymap","c","keys","newKey","transformer","stack","pop","tail","shortener","allow","lightCopy","trimStart","shift","match","extracted","el","startAt","plain","dc","obj","graphemeIndices","graphemeIndex","charIndex","indices","module","exports","Const","Topic","mergeToCache","TopicFnd","_contacts","callbacks","_processMetaSubs","subs","updateCount","getOwnPropertyNames","indexBy","onMetaSub","onSubsUpdated","publish","setMeta","getPrototypeOf","prototype","checkTagUniqueness","caller","subscribe","desc","getMeta","startMetaQuery","withTags","build","meta","t","contacts","cb","isUrlRelative","addURLParam","relUrl","window","location","origin","searchParams","substring","LargeFileHelper","tinode","_tinode","_version","_apiKey","_authToken","getAuthToken","xhr","uploadWithBaseUrl","baseUrl","avatarFor","onProgress","onSuccess","onFailure","base","endsWith","instance","setRequestHeader","token","toResolve","toReject","upload","onprogress","e","lengthComputable","loaded","total","onload","response","statusText","onabort","form","FormData","set","getNextUniqueId","_secure","_host","download","relativeUrl","mimetype","responseType","link","document","createElement","display","setAttribute","appendChild","click","removeChild","revokeObjectURL","reader","FileReader","readAsText","cancel","setNetworkProvider","mergeObj","TopicMe","onContactUpdate","_processMetaDesc","turnOff","_db","_updateCachedUser","_myUID","cont","online","seen","when","Date","_refreshContact","onMetaDesc","cacheRemTopic","recv","getTopic","_new","isP2PTopicName","_cachePutUser","_noForwarding","_processMetaCreds","creds","cr","_credentials","findIndex","meth","done","resp","onCredsUpdated","_routePres","pres","what","_resetSub","withDesc","cacheGetTopic","_updateReceived","withLaterOneSub","tgt","dacs","touched","ua","_attached","withOneSub","dummy","onPres","delCredential","method","isCommType","getContact","isArchived","private","arch","getCredentials","listToRanges","normalizeRanges","MetaGetBuilder","get_desc_ims","#get_desc_ims","updated","get_subs_ims","#get_subs_ims","isP2PType","_lastSubsUpdate","withData","withLaterData","_maxSeq","withDataRanges","withDataList","list","withEarlierData","_minSeq","ims","withLaterDesc","withSub","userOrTopic","opts","getType","withLaterSub","withCred","withAux","withDel","withLaterDel","_maxDel","extract","normalizeArray","created","trusted","_users","_queuedSeqId","_noEarlierMsgs","_recvNotificationTimer","_aux","_messageVersions","_messages","_delayedLeaveTimer","onData","onMeta","onInfo","onTagsUpdated","onAuxUpdated","onDeleteTopic","onAllMessagesReceived","topicType","types","isMeTopicName","isSelfTopicName","isGroupTopicName","isCommTopicName","isNewGroupTopicName","isChannelTopicName","isReplacementMsg","#isReplacementMsg","head","replace","isSubscribed","getParams","setParams","_cacheDelSelf","_cachePutSelf","ts","me","getMeTopic","createMessage","noEcho","publishMessage","_sending","_failed","swapMessageId","_maybeUpdateMessageVersionsCache","_routeData","publishDraft","_getQueuedSeqId","getCurrentUserID","noecho","_cancelled","_fatal","leave","unsub","_gone","leaveDelayed","delay","getMessagesPage","gaps","newer","_loadMessages","msgHasMoreMessages","getPinnedMessages","pins","aux","remains","_processMetaTags","cred","_processMetaAux","subscriber","am","invite","archive","pinMessage","pin","pinned","changed","delMessages","hard","tosend","del","rec","flushMessageRange","flushMessage","delMessagesAll","hardDel","_all","delMessagesList","delMessagesEdits","messageVersions","delTopic","delSubscription","note","_updateMyReadRecv","noteRecv","noteRead","noteKeyPress","noteRecording","payload","oldVal","doUpdate","userDesc","_cacheGetUser","p2pPeerDesc","subscribers","alias","origSeq","versions","messages","sinceId","beforeId","unused1","unused2","latest","latestMsgVersion","_origTs","_origSeq","findMessage","latestMessage","maxMsgSeq","minMsgSeq","maxClearId","messageCount","queuedMessages","msgReceiptCount","msgReadCount","msgRecvCount","maxSeq","gap","prev","p","expected","isNewMessage","seqId","fromId","untilId","newSeqId","numMessages","cancelSend","msgStatus","getDefaultAccess","defacs","isMeType","isSelfType","isChannelType","isGroupType","isMe","targetSeq","parseInt","targetMsg","outgoing","webrtc","incoming","vc","_routeInfo","_routeMeta","_processDelMessages","delseq","isTopicCached","info","_allMessagesReceived","cached","date","isNaN","isValidDate","d","getTime","rfc3339DateString","pad","sp","repeat","millis","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","ignore","prop","cache","newval","simplify","out","trim","toLowerCase","item","pos","ary","r1","r2","reduce","clipOutRange","clip","clipInRange","DBCache","WebSocket","XMLHttpRequest","IndexedDBProvider","indexedDB","initForNonBrowserApp","chars","btoa","global","input","output","charCode","bc","bs","String","fromCharCode","detectTransport","b64EncodeUnicode","encodeURIComponent","toSolidBytes","p1","jsonBuildHelper","jsonLoggerHelper","getBrowserInfo","product","reactnative","priority","tmp","substr","tokens","m2","v","minor","Tinode","_appName","_browser","_platform","_hwos","_humanLanguage","_loggingEnabled","_trimLongStrings","_authenticated","_login","_inPacketCount","_messageId","floor","_serverInfo","_deviceToken","_pendingPromises","_expirePromises","_connection","_persist","_cache","onComplete","appName","platform","navigator","userAgent","language","dispatchMessage","connectionOpen","disconnected","promise","persist","cacheGet","attachCacheToTopic","cachePut","all","dateString","_len","args","_key","console","makePromise","#makePromise","execPromise","#execPromise","onOK","errorText","#send","stringify","#dispatchMessage","onRawMessage","onNetworkProbe","onCtrlMessage","onMetaMessage","onDataMessage","onPresMessage","onInfoMessage","#connectionOpen","setInterval","expires","hello","#disconnected","clearInterval","cacheMap","getUserAgent","#getUserAgent","initPacket","#initPacket","#cachePut","#cacheGet","cacheDel","#cacheDel","#cacheMap","func","#attachCacheToTopic","_cacheDelUser","loginSuccessful","#loginSuccessful","onLogin","credential","getVersion","getLibrary","isNullValue","isServerAssignedSeq","isValidTagValue","ALIAS_REGEX","tagSplit","splitAt","prefix","setUniqueTag","uniqueTag","clearTagPrefix","tagByPrefix","clearStorage","initStorage","networkProbe","isAuthenticated","authorizeURL","parsed","account","scheme","secret","login","acc","tmpscheme","tmpsecret","extra","createAccount","createAccountBasic","username","password","updateAccountBasic","onConnect","setDeviceToken","dt","sent","loginBasic","uname","loginToken","requestResetAuthSecret","now","setAuthToken","dft","oobNotification","xfrom","finally","modeGiven","modeWant","delCurrentUser","newGroupTopicName","isChan","getFndTopic","getLargeFileHelper","getCurrentLogin","getServerInfo","report","getServerParam","defaultValue","enableLogging","enabled","trimLongStrings","setHumanLanguage","hl","isTopicOnline","getTopicAccessMode","wantAkn","onWebsocketOpen","MAX_MESSAGE_SIZE","MAX_SUBSCRIBER_COUNT","MIN_TAG_LENGTH","MAX_TAG_LENGTH","MAX_TAG_COUNT","MAX_FILE_UPLOAD_SIZE","REQ_CRED_VALIDATORS","MSG_DELETE_AGE","URI_TOPIC_ID_PREFIX"],"sourceRoot":""}
\ No newline at end of file
diff --git a/umd/tinode.prod.js b/umd/tinode.prod.js
index 26ad64d6..525bc055 100644
--- a/umd/tinode.prod.js
+++ b/umd/tinode.prod.js
@@ -1 +1 @@
-!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.tinode=t():e.tinode=t()}(this,(()=>(()=>{"use strict";var e={767:e=>{const t="application/json",s=["act","height","duration","incoming","mime","name","premime","preref","preview","ref","size","state","url","val","width"],i=new Intl.Segmenter,n=[{name:"ST",start:/(?:^|[\W_])(\*)[^\s*]/,end:/[^\s*](\*)(?=$|[\W_])/},{name:"EM",start:/(?:^|\W)(_)[^\s_]/,end:/[^\s_](_)(?=$|\W)/},{name:"DL",start:/(?:^|[\W_])(~)[^\s~]/,end:/[^\s~](~)(?=$|[\W_])/},{name:"CO",start:/(?:^|\W)(`)[^`]/,end:/[^`](`)(?=$|\W)/}],r=["QQ"],a=[{name:"LN",dataName:"url",pack:function(e){return/^[a-z]+:\/\//i.test(e)||(e="http://"+e),{url:e}},re:/(?:(?:https?|ftp):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/gi},{name:"MN",dataName:"val",pack:function(e){return{val:e.slice(1)}},re:/\B@([\p{L}\p{N}][._\p{L}\p{N}]*[\p{L}\p{N}])/gu},{name:"HT",dataName:"val",pack:function(e){return{val:e.slice(1)}},re:/\B#([\p{L}\p{N}][._\p{L}\p{N}]*[\p{L}\p{N}])/gu}],o={AU:{html_tag:"audio",md_tag:void 0,isVoid:!1},BN:{html_tag:"button",md_tag:void 0,isVoid:!1},BR:{html_tag:"br",md_tag:"\n",isVoid:!0},CO:{html_tag:"tt",md_tag:"`",isVoid:!1},DL:{html_tag:"del",md_tag:"~",isVoid:!1},EM:{html_tag:"i",md_tag:"_",isVoid:!1},EX:{html_tag:"",md_tag:void 0,isVoid:!0},FM:{html_tag:"div",md_tag:void 0,isVoid:!1},HD:{html_tag:"",md_tag:void 0,isVoid:!1},HL:{html_tag:"span",md_tag:void 0,isVoid:!1},HT:{html_tag:"a",md_tag:void 0,isVoid:!1},IM:{html_tag:"img",md_tag:void 0,isVoid:!1},LN:{html_tag:"a",md_tag:void 0,isVoid:!1},MN:{html_tag:"a",md_tag:void 0,isVoid:!1},RW:{html_tag:"div",md_tag:void 0,isVoid:!1},QQ:{html_tag:"div",md_tag:void 0,isVoid:!1},ST:{html_tag:"b",md_tag:"*",isVoid:!1},VC:{html_tag:"div",md_tag:void 0,isVoid:!1},VD:{html_tag:"video",md_tag:void 0,isVoid:!1}};function c(e,t,s){if(!e)return null;try{const s=atob(e),i=s.length,n=new ArrayBuffer(i),r=new Uint8Array(n);for(let e=0;e"",close:e=>""},EM:{open:e=>"",close:e=>""},DL:{open:e=>"",close:e=>""},CO:{open:e=>"",close:e=>""},BR:{open:e=>"
",close:e=>""},HD:{open:e=>"",close:e=>""},HL:{open:e=>'',close:e=>""},LN:{open:e=>'',close:e=>"",props:e=>e?{href:e.url,target:"_blank"}:null},MN:{open:e=>'',close:e=>"",props:e=>e?{id:e.val}:null},HT:{open:e=>'',close:e=>"",props:e=>e?{id:e.val}:null},BN:{open:e=>"",props:e=>e?{"data-act":e.act,"data-val":e.val,"data-name":e.name,"data-ref":e.ref}:null},AU:{open:e=>'",props:e=>e?{src:e.ref||c(e.val,e.mime,l.logger),"data-preload":e.ref?"metadata":"auto","data-duration":e.duration,"data-name":e.name,"data-size":e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}:null},IM:{open:e=>{const t=h(e._tempPreview,e.mime),s=c(e.val,e.mime,l.logger),i=e.ref||s;return(e.name?'':"")+''},close:e=>e.name?"":"",props:e=>e?{src:h(e._tempPreview,e.mime)||e.ref||c(e.val,e.mime,l.logger),title:e.name,alt:e.name,"data-width":e.width,"data-height":e.height,"data-name":e.name,"data-size":e.ref?0|e.size:e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}:null},FM:{open:e=>"
'},close:e=>"",props:e=>{if(!e)return null;const t=e.preref||c(e.preview,e.premime||"image/jpeg",l.logger);return{src:t,"data-src":e.ref||c(e.val,e.mime,l.logger),"data-width":e.width,"data-height":e.height,"data-preload":e.ref?"metadata":"auto","data-preview":t,"data-duration":0|e.duration,"data-name":e.name,"data-size":e.ref?0|e.size:e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}}}},l=function(){this.txt="",this.fmt=[],this.ent=[]};function u(e,t,s,i){const n=[];if(0==i.length)return[];for(let s in i){const r=i[s];r.at>t&&n.push({txt:e.slice(t,r.at)});const a={tp:r.tp},o=u(e,r.at+1,r.end,r.children);o.length>0?a.children=o:a.txt=r.txt,n.push(a),t=r.end+1}return t
s.end?(t.push(e[i]),s=e[i]):e[i].end<=s.end&&s.children.push(e[i]);for(let e in t)t[e].children=p(t[e].children);return t}function g(e){if(!e)return null;e="string"==typeof e?{txt:e}:e;let{txt:t,fmt:s,ent:i}=e;if(t=t||"",Array.isArray(i)||(i=[]),!Array.isArray(s)||0==s.length){if(0==i.length)return{text:t};s=[{at:0,len:0,key:0}]}const n=[],a=[];s.forEach((e=>{if(!e||"object"!=typeof e)return;if(!["undefined","number"].includes(typeof e.at))return;if(!["undefined","number"].includes(typeof e.len))return;let s=0|e.at,r=0|e.len;if(r<0)return;let o=e.key||0;i.length>0&&("number"!=typeof o||o<0||o>=i.length)||(s<=-1?a.push({start:-1,end:0,key:o}):s+r>E(t).length||(e.tp?n.push({type:e.tp,start:s,end:s+r}):i.length>0&&"object"==typeof i[o]&&n.push({start:s,end:s+r,key:o})))})),n.sort(((e,t)=>{let s=e.start-t.start;return 0!=s?s:(s=t.end-e.end,0!=s?s:r.indexOf(t.type)-r.indexOf(e.type))})),a.length>0&&n.push(...a),n.forEach((e=>{i.length>0&&!e.type&&i[e.key]&&"object"==typeof i[e.key]&&(e.type=i[e.key].tp,e.data=i[e.key].data),e.type||(e.type="HD")}));const o=E(t);let c=f({},o,0,o.length,n);return c=b(c,(function(e){if(Array.isArray(e.children)&&1==e.children.length){const t=e.children[0];if(e.type)t.type||t.children||(e.text=t.text,delete e.children);else{const s=e.parent;(e=t).parent=s}}return e})),c}function m(e,t){return t?(e.children||(e.children=[]),e.text&&(e.children.push({text:e.text,parent:e}),delete e.text),t.parent=e,e.children.push(t),e):e}function f(e,t,s,i,n){if(!n||0==n.length)return se.segment)).join("")}),e;for(let i=0;it?this.buffer[n-1]:void 0,n{if(this._isReplacementMsg(e))return;const r=this.latestMsgVersion(e.seq)||e;r._origTs||(r._origTs=r.ts,r._origSeq=r.seq,r.ts=e.ts,r.seq=e.seq),t.push({data:r,idx:n})}),e,r,{}),t.forEach(((e,s)=>{n.call(i,e.data,s>0?t[s-1].data:void 0,s{e._resetSub()}));for(let t in this._pendingPromises){const s=this._pendingPromises[t];s&&s.reject&&s.reject(e)}this._pendingPromises={},this.onDisconnect&&this.onDisconnect(e)}#q(){return this._appName+" ("+(this._browser?this._browser+"; ":"")+this._hwos+"); "+a}#I(e,t){switch(e){case"hi":return{hi:{id:this.getNextUniqueId(),ver:r,ua:this.#q(),dev:this._deviceToken,lang:this._humanLanguage,platf:this._platform}};case"acc":return{acc:{id:this.getNextUniqueId(),user:null,scheme:null,secret:null,tmpscheme:null,tmpsecret:null,login:!1,tags:null,desc:{},cred:{}}};case"login":return{login:{id:this.getNextUniqueId(),scheme:null,secret:null}};case"sub":return{sub:{id:this.getNextUniqueId(),topic:t,set:{},get:{}}};case"leave":return{leave:{id:this.getNextUniqueId(),topic:t,unsub:!1}};case"pub":return{pub:{id:this.getNextUniqueId(),topic:t,noecho:!1,head:null,content:{}}};case"get":return{get:{id:this.getNextUniqueId(),topic:t,what:null,desc:{},sub:{},data:{}}};case"set":return{set:{id:this.getNextUniqueId(),topic:t,desc:{},sub:{},tags:[],ephemeral:{}}};case"del":return{del:{id:this.getNextUniqueId(),topic:t,what:null,delseq:null,user:null,hard:!1}};case"note":return{note:{topic:t,what:null,seq:void 0}};default:throw new Error(`Unknown packet type requested: ${e}`)}}#N(e,t,s){this._cache[e+":"+t]=s}#A(e,t){return this._cache[e+":"+t]}#O(e,t){delete this._cache[e+":"+t]}#U(e,t,s){const i=e?e+":":void 0;for(let e in this._cache)if((!i||0==e.indexOf(i))&&t.call(s,this._cache[e],e))break}#D(e){e._tinode=this,e._cacheGetUser=e=>{const t=this.#A("user",e);if(t)return{user:e,public:b({},t)}},e._cachePutUser=(e,t)=>{this.#N("user",e,b({},t.public))},e._cacheDelUser=e=>{this.#O("user",e)},e._cachePutSelf=t=>{this.#N("topic",e.name,e)},e._cacheDelSelf=t=>{this.#O("topic",e.name)}}#j(e){return e.params&&e.params.user?(this._myUID=e.params.user,this._authenticated=e&&e.code>=200&&e.code<300,e.params&&e.params.token&&e.params.expires?this._authToken={token:e.params.token,expires:e.params.expires}:this._authToken=null,this.onLogin&&this.onLogin(e.code,e.text),e):e}static credential(e,t,s,i){return"object"==typeof e&&({val:t,params:s,resp:i,meth:e}=e),e&&(t||i)?[{meth:e,val:t,resp:i,params:s}]:null}static topicType(e){return V.topicType(e)}static isMeTopicName(e){return V.isMeTopicName(e)}static isGroupTopicName(e){return V.isGroupTopicName(e)}static isP2PTopicName(e){return V.isP2PTopicName(e)}static isCommTopicName(e){return V.isCommTopicName(e)}static isNewGroupTopicName(e){return V.isNewGroupTopicName(e)}static isChannelTopicName(e){return V.isChannelTopicName(e)}static getVersion(){return r}static setNetworkProviders(e,t){U=e,q=t,E.setNetworkProviders(U,q),O.setNetworkProvider(q)}static setDatabaseProvider(e){I=e,N.setDatabaseProvider(I)}static getLibrary(){return a}static isNullValue(e){return e===p}static isServerAssignedSeq(e){return e>0&&e0&&(r.extra={attachments:n.attachments.filter((e=>f(e)))})),this.#C(r,r.acc.id)}createAccount(e,t,s,i){let n=this.account("new",e,t,s,i);return s&&(n=n.then((e=>this.#j(e)))),n}createAccountBasic(e,t,s){return e=e||"",t=t||"",this.createAccount("basic",G(e+":"+t),!0,s)}updateAccountBasic(e,t,s,i){return t=t||"",s=s||"",this.account(e,"basic",G(t+":"+s),!1,i)}hello(){const e=this.#I("hi");return this.#C(e,e.hi.id).then((e=>(this._connection.backoffReset(),e.params&&(this._serverInfo=e.params),this.onConnect&&this.onConnect(),e))).catch((e=>{this._connection.reconnect(!0),this.onDisconnect&&this.onDisconnect(e)}))}setDeviceToken(e){let t=!1;return(e=e||null)!=this._deviceToken&&(this._deviceToken=e,this.isConnected()&&this.isAuthenticated()&&(this.#C({hi:{dev:e||B.DEL_CHAR}}),t=!0)),t}login(e,t,s){const i=this.#I("login");return i.login.scheme=e,i.login.secret=t,i.login.cred=s,this.#C(i,i.login.id).then((e=>this.#j(e)))}loginBasic(e,t,s){return this.login("basic",G(e+":"+t),s).then((t=>(this._login=e,t)))}loginToken(e,t){return this.login("token",e,t)}requestResetAuthSecret(e,t,s){return this.login("reset",G(e+":"+t+":"+s))}getAuthToken(){return this._authToken&&this._authToken.expires.getTime()>Date.now()?this._authToken:(this._authToken=null,null)}setAuthToken(e){this._authToken=e}subscribe(e,t,s){const i=this.#I("sub",e);if(e||(e=o),i.sub.get=t,s){if(s.sub&&(i.sub.set.sub=s.sub),s.desc){const t=s.desc;B.isNewGroupTopicName(e)?i.sub.set.desc=t:B.isP2PTopicName(e)&&t.defacs&&(i.sub.set.desc={defacs:t.defacs})}Array.isArray(s.attachments)&&s.attachments.length>0&&(i.extra={attachments:s.attachments.filter((e=>f(e)))}),s.tags&&(i.sub.set.tags=s.tags)}return this.#C(i,i.sub.id)}leave(e,t){const s=this.#I("leave",e);return s.leave.unsub=t,this.#C(s,s.leave.id)}createMessage(e,t,s){const i=this.#I("pub",e);let n="string"==typeof t?k().parse(t):t;return n&&!k().isPlainText(n)&&(i.pub.head={mime:k().getContentType()},t=n),i.pub.noecho=s,i.pub.content=t,i.pub}publish(e,t,s){return this.publishMessage(this.createMessage(e,t,s))}publishMessage(e,t){(e=Object.assign({},e)).seq=void 0,e.from=void 0,e.ts=void 0;const s={pub:e};return t&&(s.extra={attachments:t.filter((e=>f(e)))}),this.#C(s,e.id)}oobNotification(e){switch(this.logger("oob: "+(this._trimLongStrings?JSON.stringify(e,F):e)),e.what){case"msg":if(!e.seq||e.seq<1||!e.topic)break;if(!this.isConnected())break;const t=this.#A("topic",e.topic);if(!t)break;if(t.isSubscribed())break;t.maxMsgSeq()",close:e=>""},CO:{open:e=>"",close:e=>""},BR:{open:e=>"
",close:e=>""},HD:{open:e=>"",close:e=>""},HL:{open:e=>'',close:e=>""},LN:{open:e=>'',close:e=>"",props:e=>e?{href:e.url,target:"_blank"}:null},MN:{open:e=>'',close:e=>"",props:e=>e?{id:e.val}:null},HT:{open:e=>'',close:e=>"",props:e=>e?{id:e.val}:null},BN:{open:e=>"",props:e=>e?{"data-act":e.act,"data-val":e.val,"data-name":e.name,"data-ref":e.ref}:null},AU:{open:e=>'",props:e=>e?{src:e.ref||h(e.val,e.mime,d.logger),"data-preload":e.ref?"metadata":"auto","data-duration":e.duration,"data-name":e.name,"data-size":e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}:null},IM:{open:e=>{const t=c(e._tempPreview,e.mime),s=h(e.val,e.mime,d.logger),i=e.ref||s;return(e.name?'':"")+''},close:e=>e.name?"":"",props:e=>e?{src:c(e._tempPreview,e.mime)||e.ref||h(e.val,e.mime,d.logger),title:e.name,alt:e.name,"data-width":e.width,"data-height":e.height,"data-name":e.name,"data-size":e.ref?0|e.size:e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}:null},FM:{open:e=>"
'},close:e=>"",props:e=>{if(!e)return null;const t=e.preref||h(e.preview,e.premime||"image/jpeg",d.logger);return{src:t,"data-src":e.ref||h(e.val,e.mime,d.logger),"data-width":e.width,"data-height":e.height,"data-preload":e.ref?"metadata":"auto","data-preview":t,"data-duration":0|e.duration,"data-name":e.name,"data-size":e.ref?0|e.size:e.val?.75*e.val.length|0:0|e.size,"data-mime":e.mime}}}},d=function(){this.txt="",this.fmt=[],this.ent=[]};function u(e,t,s,i){const n=[];if(0==i.length)return[];for(let s in i){const r=i[s];r.at>t&&n.push({txt:e.slice(t,r.at)});const a={tp:r.tp},o=u(e,r.at+1,r.end,r.children);o.length>0?a.children=o:a.txt=r.txt,n.push(a),t=r.end+1}return t
s.end?(t.push(e[i]),s=e[i]):e[i].end<=s.end&&s.children.push(e[i]);for(let e in t)t[e].children=p(t[e].children);return t}function g(e){if(!e)return null;e="string"==typeof e?{txt:e}:e;let{txt:t,fmt:s,ent:i}=e;if(t=t||"",Array.isArray(i)||(i=[]),!Array.isArray(s)||0==s.length){if(0==i.length)return{text:t};s=[{at:0,len:0,key:0}]}const n=[],a=[];s.forEach((e=>{if(!e||"object"!=typeof e)return;if(!["undefined","number"].includes(typeof e.at))return;if(!["undefined","number"].includes(typeof e.len))return;let s=0|e.at,r=0|e.len;if(r<0)return;let o=e.key||0;i.length>0&&("number"!=typeof o||o<0||o>=i.length)||(s<=-1?a.push({start:-1,end:0,key:o}):s+r>A(t).length||(e.tp?n.push({type:e.tp,start:s,end:s+r}):i.length>0&&"object"==typeof i[o]&&n.push({start:s,end:s+r,key:o})))})),n.sort(((e,t)=>{let s=e.start-t.start;return 0!=s?s:(s=t.end-e.end,0!=s?s:r.indexOf(t.type)-r.indexOf(e.type))})),a.length>0&&n.push(...a),n.forEach((e=>{i.length>0&&!e.type&&i[e.key]&&"object"==typeof i[e.key]&&(e.type=i[e.key].tp,e.data=i[e.key].data),e.type||(e.type="HD")}));const o=A(t);let h=f({},o,0,o.length,n);return h=b(h,(function(e){if(Array.isArray(e.children)&&1==e.children.length){const t=e.children[0];if(e.type)t.type||t.children||(e.text=t.text,delete e.children);else{const s=e.parent;(e=t).parent=s}}return e})),h}function m(e,t){return t?(e.children||(e.children=[]),e.text&&(e.children.push({text:e.text,parent:e}),delete e.text),t.parent=e,e.children.push(t),e):e}function f(e,t,s,i,n){if(!n||0==n.length)return se.segment)).join("")}),e;for(let i=0;it?this.buffer[n-1]:void 0,ne.startsWith(g)));if(e)return e.substring(6)}subscriber(e){return this._users[e]}messageVersions(e,t,s){if(!t)return;const i=this._messageVersions[e];i&&i.forEach(t,void 0,void 0,s)}messages(e,t,s,i){const n=e||this.onData;if(n){const e="number"==typeof t?this._messages.find({seq:t},!0):void 0,r="number"==typeof s?this._messages.find({seq:s},!0):void 0;if(-1!=e&&-1!=r){let t=[];this._messages.forEach(((e,s,i,n)=>{if(z.#S(e))return;if(e._deleted)return;const r=this.latestMsgVersion(e.seq)||e;r._origTs||(r._origTs=r.ts,r._origSeq=r.seq,r.ts=e.ts,r.seq=e.seq),t.push({data:r,idx:n})}),e,r,{}),t.forEach(((e,s)=>{n.call(i,e.data,s>0?t[s-1].data:void 0,s{e._resetSub()}));for(let t in this._pendingPromises){const s=this._pendingPromises[t];s&&s.reject&&s.reject(e)}this._pendingPromises={},this.onDisconnect&&this.onDisconnect(e)}#U(){return this._appName+" ("+(this._browser?this._browser+"; ":"")+this._hwos+"); "+a}#O(e,t){switch(e){case"hi":return{hi:{id:this.getNextUniqueId(),ver:r,ua:this.#U(),dev:this._deviceToken,lang:this._humanLanguage,platf:this._platform}};case"acc":return{acc:{id:this.getNextUniqueId(),user:null,scheme:null,secret:null,tmpscheme:null,tmpsecret:null,login:!1,tags:null,desc:{},cred:{}}};case"login":return{login:{id:this.getNextUniqueId(),scheme:null,secret:null}};case"sub":return{sub:{id:this.getNextUniqueId(),topic:t,set:{},get:{}}};case"leave":return{leave:{id:this.getNextUniqueId(),topic:t,unsub:!1}};case"pub":return{pub:{id:this.getNextUniqueId(),topic:t,noecho:!1,head:null,content:{}}};case"get":return{get:{id:this.getNextUniqueId(),topic:t,what:null,desc:{},sub:{},data:{}}};case"set":return{set:{id:this.getNextUniqueId(),topic:t,desc:{},sub:{},tags:[],aux:{}}};case"del":return{del:{id:this.getNextUniqueId(),topic:t,what:null,delseq:null,user:null,hard:!1}};case"note":return{note:{topic:t,what:null,seq:void 0}};default:throw new Error(`Unknown packet type requested: ${e}`)}}#N(e,t,s){this._cache[e+":"+t]=s}#D(e,t){return this._cache[e+":"+t]}#j(e,t){delete this._cache[e+":"+t]}#q(e,t,s){const i=e?e+":":void 0;for(let e in this._cache)if((!i||0==e.indexOf(i))&&t.call(s,this._cache[e],e))break}#R(e){e._tinode=this,e._cacheGetUser=e=>{const t=this.#D("user",e);if(t)return{user:e,public:w({},t)}},e._cachePutUser=(e,t)=>{this.#N("user",e,w({},t.public))},e._cacheDelUser=e=>{this.#j("user",e)},e._cachePutSelf=t=>{this.#N("topic",e.name,e)},e._cacheDelSelf=t=>{this.#j("topic",e.name)}}#L(e){return e.params&&e.params.user?(this._myUID=e.params.user,this._authenticated=e&&e.code>=200&&e.code<300,e.params&&e.params.token&&e.params.expires?this._authToken={token:e.params.token,expires:e.params.expires}:this._authToken=null,this.onLogin&&this.onLogin(e.code,e.text),e):e}static credential(e,t,s,i){return"object"==typeof e&&({val:t,params:s,resp:i,meth:e}=e),e&&(t||i)?[{meth:e,val:t,resp:i,params:s}]:null}static topicType(e){return z.topicType(e)}static isMeTopicName(e){return z.isMeTopicName(e)}static isSelfTopicName(e){return z.isSelfTopicName(e)}static isGroupTopicName(e){return z.isGroupTopicName(e)}static isP2PTopicName(e){return z.isP2PTopicName(e)}static isCommTopicName(e){return z.isCommTopicName(e)}static isNewGroupTopicName(e){return z.isNewGroupTopicName(e)}static isChannelTopicName(e){return z.isChannelTopicName(e)}static getVersion(){return r}static setNetworkProviders(e,t){O=e,j=t,R.setNetworkProviders(O,j),V.setNetworkProvider(j)}static setDatabaseProvider(e){L=e,I.setDatabaseProvider(L)}static getLibrary(){return a}static isNullValue(e){return e===p}static isServerAssignedSeq(e){return e>0&&e3&&e.length<24&&/^[a-z0-9][a-z0-9_\-]{3,23}$/i.test(e)}static tagSplit(e){if(!e)return null;const t=(e=e.trim()).indexOf(":");if(t<=0)return null;const s=e.substring(t+1);return s?{prefix:e.substring(0,t),value:s}:null}static setUniqueTag(e,t){if(!e||0==e.length)return[t];const s=Q.tagSplit(t);return s?((e=e.filter((e=>e&&!e.startsWith(s.prefix)))).push(t),e):e}static clearTagPrefix(e,t){return e&&0!=e.length?e.filter((e=>e&&!e.startsWith(t))):[]}static tagByPrefix(e,t){if(e)return e.find((e=>e&&e.startsWith(t)))}getNextUniqueId(){return 0!=this._messageId?""+this._messageId++:void 0}connect(e){return this._connection.connect(e)}reconnect(e){this._connection.reconnect(e)}disconnect(){this._connection.disconnect()}clearStorage(){return this._db.isReady()?this._db.deleteDatabase():Promise.resolve()}initStorage(){return this._db.isReady()?Promise.resolve():this._db.initDatabase()}networkProbe(){this._connection.probe()}isConnected(){return this._connection.isConnected()}isAuthenticated(){return this._authenticated}authorizeURL(e){if("string"!=typeof e)return e;if(_(e)){const t="scheme://host/",s=new URL(e,t);this._apiKey&&s.searchParams.append("apikey",this._apiKey),this._authToken&&this._authToken.token&&(s.searchParams.append("auth","token"),s.searchParams.append("secret",this._authToken.token)),e=s.toString().substring(t.length-1)}return e}account(e,t,s,i,n){const r=this.#O("acc");return r.acc.user=e,r.acc.scheme=t,r.acc.secret=s,r.acc.login=i,n&&(r.acc.desc.defacs=n.defacs,r.acc.desc.public=n.public,r.acc.desc.private=n.private,r.acc.desc.trusted=n.trusted,r.acc.tags=n.tags,r.acc.cred=n.cred,r.acc.tmpscheme=n.scheme,r.acc.tmpsecret=n.secret,Array.isArray(n.attachments)&&n.attachments.length>0&&(r.extra={attachments:n.attachments.filter((e=>_(e)))})),this.#C(r,r.acc.id)}createAccount(e,t,s,i){let n=this.account("new",e,t,s,i);return s&&(n=n.then((e=>this.#L(e)))),n}createAccountBasic(e,t,s){return e=e||"",t=t||"",this.createAccount("basic",K(e+":"+t),!0,s)}updateAccountBasic(e,t,s,i){return t=t||"",s=s||"",this.account(e,"basic",K(t+":"+s),!1,i)}hello(){const e=this.#O("hi");return this.#C(e,e.hi.id).then((e=>(this._connection.backoffReset(),e.params&&(this._serverInfo=e.params),this.onConnect&&this.onConnect(),e))).catch((e=>{this._connection.reconnect(!0),this.onDisconnect&&this.onDisconnect(e)}))}setDeviceToken(e){let t=!1;return(e=e||null)!=this._deviceToken&&(this._deviceToken=e,this.isConnected()&&this.isAuthenticated()&&(this.#C({hi:{dev:e||Q.DEL_CHAR}}),t=!0)),t}login(e,t,s){const i=this.#O("login");return i.login.scheme=e,i.login.secret=t,i.login.cred=s,this.#C(i,i.login.id).then((e=>this.#L(e)))}loginBasic(e,t,s){return this.login("basic",K(e+":"+t),s).then((t=>(this._login=e,t)))}loginToken(e,t){return this.login("token",e,t)}requestResetAuthSecret(e,t,s){return this.login("reset",K(e+":"+t+":"+s))}getAuthToken(){return this._authToken&&this._authToken.expires.getTime()>Date.now()?this._authToken:(this._authToken=null,null)}setAuthToken(e){this._authToken=e}subscribe(e,t,s){const i=this.#O("sub",e);if(e||(e=o),i.sub.get=t,s){if(s.sub&&(i.sub.set.sub=s.sub),s.desc){const t=s.desc;Q.isNewGroupTopicName(e)?i.sub.set.desc=t:Q.isP2PTopicName(e)&&t.defacs&&(i.sub.set.desc={defacs:t.defacs})}Array.isArray(s.attachments)&&s.attachments.length>0&&(i.extra={attachments:s.attachments.filter((e=>_(e)))}),s.tags&&(i.sub.set.tags=s.tags),s.aux&&(i.sub.set.aux=s.aux)}return this.#C(i,i.sub.id)}leave(e,t){const s=this.#O("leave",e);return s.leave.unsub=t,this.#C(s,s.leave.id)}createMessage(e,t,s){const i=this.#O("pub",e);let n="string"==typeof t?q().parse(t):t;return n&&!q().isPlainText(n)&&(i.pub.head={mime:q().getContentType()},t=n),i.pub.noecho=s,i.pub.content=t,i.pub}publish(e,t,s){return this.publishMessage(this.createMessage(e,t,s))}publishMessage(e,t){(e=Object.assign({},e)).seq=void 0,e.from=void 0,e.ts=void 0;const s={pub:e};return t&&(s.extra={attachments:t.filter((e=>_(e)))}),this.#C(s,e.id)}oobNotification(e){switch(this.logger("oob: "+(this._trimLongStrings?JSON.stringify(e,H):e)),e.what){case"msg":if(!e.seq||e.seq<1||!e.topic)break;if(!this.isConnected())break;const t=this.#D("topic",e.topic);if(!t)break;if(t.isSubscribed())break;t.maxMsgSeq()\n *
\n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> abc def\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n * abc\n * this is *bold*, `code` and _italic_, ~strike~\n * combined *bold and _italic_*\n * an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n * this is a @mention and a #hashtag in a string\n * second #hashtag\n *
\n *\n * Sample JSON representation of the text above:\n * {\n * \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n * \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n * \"fmt\": [\n * { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n * { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n * { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n * { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n * { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n * { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n * ],\n * \"ent\": [\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n * { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n * { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n * ]\n * }\n */\n\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst JSON_MIME_TYPE = 'application/json';\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview',\n 'ref', 'size', 'state', 'url', 'val', 'width'\n];\n\n// Intl.Segmenter is not available in Firefox 124 and earlier. FF 125 with support for Intl.Segmenter\n// was released on April 15, 2024. Polyfill is included in the top package (webapp).\nconst segmenter = new Intl.Segmenter();\n\n// Regular expressions for parsing inline formats. Javascript does not support lookbehind,\n// so it's a bit messy.\nconst INLINE_STYLES = [\n // Strong = bold, *bold text*\n {\n name: 'ST',\n start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n end: /[^\\s*](\\*)(?=$|[\\W_])/\n },\n // Emphesized = italic, _italic text_\n {\n name: 'EM',\n start: /(?:^|\\W)(_)[^\\s_]/,\n end: /[^\\s_](_)(?=$|\\W)/\n },\n // Deleted, ~strike this though~\n {\n name: 'DL',\n start: /(?:^|[\\W_])(~)[^\\s~]/,\n end: /[^\\s~](~)(?=$|[\\W_])/\n },\n // Code block `this is monospace`\n {\n name: 'CO',\n start: /(?:^|\\W)(`)[^`]/,\n end: /[^`](`)(?=$|\\W)/\n }\n];\n\n// Relative weights of formatting spans. Greater index in array means greater weight.\nconst FMT_WEIGHT = ['QQ'];\n\n// RegExps for entity extraction (RF = reference)\nconst ENTITY_TYPES = [\n // URLs\n {\n name: 'LN',\n dataName: 'url',\n pack: function(val) {\n // Check if the protocol is specified, if not use http\n if (!/^[a-z]+:\\/\\//i.test(val)) {\n val = 'http://' + val;\n }\n return {\n url: val\n };\n },\n re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n },\n // Mentions @user (must be 2 or more characters)\n {\n name: 'MN',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n },\n // Hashtags #hashtag, like metion 2 or more characters.\n {\n name: 'HT',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n }\n];\n\n// HTML tag name suggestions\nconst FORMAT_TAGS = {\n AU: {\n html_tag: 'audio',\n md_tag: undefined,\n isVoid: false\n },\n BN: {\n html_tag: 'button',\n md_tag: undefined,\n isVoid: false\n },\n BR: {\n html_tag: 'br',\n md_tag: '\\n',\n isVoid: true\n },\n CO: {\n html_tag: 'tt',\n md_tag: '`',\n isVoid: false\n },\n DL: {\n html_tag: 'del',\n md_tag: '~',\n isVoid: false\n },\n EM: {\n html_tag: 'i',\n md_tag: '_',\n isVoid: false\n },\n EX: {\n html_tag: '',\n md_tag: undefined,\n isVoid: true\n },\n FM: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n HD: {\n html_tag: '',\n md_tag: undefined,\n isVoid: false\n },\n HL: {\n html_tag: 'span',\n md_tag: undefined,\n isVoid: false\n },\n HT: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n IM: {\n html_tag: 'img',\n md_tag: undefined,\n isVoid: false\n },\n LN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n MN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n RW: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false,\n },\n QQ: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n ST: {\n html_tag: 'b',\n md_tag: '*',\n isVoid: false\n },\n VC: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VD: {\n html_tag: 'video',\n md_tag: undefined,\n isVoid: false\n }\n};\n\n// Convert base64-encoded string into Blob.\nfunction base64toObjectUrl(b64, contentType, logger) {\n if (!b64) {\n return null;\n }\n\n try {\n const bin = atob(b64);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return URL.createObjectURL(new Blob([buf], {\n type: contentType\n }));\n } catch (err) {\n if (logger) {\n logger(\"Drafty: failed to convert object.\", err.message);\n }\n }\n\n return null;\n}\n\nfunction base64toDataUrl(b64, contentType) {\n if (!b64) {\n return null;\n }\n contentType = contentType || 'image/jpeg';\n return 'data:' + contentType + ';base64,' + b64;\n}\n\n// Helpers for converting Drafty to HTML.\nconst DECORATORS = {\n // Visial styles\n ST: {\n open: _ => '',\n close: _ => ''\n },\n EM: {\n open: _ => '',\n close: _ => ''\n },\n DL: {\n open: _ => '',\n close: _ => ''\n },\n CO: {\n open: _ => '',\n close: _ => ''\n },\n // Line break\n BR: {\n open: _ => '
',\n close: _ => ''\n },\n // Hidden element\n HD: {\n open: _ => '',\n close: _ => ''\n },\n // Highlighted element.\n HL: {\n open: _ => '',\n close: _ => ''\n },\n // Link (URL)\n LN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n href: data.url,\n target: '_blank'\n } : null;\n },\n },\n // Mention\n MN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Hashtag\n HT: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Button\n BN: {\n open: _ => '',\n props: (data) => {\n return data ? {\n 'data-act': data.act,\n 'data-val': data.val,\n 'data-name': data.name,\n 'data-ref': data.ref\n } : null;\n },\n },\n // Audio recording\n AU: {\n open: (data) => {\n const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n return '',\n props: (data) => {\n if (!data) return null;\n return {\n // Embedded data or external link.\n src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-duration': data.duration,\n 'data-name': data.name,\n 'data-size': data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0),\n 'data-mime': data.mime,\n };\n }\n },\n // Image\n IM: {\n open: data => {\n // Don't use data.ref for preview: it's a security risk.\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n const downloadUrl = data.ref || previewUrl;\n return (data.name ? '' : '') +\n '';\n },\n close: data => {\n return (data.name ? '' : '');\n },\n props: data => {\n if (!data) return null;\n return {\n // Temporary preview, or permanent preview, or external link.\n src: base64toDataUrl(data._tempPreview, data.mime) ||\n data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n title: data.name,\n alt: data.name,\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n },\n },\n // Form - structured layout of elements.\n FM: {\n open: _ => '
';\n },\n close: _ => '',\n props: data => {\n if (!data) return null;\n const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return {\n // Embedded data or external link.\n src: poster,\n 'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-preview': poster,\n 'data-duration': data.duration | 0,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n }\n },\n};\n\n/**\n * The main object which performs all the formatting actions.\n * @class Drafty\n * @constructor\n */\nconst Drafty = function() {\n this.txt = '';\n this.fmt = [];\n this.ent = [];\n}\n\n/**\n * Initialize Drafty document to a plain text string.\n *\n * @param {string} plainText - string to use as Drafty content.\n *\n * @returns new Drafty document or null is plainText is not a string or undefined.\n */\nDrafty.init = function(plainText) {\n if (typeof plainText == 'undefined') {\n plainText = '';\n } else if (typeof plainText != 'string') {\n return null;\n }\n\n return {\n txt: plainText\n };\n}\n\n/**\n * Parse plain text into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} content - plain-text content to parse.\n * @return {Drafty} parsed document or null if the source is not plain text.\n */\nDrafty.parse = function(content) {\n // Make sure we are parsing strings only.\n if (typeof content != 'string') {\n return null;\n }\n\n // Split text into lines. It makes further processing easier.\n const lines = content.split(/\\r?\\n/);\n\n // Holds entities referenced from text\n const entityMap = [];\n const entityIndex = {};\n\n // Processing lines one by one, hold intermediate result in blx.\n const blx = [];\n lines.forEach((line) => {\n let spans = [];\n let entities;\n\n // Find formatted spans in the string.\n // Try to match each style.\n INLINE_STYLES.forEach((tag) => {\n // Each style could be matched multiple times.\n spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n });\n\n let block;\n if (spans.length == 0) {\n block = {\n txt: line\n };\n } else {\n // Sort spans by style occurence early -> late, then by length: first long then short.\n spans.sort((a, b) => {\n const diff = a.at - b.at;\n return diff != 0 ? diff : b.end - a.end;\n });\n\n // Convert an array of possibly overlapping spans into a tree.\n spans = toSpanTree(spans);\n\n // Build a tree representation of the entire string, not\n // just the formatted parts.\n const chunks = chunkify(line, 0, line.length, spans);\n\n const drafty = draftify(chunks, 0);\n\n block = {\n txt: drafty.txt,\n fmt: drafty.fmt\n };\n }\n\n // Extract entities from the cleaned up string.\n entities = extractEntities(block.txt);\n if (entities.length > 0) {\n const ranges = [];\n for (let i in entities) {\n // {offset: match['index'], unique: match[0], len: match[0].length, data: ent.packer(), type: ent.name}\n const entity = entities[i];\n let index = entityIndex[entity.unique];\n if (!index) {\n index = entityMap.length;\n entityIndex[entity.unique] = index;\n entityMap.push({\n tp: entity.type,\n data: entity.data\n });\n }\n ranges.push({\n at: entity.offset,\n len: entity.len,\n key: index\n });\n }\n block.ent = ranges;\n }\n\n blx.push(block);\n });\n\n const result = {\n txt: ''\n };\n\n // Merge lines and save line breaks as BR inline formatting.\n if (blx.length > 0) {\n result.txt = blx[0].txt;\n result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n\n if (result.fmt.length) {\n const segments = segmenter.segment(result.txt);\n for (const ele of result.fmt) {\n ({\n at: ele.at,\n len: ele.len\n } =\n toGraphemeValues(ele, segments, result.txt));\n }\n }\n\n for (let i = 1; i < blx.length; i++) {\n const block = blx[i];\n const offset = stringToGraphemes(result.txt).length + 1;\n\n result.fmt.push({\n tp: 'BR',\n len: 1,\n at: offset - 1\n });\n\n let segments = {};\n\n result.txt += ' ' + block.txt;\n if (block.fmt) {\n segments = segmenter.segment(block.txt);\n result.fmt = result.fmt.concat(\n block.fmt.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n if (block.ent) {\n if (isEmptyObject(segments)) {\n segments = segmenter.segment(block.txt);\n }\n result.fmt = result.fmt.concat(\n block.ent.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n }\n\n if (result.fmt.length == 0) {\n delete result.fmt;\n }\n\n if (entityMap.length > 0) {\n result.ent = entityMap;\n }\n }\n return result;\n}\n\n/**\n * Append one Drafty document to another.\n *\n * @param {Drafty} first - Drafty document to append to.\n * @param {Drafty|string} second - Drafty document or string being appended.\n *\n * @return {Drafty} first document with the second appended to it.\n */\nDrafty.append = function(first, second) {\n if (!first) {\n return second;\n }\n if (!second) {\n return first;\n }\n\n first.txt = first.txt || '';\n const len = stringToGraphemes(first.txt).length;\n\n if (typeof second == 'string') {\n first.txt += second;\n } else if (second.txt) {\n first.txt += second.txt;\n }\n\n if (Array.isArray(second.fmt)) {\n first.fmt = first.fmt || [];\n if (Array.isArray(second.ent)) {\n first.ent = first.ent || [];\n }\n second.fmt.forEach(src => {\n const fmt = {\n at: (src.at | 0) + len,\n len: src.len | 0\n };\n // Special case for the outside of the normal rendering flow styles.\n if (src.at == -1) {\n fmt.at = -1;\n fmt.len = 0;\n }\n if (src.tp) {\n fmt.tp = src.tp;\n } else {\n fmt.key = first.ent.length;\n first.ent.push(second.ent[src.key || 0]);\n }\n first.fmt.push(fmt);\n });\n }\n\n return first;\n}\n\n/**\n * Description of an image to attach.\n * @typedef {Object} ImageDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the image, e.g. \"image/png\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded image content. Could be null/undefined.\n * @property {string} preview - base64-encoded thumbnail of the image.\n * @property {integer} width - width of the image.\n * @property {integer} height - height of the image.\n * @property {string} filename - file name suggestion for downloading the image.\n * @property {integer} size - size of the image in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded image preview used during upload process; not serializable.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {integer} at - index where the object is inserted. The length of the image is always 1.\n * @param {ImageDesc} imageDesc - object with image paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertImage = function(content, at, imageDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'IM',\n data: {\n mime: imageDesc.mime,\n ref: imageDesc.refurl,\n val: imageDesc.bits || imageDesc.preview,\n width: imageDesc.width,\n height: imageDesc.height,\n name: imageDesc.filename,\n size: imageDesc.size | 0,\n }\n };\n\n if (imageDesc.urlPromise) {\n ex.data._tempPreview = imageDesc._tempPreview;\n ex.data._processing = true;\n imageDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of a video to attach.\n * @typedef {Object} VideoDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the video, e.g. \"video/mpeg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - in-band base64-encoded image data. Could be null/undefined.\n * @property {string} preview - base64-encoded screencapture from the video. Could be null/undefined.\n * @property {string} preref - reference to screencapture from the video. Could be null/undefined.\n * @property {integer} width - width of the video.\n * @property {integer} height - height of the video.\n * @property {integer} duration - duration of the video.\n * @property {string} filename - file name suggestion for downloading the video.\n * @property {integer} size - size of the video in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded screencapture used during upload process; not serializable.\n * @property {Promise} urlPromise - array of two promises, which return URLs of video and preview uploads correspondingly\n * (either could be null).\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add video to.\n * @param {integer} at - index where the object is inserted. The length of the video is always 1.\n * @param {VideoDesc} videoDesc - object with video paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertVideo = function(content, at, videoDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'VD',\n data: {\n mime: videoDesc.mime,\n ref: videoDesc.refurl,\n val: videoDesc.bits,\n preref: videoDesc.preref,\n preview: videoDesc.preview,\n width: videoDesc.width,\n height: videoDesc.height,\n duration: videoDesc.duration | 0,\n name: videoDesc.filename,\n size: videoDesc.size | 0,\n }\n };\n\n if (videoDesc.urlPromise) {\n ex.data._tempPreview = videoDesc._tempPreview;\n ex.data._processing = true;\n videoDesc.urlPromise.then(\n urls => {\n ex.data.ref = urls[0];\n ex.data.preref = urls[1];\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of an audio recording to attach.\n * @typedef {Object} AudioDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the audio, e.g. \"audio/ogg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded audio content. Could be null/undefined.\n * @property {integer} duration - duration of the record in milliseconds.\n * @property {string} preview - base64 encoded short array of amplitude values 0..100.\n * @property {string} filename - file name suggestion for downloading the audio.\n * @property {integer} size - size of the recording in bytes. Treat is as an untrusted hint.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert audio recording into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add audio record to.\n * @param {integer} at - index where the object is inserted. The length of the record is always 1.\n * @param {AudioDesc} audioDesc - object with the audio paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertAudio = function(content, at, audioDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'AU',\n data: {\n mime: audioDesc.mime,\n val: audioDesc.bits,\n duration: audioDesc.duration | 0,\n preview: audioDesc.preview,\n name: audioDesc.filename,\n size: audioDesc.size | 0,\n ref: audioDesc.refurl\n }\n };\n\n if (audioDesc.urlPromise) {\n ex.data._processing = true;\n audioDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Create a (self-contained) video call Drafty document.\n * @memberof Drafty\n * @static\n * @param {boolean} audioOnly
true if the call is initially audio-only.\n * @returns Video Call drafty document.\n */\nDrafty.videoCall = function(audioOnly) {\n const content = {\n txt: ' ',\n fmt: [{\n at: 0,\n len: 1,\n key: 0\n }],\n ent: [{\n tp: 'VC',\n data: {\n aonly: audioOnly\n },\n }]\n };\n return content;\n}\n\n/**\n * Update video call (VC) entity with the new status and duration.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - VC document to update.\n * @param {object} params - new video call parameters.\n * @param {string} params.state - state of video call.\n * @param {number} params.duration - duration of the video call in milliseconds.\n *\n * @returns the same document with update applied.\n */\nDrafty.updateVideoCall = function(content, params) {\n // The video element could be just a format or a format + entity.\n // Must ensure it's the latter first.\n const fmt = ((content || {}).fmt || [])[0];\n if (!fmt) {\n // Unrecognized content.\n return content;\n }\n\n let ent;\n if (fmt.tp == 'VC') {\n // Just a format, convert to format + entity.\n delete fmt.tp;\n fmt.key = 0;\n ent = {\n tp: 'VC'\n };\n content.ent = [ent];\n } else {\n ent = (content.ent || [])[fmt.key | 0];\n if (!ent || ent.tp != 'VC') {\n // Not a VC entity.\n return content;\n }\n }\n ent.data = ent.data || {};\n Object.assign(ent.data, params);\n return content;\n}\n\n/**\n * Create a quote to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} header - Quote header (title, etc.).\n * @param {string} uid - UID of the author to mention.\n * @param {Drafty} body - Body of the quoted message.\n *\n * @returns Reply quote Drafty doc with the quote formatting.\n */\nDrafty.quote = function(header, uid, body) {\n const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n\n // Wrap into a quote.\n quote.fmt.push({\n at: 0,\n len: stringToGraphemes(quote.txt).length,\n tp: 'QQ'\n });\n\n return quote;\n}\n\n/**\n * Create a Drafty document with a mention.\n *\n * @param {string} name - mentioned name.\n * @param {string} uid - mentioned user ID.\n *\n * @returns {Drafty} document with the mention.\n */\nDrafty.mention = function(name, uid) {\n return {\n txt: name || '',\n fmt: [{\n at: 0,\n len: stringToGraphemes(name || '').length,\n key: 0\n }],\n ent: [{\n tp: 'MN',\n data: {\n val: uid\n }\n }]\n };\n}\n\n/**\n * Append a link to a Drafty document.\n *\n * @param {Drafty} content - Drafty document to append link to.\n * @param {Object} linkData - Link info in format {txt: 'ankor text', url: 'http://...'}.\n *\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLink = function(content, linkData) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: content.txt.length,\n len: linkData.txt.length,\n key: content.ent.length\n });\n content.txt += linkData.txt;\n\n const ex = {\n tp: 'LN',\n data: {\n url: linkData.url\n }\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Append image to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {ImageDesc} imageDesc - object with image paramenets.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendImage = function(content, imageDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n}\n\n/**\n * Append audio recodring to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add recording to.\n * @param {AudioDesc} audioDesc - object with audio data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendAudio = function(content, audioDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n}\n\n/**\n * Description of a file to attach.\n * @typedef {Object} AttachmentDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the attachment, e.g. \"application/octet-stream\"\n * @property {string} data - base64-encoded in-band content of small attachments. Could be null/undefined.\n * @property {string} filename - file name suggestion for downloading the attachment.\n * @property {integer} size - size of the file in bytes. Treat is as an untrusted hint.\n * @property {string} refurl - reference to the out-of-band content. Could be null/undefined.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Attach file to Drafty content. Either as a blob or as a reference.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to attach file to.\n * @param {AttachmentDesc} object - containing attachment description and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.attachFile = function(content, attachmentDesc) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'EX',\n data: {\n mime: attachmentDesc.mime,\n val: attachmentDesc.data,\n name: attachmentDesc.filename,\n ref: attachmentDesc.refurl,\n size: attachmentDesc.size | 0\n }\n }\n if (attachmentDesc.urlPromise) {\n ex.data._processing = true;\n attachmentDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n /* catch the error, otherwise it will appear in the console. */\n ex.data._processing = undefined;\n }\n );\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Wraps drafty document into a simple formatting style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - document or string to wrap into a style.\n * @param {string} style - two-letter style to wrap into.\n * @param {number} at - index where the style starts, default 0.\n * @param {number} len - length of the form content, default all of it.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapInto = function(content, style, at, len) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at || 0,\n len: len || content.txt.length,\n tp: style,\n });\n\n return content;\n}\n\n/**\n * Wraps content into an interactive form.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - to wrap into a form.\n * @param {number} at - index where the forms starts.\n * @param {number} len - length of the form content.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapAsForm = function(content, at, len) {\n return Drafty.wrapInto(content, 'FM', at, len);\n}\n\n/**\n * Insert clickable button into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {number} at - location where the button is inserted.\n * @param {number} len - the length of the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertButton = function(content, at, len, name, actionType, actionValue, refUrl) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n\n if (!content || !content.txt || content.txt.length < at + len) {\n return null;\n }\n\n if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n return null;\n }\n // Ensure refUrl is a string.\n if (actionType == 'url' && !refUrl) {\n return null;\n }\n refUrl = '' + refUrl;\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: len,\n key: content.ent.length\n });\n content.ent.push({\n tp: 'BN',\n data: {\n act: actionType,\n val: actionValue,\n ref: refUrl,\n name: name\n }\n });\n\n return content;\n}\n\n/**\n * Append clickable button to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {string} title - the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendButton = function(content, title, name, actionType, actionValue, refUrl) {\n content = content || {\n txt: ''\n };\n const at = content.txt.length;\n content.txt += title;\n return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n}\n\n/**\n * Attach a generic JS object. The object is attached as a json string.\n * Intended for representing a form response.\n *\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to attach file to.\n * @param {Object} data - data to convert to json string and attach.\n * @returns {Drafty} the same document as content.\n */\nDrafty.attachJSON = function(content, data) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n content.ent.push({\n tp: 'EX',\n data: {\n mime: JSON_MIME_TYPE,\n val: data\n }\n });\n\n return content;\n}\n/**\n * Append line break to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append linebreak to.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLineBreak = function(content) {\n content = content || {\n txt: ''\n };\n content.fmt = content.fmt || [];\n content.fmt.push({\n at: stringToGraphemes(content.txt).length,\n len: 1,\n tp: 'BR'\n });\n content.txt += ' ';\n\n return content;\n}\n/**\n * Given Drafty document, convert it to HTML.\n * No attempt is made to strip pre-existing html markup.\n * This is potentially unsafe because content.txt may contain malicious HTML\n * markup.\n * @memberof Tinode.Drafty\n * @static\n *\n * @param {Drafty} doc - document to convert.\n *\n * @returns {string} HTML-representation of content.\n */\nDrafty.UNSAFE_toHTML = function(doc) {\n const tree = draftyToTree(doc);\n const htmlFormatter = function(type, data, values) {\n const tag = DECORATORS[type];\n let result = values ? values.join('') : '';\n if (tag) {\n result = tag.open(data) + result + tag.close(data);\n }\n return result;\n };\n return treeBottomUp(tree, htmlFormatter, 0);\n}\n\n/**\n * Callback for applying custom formatting to a Drafty document.\n * Called once for each style span.\n * @memberof Drafty\n * @static\n *\n * @callback Formatter\n * @param {string} style - style code such as \"ST\" or \"IM\".\n * @param {Object} data - entity's data.\n * @param {Object} values - possibly styled subspans contained in this style span.\n * @param {number} index - index of the element guaranteed to be unique.\n */\n\n/**\n * Convert Drafty document to a representation suitable for display.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|Object} content - Drafty document to transform.\n * @param {Formatter} formatter - callback which formats individual elements.\n * @param {Object} context - context provided to formatter as this.\n *\n * @return {Object} transformed object\n */\nDrafty.format = function(original, formatter, context) {\n return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n}\n\n/**\n * Shorten Drafty document making the drafty text no longer than the limit.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characrets to shorten to.\n * @param {boolean} light - remove heavy data from entities.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.shorten = function(original, limit, light) {\n let tree = draftyToTree(original);\n tree = shortenTree(tree, limit, '…');\n if (tree && light) {\n tree = lightEntity(tree);\n }\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Transform Drafty doc for forwarding: strip leading @mention and any leading line breaks or whitespace.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.forwardedContent = function(original) {\n let tree = draftyToTree(original);\n const rmMention = function(node) {\n if (node.type == 'MN') {\n if (!node.parent || !node.parent.type) {\n return null;\n }\n }\n return node;\n }\n // Strip leading mention.\n tree = treeTopDown(tree, rmMention);\n // Remove leading whitespace.\n tree = lTrim(tree);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Prepare Drafty doc for wrapping into QQ as a reply:\n * - Replace forwarding mention with symbol '➦' and remove data (UID).\n * - Remove quoted text completely.\n * - Replace line breaks with spaces.\n * - Strip entities of heavy content.\n * - Move attachments to the end of the document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.replyContent = function(original, limit) {\n const convMNnQQnBR = function(node) {\n if (node.type == 'QQ') {\n return null;\n } else if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n delete node.data;\n }\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.type;\n delete node.children;\n }\n return node;\n }\n\n let tree = draftyToTree(original);\n if (!tree) {\n return original;\n }\n\n // Strip leading mention.\n tree = treeTopDown(tree, convMNnQQnBR);\n // Move attachments to the end of the doc.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n // Shorten the doc.\n tree = shortenTree(tree, limit, '…');\n // Strip heavy elements except IM.data['val'] and VD.data['preview'] (have to keep them to generate previews later).\n const filter = node => {\n switch (node.type) {\n case 'IM':\n return ['val'];\n case 'VD':\n return ['preview'];\n }\n return null;\n };\n tree = lightEntity(tree, filter);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n\n/**\n * Generate drafty preview:\n * - Shorten the document.\n * - Strip all heavy entity data leaving just inline styles and entity references.\n * - Replace line breaks with spaces.\n * - Replace content of QQ with a space.\n * - Replace forwarding mention with symbol '➦'.\n * move all attachments to the end of the document and make them visible.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @param {boolean} forwarding - this a forwarding message preview.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.preview = function(original, limit, forwarding) {\n let tree = draftyToTree(original);\n\n // Move attachments to the end.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n\n // Convert leading mention to '➦' and replace QQ and BR with a space ' '.\n const convMNnQQnBR = function(node) {\n if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n }\n } else if (node.type == 'QQ') {\n node.text = ' ';\n delete node.children;\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.children;\n delete node.type;\n }\n return node;\n }\n tree = treeTopDown(tree, convMNnQQnBR);\n\n tree = shortenTree(tree, limit, '…');\n if (forwarding) {\n // Keep some IM and VD data for preview.\n const filter = {\n IM: ['val'],\n VD: ['preview']\n };\n tree = lightEntity(tree, node => {\n return filter[node.type];\n });\n } else {\n tree = lightEntity(tree);\n }\n\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Given Drafty document, convert it to plain text.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text.\n * @returns {string} plain-text representation of the drafty document.\n */\nDrafty.toPlainText = function(content) {\n return typeof content == 'string' ? content : content.txt;\n}\n\n/**\n * Check if the document has no markup and no entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for presence of markup.\n * @returns true is content is plain text, false otherwise.\n */\nDrafty.isPlainText = function(content) {\n return typeof content == 'string' || !(content.fmt || content.ent);\n}\n\n/**\n * Convert document to plain text with markdown. All elements which cannot\n * be represented in markdown are stripped.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text with markdown.\n */\nDrafty.toMarkdown = function(content) {\n let tree = draftyToTree(content);\n const mdFormatter = function(type, _, values) {\n const def = FORMAT_TAGS[type];\n let result = (values ? values.join('') : '');\n if (def) {\n if (def.isVoid) {\n result = def.md_tag || '';\n } else if (def.md_tag) {\n result = def.md_tag + result + def.md_tag;\n }\n }\n return result;\n };\n return treeBottomUp(tree, mdFormatter, 0);\n}\n\n/**\n * Checks if the object represets is a valid Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for validity.\n * @returns true is content is valid, false otherwise.\n */\nDrafty.isValid = function(content) {\n if (!content) {\n return false;\n }\n\n const {\n txt,\n fmt,\n ent\n } = content;\n\n if (!txt && txt !== '' && !fmt && !ent) {\n return false;\n }\n\n const txt_type = typeof txt;\n if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n return false;\n }\n\n if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n return false;\n }\n\n if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if the drafty document has attachments: style EX and outside of normal rendering flow,\n * i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for attachments.\n * @returns true if there are attachments.\n */\nDrafty.hasAttachments = function(content) {\n if (!Array.isArray(content.fmt)) {\n return false;\n }\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n return ent && ent.tp == 'EX' && ent.data;\n }\n }\n return false;\n}\n\n/**\n * Callback for enumerating entities in a Drafty document.\n * Called once for each entity.\n * @memberof Drafty\n * @static\n *\n * @callback EntityCallback\n * @param {Object} data entity data.\n * @param {string} entity type.\n * @param {number} index entity's index in `content.ent`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate attachments: style EX and outside of normal rendering flow, i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to process for attachments.\n * @param {EntityCallback} callback - callback to call for each attachment.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.attachments = function(content, callback, context) {\n if (!Array.isArray(content.fmt)) {\n return;\n }\n let count = 0;\n for (let i in content.fmt) {\n let fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n if (ent && ent.tp == 'EX' && ent.data) {\n if (callback.call(context, ent.data, count++, 'EX')) {\n break;\n }\n }\n }\n };\n}\n\n/**\n * Check if the drafty document has entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for entities.\n * @returns true if there are entities.\n */\nDrafty.hasEntities = function(content) {\n return content.ent && content.ent.length > 0;\n}\n\n/**\n * Enumerate entities. Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @param {EntityCallback} callback - callback to call for each entity.\n * @param {Object} context - value of \"this\" for callback.\n *\n */\nDrafty.entities = function(content, callback, context) {\n if (content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n if (content.ent[i]) {\n if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Callback for enumerating styles (inline formats) in a Drafty document.\n * Called once for each style.\n * @memberof Drafty\n * @static\n *\n * @callback StyleCallback\n * @param {string} tp - format type.\n * @param {number} at - starting position of the format in text.\n * @param {number} len - extent of the format in characters.\n * @param {number} key - index of the entity if format is a reference.\n * @param {number} index - style's index in `content.fmt`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate styles (inline formats). Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with styles (formats) to enumerate.\n * @param {StyleCallback} callback - callback to call for each format.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.styles = function(content, callback, context) {\n if (content.fmt && content.fmt.length > 0) {\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt) {\n if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Remove unrecognized fields from entity data\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @returns content.\n */\nDrafty.sanitizeEntities = function(content) {\n if (content && content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n const ent = content.ent[i];\n if (ent && ent.data) {\n const data = copyEntData(ent.data);\n if (data) {\n content.ent[i].data = data;\n } else {\n delete content.ent[i].data;\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Given the entity, get URL which can be used for downloading\n * entity data.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the URl from.\n * @returns {string} URL to download entity data or null.\n */\nDrafty.getDownloadUrl = function(entData) {\n let url = null;\n if (entData.mime != JSON_MIME_TYPE && entData.val) {\n url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n } else if (typeof entData.ref == 'string') {\n url = entData.ref;\n }\n return url;\n}\n\n/**\n * Check if the entity data is not ready for sending, such as being uploaded to the server.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n * @returns {boolean} true if upload is in progress, false otherwise.\n */\nDrafty.isProcessing = function(entData) {\n return !!entData._processing;\n}\n\n/**\n * Given the entity, get URL which can be used for previewing\n * the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n *\n * @returns {string} url for previewing or null if no such url is available.\n */\nDrafty.getPreviewUrl = function(entData) {\n return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n}\n\n/**\n * Get approximate size of the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the size for.\n * @returns {number} size of entity data in bytes.\n */\nDrafty.getEntitySize = function(entData) {\n // Either size hint or length of value. The value is base64 encoded,\n // the actual object size is smaller than the encoded length.\n return entData.size ? entData.size : entData.val ? (entData.val.length * 0.75) | 0 : 0;\n}\n\n/**\n * Get entity mime type.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the type for.\n * @returns {string} mime type of entity.\n */\nDrafty.getEntityMimeType = function(entData) {\n return entData.mime || 'text/plain';\n}\n\n/**\n * Get HTML tag for a given two-letter style name.\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style, like ST or LN.\n *\n * @returns {string} HTML tag name if style is found, {code: undefined} if style is falsish or not found.\n */\nDrafty.tagName = function(style) {\n return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n}\n\n/**\n * For a given data bundle generate an object with HTML attributes,\n * for instance, given {url: \"http://www.example.com/\"} return\n * {href: \"http://www.example.com/\"}\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style to generate attributes for.\n * @param {Object} data - data bundle to convert to attributes\n *\n * @returns {Object} object with HTML attributes.\n */\nDrafty.attrValue = function(style, data) {\n if (data && DECORATORS[style] && DECORATORS[style].props) {\n return DECORATORS[style].props(data);\n }\n\n return undefined;\n}\n\n/**\n * Drafty MIME type.\n * @memberof Drafty\n * @static\n *\n * @returns {string} content-Type \"text/x-drafty\".\n */\nDrafty.getContentType = function() {\n return DRAFTY_MIME_TYPE;\n}\n\n// =================\n// Utility methods.\n// =================\n\n// Take a string and defined earlier style spans, re-compose them into a tree where each leaf is\n// a same-style (including unstyled) string. I.e. 'hello *bold _italic_* and ~more~ world' ->\n// ('hello ', (b: 'bold ', (i: 'italic')), ' and ', (s: 'more'), ' world');\n//\n// This is needed in order to clear markup, i.e. 'hello *world*' -> 'hello world' and convert\n// ranges from markup-ed offsets to plain text offsets.\nfunction chunkify(line, start, end, spans) {\n const chunks = [];\n\n if (spans.length == 0) {\n return [];\n }\n\n for (let i in spans) {\n // Get the next chunk from the queue\n const span = spans[i];\n\n // Grab the initial unstyled chunk\n if (span.at > start) {\n chunks.push({\n txt: line.slice(start, span.at)\n });\n }\n\n // Grab the styled chunk. It may include subchunks.\n const chunk = {\n tp: span.tp\n };\n const chld = chunkify(line, span.at + 1, span.end, span.children);\n if (chld.length > 0) {\n chunk.children = chld;\n } else {\n chunk.txt = span.txt;\n }\n chunks.push(chunk);\n start = span.end + 1; // '+1' is to skip the formatting character\n }\n\n // Grab the remaining unstyled chunk, after the last span\n if (start < end) {\n chunks.push({\n txt: line.slice(start, end)\n });\n }\n\n return chunks;\n}\n\n// Detect starts and ends of formatting spans. Unformatted spans are\n// ignored at this stage.\nfunction spannify(original, re_start, re_end, type) {\n const result = [];\n let index = 0;\n let line = original.slice(0); // make a copy;\n\n while (line.length > 0) {\n // match[0]; // match, like '*abc*'\n // match[1]; // match captured in parenthesis, like 'abc'\n // match['index']; // offset where the match started.\n\n // Find the opening token.\n const start = re_start.exec(line);\n if (start == null) {\n break;\n }\n\n // Because javascript RegExp does not support lookbehind, the actual offset may not point\n // at the markup character. Find it in the matched string.\n let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n // Clip the processed part of the string.\n line = line.slice(start_offset + 1);\n // start_offset is an offset within the clipped string. Convert to original index.\n start_offset += index;\n // Index now point to the beginning of 'line' within the 'original' string.\n index = start_offset + 1;\n\n // Find the matching closing token.\n const end = re_end ? re_end.exec(line) : null;\n if (end == null) {\n break;\n }\n let end_offset = end['index'] + end[0].indexOf(end[1]);\n // Clip the processed part of the string.\n line = line.slice(end_offset + 1);\n // Update offsets\n end_offset += index;\n // Index now points to the beginning of 'line' within the 'original' string.\n index = end_offset + 1;\n\n result.push({\n txt: original.slice(start_offset + 1, end_offset),\n children: [],\n at: start_offset,\n end: end_offset,\n tp: type\n });\n }\n\n return result;\n}\n\n// Convert linear array or spans into a tree representation.\n// Keep standalone and nested spans, throw away partially overlapping spans.\nfunction toSpanTree(spans) {\n if (spans.length == 0) {\n return [];\n }\n\n const tree = [spans[0]];\n let last = spans[0];\n for (let i = 1; i < spans.length; i++) {\n // Keep spans which start after the end of the previous span or those which\n // are complete within the previous span.\n if (spans[i].at > last.end) {\n // Span is completely outside of the previous span.\n tree.push(spans[i]);\n last = spans[i];\n } else if (spans[i].end <= last.end) {\n // Span is fully inside of the previous span. Push to subnode.\n last.children.push(spans[i]);\n }\n // Span could partially overlap, ignoring it as invalid.\n }\n\n // Recursively rearrange the subnodes.\n for (let i in tree) {\n tree[i].children = toSpanTree(tree[i].children);\n }\n\n return tree;\n}\n\n// Convert drafty document to a tree.\nfunction draftyToTree(doc) {\n if (!doc) {\n return null;\n }\n\n doc = (typeof doc == 'string') ? {\n txt: doc\n } : doc;\n let {\n txt,\n fmt,\n ent\n } = doc;\n\n txt = txt || '';\n if (!Array.isArray(ent)) {\n ent = [];\n }\n\n if (!Array.isArray(fmt) || fmt.length == 0) {\n if (ent.length == 0) {\n return {\n text: txt\n };\n }\n\n // Handle special case when all values in fmt are 0 and fmt therefore is skipped.\n fmt = [{\n at: 0,\n len: 0,\n key: 0\n }];\n }\n\n // Sanitize spans.\n const spans = [];\n const attachments = [];\n fmt.forEach((span) => {\n if (!span || typeof span != 'object') {\n return;\n }\n\n if (!['undefined', 'number'].includes(typeof span.at)) {\n // Present, but non-numeric 'at'.\n return;\n }\n if (!['undefined', 'number'].includes(typeof span.len)) {\n // Present, but non-numeric 'len'.\n return;\n }\n let at = span.at | 0;\n let len = span.len | 0;\n if (len < 0) {\n // Invalid span length.\n return;\n }\n\n let key = span.key || 0;\n if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n // Invalid key value.\n return;\n }\n\n if (at <= -1) {\n // Attachment. Store attachments separately.\n attachments.push({\n start: -1,\n end: 0,\n key: key\n });\n return;\n } else if (at + len > stringToGraphemes(txt).length) {\n // Span is out of bounds.\n return;\n }\n\n if (!span.tp) {\n if (ent.length > 0 && (typeof ent[key] == 'object')) {\n spans.push({\n start: at,\n end: at + len,\n key: key\n });\n }\n } else {\n spans.push({\n type: span.tp,\n start: at,\n end: at + len\n });\n }\n });\n\n // Sort spans first by start index (asc) then by length (desc), then by weight.\n spans.sort((a, b) => {\n let diff = a.start - b.start;\n if (diff != 0) {\n return diff;\n }\n diff = b.end - a.end;\n if (diff != 0) {\n return diff;\n }\n return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n });\n\n // Move attachments to the end of the list.\n if (attachments.length > 0) {\n spans.push(...attachments);\n }\n\n spans.forEach((span) => {\n if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n span.type = ent[span.key].tp;\n span.data = ent[span.key].data;\n }\n\n // Is type still undefined? Hide the invalid element!\n if (!span.type) {\n span.type = 'HD';\n }\n });\n\n const graphemes = stringToGraphemes(txt);\n let tree = spansToTree({}, graphemes, 0, graphemes.length, spans);\n\n // Flatten tree nodes.\n const flatten = function(node) {\n if (Array.isArray(node.children) && node.children.length == 1) {\n // Unwrap.\n const child = node.children[0];\n if (!node.type) {\n const parent = node.parent;\n node = child;\n node.parent = parent;\n } else if (!child.type && !child.children) {\n node.text = child.text;\n delete node.children;\n }\n }\n return node;\n }\n tree = treeTopDown(tree, flatten);\n\n return tree;\n}\n\n// Add tree node to a parent tree.\nfunction addNode(parent, n) {\n if (!n) {\n return parent;\n }\n\n if (!parent.children) {\n parent.children = [];\n }\n\n // If text is present, move it to a subnode.\n if (parent.text) {\n parent.children.push({\n text: parent.text,\n parent: parent\n });\n delete parent.text;\n }\n\n n.parent = parent;\n parent.children.push(n);\n\n return parent;\n}\n\n// Returns a tree of nodes.\nfunction spansToTree(parent, graphemes, start, end, spans) {\n if (!spans || spans.length == 0) {\n if (start < end) {\n addNode(parent, {\n text: graphemes.slice(start, end)\n .map(segment => segment.segment)\n .join('')\n });\n }\n return parent;\n }\n\n // Process subspans.\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n if (span.start < 0 && span.type == 'EX') {\n addNode(parent, {\n type: span.type,\n data: span.data,\n key: span.key,\n att: true\n });\n continue;\n }\n\n // Add un-styled range before the styled span starts.\n if (start < span.start) {\n addNode(parent, {\n text: graphemes.slice(start, span.start)\n .map(segment => segment.segment)\n .join('')\n });\n start = span.start;\n }\n\n // Get all spans which are within the current span.\n const subspans = [];\n while (i < spans.length - 1) {\n const inner = spans[i + 1];\n if (inner.start < 0) {\n // Attachments are in the end. Stop.\n break;\n } else if (inner.start < span.end) {\n if (inner.end <= span.end) {\n const tag = FORMAT_TAGS[inner.tp] || {};\n if (inner.start < inner.end || tag.isVoid) {\n // Valid subspan: completely within the current span and\n // either non-zero length or zero length is acceptable.\n subspans.push(inner);\n }\n }\n i++;\n // Overlapping subspans are ignored.\n } else {\n // Past the end of the current span. Stop.\n break;\n }\n }\n\n addNode(parent, spansToTree({\n type: span.type,\n data: span.data,\n key: span.key\n }, graphemes, start, span.end, subspans));\n start = span.end;\n }\n\n // Add the last unformatted range.\n if (start < end) {\n addNode(parent, {\n text: graphemes\n .slice(start, end)\n .map((segment) => segment.segment)\n .join('')\n });\n }\n\n return parent;\n}\n\n// Append a tree to a Drafty doc.\nfunction treeToDrafty(doc, tree, keymap) {\n if (!tree) {\n return doc;\n }\n\n doc.txt = doc.txt || '';\n\n // Checkpoint to measure length of the current tree node.\n const start = stringToGraphemes(doc.txt).length;\n\n if (tree.text) {\n doc.txt += tree.text;\n } else if (Array.isArray(tree.children)) {\n tree.children.forEach((c) => {\n treeToDrafty(doc, c, keymap);\n });\n }\n\n if (tree.type) {\n const len = stringToGraphemes(doc.txt).length - start;\n doc.fmt = doc.fmt || [];\n if (Object.keys(tree.data || {}).length > 0) {\n doc.ent = doc.ent || [];\n const newKey = (typeof keymap[tree.key] == 'undefined') ? doc.ent.length : keymap[tree.key];\n keymap[tree.key] = newKey;\n doc.ent[newKey] = {\n tp: tree.type,\n data: tree.data\n };\n if (tree.att) {\n // Attachment.\n doc.fmt.push({\n at: -1,\n len: 0,\n key: newKey\n });\n } else {\n doc.fmt.push({\n at: start,\n len: len,\n key: newKey\n });\n }\n } else {\n doc.fmt.push({\n tp: tree.type,\n at: start,\n len: len\n });\n }\n }\n return doc;\n}\n\n// Traverse the tree top down transforming the nodes: apply transformer to every tree node.\nfunction treeTopDown(src, transformer, context) {\n if (!src) {\n return null;\n }\n\n let dst = transformer.call(context, src);\n if (!dst || !dst.children) {\n return dst;\n }\n\n const children = [];\n for (let i in dst.children) {\n let n = dst.children[i];\n if (n) {\n n = treeTopDown(n, transformer, context);\n if (n) {\n children.push(n);\n }\n }\n }\n\n if (children.length == 0) {\n dst.children = null;\n } else {\n dst.children = children;\n }\n\n return dst;\n}\n\n// Traverse the tree bottom-up: apply formatter to every node.\n// The formatter must maintain its state through context.\nfunction treeBottomUp(src, formatter, index, stack, context) {\n if (!src) {\n return null;\n }\n\n if (stack && src.type) {\n stack.push(src.type);\n }\n\n let values = [];\n for (let i in src.children) {\n const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n if (n) {\n values.push(n);\n }\n }\n if (values.length == 0) {\n if (src.text) {\n values = [src.text];\n } else {\n values = null;\n }\n }\n\n if (stack && src.type) {\n stack.pop();\n }\n\n return formatter.call(context, src.type, src.data, values, index, stack);\n}\n\n// Clip tree to the provided limit.\nfunction shortenTree(tree, limit, tail) {\n if (!tree) {\n return null;\n }\n\n if (tail) {\n limit -= tail.length;\n }\n\n const shortener = function(node) {\n if (limit <= -1) {\n // Limit -1 means the doc was already clipped.\n return null;\n }\n\n if (node.att) {\n // Attachments are unchanged.\n return node;\n }\n if (limit == 0) {\n node.text = tail;\n limit = -1;\n } else if (node.text) {\n const graphemes = stringToGraphemes(node.text);\n if (graphemes.length > limit) {\n node.text = graphemes\n .slice(0, limit)\n .map((segment) => segment.segment)\n .join('') + tail;\n limit = -1;\n } else {\n limit -= graphemes.length;\n }\n }\n return node;\n }\n\n return treeTopDown(tree, shortener);\n}\n\n// Strip heavy entities from a tree.\nfunction lightEntity(tree, allow) {\n const lightCopy = node => {\n const data = copyEntData(node.data, true, allow ? allow(node) : null);\n if (data) {\n node.data = data;\n } else {\n delete node.data;\n }\n return node;\n }\n return treeTopDown(tree, lightCopy);\n}\n\n// Remove spaces and breaks on the left.\nfunction lTrim(tree) {\n if (tree.type == 'BR') {\n tree = null;\n } else if (tree.text) {\n if (!tree.type) {\n tree.text = tree.text.trimStart();\n if (!tree.text) {\n tree = null;\n }\n }\n } else if (!tree.type && tree.children && tree.children.length > 0) {\n const c = lTrim(tree.children[0]);\n if (c) {\n tree.children[0] = c;\n } else {\n tree.children.shift();\n if (!tree.type && tree.children.length == 0) {\n tree = null;\n }\n }\n }\n return tree;\n}\n\n// Move attachments to the end. Attachments must be at the top level, no need to traverse the tree.\nfunction attachmentsToEnd(tree, limit) {\n if (!tree) {\n return null;\n }\n\n if (tree.att) {\n tree.text = ' ';\n delete tree.att;\n delete tree.children;\n } else if (tree.children) {\n const attachments = [];\n const children = [];\n for (let i in tree.children) {\n const c = tree.children[i];\n if (c.att) {\n if (attachments.length == limit) {\n // Too many attachments to preview;\n continue;\n }\n if (c.data['mime'] == JSON_MIME_TYPE) {\n // JSON attachments are not shown in preview.\n continue;\n }\n\n delete c.att;\n delete c.children;\n c.text = ' ';\n attachments.push(c);\n } else {\n children.push(c);\n }\n }\n tree.children = children.concat(attachments);\n }\n return tree;\n}\n\n// Get a list of entities from a text.\nfunction extractEntities(line) {\n let match;\n let extracted = [];\n ENTITY_TYPES.forEach((entity) => {\n while ((match = entity.re.exec(line)) !== null) {\n extracted.push({\n offset: match['index'],\n len: match[0].length,\n unique: match[0],\n data: entity.pack(match[0]),\n type: entity.name\n });\n }\n });\n\n if (extracted.length == 0) {\n return extracted;\n }\n\n // Remove entities detected inside other entities, like #hashtag in a URL.\n extracted.sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let idx = -1;\n extracted = extracted.filter((el) => {\n const result = (el.offset > idx);\n idx = el.offset + el.len;\n return result;\n });\n\n return extracted;\n}\n\n// Convert the chunks into format suitable for serialization.\nfunction draftify(chunks, startAt) {\n let plain = '';\n let ranges = [];\n for (let i in chunks) {\n const chunk = chunks[i];\n if (!chunk.txt) {\n const drafty = draftify(chunk.children, plain.length + startAt);\n chunk.txt = drafty.txt;\n ranges = ranges.concat(drafty.fmt);\n }\n\n if (chunk.tp) {\n ranges.push({\n at: plain.length + startAt,\n len: chunk.txt.length,\n tp: chunk.tp\n });\n }\n\n plain += chunk.txt;\n }\n return {\n txt: plain,\n fmt: ranges\n };\n}\n\n// Create a copy of entity data with (light=false) or without (light=true) the large payload.\n// The array 'allow' contains a list of fields exempt from stripping.\nfunction copyEntData(data, light, allow) {\n if (data && Object.entries(data).length > 0) {\n allow = allow || [];\n const dc = {};\n ALLOWED_ENT_FIELDS.forEach(key => {\n if (data[key]) {\n if (light && !allow.includes(key) &&\n (typeof data[key] == 'string' || Array.isArray(data[key])) &&\n data[key].length > MAX_PREVIEW_DATA_SIZE) {\n return;\n }\n if (typeof data[key] == 'object') {\n return;\n }\n dc[key] = data[key];\n }\n });\n\n if (Object.entries(dc).length != 0) {\n return dc;\n }\n }\n return null;\n}\n\n// Returns true if object is empty, if undefined returns true\nfunction isEmptyObject(obj) {\n return Object.keys(obj ?? {}).length == 0;\n};\n\n\n// Returns an array (of length equal to the length of the original string) such that each index\n// denotes the position of char in string in a grapheme array (created from that string)\n// Eg: string: \"Hi👋🏼Hi\" -> [0,1,2,2,2,2,3,4]\nfunction graphemeIndices(graphemes) {\n const result = [];\n let graphemeIndex = 0;\n let charIndex = 0;\n\n // Iterate over the grapheme clusters.\n for (const {\n segment\n }\n of graphemes) {\n // Map the character indices to the grapheme index.\n for (let i = 0; i < segment.length; i++) {\n result[charIndex + i] = graphemeIndex;\n }\n\n // Increment the character index by the length of the grapheme cluster.\n charIndex += segment.length;\n\n // Increment the grapheme index.\n graphemeIndex++;\n }\n\n return result;\n}\n\n// Convert fmt.at and fmt.len from character-expressed index and length to grapheme-expressed\n// index and length.\nfunction toGraphemeValues(fmt, segments, txt) {\n segments = segments ?? segmenter.segment(txt);\n\n const indices = graphemeIndices(segments);\n\n const correctAt = indices[fmt.at];\n const correctLen = fmt.at + fmt.len <= txt.length ?\n indices[fmt.at + fmt.len - 1] - correctAt : fmt.len;\n\n return {\n at: correctAt,\n len: correctLen + 1\n };\n}\n\n// Convert string to graphme cluster array.\nfunction stringToGraphemes(str) {\n return Array.from(segmenter.segment(str));\n}\n\nif (typeof module != 'undefined') {\n module.exports = Drafty;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @file Access control model.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\n/**\n * Helper class for handling access mode.\n *\n * @class AccessMode\n * @memberof Tinode\n *\n * @param {AccessMode|Object=} acs - AccessMode to copy or access mode object received from the server.\n */\nexport default class AccessMode {\n constructor(acs) {\n if (acs) {\n this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n this.mode = acs.mode ? (typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode)) :\n (this.given & this.want);\n }\n }\n\n static #checkFlag(val, side, flag) {\n side = side || 'mode';\n if (['given', 'want', 'mode'].includes(side)) {\n return ((val[side] & flag) != 0);\n }\n throw new Error(`Invalid AccessMode component '${side}'`);\n }\n /**\n * Parse string into an access mode value.\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {string | Number} mode - either a String representation of the access mode to parse or a set of bits to assign.\n * @returns {number} - Access mode as a numeric value.\n */\n static decode(str) {\n if (!str) {\n return null;\n } else if (typeof str == 'number') {\n return str & AccessMode._BITMASK;\n } else if (str === 'N' || str === 'n') {\n return AccessMode._NONE;\n }\n\n const bitmask = {\n 'J': AccessMode._JOIN,\n 'R': AccessMode._READ,\n 'W': AccessMode._WRITE,\n 'P': AccessMode._PRES,\n 'A': AccessMode._APPROVE,\n 'S': AccessMode._SHARE,\n 'D': AccessMode._DELETE,\n 'O': AccessMode._OWNER\n };\n\n let m0 = AccessMode._NONE;\n\n for (let i = 0; i < str.length; i++) {\n const bit = bitmask[str.charAt(i).toUpperCase()];\n if (!bit) {\n // Unrecognized bit, skip.\n continue;\n }\n m0 |= bit;\n }\n return m0;\n }\n /**\n * Convert numeric representation of the access mode into a string.\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to convert to a string.\n * @returns {string} - Access mode as a string.\n */\n static encode(val) {\n if (val === null || val === AccessMode._INVALID) {\n return null;\n } else if (val === AccessMode._NONE) {\n return 'N';\n }\n\n const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n let res = '';\n for (let i = 0; i < bitmask.length; i++) {\n if ((val & (1 << i)) != 0) {\n res = res + bitmask[i];\n }\n }\n return res;\n }\n /**\n * Update numeric representation of access mode with the new value. The value\n * is one of the following:\n * - a string starting with '+' or '-' then the bits to add or remove, e.g. '+R-W' or '-PS'.\n * - a new value of access mode\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to update.\n * @param {string} upd - update to apply to val.\n * @returns {number} - updated access mode.\n */\n static update(val, upd) {\n if (!upd || typeof upd != 'string') {\n return val;\n }\n\n let action = upd.charAt(0);\n if (action == '+' || action == '-') {\n let val0 = val;\n // Split delta-string like '+ABC-DEF+Z' into an array of parts including + and -.\n const parts = upd.split(/([-+])/);\n // Starting iteration from 1 because String.split() creates an array with the first empty element.\n // Iterating by 2 because we parse pairs +/- then data.\n for (let i = 1; i < parts.length - 1; i += 2) {\n action = parts[i];\n const m0 = AccessMode.decode(parts[i + 1]);\n if (m0 == AccessMode._INVALID) {\n return val;\n }\n if (m0 == null) {\n continue;\n }\n if (action === '+') {\n val0 |= m0;\n } else if (action === '-') {\n val0 &= ~m0;\n }\n }\n val = val0;\n } else {\n // The string is an explicit new value 'ABC' rather than delta.\n const val0 = AccessMode.decode(upd);\n if (val0 != AccessMode._INVALID) {\n val = val0;\n }\n }\n\n return val;\n }\n /**\n * Bits present in a1 but missing in a2.\n *\n * @static\n * @memberof Tinode\n *\n * @param {number | string} a1 - access mode to subtract from.\n * @param {number | string} a2 - access mode to subtract.\n * @returns {number} access mode with bits present in a1 but missing in a2.\n */\n static diff(a1, a2) {\n a1 = AccessMode.decode(a1);\n a2 = AccessMode.decode(a2);\n\n if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n return AccessMode._INVALID;\n }\n return a1 & ~a2;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Custom formatter\n */\n toString() {\n return '{\"mode\": \"' + AccessMode.encode(this.mode) +\n '\", \"given\": \"' + AccessMode.encode(this.given) +\n '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Converts numeric values to strings.\n */\n jsonHelper() {\n return {\n mode: AccessMode.encode(this.mode),\n given: AccessMode.encode(this.given),\n want: AccessMode.encode(this.want)\n };\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign value to 'mode'.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} m - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setMode(m) {\n this.mode = AccessMode.decode(m);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update mode value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateMode(u) {\n this.mode = AccessMode.update(this.mode, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get mode value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - mode value.\n */\n getMode() {\n return AccessMode.encode(this.mode);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign given value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} g - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setGiven(g) {\n this.given = AccessMode.decode(g);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'given' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateGiven(u) {\n this.given = AccessMode.update(this.given, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'given' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - given value.\n */\n getGiven() {\n return AccessMode.encode(this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} w - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setWant(w) {\n this.want = AccessMode.decode(w);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateWant(u) {\n this.want = AccessMode.update(this.want, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'want' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - want value.\n */\n getWant() {\n return AccessMode.encode(this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'want' but missing in 'given'.\n * Inverse of {@link Tinode.AccessMode#getExcessive}\n *\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in want but missing in given.\n */\n getMissing() {\n return AccessMode.encode(this.want & ~this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'given' but missing in 'want'.\n * Inverse of {@link Tinode.AccessMode#getMissing}\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in given but missing in want.\n */\n getExcessive() {\n return AccessMode.encode(this.given & ~this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want', 'give', and 'mode' values.\n * @memberof Tinode.AccessMode\n *\n * @param {AccessMode} val - new access mode value.\n * @returns {AccessMode} - this AccessMode.\n */\n updateAll(val) {\n if (val) {\n this.updateGiven(val.given);\n this.updateWant(val.want);\n this.mode = this.given & this.want;\n }\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Owner (O) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isOwner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isPresencer(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is NOT set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isMuted(side) {\n return !this.isPresencer(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Join (J) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isJoiner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Reader (R) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isReader(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._READ);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Writer (W) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isWriter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Approver (A) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isApprover(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O) or Approver (A) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isAdmin(side) {\n return this.isOwner(side) || this.isApprover(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O), Approver (A), or Sharer (S) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isSharer(side) {\n return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Deleter (D) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isDeleter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n }\n}\n\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\n\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES |\n AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n","export const PACKAGE_VERSION = \"0.23.1\";\n","/**\n * @file Global constants and configuration parameters.\n *\n * @copyright 2015-2023 Tinode LLC\n */\n'use strict';\n\nimport {\n PACKAGE_VERSION\n} from '../version.js';\n\n// Global constants\nexport const PROTOCOL_VERSION = '0'; // Major component of the version, e.g. '0' in '0.17.1'.\nexport const VERSION = PACKAGE_VERSION || '0.21';\nexport const LIBRARY = 'tinodejs/' + VERSION;\n\n// Topic name prefixes.\nexport const TOPIC_NEW = 'new';\nexport const TOPIC_NEW_CHAN = 'nch';\nexport const TOPIC_ME = 'me';\nexport const TOPIC_FND = 'fnd';\nexport const TOPIC_SYS = 'sys';\nexport const TOPIC_CHAN = 'chn';\nexport const TOPIC_GRP = 'grp';\nexport const TOPIC_P2P = 'p2p';\nexport const USER_NEW = 'new';\n\n// Starting value of a locally-generated seqId used for pending messages.\nexport const LOCAL_SEQID = 0xFFFFFFF;\n\n// Status codes.\nexport const MESSAGE_STATUS_NONE = 0; // Status not assigned.\nexport const MESSAGE_STATUS_QUEUED = 10; // Local ID assigned, in progress to be sent.\nexport const MESSAGE_STATUS_SENDING = 20; // Transmission started.\nexport const MESSAGE_STATUS_FAILED = 30; // At least one attempt was made to send the message.\nexport const MESSAGE_STATUS_FATAL = 40; // Message sending failed and it should not be retried.\nexport const MESSAGE_STATUS_SENT = 50; // Delivered to the server.\nexport const MESSAGE_STATUS_RECEIVED = 60; // Received by the client.\nexport const MESSAGE_STATUS_READ = 70; // Read by the user.\nexport const MESSAGE_STATUS_TO_ME = 80; // The message is received from another user.\n\n// Reject unresolved futures after this many milliseconds.\nexport const EXPIRE_PROMISES_TIMEOUT = 5_000;\n// Periodicity of garbage collection of unresolved futures.\nexport const EXPIRE_PROMISES_PERIOD = 1_000;\n\n// Delay before acknowledging that a message was recived.\nexport const RECV_TIMEOUT = 100;\n\n// Default number of messages to pull into memory from persistent cache.\nexport const DEFAULT_MESSAGES_PAGE = 24;\n\n// Unicode DEL character indicating data was deleted.\nexport const DEL_CHAR = '\\u2421';\n","/**\n * @file Throwable error with numeric error code.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nexport default class CommError extends Error {\n constructor(message, code) {\n super(`${message} (${code})`);\n this.name = 'CommError';\n this.code = code;\n }\n}\n","/**\n * @file Utilities used in multiple places.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport {\n DEL_CHAR\n} from './config.js';\n\n// Attempt to convert date and AccessMode strings to objects.\nexport function jsonParseHelper(key, val) {\n // Try to convert string timestamps with optional milliseconds to Date,\n // e.g. 2015-09-02T01:45:43[.123]Z\n if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n const date = new Date(val);\n if (!isNaN(date)) {\n return date;\n }\n } else if (key === 'acs' && typeof val === 'object') {\n return new AccessMode(val);\n }\n return val;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\nfunction isValidDate(d) {\n return (d instanceof Date) && !isNaN(d) && (d.getTime() != 0);\n}\n\n// RFC3339 formater of Date\nexport function rfc3339DateString(d) {\n if (!isValidDate(d)) {\n return undefined;\n }\n\n const pad = function(val, sp) {\n sp = sp || 2;\n return '0'.repeat(sp - ('' + val).length) + val;\n };\n\n const millis = d.getUTCMilliseconds();\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +\n 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +\n (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\n\n// Recursively merge src's own properties to dst.\n// Ignore properties where ignore[property] is true.\n// Array and Date objects are shallow-copied.\nexport function mergeObj(dst, src, ignore) {\n if (typeof src != 'object') {\n if (src === undefined) {\n return dst;\n }\n if (src === DEL_CHAR) {\n return undefined;\n }\n return src;\n }\n // JS is crazy: typeof null is 'object'.\n if (src === null) {\n return src;\n }\n\n // Handle Date\n if (src instanceof Date && !isNaN(src)) {\n return (!dst || !(dst instanceof Date) || isNaN(dst) || dst < src) ? src : dst;\n }\n\n // Access mode\n if (src instanceof AccessMode) {\n return new AccessMode(src);\n }\n\n // Handle Array\n if (src instanceof Array) {\n return src;\n }\n\n if (!dst || dst === DEL_CHAR) {\n dst = src.constructor();\n }\n\n for (let prop in src) {\n if (src.hasOwnProperty(prop) && (!ignore || !ignore[prop]) && (prop != '_noForwarding')) {\n try {\n dst[prop] = mergeObj(dst[prop], src[prop]);\n } catch (err) {\n // FIXME: probably need to log something here.\n }\n }\n }\n return dst;\n}\n\n// Update object stored in a cache. Returns updated value.\nexport function mergeToCache(cache, key, newval, ignore) {\n cache[key] = mergeObj(cache[key], newval, ignore);\n return cache[key];\n}\n\n// Strips all values from an object of they evaluate to false or if their name starts with '_'.\n// Used on all outgoing object before serialization to string.\nexport function simplify(obj) {\n Object.keys(obj).forEach((key) => {\n if (key[0] == '_') {\n // Strip fields like \"obj._key\".\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n // Strip empty arrays.\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (obj[key] instanceof Date) {\n // Strip invalid or zero date.\n if (!isValidDate(obj[key])) {\n delete obj[key];\n }\n } else if (typeof obj[key] == 'object') {\n simplify(obj[key]);\n // Strip empty objects.\n if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n delete obj[key];\n }\n }\n });\n return obj;\n};\n\n\n// Trim whitespace, strip empty and duplicate elements elements.\n// If the result is an empty array, add a single element \"\\u2421\" (Unicode Del character).\nexport function normalizeArray(arr) {\n let out = [];\n if (Array.isArray(arr)) {\n // Trim, throw away very short and empty tags.\n for (let i = 0, l = arr.length; i < l; i++) {\n let t = arr[i];\n if (t) {\n t = t.trim().toLowerCase();\n if (t.length > 1) {\n out.push(t);\n }\n }\n }\n out.sort().filter(function(item, pos, ary) {\n return !pos || item != ary[pos - 1];\n });\n }\n if (out.length == 0) {\n // Add single tag with a Unicode Del character, otherwise an ampty array\n // is ambiguos. The Del tag will be stripped by the server.\n out.push(DEL_CHAR);\n }\n return out;\n}\n","/**\n * @file Abstraction layer for websocket and long polling connections.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n jsonParseHelper\n} from './utils.js';\n\nlet WebSocketProvider;\nlet XHRProvider;\n\n// Error code to return in case of a network problem.\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\n\n// Error code to return when user disconnected from server.\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\n\n// Settings for exponential backoff\nconst _BOFF_BASE = 2000; // 2000 milliseconds, minimum delay between reconnects\nconst _BOFF_MAX_ITER = 10; // Maximum delay between reconnects 2^10 * 2000 ~ 34 minutes\nconst _BOFF_JITTER = 0.3; // Add random delay\n\n// Helper function for creating an endpoint URL.\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n let url = null;\n\n if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n url = `${protocol}://${host}`;\n if (url.charAt(url.length - 1) !== '/') {\n url += '/';\n }\n url += 'v' + version + '/channels';\n if (['http', 'https'].includes(protocol)) {\n // Long polling endpoint ends with \"lp\", i.e.\n // '/v0/channels/lp' vs just '/v0/channels' for ws\n url += '/lp';\n }\n url += '?apikey=' + apiKey;\n }\n return url;\n}\n\n/**\n * An abstraction for a websocket or a long polling connection.\n *\n * @class Connection\n * @memberof Tinode\n\n * @param {Object} config - configuration parameters.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - Network transport to use, either \"ws\"/\"wss\" for websocket or\n * lp for long polling.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} version_ - Major value of the protocol version, e.g. '0' in '0.17.1'.\n * @param {boolean} autoreconnect_ - If connection is lost, try to reconnect automatically.\n */\nexport default class Connection {\n // Logger, does nothing by default.\n static #log = _ => {};\n\n #boffTimer = null;\n #boffIteration = 0;\n #boffClosed = false; // Indicator if the socket was manually closed - don't autoreconnect if true.\n\n // Websocket.\n #socket = null;\n\n host;\n secure;\n apiKey;\n\n version;\n autoreconnect;\n\n initialized;\n\n // (config.host, config.apiKey, config.transport, config.secure), PROTOCOL_VERSION, true\n constructor(config, version_, autoreconnect_) {\n this.host = config.host;\n this.secure = config.secure;\n this.apiKey = config.apiKey;\n\n this.version = version_;\n this.autoreconnect = autoreconnect_;\n\n if (config.transport === 'lp') {\n // explicit request to use long polling\n this.#init_lp();\n this.initialized = 'lp';\n } else if (config.transport === 'ws') {\n // explicit request to use web socket\n // if websockets are not available, horrible things will happen\n this.#init_ws();\n this.initialized = 'ws';\n }\n\n if (!this.initialized) {\n // Invalid or undefined network transport.\n Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n }\n }\n\n /**\n * To use Connection in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n * @memberof Connection\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n }\n\n /**\n * Assign a non-default logger.\n * @static\n * @memberof Connection\n * @param {function} l variadic logging function.\n */\n static set logger(l) {\n Connection.#log = l;\n }\n\n /**\n * Initiate a new connection\n * @memberof Tinode.Connection#\n * @param {string} host_ Host name to connect to; if null the old host name will be used.\n * @param {boolean} force Force new connection even if one already exists.\n * @return {Promise} Promise resolved/rejected when the connection call completes, resolution is called without\n * parameters, rejection passes the {Error} as parameter.\n */\n connect(host_, force) {\n return Promise.reject(null);\n }\n\n /**\n * Try to restore a network connection, also reset backoff.\n * @memberof Tinode.Connection#\n *\n * @param {boolean} force - reconnect even if there is a live connection already.\n */\n reconnect(force) {}\n\n /**\n * Terminate the network connection\n * @memberof Tinode.Connection#\n */\n disconnect() {}\n\n /**\n * Send a string to the server.\n * @memberof Tinode.Connection#\n *\n * @param {string} msg - String to send.\n * @throws Throws an exception if the underlying connection is not live.\n */\n sendText(msg) {}\n\n /**\n * Check if connection is alive.\n * @memberof Tinode.Connection#\n * @returns {boolean} true if connection is live, false otherwise.\n */\n isConnected() {\n return false;\n }\n\n /**\n * Get the name of the current network transport.\n * @memberof Tinode.Connection#\n * @returns {string} name of the transport such as \"ws\" or \"lp\".\n */\n transport() {\n return this.initialized;\n }\n\n /**\n * Send network probe to check if connection is indeed live.\n * @memberof Tinode.Connection#\n */\n probe() {\n this.sendText('1');\n }\n\n /**\n * Reset autoreconnect counter to zero.\n * @memberof Tinode.Connection#\n */\n backoffReset() {\n this.#boffReset();\n }\n\n // Backoff implementation - reconnect after a timeout.\n #boffReconnect() {\n // Clear timer\n clearTimeout(this.#boffTimer);\n // Calculate when to fire the reconnect attempt\n const timeout = _BOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + _BOFF_JITTER * Math.random()));\n // Update iteration counter for future use\n this.#boffIteration = (this.#boffIteration >= _BOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1);\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout);\n }\n\n this.#boffTimer = setTimeout(_ => {\n Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n // Maybe the socket was closed while we waited for the timer?\n if (!this.#boffClosed) {\n const prom = this.connect();\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(0, prom);\n } else {\n // Suppress error if it's not used.\n prom.catch(_ => {\n /* do nothing */\n });\n }\n } else if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(-1);\n }\n }, timeout);\n }\n\n // Terminate auto-reconnect process.\n #boffStop() {\n clearTimeout(this.#boffTimer);\n this.#boffTimer = null;\n }\n\n // Reset auto-reconnect iteration counter.\n #boffReset() {\n this.#boffIteration = 0;\n }\n\n // Initialization for long polling.\n #init_lp() {\n const XDR_UNSENT = 0; // Client has been created. open() not called yet.\n const XDR_OPENED = 1; // open() has been called.\n const XDR_HEADERS_RECEIVED = 2; // send() has been called, and headers and status are available.\n const XDR_LOADING = 3; // Downloading; responseText holds partial data.\n const XDR_DONE = 4; // The operation is complete.\n\n // Fully composed endpoint URL, with API key & SID\n let _lpURL = null;\n\n let _poller = null;\n let _sender = null;\n\n let lp_sender = (url_) => {\n const sender = new XHRProvider();\n sender.onreadystatechange = (evt) => {\n if (sender.readyState == XDR_DONE && sender.status >= 400) {\n // Some sort of error response\n throw new CommError(\"LP sender failed\", sender.status);\n }\n };\n\n sender.open('POST', url_, true);\n return sender;\n }\n\n let lp_poller = (url_, resolve, reject) => {\n let poller = new XHRProvider();\n let promiseCompleted = false;\n\n poller.onreadystatechange = evt => {\n if (poller.readyState == XDR_DONE) {\n if (poller.status == 201) { // 201 == HTTP.Created, get SID\n let pkt = JSON.parse(poller.responseText, jsonParseHelper);\n _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n poller = lp_poller(_lpURL);\n poller.send(null);\n if (this.onOpen) {\n this.onOpen();\n }\n\n if (resolve) {\n promiseCompleted = true;\n resolve();\n }\n\n if (this.autoreconnect) {\n this.#boffStop();\n }\n } else if (poller.status > 0 && poller.status < 400) { // 0 = network error; 400 = HTTP.BadRequest\n if (this.onMessage) {\n this.onMessage(poller.responseText);\n }\n poller = lp_poller(_lpURL);\n poller.send(null);\n } else {\n // Don't throw an error here, gracefully handle server errors\n if (reject && !promiseCompleted) {\n promiseCompleted = true;\n reject(poller.responseText);\n }\n if (this.onMessage && poller.responseText) {\n this.onMessage(poller.responseText);\n }\n if (this.onDisconnect) {\n const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n this.onDisconnect(new CommError(text, code), code);\n }\n\n // Polling has stopped. Indicate it by setting poller to null.\n poller = null;\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n }\n }\n };\n // Using POST to avoid caching response by service worker.\n poller.open('POST', url_, true);\n return poller;\n }\n\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (_poller) {\n if (!force) {\n return Promise.resolve();\n }\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n Connection.#log(\"LP connecting to:\", url);\n _poller = lp_poller(url, resolve, reject);\n _poller.send(null);\n }).catch(err => {\n Connection.#log(\"LP connection failed:\", err);\n });\n };\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (_sender) {\n _sender.onreadystatechange = undefined;\n _sender.abort();\n _sender = null;\n }\n if (_poller) {\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (this.onDisconnect) {\n this.onDisconnect(new CommError(NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n }\n // Ensure it's reconstructed\n _lpURL = null;\n };\n\n this.sendText = (msg) => {\n _sender = lp_sender(_lpURL);\n if (_sender && (_sender.readyState == XDR_OPENED)) {\n _sender.send(msg);\n } else {\n throw new Error(\"Long poller failed to connect\");\n }\n };\n\n this.isConnected = _ => {\n return (_poller && true);\n };\n }\n\n // Initialization for Websocket\n #init_ws() {\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (this.#socket) {\n if (!force && this.#socket.readyState == this.#socket.OPEN) {\n // Issue a probe request to be sure the connection is live.\n // This is a non-blocking call.\n this.probe();\n return Promise.resolve();\n }\n this.#socket.close();\n this.#socket = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n\n Connection.#log(\"WS connecting to: \", url);\n\n // It throws when the server is not accessible but the exception cannot be caught:\n // https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation/31003057\n const conn = new WebSocketProvider(url);\n\n conn.onerror = err => {\n reject(err);\n };\n\n conn.onopen = _ => {\n if (this.autoreconnect) {\n this.#boffStop();\n }\n\n if (this.onOpen) {\n this.onOpen();\n }\n\n resolve();\n };\n\n conn.onclose = _ => {\n this.#socket = null;\n\n if (this.onDisconnect) {\n const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n this.onDisconnect(new CommError(this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n }\n\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n };\n\n conn.onmessage = evt => {\n if (this.onMessage) {\n this.onMessage(evt.data);\n }\n };\n\n this.#socket = conn;\n });\n }\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (!this.#socket) {\n return;\n }\n this.#socket.close();\n this.#socket = null;\n };\n\n this.sendText = msg => {\n if (this.#socket && (this.#socket.readyState == this.#socket.OPEN)) {\n this.#socket.send(msg);\n } else {\n throw new Error(\"Websocket is not connected\");\n }\n };\n\n this.isConnected = _ => {\n return (this.#socket && (this.#socket.readyState == this.#socket.OPEN));\n };\n }\n\n // Callbacks:\n\n /**\n * A callback to pass incoming messages to. See {@link Tinode.Connection#onMessage}.\n * @callback Tinode.Connection.OnMessage\n * @memberof Tinode.Connection\n * @param {string} message - Message to process.\n */\n onMessage = undefined;\n\n /**\n * A callback for reporting a dropped connection.\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onDisconnect = undefined;\n\n /**\n * A callback called when the connection is ready to be used for sending. For websockets it's socket open,\n * for long polling it's readyState=1 (OPENED)\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onOpen = undefined;\n\n /**\n * A callback to notify of reconnection attempts. See {@link Tinode.Connection#onAutoreconnectIteration}.\n * @memberof Tinode.Connection\n * @callback AutoreconnectIterationType\n * @param {string} timeout - time till the next reconnect attempt in milliseconds. -1 means reconnect was skipped.\n * @param {Promise} promise resolved or rejected when the reconnect attemp completes.\n *\n */\n /**\n * A callback to inform when the next attampt to reconnect will happen and to receive connection promise.\n * @memberof Tinode.Connection#\n * @type {Tinode.Connection.AutoreconnectIterationType}\n */\n onAutoreconnectIteration = undefined;\n}\n\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n","/**\n * @file Helper methods for dealing with IndexedDB cache of messages, users, and topics.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst DB_VERSION = 1;\nconst DB_NAME = 'tinode-web';\n\nlet IDBProvider;\n\nexport default class DB {\n #onError = _ => {};\n #logger = _ => {};\n\n // Instance of IndexDB.\n db = null;\n // Indicator that the cache is disabled.\n disabled = true;\n\n constructor(onError, logger) {\n this.#onError = onError || this.#onError;\n this.#logger = logger || this.#logger;\n }\n\n #mapObjects(source, callback, context) {\n if (!this.db) {\n return disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction([source]);\n trx.onerror = event => {\n this.#logger('PCache', 'mapObjects', source, event.target.error);\n reject(event.target.error);\n };\n trx.objectStore(source).getAll().onsuccess = event => {\n if (callback) {\n event.target.result.forEach(topic => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n /**\n * Initialize persistent cache: open or create/upgrade if needed.\n * @returns {Promise} promise to be resolved/rejected when the DB is initialized.\n */\n initDatabase() {\n return new Promise((resolve, reject) => {\n // Open the database and initialize callbacks.\n const req = IDBProvider.open(DB_NAME, DB_VERSION);\n req.onsuccess = event => {\n this.db = event.target.result;\n this.disabled = false;\n resolve(this.db);\n };\n req.onerror = event => {\n this.#logger('PCache', \"failed to initialize\", event);\n reject(event.target.error);\n this.#onError(event.target.error);\n };\n req.onupgradeneeded = event => {\n this.db = event.target.result;\n\n this.db.onerror = event => {\n this.#logger('PCache', \"failed to create storage\", event);\n this.#onError(event.target.error);\n };\n\n // Individual object stores.\n // Object store (table) for topics. The primary key is topic name.\n this.db.createObjectStore('topic', {\n keyPath: 'name'\n });\n\n // Users object store. UID is the primary key.\n this.db.createObjectStore('user', {\n keyPath: 'uid'\n });\n\n // Subscriptions object store topic <-> user. Topic name + UID is the primary key.\n this.db.createObjectStore('subscription', {\n keyPath: ['topic', 'uid']\n });\n\n // Messages object store. The primary key is topic name + seq.\n this.db.createObjectStore('message', {\n keyPath: ['topic', 'seq']\n });\n };\n });\n }\n\n /**\n * Delete persistent cache.\n */\n deleteDatabase() {\n // Close connection, otherwise operations will fail with 'onblocked'.\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return new Promise((resolve, reject) => {\n const req = IDBProvider.deleteDatabase(DB_NAME);\n req.onblocked = _ => {\n if (this.db) {\n this.db.close();\n }\n const err = new Error(\"blocked\");\n this.#logger('PCache', 'deleteDatabase', err);\n reject(err);\n };\n req.onsuccess = _ => {\n this.db = null;\n this.disabled = true;\n resolve(true);\n };\n req.onerror = event => {\n this.#logger('PCache', 'deleteDatabase', event.target.error);\n reject(event.target.error);\n };\n });\n }\n\n /**\n * Check if persistent cache is ready for use.\n * @memberOf DB\n * @returns {boolean} true if cache is ready, false otherwise.\n */\n isReady() {\n return !!this.db;\n }\n\n // Topics.\n\n /**\n * Save to cache or update topic in persistent cache.\n * @memberOf DB\n * @param {Topic} topic - topic to be added or updated.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updTopic(topic) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updTopic', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(topic.name);\n req.onsuccess = _ => {\n trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n trx.commit();\n };\n });\n }\n\n /**\n * Mark or unmark topic as deleted.\n * @memberOf DB\n * @param {string} name - name of the topic to mark or unmark.\n * @param {boolean} deleted - status\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n markTopicAsDeleted(name, deleted) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(name);\n req.onsuccess = event => {\n const topic = event.target.result;\n if (topic && topic._deleted != deleted) {\n topic._deleted = deleted;\n trx.objectStore('topic').put(topic);\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove topic from persistent cache.\n * @memberOf DB\n * @param {string} name - name of the topic to remove from database.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remTopic(name) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remTopic', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('topic').delete(IDBKeyRange.only(name));\n trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored topic.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapTopics(callback, context) {\n return this.#mapObjects('topic', callback, context);\n }\n\n /**\n * Copy data from serialized object to topic.\n * @memberOf DB\n * @param {Topic} topic - target to deserialize to.\n * @param {Object} src - serialized data to copy from.\n */\n deserializeTopic(topic, src) {\n DB.#deserializeTopic(topic, src);\n }\n\n // Users.\n /**\n * Add or update user object in the persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to save or update.\n * @param {Object} pub - user's public information.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updUser(uid, pub) {\n if (arguments.length < 2 || pub === undefined) {\n // No point inupdating user with invalid data.\n return;\n }\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').put({\n uid: uid,\n public: pub\n });\n trx.commit();\n });\n }\n\n /**\n * Remove user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to remove from the cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').delete(IDBKeyRange.only(uid));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored user.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapUsers(callback, context) {\n return this.#mapObjects('user', callback, context);\n }\n\n /**\n * Read a single user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to fetch from cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n getUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user']);\n trx.oncomplete = event => {\n const user = event.target.result;\n resolve({\n user: user.uid,\n public: user.public\n });\n };\n trx.onerror = event => {\n this.#logger('PCache', 'getUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').get(uid);\n });\n }\n\n // Subscriptions.\n /**\n * Add or update subscription in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {string} uid - ID of the subscribed user.\n * @param {Object} sub - subscription to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updSubscription(topicName, uid, sub) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updSubscription', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').get([topicName, uid]).onsuccess = (event) => {\n trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n trx.commit();\n };\n });\n }\n\n /**\n * Execute a callback for each cached subscription in a given topic.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the subscriptions.\n * @param {function} callback - function to call for each subscription.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapSubscriptions(topicName, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'mapSubscriptions', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = (event) => {\n if (callback) {\n event.target.result.forEach((topic) => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n // Messages.\n\n /**\n * Save message to persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {Object} msg - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addMessage(msg) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addMessage', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n trx.commit();\n });\n }\n\n /**\n * Update delivery status of a message stored in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update\n * @param {number} status - new delivery status of the message.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageStatus(topicName, seq, status) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageStatus', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (!src || src._status == status) {\n trx.commit();\n return;\n }\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n _status: status\n }));\n trx.commit();\n };\n });\n }\n\n /**\n * Remove one or more messages from persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} from - id of the message to remove or lower boundary when removing range (inclusive).\n * @param {number=} to - upper boundary (exclusive) when removing a range of messages.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remMessages(topicName, from, to) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n if (!from && !to) {\n from = 0;\n to = Number.MAX_SAFE_INTEGER;\n }\n const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) :\n IDBKeyRange.only([topicName, from]);\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = (event) => {\n resolve(event.target.result);\n };\n trx.onerror = (event) => {\n this.#logger('PCache', 'remMessages', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').delete(range);\n trx.commit();\n });\n }\n\n /**\n * Retrieve messages from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve messages from.\n * @param {function} callback to call for each retrieved message.\n * @param {Object} query - parameters of the message range to retrieve.\n * @param {number=} query.since - the least message ID to retrieve (inclusive).\n * @param {number=} query.before - the greatest message ID to retrieve (exclusive).\n * @param {number=} query.limit - the maximum number of messages to retrieve.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readMessages(topicName, query, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n query = query || {};\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n const result = [];\n const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n const trx = this.db.transaction(['message']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n // Iterate in descending order.\n trx.objectStore('message').openCursor(range, 'prev').onsuccess = (event) => {\n const cursor = event.target.result;\n if (cursor) {\n if (callback) {\n callback.call(context, cursor.value);\n }\n result.push(cursor.value);\n if (limit <= 0 || result.length < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n // Private methods.\n\n // Serializable topic fields.\n static #topic_fields = ['created', 'updated', 'deleted', 'read', 'recv', 'seq', 'clear', 'defacs',\n 'creds', 'public', 'trusted', 'private', 'touched', '_deleted'\n ];\n\n // Copy data from src to Topic object.\n static #deserializeTopic(topic, src) {\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n topic[f] = src[f];\n }\n });\n if (Array.isArray(src.tags)) {\n topic._tags = src.tags;\n }\n if (src.acs) {\n topic.setAccessMode(src.acs);\n }\n topic.seq |= 0;\n topic.read |= 0;\n topic.unread = Math.max(0, topic.seq - topic.read);\n }\n\n // Copy values from 'src' to 'dst'. Allocate dst if it's null or undefined.\n static #serializeTopic(dst, src) {\n const res = dst || {\n name: src.name\n };\n DB.#topic_fields.forEach((f) => {\n if (src.hasOwnProperty(f)) {\n res[f] = src[f];\n }\n });\n if (Array.isArray(src._tags)) {\n res.tags = src._tags;\n }\n if (src.acs) {\n res.acs = src.getAccessMode().jsonHelper();\n }\n return res;\n }\n\n static #serializeSubscription(dst, topicName, uid, sub) {\n const fields = ['updated', 'mode', 'read', 'recv', 'clear', 'lastSeen', 'userAgent'];\n const res = dst || {\n topic: topicName,\n uid: uid\n };\n\n fields.forEach((f) => {\n if (sub.hasOwnProperty(f)) {\n res[f] = sub[f];\n }\n });\n\n return res;\n }\n\n static #serializeMessage(dst, msg) {\n // Serializable fields.\n const fields = ['topic', 'seq', 'ts', '_status', 'from', 'head', 'content'];\n const res = dst || {};\n fields.forEach((f) => {\n if (msg.hasOwnProperty(f)) {\n res[f] = msg[f];\n }\n });\n return res;\n }\n\n /**\n * To use DB in a non browser context, supply indexedDB provider.\n * @static\n * @memberof DB\n * @param idbProvider indexedDB provider, e.g. for node require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IDBProvider = idbProvider;\n }\n}\n","/**\n * @file Utilities for uploading and downloading files.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n isUrlRelative,\n jsonParseHelper\n} from './utils.js';\n\nlet XHRProvider;\n\nfunction addURLParam(relUrl, key, value) {\n const url = new URL(relUrl, window.location.origin);\n url.searchParams.append(key, value);\n return url.toString().substring(window.location.origin.length);\n}\n\n/**\n * @class LargeFileHelper - utilities for uploading and downloading files out of band.\n * Don't instantiate this class directly. Use {Tinode.getLargeFileHelper} instead.\n * @memberof Tinode\n *\n * @param {Tinode} tinode - the main Tinode object.\n * @param {string} version - protocol version, i.e. '0'.\n */\nexport default class LargeFileHelper {\n constructor(tinode, version) {\n this._tinode = tinode;\n this._version = version;\n\n this._apiKey = tinode._apiKey;\n this._authToken = tinode.getAuthToken();\n\n // Ongoing requests.\n this.xhr = [];\n }\n\n /**\n * Start uploading the file to an endpoint at baseUrl.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} baseUrl base URL of upload server.\n * @param {File|Blob} data data to upload.\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n let url = `/v${this._version}/file/u/`;\n if (baseUrl) {\n let base = baseUrl;\n if (base.endsWith('/')) {\n // Removing trailing slash.\n base = base.slice(0, -1);\n }\n if (base.startsWith('http://') || base.startsWith('https://')) {\n url = base + url;\n } else {\n throw new Error(`Invalid base URL '${baseUrl}'`);\n }\n }\n\n const instance = this;\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n xhr.open('POST', url, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n if (this._authToken) {\n xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n }\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n xhr.upload.onprogress = e => {\n if (e.lengthComputable) {\n if (onProgress) {\n onProgress(e.loaded / e.total);\n }\n if (this.onProgress) {\n this.onProgress(e.loaded / e.total);\n }\n }\n };\n\n xhr.onload = function() {\n let pkt;\n try {\n pkt = JSON.parse(this.response, jsonParseHelper);\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n pkt = {\n ctrl: {\n code: this.status,\n text: this.statusText\n }\n };\n }\n\n if (this.status >= 200 && this.status < 300) {\n if (toResolve) {\n toResolve(pkt.ctrl.params.url);\n }\n if (onSuccess) {\n onSuccess(pkt.ctrl);\n }\n } else if (this.status >= 400) {\n if (toReject) {\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n }\n if (onFailure) {\n onFailure(pkt.ctrl);\n }\n } else {\n instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(e || new Error(\"failed\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n xhr.onabort = function(e) {\n if (toReject) {\n toReject(new Error(\"upload cancelled by user\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n try {\n const form = new FormData();\n form.append('file', data);\n form.set('id', this._tinode.getNextUniqueId());\n if (avatarFor) {\n form.set('topic', avatarFor);\n }\n xhr.send(form);\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onFailure) {\n onFailure(null);\n }\n }\n\n return result;\n }\n /**\n * Start uploading the file to default endpoint.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {File|Blob} data to upload\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n }\n /**\n * Download the file from a given URL using GET request. This method works with the Tinode server only.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} relativeUrl - URL to download the file from. Must be relative url, i.e. must not contain the host.\n * @param {string=} filename - file name to use for the downloaded file.\n *\n * @returns {Promise} resolved/rejected when the download is completed/failed.\n */\n download(relativeUrl, filename, mimetype, onProgress, onError) {\n if (!isUrlRelative(relativeUrl)) {\n // As a security measure refuse to download from an absolute URL.\n if (onError) {\n onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n }\n return;\n }\n if (!this._authToken) {\n if (onError) {\n onError(\"Must authenticate first\");\n }\n return;\n }\n const instance = this;\n\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n // Add '&asatt=1' to URL to request 'Content-Disposition: attachment' response header.\n relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n\n // Get data as blob (stored by the browser as a temporary file).\n xhr.open('GET', relativeUrl, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n xhr.responseType = 'blob';\n\n xhr.onprogress = function(e) {\n if (onProgress) {\n // Passing e.loaded instead of e.loaded/e.total because e.total\n // is always 0 with gzip compression enabled by the server.\n onProgress(e.loaded);\n }\n };\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n // The blob needs to be saved as file. There is no known way to\n // save the blob as file other than to fake a click on an .\n xhr.onload = function() {\n if (this.status == 200) {\n const link = document.createElement('a');\n // URL.createObjectURL is not available in non-browser environment. This call will fail.\n link.href = window.URL.createObjectURL(new Blob([this.response], {\n type: mimetype\n }));\n link.style.display = 'none';\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(link.href);\n if (toResolve) {\n toResolve();\n }\n } else if (this.status >= 400 && toReject) {\n // The this.responseText is undefined, must use this.response which is a blob.\n // Need to convert this.response to JSON. The blob can only be accessed by the\n // FileReader.\n const reader = new FileReader();\n reader.onload = function() {\n try {\n const pkt = JSON.parse(this.result, jsonParseHelper);\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n toReject(err);\n }\n };\n reader.readAsText(this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(new Error(\"failed\"));\n }\n if (onError) {\n onError(e);\n }\n };\n\n xhr.onabort = function() {\n if (toReject) {\n toReject(null);\n }\n };\n\n try {\n xhr.send();\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onError) {\n onError(err);\n }\n }\n\n return result;\n }\n /**\n * Try to cancel all ongoing uploads or downloads.\n * @memberof Tinode.LargeFileHelper#\n */\n cancel() {\n this.xhr.forEach(req => {\n if (req.readyState < 4) {\n req.abort();\n }\n });\n }\n /**\n * To use LargeFileHelper in a non browser context, supply XMLHttpRequest provider.\n * @static\n * @memberof LargeFileHelper\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProvider(xhrProvider) {\n XHRProvider = xhrProvider;\n }\n}\n","/**\n * @module tinode-sdk\n *\n * @copyright 2015-2022 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.20\n *\n * See https://github.com/tinode/webapp for real-life usage.\n *\n * @example\n * \n * \n * \n *\n * \n * ...\n * \n * \n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport CommError from './comm-error.js';\nimport Connection from './connection.js';\nimport DBCache from './db.js';\nimport Drafty from './drafty.js';\nimport LargeFileHelper from './large-file.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n Topic,\n TopicMe,\n TopicFnd\n} from './topic.js';\n\nimport {\n isUrlRelative,\n jsonParseHelper,\n mergeObj,\n rfc3339DateString,\n simplify\n} from './utils.js';\n\n// Re-export AccessMode\nexport {\n AccessMode\n};\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n WebSocketProvider = WebSocket;\n}\n\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n XHRProvider = XMLHttpRequest;\n}\n\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n IndexedDBProvider = indexedDB;\n}\n\n// Re-export Drafty.\nexport {\n Drafty\n}\n\ninitForNonBrowserApp();\n\n// Utility functions\n\n// Polyfill for non-browser context, e.g. NodeJs.\nfunction initForNonBrowserApp() {\n // Tinode requirement in native mode because react native doesn't provide Base64 method\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n if (typeof btoa == 'undefined') {\n global.btoa = function(input = '') {\n let str = input;\n let output = '';\n\n for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n\n charCode = str.charCodeAt(i += 3 / 4);\n\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n }\n block = block << 8 | charCode;\n }\n\n return output;\n };\n }\n\n if (typeof atob == 'undefined') {\n global.atob = function(input = '') {\n let str = input.replace(/=+$/, '');\n let output = '';\n\n if (str.length % 4 == 1) {\n throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++);\n\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n\n return output;\n };\n }\n\n if (typeof window == 'undefined') {\n global.window = {\n WebSocket: WebSocketProvider,\n XMLHttpRequest: XHRProvider,\n indexedDB: IndexedDBProvider,\n URL: {\n createObjectURL: function() {\n throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n }\n }\n }\n }\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n DBCache.setDatabaseProvider(IndexedDBProvider);\n}\n\n// Detect find most useful network transport.\nfunction detectTransport() {\n if (typeof window == 'object') {\n if (window['WebSocket']) {\n return 'ws';\n } else if (window['XMLHttpRequest']) {\n // The browser or node has no websockets, using long polling.\n return 'lp';\n }\n }\n return null;\n}\n\n// btoa replacement. Stock btoa fails on on non-Latin1 strings.\nfunction b64EncodeUnicode(str) {\n // The encodeURIComponent percent-encodes UTF-8 string,\n // then the percent encoding is converted into raw bytes which\n // can be fed into btoa.\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n}\n\n// JSON stringify helper - pre-processor for JSON.stringify\nfunction jsonBuildHelper(key, val) {\n if (val instanceof Date) {\n // Convert javascript Date objects to rfc3339 strings\n val = rfc3339DateString(val);\n } else if (val instanceof AccessMode) {\n val = val.jsonHelper();\n } else if (val === undefined || val === null || val === false ||\n (Array.isArray(val) && val.length == 0) ||\n ((typeof val == 'object') && (Object.keys(val).length == 0))) {\n // strip out empty elements while serializing objects to JSON\n return undefined;\n }\n\n return val;\n};\n\n// Trims very long strings (encoded images) to make logged packets more readable.\nfunction jsonLoggerHelper(key, val) {\n if (typeof val == 'string' && val.length > 128) {\n return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n }\n return jsonBuildHelper(key, val);\n};\n\n// Parse browser user agent to extract browser name and version.\nfunction getBrowserInfo(ua, product) {\n ua = ua || '';\n let reactnative = '';\n // Check if this is a ReactNative app.\n if (/reactnative/i.test(product)) {\n reactnative = 'ReactNative; ';\n }\n let result;\n // Remove useless string.\n ua = ua.replace(' (KHTML, like Gecko)', '');\n // Test for WebKit-based browser.\n let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n if (m) {\n // List of common strings, from more useful to less useful.\n // All unknown strings get the highest (-1) priority.\n const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n let tmp = ua.substr(m.index + m[0].length).split(' ');\n let tokens = [];\n let version; // 1.0 in Version/1.0 or undefined;\n // Split string like 'Name/0.0.0' into ['Name', '0.0.0', 3] where the last element is the priority.\n for (let i = 0; i < tmp.length; i++) {\n let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n if (m2) {\n // Unknown values are highest priority (-1).\n tokens.push([m2[1], m2[2], priority.findIndex((e) => {\n return m2[1].toLowerCase().startsWith(e);\n })]);\n if (m2[1] == 'Version') {\n version = m2[2];\n }\n }\n }\n // Sort by priority: more interesting is earlier than less interesting.\n tokens.sort((a, b) => {\n return a[2] - b[2];\n });\n if (tokens.length > 0) {\n // Return the least common browser string and version.\n if (tokens[0][0].toLowerCase().startsWith('edg')) {\n tokens[0][0] = 'Edge';\n } else if (tokens[0][0] == 'OPR') {\n tokens[0][0] = 'Opera';\n } else if (tokens[0][0] == 'Safari' && version) {\n tokens[0][1] = version;\n }\n result = tokens[0][0] + '/' + tokens[0][1];\n } else {\n // Failed to ID the browser. Return the webkit version.\n result = m[1];\n }\n } else if (/firefox/i.test(ua)) {\n m = /Firefox\\/([.\\d]+)/g.exec(ua);\n if (m) {\n result = 'Firefox/' + m[1];\n } else {\n result = 'Firefox/?';\n }\n } else {\n // Neither AppleWebKit nor Firefox. Try the last resort.\n m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n if (m) {\n result = m[1] + '/' + m[2];\n } else {\n m = ua.split(' ');\n result = m[0];\n }\n }\n\n // Shorten the version to one dot 'a.bb.ccc.d -> a.bb' at most.\n m = result.split('/');\n if (m.length > 1) {\n const v = m[1].split('.');\n const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n result = `${m[0]}/${v[0]}${minor}`;\n }\n return reactnative + result;\n}\n\n/**\n * The main class for interacting with Tinode server.\n */\nexport class Tinode {\n _host;\n _secure;\n\n _appName;\n\n // API Key.\n _apiKey;\n\n // Name and version of the browser.\n _browser = '';\n _platform;\n // Hardware\n _hwos = 'undefined';\n _humanLanguage = 'xx';\n\n // Logging to console enabled\n _loggingEnabled = false;\n // When logging, trip long strings (base64-encoded images) for readability\n _trimLongStrings = false;\n // UID of the currently authenticated user.\n _myUID = null;\n // Status of connection: authenticated or not.\n _authenticated = false;\n // Login used in the last successful basic authentication\n _login = null;\n // Token which can be used for login instead of login/password.\n _authToken = null;\n // Counter of received packets\n _inPacketCount = 0;\n // Counter for generating unique message IDs\n _messageId = Math.floor((Math.random() * 0xFFFF) + 0xFFFF);\n // Information about the server, if connected\n _serverInfo = null;\n // Push notification token. Called deviceToken for consistency with the Android SDK.\n _deviceToken = null;\n\n // Cache of pending promises by message id.\n _pendingPromises = {};\n // The Timeout object returned by the reject expired promises setInterval.\n _expirePromises = null;\n\n // Websocket or long polling connection.\n _connection = null;\n\n // Use indexDB for caching topics and messages.\n _persist = false;\n // IndexedDB wrapper object.\n _db = null;\n\n // Tinode's cache of objects\n _cache = {};\n\n /**\n * Create Tinode object.\n *\n * @param {Object} config - configuration parameters.\n * @param {string} config.appName - Name of the calling application to be reported in the User Agent.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - See {@link Tinode.Connection#transport}.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} config.platform - Optional platform identifier, one of \"ios\", \"web\", \"android\".\n * @param {boolen} config.persist - Use IndexedDB persistent storage.\n * @param {function} onComplete - callback to call when initialization is completed.\n */\n constructor(config, onComplete) {\n this._host = config.host;\n this._secure = config.secure;\n\n // Client-provided application name, format null if no valid credentials were given.\n */\n static credential(meth, val, params, resp) {\n if (typeof meth == 'object') {\n ({\n val,\n params,\n resp,\n meth\n } = meth);\n }\n if (meth && (val || resp)) {\n return [{\n 'meth': meth,\n 'val': val,\n 'resp': resp,\n 'params': params\n }];\n }\n return null;\n }\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n return Topic.topicType(name);\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.isMeTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a group topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.isGroupTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.isP2PTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isCommTopicName(name);\n }\n /**\n * Check if the topic name is a name of a new topic.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return Topic.isNewGroupTopicName(name);\n }\n /**\n * Check if the topic name is a name of a channel.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return Topic.isChannelTopicName(name);\n }\n /**\n * Get information about the current version of this Tinode client library.\n * @returns {string} semantic version of the library, e.g. \"0.15.5-rc1\".\n */\n static getVersion() {\n return Const.VERSION;\n }\n /**\n * To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n *\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n }\n /**\n * To use Tinode in a non browser context, supply indexedDB provider.\n * @static\n *\n * @param idbProvider indexedDB provider, e.g. for nodeJS , require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IndexedDBProvider = idbProvider;\n\n DBCache.setDatabaseProvider(IndexedDBProvider);\n }\n /**\n * Return information about the current name and version of this Tinode library.\n * @static\n *\n * @returns {string} the name of the library and it's version.\n */\n static getLibrary() {\n return Const.LIBRARY;\n }\n /**\n * Check if the given string represents NULL value as defined by Tinode ('\\u2421').\n * @param {string} str - string to check for NULL value.\n * @returns {boolean} true if string represents NULL value, false otherwise.\n */\n static isNullValue(str) {\n return str === Const.DEL_CHAR;\n }\n /**\n * Check if the given seq ID is likely to be issued by the server as oppisite to being temporary locally assigned ID.\n * @param {int} seq - seq ID to check.\n * @returns {boolean} true if seq is likely server-issued, false otherwise.\n */\n static isServerAssignedSeq(seq) {\n return seq > 0 && seq < Const.LOCAL_SEQID;\n }\n\n // Instance methods.\n\n // Generates unique message IDs\n getNextUniqueId() {\n return (this._messageId != 0) ? '' + this._messageId++ : undefined;\n };\n\n /**\n * Connect to the server.\n *\n * @param {string} host_ - name of the host to connect to.\n * @return {Promise} Promise resolved/rejected when the connection call completes:\n * resolve() is called without parameters, reject() receives the\n * Error as a single parameter.\n */\n connect(host_) {\n return this._connection.connect(host_);\n }\n\n /**\n * Attempt to reconnect to the server immediately.\n *\n * @param {string} force - if true, reconnect even if there is a connection already.\n */\n reconnect(force) {\n this._connection.reconnect(force);\n }\n\n /**\n * Disconnect from the server.\n */\n disconnect() {\n this._connection.disconnect();\n }\n\n /**\n * Clear persistent cache: remove IndexedDB.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n clearStorage() {\n if (this._db.isReady()) {\n return this._db.deleteDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Initialize persistent cache: create IndexedDB cache.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n initStorage() {\n if (!this._db.isReady()) {\n return this._db.initDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Send a network probe message to make sure the connection is alive.\n */\n networkProbe() {\n this._connection.probe();\n }\n\n /**\n * Check for live connection to server.\n *\n * @returns {boolean} true if there is a live connection, false otherwise.\n */\n isConnected() {\n return this._connection.isConnected();\n }\n\n /**\n * Check if connection is authenticated (last login was successful).\n *\n * @returns {boolean} true if authenticated, false otherwise.\n */\n isAuthenticated() {\n return this._authenticated;\n }\n\n /**\n * Add API key and auth token to the relative URL making it usable for getting data\n * from the server in a simple HTTP GET request.\n *\n * @param {string} URL - URL to wrap.\n * @returns {string} URL with appended API key and token, if valid token is present.\n */\n authorizeURL(url) {\n if (typeof url != 'string') {\n return url;\n }\n\n if (isUrlRelative(url)) {\n // Fake base to make the relative URL parseable.\n const base = 'scheme://host/';\n const parsed = new URL(url, base);\n if (this._apiKey) {\n parsed.searchParams.append('apikey', this._apiKey);\n }\n if (this._authToken && this._authToken.token) {\n parsed.searchParams.append('auth', 'token');\n parsed.searchParams.append('secret', this._authToken.token);\n }\n // Convert back to string and strip fake base URL except for the root slash.\n url = parsed.toString().substring(base.length - 1);\n }\n return url;\n }\n\n /**\n * @typedef AccountParams\n * @type {Object}\n * @property {DefAcs=} defacs - Default access parameters for user's me topic.\n * @property {Object=} public - Public application-defined data exposed on me topic.\n * @property {Object=} private - Private application-defined data accessible on me topic.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n * @property {Array.me for authenticated users.\n * @property {string=} anon - Access mode for me for anonymous users.\n */\n\n /**\n * Create or update an account.\n *\n * @param {string} uid - User id to update\n * @param {string} scheme - Authentication scheme; \"basic\" and \"anonymous\" are the currently supported schemes.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n account(uid, scheme, secret, login, params) {\n const pkt = this.#initPacket('acc');\n pkt.acc.user = uid;\n pkt.acc.scheme = scheme;\n pkt.acc.secret = secret;\n // Log in to the new account using selected scheme\n pkt.acc.login = login;\n\n if (params) {\n pkt.acc.desc.defacs = params.defacs;\n pkt.acc.desc.public = params.public;\n pkt.acc.desc.private = params.private;\n pkt.acc.desc.trusted = params.trusted;\n\n pkt.acc.tags = params.tags;\n pkt.acc.cred = params.cred;\n\n pkt.acc.tmpscheme = params.scheme;\n pkt.acc.tmpsecret = params.secret;\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n return this.#send(pkt, pkt.acc.id);\n }\n\n /**\n * Create a new user. Wrapper for {@link Tinode#account}.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccount(scheme, secret, login, params) {\n let promise = this.account(Const.USER_NEW, scheme, secret, login, params);\n if (login) {\n promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n }\n return promise;\n }\n\n /**\n * Create user with 'basic' authentication scheme and immediately\n * use it for authentication. Wrapper for {@link Tinode#account}.\n *\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccountBasic(username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.createAccount('basic',\n b64EncodeUnicode(username + ':' + password), true, params);\n }\n\n /**\n * Update user's credentials for 'basic' authentication scheme. Wrapper for {@link Tinode#account}.\n *\n * @param {string} uid - User ID to update.\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n updateAccountBasic(uid, username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.account(uid, 'basic',\n b64EncodeUnicode(username + ':' + password), false, params);\n }\n\n /**\n * Send handshake to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n hello() {\n const pkt = this.#initPacket('hi');\n\n return this.#send(pkt, pkt.hi.id)\n .then(ctrl => {\n // Reset backoff counter on successful connection.\n this._connection.backoffReset();\n\n // Server response contains server protocol version, build, constraints,\n // session ID for long polling. Save them.\n if (ctrl.params) {\n this._serverInfo = ctrl.params;\n }\n\n if (this.onConnect) {\n this.onConnect();\n }\n\n return ctrl;\n }).catch(err => {\n this._connection.reconnect(true);\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n });\n }\n\n /**\n * Set or refresh the push notifications/device token. If the client is connected,\n * the deviceToken can be sent to the server.\n *\n * @param {string} dt - token obtained from the provider or false,\n * null or undefined to clear the token.\n *\n * @returns true if attempt was made to send the update to the server.\n */\n setDeviceToken(dt) {\n let sent = false;\n // Convert any falsish value to null.\n dt = dt || null;\n if (dt != this._deviceToken) {\n this._deviceToken = dt;\n if (this.isConnected() && this.isAuthenticated()) {\n this.#send({\n 'hi': {\n 'dev': dt || Tinode.DEL_CHAR\n }\n });\n sent = true;\n }\n }\n return sent;\n }\n\n /**\n * @typedef Credential\n * @type {Object}\n * @property {string} meth - validation method.\n * @property {string} val - value to validate (e.g. email or phone number).\n * @property {string} resp - validation response.\n * @property {Object} params - validation parameters.\n */\n /**\n * Authenticate current session.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n login(scheme, secret, cred) {\n const pkt = this.#initPacket('login');\n pkt.login.scheme = scheme;\n pkt.login.secret = secret;\n pkt.login.cred = cred;\n\n return this.#send(pkt, pkt.login.id)\n .then(ctrl => this.#loginSuccessful(ctrl));\n }\n\n /**\n * Wrapper for {@link Tinode#login} with basic authentication\n *\n * @param {string} uname - User name.\n * @param {string} password - Password.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginBasic(uname, password, cred) {\n return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred)\n .then(ctrl => {\n this._login = uname;\n return ctrl;\n });\n }\n\n /**\n * Wrapper for {@link Tinode#login} with token authentication\n *\n * @param {string} token - Token received in response to earlier login.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginToken(token, cred) {\n return this.login('token', token, cred);\n }\n\n /**\n * Send a request for resetting an authentication secret.\n *\n * @param {string} scheme - authentication scheme to reset.\n * @param {string} method - method to use for resetting the secret, such as \"email\" or \"tel\".\n * @param {string} value - value of the credential to use, a specific email address or a phone number.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving the server reply.\n */\n requestResetAuthSecret(scheme, method, value) {\n return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n }\n\n /**\n * @typedef AuthToken\n * @type {Object}\n * @property {string} token - Token value.\n * @property {Date} expires - Token expiration time.\n */\n /**\n * Get stored authentication token.\n *\n * @returns {AuthToken} authentication token.\n */\n getAuthToken() {\n if (this._authToken && (this._authToken.expires.getTime() > Date.now())) {\n return this._authToken;\n } else {\n this._authToken = null;\n }\n return null;\n }\n\n /**\n * Application may provide a saved authentication token.\n *\n * @param {AuthToken} token - authentication token.\n */\n setAuthToken(token) {\n this._authToken = token;\n }\n\n /**\n * @typedef SetParams\n * @type {Object}\n * @property {SetDesc=} desc - Topic initialization parameters when creating a new topic or a new subscription.\n * @property {SetSub=} sub - Subscription initialization parameters.\n * @property {Array.true, detach and unsubscribe, otherwise just detach.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n leave(topic, unsub) {\n const pkt = this.#initPacket('leave', topic);\n pkt.leave.unsub = unsub;\n\n return this.#send(pkt, pkt.leave.id);\n }\n\n /**\n * Create message draft without sending it to the server.\n *\n * @param {string} topic - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Object} new message which can be sent to the server or otherwise used.\n */\n createMessage(topic, content, noEcho) {\n const pkt = this.#initPacket('pub', topic);\n\n let dft = typeof content == 'string' ? Drafty.parse(content) : content;\n if (dft && !Drafty.isPlainText(dft)) {\n pkt.pub.head = {\n mime: Drafty.getContentType()\n };\n content = dft;\n }\n pkt.pub.noecho = noEcho;\n pkt.pub.content = content;\n\n return pkt.pub;\n }\n\n /**\n * Publish {data} message to topic.\n *\n * @param {string} topicName - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publish(topicName, content, noEcho) {\n return this.publishMessage(\n this.createMessage(topicName, content, noEcho)\n );\n }\n\n /**\n * Publish message to topic. The message should be created by {@link Tinode#createMessage}.\n *\n * @param {Object} pub - Message to publish.\n * @param {Array.'me' topic.\n *\n * @param {string} method - validation method such as 'email' or 'tel'.\n * @param {string} value - validation value, i.e. 'alice@example.com'.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n const pkt = this.#initPacket('del', Const.TOPIC_ME);\n pkt.del.what = 'cred';\n pkt.del.cred = {\n meth: method,\n val: value\n };\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Request to delete account of the current user.\n *\n * @param {boolean} hard - hard-delete user.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCurrentUser(hard) {\n const pkt = this.#initPacket('del', null);\n pkt.del.what = 'user';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id).then(_ => {\n this._myUID = null;\n });\n }\n\n /**\n * Notify server that a message or messages were read or received. Does NOT return promise.\n *\n * @param {string} topicName - Name of the topic where the mesage is being aknowledged.\n * @param {string} what - Action being aknowledged, either \"read\" or \"recv\".\n * @param {number} seq - Maximum id of the message being acknowledged.\n * @throws {Error} if seq is invalid.\n */\n note(topicName, what, seq) {\n if (seq <= 0 || seq >= Const.LOCAL_SEQID) {\n throw new Error(`Invalid message id ${seq}`);\n }\n\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = what;\n pkt.note.seq = seq;\n this.#send(pkt);\n }\n\n /**\n * Broadcast a key-press notification to topic subscribers. Used to show\n * typing notifications \"user X is typing...\".\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {string=} type - notification to send, default is 'kp'.\n */\n noteKeyPress(topicName, type) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = type || 'kp';\n this.#send(pkt);\n }\n\n /**\n * Send a video call notification to topic subscribers (including dialing,\n * hangup, etc.).\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} evt - Call event.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(topicName, seq, evt, payload) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'call';\n pkt.note.event = evt;\n pkt.note.payload = payload;\n this.#send(pkt, pkt.note.id);\n }\n\n /**\n * Get a named topic, either pull it from cache or create a new instance.\n * There is a single instance of topic for each name.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested or newly created topic or undefined if topic name is invalid.\n */\n getTopic(topicName) {\n let topic = this.#cacheGet('topic', topicName);\n if (!topic && topicName) {\n if (topicName == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (topicName == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(topicName);\n }\n // Cache management.\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Don't save to DB here: a record will be added when the topic is subscribed.\n }\n return topic;\n }\n\n /**\n * Get a named topic from cache.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested topic or undefined if topic is not found in cache.\n */\n cacheGetTopic(topicName) {\n return this.#cacheGet('topic', topicName);\n }\n\n /**\n * Remove named topic from cache.\n *\n * @param {string} topicName - Name of the topic to remove from cache.\n */\n cacheRemTopic(topicName) {\n this.#cacheDel('topic', topicName);\n }\n\n /**\n * Iterate over cached topics.\n *\n * @param {Function} func - callback to call for each topic.\n * @param {Object} context - 'this' inside the 'func'.\n */\n mapTopics(func, context) {\n this.#cacheMap('topic', func, context);\n }\n\n /**\n * Check if named topic is already present in cache.\n *\n * @param {string} topicName - Name of the topic to check.\n * @returns {boolean} true if topic is found in cache, false otherwise.\n */\n isTopicCached(topicName) {\n return !!this.#cacheGet('topic', topicName);\n }\n\n /**\n * Generate unique name like 'new123456' suitable for creating a new group topic.\n *\n * @param {boolean} isChan - if the topic is channel-enabled.\n * @returns {string} name which can be used for creating a new group topic.\n */\n newGroupTopicName(isChan) {\n return (isChan ? Const.TOPIC_NEW_CHAN : Const.TOPIC_NEW) + this.getNextUniqueId();\n }\n\n /**\n * Instantiate 'me' topic or get it from cache.\n *\n * @returns {TopicMe} Instance of 'me' topic.\n */\n getMeTopic() {\n return this.getTopic(Const.TOPIC_ME);\n }\n\n /**\n * Instantiate 'fnd' (find) topic or get it from cache.\n *\n * @returns {Topic} Instance of 'fnd' topic.\n */\n getFndTopic() {\n return this.getTopic(Const.TOPIC_FND);\n }\n\n /**\n * Create a new {@link LargeFileHelper} instance\n *\n * @returns {LargeFileHelper} instance of a {@link Tinode.LargeFileHelper}.\n */\n getLargeFileHelper() {\n return new LargeFileHelper(this, Const.PROTOCOL_VERSION);\n }\n\n /**\n * Get the UID of the the current authenticated user.\n *\n * @returns {string} UID of the current user or undefined if the session is not yet\n * authenticated or if there is no session.\n */\n getCurrentUserID() {\n return this._myUID;\n }\n\n /**\n * Check if the given user ID is equal to the current user's UID.\n *\n * @param {string} uid - UID to check.\n *\n * @returns {boolean} true if the given UID belongs to the current logged in user.\n */\n isMe(uid) {\n return this._myUID === uid;\n }\n\n /**\n * Get login used for last successful authentication.\n *\n * @returns {string} login last used successfully or undefined.\n */\n getCurrentLogin() {\n return this._login;\n }\n\n /**\n * Return information about the server: protocol version and build timestamp.\n *\n * @returns {Object} build and version of the server or null if there is no connection or\n * if the first server response has not been received yet.\n */\n getServerInfo() {\n return this._serverInfo;\n }\n\n /**\n * Report a topic for abuse. Wrapper for {@link Tinode#publish}.\n *\n * @param {string} action - the only supported action is 'report'.\n * @param {string} target - name of the topic being reported.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n report(action, target) {\n return this.publish(Const.TOPIC_SYS, Drafty.attachJSON(null, {\n 'action': action,\n 'target': target\n }));\n }\n\n /**\n * Return server-provided configuration value.\n *\n * @param {string} name of the value to return.\n * @param {Object} defaultValue to return in case the parameter is not set or not found.\n *\n * @returns {Object} named value.\n */\n getServerParam(name, defaultValue) {\n return this._serverInfo && this._serverInfo[name] || defaultValue;\n }\n\n /**\n * Toggle console logging. Logging is off by default.\n *\n * @param {boolean} enabled - Set to true to enable logging to console.\n * @param {boolean} trimLongStrings - Set to true to trim long strings.\n */\n enableLogging(enabled, trimLongStrings) {\n this._loggingEnabled = enabled;\n this._trimLongStrings = enabled && trimLongStrings;\n }\n\n /**\n * Set UI language to report to the server. Must be called before 'hi' is sent, otherwise it will not be used.\n *\n * @param {string} hl - human (UI) language, like \"en_US\" or \"zh-Hans\".\n */\n setHumanLanguage(hl) {\n if (hl) {\n this._humanLanguage = hl;\n }\n }\n\n /**\n * Check if given topic is online.\n *\n * @param {string} name of the topic to test.\n * @returns {boolean} true if topic is online, false otherwise.\n */\n isTopicOnline(name) {\n const topic = this.#cacheGet('topic', name);\n return topic && topic.online;\n }\n\n /**\n * Get access mode for the given contact.\n *\n * @param {string} name of the topic to query.\n * @returns {AccessMode} access mode if topic is found, null otherwise.\n */\n getTopicAccessMode(name) {\n const topic = this.#cacheGet('topic', name);\n return topic ? topic.acs : null;\n }\n\n /**\n * Include message ID into all subsequest messages to server instructin it to send aknowledgemens.\n * Required for promises to function. Default is \"on\".\n *\n * @param {boolean} status - Turn aknowledgemens on or off.\n * @deprecated\n */\n wantAkn(status) {\n if (status) {\n this._messageId = Math.floor((Math.random() * 0xFFFFFF) + 0xFFFFFF);\n } else {\n this._messageId = 0;\n }\n }\n\n // Callbacks:\n /**\n * Callback to report when the websocket is opened. The callback has no parameters.\n *\n * @type {onWebsocketOpen}\n */\n onWebsocketOpen = undefined;\n\n /**\n * @typedef ServerParams\n *\n * @type {Object}\n * @property {string} ver - Server version\n * @property {string} build - Server build\n * @property {string=} sid - Session ID, long polling connections only.\n */\n\n /**\n * @callback onConnect\n * @param {number} code - Result code\n * @param {string} text - Text epxplaining the completion, i.e \"OK\" or an error message.\n * @param {ServerParams} params - Parameters returned by the server.\n */\n /**\n * Callback to report when connection with Tinode server is established.\n * @type {onConnect}\n */\n onConnect = undefined;\n\n /**\n * Callback to report when connection is lost. The callback has no parameters.\n * @type {onDisconnect}\n */\n onDisconnect = undefined;\n\n /**\n * @callback onLogin\n * @param {number} code - NUmeric completion code, same as HTTP status codes.\n * @param {string} text - Explanation of the completion code.\n */\n /**\n * Callback to report login completion.\n * @type {onLogin}\n */\n onLogin = undefined;\n\n /**\n * Callback to receive {ctrl} (control) messages.\n * @type {onCtrlMessage}\n */\n onCtrlMessage = undefined;\n\n /**\n * Callback to recieve {data} (content) messages.\n * @type {onDataMessage}\n */\n onDataMessage = undefined;\n\n /**\n * Callback to receive {pres} (presence) messages.\n * @type {onPresMessage}\n */\n onPresMessage = undefined;\n\n /**\n * Callback to receive all messages as objects.\n * @type {onMessage}\n */\n onMessage = undefined;\n\n /**\n * Callback to receive all messages as unparsed text.\n * @type {onRawMessage}\n */\n onRawMessage = undefined;\n\n /**\n * Callback to receive server responses to network probes. See {@link Tinode#networkProbe}\n * @type {onNetworkProbe}\n */\n onNetworkProbe = undefined;\n\n /**\n * Callback to be notified when exponential backoff is iterating.\n * @type {onAutoreconnectIteration}\n */\n onAutoreconnectIteration = undefined;\n};\n\n// Exported constants\nTinode.MESSAGE_STATUS_NONE = Const.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = Const.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = Const.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = Const.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = Const.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = Const.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = Const.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = Const.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = Const.MESSAGE_STATUS_TO_ME;\n\n// Unicode [del] symbol.\nTinode.DEL_CHAR = Const.DEL_CHAR;\n\n// Names of keys to server-provided configuration limits.\nTinode.MAX_MESSAGE_SIZE = 'maxMessageSize';\nTinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nTinode.MAX_TAG_COUNT = 'maxTagCount';\nTinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nTinode.REQ_CRED_VALIDATORS = 'reqCred';\n\n// Tinode URI topic ID prefix, 'scheme:path/'.\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:topic/';\n","/**\n * @file Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n/**\n * Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @class MetaGetBuilder\n * @memberof Tinode\n *\n * @param {Tinode.Topic} parent topic which instantiated this builder.\n */\nexport default class MetaGetBuilder {\n constructor(parent) {\n this.topic = parent;\n this.what = {};\n }\n\n // Get timestamp of the most recent desc update.\n #get_desc_ims() {\n return this.topic._deleted ? undefined : this.topic.updated;\n }\n\n // Get timestamp of the most recent subs update.\n #get_subs_ims() {\n if (this.topic.isP2PType()) {\n return this.#get_desc_ims();\n }\n return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n }\n /**\n * Add query parameters to fetch messages within explicit limits.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - messages newer than this (inclusive);\n * @param {number=} before - older than this (exclusive)\n * @param {number=} limit - number of messages to fetch\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withData(since, before, limit) {\n this.what['data'] = {\n since: since,\n before: before,\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages newer than the latest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of messages to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterData(limit) {\n return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n }\n /**\n * Add query parameters to fetch messages older than the earliest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of messages to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withEarlierData(limit) {\n return this.withData(undefined, this.topic._minSeq > 0 ? this.topic._minSeq : undefined, limit);\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the given timestamp.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch messages newer than this timestamp.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDesc(ims) {\n this.what['desc'] = {\n ims: ims\n };\n return this;\n }\n /**\n * Add query parameters to fetch topic description if it's newer than the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDesc() {\n return this.withDesc(this.#get_desc_ims());\n }\n /**\n * Add query parameters to fetch subscriptions.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {number=} limit - maximum number of subscriptions to fetch.\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withSub(ims, limit, userOrTopic) {\n const opts = {\n ims: ims,\n limit: limit\n };\n if (this.topic.getType() == 'me') {\n opts.topic = userOrTopic;\n } else {\n opts.user = userOrTopic;\n }\n this.what['sub'] = opts;\n return this;\n }\n /**\n * Add query parameters to fetch a single subscription.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Date=} ims - fetch subscriptions modified more recently than this timestamp\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withOneSub(ims, userOrTopic) {\n return this.withSub(ims, undefined, userOrTopic);\n }\n /**\n * Add query parameters to fetch a single subscription if it's been updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {string=} userOrTopic - user ID or topic name to fetch for fetching one subscription.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterOneSub(userOrTopic) {\n return this.withOneSub(this.topic._lastSubsUpdate, userOrTopic);\n }\n /**\n * Add query parameters to fetch subscriptions updated since the last update.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - maximum number of subscriptions to fetch.\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterSub(limit) {\n return this.withSub(this.#get_subs_ims(), limit);\n }\n /**\n * Add query parameters to fetch topic tags.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withTags() {\n this.what['tags'] = true;\n return this;\n }\n /**\n * Add query parameters to fetch user's credentials. 'me' topic only.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withCred() {\n if (this.topic.getType() == 'me') {\n this.what['cred'] = true;\n } else {\n this.topic._tinode.logger(\"ERROR: Invalid topic type for MetaGetBuilder:withCreds\", this.topic.getType());\n }\n return this;\n }\n /**\n * Add query parameters to fetch deleted messages within explicit limits. Any/all parameters can be null.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - ids of messages deleted since this 'del' id (inclusive)\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withDel(since, limit) {\n if (since || limit) {\n this.what['del'] = {\n since: since,\n limit: limit\n };\n }\n return this;\n }\n /**\n * Add query parameters to fetch messages deleted after the saved 'del' id.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of deleted message ids to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterDel(limit) {\n // Specify 'since' only if we have already received some messages. If\n // we have no locally cached messages then we don't care if any messages were deleted.\n return this.withDel(this.topic._maxSeq > 0 ? this.topic._maxDel + 1 : undefined, limit);\n }\n\n /**\n * Extract subquery: get an object that contains specified subquery.\n * @memberof Tinode.MetaGetBuilder#\n * @param {string} what - subquery to return: one of 'data', 'sub', 'desc', 'tags', 'cred', 'del'.\n * @returns {Object} requested subquery or undefined.\n */\n extract(what) {\n return this.what[what];\n }\n\n /**\n * Construct parameters.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @returns {Tinode.GetQuery} Get query\n */\n build() {\n const what = [];\n let params = {};\n ['data', 'sub', 'desc', 'tags', 'cred', 'del'].forEach((key) => {\n if (this.what.hasOwnProperty(key)) {\n what.push(key);\n if (Object.getOwnPropertyNames(this.what[key]).length > 0) {\n params[key] = this.what[key];\n }\n }\n });\n if (what.length > 0) {\n params.what = what.join(' ');\n } else {\n params = undefined;\n }\n return params;\n }\n}\n","/**\n * @file In-memory sorted cache of objects.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n/**\n * In-memory sorted cache of objects.\n *\n * @class CBuffer\n * @memberof Tinode\n * @protected\n *\n * @param {function} compare custom comparator of objects. Takes two parameters a and b;\n * returns -1 if a < b, 0 if a == b, 1 otherwise.\n * @param {boolean} unique enforce element uniqueness: when true replace existing element with a new\n * one on conflict; when false keep both elements.\n */\nexport default class CBuffer {\n #comparator = undefined;\n #unique = false;\n buffer = [];\n\n constructor(compare_, unique_) {\n this.#comparator = compare_ || ((a, b) => {\n return a === b ? 0 : a < b ? -1 : 1;\n });\n this.#unique = unique_;\n }\n\n #findNearest(elem, arr, exact) {\n let start = 0;\n let end = arr.length - 1;\n let pivot = 0;\n let diff = 0;\n let found = false;\n\n while (start <= end) {\n pivot = (start + end) / 2 | 0;\n diff = this.#comparator(arr[pivot], elem);\n if (diff < 0) {\n start = pivot + 1;\n } else if (diff > 0) {\n end = pivot - 1;\n } else {\n found = true;\n break;\n }\n }\n if (found) {\n return {\n idx: pivot,\n exact: true\n };\n }\n if (exact) {\n return {\n idx: -1\n };\n }\n // Not exact - insertion point\n return {\n idx: diff < 0 ? pivot + 1 : pivot\n };\n }\n\n // Insert element into a sorted array.\n #insertSorted(elem, arr) {\n const found = this.#findNearest(elem, arr, false);\n const count = (found.exact && this.#unique) ? 1 : 0;\n arr.splice(found.idx, count, elem);\n return arr;\n }\n\n /**\n * Get an element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to fetch from.\n * @returns {Object} Element at the given position or undefined.\n */\n getAt(at) {\n return this.buffer[at];\n }\n\n /**\n * Convenience method for getting the element from the end of the buffer.\n * @memberof Tinode.CBuffer#\n * @param {number} at - position to fetch from, counting from the end;\n * undefined or null mean \"last\".\n * @returns {Object} The last element in the buffer or undefined if buffer is empty.\n */\n getLast(at) {\n at |= 0;\n return this.buffer.length > at ? this.buffer[this.buffer.length - 1 - at] : undefined;\n }\n\n /**\n * Add new element(s) to the buffer. Variadic: takes one or more arguments. If an array is passed as a single\n * argument, its elements are inserted individually.\n * @memberof Tinode.CBuffer#\n *\n * @param {...Object|Array} - One or more objects to insert.\n */\n put() {\n let insert;\n // inspect arguments: if array, insert its elements, if one or more non-array arguments, insert them one by one\n if (arguments.length == 1 && Array.isArray(arguments[0])) {\n insert = arguments[0];\n } else {\n insert = arguments;\n }\n for (let idx in insert) {\n this.#insertSorted(insert[idx], this.buffer);\n }\n }\n\n /**\n * Remove element at the given position.\n * @memberof Tinode.CBuffer#\n * @param {number} at - Position to delete at.\n * @returns {Object} Element at the given position or undefined.\n */\n delAt(at) {\n at |= 0;\n let r = this.buffer.splice(at, 1);\n if (r && r.length > 0) {\n return r[0];\n }\n return undefined;\n }\n\n /**\n * Remove elements between two positions.\n * @memberof Tinode.CBuffer#\n * @param {number} since - Position to delete from (inclusive).\n * @param {number} before - Position to delete to (exclusive).\n *\n * @returns {Array} array of removed elements (could be zero length).\n */\n delRange(since, before) {\n return this.buffer.splice(since, before - since);\n }\n\n /**\n * Return the number of elements the buffer holds.\n * @memberof Tinode.CBuffer#\n * @return {number} Number of elements in the buffer.\n */\n length() {\n return this.buffer.length;\n }\n\n /**\n * Reset the buffer discarding all elements\n * @memberof Tinode.CBuffer#\n */\n reset() {\n this.buffer = [];\n }\n\n /**\n * Callback for iterating contents of buffer. See {@link Tinode.CBuffer#forEach}.\n * @callback ForEachCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {Object} prev - Previous element of the buffer.\n * @param {Object} next - Next element of the buffer.\n * @param {number} index - Index of the current element.\n */\n\n /**\n * Apply given callback to all elements of the buffer.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.ForEachCallbackType} callback - Function to call for each element.\n * @param {number} startIdx - Optional index to start iterating from (inclusive).\n * @param {number} beforeIdx - Optional index to stop iterating before (exclusive).\n * @param {Object} context - calling context (i.e. value of this in callback)\n */\n forEach(callback, startIdx, beforeIdx, context) {\n startIdx = startIdx | 0;\n beforeIdx = beforeIdx || this.buffer.length;\n\n for (let i = startIdx; i < beforeIdx; i++) {\n callback.call(context, this.buffer[i],\n (i > startIdx ? this.buffer[i - 1] : undefined),\n (i < beforeIdx - 1 ? this.buffer[i + 1] : undefined), i);\n }\n }\n\n /**\n * Find element in buffer using buffer's comparison function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Object} elem - element to find.\n * @param {boolean=} nearest - when true and exact match is not found, return the nearest element (insertion point).\n * @returns {number} index of the element in the buffer or -1.\n */\n find(elem, nearest) {\n const {\n idx\n } = this.#findNearest(elem, this.buffer, !nearest);\n return idx;\n }\n\n /**\n * Callback for filtering the buffer. See {@link Tinode.CBuffer#filter}.\n * @callback FilterCallbackType\n * @memberof Tinode.CBuffer#\n * @param {Object} elem - Current element of the buffer.\n * @param {number} index - Index of the current element.\n * @returns {boolen} true to keep the element, false to remove.\n */\n\n /**\n * Remove all elements that do not pass the test implemented by the provided callback function.\n * @memberof Tinode.CBuffer#\n *\n * @param {Tinode.FilterCallbackType} callback - Function to call for each element.\n * @param {Object} context - calling context (i.e. value of this in the callback)\n */\n filter(callback, context) {\n let count = 0;\n for (let i = 0; i < this.buffer.length; i++) {\n if (callback.call(context, this.buffer[i], i)) {\n this.buffer[count] = this.buffer[i];\n count++;\n }\n }\n\n this.buffer.splice(count);\n }\n\n /**\n * Check if buffer is empty.\n * @returns {boolean} true if the buffer is empty, false otherwise.\n */\n isEmpty() {\n return this.buffer.length == 0;\n }\n}\n","/**\n * @file Topic management.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport CBuffer from './cbuffer.js';\nimport CommError from './comm-error.js';\nimport * as Const from './config.js';\nimport Drafty from './drafty.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport {\n mergeObj,\n mergeToCache,\n normalizeArray\n} from './utils.js';\n\n/**\n * Topic is a class representing a logical communication channel.\n */\nexport class Topic {\n /**\n * @callback onData\n * @param {Data} data - Data packet\n */\n\n /**\n * Create topic.\n * @param {string} name - Name of the topic to create.\n * @param {Object=} callbacks - Object with various event callbacks.\n * @param {onData} callbacks.onData - Callback which receives a {data} message.\n * @param {callback} callbacks.onMeta - Callback which receives a {meta} message.\n * @param {callback} callbacks.onPres - Callback which receives a {pres} message.\n * @param {callback} callbacks.onInfo - Callback which receives an {info} message.\n * @param {callback} callbacks.onMetaDesc - Callback which receives changes to topic desctioption {@link desc}.\n * @param {callback} callbacks.onMetaSub - Called for a single subscription record change.\n * @param {callback} callbacks.onSubsUpdated - Called after a batch of subscription changes have been recieved and cached.\n * @param {callback} callbacks.onDeleteTopic - Called after the topic is deleted.\n * @param {callback} callbacls.onAllMessagesReceived - Called when all requested {data} messages have been recived.\n */\n constructor(name, callbacks) {\n // Parent Tinode object.\n this._tinode = null;\n\n // Server-provided data, locally immutable.\n // topic name\n this.name = name;\n // Timestamp when the topic was created.\n this.created = null;\n // Timestamp when the topic was last updated.\n this.updated = null;\n // Timestamp of the last messages\n this.touched = new Date(0);\n // Access mode, see AccessMode\n this.acs = new AccessMode(null);\n // Per-topic private data (accessible by current user only).\n this.private = null;\n // Per-topic public data (accessible by all users).\n this.public = null;\n // Per-topic system-provided data (accessible by all users).\n this.trusted = null;\n\n // Locally cached data\n // Subscribed users, for tracking read/recv/msg notifications.\n this._users = {};\n\n // Current value of locally issued seqId, used for pending messages.\n this._queuedSeqId = Const.LOCAL_SEQID;\n\n // The maximum known {data.seq} value.\n this._maxSeq = 0;\n // The minimum known {data.seq} value.\n this._minSeq = 0;\n // Indicator that the last request for earlier messages returned 0.\n this._noEarlierMsgs = false;\n // The maximum known deletion ID.\n this._maxDel = 0;\n // Timer object used to send 'recv' notifications.\n this._recvNotificationTimer = null;\n\n // User discovery tags\n this._tags = [];\n // Credentials such as email or phone number.\n this._credentials = [];\n // Message versions cache (e.g. for edited messages).\n // Keys: original message seq ID.\n // Values: CBuffers containing newer versions of the original message\n // ordered by seq id.\n this._messageVersions = {};\n // Message cache, sorted by message seq values, from old to new.\n this._messages = new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n // Boolean, true if the topic is currently live\n this._attached = false;\n // Timestap of the most recently updated subscription.\n this._lastSubsUpdate = new Date(0);\n // Topic created but not yet synced with the server. Used only during initialization.\n this._new = true;\n // The topic is deleted at the server, this is a local copy.\n this._deleted = false;\n\n // Timer used to trgger {leave} request after a delay.\n this._delayedLeaveTimer = null;\n\n // Callbacks\n if (callbacks) {\n this.onData = callbacks.onData;\n this.onMeta = callbacks.onMeta;\n this.onPres = callbacks.onPres;\n this.onInfo = callbacks.onInfo;\n // A single desc update;\n this.onMetaDesc = callbacks.onMetaDesc;\n // A single subscription record;\n this.onMetaSub = callbacks.onMetaSub;\n // All subscription records received;\n this.onSubsUpdated = callbacks.onSubsUpdated;\n this.onTagsUpdated = callbacks.onTagsUpdated;\n this.onCredsUpdated = callbacks.onCredsUpdated;\n this.onDeleteTopic = callbacks.onDeleteTopic;\n this.onAllMessagesReceived = callbacks.onAllMessagesReceived;\n }\n }\n\n // Static methods.\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n const types = {\n 'me': Const.TOPIC_ME,\n 'fnd': Const.TOPIC_FND,\n 'grp': Const.TOPIC_GRP,\n 'new': Const.TOPIC_GRP,\n 'nch': Const.TOPIC_GRP,\n 'chn': Const.TOPIC_GRP,\n 'usr': Const.TOPIC_P2P,\n 'sys': Const.TOPIC_SYS\n };\n return types[(typeof name == 'string') ? name.substring(0, 3) : 'xxx'];\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_ME;\n }\n\n /**\n * Check if the given topic name is a name of a group topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_GRP;\n }\n\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.topicType(name) == Const.TOPIC_P2P;\n }\n\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @static\n *\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isP2PTopicName(name) || Topic.isGroupTopicName(name);\n }\n\n /**\n * Check if the topic name is a name of a new topic.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_NEW || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic name is a name of a channel.\n * @static\n *\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return (typeof name == 'string') &&\n (name.substring(0, 3) == Const.TOPIC_CHAN || name.substring(0, 3) == Const.TOPIC_NEW_CHAN);\n }\n\n /**\n * Check if the topic is subscribed.\n * @returns {boolean} True is topic is attached/subscribed, false otherwise.\n */\n isSubscribed() {\n return this._attached;\n }\n\n /**\n * Request topic to subscribe. Wrapper for {@link Tinode#subscribe}.\n *\n * @param {Tinode.GetQuery=} getParams - get query parameters.\n * @param {Tinode.SetParams=} setParams - set parameters.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n subscribe(getParams, setParams) {\n // Clear request to leave topic.\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = null;\n\n // If the topic is already subscribed, return resolved promise\n if (this._attached) {\n return Promise.resolve(this);\n }\n\n // Send subscribe message, handle async response.\n // If topic name is explicitly provided, use it. If no name, then it's a new group topic,\n // use \"new\".\n return this._tinode.subscribe(this.name || Const.TOPIC_NEW, getParams, setParams).then(ctrl => {\n if (ctrl.code >= 300) {\n // Do nothing if subscription status has not changed.\n return ctrl;\n }\n\n this._attached = true;\n this._deleted = false;\n this.acs = (ctrl.params && ctrl.params.acs) ? ctrl.params.acs : this.acs;\n\n // Set topic name for new topics and add it to cache.\n if (this._new) {\n delete this._new;\n\n if (this.name != ctrl.topic) {\n // Name may change new123456 -> grpAbCdEf. Remove from cache under the old name.\n this._cacheDelSelf();\n this.name = ctrl.topic;\n }\n this._cachePutSelf();\n\n this.created = ctrl.ts;\n this.updated = ctrl.ts;\n\n if (this.name != Const.TOPIC_ME && this.name != Const.TOPIC_FND) {\n // Add the new topic to the list of contacts maintained by the 'me' topic.\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (setParams && setParams.desc) {\n setParams.desc._noForwarding = true;\n this._processMetaDesc(setParams.desc);\n }\n }\n return ctrl;\n });\n }\n\n /**\n * Create a draft of a message without sending it to the server.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Content to wrap in a draft.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * session. Otherwise the server will send a copy of the message to sender.\n *\n * @returns {Object} message draft.\n */\n createMessage(data, noEcho) {\n return this._tinode.createMessage(this.name, data, noEcho);\n }\n\n /**\n * Immediately publish data to topic. Wrapper for {@link Tinode#publish}.\n * @memberof Tinode.Topic#\n *\n * @param {string | Object} data - Message to publish, either plain string or a Drafty object.\n * @param {boolean=} noEcho - If true server will not echo message back to originating\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publish(data, noEcho) {\n return this.publishMessage(this.createMessage(data, noEcho));\n }\n\n /**\n * Publish message created by {@link Tinode.Topic#createMessage}.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - {data} object to publish. Must be created by {@link Tinode.Topic#createMessage}\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n publishMessage(pub) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot publish on inactive topic\"));\n }\n if (this._sending) {\n return Promise.reject(new Error(\"The message is already being sent\"));\n }\n\n // Send data.\n pub._sending = true;\n pub._failed = false;\n\n // Extract refereces to attachments and out of band image records.\n let attachments = null;\n if (Drafty.hasEntities(pub.content)) {\n attachments = [];\n Drafty.entities(pub.content, data => {\n if (data) {\n if (data.ref) {\n attachments.push(data.ref);\n }\n if (data.preref) {\n attachments.push(data.preref);\n }\n }\n });\n if (attachments.length == 0) {\n attachments = null;\n }\n }\n\n return this._tinode.publishMessage(pub, attachments).then(ctrl => {\n pub._sending = false;\n pub.ts = ctrl.ts;\n this.swapMessageId(pub, ctrl.params.seq);\n this._maybeUpdateMessageVersionsCache(pub);\n this._routeData(pub);\n return ctrl;\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message rejected by the server\", err);\n pub._sending = false;\n pub._failed = true;\n if (this.onData) {\n this.onData();\n }\n });\n }\n\n /**\n * Add message to local message cache, send to the server when the promise is resolved.\n * If promise is null or undefined, the message will be sent immediately.\n * The message is sent when the\n * The message should be created by {@link Tinode.Topic#createMessage}.\n * This is probably not the final API.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub - Message to use as a draft.\n * @param {Promise} prom - Message will be sent when this promise is resolved, discarded if rejected.\n *\n * @returns {Promise} derived promise.\n */\n publishDraft(pub, prom) {\n const seq = pub.seq || this._getQueuedSeqId();\n if (!pub._noForwarding) {\n // The 'seq', 'ts', and 'from' are added to mimic {data}. They are removed later\n // before the message is sent.\n pub._noForwarding = true;\n pub.seq = seq;\n pub.ts = new Date();\n pub.from = this._tinode.getCurrentUserID();\n\n // Don't need an echo message because the message is added to local cache right away.\n pub.noecho = true;\n // Add to cache.\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n\n if (this.onData) {\n this.onData(pub);\n }\n }\n // If promise is provided, send the queued message when it's resolved.\n // If no promise is provided, create a resolved one and send immediately.\n return (prom || Promise.resolve())\n .then(_ => {\n if (pub._cancelled) {\n return {\n code: 300,\n text: \"cancelled\"\n };\n }\n return this.publishMessage(pub);\n }).catch(err => {\n this._tinode.logger(\"WARNING: Message draft rejected\", err);\n pub._sending = false;\n pub._failed = true;\n pub._fatal = err instanceof CommError ? (err.code >= 400 && err.code < 500) : false;\n if (this.onData) {\n this.onData();\n }\n // Rethrow to let caller know that the operation failed.\n throw err;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean=} unsub - If true, unsubscribe, otherwise just leave.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to the request.\n */\n leave(unsub) {\n // It's possible to unsubscribe (unsub==true) from inactive topic.\n if (!this._attached && !unsub) {\n return Promise.reject(new Error(\"Cannot leave inactive topic\"));\n }\n\n // Send a 'leave' message, handle async response\n return this._tinode.leave(this.name, unsub).then(ctrl => {\n this._resetSub();\n if (unsub) {\n this._gone();\n }\n return ctrl;\n });\n }\n\n /**\n * Leave the topic, optionally unsibscribe after a delay. Leaving the topic means the topic will stop\n * receiving updates from the server. Unsubscribing will terminate user's relationship with the topic.\n * Wrapper for {@link Tinode#leave}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} unsub - If true, unsubscribe, otherwise just leave.\n * @param {number} delay - time in milliseconds to delay leave request.\n */\n leaveDelayed(unsub, delay) {\n clearTimeout(this._delayedLeaveTimer);\n this._delayedLeaveTimer = setTimeout(_ => {\n this._delayedLeaveTimer = null;\n this.leave(unsub)\n }, delay);\n }\n\n /**\n * Request topic metadata from the server.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.GetQuery} request parameters\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n getMeta(params) {\n // Send {get} message, return promise.\n return this._tinode.getMeta(this.name, params);\n }\n\n /**\n * Request more messages from the server\n * @memberof Tinode.Topic#\n *\n * @param {number} limit number of messages to get.\n * @param {boolean} forward if true, request newer messages.\n */\n getMessagesPage(limit, forward) {\n let query = forward ?\n this.startMetaQuery().withLaterData(limit) :\n this.startMetaQuery().withEarlierData(limit);\n\n // First try fetching from DB, then from the server.\n return this._loadMessages(this._tinode._db, query.extract('data'))\n .then((count) => {\n if (count == limit) {\n // Got enough messages from local cache.\n return Promise.resolve({\n topic: this.name,\n code: 200,\n params: {\n count: count\n }\n });\n }\n\n // Reduce the count of requested messages.\n limit -= count;\n // Update query with new values loaded from DB.\n query = forward ? this.startMetaQuery().withLaterData(limit) :\n this.startMetaQuery().withEarlierData(limit);\n let promise = this.getMeta(query.build());\n if (!forward) {\n promise = promise.then(ctrl => {\n if (ctrl && ctrl.params && !ctrl.params.count) {\n this._noEarlierMsgs = true;\n }\n });\n }\n return promise;\n });\n }\n /**\n * Update topic metadata.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n if (params.tags) {\n params.tags = normalizeArray(params.tags);\n }\n // Send Set message, handle async response.\n return this._tinode.setMeta(this.name, params)\n .then(ctrl => {\n if (ctrl && ctrl.code >= 300) {\n // Not modified\n return ctrl;\n }\n\n if (params.sub) {\n params.sub.topic = this.name;\n if (ctrl.params && ctrl.params.acs) {\n params.sub.acs = ctrl.params.acs;\n params.sub.updated = ctrl.ts;\n }\n if (!params.sub.user) {\n // This is a subscription update of the current user.\n // Assign user ID otherwise the update will be ignored by _processMetaSubs.\n params.sub.user = this._tinode.getCurrentUserID();\n if (!params.desc) {\n // Force update to topic's asc.\n params.desc = {};\n }\n }\n params.sub._noForwarding = true;\n this._processMetaSubs([params.sub]);\n }\n\n if (params.desc) {\n if (ctrl.params && ctrl.params.acs) {\n params.desc.acs = ctrl.params.acs;\n params.desc.updated = ctrl.ts;\n }\n this._processMetaDesc(params.desc);\n }\n\n if (params.tags) {\n this._processMetaTags(params.tags);\n }\n if (params.cred) {\n this._processMetaCreds([params.cred], true);\n }\n\n return ctrl;\n });\n }\n /**\n * Update access mode of the current user or of another topic subsriber.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - UID of the user to update or null to update current user.\n * @param {string} update - the update value, full or delta.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n updateMode(uid, update) {\n const user = uid ? this.subscriber(uid) : null;\n const am = user ?\n user.acs.updateGiven(update).getGiven() :\n this.getAccessMode().updateWant(update).getWant();\n\n return this.setMeta({\n sub: {\n user: uid,\n mode: am\n }\n });\n }\n /**\n * Create new topic subscription. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to invite\n * @param {string=} mode - Access mode. null means to use default.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n invite(uid, mode) {\n return this.setMeta({\n sub: {\n user: uid,\n mode: mode\n }\n });\n }\n /**\n * Archive or un-archive the topic. Wrapper for {@link Tinode#setMeta}.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} arch - true to archive the topic, false otherwise.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n archive(arch) {\n if (this.private && (!this.private.arch == !arch)) {\n return Promise.resolve(arch);\n }\n return this.setMeta({\n desc: {\n private: {\n arch: arch ? true : Const.DEL_CHAR\n }\n }\n });\n }\n /**\n * Delete messages. Hard-deleting messages requires Owner permission.\n * Wrapper for {@link Tinode#delMessages}.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.DelRange[]} ranges - Ranges of message IDs to delete.\n * @param {boolean=} hard - Hard or soft delete\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessages(ranges, hard) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete messages in inactive topic\"));\n }\n\n // Sort ranges in accending order by low, the descending by hi.\n ranges.sort((r1, r2) => {\n if (r1.low < r2.low) {\n return true;\n }\n if (r1.low == r2.low) {\n return !r2.hi || (r1.hi >= r2.hi);\n }\n return false;\n });\n\n // Remove pending messages from ranges possibly clipping some ranges.\n let tosend = ranges.reduce((out, r) => {\n if (r.low < Const.LOCAL_SEQID) {\n if (!r.hi || r.hi < Const.LOCAL_SEQID) {\n out.push(r);\n } else {\n // Clip hi to max allowed value.\n out.push({\n low: r.low,\n hi: this._maxSeq + 1\n });\n }\n }\n return out;\n }, []);\n\n // Send {del} message, return promise\n let result;\n if (tosend.length > 0) {\n result = this._tinode.delMessages(this.name, tosend, hard);\n } else {\n result = Promise.resolve({\n params: {\n del: 0\n }\n });\n }\n // Update local cache.\n return result.then(ctrl => {\n if (ctrl.params.del > this._maxDel) {\n this._maxDel = ctrl.params.del;\n }\n\n ranges.forEach((r) => {\n if (r.hi) {\n this.flushMessageRange(r.low, r.hi);\n } else {\n this.flushMessage(r.low);\n }\n });\n\n if (this.onData) {\n // Calling with no parameters to indicate the messages were deleted.\n this.onData();\n }\n return ctrl;\n });\n }\n /**\n * Delete all messages. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} hardDel - true if messages should be hard-deleted.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n delMessagesAll(hardDel) {\n if (!this._maxSeq || this._maxSeq <= 0) {\n // There are no messages to delete.\n return Promise.resolve();\n }\n return this.delMessages([{\n low: 1,\n hi: this._maxSeq + 1,\n _all: true\n }], hardDel);\n }\n\n /**\n * Delete multiple messages defined by their IDs. Hard-deleting messages requires Deleter permission.\n * @memberof Tinode.Topic#\n *\n * @param {Array.recv, read.\n * @param {number} seq - ID or the message read or received.\n */\n note(what, seq) {\n if (!this._attached) {\n // Cannot sending {note} on an inactive topic\".\n return;\n }\n\n // Update local cache with the new count.\n const user = this._users[this._tinode.getCurrentUserID()];\n let update = false;\n if (user) {\n // Self-subscription is found.\n if (!user[what] || user[what] < seq) {\n user[what] = seq;\n update = true;\n }\n } else {\n // Self-subscription is not found.\n update = (this[what] | 0) < seq;\n }\n\n if (update) {\n // Send notification to the server.\n this._tinode.note(this.name, what, seq);\n // Update locally cached contact with the new count.\n this._updateMyReadRecv(what, seq);\n\n if (this.acs != null && !this.acs.isMuted()) {\n const me = this._tinode.getMeTopic();\n // Sent a notification to 'me' listeners.\n me._refreshContact(what, this);\n }\n }\n }\n\n /**\n * Send a 'recv' receipt. Wrapper for {@link Tinode#noteRecv}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge.\n */\n noteRecv(seq) {\n this.note('recv', seq);\n }\n /**\n * Send a 'read' receipt. Wrapper for {@link Tinode#noteRead}.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - ID of the message to aknowledge or 0/undefined to acknowledge the latest messages.\n */\n noteRead(seq) {\n seq = seq || this._maxSeq;\n if (seq > 0) {\n this.note('read', seq);\n }\n }\n /**\n * Send a key-press notification. Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n */\n noteKeyPress() {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name);\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n /**\n * Send a notification than a video or audio message is . Wrapper for {@link Tinode#noteKeyPress}.\n * @memberof Tinode.Topic#\n * @param audioOnly - true if the recording is audio-only, false if it's a video recording.\n */\n noteRecording(audioOnly) {\n if (this._attached) {\n this._tinode.noteKeyPress(this.name, audioOnly ? 'kpa' : 'kpv');\n } else {\n this._tinode.logger(\"INFO: Cannot send notification in inactive topic\");\n }\n }\n\n /**\n * Send a {note what='call'}. Wrapper for {@link Tinode#videoCall}.\n * @memberof Tinode#\n *\n * @param {string} evt - Call event.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(evt, seq, payload) {\n if (!this._attached && !['ringing', 'hang-up'].includes(evt)) {\n // Cannot {call} on an inactive topic\".\n return;\n }\n return this._tinode.videoCall(this.name, seq, evt, payload);\n }\n\n // Update cached read/recv/unread counts for the current user.\n _updateMyReadRecv(what, seq, ts) {\n let oldVal, doUpdate = false;\n\n seq = seq | 0;\n this.seq = this.seq | 0;\n this.read = this.read | 0;\n this.recv = this.recv | 0;\n switch (what) {\n case 'recv':\n oldVal = this.recv;\n this.recv = Math.max(this.recv, seq);\n doUpdate = (oldVal != this.recv);\n break;\n case 'read':\n oldVal = this.read;\n this.read = Math.max(this.read, seq);\n doUpdate = (oldVal != this.read);\n break;\n case 'msg':\n oldVal = this.seq;\n this.seq = Math.max(this.seq, seq);\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = (oldVal != this.seq);\n break;\n }\n\n // Sanity checks.\n if (this.recv < this.read) {\n this.recv = this.read;\n doUpdate = true;\n }\n if (this.seq < this.recv) {\n this.seq = this.recv;\n if (!this.touched || this.touched < ts) {\n this.touched = ts;\n }\n doUpdate = true;\n }\n this.unread = this.seq - this.read;\n return doUpdate;\n }\n /**\n * Get user description from global cache. The user does not need to be a\n * subscriber of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {string} uid - ID of the user to fetch.\n * @return {Object} user description or undefined.\n */\n userDesc(uid) {\n // TODO: handle asynchronous requests\n const user = this._cacheGetUser(uid);\n if (user) {\n return user; // Promise.resolve(user)\n }\n }\n /**\n * Get description of the p2p peer from subscription cache.\n * @memberof Tinode.Topic#\n *\n * @return {Object} peer's description or undefined.\n */\n p2pPeerDesc() {\n if (!this.isP2PType()) {\n return undefined;\n }\n return this._users[this.name];\n }\n /**\n * Iterate over cached subscribers. If callback is undefined, use this.onMetaSub.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive subscribers one by one.\n * @param {Object=} context - Value of `this` inside the `callback`.\n */\n subscribers(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._users) {\n cb.call(context, this._users[idx], idx, this._users);\n }\n }\n }\n /**\n * Get a copy of cached tags.\n * @memberof Tinode.Topic#\n *\n * @return {Array.callback for each version (excluding original).\n * If callback is undefined, does nothing.\n * @memberof Tinode.Topic#\n *\n * @param {number} origSeq - seq ID of the original message.\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messageVersions(origSeq, callback, context) {\n if (!callback) {\n // No callback? We are done then.\n return;\n }\n const versions = this._messageVersions[origSeq];\n if (!versions) {\n return;\n }\n versions.forEach(callback, undefined, undefined, context);\n }\n /**\n * Iterate over cached messages: call callback for each message in the range [sinceIdx, beforeIdx).\n * If callback is undefined, use this.onData.\n * @memberof Tinode.Topic#\n *\n * @param {Tinode.ForEachCallbackType} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {number} sinceId - Optional seqId to start iterating from (inclusive).\n * @param {number} beforeId - Optional seqId to stop iterating before it is reached (exclusive).\n * @param {Object} context - Value of `this` inside the `callback`.\n */\n messages(callback, sinceId, beforeId, context) {\n const cb = (callback || this.onData);\n if (cb) {\n const startIdx = typeof sinceId == 'number' ? this._messages.find({\n seq: sinceId\n }, true) : undefined;\n const beforeIdx = typeof beforeId == 'number' ? this._messages.find({\n seq: beforeId\n }, true) : undefined;\n if (startIdx != -1 && beforeIdx != -1) {\n // Step 1. Filter out all replacement messages and\n // save displayable messages in a temporary buffer.\n let msgs = [];\n this._messages.forEach((msg, unused1, unused2, i) => {\n if (this._isReplacementMsg(msg)) {\n // Skip replacements.\n return;\n }\n // In case the massage was edited, replace timestamp of the version with the original's timestamp.\n const latest = this.latestMsgVersion(msg.seq) || msg;\n if (!latest._origTs) {\n latest._origTs = latest.ts;\n latest._origSeq = latest.seq;\n latest.ts = msg.ts;\n latest.seq = msg.seq;\n }\n msgs.push({\n data: latest,\n idx: i\n });\n }, startIdx, beforeIdx, {});\n // Step 2. Loop over displayble messages invoking cb on each of them.\n msgs.forEach((val, i) => {\n cb.call(context, val.data,\n (i > 0 ? msgs[i - 1].data : undefined),\n (i < msgs.length - 1 ? msgs[i + 1].data : undefined), val.idx);\n });\n }\n }\n }\n /**\n * Get the message from cache by seq.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message seqId to search for.\n * @returns {Object} the message with the given seq or undefined, if no such message is found.\n */\n findMessage(seq) {\n const idx = this._messages.find({\n seq: seq\n });\n if (idx >= 0) {\n return this._messages.getAt(idx);\n }\n return undefined;\n }\n /**\n * Get the most recent message from cache. This method counts all messages, including deleted ranges.\n * @memberof Tinode.Topic#\n *\n * @returns {Object} the most recent cached message or undefined, if no messages are cached.\n */\n latestMessage() {\n return this._messages.getLast();\n }\n /**\n * Get the latest version for message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - original seq ID of the message.\n * @returns {Object} the latest version of the message or null if message not found.\n */\n latestMsgVersion(seq) {\n const versions = this._messageVersions[seq];\n return versions ? versions.getLast() : null;\n }\n /**\n * Get the maximum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest seq ID in cache.\n */\n maxMsgSeq() {\n return this._maxSeq;\n }\n /**\n * Get the minimum cached seq ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the smallest seq ID in cache or 0.\n */\n minMsgSeq() {\n return this._minSeq;\n }\n /**\n * Get the maximum deletion ID.\n * @memberof Tinode.Topic#\n *\n * @returns {number} the greatest deletion ID.\n */\n maxClearId() {\n return this._maxDel;\n }\n /**\n * Get the number of messages in the cache.\n * @memberof Tinode.Topic#\n *\n * @returns {number} count of cached messages.\n */\n messageCount() {\n return this._messages.length();\n }\n /**\n * Iterate over cached unsent messages. Wraps {@link Tinode.Topic#messages}.\n * @memberof Tinode.Topic#\n *\n * @param {function} callback - Callback which will receive messages one by one. See {@link Tinode.CBuffer#forEach}\n * @param {Object} context - Value of this inside the callback.\n */\n queuedMessages(callback, context) {\n if (!callback) {\n throw new Error(\"Callback must be provided\");\n }\n this.messages(callback, Const.LOCAL_SEQID, undefined, context);\n }\n /**\n * Get the number of topic subscribers who marked this message as either recv or read\n * Current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {string} what - what action to consider: received \"recv\" or read \"read\".\n * @param {number} seq - ID or the message read or received.\n *\n * @returns {number} the number of subscribers who marked the message with the given ID as read or received.\n */\n msgReceiptCount(what, seq) {\n let count = 0;\n if (seq > 0) {\n const me = this._tinode.getCurrentUserID();\n for (let idx in this._users) {\n const user = this._users[idx];\n if (user.user !== me && user[what] >= seq) {\n count++;\n }\n }\n }\n return count;\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as read.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - message id to check.\n * @returns {number} number of subscribers who claim to have received the message.\n */\n msgReadCount(seq) {\n return this.msgReceiptCount('read', seq);\n }\n /**\n * Get the number of topic subscribers who marked this message (and all older messages) as received.\n * The current user is excluded from the count.\n * @memberof Tinode.Topic#\n *\n * @param {number} seq - Message id to check.\n * @returns {number} Number of subscribers who claim to have received the message.\n */\n msgRecvCount(seq) {\n return this.msgReceiptCount('recv', seq);\n }\n /**\n * Check if cached message IDs indicate that the server may have more messages.\n * @memberof Tinode.Topic#\n *\n * @param {boolean} newer - if true, check for newer messages only.\n */\n msgHasMoreMessages(newer) {\n return newer ? this.seq > this._maxSeq :\n // _minSeq could be more than 1, but earlier messages could have been deleted.\n (this._minSeq > 1 && !this._noEarlierMsgs);\n }\n /**\n * Check if the given seq Id is id of the most recent message.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to check\n */\n isNewMessage(seqId) {\n return this._maxSeq <= seqId;\n }\n /**\n * Remove one message from local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to remove from cache.\n * @returns {Message} removed message or undefined if such message was not found.\n */\n flushMessage(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n delete this._messageVersions[seqId];\n if (idx >= 0) {\n this._tinode._db.remMessages(this.name, seqId);\n return this._messages.delAt(idx);\n }\n return undefined;\n }\n /**\n * Remove a range of messages from the local cache.\n * @memberof Tinode.Topic#\n *\n * @param {number} fromId seq ID of the first message to remove (inclusive).\n * @param {number} untilId seqID of the last message to remove (exclusive).\n *\n * @returns {Message[]} array of removed messages (could be empty).\n */\n flushMessageRange(fromId, untilId) {\n // Remove range from persistent cache.\n this._tinode._db.remMessages(this.name, fromId, untilId);\n\n // Remove all versions keyed by IDs in the range.\n for (let i = fromId; i < untilId; i++) {\n delete this._messageVersions[i];\n }\n\n // start, end: find insertion points (nearest == true).\n const since = this._messages.find({\n seq: fromId\n }, true);\n return since >= 0 ? this._messages.delRange(since, this._messages.find({\n seq: untilId\n }, true)) : [];\n }\n /**\n * Update message's seqId.\n * @memberof Tinode.Topic#\n *\n * @param {Object} pub message object.\n * @param {number} newSeqId new seq id for pub.\n */\n swapMessageId(pub, newSeqId) {\n const idx = this._messages.find(pub);\n const numMessages = this._messages.length();\n if (0 <= idx && idx < numMessages) {\n // Remove message with the old seq ID.\n this._messages.delAt(idx);\n this._tinode._db.remMessages(this.name, pub.seq);\n // Add message with the new seq ID.\n pub.seq = newSeqId;\n this._messages.put(pub);\n this._tinode._db.addMessage(pub);\n }\n }\n /**\n * Attempt to stop message from being sent.\n * @memberof Tinode.Topic#\n *\n * @param {number} seqId id of the message to stop sending and remove from cache.\n *\n * @returns {boolean} true if message was cancelled, false otherwise.\n */\n cancelSend(seqId) {\n const idx = this._messages.find({\n seq: seqId\n });\n if (idx >= 0) {\n const msg = this._messages.getAt(idx);\n const status = this.msgStatus(msg);\n if (status == Const.MESSAGE_STATUS_QUEUED ||\n status == Const.MESSAGE_STATUS_FAILED ||\n status == Const.MESSAGE_STATUS_FATAL) {\n this._tinode._db.remMessages(this.name, seqId);\n msg._cancelled = true;\n this._messages.delAt(idx);\n if (this.onData) {\n // Calling with no parameters to indicate the message was deleted.\n this.onData();\n }\n return true;\n }\n }\n return false;\n }\n /**\n * Get type of the topic: me, p2p, grp, fnd...\n * @memberof Tinode.Topic#\n *\n * @returns {string} One of 'me', 'p2p', 'grp', 'fnd', 'sys' or undefined.\n */\n getType() {\n return Topic.topicType(this.name);\n }\n /**\n * Get current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.AccessMode} - user's access mode\n */\n getAccessMode() {\n return this.acs;\n }\n /**\n * Set current user's access mode of the topic.\n * @memberof Tinode.Topic#\n *\n * @param {AccessMode | Object} acs - access mode to set.\n */\n setAccessMode(acs) {\n return this.acs = new AccessMode(acs);\n }\n /**\n * Get topic's default access mode.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.DefAcs} - access mode, such as {auth: `RWP`, anon: `N`}.\n */\n getDefaultAccess() {\n return this.defacs;\n }\n /**\n * Initialize new meta {@link Tinode.GetQuery} builder. The query is attched to the current topic.\n * It will not work correctly if used with a different topic.\n * @memberof Tinode.Topic#\n *\n * @returns {Tinode.MetaGetBuilder} query attached to the current topic.\n */\n startMetaQuery() {\n return new MetaGetBuilder(this);\n }\n /**\n * Check if topic is archived, i.e. private.arch == true.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is archived, false otherwise.\n */\n isArchived() {\n return this.private && !!this.private.arch;\n }\n /**\n * Check if topic is a 'me' topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a 'me' topic, false otherwise.\n */\n isMeType() {\n return Topic.isMeTopicName(this.name);\n }\n /**\n * Check if topic is a channel.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a channel, false otherwise.\n */\n isChannelType() {\n return Topic.isChannelTopicName(this.name);\n }\n /**\n * Check if topic is a group topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a group, false otherwise.\n */\n isGroupType() {\n return Topic.isGroupTopicName(this.name);\n }\n /**\n * Check if topic is a p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p topic, false otherwise.\n */\n isP2PType() {\n return Topic.isP2PTopicName(this.name);\n }\n /**\n * Check if topic is a communication topic, i.e. a group or p2p topic.\n * @memberof Tinode.Topic#\n *\n * @returns {boolean} - true if topic is a p2p or group topic, false otherwise.\n */\n isCommType() {\n return Topic.isCommTopicName(this.name);\n }\n /**\n * Get status (queued, sent, received etc) of a given message in the context\n * of this topic.\n * @memberof Tinode.Topic#\n *\n * @param {Message} msg - message to check for status.\n * @param {boolean} upd - update chached message status.\n *\n * @returns message status constant.\n */\n msgStatus(msg, upd) {\n let status = Const.MESSAGE_STATUS_NONE;\n if (this._tinode.isMe(msg.from)) {\n if (msg._sending) {\n status = Const.MESSAGE_STATUS_SENDING;\n } else if (msg._fatal || msg._cancelled) {\n status = Const.MESSAGE_STATUS_FATAL;\n } else if (msg._failed) {\n status = Const.MESSAGE_STATUS_FAILED;\n } else if (msg.seq >= Const.LOCAL_SEQID) {\n status = Const.MESSAGE_STATUS_QUEUED;\n } else if (this.msgReadCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_READ;\n } else if (this.msgRecvCount(msg.seq) > 0) {\n status = Const.MESSAGE_STATUS_RECEIVED;\n } else if (msg.seq > 0) {\n status = Const.MESSAGE_STATUS_SENT;\n }\n } else {\n status = Const.MESSAGE_STATUS_TO_ME;\n }\n\n if (upd && msg._status != status) {\n msg._status = status;\n this._tinode._db.updMessageStatus(this.name, msg.seq, status);\n }\n\n return status;\n }\n\n // Returns true if pub is meant to replace another message (e.g. original message was edited).\n _isReplacementMsg(pub) {\n return pub.head && pub.head.replace;\n }\n\n // If msg is a replacement for another message, save the msg in the message versions cache\n // as a newer version for the message it's supposed to replace.\n _maybeUpdateMessageVersionsCache(msg) {\n if (!this._isReplacementMsg(msg)) {\n // Check if this message is the original in the chain of edits and if so\n // ensure all version have the same sender.\n if (this._messageVersions[msg.seq]) {\n // Remove versions with different 'from'.\n this._messageVersions[msg.seq].filter(version => version.from == msg.from);\n if (this._messageVersions[msg.seq].isEmpty()) {\n delete this._messageVersions[msg.seq];\n }\n }\n return;\n }\n\n const targetSeq = parseInt(msg.head.replace.split(':')[1]);\n if (targetSeq > msg.seq) {\n // Substitutes are supposed to have higher seq ids.\n return;\n }\n const targetMsg = this.findMessage(targetSeq);\n if (targetMsg && targetMsg.from != msg.from) {\n // Substitute cannot change the sender.\n return;\n }\n const versions = this._messageVersions[targetSeq] || new CBuffer((a, b) => {\n return a.seq - b.seq;\n }, true);\n versions.put(msg);\n this._messageVersions[targetSeq] = versions;\n }\n\n // Process data message\n _routeData(data) {\n if (data.content) {\n if (!this.touched || this.touched < data.ts) {\n this.touched = data.ts;\n this._tinode._db.updTopic(this);\n }\n }\n\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n this.msgStatus(data, true);\n // Ackn receiving the message.\n clearTimeout(this._recvNotificationTimer);\n this._recvNotificationTimer = setTimeout(_ => {\n this._recvNotificationTimer = null;\n this.noteRecv(this._maxSeq);\n }, Const.RECV_TIMEOUT);\n }\n\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n\n const outgoing = ((!this.isChannelType() && !data.from) || this._tinode.isMe(data.from));\n\n if (data.head && data.head.webrtc && data.head.mime == Drafty.getContentType() && data.content) {\n // Rewrite VC body with info from the headers.\n data.content = Drafty.updateVideoCall(data.content, {\n state: data.head.webrtc,\n duration: data.head['webrtc-duration'],\n incoming: !outgoing,\n });\n }\n\n if (!data._noForwarding) {\n this._messages.put(data);\n this._tinode._db.addMessage(data);\n this._maybeUpdateMessageVersionsCache(data);\n }\n\n if (this.onData) {\n this.onData(data);\n }\n\n // Update locally cached contact with the new message count.\n const what = outgoing ? 'read' : 'msg';\n this._updateMyReadRecv(what, data.seq, data.ts);\n\n if (!outgoing && data.from) {\n // Mark messages as read by the sender.\n this._routeInfo({\n what: 'read',\n from: data.from,\n seq: data.seq,\n _noForwarding: true\n });\n }\n\n // Notify 'me' listeners of the change.\n this._tinode.getMeTopic()._refreshContact(what, this);\n }\n\n // Process metadata message\n _routeMeta(meta) {\n if (meta.desc) {\n this._processMetaDesc(meta.desc);\n }\n if (meta.sub && meta.sub.length > 0) {\n this._processMetaSubs(meta.sub);\n }\n if (meta.del) {\n this._processDelMessages(meta.del.clear, meta.del.delseq);\n }\n if (meta.tags) {\n this._processMetaTags(meta.tags);\n }\n if (meta.cred) {\n this._processMetaCreds(meta.cred);\n }\n if (this.onMeta) {\n this.onMeta(meta);\n }\n }\n // Process presence change message\n _routePres(pres) {\n let user, uid;\n switch (pres.what) {\n case 'del':\n // Delete cached messages.\n this._processDelMessages(pres.clear, pres.delseq);\n break;\n case 'on':\n case 'off':\n // Update online status of a subscription.\n user = this._users[pres.src];\n if (user) {\n user.online = pres.what == 'on';\n } else {\n this._tinode.logger(\"WARNING: Presence update for an unknown user\", this.name, pres.src);\n }\n break;\n case 'term':\n // Attachment to topic is terminated probably due to cluster rehashing.\n this._resetSub();\n break;\n case 'upd':\n // A topic subscriber has updated his description.\n // Issue {get sub} only if the current user has no p2p topics with the updated user (p2p name is not in cache).\n // Otherwise 'me' will issue a {get desc} request.\n if (pres.src && !this._tinode.isTopicCached(pres.src)) {\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n }\n break;\n case 'acs':\n uid = pres.src || this._tinode.getCurrentUserID();\n user = this._users[uid];\n if (!user) {\n // Update for an unknown user: notification of a new subscription.\n const acs = new AccessMode().updateAll(pres.dacs);\n if (acs && acs.mode != AccessMode._NONE) {\n user = this._cacheGetUser(uid);\n if (!user) {\n user = {\n user: uid,\n acs: acs\n };\n this.getMeta(this.startMetaQuery().withOneSub(undefined, uid).build());\n } else {\n user.acs = acs;\n }\n user.updated = new Date();\n this._processMetaSubs([user]);\n }\n } else {\n // Known user\n user.acs.updateAll(pres.dacs);\n // Update user's access mode.\n this._processMetaSubs([{\n user: uid,\n updated: new Date(),\n acs: user.acs\n }]);\n }\n break;\n default:\n this._tinode.logger(\"INFO: Ignored presence update\", pres.what);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n // Process {info} message\n _routeInfo(info) {\n switch (info.what) {\n case 'recv':\n case 'read':\n const user = this._users[info.from];\n if (user) {\n user[info.what] = info.seq;\n if (user.recv < user.read) {\n user.recv = user.read;\n }\n }\n const msg = this.latestMessage();\n if (msg) {\n this.msgStatus(msg, true);\n }\n\n // If this is an update from the current user, update the cache with the new count.\n if (this._tinode.isMe(info.from) && !info._noForwarding) {\n this._updateMyReadRecv(info.what, info.seq);\n }\n\n // Notify 'me' listener of the status change.\n this._tinode.getMeTopic()._refreshContact(info.what, this);\n break;\n case 'kp':\n case 'kpa':\n case 'kpv':\n // Typing or audio/video recording notification. Do nothing.\n break;\n case 'call':\n // Do nothing here.\n break;\n default:\n this._tinode.logger(\"INFO: Ignored info update\", info.what);\n }\n\n if (this.onInfo) {\n this.onInfo(info);\n }\n }\n // Called by Tinode when meta.desc packet is received.\n // Called by 'me' topic on contact update (desc._noForwarding is true).\n _processMetaDesc(desc) {\n if (this.isP2PType()) {\n // Synthetic desc may include defacs for p2p topics which is useless.\n // Remove it.\n delete desc.defacs;\n\n // Update to p2p desc is the same as user update. Update cached user.\n this._tinode._db.updUser(this.name, desc.public);\n }\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n // Update persistent cache.\n this._tinode._db.updTopic(this);\n\n // Notify 'me' listener, if available:\n if (this.name !== Const.TOPIC_ME && !desc._noForwarding) {\n const me = this._tinode.getMeTopic();\n if (me.onMetaSub) {\n me.onMetaSub(this);\n }\n if (me.onSubsUpdated) {\n me.onSubsUpdated([this.name], 1);\n }\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n // Called by Tinode when meta.sub is recived or in response to received\n // {ctrl} after setMeta-sub.\n _processMetaSubs(subs) {\n for (let idx in subs) {\n const sub = subs[idx];\n\n // Fill defaults.\n sub.online = !!sub.online;\n // Update timestamp of the most recent subscription update.\n this._lastSubsUpdate = new Date(Math.max(this._lastSubsUpdate, sub.updated));\n\n let user = null;\n if (!sub.deleted) {\n // If this is a change to user's own permissions, update them in topic too.\n // Desc will update 'me' topic.\n if (this._tinode.isMe(sub.user) && sub.acs) {\n this._processMetaDesc({\n updated: sub.updated,\n touched: sub.touched,\n acs: sub.acs\n });\n }\n user = this._updateCachedUser(sub.user, sub);\n } else {\n // Subscription is deleted, remove it from topic (but leave in Users cache)\n delete this._users[sub.user];\n user = sub;\n }\n\n if (this.onMetaSub) {\n this.onMetaSub(user);\n }\n }\n\n if (this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._users));\n }\n }\n // Called by Tinode when meta.tags is recived.\n _processMetaTags(tags) {\n if (tags.length == 1 && tags[0] == Const.DEL_CHAR) {\n tags = [];\n }\n this._tags = tags;\n if (this.onTagsUpdated) {\n this.onTagsUpdated(tags);\n }\n }\n // Do nothing for topics other than 'me'\n _processMetaCreds(creds) {}\n // Delete cached messages and update cached transaction IDs\n _processDelMessages(clear, delseq) {\n this._maxDel = Math.max(clear, this._maxDel);\n this.clear = Math.max(clear, this.clear);\n const topic = this;\n let count = 0;\n if (Array.isArray(delseq)) {\n delseq.forEach(function(range) {\n if (!range.hi) {\n count++;\n topic.flushMessage(range.low);\n } else {\n for (let i = range.low; i < range.hi; i++) {\n count++;\n topic.flushMessage(i);\n }\n }\n });\n }\n\n if (count > 0) {\n // this._updateDeletedRanges();\n\n if (this.onData) {\n this.onData();\n }\n }\n }\n // Topic is informed that the entire response to {get what=data} has been received.\n _allMessagesReceived(count) {\n\n if (this.onAllMessagesReceived) {\n this.onAllMessagesReceived(count);\n }\n }\n // Reset subscribed state\n _resetSub() {\n this._attached = false;\n }\n // This topic is either deleted or unsubscribed from.\n _gone() {\n this._messages.reset();\n this._tinode._db.remMessages(this.name);\n this._users = {};\n this.acs = new AccessMode(null);\n this.private = null;\n this.public = null;\n this.trusted = null;\n this._maxSeq = 0;\n this._minSeq = 0;\n this._attached = false;\n\n const me = this._tinode.getMeTopic();\n if (me) {\n me._routePres({\n _noForwarding: true,\n what: 'gone',\n topic: Const.TOPIC_ME,\n src: this.name\n });\n }\n if (this.onDeleteTopic) {\n this.onDeleteTopic();\n }\n }\n // Update global user cache and local subscribers cache.\n // Don't call this method for non-subscribers.\n _updateCachedUser(uid, obj) {\n // Fetch user object from the global cache.\n // This is a clone of the stored object\n let cached = this._cacheGetUser(uid);\n cached = mergeObj(cached || {}, obj);\n // Save to global cache\n this._cachePutUser(uid, cached);\n // Save to the list of topic subsribers.\n return mergeToCache(this._users, uid, cached);\n }\n // Get local seqId for a queued message.\n _getQueuedSeqId() {\n return this._queuedSeqId++;\n }\n\n // Load most recent messages from persistent cache.\n _loadMessages(db, params) {\n const {\n since,\n before,\n limit\n } = params || {};\n return db.readMessages(this.name, {\n since: since,\n before: before,\n limit: limit || Const.DEFAULT_MESSAGES_PAGE\n })\n .then(msgs => {\n msgs.forEach((data) => {\n if (data.seq > this._maxSeq) {\n this._maxSeq = data.seq;\n }\n if (data.seq < this._minSeq || this._minSeq == 0) {\n this._minSeq = data.seq;\n }\n this._messages.put(data);\n this._maybeUpdateMessageVersionsCache(data);\n });\n return msgs.length;\n });\n }\n // Push or {pres}: message received.\n _updateReceived(seq, act) {\n this.touched = new Date();\n this.seq = seq | 0;\n // Check if message is sent by the current user. If so it's been read already.\n if (!act || this._tinode.isMe(act)) {\n this.read = this.read ? Math.max(this.read, this.seq) : this.seq;\n this.recv = this.recv ? Math.max(this.read, this.recv) : this.read;\n }\n this.unread = this.seq - (this.read | 0);\n this._tinode._db.updTopic(this);\n }\n}\n\n/**\n * @class TopicMe - special case of {@link Tinode.Topic} for\n * managing data of the current user, including contact list.\n * @extends Tinode.Topic\n * @memberof Tinode\n *\n * @param {TopicMe.Callbacks} callbacks - Callbacks to receive various events.\n */\nexport class TopicMe extends Topic {\n onContactUpdate;\n\n constructor(callbacks) {\n super(Const.TOPIC_ME, callbacks);\n\n // me-specific callbacks\n if (callbacks) {\n this.onContactUpdate = callbacks.onContactUpdate;\n }\n }\n\n // Override the original Topic._processMetaDesc.\n _processMetaDesc(desc) {\n // Check if online contacts need to be turned off because P permission was removed.\n const turnOff = (desc.acs && !desc.acs.isPresencer()) && (this.acs && this.acs.isPresencer());\n\n // Copy parameters from desc object to this topic.\n mergeObj(this, desc);\n this._tinode._db.updTopic(this);\n // Update current user's record in the global cache.\n this._updateCachedUser(this._tinode._myUID, desc);\n\n // 'P' permission was removed. All topics are offline now.\n if (turnOff) {\n this._tinode.mapTopics((cont) => {\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n this._refreshContact('off', cont);\n }\n });\n }\n\n if (this.onMetaDesc) {\n this.onMetaDesc(this);\n }\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = 0;\n subs.forEach((sub) => {\n const topicName = sub.topic;\n // Don't show 'me' and 'fnd' topics in the list of contacts.\n if (topicName == Const.TOPIC_FND || topicName == Const.TOPIC_ME) {\n return;\n }\n sub.online = !!sub.online;\n\n let cont = null;\n if (sub.deleted) {\n cont = sub;\n this._tinode.cacheRemTopic(topicName);\n this._tinode._db.remTopic(topicName);\n } else {\n // Ensure the values are defined and are integers.\n if (typeof sub.seq != 'undefined') {\n sub.seq = sub.seq | 0;\n sub.recv = sub.recv | 0;\n sub.read = sub.read | 0;\n sub.unread = sub.seq - sub.read;\n }\n\n const topic = this._tinode.getTopic(topicName);\n if (topic._new) {\n delete topic._new;\n }\n\n cont = mergeObj(topic, sub);\n this._tinode._db.updTopic(cont);\n\n if (Topic.isP2PTopicName(topicName)) {\n this._cachePutUser(topicName, cont);\n this._tinode._db.updUser(topicName, cont.public);\n }\n // Notify topic of the update if it's an external update.\n if (!sub._noForwarding && topic) {\n sub._noForwarding = true;\n topic._processMetaDesc(sub);\n }\n }\n\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(cont);\n }\n });\n\n if (this.onSubsUpdated && updateCount > 0) {\n const keys = [];\n subs.forEach((s) => {\n keys.push(s.topic);\n });\n this.onSubsUpdated(keys, updateCount);\n }\n }\n\n // Called by Tinode when meta.sub is recived.\n _processMetaCreds(creds, upd) {\n if (creds.length == 1 && creds[0] == Const.DEL_CHAR) {\n creds = [];\n }\n if (upd) {\n creds.forEach((cr) => {\n if (cr.val) {\n // Adding a credential.\n let idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && el.val == cr.val;\n });\n if (idx < 0) {\n // Not found.\n if (!cr.done) {\n // Unconfirmed credential replaces previous unconfirmed credential of the same method.\n idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n // Remove previous unconfirmed credential.\n this._credentials.splice(idx, 1);\n }\n }\n this._credentials.push(cr);\n } else {\n // Found. Maybe change 'done' status.\n this._credentials[idx].done = cr.done;\n }\n } else if (cr.resp) {\n // Handle credential confirmation.\n const idx = this._credentials.findIndex((el) => {\n return el.meth == cr.meth && !el.done;\n });\n if (idx >= 0) {\n this._credentials[idx].done = true;\n }\n }\n });\n } else {\n this._credentials = creds;\n }\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n }\n\n // Process presence change message\n _routePres(pres) {\n if (pres.what == 'term') {\n // The 'me' topic itself is detached. Mark as unsubscribed.\n this._resetSub();\n return;\n }\n\n if (pres.what == 'upd' && pres.src == Const.TOPIC_ME) {\n // Update to me's description. Request updated value.\n this.getMeta(this.startMetaQuery().withDesc().build());\n return;\n }\n\n const cont = this._tinode.cacheGetTopic(pres.src);\n if (cont) {\n switch (pres.what) {\n case 'on': // topic came online\n cont.online = true;\n break;\n case 'off': // topic went offline\n if (cont.online) {\n cont.online = false;\n cont.seen = Object.assign(cont.seen || {}, {\n when: new Date()\n });\n }\n break;\n case 'msg': // new message received\n cont._updateReceived(pres.seq, pres.act);\n break;\n case 'upd': // desc updated\n // Request updated subscription.\n this.getMeta(this.startMetaQuery().withLaterOneSub(pres.src).build());\n break;\n case 'acs': // access mode changed\n // If 'tgt' is not set then this is an update to the permissions of the current user.\n // Otherwise it's an update to group topic subscriber permissions while the topic is offline.\n // Just gnore it then.\n if (!pres.tgt) {\n if (cont.acs) {\n cont.acs.updateAll(pres.dacs);\n } else {\n cont.acs = new AccessMode().updateAll(pres.dacs);\n }\n cont.touched = new Date();\n }\n break;\n case 'ua':\n // user agent changed.\n cont.seen = {\n when: new Date(),\n ua: pres.ua\n };\n break;\n case 'recv':\n // user's other session marked some messges as received.\n pres.seq = pres.seq | 0;\n cont.recv = cont.recv ? Math.max(cont.recv, pres.seq) : pres.seq;\n break;\n case 'read':\n // user's other session marked some messages as read.\n pres.seq = pres.seq | 0;\n cont.read = cont.read ? Math.max(cont.read, pres.seq) : pres.seq;\n cont.recv = cont.recv ? Math.max(cont.read, cont.recv) : cont.recv;\n cont.unread = cont.seq - cont.read;\n break;\n case 'gone':\n // topic deleted or unsubscribed from.\n this._tinode.cacheRemTopic(pres.src);\n if (!cont._deleted) {\n cont._deleted = true;\n cont._attached = false;\n this._tinode._db.markTopicAsDeleted(pres.src, true);\n } else {\n this._tinode._db.remTopic(pres.src);\n }\n break;\n case 'del':\n // Update topic.del value.\n break;\n default:\n this._tinode.logger(\"INFO: Unsupported presence update in 'me'\", pres.what);\n }\n\n this._refreshContact(pres.what, cont);\n } else {\n if (pres.what == 'acs') {\n // New subscriptions and deleted/banned subscriptions have full\n // access mode (no + or - in the dacs string). Changes to known subscriptions are sent as\n // deltas, but they should not happen here.\n const acs = new AccessMode(pres.dacs);\n if (!acs || acs.mode == AccessMode._INVALID) {\n this._tinode.logger(\"ERROR: Invalid access mode update\", pres.src, pres.dacs);\n return;\n } else if (acs.mode == AccessMode._NONE) {\n this._tinode.logger(\"WARNING: Removing non-existent subscription\", pres.src, pres.dacs);\n return;\n } else {\n // New subscription. Send request for the full description.\n // Using .withOneSub (not .withLaterOneSub) to make sure IfModifiedSince is not set.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create a dummy entry to catch online status update.\n const dummy = this._tinode.getTopic(pres.src);\n dummy.online = false;\n dummy.acs = acs;\n this._tinode._db.updTopic(dummy);\n }\n } else if (pres.what == 'tags') {\n this.getMeta(this.startMetaQuery().withTags().build());\n } else if (pres.what == 'msg') {\n // Message received for un unknown (previously deleted) topic.\n this.getMeta(this.startMetaQuery().withOneSub(undefined, pres.src).build());\n // Create an entry to catch updates and messages.\n const dummy = this._tinode.getTopic(pres.src);\n dummy._deleted = false;\n this._tinode._db.updTopic(dummy);\n }\n\n this._refreshContact(pres.what, cont);\n }\n\n if (this.onPres) {\n this.onPres(pres);\n }\n }\n\n // Contact is updated, execute callbacks.\n _refreshContact(what, cont) {\n if (this.onContactUpdate) {\n this.onContactUpdate(what, cont);\n }\n }\n\n /**\n * Publishing to TopicMe is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicMe#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'me' is not supported\"));\n }\n\n /**\n * Delete validation credential.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} topic - Name of the topic to delete\n * @param {string} user - User ID to remove.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n if (!this._attached) {\n return Promise.reject(new Error(\"Cannot delete credential in inactive 'me' topic\"));\n }\n // Send {del} message, return promise\n return this._tinode.delCredential(method, value).then(ctrl => {\n // Remove deleted credential from the cache.\n const index = this._credentials.findIndex((el) => {\n return el.meth == method && el.val == value;\n });\n if (index > -1) {\n this._credentials.splice(index, 1);\n }\n // Notify listeners\n if (this.onCredsUpdated) {\n this.onCredsUpdated(this._credentials);\n }\n return ctrl;\n });\n }\n\n /**\n * @callback contactFilter\n * @param {Object} contact to check for inclusion.\n * @returns {boolean} true if contact should be processed, false to exclude it.\n */\n /**\n * Iterate over cached contacts.\n *\n * @function\n * @memberof Tinode.TopicMe#\n * @param {TopicMe.ContactCallback} callback - Callback to call for each contact.\n * @param {contactFilter=} filter - Optionally filter contacts; include all if filter is false-ish, otherwise\n * include those for which filter returns true-ish.\n * @param {Object=} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, filter, context) {\n this._tinode.mapTopics((c, idx) => {\n if (c.isCommType() && (!filter || filter(c))) {\n callback.call(context, c, idx);\n }\n });\n }\n\n /**\n * Get a contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get, either a UID (for p2p topics) or a topic name.\n * @returns {Tinode.Contact} - Contact or `undefined`.\n */\n getContact(name) {\n return this._tinode.cacheGetTopic(name);\n }\n\n /**\n * Get access mode of a given contact from cache.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to get access mode for, either a UID (for p2p topics)\n * or a topic name; if missing, access mode for the 'me' topic itself.\n * @returns {string} - access mode, such as `RWP`.\n */\n getAccessMode(name) {\n if (name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont ? cont.acs : null;\n }\n return this.acs;\n }\n\n /**\n * Check if contact is archived, i.e. contact.private.arch == true.\n * @memberof Tinode.TopicMe#\n *\n * @param {string} name - Name of the contact to check archived status, either a UID (for p2p topics) or a topic name.\n * @returns {boolean} - true if contact is archived, false otherwise.\n */\n isArchived(name) {\n const cont = this._tinode.cacheGetTopic(name);\n return cont && cont.private && !!cont.private.arch;\n }\n\n /**\n * @typedef Tinode.Credential\n * @memberof Tinode\n * @type Object\n * @property {string} meth - validation method such as 'email' or 'tel'.\n * @property {string} val - credential value, i.e. 'jdoe@example.com' or '+17025551234'\n * @property {boolean} done - true if credential is validated.\n */\n /**\n * Get the user's credentials: email, phone, etc.\n * @memberof Tinode.TopicMe#\n *\n * @returns {Tinode.Credential[]} - array of credentials.\n */\n getCredentials() {\n return this._credentials;\n }\n}\n\n/**\n * Special case of {@link Tinode.Topic} for searching for contacts and group topics\n * @extends Tinode.Topic\n *\n */\nexport class TopicFnd extends Topic {\n // List of users and topics uid or topic_name -> Contact object)\n _contacts = {};\n\n /**\n * Create TopicFnd.\n *\n * @param {TopicFnd.Callbacks} callbacks - Callbacks to receive various events.\n */\n constructor(callbacks) {\n super(Const.TOPIC_FND, callbacks);\n }\n\n // Override the original Topic._processMetaSubs\n _processMetaSubs(subs) {\n let updateCount = Object.getOwnPropertyNames(this._contacts).length;\n // Reset contact list.\n this._contacts = {};\n for (let idx in subs) {\n let sub = subs[idx];\n const indexBy = sub.topic ? sub.topic : sub.user;\n\n sub = mergeToCache(this._contacts, indexBy, sub);\n updateCount++;\n\n if (this.onMetaSub) {\n this.onMetaSub(sub);\n }\n }\n\n if (updateCount > 0 && this.onSubsUpdated) {\n this.onSubsUpdated(Object.keys(this._contacts));\n }\n }\n\n /**\n * Publishing to TopicFnd is not supported. {@link Topic#publish} is overriden and thows an {Error} if called.\n * @memberof Tinode.TopicFnd#\n * @throws {Error} Always throws an error.\n */\n publish() {\n return Promise.reject(new Error(\"Publishing to 'fnd' is not supported\"));\n }\n\n /**\n * setMeta to TopicFnd resets contact list in addition to sending the message.\n * @memberof Tinode.TopicFnd#\n * @param {Tinode.SetParams} params parameters to update.\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n setMeta(params) {\n return Object.getPrototypeOf(TopicFnd.prototype).setMeta.call(this, params).then(_ => {\n if (Object.keys(this._contacts).length > 0) {\n this._contacts = {};\n if (this.onSubsUpdated) {\n this.onSubsUpdated([]);\n }\n }\n });\n }\n\n /**\n * Iterate over found contacts. If callback is undefined, use {@link this.onMetaSub}.\n * @function\n * @memberof Tinode.TopicFnd#\n * @param {TopicFnd.ContactCallback} callback - Callback to call for each contact.\n * @param {Object} context - Context to use for calling the `callback`, i.e. the value of `this` inside the callback.\n */\n contacts(callback, context) {\n const cb = (callback || this.onMetaSub);\n if (cb) {\n for (let idx in this._contacts) {\n cb.call(context, this._contacts[idx], idx, this._contacts);\n }\n }\n }\n}\n"],"names":["root","factory","exports","module","define","amd","this","JSON_MIME_TYPE","ALLOWED_ENT_FIELDS","segmenter","Intl","Segmenter","INLINE_STYLES","name","start","end","FMT_WEIGHT","ENTITY_TYPES","dataName","pack","val","test","url","re","slice","FORMAT_TAGS","AU","html_tag","md_tag","undefined","isVoid","BN","BR","CO","DL","EM","EX","FM","HD","HL","HT","IM","LN","MN","RW","QQ","ST","VC","VD","base64toObjectUrl","b64","contentType","logger","bin","atob","length","buf","ArrayBuffer","arr","Uint8Array","i","charCodeAt","URL","createObjectURL","Blob","type","err","message","base64toDataUrl","DECORATORS","open","_","close","data","props","href","target","id","act","ref","mime","Drafty","src","duration","size","tmpPreviewUrl","_tempPreview","previewUrl","downloadUrl","width","height","title","alt","state","preview","premime","poster","preref","txt","fmt","ent","chunkify","line","spans","chunks","span","at","push","chunk","tp","chld","children","toSpanTree","tree","last","draftyToTree","doc","Array","isArray","text","len","key","attachments","forEach","includes","stringToGraphemes","sort","a","b","diff","indexOf","graphemes","spansToTree","treeTopDown","node","child","parent","addNode","n","map","segment","join","att","subspans","inner","tag","treeToDrafty","keymap","c","Object","keys","newKey","transformer","context","dst","call","treeBottomUp","formatter","index","stack","values","pop","shortenTree","limit","tail","lightEntity","allow","copyEntData","lTrim","trimStart","shift","attachmentsToEnd","concat","draftify","startAt","plain","ranges","drafty","light","entries","dc","toGraphemeValues","segments","indices","result","graphemeIndex","charIndex","graphemeIndices","correctAt","str","from","init","plainText","parse","content","lines","split","entityMap","entityIndex","blx","entities","block","original","re_start","re_end","exec","start_offset","lastIndexOf","end_offset","spannify","match","extracted","entity","offset","unique","idx","filter","el","extractEntities","ele","s","correctLen","obj","append","first","second","insertImage","imageDesc","ex","refurl","bits","filename","urlPromise","_processing","then","insertVideo","videoDesc","urls","insertAudio","audioDesc","videoCall","audioOnly","aonly","updateVideoCall","params","assign","quote","header","uid","body","appendLineBreak","mention","appendLink","linkData","appendImage","appendAudio","attachFile","attachmentDesc","wrapInto","style","wrapAsForm","insertButton","actionType","actionValue","refUrl","appendButton","attachJSON","UNSAFE_toHTML","format","shorten","forwardedContent","replyContent","startsWith","forwarding","toPlainText","isPlainText","toMarkdown","def","isValid","txt_type","hasAttachments","callback","count","hasEntities","styles","sanitizeEntities","getDownloadUrl","entData","isProcessing","getPreviewUrl","getEntitySize","getEntityMimeType","tagName","attrValue","getContentType","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","__esModule","d","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","value","AccessMode","constructor","acs","given","decode","want","mode","side","flag","Error","_BITMASK","_NONE","bitmask","_JOIN","_READ","_WRITE","_PRES","_APPROVE","_SHARE","_DELETE","_OWNER","m0","bit","charAt","toUpperCase","encode","_INVALID","res","update","upd","action","val0","parts","a1","a2","toString","jsonHelper","setMode","m","updateMode","u","getMode","setGiven","updateGiven","getGiven","setWant","w","updateWant","getWant","getMissing","getExcessive","updateAll","isOwner","isPresencer","isMuted","isJoiner","isReader","isWriter","isApprover","isAdmin","isSharer","isDeleter","VERSION","LIBRARY","TOPIC_NEW","TOPIC_NEW_CHAN","TOPIC_ME","TOPIC_FND","TOPIC_GRP","LOCAL_SEQID","DEL_CHAR","CommError","code","super","jsonParseHelper","date","Date","isNaN","isUrlRelative","isValidDate","getTime","mergeObj","ignore","mergeToCache","cache","newval","simplify","getOwnPropertyNames","WebSocketProvider","XHRProvider","NETWORK_ERROR_TEXT","NETWORK_USER","NETWORK_USER_TEXT","makeBaseUrl","host","protocol","version","apiKey","Connection","static","secure","autoreconnect","initialized","config","version_","autoreconnect_","transport","setNetworkProviders","wsProvider","xhrProvider","l","connect","host_","force","Promise","reject","reconnect","disconnect","sendText","msg","isConnected","probe","backoffReset","clearTimeout","timeout","Math","pow","random","onAutoreconnectIteration","setTimeout","prom","catch","_lpURL","_poller","_sender","lp_poller","url_","resolve","poller","promiseCompleted","onreadystatechange","evt","readyState","status","pkt","JSON","responseText","ctrl","sid","send","onOpen","onMessage","onDisconnect","abort","sender","lp_sender","OPEN","conn","onerror","onopen","onclose","onmessage","NETWORK_ERROR","DB_NAME","IDBProvider","DB","db","disabled","onError","source","trx","transaction","event","error","objectStore","getAll","onsuccess","topic","initDatabase","req","onupgradeneeded","createObjectStore","keyPath","deleteDatabase","onblocked","isReady","updTopic","oncomplete","put","commit","markTopicAsDeleted","deleted","_deleted","remTopic","delete","IDBKeyRange","only","bound","Number","MAX_SAFE_INTEGER","mapTopics","deserializeTopic","updUser","pub","arguments","public","remUser","mapUsers","getUser","user","updSubscription","topicName","sub","mapSubscriptions","addMessage","add","updMessageStatus","seq","_status","remMessages","to","range","readMessages","query","since","before","openCursor","cursor","continue","f","tags","_tags","setAccessMode","read","unread","max","getAccessMode","setDatabaseProvider","idbProvider","IndexedDBProvider","LargeFileHelper","tinode","_tinode","_version","_apiKey","_authToken","getAuthToken","xhr","uploadWithBaseUrl","baseUrl","avatarFor","onProgress","onSuccess","onFailure","base","endsWith","instance","setRequestHeader","token","toResolve","toReject","upload","onprogress","lengthComputable","loaded","total","onload","response","statusText","onabort","form","FormData","set","getNextUniqueId","_secure","_host","download","relativeUrl","mimetype","relUrl","location","origin","searchParams","substring","addURLParam","responseType","link","document","createElement","display","setAttribute","appendChild","click","removeChild","revokeObjectURL","reader","FileReader","readAsText","cancel","setNetworkProvider","MetaGetBuilder","what","updated","isP2PType","_lastSubsUpdate","withData","withLaterData","_maxSeq","withEarlierData","_minSeq","withDesc","ims","withLaterDesc","withSub","userOrTopic","opts","getType","withOneSub","withLaterOneSub","withLaterSub","withTags","withCred","withDel","withLaterDel","_maxDel","extract","build","CBuffer","buffer","compare_","unique_","elem","exact","pivot","found","splice","getAt","getLast","insert","delAt","delRange","reset","startIdx","beforeIdx","find","nearest","isEmpty","Topic","callbacks","created","touched","private","trusted","_users","_queuedSeqId","Const","_noEarlierMsgs","_recvNotificationTimer","_credentials","_messageVersions","_messages","_attached","_new","_delayedLeaveTimer","onData","onMeta","onPres","onInfo","onMetaDesc","onMetaSub","onSubsUpdated","onTagsUpdated","onCredsUpdated","onDeleteTopic","onAllMessagesReceived","topicType","isMeTopicName","isGroupTopicName","isP2PTopicName","isCommTopicName","isNewGroupTopicName","isChannelTopicName","isSubscribed","subscribe","getParams","setParams","_cacheDelSelf","_cachePutSelf","ts","me","getMeTopic","desc","_noForwarding","_processMetaDesc","createMessage","noEcho","publish","publishMessage","_sending","_failed","swapMessageId","_maybeUpdateMessageVersionsCache","_routeData","publishDraft","_getQueuedSeqId","getCurrentUserID","noecho","_db","_cancelled","_fatal","leave","unsub","_resetSub","_gone","leaveDelayed","delay","getMeta","getMessagesPage","forward","startMetaQuery","_loadMessages","promise","setMeta","out","t","trim","toLowerCase","item","pos","ary","normalizeArray","_processMetaSubs","_processMetaTags","cred","_processMetaCreds","subscriber","am","invite","archive","arch","delMessages","hard","r1","r2","low","hi","tosend","reduce","del","flushMessageRange","flushMessage","delMessagesAll","hardDel","_all","delMessagesList","list","prev","delMessagesEdits","messageVersions","delTopic","delSubscription","note","_updateMyReadRecv","_refreshContact","noteRecv","noteRead","noteKeyPress","noteRecording","payload","oldVal","doUpdate","recv","userDesc","_cacheGetUser","p2pPeerDesc","subscribers","cb","origSeq","versions","messages","sinceId","beforeId","msgs","unused1","unused2","_isReplacementMsg","latest","latestMsgVersion","_origTs","_origSeq","findMessage","latestMessage","maxMsgSeq","minMsgSeq","maxClearId","messageCount","queuedMessages","msgReceiptCount","msgReadCount","msgRecvCount","msgHasMoreMessages","newer","isNewMessage","seqId","fromId","untilId","newSeqId","numMessages","cancelSend","msgStatus","getDefaultAccess","defacs","isArchived","isMeType","isChannelType","isGroupType","isCommType","isMe","head","replace","targetSeq","parseInt","targetMsg","outgoing","webrtc","incoming","_routeInfo","_routeMeta","meta","_processDelMessages","clear","delseq","_routePres","pres","online","isTopicCached","dacs","info","subs","_updateCachedUser","creds","_allMessagesReceived","cached","_cachePutUser","_updateReceived","TopicMe","onContactUpdate","turnOff","_myUID","cont","seen","when","updateCount","cacheRemTopic","getTopic","cr","findIndex","meth","done","resp","cacheGetTopic","tgt","ua","dummy","delCredential","method","contacts","getContact","getCredentials","TopicFnd","_contacts","indexBy","getPrototypeOf","b64EncodeUnicode","btoa","encodeURIComponent","p1","String","fromCharCode","jsonBuildHelper","pad","sp","repeat","millis","getUTCMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","rfc3339DateString","jsonLoggerHelper","WebSocket","XMLHttpRequest","indexedDB","chars","global","output","charCode","bc","bs","DBCache","initForNonBrowserApp","Tinode","_appName","_browser","_platform","_hwos","_humanLanguage","_loggingEnabled","_trimLongStrings","_authenticated","_login","_inPacketCount","_messageId","floor","_serverInfo","_deviceToken","_pendingPromises","_expirePromises","_connection","_persist","_cache","onComplete","appName","platform","navigator","product","reactnative","priority","tmp","substr","tokens","m2","v","minor","getBrowserInfo","userAgent","language","detectTransport","persist","all","dateString","_len","args","_key","console","log","onOK","errorText","stringify","onRawMessage","onNetworkProbe","onCtrlMessage","onMetaMessage","onDataMessage","onPresMessage","onInfoMessage","setInterval","expires","hello","clearInterval","func","_cacheDelUser","onLogin","credential","getVersion","getLibrary","isNullValue","isServerAssignedSeq","clearStorage","initStorage","networkProbe","isAuthenticated","authorizeURL","parsed","account","scheme","secret","login","acc","tmpscheme","tmpsecret","extra","createAccount","createAccountBasic","username","password","updateAccountBasic","onConnect","setDeviceToken","dt","sent","loginBasic","uname","loginToken","requestResetAuthSecret","now","setAuthToken","dft","oobNotification","xfrom","finally","modeGiven","modeWant","delCurrentUser","newGroupTopicName","isChan","getFndTopic","getLargeFileHelper","getCurrentLogin","getServerInfo","report","getServerParam","defaultValue","enableLogging","enabled","trimLongStrings","setHumanLanguage","hl","isTopicOnline","getTopicAccessMode","wantAkn","onWebsocketOpen","MESSAGE_STATUS_NONE","MESSAGE_STATUS_QUEUED","MESSAGE_STATUS_SENDING","MESSAGE_STATUS_FAILED","MESSAGE_STATUS_FATAL","MESSAGE_STATUS_SENT","MESSAGE_STATUS_RECEIVED","MESSAGE_STATUS_READ","MESSAGE_STATUS_TO_ME","MAX_MESSAGE_SIZE","MAX_SUBSCRIBER_COUNT","MAX_TAG_COUNT","MAX_FILE_UPLOAD_SIZE","REQ_CRED_VALIDATORS","URI_TOPIC_ID_PREFIX"],"sourceRoot":""}
\ No newline at end of file
+{"version":3,"file":"tinode.prod.js","mappings":"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","sources":["webpack://tinode/webpack/universalModuleDefinition","webpack://tinode/./src/drafty.js","webpack://tinode/webpack/bootstrap","webpack://tinode/webpack/runtime/compat get default export","webpack://tinode/webpack/runtime/define property getters","webpack://tinode/webpack/runtime/global","webpack://tinode/webpack/runtime/hasOwnProperty shorthand","webpack://tinode/webpack/runtime/make namespace object","webpack://tinode/./src/access-mode.js","webpack://tinode/./version.js","webpack://tinode/./src/config.js","webpack://tinode/./src/comm-error.js","webpack://tinode/./src/utils.js","webpack://tinode/./src/connection.js","webpack://tinode/./src/db.js","webpack://tinode/./src/large-file.js","webpack://tinode/./src/tinode.js","webpack://tinode/./src/meta-builder.js","webpack://tinode/./src/cbuffer.js","webpack://tinode/./src/topic.js","webpack://tinode/./src/fnd-topic.js","webpack://tinode/./src/me-topic.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tinode\"] = factory();\n\telse\n\t\troot[\"tinode\"] = factory();\n})(this, () => {\nreturn ","/**\n * @copyright 2015-2024 Tinode LLC.\n * @summary Minimally rich text representation and formatting for Tinode.\n * @license Apache 2.0\n *\n * @file Basic parser and formatter for very simple text markup. Mostly targeted at\n * mobile use cases similar to Telegram, WhatsApp, and FB Messenger.\n *\n * \n *
\n * Also supports forms and buttons.\n *\n * Nested formatting is supported, e.g. *abc _def_* -> abc def\n * URLs, @mentions, and #hashtags are extracted and converted into links.\n * Forms and buttons can be added procedurally.\n * JSON data representation is inspired by Draft.js raw formatting.\n *\n *\n * @example\n * Text:\n * abc\n * this is *bold*, `code` and _italic_, ~strike~\n * combined *bold and _italic_*\n * an url: https://www.example.com/abc#fragment and another _www.tinode.co_\n * this is a @mention and a #hashtag in a string\n * second #hashtag\n *
\n *\n * Sample JSON representation of the text above:\n * {\n * \"txt\": \"this is bold, code and italic, strike combined bold and italic an url: https://www.example.com/abc#fragment \" +\n * \"and another www.tinode.co this is a @mention and a #hashtag in a string second #hashtag\",\n * \"fmt\": [\n * { \"at\":8, \"len\":4,\"tp\":\"ST\" },{ \"at\":14, \"len\":4, \"tp\":\"CO\" },{ \"at\":23, \"len\":6, \"tp\":\"EM\"},\n * { \"at\":31, \"len\":6, \"tp\":\"DL\" },{ \"tp\":\"BR\", \"len\":1, \"at\":37 },{ \"at\":56, \"len\":6, \"tp\":\"EM\" },\n * { \"at\":47, \"len\":15, \"tp\":\"ST\" },{ \"tp\":\"BR\", \"len\":1, \"at\":62 },{ \"at\":120, \"len\":13, \"tp\":\"EM\" },\n * { \"at\":71, \"len\":36, \"key\":0 },{ \"at\":120, \"len\":13, \"key\":1 },{ \"tp\":\"BR\", \"len\":1, \"at\":133 },\n * { \"at\":144, \"len\":8, \"key\":2 },{ \"at\":159, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":179 },\n * { \"at\":187, \"len\":8, \"key\":3 },{ \"tp\":\"BR\", \"len\":1, \"at\":195 }\n * ],\n * \"ent\": [\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"https://www.example.com/abc#fragment\" } },\n * { \"tp\":\"LN\", \"data\":{ \"url\":\"http://www.tinode.co\" } },\n * { \"tp\":\"MN\", \"data\":{ \"val\":\"mention\" } },\n * { \"tp\":\"HT\", \"data\":{ \"val\":\"hashtag\" } }\n * ]\n * }\n */\n\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst MAX_FORM_ELEMENTS = 8;\nconst MAX_PREVIEW_ATTACHMENTS = 3;\nconst MAX_PREVIEW_DATA_SIZE = 64;\nconst JSON_MIME_TYPE = 'application/json';\nconst DRAFTY_MIME_TYPE = 'text/x-drafty';\nconst ALLOWED_ENT_FIELDS = ['act', 'height', 'duration', 'incoming', 'mime', 'name', 'premime', 'preref', 'preview',\n 'ref', 'size', 'state', 'url', 'val', 'width'\n];\n\n// Intl.Segmenter is not available in Firefox 124 and earlier. FF 125 with support for Intl.Segmenter\n// was released on April 15, 2024. Polyfill is included in the top package (webapp).\nconst segmenter = new Intl.Segmenter();\n\n// Regular expressions for parsing inline formats. Javascript does not support lookbehind,\n// so it's a bit messy.\nconst INLINE_STYLES = [\n // Strong = bold, *bold text*\n {\n name: 'ST',\n start: /(?:^|[\\W_])(\\*)[^\\s*]/,\n end: /[^\\s*](\\*)(?=$|[\\W_])/\n },\n // Emphesized = italic, _italic text_\n {\n name: 'EM',\n start: /(?:^|\\W)(_)[^\\s_]/,\n end: /[^\\s_](_)(?=$|\\W)/\n },\n // Deleted, ~strike this though~\n {\n name: 'DL',\n start: /(?:^|[\\W_])(~)[^\\s~]/,\n end: /[^\\s~](~)(?=$|[\\W_])/\n },\n // Code block `this is monospace`\n {\n name: 'CO',\n start: /(?:^|\\W)(`)[^`]/,\n end: /[^`](`)(?=$|\\W)/\n }\n];\n\n// Relative weights of formatting spans. Greater index in array means greater weight.\nconst FMT_WEIGHT = ['QQ'];\n\n// RegExps for entity extraction (RF = reference)\nconst ENTITY_TYPES = [\n // URLs\n {\n name: 'LN',\n dataName: 'url',\n pack: function(val) {\n // Check if the protocol is specified, if not use http\n if (!/^[a-z]+:\\/\\//i.test(val)) {\n val = 'http://' + val;\n }\n return {\n url: val\n };\n },\n re: /(?:(?:https?|ftp):\\/\\/|www\\.|ftp\\.)[-A-Z0-9+&@#\\/%=~_|$?!:,.]*[A-Z0-9+&@#\\/%=~_|$]/ig\n },\n // Mentions @user (must be 2 or more characters)\n {\n name: 'MN',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B@([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n },\n // Hashtags #hashtag, like metion 2 or more characters.\n {\n name: 'HT',\n dataName: 'val',\n pack: function(val) {\n return {\n val: val.slice(1)\n };\n },\n re: /\\B#([\\p{L}\\p{N}][._\\p{L}\\p{N}]*[\\p{L}\\p{N}])/ug\n }\n];\n\n// HTML tag name suggestions\nconst FORMAT_TAGS = {\n AU: {\n html_tag: 'audio',\n md_tag: undefined,\n isVoid: false\n },\n BN: {\n html_tag: 'button',\n md_tag: undefined,\n isVoid: false\n },\n BR: {\n html_tag: 'br',\n md_tag: '\\n',\n isVoid: true\n },\n CO: {\n html_tag: 'tt',\n md_tag: '`',\n isVoid: false\n },\n DL: {\n html_tag: 'del',\n md_tag: '~',\n isVoid: false\n },\n EM: {\n html_tag: 'i',\n md_tag: '_',\n isVoid: false\n },\n EX: {\n html_tag: '',\n md_tag: undefined,\n isVoid: true\n },\n FM: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n HD: {\n html_tag: '',\n md_tag: undefined,\n isVoid: false\n },\n HL: {\n html_tag: 'span',\n md_tag: undefined,\n isVoid: false\n },\n HT: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n IM: {\n html_tag: 'img',\n md_tag: undefined,\n isVoid: false\n },\n LN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n MN: {\n html_tag: 'a',\n md_tag: undefined,\n isVoid: false\n },\n RW: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false,\n },\n QQ: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n ST: {\n html_tag: 'b',\n md_tag: '*',\n isVoid: false\n },\n VC: {\n html_tag: 'div',\n md_tag: undefined,\n isVoid: false\n },\n VD: {\n html_tag: 'video',\n md_tag: undefined,\n isVoid: false\n }\n};\n\n// Convert base64-encoded string into Blob.\nfunction base64toObjectUrl(b64, contentType, logger) {\n if (!b64) {\n return null;\n }\n\n try {\n const bin = atob(b64);\n const length = bin.length;\n const buf = new ArrayBuffer(length);\n const arr = new Uint8Array(buf);\n for (let i = 0; i < length; i++) {\n arr[i] = bin.charCodeAt(i);\n }\n\n return URL.createObjectURL(new Blob([buf], {\n type: contentType\n }));\n } catch (err) {\n if (logger) {\n logger(\"Drafty: failed to convert object.\", err.message);\n }\n }\n\n return null;\n}\n\nfunction base64toDataUrl(b64, contentType) {\n if (!b64) {\n return null;\n }\n contentType = contentType || 'image/jpeg';\n return 'data:' + contentType + ';base64,' + b64;\n}\n\n// Helpers for converting Drafty to HTML.\nconst DECORATORS = {\n // Visial styles\n ST: {\n open: _ => '',\n close: _ => ''\n },\n EM: {\n open: _ => '',\n close: _ => ''\n },\n DL: {\n open: _ => '',\n close: _ => ''\n },\n CO: {\n open: _ => '',\n close: _ => ''\n },\n // Line break\n BR: {\n open: _ => '
',\n close: _ => ''\n },\n // Hidden element\n HD: {\n open: _ => '',\n close: _ => ''\n },\n // Highlighted element.\n HL: {\n open: _ => '',\n close: _ => ''\n },\n // Link (URL)\n LN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n href: data.url,\n target: '_blank'\n } : null;\n },\n },\n // Mention\n MN: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Hashtag\n HT: {\n open: (data) => {\n return '';\n },\n close: _ => '',\n props: (data) => {\n return data ? {\n id: data.val\n } : null;\n },\n },\n // Button\n BN: {\n open: _ => '',\n props: (data) => {\n return data ? {\n 'data-act': data.act,\n 'data-val': data.val,\n 'data-name': data.name,\n 'data-ref': data.ref\n } : null;\n },\n },\n // Audio recording\n AU: {\n open: (data) => {\n const url = data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger);\n return '',\n props: (data) => {\n if (!data) return null;\n return {\n // Embedded data or external link.\n src: data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-duration': data.duration,\n 'data-name': data.name,\n 'data-size': data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0),\n 'data-mime': data.mime,\n };\n }\n },\n // Image\n IM: {\n open: data => {\n // Don't use data.ref for preview: it's a security risk.\n const tmpPreviewUrl = base64toDataUrl(data._tempPreview, data.mime);\n const previewUrl = base64toObjectUrl(data.val, data.mime, Drafty.logger);\n const downloadUrl = data.ref || previewUrl;\n return (data.name ? '' : '') +\n '';\n },\n close: data => {\n return (data.name ? '' : '');\n },\n props: data => {\n if (!data) return null;\n return {\n // Temporary preview, or permanent preview, or external link.\n src: base64toDataUrl(data._tempPreview, data.mime) ||\n data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n title: data.name,\n alt: data.name,\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n },\n },\n // Form - structured layout of elements.\n FM: {\n open: _ => '
';\n },\n close: _ => '',\n props: data => {\n if (!data) return null;\n const poster = data.preref || base64toObjectUrl(data.preview, data.premime || 'image/jpeg', Drafty.logger);\n return {\n // Embedded data or external link.\n src: poster,\n 'data-src': data.ref || base64toObjectUrl(data.val, data.mime, Drafty.logger),\n 'data-width': data.width,\n 'data-height': data.height,\n 'data-preload': data.ref ? 'metadata' : 'auto',\n 'data-preview': poster,\n 'data-duration': data.duration | 0,\n 'data-name': data.name,\n 'data-size': data.ref ? (data.size | 0) : (data.val ? ((data.val.length * 0.75) | 0) : (data.size | 0)),\n 'data-mime': data.mime,\n };\n }\n },\n};\n\n/**\n * The main object which performs all the formatting actions.\n * @class Drafty\n * @constructor\n */\nconst Drafty = function() {\n this.txt = '';\n this.fmt = [];\n this.ent = [];\n}\n\n/**\n * Initialize Drafty document to a plain text string.\n *\n * @param {string} plainText - string to use as Drafty content.\n *\n * @returns new Drafty document or null is plainText is not a string or undefined.\n */\nDrafty.init = function(plainText) {\n if (typeof plainText == 'undefined') {\n plainText = '';\n } else if (typeof plainText != 'string') {\n return null;\n }\n\n return {\n txt: plainText\n };\n}\n\n/**\n * Parse plain text into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} content - plain-text content to parse.\n * @return {Drafty} parsed document or null if the source is not plain text.\n */\nDrafty.parse = function(content) {\n // Make sure we are parsing strings only.\n if (typeof content != 'string') {\n return null;\n }\n\n // Split text into lines. It makes further processing easier.\n const lines = content.split(/\\r?\\n/);\n\n // Holds entities referenced from text\n const entityMap = [];\n const entityIndex = {};\n\n // Processing lines one by one, hold intermediate result in blx.\n const blx = [];\n lines.forEach((line) => {\n let spans = [];\n let entities;\n\n // Find formatted spans in the string.\n // Try to match each style.\n INLINE_STYLES.forEach((tag) => {\n // Each style could be matched multiple times.\n spans = spans.concat(spannify(line, tag.start, tag.end, tag.name));\n });\n\n let block;\n if (spans.length == 0) {\n block = {\n txt: line\n };\n } else {\n // Sort spans by style occurence early -> late, then by length: first long then short.\n spans.sort((a, b) => {\n const diff = a.at - b.at;\n return diff != 0 ? diff : b.end - a.end;\n });\n\n // Convert an array of possibly overlapping spans into a tree.\n spans = toSpanTree(spans);\n\n // Build a tree representation of the entire string, not\n // just the formatted parts.\n const chunks = chunkify(line, 0, line.length, spans);\n\n const drafty = draftify(chunks, 0);\n\n block = {\n txt: drafty.txt,\n fmt: drafty.fmt\n };\n }\n\n // Extract entities from the cleaned up string.\n entities = extractEntities(block.txt);\n if (entities.length > 0) {\n const ranges = [];\n for (let i in entities) {\n // {offset: match['index'], unique: match[0], len: match[0].length, data: ent.packer(), type: ent.name}\n const entity = entities[i];\n let index = entityIndex[entity.unique];\n if (!index) {\n index = entityMap.length;\n entityIndex[entity.unique] = index;\n entityMap.push({\n tp: entity.type,\n data: entity.data\n });\n }\n ranges.push({\n at: entity.offset,\n len: entity.len,\n key: index\n });\n }\n block.ent = ranges;\n }\n\n blx.push(block);\n });\n\n const result = {\n txt: ''\n };\n\n // Merge lines and save line breaks as BR inline formatting.\n if (blx.length > 0) {\n result.txt = blx[0].txt;\n result.fmt = (blx[0].fmt || []).concat(blx[0].ent || []);\n\n if (result.fmt.length) {\n const segments = segmenter.segment(result.txt);\n for (const ele of result.fmt) {\n ({\n at: ele.at,\n len: ele.len\n } =\n toGraphemeValues(ele, segments, result.txt));\n }\n }\n\n for (let i = 1; i < blx.length; i++) {\n const block = blx[i];\n const offset = stringToGraphemes(result.txt).length + 1;\n\n result.fmt.push({\n tp: 'BR',\n len: 1,\n at: offset - 1\n });\n\n let segments = {};\n\n result.txt += ' ' + block.txt;\n if (block.fmt) {\n segments = segmenter.segment(block.txt);\n result.fmt = result.fmt.concat(\n block.fmt.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n if (block.ent) {\n if (isEmptyObject(segments)) {\n segments = segmenter.segment(block.txt);\n }\n result.fmt = result.fmt.concat(\n block.ent.map((s) => {\n const {\n at: correctAt,\n len: correctLen\n } =\n toGraphemeValues(s, segments, block.txt);\n s.at = correctAt + offset;\n s.len = correctLen;\n return s;\n })\n );\n }\n }\n\n if (result.fmt.length == 0) {\n delete result.fmt;\n }\n\n if (entityMap.length > 0) {\n result.ent = entityMap;\n }\n }\n return result;\n}\n\n/**\n * Append one Drafty document to another.\n *\n * @param {Drafty} first - Drafty document to append to.\n * @param {Drafty|string} second - Drafty document or string being appended.\n *\n * @return {Drafty} first document with the second appended to it.\n */\nDrafty.append = function(first, second) {\n if (!first) {\n return second;\n }\n if (!second) {\n return first;\n }\n\n first.txt = first.txt || '';\n const len = stringToGraphemes(first.txt).length;\n\n if (typeof second == 'string') {\n first.txt += second;\n } else if (second.txt) {\n first.txt += second.txt;\n }\n\n if (Array.isArray(second.fmt)) {\n first.fmt = first.fmt || [];\n if (Array.isArray(second.ent)) {\n first.ent = first.ent || [];\n }\n second.fmt.forEach(src => {\n const fmt = {\n at: (src.at | 0) + len,\n len: src.len | 0\n };\n // Special case for the outside of the normal rendering flow styles.\n if (src.at == -1) {\n fmt.at = -1;\n fmt.len = 0;\n }\n if (src.tp) {\n fmt.tp = src.tp;\n } else {\n fmt.key = first.ent.length;\n first.ent.push(second.ent[src.key || 0]);\n }\n first.fmt.push(fmt);\n });\n }\n\n return first;\n}\n\n/**\n * Description of an image to attach.\n * @typedef {Object} ImageDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the image, e.g. \"image/png\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded image content. Could be null/undefined.\n * @property {string} preview - base64-encoded thumbnail of the image.\n * @property {integer} width - width of the image.\n * @property {integer} height - height of the image.\n * @property {string} filename - file name suggestion for downloading the image.\n * @property {integer} size - size of the image in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded image preview used during upload process; not serializable.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {integer} at - index where the object is inserted. The length of the image is always 1.\n * @param {ImageDesc} imageDesc - object with image paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertImage = function(content, at, imageDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'IM',\n data: {\n mime: imageDesc.mime,\n ref: imageDesc.refurl,\n val: imageDesc.bits || imageDesc.preview,\n width: imageDesc.width,\n height: imageDesc.height,\n name: imageDesc.filename,\n size: imageDesc.size | 0,\n }\n };\n\n if (imageDesc.urlPromise) {\n ex.data._tempPreview = imageDesc._tempPreview;\n ex.data._processing = true;\n imageDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of a video to attach.\n * @typedef {Object} VideoDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the video, e.g. \"video/mpeg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - in-band base64-encoded image data. Could be null/undefined.\n * @property {string} preview - base64-encoded screencapture from the video. Could be null/undefined.\n * @property {string} preref - reference to screencapture from the video. Could be null/undefined.\n * @property {integer} width - width of the video.\n * @property {integer} height - height of the video.\n * @property {integer} duration - duration of the video.\n * @property {string} filename - file name suggestion for downloading the video.\n * @property {integer} size - size of the video in bytes. Treat is as an untrusted hint.\n * @property {string} _tempPreview - base64-encoded screencapture used during upload process; not serializable.\n * @property {Promise} urlPromise - array of two promises, which return URLs of video and preview uploads correspondingly\n * (either could be null).\n */\n\n/**\n * Insert inline image into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add video to.\n * @param {integer} at - index where the object is inserted. The length of the video is always 1.\n * @param {VideoDesc} videoDesc - object with video paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertVideo = function(content, at, videoDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'VD',\n data: {\n mime: videoDesc.mime,\n ref: videoDesc.refurl,\n val: videoDesc.bits,\n preref: videoDesc.preref,\n preview: videoDesc.preview,\n width: videoDesc.width,\n height: videoDesc.height,\n duration: videoDesc.duration | 0,\n name: videoDesc.filename,\n size: videoDesc.size | 0,\n }\n };\n\n if (videoDesc.urlPromise) {\n ex.data._tempPreview = videoDesc._tempPreview;\n ex.data._processing = true;\n videoDesc.urlPromise.then(\n urls => {\n ex.data.ref = urls[0];\n ex.data.preref = urls[1];\n ex.data._tempPreview = undefined;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Description of an audio recording to attach.\n * @typedef {Object} AudioDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the audio, e.g. \"audio/ogg\".\n * @property {string} refurl - reference to the content. Could be null/undefined.\n * @property {string} bits - base64-encoded audio content. Could be null/undefined.\n * @property {integer} duration - duration of the record in milliseconds.\n * @property {string} preview - base64 encoded short array of amplitude values 0..100.\n * @property {string} filename - file name suggestion for downloading the audio.\n * @property {integer} size - size of the recording in bytes. Treat is as an untrusted hint.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Insert audio recording into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add audio record to.\n * @param {integer} at - index where the object is inserted. The length of the record is always 1.\n * @param {AudioDesc} audioDesc - object with the audio paramenets and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertAudio = function(content, at, audioDesc) {\n content = content || {\n txt: ' '\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: 1,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'AU',\n data: {\n mime: audioDesc.mime,\n val: audioDesc.bits,\n duration: audioDesc.duration | 0,\n preview: audioDesc.preview,\n name: audioDesc.filename,\n size: audioDesc.size | 0,\n ref: audioDesc.refurl\n }\n };\n\n if (audioDesc.urlPromise) {\n ex.data._processing = true;\n audioDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n // Catch the error, otherwise it will appear in the console.\n ex.data._processing = undefined;\n }\n );\n }\n\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Create a (self-contained) video call Drafty document.\n * @memberof Drafty\n * @static\n * @param {boolean} audioOnly
true if the call is initially audio-only.\n * @returns Video Call drafty document.\n */\nDrafty.videoCall = function(audioOnly) {\n const content = {\n txt: ' ',\n fmt: [{\n at: 0,\n len: 1,\n key: 0\n }],\n ent: [{\n tp: 'VC',\n data: {\n aonly: audioOnly\n },\n }]\n };\n return content;\n}\n\n/**\n * Update video call (VC) entity with the new status and duration.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - VC document to update.\n * @param {object} params - new video call parameters.\n * @param {string} params.state - state of video call.\n * @param {number} params.duration - duration of the video call in milliseconds.\n *\n * @returns the same document with update applied.\n */\nDrafty.updateVideoCall = function(content, params) {\n // The video element could be just a format or a format + entity.\n // Must ensure it's the latter first.\n const fmt = ((content || {}).fmt || [])[0];\n if (!fmt) {\n // Unrecognized content.\n return content;\n }\n\n let ent;\n if (fmt.tp == 'VC') {\n // Just a format, convert to format + entity.\n delete fmt.tp;\n fmt.key = 0;\n ent = {\n tp: 'VC'\n };\n content.ent = [ent];\n } else {\n ent = (content.ent || [])[fmt.key | 0];\n if (!ent || ent.tp != 'VC') {\n // Not a VC entity.\n return content;\n }\n }\n ent.data = ent.data || {};\n Object.assign(ent.data, params);\n return content;\n}\n\n/**\n * Create a quote to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {string} header - Quote header (title, etc.).\n * @param {string} uid - UID of the author to mention.\n * @param {Drafty} body - Body of the quoted message.\n *\n * @returns Reply quote Drafty doc with the quote formatting.\n */\nDrafty.quote = function(header, uid, body) {\n const quote = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, uid)), body);\n\n // Wrap into a quote.\n quote.fmt.push({\n at: 0,\n len: stringToGraphemes(quote.txt).length,\n tp: 'QQ'\n });\n\n return quote;\n}\n\n/**\n * Create a Drafty document with a mention.\n *\n * @param {string} name - mentioned name.\n * @param {string} uid - mentioned user ID.\n *\n * @returns {Drafty} document with the mention.\n */\nDrafty.mention = function(name, uid) {\n return {\n txt: name || '',\n fmt: [{\n at: 0,\n len: stringToGraphemes(name || '').length,\n key: 0\n }],\n ent: [{\n tp: 'MN',\n data: {\n val: uid\n }\n }]\n };\n}\n\n/**\n * Append a link to a Drafty document.\n *\n * @param {Drafty} content - Drafty document to append link to.\n * @param {Object} linkData - Link info in format {txt: 'ankor text', url: 'http://...'}.\n *\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLink = function(content, linkData) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: content.txt.length,\n len: linkData.txt.length,\n key: content.ent.length\n });\n content.txt += linkData.txt;\n\n const ex = {\n tp: 'LN',\n data: {\n url: linkData.url\n }\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Append image to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add image to.\n * @param {ImageDesc} imageDesc - object with image paramenets.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendImage = function(content, imageDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertImage(content, content.txt.length - 1, imageDesc);\n}\n\n/**\n * Append audio recodring to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to add recording to.\n * @param {AudioDesc} audioDesc - object with audio data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendAudio = function(content, audioDesc) {\n content = content || {\n txt: ''\n };\n content.txt += ' ';\n return Drafty.insertAudio(content, content.txt.length - 1, audioDesc);\n}\n\n/**\n * Description of a file to attach.\n * @typedef {Object} AttachmentDesc\n * @memberof Drafty\n *\n * @property {string} mime - mime-type of the attachment, e.g. \"application/octet-stream\"\n * @property {string} data - base64-encoded in-band content of small attachments. Could be null/undefined.\n * @property {string} filename - file name suggestion for downloading the attachment.\n * @property {integer} size - size of the file in bytes. Treat is as an untrusted hint.\n * @property {string} refurl - reference to the out-of-band content. Could be null/undefined.\n * @property {Promise} urlPromise - Promise which returns content URL when resolved.\n */\n\n/**\n * Attach file to Drafty content. Either as a blob or as a reference.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to attach file to.\n * @param {AttachmentDesc} object - containing attachment description and data.\n *\n * @return {Drafty} updated document.\n */\nDrafty.attachFile = function(content, attachmentDesc) {\n content = content || {\n txt: ''\n };\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n const ex = {\n tp: 'EX',\n data: {\n mime: attachmentDesc.mime,\n val: attachmentDesc.data,\n name: attachmentDesc.filename,\n ref: attachmentDesc.refurl,\n size: attachmentDesc.size | 0\n }\n }\n if (attachmentDesc.urlPromise) {\n ex.data._processing = true;\n attachmentDesc.urlPromise.then(\n url => {\n ex.data.ref = url;\n ex.data._processing = undefined;\n },\n _ => {\n /* catch the error, otherwise it will appear in the console. */\n ex.data._processing = undefined;\n }\n );\n }\n content.ent.push(ex);\n\n return content;\n}\n\n/**\n * Wraps drafty document into a simple formatting style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - document or string to wrap into a style.\n * @param {string} style - two-letter style to wrap into.\n * @param {number} at - index where the style starts, default 0.\n * @param {number} len - length of the form content, default all of it.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapInto = function(content, style, at, len) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at || 0,\n len: len || content.txt.length,\n tp: style,\n });\n\n return content;\n}\n\n/**\n * Wraps content into an interactive form.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - to wrap into a form.\n * @param {number} at - index where the forms starts.\n * @param {number} len - length of the form content.\n *\n * @return {Drafty} updated document.\n */\nDrafty.wrapAsForm = function(content, at, len) {\n return Drafty.wrapInto(content, 'FM', at, len);\n}\n\n/**\n * Insert clickable button into Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {number} at - location where the button is inserted.\n * @param {number} len - the length of the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.insertButton = function(content, at, len, name, actionType, actionValue, refUrl) {\n if (typeof content == 'string') {\n content = {\n txt: content\n };\n }\n\n if (!content || !content.txt || content.txt.length < at + len) {\n return null;\n }\n\n if (len <= 0 || ['url', 'pub'].indexOf(actionType) == -1) {\n return null;\n }\n // Ensure refUrl is a string.\n if (actionType == 'url' && !refUrl) {\n return null;\n }\n refUrl = '' + refUrl;\n\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: at | 0,\n len: len,\n key: content.ent.length\n });\n content.ent.push({\n tp: 'BN',\n data: {\n act: actionType,\n val: actionValue,\n ref: refUrl,\n name: name\n }\n });\n\n return content;\n}\n\n/**\n * Append clickable button to Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} content - Drafty document to insert button to or a string to be used as button text.\n * @param {string} title - the text to be used as button title.\n * @param {string} name - the button. Client should return it to the server when the button is clicked.\n * @param {string} actionType - the type of the button, one of 'url' or 'pub'.\n * @param {string} actionValue - the value to return on click:\n * @param {string} refUrl - the URL to go to when the 'url' button is clicked.\n *\n * @return {Drafty} updated document.\n */\nDrafty.appendButton = function(content, title, name, actionType, actionValue, refUrl) {\n content = content || {\n txt: ''\n };\n const at = content.txt.length;\n content.txt += title;\n return Drafty.insertButton(content, at, title.length, name, actionType, actionValue, refUrl);\n}\n\n/**\n * Attach a generic JS object. The object is attached as a json string.\n * Intended for representing a form response.\n *\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to attach file to.\n * @param {Object} data - data to convert to json string and attach.\n * @returns {Drafty} the same document as content.\n */\nDrafty.attachJSON = function(content, data) {\n content = content || {\n txt: ''\n };\n content.ent = content.ent || [];\n content.fmt = content.fmt || [];\n\n content.fmt.push({\n at: -1,\n len: 0,\n key: content.ent.length\n });\n\n content.ent.push({\n tp: 'EX',\n data: {\n mime: JSON_MIME_TYPE,\n val: data\n }\n });\n\n return content;\n}\n/**\n * Append line break to a Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - Drafty document to append linebreak to.\n * @returns {Drafty} the same document as content.\n */\nDrafty.appendLineBreak = function(content) {\n content = content || {\n txt: ''\n };\n content.fmt = content.fmt || [];\n content.fmt.push({\n at: stringToGraphemes(content.txt).length,\n len: 1,\n tp: 'BR'\n });\n content.txt += ' ';\n\n return content;\n}\n/**\n * Given Drafty document, convert it to HTML.\n * No attempt is made to strip pre-existing html markup.\n * This is potentially unsafe because content.txt may contain malicious HTML\n * markup.\n * @memberof Tinode.Drafty\n * @static\n *\n * @param {Drafty} doc - document to convert.\n *\n * @returns {string} HTML-representation of content.\n */\nDrafty.UNSAFE_toHTML = function(doc) {\n const tree = draftyToTree(doc);\n const htmlFormatter = function(type, data, values) {\n const tag = DECORATORS[type];\n let result = values ? values.join('') : '';\n if (tag) {\n result = tag.open(data) + result + tag.close(data);\n }\n return result;\n };\n return treeBottomUp(tree, htmlFormatter, 0);\n}\n\n/**\n * Callback for applying custom formatting to a Drafty document.\n * Called once for each style span.\n * @memberof Drafty\n * @static\n *\n * @callback Formatter\n * @param {string} style - style code such as \"ST\" or \"IM\".\n * @param {Object} data - entity's data.\n * @param {Object} values - possibly styled subspans contained in this style span.\n * @param {number} index - index of the element guaranteed to be unique.\n */\n\n/**\n * Convert Drafty document to a representation suitable for display.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|Object} content - Drafty document to transform.\n * @param {Formatter} formatter - callback which formats individual elements.\n * @param {Object} context - context provided to formatter as this.\n *\n * @return {Object} transformed object\n */\nDrafty.format = function(original, formatter, context) {\n return treeBottomUp(draftyToTree(original), formatter, 0, [], context);\n}\n\n/**\n * Shorten Drafty document making the drafty text no longer than the limit.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characrets to shorten to.\n * @param {boolean} light - remove heavy data from entities.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.shorten = function(original, limit, light) {\n let tree = draftyToTree(original);\n tree = shortenTree(tree, limit, '…');\n if (tree && light) {\n tree = lightEntity(tree);\n }\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Transform Drafty doc for forwarding: strip leading @mention and any leading line breaks or whitespace.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.forwardedContent = function(original) {\n let tree = draftyToTree(original);\n const rmMention = function(node) {\n if (node.type == 'MN') {\n if (!node.parent || !node.parent.type) {\n return null;\n }\n }\n return node;\n }\n // Strip leading mention.\n tree = treeTopDown(tree, rmMention);\n // Remove leading whitespace.\n tree = lTrim(tree);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Prepare Drafty doc for wrapping into QQ as a reply:\n * - Replace forwarding mention with symbol '➦' and remove data (UID).\n * - Remove quoted text completely.\n * - Replace line breaks with spaces.\n * - Strip entities of heavy content.\n * - Move attachments to the end of the document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @returns converted Drafty object leaving the original intact.\n */\nDrafty.replyContent = function(original, limit) {\n const convMNnQQnBR = function(node) {\n if (node.type == 'QQ') {\n return null;\n } else if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n delete node.data;\n }\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.type;\n delete node.children;\n }\n return node;\n }\n\n let tree = draftyToTree(original);\n if (!tree) {\n return original;\n }\n\n // Strip leading mention.\n tree = treeTopDown(tree, convMNnQQnBR);\n // Move attachments to the end of the doc.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n // Shorten the doc.\n tree = shortenTree(tree, limit, '…');\n // Strip heavy elements except IM.data['val'] and VD.data['preview'] (have to keep them to generate previews later).\n const filter = node => {\n switch (node.type) {\n case 'IM':\n return ['val'];\n case 'VD':\n return ['preview'];\n }\n return null;\n };\n tree = lightEntity(tree, filter);\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n\n/**\n * Generate drafty preview:\n * - Shorten the document.\n * - Strip all heavy entity data leaving just inline styles and entity references.\n * - Replace line breaks with spaces.\n * - Replace content of QQ with a space.\n * - Replace forwarding mention with symbol '➦'.\n * move all attachments to the end of the document and make them visible.\n * The context may expose a function getFormatter(style). If it's available\n * it will call it to obtain a formatter for a subtree of styles under the style.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty|string} original - Drafty object to shorten.\n * @param {number} limit - length in characters to shorten to.\n * @param {boolean} forwarding - this a forwarding message preview.\n * @returns new shortened Drafty object leaving the original intact.\n */\nDrafty.preview = function(original, limit, forwarding) {\n let tree = draftyToTree(original);\n\n // Move attachments to the end.\n tree = attachmentsToEnd(tree, MAX_PREVIEW_ATTACHMENTS);\n\n // Convert leading mention to '➦' and replace QQ and BR with a space ' '.\n const convMNnQQnBR = function(node) {\n if (node.type == 'MN') {\n if ((!node.parent || !node.parent.type) && (node.text || '').startsWith('➦')) {\n node.text = '➦';\n delete node.children;\n }\n } else if (node.type == 'QQ') {\n node.text = ' ';\n delete node.children;\n } else if (node.type == 'BR') {\n node.text = ' ';\n delete node.children;\n delete node.type;\n }\n return node;\n }\n tree = treeTopDown(tree, convMNnQQnBR);\n\n tree = shortenTree(tree, limit, '…');\n if (forwarding) {\n // Keep some IM and VD data for preview.\n const filter = {\n IM: ['val'],\n VD: ['preview']\n };\n tree = lightEntity(tree, node => {\n return filter[node.type];\n });\n } else {\n tree = lightEntity(tree);\n }\n\n // Convert back to Drafty.\n return treeToDrafty({}, tree, []);\n}\n\n/**\n * Given Drafty document, convert it to plain text.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text.\n * @returns {string} plain-text representation of the drafty document.\n */\nDrafty.toPlainText = function(content) {\n return typeof content == 'string' ? content : content.txt;\n}\n\n/**\n * Check if the document has no markup and no entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for presence of markup.\n * @returns true is content is plain text, false otherwise.\n */\nDrafty.isPlainText = function(content) {\n return typeof content == 'string' || !(content.fmt || content.ent);\n}\n\n/**\n * Convert document to plain text with markdown. All elements which cannot\n * be represented in markdown are stripped.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to convert to plain text with markdown.\n */\nDrafty.toMarkdown = function(content) {\n let tree = draftyToTree(content);\n const mdFormatter = function(type, _, values) {\n const def = FORMAT_TAGS[type];\n let result = (values ? values.join('') : '');\n if (def) {\n if (def.isVoid) {\n result = def.md_tag || '';\n } else if (def.md_tag) {\n result = def.md_tag + result + def.md_tag;\n }\n }\n return result;\n };\n return treeBottomUp(tree, mdFormatter, 0);\n}\n\n/**\n * Checks if the object represets is a valid Drafty document.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - content to check for validity.\n * @returns true is content is valid, false otherwise.\n */\nDrafty.isValid = function(content) {\n if (!content) {\n return false;\n }\n\n const {\n txt,\n fmt,\n ent\n } = content;\n\n if (!txt && txt !== '' && !fmt && !ent) {\n return false;\n }\n\n const txt_type = typeof txt;\n if (txt_type != 'string' && txt_type != 'undefined' && txt !== null) {\n return false;\n }\n\n if (typeof fmt != 'undefined' && !Array.isArray(fmt) && fmt !== null) {\n return false;\n }\n\n if (typeof ent != 'undefined' && !Array.isArray(ent) && ent !== null) {\n return false;\n }\n return true;\n}\n\n/**\n * Check if the drafty document has attachments: style EX and outside of normal rendering flow,\n * i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for attachments.\n * @returns true if there are attachments.\n */\nDrafty.hasAttachments = function(content) {\n if (!Array.isArray(content.fmt)) {\n return false;\n }\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n return ent && ent.tp == 'EX' && ent.data;\n }\n }\n return false;\n}\n\n/**\n * Callback for enumerating entities in a Drafty document.\n * Called once for each entity.\n * @memberof Drafty\n * @static\n *\n * @callback EntityCallback\n * @param {Object} data entity data.\n * @param {string} entity type.\n * @param {number} index entity's index in `content.ent`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate attachments: style EX and outside of normal rendering flow, i.e. at = -1.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to process for attachments.\n * @param {EntityCallback} callback - callback to call for each attachment.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.attachments = function(content, callback, context) {\n if (!Array.isArray(content.fmt)) {\n return;\n }\n let count = 0;\n for (let i in content.fmt) {\n let fmt = content.fmt[i];\n if (fmt && fmt.at < 0) {\n const ent = content.ent[fmt.key | 0];\n if (ent && ent.tp == 'EX' && ent.data) {\n if (callback.call(context, ent.data, count++, 'EX')) {\n break;\n }\n }\n }\n };\n}\n\n/**\n * Check if the drafty document has entities.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document to check for entities.\n * @returns true if there are entities.\n */\nDrafty.hasEntities = function(content) {\n return content.ent && content.ent.length > 0;\n}\n\n/**\n * Enumerate entities. Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @param {EntityCallback} callback - callback to call for each entity.\n * @param {Object} context - value of \"this\" for callback.\n *\n */\nDrafty.entities = function(content, callback, context) {\n if (content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n if (content.ent[i]) {\n if (callback.call(context, content.ent[i].data, i, content.ent[i].tp)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Callback for enumerating styles (inline formats) in a Drafty document.\n * Called once for each style.\n * @memberof Drafty\n * @static\n *\n * @callback StyleCallback\n * @param {string} tp - format type.\n * @param {number} at - starting position of the format in text.\n * @param {number} len - extent of the format in characters.\n * @param {number} key - index of the entity if format is a reference.\n * @param {number} index - style's index in `content.fmt`.\n *\n * @return 'true-ish' to stop processing, 'false-ish' otherwise.\n */\n\n/**\n * Enumerate styles (inline formats). Enumeration stops if callback returns 'true'.\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with styles (formats) to enumerate.\n * @param {StyleCallback} callback - callback to call for each format.\n * @param {Object} context - value of \"this\" for callback.\n */\nDrafty.styles = function(content, callback, context) {\n if (content.fmt && content.fmt.length > 0) {\n for (let i in content.fmt) {\n const fmt = content.fmt[i];\n if (fmt) {\n if (callback.call(context, fmt.tp, fmt.at, fmt.len, fmt.key, i)) {\n break;\n }\n }\n }\n }\n}\n\n/**\n * Remove unrecognized fields from entity data\n * @memberof Drafty\n * @static\n *\n * @param {Drafty} content - document with entities to enumerate.\n * @returns content.\n */\nDrafty.sanitizeEntities = function(content) {\n if (content && content.ent && content.ent.length > 0) {\n for (let i in content.ent) {\n const ent = content.ent[i];\n if (ent && ent.data) {\n const data = copyEntData(ent.data);\n if (data) {\n content.ent[i].data = data;\n } else {\n delete content.ent[i].data;\n }\n }\n }\n }\n return content;\n}\n\n/**\n * Given the entity, get URL which can be used for downloading\n * entity data.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the URl from.\n * @returns {string} URL to download entity data or null.\n */\nDrafty.getDownloadUrl = function(entData) {\n let url = null;\n if (entData.mime != JSON_MIME_TYPE && entData.val) {\n url = base64toObjectUrl(entData.val, entData.mime, Drafty.logger);\n } else if (typeof entData.ref == 'string') {\n url = entData.ref;\n }\n return url;\n}\n\n/**\n * Check if the entity data is not ready for sending, such as being uploaded to the server.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n * @returns {boolean} true if upload is in progress, false otherwise.\n */\nDrafty.isProcessing = function(entData) {\n return !!entData._processing;\n}\n\n/**\n * Given the entity, get URL which can be used for previewing\n * the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entity.data to get the URl from.\n *\n * @returns {string} url for previewing or null if no such url is available.\n */\nDrafty.getPreviewUrl = function(entData) {\n return entData.val ? base64toObjectUrl(entData.val, entData.mime, Drafty.logger) : null;\n}\n\n/**\n * Get approximate size of the entity.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the size for.\n * @returns {number} size of entity data in bytes.\n */\nDrafty.getEntitySize = function(entData) {\n // Either size hint or length of value. The value is base64 encoded,\n // the actual object size is smaller than the encoded length.\n return entData.size ? entData.size : entData.val ? (entData.val.length * 0.75) | 0 : 0;\n}\n\n/**\n * Get entity mime type.\n * @memberof Drafty\n * @static\n *\n * @param {Object} entData - entity.data to get the type for.\n * @returns {string} mime type of entity.\n */\nDrafty.getEntityMimeType = function(entData) {\n return entData.mime || 'text/plain';\n}\n\n/**\n * Get HTML tag for a given two-letter style name.\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style, like ST or LN.\n *\n * @returns {string} HTML tag name if style is found, {code: undefined} if style is falsish or not found.\n */\nDrafty.tagName = function(style) {\n return FORMAT_TAGS[style] && FORMAT_TAGS[style].html_tag;\n}\n\n/**\n * For a given data bundle generate an object with HTML attributes,\n * for instance, given {url: \"http://www.example.com/\"} return\n * {href: \"http://www.example.com/\"}\n * @memberof Drafty\n * @static\n *\n * @param {string} style - two-letter style to generate attributes for.\n * @param {Object} data - data bundle to convert to attributes\n *\n * @returns {Object} object with HTML attributes.\n */\nDrafty.attrValue = function(style, data) {\n if (data && DECORATORS[style] && DECORATORS[style].props) {\n return DECORATORS[style].props(data);\n }\n\n return undefined;\n}\n\n/**\n * Drafty MIME type.\n * @memberof Drafty\n * @static\n *\n * @returns {string} content-Type \"text/x-drafty\".\n */\nDrafty.getContentType = function() {\n return DRAFTY_MIME_TYPE;\n}\n\n// =================\n// Utility methods.\n// =================\n\n// Take a string and defined earlier style spans, re-compose them into a tree where each leaf is\n// a same-style (including unstyled) string. I.e. 'hello *bold _italic_* and ~more~ world' ->\n// ('hello ', (b: 'bold ', (i: 'italic')), ' and ', (s: 'more'), ' world');\n//\n// This is needed in order to clear markup, i.e. 'hello *world*' -> 'hello world' and convert\n// ranges from markup-ed offsets to plain text offsets.\nfunction chunkify(line, start, end, spans) {\n const chunks = [];\n\n if (spans.length == 0) {\n return [];\n }\n\n for (let i in spans) {\n // Get the next chunk from the queue\n const span = spans[i];\n\n // Grab the initial unstyled chunk\n if (span.at > start) {\n chunks.push({\n txt: line.slice(start, span.at)\n });\n }\n\n // Grab the styled chunk. It may include subchunks.\n const chunk = {\n tp: span.tp\n };\n const chld = chunkify(line, span.at + 1, span.end, span.children);\n if (chld.length > 0) {\n chunk.children = chld;\n } else {\n chunk.txt = span.txt;\n }\n chunks.push(chunk);\n start = span.end + 1; // '+1' is to skip the formatting character\n }\n\n // Grab the remaining unstyled chunk, after the last span\n if (start < end) {\n chunks.push({\n txt: line.slice(start, end)\n });\n }\n\n return chunks;\n}\n\n// Detect starts and ends of formatting spans. Unformatted spans are\n// ignored at this stage.\nfunction spannify(original, re_start, re_end, type) {\n const result = [];\n let index = 0;\n let line = original.slice(0); // make a copy;\n\n while (line.length > 0) {\n // match[0]; // match, like '*abc*'\n // match[1]; // match captured in parenthesis, like 'abc'\n // match['index']; // offset where the match started.\n\n // Find the opening token.\n const start = re_start.exec(line);\n if (start == null) {\n break;\n }\n\n // Because javascript RegExp does not support lookbehind, the actual offset may not point\n // at the markup character. Find it in the matched string.\n let start_offset = start['index'] + start[0].lastIndexOf(start[1]);\n // Clip the processed part of the string.\n line = line.slice(start_offset + 1);\n // start_offset is an offset within the clipped string. Convert to original index.\n start_offset += index;\n // Index now point to the beginning of 'line' within the 'original' string.\n index = start_offset + 1;\n\n // Find the matching closing token.\n const end = re_end ? re_end.exec(line) : null;\n if (end == null) {\n break;\n }\n let end_offset = end['index'] + end[0].indexOf(end[1]);\n // Clip the processed part of the string.\n line = line.slice(end_offset + 1);\n // Update offsets\n end_offset += index;\n // Index now points to the beginning of 'line' within the 'original' string.\n index = end_offset + 1;\n\n result.push({\n txt: original.slice(start_offset + 1, end_offset),\n children: [],\n at: start_offset,\n end: end_offset,\n tp: type\n });\n }\n\n return result;\n}\n\n// Convert linear array or spans into a tree representation.\n// Keep standalone and nested spans, throw away partially overlapping spans.\nfunction toSpanTree(spans) {\n if (spans.length == 0) {\n return [];\n }\n\n const tree = [spans[0]];\n let last = spans[0];\n for (let i = 1; i < spans.length; i++) {\n // Keep spans which start after the end of the previous span or those which\n // are complete within the previous span.\n if (spans[i].at > last.end) {\n // Span is completely outside of the previous span.\n tree.push(spans[i]);\n last = spans[i];\n } else if (spans[i].end <= last.end) {\n // Span is fully inside of the previous span. Push to subnode.\n last.children.push(spans[i]);\n }\n // Span could partially overlap, ignoring it as invalid.\n }\n\n // Recursively rearrange the subnodes.\n for (let i in tree) {\n tree[i].children = toSpanTree(tree[i].children);\n }\n\n return tree;\n}\n\n// Convert drafty document to a tree.\nfunction draftyToTree(doc) {\n if (!doc) {\n return null;\n }\n\n doc = (typeof doc == 'string') ? {\n txt: doc\n } : doc;\n let {\n txt,\n fmt,\n ent\n } = doc;\n\n txt = txt || '';\n if (!Array.isArray(ent)) {\n ent = [];\n }\n\n if (!Array.isArray(fmt) || fmt.length == 0) {\n if (ent.length == 0) {\n return {\n text: txt\n };\n }\n\n // Handle special case when all values in fmt are 0 and fmt therefore is skipped.\n fmt = [{\n at: 0,\n len: 0,\n key: 0\n }];\n }\n\n // Sanitize spans.\n const spans = [];\n const attachments = [];\n fmt.forEach((span) => {\n if (!span || typeof span != 'object') {\n return;\n }\n\n if (!['undefined', 'number'].includes(typeof span.at)) {\n // Present, but non-numeric 'at'.\n return;\n }\n if (!['undefined', 'number'].includes(typeof span.len)) {\n // Present, but non-numeric 'len'.\n return;\n }\n let at = span.at | 0;\n let len = span.len | 0;\n if (len < 0) {\n // Invalid span length.\n return;\n }\n\n let key = span.key || 0;\n if (ent.length > 0 && (typeof key != 'number' || key < 0 || key >= ent.length)) {\n // Invalid key value.\n return;\n }\n\n if (at <= -1) {\n // Attachment. Store attachments separately.\n attachments.push({\n start: -1,\n end: 0,\n key: key\n });\n return;\n } else if (at + len > stringToGraphemes(txt).length) {\n // Span is out of bounds.\n return;\n }\n\n if (!span.tp) {\n if (ent.length > 0 && (typeof ent[key] == 'object')) {\n spans.push({\n start: at,\n end: at + len,\n key: key\n });\n }\n } else {\n spans.push({\n type: span.tp,\n start: at,\n end: at + len\n });\n }\n });\n\n // Sort spans first by start index (asc) then by length (desc), then by weight.\n spans.sort((a, b) => {\n let diff = a.start - b.start;\n if (diff != 0) {\n return diff;\n }\n diff = b.end - a.end;\n if (diff != 0) {\n return diff;\n }\n return FMT_WEIGHT.indexOf(b.type) - FMT_WEIGHT.indexOf(a.type);\n });\n\n // Move attachments to the end of the list.\n if (attachments.length > 0) {\n spans.push(...attachments);\n }\n\n spans.forEach((span) => {\n if (ent.length > 0 && !span.type && ent[span.key] && typeof ent[span.key] == 'object') {\n span.type = ent[span.key].tp;\n span.data = ent[span.key].data;\n }\n\n // Is type still undefined? Hide the invalid element!\n if (!span.type) {\n span.type = 'HD';\n }\n });\n\n const graphemes = stringToGraphemes(txt);\n let tree = spansToTree({}, graphemes, 0, graphemes.length, spans);\n\n // Flatten tree nodes.\n const flatten = function(node) {\n if (Array.isArray(node.children) && node.children.length == 1) {\n // Unwrap.\n const child = node.children[0];\n if (!node.type) {\n const parent = node.parent;\n node = child;\n node.parent = parent;\n } else if (!child.type && !child.children) {\n node.text = child.text;\n delete node.children;\n }\n }\n return node;\n }\n tree = treeTopDown(tree, flatten);\n\n return tree;\n}\n\n// Add tree node to a parent tree.\nfunction addNode(parent, n) {\n if (!n) {\n return parent;\n }\n\n if (!parent.children) {\n parent.children = [];\n }\n\n // If text is present, move it to a subnode.\n if (parent.text) {\n parent.children.push({\n text: parent.text,\n parent: parent\n });\n delete parent.text;\n }\n\n n.parent = parent;\n parent.children.push(n);\n\n return parent;\n}\n\n// Returns a tree of nodes.\nfunction spansToTree(parent, graphemes, start, end, spans) {\n if (!spans || spans.length == 0) {\n if (start < end) {\n addNode(parent, {\n text: graphemes.slice(start, end)\n .map(segment => segment.segment)\n .join('')\n });\n }\n return parent;\n }\n\n // Process subspans.\n for (let i = 0; i < spans.length; i++) {\n const span = spans[i];\n if (span.start < 0 && span.type == 'EX') {\n addNode(parent, {\n type: span.type,\n data: span.data,\n key: span.key,\n att: true\n });\n continue;\n }\n\n // Add un-styled range before the styled span starts.\n if (start < span.start) {\n addNode(parent, {\n text: graphemes.slice(start, span.start)\n .map(segment => segment.segment)\n .join('')\n });\n start = span.start;\n }\n\n // Get all spans which are within the current span.\n const subspans = [];\n while (i < spans.length - 1) {\n const inner = spans[i + 1];\n if (inner.start < 0) {\n // Attachments are in the end. Stop.\n break;\n } else if (inner.start < span.end) {\n if (inner.end <= span.end) {\n const tag = FORMAT_TAGS[inner.tp] || {};\n if (inner.start < inner.end || tag.isVoid) {\n // Valid subspan: completely within the current span and\n // either non-zero length or zero length is acceptable.\n subspans.push(inner);\n }\n }\n i++;\n // Overlapping subspans are ignored.\n } else {\n // Past the end of the current span. Stop.\n break;\n }\n }\n\n addNode(parent, spansToTree({\n type: span.type,\n data: span.data,\n key: span.key\n }, graphemes, start, span.end, subspans));\n start = span.end;\n }\n\n // Add the last unformatted range.\n if (start < end) {\n addNode(parent, {\n text: graphemes\n .slice(start, end)\n .map((segment) => segment.segment)\n .join('')\n });\n }\n\n return parent;\n}\n\n// Append a tree to a Drafty doc.\nfunction treeToDrafty(doc, tree, keymap) {\n if (!tree) {\n return doc;\n }\n\n doc.txt = doc.txt || '';\n\n // Checkpoint to measure length of the current tree node.\n const start = stringToGraphemes(doc.txt).length;\n\n if (tree.text) {\n doc.txt += tree.text;\n } else if (Array.isArray(tree.children)) {\n tree.children.forEach((c) => {\n treeToDrafty(doc, c, keymap);\n });\n }\n\n if (tree.type) {\n const len = stringToGraphemes(doc.txt).length - start;\n doc.fmt = doc.fmt || [];\n if (Object.keys(tree.data || {}).length > 0) {\n doc.ent = doc.ent || [];\n const newKey = (typeof keymap[tree.key] == 'undefined') ? doc.ent.length : keymap[tree.key];\n keymap[tree.key] = newKey;\n doc.ent[newKey] = {\n tp: tree.type,\n data: tree.data\n };\n if (tree.att) {\n // Attachment.\n doc.fmt.push({\n at: -1,\n len: 0,\n key: newKey\n });\n } else {\n doc.fmt.push({\n at: start,\n len: len,\n key: newKey\n });\n }\n } else {\n doc.fmt.push({\n tp: tree.type,\n at: start,\n len: len\n });\n }\n }\n return doc;\n}\n\n// Traverse the tree top down transforming the nodes: apply transformer to every tree node.\nfunction treeTopDown(src, transformer, context) {\n if (!src) {\n return null;\n }\n\n let dst = transformer.call(context, src);\n if (!dst || !dst.children) {\n return dst;\n }\n\n const children = [];\n for (let i in dst.children) {\n let n = dst.children[i];\n if (n) {\n n = treeTopDown(n, transformer, context);\n if (n) {\n children.push(n);\n }\n }\n }\n\n if (children.length == 0) {\n dst.children = null;\n } else {\n dst.children = children;\n }\n\n return dst;\n}\n\n// Traverse the tree bottom-up: apply formatter to every node.\n// The formatter must maintain its state through context.\nfunction treeBottomUp(src, formatter, index, stack, context) {\n if (!src) {\n return null;\n }\n\n if (stack && src.type) {\n stack.push(src.type);\n }\n\n let values = [];\n for (let i in src.children) {\n const n = treeBottomUp(src.children[i], formatter, i, stack, context);\n if (n) {\n values.push(n);\n }\n }\n if (values.length == 0) {\n if (src.text) {\n values = [src.text];\n } else {\n values = null;\n }\n }\n\n if (stack && src.type) {\n stack.pop();\n }\n\n return formatter.call(context, src.type, src.data, values, index, stack);\n}\n\n// Clip tree to the provided limit.\nfunction shortenTree(tree, limit, tail) {\n if (!tree) {\n return null;\n }\n\n if (tail) {\n limit -= tail.length;\n }\n\n const shortener = function(node) {\n if (limit <= -1) {\n // Limit -1 means the doc was already clipped.\n return null;\n }\n\n if (node.att) {\n // Attachments are unchanged.\n return node;\n }\n if (limit == 0) {\n node.text = tail;\n limit = -1;\n } else if (node.text) {\n const graphemes = stringToGraphemes(node.text);\n if (graphemes.length > limit) {\n node.text = graphemes\n .slice(0, limit)\n .map((segment) => segment.segment)\n .join('') + tail;\n limit = -1;\n } else {\n limit -= graphemes.length;\n }\n }\n return node;\n }\n\n return treeTopDown(tree, shortener);\n}\n\n// Strip heavy entities from a tree.\nfunction lightEntity(tree, allow) {\n const lightCopy = node => {\n const data = copyEntData(node.data, true, allow ? allow(node) : null);\n if (data) {\n node.data = data;\n } else {\n delete node.data;\n }\n return node;\n }\n return treeTopDown(tree, lightCopy);\n}\n\n// Remove spaces and breaks on the left.\nfunction lTrim(tree) {\n if (tree.type == 'BR') {\n tree = null;\n } else if (tree.text) {\n if (!tree.type) {\n tree.text = tree.text.trimStart();\n if (!tree.text) {\n tree = null;\n }\n }\n } else if (!tree.type && tree.children && tree.children.length > 0) {\n const c = lTrim(tree.children[0]);\n if (c) {\n tree.children[0] = c;\n } else {\n tree.children.shift();\n if (!tree.type && tree.children.length == 0) {\n tree = null;\n }\n }\n }\n return tree;\n}\n\n// Move attachments to the end. Attachments must be at the top level, no need to traverse the tree.\nfunction attachmentsToEnd(tree, limit) {\n if (!tree) {\n return null;\n }\n\n if (tree.att) {\n tree.text = ' ';\n delete tree.att;\n delete tree.children;\n } else if (tree.children) {\n const attachments = [];\n const children = [];\n for (let i in tree.children) {\n const c = tree.children[i];\n if (c.att) {\n if (attachments.length == limit) {\n // Too many attachments to preview;\n continue;\n }\n if (c.data['mime'] == JSON_MIME_TYPE) {\n // JSON attachments are not shown in preview.\n continue;\n }\n\n delete c.att;\n delete c.children;\n c.text = ' ';\n attachments.push(c);\n } else {\n children.push(c);\n }\n }\n tree.children = children.concat(attachments);\n }\n return tree;\n}\n\n// Get a list of entities from a text.\nfunction extractEntities(line) {\n let match;\n let extracted = [];\n ENTITY_TYPES.forEach((entity) => {\n while ((match = entity.re.exec(line)) !== null) {\n extracted.push({\n offset: match['index'],\n len: match[0].length,\n unique: match[0],\n data: entity.pack(match[0]),\n type: entity.name\n });\n }\n });\n\n if (extracted.length == 0) {\n return extracted;\n }\n\n // Remove entities detected inside other entities, like #hashtag in a URL.\n extracted.sort((a, b) => {\n return a.offset - b.offset;\n });\n\n let idx = -1;\n extracted = extracted.filter((el) => {\n const result = (el.offset > idx);\n idx = el.offset + el.len;\n return result;\n });\n\n return extracted;\n}\n\n// Convert the chunks into format suitable for serialization.\nfunction draftify(chunks, startAt) {\n let plain = '';\n let ranges = [];\n for (let i in chunks) {\n const chunk = chunks[i];\n if (!chunk.txt) {\n const drafty = draftify(chunk.children, plain.length + startAt);\n chunk.txt = drafty.txt;\n ranges = ranges.concat(drafty.fmt);\n }\n\n if (chunk.tp) {\n ranges.push({\n at: plain.length + startAt,\n len: chunk.txt.length,\n tp: chunk.tp\n });\n }\n\n plain += chunk.txt;\n }\n return {\n txt: plain,\n fmt: ranges\n };\n}\n\n// Create a copy of entity data with (light=false) or without (light=true) the large payload.\n// The array 'allow' contains a list of fields exempt from stripping.\nfunction copyEntData(data, light, allow) {\n if (data && Object.entries(data).length > 0) {\n allow = allow || [];\n const dc = {};\n ALLOWED_ENT_FIELDS.forEach(key => {\n if (data[key]) {\n if (light && !allow.includes(key) &&\n (typeof data[key] == 'string' || Array.isArray(data[key])) &&\n data[key].length > MAX_PREVIEW_DATA_SIZE) {\n return;\n }\n if (typeof data[key] == 'object') {\n return;\n }\n dc[key] = data[key];\n }\n });\n\n if (Object.entries(dc).length != 0) {\n return dc;\n }\n }\n return null;\n}\n\n// Returns true if object is empty, if undefined returns true\nfunction isEmptyObject(obj) {\n return Object.keys(obj ?? {}).length == 0;\n};\n\n\n// Returns an array (of length equal to the length of the original string) such that each index\n// denotes the position of char in string in a grapheme array (created from that string)\n// Eg: string: \"Hi👋🏼Hi\" -> [0,1,2,2,2,2,3,4]\nfunction graphemeIndices(graphemes) {\n const result = [];\n let graphemeIndex = 0;\n let charIndex = 0;\n\n // Iterate over the grapheme clusters.\n for (const {\n segment\n }\n of graphemes) {\n // Map the character indices to the grapheme index.\n for (let i = 0; i < segment.length; i++) {\n result[charIndex + i] = graphemeIndex;\n }\n\n // Increment the character index by the length of the grapheme cluster.\n charIndex += segment.length;\n\n // Increment the grapheme index.\n graphemeIndex++;\n }\n\n return result;\n}\n\n// Convert fmt.at and fmt.len from character-expressed index and length to grapheme-expressed\n// index and length.\nfunction toGraphemeValues(fmt, segments, txt) {\n segments = segments ?? segmenter.segment(txt);\n\n const indices = graphemeIndices(segments);\n\n const correctAt = indices[fmt.at];\n const correctLen = fmt.at + fmt.len <= txt.length ?\n indices[fmt.at + fmt.len - 1] - correctAt : fmt.len;\n\n return {\n at: correctAt,\n len: correctLen + 1\n };\n}\n\n// Convert string to graphme cluster array.\nfunction stringToGraphemes(str) {\n return Array.from(segmenter.segment(str));\n}\n\nif (typeof module != 'undefined') {\n module.exports = Drafty;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * @file Access control model.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\n/**\n * Helper class for handling access mode.\n *\n * @class AccessMode\n * @memberof Tinode\n *\n * @param {AccessMode|Object=} acs - AccessMode to copy or access mode object received from the server.\n */\nexport default class AccessMode {\n constructor(acs) {\n if (acs) {\n this.given = typeof acs.given == 'number' ? acs.given : AccessMode.decode(acs.given);\n this.want = typeof acs.want == 'number' ? acs.want : AccessMode.decode(acs.want);\n this.mode = acs.mode ? (typeof acs.mode == 'number' ? acs.mode : AccessMode.decode(acs.mode)) :\n (this.given & this.want);\n }\n }\n\n static #checkFlag(val, side, flag) {\n side = side || 'mode';\n if (['given', 'want', 'mode'].includes(side)) {\n return ((val[side] & flag) != 0);\n }\n throw new Error(`Invalid AccessMode component '${side}'`);\n }\n /**\n * Parse string into an access mode value.\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {string | Number} mode - either a String representation of the access mode to parse or a set of bits to assign.\n * @returns {number} - Access mode as a numeric value.\n */\n static decode(str) {\n if (!str) {\n return null;\n } else if (typeof str == 'number') {\n return str & AccessMode._BITMASK;\n } else if (str === 'N' || str === 'n') {\n return AccessMode._NONE;\n }\n\n const bitmask = {\n 'J': AccessMode._JOIN,\n 'R': AccessMode._READ,\n 'W': AccessMode._WRITE,\n 'P': AccessMode._PRES,\n 'A': AccessMode._APPROVE,\n 'S': AccessMode._SHARE,\n 'D': AccessMode._DELETE,\n 'O': AccessMode._OWNER\n };\n\n let m0 = AccessMode._NONE;\n\n for (let i = 0; i < str.length; i++) {\n const bit = bitmask[str.charAt(i).toUpperCase()];\n if (!bit) {\n // Unrecognized bit, skip.\n continue;\n }\n m0 |= bit;\n }\n return m0;\n }\n /**\n * Convert numeric representation of the access mode into a string.\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to convert to a string.\n * @returns {string} - Access mode as a string.\n */\n static encode(val) {\n if (val === null || val === AccessMode._INVALID) {\n return null;\n } else if (val === AccessMode._NONE) {\n return 'N';\n }\n\n const bitmask = ['J', 'R', 'W', 'P', 'A', 'S', 'D', 'O'];\n let res = '';\n for (let i = 0; i < bitmask.length; i++) {\n if ((val & (1 << i)) != 0) {\n res = res + bitmask[i];\n }\n }\n return res;\n }\n /**\n * Update numeric representation of access mode with the new value. The value\n * is one of the following:\n * - a string starting with '+' or '-' then the bits to add or remove, e.g. '+R-W' or '-PS'.\n * - a new value of access mode\n *\n * @memberof Tinode.AccessMode\n * @static\n *\n * @param {number} val - access mode value to update.\n * @param {string} upd - update to apply to val.\n * @returns {number} - updated access mode.\n */\n static update(val, upd) {\n if (!upd || typeof upd != 'string') {\n return val;\n }\n\n let action = upd.charAt(0);\n if (action == '+' || action == '-') {\n let val0 = val;\n // Split delta-string like '+ABC-DEF+Z' into an array of parts including + and -.\n const parts = upd.split(/([-+])/);\n // Starting iteration from 1 because String.split() creates an array with the first empty element.\n // Iterating by 2 because we parse pairs +/- then data.\n for (let i = 1; i < parts.length - 1; i += 2) {\n action = parts[i];\n const m0 = AccessMode.decode(parts[i + 1]);\n if (m0 == AccessMode._INVALID) {\n return val;\n }\n if (m0 == null) {\n continue;\n }\n if (action === '+') {\n val0 |= m0;\n } else if (action === '-') {\n val0 &= ~m0;\n }\n }\n val = val0;\n } else {\n // The string is an explicit new value 'ABC' rather than delta.\n const val0 = AccessMode.decode(upd);\n if (val0 != AccessMode._INVALID) {\n val = val0;\n }\n }\n\n return val;\n }\n /**\n * Bits present in a1 but missing in a2.\n *\n * @static\n * @memberof Tinode\n *\n * @param {number | string} a1 - access mode to subtract from.\n * @param {number | string} a2 - access mode to subtract.\n * @returns {number} access mode with bits present in a1 but missing in a2.\n */\n static diff(a1, a2) {\n a1 = AccessMode.decode(a1);\n a2 = AccessMode.decode(a2);\n\n if (a1 == AccessMode._INVALID || a2 == AccessMode._INVALID) {\n return AccessMode._INVALID;\n }\n return a1 & ~a2;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Custom formatter\n */\n toString() {\n return '{\"mode\": \"' + AccessMode.encode(this.mode) +\n '\", \"given\": \"' + AccessMode.encode(this.given) +\n '\", \"want\": \"' + AccessMode.encode(this.want) + '\"}';\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Converts numeric values to strings.\n */\n jsonHelper() {\n return {\n mode: AccessMode.encode(this.mode),\n given: AccessMode.encode(this.given),\n want: AccessMode.encode(this.want)\n };\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign value to 'mode'.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} m - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setMode(m) {\n this.mode = AccessMode.decode(m);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update mode value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateMode(u) {\n this.mode = AccessMode.update(this.mode, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get mode value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - mode value.\n */\n getMode() {\n return AccessMode.encode(this.mode);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign given value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} g - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setGiven(g) {\n this.given = AccessMode.decode(g);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'given' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateGiven(u) {\n this.given = AccessMode.update(this.given, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'given' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - given value.\n */\n getGiven() {\n return AccessMode.encode(this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Assign 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string | Number} w - either a string representation of the access mode or a set of bits.\n * @returns {AccessMode} - this AccessMode.\n */\n setWant(w) {\n this.want = AccessMode.decode(w);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want' value.\n * @memberof Tinode.AccessMode\n *\n * @param {string} u - string representation of the changes to apply to access mode.\n * @returns {AccessMode} - this AccessMode.\n */\n updateWant(u) {\n this.want = AccessMode.update(this.want, u);\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get 'want' value as a string.\n * @memberof Tinode.AccessMode\n *\n * @returns {string} - want value.\n */\n getWant() {\n return AccessMode.encode(this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'want' but missing in 'given'.\n * Inverse of {@link Tinode.AccessMode#getExcessive}\n *\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in want but missing in given.\n */\n getMissing() {\n return AccessMode.encode(this.want & ~this.given);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Get permissions present in 'given' but missing in 'want'.\n * Inverse of {@link Tinode.AccessMode#getMissing}\n * @memberof Tinode.AccessMode\n *\n * @returns {string} permissions present in given but missing in want.\n */\n getExcessive() {\n return AccessMode.encode(this.given & ~this.want);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Update 'want', 'give', and 'mode' values.\n * @memberof Tinode.AccessMode\n *\n * @param {AccessMode} val - new access mode value.\n * @returns {AccessMode} - this AccessMode.\n */\n updateAll(val) {\n if (val) {\n this.updateGiven(val.given);\n this.updateWant(val.want);\n this.mode = this.given & this.want;\n }\n return this;\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Owner (O) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isOwner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._OWNER);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isPresencer(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._PRES);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Presence (P) flag is NOT set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isMuted(side) {\n return !this.isPresencer(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Join (J) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isJoiner(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._JOIN);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Reader (R) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isReader(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._READ);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Writer (W) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isWriter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._WRITE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Approver (A) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isApprover(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._APPROVE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O) or Approver (A) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isAdmin(side) {\n return this.isOwner(side) || this.isApprover(side);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if either one of Owner (O), Approver (A), or Sharer (S) flags is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isSharer(side) {\n return this.isAdmin(side) || AccessMode.#checkFlag(this, side, AccessMode._SHARE);\n }\n /**\n * AccessMode is a class representing topic access mode.\n *\n * @memberof Tinode\n * @class AccessMode\n */\n /**\n * Check if Deleter (D) flag is set.\n * @memberof Tinode.AccessMode\n * @param {string=} side - which permission to check: given, want, mode; default: mode.\n * @returns {boolean} - true if flag is set.\n */\n isDeleter(side) {\n return AccessMode.#checkFlag(this, side, AccessMode._DELETE);\n }\n}\n\nAccessMode._NONE = 0x00;\nAccessMode._JOIN = 0x01;\nAccessMode._READ = 0x02;\nAccessMode._WRITE = 0x04;\nAccessMode._PRES = 0x08;\nAccessMode._APPROVE = 0x10;\nAccessMode._SHARE = 0x20;\nAccessMode._DELETE = 0x40;\nAccessMode._OWNER = 0x80;\n\nAccessMode._BITMASK = AccessMode._JOIN | AccessMode._READ | AccessMode._WRITE | AccessMode._PRES |\n AccessMode._APPROVE | AccessMode._SHARE | AccessMode._DELETE | AccessMode._OWNER;\nAccessMode._INVALID = 0x100000;\n","export const PACKAGE_VERSION = \"0.24.0-rc1\";\n","/**\n * @file Global constants and configuration parameters.\n *\n * @copyright 2015-2025 Tinode LLC\n */\n'use strict';\n\nimport {\n PACKAGE_VERSION\n} from '../version.js';\n\n// Global constants\nexport const PROTOCOL_VERSION = '0'; // Major component of the version, e.g. '0' in '0.17.1'.\nexport const VERSION = PACKAGE_VERSION || '0.24';\nexport const LIBRARY = 'tinodejs/' + VERSION;\n\n// Topic name prefixes.\nexport const TOPIC_NEW = 'new';\nexport const TOPIC_NEW_CHAN = 'nch';\nexport const TOPIC_ME = 'me';\nexport const TOPIC_FND = 'fnd';\nexport const TOPIC_SYS = 'sys';\nexport const TOPIC_SLF = 'slf';\nexport const TOPIC_CHAN = 'chn';\nexport const TOPIC_GRP = 'grp';\nexport const TOPIC_P2P = 'p2p';\nexport const USER_NEW = 'new';\n\n// Starting value of a locally-generated seqId used for pending messages.\nexport const LOCAL_SEQID = 0xFFFFFFF;\n\n// Status codes.\nexport const MESSAGE_STATUS_NONE = 0; // Status not assigned.\nexport const MESSAGE_STATUS_QUEUED = 10; // Local ID assigned, in progress to be sent.\nexport const MESSAGE_STATUS_SENDING = 20; // Transmission started.\nexport const MESSAGE_STATUS_FAILED = 30; // At least one attempt was made to send the message.\nexport const MESSAGE_STATUS_FATAL = 40; // Message sending failed and it should not be retried.\nexport const MESSAGE_STATUS_SENT = 50; // Delivered to the server.\nexport const MESSAGE_STATUS_RECEIVED = 60; // Received by the client.\nexport const MESSAGE_STATUS_READ = 70; // Read by the user.\nexport const MESSAGE_STATUS_TO_ME = 80; // The message is received from another user.\n\n// Reject unresolved futures after this many milliseconds.\nexport const EXPIRE_PROMISES_TIMEOUT = 5_000;\n// Periodicity of garbage collection of unresolved futures.\nexport const EXPIRE_PROMISES_PERIOD = 1_000;\n\n// Delay before acknowledging that a message was recived.\nexport const RECV_TIMEOUT = 100;\n\n// Default number of messages to pull into memory from persistent cache.\nexport const DEFAULT_MESSAGES_PAGE = 24;\n\n// Unicode DEL character indicating data was deleted.\nexport const DEL_CHAR = '\\u2421';\n\n// Maximum number of pinnned messages;\nexport const MAX_PINNED_COUNT = 5;\n\n// Tag prefixes for alias, email, phone.\nexport const TAG_ALIAS = 'alias:';\nexport const TAG_EMAIL = 'email:';\nexport const TAG_PHONE = 'tel:';\n","/**\n * @file Throwable error with numeric error code.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nexport default class CommError extends Error {\n constructor(message, code) {\n super(`${message} (${code})`);\n this.name = 'CommError';\n this.code = code;\n }\n}\n","/**\n * @file Utilities used in multiple places.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport AccessMode from './access-mode.js';\nimport {\n DEL_CHAR,\n LOCAL_SEQID\n} from './config.js';\n\n// Attempt to convert date and AccessMode strings to objects.\nexport function jsonParseHelper(key, val) {\n // Try to convert string timestamps with optional milliseconds to Date,\n // e.g. 2015-09-02T01:45:43[.123]Z\n if (typeof val == 'string' && val.length >= 20 && val.length <= 24 && ['ts', 'touched', 'updated', 'created', 'when', 'deleted', 'expires'].includes(key)) {\n const date = new Date(val);\n if (!isNaN(date)) {\n return date;\n }\n } else if (key === 'acs' && typeof val === 'object') {\n return new AccessMode(val);\n }\n return val;\n}\n\n// Checks if URL is a relative url, i.e. has no 'scheme://', including the case of missing scheme '//'.\n// The scheme is expected to be RFC-compliant, e.g. [a-z][a-z0-9+.-]*\n// example.html - ok\n// https:example.com - not ok.\n// http:/example.com - not ok.\n// ' ↲ https://example.com' - not ok. (↲ means carriage return)\nexport function isUrlRelative(url) {\n return url && !/^\\s*([a-z][a-z0-9+.-]*:|\\/\\/)/im.test(url);\n}\n\nfunction isValidDate(d) {\n return (d instanceof Date) && !isNaN(d) && (d.getTime() != 0);\n}\n\n// RFC3339 formater of Date\nexport function rfc3339DateString(d) {\n if (!isValidDate(d)) {\n return undefined;\n }\n\n const pad = function(val, sp) {\n sp = sp || 2;\n return '0'.repeat(sp - ('' + val).length) + val;\n };\n\n const millis = d.getUTCMilliseconds();\n return d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +\n 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +\n (millis ? '.' + pad(millis, 3) : '') + 'Z';\n}\n\n// Recursively merge src's own properties to dst.\n// Ignore properties where ignore[property] is true.\n// Array and Date objects are shallow-copied.\nexport function mergeObj(dst, src, ignore) {\n if (typeof src != 'object') {\n if (src === undefined) {\n return dst;\n }\n if (src === DEL_CHAR) {\n return undefined;\n }\n return src;\n }\n // JS is crazy: typeof null is 'object'.\n if (src === null) {\n return src;\n }\n\n // Handle Date\n if (src instanceof Date && !isNaN(src)) {\n return (!dst || !(dst instanceof Date) || isNaN(dst) || dst < src) ? src : dst;\n }\n\n // Access mode\n if (src instanceof AccessMode) {\n return new AccessMode(src);\n }\n\n // Handle Array\n if (src instanceof Array) {\n return src;\n }\n\n if (!dst || dst === DEL_CHAR) {\n dst = src.constructor();\n }\n\n for (let prop in src) {\n if (src.hasOwnProperty(prop) && (!ignore || !ignore[prop]) && (prop != '_noForwarding')) {\n try {\n dst[prop] = mergeObj(dst[prop], src[prop]);\n } catch (err) {\n // FIXME: probably need to log something here.\n }\n }\n }\n return dst;\n}\n\n// Update object stored in a cache. Returns updated value.\nexport function mergeToCache(cache, key, newval, ignore) {\n cache[key] = mergeObj(cache[key], newval, ignore);\n return cache[key];\n}\n\n// Strips all values from an object of they evaluate to false or if their name starts with '_'.\n// Used on all outgoing object before serialization to string.\nexport function simplify(obj) {\n Object.keys(obj).forEach((key) => {\n if (key[0] == '_') {\n // Strip fields like \"obj._key\".\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (Array.isArray(obj[key]) && obj[key].length == 0) {\n // Strip empty arrays.\n delete obj[key];\n } else if (!obj[key]) {\n // Strip fields which evaluate to false.\n delete obj[key];\n } else if (obj[key] instanceof Date) {\n // Strip invalid or zero date.\n if (!isValidDate(obj[key])) {\n delete obj[key];\n }\n } else if (typeof obj[key] == 'object') {\n simplify(obj[key]);\n // Strip empty objects.\n if (Object.getOwnPropertyNames(obj[key]).length == 0) {\n delete obj[key];\n }\n }\n });\n return obj;\n};\n\n\n// Trim whitespace, convert to lowercase, strip empty, short, and duplicate elements elements.\n// If the result is an empty array, add a single element \"\\u2421\" (Unicode Del character).\nexport function normalizeArray(arr) {\n let out = [];\n if (Array.isArray(arr)) {\n // Trim, throw away very short and empty tags.\n for (let i = 0, l = arr.length; i < l; i++) {\n let t = arr[i];\n if (t) {\n t = t.trim().toLowerCase();\n if (t.length > 1) {\n out.push(t);\n }\n }\n }\n out = out.sort().filter((item, pos, ary) => {\n return !pos || item != ary[pos - 1];\n });\n }\n if (out.length == 0) {\n // Add single tag with a Unicode Del character, otherwise an ampty array\n // is ambiguos. The Del tag will be stripped by the server.\n out.push(DEL_CHAR);\n }\n return out;\n}\n\n// Convert input to valid ranges of IDs.\nexport function normalizeRanges(ranges, maxSeq) {\n if (!Array.isArray(ranges)) {\n return [];\n }\n\n // Sort ranges in accending order by low, then descending by hi.\n ranges.sort((r1, r2) => {\n if (r1.low < r2.low) {\n return -1;\n }\n if (r1.low == r2.low) {\n return (r2.hi | 0) - r1.hi;\n }\n return 1;\n });\n\n // Remove pending messages from ranges possibly clipping some ranges.\n ranges = ranges.reduce((out, r) => {\n if (r.low < LOCAL_SEQID && r.low > 0) {\n if (!r.hi || r.hi < LOCAL_SEQID) {\n out.push(r);\n } else {\n // Clip hi to max allowed value.\n out.push({\n low: r.low,\n hi: maxSeq + 1\n });\n }\n }\n return out;\n }, []);\n\n // Merge overlapping ranges.\n ranges = ranges.reduce((out, r) => {\n if (out.length == 0) {\n out.push(r);\n } else {\n let prev = out[out.length - 1];\n if (r.low <= prev.hi) {\n prev.hi = Math.max(prev.hi, r.hi);\n } else {\n out.push(r);\n }\n }\n return out;\n }, []);\n\n return ranges;\n}\n\n// Convert array of IDs to array of ranges.\nexport function listToRanges(list) {\n // Sort the list in ascending order\n list.sort((a, b) => a - b);\n // Convert the array of IDs to ranges.\n return list.reduce((out, id) => {\n if (out.length == 0) {\n // First element.\n out.push({\n low: id\n });\n } else {\n let prev = out[out.length - 1];\n if ((!prev.hi && (id != prev.low + 1)) || (id > prev.hi)) {\n // New range.\n out.push({\n low: id\n });\n } else {\n // Expand existing range.\n prev.hi = prev.hi ? Math.max(prev.hi, id + 1) : id + 1;\n }\n }\n return out;\n }, []);\n}\n\n// Cuts 'clip' range out of the 'src' range.\n// Returns an array with 0, 1 or 2 elements.\nexport function clipOutRange(src, clip) {\n if (clip.hi <= src.low || clip.low >= src.hi) {\n // Clip is completely outside of src, no intersection.\n return [src];\n }\n\n\n if (clip.low <= src.low) {\n if (clip.hi >= src.hi) {\n // The source range is completely inside the clipping range.\n return [];\n }\n // Partial clipping at the top.\n return [{\n low: clip.hi,\n hi: src.hi\n }];\n }\n\n // Range on the lower end.\n const result = [{\n low: src.low,\n hi: clip.low\n }];\n if (clip.hi < src.hi) {\n // Maybe a range on the higher end, if clip is completely inside the source.\n result.push({\n low: clip.hi,\n hi: src.hi\n });\n }\n\n return result;\n}\n\n// Cuts 'src' range to be completely within 'clip' range.\n// Returns clipped range or null if 'src' is outside of 'clip'.\nexport function clipInRange(src, clip) {\n if (clip.hi <= src.low || clip.low >= src.hi) {\n // The src is completely outside of the clip, no intersection.\n return null;\n }\n\n if (src.low >= clip.low && src.hi <= clip.hi) {\n // Src is completely within the clip, return the entire src.\n return src;\n }\n\n // Partial overlap.\n return {\n low: Math.max(src.low, clip.low),\n hi: Math.min(src.hi, clip.hi)\n };\n\n return result;\n}\n","/**\n * @file Abstraction layer for websocket and long polling connections.\n *\n * @copyright 2015-2022 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n jsonParseHelper\n} from './utils.js';\n\nlet WebSocketProvider;\nlet XHRProvider;\n\n// Error code to return in case of a network problem.\nconst NETWORK_ERROR = 503;\nconst NETWORK_ERROR_TEXT = \"Connection failed\";\n\n// Error code to return when user disconnected from server.\nconst NETWORK_USER = 418;\nconst NETWORK_USER_TEXT = \"Disconnected by client\";\n\n// Settings for exponential backoff\nconst _BOFF_BASE = 2000; // 2000 milliseconds, minimum delay between reconnects\nconst _BOFF_MAX_ITER = 10; // Maximum delay between reconnects 2^10 * 2000 ~ 34 minutes\nconst _BOFF_JITTER = 0.3; // Add random delay\n\n// Helper function for creating an endpoint URL.\nfunction makeBaseUrl(host, protocol, version, apiKey) {\n let url = null;\n\n if (['http', 'https', 'ws', 'wss'].includes(protocol)) {\n url = `${protocol}://${host}`;\n if (url.charAt(url.length - 1) !== '/') {\n url += '/';\n }\n url += 'v' + version + '/channels';\n if (['http', 'https'].includes(protocol)) {\n // Long polling endpoint ends with \"lp\", i.e.\n // '/v0/channels/lp' vs just '/v0/channels' for ws\n url += '/lp';\n }\n url += '?apikey=' + apiKey;\n }\n return url;\n}\n\n/**\n * An abstraction for a websocket or a long polling connection.\n *\n * @class Connection\n * @memberof Tinode\n\n * @param {Object} config - configuration parameters.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - Network transport to use, either \"ws\"/\"wss\" for websocket or\n * lp for long polling.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} version_ - Major value of the protocol version, e.g. '0' in '0.17.1'.\n * @param {boolean} autoreconnect_ - If connection is lost, try to reconnect automatically.\n */\nexport default class Connection {\n // Logger, does nothing by default.\n static #log = _ => {};\n\n #boffTimer = null;\n #boffIteration = 0;\n #boffClosed = false; // Indicator if the socket was manually closed - don't autoreconnect if true.\n\n // Websocket.\n #socket = null;\n\n host;\n secure;\n apiKey;\n\n version;\n autoreconnect;\n\n initialized;\n\n // (config.host, config.apiKey, config.transport, config.secure), PROTOCOL_VERSION, true\n constructor(config, version_, autoreconnect_) {\n this.host = config.host;\n this.secure = config.secure;\n this.apiKey = config.apiKey;\n\n this.version = version_;\n this.autoreconnect = autoreconnect_;\n\n if (config.transport === 'lp') {\n // explicit request to use long polling\n this.#init_lp();\n this.initialized = 'lp';\n } else if (config.transport === 'ws') {\n // explicit request to use web socket\n // if websockets are not available, horrible things will happen\n this.#init_ws();\n this.initialized = 'ws';\n }\n\n if (!this.initialized) {\n // Invalid or undefined network transport.\n Connection.#log(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n throw new Error(\"Unknown or invalid network transport. Running under Node? Call 'Tinode.setNetworkProviders()'.\");\n }\n }\n\n /**\n * To use Connection in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n * @memberof Connection\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n }\n\n /**\n * Assign a non-default logger.\n * @static\n * @memberof Connection\n * @param {function} l variadic logging function.\n */\n static set logger(l) {\n Connection.#log = l;\n }\n\n /**\n * Initiate a new connection\n * @memberof Tinode.Connection#\n * @param {string} host_ Host name to connect to; if null the old host name will be used.\n * @param {boolean} force Force new connection even if one already exists.\n * @return {Promise} Promise resolved/rejected when the connection call completes, resolution is called without\n * parameters, rejection passes the {Error} as parameter.\n */\n connect(host_, force) {\n return Promise.reject(null);\n }\n\n /**\n * Try to restore a network connection, also reset backoff.\n * @memberof Tinode.Connection#\n *\n * @param {boolean} force - reconnect even if there is a live connection already.\n */\n reconnect(force) {}\n\n /**\n * Terminate the network connection\n * @memberof Tinode.Connection#\n */\n disconnect() {}\n\n /**\n * Send a string to the server.\n * @memberof Tinode.Connection#\n *\n * @param {string} msg - String to send.\n * @throws Throws an exception if the underlying connection is not live.\n */\n sendText(msg) {}\n\n /**\n * Check if connection is alive.\n * @memberof Tinode.Connection#\n * @returns {boolean} true if connection is live, false otherwise.\n */\n isConnected() {\n return false;\n }\n\n /**\n * Get the name of the current network transport.\n * @memberof Tinode.Connection#\n * @returns {string} name of the transport such as \"ws\" or \"lp\".\n */\n transport() {\n return this.initialized;\n }\n\n /**\n * Send network probe to check if connection is indeed live.\n * @memberof Tinode.Connection#\n */\n probe() {\n this.sendText('1');\n }\n\n /**\n * Reset autoreconnect counter to zero.\n * @memberof Tinode.Connection#\n */\n backoffReset() {\n this.#boffReset();\n }\n\n // Backoff implementation - reconnect after a timeout.\n #boffReconnect() {\n // Clear timer\n clearTimeout(this.#boffTimer);\n // Calculate when to fire the reconnect attempt\n const timeout = _BOFF_BASE * (Math.pow(2, this.#boffIteration) * (1.0 + _BOFF_JITTER * Math.random()));\n // Update iteration counter for future use\n this.#boffIteration = (this.#boffIteration >= _BOFF_MAX_ITER ? this.#boffIteration : this.#boffIteration + 1);\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(timeout);\n }\n\n this.#boffTimer = setTimeout(_ => {\n Connection.#log(`Reconnecting, iter=${this.#boffIteration}, timeout=${timeout}`);\n // Maybe the socket was closed while we waited for the timer?\n if (!this.#boffClosed) {\n const prom = this.connect();\n if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(0, prom);\n } else {\n // Suppress error if it's not used.\n prom.catch(_ => {\n /* do nothing */\n });\n }\n } else if (this.onAutoreconnectIteration) {\n this.onAutoreconnectIteration(-1);\n }\n }, timeout);\n }\n\n // Terminate auto-reconnect process.\n #boffStop() {\n clearTimeout(this.#boffTimer);\n this.#boffTimer = null;\n }\n\n // Reset auto-reconnect iteration counter.\n #boffReset() {\n this.#boffIteration = 0;\n }\n\n // Initialization for long polling.\n #init_lp() {\n const XDR_UNSENT = 0; // Client has been created. open() not called yet.\n const XDR_OPENED = 1; // open() has been called.\n const XDR_HEADERS_RECEIVED = 2; // send() has been called, and headers and status are available.\n const XDR_LOADING = 3; // Downloading; responseText holds partial data.\n const XDR_DONE = 4; // The operation is complete.\n\n // Fully composed endpoint URL, with API key & SID\n let _lpURL = null;\n\n let _poller = null;\n let _sender = null;\n\n let lp_sender = (url_) => {\n const sender = new XHRProvider();\n sender.onreadystatechange = (evt) => {\n if (sender.readyState == XDR_DONE && sender.status >= 400) {\n // Some sort of error response\n throw new CommError(\"LP sender failed\", sender.status);\n }\n };\n\n sender.open('POST', url_, true);\n return sender;\n }\n\n let lp_poller = (url_, resolve, reject) => {\n let poller = new XHRProvider();\n let promiseCompleted = false;\n\n poller.onreadystatechange = evt => {\n if (poller.readyState == XDR_DONE) {\n if (poller.status == 201) { // 201 == HTTP.Created, get SID\n let pkt = JSON.parse(poller.responseText, jsonParseHelper);\n _lpURL = url_ + '&sid=' + pkt.ctrl.params.sid;\n poller = lp_poller(_lpURL);\n poller.send(null);\n if (this.onOpen) {\n this.onOpen();\n }\n\n if (resolve) {\n promiseCompleted = true;\n resolve();\n }\n\n if (this.autoreconnect) {\n this.#boffStop();\n }\n } else if (poller.status > 0 && poller.status < 400) { // 0 = network error; 400 = HTTP.BadRequest\n if (this.onMessage) {\n this.onMessage(poller.responseText);\n }\n poller = lp_poller(_lpURL);\n poller.send(null);\n } else {\n // Don't throw an error here, gracefully handle server errors\n if (reject && !promiseCompleted) {\n promiseCompleted = true;\n reject(poller.responseText);\n }\n if (this.onMessage && poller.responseText) {\n this.onMessage(poller.responseText);\n }\n if (this.onDisconnect) {\n const code = poller.status || (this.#boffClosed ? NETWORK_USER : NETWORK_ERROR);\n const text = poller.responseText || (this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT);\n this.onDisconnect(new CommError(text, code), code);\n }\n\n // Polling has stopped. Indicate it by setting poller to null.\n poller = null;\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n }\n }\n };\n // Using POST to avoid caching response by service worker.\n poller.open('POST', url_, true);\n return poller;\n }\n\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (_poller) {\n if (!force) {\n return Promise.resolve();\n }\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'https' : 'http', this.version, this.apiKey);\n Connection.#log(\"LP connecting to:\", url);\n _poller = lp_poller(url, resolve, reject);\n _poller.send(null);\n }).catch(err => {\n Connection.#log(\"LP connection failed:\", err);\n });\n };\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (_sender) {\n _sender.onreadystatechange = undefined;\n _sender.abort();\n _sender = null;\n }\n if (_poller) {\n _poller.onreadystatechange = undefined;\n _poller.abort();\n _poller = null;\n }\n\n if (this.onDisconnect) {\n this.onDisconnect(new CommError(NETWORK_USER_TEXT, NETWORK_USER), NETWORK_USER);\n }\n // Ensure it's reconstructed\n _lpURL = null;\n };\n\n this.sendText = (msg) => {\n _sender = lp_sender(_lpURL);\n if (_sender && (_sender.readyState == XDR_OPENED)) {\n _sender.send(msg);\n } else {\n throw new Error(\"Long poller failed to connect\");\n }\n };\n\n this.isConnected = _ => {\n return (_poller && true);\n };\n }\n\n // Initialization for Websocket\n #init_ws() {\n this.connect = (host_, force) => {\n this.#boffClosed = false;\n\n if (this.#socket) {\n if (!force && this.#socket.readyState == this.#socket.OPEN) {\n // Issue a probe request to be sure the connection is live.\n // This is a non-blocking call.\n this.probe();\n return Promise.resolve();\n }\n this.#socket.close();\n this.#socket = null;\n }\n\n if (host_) {\n this.host = host_;\n }\n\n return new Promise((resolve, reject) => {\n const url = makeBaseUrl(this.host, this.secure ? 'wss' : 'ws', this.version, this.apiKey);\n\n Connection.#log(\"WS connecting to: \", url);\n\n // It throws when the server is not accessible but the exception cannot be caught:\n // https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation/31003057\n const conn = new WebSocketProvider(url);\n\n conn.onerror = err => {\n reject(err);\n };\n\n conn.onopen = _ => {\n if (this.autoreconnect) {\n this.#boffStop();\n }\n\n if (this.onOpen) {\n this.onOpen();\n }\n\n resolve();\n };\n\n conn.onclose = _ => {\n this.#socket = null;\n\n if (this.onDisconnect) {\n const code = this.#boffClosed ? NETWORK_USER : NETWORK_ERROR;\n this.onDisconnect(new CommError(this.#boffClosed ? NETWORK_USER_TEXT : NETWORK_ERROR_TEXT, code), code);\n }\n\n if (!this.#boffClosed && this.autoreconnect) {\n this.#boffReconnect();\n }\n };\n\n conn.onmessage = evt => {\n if (this.onMessage) {\n this.onMessage(evt.data);\n }\n };\n\n this.#socket = conn;\n });\n }\n\n this.reconnect = force => {\n this.#boffStop();\n this.connect(null, force);\n };\n\n this.disconnect = _ => {\n this.#boffClosed = true;\n this.#boffStop();\n\n if (!this.#socket) {\n return;\n }\n this.#socket.close();\n this.#socket = null;\n };\n\n this.sendText = msg => {\n if (this.#socket && (this.#socket.readyState == this.#socket.OPEN)) {\n this.#socket.send(msg);\n } else {\n throw new Error(\"Websocket is not connected\");\n }\n };\n\n this.isConnected = _ => {\n return (this.#socket && (this.#socket.readyState == this.#socket.OPEN));\n };\n }\n\n // Callbacks:\n\n /**\n * A callback to pass incoming messages to. See {@link Tinode.Connection#onMessage}.\n * @callback Tinode.Connection.OnMessage\n * @memberof Tinode.Connection\n * @param {string} message - Message to process.\n */\n onMessage = undefined;\n\n /**\n * A callback for reporting a dropped connection.\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onDisconnect = undefined;\n\n /**\n * A callback called when the connection is ready to be used for sending. For websockets it's socket open,\n * for long polling it's readyState=1 (OPENED)\n * @type {function}\n * @memberof Tinode.Connection#\n */\n onOpen = undefined;\n\n /**\n * A callback to notify of reconnection attempts. See {@link Tinode.Connection#onAutoreconnectIteration}.\n * @memberof Tinode.Connection\n * @callback AutoreconnectIterationType\n * @param {string} timeout - time till the next reconnect attempt in milliseconds. -1 means reconnect was skipped.\n * @param {Promise} promise resolved or rejected when the reconnect attemp completes.\n *\n */\n /**\n * A callback to inform when the next attampt to reconnect will happen and to receive connection promise.\n * @memberof Tinode.Connection#\n * @type {Tinode.Connection.AutoreconnectIterationType}\n */\n onAutoreconnectIteration = undefined;\n}\n\nConnection.NETWORK_ERROR = NETWORK_ERROR;\nConnection.NETWORK_ERROR_TEXT = NETWORK_ERROR_TEXT;\nConnection.NETWORK_USER = NETWORK_USER;\nConnection.NETWORK_USER_TEXT = NETWORK_USER_TEXT;\n","/**\n * @file Helper methods for dealing with IndexedDB cache of messages, users, and topics.\n *\n * @copyright 2015-2025 Tinode LLC.\n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nconst DB_VERSION = 3;\nconst DB_NAME = 'tinode-web';\n\nlet IDBProvider;\n\nexport default class DB {\n #onError = _ => {};\n #logger = _ => {};\n\n // Instance of IndexDB.\n db = null;\n // Indicator that the cache is disabled.\n disabled = true;\n\n constructor(onError, logger) {\n this.#onError = onError || this.#onError;\n this.#logger = logger || this.#logger;\n }\n\n #mapObjects(source, callback, context) {\n if (!this.db) {\n return disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction([source]);\n trx.onerror = event => {\n this.#logger('PCache', 'mapObjects', source, event.target.error);\n reject(event.target.error);\n };\n trx.objectStore(source).getAll().onsuccess = event => {\n if (callback) {\n event.target.result.forEach(topic => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n /**\n * Initialize persistent cache: open or create/upgrade if needed.\n * @returns {Promise} promise to be resolved/rejected when the DB is initialized.\n */\n initDatabase() {\n return new Promise((resolve, reject) => {\n // Open the database and initialize callbacks.\n const req = IDBProvider.open(DB_NAME, DB_VERSION);\n req.onsuccess = event => {\n this.db = event.target.result;\n this.disabled = false;\n resolve(this.db);\n };\n req.onerror = event => {\n this.#logger('PCache', \"failed to initialize\", event);\n reject(event.target.error);\n this.#onError(event.target.error);\n };\n req.onupgradeneeded = event => {\n this.db = event.target.result;\n\n this.db.onerror = event => {\n this.#logger('PCache', \"failed to create storage\", event);\n this.#onError(event.target.error);\n };\n\n // Individual object stores.\n // Object store (table) for topics. The primary key is topic name.\n this.db.createObjectStore('topic', {\n keyPath: 'name'\n });\n\n // Users object store. UID is the primary key.\n this.db.createObjectStore('user', {\n keyPath: 'uid'\n });\n\n // Subscriptions object store topic <-> user. Topic name + UID is the primary key.\n this.db.createObjectStore('subscription', {\n keyPath: ['topic', 'uid']\n });\n\n // Messages object store. The primary key is topic name + seq.\n this.db.createObjectStore('message', {\n keyPath: ['topic', 'seq']\n });\n\n // Records of deleted message ranges. The primary key is topic name + low seq.\n const dellog = this.db.createObjectStore('dellog', {\n keyPath: ['topic', 'low', 'hi']\n });\n dellog.createIndex('topic_clear', ['topic', 'clear'], {\n unique: false\n });\n };\n });\n }\n\n /**\n * Delete persistent cache.\n */\n deleteDatabase() {\n // Close connection, otherwise operations will fail with 'onblocked'.\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n return new Promise((resolve, reject) => {\n const req = IDBProvider.deleteDatabase(DB_NAME);\n req.onblocked = _ => {\n if (this.db) {\n this.db.close();\n }\n const err = new Error(\"blocked\");\n this.#logger('PCache', 'deleteDatabase', err);\n reject(err);\n };\n req.onsuccess = _ => {\n this.db = null;\n this.disabled = true;\n resolve(true);\n };\n req.onerror = event => {\n this.#logger('PCache', 'deleteDatabase', event.target.error);\n reject(event.target.error);\n };\n });\n }\n\n /**\n * Check if persistent cache is ready for use.\n * @memberOf DB\n * @returns {boolean} true if cache is ready, false otherwise.\n */\n isReady() {\n return !!this.db;\n }\n\n // Topics.\n\n /**\n * Save to cache or update topic in persistent cache.\n * @memberOf DB\n * @param {Topic} topic - topic to be added or updated.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updTopic(topic) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updTopic', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(topic.name);\n req.onsuccess = _ => {\n trx.objectStore('topic').put(DB.#serializeTopic(req.result, topic));\n trx.commit();\n };\n });\n }\n\n /**\n * Mark or unmark topic as deleted.\n * @memberOf DB\n * @param {string} name - name of the topic to mark or unmark.\n * @param {boolean} deleted - status\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n markTopicAsDeleted(name, deleted) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'markTopicAsDeleted', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('topic').get(name);\n req.onsuccess = event => {\n const topic = event.target.result;\n if (topic && topic._deleted != deleted) {\n topic._deleted = deleted;\n trx.objectStore('topic').put(topic);\n }\n trx.commit();\n };\n });\n }\n\n /**\n * Remove topic from persistent cache.\n * @memberOf DB\n * @param {string} name - name of the topic to remove from database.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remTopic(name) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['topic', 'subscription', 'message'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remTopic', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('topic').delete(IDBKeyRange.only(name));\n trx.objectStore('subscription').delete(IDBKeyRange.bound([name, '-'], [name, '~']));\n trx.objectStore('message').delete(IDBKeyRange.bound([name, 0], [name, Number.MAX_SAFE_INTEGER]));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored topic.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapTopics(callback, context) {\n return this.#mapObjects('topic', callback, context);\n }\n\n /**\n * Copy data from serialized object to topic.\n * @memberOf DB\n * @param {Topic} topic - target to deserialize to.\n * @param {Object} src - serialized data to copy from.\n */\n deserializeTopic(topic, src) {\n DB.#deserializeTopic(topic, src);\n }\n\n // Users.\n /**\n * Add or update user object in the persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to save or update.\n * @param {Object} pub - user's public information.\n * @returns {Promise} promise resolved/rejected on operation completion.\n */\n updUser(uid, pub) {\n if (arguments.length < 2 || pub === undefined) {\n // No point inupdating user with invalid data.\n return;\n }\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').put({\n uid: uid,\n public: pub\n });\n trx.commit();\n });\n }\n\n /**\n * Remove user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to remove from the cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').delete(IDBKeyRange.only(uid));\n trx.commit();\n });\n }\n\n /**\n * Execute a callback for each stored user.\n * @memberOf DB\n * @param {function} callback - function to call for each topic.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapUsers(callback, context) {\n return this.#mapObjects('user', callback, context);\n }\n\n /**\n * Read a single user from persistent cache.\n * @memberOf DB\n * @param {string} uid - ID of the user to fetch from cache.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n getUser(uid) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['user']);\n trx.oncomplete = event => {\n const user = event.target.result;\n resolve({\n user: user.uid,\n public: user.public\n });\n };\n trx.onerror = event => {\n this.#logger('PCache', 'getUser', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('user').get(uid);\n });\n }\n\n // Subscriptions.\n /**\n * Add or update subscription in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {string} uid - ID of the subscribed user.\n * @param {Object} sub - subscription to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updSubscription(topicName, uid, sub) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription'], 'readwrite');\n trx.oncomplete = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updSubscription', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').get([topicName, uid]).onsuccess = (event) => {\n trx.objectStore('subscription').put(DB.#serializeSubscription(event.target.result, topicName, uid, sub));\n trx.commit();\n };\n });\n }\n\n /**\n * Execute a callback for each cached subscription in a given topic.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the subscriptions.\n * @param {function} callback - function to call for each subscription.\n * @param {Object} context - the value or this inside the callback.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n mapSubscriptions(topicName, callback, context) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['subscription']);\n trx.onerror = (event) => {\n this.#logger('PCache', 'mapSubscriptions', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('subscription').getAll(IDBKeyRange.bound([topicName, '-'], [topicName, '~'])).onsuccess = (event) => {\n if (callback) {\n event.target.result.forEach((topic) => {\n callback.call(context, topic);\n });\n }\n resolve(event.target.result);\n };\n });\n }\n\n // Messages.\n\n /**\n * Save message to persistent cache.\n * @memberOf DB\n * @param {Object} msg - message to save.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n addMessage(msg) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'addMessage', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').add(DB.#serializeMessage(null, msg));\n trx.commit();\n });\n }\n\n /**\n * Update delivery status of a message stored in persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} seq - ID of the message to update\n * @param {number} status - new delivery status of the message.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n updMessageStatus(topicName, seq, status) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'updMessageStatus', event.target.error);\n reject(event.target.error);\n };\n const req = trx.objectStore('message').get(IDBKeyRange.only([topicName, seq]));\n req.onsuccess = event => {\n const src = req.result || event.target.result;\n if (!src || src._status == status) {\n trx.commit();\n return;\n }\n trx.objectStore('message').put(DB.#serializeMessage(src, {\n topic: topicName,\n seq: seq,\n _status: status\n }));\n trx.commit();\n };\n });\n }\n\n /**\n * Remove one or more messages from persistent cache.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} from - id of the message to remove or lower boundary when removing range (inclusive).\n * @param {number=} to - upper boundary (exclusive) when removing a range of messages.\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n remMessages(topicName, from, to) {\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve() :\n Promise.reject(new Error(\"not initialized\"));\n }\n return new Promise((resolve, reject) => {\n if (!from && !to) {\n from = 0;\n to = Number.MAX_SAFE_INTEGER;\n }\n const range = to > 0 ? IDBKeyRange.bound([topicName, from], [topicName, to], false, true) :\n IDBKeyRange.only([topicName, from]);\n const trx = this.db.transaction(['message'], 'readwrite');\n trx.onsuccess = event => {\n resolve(event.target.result);\n };\n trx.onerror = event => {\n this.#logger('PCache', 'remMessages', event.target.error);\n reject(event.target.error);\n };\n trx.objectStore('message').delete(range);\n trx.commit();\n });\n }\n\n /**\n * Retrieve messages from persistent store.\n * @memberOf DB\n * @param {string} topicName - name of the topic to retrieve messages from.\n * @param {function} callback to call for each retrieved message.\n * @param {GetDataType} query - parameters of the message range to retrieve.\n *\n * @return {Promise} promise resolved/rejected on operation completion.\n */\n readMessages(topicName, query, callback, context) {\n query = query || {};\n\n if (!this.isReady()) {\n return this.disabled ?\n Promise.resolve([]) :\n Promise.reject(new Error(\"not initialized\"));\n }\n\n const trx = this.db.transaction(['message']);\n let result = [];\n\n // Handle individual message ranges.\n if (Array.isArray(query.ranges)) {\n return new Promise((resolve, reject) => {\n trx.onerror = event => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n\n let count = 0;\n query.ranges.forEach(range => {\n const key = range.hi ? IDBKeyRange.bound([topicName, range.low], [topicName, range.hi], false, true) :\n IDBKeyRange.only([topicName, range.low]);\n trx.objectStore('message').getAll(key).onsuccess = event => {\n const msgs = event.target.result;\n if (msgs) {\n if (callback) {\n callback.call(context, msgs);\n }\n if (Array.isArray(msgs)) {\n result = result.concat(msgs);\n } else {\n result.push(msgs);\n }\n }\n count++;\n if (count == query.ranges.length) {\n resolve(result);\n }\n };\n });\n });\n }\n\n // Handle single range.\n return new Promise((resolve, reject) => {\n const since = query.since > 0 ? query.since : 0;\n const before = query.before > 0 ? query.before : Number.MAX_SAFE_INTEGER;\n const limit = query.limit | 0;\n\n trx.onerror = event => {\n this.#logger('PCache', 'readMessages', event.target.error);\n reject(event.target.error);\n };\n\n const range = IDBKeyRange.bound([topicName, since], [topicName, before], false, true);\n // Iterate in descending order.\n trx.objectStore('message').openCursor(range, 'prev')\n .onsuccess = event => {\n const cursor = event.target.result;\n if (cursor) {\n if (callback) {\n callback.call(context, cursor.value);\n }\n result.push(cursor.value);\n if (limit <= 0 || result.length < limit) {\n cursor.continue();\n } else {\n resolve(result);\n }\n } else {\n resolve(result);\n }\n };\n });\n }\n\n // Delete log\n\n /**\n * Add records of deleted messages.\n * @memberOf DB\n * @param {string} topicName - name of the topic which owns the message.\n * @param {number} delId - id of the deletion transaction.\n * @param {Array.require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IDBProvider = idbProvider;\n }\n}\n","/**\n * @file Utilities for uploading and downloading files.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport CommError from './comm-error.js';\nimport {\n isUrlRelative,\n jsonParseHelper\n} from './utils.js';\n\nlet XHRProvider;\n\nfunction addURLParam(relUrl, key, value) {\n const url = new URL(relUrl, window.location.origin);\n url.searchParams.append(key, value);\n return url.toString().substring(window.location.origin.length);\n}\n\n/**\n * @class LargeFileHelper - utilities for uploading and downloading files out of band.\n * Don't instantiate this class directly. Use {Tinode.getLargeFileHelper} instead.\n * @memberof Tinode\n *\n * @param {Tinode} tinode - the main Tinode object.\n * @param {string} version - protocol version, i.e. '0'.\n */\nexport default class LargeFileHelper {\n constructor(tinode, version) {\n this._tinode = tinode;\n this._version = version;\n\n this._apiKey = tinode._apiKey;\n this._authToken = tinode.getAuthToken();\n\n // Ongoing requests.\n this.xhr = [];\n }\n\n /**\n * Start uploading the file to an endpoint at baseUrl.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} baseUrl base URL of upload server.\n * @param {File|Blob} data data to upload.\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure) {\n let url = `/v${this._version}/file/u/`;\n if (baseUrl) {\n let base = baseUrl;\n if (base.endsWith('/')) {\n // Removing trailing slash.\n base = base.slice(0, -1);\n }\n if (base.startsWith('http://') || base.startsWith('https://')) {\n url = base + url;\n } else {\n throw new Error(`Invalid base URL '${baseUrl}'`);\n }\n }\n\n const instance = this;\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n xhr.open('POST', url, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n if (this._authToken) {\n xhr.setRequestHeader('X-Tinode-Auth', `Token ${this._authToken.token}`);\n }\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n xhr.upload.onprogress = e => {\n if (e.lengthComputable) {\n if (onProgress) {\n onProgress(e.loaded / e.total);\n }\n if (this.onProgress) {\n this.onProgress(e.loaded / e.total);\n }\n }\n };\n\n xhr.onload = function() {\n let pkt;\n try {\n pkt = JSON.parse(this.response, jsonParseHelper);\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.response);\n pkt = {\n ctrl: {\n code: this.status,\n text: this.statusText\n }\n };\n }\n\n if (this.status >= 200 && this.status < 300) {\n if (toResolve) {\n toResolve(pkt.ctrl.params.url);\n }\n if (onSuccess) {\n onSuccess(pkt.ctrl);\n }\n } else if (this.status >= 400) {\n if (toReject) {\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n }\n if (onFailure) {\n onFailure(pkt.ctrl);\n }\n } else {\n instance._tinode.logger(\"ERROR: Unexpected server response status\", this.status, this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(e || new Error(\"failed\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n xhr.onabort = function(e) {\n if (toReject) {\n toReject(new Error(\"upload cancelled by user\"));\n }\n if (onFailure) {\n onFailure(null);\n }\n };\n\n try {\n const form = new FormData();\n form.append('file', data);\n form.set('id', this._tinode.getNextUniqueId());\n if (avatarFor) {\n form.set('topic', avatarFor);\n }\n xhr.send(form);\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onFailure) {\n onFailure(null);\n }\n }\n\n return result;\n }\n /**\n * Start uploading the file to default endpoint.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {File|Blob} data to upload\n * @param {string} avatarFor topic name if the upload represents an avatar.\n * @param {Callback} onProgress callback. Takes one {float} parameter 0..1\n * @param {Callback} onSuccess callback. Called when the file is successfully uploaded.\n * @param {Callback} onFailure callback. Called in case of a failure.\n *\n * @returns {Promise} resolved/rejected when the upload is completed/failed.\n */\n upload(data, avatarFor, onProgress, onSuccess, onFailure) {\n const baseUrl = (this._tinode._secure ? 'https://' : 'http://') + this._tinode._host;\n return this.uploadWithBaseUrl(baseUrl, data, avatarFor, onProgress, onSuccess, onFailure);\n }\n /**\n * Download the file from a given URL using GET request. This method works with the Tinode server only.\n *\n * @memberof Tinode.LargeFileHelper#\n *\n * @param {string} relativeUrl - URL to download the file from. Must be relative url, i.e. must not contain the host.\n * @param {string=} filename - file name to use for the downloaded file.\n *\n * @returns {Promise} resolved/rejected when the download is completed/failed.\n */\n download(relativeUrl, filename, mimetype, onProgress, onError) {\n if (!isUrlRelative(relativeUrl)) {\n // As a security measure refuse to download from an absolute URL.\n if (onError) {\n onError(`The URL '${relativeUrl}' must be relative, not absolute`);\n }\n return;\n }\n if (!this._authToken) {\n if (onError) {\n onError(\"Must authenticate first\");\n }\n return;\n }\n const instance = this;\n\n const xhr = new XHRProvider();\n this.xhr.push(xhr);\n\n // Add '&asatt=1' to URL to request 'Content-Disposition: attachment' response header.\n relativeUrl = addURLParam(relativeUrl, 'asatt', '1');\n\n // Get data as blob (stored by the browser as a temporary file).\n xhr.open('GET', relativeUrl, true);\n xhr.setRequestHeader('X-Tinode-APIKey', this._apiKey);\n xhr.setRequestHeader('X-Tinode-Auth', 'Token ' + this._authToken.token);\n xhr.responseType = 'blob';\n\n xhr.onprogress = function(e) {\n if (onProgress) {\n // Passing e.loaded instead of e.loaded/e.total because e.total\n // is always 0 with gzip compression enabled by the server.\n onProgress(e.loaded);\n }\n };\n\n let toResolve = null;\n let toReject = null;\n\n const result = new Promise((resolve, reject) => {\n toResolve = resolve;\n toReject = reject;\n });\n\n // The blob needs to be saved as file. There is no known way to\n // save the blob as file other than to fake a click on an .\n xhr.onload = function() {\n if (this.status == 200) {\n const link = document.createElement('a');\n // URL.createObjectURL is not available in non-browser environment. This call will fail.\n link.href = window.URL.createObjectURL(new Blob([this.response], {\n type: mimetype\n }));\n link.style.display = 'none';\n link.setAttribute('download', filename);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(link.href);\n if (toResolve) {\n toResolve();\n }\n } else if (this.status >= 400 && toReject) {\n // The this.responseText is undefined, must use this.response which is a blob.\n // Need to convert this.response to JSON. The blob can only be accessed by the\n // FileReader.\n const reader = new FileReader();\n reader.onload = function() {\n try {\n const pkt = JSON.parse(this.result, jsonParseHelper);\n toReject(new CommError(pkt.ctrl.text, pkt.ctrl.code));\n } catch (err) {\n instance._tinode.logger(\"ERROR: Invalid server response in LargeFileHelper\", this.result);\n toReject(err);\n }\n };\n reader.readAsText(this.response);\n }\n };\n\n xhr.onerror = function(e) {\n if (toReject) {\n toReject(new Error(\"failed\"));\n }\n if (onError) {\n onError(e);\n }\n };\n\n xhr.onabort = function() {\n if (toReject) {\n toReject(null);\n }\n };\n\n try {\n xhr.send();\n } catch (err) {\n if (toReject) {\n toReject(err);\n }\n if (onError) {\n onError(err);\n }\n }\n\n return result;\n }\n /**\n * Try to cancel all ongoing uploads or downloads.\n * @memberof Tinode.LargeFileHelper#\n */\n cancel() {\n this.xhr.forEach(req => {\n if (req.readyState < 4) {\n req.abort();\n }\n });\n }\n /**\n * To use LargeFileHelper in a non browser context, supply XMLHttpRequest provider.\n * @static\n * @memberof LargeFileHelper\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProvider(xhrProvider) {\n XHRProvider = xhrProvider;\n }\n}\n","/**\n * @module tinode-sdk\n *\n * @copyright 2015-2025 Tinode LLC.\n * @summary Javascript bindings for Tinode.\n * @license Apache 2.0\n * @version 0.24\n *\n * See https://github.com/tinode/webapp for real-life usage.\n *\n * @example\n * \n * \n * \n *\n * \n * ...\n * \n * \n */\n'use strict';\n\n// NOTE TO DEVELOPERS:\n// Localizable strings should be double quoted \"строка на другом языке\",\n// non-localizable strings should be single quoted 'non-localized'.\n\nimport AccessMode from './access-mode.js';\nimport * as Const from './config.js';\nimport CommError from './comm-error.js';\nimport Connection from './connection.js';\nimport DBCache from './db.js';\nimport Drafty from './drafty.js';\nimport LargeFileHelper from './large-file.js';\nimport MetaGetBuilder from './meta-builder.js';\nimport Topic from './topic.js';\nimport TopicFnd from './fnd-topic.js';\nimport TopicMe from './me-topic.js';\n\nimport {\n isUrlRelative,\n jsonParseHelper,\n mergeObj,\n rfc3339DateString,\n simplify\n} from './utils.js';\n\n// Re-export AccessMode\nexport {\n AccessMode\n};\n\nlet WebSocketProvider;\nif (typeof WebSocket != 'undefined') {\n WebSocketProvider = WebSocket;\n}\n\nlet XHRProvider;\nif (typeof XMLHttpRequest != 'undefined') {\n XHRProvider = XMLHttpRequest;\n}\n\nlet IndexedDBProvider;\nif (typeof indexedDB != 'undefined') {\n IndexedDBProvider = indexedDB;\n}\n\n// Re-export Drafty.\nexport {\n Drafty\n}\n\ninitForNonBrowserApp();\n\n// Utility functions\n\n// Polyfill for non-browser context, e.g. NodeJs.\nfunction initForNonBrowserApp() {\n // Tinode requirement in native mode because react native doesn't provide Base64 method\n const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\n if (typeof btoa == 'undefined') {\n global.btoa = function(input = '') {\n let str = input;\n let output = '';\n\n for (let block = 0, charCode, i = 0, map = chars; str.charAt(i | 0) || (map = '=', i % 1); output += map.charAt(63 & block >> 8 - i % 1 * 8)) {\n\n charCode = str.charCodeAt(i += 3 / 4);\n\n if (charCode > 0xFF) {\n throw new Error(\"'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.\");\n }\n block = block << 8 | charCode;\n }\n\n return output;\n };\n }\n\n if (typeof atob == 'undefined') {\n global.atob = function(input = '') {\n let str = input.replace(/=+$/, '');\n let output = '';\n\n if (str.length % 4 == 1) {\n throw new Error(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (let bc = 0, bs = 0, buffer, i = 0; buffer = str.charAt(i++);\n\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n buffer = chars.indexOf(buffer);\n }\n\n return output;\n };\n }\n\n if (typeof window == 'undefined') {\n global.window = {\n WebSocket: WebSocketProvider,\n XMLHttpRequest: XHRProvider,\n indexedDB: IndexedDBProvider,\n URL: {\n createObjectURL: function() {\n throw new Error(\"Unable to use URL.createObjectURL in a non-browser application\");\n }\n }\n }\n }\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n DBCache.setDatabaseProvider(IndexedDBProvider);\n}\n\n// Detect find most useful network transport.\nfunction detectTransport() {\n if (typeof window == 'object') {\n if (window['WebSocket']) {\n return 'ws';\n } else if (window['XMLHttpRequest']) {\n // The browser or node has no websockets, using long polling.\n return 'lp';\n }\n }\n return null;\n}\n\n// btoa replacement. Stock btoa fails on on non-Latin1 strings.\nfunction b64EncodeUnicode(str) {\n // The encodeURIComponent percent-encodes UTF-8 string,\n // then the percent encoding is converted into raw bytes which\n // can be fed into btoa.\n return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,\n function toSolidBytes(match, p1) {\n return String.fromCharCode('0x' + p1);\n }));\n}\n\n// JSON stringify helper - pre-processor for JSON.stringify\nfunction jsonBuildHelper(key, val) {\n if (val instanceof Date) {\n // Convert javascript Date objects to rfc3339 strings\n val = rfc3339DateString(val);\n } else if (val instanceof AccessMode) {\n val = val.jsonHelper();\n } else if (val === undefined || val === null || val === false ||\n (Array.isArray(val) && val.length == 0) ||\n ((typeof val == 'object') && (Object.keys(val).length == 0))) {\n // strip out empty elements while serializing objects to JSON\n return undefined;\n }\n\n return val;\n};\n\n// Trims very long strings (encoded images) to make logged packets more readable.\nfunction jsonLoggerHelper(key, val) {\n if (typeof val == 'string' && val.length > 128) {\n return '<' + val.length + ', bytes: ' + val.substring(0, 12) + '...' + val.substring(val.length - 12) + '>';\n }\n return jsonBuildHelper(key, val);\n};\n\n// Parse browser user agent to extract browser name and version.\nfunction getBrowserInfo(ua, product) {\n ua = ua || '';\n let reactnative = '';\n // Check if this is a ReactNative app.\n if (/reactnative/i.test(product)) {\n reactnative = 'ReactNative; ';\n }\n let result;\n // Remove useless string.\n ua = ua.replace(' (KHTML, like Gecko)', '');\n // Test for WebKit-based browser.\n let m = ua.match(/(AppleWebKit\\/[.\\d]+)/i);\n if (m) {\n // List of common strings, from more useful to less useful.\n // All unknown strings get the highest (-1) priority.\n const priority = ['edg', 'chrome', 'safari', 'mobile', 'version'];\n let tmp = ua.substr(m.index + m[0].length).split(' ');\n let tokens = [];\n let version; // 1.0 in Version/1.0 or undefined;\n // Split string like 'Name/0.0.0' into ['Name', '0.0.0', 3] where the last element is the priority.\n for (let i = 0; i < tmp.length; i++) {\n let m2 = /([\\w.]+)[\\/]([\\.\\d]+)/.exec(tmp[i]);\n if (m2) {\n // Unknown values are highest priority (-1).\n tokens.push([m2[1], m2[2], priority.findIndex((e) => {\n return m2[1].toLowerCase().startsWith(e);\n })]);\n if (m2[1] == 'Version') {\n version = m2[2];\n }\n }\n }\n // Sort by priority: more interesting is earlier than less interesting.\n tokens.sort((a, b) => {\n return a[2] - b[2];\n });\n if (tokens.length > 0) {\n // Return the least common browser string and version.\n if (tokens[0][0].toLowerCase().startsWith('edg')) {\n tokens[0][0] = 'Edge';\n } else if (tokens[0][0] == 'OPR') {\n tokens[0][0] = 'Opera';\n } else if (tokens[0][0] == 'Safari' && version) {\n tokens[0][1] = version;\n }\n result = tokens[0][0] + '/' + tokens[0][1];\n } else {\n // Failed to ID the browser. Return the webkit version.\n result = m[1];\n }\n } else if (/firefox/i.test(ua)) {\n m = /Firefox\\/([.\\d]+)/g.exec(ua);\n if (m) {\n result = 'Firefox/' + m[1];\n } else {\n result = 'Firefox/?';\n }\n } else {\n // Neither AppleWebKit nor Firefox. Try the last resort.\n m = /([\\w.]+)\\/([.\\d]+)/.exec(ua);\n if (m) {\n result = m[1] + '/' + m[2];\n } else {\n m = ua.split(' ');\n result = m[0];\n }\n }\n\n // Shorten the version to one dot 'a.bb.ccc.d -> a.bb' at most.\n m = result.split('/');\n if (m.length > 1) {\n const v = m[1].split('.');\n const minor = v[1] ? '.' + v[1].substr(0, 2) : '';\n result = `${m[0]}/${v[0]}${minor}`;\n }\n return reactnative + result;\n}\n\n/**\n * The main class for interacting with Tinode server.\n */\nexport class Tinode {\n _host;\n _secure;\n\n _appName;\n\n // API Key.\n _apiKey;\n\n // Name and version of the browser.\n _browser = '';\n _platform;\n // Hardware\n _hwos = 'undefined';\n _humanLanguage = 'xx';\n\n // Logging to console enabled\n _loggingEnabled = false;\n // When logging, trip long strings (base64-encoded images) for readability\n _trimLongStrings = false;\n // UID of the currently authenticated user.\n _myUID = null;\n // Status of connection: authenticated or not.\n _authenticated = false;\n // Login used in the last successful basic authentication\n _login = null;\n // Token which can be used for login instead of login/password.\n _authToken = null;\n // Counter of received packets\n _inPacketCount = 0;\n // Counter for generating unique message IDs\n _messageId = Math.floor((Math.random() * 0xFFFF) + 0xFFFF);\n // Information about the server, if connected\n _serverInfo = null;\n // Push notification token. Called deviceToken for consistency with the Android SDK.\n _deviceToken = null;\n\n // Cache of pending promises by message id.\n _pendingPromises = {};\n // The Timeout object returned by the reject expired promises setInterval.\n _expirePromises = null;\n\n // Websocket or long polling connection.\n _connection = null;\n\n // Use indexDB for caching topics and messages.\n _persist = false;\n // IndexedDB wrapper object.\n _db = null;\n\n // Tinode's cache of objects\n _cache = {};\n\n /**\n * Create Tinode object.\n *\n * @param {Object} config - configuration parameters.\n * @param {string} config.appName - Name of the calling application to be reported in the User Agent.\n * @param {string} config.host - Host name and optional port number to connect to.\n * @param {string} config.apiKey - API key generated by keygen.\n * @param {string} config.transport - See {@link Tinode.Connection#transport}.\n * @param {boolean} config.secure - Use Secure WebSocket if true.\n * @param {string} config.platform - Optional platform identifier, one of \"ios\", \"web\", \"android\".\n * @param {boolen} config.persist - Use IndexedDB persistent storage.\n * @param {function} onComplete - callback to call when initialization is completed.\n */\n constructor(config, onComplete) {\n this._host = config.host;\n this._secure = config.secure;\n\n // Client-provided application name, format null if no valid credentials were given.\n */\n static credential(meth, val, params, resp) {\n if (typeof meth == 'object') {\n ({\n val,\n params,\n resp,\n meth\n } = meth);\n }\n if (meth && (val || resp)) {\n return [{\n 'meth': meth,\n 'val': val,\n 'resp': resp,\n 'params': params\n }];\n }\n return null;\n }\n\n /**\n * Determine topic type from topic's name: grp, p2p, me, fnd, sys.\n * @param {string} name - Name of the topic to test.\n * @returns {string} One of \"me\", \"fnd\", \"sys\", \"grp\",\n * \"p2p\" or undefined.\n */\n static topicType(name) {\n return Topic.topicType(name);\n }\n\n /**\n * Check if the given topic name is a name of a 'me' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'me' topic, false otherwise.\n */\n static isMeTopicName(name) {\n return Topic.isMeTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a 'slf' topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a 'slf' topic, false otherwise.\n */\n static isSelfTopicName(name) {\n return Topic.isSelfTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a group topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a group topic, false otherwise.\n */\n static isGroupTopicName(name) {\n return Topic.isGroupTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a p2p topic.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p topic, false otherwise.\n */\n static isP2PTopicName(name) {\n return Topic.isP2PTopicName(name);\n }\n /**\n * Check if the given topic name is a name of a communication topic, i.e. P2P or group.\n * @param {string} name - Name of the topic to test.\n * @returns {boolean} true if the name is a name of a p2p or group topic, false otherwise.\n */\n static isCommTopicName(name) {\n return Topic.isCommTopicName(name);\n }\n /**\n * Check if the topic name is a name of a new topic.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a new topic, false otherwise.\n */\n static isNewGroupTopicName(name) {\n return Topic.isNewGroupTopicName(name);\n }\n /**\n * Check if the topic name is a name of a channel.\n * @param {string} name - topic name to check.\n * @returns {boolean} true if the name is a name of a channel, false otherwise.\n */\n static isChannelTopicName(name) {\n return Topic.isChannelTopicName(name);\n }\n /**\n * Get information about the current version of this Tinode client library.\n * @returns {string} semantic version of the library, e.g. \"0.15.5-rc1\".\n */\n static getVersion() {\n return Const.VERSION;\n }\n /**\n * To use Tinode in a non browser context, supply WebSocket and XMLHttpRequest providers.\n * @static\n *\n * @param wsProvider WebSocket provider, e.g. for nodeJS , require('ws').\n * @param xhrProvider XMLHttpRequest provider, e.g. for node require('xhr').\n */\n static setNetworkProviders(wsProvider, xhrProvider) {\n WebSocketProvider = wsProvider;\n XHRProvider = xhrProvider;\n\n Connection.setNetworkProviders(WebSocketProvider, XHRProvider);\n LargeFileHelper.setNetworkProvider(XHRProvider);\n }\n /**\n * To use Tinode in a non browser context, supply indexedDB provider.\n * @static\n *\n * @param idbProvider indexedDB provider, e.g. for nodeJS , require('fake-indexeddb').\n */\n static setDatabaseProvider(idbProvider) {\n IndexedDBProvider = idbProvider;\n\n DBCache.setDatabaseProvider(IndexedDBProvider);\n }\n /**\n * Return information about the current name and version of this Tinode library.\n * @static\n *\n * @returns {string} the name of the library and it's version.\n */\n static getLibrary() {\n return Const.LIBRARY;\n }\n /**\n * Check if the given string represents NULL value as defined by Tinode ('\\u2421').\n * @param {string} str - string to check for NULL value.\n * @returns {boolean} true if string represents NULL value, false otherwise.\n */\n static isNullValue(str) {\n return str === Const.DEL_CHAR;\n }\n /**\n * Check if the given seq ID is likely to be issued by the server as oppisite to being temporary locally assigned ID.\n * @param {int} seq - seq ID to check.\n * @returns {boolean} true if seq is likely server-issued, false otherwise.\n */\n static isServerAssignedSeq(seq) {\n return seq > 0 && seq < Const.LOCAL_SEQID;\n }\n\n /**\n * Check if the given string is a valid tag value.\n * @param {string} tag - string to check.\n * @returns {boolean} true if the string is a valid tag value, false otherwise.\n */\n static isValidTagValue(tag) {\n // 4-24 characters, starting with letter or digit, then letters, digits, hyphen, underscore.\n const ALIAS_REGEX = /^[a-z0-9][a-z0-9_\\-]{3,23}$/i;\n return tag && typeof tag == 'string' && tag.length > 3 && tag.length < 24 && ALIAS_REGEX.test(tag);\n }\n\n /**\n * Split fully-qualified tag into prefix and value.\n */\n static tagSplit(tag) {\n if (!tag) {\n return null;\n }\n\n tag = tag.trim();\n\n const splitAt = tag.indexOf(':');\n if (splitAt <= 0) {\n // Invalid syntax.\n return null;\n }\n\n const value = tag.substring(splitAt + 1);\n if (!value) {\n return null;\n }\n return {\n prefix: tag.substring(0, splitAt),\n value: value\n };\n }\n\n /**\n * Set a unique namespace tag.\n * If the tag with this namespace is already present then it's replaced with the new tag.\n * @param uniqueTag tag to add, must be fully-qualified; if null or empty, no action is taken.\n */\n static setUniqueTag(tags, uniqueTag) {\n if (!tags || tags.length == 0) {\n // No tags, just add the new one.\n return [uniqueTag];\n }\n\n const parts = Tinode.tagSplit(uniqueTag)\n if (!parts) {\n // Invalid tag.\n return tags;\n }\n\n // Remove the old tag with the same prefix.\n tags = tags.filter(tag => tag && !tag.startsWith(parts.prefix));\n // Add the new tag.\n tags.push(uniqueTag);\n return tags;\n }\n\n /**\n * Remove a unique tag with the given prefix.\n * @param prefix prefix to remove\n */\n static clearTagPrefix(tags, prefix) {\n if (!tags || tags.length == 0) {\n return [];\n }\n return tags.filter(tag => tag && !tag.startsWith(prefix));\n }\n\n /**\n * Find the first tag with the given prefix.\n * @param prefix prefix to search for.\n * @return the first tag with the given prefix if found or undefined.\n */\n static tagByPrefix(tags, prefix) {\n if (!tags) {\n return undefined;\n }\n\n return tags.find(tag => tag && tag.startsWith(prefix));\n }\n\n // Instance methods.\n\n // Generates unique message IDs\n getNextUniqueId() {\n return (this._messageId != 0) ? '' + this._messageId++ : undefined;\n };\n\n /**\n * Connect to the server.\n *\n * @param {string} host_ - name of the host to connect to.\n * @return {Promise} Promise resolved/rejected when the connection call completes:\n * resolve() is called without parameters, reject() receives the\n * Error as a single parameter.\n */\n connect(host_) {\n return this._connection.connect(host_);\n }\n\n /**\n * Attempt to reconnect to the server immediately.\n *\n * @param {string} force - if true, reconnect even if there is a connection already.\n */\n reconnect(force) {\n this._connection.reconnect(force);\n }\n\n /**\n * Disconnect from the server.\n */\n disconnect() {\n this._connection.disconnect();\n }\n\n /**\n * Clear persistent cache: remove IndexedDB.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n clearStorage() {\n if (this._db.isReady()) {\n return this._db.deleteDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Initialize persistent cache: create IndexedDB cache.\n *\n * @return {Promise} Promise resolved/rejected when the operation is completed.\n */\n initStorage() {\n if (!this._db.isReady()) {\n return this._db.initDatabase();\n }\n return Promise.resolve();\n }\n\n /**\n * Send a network probe message to make sure the connection is alive.\n */\n networkProbe() {\n this._connection.probe();\n }\n\n /**\n * Check for live connection to server.\n *\n * @returns {boolean} true if there is a live connection, false otherwise.\n */\n isConnected() {\n return this._connection.isConnected();\n }\n\n /**\n * Check if connection is authenticated (last login was successful).\n *\n * @returns {boolean} true if authenticated, false otherwise.\n */\n isAuthenticated() {\n return this._authenticated;\n }\n\n /**\n * Add API key and auth token to the relative URL making it usable for getting data\n * from the server in a simple HTTP GET request.\n *\n * @param {string} URL - URL to wrap.\n * @returns {string} URL with appended API key and token, if valid token is present.\n */\n authorizeURL(url) {\n if (typeof url != 'string') {\n return url;\n }\n\n if (isUrlRelative(url)) {\n // Fake base to make the relative URL parseable.\n const base = 'scheme://host/';\n const parsed = new URL(url, base);\n if (this._apiKey) {\n parsed.searchParams.append('apikey', this._apiKey);\n }\n if (this._authToken && this._authToken.token) {\n parsed.searchParams.append('auth', 'token');\n parsed.searchParams.append('secret', this._authToken.token);\n }\n // Convert back to string and strip fake base URL except for the root slash.\n url = parsed.toString().substring(base.length - 1);\n }\n return url;\n }\n\n /**\n * @typedef AccountParams\n * @type {Object}\n * @property {DefAcs=} defacs - Default access parameters for user's me topic.\n * @property {Object=} public - Public application-defined data exposed on me topic.\n * @property {Object=} private - Private application-defined data accessible on me topic.\n * @property {Object=} trusted - Trusted user data which can be set by a root user only.\n * @property {Array.me for authenticated users.\n * @property {string=} anon - Access mode for me for anonymous users.\n */\n\n /**\n * Create or update an account.\n *\n * @param {string} uid - User id to update\n * @param {string} scheme - Authentication scheme; \"basic\" and \"anonymous\" are the currently supported schemes.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n account(uid, scheme, secret, login, params) {\n const pkt = this.#initPacket('acc');\n pkt.acc.user = uid;\n pkt.acc.scheme = scheme;\n pkt.acc.secret = secret;\n // Log in to the new account using selected scheme\n pkt.acc.login = login;\n\n if (params) {\n pkt.acc.desc.defacs = params.defacs;\n pkt.acc.desc.public = params.public;\n pkt.acc.desc.private = params.private;\n pkt.acc.desc.trusted = params.trusted;\n\n pkt.acc.tags = params.tags;\n pkt.acc.cred = params.cred;\n\n pkt.acc.tmpscheme = params.scheme;\n pkt.acc.tmpsecret = params.secret;\n\n if (Array.isArray(params.attachments) && params.attachments.length > 0) {\n pkt.extra = {\n attachments: params.attachments.filter(ref => isUrlRelative(ref))\n };\n }\n }\n\n return this.#send(pkt, pkt.acc.id);\n }\n\n /**\n * Create a new user. Wrapper for {@link Tinode#account}.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication.\n * @param {boolean=} login - Use new account to authenticate current session\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccount(scheme, secret, login, params) {\n let promise = this.account(Const.USER_NEW, scheme, secret, login, params);\n if (login) {\n promise = promise.then(ctrl => this.#loginSuccessful(ctrl));\n }\n return promise;\n }\n\n /**\n * Create user with 'basic' authentication scheme and immediately\n * use it for authentication. Wrapper for {@link Tinode#account}.\n *\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - User data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n createAccountBasic(username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.createAccount('basic',\n b64EncodeUnicode(username + ':' + password), true, params);\n }\n\n /**\n * Update user's credentials for 'basic' authentication scheme. Wrapper for {@link Tinode#account}.\n *\n * @param {string} uid - User ID to update.\n * @param {string} username - Login to use for the new account.\n * @param {string} password - User's password.\n * @param {AccountParams=} params - data to pass to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n updateAccountBasic(uid, username, password, params) {\n // Make sure we are not using 'null' or 'undefined';\n username = username || '';\n password = password || '';\n return this.account(uid, 'basic',\n b64EncodeUnicode(username + ':' + password), false, params);\n }\n\n /**\n * Send handshake to the server.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n hello() {\n const pkt = this.#initPacket('hi');\n\n return this.#send(pkt, pkt.hi.id)\n .then(ctrl => {\n // Reset backoff counter on successful connection.\n this._connection.backoffReset();\n\n // Server response contains server protocol version, build, constraints,\n // session ID for long polling. Save them.\n if (ctrl.params) {\n this._serverInfo = ctrl.params;\n }\n\n if (this.onConnect) {\n this.onConnect();\n }\n\n return ctrl;\n }).catch(err => {\n this._connection.reconnect(true);\n\n if (this.onDisconnect) {\n this.onDisconnect(err);\n }\n });\n }\n\n /**\n * Set or refresh the push notifications/device token. If the client is connected,\n * the deviceToken can be sent to the server.\n *\n * @param {string} dt - token obtained from the provider or false,\n * null or undefined to clear the token.\n *\n * @returns true if attempt was made to send the update to the server.\n */\n setDeviceToken(dt) {\n let sent = false;\n // Convert any falsish value to null.\n dt = dt || null;\n if (dt != this._deviceToken) {\n this._deviceToken = dt;\n if (this.isConnected() && this.isAuthenticated()) {\n this.#send({\n 'hi': {\n 'dev': dt || Tinode.DEL_CHAR\n }\n });\n sent = true;\n }\n }\n return sent;\n }\n\n /**\n * @typedef Credential\n * @type {Object}\n * @property {string} meth - validation method.\n * @property {string} val - value to validate (e.g. email or phone number).\n * @property {string} resp - validation response.\n * @property {Object} params - validation parameters.\n */\n /**\n * Authenticate current session.\n *\n * @param {string} scheme - Authentication scheme; \"basic\" is the only currently supported scheme.\n * @param {string} secret - Authentication secret, assumed to be already base64 encoded.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected when server reply is received.\n */\n login(scheme, secret, cred) {\n const pkt = this.#initPacket('login');\n pkt.login.scheme = scheme;\n pkt.login.secret = secret;\n pkt.login.cred = cred;\n\n return this.#send(pkt, pkt.login.id)\n .then(ctrl => this.#loginSuccessful(ctrl));\n }\n\n /**\n * Wrapper for {@link Tinode#login} with basic authentication\n *\n * @param {string} uname - User name.\n * @param {string} password - Password.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginBasic(uname, password, cred) {\n return this.login('basic', b64EncodeUnicode(uname + ':' + password), cred)\n .then(ctrl => {\n this._login = uname;\n return ctrl;\n });\n }\n\n /**\n * Wrapper for {@link Tinode#login} with token authentication\n *\n * @param {string} token - Token received in response to earlier login.\n * @param {Credential=} cred - credential confirmation, if required.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n loginToken(token, cred) {\n return this.login('token', token, cred);\n }\n\n /**\n * Send a request for resetting an authentication secret.\n *\n * @param {string} scheme - authentication scheme to reset.\n * @param {string} method - method to use for resetting the secret, such as \"email\" or \"tel\".\n * @param {string} value - value of the credential to use, a specific email address or a phone number.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving the server reply.\n */\n requestResetAuthSecret(scheme, method, value) {\n return this.login('reset', b64EncodeUnicode(scheme + ':' + method + ':' + value));\n }\n\n /**\n * @typedef AuthToken\n * @type {Object}\n * @property {string} token - Token value.\n * @property {Date} expires - Token expiration time.\n */\n /**\n * Get stored authentication token.\n *\n * @returns {AuthToken} authentication token.\n */\n getAuthToken() {\n if (this._authToken && (this._authToken.expires.getTime() > Date.now())) {\n return this._authToken;\n } else {\n this._authToken = null;\n }\n return null;\n }\n\n /**\n * Application may provide a saved authentication token.\n *\n * @param {AuthToken} token - authentication token.\n */\n setAuthToken(token) {\n this._authToken = token;\n }\n\n /**\n * @typedef SetParams\n * @type {Object}\n * @property {SetDesc=} desc - Topic initialization parameters when creating a new topic or a new subscription.\n * @property {SetSub=} sub - Subscription initialization parameters.\n * @property {Array.true, detach and unsubscribe, otherwise just detach.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n leave(topic, unsub) {\n const pkt = this.#initPacket('leave', topic);\n pkt.leave.unsub = unsub;\n\n return this.#send(pkt, pkt.leave.id);\n }\n\n /**\n * Create message draft without sending it to the server.\n *\n * @param {string} topic - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Object} new message which can be sent to the server or otherwise used.\n */\n createMessage(topic, content, noEcho) {\n const pkt = this.#initPacket('pub', topic);\n\n let dft = typeof content == 'string' ? Drafty.parse(content) : content;\n if (dft && !Drafty.isPlainText(dft)) {\n pkt.pub.head = {\n mime: Drafty.getContentType()\n };\n content = dft;\n }\n pkt.pub.noecho = noEcho;\n pkt.pub.content = content;\n\n return pkt.pub;\n }\n\n /**\n * Publish {data} message to topic.\n *\n * @param {string} topicName - Name of the topic to publish to.\n * @param {Object} content - Payload to publish.\n * @param {boolean=} noEcho - If true, tell the server not to echo the message to the original session.\n *\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n publish(topicName, content, noEcho) {\n return this.publishMessage(\n this.createMessage(topicName, content, noEcho)\n );\n }\n\n /**\n * Publish message to topic. The message should be created by {@link Tinode#createMessage}.\n *\n * @param {Object} pub - Message to publish.\n * @param {Array.'me' topic.\n *\n * @param {string} method - validation method such as 'email' or 'tel'.\n * @param {string} value - validation value, i.e. 'alice@example.com'.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCredential(method, value) {\n const pkt = this.#initPacket('del', Const.TOPIC_ME);\n pkt.del.what = 'cred';\n pkt.del.cred = {\n meth: method,\n val: value\n };\n\n return this.#send(pkt, pkt.del.id);\n }\n\n /**\n * Request to delete account of the current user.\n *\n * @param {boolean} hard - hard-delete user.\n * @returns {Promise} Promise which will be resolved/rejected on receiving server reply.\n */\n delCurrentUser(hard) {\n const pkt = this.#initPacket('del', null);\n pkt.del.what = 'user';\n pkt.del.hard = hard;\n\n return this.#send(pkt, pkt.del.id).then(_ => {\n this._myUID = null;\n });\n }\n\n /**\n * Notify server that a message or messages were read or received. Does NOT return promise.\n *\n * @param {string} topicName - Name of the topic where the mesage is being aknowledged.\n * @param {string} what - Action being aknowledged, either \"read\" or \"recv\".\n * @param {number} seq - Maximum id of the message being acknowledged.\n * @throws {Error} if seq is invalid.\n */\n note(topicName, what, seq) {\n if (seq <= 0 || seq >= Const.LOCAL_SEQID) {\n throw new Error(`Invalid message id ${seq}`);\n }\n\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = what;\n pkt.note.seq = seq;\n this.#send(pkt);\n }\n\n /**\n * Broadcast a key-press notification to topic subscribers. Used to show\n * typing notifications \"user X is typing...\".\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {string=} type - notification to send, default is 'kp'.\n */\n noteKeyPress(topicName, type) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.what = type || 'kp';\n this.#send(pkt);\n }\n\n /**\n * Send a video call notification to topic subscribers (including dialing,\n * hangup, etc.).\n *\n * @param {string} topicName - Name of the topic to broadcast to.\n * @param {int} seq - ID of the call message the event pertains to.\n * @param {string} evt - Call event.\n * @param {string} payload - Payload associated with this event (e.g. SDP string).\n *\n * @returns {Promise} Promise (for some call events) which will\n * be resolved/rejected on receiving server reply\n */\n videoCall(topicName, seq, evt, payload) {\n const pkt = this.#initPacket('note', topicName);\n pkt.note.seq = seq;\n pkt.note.what = 'call';\n pkt.note.event = evt;\n pkt.note.payload = payload;\n this.#send(pkt, pkt.note.id);\n }\n\n /**\n * Get a named topic, either pull it from cache or create a new instance.\n * There is a single instance of topic for each name.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested or newly created topic or undefined if topic name is invalid.\n */\n getTopic(topicName) {\n let topic = this.#cacheGet('topic', topicName);\n if (!topic && topicName) {\n if (topicName == Const.TOPIC_ME) {\n topic = new TopicMe();\n } else if (topicName == Const.TOPIC_FND) {\n topic = new TopicFnd();\n } else {\n topic = new Topic(topicName);\n }\n // Cache management.\n this.#attachCacheToTopic(topic);\n topic._cachePutSelf();\n // Don't save to DB here: a record will be added when the topic is subscribed.\n }\n return topic;\n }\n\n /**\n * Get a named topic from cache.\n *\n * @param {string} topicName - Name of the topic to get.\n *\n * @returns {Topic} Requested topic or undefined if topic is not found in cache.\n */\n cacheGetTopic(topicName) {\n return this.#cacheGet('topic', topicName);\n }\n\n /**\n * Remove named topic from cache.\n *\n * @param {string} topicName - Name of the topic to remove from cache.\n */\n cacheRemTopic(topicName) {\n this.#cacheDel('topic', topicName);\n }\n\n /**\n * Iterate over cached topics.\n *\n * @param {Function} func - callback to call for each topic.\n * @param {Object} context - 'this' inside the 'func'.\n */\n mapTopics(func, context) {\n this.#cacheMap('topic', func, context);\n }\n\n /**\n * Check if named topic is already present in cache.\n *\n * @param {string} topicName - Name of the topic to check.\n * @returns {boolean} true if topic is found in cache, false otherwise.\n */\n isTopicCached(topicName) {\n return !!this.#cacheGet('topic', topicName);\n }\n\n /**\n * Generate unique name like 'new123456' suitable for creating a new group topic.\n *\n * @param {boolean} isChan - if the topic is channel-enabled.\n * @returns {string} name which can be used for creating a new group topic.\n */\n newGroupTopicName(isChan) {\n return (isChan ? Const.TOPIC_NEW_CHAN : Const.TOPIC_NEW) + this.getNextUniqueId();\n }\n\n /**\n * Instantiate 'me' topic or get it from cache.\n *\n * @returns {TopicMe} Instance of 'me' topic.\n */\n getMeTopic() {\n return this.getTopic(Const.TOPIC_ME);\n }\n\n /**\n * Instantiate 'fnd' (find) topic or get it from cache.\n *\n * @returns {Topic} Instance of 'fnd' topic.\n */\n getFndTopic() {\n return this.getTopic(Const.TOPIC_FND);\n }\n\n /**\n * Create a new {@link LargeFileHelper} instance\n *\n * @returns {LargeFileHelper} instance of a {@link Tinode.LargeFileHelper}.\n */\n getLargeFileHelper() {\n return new LargeFileHelper(this, Const.PROTOCOL_VERSION);\n }\n\n /**\n * Get the UID of the the current authenticated user.\n *\n * @returns {string} UID of the current user or undefined if the session is not yet\n * authenticated or if there is no session.\n */\n getCurrentUserID() {\n return this._myUID;\n }\n\n /**\n * Check if the given user ID is equal to the current user's UID.\n *\n * @param {string} uid - UID to check.\n *\n * @returns {boolean} true if the given UID belongs to the current logged in user.\n */\n isMe(uid) {\n return this._myUID === uid;\n }\n\n /**\n * Get login used for last successful authentication.\n *\n * @returns {string} login last used successfully or undefined.\n */\n getCurrentLogin() {\n return this._login;\n }\n\n /**\n * Return information about the server: protocol version and build timestamp.\n *\n * @returns {Object} build and version of the server or null if there is no connection or\n * if the first server response has not been received yet.\n */\n getServerInfo() {\n return this._serverInfo;\n }\n\n /**\n * Report a topic for abuse. Wrapper for {@link Tinode#publish}.\n *\n * @param {string} action - the only supported action is 'report'.\n * @param {string} target - name of the topic being reported.\n *\n * @returns {Promise} Promise to be resolved/rejected when the server responds to request.\n */\n report(action, target) {\n return this.publish(Const.TOPIC_SYS, Drafty.attachJSON(null, {\n 'action': action,\n 'target': target\n }));\n }\n\n /**\n * Return server-provided configuration value.\n *\n * @param {string} name of the value to return.\n * @param {Object} defaultValue to return in case the parameter is not set or not found.\n *\n * @returns {Object} named value.\n */\n getServerParam(name, defaultValue) {\n return this._serverInfo && this._serverInfo[name] || defaultValue;\n }\n\n /**\n * Toggle console logging. Logging is off by default.\n *\n * @param {boolean} enabled - Set to true to enable logging to console.\n * @param {boolean} trimLongStrings - Set to true to trim long strings.\n */\n enableLogging(enabled, trimLongStrings) {\n this._loggingEnabled = enabled;\n this._trimLongStrings = enabled && trimLongStrings;\n }\n\n /**\n * Set UI language to report to the server. Must be called before 'hi' is sent, otherwise it will not be used.\n *\n * @param {string} hl - human (UI) language, like \"en_US\" or \"zh-Hans\".\n */\n setHumanLanguage(hl) {\n if (hl) {\n this._humanLanguage = hl;\n }\n }\n\n /**\n * Check if given topic is online.\n *\n * @param {string} name of the topic to test.\n * @returns {boolean} true if topic is online, false otherwise.\n */\n isTopicOnline(name) {\n const topic = this.#cacheGet('topic', name);\n return topic && topic.online;\n }\n\n /**\n * Get access mode for the given contact.\n *\n * @param {string} name of the topic to query.\n * @returns {AccessMode} access mode if topic is found, null otherwise.\n */\n getTopicAccessMode(name) {\n const topic = this.#cacheGet('topic', name);\n return topic ? topic.acs : null;\n }\n\n /**\n * Include message ID into all subsequest messages to server instructin it to send aknowledgemens.\n * Required for promises to function. Default is \"on\".\n *\n * @param {boolean} status - Turn aknowledgemens on or off.\n * @deprecated\n */\n wantAkn(status) {\n if (status) {\n this._messageId = Math.floor((Math.random() * 0xFFFFFF) + 0xFFFFFF);\n } else {\n this._messageId = 0;\n }\n }\n\n // Callbacks:\n /**\n * Callback to report when the websocket is opened. The callback has no parameters.\n *\n * @type {onWebsocketOpen}\n */\n onWebsocketOpen = undefined;\n\n /**\n * @typedef ServerParams\n *\n * @type {Object}\n * @property {string} ver - Server version\n * @property {string} build - Server build\n * @property {string=} sid - Session ID, long polling connections only.\n */\n\n /**\n * @callback onConnect\n * @param {number} code - Result code\n * @param {string} text - Text epxplaining the completion, i.e \"OK\" or an error message.\n * @param {ServerParams} params - Parameters returned by the server.\n */\n /**\n * Callback to report when connection with Tinode server is established.\n * @type {onConnect}\n */\n onConnect = undefined;\n\n /**\n * Callback to report when connection is lost. The callback has no parameters.\n * @type {onDisconnect}\n */\n onDisconnect = undefined;\n\n /**\n * @callback onLogin\n * @param {number} code - NUmeric completion code, same as HTTP status codes.\n * @param {string} text - Explanation of the completion code.\n */\n /**\n * Callback to report login completion.\n * @type {onLogin}\n */\n onLogin = undefined;\n\n /**\n * Callback to receive {ctrl} (control) messages.\n * @type {onCtrlMessage}\n */\n onCtrlMessage = undefined;\n\n /**\n * Callback to recieve {data} (content) messages.\n * @type {onDataMessage}\n */\n onDataMessage = undefined;\n\n /**\n * Callback to receive {pres} (presence) messages.\n * @type {onPresMessage}\n */\n onPresMessage = undefined;\n\n /**\n * Callback to receive all messages as objects.\n * @type {onMessage}\n */\n onMessage = undefined;\n\n /**\n * Callback to receive all messages as unparsed text.\n * @type {onRawMessage}\n */\n onRawMessage = undefined;\n\n /**\n * Callback to receive server responses to network probes. See {@link Tinode#networkProbe}\n * @type {onNetworkProbe}\n */\n onNetworkProbe = undefined;\n\n /**\n * Callback to be notified when exponential backoff is iterating.\n * @type {onAutoreconnectIteration}\n */\n onAutoreconnectIteration = undefined;\n};\n\n// Exported constants\nTinode.MESSAGE_STATUS_NONE = Const.MESSAGE_STATUS_NONE;\nTinode.MESSAGE_STATUS_QUEUED = Const.MESSAGE_STATUS_QUEUED;\nTinode.MESSAGE_STATUS_SENDING = Const.MESSAGE_STATUS_SENDING;\nTinode.MESSAGE_STATUS_FAILED = Const.MESSAGE_STATUS_FAILED;\nTinode.MESSAGE_STATUS_FATAL = Const.MESSAGE_STATUS_FATAL;\nTinode.MESSAGE_STATUS_SENT = Const.MESSAGE_STATUS_SENT;\nTinode.MESSAGE_STATUS_RECEIVED = Const.MESSAGE_STATUS_RECEIVED;\nTinode.MESSAGE_STATUS_READ = Const.MESSAGE_STATUS_READ;\nTinode.MESSAGE_STATUS_TO_ME = Const.MESSAGE_STATUS_TO_ME;\n\n// Unicode [del] symbol.\nTinode.DEL_CHAR = Const.DEL_CHAR;\n\n// Names of keys to server-provided configuration limits.\nTinode.MAX_MESSAGE_SIZE = 'maxMessageSize';\nTinode.MAX_SUBSCRIBER_COUNT = 'maxSubscriberCount';\nTinode.MIN_TAG_LENGTH = 'minTagLength';\nTinode.MAX_TAG_LENGTH = 'maxTagLength';\nTinode.MAX_TAG_COUNT = 'maxTagCount';\nTinode.MAX_FILE_UPLOAD_SIZE = 'maxFileUploadSize';\nTinode.REQ_CRED_VALIDATORS = 'reqCred';\nTinode.MSG_DELETE_AGE = 'msgDelAge';\n\n// Tinode URI topic ID prefix, 'scheme:path/'.\nTinode.URI_TOPIC_ID_PREFIX = 'tinode:topic/';\n\n// Tag prefixes for alias, email, phone.\nTinode.TAG_ALIAS = Const.TAG_ALIAS;\nTinode.TAG_EMAIL = Const.TAG_EMAIL;\nTinode.TAG_PHONE = Const.TAG_PHONE;\n","/**\n * @file Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @copyright 2015-2023 Tinode LLC.\n */\n'use strict';\n\nimport {\n listToRanges,\n normalizeRanges\n} from './utils';\n\n/**\n * Helper class for constructing {@link Tinode.GetQuery}.\n *\n * @class MetaGetBuilder\n * @memberof Tinode\n *\n * @param {Tinode.Topic} parent topic which instantiated this builder.\n */\nexport default class MetaGetBuilder {\n constructor(parent) {\n this.topic = parent;\n this.what = {};\n }\n\n // Get timestamp of the most recent desc update.\n #get_desc_ims() {\n return this.topic._deleted ? undefined : this.topic.updated;\n }\n\n // Get timestamp of the most recent subs update.\n #get_subs_ims() {\n if (this.topic.isP2PType()) {\n return this.#get_desc_ims();\n }\n return this.topic._deleted ? undefined : this.topic._lastSubsUpdate;\n }\n /**\n * Add query parameters to fetch messages within explicit limits.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} since - messages newer than this (inclusive);\n * @param {number=} before - older than this (exclusive)\n * @param {number=} limit - number of messages to fetch\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withData(since, before, limit) {\n this.what['data'] = {\n since: since,\n before: before,\n limit: limit\n };\n return this;\n }\n /**\n * Add query parameters to fetch messages newer than the latest saved message.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {number=} limit - number of messages to fetch\n *\n * @returns {Tinode.MetaGetBuilder} this object.\n */\n withLaterData(limit) {\n return this.withData(this.topic._maxSeq > 0 ? this.topic._maxSeq + 1 : undefined, undefined, limit);\n }\n /**\n * Add query parameters to fetch messages within ID ranges.\n * @memberof Tinode.MetaGetBuilder#\n *\n * @param {Array.