@os1-platform/dispatch-mobile 2.1.8 → 2.1.10
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/lib/commonjs/analytics/sentry/SentryAnalyticsSingleton.js +0 -2
- package/lib/commonjs/analytics/sentry/SentryAnalyticsSingleton.js.map +1 -1
- package/lib/commonjs/analytics/sentry/SentryAnalyticsUtils.js +0 -6
- package/lib/commonjs/analytics/sentry/SentryAnalyticsUtils.js.map +1 -1
- package/lib/commonjs/analytics/sentry/SentrySdkConstants.js +2 -0
- package/lib/commonjs/analytics/sentry/SentrySdkConstants.js.map +1 -1
- package/lib/commonjs/components/executiontasks/imageCapture/ImageCapture.js +1 -1
- package/lib/commonjs/components/executiontasks/imageCapture/ImageCapture.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/manager/sdk/DispatchSDKManager.js +5 -4
- package/lib/commonjs/manager/sdk/DispatchSDKManager.js.map +1 -1
- package/lib/commonjs/manager/sdk/callbacksHandler.js +28 -1
- package/lib/commonjs/manager/sdk/callbacksHandler.js.map +1 -1
- package/lib/commonjs/manager/syncmanager/AppSyncManager.js +7 -5
- package/lib/commonjs/manager/syncmanager/AppSyncManager.js.map +1 -1
- package/lib/commonjs/manager/syncmanager/DBConfig.js +3 -1
- package/lib/commonjs/manager/syncmanager/DBConfig.js.map +1 -1
- package/lib/commonjs/manager/syncmanager/constants.js +4 -1
- package/lib/commonjs/manager/syncmanager/constants.js.map +1 -1
- package/lib/commonjs/manager/syncmanager/document/DocumentHttpClient.js +37 -20
- package/lib/commonjs/manager/syncmanager/document/DocumentHttpClient.js.map +1 -1
- package/lib/commonjs/manager/syncmanager/document/DocumentManager.js +26 -4
- package/lib/commonjs/manager/syncmanager/document/DocumentManager.js.map +1 -1
- package/lib/commonjs/manager/syncmanager/document/DocumentSyncManager.js +276 -20
- package/lib/commonjs/manager/syncmanager/document/DocumentSyncManager.js.map +1 -1
- package/lib/commonjs/manager/syncmanager/events/ETEventsManager.js +41 -13
- package/lib/commonjs/manager/syncmanager/events/ETEventsManager.js.map +1 -1
- package/lib/commonjs/manager/syncmanager/events/EventsSyncManager.js +116 -59
- package/lib/commonjs/manager/syncmanager/events/EventsSyncManager.js.map +1 -1
- package/lib/commonjs/manager/syncmanager/events/SyncHttpClient.js +17 -0
- package/lib/commonjs/manager/syncmanager/events/SyncHttpClient.js.map +1 -1
- package/lib/commonjs/models/auth.js.map +1 -1
- package/lib/commonjs/models/sdk.js.map +1 -1
- package/lib/commonjs/network/NetworkClient.js +12 -2
- package/lib/commonjs/network/NetworkClient.js.map +1 -1
- package/lib/commonjs/network/NetworkUtils.js +14 -7
- package/lib/commonjs/network/NetworkUtils.js.map +1 -1
- package/lib/commonjs/network/client.js +1 -1
- package/lib/commonjs/network/client.js.map +1 -1
- package/lib/commonjs/ui/screens/DeliverScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FormsScreen.js.map +1 -1
- package/lib/commonjs/utils/SyncManagerUtils.js +29 -2
- package/lib/commonjs/utils/SyncManagerUtils.js.map +1 -1
- package/lib/commonjs/utils/storage.js +21 -5
- package/lib/commonjs/utils/storage.js.map +1 -1
- package/lib/commonjs/utils/utils.js +0 -9
- package/lib/commonjs/utils/utils.js.map +1 -1
- package/lib/module/analytics/sentry/SentryAnalyticsSingleton.js +0 -2
- package/lib/module/analytics/sentry/SentryAnalyticsSingleton.js.map +1 -1
- package/lib/module/analytics/sentry/SentryAnalyticsUtils.js +0 -6
- package/lib/module/analytics/sentry/SentryAnalyticsUtils.js.map +1 -1
- package/lib/module/analytics/sentry/SentrySdkConstants.js +2 -0
- package/lib/module/analytics/sentry/SentrySdkConstants.js.map +1 -1
- package/lib/module/components/executiontasks/imageCapture/ImageCapture.js +1 -1
- package/lib/module/components/executiontasks/imageCapture/ImageCapture.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/manager/sdk/DispatchSDKManager.js +5 -4
- package/lib/module/manager/sdk/DispatchSDKManager.js.map +1 -1
- package/lib/module/manager/sdk/callbacksHandler.js +27 -1
- package/lib/module/manager/sdk/callbacksHandler.js.map +1 -1
- package/lib/module/manager/syncmanager/AppSyncManager.js +7 -5
- package/lib/module/manager/syncmanager/AppSyncManager.js.map +1 -1
- package/lib/module/manager/syncmanager/DBConfig.js +3 -1
- package/lib/module/manager/syncmanager/DBConfig.js.map +1 -1
- package/lib/module/manager/syncmanager/constants.js +3 -0
- package/lib/module/manager/syncmanager/constants.js.map +1 -1
- package/lib/module/manager/syncmanager/document/DocumentHttpClient.js +38 -21
- package/lib/module/manager/syncmanager/document/DocumentHttpClient.js.map +1 -1
- package/lib/module/manager/syncmanager/document/DocumentManager.js +26 -4
- package/lib/module/manager/syncmanager/document/DocumentManager.js.map +1 -1
- package/lib/module/manager/syncmanager/document/DocumentSyncManager.js +276 -20
- package/lib/module/manager/syncmanager/document/DocumentSyncManager.js.map +1 -1
- package/lib/module/manager/syncmanager/events/ETEventsManager.js +42 -14
- package/lib/module/manager/syncmanager/events/ETEventsManager.js.map +1 -1
- package/lib/module/manager/syncmanager/events/EventsSyncManager.js +119 -61
- package/lib/module/manager/syncmanager/events/EventsSyncManager.js.map +1 -1
- package/lib/module/manager/syncmanager/events/SyncHttpClient.js +15 -0
- package/lib/module/manager/syncmanager/events/SyncHttpClient.js.map +1 -1
- package/lib/module/models/auth.js.map +1 -1
- package/lib/module/models/sdk.js.map +1 -1
- package/lib/module/network/NetworkClient.js +12 -2
- package/lib/module/network/NetworkClient.js.map +1 -1
- package/lib/module/network/NetworkUtils.js +14 -7
- package/lib/module/network/NetworkUtils.js.map +1 -1
- package/lib/module/network/client.js +1 -1
- package/lib/module/network/client.js.map +1 -1
- package/lib/module/ui/screens/DeliverScreen.js.map +1 -1
- package/lib/module/ui/screens/FormsScreen.js.map +1 -1
- package/lib/module/utils/SyncManagerUtils.js +30 -3
- package/lib/module/utils/SyncManagerUtils.js.map +1 -1
- package/lib/module/utils/storage.js +21 -5
- package/lib/module/utils/storage.js.map +1 -1
- package/lib/module/utils/utils.js +0 -9
- package/lib/module/utils/utils.js.map +1 -1
- package/lib/typescript/analytics/sentry/SentrySdkConstants.d.ts +2 -0
- package/lib/typescript/manager/sdk/callbacksHandler.d.ts +3 -1
- package/lib/typescript/manager/syncmanager/DBConfig.d.ts +4 -0
- package/lib/typescript/manager/syncmanager/constants.d.ts +3 -0
- package/lib/typescript/manager/syncmanager/document/DocumentManager.d.ts +2 -0
- package/lib/typescript/manager/syncmanager/document/DocumentSyncManager.d.ts +2 -1
- package/lib/typescript/manager/syncmanager/events/ETEventsManager.d.ts +2 -0
- package/lib/typescript/manager/syncmanager/events/EventsSyncManager.d.ts +1 -1
- package/lib/typescript/models/sdk.d.ts +1 -0
- package/lib/typescript/utils/storage.d.ts +3 -3
- package/package.json +5 -5
- package/src/analytics/sentry/SentryAnalyticsSingleton.ts +7 -9
- package/src/analytics/sentry/SentryAnalyticsUtils.ts +24 -36
- package/src/analytics/sentry/SentrySdkConstants.ts +2 -0
- package/src/components/executiontasks/imageCapture/ImageCapture.tsx +1 -3
- package/src/index.tsx +1 -1
- package/src/manager/sdk/DispatchSDKManager.ts +8 -3
- package/src/manager/sdk/callbacksHandler.ts +39 -2
- package/src/manager/syncmanager/AppSyncManager.ts +15 -13
- package/src/manager/syncmanager/DBConfig.ts +4 -0
- package/src/manager/syncmanager/constants.ts +3 -0
- package/src/manager/syncmanager/document/DocumentHttpClient.ts +54 -24
- package/src/manager/syncmanager/document/DocumentManager.ts +48 -7
- package/src/manager/syncmanager/document/DocumentSyncManager.ts +351 -30
- package/src/manager/syncmanager/events/ETEventsManager.ts +50 -16
- package/src/manager/syncmanager/events/EventsSyncManager.ts +157 -74
- package/src/manager/syncmanager/events/SyncHttpClient.ts +30 -1
- package/src/models/auth.ts +1 -0
- package/src/models/sdk.ts +1 -0
- package/src/network/NetworkClient.ts +18 -2
- package/src/network/NetworkUtils.ts +9 -1
- package/src/network/client.ts +1 -1
- package/src/ui/screens/DeliverScreen.tsx +6 -5
- package/src/ui/screens/FormsScreen.tsx +8 -6
- package/src/utils/SyncManagerUtils.ts +41 -6
- package/src/utils/storage.ts +21 -8
- package/src/utils/utils.ts +0 -8
|
@@ -1,23 +1,17 @@
|
|
|
1
1
|
import * as Sentry from '@sentry/react-native';
|
|
2
2
|
import { Platform } from 'react-native';
|
|
3
|
-
import {
|
|
4
|
-
Event,
|
|
5
|
-
EventHint,
|
|
6
|
-
CaptureContext,
|
|
7
|
-
User,
|
|
8
|
-
Extras,
|
|
9
|
-
} from '@sentry/types';
|
|
3
|
+
import { Event, User } from '@sentry/types';
|
|
10
4
|
import SentryAnalyticsSingleton from './SentryAnalyticsSingleton';
|
|
11
5
|
import { SentryEvent } from './SentryModels';
|
|
12
6
|
import { fireFirebaseEvent } from '../firebase/FirebaseLogging';
|
|
13
7
|
import { SentryEventNameSdkConstants } from './SentrySdkConstants';
|
|
14
8
|
|
|
15
|
-
export async function fireEventWithScreenName({ severityLevel, eventName, cta="N/A",screenName="N/A",extraParams=null }
|
|
9
|
+
export async function fireEventWithScreenName({ severityLevel, eventName, cta = "N/A", screenName = "N/A", extraParams = null }: SentryEvent) {
|
|
16
10
|
|
|
17
11
|
//ignoring the button clicked event for now
|
|
18
|
-
if(eventName === SentryEventNameSdkConstants.BUTTON_CLICKED) return;
|
|
12
|
+
if (eventName === SentryEventNameSdkConstants.BUTTON_CLICKED) return;
|
|
19
13
|
|
|
20
|
-
console.log("sentry::fireEventWithScreenName()"," called")
|
|
14
|
+
console.log("sentry::fireEventWithScreenName()", " called")
|
|
21
15
|
console.log("sentry::fireEventWithScreenName::severityLevel", severityLevel)
|
|
22
16
|
console.log("sentry::fireEventWithScreenName::eventName", eventName)
|
|
23
17
|
console.log("sentry::fireEventWithScreenName::cta", cta)
|
|
@@ -25,47 +19,41 @@ export async function fireEventWithScreenName({ severityLevel, eventName, cta="N
|
|
|
25
19
|
console.log("sentry::fireEventWithScreenName::extraParams", JSON.stringify(extraParams))
|
|
26
20
|
//
|
|
27
21
|
const singletonInstance = SentryAnalyticsSingleton.getInstance();
|
|
28
|
-
const tenantId = singletonInstance.getDispatchAndUserData()?.tenantId??"N/A"
|
|
29
|
-
const dispatchId = singletonInstance.getDispatchAndUserData()?.dispatchId??"N/A"
|
|
30
|
-
const userId = singletonInstance.getDispatchAndUserData()?.userId??"N/A"
|
|
31
|
-
const userName = singletonInstance.getDispatchAndUserData()?.userName??"N/A"
|
|
32
|
-
const userEmail = singletonInstance.getDispatchAndUserData()?.userEmail??"N/A"
|
|
22
|
+
const tenantId = singletonInstance.getDispatchAndUserData()?.tenantId ?? "N/A"
|
|
23
|
+
const dispatchId = singletonInstance.getDispatchAndUserData()?.dispatchId ?? "N/A"
|
|
24
|
+
const userId = singletonInstance.getDispatchAndUserData()?.userId ?? "N/A"
|
|
25
|
+
const userName = singletonInstance.getDispatchAndUserData()?.userName ?? "N/A"
|
|
26
|
+
const userEmail = singletonInstance.getDispatchAndUserData()?.userEmail ?? "N/A"
|
|
33
27
|
//
|
|
34
|
-
|
|
35
|
-
console.log("sentry::fireEventWithScreenName::dispatchId", dispatchId)
|
|
36
|
-
console.log("sentry::fireEventWithScreenName::userId", userId)
|
|
37
|
-
console.log("sentry::fireEventWithScreenName::userName", userName)
|
|
38
|
-
console.log("sentry::fireEventWithScreenName::userEmail", userEmail)
|
|
39
|
-
//
|
|
40
|
-
var event : Event = {
|
|
28
|
+
var event: Event = {
|
|
41
29
|
level: severityLevel,
|
|
42
30
|
message: eventName,
|
|
43
|
-
tags:{
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
31
|
+
tags: {
|
|
32
|
+
tenantId: tenantId ?? "N/A",
|
|
33
|
+
dispatchId: dispatchId ?? "N/A",
|
|
34
|
+
screenName: screenName ?? "N/A",
|
|
35
|
+
cta: cta ?? "N/A",
|
|
36
|
+
ref: SentryAnalyticsSingleton.ref,
|
|
49
37
|
},
|
|
50
38
|
extra: extraParams ?? '',
|
|
51
39
|
};
|
|
52
40
|
|
|
53
41
|
//fetch user details only if tenantId is present
|
|
54
|
-
if(tenantId != null && tenantId?.trim() != ""){
|
|
42
|
+
if (tenantId != null && tenantId?.trim() != "") {
|
|
55
43
|
let user: User = {};
|
|
56
|
-
user.id = userId??"N/A";
|
|
57
|
-
user.email = userEmail??"N/A";
|
|
58
|
-
user.username = userName??"N/A";
|
|
44
|
+
user.id = userId ?? "N/A";
|
|
45
|
+
user.email = userEmail ?? "N/A";
|
|
46
|
+
user.username = userName ?? "N/A";
|
|
59
47
|
event.user = user;
|
|
60
48
|
}
|
|
61
49
|
//
|
|
62
50
|
event.platform = Platform.OS
|
|
63
|
-
event.environment = await getEnvironment();
|
|
51
|
+
event.environment = await getEnvironment();
|
|
64
52
|
//
|
|
65
|
-
Sentry.captureEvent(event);
|
|
53
|
+
Sentry.captureEvent(event);
|
|
66
54
|
//fire firebase event
|
|
67
|
-
|
|
68
|
-
await fireFirebaseEvent(event.message??"No_Event_Name", event);
|
|
55
|
+
|
|
56
|
+
await fireFirebaseEvent(event.message ?? "No_Event_Name", event);
|
|
69
57
|
}
|
|
70
58
|
|
|
71
59
|
const getEnvironment = async () => {
|
|
@@ -47,6 +47,8 @@ export enum SentryEventNameSdkConstants{
|
|
|
47
47
|
API_CALL = "API_CALL",
|
|
48
48
|
API_RESPONSE = "API_RESPONSE",
|
|
49
49
|
API_ERROR = "API_ERROR",
|
|
50
|
+
APP_ERROR = "APP_ERROR",
|
|
51
|
+
APP_LOG = "APP_LOG",
|
|
50
52
|
BUTTON_CLICKED = "BUTTON_CLICKED",
|
|
51
53
|
SDK_INIT_STARTED = "SDK_INIT_STARTED",
|
|
52
54
|
SDK_INIT_DONE = "SDK_INIT_DONE",
|
|
@@ -361,9 +361,7 @@ style={{
|
|
|
361
361
|
<View style={CommonStyles.mainContainer}>
|
|
362
362
|
{props.message && (
|
|
363
363
|
<View style={styles.etMessageView}>
|
|
364
|
-
<Text style={styles.etMessage}>
|
|
365
|
-
Take a photo of the shipments. Please ensure the items are clearly visible.
|
|
366
|
-
</Text>
|
|
364
|
+
<Text style={styles.etMessage}>{props.message}</Text>
|
|
367
365
|
</View>
|
|
368
366
|
)}
|
|
369
367
|
<View
|
package/src/index.tsx
CHANGED
|
@@ -86,4 +86,4 @@ export { MtsSdk };
|
|
|
86
86
|
export { Helper };
|
|
87
87
|
//sentry function export
|
|
88
88
|
export { SentryAnalyticsSingleton, fireEventWithScreenName, SeverityLevelValue, ScreenNameSdkConstants, SentryEventNameSdkConstants, DispatchAndUserData, SentryEvent};
|
|
89
|
-
export { DocumentManager };
|
|
89
|
+
export { DocumentManager };
|
|
@@ -15,6 +15,7 @@ import Storage from '../../utils/storage';
|
|
|
15
15
|
import { pushBulkEventForSync } from '../../utils/SyncManagerUtils';
|
|
16
16
|
import callbackHandler from './callbacksHandler';
|
|
17
17
|
import { DispatchExecutor as dispatchExecutor } from '@os1-platform/platform-coreos-execution-engine-sdk';
|
|
18
|
+
import { MAX_RETRY_COUNT } from '../syncmanager/constants';
|
|
18
19
|
|
|
19
20
|
export class DispatchSDKManager {
|
|
20
21
|
private static instance: DispatchSDKManager;
|
|
@@ -30,6 +31,7 @@ export class DispatchSDKManager {
|
|
|
30
31
|
return DispatchSDKManager.instance;
|
|
31
32
|
}
|
|
32
33
|
|
|
34
|
+
|
|
33
35
|
/**
|
|
34
36
|
* Call this init method with username,userID & authentication tokens
|
|
35
37
|
* @param sdkConfig
|
|
@@ -68,7 +70,7 @@ export class DispatchSDKManager {
|
|
|
68
70
|
GraphQLClient.init(sdkConfig.tenantBaseURL);
|
|
69
71
|
AppSyncManager.initAppSync(
|
|
70
72
|
sdkConfig.tenantBaseURL,
|
|
71
|
-
sdkConfig.syncRetryCount ??
|
|
73
|
+
sdkConfig.syncRetryCount ?? MAX_RETRY_COUNT
|
|
72
74
|
);
|
|
73
75
|
LocationManager.getInstance().startUpdates();
|
|
74
76
|
if (sdkConfig.eventMapping) {
|
|
@@ -80,11 +82,13 @@ export class DispatchSDKManager {
|
|
|
80
82
|
|
|
81
83
|
if (
|
|
82
84
|
sdkConfig.callbacks?.fetchPhoneNumbersCallback &&
|
|
83
|
-
sdkConfig?.callbacks?.fetchDateTimeCallback
|
|
85
|
+
sdkConfig?.callbacks?.fetchDateTimeCallback &&
|
|
86
|
+
sdkConfig?.callbacks?.tokenRefreshCallback
|
|
84
87
|
) {
|
|
85
88
|
await callbackHandler.init(
|
|
86
89
|
sdkConfig.callbacks.fetchPhoneNumbersCallback,
|
|
87
|
-
sdkConfig.callbacks.fetchDateTimeCallback
|
|
90
|
+
sdkConfig.callbacks.fetchDateTimeCallback,
|
|
91
|
+
sdkConfig.callbacks.tokenRefreshCallback
|
|
88
92
|
);
|
|
89
93
|
}
|
|
90
94
|
await dispatchExecutor.init(
|
|
@@ -102,4 +106,5 @@ export class DispatchSDKManager {
|
|
|
102
106
|
public removeLocationUpdates() {
|
|
103
107
|
LocationManager.getInstance().stopLocationUpdates();
|
|
104
108
|
}
|
|
109
|
+
|
|
105
110
|
}
|
|
@@ -1,18 +1,25 @@
|
|
|
1
|
+
import { DispatchSDKConfig } from "src/models/sdk";
|
|
2
|
+
import DispatchSdkCache from "./DispatchSdkCache";
|
|
3
|
+
import { BaseError, } from "../../errors/BaseError";
|
|
4
|
+
import ErrorCodes from '../../errors/ErrorCodes';
|
|
5
|
+
|
|
1
6
|
class CallbacksHandler {
|
|
2
7
|
private _callbackToFetchPhoneNumbers!: (
|
|
3
8
|
sdsIds: string[]
|
|
4
9
|
) => Promise<{ key: string; value: string[] }>;
|
|
5
10
|
|
|
6
11
|
private _callbackToFetchDateTime!: () => Promise<string>;
|
|
12
|
+
private _callbackRefreshToken!: () => Promise<string>;
|
|
7
13
|
|
|
8
14
|
public init(
|
|
9
15
|
phoneCallback: (
|
|
10
16
|
sdsIds: string[]
|
|
11
17
|
) => Promise<{ key: string; value: string[] }>,
|
|
12
|
-
dateTimeCallBack: () => Promise<string>
|
|
18
|
+
dateTimeCallBack: () => Promise<string>, tokenRefreshCallback: () => Promise<string>
|
|
13
19
|
) {
|
|
14
20
|
this._callbackToFetchPhoneNumbers = phoneCallback;
|
|
15
21
|
this._callbackToFetchDateTime = dateTimeCallBack;
|
|
22
|
+
this._callbackRefreshToken = tokenRefreshCallback;
|
|
16
23
|
}
|
|
17
24
|
|
|
18
25
|
public async getPhoneNumbers(
|
|
@@ -30,7 +37,37 @@ class CallbacksHandler {
|
|
|
30
37
|
return await this._callbackToFetchDateTime();
|
|
31
38
|
}
|
|
32
39
|
}
|
|
33
|
-
}
|
|
34
40
|
|
|
41
|
+
public async refresheAndUpdateToken() {
|
|
42
|
+
if (!this._callbackRefreshToken){
|
|
43
|
+
throw new BaseError(
|
|
44
|
+
ErrorCodes.SyncManagerNotInitialized,
|
|
45
|
+
'Dispatch SDK Not Initalised'
|
|
46
|
+
);
|
|
47
|
+
} else {
|
|
48
|
+
let token = await this._callbackRefreshToken();
|
|
49
|
+
if(token && token.length != 0){
|
|
50
|
+
let sdkConfig =
|
|
51
|
+
(await DispatchSdkCache.getInstance().getObjectFromCache(
|
|
52
|
+
DispatchSdkCache.KEYS.SDK_CONFIG
|
|
53
|
+
)) as DispatchSDKConfig;
|
|
54
|
+
sdkConfig.accessToken = token;
|
|
55
|
+
var headers = sdkConfig.headers;
|
|
56
|
+
if(headers){
|
|
57
|
+
headers['x-coreos-access'] = token;
|
|
58
|
+
sdkConfig.headers = headers;
|
|
59
|
+
}
|
|
60
|
+
let cache: DispatchSdkCache = DispatchSdkCache.getInstance();
|
|
61
|
+
let keys = DispatchSdkCache.KEYS;
|
|
62
|
+
cache.setObjectInCache(keys.SDK_CONFIG, sdkConfig);
|
|
63
|
+
}else{
|
|
64
|
+
throw new BaseError(
|
|
65
|
+
ErrorCodes.ACCESS_TOKEN_EXPIRED,
|
|
66
|
+
'Unable to refresh token'
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
35
72
|
const callbackHandler = new CallbacksHandler();
|
|
36
73
|
export default callbackHandler;
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
DEFAULT_NOTIFICATION_TITLE,
|
|
16
16
|
} from '../../constants/constants';
|
|
17
17
|
import type { DispatchSDKConfig } from '../../models/sdk';
|
|
18
|
+
import { MAX_RETRY_COUNT } from './constants';
|
|
18
19
|
|
|
19
20
|
export default class AppSyncManager {
|
|
20
21
|
private constructor(tenantBaseURL: string, retryCount: number) {
|
|
@@ -58,17 +59,18 @@ export default class AppSyncManager {
|
|
|
58
59
|
tenantBaseURL: string,
|
|
59
60
|
syncRetryCount: number
|
|
60
61
|
): AppSyncManager {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
62
|
+
// removing this check to allow tenant change in app due to this manager instance did't re-init and event and docs didn't sync
|
|
63
|
+
// if (!AppSyncManager.instance) {
|
|
64
|
+
Logger.getInstance().logEvent(
|
|
65
|
+
'initAppSync',
|
|
66
|
+
'CREATING NEW INSTANCE',
|
|
67
|
+
LOG_TYPE.SDK_INFO
|
|
68
|
+
);
|
|
69
|
+
AppSyncManager.instance = new AppSyncManager(
|
|
70
|
+
tenantBaseURL,
|
|
71
|
+
syncRetryCount
|
|
72
|
+
);
|
|
73
|
+
// }
|
|
72
74
|
return AppSyncManager.instance;
|
|
73
75
|
}
|
|
74
76
|
public static getInstance(): AppSyncManager {
|
|
@@ -88,7 +90,7 @@ export default class AppSyncManager {
|
|
|
88
90
|
(await DispatchSdkCache.getInstance().getObjectFromCache(
|
|
89
91
|
DispatchSdkCache.KEYS.SDK_CONFIG
|
|
90
92
|
)) as DispatchSDKConfig;
|
|
91
|
-
const retryCount = sdkConfig.syncRetryCount ??
|
|
93
|
+
const retryCount = sdkConfig.syncRetryCount ?? MAX_RETRY_COUNT;
|
|
92
94
|
if (sdkConfig.tenantBaseURL != null && retryCount != null) {
|
|
93
95
|
AppSyncManager.initAppSync(sdkConfig.tenantBaseURL, +retryCount);
|
|
94
96
|
AppSyncManager.getInstance().startSDKSyncManager();
|
|
@@ -148,7 +150,7 @@ export default class AppSyncManager {
|
|
|
148
150
|
config?.notificationConfig?.interval ?? DEFAULT_INTERVAL,
|
|
149
151
|
config?.notificationConfig?.title ?? DEFAULT_NOTIFICATION_TITLE,
|
|
150
152
|
config?.notificationConfig?.description ??
|
|
151
|
-
|
|
153
|
+
DEFAULT_NOTIFICATION_DESCRIPTION
|
|
152
154
|
);
|
|
153
155
|
} else {
|
|
154
156
|
Logger.getInstance().logEvent(
|
|
@@ -23,6 +23,7 @@ export const EVENTS_COLUMNS = {
|
|
|
23
23
|
SYNC_ERROR: 'sync_error',
|
|
24
24
|
DISPATCH_ID: 'dispatch_id',
|
|
25
25
|
DATA_LENGTH: 'data_length',
|
|
26
|
+
ATTEMPT_COUNT: 'attempt_count',
|
|
26
27
|
};
|
|
27
28
|
|
|
28
29
|
export const DOCUMENT_TABLE = 'DOCUMENTS_TABLE';
|
|
@@ -42,6 +43,7 @@ export const DOCUMENT_COLUMNS = {
|
|
|
42
43
|
DISPATCH_ID: 'dispatch_id',
|
|
43
44
|
JOB_ID: 'job_id',
|
|
44
45
|
OBJECTIVE_REF: 'objective_ref',
|
|
46
|
+
ATTEMPT_COUNT: 'attempt_count',
|
|
45
47
|
GEO_TIMESTAMP: 'geo_timestamp',
|
|
46
48
|
PROCESSED_FILE_PATH: 'processed_file_path',
|
|
47
49
|
};
|
|
@@ -63,6 +65,7 @@ export type DocumentRow = {
|
|
|
63
65
|
objective_ref: string;
|
|
64
66
|
geo_timestamp: string;
|
|
65
67
|
processed_file_path: string;
|
|
68
|
+
attempt_count: number;
|
|
66
69
|
};
|
|
67
70
|
export type EventRow = {
|
|
68
71
|
id: number;
|
|
@@ -73,6 +76,7 @@ export type EventRow = {
|
|
|
73
76
|
objective_ref: string;
|
|
74
77
|
sync_error: string;
|
|
75
78
|
dispatch_id: string;
|
|
79
|
+
attempt_count: number;
|
|
76
80
|
};
|
|
77
81
|
|
|
78
82
|
export enum SyncMethod {
|
|
@@ -3,3 +3,6 @@ export const LAST_SYNCED_EVENT_ID = 'lastSyncedEventId';
|
|
|
3
3
|
export const SHARED_PREFERENCE_DISPATCH_ID = 'sharedPreferenceDispatchId';
|
|
4
4
|
export const SHARED_PREFERENCE_SCAN_OUTPUT = 'scanETMappedOutput';
|
|
5
5
|
export const SCAN_MERGED_OBJ_ID_OUTPUT = 'scanMergedObjectiveIDs';
|
|
6
|
+
export const POD_DOC = 'POD_DOC';
|
|
7
|
+
export const PROCESS_MAX_RETRIED_ROWS = false;
|
|
8
|
+
export const MAX_RETRY_COUNT = 3;
|
|
@@ -10,7 +10,8 @@ import RNFS from 'react-native-fs';
|
|
|
10
10
|
import { stat } from 'react-native-fs';
|
|
11
11
|
import { ScreenNameSdkConstants, SentryEventNameSdkConstants, SeverityLevelValue } from '../../../analytics/sentry/SentrySdkConstants';
|
|
12
12
|
import { fireEventWithScreenName } from '../../../analytics/sentry/SentryAnalyticsUtils';
|
|
13
|
-
import { flattenObject } from '../../../utils/utils';
|
|
13
|
+
import { flattenObject, isTokenExpired } from '../../../utils/utils';
|
|
14
|
+
import callbackHandler from '../../../manager/sdk/callbacksHandler';
|
|
14
15
|
|
|
15
16
|
const cache = DispatchSdkCache.getInstance();
|
|
16
17
|
const cacheKeys = DispatchSdkCache.KEYS;
|
|
@@ -21,7 +22,6 @@ export default class DocumentHttpClient extends HttpClient {
|
|
|
21
22
|
public async uploadDocument(document: DocumentRow): Promise<string | null> {
|
|
22
23
|
if (document.base64 && document.data != null) {
|
|
23
24
|
const response = await this.uploadBase64File(document);
|
|
24
|
-
|
|
25
25
|
let info = '';
|
|
26
26
|
if (
|
|
27
27
|
response &&
|
|
@@ -34,17 +34,22 @@ export default class DocumentHttpClient extends HttpClient {
|
|
|
34
34
|
} else {
|
|
35
35
|
info = String(response.status);
|
|
36
36
|
}
|
|
37
|
-
let extraParameters = {
|
|
37
|
+
let extraParameters = {
|
|
38
|
+
response: info,
|
|
39
|
+
fName: document.file_name && document.file_name.length != 0 ? document.file_name.substring(4): '',
|
|
40
|
+
dName: document.fms_folder_id && document.fms_folder_id.length != 0 ? document.fms_folder_id.substring(4): '',
|
|
41
|
+
dispId: document.dispatch_id && document.dispatch_id.length != 0 ? document.dispatch_id.substring(9): ''
|
|
42
|
+
};
|
|
38
43
|
|
|
39
44
|
fireEventWithScreenName({
|
|
40
45
|
severityLevel: SeverityLevelValue.LOG,
|
|
41
46
|
eventName: SentryEventNameSdkConstants.API_RESPONSE,
|
|
42
|
-
screenName: 'Upload_Base64_File_Response',
|
|
47
|
+
screenName: 'uploadDocument:Upload_Base64_File_Response',
|
|
43
48
|
extraParams: extraParameters,
|
|
44
49
|
});
|
|
45
50
|
|
|
46
51
|
Logger.getInstance().logEvent(
|
|
47
|
-
'uploadBase64FileResponse',
|
|
52
|
+
'uploadDocument:uploadBase64FileResponse',
|
|
48
53
|
flattenObject(extraParameters),
|
|
49
54
|
LOG_TYPE.SDK_ERROR
|
|
50
55
|
);
|
|
@@ -56,7 +61,7 @@ export default class DocumentHttpClient extends HttpClient {
|
|
|
56
61
|
response.status === 202
|
|
57
62
|
) {
|
|
58
63
|
return response.data.data.id;
|
|
59
|
-
}
|
|
64
|
+
}else{
|
|
60
65
|
return null;
|
|
61
66
|
}
|
|
62
67
|
} else {
|
|
@@ -72,17 +77,22 @@ export default class DocumentHttpClient extends HttpClient {
|
|
|
72
77
|
} else {
|
|
73
78
|
info = String(uploadResponse.status);
|
|
74
79
|
}
|
|
75
|
-
let
|
|
80
|
+
let extraParameters = {
|
|
81
|
+
response: info,
|
|
82
|
+
fName: document.file_name && document.file_name.length != 0 ? document.file_name.substring(4): '',
|
|
83
|
+
dName: document.fms_folder_id && document.fms_folder_id.length != 0 ? document.fms_folder_id.substring(4): '',
|
|
84
|
+
dispId: document.dispatch_id && document.dispatch_id.length != 0 ? document.dispatch_id.substring(9): ''
|
|
85
|
+
};
|
|
76
86
|
|
|
77
87
|
fireEventWithScreenName({
|
|
78
88
|
severityLevel: SeverityLevelValue.LOG,
|
|
79
89
|
eventName: SentryEventNameSdkConstants.API_RESPONSE,
|
|
80
|
-
screenName: 'Upload_Binary_File_Response',
|
|
81
|
-
extraParams:
|
|
90
|
+
screenName: 'uploadDocument:Upload_Binary_File_Response',
|
|
91
|
+
extraParams: extraParameters,
|
|
82
92
|
});
|
|
83
93
|
Logger.getInstance().logEvent(
|
|
84
|
-
'uploadBinaryFileResponse',
|
|
85
|
-
flattenObject(
|
|
94
|
+
'uploadDocument:uploadBinaryFileResponse',
|
|
95
|
+
flattenObject(extraParameters),
|
|
86
96
|
LOG_TYPE.SDK_ERROR
|
|
87
97
|
);
|
|
88
98
|
if (
|
|
@@ -94,7 +104,7 @@ export default class DocumentHttpClient extends HttpClient {
|
|
|
94
104
|
FileSystem.deleteAsync(document.processed_file_path).then().catch(); // WE DELETE FILE HERE
|
|
95
105
|
|
|
96
106
|
return JSON.parse(uploadResponse.body)?.data?.id;
|
|
97
|
-
}
|
|
107
|
+
}else{
|
|
98
108
|
return null;
|
|
99
109
|
}
|
|
100
110
|
}
|
|
@@ -124,25 +134,33 @@ export default class DocumentHttpClient extends HttpClient {
|
|
|
124
134
|
],
|
|
125
135
|
fileName: document.file_name,
|
|
126
136
|
});
|
|
127
|
-
|
|
137
|
+
let sdkConfig = (await cache.getObjectFromCache(
|
|
128
138
|
cacheKeys.SDK_CONFIG
|
|
129
139
|
)) as DispatchSDKConfig;
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
140
|
+
if(isTokenExpired(sdkConfig.accessToken)){
|
|
141
|
+
await callbackHandler.refresheAndUpdateToken();
|
|
142
|
+
sdkConfig = (await cache.getObjectFromCache(
|
|
143
|
+
cacheKeys.SDK_CONFIG
|
|
144
|
+
)) as DispatchSDKConfig;
|
|
145
|
+
}
|
|
146
|
+
let extraParameters = {
|
|
147
|
+
fName: document.file_name && document.file_name.length != 0 ? document.file_name.substring(4): '',
|
|
148
|
+
dName: document.fms_folder_id && document.fms_folder_id.length != 0 ? document.fms_folder_id.substring(4): '',
|
|
149
|
+
dispId: document.dispatch_id && document.dispatch_id.length != 0 ? document.dispatch_id.substring(9): ''
|
|
133
150
|
};
|
|
134
151
|
|
|
135
152
|
fireEventWithScreenName({
|
|
136
153
|
severityLevel: SeverityLevelValue.LOG,
|
|
137
154
|
eventName: SentryEventNameSdkConstants.API_CALL,
|
|
138
155
|
screenName: 'Upload_Base64_File_Request',
|
|
139
|
-
extraParams:
|
|
156
|
+
extraParams: extraParameters,
|
|
140
157
|
});
|
|
141
158
|
Logger.getInstance().logEvent(
|
|
142
159
|
'uploadBase64FileRequest',
|
|
143
|
-
flattenObject(
|
|
160
|
+
flattenObject(extraParameters),
|
|
144
161
|
LOG_TYPE.SDK_ERROR
|
|
145
162
|
);
|
|
163
|
+
|
|
146
164
|
return this.instance.post(
|
|
147
165
|
`/api/folders/${document.fms_folder_id}/files`,
|
|
148
166
|
requestBody,
|
|
@@ -162,9 +180,17 @@ export default class DocumentHttpClient extends HttpClient {
|
|
|
162
180
|
private async uploadBinaryFile(
|
|
163
181
|
document: DocumentRow
|
|
164
182
|
): Promise<FileSystemUploadResult> {
|
|
165
|
-
|
|
183
|
+
|
|
184
|
+
let sdkConfig = (await cache.getObjectFromCache(
|
|
166
185
|
cacheKeys.SDK_CONFIG
|
|
167
186
|
)) as DispatchSDKConfig;
|
|
187
|
+
if(isTokenExpired(sdkConfig.accessToken)){
|
|
188
|
+
await callbackHandler.refresheAndUpdateToken();
|
|
189
|
+
sdkConfig = (await cache.getObjectFromCache(
|
|
190
|
+
cacheKeys.SDK_CONFIG
|
|
191
|
+
)) as DispatchSDKConfig;
|
|
192
|
+
}
|
|
193
|
+
|
|
168
194
|
let filePathToUpload = document.file_path;
|
|
169
195
|
let processedFileExist = await RNFS.exists(document.processed_file_path);
|
|
170
196
|
if (processedFileExist) {
|
|
@@ -172,21 +198,25 @@ export default class DocumentHttpClient extends HttpClient {
|
|
|
172
198
|
}
|
|
173
199
|
const url =
|
|
174
200
|
sdkConfig.tenantBaseURL + `/api/folders/${document.fms_folder_id}/files`;
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
201
|
+
|
|
202
|
+
let extraParameters = {
|
|
203
|
+
fName: document.file_name && document.file_name.length != 0 ? document.file_name.substring(4): '',
|
|
204
|
+
dName: document.fms_folder_id && document.fms_folder_id.length != 0 ? document.fms_folder_id.substring(4): '',
|
|
205
|
+
dispId: document.dispatch_id && document.dispatch_id.length != 0 ? document.dispatch_id.substring(9): ''
|
|
178
206
|
};
|
|
207
|
+
|
|
179
208
|
fireEventWithScreenName({
|
|
180
209
|
severityLevel: SeverityLevelValue.LOG,
|
|
181
210
|
eventName: SentryEventNameSdkConstants.API_CALL,
|
|
182
211
|
screenName: 'Upload_Binary_File_Request',
|
|
183
|
-
extraParams:
|
|
212
|
+
extraParams: extraParameters,
|
|
184
213
|
});
|
|
185
214
|
Logger.getInstance().logEvent(
|
|
186
215
|
'uploadBinaryFileRequest',
|
|
187
|
-
flattenObject(
|
|
216
|
+
flattenObject(extraParameters),
|
|
188
217
|
LOG_TYPE.SDK_ERROR
|
|
189
218
|
);
|
|
219
|
+
|
|
190
220
|
return FileSystem.uploadAsync(url, filePathToUpload, {
|
|
191
221
|
headers: {
|
|
192
222
|
'accept': 'application/json',
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DOCUMENT_COLUMNS, DOCUMENT_TABLE, DocumentRow } from '../DBConfig';
|
|
2
|
+
import { MAX_RETRY_COUNT, PROCESS_MAX_RETRIED_ROWS } from '../constants';
|
|
2
3
|
import * as Database from '../database';
|
|
3
4
|
import type { SQLResultSet } from 'expo-sqlite';
|
|
4
5
|
|
|
@@ -31,6 +32,7 @@ export default class DocumentManager {
|
|
|
31
32
|
${DOCUMENT_COLUMNS.FMS_FOLDER_ID} TEXT,\
|
|
32
33
|
${DOCUMENT_COLUMNS.PRIORITY} INTEGER NOT NULL DEFAULT 1,\
|
|
33
34
|
${DOCUMENT_COLUMNS.SYNC_ERROR} TEXT,\
|
|
35
|
+
${DOCUMENT_COLUMNS.ATTEMPT_COUNT} INTEGER DEFAULT 0 NOT NULL,\
|
|
34
36
|
${DOCUMENT_COLUMNS.GEO_TIMESTAMP} TEXT,\
|
|
35
37
|
${DOCUMENT_COLUMNS.PROCESSED_FILE_PATH} TEXT,\
|
|
36
38
|
${DOCUMENT_COLUMNS.DESCRIPTION} TEXT);`,
|
|
@@ -130,6 +132,19 @@ export default class DocumentManager {
|
|
|
130
132
|
);
|
|
131
133
|
}
|
|
132
134
|
|
|
135
|
+
// This function will actualy update the document row with sync and attempt count.
|
|
136
|
+
public async markDocumentSyncedWithAttempt(
|
|
137
|
+
id: number,
|
|
138
|
+
fmsID: string,
|
|
139
|
+
attempt: number,
|
|
140
|
+
sync: number
|
|
141
|
+
): Promise<void> {
|
|
142
|
+
if (!id) return;
|
|
143
|
+
await Database.executeQuery(
|
|
144
|
+
`UPDATE ${DOCUMENT_TABLE} SET ${DOCUMENT_COLUMNS.SYNCED} = ?,${DOCUMENT_COLUMNS.FMS_ID} = ?,${DOCUMENT_COLUMNS.ATTEMPT_COUNT} = ? WHERE ${DOCUMENT_COLUMNS.ID} = ?;`,
|
|
145
|
+
[sync, fmsID, attempt, id]
|
|
146
|
+
);
|
|
147
|
+
}
|
|
133
148
|
// This function is updating processed_file_path column for the base64 overlayed data and overlayed image file for POD. Also if it is base 64 then it is also storing temprary file path in file_path as original bae64 image.
|
|
134
149
|
public async updateProcesedFilePath(
|
|
135
150
|
id: number,
|
|
@@ -157,13 +172,39 @@ export default class DocumentManager {
|
|
|
157
172
|
);
|
|
158
173
|
}
|
|
159
174
|
|
|
160
|
-
public async
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
175
|
+
public async updateDocPriority(
|
|
176
|
+
id: number,
|
|
177
|
+
priority: number
|
|
178
|
+
): Promise<void> {
|
|
179
|
+
if (!id) throw new TypeError('Document ID cannot be null');
|
|
180
|
+
await Database.executeQuery(
|
|
181
|
+
`UPDATE ${DOCUMENT_TABLE}\
|
|
182
|
+
SET \
|
|
183
|
+
${DOCUMENT_COLUMNS.PRIORITY} = ?\
|
|
184
|
+
WHERE ${DOCUMENT_COLUMNS.ID} = ?;`,
|
|
185
|
+
[priority, id]
|
|
166
186
|
);
|
|
167
|
-
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
public async getUnsyncedDocument(): Promise<DocumentRow[]> {
|
|
191
|
+
// If it is allowed max_retried_rows are allowed to process then it will refetch those data which are even have tried max attempt otherwise it will skip those events.
|
|
192
|
+
if(PROCESS_MAX_RETRIED_ROWS){
|
|
193
|
+
let rs = await Database.executeQuery(
|
|
194
|
+
`SELECT * from ${DOCUMENT_TABLE}\
|
|
195
|
+
WHERE ${DOCUMENT_COLUMNS.SYNCED} = 0 \
|
|
196
|
+
ORDER BY ${DOCUMENT_COLUMNS.PRIORITY} ASC LIMIT 1;`,
|
|
197
|
+
[]
|
|
198
|
+
);
|
|
199
|
+
return rs.rows._array;
|
|
200
|
+
}else{
|
|
201
|
+
let rs = await Database.executeQuery(
|
|
202
|
+
`SELECT * from ${DOCUMENT_TABLE}\
|
|
203
|
+
WHERE ${DOCUMENT_COLUMNS.SYNCED} = 0 AND ${DOCUMENT_COLUMNS.ATTEMPT_COUNT} < ${MAX_RETRY_COUNT} \
|
|
204
|
+
ORDER BY ${DOCUMENT_COLUMNS.PRIORITY} ASC LIMIT 1;`,
|
|
205
|
+
[]
|
|
206
|
+
);
|
|
207
|
+
return rs.rows._array;
|
|
208
|
+
}
|
|
168
209
|
}
|
|
169
210
|
}
|