UNPKG

kadenakonnect

Version:

Handles connecting to Kadena enabled wallets: X-Wallet, Zelcore, Chainweaver, Koala Wallet, and Wallet Connect

321 lines (314 loc) 13.3 kB
"use strict"; require("core-js/modules/es.symbol.description.js"); Object.defineProperty(exports, "__esModule", { value: true }); exports.signAndSend = exports.setPubKey = exports.setNewTransaction = exports.setNewMessage = exports.setNetworkId = exports.setNetwork = exports.setAccount = exports.localAndSend = exports.local = exports.kadenaSlice = exports.disconnectProvider = exports.default = exports.connectWithProvider = exports.addTransaction = exports.addMessage = void 0; require("core-js/modules/es.promise.js"); var _toolkit = require("@reduxjs/toolkit"); var _constants = require("../constants/constants"); var _providers = _interopRequireDefault(require("../providers/providers")); var _utils = require("../utils/utils"); var _connectWalletModalSlice = require("./connectWalletModalSlice"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } const kadenaSlice = (0, _toolkit.createSlice)({ name: 'kadenaInfo', initialState: { network: import.meta.env.VITE_NETWORK, networkId: import.meta.env.VITE_NETWORK_ID, ttl: 600, provider: '', account: '', pubKey: '', transactions: [], newTransaction: {}, messages: [], newMessage: {} }, reducers: { setNetwork: (state, action) => { state.network = action.payload; }, setNetworkId: (state, action) => { state.networkId = action.payload; }, setProvider: (state, action) => { state.provider = action.payload; }, setAccount: (state, action) => { state.account = action.payload; }, setPubKey: (state, action) => { state.pubKey = action.payload; }, setTransactions: (state, action) => { state.transactions = action.payload; }, addTransaction: (state, action) => { state.transactions.push(action.payload); state.newTransaction = action.payload; }, setNewTransaction: (state, action) => { state.newTransaction = action.payload; }, addMessage: (state, action) => { state.messages.push(action.payload); state.newMessage = action.payload; }, setNewMessage: (state, action) => { state.newMessage = action.payload; } } }); exports.kadenaSlice = kadenaSlice; const { setNetwork, setNetworkId, setAccount, setPubKey, addTransaction, setNewTransaction, addMessage, setNewMessage } = kadenaSlice.actions; exports.setNewMessage = setNewMessage; exports.addMessage = addMessage; exports.setNewTransaction = setNewTransaction; exports.addTransaction = addTransaction; exports.setPubKey = setPubKey; exports.setAccount = setAccount; exports.setNetworkId = setNetworkId; exports.setNetwork = setNetwork; var _default = kadenaSlice.reducer; exports.default = _default; const connectWithProvider = providerId => { return async function (dispatch, getState) { let provider = _providers.default[providerId]; let connectResult = await provider.connect(getState); // console.log(connectResult); if (connectResult.status === 'success') { dispatch(kadenaSlice.actions.setProvider(providerId)); dispatch(kadenaSlice.actions.setAccount(connectResult.account.account)); dispatch(kadenaSlice.actions.setPubKey(connectResult.account.publicKey)); dispatch((0, _connectWalletModalSlice.hideConnectWalletModal)()); const event = new CustomEvent(_constants.EVENT_WALLET_CONNECT, { detail: providerId }); document.dispatchEvent(event); } else { const msg = { type: 'error', data: "Error: ".concat(connectResult.message, ". Make sure you are on ").concat(getState().kadenaInfo.networkId) }; const event = new CustomEvent(_constants.EVENT_NEW_MSG, { detail: msg }); document.dispatchEvent(event); dispatch(kadenaSlice.actions.addMessage(msg)); } }; }; exports.connectWithProvider = connectWithProvider; const disconnectProvider = () => { return async function (dispatch, getState) { let provider = _providers.default[getState().kadenaInfo.provider]; let disconnectResult = await provider.disconnect(getState); // console.log(disconnectResult); if (disconnectResult.result.status === 'success') { dispatch(kadenaSlice.actions.setAccount("")); dispatch(kadenaSlice.actions.setProvider("")); dispatch(kadenaSlice.actions.setPubKey("")); const msg = { type: 'success', data: "Disconnected from ".concat(provider.name) }; const event = new CustomEvent(_constants.EVENT_NEW_MSG, { detail: msg }); document.dispatchEvent(event); dispatch(kadenaSlice.actions.addMessage()); } else { const msg = { type: 'error', data: "Error: ".concat(disconnectResult.message, ". Make sure you are on ").concat(getState().kadenaInfo.networkId) }; const event = new CustomEvent(_constants.EVENT_NEW_MSG, { detail: msg }); document.dispatchEvent(event); dispatch(kadenaSlice.actions.addMessage(msg)); // toast.error(`Error: ${disconnectResult.message}\nMake sure you are on: ${getState().kadenaInfo.networkId}`); } }; }; exports.disconnectProvider = disconnectProvider; const local = function local(chainId, pactCode, envData) { let caps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; let gasLimit = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 15000; let gasPrice = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1e-5; let dontUpdate = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false; let sign = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false; return async function (dispatch, getState) { var cmd = {}; if (sign) { let providerName = getState().kadenaInfo.provider; if (providerName === '') { const msg = { type: 'error', data: "No wallet connected" }; const event = new CustomEvent(_constants.EVENT_NEW_MSG, { detail: msg }); document.dispatchEvent(event); dispatch(kadenaSlice.actions.addMessage(msg)); return; } // console.log('got here?'); let provider = _providers.default[providerName]; let signingCmd = (0, _utils.createSigningCommand)(getState, chainId, pactCode, envData, caps, gasLimit, gasPrice); // console.log(signingCmd); cmd = await provider.sign(getState, signingCmd); } else { cmd = (0, _utils.createPactCommand)(getState, chainId, pactCode, envData, gasLimit, gasPrice); } // console.log('cmd', cmd); if (dontUpdate) { let res = await (0, _utils.localCommand)(getState, chainId, cmd); // console.log(res); return res; } try { let res = await (0, _utils.localCommand)(getState, chainId, cmd); const e = new CustomEvent(_constants.EVENT_NEW_TX, { detail: res }); document.dispatchEvent(e); dispatch(kadenaSlice.actions.addTransaction(res)); return res; } catch (e) { const event = new CustomEvent(_constants.EVENT_NEW_MSG, { detail: str(e) }); document.dispatchEvent(event); dispatch(kadenaSlice.actions.addMessage({ type: 'error', data: "".concat(e) })); } }; }; exports.local = local; const localAndSend = function localAndSend(chainId, pactCode, envData) { let caps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; let gasLimit = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 75000; let gasPrice = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1e-8; let b1 = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false; let b2 = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : false; return async function sign(dispatch, getState) { try { let providerName = getState().kadenaInfo.provider; if (providerName === '') { dispatch(kadenaSlice.actions.addMessage({ type: 'error', data: "No wallet connected" })); return; } let provider = _providers.default[providerName]; let signingCmd = (0, _utils.createSigningCommand)(getState, chainId, pactCode, envData, caps, gasLimit, gasPrice); // console.log(signingCmd); let signedCmd = await provider.sign(getState, signingCmd); let localRes = await (0, _utils.localCommand)(getState, chainId, signedCmd); if (localRes.result.status === 'success') { // console.log('signingCmd'); // console.log(signedCmd); let sendRes = await (0, _utils.sendCommand)(getState, chainId, signedCmd); // console.log(res); let reqKey = sendRes.requestKeys[0]; let reqListen = (0, _utils.listen)(getState, chainId, reqKey); let txData = _objectSpread(_objectSpread({}, localRes), {}, { listenPromise: reqListen }); // console.log("tx data"); // console.log(txData); dispatch(kadenaSlice.actions.addTransaction(txData)); const e = new CustomEvent(_constants.EVENT_NEW_TX, { detail: txData }); document.dispatchEvent(e); return txData; } else { throw new Error(localRes); } } catch (e) { const msg = { type: 'error', data: "Failed to sign command: ".concat(e) }; const event = new CustomEvent(_constants.EVENT_NEW_MSG, { detail: msg }); document.dispatchEvent(event); dispatch(kadenaSlice.actions.addMessage(msg)); // toast.error('Failed to sign command'); } }; }; exports.localAndSend = localAndSend; const signAndSend = function signAndSend(chainId, pactCode, envData) { let caps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; let gasLimit = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 75000; let gasPrice = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 1e-8; return async function sign(dispatch, getState) { try { let providerName = getState().kadenaInfo.provider; if (providerName === '') { dispatch(kadenaSlice.actions.addMessage({ type: 'error', data: "No wallet connected" })); return; } let provider = _providers.default[providerName]; let signingCmd = (0, _utils.createSigningCommand)(getState, chainId, pactCode, envData, caps, gasLimit, gasPrice); // console.log(signingCmd); let signedCmd = await provider.sign(getState, signingCmd); // console.log('signingCmd'); // console.log(signedCmd); let res = await (0, _utils.sendCommand)(getState, chainId, signedCmd); // console.log(res); let reqKey = res.requestKeys[0]; let reqListen = (0, _utils.listen)(getState, chainId, reqKey); let txData = { reqKey: reqKey, listenPromise: reqListen }; // console.log("tx data"); // console.log(txData); dispatch(kadenaSlice.actions.addTransaction(txData)); const e = new CustomEvent(_constants.EVENT_NEW_TX, { detail: txData }); document.dispatchEvent(e); return txData; } catch (e) { const msg = { type: 'error', data: "Failed to sign command: ".concat(e) }; const event = new CustomEvent(_constants.EVENT_NEW_MSG, { detail: msg }); document.dispatchEvent(event); dispatch(kadenaSlice.actions.addMessage(msg)); // toast.error('Failed to sign command'); } }; }; exports.signAndSend = signAndSend;