webview.io 1.0.0 → 1.0.1

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/dist/index.js CHANGED
@@ -504,7 +504,7 @@ var WIO = /** @class */ (function () {
504
504
  * Sets up the EMBEDDED side of the bridge
505
505
  */
506
506
  WIO.prototype.getInjectedJavaScript = function () {
507
- return "\n (function() {\n const RESERVED_EVENTS = ['ping', 'pong', '__heartbeat', '__heartbeat_response'];\n \n window._wio = {\n type: 'EMBEDDED',\n connected: false,\n Events: {},\n messageQueue: [],\n \n ackId: function(){\n const\n rmin = 100000,\n rmax = 999999,\n timestamp = Date.now(),\n random = Math.floor( Math.random() * ( rmax - rmin + 1 ) + rmin );\n\n return timestamp + '_' + random;\n },\n \n fire: function( _event, payload, cid ){\n if( !this.Events[_event] && !this.Events[_event + '--@once'] ) return;\n \n const ackFn = cid\n ? ( error, ...args ) => {\n this.emit( _event + '--' + cid + '--@ack', { error: error || false, args } );\n }\n : undefined;\n \n let listeners = [];\n if( this.Events[_event + '--@once'] ){\n _event += '--@once';\n listeners = this.Events[_event];\n delete this.Events[_event];\n }\n else listeners = this.Events[_event] || [];\n \n listeners.forEach( fn => {\n try { payload !== undefined ? fn( payload, ackFn ) : fn( ackFn ); }\n catch( error ){ console.error('[EMBEDDED] Listener error:', error); }\n });\n },\n \n emit: function( _event, payload, fn ){\n if( typeof payload === 'function' ){\n fn = payload;\n payload = undefined;\n }\n \n if( !this.connected && !RESERVED_EVENTS.includes(_event) ){\n this.messageQueue.push({ _event, payload, fn, timestamp: Date.now() });\n return;\n }\n \n try {\n let cid;\n if( typeof fn === 'function' ){\n cid = this.ackId();\n this.once( _event + '--' + cid + '--@ack', ({ error, args }) => fn( error, ...args ) );\n }\n \n const messageData = {\n _event,\n payload,\n cid,\n timestamp: Date.now()\n };\n \n window.ReactNativeWebView.postMessage( JSON.stringify( messageData ) );\n }\n catch( error ){\n console.error('[EMBEDDED] Emit error:', error);\n typeof fn === 'function' && fn( String(error) );\n }\n },\n \n on: function( _event, fn ){\n if( !this.Events[_event] ) this.Events[_event] = [];\n this.Events[_event].push( fn );\n },\n \n once: function( _event, fn ){\n _event += '--@once';\n if( !this.Events[_event] ) this.Events[_event] = [];\n this.Events[_event].push( fn );\n },\n \n off: function( _event, fn ){\n if( fn && this.Events[_event] ){\n const index = this.Events[_event].indexOf( fn );\n if( index > -1 ){\n this.Events[_event].splice( index, 1 );\n if( this.Events[_event].length === 0 ) delete this.Events[_event];\n }\n }\n else delete this.Events[_event];\n },\n \n processMessageQueue: function(){\n if( !this.connected || this.messageQueue.length === 0 ) return;\n \n const queue = [...this.messageQueue];\n this.messageQueue = [];\n \n queue.forEach( msg => {\n try { this.emit( msg._event, msg.payload, msg.fn ); }\n catch( error ){ console.error('[EMBEDDED] Queue process error:', error); }\n });\n },\n \n handleMessage: function( data ){\n if( !data || !data._event ) return;\n \n const { _event, payload, cid } = data;\n \n if( _event === '__heartbeat_response' ) return;\n \n if( _event === '__heartbeat' ){\n this.emit('__heartbeat_response', { timestamp: Date.now() });\n return;\n }\n \n if( _event === 'ping' ){\n this.emit('pong');\n this.connected = true;\n this.processMessageQueue();\n return;\n }\n \n this.fire( _event, payload, cid );\n }\n };\n \n // Listen to messages from React Native\n window.addEventListener('message', function( event ){\n try {\n const message = JSON.parse( event.data );\n window._wio.handleMessage( message );\n }\n catch( error ){ console.error('[EMBEDDED] Parse error:', error); }\n });\n \n // Android support\n if( typeof document !== 'undefined' ){\n document.addEventListener('message', function( event ){\n try {\n const message = JSON.parse( event.data );\n window._wio.handleMessage( message );\n }\n catch( error ){ console.error('[EMBEDDED] Parse error:', error); }\n });\n }\n \n true;\n })();\n ";
507
+ return "\n (function() {\n alert('[EMBEDDED] Injected JavaScript')\n const RESERVED_EVENTS = ['ping', 'pong', '__heartbeat', '__heartbeat_response'];\n \n window._wio = {\n type: 'EMBEDDED',\n connected: false,\n Events: {},\n messageQueue: [],\n\n listen: function(){\n console.log('[EMBEDDED] Listening for messages...')\n\n // Listen to messages from React Native\n window.addEventListener('message', function( event ){\n try {\n console.log('[EMBEDDED] Received message:', event.data);\n const message = JSON.parse( event.data );\n window._wio.handleMessage( message );\n }\n catch( error ){ console.error('[EMBEDDED] Parse error:', error); }\n });\n \n // Android support\n if( typeof document !== 'undefined' ){\n document.addEventListener('message', function( event ){\n try {\n console.log('[EMBEDDED] Received message:', event.data);\n const message = JSON.parse( event.data );\n window._wio.handleMessage( message );\n }\n catch( error ){ console.error('[EMBEDDED] Parse error:', error); }\n });\n }\n },\n \n ackId: function(){\n const\n rmin = 100000,\n rmax = 999999,\n timestamp = Date.now(),\n random = Math.floor( Math.random() * ( rmax - rmin + 1 ) + rmin );\n\n return timestamp + '_' + random;\n },\n \n fire: function( _event, payload, cid ){\n if( !this.Events[_event] && !this.Events[_event + '--@once'] ) return;\n \n const ackFn = cid\n ? ( error, ...args ) => {\n this.emit( _event + '--' + cid + '--@ack', { error: error || false, args } );\n }\n : undefined;\n \n let listeners = [];\n if( this.Events[_event + '--@once'] ){\n _event += '--@once';\n listeners = this.Events[_event];\n delete this.Events[_event];\n }\n else listeners = this.Events[_event] || [];\n \n listeners.forEach( fn => {\n try { payload !== undefined ? fn( payload, ackFn ) : fn( ackFn ); }\n catch( error ){ console.error('[EMBEDDED] Listener error:', error); }\n });\n },\n \n emit: function( _event, payload, fn ){\n if( typeof payload === 'function' ){\n fn = payload;\n payload = undefined;\n }\n \n if( !this.connected && !RESERVED_EVENTS.includes(_event) ){\n this.messageQueue.push({ _event, payload, fn, timestamp: Date.now() });\n return;\n }\n \n try {\n let cid;\n if( typeof fn === 'function' ){\n cid = this.ackId();\n this.once( _event + '--' + cid + '--@ack', ({ error, args }) => fn( error, ...args ) );\n }\n \n const messageData = {\n _event,\n payload,\n cid,\n timestamp: Date.now()\n };\n \n window.ReactNativeWebView.postMessage( JSON.stringify( messageData ) );\n }\n catch( error ){\n console.error('[EMBEDDED] Emit error:', error);\n typeof fn === 'function' && fn( String(error) );\n }\n },\n \n on: function( _event, fn ){\n if( !this.Events[_event] ) this.Events[_event] = [];\n this.Events[_event].push( fn );\n },\n \n once: function( _event, fn ){\n _event += '--@once';\n if( !this.Events[_event] ) this.Events[_event] = [];\n this.Events[_event].push( fn );\n },\n \n off: function( _event, fn ){\n if( fn && this.Events[_event] ){\n const index = this.Events[_event].indexOf( fn );\n if( index > -1 ){\n this.Events[_event].splice( index, 1 );\n if( this.Events[_event].length === 0 ) delete this.Events[_event];\n }\n }\n else delete this.Events[_event];\n },\n \n processMessageQueue: function(){\n if( !this.connected || this.messageQueue.length === 0 ) return;\n \n const queue = [...this.messageQueue];\n this.messageQueue = [];\n \n queue.forEach( msg => {\n try { this.emit( msg._event, msg.payload, msg.fn ); }\n catch( error ){ console.error('[EMBEDDED] Queue process error:', error); }\n });\n },\n \n handleMessage: function( data ){\n if( !data || !data._event ) return;\n \n const { _event, payload, cid } = data;\n \n if( _event === '__heartbeat_response' ) return;\n \n if( _event === '__heartbeat' ){\n this.emit('__heartbeat_response', { timestamp: Date.now() });\n return;\n }\n \n if( _event === 'ping' ){\n this.emit('pong');\n this.connected = true;\n this.processMessageQueue();\n return;\n }\n \n this.fire( _event, payload, cid );\n }\n };\n\n true;\n })();\n ";
508
508
  };
509
509
  return WIO;
510
510
  }());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webview.io",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Easy and friendly API to connect and interact between React Native and WebView with enhanced security, reliability, and modern async/await support.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -13,7 +13,6 @@
13
13
  "prepack": "yarn run compile"
14
14
  },
15
15
  "dependencies": {
16
- "@types/node": "^24.6.0",
17
16
  "events": "^3.3.0"
18
17
  },
19
18
  "peerDependencies": {
@@ -22,6 +21,7 @@
22
21
  },
23
22
  "devDependencies": {
24
23
  "@types/mocha": "^9.1.0",
24
+ "@types/node": "^24.6.0",
25
25
  "@types/react": "^18.0.0",
26
26
  "expect.js": "^0.3.1",
27
27
  "mocha": "^9.2.0",
package/src/index.ts CHANGED
@@ -610,6 +610,7 @@ export default class WIO {
610
610
  getInjectedJavaScript(): string {
611
611
  return `
612
612
  (function() {
613
+ alert('[EMBEDDED] Injected JavaScript')
613
614
  const RESERVED_EVENTS = ['ping', 'pong', '__heartbeat', '__heartbeat_response'];
614
615
 
615
616
  window._wio = {
@@ -617,6 +618,32 @@ export default class WIO {
617
618
  connected: false,
618
619
  Events: {},
619
620
  messageQueue: [],
621
+
622
+ listen: function(){
623
+ console.log('[EMBEDDED] Listening for messages...')
624
+
625
+ // Listen to messages from React Native
626
+ window.addEventListener('message', function( event ){
627
+ try {
628
+ console.log('[EMBEDDED] Received message:', event.data);
629
+ const message = JSON.parse( event.data );
630
+ window._wio.handleMessage( message );
631
+ }
632
+ catch( error ){ console.error('[EMBEDDED] Parse error:', error); }
633
+ });
634
+
635
+ // Android support
636
+ if( typeof document !== 'undefined' ){
637
+ document.addEventListener('message', function( event ){
638
+ try {
639
+ console.log('[EMBEDDED] Received message:', event.data);
640
+ const message = JSON.parse( event.data );
641
+ window._wio.handleMessage( message );
642
+ }
643
+ catch( error ){ console.error('[EMBEDDED] Parse error:', error); }
644
+ });
645
+ }
646
+ },
620
647
 
621
648
  ackId: function(){
622
649
  const
@@ -740,27 +767,7 @@ export default class WIO {
740
767
  this.fire( _event, payload, cid );
741
768
  }
742
769
  };
743
-
744
- // Listen to messages from React Native
745
- window.addEventListener('message', function( event ){
746
- try {
747
- const message = JSON.parse( event.data );
748
- window._wio.handleMessage( message );
749
- }
750
- catch( error ){ console.error('[EMBEDDED] Parse error:', error); }
751
- });
752
-
753
- // Android support
754
- if( typeof document !== 'undefined' ){
755
- document.addEventListener('message', function( event ){
756
- try {
757
- const message = JSON.parse( event.data );
758
- window._wio.handleMessage( message );
759
- }
760
- catch( error ){ console.error('[EMBEDDED] Parse error:', error); }
761
- });
762
- }
763
-
770
+
764
771
  true;
765
772
  })();
766
773
  `;