kadenakonnect
Version:
Handles connecting to Kadena enabled wallets: X-Wallet, Zelcore, Chainweaver, Koala Wallet, and Wallet Connect
321 lines (314 loc) • 13.3 kB
JavaScript
;
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;