import { payloadId } from "@walletconnect/utils"; import { createWalletEvents } from "../common/WalletEvent"; import { singleton } from "../decorator/singleton.decorator"; @singleton export class NativeSvr { _event = createWalletEvents(); _subscribeToResponse(id: string, callback) { this._event.on(`response:${id}`, callback); } _subscribeToCallResponse(id) { return new Promise((resolve, reject) => { this._subscribeToResponse(id, (result) => { if (result.errcode) { reject(result.errcode); return; } resolve(result.data); }); }); } public handleNativeCallback(...args) { let id = args[0]; let result = JSON.parse(args[1]); this._event.emit(`response:${id}`, result); } public signWithGoogle() { let id = payloadId(); jsb.signWithGoogle(id); return this._subscribeToCallResponse(id); } public signWithApple() { let id = payloadId(); jsb.signWithApple(id); return this._subscribeToCallResponse(id); } public signWithTikTok() { let id = payloadId(); jsb.signWithTikTok(id); return this._subscribeToCallResponse(id); } public signOutGoogle() { let id = payloadId(); jsb.signOutGoogle(id); return this._subscribeToCallResponse(id); } public scanQRCode(title: string) { let id = payloadId(); jsb.scanQRCode(id, title); return this._subscribeToCallResponse(id); } public restoreKey(oid: string) { let id = payloadId(); jsb.restoreKey(id, oid); return this._subscribeToCallResponse(id); } }