noibu-react-native 0.2.1 → 0.2.3

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.
Files changed (79) hide show
  1. package/README.md +1 -1
  2. package/android/src/main/java/com/noibu/sessionreplay/reactnative/NoibuSessionReplayModule.kt +10 -0
  3. package/dist/api/clientConfig.js +225 -217
  4. package/dist/api/metroplexSocket.js +406 -416
  5. package/dist/constants.js +14 -2
  6. package/dist/entry/init.js +58 -56
  7. package/dist/monitors/appNavigationMonitor.js +2 -3
  8. package/dist/monitors/clickMonitor.js +16 -9
  9. package/dist/monitors/errorMonitor.js +30 -8
  10. package/dist/monitors/gqlErrorValidator.js +4 -4
  11. package/dist/monitors/httpDataBundler.js +525 -713
  12. package/dist/monitors/integrations/react-native-navigation-integration.js +4 -2
  13. package/dist/monitors/requestMonitor.js +350 -365
  14. package/dist/pageVisit/eventDebouncer.js +110 -0
  15. package/dist/pageVisit/pageVisitEventError.js +1 -1
  16. package/dist/pageVisit/pageVisitEventHTTP.js +78 -93
  17. package/dist/react/ErrorBoundary.js +18 -15
  18. package/dist/sessionRecorder/nativeSessionRecorderSubscription.js +3 -2
  19. package/dist/sessionRecorder/sessionRecorder.js +151 -150
  20. package/dist/{api → src/api}/clientConfig.d.ts +1 -1
  21. package/dist/{api → src/api}/metroplexSocket.d.ts +25 -25
  22. package/dist/{constants.d.ts → src/constants.d.ts} +44 -0
  23. package/dist/{entry → src/entry}/init.d.ts +1 -1
  24. package/dist/{monitors → src/monitors}/clickMonitor.d.ts +1 -1
  25. package/dist/{monitors → src/monitors}/gqlErrorValidator.d.ts +6 -6
  26. package/dist/src/monitors/httpDataBundler.d.ts +127 -0
  27. package/dist/src/monitors/requestMonitor.d.ts +10 -0
  28. package/dist/src/pageVisit/eventDebouncer.d.ts +31 -0
  29. package/dist/src/pageVisit/pageVisitEventHTTP.d.ts +25 -0
  30. package/dist/{sessionRecorder → src/sessionRecorder}/types.d.ts +1 -1
  31. package/dist/{storage → src/storage}/rnStorageProvider.d.ts +1 -1
  32. package/dist/{storage → src/storage}/storage.d.ts +1 -1
  33. package/dist/{storage → src/storage}/storageProvider.d.ts +3 -3
  34. package/dist/{utils → src/utils}/function.d.ts +25 -4
  35. package/dist/{utils → src/utils}/object.d.ts +9 -4
  36. package/dist/src/utils/piiRedactor.d.ts +11 -0
  37. package/dist/src/utils/polyfills.d.ts +7 -0
  38. package/dist/storage/rnStorageProvider.js +7 -5
  39. package/dist/storage/storage.js +43 -35
  40. package/dist/storage/storageProvider.js +23 -19
  41. package/dist/types/Config.d.ts +24 -20
  42. package/dist/types/PageVisit.types.d.ts +151 -0
  43. package/dist/types/PageVisitMetrics.types.d.ts +27 -0
  44. package/dist/types/RRWeb.d.ts +48 -0
  45. package/dist/types/StoredPageVisit.types.d.ts +2 -4
  46. package/dist/types/WrappedObjects.d.ts +6 -0
  47. package/dist/utils/function.js +110 -76
  48. package/dist/utils/object.js +58 -6
  49. package/dist/utils/piiRedactor.js +98 -0
  50. package/dist/utils/polyfills.js +24 -0
  51. package/package.json +24 -9
  52. package/dist/monitors/httpDataBundler.d.ts +0 -161
  53. package/dist/monitors/requestMonitor.d.ts +0 -10
  54. package/dist/pageVisit/pageVisitEventHTTP.d.ts +0 -18
  55. package/dist/types/PageVisit.d.ts +0 -22
  56. package/dist/types/globals.d.ts +0 -45
  57. /package/dist/{api → src/api}/helpCode.d.ts +0 -0
  58. /package/dist/{api → src/api}/inputManager.d.ts +0 -0
  59. /package/dist/{api → src/api}/storedMetrics.d.ts +0 -0
  60. /package/dist/{api → src/api}/storedPageVisit.d.ts +0 -0
  61. /package/dist/{const_matchers.d.ts → src/const_matchers.d.ts} +0 -0
  62. /package/dist/{entry → src/entry}/index.d.ts +0 -0
  63. /package/dist/{monitors → src/monitors}/appNavigationMonitor.d.ts +0 -0
  64. /package/dist/{monitors → src/monitors}/errorMonitor.d.ts +0 -0
  65. /package/dist/{monitors → src/monitors}/inputMonitor.d.ts +0 -0
  66. /package/dist/{monitors → src/monitors}/integrations/react-native-navigation-integration.d.ts +0 -0
  67. /package/dist/{monitors → src/monitors}/keyboardInputMonitor.d.ts +0 -0
  68. /package/dist/{monitors → src/monitors}/pageMonitor.d.ts +0 -0
  69. /package/dist/{pageVisit → src/pageVisit}/pageVisit.d.ts +0 -0
  70. /package/dist/{pageVisit → src/pageVisit}/pageVisitEventError.d.ts +0 -0
  71. /package/dist/{pageVisit → src/pageVisit}/userStep.d.ts +0 -0
  72. /package/dist/{react → src/react}/ErrorBoundary.d.ts +0 -0
  73. /package/dist/{sessionRecorder → src/sessionRecorder}/nativeSessionRecorderSubscription.d.ts +0 -0
  74. /package/dist/{sessionRecorder → src/sessionRecorder}/sessionRecorder.d.ts +0 -0
  75. /package/dist/{utils → src/utils}/date.d.ts +0 -0
  76. /package/dist/{utils → src/utils}/eventlistener.d.ts +0 -0
  77. /package/dist/{utils → src/utils}/log.d.ts +0 -0
  78. /package/dist/{utils → src/utils}/performance.d.ts +0 -0
  79. /package/dist/{utils → src/utils}/stacktrace-parser.d.ts +0 -0
package/dist/constants.js CHANGED
@@ -190,6 +190,7 @@ const HTTP_DATA_PAYLOAD_ATT_NAME = 'rqp';
190
190
  const HTTP_DATA_RESP_PAYLOAD_ATT_NAME = 'rsp';
191
191
  const HTTP_DATA_REQ_HEADERS_ATT_NAME = 'rqh';
192
192
  const HTTP_DATA_RESP_HEADERS_ATT_NAME = 'rsh';
193
+ const JS_STACK_LINE_ATT_NAME = 'line';
193
194
  const JS_STACK_METHOD_ATT_NAME = 'mname';
194
195
  const JS_STACK_FILE_ATT_NAME = 'file';
195
196
  const JS_STACK_FRAMES_ATT_NAME = 'frames';
@@ -319,7 +320,7 @@ const CONTENT_LENGTH = 'content-length';
319
320
  * Gets the script id from the cookie object, returns default if cannot be found
320
321
  */
321
322
  function GET_SCRIPT_ID() {
322
- return "1.0.104-rn-sdk-0.2.1" ;
323
+ return "1.0.104-rn-sdk-0.2.3" ;
323
324
  }
324
325
  /**
325
326
  *
@@ -448,5 +449,16 @@ const MAX_RECORDER_EVENT_BUFFER = 10;
448
449
  const MAX_TIME_FOR_RECORDER_USER_EVENTS = 2000;
449
450
  // custom event name for posting metrics
450
451
  const POST_METRICS_EVENT_NAME = 'noibuPostMetrics';
452
+ const BODY_USED_ERROR = 'Response data unavailable due to an improperly wrapped fetch call';
453
+ // maximum number of HTTP data events including errors to collect per page visit
454
+ const MAX_HTTP_DATA_IF_ERROR_EVENT_COUNT = 120;
455
+ // the maximum size of http data payload that will be capture for success, otherwise it is dropped
456
+ // this is 64k
457
+ const MAX_SUCCESS_HTTP_DATA_PAYLOAD_LENGTH = 65536;
458
+ const LOCATION_EVENT_TYPE = 'loc';
459
+ const ECOMMERCE_EVENT_TYPE = 'ecommerce';
460
+ const NETWORK_STATS_EVENT_TYPE = 'network';
461
+ const TITLE_EVENT_TYPE = 'title';
462
+ const PAGE_TYPE_EVENT_TYPE = 'page_type';
451
463
 
452
- export { APP_NAVIGATION_EVENT_TYPE, BLOCKED_HTTP_HEADER_KEYS, BLOCKLISTED_DOMAINS, BLOCK_SOCKET_MESSAGE, BROWSER_ID_ATT_NAME, CLICK_EVENT_TYPE, CLIENT_LOCK_TIME_MINUTES, CLOSE_CONNECTION_FORCEFULLY, COLLECT_VER_ATT_NAME, CONN_COUNT_ATT_NAME, CONSOLE_FUNCTION_OVERRIDES, CONTENT_LENGTH, CONTENT_TYPE, CSS_CLASS_ATT_NAME, CSS_URLS_ATT_NAME, CURRENT_METRICS_VERSION, CURRENT_NOIBUJS_VERSION, CURRENT_PV_VERSION, CUSTOM_ERROR_EVENT_TYPE, CUSTOM_ID_NAME_TYPE, CUSTOM_ID_VALUE_TYPE, DEFAULT_STACK_FRAME_FIELD_VALUE, DEFAULT_WEBSITE_SUBDOMAIN_PATTERN, DID_CUT_PV_ATT_NAME, DID_CUT_VID_ATT_NAME, DID_START_VID_ATT_NAME, END_AT_ATT_NAME, ERROR_EVENT_ERROR_TYPE, ERROR_EVENT_TYPE, ERROR_EVENT_UNHANDLED_REJECTION_TYPE, ERROR_LOG_EVENT_ERROR_TYPE, ERROR_SOURCE_ATT_NAME, ERR_COUNT_EXPECTED_ATT_NAME, EVENT_ERROR_TYPE, EXP_VIDEO_LENGTH_ATT_NAME, FETCH_EXCEPTION_ERROR_TYPE, GET_DEVICE_ENV, GET_MAX_METROPLEX_RECONNECTION_NUMBER, GET_METROPLEX_BASE_HTTP_URL, GET_METROPLEX_BASE_SOCKET_URL, GET_METROPLEX_CONSECUTIVE_CONNECTION_DELAY, GET_METROPLEX_METRICS_URL, GET_METROPLEX_POST_URL, GET_SCRIPT_ID, GQL_ERROR_ATT_NAME, GQL_ERROR_TYPE, GQL_EVENT_TYPE, HELP_CODE_ATT_NAME, HTMLID_ATT_NAME, HTTP_BODY_DROPPED_LENGTH_MSG, HTTP_BODY_DROPPED_TYPE_MSG, HTTP_BODY_NULL_STRING, HTTP_CODE_ATT_NAME, HTTP_COUNT_EXPECTED_ATT_NAME, HTTP_DATA_METROPLEX_TYPE, HTTP_DATA_PAYLOAD_ATT_NAME, HTTP_DATA_REQ_HEADERS_ATT_NAME, HTTP_DATA_RESP_HEADERS_ATT_NAME, HTTP_DATA_RESP_PAYLOAD_ATT_NAME, HTTP_EVENT_TYPE, HTTP_METHOD_ATT_NAME, HTTP_PII_BLOCKING_PATTERNS, HTTP_RESP_CODE_ATT_NAME, HTTP_RESP_LENGTH_ATT_NAME, HTTP_RESP_TIME_ATT_NAME, HUMAN_READABLE_CONTENT_TYPE_REGEX, IS_LAST_ATT_NAME, IS_NJS_VERSION_BETA, JS_ENV, JS_ERROR_ATT_NAME, JS_EVENT_TYPE, JS_STACK_FILE_ATT_NAME, JS_STACK_FRAMES_ATT_NAME, JS_STACK_MESSAGE_ATT_NAME, JS_STACK_METHOD_ATT_NAME, KEYBOARD_EVENT_TYPE, LENGTH_ATT_NAME, MAX_BEACON_PAYLOAD_SIZE, MAX_COLLECT_ERROR_LOG, MAX_CUSTOM_ERRORS_PER_PAGEVISIT, MAX_CUSTOM_IDS_PER_PAGEVISIT, MAX_FRAMES_IN_ARRAY, MAX_HTTP_DATA_EVENT_COUNT, MAX_HTTP_DATA_PAYLOAD_LENGTH, MAX_METROPLEX_CONNECTION_COUNT, MAX_METROPLEX_SOCKET_INNACTIVE_TIME, MAX_PAGEVISIT_EVENTS, MAX_PAGEVISIT_PARTS, MAX_PAGEVISIT_VISITED, MAX_RECORDER_EVENT_BUFFER, MAX_STRING_LENGTH, MAX_TIME_FOR_RECORDER_USER_EVENTS, MAX_TIME_FOR_UNSENT_DATA_MILLIS, META_DATA_METROPLEX_TYPE, METROPLEX_ERROR_ROUTE, METROPLEX_FRAG_ROUTE, METROPLEX_FULL_PV_ROUTE, METROPLEX_METRICS_ROUTE, METROPLEX_RETRY_FREQUENCY, METROPLEX_SOCKET_INSTANCE_ID_ATT_NAME, NOIBUJS_SDK_ADD_ERROR_FROM_JS_FMW_FUNCTION, NOIBUJS_SDK_ADD_ERROR_FUNCTION, NOIBUJS_SDK_ADD_ID_FUNCTION, NOIBUJS_SDK_REQUEST_HELP_CODE, NOIBU_BROWSER_ID_KYWRD, NOIBU_INPUT_URLS, NOIBU_LOCAL_STORAGE_TEST_KEY, NOIBU_STORED_PAGE_VISIT, OCCURRED_AT_ATT_NAME, OK_SOCKET_MESSAGE, ON_URL_ATT_NAME, PAGE_EVENTS_DOCUMENT, PAGE_EVENTS_WINDOW, PAGE_EVENT_TYPE, PAGE_VISIT_HTTP_DATA_ATT_NAME, PAGE_VISIT_INFORMATION_ATT_NAME, PAGE_VISIT_META_DATA_ATT_NAME, PAGE_VISIT_PART_ATT_NAME, PAGE_VISIT_VID_FRAG_ATT_NAME, PII_DIGIT_PATTERN, PII_EMAIL_PATTERN, PII_REDACTION_REPLACEMENT_STRING, POST_METRICS_EVENT_NAME, PV_CLICKS_ATT_NAME, PV_EVENTS_ATT_NAME, PV_EXP_HTTP_DATA_SEQ_ATT_NAME, PV_EXP_PART_COUNTER_ATT_NAME, PV_EXP_VF_SEQ_ATT_NAME, PV_HTTP_PAYLOADS_COLLECTED_ATT_NAME, PV_HTTP_PAYLOADS_DROPPED_OVERSIZE_ATT_NAME, PV_HTTP_PAYLOADS_DROPPED_TYPE_ATT_NAME, PV_HTTP_REQUESTS_DROPPED_OVER_LIMIT, PV_ID_ATT_NAME, PV_METROPLEX_TYPE, PV_PART_COUNTER_ATT_NAME, PV_SEQ_ATT_NAME, PV_SEQ_NUM_RESET_TIME_MINUTES, REF_URL_ATT_NAME, REQUIRED_DATA_PROCESSING_URLS, RESPONSE_ERROR_TYPE, SCRIPT_ID_ATT_NAME, SCRIPT_INSTANCE_ID_ATT_NAME, SEQ_NUM_ATT_NAME, SEVERITY, SOCKET_INSTANCE_ID_ATT_NAME, SOURCE_ATT_NAME, STACK_TRACE_SANITIZE_REGEXP, STARTED_AT_ATT_NAME, STOP_STORING_PV_SOCKET_MESSAGE, STOP_STORING_VID_SOCKET_MESSAGE, TAGNAME_ATT_NAME, TEXT_ATT_NAME, TYPE_ATT_NAME, URL_ATT_NAME, USERSTEP_EVENT_TYPE, VER_ATT_NAME, VIDEO_CLICKS_ATT_NAME, VIDEO_FRAG_ATT_NAME, VIDEO_METROPLEX_TYPE, VIDEO_PART_COUNT_ATT_NAME, VIDEO_RECORDER_ATT_NAME, WHITELIST_HTML_ID_TEXT_REGEX, WORK_REQUEST_ATT_NAME, WRAPPED_EXCEPTION_ERROR_TYPE, XML_HTTP_REQUEST_ERROR_TYPE };
464
+ export { APP_NAVIGATION_EVENT_TYPE, BLOCKED_HTTP_HEADER_KEYS, BLOCKLISTED_DOMAINS, BLOCK_SOCKET_MESSAGE, BODY_USED_ERROR, BROWSER_ID_ATT_NAME, CLICK_EVENT_TYPE, CLIENT_LOCK_TIME_MINUTES, CLOSE_CONNECTION_FORCEFULLY, COLLECT_VER_ATT_NAME, CONN_COUNT_ATT_NAME, CONSOLE_FUNCTION_OVERRIDES, CONTENT_LENGTH, CONTENT_TYPE, CSS_CLASS_ATT_NAME, CSS_URLS_ATT_NAME, CURRENT_METRICS_VERSION, CURRENT_NOIBUJS_VERSION, CURRENT_PV_VERSION, CUSTOM_ERROR_EVENT_TYPE, CUSTOM_ID_NAME_TYPE, CUSTOM_ID_VALUE_TYPE, DEFAULT_STACK_FRAME_FIELD_VALUE, DEFAULT_WEBSITE_SUBDOMAIN_PATTERN, DID_CUT_PV_ATT_NAME, DID_CUT_VID_ATT_NAME, DID_START_VID_ATT_NAME, ECOMMERCE_EVENT_TYPE, END_AT_ATT_NAME, ERROR_EVENT_ERROR_TYPE, ERROR_EVENT_TYPE, ERROR_EVENT_UNHANDLED_REJECTION_TYPE, ERROR_LOG_EVENT_ERROR_TYPE, ERROR_SOURCE_ATT_NAME, ERR_COUNT_EXPECTED_ATT_NAME, EVENT_ERROR_TYPE, EXP_VIDEO_LENGTH_ATT_NAME, FETCH_EXCEPTION_ERROR_TYPE, GET_DEVICE_ENV, GET_MAX_METROPLEX_RECONNECTION_NUMBER, GET_METROPLEX_BASE_HTTP_URL, GET_METROPLEX_BASE_SOCKET_URL, GET_METROPLEX_CONSECUTIVE_CONNECTION_DELAY, GET_METROPLEX_METRICS_URL, GET_METROPLEX_POST_URL, GET_SCRIPT_ID, GQL_ERROR_ATT_NAME, GQL_ERROR_TYPE, GQL_EVENT_TYPE, HELP_CODE_ATT_NAME, HTMLID_ATT_NAME, HTTP_BODY_DROPPED_LENGTH_MSG, HTTP_BODY_DROPPED_TYPE_MSG, HTTP_BODY_NULL_STRING, HTTP_CODE_ATT_NAME, HTTP_COUNT_EXPECTED_ATT_NAME, HTTP_DATA_METROPLEX_TYPE, HTTP_DATA_PAYLOAD_ATT_NAME, HTTP_DATA_REQ_HEADERS_ATT_NAME, HTTP_DATA_RESP_HEADERS_ATT_NAME, HTTP_DATA_RESP_PAYLOAD_ATT_NAME, HTTP_EVENT_TYPE, HTTP_METHOD_ATT_NAME, HTTP_PII_BLOCKING_PATTERNS, HTTP_RESP_CODE_ATT_NAME, HTTP_RESP_LENGTH_ATT_NAME, HTTP_RESP_TIME_ATT_NAME, HUMAN_READABLE_CONTENT_TYPE_REGEX, IS_LAST_ATT_NAME, IS_NJS_VERSION_BETA, JS_ENV, JS_ERROR_ATT_NAME, JS_EVENT_TYPE, JS_STACK_FILE_ATT_NAME, JS_STACK_FRAMES_ATT_NAME, JS_STACK_LINE_ATT_NAME, JS_STACK_MESSAGE_ATT_NAME, JS_STACK_METHOD_ATT_NAME, KEYBOARD_EVENT_TYPE, LENGTH_ATT_NAME, LOCATION_EVENT_TYPE, MAX_BEACON_PAYLOAD_SIZE, MAX_COLLECT_ERROR_LOG, MAX_CUSTOM_ERRORS_PER_PAGEVISIT, MAX_CUSTOM_IDS_PER_PAGEVISIT, MAX_FRAMES_IN_ARRAY, MAX_HTTP_DATA_EVENT_COUNT, MAX_HTTP_DATA_IF_ERROR_EVENT_COUNT, MAX_HTTP_DATA_PAYLOAD_LENGTH, MAX_METROPLEX_CONNECTION_COUNT, MAX_METROPLEX_SOCKET_INNACTIVE_TIME, MAX_PAGEVISIT_EVENTS, MAX_PAGEVISIT_PARTS, MAX_PAGEVISIT_VISITED, MAX_RECORDER_EVENT_BUFFER, MAX_STRING_LENGTH, MAX_SUCCESS_HTTP_DATA_PAYLOAD_LENGTH, MAX_TIME_FOR_RECORDER_USER_EVENTS, MAX_TIME_FOR_UNSENT_DATA_MILLIS, META_DATA_METROPLEX_TYPE, METROPLEX_ERROR_ROUTE, METROPLEX_FRAG_ROUTE, METROPLEX_FULL_PV_ROUTE, METROPLEX_METRICS_ROUTE, METROPLEX_RETRY_FREQUENCY, METROPLEX_SOCKET_INSTANCE_ID_ATT_NAME, NETWORK_STATS_EVENT_TYPE, NOIBUJS_SDK_ADD_ERROR_FROM_JS_FMW_FUNCTION, NOIBUJS_SDK_ADD_ERROR_FUNCTION, NOIBUJS_SDK_ADD_ID_FUNCTION, NOIBUJS_SDK_REQUEST_HELP_CODE, NOIBU_BROWSER_ID_KYWRD, NOIBU_INPUT_URLS, NOIBU_LOCAL_STORAGE_TEST_KEY, NOIBU_STORED_PAGE_VISIT, OCCURRED_AT_ATT_NAME, OK_SOCKET_MESSAGE, ON_URL_ATT_NAME, PAGE_EVENTS_DOCUMENT, PAGE_EVENTS_WINDOW, PAGE_EVENT_TYPE, PAGE_TYPE_EVENT_TYPE, PAGE_VISIT_HTTP_DATA_ATT_NAME, PAGE_VISIT_INFORMATION_ATT_NAME, PAGE_VISIT_META_DATA_ATT_NAME, PAGE_VISIT_PART_ATT_NAME, PAGE_VISIT_VID_FRAG_ATT_NAME, PII_DIGIT_PATTERN, PII_EMAIL_PATTERN, PII_REDACTION_REPLACEMENT_STRING, POST_METRICS_EVENT_NAME, PV_CLICKS_ATT_NAME, PV_EVENTS_ATT_NAME, PV_EXP_HTTP_DATA_SEQ_ATT_NAME, PV_EXP_PART_COUNTER_ATT_NAME, PV_EXP_VF_SEQ_ATT_NAME, PV_HTTP_PAYLOADS_COLLECTED_ATT_NAME, PV_HTTP_PAYLOADS_DROPPED_OVERSIZE_ATT_NAME, PV_HTTP_PAYLOADS_DROPPED_TYPE_ATT_NAME, PV_HTTP_REQUESTS_DROPPED_OVER_LIMIT, PV_ID_ATT_NAME, PV_METROPLEX_TYPE, PV_PART_COUNTER_ATT_NAME, PV_SEQ_ATT_NAME, PV_SEQ_NUM_RESET_TIME_MINUTES, REF_URL_ATT_NAME, REQUIRED_DATA_PROCESSING_URLS, RESPONSE_ERROR_TYPE, SCRIPT_ID_ATT_NAME, SCRIPT_INSTANCE_ID_ATT_NAME, SEQ_NUM_ATT_NAME, SEVERITY, SOCKET_INSTANCE_ID_ATT_NAME, SOURCE_ATT_NAME, STACK_TRACE_SANITIZE_REGEXP, STARTED_AT_ATT_NAME, STOP_STORING_PV_SOCKET_MESSAGE, STOP_STORING_VID_SOCKET_MESSAGE, TAGNAME_ATT_NAME, TEXT_ATT_NAME, TITLE_EVENT_TYPE, TYPE_ATT_NAME, URL_ATT_NAME, USERSTEP_EVENT_TYPE, VER_ATT_NAME, VIDEO_CLICKS_ATT_NAME, VIDEO_FRAG_ATT_NAME, VIDEO_METROPLEX_TYPE, VIDEO_PART_COUNT_ATT_NAME, VIDEO_RECORDER_ATT_NAME, WHITELIST_HTML_ID_TEXT_REGEX, WORK_REQUEST_ATT_NAME, WRAPPED_EXCEPTION_ERROR_TYPE, XML_HTTP_REQUEST_ERROR_TYPE };
@@ -1,3 +1,4 @@
1
+ import { __awaiter } from 'tslib';
1
2
  import uuid from 'react-native-uuid';
2
3
  import { KeyboardInputMonitor } from '../monitors/keyboardInputMonitor.js';
3
4
  import { ClickMonitor } from '../monitors/clickMonitor.js';
@@ -5,7 +6,7 @@ import { PageMonitor } from '../monitors/pageMonitor.js';
5
6
  import { HTTPDataBundler } from '../monitors/httpDataBundler.js';
6
7
  import { monitorErrors } from '../monitors/errorMonitor.js';
7
8
  import { monitorRequests } from '../monitors/requestMonitor.js';
8
- import { GET_METROPLEX_BASE_SOCKET_URL, GET_METROPLEX_BASE_HTTP_URL, SEVERITY, METROPLEX_ERROR_ROUTE } from '../constants.js';
9
+ import { GET_METROPLEX_BASE_SOCKET_URL, GET_METROPLEX_BASE_HTTP_URL, METROPLEX_ERROR_ROUTE, SEVERITY } from '../constants.js';
9
10
  import ClientConfig from '../api/clientConfig.js';
10
11
  import { isInvalidURLConfig, isNoibuJSAlreadyLoaded } from '../utils/function.js';
11
12
  import { PageVisit } from '../pageVisit/pageVisit.js';
@@ -16,7 +17,6 @@ import { AppNavigationMonitor } from '../monitors/appNavigationMonitor.js';
16
17
  import { noibuLog } from '../utils/log.js';
17
18
  import SessionRecorder from '../sessionRecorder/sessionRecorder.js';
18
19
 
19
- /** @module Init */
20
20
  // these are set via rollup
21
21
  const urlConfig = {
22
22
  metroplexSocketBase: GET_METROPLEX_BASE_SOCKET_URL(),
@@ -25,64 +25,66 @@ const urlConfig = {
25
25
  /**
26
26
  * initilializes the script to start executing all of NJS features
27
27
  */
28
- async function globalInit(customerConfig) {
29
- noibuLog('global init started');
30
- // if the config url is invalid we block collect from executing
31
- if (isInvalidURLConfig({ ...urlConfig, domain: customerConfig.domain })) {
32
- noibuLog('exiting');
33
- return;
34
- }
35
- // ensure only one copy of NoibuJS is running at a time
36
- if (isNoibuJSAlreadyLoaded()) {
37
- noibuLog('exiting');
38
- return;
39
- }
40
- const noibuErrorURL = `${urlConfig.metroplexHTTPBase}/${METROPLEX_ERROR_ROUTE}`;
41
- // catch any errors that happened during initialization and send collect error
42
- try {
43
- await ClientConfig.configureInstance({
44
- noibuErrorURL,
45
- customerConfig,
46
- });
47
- // create an instance ID for this script
48
- const instanceId = uuid.v4();
49
- // verifying if collect was disabled by other microservices
50
- if (ClientConfig.getInstance().isClientDisabled) {
51
- noibuLog('client disabled, exiting');
28
+ function globalInit(customerConfig) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ noibuLog('global init started');
31
+ // if the config url is invalid we block collect from executing
32
+ if (isInvalidURLConfig(Object.assign(Object.assign({}, urlConfig), { domain: customerConfig.domain }))) {
33
+ noibuLog('exiting');
52
34
  return;
53
35
  }
54
- HelpCode.getInstance();
55
- // Call MetroplexSocket getInstance to have it setup the socket before anything
56
- // else accesses it
57
- const metroplexSocket = MetroplexSocket.getInstance(instanceId);
58
- PageVisit.configureInstance();
59
- // Call the stored page visit get instance, so we post the previous page visit right away
60
- StoredPageVisit.getInstance();
61
- // singleton monitors
62
- const keyboardInputMonitor = new KeyboardInputMonitor();
63
- const clickMonitor = ClickMonitor.getInstance();
64
- const pageMonitor = PageMonitor.getInstance();
65
- AppNavigationMonitor.getInstance();
66
- HTTPDataBundler.getInstance();
67
- // monitoring calls
68
- monitorErrors();
69
- monitorRequests();
70
- clickMonitor.monitorClicks();
71
- keyboardInputMonitor.monitor();
72
- pageMonitor.monitor();
73
- SessionRecorder.getInstance().recordUserSession();
74
- if (metroplexSocket.connectionPromise) {
75
- metroplexSocket.connectionPromise.catch((e) => ClientConfig.getInstance().postNoibuErrorAndOptionallyDisableClient(`Error during metroplexSocket initial connection: ${e}`, false, SEVERITY.error));
36
+ // ensure only one copy of NoibuJS is running at a time
37
+ if (isNoibuJSAlreadyLoaded()) {
38
+ noibuLog('exiting');
39
+ return;
40
+ }
41
+ const noibuErrorURL = `${urlConfig.metroplexHTTPBase}/${METROPLEX_ERROR_ROUTE}`;
42
+ // catch any errors that happened during initialization and send collect error
43
+ try {
44
+ yield ClientConfig.configureInstance({
45
+ noibuErrorURL,
46
+ customerConfig,
47
+ });
48
+ // create an instance ID for this script
49
+ const instanceId = uuid.v4();
50
+ // verifying if collect was disabled by other microservices
51
+ if (ClientConfig.getInstance().isClientDisabled) {
52
+ noibuLog('client disabled, exiting');
53
+ return;
54
+ }
55
+ HelpCode.getInstance();
56
+ // Call MetroplexSocket getInstance to have it setup the socket before anything
57
+ // else accesses it
58
+ const metroplexSocket = MetroplexSocket.getInstance(instanceId);
59
+ PageVisit.configureInstance();
60
+ // Call the stored page visit get instance, so we post the previous page visit right away
61
+ StoredPageVisit.getInstance();
62
+ // singleton monitors
63
+ const keyboardInputMonitor = new KeyboardInputMonitor();
64
+ const clickMonitor = ClickMonitor.getInstance();
65
+ const pageMonitor = PageMonitor.getInstance();
66
+ AppNavigationMonitor.getInstance();
67
+ HTTPDataBundler.getInstance();
68
+ // monitoring calls
69
+ monitorErrors();
70
+ monitorRequests();
71
+ clickMonitor.monitorClicks();
72
+ keyboardInputMonitor.monitor();
73
+ pageMonitor.monitor();
74
+ SessionRecorder.getInstance().recordUserSession();
75
+ if (metroplexSocket.connectionPromise) {
76
+ metroplexSocket.connectionPromise.catch((e) => ClientConfig.getInstance().postNoibuErrorAndOptionallyDisableClient(`Error during metroplexSocket initial connection: ${e}`, false, SEVERITY.error));
77
+ }
78
+ else {
79
+ throw new Error('metroplex socket not ready');
80
+ }
81
+ noibuLog('global init finished');
76
82
  }
77
- else {
78
- throw new Error('metroplex socket not ready');
83
+ catch (err) {
84
+ ClientConfig.getInstance().postNoibuErrorAndOptionallyDisableClient(`Error during globalInit: ${err}`, true, SEVERITY.error);
85
+ noibuLog('exiting');
79
86
  }
80
- noibuLog('global init finished');
81
- }
82
- catch (err) {
83
- ClientConfig.getInstance().postNoibuErrorAndOptionallyDisableClient(`Error during globalInit: ${err}`, true, SEVERITY.error);
84
- noibuLog('exiting');
85
- }
87
+ });
86
88
  }
87
89
 
88
90
  export { globalInit as default };
@@ -7,16 +7,15 @@ import ClientConfig from '../api/clientConfig.js';
7
7
  * Attaches corresponding listener to the passed navigation integration
8
8
  */
9
9
  class AppNavigationMonitor {
10
- static instance;
11
10
  /**
12
11
  * guesses which navigation is used in app, and registers a listener if found
13
12
  */
14
13
  constructor() {
15
14
  this.onNavigation = this.onNavigation.bind(this);
16
15
  try {
17
- // eslint-disable-next-line global-require,@typescript-eslint/no-var-requires,import/no-extraneous-dependencies,import/no-unresolved
16
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
18
17
  const Navigation = require('react-native-navigation');
19
- const rnNavigation = Navigation?.Navigation;
18
+ const rnNavigation = Navigation === null || Navigation === void 0 ? void 0 : Navigation.Navigation;
20
19
  if (rnNavigation) {
21
20
  new ReactNativeNavigationIntegration().register(rnNavigation, this.onNavigation);
22
21
  }
@@ -77,7 +77,6 @@ class ClickMonitor {
77
77
  // if the tag name of the src element is image, then we need
78
78
  // to process the image name, else we need to get the textual content
79
79
  // todo process images
80
-
81
80
  text = this._getTextualContentFromEl(target);
82
81
 
83
82
  let textFromElement = this._trimText(text);
@@ -197,16 +196,24 @@ class ClickMonitor {
197
196
  return `${text}${text ? ' ' : ''}*`;
198
197
  }
199
198
 
199
+ // eslint-disable-next-line require-jsdoc
200
200
  const walk = node => {
201
- if (typeof node.memoizedProps === 'string') {
202
- text = this._parseAndAppendText(text, [node.memoizedProps]);
203
- if (text.length >= textLimit) {
204
- return;
205
- }
206
- }
207
- if (node.child) {
208
- walk(node.child);
201
+ // Check if the node is a Text element
202
+ if (
203
+ node.elementType &&
204
+ node.elementType.displayName === 'Text' &&
205
+ node.memoizedProps &&
206
+ typeof node.memoizedProps.children === 'string'
207
+ ) {
208
+ text = this._parseAndAppendText(text, [node.memoizedProps.children]);
209
+ if (text.length >= textLimit) return;
209
210
  }
211
+
212
+ // If the node has children, traverse them
213
+ if (node.child) walk(node.child);
214
+
215
+ // After traversing children, traverse siblings
216
+ if (node.sibling) walk(node.sibling);
210
217
  };
211
218
  walk(element);
212
219
 
@@ -5,6 +5,15 @@ import { replace } from '../utils/object.js';
5
5
 
6
6
  /* eslint-disable @typescript-eslint/ban-types,prefer-arrow-callback */
7
7
  /** @module ErrorMonitor */
8
+ let ignoreError = 0;
9
+ /**
10
+ * returns boolean that indicates wether we should
11
+ * ignore the next error event caught by the error event
12
+ * listener.
13
+ */
14
+ function shouldIgnoreError() {
15
+ return ignoreError > 0;
16
+ }
8
17
  /**
9
18
  * transform a log into an error since React hides component errors
10
19
  * tps://reactjs.org/docs/error-boundaries.html
@@ -137,8 +146,9 @@ function onPromiseRejectionHandler(error) {
137
146
  saveErrorToPagevisit(ERROR_EVENT_UNHANDLED_REJECTION_TYPE, payload);
138
147
  }
139
148
  function configureHermesHooks() {
140
- if (global.HermesInternal) {
141
- global.HermesInternal.enablePromiseRejectionTracker?.({
149
+ var _a;
150
+ if (typeof HermesInternal !== 'undefined' && HermesInternal !== null) {
151
+ (_a = HermesInternal.enablePromiseRejectionTracker) === null || _a === void 0 ? void 0 : _a.call(HermesInternal, {
142
152
  allRejections: true,
143
153
  });
144
154
  /**
@@ -155,16 +165,28 @@ function configureHermesHooks() {
155
165
  else {
156
166
  onPromiseRejectionHandler(new Error(asString(error)));
157
167
  }
158
- return originalFunction?.(promise, error);
168
+ return originalFunction === null || originalFunction === void 0 ? void 0 : originalFunction(promise, error);
159
169
  });
160
170
  }
161
171
  }
172
+ /**
173
+ * Handles a single error event
174
+ */
175
+ function onErrorHandler(error) {
176
+ if (!error || shouldIgnoreError()) {
177
+ return;
178
+ }
179
+ saveErrorToPagevisit(ERROR_EVENT_ERROR_TYPE, {
180
+ error,
181
+ });
182
+ }
162
183
  function configureErrorUtilsHandler() {
163
- const existingHandler = global.ErrorUtils.getGlobalHandler() || (() => { });
164
- global.ErrorUtils.setGlobalHandler((error, ...rest) => {
165
- saveErrorToPagevisit(ERROR_EVENT_ERROR_TYPE, {
166
- error,
167
- });
184
+ if (typeof ErrorUtils === 'undefined') {
185
+ return;
186
+ }
187
+ const existingHandler = ErrorUtils.getGlobalHandler() || (() => { });
188
+ ErrorUtils.setGlobalHandler((error, ...rest) => {
189
+ onErrorHandler(error);
168
190
  return existingHandler(error, ...rest);
169
191
  });
170
192
  }
@@ -20,9 +20,9 @@ class GqlErrorValidator {
20
20
  /**
21
21
  * Retrieves GQL error object based on fetch request/response
22
22
  * @param {String} url
23
- * @param {{}} options
24
- * @param {Request} request
25
- * @param {Response} response - cloned() from original response
23
+ * @param {{}} [options]
24
+ * @param {Request} [request]
25
+ * @param {Response} [response] - cloned() from original response
26
26
  */
27
27
  static async fromFetch(url, options, request, response) {
28
28
  try {
@@ -106,7 +106,7 @@ class GqlErrorValidator {
106
106
  /**
107
107
  * Try to get content type for fetch arguments
108
108
  * @param {{}} options
109
- * @param {Request} request
109
+ * @param {Request} [request]
110
110
  */
111
111
  static _getContentTypeFromFetchArguments(options, request) {
112
112
  let headers = null;