Skip to content
Snippets Groups Projects
main.go 7.82 KiB
Newer Older
////////////////////////////////////////////////////////////////////////////////
// Copyright © 2022 xx foundation                                             //
//                                                                            //
// Use of this source code is governed by a license that can be found in the  //
// LICENSE file.                                                              //
////////////////////////////////////////////////////////////////////////////////
Jono Wenger's avatar
Jono Wenger committed

//go:build js && wasm

package main

import (
Jono Wenger's avatar
Jono Wenger committed
	"gitlab.com/elixxir/xxdk-wasm/logging"
Jono Wenger's avatar
Jono Wenger committed
	jww "github.com/spf13/jwalterweatherman"
	"gitlab.com/elixxir/xxdk-wasm/storage"
Jono Wenger's avatar
Jono Wenger committed
	"gitlab.com/elixxir/xxdk-wasm/utils"
Jono Wenger's avatar
Jono Wenger committed
	"gitlab.com/elixxir/xxdk-wasm/wasm"
Jono Wenger's avatar
Jono Wenger committed
)

Jono Wenger's avatar
Jono Wenger committed
func init() {
Jono Wenger's avatar
Jono Wenger committed
	// Start logger first to capture all logging events
	logging.InitLogger()

Jono Wenger's avatar
Jono Wenger committed
	// Overwrites setting the log level to INFO done in bindings so that the
	// Javascript console can be used
Jono Wenger's avatar
Jono Wenger committed
	ll := logging.NewJsConsoleLogListener(jww.LevelInfo)
	logging.AddLogListener(ll.Listen)
Jono Wenger's avatar
Jono Wenger committed
	jww.SetStdoutThreshold(jww.LevelFatal + 1)
Jono Wenger's avatar
Jono Wenger committed

	// Check that the WASM binary version is correct
	err := storage.CheckAndStoreVersions()
Jono Wenger's avatar
Jono Wenger committed
	if err != nil {
		jww.FATAL.Panicf("WASM binary version error: %+v", err)
	}
Jono Wenger's avatar
Jono Wenger committed
func main() {
Jono Wenger's avatar
Jono Wenger committed
	jww.INFO.Printf("Starting xxDK WebAssembly bindings.")

	// logging/worker.go
	js.Global().Set("GetLogger", js.FuncOf(logging.GetLoggerJS))
Jono Wenger's avatar
Jono Wenger committed

	// storage/password.go
	js.Global().Set("GetOrInitPassword", js.FuncOf(storage.GetOrInitPassword))
	js.Global().Set("ChangeExternalPassword",
		js.FuncOf(storage.ChangeExternalPassword))
	js.Global().Set("VerifyPassword", js.FuncOf(storage.VerifyPassword))
Jono Wenger's avatar
Jono Wenger committed
	// storage/purge.go
	js.Global().Set("Purge", js.FuncOf(storage.Purge))

Jono Wenger's avatar
Jono Wenger committed
	// utils/array.go
	js.Global().Set("Uint8ArrayToBase64", js.FuncOf(utils.Uint8ArrayToBase64))
	js.Global().Set("Base64ToUint8Array", js.FuncOf(utils.Base64ToUint8Array))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("Uint8ArrayEquals", js.FuncOf(utils.Uint8ArrayEquals))
Jono Wenger's avatar
Jono Wenger committed

Jono Wenger's avatar
Jono Wenger committed
	// wasm/backup.go
	js.Global().Set("NewCmixFromBackup", js.FuncOf(wasm.NewCmixFromBackup))
	js.Global().Set("InitializeBackup", js.FuncOf(wasm.InitializeBackup))
	js.Global().Set("ResumeBackup", js.FuncOf(wasm.ResumeBackup))

Jono Wenger's avatar
Jono Wenger committed
	// wasm/channels.go
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("GenerateChannelIdentity",
		js.FuncOf(wasm.GenerateChannelIdentity))
	js.Global().Set("ConstructIdentity", js.FuncOf(wasm.ConstructIdentity))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("ImportPrivateIdentity",
		js.FuncOf(wasm.ImportPrivateIdentity))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("GetPublicChannelIdentity",
		js.FuncOf(wasm.GetPublicChannelIdentity))
	js.Global().Set("GetPublicChannelIdentityFromPrivate",
		js.FuncOf(wasm.GetPublicChannelIdentityFromPrivate))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("NewChannelsManager", js.FuncOf(wasm.NewChannelsManager))
	js.Global().Set("LoadChannelsManager", js.FuncOf(wasm.LoadChannelsManager))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("NewChannelsManagerWithIndexedDb",
		js.FuncOf(wasm.NewChannelsManagerWithIndexedDb))
	js.Global().Set("LoadChannelsManagerWithIndexedDb",
		js.FuncOf(wasm.LoadChannelsManagerWithIndexedDb))
	js.Global().Set("LoadChannelsManagerWithIndexedDbUnsafe",
		js.FuncOf(wasm.LoadChannelsManagerWithIndexedDbUnsafe))
	js.Global().Set("NewChannelsManagerWithIndexedDbUnsafe",
		js.FuncOf(wasm.NewChannelsManagerWithIndexedDbUnsafe))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("DecodePublicURL", js.FuncOf(wasm.DecodePublicURL))
	js.Global().Set("DecodePrivateURL", js.FuncOf(wasm.DecodePrivateURL))
	js.Global().Set("GetChannelJSON", js.FuncOf(wasm.GetChannelJSON))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("GetChannelInfo", js.FuncOf(wasm.GetChannelInfo))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("GetShareUrlType", js.FuncOf(wasm.GetShareUrlType))
	js.Global().Set("ValidForever", js.FuncOf(wasm.ValidForever))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("IsNicknameValid", js.FuncOf(wasm.IsNicknameValid))
	js.Global().Set("NewChannelsDatabaseCipher",
		js.FuncOf(wasm.NewChannelsDatabaseCipher))
	// wasm/dm.go
	js.Global().Set("NewDMClient", js.FuncOf(wasm.NewDMClient))
	js.Global().Set("NewDMClientWithIndexedDb",
		js.FuncOf(wasm.NewDMClientWithIndexedDb))
	js.Global().Set("NewDMClientWithIndexedDbUnsafe",
		js.FuncOf(wasm.NewDMClientWithIndexedDbUnsafe))
	js.Global().Set("NewDMsDatabaseCipher",
		js.FuncOf(wasm.NewDMsDatabaseCipher))

Jono Wenger's avatar
Jono Wenger committed
	// wasm/cmix.go
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("NewCmix", js.FuncOf(wasm.NewCmix))
	js.Global().Set("LoadCmix", js.FuncOf(wasm.LoadCmix))
Jono Wenger's avatar
Jono Wenger committed

	// wasm/delivery.go
	js.Global().Set("SetDashboardURL", js.FuncOf(wasm.SetDashboardURL))

Jono Wenger's avatar
Jono Wenger committed
	// wasm/dummy.go
	js.Global().Set("NewDummyTrafficManager",
		js.FuncOf(wasm.NewDummyTrafficManager))

Jono Wenger's avatar
Jono Wenger committed
	// wasm/e2e.go
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("Login", js.FuncOf(wasm.Login))
	js.Global().Set("LoginEphemeral", js.FuncOf(wasm.LoginEphemeral))
Jono Wenger's avatar
Jono Wenger committed

Jono Wenger's avatar
Jono Wenger committed
	// wasm/errors.go
	js.Global().Set("CreateUserFriendlyErrorMessage",
		js.FuncOf(wasm.CreateUserFriendlyErrorMessage))
	js.Global().Set("UpdateCommonErrors",
		js.FuncOf(wasm.UpdateCommonErrors))

	// wasm/fileTransfer.go
	js.Global().Set("InitFileTransfer", js.FuncOf(wasm.InitFileTransfer))

	// wasm/group.go
	js.Global().Set("NewGroupChat", js.FuncOf(wasm.NewGroupChat))
	js.Global().Set("DeserializeGroup", js.FuncOf(wasm.DeserializeGroup))
Jono Wenger's avatar
Jono Wenger committed

Jono Wenger's avatar
Jono Wenger committed
	// wasm/identity.go
	js.Global().Set("StoreReceptionIdentity",
Jono Wenger's avatar
Jono Wenger committed
		js.FuncOf(wasm.StoreReceptionIdentity))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("LoadReceptionIdentity",
Jono Wenger's avatar
Jono Wenger committed
		js.FuncOf(wasm.LoadReceptionIdentity))
	js.Global().Set("GetContactFromReceptionIdentity",
		js.FuncOf(wasm.GetContactFromReceptionIdentity))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("GetIDFromContact",
Jono Wenger's avatar
Jono Wenger committed
		js.FuncOf(wasm.GetIDFromContact))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("GetPubkeyFromContact",
Jono Wenger's avatar
Jono Wenger committed
		js.FuncOf(wasm.GetPubkeyFromContact))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("SetFactsOnContact",
Jono Wenger's avatar
Jono Wenger committed
		js.FuncOf(wasm.SetFactsOnContact))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("GetFactsFromContact",
Jono Wenger's avatar
Jono Wenger committed
		js.FuncOf(wasm.GetFactsFromContact))
Jono Wenger's avatar
Jono Wenger committed

Jono Wenger's avatar
Jono Wenger committed
	// wasm/logging.go
	js.Global().Set("LogLevel", js.FuncOf(wasm.LogLevel))
	js.Global().Set("RegisterLogWriter", js.FuncOf(wasm.RegisterLogWriter))
	js.Global().Set("EnableGrpcLogs", js.FuncOf(wasm.EnableGrpcLogs))

	// wasm/ndf.go
	js.Global().Set("DownloadAndVerifySignedNdfWithUrl",
		js.FuncOf(wasm.DownloadAndVerifySignedNdfWithUrl))

Jono Wenger's avatar
Jono Wenger committed
	// wasm/params.go
	js.Global().Set("GetDefaultCMixParams",
Jono Wenger's avatar
Jono Wenger committed
		js.FuncOf(wasm.GetDefaultCMixParams))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("GetDefaultE2EParams",
Jono Wenger's avatar
Jono Wenger committed
		js.FuncOf(wasm.GetDefaultE2EParams))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("GetDefaultFileTransferParams",
Jono Wenger's avatar
Jono Wenger committed
		js.FuncOf(wasm.GetDefaultFileTransferParams))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("GetDefaultSingleUseParams",
Jono Wenger's avatar
Jono Wenger committed
		js.FuncOf(wasm.GetDefaultSingleUseParams))
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("GetDefaultE2eFileTransferParams",
Jono Wenger's avatar
Jono Wenger committed
		js.FuncOf(wasm.GetDefaultE2eFileTransferParams))
Jono Wenger's avatar
Jono Wenger committed

Jono Wenger's avatar
Jono Wenger committed
	// wasm/restlike.go
	js.Global().Set("RestlikeRequest", js.FuncOf(wasm.RestlikeRequest))
	js.Global().Set("RestlikeRequestAuth", js.FuncOf(wasm.RestlikeRequestAuth))

Jono Wenger's avatar
Jono Wenger committed
	// wasm/restlikeSingle.go
	js.Global().Set("RequestRestLike",
		js.FuncOf(wasm.RequestRestLike))
	js.Global().Set("AsyncRequestRestLike",
		js.FuncOf(wasm.AsyncRequestRestLike))

Jono Wenger's avatar
Jono Wenger committed
	// wasm/secrets.go
	js.Global().Set("GenerateSecret", js.FuncOf(wasm.GenerateSecret))

	// wasm/single.go
Jono Wenger's avatar
Jono Wenger committed
	js.Global().Set("TransmitSingleUse", js.FuncOf(wasm.TransmitSingleUse))
	js.Global().Set("Listen", js.FuncOf(wasm.Listen))

Jono Wenger's avatar
Jono Wenger committed
	// wasm/timeNow.go
	js.Global().Set("SetTimeSource", js.FuncOf(wasm.SetTimeSource))
	js.Global().Set("SetOffset", js.FuncOf(wasm.SetOffset))

Jono Wenger's avatar
Jono Wenger committed
	// wasm/ud.go
	js.Global().Set("NewOrLoadUd", js.FuncOf(wasm.NewOrLoadUd))
	js.Global().Set("NewUdManagerFromBackup",
		js.FuncOf(wasm.NewUdManagerFromBackup))
	js.Global().Set("LookupUD", js.FuncOf(wasm.LookupUD))
	js.Global().Set("SearchUD", js.FuncOf(wasm.SearchUD))

	// wasm/version.go
	js.Global().Set("GetVersion", js.FuncOf(wasm.GetVersion))
	js.Global().Set("GetClientVersion", js.FuncOf(wasm.GetClientVersion))
	js.Global().Set("GetClientGitVersion", js.FuncOf(wasm.GetClientGitVersion))
	js.Global().Set("GetClientDependencies", js.FuncOf(wasm.GetClientDependencies))
	js.Global().Set("GetWasmSemanticVersion", js.FuncOf(wasm.GetWasmSemanticVersion))
	js.Global().Set("GetXXDKSemanticVersion", js.FuncOf(wasm.GetXXDKSemanticVersion))
Jono Wenger's avatar
Jono Wenger committed

Jono Wenger's avatar
Jono Wenger committed
	<-make(chan bool)
Jono Wenger's avatar
Jono Wenger committed
	os.Exit(0)
}