@sentiance-react-native/core 6.0.0-beta.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.
Files changed (38) hide show
  1. package/README.md +24 -0
  2. package/android/build.gradle +24 -0
  3. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  4. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  5. package/android/gradle.properties +2 -0
  6. package/android/gradlew +185 -0
  7. package/android/gradlew.bat +89 -0
  8. package/android/package-json-reader.gradle +62 -0
  9. package/android/sentiance-version-finder.gradle +17 -0
  10. package/android/src/main/AndroidManifest.xml +2 -0
  11. package/android/src/main/java/com/sentiance/react/bridge/core/SentianceConverter.java +366 -0
  12. package/android/src/main/java/com/sentiance/react/bridge/core/SentianceEmitter.java +41 -0
  13. package/android/src/main/java/com/sentiance/react/bridge/core/SentianceHelper.java +206 -0
  14. package/android/src/main/java/com/sentiance/react/bridge/core/SentianceModule.java +529 -0
  15. package/android/src/main/java/com/sentiance/react/bridge/core/SentiancePackage.java +30 -0
  16. package/android/src/main/java/com/sentiance/react/bridge/core/UserLinker.java +34 -0
  17. package/android/src/main/java/com/sentiance/react/bridge/core/base/AbstractSentianceEmitter.java +59 -0
  18. package/android/src/main/java/com/sentiance/react/bridge/core/base/AbstractSentianceModule.java +33 -0
  19. package/android/src/main/java/com/sentiance/react/bridge/core/utils/ErrorCodes.java +16 -0
  20. package/android/src/main/java/com/sentiance/react/bridge/core/utils/SentianceUtils.java +172 -0
  21. package/android/src/main/java/com/sentiance/react/bridge/core/utils/UserCreationCompletionHandler.java +31 -0
  22. package/ios/RNSentianceCore+Converter.h +46 -0
  23. package/ios/RNSentianceCore+Converter.m +993 -0
  24. package/ios/RNSentianceCore.h +29 -0
  25. package/ios/RNSentianceCore.m +1036 -0
  26. package/ios/RNSentianceCore.podspec +24 -0
  27. package/ios/RNSentianceCore.xcodeproj/project.pbxproj +290 -0
  28. package/ios/RNSentianceErrorCodes.h +20 -0
  29. package/ios/RNSentianceErrorCodes.m +22 -0
  30. package/ios/RNSentianceHelper.h +31 -0
  31. package/ios/RNSentianceHelper.m +38 -0
  32. package/ios/RNSentianceNativeInitialization.h +6 -0
  33. package/ios/RNSentianceNativeInitialization.m +56 -0
  34. package/lib/core.js +56 -0
  35. package/lib/index.d.ts +197 -0
  36. package/lib/index.js +221 -0
  37. package/lib/utils.js +1 -0
  38. package/package.json +38 -0
package/lib/index.d.ts ADDED
@@ -0,0 +1,197 @@
1
+ declare module "sentiance-react-native-core" {
2
+ import {EmitterSubscription} from "react-native";
3
+
4
+ export type LocationPermission = "ALWAYS" | "ONLY_WHILE_IN_USE" | "NEVER";
5
+ export type SdkInitState =
6
+ "NOT_INITIALIZED"
7
+ | "INIT_IN_PROGRESS"
8
+ | "INITIALIZED"
9
+ | "RESETTING"
10
+ | "UNRECOGNIZED_STATE";
11
+ export type TripType = "TRIP_TYPE_SDK" | "TRIP_TYPE_EXTERNAL";
12
+
13
+ export enum TransportMode {
14
+ UNKNOWN = 1,
15
+ CAR,
16
+ BICYCLE,
17
+ ON_FOOT,
18
+ TRAIN,
19
+ TRAM,
20
+ BUS,
21
+ PLANE,
22
+ BOAT,
23
+ METRO,
24
+ RUNNING,
25
+ }
26
+
27
+ export interface UserInfo {
28
+ userId: string,
29
+ tokenId: string,
30
+ tokenExpiryDate: string,
31
+ isTokenExpired: boolean
32
+ }
33
+
34
+ export interface UserLinkingResult {
35
+ userInfo: UserInfo
36
+ }
37
+
38
+ export interface CreateUserResult {
39
+ userInfo: UserInfo
40
+ }
41
+
42
+ export interface UserCreationOptions {
43
+ appId: string,
44
+ appSecret: string,
45
+ authCode: string,
46
+ platformUrl: string,
47
+ linker: (installId: string) => boolean
48
+ }
49
+
50
+ export interface Location {
51
+ latitude: string;
52
+ longitude: string;
53
+ accuracy?: string; // Android only
54
+ altitude?: string; // Android only
55
+ provider?: string; // Android only
56
+ }
57
+
58
+ export interface StationaryInfo {
59
+ location?: Location;
60
+ }
61
+
62
+ export interface TripInfo {
63
+ type: "TRIP_TYPE_SDK" | "TRIP_TYPE_EXTERNAL" | "TRIP_TYPE_UNRECOGNIZED" | "ANY";
64
+ }
65
+
66
+ export interface UserActivity {
67
+ type: "USER_ACTIVITY_TYPE_TRIP" | "USER_ACTIVITY_TYPE_STATIONARY" | "USER_ACTIVITY_TYPE_UNKNOWN" | "USER_ACTIVITY_TYPE_UNRECOGNIZED";
68
+ tripInfo?: TripInfo;
69
+ stationaryInfo?: StationaryInfo;
70
+ }
71
+
72
+ export interface MetadataObject {
73
+ [key: string]: string;
74
+ }
75
+
76
+ export interface UserAccessToken {
77
+ tokenId: string;
78
+ expiryDate?: string; // Android only
79
+ }
80
+
81
+ export interface ResetResult {
82
+ initState: string
83
+ }
84
+
85
+ export interface SdkStatus {
86
+ startStatus: string;
87
+ canDetect: boolean;
88
+ isRemoteEnabled: boolean;
89
+ isAccelPresent: boolean;
90
+ isGyroPresent: boolean;
91
+ isGpsPresent: boolean;
92
+ wifiQuotaStatus: string;
93
+ mobileQuotaStatus: string;
94
+ diskQuotaStatus: string;
95
+ locationPermission: LocationPermission;
96
+ userExists: boolean;
97
+ isBgAccessPermGranted?: boolean; // iOS only
98
+ isActivityRecognitionPermGranted?: boolean; // Android only
99
+ locationSetting?: string; // Android only
100
+ isAirplaneModeEnabled?: boolean; // Android only
101
+ isLocationAvailable?: boolean; // Android only
102
+ isGooglePlayServicesMissing?: boolean; // Android only
103
+ isBatteryOptimizationEnabled?: boolean; // Android only
104
+ isBatterySavingEnabled?: boolean; // Android only
105
+ isBackgroundProcessingRestricted?: boolean; // Android only
106
+ isPreciseLocationAuthorizationGranted: boolean;
107
+ isSchedulingExactAlarmsPermitted?: boolean; // Android only
108
+ }
109
+
110
+ export interface EnableDisableDetectionsResult {
111
+ sdkStatus: SdkStatus,
112
+ detectionStatus: string
113
+ }
114
+
115
+ export interface SentianceCore {
116
+ userLinkCallback(linkResult: boolean): void;
117
+
118
+ userExists(): Promise<boolean>;
119
+
120
+ enableDetections(): Promise<EnableDisableDetectionsResult>;
121
+
122
+ enableDetectionsWithExpiryDate(expiryEpochTimeMs: number | null): Promise<EnableDisableDetectionsResult>;
123
+
124
+ disableDetections(): Promise<EnableDisableDetectionsResult>;
125
+
126
+ reset(): Promise<ResetResult>;
127
+
128
+ isUserLinked(): Promise<boolean>;
129
+
130
+ getVersion(): Promise<string>;
131
+
132
+ getUserId(): Promise<string>;
133
+
134
+ requestUserAccessToken(): Promise<UserAccessToken>;
135
+
136
+ addUserMetadataField(label: string, value: string): Promise<void>;
137
+
138
+ addUserMetadataFields(label: MetadataObject): Promise<void>;
139
+
140
+ removeUserMetadataField(label: string): Promise<void>;
141
+
142
+ getUserActivity(): Promise<UserActivity>;
143
+
144
+ listenUserActivityUpdates(): Promise<void>;
145
+
146
+ listenTripTimeout(): Promise<void>;
147
+
148
+ startTrip(metadata: MetadataObject | null, hint: TransportMode): Promise<void>;
149
+
150
+ stopTrip(): Promise<void>;
151
+
152
+ isTripOngoing(type: TripType): Promise<boolean>;
153
+
154
+ submitDetections(): Promise<void>;
155
+
156
+ updateSdkNotification(title: string, message: string): Promise<void>;
157
+
158
+ addTripMetadata(metadata: MetadataObject): Promise<boolean>;
159
+
160
+ setAppSessionDataCollectionEnabled(enabled: boolean): Promise<void>;
161
+
162
+ isAppSessionDataCollectionEnabled(): Promise<boolean>;
163
+
164
+ getInitState(): Promise<SdkInitState>;
165
+
166
+ getSdkStatus(): Promise<SdkStatus>;
167
+
168
+ getWiFiQuotaLimit(): Promise<string>;
169
+
170
+ getWiFiQuotaUsage(): Promise<string>;
171
+
172
+ getMobileQuotaLimit(): Promise<string>;
173
+
174
+ getMobileQuotaUsage(): Promise<string>;
175
+
176
+ getDiskQuotaLimit(): Promise<string>;
177
+
178
+ getDiskQuotaUsage(): Promise<string>;
179
+
180
+ disableBatteryOptimization(): Promise<void>;
181
+
182
+ createUser(options: UserCreationOptions): Promise<CreateUserResult>;
183
+
184
+ linkUser(): Promise<UserLinkingResult>;
185
+
186
+ linkUserWithAuthCode(authCode: string): Promise<UserLinkingResult>;
187
+
188
+ addSdkStatusUpdateListener(onSdkStatusUpdated: (sdkStatus: SdkStatus) => void): Promise<EmitterSubscription>;
189
+
190
+ addTripTimeoutListener(onTripTimedOut: () => void): Promise<EmitterSubscription>;
191
+
192
+ addSdkUserActivityUpdateListener(onUserActivityUpdated: (userActivity: UserActivity) => void): Promise<EmitterSubscription>;
193
+ }
194
+
195
+ const SentianceCore: SentianceCore;
196
+ export default SentianceCore;
197
+ }
package/lib/index.js ADDED
@@ -0,0 +1,221 @@
1
+ import core from './core';
2
+ import Platform from 'react-native';
3
+
4
+ const enableDetections = () => core.enableDetections();
5
+ const enableDetectionsWithExpiryDate = (expiryTime) => core.enableDetectionsWithExpiryDate(expiryTime);
6
+ const disableDetections = () => core.disableDetections();
7
+ const getInitState = () => core.getInitState();
8
+ const userLinkCallback = (userLinkResult) => core.userLinkCallback(userLinkResult);
9
+ const userExists = () => core.userExists();
10
+ const isUserLinked = () => core.isUserLinked();
11
+ const getVersion = () => core.getVersion();
12
+ const getUserId = () => core.getUserId();
13
+ const requestUserAccessToken = () => core.requestUserAccessToken();
14
+ const addUserMetadataField = (label, value) => core.addUserMetadataField(label, value);
15
+ const addUserMetadataFields = (metadata) => core.addUserMetadataFields(metadata);
16
+ const removeUserMetadataField = (label) => core.removeUserMetadataField(label);
17
+ const getUserActivity = () => core.getUserActivity();
18
+ const listenUserActivityUpdates = () => core.listenUserActivityUpdates();
19
+ const listenTripTimeout = () => core.listenTripTimeout();
20
+ const isTripOngoing = (tripType) => core.isTripOngoing(tripType);
21
+ const updateSdkNotification = (title, message) => core.updateSdkNotification(title, message);
22
+ const addTripMetadata = (metadata) => core.addTripMetadata(metadata);
23
+ const setAppSessionDataCollectionEnabled = (enabled) => core.setAppSessionDataCollectionEnabled(enabled);
24
+ const isAppSessionDataCollectionEnabled = () => core.isAppSessionDataCollectionEnabled();
25
+ const getSdkStatus = () => core.getSdkStatus();
26
+ const getDiskQuotaLimit = () => core.getDiskQuotaLimit();
27
+ const getDiskQuotaUsage = () => core.getDiskQuotaUsage();
28
+ const disableBatteryOptimization = () => core.disableBatteryOptimization();
29
+ const getMobileQuotaLimit = () => core.getMobileQuotaLimit();
30
+ const getMobileQuotaUsage = () => core.getMobileQuotaUsage();
31
+ const getWiFiQuotaLimit = () => core.getWiFiQuotaLimit();
32
+ const getWiFiQuotaUsage = () => core.getWiFiQuotaUsage();
33
+ const linkUserWithAuthCode = (authCode) => core.linkUserWithAuthCode(authCode);
34
+ const NO_OP_LINKER = {}
35
+
36
+ var startTrip
37
+ var stopTrip
38
+ var submitDetections
39
+ var reset
40
+
41
+ if (Platform.OS === 'ios') {
42
+ startTrip = (metadata, hint) => core.startTripNewApi(metadata, hint);
43
+ stopTrip = () => core.stopTripNewApi();
44
+ submitDetections = () => core.submitDetectionsNewApi();
45
+ reset = () => core.resetNewApi();
46
+ }
47
+ else {
48
+ startTrip = (metadata, hint) => core.startTrip(metadata, hint);
49
+ stopTrip = () => core.stopTrip();
50
+ submitDetections = () => core.submitDetections();
51
+ reset = () => core.reset();
52
+ }
53
+
54
+ const linkUser = async (linker) => {
55
+ await core._addUserLinkListener(linker);
56
+ return core.linkUser();
57
+ };
58
+
59
+ /**
60
+ * @typedef {Object} UserCreationOptions
61
+ * @property {String} authCode - Auth Code
62
+ * @property {String} platformUrl - Sentiance Platform URL
63
+ * @property {String} appId - APP ID
64
+ * @property {String} appSecret - APP Secret
65
+ * @property {Function} linker (data) => result - Function to handle the user linking
66
+ *
67
+ * const userCreationOptions = {
68
+ * authCode: "<AUTH_CODE>"
69
+ * }
70
+ *
71
+ * createUser(userCreationOptions);
72
+ *
73
+ * Or with appId / appSecret (Not recommended)
74
+ *
75
+ * const userCreationOptions = {
76
+ * linker : (installId) => {
77
+ * return linkUser(installId);
78
+ * },
79
+ * appId : "<APP_ID>",
80
+ * appSecret: "<APP_SECRET>"
81
+ * }
82
+ *
83
+ * createUser(userCreationOptions);
84
+ *
85
+ * Or unlinked user with appId / appSecret (Not recommended)
86
+ *
87
+ * const userCreationOptions = {
88
+ * linker : NO_OP_LINKER,
89
+ * appId : "<APP_ID>",
90
+ * appSecret: "<APP_SECRET>"
91
+ * }
92
+ *
93
+ * createUser(userCreationOptions);
94
+ */
95
+
96
+
97
+ /**
98
+ * Creates a Sentiance user if one does not yet exist, and links it to your app's user on the Sentiance platform.
99
+ * This method requires an initialized SDK, otherwise it throws a runtime exception.
100
+ *
101
+ * @param {UserCreationOptions} userCreationOptions
102
+ *
103
+ * @example
104
+ * const userCreationOptions = {
105
+ * authCode: "<AUTH_CODE>"
106
+ * }
107
+ *
108
+ * createUser(userCreationOptions);
109
+ *
110
+ * Or with appId / appSecret (Not recommended)
111
+ *
112
+ * const userCreationOptions = {
113
+ * linker : (installId) => {
114
+ * return linkUser(installId);
115
+ * },
116
+ * appId : "<APP_ID>",
117
+ * appSecret: "<APP_SECRET>"
118
+ * }
119
+ *
120
+ * createUser(userCreationOptions);
121
+ *
122
+ * Or unlinked user with appId / appSecret (Not recommended)
123
+ *
124
+ * const userCreationOptions = {
125
+ * linker : NO_OP_LINKER,
126
+ * appId : "<APP_ID>",
127
+ * appSecret: "<APP_SECRET>"
128
+ * }
129
+ *
130
+ * createUser(userCreationOptions);
131
+ */
132
+ const createUser = async (userCreationOptions) => {
133
+
134
+ const appId = userCreationOptions.appId;
135
+ const appSecret = userCreationOptions.appSecret;
136
+ const authCode = userCreationOptions.authCode;
137
+ const platformUrl = userCreationOptions.platformUrl;
138
+ const linker = userCreationOptions.linker;
139
+
140
+ if (!appId && !appSecret && !authCode) {
141
+ return Promise.reject('Invalid userCreationOptions passed, please set authCode or appId/appSecret with a linker to create user');
142
+ }
143
+
144
+ if (authCode) {
145
+ return core.createLinkedUserWithAuthCode(authCode, platformUrl);
146
+ }
147
+ else if (linker) {
148
+ if (linker === NO_OP_LINKER) {
149
+ return core.createUnlinkedUser(appId, appSecret, platformUrl);
150
+ } else {
151
+ await core._addUserLinkListener(linker);
152
+ return core.createLinkedUser(appId, appSecret, platformUrl);
153
+ }
154
+ }
155
+ else {
156
+ return Promise.reject('Invalid userCreationOptions passed, no authcode or linker specified.');
157
+ }
158
+ }
159
+
160
+ const addSdkStatusUpdateListener = core._addSdkStatusUpdateListener;
161
+ const addSdkUserActivityUpdateListener = core._addSdkUserActivityUpdateListener;
162
+ const addTripTimeoutListener = core._addTripTimeoutListener;
163
+
164
+ const transportModes = {};
165
+ (function (transportModes) {
166
+ transportModes[transportModes["UNKNOWN"] = 1] = "UNKNOWN";
167
+ transportModes[transportModes["CAR"] = 2] = "CAR";
168
+ transportModes[transportModes["BICYCLE"] = 3] = "BICYCLE";
169
+ transportModes[transportModes["ON_FOOT"] = 4] = "ON_FOOT";
170
+ transportModes[transportModes["TRAIN"] = 5] = "TRAIN";
171
+ transportModes[transportModes["TRAM"] = 6] = "TRAM";
172
+ transportModes[transportModes["BUS"] = 7] = "BUS";
173
+ transportModes[transportModes["PLANE"] = 8] = "PLANE";
174
+ transportModes[transportModes["BOAT"] = 9] = "BOAT";
175
+ transportModes[transportModes["METRO"] = 10] = "METRO";
176
+ transportModes[transportModes["RUNNING"] = 11] = "RUNNING";
177
+ })(transportModes);
178
+
179
+ module.exports = {
180
+ userLinkCallback,
181
+ userExists,
182
+ enableDetections,
183
+ enableDetectionsWithExpiryDate,
184
+ reset,
185
+ isUserLinked,
186
+ getVersion,
187
+ getUserId,
188
+ requestUserAccessToken,
189
+ addUserMetadataField,
190
+ addUserMetadataFields,
191
+ removeUserMetadataField,
192
+ getUserActivity,
193
+ listenUserActivityUpdates,
194
+ startTrip,
195
+ stopTrip,
196
+ isTripOngoing,
197
+ submitDetections,
198
+ updateSdkNotification,
199
+ addTripMetadata,
200
+ setAppSessionDataCollectionEnabled,
201
+ isAppSessionDataCollectionEnabled,
202
+ disableDetections,
203
+ getInitState,
204
+ getSdkStatus,
205
+ getDiskQuotaLimit,
206
+ getDiskQuotaUsage,
207
+ getMobileQuotaLimit,
208
+ getMobileQuotaUsage,
209
+ getWiFiQuotaLimit,
210
+ getWiFiQuotaUsage,
211
+ disableBatteryOptimization,
212
+ createUser,
213
+ linkUser,
214
+ linkUserWithAuthCode,
215
+ addSdkStatusUpdateListener,
216
+ addSdkUserActivityUpdateListener,
217
+ addTripTimeoutListener,
218
+ listenTripTimeout,
219
+ transportModes,
220
+ NO_OP_LINKER
221
+ };
package/lib/utils.js ADDED
@@ -0,0 +1 @@
1
+ export const varToString = varObj => Object.keys(varObj)[0];
package/package.json ADDED
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "@sentiance-react-native/core",
3
+ "version": "6.0.0-beta.10",
4
+ "description": "React Native Sentiance core library",
5
+ "main": "lib/index.js",
6
+ "typings": "lib/index.d.ts",
7
+ "scripts": {
8
+ "test": "echo \"Error: no test specified\" && exit 1",
9
+ "lint": "npx eslint lib/index.d.ts"
10
+ },
11
+ "keywords": [
12
+ "react-native",
13
+ "core",
14
+ "sentiance"
15
+ ],
16
+ "peerDependencies": {
17
+ "react-native": ">=0.60"
18
+ },
19
+ "author": "",
20
+ "license": "",
21
+ "homepage": "https://github.com/sentiance/react-native-sentiance/sentiance#readme",
22
+ "repository": "github:sentiance/react-native-sentiance",
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "sdkVersions": {
27
+ "android": {
28
+ "minSdk": 23,
29
+ "targetSdk": 31,
30
+ "compileSdk": 31,
31
+ "buildTools": "30.0.3",
32
+ "sentiance": "6.0.0-beta6"
33
+ },
34
+ "ios": {
35
+ "sentiance": "6.0.0-beta10"
36
+ }
37
+ }
38
+ }