noibu-react-native 0.0.1 → 0.0.2

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.
package/README.md CHANGED
@@ -29,12 +29,14 @@ npm install noibu-react-native --save
29
29
 
30
30
  ## Usage
31
31
 
32
- Wrap your root App component into SDK ErrorBoundary:
32
+ Call a setup method and wrap your root App component into SDK ErrorBoundary:
33
33
 
34
34
  ```jsx
35
35
  import React from 'react';
36
36
  import { View, Text } from 'react-native';
37
- import { ErrorBoundary } from 'noibu-react-native';
37
+ import { ErrorBoundary, setupNoibu } from 'noibu-react-native';
38
+
39
+ setupNoibu({ domain: 'react-native-app.myshop.com' })
38
40
 
39
41
  export default function App() {
40
42
  return (
@@ -53,7 +55,7 @@ export default function App() {
53
55
  }
54
56
  ```
55
57
 
56
- That's it! First time the module is imported, it runs an init and starts listening to errors.
58
+ That's it! First time the module is set up, it runs an init and starts listening to errors.
57
59
 
58
60
  ## Configuration
59
61
 
@@ -1,6 +1,6 @@
1
1
  import uuid from 'react-native-uuid';
2
2
  import { MAX_METROPLEX_SOCKET_INNACTIVE_TIME, DISABLED_STATUS_KEY, CLIENT_UNLOCK_TIME_KEY, SEVERITY_WARN, LAST_ACTIVE_TIME_KEY, CURRENT_PAGE_VISIT_COUNT_KEY, NOIBU_BROWSER_ID_KYWRD, BROWSER_ID_KEY, PV_SEQ_NUM_RESET_TIME_MINUTES, SEVERITY_ERROR, JS_ENV, PAGE_VISIT_ID_KEY, MAX_PAGEVISIT_VISITED, CLIENT_LOCK_TIME_MINUTES, GET_SCRIPT_ID, MAX_COLLECT_ERROR_LOG } from '../constants.js';
3
- import { stringifyJSON, getUserAgent, asString, makeRequest } from '../utils/function.js';
3
+ import { stringifyJSON, getUserAgent, asString, getProperGlobalUrl, makeRequest } from '../utils/function.js';
4
4
  import Storage from '../storage/storage.js';
5
5
 
6
6
  /** @module ClientConfig */
@@ -14,9 +14,10 @@ import Storage from '../storage/storage.js';
14
14
  class ClientConfig {
15
15
  /**
16
16
  * Creates a ClientConfig singleton instance
17
- * @param {} noibuErrorURL
17
+ * @param {string} noibuErrorURL
18
+ * @param {string} customerDomain
18
19
  */
19
- constructor(noibuErrorURL) {
20
+ constructor(noibuErrorURL, customerDomain) {
20
21
  // sets up this.browserId, this.disabledStatus
21
22
  this.pageVisitId = uuid.v4();
22
23
  // variables stored in storage
@@ -36,16 +37,18 @@ class ClientConfig {
36
37
  // variables for checking if the socket is inactive
37
38
  // used a class variables in order to be changed in testing
38
39
  this.maxSocketInactiveTime = MAX_METROPLEX_SOCKET_INNACTIVE_TIME;
40
+
41
+ this.customerDomain = customerDomain;
39
42
  }
40
43
 
41
44
  /** Configures the singleton instance */
42
- static configureInstance(noibuErrorURL) {
45
+ static configureInstance({ noibuErrorURL, customerDomain }) {
43
46
  if (!this.instance) {
44
47
  // Set this.noibuErrorURL preemptively in case ClientConfig isn't able to be
45
48
  // configured properly and throws an error.
46
49
  // This will ensure we get the expected error POST request at the correct URL.
47
50
  this.noibuErrorURL = noibuErrorURL;
48
- this.instance = new ClientConfig(noibuErrorURL);
51
+ this.instance = new ClientConfig(noibuErrorURL, customerDomain);
49
52
  this.instance.noibuErrorURL = noibuErrorURL;
50
53
  }
51
54
  }
@@ -365,15 +368,24 @@ class ClientConfig {
365
368
  }
366
369
 
367
370
  const errorContent = {
368
- url: (global.location && global.location.href) || '',
371
+ url: getProperGlobalUrl(),
369
372
  err_msg: errMsg,
370
373
  sev: severity,
371
374
  };
372
375
  const headers = {
373
376
  'content-type': 'application/json',
377
+ 'User-Agent': await getUserAgent(),
374
378
  };
375
379
 
376
- if (!keepAlive) {
380
+ if (keepAlive) {
381
+ global.fetch(this.noibuErrorURL, {
382
+ method: 'POST',
383
+ headers,
384
+ body: stringifyJSON(errorContent),
385
+ // keep alive outlives the current page, its the same as beacon
386
+ keepalive: true,
387
+ });
388
+ } else {
377
389
  makeRequest(
378
390
  'POST',
379
391
  this.noibuErrorURL,
@@ -384,14 +396,6 @@ class ClientConfig {
384
396
  ).catch(() => {
385
397
  // we do nothing and let this error silently fail
386
398
  });
387
- } else {
388
- fetch(this.noibuErrorURL, {
389
- method: 'POST',
390
- headers,
391
- body: stringifyJSON(errorContent),
392
- // keep alive outlives the current page, its the same as beacon
393
- keepalive: true,
394
- });
395
399
  }
396
400
 
397
401
  // only increment if this was an actual error, not a warning or otherwise
@@ -1,7 +1,7 @@
1
1
  import uuid from 'react-native-uuid';
2
- import { getProperGlobalUrl, getMaxSubstringAllowed, getUserAgent, stringifyJSON, getUserLanguage } from '../utils/function.js';
2
+ import { getProperGlobalUrl, getUserAgent, stringifyJSON, getUserLanguage } from '../utils/function.js';
3
3
  import { addSafeEventListener } from '../utils/eventlistener.js';
4
- import { GET_METROPLEX_BASE_SOCKET_URL, METROPLEX_FRAG_ROUTE, GET_METROPLEX_POST_URL, METROPLEX_RETRY_FREQUENCY, META_DATA_METROPLEX_TYPE, PAGE_VISIT_META_DATA_ATT_NAME, HTTP_DATA_METROPLEX_TYPE, PAGE_VISIT_HTTP_DATA_ATT_NAME, VIDEO_METROPLEX_TYPE, PAGE_VISIT_VID_FRAG_ATT_NAME, PV_METROPLEX_TYPE, PAGE_VISIT_PART_ATT_NAME, SEQ_NUM_ATT_NAME, WORK_REQUEST_ATT_NAME, PV_EVENTS_ATT_NAME, TYPE_ATT_NAME, USERSTEP_EVENT_TYPE, GET_MAX_METROPLEX_RECONNECTION_NUMBER, MAX_METROPLEX_CONNECTION_COUNT, GET_METROPLEX_CONSECUTIVE_CONNECTION_DELAY, END_AT_ATT_NAME, SEVERITY_ERROR, OK_SOCKET_MESSAGE, CLOSE_CONNECTION_FORCEFULLY, BLOCK_SOCKET_MESSAGE, STOP_STORING_PV_SOCKET_MESSAGE, STOP_STORING_VID_SOCKET_MESSAGE, MAX_BEACON_PAYLOAD_SIZE, PAGE_VISIT_INFORMATION_ATT_NAME, VIDEO_PART_COUNT_ATT_NAME, IS_LAST_ATT_NAME, SEVERITY_WARN, JS_ENV, BROWSER_ID_ATT_NAME, PV_ID_ATT_NAME, VER_ATT_NAME, CURRENT_PV_VERSION, PV_SEQ_ATT_NAME, ON_URL_ATT_NAME, REF_URL_ATT_NAME, STARTED_AT_ATT_NAME, CONN_COUNT_ATT_NAME, COLLECT_VER_ATT_NAME, CURRENT_NOIBUJS_VERSION, SCRIPT_ID_ATT_NAME, GET_SCRIPT_ID, SCRIPT_INSTANCE_ID_ATT_NAME, METROPLEX_SOCKET_INSTANCE_ID_ATT_NAME, SOCKET_INSTANCE_ID_ATT_NAME, LANG_ATT_NAME, HELP_CODE_ATT_NAME } from '../constants.js';
4
+ import { GET_METROPLEX_BASE_SOCKET_URL, METROPLEX_FRAG_ROUTE, GET_METROPLEX_POST_URL, METROPLEX_RETRY_FREQUENCY, META_DATA_METROPLEX_TYPE, PAGE_VISIT_META_DATA_ATT_NAME, HTTP_DATA_METROPLEX_TYPE, PAGE_VISIT_HTTP_DATA_ATT_NAME, VIDEO_METROPLEX_TYPE, PAGE_VISIT_VID_FRAG_ATT_NAME, PV_METROPLEX_TYPE, PAGE_VISIT_PART_ATT_NAME, SEQ_NUM_ATT_NAME, WORK_REQUEST_ATT_NAME, PV_EVENTS_ATT_NAME, TYPE_ATT_NAME, USERSTEP_EVENT_TYPE, GET_MAX_METROPLEX_RECONNECTION_NUMBER, MAX_METROPLEX_CONNECTION_COUNT, GET_METROPLEX_CONSECUTIVE_CONNECTION_DELAY, END_AT_ATT_NAME, SEVERITY_ERROR, OK_SOCKET_MESSAGE, CLOSE_CONNECTION_FORCEFULLY, BLOCK_SOCKET_MESSAGE, STOP_STORING_PV_SOCKET_MESSAGE, STOP_STORING_VID_SOCKET_MESSAGE, MAX_BEACON_PAYLOAD_SIZE, PAGE_VISIT_INFORMATION_ATT_NAME, VIDEO_PART_COUNT_ATT_NAME, IS_LAST_ATT_NAME, SEVERITY_WARN, BROWSER_ID_ATT_NAME, PV_ID_ATT_NAME, VER_ATT_NAME, CURRENT_PV_VERSION, PV_SEQ_ATT_NAME, ON_URL_ATT_NAME, REF_URL_ATT_NAME, STARTED_AT_ATT_NAME, CONN_COUNT_ATT_NAME, COLLECT_VER_ATT_NAME, CURRENT_NOIBUJS_VERSION, SCRIPT_ID_ATT_NAME, GET_SCRIPT_ID, SCRIPT_INSTANCE_ID_ATT_NAME, METROPLEX_SOCKET_INSTANCE_ID_ATT_NAME, SOCKET_INSTANCE_ID_ATT_NAME, LANG_ATT_NAME, HELP_CODE_ATT_NAME } from '../constants.js';
5
5
  import ClientConfig from './clientConfig.js';
6
6
  import StoredMetrics from './storedMetrics.js';
7
7
  import StoredPageVisit from './storedPageVisit.js';
@@ -59,10 +59,7 @@ class MetroplexSocket {
59
59
  // current page visit has the real initial onURL. Fragments and SPA's
60
60
  // can change the URL without reloading the page.
61
61
  this.initialURL = getProperGlobalUrl();
62
- this.initialReferingURL =
63
- global.document && global.document.referrer
64
- ? getMaxSubstringAllowed(global.document.referrer)
65
- : '';
62
+ this.initialReferingURL = '';
66
63
  this.sessionTimestamp = new Date();
67
64
 
68
65
  // latest time that we received a confirmation message from metroplex
@@ -765,30 +762,23 @@ class MetroplexSocket {
765
762
  * will send a message to metroplex via a post request that will outlive the current page
766
763
  * @param {} msg
767
764
  */
768
- postMessage(msg) {
765
+ async postMessage(msg) {
769
766
  const updatedMsg = msg;
770
767
 
771
768
  // ensure a unique video part number each call
772
769
  updatedMsg[VIDEO_PART_COUNT_ATT_NAME] += 1;
773
770
 
774
- // we use the beacon api in testing since the version of chromium we are using
775
- // does not support the keepalive flag
776
- if (JS_ENV() === 'test') {
777
- navigator.sendBeacon(this.postURL, stringifyJSON(updatedMsg));
778
- // we only write to the pv route if the fetch api is enabled in the current browser
779
- // and we need to fetch api to set the application/json header for metroplex
780
- } else if (global.fetch) {
781
- // we send the remainder elements
782
- fetch(this.postURL, {
783
- method: 'POST',
784
- headers: {
785
- 'content-type': 'application/json',
786
- },
787
- body: stringifyJSON(updatedMsg),
788
- // keep alive outlives the current page, its the same as beacon
789
- keepalive: true,
790
- });
791
- }
771
+ // we send the remainder elements
772
+ global.fetch(this.postURL, {
773
+ method: 'POST',
774
+ headers: {
775
+ 'content-type': 'application/json',
776
+ 'User-Agent': await getUserAgent(),
777
+ },
778
+ body: stringifyJSON(updatedMsg),
779
+ // keep alive outlives the current page, its the same as beacon
780
+ keepalive: true,
781
+ });
792
782
  }
793
783
 
794
784
  /**
@@ -1,13 +1,13 @@
1
1
  import { BROWSER_ID_ATT_NAME, PV_ID_ATT_NAME, COLLECT_VER_ATT_NAME, CURRENT_NOIBUJS_VERSION, VER_ATT_NAME, CURRENT_METRICS_VERSION, EXP_VIDEO_LENGTH_ATT_NAME, PV_EXP_VF_SEQ_ATT_NAME, PV_EXP_PART_COUNTER_ATT_NAME, PV_EXP_HTTP_DATA_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, VIDEO_CLICKS_ATT_NAME, PV_CLICKS_ATT_NAME, DID_CUT_PV_ATT_NAME, DID_CUT_VID_ATT_NAME, DID_START_VID_ATT_NAME, HTTP_COUNT_EXPECTED_ATT_NAME, ERR_COUNT_EXPECTED_ATT_NAME, ON_URL_ATT_NAME, GET_METROPLEX_METRICS_URL } from '../constants.js';
2
2
  import ClientConfig from './clientConfig.js';
3
- import { stringifyJSON } from '../utils/function.js';
3
+ import { getProperGlobalUrl, getUserAgent, stringifyJSON } from '../utils/function.js';
4
4
  import { addSafeEventListener } from '../utils/eventlistener.js';
5
5
 
6
6
  /** @module StoredMetrics */
7
7
 
8
8
  /**
9
9
  * This class holds the final page visit and video frag metrics. It flushes
10
- * them to local storage and then finally sends them to Metroplex via the post
10
+ * them to storage and then finally sends them to Metroplex via the post
11
11
  * route when the next page is loaded
12
12
  */
13
13
  class StoredMetrics {
@@ -35,7 +35,10 @@ class StoredMetrics {
35
35
  this._setupListeners();
36
36
  }
37
37
 
38
- /** gets the singleton instance */
38
+ /**
39
+ * gets the singleton instance
40
+ * @returns {StoredMetrics}
41
+ */
39
42
  static getInstance() {
40
43
  if (!this.instance) {
41
44
  this.instance = new StoredMetrics();
@@ -148,9 +151,8 @@ class StoredMetrics {
148
151
  }
149
152
 
150
153
  /** posts the metrics to metroplex using the beacon API
151
- * @param {} eventName
152
154
  */
153
- postMetrics(eventName) {
155
+ async postMetrics() {
154
156
  // Create a new object to write to local storage that doesnt have the timeout and flush members.
155
157
  const lsMetrics = {
156
158
  // metadata
@@ -177,24 +179,18 @@ class StoredMetrics {
177
179
  [DID_START_VID_ATT_NAME]: this.didStartVideo,
178
180
  [HTTP_COUNT_EXPECTED_ATT_NAME]: this.httpCount,
179
181
  [ERR_COUNT_EXPECTED_ATT_NAME]: this.errCount,
180
- [ON_URL_ATT_NAME]:
181
- (global.document &&
182
- global.document.location &&
183
- global.document.location.href) ||
184
- 'http://localhost',
182
+ [ON_URL_ATT_NAME]: getProperGlobalUrl(), // todo implement navigation
185
183
  };
186
-
187
- if (global.fetch) {
188
- global.fetch(GET_METROPLEX_METRICS_URL(), {
189
- method: 'POST',
190
- headers: {
191
- 'content-type': 'application/json',
192
- },
193
- body: stringifyJSON(lsMetrics),
194
- // keep alive outlives the current page, its the same as beacon
195
- keepalive: true,
196
- });
197
- }
184
+ global.fetch(GET_METROPLEX_METRICS_URL(), {
185
+ method: 'POST',
186
+ headers: {
187
+ 'content-type': 'application/json',
188
+ 'User-Agent': await getUserAgent(),
189
+ },
190
+ body: stringifyJSON(lsMetrics),
191
+ // keep alive outlives the current page, its the same as beacon
192
+ keepalive: true,
193
+ });
198
194
  }
199
195
  }
200
196
 
@@ -26,6 +26,7 @@ export declare const HTTP_PII_BLOCKING_PATTERNS: RegExp[];
26
26
  export declare const DEFAULT_WEBSITE_SUBDOMAIN_PATTERN: RegExp;
27
27
  export declare const PII_REDACTION_REPLACEMENT_STRING: "******";
28
28
  export declare const DEFAULT_STACK_FRAME_FIELD_VALUE: "_";
29
+ export declare const DEFAULT_STACK_FRAME_FIELD_NUMERIC_VALUE = "0";
29
30
  export declare const DISABLED_STATUS_KEY: "DisabledStatus";
30
31
  export declare const CLIENT_UNLOCK_TIME_KEY: "ClientUnlockTime";
31
32
  export declare const BROWSER_ID_KEY: "BrowserId";
@@ -235,7 +236,7 @@ export declare function GET_MAX_PAGEVISIT_SIZE(): string | 20000;
235
236
  *
236
237
  * gets the attribute selectors set by the customers to match an attribute
237
238
  */
238
- export declare function GET_ATTRIBUTE_SELECTORS(): {};
239
+ export declare function GET_ATTRIBUTE_SELECTORS(): Record<string, any>;
239
240
  /**
240
241
  *
241
242
  * gets the base url for metroplex's websocket connection
package/dist/constants.js CHANGED
@@ -30,6 +30,7 @@ const PV_SEQ_NUM_RESET_TIME_MINUTES = 45;
30
30
  const REQUIRED_DATA_PROCESSING_URLS = [
31
31
  'metroplexSocketBase',
32
32
  'metroplexHTTPBase',
33
+ 'domain',
33
34
  ];
34
35
  const HTTP_BODY_DROPPED_TYPE_MSG = 'Dropped due to unsupported type.';
35
36
  const HTTP_BODY_DROPPED_LENGTH_MSG = 'Dropped due to length.';
@@ -137,39 +138,6 @@ const NOIBUJS_SDK_REQUEST_HELP_CODE = 'requestHelpCode';
137
138
  const NOIBUJS_SDK_ADD_ID_FUNCTION = 'addCustomAttribute';
138
139
  const NOIBUJS_SDK_ADD_ERROR_FUNCTION = 'addError';
139
140
  const NOIBUJS_SDK_ADD_ERROR_FROM_JS_FMW_FUNCTION = 'addJsSdkError';
140
- // event targets that we overide to wrap erors
141
- const EVENT_TARGETS = [
142
- 'Image',
143
- 'EventTarget',
144
- 'Window',
145
- 'Node',
146
- 'ApplicationCache',
147
- 'AudioTrackList',
148
- 'ChannelMergerNode',
149
- 'CryptoOperation',
150
- 'EventSource',
151
- 'FileReader',
152
- 'HTMLUnknownElement',
153
- 'IDBDatabase',
154
- 'IDBRequest',
155
- 'IDBTransaction',
156
- 'KeyOperation',
157
- 'MediaController',
158
- 'MessagePort',
159
- 'ModalWindow',
160
- 'Notification',
161
- 'SVGElementInstance',
162
- 'Screen',
163
- 'TextTrack',
164
- 'TextTrackCue',
165
- 'TextTrackList',
166
- 'WebSocket',
167
- 'WebSocketWorker',
168
- 'Worker',
169
- 'XMLHttpRequest',
170
- 'XMLHttpRequestEventTarget',
171
- 'XMLHttpRequestUpload',
172
- ];
173
141
  // will return a regex that will match
174
142
  // any keywords that may indicate that users are moving
175
143
  // forward in the sales funnel. It will match add to cart, checkout,
@@ -525,4 +493,4 @@ function JS_ENV() {
525
493
  // gets the frequency at which the client resends the message that were not confirmed by metroplex
526
494
  const METROPLEX_RETRY_FREQUENCY = 30000;
527
495
 
528
- export { ATTRIBUTE_SELECTORS_ATT_NAME, BLOCKED_HTTP_HEADER_KEYS, BLOCK_SOCKET_MESSAGE, BROWSER_ID_ATT_NAME, BROWSER_ID_KEY, CLICK_EVENT_TYPE, CLIENT_LOCK_TIME_MINUTES, CLIENT_UNLOCK_TIME_KEY, CLOSE_CONNECTION_FORCEFULLY, COLLECT_VER_ATT_NAME, CONN_COUNT_ATT_NAME, CONSOLE_FUNCTION_OVERRIDES, CONTENT_LENGTH, CONTENT_TYPE, CSS_CLASS_ATT_NAME, CURRENT_METRICS_VERSION, CURRENT_NOIBUJS_VERSION, CURRENT_PAGE_VISIT_COUNT_KEY, 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, DISABLED_STATUS_KEY, 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, EVENT_TARGETS, EXP_VIDEO_LENGTH_ATT_NAME, FETCH_EXCEPTION_ERROR_TYPE, GET_ATTRIBUTE_SELECTORS, 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_COLLECTION_FLAG_NAME, HTTP_DATA_METROPLEX_TYPE, HTTP_DATA_PAYLOAD_ATT_NAME, HTTP_DATA_PAYLOAD_URL_REGEXES_FLAG_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_COL_ATT_NAME, 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, LANG_ATT_NAME, LAST_ACTIVE_TIME_KEY, 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_PAYLOAD_LENGTH, MAX_METROPLEX_CONNECTION_COUNT, MAX_METROPLEX_SOCKET_INNACTIVE_TIME, MAX_PAGEVISIT_EVENTS, MAX_PAGEVISIT_PARTS, MAX_PAGEVISIT_VISITED, MAX_STRING_LENGTH, 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_CONFIG, 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_CONFIG_WIN_ATT_NAME, 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_ID_KEY, 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, 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, REACT_ERROR_EVENT_TYPE, 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_ERROR, SEVERITY_WARN, SOCKET_INSTANCE_ID_ATT_NAME, SOURCE_ATT_NAME, 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_METROPLEX_TYPE, VIDEO_PART_COUNT_ATT_NAME, VUE_ERROR_EVENT_TYPE, WHITELIST_HTML_ID_TEXT_REGEX, WIN_BLOCKED_SELECTOR_ATT_NAME, WIN_NJS_VERSION_ATT_NAME, WIN_SCRIPT_ID_ATT_NAME, WORK_REQUEST_ATT_NAME, WRAPPED_EXCEPTION_ERROR_TYPE, XML_HTTP_REQUEST_ERROR_TYPE };
496
+ export { ATTRIBUTE_SELECTORS_ATT_NAME, BLOCKED_HTTP_HEADER_KEYS, BLOCK_SOCKET_MESSAGE, BROWSER_ID_ATT_NAME, BROWSER_ID_KEY, CLICK_EVENT_TYPE, CLIENT_LOCK_TIME_MINUTES, CLIENT_UNLOCK_TIME_KEY, CLOSE_CONNECTION_FORCEFULLY, COLLECT_VER_ATT_NAME, CONN_COUNT_ATT_NAME, CONSOLE_FUNCTION_OVERRIDES, CONTENT_LENGTH, CONTENT_TYPE, CSS_CLASS_ATT_NAME, CURRENT_METRICS_VERSION, CURRENT_NOIBUJS_VERSION, CURRENT_PAGE_VISIT_COUNT_KEY, 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, DISABLED_STATUS_KEY, 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_ATTRIBUTE_SELECTORS, 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_COLLECTION_FLAG_NAME, HTTP_DATA_METROPLEX_TYPE, HTTP_DATA_PAYLOAD_ATT_NAME, HTTP_DATA_PAYLOAD_URL_REGEXES_FLAG_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_COL_ATT_NAME, 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, LANG_ATT_NAME, LAST_ACTIVE_TIME_KEY, 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_PAYLOAD_LENGTH, MAX_METROPLEX_CONNECTION_COUNT, MAX_METROPLEX_SOCKET_INNACTIVE_TIME, MAX_PAGEVISIT_EVENTS, MAX_PAGEVISIT_PARTS, MAX_PAGEVISIT_VISITED, MAX_STRING_LENGTH, 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_CONFIG, 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_CONFIG_WIN_ATT_NAME, 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_ID_KEY, 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, 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, REACT_ERROR_EVENT_TYPE, 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_ERROR, SEVERITY_WARN, SOCKET_INSTANCE_ID_ATT_NAME, SOURCE_ATT_NAME, 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_METROPLEX_TYPE, VIDEO_PART_COUNT_ATT_NAME, VUE_ERROR_EVENT_TYPE, WHITELIST_HTML_ID_TEXT_REGEX, WIN_BLOCKED_SELECTOR_ATT_NAME, WIN_NJS_VERSION_ATT_NAME, WIN_SCRIPT_ID_ATT_NAME, WORK_REQUEST_ATT_NAME, WRAPPED_EXCEPTION_ERROR_TYPE, XML_HTTP_REQUEST_ERROR_TYPE };
@@ -1,4 +1,11 @@
1
+ import 'react-native-url-polyfill/auto';
1
2
  import { ErrorBoundary as _ErrorBoundary } from '../react/ErrorBoundary';
3
+ /**
4
+ * @param config
5
+ */
6
+ export declare const setupNoibu: (config: {
7
+ domain: string;
8
+ }) => void;
2
9
  export declare const NoibuJS: {
3
10
  requestHelpCode: (alert?: boolean | undefined) => Promise<string>;
4
11
  addCustomAttribute: (name: string, value: string) => string;
@@ -1,3 +1,4 @@
1
+ import 'react-native-url-polyfill/auto';
1
2
  import { GET_METROPLEX_BASE_SOCKET_URL, GET_METROPLEX_BASE_HTTP_URL } from '../constants.js';
2
3
  import globalInit from './init.js';
3
4
  import { ErrorBoundary as ErrorBoundary$1 } from '../react/ErrorBoundary.js';
@@ -8,8 +9,13 @@ const urlConfig = {
8
9
  metroplexSocketBase: GET_METROPLEX_BASE_SOCKET_URL(),
9
10
  metroplexHTTPBase: GET_METROPLEX_BASE_HTTP_URL(),
10
11
  };
11
- globalInit(urlConfig);
12
+ /**
13
+ * @param config
14
+ */
15
+ const setupNoibu = (config) => {
16
+ globalInit({ ...urlConfig, domain: config.domain });
17
+ };
12
18
  const NoibuJS = InputManager.getInstance().exposeFunctions();
13
19
  const ErrorBoundary = ErrorBoundary$1;
14
20
 
15
- export { ErrorBoundary, NoibuJS };
21
+ export { ErrorBoundary, NoibuJS, setupNoibu };
@@ -1,4 +1,3 @@
1
- import { setupURLPolyfill } from 'react-native-url-polyfill';
2
1
  import uuid from 'react-native-uuid';
3
2
  import { monitorErrors } from '../monitors/errorMonitor.js';
4
3
  import { monitorRequests } from '../monitors/requestMonitor.js';
@@ -19,11 +18,9 @@ import HelpCode from '../api/helpCode.js';
19
18
  /** @module Init */
20
19
  /**
21
20
  * initilializes the script to start executing all of NJS features
22
- * @param {} urlConfig
21
+ * @param {Noibu.UrlConfig} urlConfig
23
22
  */
24
23
  function globalInit(urlConfig) {
25
- setupURLPolyfill();
26
-
27
24
  // if the config url is invalid we block collect from executing
28
25
  if (isInvalidURLConfig(urlConfig)) {
29
26
  return;
@@ -34,7 +31,11 @@ function globalInit(urlConfig) {
34
31
  return;
35
32
  }
36
33
  const clterrEndpoint = `${urlConfig.metroplexHTTPBase}/${METROPLEX_ERROR_ROUTE}`;
37
- ClientConfig.configureInstance(clterrEndpoint);
34
+
35
+ ClientConfig.configureInstance({
36
+ noibuErrorURL: clterrEndpoint,
37
+ customerDomain: urlConfig.domain,
38
+ });
38
39
 
39
40
  // catch any errors that happened during initialization and send collect error
40
41
  try {
@@ -38,10 +38,9 @@ class ClickMonitor {
38
38
  return this.instance;
39
39
  }
40
40
 
41
- /** Starts monitoring clicks on the document */
41
+ /** Starts monitoring clicks on every Press-able component */
42
42
  monitorClicks() {
43
43
  const onClickHandler = this._onClickHandle.bind(this);
44
- // addSafeEventListener(window, 'click', onClickHandler, true);
45
44
 
46
45
  if (!Pressability.prototype.originalCreateEventHandlers) {
47
46
  Pressability.prototype.originalCreateEventHandlers =
@@ -5,7 +5,10 @@ import InputManager from '../api/inputManager.js';
5
5
 
6
6
  /** Monitors the elements matching query selectors and passes them to the InputManager */
7
7
  class ElementMonitor {
8
- /** gets the singleton instance */
8
+ /**
9
+ * gets the singleton instance
10
+ * @returns {ElementMonitor}
11
+ */
9
12
  static getInstance() {
10
13
  if (!this.instance) {
11
14
  this.instance = new ElementMonitor();
@@ -0,0 +1,25 @@
1
+ type WrappedFunction<T extends Function = Function> = T & Partial<{
2
+ __noibu__: boolean;
3
+ __noibu_wrapped__: T;
4
+ }>;
5
+ /**
6
+ * wraps a provided function into a function that try and catches
7
+ * the original function, doing so allows us to catch errors
8
+ * functionToWrap: function to be wrapped
9
+ * @param {} functionToWrap
10
+ */
11
+ export declare function wrap(functionToWrap: WrappedFunction): Function;
12
+ /** iterates arguments to try to extract errors from them
13
+ * @param {Array<string | Error>} argsFromErrorLog
14
+ */
15
+ export declare function processErrorLogArguments(argsFromErrorLog: any[]): void;
16
+ /**
17
+ * handler for promise rejection failures
18
+ * @param {} event
19
+ */
20
+ export declare function onPromiseRejectionHandler(event: PromiseRejectedResult): void;
21
+ /**
22
+ * Monitors the errors happening on the window
23
+ */
24
+ export declare function monitorErrors(): void;
25
+ export {};