UNPKG

@venly/web3-provider

Version:

Venly enabled Web3 Provider for the web

147 lines (146 loc) 9.4 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _VenlyProvider_instances, _VenlyProvider_getRpcUrl, _VenlyProvider_createEngine; Object.defineProperty(exports, "__esModule", { value: true }); exports.VenlyProvider = exports.CHAIN_CONFIGS = exports.WindowMode = exports.SecretType = void 0; const connect_1 = require("@venly/connect"); const venlyController_1 = require("./venlyController"); const types_1 = require("./types"); const json_rpc_engine_1 = require("@metamask/json-rpc-engine"); const eth_json_rpc_provider_1 = require("@metamask/eth-json-rpc-provider"); const providerFromEngine_1 = __importDefault(require("./providerFromEngine")); const createVenlyMiddleware_1 = __importDefault(require("./middleware/createVenlyMiddleware")); const createJsonRpcClient_1 = __importDefault(require("./createJsonRpcClient")); const eth_json_rpc_filters_1 = __importDefault(require("eth-json-rpc-filters")); const subscriptionManager_1 = __importDefault(require("eth-json-rpc-filters/subscriptionManager")); var connect_2 = require("@venly/connect"); Object.defineProperty(exports, "SecretType", { enumerable: true, get: function () { return connect_2.SecretType; } }); Object.defineProperty(exports, "WindowMode", { enumerable: true, get: function () { return connect_2.WindowMode; } }); var types_2 = require("./types"); Object.defineProperty(exports, "CHAIN_CONFIGS", { enumerable: true, get: function () { return types_2.CHAIN_CONFIGS; } }); class VenlyProvider { constructor() { _VenlyProvider_instances.add(this); } get connect() { var _a; return (_a = this.venlyController) === null || _a === void 0 ? void 0 : _a.venlyConnect; } changeSecretType(secretType = connect_1.SecretType.ETHEREUM, chainId) { return __awaiter(this, void 0, void 0, function* () { if (!this._provider) throw new Error('Please initialise provider first (Venly.createProvider)'); const options = Object.assign(Object.assign(Object.assign({}, this.venlyController.options), { secretType: secretType }), chainId && { environment: types_1.CHAIN_CONFIGS[Number(chainId)].env }); this._provider.engine = __classPrivateFieldGet(this, _VenlyProvider_instances, "m", _VenlyProvider_createEngine).call(this, options); this._provider.emit('chainChanged', chainId !== null && chainId !== void 0 ? chainId : types_1.CHAIN_IDS[secretType][this.venlyController.options.environment]); this._provider.emit('accountsChanged', yield this.venlyController.getAccounts()); return this._provider; }); } checkAuthenticated() { return __awaiter(this, void 0, void 0, function* () { if (!this._provider) throw new Error('Please initialise provider first (Venly.createProvider)'); return this.venlyController.checkAuthenticated(); }); } authenticate(authenticationOptions) { return __awaiter(this, void 0, void 0, function* () { if (!this._provider) throw new Error('Please initialise provider first (Venly.createProvider)'); return this.venlyController.authenticate(authenticationOptions); }); } logout() { return __awaiter(this, void 0, void 0, function* () { if (!this._provider) throw new Error('Please initialise provider first (Venly.createProvider)'); yield this.venlyController.logout(); this._provider.emit('disconnect', { message: 'disconnect', code: 1000 }); }); } createProvider(options) { var _a, _b, _c, _d; return __awaiter(this, void 0, void 0, function* () { (_a = options.environment) !== null && _a !== void 0 ? _a : (options.environment = 'production'); if (options.environment === 'prod') options.environment = 'production'; (_b = options.windowMode) !== null && _b !== void 0 ? _b : (options.windowMode = connect_1.WindowMode.POPUP); (_c = options.secretType) !== null && _c !== void 0 ? _c : (options.secretType = connect_1.SecretType.ETHEREUM); (_d = options.skipAuthentication) !== null && _d !== void 0 ? _d : (options.skipAuthentication = false); const engine = __classPrivateFieldGet(this, _VenlyProvider_instances, "m", _VenlyProvider_createEngine).call(this, options); const provider = (0, providerFromEngine_1.default)(engine); this._provider = provider; if (!options.skipAuthentication) yield this.venlyController.getAccounts(); return this._provider; }); } } exports.VenlyProvider = VenlyProvider; _VenlyProvider_instances = new WeakSet(), _VenlyProvider_getRpcUrl = function _VenlyProvider_getRpcUrl(options) { let environment = options.environment.replace('-local', 'qa'); const chainId = parseInt(types_1.CHAIN_IDS[options.secretType][environment]); return environment.startsWith('prod') ? `https://evm-node.venly.io/chains/${chainId}` : `https://evm-node-${environment}.venly.io/chains/${chainId}`; }, _VenlyProvider_createEngine = function _VenlyProvider_createEngine(options) { var _a; if (!this.venlyController || this.venlyController.options.environment != options.environment) this.venlyController = new venlyController_1.VenlyController(options); else { this.venlyController.options = options; this.venlyController.resetWallets(); } const engine = new json_rpc_engine_1.JsonRpcEngine(); const venlyMiddleware = (0, createVenlyMiddleware_1.default)({ getAccounts: this.venlyController.getAccounts.bind(this.venlyController), processTransaction: this.venlyController.processTransaction.bind(this.venlyController), processSignTransaction: this.venlyController.processSignTransaction.bind(this.venlyController), processEthSignMessage: this.venlyController.processEthSignMessage.bind(this.venlyController), processTypedMessage: this.venlyController.processTypedMessage.bind(this.venlyController), processTypedMessageV3: this.venlyController.processTypedMessage.bind(this.venlyController), processTypedMessageV4: this.venlyController.processTypedMessage.bind(this.venlyController), processPersonalMessage: this.venlyController.processPersonalMessage.bind(this.venlyController), getTransactionByHash: this.venlyController.getTransactionByHash.bind(this.venlyController), getPendingTransactions: this.venlyController.getPendingTransactions.bind(this.venlyController), getPendingNonce: this.venlyController.getPendingNonce.bind(this.venlyController), changeSecretType: this.changeSecretType.bind(this) }); engine.push(venlyMiddleware); const rpcUrl = __classPrivateFieldGet(this, _VenlyProvider_instances, "m", _VenlyProvider_getRpcUrl).call(this, options); const chainId = (_a = types_1.CHAIN_IDS[options.secretType][options.environment]) !== null && _a !== void 0 ? _a : types_1.CHAIN_IDS[options.secretType]['production']; if (!chainId) throw new Error(`Unable to determine chainId for secretType: ${options.secretType} and environment: ${options.environment}`); const { networkMiddleware, blockTracker } = (0, createJsonRpcClient_1.default)({ rpcUrl, chainId, venlyConnect: this.venlyController.venlyConnect }); this._blockTracker = blockTracker; const networkProvider = (0, eth_json_rpc_provider_1.providerFromMiddleware)(networkMiddleware); const filterMiddleware = (0, eth_json_rpc_filters_1.default)({ provider: networkProvider, blockTracker, }); const subscriptionManager = (0, subscriptionManager_1.default)({ provider: networkProvider, blockTracker, }); subscriptionManager.events.on('notification', (message) => engine.emit('notification', message)); engine.push(filterMiddleware); engine.push(subscriptionManager.middleware); engine.push(networkMiddleware); return engine; }; globalThis.Venly = new VenlyProvider();