videomail-client 15.3.3 → 15.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,7 +4,6 @@ export type { BrowserStats } from "./types/BrowserStats.js";
4
4
  export type { VideomailCommand } from "./types/command.js";
5
5
  export type { VideomailCommandArgs } from "./types/command.js";
6
6
  export type { DeliveryRecord } from "./types/Delivery.js";
7
- export type { CapacitorDeviceMetadata } from "./types/device.js";
8
7
  export type { EmailAddress, EmailAddresses } from "./types/EmailAddress.js";
9
8
  export type { FullVideomailErrorData, VideomailErrorData } from "./types/error.js";
10
9
  export type { VideomailEvents } from "./types/events/index.js";
@@ -17,5 +16,4 @@ export type { RecordingStats } from "./types/RecordingStats.js";
17
16
  export type { VideomailThread } from "./types/thread.js";
18
17
  export type { PartialVideomail, Videomail } from "./types/Videomail.js";
19
18
  export type { VideoTypeType } from "./types/VideoType.js";
20
- export { default as getCapacitorDeviceMetadata } from "./util/getCapacitorDeviceMetadata.js";
21
19
  export { VideoType };
package/dist/esm/index.js CHANGED
@@ -2,7 +2,6 @@ import { deserializeError, serializeError } from "serialize-error";
2
2
  import superagent from "superagent";
3
3
  import defined from "defined";
4
4
  import { UAParser } from "ua-parser-js";
5
- import { Device } from "@capacitor/device";
6
5
  import get_form_data from "get-form-data";
7
6
  import { createNanoEvents } from "nanoevents";
8
7
  import deepmerge from "deepmerge";
@@ -70,11 +69,11 @@ __webpack_require__.m = __webpack_modules__;
70
69
  })();
71
70
  __webpack_require__.add({
72
71
  2791 (module, __webpack_exports__, __webpack_require__) {
73
- var _node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0 = __webpack_require__(5068);
74
- var _node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0);
75
- var _node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1 = __webpack_require__(37);
76
- var _node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1);
77
- var ___CSS_LOADER_EXPORT___ = _node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_1_default()(_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_0_default());
72
+ var _node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_1 = __webpack_require__(5068);
73
+ var _node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_1_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_1);
74
+ var _node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_0 = __webpack_require__(37);
75
+ var _node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_0_default = /*#__PURE__*/ __webpack_require__.n(_node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_0);
76
+ var ___CSS_LOADER_EXPORT___ = _node_modules_rsbuild_core_compiled_css_loader_api_js__rspack_import_0_default()(_node_modules_rsbuild_core_compiled_css_loader_noSourceMaps_js__rspack_import_1_default());
78
77
  ___CSS_LOADER_EXPORT___.push([
79
78
  module.id,
80
79
  `@keyframes blink {
@@ -3621,7 +3620,7 @@ const constants = {
3621
3620
  }
3622
3621
  };
3623
3622
  var package_namespaceObject = {
3624
- rE: "15.3.3"
3623
+ rE: "15.5.0"
3625
3624
  };
3626
3625
  function isAudioEnabled(options) {
3627
3626
  return Boolean(options.audio.enabled);
@@ -3985,44 +3984,6 @@ function findOriginalExc(exc) {
3985
3984
  return exc;
3986
3985
  }
3987
3986
  const error_findOriginalExc = findOriginalExc;
3988
- async function getCapacitorDeviceMetadata() {
3989
- const errors = [];
3990
- let battery;
3991
- let info;
3992
- let languageCode;
3993
- let languageTag;
3994
- try {
3995
- info = await Device.getInfo();
3996
- } catch (exc) {
3997
- const err = serializeError(exc);
3998
- let ignore = false;
3999
- if (err.message?.includes("Device API not available in this browser")) ignore = true;
4000
- if (!ignore) errors.push(err);
4001
- }
4002
- try {
4003
- battery = await Device.getBatteryInfo();
4004
- } catch (exc) {
4005
- errors.push(serializeError(exc));
4006
- }
4007
- try {
4008
- languageCode = await Device.getLanguageCode();
4009
- } catch (exc) {
4010
- errors.push(serializeError(exc));
4011
- }
4012
- try {
4013
- languageTag = await Device.getLanguageTag();
4014
- } catch (exc) {
4015
- errors.push(serializeError(exc));
4016
- }
4017
- const metadata = {};
4018
- if (battery) metadata.battery = battery;
4019
- if (errors.length > 0) metadata.errors = errors;
4020
- if (info) metadata.info = info;
4021
- if (languageCode) metadata.languageCode = languageCode;
4022
- if (languageTag) metadata.languageTag = languageTag;
4023
- return metadata;
4024
- }
4025
- const util_getCapacitorDeviceMetadata = getCapacitorDeviceMetadata;
4026
3987
  function Despot_define_property(obj, key, value) {
4027
3988
  if (key in obj) Object.defineProperty(obj, key, {
4028
3989
  value: value,
@@ -4447,11 +4408,9 @@ class Resource {
4447
4408
  [constants.WHITELIST_KEY_LABEL]: this.options.whitelistKey
4448
4409
  };
4449
4410
  const url = `${this.options.apiUrl}/client-error/`;
4450
- const capacitorDevice = await util_getCapacitorDeviceMetadata();
4451
4411
  const supportedConstraints = navigator.mediaDevices.getSupportedConstraints();
4452
4412
  const enumerateDevices = await navigator.mediaDevices.enumerateDevices();
4453
4413
  const fullVideomailErrorData = {
4454
- capacitorDevice,
4455
4414
  browser: err.browser,
4456
4415
  code: err.code,
4457
4416
  cookie: err.cookie,
@@ -4738,19 +4697,19 @@ function mergeWithDefaultOptions(options = {}) {
4738
4697
  return newOptions;
4739
4698
  }
4740
4699
  const options_mergeWithDefaultOptions = mergeWithDefaultOptions;
4741
- const injectStylesIntoStyleTag = __webpack_require__("4860");
4742
- var injectStylesIntoStyleTag_default = /*#__PURE__*/ __webpack_require__.n(injectStylesIntoStyleTag);
4743
- const styleDomAPI = __webpack_require__("7045");
4744
- var styleDomAPI_default = /*#__PURE__*/ __webpack_require__.n(styleDomAPI);
4745
- const insertBySelector = __webpack_require__("3175");
4746
- var insertBySelector_default = /*#__PURE__*/ __webpack_require__.n(insertBySelector);
4700
+ const main_0 = __webpack_require__("2791");
4701
+ const styleTagTransform = __webpack_require__("2045");
4702
+ var styleTagTransform_default = /*#__PURE__*/ __webpack_require__.n(styleTagTransform);
4747
4703
  const setAttributesWithoutAttributes = __webpack_require__("7956");
4748
4704
  var setAttributesWithoutAttributes_default = /*#__PURE__*/ __webpack_require__.n(setAttributesWithoutAttributes);
4705
+ const insertBySelector = __webpack_require__("3175");
4706
+ var insertBySelector_default = /*#__PURE__*/ __webpack_require__.n(insertBySelector);
4707
+ const styleDomAPI = __webpack_require__("7045");
4708
+ var styleDomAPI_default = /*#__PURE__*/ __webpack_require__.n(styleDomAPI);
4749
4709
  const insertStyleElement = __webpack_require__("6384");
4750
4710
  var insertStyleElement_default = /*#__PURE__*/ __webpack_require__.n(insertStyleElement);
4751
- const styleTagTransform = __webpack_require__("2045");
4752
- var styleTagTransform_default = /*#__PURE__*/ __webpack_require__.n(styleTagTransform);
4753
- const main_0 = __webpack_require__("2791");
4711
+ const injectStylesIntoStyleTag = __webpack_require__("4860");
4712
+ var injectStylesIntoStyleTag_default = /*#__PURE__*/ __webpack_require__.n(injectStylesIntoStyleTag);
4754
4713
  var main_options = {};
4755
4714
  main_options.styleTagTransform = styleTagTransform_default();
4756
4715
  main_options.setAttributes = setAttributesWithoutAttributes_default();
@@ -6636,6 +6595,30 @@ class Recorder extends util_Despot {
6636
6595
  window.clearTimeout(this.retryTimeout);
6637
6596
  this.retryTimeout = void 0;
6638
6597
  }
6598
+ clearConnectionTimeout() {
6599
+ if (!this.connectionTimeout) return;
6600
+ this.options.logger.debug("Recorder: clearConnectionTimeout()");
6601
+ window.clearTimeout(this.connectionTimeout);
6602
+ this.connectionTimeout = void 0;
6603
+ }
6604
+ failConnection(params) {
6605
+ if (this.connectionFailed || this.connected || this.unloaded) return;
6606
+ this.connectionFailed = true;
6607
+ this.connecting = false;
6608
+ this.clearConnectionTimeout();
6609
+ if (this.stream) {
6610
+ this.stream.destroy();
6611
+ this.stream = void 0;
6612
+ }
6613
+ const err = error_createError({
6614
+ message: "Unable to connect to the server",
6615
+ explanation: params.explanation,
6616
+ options: this.options
6617
+ });
6618
+ this.emit("ERROR", {
6619
+ err
6620
+ });
6621
+ }
6639
6622
  calculateFrameProgress() {
6640
6623
  return `${(this.confirmedFrameNumber / (this.framesCount || 1) * 100).toFixed(2)}%`;
6641
6624
  }
@@ -6707,6 +6690,7 @@ class Recorder extends util_Despot {
6707
6690
  initSocket(cb) {
6708
6691
  if (!this.connected) {
6709
6692
  this.connecting = true;
6693
+ this.connectionFailed = false;
6710
6694
  this.emit("CONNECTING");
6711
6695
  let url2Connect;
6712
6696
  try {
@@ -6761,16 +6745,27 @@ class Recorder extends util_Despot {
6761
6745
  });
6762
6746
  }
6763
6747
  if (this.stream) {
6764
- this.stream.on("close", (err)=>{
6748
+ const connectionTimeoutMs = this.options.timeouts.connection;
6749
+ this.connectionTimeout = window.setTimeout(()=>{
6750
+ this.failConnection({
6751
+ url2Connect,
6752
+ explanation: `The server at ${url2Connect} did not respond within ${connectionTimeoutMs}ms. Please check your internet connection and try again. If the problem persists, contact us.`
6753
+ });
6754
+ }, connectionTimeoutMs);
6755
+ this.stream.on("close", ()=>{
6765
6756
  this.options.logger.debug(`${PIPE_SYMBOL}Stream has closed`);
6757
+ const neverConnected = this.connecting && !this.connected;
6758
+ this.clearConnectionTimeout();
6766
6759
  this.connecting = this.connected = false;
6767
- if (err) this.emit("ERROR", {
6768
- err
6760
+ if (neverConnected) this.failConnection({
6761
+ url2Connect,
6762
+ explanation: `The connection to ${url2Connect} was refused or could not be reached. Please check your internet connection and try again. If the problem persists, contact us.`
6769
6763
  });
6770
6764
  else if (this.userMediaLoaded) this.initSocket();
6771
6765
  });
6772
6766
  this.stream.on("connect", ()=>{
6773
6767
  this.options.logger.debug(`${PIPE_SYMBOL}Stream *connect* event emitted`);
6768
+ this.clearConnectionTimeout();
6774
6769
  const isClosing = this.stream?.socket.readyState === WebSocket.CLOSING;
6775
6770
  if (!this.connected && !isClosing && !this.unloaded) {
6776
6771
  this.connected = true;
@@ -7129,6 +7124,8 @@ class Recorder extends util_Despot {
7129
7124
  this.options.logger.debug(`Recorder: unload()${prettyCause}`);
7130
7125
  this.reset();
7131
7126
  this.clearUserMediaTimeout();
7127
+ this.clearConnectionTimeout();
7128
+ this.connecting = false;
7132
7129
  if (this.userMedia) this.userMedia.unloadRemainingEventListeners();
7133
7130
  if (this.submitting) ;
7134
7131
  else if (this.stream) {
@@ -7531,7 +7528,7 @@ class Recorder extends util_Despot {
7531
7528
  return this.userMediaLoaded;
7532
7529
  }
7533
7530
  constructor(visuals, replay, options){
7534
- super("Recorder", options), recorder_define_property(this, "visuals", void 0), recorder_define_property(this, "replay", void 0), recorder_define_property(this, "loop", void 0), recorder_define_property(this, "originalAnimationFrameObject", void 0), recorder_define_property(this, "samplesCount", 0), recorder_define_property(this, "framesCount", 0), recorder_define_property(this, "recordingStats", void 0), recorder_define_property(this, "confirmedFrameNumber", 0), recorder_define_property(this, "confirmedSampleNumber", 0), recorder_define_property(this, "recorderElement", void 0), recorder_define_property(this, "userMedia", void 0), recorder_define_property(this, "userMediaTimeout", void 0), recorder_define_property(this, "retryTimeout", void 0), recorder_define_property(this, "frameProgress", void 0), recorder_define_property(this, "sampleProgress", void 0), recorder_define_property(this, "canvas", void 0), recorder_define_property(this, "ctx", void 0), recorder_define_property(this, "userMediaLoaded", void 0), recorder_define_property(this, "userMediaLoading", false), recorder_define_property(this, "submitting", false), recorder_define_property(this, "unloaded", void 0), recorder_define_property(this, "stopTime", void 0), recorder_define_property(this, "stream", void 0), recorder_define_property(this, "connecting", false), recorder_define_property(this, "connected", false), recorder_define_property(this, "blocking", false), recorder_define_property(this, "built", false), recorder_define_property(this, "key", void 0), recorder_define_property(this, "waitingTime", void 0), recorder_define_property(this, "pingInterval", void 0), recorder_define_property(this, "frame", void 0), recorder_define_property(this, "recordingBuffer", void 0), recorder_define_property(this, "facingMode", void 0);
7531
+ super("Recorder", options), recorder_define_property(this, "visuals", void 0), recorder_define_property(this, "replay", void 0), recorder_define_property(this, "loop", void 0), recorder_define_property(this, "originalAnimationFrameObject", void 0), recorder_define_property(this, "samplesCount", 0), recorder_define_property(this, "framesCount", 0), recorder_define_property(this, "recordingStats", void 0), recorder_define_property(this, "confirmedFrameNumber", 0), recorder_define_property(this, "confirmedSampleNumber", 0), recorder_define_property(this, "recorderElement", void 0), recorder_define_property(this, "userMedia", void 0), recorder_define_property(this, "userMediaTimeout", void 0), recorder_define_property(this, "retryTimeout", void 0), recorder_define_property(this, "connectionTimeout", void 0), recorder_define_property(this, "frameProgress", void 0), recorder_define_property(this, "sampleProgress", void 0), recorder_define_property(this, "canvas", void 0), recorder_define_property(this, "ctx", void 0), recorder_define_property(this, "userMediaLoaded", void 0), recorder_define_property(this, "userMediaLoading", false), recorder_define_property(this, "submitting", false), recorder_define_property(this, "unloaded", void 0), recorder_define_property(this, "stopTime", void 0), recorder_define_property(this, "stream", void 0), recorder_define_property(this, "connecting", false), recorder_define_property(this, "connected", false), recorder_define_property(this, "connectionFailed", false), recorder_define_property(this, "blocking", false), recorder_define_property(this, "built", false), recorder_define_property(this, "key", void 0), recorder_define_property(this, "waitingTime", void 0), recorder_define_property(this, "pingInterval", void 0), recorder_define_property(this, "frame", void 0), recorder_define_property(this, "recordingBuffer", void 0), recorder_define_property(this, "facingMode", void 0);
7535
7532
  this.visuals = visuals;
7536
7533
  this.replay = replay;
7537
7534
  this.facingMode = options.video.facingMode;
@@ -8721,4 +8718,4 @@ const Reactions = {
8721
8718
  label: "Sad"
8722
8719
  }
8723
8720
  };
8724
- export { Reactions, VideoType, VideomailClient, util_getCapacitorDeviceMetadata as getCapacitorDeviceMetadata };
8721
+ export { Reactions, VideoType, VideomailClient };
@@ -1,6 +1,5 @@
1
1
  import { ErrorObject } from "serialize-error";
2
2
  import type { IBrowser, ICPU, IDevice, IEngine, IOS } from "ua-parser-js";
3
- import { CapacitorDeviceMetadata } from "./device.js";
4
3
  export interface VideomailErrorData {
5
4
  cause?: any;
6
5
  promise?: any;
@@ -41,7 +40,6 @@ export interface FullVideomailErrorData extends VideomailErrorData {
41
40
  clientIp?: string | null | undefined;
42
41
  userAgent?: string | null | undefined;
43
42
  isBot?: boolean | undefined;
44
- capacitorDevice: CapacitorDeviceMetadata;
45
43
  supportedConstraints?: MediaTrackSupportedConstraints | undefined;
46
44
  enumerateDevices?: MediaDeviceInfo[] | undefined;
47
45
  usedConstraints?: MediaStreamConstraints | undefined;
@@ -25,6 +25,7 @@ declare class Recorder extends Despot {
25
25
  private userMedia?;
26
26
  private userMediaTimeout?;
27
27
  private retryTimeout?;
28
+ private connectionTimeout?;
28
29
  private frameProgress?;
29
30
  private sampleProgress?;
30
31
  private canvas?;
@@ -37,6 +38,7 @@ declare class Recorder extends Despot {
37
38
  private stream?;
38
39
  private connecting;
39
40
  private connected;
41
+ private connectionFailed;
40
42
  private blocking;
41
43
  private built;
42
44
  private key?;
@@ -53,6 +55,8 @@ declare class Recorder extends Despot {
53
55
  show(): void;
54
56
  private onUserMediaReady;
55
57
  private clearRetryTimeout;
58
+ private clearConnectionTimeout;
59
+ private failConnection;
56
60
  private calculateFrameProgress;
57
61
  private calculateSampleProgress;
58
62
  private updateOverallProgress;