jcwallet/src/services/NativeSvr.ts
2023-02-08 16:22:06 +08:00

79 lines
1.9 KiB
TypeScript

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.errmessage || 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 signWithFacebook() {
let id = payloadId();
jsb.callJcVoidMethodJNI(id, "signWithFacebook");
return this._subscribeToCallResponse(id);
}
public signWithTwitter() {
let id = payloadId();
jsb.callJcVoidMethodJNI(id, "signWithTwitter");
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);
}
}