airbridge-react-native-sdk-restricted 2.5.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.
Files changed (126) hide show
  1. package/.eslintrc.json +44 -0
  2. package/.gitattributes +1 -0
  3. package/airbridge-react-native-sdk.podspec +32 -0
  4. package/android/build/.transforms/08e8d929b7926845ebd25bc2ae9e2874/results.bin +1 -0
  5. package/android/build/.transforms/08e8d929b7926845ebd25bc2ae9e2874/transformed/classes/classes.dex +0 -0
  6. package/android/build/.transforms/14ea77658b61f201debed3d92aea1c0f/results.bin +1 -0
  7. package/android/build/.transforms/14ea77658b61f201debed3d92aea1c0f/transformed/classes/classes.dex +0 -0
  8. package/android/build/.transforms/33560bbaf5632b59753ef78fcd7b7f8d/results.bin +1 -0
  9. package/android/build/.transforms/33560bbaf5632b59753ef78fcd7b7f8d/transformed/classes/classes.dex +0 -0
  10. package/android/build/.transforms/38fa05fa6fd488a5dec6d7bdb333bfd1/results.bin +1 -0
  11. package/android/build/.transforms/38fa05fa6fd488a5dec6d7bdb333bfd1/transformed/classes/classes.dex +0 -0
  12. package/android/build/.transforms/405120ecc1eb36e3127f0c3846387eb6/results.bin +1 -0
  13. package/android/build/.transforms/405120ecc1eb36e3127f0c3846387eb6/transformed/classes/classes.dex +0 -0
  14. package/android/build/.transforms/61c549f58a941c195c4ffb5f43fed2ef/results.bin +1 -0
  15. package/android/build/.transforms/61c549f58a941c195c4ffb5f43fed2ef/transformed/classes/classes.dex +0 -0
  16. package/android/build/.transforms/75c8746e5247a4500eb6ae4ca2ef0a2e/results.bin +1 -0
  17. package/android/build/.transforms/75c8746e5247a4500eb6ae4ca2ef0a2e/transformed/classes/classes.dex +0 -0
  18. package/android/build/.transforms/85f88a3c5a226a3333c60b94378960e9/results.bin +1 -0
  19. package/android/build/.transforms/85f88a3c5a226a3333c60b94378960e9/transformed/classes/classes.dex +0 -0
  20. package/android/build/.transforms/8f01556cdda8590f3b7cee54078417e1/results.bin +1 -0
  21. package/android/build/.transforms/8f01556cdda8590f3b7cee54078417e1/transformed/classes/classes.dex +0 -0
  22. package/android/build/.transforms/905b1aa9b91e69e71e9ed75a0c99581c/results.bin +1 -0
  23. package/android/build/.transforms/905b1aa9b91e69e71e9ed75a0c99581c/transformed/classes/classes.dex +0 -0
  24. package/android/build/.transforms/983e33cb97b3d1caf80afe6b7ca652b3/results.bin +1 -0
  25. package/android/build/.transforms/983e33cb97b3d1caf80afe6b7ca652b3/transformed/classes/classes.dex +0 -0
  26. package/android/build/.transforms/b398922a5d6aaf33784a06f933228695/results.bin +1 -0
  27. package/android/build/.transforms/b398922a5d6aaf33784a06f933228695/transformed/classes/classes.dex +0 -0
  28. package/android/build/.transforms/b4ff5fb2fdb627c9a67ad50ae0347ece/results.bin +1 -0
  29. package/android/build/.transforms/b4ff5fb2fdb627c9a67ad50ae0347ece/transformed/classes/classes.dex +0 -0
  30. package/android/build/.transforms/d89a0ea59a0fb9c21321de6f1be36c2b/results.bin +1 -0
  31. package/android/build/.transforms/d89a0ea59a0fb9c21321de6f1be36c2b/transformed/classes/classes.dex +0 -0
  32. package/android/build/.transforms/dca3c4e952522adb6e9c477431cc0881/results.bin +1 -0
  33. package/android/build/.transforms/dca3c4e952522adb6e9c477431cc0881/transformed/classes/classes.dex +0 -0
  34. package/android/build/.transforms/e6b9f6a4f6dc26d29d4ac4172b428541/results.bin +1 -0
  35. package/android/build/.transforms/e6b9f6a4f6dc26d29d4ac4172b428541/transformed/classes/classes.dex +0 -0
  36. package/android/build/.transforms/e8ebcf4ab4a209e222c80ef37e9122e2/results.bin +1 -0
  37. package/android/build/.transforms/e8ebcf4ab4a209e222c80ef37e9122e2/transformed/classes/classes.dex +0 -0
  38. package/android/build/generated/source/buildConfig/debug/co/ab180/airbridge/reactnative/BuildConfig.java +10 -0
  39. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +10 -0
  40. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +18 -0
  41. package/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +5 -0
  42. package/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json +1 -0
  43. package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
  44. package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
  45. package/android/build/intermediates/compile_symbol_list/debug/R.txt +1956 -0
  46. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -0
  47. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +2 -0
  48. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +2 -0
  49. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +2 -0
  50. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +2 -0
  51. package/android/build/intermediates/incremental/packageDebugResources/compile-file-map.properties +1 -0
  52. package/android/build/intermediates/incremental/packageDebugResources/merger.xml +2 -0
  53. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeAttribution.class +0 -0
  54. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeDeeplink$1.class +0 -0
  55. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeDeeplink.class +0 -0
  56. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeEvent.class +0 -0
  57. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgePlacement.class +0 -0
  58. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeRN.class +0 -0
  59. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeState$1.class +0 -0
  60. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/AirbridgeState.class +0 -0
  61. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/BuildConfig.class +0 -0
  62. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/ConfigReader$1.class +0 -0
  63. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/ConfigReader$2.class +0 -0
  64. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/ConfigReader.class +0 -0
  65. package/android/build/intermediates/javac/debug/classes/co/ab180/airbridge/reactnative/Get.class +0 -0
  66. package/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +2 -0
  67. package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +15 -0
  68. package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +10 -0
  69. package/android/build/intermediates/navigation_json/debug/navigation.json +1 -0
  70. package/android/build/intermediates/packaged_manifests/debug/output-metadata.json +18 -0
  71. package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
  72. package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +1449 -0
  73. package/android/build/outputs/logs/manifest-merger-debug-report.txt +33 -0
  74. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  75. package/android/build.gradle +27 -0
  76. package/android/copy-config.gradle +18 -0
  77. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  78. package/android/gradle/wrapper/gradle-wrapper.properties +6 -0
  79. package/android/gradlew +172 -0
  80. package/android/gradlew.bat +84 -0
  81. package/android/src/main/AndroidManifest.xml +8 -0
  82. package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgeAttribution.java +78 -0
  83. package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgeDeeplink.java +97 -0
  84. package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgeEvent.java +76 -0
  85. package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgePlacement.java +42 -0
  86. package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgeRN.java +82 -0
  87. package/android/src/main/java/co/ab180/airbridge/reactnative/AirbridgeState.java +174 -0
  88. package/android/src/main/java/co/ab180/airbridge/reactnative/ConfigReader.java +108 -0
  89. package/android/src/main/java/co/ab180/airbridge/reactnative/Get.java +84 -0
  90. package/changelog.md +56 -0
  91. package/index.d.ts +292 -0
  92. package/index.js +8 -0
  93. package/ios/AirbridgeRN/ARNConfigReader.h +19 -0
  94. package/ios/AirbridgeRN/ARNConfigReader.m +79 -0
  95. package/ios/AirbridgeRN/ARNGet.h +20 -0
  96. package/ios/AirbridgeRN/ARNGet.m +40 -0
  97. package/ios/AirbridgeRN/AirbridgeAttribution.h +19 -0
  98. package/ios/AirbridgeRN/AirbridgeAttribution.m +47 -0
  99. package/ios/AirbridgeRN/AirbridgeDeeplink.h +20 -0
  100. package/ios/AirbridgeRN/AirbridgeDeeplink.m +59 -0
  101. package/ios/AirbridgeRN/AirbridgeEvent.h +17 -0
  102. package/ios/AirbridgeRN/AirbridgeEvent.m +63 -0
  103. package/ios/AirbridgeRN/AirbridgePlacement.h +17 -0
  104. package/ios/AirbridgeRN/AirbridgePlacement.m +38 -0
  105. package/ios/AirbridgeRN/AirbridgeRN.h +71 -0
  106. package/ios/AirbridgeRN/AirbridgeRN.m +59 -0
  107. package/ios/AirbridgeRN/AirbridgeState.h +17 -0
  108. package/ios/AirbridgeRN/AirbridgeState.m +89 -0
  109. package/ios/AirbridgeRN.xcodeproj/project.pbxproj +409 -0
  110. package/ios/copy-config.rb +26 -0
  111. package/package.json +43 -0
  112. package/readme.md +11 -0
  113. package/src/Airbridge.js +82 -0
  114. package/src/Deeplink.js +75 -0
  115. package/src/Event.js +38 -0
  116. package/src/Placement.js +56 -0
  117. package/src/State.js +167 -0
  118. package/src/WebInterface.js +135 -0
  119. package/src/tool/Log.js +40 -0
  120. package/src/tool/_.js +56 -0
  121. package/src/type/AirbridgeAttributes.js +16 -0
  122. package/src/type/AirbridgeCategory.js +18 -0
  123. package/src/type/AirbridgeProduct.js +13 -0
  124. package/src/typedef/EventOption.js +9 -0
  125. package/src/typedef/Product.js +10 -0
  126. package/src/typedef/User.js +9 -0
@@ -0,0 +1,56 @@
1
+ import { NativeModules } from 'react-native';
2
+ import Log from './tool/Log';
3
+ import _ from './tool/_';
4
+
5
+ const { AirbridgePlacement } = NativeModules;
6
+
7
+ /**
8
+ * class for use SDK's placement function (singleton)
9
+ */
10
+ class Placement {
11
+ /**
12
+ * @hideconstructor
13
+ */
14
+ constructor() {}
15
+
16
+ /**
17
+ * 1. send +1 click statistics to server<br/>
18
+ * 2. get deeplink and fallback from server<br/>
19
+ * 3. open deeplink. when fail, open fallback<br/>
20
+ * 4. parameter's deeplink, fallback is spare for network-fail
21
+ *
22
+ * @param {string} trackingLink created on dashboard
23
+ */
24
+ click(trackingLink, deeplink, fallback) {
25
+ Log.info('click tracking link');
26
+
27
+ if (_.isString(trackingLink) === false) {
28
+ Log.unmatchType('trackingLink');
29
+ Log.fail('click tracking link');
30
+
31
+ return;
32
+ }
33
+
34
+ AirbridgePlacement.click(trackingLink);
35
+ }
36
+
37
+ /**
38
+ * send +1 impression statistics to server<br/>
39
+ *
40
+ * @param {string} trackingLink created on dashboard
41
+ */
42
+ impression(trackingLink) {
43
+ Log.info('impression tracking link');
44
+
45
+ if (_.isString(trackingLink) === false) {
46
+ Log.unmatchType('trackingLink');
47
+ Log.fail('impression tracking link');
48
+
49
+ return;
50
+ }
51
+
52
+ AirbridgePlacement.impression(trackingLink);
53
+ }
54
+ }
55
+
56
+ export default new Placement();
package/src/State.js ADDED
@@ -0,0 +1,167 @@
1
+ import { NativeEventEmitter, NativeModules } from 'react-native';
2
+ import Log from './tool/Log';
3
+ import _ from './tool/_';
4
+
5
+ import './typedef/User';
6
+
7
+ const { AirbridgeState, AirbridgeAttribution } = NativeModules;
8
+
9
+ /**
10
+ * @callback AttributionListener
11
+ * @param {object<string, string>} attribution URL of attribution
12
+ * @returns {void}
13
+ */
14
+
15
+ /**
16
+ * class for manage SDK's state (singleton)
17
+ */
18
+ class State {
19
+ /**
20
+ * @hideconstructor
21
+ */
22
+ constructor() {}
23
+
24
+ /**
25
+ * set current user<br/>
26
+ *
27
+ * user.property is null, if input.property is null
28
+ * @param {User} user user infomation
29
+ */
30
+ setUser(user) {
31
+ Log.info('set user');
32
+
33
+ if (_.isObject(user) === false) {
34
+ Log.unmatchType('user');
35
+ Log.fail('set user');
36
+
37
+ return;
38
+ }
39
+
40
+ if (_.isNullableString(user.ID) === false) {
41
+ user.ID = null;
42
+ }
43
+ if (_.isNullableString(user.email) === false) {
44
+ user.email = null;
45
+ }
46
+ if (_.isNullableString(user.phone) === false) {
47
+ user.phone = null;
48
+ }
49
+ if (_.isNullableObject(user.alias) === false) {
50
+ user.alias = null;
51
+ }
52
+ if (_.isNullableObject(user.attributes) === false) {
53
+ user.attributes = null;
54
+ }
55
+
56
+ AirbridgeState.setUser(user);
57
+ }
58
+
59
+ /**
60
+ * update current user<br/>
61
+ *
62
+ * user.property not be changed, if input.property is null
63
+ * @param {User} user user infomation
64
+ */
65
+ updateUser(user) {
66
+ Log.info('update user');
67
+
68
+ if (_.isObject(user) === false) {
69
+ Log.unmatchType('user');
70
+ Log.fail('update user');
71
+
72
+ return;
73
+ }
74
+
75
+ if (_.isNullableString(user.ID) === false) {
76
+ user.ID = null;
77
+ }
78
+ if (_.isNullableString(user.email) === false) {
79
+ user.email = null;
80
+ }
81
+ if (_.isNullableString(user.phone) === false) {
82
+ user.phone = null;
83
+ }
84
+ if (_.isNullableObject(user.alias) === false) {
85
+ user.alias = null;
86
+ }
87
+ if (_.isNullableObject(user.attributes) === false) {
88
+ user.attributes = null;
89
+ }
90
+
91
+ AirbridgeState.updateUser(user);
92
+ }
93
+
94
+ /**
95
+ * make airbridge start tracking
96
+ */
97
+ startTracking() {
98
+ Log.info('start tracking');
99
+
100
+ AirbridgeState.startTracking();
101
+ }
102
+
103
+ /**
104
+ * get deviceUUID of Airbridge SDK.
105
+ *
106
+ * @returns {Promise<string>}
107
+ */
108
+ deviceUUID() {
109
+ return AirbridgeState.deviceUUID();
110
+ }
111
+
112
+ /**
113
+ * Set AttributionListener (listen attribution)<br/>
114
+ * @param {AttributionListener} listener callback of attribution
115
+ */
116
+ setAttributionListener(listener) {
117
+ Log.info('set attribution listener');
118
+
119
+ if (this._attributionListener === undefined) {
120
+ this._attributionListener = listener;
121
+
122
+ this._attributionEmitter = new NativeEventEmitter(AirbridgeAttribution);
123
+ this._attributionEmitter.addListener('airbridge.attribution', attribution => {
124
+ Log.info(`[attribution] ${JSON.stringify(attribution)}`);
125
+ this._attributionListener(attribution);
126
+ });
127
+
128
+ AirbridgeAttribution.listen();
129
+ } else {
130
+ this._attributionListener = listener;
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Set device alias
136
+ * @param {string} key - device alias key
137
+ * @param {string} value - device alias value
138
+ */
139
+ setDeviceAlias(key, value) {
140
+ AirbridgeState.setDeviceAlias(key, value);
141
+ }
142
+
143
+ /**
144
+ * Remove device alias
145
+ * @param {string} key - callback of attribution
146
+ */
147
+ removeDeviceAlias(key) {
148
+ AirbridgeState.removeDeviceAlias(key);
149
+ }
150
+
151
+ /**
152
+ * clear device alias
153
+ */
154
+ clearDeviceAlias() {
155
+ AirbridgeState.clearDeviceAlias();
156
+ }
157
+
158
+ /**
159
+ * register push token
160
+ * @param {string} token - push token
161
+ */
162
+ registerPushToken(token) {
163
+ AirbridgeState.registerPushToken(token);
164
+ }
165
+ }
166
+
167
+ export default new State();
@@ -0,0 +1,135 @@
1
+ import Log from './tool/Log';
2
+ import _ from './tool/_';
3
+
4
+ /**
5
+ * class for interface of webview
6
+ */
7
+ class WebInterface {
8
+ /**
9
+ * @hideconstructor
10
+ */
11
+ constructor(webToken, postCommandFunction, stateInstance, eventInstance) {
12
+ if (_.isString(webToken) === false) {
13
+ Log.fail('webToken is not string');
14
+ return;
15
+ }
16
+
17
+ if (_.isFunction(postCommandFunction) === false) {
18
+ Log.fail('postCommandFunction is not function');
19
+ return;
20
+ }
21
+
22
+ const postCommand = postCommandFunction('command');
23
+
24
+ this._stateInstance = stateInstance;
25
+ this._eventInstance = eventInstance;
26
+
27
+ const getScript = function (webToken, postCommand) {
28
+ const jsonSchemaVersion = 4;
29
+ const sdkVersion = '2.5.2';
30
+
31
+ return `
32
+ AirbridgeNative = {};
33
+ AirbridgeNative.postCommand = function (command) {
34
+ ${postCommand};
35
+ };
36
+ AirbridgeNative.getWebToken = function () {
37
+ return "${webToken}";
38
+ };
39
+ AirbridgeNative.getJsonSchemaVersion = function () {
40
+ return ${jsonSchemaVersion};
41
+ };
42
+ AirbridgeNative.getSdkVersion = function () {
43
+ return "${sdkVersion}";
44
+ };
45
+ AirbridgeNative.setUser = function (payload) {
46
+ AirbridgeNative.postCommand(JSON.stringify({
47
+ method: "setUser",
48
+ payload: payload
49
+ }));
50
+ };
51
+ AirbridgeNative.clearUser = function () {
52
+ AirbridgeNative.postCommand(JSON.stringify({
53
+ method: "clearUser",
54
+ payload: {}
55
+ }));
56
+ };
57
+ AirbridgeNative.trackEvent = function (payload) {
58
+ AirbridgeNative.postCommand(JSON.stringify({
59
+ method: "trackEvent",
60
+ payload: payload
61
+ }));
62
+ };
63
+ `;
64
+ };
65
+
66
+ this.script = getScript(webToken, postCommand);
67
+ }
68
+
69
+ /**
70
+ * handle command from webview
71
+ * @param {String} command command from webview
72
+ */
73
+ handle(command) {
74
+ const object = JSON.parse(command);
75
+ switch (object.method) {
76
+ case 'setUser': {
77
+ if (_.isObject(object) === false) {
78
+ Log.unmatchType('user');
79
+ Log.fail('set user');
80
+
81
+ return;
82
+ }
83
+
84
+ const payload = JSON.parse(object.payload);
85
+ const user = {
86
+ id: payload.id,
87
+ email: payload.email,
88
+ phone: payload.phone,
89
+ alias: payload.alias,
90
+ attributes: payload.attributes,
91
+ };
92
+
93
+ this._stateInstance.setUser(user);
94
+ break;
95
+ }
96
+ case 'clearUser': {
97
+ const user = {
98
+ id: null,
99
+ email: null,
100
+ phone: null,
101
+ alias: null,
102
+ attributes: null,
103
+ };
104
+
105
+ this._stateInstance.setUser(user);
106
+ break;
107
+ }
108
+ case 'trackEvent': {
109
+ if (_.isObject(object) === false) {
110
+ Log.unmatchType('event');
111
+ Log.fail('track event');
112
+
113
+ return;
114
+ }
115
+
116
+ const payload = JSON.parse(object.payload);
117
+ const option = {
118
+ action: payload.action,
119
+ label: payload.label,
120
+ value: payload.value,
121
+ customAttributes: payload.custom_attributes,
122
+ semanticAttributes: payload.semantic_attributes,
123
+ };
124
+
125
+ this._eventInstance.trackEvent(payload.category, option);
126
+ break;
127
+ }
128
+ default:
129
+ Log.info('webinterface command is not handlable');
130
+ break;
131
+ }
132
+ }
133
+ }
134
+
135
+ export default WebInterface;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * class for log
3
+ * @private
4
+ */
5
+ class Log {
6
+ /**
7
+ * @type {string}
8
+ * @private
9
+ */
10
+ static HEADER = '[Airbridge RN]';
11
+
12
+ /**
13
+ * warning unmatch type exist
14
+ * @param {string} name
15
+ * @returns {void}
16
+ */
17
+ static unmatchType(name) {
18
+ console.warn(`${this.HEADER} ${name} has unmatched type`);
19
+ }
20
+
21
+ /**
22
+ * log infomaton message
23
+ * @param {string} message
24
+ * @returns {void}
25
+ */
26
+ static info(message) {
27
+ console.info(`${this.HEADER} ${message}`);
28
+ }
29
+
30
+ /**
31
+ * warning fail to do task in method
32
+ * @param {string} name
33
+ * @returns {void}
34
+ */
35
+ static fail(name) {
36
+ console.warn(`${this.HEADER} fail to ${name}`);
37
+ }
38
+ }
39
+
40
+ export default Log;
package/src/tool/_.js ADDED
@@ -0,0 +1,56 @@
1
+ import isFunction from 'lodash.isfunction';
2
+ import isPlainObject from 'lodash.isplainobject';
3
+ import isString from 'lodash.isstring';
4
+
5
+ /**
6
+ * class for util method
7
+ * @private
8
+ */
9
+ class _ {
10
+ /**
11
+ * return true if value is null or plain object
12
+ * @param {any} value
13
+ * @returns {boolean}
14
+ */
15
+ static isNullableObject(value) {
16
+ return value === null || isPlainObject(value);
17
+ }
18
+
19
+ /**
20
+ * return true if value is plain object
21
+ * @param {any} value
22
+ * @returns {boolean}
23
+ */
24
+ static isObject(value) {
25
+ return isPlainObject(value);
26
+ }
27
+
28
+ /**
29
+ * return true if value is null or string
30
+ * @param {any} value
31
+ * @returns {boolean}
32
+ */
33
+ static isNullableString(value) {
34
+ return value === null || isString(value);
35
+ }
36
+
37
+ /**
38
+ * return true if value is string
39
+ * @param {any} value
40
+ * @returns {boolean}
41
+ */
42
+ static isString(value) {
43
+ return isString(value);
44
+ }
45
+
46
+ /**
47
+ * return true if value is function
48
+ * @param {any} value
49
+ * @returns {boolean}
50
+ */
51
+ static isFunction(value) {
52
+ return isFunction(value);
53
+ }
54
+ }
55
+
56
+ export default _;
@@ -0,0 +1,16 @@
1
+ /** Common AirbridgeAttribute Keys */
2
+ var AirbridgeAttributes = {
3
+ QUERY: "query",
4
+ PRODUCT_LIST_ID: "productListID",
5
+ CART_ID: "cartID",
6
+ TRANSACTION_ID: "transactionID",
7
+ PRODUCTS: "products",
8
+ IN_APP_PURCHASED: "inAppPurchased",
9
+ CURRENCY: "currency",
10
+ TOTAL_VALUE: "totalValue",
11
+ TOTAL_QUANTITY: "totalQuantity",
12
+ };
13
+
14
+ export {
15
+ AirbridgeAttributes,
16
+ }
@@ -0,0 +1,18 @@
1
+ /** Common Airbridge category */
2
+ var AirbridgeCategory = {
3
+ SIGN_UP: "airbridge.user.signup",
4
+ SIGN_IN: "airbridge.user.signin",
5
+ SIGN_OUT: "airbridge.user.signout",
6
+
7
+ HOME_VIEW: "airbridge.ecommerce.home.viewed",
8
+ SEARCH_RESULT_VIEW: "airbridge.ecommerce.searchResults.viewed",
9
+ PRODUCT_LIST_VIEW: "airbridge.ecommerce.productList.viewed",
10
+ PRODUCT_DETAILS_VIEW: "airbridge.ecommerce.product.viewed",
11
+
12
+ ADD_TO_CART: "airbridge.ecommerce.product.addedToCart",
13
+ ORDER_COMPLETED: "airbridge.ecommerce.order.completed"
14
+ };
15
+
16
+ export {
17
+ AirbridgeCategory,
18
+ }
@@ -0,0 +1,13 @@
1
+ /** Common AirbridgeProduct Keys */
2
+ var AirbridgeProduct = {
3
+ PRODUCT_ID: "productID",
4
+ NAME: "name",
5
+ CURRENCY: "currency",
6
+ PRICE: "price",
7
+ QUANTITY: "quantity",
8
+ POSITION: "position",
9
+ };
10
+
11
+ export {
12
+ AirbridgeProduct,
13
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @typedef {Object} EventOption
3
+ *
4
+ * @property {string} [action] event group name 1
5
+ * @property {string} [label] event group name 2
6
+ * @property {number} [value] event custom value
7
+ * @property {Object.<string, string>} [customAttributes] event custom attributes
8
+ * @property {Object.<string, *>} [semanticAttributes] event semantic attributes
9
+ */
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @typedef {Object} Product
3
+ *
4
+ * @property {string} [ID] Product's unique identifier
5
+ * @property {string} [name] Product's name
6
+ * @property {string} [currency] currency in <a href='https://en.wikipedia.org/wiki/ISO_4217'>ISO 4217<a/>
7
+ * @property {number} [price] Product's price
8
+ * @property {number} [quantity] Purchased quantity
9
+ * @property {number} [position] Product's index in list
10
+ */
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @typedef {Object} User
3
+ *
4
+ * @property {string} [ID] User's ID (not allow empty string)
5
+ * @property {string} [email] User's Email (not allow empty string)
6
+ * @property {string} [phone] User's Phone Number (not allow empty string)
7
+ * @property {object} [alias] User's Alias
8
+ * @property {object} [attributes] User's Attributes
9
+ */