@de./sdk-rn 1.0.17 → 1.0.18

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.
@@ -19,6 +19,7 @@ export interface MSIProps extends MapOptions {
19
19
  }
20
20
  export interface MSIRef extends MSIInterface {
21
21
  isReady: () => boolean;
22
+ retry: () => void;
22
23
  }
23
24
  declare const _default: React.ForwardRefExoticComponent<MSIProps & React.RefAttributes<MSIRef>>;
24
25
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/allend/MSI/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAA;AAI3F,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,OAAO,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;CACjB;AA4CD,MAAM,WAAW,QAAS,SAAQ,UAAU;IAC1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAA;CACvC;AAED,MAAM,WAAW,MAAO,SAAQ,YAAY;IAC1C,OAAO,EAAE,MAAM,OAAO,CAAA;CACvB;;AAGD,wBAmKE;AA6BF,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAY;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAA;gBAEhC,OAAO,EAAE,UAAU;IAOhC,MAAM,CAAC,CAAC,EAAG,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAItC,IAAI,CAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;IAMtC,EAAE,CAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;IAIpC,UAAU,IAAI,UAAU;IAIxB,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAO7B,OAAO,IAAI,OAAO;CAGnB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/allend/MSI/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAA;AAI3F,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,OAAO,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,QAAQ,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;CACjB;AA4CD,MAAM,WAAW,QAAS,SAAQ,UAAU;IAC1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAA;CACvC;AAED,MAAM,WAAW,MAAO,SAAQ,YAAY;IAC1C,OAAO,EAAE,MAAM,OAAO,CAAA;IACtB,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;;AAGD,wBA0QE;AAmCF,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAY;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;IAChC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,CAAA;gBAEhC,OAAO,EAAE,UAAU;IAOhC,MAAM,CAAC,CAAC,EAAG,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAItC,IAAI,CAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;IAMtC,EAAE,CAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;IAIpC,UAAU,IAAI,UAAU;IAIxB,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAO7B,OAAO,IAAI,OAAO;CAGnB"}
@@ -3,7 +3,7 @@
3
3
  * React Native SDK for MSI (Map Service Interface)
4
4
  */
5
5
  import React, { useRef, useEffect, useState, forwardRef, useImperativeHandle } from 'react';
6
- import { View, StyleSheet, AppState } from 'react-native';
6
+ import { View, Text, StyleSheet, AppState } from 'react-native';
7
7
  import { WebView } from 'react-native-webview';
8
8
  import WIO from 'webview.io';
9
9
  import Controls from './Controls';
@@ -57,92 +57,193 @@ export default forwardRef((props, ref) => {
57
57
  const handlesRef = useRef(null);
58
58
  const pluginsRef = useRef(null);
59
59
  const [isConnected, setIsConnected] = useState(false);
60
+ const [isReady, setIsReady] = useState(false);
60
61
  const [hasError, setHasError] = useState(false);
62
+ const [connectionAttempts, setConnectionAttempts] = useState(0);
63
+ const isInitializedRef = useRef(false);
61
64
  // Expose API via ref
62
65
  useImperativeHandle(ref, () => ({
63
66
  controls: controlsRef.current,
64
67
  handles: handlesRef.current,
65
68
  plugins: pluginsRef.current,
66
- isReady: () => isConnected
69
+ isReady: () => isConnected && isReady,
70
+ retry: () => {
71
+ setHasError(false);
72
+ setConnectionAttempts(0);
73
+ initializeConnection();
74
+ }
67
75
  }));
68
- useEffect(() => {
69
- // Initialize WIO bridge
70
- console.log('Initializing WIO bridge from MSI component');
71
- wioRef.current = new WIO({
72
- type: 'WEBVIEW',
73
- debug: props.env === 'dev'
76
+ const initializeAPI = () => {
77
+ var _a;
78
+ if (isInitializedRef.current || !wioRef.current || !isConnected || !isReady)
79
+ return;
80
+ console.log('[MSI] Initializing API components');
81
+ const controls = new Controls(wioRef.current, props), handles = new Handles(wioRef.current, controls, props), plugins = new Plugins(wioRef.current, handles, controls, props);
82
+ plugins.mount(REGISTERED_PLUGINS);
83
+ controlsRef.current = controls;
84
+ handlesRef.current = handles;
85
+ pluginsRef.current = plugins;
86
+ isInitializedRef.current = true;
87
+ console.log('[MSI] API initialized successfully');
88
+ (_a = props.onLoaded) === null || _a === void 0 ? void 0 : _a.call(props, {
89
+ controls,
90
+ handles,
91
+ plugins
74
92
  });
93
+ };
94
+ const performBinding = async () => {
95
+ var _a;
96
+ if (!wioRef.current)
97
+ return;
98
+ console.log('[MSI] Performing bind with access token');
99
+ try {
100
+ // Use emitAsync for better error handling
101
+ await wioRef.current.emitAsync('bind', Object.assign(Object.assign({}, props), { origin: 'react-native' }), 10000); // 10 second timeout for binding
102
+ console.log('[MSI] Bind successful');
103
+ setIsConnected(true);
104
+ setHasError(false);
105
+ }
106
+ catch (error) {
107
+ console.error('[MSI] Bind failed:', error);
108
+ const errorObj = error instanceof Error ? error : new Error(String(error));
109
+ setHasError(true);
110
+ (_a = props.onError) === null || _a === void 0 ? void 0 : _a.call(props, errorObj);
111
+ }
112
+ };
113
+ const initializeConnection = () => {
114
+ if (!wioRef.current || !webViewRef.current)
115
+ return;
75
116
  const baseURL = props.env === 'dev'
76
117
  ? 'http://localhost:4800'
77
118
  : 'https://msi.dedot.io';
119
+ console.log('[MSI] Initiating WIO connection to', baseURL);
78
120
  wioRef.current.initiate(webViewRef, baseURL);
121
+ };
122
+ useEffect(() => {
123
+ // Initialize WIO bridge
124
+ console.log('[MSI] Creating WIO instance');
125
+ wioRef.current = new WIO({
126
+ type: 'WEBVIEW',
127
+ debug: props.env === 'dev',
128
+ connectionTimeout: 15000, // 15 seconds for initial connection
129
+ connectionPingInterval: 2000,
130
+ maxConnectionAttempts: 5,
131
+ autoReconnect: true,
132
+ heartbeatInterval: 30000
133
+ });
79
134
  // Setup event listeners
80
- console.log('Setup event listeners from MSI component');
135
+ console.log('[MSI] Setting up WIO event listeners');
81
136
  wioRef.current
82
- .once('connect', () => {
83
- console.log('WIO connected from MSI component', wioRef.current);
84
- const wio = wioRef.current;
85
- // Bind with access token and origin
86
- console.log('Initiate binding with access token and origin from MSI component', props);
87
- wio.emit('bind', Object.assign(Object.assign({}, props), { origin: 'react-native' }), (error) => {
88
- var _a;
89
- console.log('WIO bind from MSI component', error);
90
- if (error) {
91
- const errorObj = new Error(typeof error === 'string' ? error : 'Connection failed');
92
- setHasError(true);
93
- (_a = props.onError) === null || _a === void 0 ? void 0 : _a.call(props, errorObj);
94
- return;
95
- }
96
- setIsConnected(true);
97
- });
137
+ // Handle successful connection
138
+ .on('connect', async () => {
139
+ console.log('[MSI] WIO bridge connected');
140
+ setConnectionAttempts(0);
141
+ // Perform binding after connection
142
+ await performBinding();
98
143
  })
99
- .on('error', (error) => {
144
+ // Handle connection timeout
145
+ .on('connect_timeout', ({ attempts }) => {
100
146
  var _a;
101
- console.log('WIO error from MSI component', error);
102
- const errorObj = typeof error === 'object' ? error : new Error(error);
147
+ console.error('[MSI] Connection timeout after', attempts, 'attempts');
148
+ setConnectionAttempts(attempts);
103
149
  setHasError(true);
104
- (_a = props.onError) === null || _a === void 0 ? void 0 : _a.call(props, errorObj);
150
+ (_a = props.onError) === null || _a === void 0 ? void 0 : _a.call(props, new Error(`Failed to connect after ${attempts} attempts`));
151
+ })
152
+ // Handle reconnection attempts
153
+ .on('reconnecting', ({ attempt, delay }) => {
154
+ console.log(`[MSI] Reconnecting (attempt ${attempt}, delay ${delay}ms)`);
155
+ setIsConnected(false);
156
+ setIsReady(false);
105
157
  })
158
+ // Handle reconnection failure
159
+ .on('reconnection_failed', ({ attempts }) => {
160
+ var _a;
161
+ console.error('[MSI] Reconnection failed after', attempts, 'attempts');
162
+ setHasError(true);
163
+ (_a = props.onError) === null || _a === void 0 ? void 0 : _a.call(props, new Error(`Reconnection failed after ${attempts} attempts`));
164
+ })
165
+ // Handle disconnection
166
+ .on('disconnect', ({ reason }) => {
167
+ console.log('[MSI] Disconnected:', reason);
168
+ setIsConnected(false);
169
+ setIsReady(false);
170
+ })
171
+ // Handle WebView ready event
106
172
  .on('ready', () => {
107
- var _a, _b;
108
- console.log('MSI ready', wioRef.current);
173
+ var _a;
174
+ console.log('[MSI] WebView content ready');
175
+ setIsReady(true);
109
176
  (_a = props.onReady) === null || _a === void 0 ? void 0 : _a.call(props);
110
- // Initialize API
111
- if (wioRef.current && isConnected && !controlsRef.current) {
112
- const controls = new Controls(wioRef.current, props), handles = new Handles(wioRef.current, controls, props), plugins = new Plugins(wioRef.current, handles, controls, props);
113
- plugins.mount(REGISTERED_PLUGINS);
114
- controlsRef.current = controls;
115
- handlesRef.current = handles;
116
- pluginsRef.current = plugins;
117
- console.log('MSI loaded', controls, handles, plugins);
118
- (_b = props.onLoaded) === null || _b === void 0 ? void 0 : _b.call(props, {
119
- controls,
120
- handles,
121
- plugins
122
- });
177
+ })
178
+ // Handle errors
179
+ .on('error', (error) => {
180
+ var _a;
181
+ console.error('[MSI] WIO error:', error);
182
+ const errorObj = typeof error === 'object' && error.error
183
+ ? new Error(error.error)
184
+ : typeof error === 'string'
185
+ ? new Error(error)
186
+ : error instanceof Error
187
+ ? error
188
+ : new Error('Unknown error');
189
+ // Don't set hasError for rate limiting or non-critical errors
190
+ if (error.type !== 'RATE_LIMIT_EXCEEDED') {
191
+ setHasError(true);
123
192
  }
193
+ (_a = props.onError) === null || _a === void 0 ? void 0 : _a.call(props, errorObj);
124
194
  });
125
195
  // Handle app state changes
126
196
  const subscription = AppState.addEventListener('change', (nextAppState) => {
197
+ var _a, _b, _c;
127
198
  if (nextAppState === 'background') {
128
- // Pause updates when app goes to background
129
- console.log('App backgrounded - pausing map updates');
199
+ console.log('[MSI] App backgrounded - pausing map updates');
200
+ // Optionally emit event to WebView to pause rendering
201
+ (_a = wioRef.current) === null || _a === void 0 ? void 0 : _a.emit('app:background');
130
202
  }
131
203
  else if (nextAppState === 'active') {
132
- // Resume when app comes to foreground
133
- console.log('App active - resuming map updates');
204
+ console.log('[MSI] App active - resuming map updates');
205
+ (_b = wioRef.current) === null || _b === void 0 ? void 0 : _b.emit('app:foreground');
206
+ // Check if we need to reconnect
207
+ if (!((_c = wioRef.current) === null || _c === void 0 ? void 0 : _c.isConnected())) {
208
+ console.log('[MSI] Reconnecting after app resumed');
209
+ initializeConnection();
210
+ }
134
211
  }
135
212
  });
136
213
  return () => {
137
214
  var _a;
215
+ console.log('[MSI] Cleaning up');
138
216
  subscription.remove();
139
217
  (_a = wioRef.current) === null || _a === void 0 ? void 0 : _a.disconnect();
218
+ isInitializedRef.current = false;
140
219
  };
141
220
  }, []);
142
- const initialize = () => {
143
- };
221
+ // Initialize API when both connection and ready state are achieved
222
+ useEffect(() => initializeAPI(), [isConnected, isReady]);
144
223
  const handleMessage = (event) => {
145
224
  var _a;
225
+ // Handle console logs separately
226
+ try {
227
+ const data = JSON.parse(event.nativeEvent.data);
228
+ if (data.type === '__console') {
229
+ const prefix = '[WebView]';
230
+ switch (data.level) {
231
+ case 'log':
232
+ console.log(prefix, data.message);
233
+ break;
234
+ case 'error':
235
+ console.error(prefix, data.message);
236
+ break;
237
+ case 'warn':
238
+ console.warn(prefix, data.message);
239
+ break;
240
+ }
241
+ return;
242
+ }
243
+ }
244
+ catch (e) {
245
+ // Not JSON or not console log, pass to WIO
246
+ }
146
247
  (_a = wioRef.current) === null || _a === void 0 ? void 0 : _a.handleMessage(event);
147
248
  };
148
249
  const baseURL = props.env === 'dev'
@@ -152,21 +253,27 @@ export default forwardRef((props, ref) => {
152
253
  <WebView ref={webViewRef} source={{ uri: mapUrl }} style={styles.webview} onMessage={handleMessage} injectedJavaScript={`
153
254
  ${getInjectedConsole()}
154
255
  ${WIO_PAIR_INJECTED_JAVASCRIPT}
155
- `} javaScriptEnabled={true} domStorageEnabled={true} geolocationEnabled={true} allowsInlineMediaPlayback={true} cacheEnabled={true} androidLayerType="hardware" allowsBackForwardNavigationGestures={false} bounces={false} scrollEnabled={false} mixedContentMode="always" originWhitelist={['*']} onLoadStart={() => console.log('WebView loading...')} onLoadEnd={() => {
156
- console.log('WebView loaded');
157
- // initialize()
158
- setTimeout(() => { var _a; return (_a = wioRef.current) === null || _a === void 0 ? void 0 : _a.emit('ping'); }, 3000);
256
+ `} javaScriptEnabled={true} domStorageEnabled={true} geolocationEnabled={true} allowsInlineMediaPlayback={true} cacheEnabled={true} androidLayerType="hardware" allowsBackForwardNavigationGestures={false} bounces={false} scrollEnabled={false} mixedContentMode="always" originWhitelist={['*']} onLoadStart={() => console.log('[MSI] WebView loading...')} onLoadEnd={() => {
257
+ console.log('[MSI] WebView loaded, initiating connection');
258
+ // Let WIO handle the connection automatically
259
+ // Remove the manual ping - it's not needed!
260
+ initializeConnection();
159
261
  }} onError={(syntheticEvent) => {
160
262
  var _a;
161
263
  const { nativeEvent } = syntheticEvent;
162
- console.error('WebView error:', nativeEvent);
264
+ console.error('[MSI] WebView error:', nativeEvent);
163
265
  setHasError(true);
164
266
  (_a = props.onError) === null || _a === void 0 ? void 0 : _a.call(props, new Error(nativeEvent.description || 'WebView error'));
165
267
  }}/>
166
268
 
167
269
  {hasError && (<View style={styles.errorOverlay}>
168
270
  <View style={styles.errorCard}>
169
- {/* Error UI can be added here */}
271
+ {/* Add error UI with retry button */}
272
+ <Text style={styles.errorText}>
273
+ {connectionAttempts > 0
274
+ ? `Connection failed after ${connectionAttempts} attempts`
275
+ : 'An error occurred'}
276
+ </Text>
170
277
  </View>
171
278
  </View>)}
172
279
  </View>);
@@ -185,7 +292,13 @@ const styles = StyleSheet.create({
185
292
  backgroundColor: 'white',
186
293
  padding: 20,
187
294
  borderRadius: 12,
188
- margin: 20
295
+ margin: 20,
296
+ minWidth: 200
297
+ },
298
+ errorText: {
299
+ fontSize: 16,
300
+ color: '#333',
301
+ textAlign: 'center'
189
302
  }
190
303
  });
191
304
  // =====================================================
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/allend/MSI/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/allend/MSI/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@de./sdk-rn",
3
- "version": "1.0.17",
3
+ "version": "1.0.18",
4
4
  "description": "Complete SDK pack for MSI React Native (Map Service Interface) and DClient services",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -37,7 +37,7 @@
37
37
  "dependencies": {
38
38
  "events": "^3.3.0",
39
39
  "socket.io-client": "^4.6.1",
40
- "webview.io": "^1.0.1"
40
+ "webview.io": "^1.0.2"
41
41
  },
42
42
  "peerDependencies": {
43
43
  "react": ">=16.8.0",
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import React, { useRef, useEffect, useState, forwardRef, useImperativeHandle } from 'react'
7
- import { View, StyleSheet, AppState, AppStateStatus } from 'react-native'
7
+ import { View, Text, StyleSheet, AppState, AppStateStatus } from 'react-native'
8
8
  import { WebView } from 'react-native-webview'
9
9
  import WIO from 'webview.io'
10
10
  import Controls from './Controls'
@@ -68,6 +68,7 @@ export interface MSIProps extends MapOptions {
68
68
 
69
69
  export interface MSIRef extends MSIInterface {
70
70
  isReady: () => boolean
71
+ retry: () => void
71
72
  }
72
73
 
73
74
  // MSI Component
@@ -78,108 +79,205 @@ export default forwardRef<MSIRef, MSIProps>(( props, ref ) => {
78
79
  const handlesRef = useRef<Handles | null>(null)
79
80
  const pluginsRef = useRef<Plugins | null>(null)
80
81
  const [isConnected, setIsConnected] = useState(false)
82
+ const [isReady, setIsReady] = useState(false)
81
83
  const [hasError, setHasError] = useState(false)
84
+ const [connectionAttempts, setConnectionAttempts] = useState(0)
85
+ const isInitializedRef = useRef(false)
82
86
 
83
87
  // Expose API via ref
84
88
  useImperativeHandle( ref, () => ({
85
89
  controls: controlsRef.current!,
86
90
  handles: handlesRef.current!,
87
91
  plugins: pluginsRef.current!,
88
- isReady: () => isConnected
92
+ isReady: () => isConnected && isReady,
93
+ retry: () => {
94
+ setHasError(false)
95
+ setConnectionAttempts(0)
96
+ initializeConnection()
97
+ }
89
98
  }))
90
99
 
91
- useEffect(() => {
92
- // Initialize WIO bridge
93
- console.log('Initializing WIO bridge from MSI component')
94
- wioRef.current = new WIO({
95
- type: 'WEBVIEW',
96
- debug: props.env === 'dev'
100
+ const initializeAPI = () => {
101
+ if( isInitializedRef.current || !wioRef.current || !isConnected || !isReady ) return
102
+
103
+ console.log('[MSI] Initializing API components')
104
+
105
+ const
106
+ controls = new Controls( wioRef.current, props ),
107
+ handles = new Handles( wioRef.current, controls, props ),
108
+ plugins = new Plugins( wioRef.current, handles, controls, props )
109
+
110
+ plugins.mount( REGISTERED_PLUGINS )
111
+
112
+ controlsRef.current = controls
113
+ handlesRef.current = handles
114
+ pluginsRef.current = plugins
115
+ isInitializedRef.current = true
116
+
117
+ console.log('[MSI] API initialized successfully')
118
+ props.onLoaded?.({
119
+ controls,
120
+ handles,
121
+ plugins
97
122
  })
123
+ }
124
+
125
+ const performBinding = async () => {
126
+ if( !wioRef.current ) return
127
+
128
+ console.log('[MSI] Performing bind with access token')
129
+
130
+ try {
131
+ // Use emitAsync for better error handling
132
+ await wioRef.current.emitAsync('bind', { ...props, origin: 'react-native' }, 10000) // 10 second timeout for binding
133
+
134
+ console.log('[MSI] Bind successful')
135
+ setIsConnected(true)
136
+ setHasError(false)
137
+ }
138
+ catch( error ) {
139
+ console.error('[MSI] Bind failed:', error)
140
+ const errorObj = error instanceof Error ? error : new Error(String(error))
141
+ setHasError(true)
142
+ props.onError?.(errorObj)
143
+ }
144
+ }
145
+
146
+ const initializeConnection = () => {
147
+ if( !wioRef.current || !webViewRef.current ) return
98
148
 
99
149
  const baseURL = props.env === 'dev'
100
150
  ? 'http://localhost:4800'
101
151
  : 'https://msi.dedot.io'
102
152
 
153
+ console.log('[MSI] Initiating WIO connection to', baseURL)
103
154
  wioRef.current.initiate( webViewRef, baseURL )
155
+ }
156
+
157
+ useEffect(() => {
158
+ // Initialize WIO bridge
159
+ console.log('[MSI] Creating WIO instance')
160
+ wioRef.current = new WIO({
161
+ type: 'WEBVIEW',
162
+ debug: props.env === 'dev',
163
+ connectionTimeout: 15000, // 15 seconds for initial connection
164
+ connectionPingInterval: 2000,
165
+ maxConnectionAttempts: 5,
166
+ autoReconnect: true,
167
+ heartbeatInterval: 30000
168
+ })
104
169
 
105
170
  // Setup event listeners
106
- console.log('Setup event listeners from MSI component')
171
+ console.log('[MSI] Setting up WIO event listeners')
172
+
107
173
  wioRef.current
108
- .once('connect', () => {
109
- console.log('WIO connected from MSI component', wioRef.current)
110
- const wio = wioRef.current!
111
-
112
- // Bind with access token and origin
113
- console.log('Initiate binding with access token and origin from MSI component', props)
114
- wio.emit('bind', {
115
- ...props,
116
- origin: 'react-native'
117
- }, ( error: string | boolean ) => {
118
- console.log('WIO bind from MSI component', error)
119
- if( error ){
120
- const errorObj = new Error( typeof error === 'string' ? error : 'Connection failed' )
121
- setHasError( true )
122
- props.onError?.( errorObj )
123
- return
124
- }
125
-
126
- setIsConnected( true )
127
- })
174
+ // Handle successful connection
175
+ .on('connect', async () => {
176
+ console.log('[MSI] WIO bridge connected')
177
+ setConnectionAttempts(0)
178
+
179
+ // Perform binding after connection
180
+ await performBinding()
181
+ })
182
+ // Handle connection timeout
183
+ .on('connect_timeout', ({ attempts }) => {
184
+ console.error('[MSI] Connection timeout after', attempts, 'attempts')
185
+ setConnectionAttempts(attempts)
186
+ setHasError(true)
187
+ props.onError?.(new Error(`Failed to connect after ${attempts} attempts`))
188
+ })
189
+ // Handle reconnection attempts
190
+ .on('reconnecting', ({ attempt, delay }) => {
191
+ console.log(`[MSI] Reconnecting (attempt ${attempt}, delay ${delay}ms)`)
192
+ setIsConnected(false)
193
+ setIsReady(false)
128
194
  })
129
- .on('error', ( error: Error | string ) => {
130
- console.log('WIO error from MSI component', error)
131
- const errorObj = typeof error === 'object' ? error : new Error( error )
132
- setHasError( true )
133
- props.onError?.( errorObj )
195
+ // Handle reconnection failure
196
+ .on('reconnection_failed', ({ attempts }) => {
197
+ console.error('[MSI] Reconnection failed after', attempts, 'attempts')
198
+ setHasError(true)
199
+ props.onError?.(new Error(`Reconnection failed after ${attempts} attempts`))
134
200
  })
201
+ // Handle disconnection
202
+ .on('disconnect', ({ reason }) => {
203
+ console.log('[MSI] Disconnected:', reason)
204
+ setIsConnected(false)
205
+ setIsReady(false)
206
+ })
207
+ // Handle WebView ready event
135
208
  .on('ready', () => {
136
- console.log('MSI ready', wioRef.current)
209
+ console.log('[MSI] WebView content ready')
210
+ setIsReady(true)
137
211
  props.onReady?.()
138
-
139
- // Initialize API
140
- if( wioRef.current && isConnected && !controlsRef.current ){
141
- const
142
- controls = new Controls( wioRef.current, props ),
143
- handles = new Handles( wioRef.current, controls, props ),
144
- plugins = new Plugins( wioRef.current, handles, controls, props )
145
-
146
- plugins.mount( REGISTERED_PLUGINS )
147
-
148
- controlsRef.current = controls
149
- handlesRef.current = handles
150
- pluginsRef.current = plugins
151
-
152
- console.log('MSI loaded', controls, handles, plugins)
153
- props.onLoaded?.({
154
- controls,
155
- handles,
156
- plugins
157
- })
212
+ })
213
+ // Handle errors
214
+ .on('error', ( error: any ) => {
215
+ console.error('[MSI] WIO error:', error)
216
+ const errorObj = typeof error === 'object' && error.error
217
+ ? new Error(error.error)
218
+ : typeof error === 'string'
219
+ ? new Error(error)
220
+ : error instanceof Error
221
+ ? error
222
+ : new Error('Unknown error')
223
+
224
+ // Don't set hasError for rate limiting or non-critical errors
225
+ if( error.type !== 'RATE_LIMIT_EXCEEDED' ){
226
+ setHasError(true)
158
227
  }
228
+
229
+ props.onError?.(errorObj)
159
230
  })
160
231
 
161
232
  // Handle app state changes
162
233
  const subscription = AppState.addEventListener('change', ( nextAppState: AppStateStatus ) => {
163
234
  if( nextAppState === 'background' ){
164
- // Pause updates when app goes to background
165
- console.log('App backgrounded - pausing map updates')
235
+ console.log('[MSI] App backgrounded - pausing map updates')
236
+ // Optionally emit event to WebView to pause rendering
237
+ wioRef.current?.emit('app:background')
166
238
  }
167
239
  else if( nextAppState === 'active' ){
168
- // Resume when app comes to foreground
169
- console.log('App active - resuming map updates')
240
+ console.log('[MSI] App active - resuming map updates')
241
+ wioRef.current?.emit('app:foreground')
242
+
243
+ // Check if we need to reconnect
244
+ if( !wioRef.current?.isConnected() ){
245
+ console.log('[MSI] Reconnecting after app resumed')
246
+ initializeConnection()
247
+ }
170
248
  }
171
249
  })
172
250
 
173
251
  return () => {
252
+ console.log('[MSI] Cleaning up')
174
253
  subscription.remove()
175
254
  wioRef.current?.disconnect()
255
+ isInitializedRef.current = false
176
256
  }
177
257
  }, [])
178
258
 
179
- const initialize = () => {
180
- }
259
+ // Initialize API when both connection and ready state are achieved
260
+ useEffect( () => initializeAPI(), [isConnected, isReady] )
181
261
 
182
262
  const handleMessage = ( event: any ) => {
263
+ // Handle console logs separately
264
+ try {
265
+ const data = JSON.parse(event.nativeEvent.data)
266
+ if( data.type === '__console' ){
267
+ const prefix = '[WebView]'
268
+ switch( data.level ){
269
+ case 'log': console.log(prefix, data.message); break
270
+ case 'error': console.error(prefix, data.message); break
271
+ case 'warn': console.warn(prefix, data.message); break
272
+ }
273
+
274
+ return
275
+ }
276
+ }
277
+ catch(e){
278
+ // Not JSON or not console log, pass to WIO
279
+ }
280
+
183
281
  wioRef.current?.handleMessage( event )
184
282
  }
185
283
 
@@ -211,15 +309,16 @@ export default forwardRef<MSIRef, MSIProps>(( props, ref ) => {
211
309
  scrollEnabled={false}
212
310
  mixedContentMode="always"
213
311
  originWhitelist={['*']}
214
- onLoadStart={() => console.log('WebView loading...')}
312
+ onLoadStart={() => console.log('[MSI] WebView loading...')}
215
313
  onLoadEnd={() => {
216
- console.log('WebView loaded')
217
- // initialize()
218
- setTimeout(() => wioRef.current?.emit('ping'), 3000 )
314
+ console.log('[MSI] WebView loaded, initiating connection')
315
+ // Let WIO handle the connection automatically
316
+ // Remove the manual ping - it's not needed!
317
+ initializeConnection()
219
318
  }}
220
319
  onError={( syntheticEvent ) => {
221
320
  const { nativeEvent } = syntheticEvent
222
- console.error('WebView error:', nativeEvent )
321
+ console.error('[MSI] WebView error:', nativeEvent )
223
322
  setHasError( true )
224
323
  props.onError?.( new Error( nativeEvent.description || 'WebView error' ) )
225
324
  }}
@@ -228,7 +327,12 @@ export default forwardRef<MSIRef, MSIProps>(( props, ref ) => {
228
327
  {hasError && (
229
328
  <View style={styles.errorOverlay}>
230
329
  <View style={styles.errorCard}>
231
- {/* Error UI can be added here */}
330
+ {/* Add error UI with retry button */}
331
+ <Text style={styles.errorText}>
332
+ {connectionAttempts > 0
333
+ ? `Connection failed after ${connectionAttempts} attempts`
334
+ : 'An error occurred'}
335
+ </Text>
232
336
  </View>
233
337
  </View>
234
338
  )}
@@ -255,7 +359,13 @@ const styles = StyleSheet.create({
255
359
  backgroundColor: 'white',
256
360
  padding: 20,
257
361
  borderRadius: 12,
258
- margin: 20
362
+ margin: 20,
363
+ minWidth: 200
364
+ },
365
+ errorText: {
366
+ fontSize: 16,
367
+ color: '#333',
368
+ textAlign: 'center'
259
369
  }
260
370
  })
261
371