@mparticle/web-sdk 2.79.2 → 2.79.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.
@@ -1,13 +1,40 @@
1
1
  import Constants from './constants';
2
+ import { IMParticleWebSDKInstance } from './mp-instance';
3
+ import {
4
+ IAndroidNativeBridge,
5
+ INativeSdkHelpers,
6
+ } from './nativeSdkHelpers.interfaces';
2
7
 
3
- var Messages = Constants.Messages;
8
+ const Messages = Constants.Messages;
4
9
 
5
- var androidBridgeNameBase = 'mParticleAndroid';
6
- var iosBridgeNameBase = 'mParticle';
10
+ const androidBridgeNameBase = 'mParticleAndroid';
11
+ const iosBridgeNameBase = 'mParticle';
7
12
 
8
- export default function NativeSdkHelpers(mpInstance) {
9
- var self = this;
10
- this.initializeSessionAttributes = function(apiKey) {
13
+ function getAndroidBridge(name: string): IAndroidNativeBridge | undefined {
14
+ if (!Object.prototype.hasOwnProperty.call(window, name)) {
15
+ return undefined;
16
+ }
17
+
18
+ return (window as unknown as Record<string, IAndroidNativeBridge | undefined>)[
19
+ name
20
+ ];
21
+ }
22
+
23
+ function getInstanceNamedValue(
24
+ instance: IMParticleWebSDKInstance,
25
+ name: string
26
+ ): unknown {
27
+ return (instance as IMParticleWebSDKInstance & Record<string, unknown>)[
28
+ name
29
+ ];
30
+ }
31
+
32
+ export default function NativeSdkHelpers(
33
+ this: INativeSdkHelpers,
34
+ mpInstance: IMParticleWebSDKInstance
35
+ ): void {
36
+ const self = this;
37
+ this.initializeSessionAttributes = function(apiKey: string): void {
11
38
  const { SetSessionAttribute } = Constants.NativeSdkPaths;
12
39
  const env = JSON.stringify({
13
40
  key: '$src_env',
@@ -25,20 +52,16 @@ export default function NativeSdkHelpers(mpInstance) {
25
52
  }
26
53
  };
27
54
 
28
- this.isBridgeV2Available = function(bridgeName) {
55
+ this.isBridgeV2Available = function(bridgeName: string): boolean {
29
56
  if (!bridgeName) {
30
57
  return false;
31
58
  }
32
- var androidBridgeName =
59
+ const androidBridgeName =
33
60
  androidBridgeNameBase + '_' + bridgeName + '_v2';
34
- var iosBridgeName = iosBridgeNameBase + '_' + bridgeName + '_v2';
61
+ const iosBridgeName = iosBridgeNameBase + '_' + bridgeName + '_v2';
35
62
 
36
63
  // iOS v2 bridge
37
- if (
38
- window.webkit &&
39
- window.webkit.messageHandlers &&
40
- window.webkit.messageHandlers.hasOwnProperty(iosBridgeName)
41
- ) {
64
+ if (window.webkit?.messageHandlers?.hasOwnProperty(iosBridgeName)) {
42
65
  return true;
43
66
  }
44
67
  // other iOS v2 bridge
@@ -58,9 +81,9 @@ export default function NativeSdkHelpers(mpInstance) {
58
81
  };
59
82
 
60
83
  this.isWebviewEnabled = function(
61
- requiredWebviewBridgeName,
62
- minWebviewBridgeVersion
63
- ) {
84
+ requiredWebviewBridgeName: string,
85
+ minWebviewBridgeVersion: number
86
+ ): boolean {
64
87
  mpInstance._Store.bridgeV2Available = self.isBridgeV2Available(
65
88
  requiredWebviewBridgeName
66
89
  );
@@ -92,7 +115,7 @@ export default function NativeSdkHelpers(mpInstance) {
92
115
  return false;
93
116
  };
94
117
 
95
- this.isBridgeV1Available = function() {
118
+ this.isBridgeV1Available = function(): boolean {
96
119
  if (
97
120
  mpInstance._Store.SDKConfig.useNativeSdk ||
98
121
  window.mParticleAndroid ||
@@ -104,7 +127,7 @@ export default function NativeSdkHelpers(mpInstance) {
104
127
  return false;
105
128
  };
106
129
 
107
- this.sendToNative = function(path, value) {
130
+ this.sendToNative = function(path: string, value?: string): void {
108
131
  if (
109
132
  mpInstance._Store.bridgeV2Available &&
110
133
  mpInstance._Store.SDKConfig.minWebviewBridgeVersion === 2
@@ -136,7 +159,7 @@ export default function NativeSdkHelpers(mpInstance) {
136
159
  }
137
160
  };
138
161
 
139
- this.sendViaBridgeV1 = function(path, value) {
162
+ this.sendViaBridgeV1 = function(path: string, value: string): void {
140
163
  if (
141
164
  window.mParticleAndroid &&
142
165
  window.mParticleAndroid.hasOwnProperty(path)
@@ -153,8 +176,8 @@ export default function NativeSdkHelpers(mpInstance) {
153
176
  }
154
177
  };
155
178
 
156
- this.sendViaIframeToIOS = function(path, value) {
157
- var iframe = document.createElement('IFRAME');
179
+ this.sendViaIframeToIOS = function(path: string, value: string): void {
180
+ const iframe = document.createElement('IFRAME');
158
181
  iframe.setAttribute(
159
182
  'src',
160
183
  'mp-sdk://' + path + '/' + encodeURIComponent(value)
@@ -163,30 +186,32 @@ export default function NativeSdkHelpers(mpInstance) {
163
186
  iframe.parentNode.removeChild(iframe);
164
187
  };
165
188
 
166
- this.sendViaBridgeV2 = function(path, value, requiredWebviewBridgeName) {
189
+ this.sendViaBridgeV2 = function(
190
+ path: string,
191
+ value: string,
192
+ requiredWebviewBridgeName: string
193
+ ): void {
167
194
  if (!requiredWebviewBridgeName) {
168
195
  return;
169
196
  }
170
197
 
171
- var androidBridgeName =
198
+ const androidBridgeName =
172
199
  androidBridgeNameBase + '_' + requiredWebviewBridgeName + '_v2',
173
- androidBridge = window[androidBridgeName],
200
+ androidBridge = getAndroidBridge(androidBridgeName),
174
201
  iosBridgeName =
175
- iosBridgeNameBase + '_' + requiredWebviewBridgeName + '_v2',
176
- iOSBridgeMessageHandler,
177
- iOSBridgeNonMessageHandler;
202
+ iosBridgeNameBase + '_' + requiredWebviewBridgeName + '_v2';
203
+ let iOSBridgeMessageHandler, iOSBridgeNonMessageHandler;
178
204
 
179
- if (
180
- window.webkit &&
181
- window.webkit.messageHandlers &&
182
- window.webkit.messageHandlers[iosBridgeName]
183
- ) {
205
+ if (window.webkit?.messageHandlers?.[iosBridgeName]) {
184
206
  iOSBridgeMessageHandler =
185
207
  window.webkit.messageHandlers[iosBridgeName];
186
208
  }
187
209
 
188
210
  if (mpInstance.uiwebviewBridgeName === iosBridgeName) {
189
- iOSBridgeNonMessageHandler = mpInstance[iosBridgeName];
211
+ iOSBridgeNonMessageHandler = getInstanceNamedValue(
212
+ mpInstance,
213
+ iosBridgeName
214
+ );
190
215
  }
191
216
 
192
217
  if (androidBridge && androidBridge.hasOwnProperty(path)) {