@kimafinance/kima-transaction-widget 1.2.28-beta.1 → 1.2.30-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,5 @@
1
1
  import React from 'react';
2
- import { PendingTxData } from '../../utils/constants';
3
- declare const PendingTxPopup: ({ txData, handleHtlcContinue }: {
4
- txData: Array<PendingTxData>;
2
+ declare const PendingTxPopup: ({ handleHtlcContinue }: {
5
3
  handleHtlcContinue: (expireTime: any, hash: any, amount: any) => {};
6
4
  }) => React.JSX.Element;
7
5
  export default PendingTxPopup;
@@ -1,7 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ThemeOptions } from '../../interface';
3
- declare const TxButton: ({ theme, txCount }: {
3
+ declare const TxButton: ({ theme }: {
4
4
  theme: ThemeOptions;
5
- txCount: number;
6
5
  }) => React.JSX.Element;
7
6
  export default TxButton;
package/dist/index.js CHANGED
@@ -1204,7 +1204,9 @@ var _optionSlice$actions = optionSlice.actions,
1204
1204
  setSignature = _optionSlice$actions.setSignature,
1205
1205
  setUuid = _optionSlice$actions.setUuid,
1206
1206
  setKYCStatus = _optionSlice$actions.setKYCStatus,
1207
- setExpireTime = _optionSlice$actions.setExpireTime;
1207
+ setExpireTime = _optionSlice$actions.setExpireTime,
1208
+ setPendingTxData = _optionSlice$actions.setPendingTxData,
1209
+ setPendingTxs = _optionSlice$actions.setPendingTxs;
1208
1210
  var optionReducer = optionSlice.reducer;
1209
1211
 
1210
1212
  var configureStore = toolkitRaw.configureStore;
@@ -1292,93 +1294,6 @@ const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.it
1292
1294
 
1293
1295
  const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== "undefined" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol("Symbol.asyncIterator"))) : "@@asyncIterator";
1294
1296
 
1295
- // Asynchronously implement a generic for loop
1296
- function _for(test, update, body) {
1297
- var stage;
1298
- for (;;) {
1299
- var shouldContinue = test();
1300
- if (_isSettledPact(shouldContinue)) {
1301
- shouldContinue = shouldContinue.v;
1302
- }
1303
- if (!shouldContinue) {
1304
- return result;
1305
- }
1306
- if (shouldContinue.then) {
1307
- stage = 0;
1308
- break;
1309
- }
1310
- var result = body();
1311
- if (result && result.then) {
1312
- if (_isSettledPact(result)) {
1313
- result = result.s;
1314
- } else {
1315
- stage = 1;
1316
- break;
1317
- }
1318
- }
1319
- if (update) {
1320
- var updateValue = update();
1321
- if (updateValue && updateValue.then && !_isSettledPact(updateValue)) {
1322
- stage = 2;
1323
- break;
1324
- }
1325
- }
1326
- }
1327
- var pact = new _Pact();
1328
- var reject = _settle.bind(null, pact, 2);
1329
- (stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);
1330
- return pact;
1331
- function _resumeAfterBody(value) {
1332
- result = value;
1333
- do {
1334
- if (update) {
1335
- updateValue = update();
1336
- if (updateValue && updateValue.then && !_isSettledPact(updateValue)) {
1337
- updateValue.then(_resumeAfterUpdate).then(void 0, reject);
1338
- return;
1339
- }
1340
- }
1341
- shouldContinue = test();
1342
- if (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {
1343
- _settle(pact, 1, result);
1344
- return;
1345
- }
1346
- if (shouldContinue.then) {
1347
- shouldContinue.then(_resumeAfterTest).then(void 0, reject);
1348
- return;
1349
- }
1350
- result = body();
1351
- if (_isSettledPact(result)) {
1352
- result = result.v;
1353
- }
1354
- } while (!result || !result.then);
1355
- result.then(_resumeAfterBody).then(void 0, reject);
1356
- }
1357
- function _resumeAfterTest(shouldContinue) {
1358
- if (shouldContinue) {
1359
- result = body();
1360
- if (result && result.then) {
1361
- result.then(_resumeAfterBody).then(void 0, reject);
1362
- } else {
1363
- _resumeAfterBody(result);
1364
- }
1365
- } else {
1366
- _settle(pact, 1, result);
1367
- }
1368
- }
1369
- function _resumeAfterUpdate() {
1370
- if (shouldContinue = test()) {
1371
- if (shouldContinue.then) {
1372
- shouldContinue.then(_resumeAfterTest).then(void 0, reject);
1373
- } else {
1374
- _resumeAfterTest(shouldContinue);
1375
- }
1376
- } else {
1377
- _settle(pact, 1, result);
1378
- }
1379
- }
1380
- }
1381
-
1382
1297
  // Asynchronously implement a do ... while loop
1383
1298
  function _do(body, test) {
1384
1299
  var awaitBody;
@@ -1507,6 +1422,9 @@ var selectHelpPopup = function selectHelpPopup(state) {
1507
1422
  var selectHashPopup = function selectHashPopup(state) {
1508
1423
  return state.option.hashPopup;
1509
1424
  };
1425
+ var selectPendingTxPopup = function selectPendingTxPopup(state) {
1426
+ return state.option.pendingTxPopup;
1427
+ };
1510
1428
  var selectBankPopup = function selectBankPopup(state) {
1511
1429
  return state.option.bankPopup;
1512
1430
  };
@@ -1597,6 +1515,9 @@ var selectExpireTime = function selectExpireTime(state) {
1597
1515
  var selectPendingTxs = function selectPendingTxs(state) {
1598
1516
  return state.option.pendingTxs;
1599
1517
  };
1518
+ var selectPendingTxData = function selectPendingTxData(state) {
1519
+ return state.option.pendingTxData;
1520
+ };
1600
1521
 
1601
1522
  var Loading180Ring = function Loading180Ring(_ref) {
1602
1523
  var _ref$width = _ref.width,
@@ -2214,13 +2135,6 @@ function useIsWalletReady() {
2214
2135
  var correctEvmNetwork = CHAIN_NAMES_TO_IDS[correctChain];
2215
2136
  var hasCorrectEvmNetwork = evmChainId === correctEvmNetwork;
2216
2137
  var events = react.useWeb3ModalEvents();
2217
- var _useState = React.useState('loading'),
2218
- capabilityState = _useState[0],
2219
- setCapabilityState = _useState[1];
2220
- var _useState2 = React.useState(),
2221
- capabilities = _useState2[0],
2222
- setCapabilities = _useState2[1];
2223
- var capabilityMessage = capabilityState === 'loading' ? 'Checking capabilities...' : capabilityState === 'cancelled' ? 'Capability check cancelled by wallet. Please refresh the page and try again.' : capabilityState === 'missing' ? 'Could not find an installed Sats Connect capable wallet. Please install a wallet and try again.' : !capabilities ? 'Something went wrong with getting capabilities' : undefined;
2224
2138
  React.useEffect(function () {
2225
2139
  var _events$data, _events$data2;
2226
2140
  if (((_events$data = events.data) === null || _events$data === void 0 ? void 0 : _events$data.event) === 'SELECT_WALLET' || ((_events$data2 = events.data) === null || _events$data2 === void 0 ? void 0 : _events$data2.event) === 'CONNECT_SUCCESS') {
@@ -2228,50 +2142,6 @@ function useIsWalletReady() {
2228
2142
  localStorage.setItem('wallet', (_events$data3 = events.data) === null || _events$data3 === void 0 ? void 0 : (_events$data3$propert = _events$data3.properties) === null || _events$data3$propert === void 0 ? void 0 : _events$data3$propert.name);
2229
2143
  }
2230
2144
  }, [events]);
2231
- React.useEffect(function () {
2232
- var runCapabilityCheck = function runCapabilityCheck() {
2233
- try {
2234
- var runs = 0;
2235
- var MAX_RUNS = 20;
2236
- setCapabilityState('loading');
2237
- var _temp3 = _for(function () {
2238
- return runs < MAX_RUNS;
2239
- }, void 0, function () {
2240
- function _temp2() {
2241
- return Promise.resolve(new Promise(function (resolve) {
2242
- return setTimeout(resolve, 100);
2243
- })).then(function () {});
2244
- }
2245
- var _temp = _catch(function () {
2246
- return Promise.resolve(satsConnect.getCapabilities({
2247
- onFinish: function onFinish(response) {
2248
- setCapabilities(new Set(response));
2249
- setCapabilityState('loaded');
2250
- },
2251
- onCancel: function onCancel() {
2252
- setCapabilityState('cancelled');
2253
- },
2254
- payload: {
2255
- network: {
2256
- type: satsConnect.BitcoinNetworkType.Testnet
2257
- }
2258
- }
2259
- })).then(function () {});
2260
- }, function () {
2261
- runs++;
2262
- if (runs === MAX_RUNS) {
2263
- setCapabilityState('missing');
2264
- }
2265
- });
2266
- return _temp && _temp.then ? _temp.then(_temp2) : _temp2(_temp);
2267
- });
2268
- return Promise.resolve(_temp3 && _temp3.then ? _temp3.then(function () {}) : void 0);
2269
- } catch (e) {
2270
- return Promise.reject(e);
2271
- }
2272
- };
2273
- runCapabilityCheck();
2274
- }, []);
2275
2145
  var connectBitcoinWallet = React.useCallback(function () {
2276
2146
  try {
2277
2147
  return Promise.resolve(satsConnect.getAddress({
@@ -2332,7 +2202,7 @@ function useIsWalletReady() {
2332
2202
  if (bitcoinAddress) {
2333
2203
  return createWalletStatus(true, undefined, connectBitcoinWallet, bitcoinAddress);
2334
2204
  }
2335
- return createWalletStatus(false, capabilityMessage, connectBitcoinWallet, '');
2205
+ return createWalletStatus(false, 'Xverse wallet not connected', connectBitcoinWallet, '');
2336
2206
  } else if (isEVMChain(correctChain) && hasEthInfo && evmAddress) {
2337
2207
  if (hasCorrectEvmNetwork) {
2338
2208
  return createWalletStatus(true, undefined, connectBitcoinWallet, evmAddress);
@@ -3377,12 +3247,12 @@ var BankInput = function BankInput() {
3377
3247
  };
3378
3248
 
3379
3249
  var TxButton = function TxButton(_ref) {
3380
- var theme = _ref.theme,
3381
- txCount = _ref.txCount;
3250
+ var theme = _ref.theme;
3382
3251
  var dispatch = reactRedux.useDispatch();
3383
3252
  var handleClick = function handleClick() {
3384
3253
  dispatch(setPendingTxPopup(true));
3385
3254
  };
3255
+ var txCount = reactRedux.useSelector(selectPendingTxs);
3386
3256
  return React__default.createElement("button", {
3387
3257
  className: "secondary-button tx-button " + theme.colorMode,
3388
3258
  onClick: handleClick,
@@ -8177,6 +8047,82 @@ function htlcP2WSHAddress(htlcScript, network) {
8177
8047
  return p2wsh.address;
8178
8048
  }
8179
8049
 
8050
+ var PendingTxPopup = function PendingTxPopup(_ref) {
8051
+ var handleHtlcContinue = _ref.handleHtlcContinue;
8052
+ var dispatch = reactRedux.useDispatch();
8053
+ var theme = reactRedux.useSelector(selectTheme);
8054
+ var pendingTxPopup = reactRedux.useSelector(selectPendingTxPopup);
8055
+ var txData = reactRedux.useSelector(selectPendingTxData);
8056
+ return React__default.createElement("div", {
8057
+ className: "kima-modal pending-tx-popup " + theme.colorMode + " " + (pendingTxPopup ? 'open' : '')
8058
+ }, React__default.createElement("div", {
8059
+ className: 'modal-overlay',
8060
+ onClick: function onClick() {
8061
+ dispatch(setPendingTxPopup(false));
8062
+ }
8063
+ }), React__default.createElement("div", {
8064
+ className: 'modal-content-container'
8065
+ }, React__default.createElement("div", {
8066
+ className: 'kima-card-header'
8067
+ }, React__default.createElement("div", {
8068
+ className: 'topbar'
8069
+ }, React__default.createElement("div", {
8070
+ className: 'title'
8071
+ }, React__default.createElement("h3", null, "Bitcoin Transaction List")), React__default.createElement("div", {
8072
+ className: 'control-buttons'
8073
+ }, React__default.createElement("button", {
8074
+ className: 'icon-button',
8075
+ onClick: function onClick() {
8076
+ return dispatch(setPendingTxPopup(false));
8077
+ }
8078
+ }, React__default.createElement(Cross, {
8079
+ fill: theme.colorMode === 'light' ? 'black' : 'white'
8080
+ }))))), React__default.createElement("div", {
8081
+ className: 'modal-content'
8082
+ }, React__default.createElement("div", {
8083
+ className: 'scroll-area custom-scrollbar'
8084
+ }, React__default.createElement("div", {
8085
+ className: 'header-container'
8086
+ }, React__default.createElement("span", null, "Amount"), React__default.createElement("span", null, "Expire Time"), React__default.createElement("span", null, "Status"), React__default.createElement("span", null, "Hash"), React__default.createElement("span", null, "Action")), React__default.createElement("div", {
8087
+ className: 'tx-container'
8088
+ }, txData.map(function (tx, index) {
8089
+ var date = new Date(+tx.expireTime * 1000);
8090
+ var year = date.getFullYear();
8091
+ var month = date.getMonth() + 1;
8092
+ var day = date.getDate();
8093
+ var hours = date.getHours();
8094
+ var minutes = date.getMinutes();
8095
+ var seconds = date.getSeconds();
8096
+ var formattedDate = year + "-" + month.toString().padStart(2, '0') + "-" + day.toString().padStart(2, '0') + " " + hours.toString().padStart(2, '0') + ":" + minutes.toString().padStart(2, '0') + ":" + seconds.toString().padStart(2, '0');
8097
+ return React__default.createElement("div", {
8098
+ className: 'tx-item',
8099
+ key: index
8100
+ }, React__default.createElement("div", {
8101
+ className: 'label'
8102
+ }, React__default.createElement("div", {
8103
+ className: 'icon-wrapper'
8104
+ }, (+tx.amount).toFixed(8), React__default.createElement(BTC, null))), React__default.createElement("span", {
8105
+ className: 'label'
8106
+ }, "" + formattedDate), React__default.createElement("span", {
8107
+ className: 'label'
8108
+ }, tx.status), React__default.createElement("div", {
8109
+ className: 'label'
8110
+ }, React__default.createElement(ExternalLink, {
8111
+ to: "https://" + CHAIN_NAMES_TO_EXPLORER[exports.SupportNetworks.BTC] + "/tx/" + tx.hash
8112
+ }, getShortenedAddress(tx.hash))), React__default.createElement("div", {
8113
+ className: "action-button-container " + (tx.status === 'Pending' || tx.status === 'Failed' ? '' : 'disabled')
8114
+ }, React__default.createElement("div", {
8115
+ className: 'action-button'
8116
+ }, "Reclaim"), React__default.createElement("div", {
8117
+ className: 'action-button',
8118
+ onClick: function onClick() {
8119
+ handleHtlcContinue(tx.expireTime, tx.hash, tx.amount);
8120
+ dispatch(setPendingTxPopup(false));
8121
+ }
8122
+ }, "Continue")));
8123
+ }))))));
8124
+ };
8125
+
8180
8126
  var TransferWidget = function TransferWidget(_ref) {
8181
8127
  var _theme$backgroundColo;
8182
8128
  var theme = _ref.theme,
@@ -8418,6 +8364,19 @@ var TransferWidget = function TransferWidget(_ref) {
8418
8364
  return Promise.reject(e);
8419
8365
  }
8420
8366
  };
8367
+ var handleHtlcContinue = function handleHtlcContinue(expireTime, hash, amount) {
8368
+ try {
8369
+ setBTCTimestamp(expireTime);
8370
+ setBTCSigning(false);
8371
+ setBTCSigned(true);
8372
+ setBTCHash(hash);
8373
+ dispatch(setFeeDeduct(true));
8374
+ dispatch(setAmount(amount));
8375
+ return Promise.resolve();
8376
+ } catch (e) {
8377
+ return Promise.reject(e);
8378
+ }
8379
+ };
8421
8380
  var handleSubmit = function handleSubmit() {
8422
8381
  try {
8423
8382
  var _temp8 = function _temp8(_result) {
@@ -8705,6 +8664,53 @@ var TransferWidget = function TransferWidget(_ref) {
8705
8664
  React.useEffect(function () {
8706
8665
  dispatch(setTheme(theme));
8707
8666
  }, [theme]);
8667
+ React.useEffect(function () {
8668
+ if (!nodeProviderQuery || sourceChain !== exports.SupportNetworks.BTC || !walletAddress) return;
8669
+ var updatePendingTxs = function updatePendingTxs() {
8670
+ try {
8671
+ return Promise.resolve(fetchWrapper.get(nodeProviderQuery + "/kima-finance/kima-blockchain/transaction/get_htlc_transaction/" + walletAddress)).then(function (result) {
8672
+ var data = result === null || result === void 0 ? void 0 : result.htlcLockingTransaction;
8673
+ var txData = [];
8674
+ if (data.length > 0) {
8675
+ for (var _iterator5 = _createForOfIteratorHelperLoose(data), _step5; !(_step5 = _iterator5()).done;) {
8676
+ var tx = _step5.value;
8677
+ var status = '';
8678
+ if (tx.status !== 'Completed') {
8679
+ status = 'Confirming';
8680
+ } else if (tx.pull_status === 'htlc_pull_available') {
8681
+ status = 'Pending';
8682
+ } else if (tx.pull_status === 'htlc_pull_in_progress') {
8683
+ status = 'In Progress';
8684
+ } else if (tx.pull_status === 'htlc_pull_succeed') {
8685
+ status = 'Completed';
8686
+ } else if (tx.pull_status === 'htlc_pull_failed') {
8687
+ status = 'Failed';
8688
+ }
8689
+ txData.push({
8690
+ hash: tx.txHash,
8691
+ amount: tx.amount,
8692
+ expireTime: tx.htlcTimestamp,
8693
+ status: status
8694
+ });
8695
+ }
8696
+ dispatch(setPendingTxData([].concat(txData)));
8697
+ dispatch(setPendingTxs(txData.filter(function (tx) {
8698
+ return tx.status === 'Pending' || tx.status === 'Confirming';
8699
+ }).length));
8700
+ }
8701
+ });
8702
+ } catch (e) {
8703
+ return Promise.reject(e);
8704
+ }
8705
+ };
8706
+ var timerId = setInterval(function () {
8707
+ updatePendingTxs();
8708
+ }, 10000);
8709
+ updatePendingTxs();
8710
+ return function () {
8711
+ clearInterval(timerId);
8712
+ };
8713
+ }, [sourceChain, nodeProviderQuery, walletAddress]);
8708
8714
  return React__default.createElement("div", {
8709
8715
  className: "kima-card " + theme.colorMode + " font-" + theme.fontSize,
8710
8716
  style: {
@@ -8720,8 +8726,7 @@ var TransferWidget = function TransferWidget(_ref) {
8720
8726
  }, React__default.createElement("h3", null, isWizard && wizardStep === 3 || !isWizard && formStep > 0 ? titleOption !== null && titleOption !== void 0 && titleOption.confirmTitle ? titleOption === null || titleOption === void 0 ? void 0 : titleOption.confirmTitle : 'Transfer Details' : titleOption !== null && titleOption !== void 0 && titleOption.initialTitle ? titleOption === null || titleOption === void 0 ? void 0 : titleOption.initialTitle : 'New Transfer')), React__default.createElement("div", {
8721
8727
  className: 'control-buttons'
8722
8728
  }, pendingTxs > 0 ? React__default.createElement(TxButton, {
8723
- theme: theme,
8724
- txCount: pendingTxs
8729
+ theme: theme
8725
8730
  }) : null, React__default.createElement(ExternalLink, {
8726
8731
  to: helpURL ? helpURL : 'https://docs.kima.finance/demo'
8727
8732
  }, React__default.createElement("div", {
@@ -8806,6 +8811,8 @@ var TransferWidget = function TransferWidget(_ref) {
8806
8811
  background: theme.colorMode === exports.ColorModeOptions.light ? 'white' : (_theme$backgroundColo = theme.backgroundColorDark) != null ? _theme$backgroundColo : '#1b1e25'
8807
8812
  }
8808
8813
  }
8814
+ }), React__default.createElement(PendingTxPopup, {
8815
+ handleHtlcContinue: handleHtlcContinue
8809
8816
  }), React__default.createElement(reactTooltip.Tooltip, {
8810
8817
  id: 'popup-tooltip',
8811
8818
  className: "popup-tooltip " + theme.colorMode,