@@ -90,18 +90,32 @@ func main() {
9090	}
9191
9292	// Setup JS callbacks. 
93- 	callbacks  :=  js .ValueOf (make (map [string ]interface {}))
94- 	callbacks .Set ("wasmClientIsReady" , js .FuncOf (wc .IsReady ))
95- 	callbacks .Set ("wasmClientConnectServer" , js .FuncOf (wc .ConnectServer ))
96- 	callbacks .Set ("wasmClientIsConnected" , js .FuncOf (wc .IsConnected ))
97- 	callbacks .Set ("wasmClientDisconnect" , js .FuncOf (wc .Disconnect ))
98- 	callbacks .Set ("wasmClientInvokeRPC" , js .FuncOf (wc .InvokeRPC ))
99- 	callbacks .Set ("wasmClientStatus" , js .FuncOf (wc .Status ))
100- 	callbacks .Set ("wasmClientGetExpiry" , js .FuncOf (wc .GetExpiry ))
101- 	callbacks .Set ("wasmClientHasPerms" , js .FuncOf (wc .HasPermissions ))
102- 	callbacks .Set ("wasmClientIsReadOnly" , js .FuncOf (wc .IsReadOnly ))
103- 	callbacks .Set ("wasmClientIsCustom" , js .FuncOf (wc .IsCustom ))
104- 	js .Global ().Set (cfg .NameSpace , callbacks )
93+ 	callbacks  :=  make (map [string ]interface {})
94+ 	callbacks ["wasmClientIsReady" ] =  js .FuncOf (wc .IsReady )
95+ 	callbacks ["wasmClientConnectServer" ] =  js .FuncOf (wc .ConnectServer )
96+ 	callbacks ["wasmClientIsConnected" ] =  js .FuncOf (wc .IsConnected )
97+ 	callbacks ["wasmClientDisconnect" ] =  js .FuncOf (wc .Disconnect )
98+ 	callbacks ["wasmClientInvokeRPC" ] =  js .FuncOf (wc .InvokeRPC )
99+ 	callbacks ["wasmClientStatus" ] =  js .FuncOf (wc .Status )
100+ 	callbacks ["wasmClientGetExpiry" ] =  js .FuncOf (wc .GetExpiry )
101+ 	callbacks ["wasmClientHasPerms" ] =  js .FuncOf (wc .HasPermissions )
102+ 	callbacks ["wasmClientIsReadOnly" ] =  js .FuncOf (wc .IsReadOnly )
103+ 	callbacks ["wasmClientIsCustom" ] =  js .FuncOf (wc .IsCustom )
104+ 
105+ 	// Check if a JS object for the namespace already exists on the global 
106+ 	// scope. 
107+ 	nsObj  :=  js .Global ().Get (cfg .NameSpace )
108+ 	if  ! isEmptyObject (nsObj ) {
109+ 		// If it exists, set the callbacks on the existing object. This 
110+ 		// prevents overwriting the existing object, removing any 
111+ 		// vars/funcs that may have been set by the user. 
112+ 		for  cb , name  :=  range  callbacks  {
113+ 			nsObj .Set (cb , name )
114+ 		}
115+ 	} else  {
116+ 		// If not, create the JS object and set the callbacks. 
117+ 		js .Global ().Set (cfg .NameSpace , js .ValueOf (callbacks ))
118+ 	}
105119
106120	for  _ , registration  :=  range  litclient .Registrations  {
107121		registration (wc .registry )
@@ -572,7 +586,17 @@ func parseKeys(onLocalPrivCreate, localPrivKey, remotePubKey string) (
572586}
573587
574588func  callJsCallback (callbackName  string , value  string ) error  {
575- 	retValue  :=  js .Global ().Call (callbackName , value )
589+ 	// callbackName can be in the form of "namespace.callbackName" or just 
590+ 	// "callbackName". If it is in the former form, we need to get the 
591+ 	// namespace object and call the callback on that object. 
592+ 	jsScope  :=  js .Global ()
593+ 	parts  :=  strings .Split (callbackName , "." )
594+ 	if  len (parts ) >  1  {
595+ 		jsScope  =  jsScope .Get (parts [0 ])
596+ 		callbackName  =  parts [1 ]
597+ 	}
598+ 
599+ 	retValue  :=  jsScope .Call (callbackName , value )
576600
577601	if  isEmptyObject (retValue ) ||  isEmptyObject (retValue .Get ("err" )) {
578602		return  nil 
0 commit comments