- Consolidated duplicate UndoManagers to single instance - Fixed connection promise to only resolve on 'connected' status - Fixed WebSocketProvider import (WebsocketProvider) - Added proper doc.destroy() cleanup - Renamed isPresenceInitialized property to avoid conflict Co-Authored-By: Paperclip <noreply@paperclip.ing>
112 lines
4.8 KiB
JavaScript
112 lines
4.8 KiB
JavaScript
var __rest = (this && this.__rest) || function (s, e) {
|
|
var t = {};
|
|
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
t[p] = s[p];
|
|
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
t[p[i]] = s[p[i]];
|
|
}
|
|
return t;
|
|
};
|
|
import { createSigner, fetchSignerType, loadSignerType, storeSignerType } from './sign/util.js';
|
|
import { Communicator } from './core/communicator/Communicator.js';
|
|
import { CB_WALLET_RPC_URL } from './core/constants.js';
|
|
import { standardErrorCodes } from './core/error/constants.js';
|
|
import { standardErrors } from './core/error/errors.js';
|
|
import { serializeError } from './core/error/serialize.js';
|
|
import { ProviderEventEmitter, } from './core/provider/interface.js';
|
|
import { ScopedLocalStorage } from './core/storage/ScopedLocalStorage.js';
|
|
import { hexStringFromNumber } from './core/type/util.js';
|
|
import { checkErrorForInvalidRequestArgs, fetchRPCRequest } from './util/provider.js';
|
|
export class CoinbaseWalletProvider extends ProviderEventEmitter {
|
|
constructor(_a) {
|
|
var { metadata } = _a, _b = _a.preference, { keysUrl } = _b, preference = __rest(_b, ["keysUrl"]);
|
|
super();
|
|
this.signer = null;
|
|
this.isCoinbaseWallet = true;
|
|
this.metadata = metadata;
|
|
this.preference = preference;
|
|
this.communicator = new Communicator({
|
|
url: keysUrl,
|
|
metadata,
|
|
preference,
|
|
});
|
|
const signerType = loadSignerType();
|
|
if (signerType) {
|
|
this.signer = this.initSigner(signerType);
|
|
}
|
|
}
|
|
async request(args) {
|
|
try {
|
|
checkErrorForInvalidRequestArgs(args);
|
|
if (!this.signer) {
|
|
switch (args.method) {
|
|
case 'eth_requestAccounts': {
|
|
const signerType = await this.requestSignerSelection(args);
|
|
const signer = this.initSigner(signerType);
|
|
await signer.handshake(args);
|
|
this.signer = signer;
|
|
storeSignerType(signerType);
|
|
break;
|
|
}
|
|
case 'wallet_sendCalls': {
|
|
const ephemeralSigner = this.initSigner('scw');
|
|
await ephemeralSigner.handshake({ method: 'handshake' }); // exchange session keys
|
|
const result = await ephemeralSigner.request(args); // send diffie-hellman encrypted request
|
|
await ephemeralSigner.cleanup(); // clean up (rotate) the ephemeral session keys
|
|
return result;
|
|
}
|
|
case 'wallet_getCallsStatus':
|
|
return fetchRPCRequest(args, CB_WALLET_RPC_URL);
|
|
case 'net_version':
|
|
return 1; // default value
|
|
case 'eth_chainId':
|
|
return hexStringFromNumber(1); // default value
|
|
default: {
|
|
throw standardErrors.provider.unauthorized("Must call 'eth_requestAccounts' before other methods");
|
|
}
|
|
}
|
|
}
|
|
return await this.signer.request(args);
|
|
}
|
|
catch (error) {
|
|
const { code } = error;
|
|
if (code === standardErrorCodes.provider.unauthorized)
|
|
this.disconnect();
|
|
return Promise.reject(serializeError(error));
|
|
}
|
|
}
|
|
/** @deprecated Use `.request({ method: 'eth_requestAccounts' })` instead. */
|
|
async enable() {
|
|
console.warn(`.enable() has been deprecated. Please use .request({ method: "eth_requestAccounts" }) instead.`);
|
|
return await this.request({
|
|
method: 'eth_requestAccounts',
|
|
});
|
|
}
|
|
async disconnect() {
|
|
var _a;
|
|
await ((_a = this.signer) === null || _a === void 0 ? void 0 : _a.cleanup());
|
|
this.signer = null;
|
|
ScopedLocalStorage.clearAll();
|
|
this.emit('disconnect', standardErrors.provider.disconnected('User initiated disconnection'));
|
|
}
|
|
requestSignerSelection(handshakeRequest) {
|
|
return fetchSignerType({
|
|
communicator: this.communicator,
|
|
preference: this.preference,
|
|
metadata: this.metadata,
|
|
handshakeRequest,
|
|
callback: this.emit.bind(this),
|
|
});
|
|
}
|
|
initSigner(signerType) {
|
|
return createSigner({
|
|
signerType,
|
|
metadata: this.metadata,
|
|
communicator: this.communicator,
|
|
callback: this.emit.bind(this),
|
|
});
|
|
}
|
|
}
|
|
//# sourceMappingURL=CoinbaseWalletProvider.js.map
|