noibu-react-native 0.2.2 → 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.
- package/README.md +1 -1
- package/dist/api/clientConfig.js +225 -217
- package/dist/api/metroplexSocket.js +406 -416
- package/dist/constants.js +14 -2
- package/dist/entry/init.js +58 -56
- package/dist/monitors/appNavigationMonitor.js +2 -3
- package/dist/monitors/clickMonitor.js +16 -9
- package/dist/monitors/errorMonitor.js +30 -8
- package/dist/monitors/gqlErrorValidator.js +4 -4
- package/dist/monitors/httpDataBundler.js +525 -713
- package/dist/monitors/integrations/react-native-navigation-integration.js +4 -2
- package/dist/monitors/requestMonitor.js +350 -365
- package/dist/pageVisit/eventDebouncer.js +110 -0
- package/dist/pageVisit/pageVisitEventError.js +1 -1
- package/dist/pageVisit/pageVisitEventHTTP.js +78 -93
- package/dist/react/ErrorBoundary.js +18 -15
- package/dist/sessionRecorder/nativeSessionRecorderSubscription.js +3 -2
- package/dist/sessionRecorder/sessionRecorder.js +151 -150
- package/dist/{api → src/api}/clientConfig.d.ts +1 -1
- package/dist/{api → src/api}/metroplexSocket.d.ts +25 -25
- package/dist/{constants.d.ts → src/constants.d.ts} +44 -0
- package/dist/{entry → src/entry}/init.d.ts +1 -1
- package/dist/{monitors → src/monitors}/clickMonitor.d.ts +1 -1
- package/dist/{monitors → src/monitors}/gqlErrorValidator.d.ts +6 -6
- package/dist/src/monitors/httpDataBundler.d.ts +127 -0
- package/dist/src/monitors/requestMonitor.d.ts +10 -0
- package/dist/src/pageVisit/eventDebouncer.d.ts +31 -0
- package/dist/src/pageVisit/pageVisitEventHTTP.d.ts +25 -0
- package/dist/{sessionRecorder → src/sessionRecorder}/types.d.ts +1 -1
- package/dist/{storage → src/storage}/storage.d.ts +1 -1
- package/dist/{storage → src/storage}/storageProvider.d.ts +1 -1
- package/dist/{utils → src/utils}/function.d.ts +25 -4
- package/dist/{utils → src/utils}/object.d.ts +9 -4
- package/dist/src/utils/piiRedactor.d.ts +11 -0
- package/dist/src/utils/polyfills.d.ts +7 -0
- package/dist/storage/rnStorageProvider.js +7 -4
- package/dist/storage/storage.js +43 -35
- package/dist/storage/storageProvider.js +23 -19
- package/dist/types/Config.d.ts +24 -20
- package/dist/types/PageVisit.types.d.ts +151 -0
- package/dist/types/PageVisitMetrics.types.d.ts +27 -0
- package/dist/types/RRWeb.d.ts +48 -0
- package/dist/types/StoredPageVisit.types.d.ts +2 -4
- package/dist/types/WrappedObjects.d.ts +6 -0
- package/dist/utils/function.js +110 -76
- package/dist/utils/object.js +58 -6
- package/dist/utils/piiRedactor.js +98 -0
- package/dist/utils/polyfills.js +24 -0
- package/package.json +5 -6
- package/dist/monitors/httpDataBundler.d.ts +0 -161
- package/dist/monitors/requestMonitor.d.ts +0 -10
- package/dist/pageVisit/pageVisitEventHTTP.d.ts +0 -18
- package/dist/types/PageVisit.d.ts +0 -22
- package/dist/types/globals.d.ts +0 -45
- /package/dist/{api → src/api}/helpCode.d.ts +0 -0
- /package/dist/{api → src/api}/inputManager.d.ts +0 -0
- /package/dist/{api → src/api}/storedMetrics.d.ts +0 -0
- /package/dist/{api → src/api}/storedPageVisit.d.ts +0 -0
- /package/dist/{const_matchers.d.ts → src/const_matchers.d.ts} +0 -0
- /package/dist/{entry → src/entry}/index.d.ts +0 -0
- /package/dist/{monitors → src/monitors}/appNavigationMonitor.d.ts +0 -0
- /package/dist/{monitors → src/monitors}/errorMonitor.d.ts +0 -0
- /package/dist/{monitors → src/monitors}/inputMonitor.d.ts +0 -0
- /package/dist/{monitors → src/monitors}/integrations/react-native-navigation-integration.d.ts +0 -0
- /package/dist/{monitors → src/monitors}/keyboardInputMonitor.d.ts +0 -0
- /package/dist/{monitors → src/monitors}/pageMonitor.d.ts +0 -0
- /package/dist/{pageVisit → src/pageVisit}/pageVisit.d.ts +0 -0
- /package/dist/{pageVisit → src/pageVisit}/pageVisitEventError.d.ts +0 -0
- /package/dist/{pageVisit → src/pageVisit}/userStep.d.ts +0 -0
- /package/dist/{react → src/react}/ErrorBoundary.d.ts +0 -0
- /package/dist/{sessionRecorder → src/sessionRecorder}/nativeSessionRecorderSubscription.d.ts +0 -0
- /package/dist/{sessionRecorder → src/sessionRecorder}/sessionRecorder.d.ts +0 -0
- /package/dist/{storage → src/storage}/rnStorageProvider.d.ts +0 -0
- /package/dist/{utils → src/utils}/date.d.ts +0 -0
- /package/dist/{utils → src/utils}/eventlistener.d.ts +0 -0
- /package/dist/{utils → src/utils}/log.d.ts +0 -0
- /package/dist/{utils → src/utils}/performance.d.ts +0 -0
- /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.
|
|
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 };
|
package/dist/entry/init.js
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
78
|
-
|
|
83
|
+
catch (err) {
|
|
84
|
+
ClientConfig.getInstance().postNoibuErrorAndOptionallyDisableClient(`Error during globalInit: ${err}`, true, SEVERITY.error);
|
|
85
|
+
noibuLog('exiting');
|
|
79
86
|
}
|
|
80
|
-
|
|
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
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
18
17
|
const Navigation = require('react-native-navigation');
|
|
19
|
-
const rnNavigation = 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
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
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
|
-
|
|
141
|
-
|
|
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
|
|
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
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
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;
|