@subwallet/extension-base 1.3.26-0 → 1.3.27-0

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.
Files changed (50) hide show
  1. package/background/KoniTypes.d.ts +4 -3
  2. package/background/warnings/TransactionWarning.d.ts +2 -0
  3. package/background/warnings/TransactionWarning.js +16 -1
  4. package/cjs/background/warnings/TransactionWarning.js +15 -0
  5. package/cjs/core/logic-validation/index.js +32 -1
  6. package/cjs/core/utils.js +25 -3
  7. package/cjs/koni/background/handlers/Extension.js +86 -94
  8. package/cjs/packageInfo.js +1 -1
  9. package/cjs/services/swap-service/handler/asset-hub/handler.js +182 -40
  10. package/cjs/services/swap-service/handler/asset-hub/utils.js +3 -0
  11. package/cjs/services/swap-service/handler/base-handler.js +326 -12
  12. package/cjs/services/swap-service/handler/chainflip-handler.js +80 -16
  13. package/cjs/services/swap-service/handler/hydradx-handler.js +174 -30
  14. package/cjs/services/swap-service/handler/simpleswap-handler.js +50 -1
  15. package/cjs/services/swap-service/handler/uniswap-handler.js +47 -1
  16. package/cjs/services/swap-service/index.js +191 -27
  17. package/cjs/services/swap-service/interface.js +14 -0
  18. package/cjs/services/swap-service/utils.js +81 -5
  19. package/core/logic-validation/index.d.ts +4 -0
  20. package/core/logic-validation/index.js +22 -1
  21. package/core/utils.d.ts +3 -0
  22. package/core/utils.js +22 -2
  23. package/koni/background/handlers/Extension.d.ts +2 -2
  24. package/koni/background/handlers/Extension.js +20 -28
  25. package/package.json +12 -7
  26. package/packageInfo.js +1 -1
  27. package/services/balance-service/helpers/process.d.ts +3 -3
  28. package/services/balance-service/index.d.ts +2 -3
  29. package/services/swap-service/handler/asset-hub/handler.d.ts +6 -3
  30. package/services/swap-service/handler/asset-hub/handler.js +170 -28
  31. package/services/swap-service/handler/asset-hub/utils.js +3 -0
  32. package/services/swap-service/handler/base-handler.d.ts +12 -3
  33. package/services/swap-service/handler/base-handler.js +329 -15
  34. package/services/swap-service/handler/chainflip-handler.d.ts +4 -3
  35. package/services/swap-service/handler/chainflip-handler.js +74 -10
  36. package/services/swap-service/handler/hydradx-handler.d.ts +8 -3
  37. package/services/swap-service/handler/hydradx-handler.js +176 -32
  38. package/services/swap-service/handler/simpleswap-handler.d.ts +4 -2
  39. package/services/swap-service/handler/simpleswap-handler.js +50 -1
  40. package/services/swap-service/handler/uniswap-handler.d.ts +4 -2
  41. package/services/swap-service/handler/uniswap-handler.js +47 -1
  42. package/services/swap-service/index.d.ts +15 -5
  43. package/services/swap-service/index.js +182 -18
  44. package/services/swap-service/interface.d.ts +9 -0
  45. package/services/swap-service/interface.js +8 -0
  46. package/services/swap-service/utils.d.ts +9 -1
  47. package/services/swap-service/utils.js +74 -4
  48. package/types/service-base.d.ts +6 -2
  49. package/types/swap/index.d.ts +34 -6
  50. package/types/transaction/process.d.ts +0 -6
@@ -15,7 +15,7 @@ import { AuthUrls } from '@subwallet/extension-base/services/request-service/typ
15
15
  import { CrowdloanContributionsResponse } from '@subwallet/extension-base/services/subscan-service/types';
16
16
  import { SWTransactionResponse, SWTransactionResult } from '@subwallet/extension-base/services/transaction-service/types';
17
17
  import { WalletConnectNotSupportRequest, WalletConnectSessionRequest } from '@subwallet/extension-base/services/wallet-connect-service/types';
18
- import { AccountChainType, AccountJson, AccountsWithCurrentAddress, AddressJson, BalanceJson, BaseRequestSign, BuyServiceInfo, BuyTokenInfo, CommonOptimalPath, CurrentAccountInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleYieldStepParams, InternalRequestSign, LeavePoolAdditionalData, NominationPoolInfo, OptimalSwapPathParams, OptimalYieldPath, OptimalYieldPathParams, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestAccountProxyEdit, RequestAccountProxyForget, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeAllowOneSign, RequestChangeTonWalletContractVersion, RequestCheckCrossChainTransfer, RequestCheckPublicAndSecretKey, RequestCheckTransfer, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestExportAccountProxyMnemonic, RequestGetAllTonWalletContractVersion, RequestGetAmountForPair, RequestGetDeriveAccounts, RequestGetDeriveSuggestion, RequestGetTokensCanPayFee, RequestGetYieldPoolTargets, RequestInputAccountSubscribe, RequestJsonGetAccountInfo, RequestJsonRestoreV2, RequestMetadataHash, RequestMnemonicCreateV2, RequestMnemonicValidateV2, RequestPrivateKeyValidateV2, RequestShortenMetadata, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestSubmitProcessTransaction, RequestSubscribeProcessById, RequestTransfer, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseAccountBatchExportV2, ResponseAccountCreateSuriV2, ResponseAccountNameValidate, ResponseBatchJsonGetAccountInfo, ResponseCheckPublicAndSecretKey, ResponseDeriveValidateV2, ResponseEarlyValidateYield, ResponseExportAccountProxyMnemonic, ResponseGetAllTonWalletContractVersion, ResponseGetDeriveAccounts, ResponseGetDeriveSuggestion, ResponseGetYieldPoolTargets, ResponseInputAccountSubscribe, ResponseJsonGetAccountInfo, ResponseMetadataHash, ResponseMnemonicCreateV2, ResponseMnemonicValidateV2, ResponsePrivateKeyValidateV2, ResponseShortenMetadata, ResponseSubscribeProcessAlive, ResponseSubscribeProcessById, StorageDataInterface, SubmitYieldStepData, SubnetYieldPositionInfo, SwapPair, SwapQuoteResponse, SwapRequest, SwapRequestResult, SwapSubmitParams, SwapTxData, TokenSpendingApprovalParams, UnlockDotTransactionNft, UnstakingStatus, ValidateSwapProcessParams, ValidateYieldProcessParams, YieldPoolInfo, YieldPositionInfo } from '@subwallet/extension-base/types';
18
+ import { AccountChainType, AccountJson, AccountsWithCurrentAddress, AddressJson, BalanceJson, BaseRequestSign, BuyServiceInfo, BuyTokenInfo, CommonOptimalSwapPath, CommonOptimalTransferPath, CurrentAccountInfo, EarningRewardHistoryItem, EarningRewardJson, EarningStatus, HandleYieldStepParams, InternalRequestSign, LeavePoolAdditionalData, NominationPoolInfo, OptimalSwapPathParamsV2, OptimalYieldPath, OptimalYieldPathParams, RequestAccountBatchExportV2, RequestAccountCreateSuriV2, RequestAccountNameValidate, RequestAccountProxyEdit, RequestAccountProxyForget, RequestBatchJsonGetAccountInfo, RequestBatchRestoreV2, RequestBounceableValidate, RequestChangeAllowOneSign, RequestChangeTonWalletContractVersion, RequestCheckCrossChainTransfer, RequestCheckPublicAndSecretKey, RequestCheckTransfer, RequestCrossChainTransfer, RequestDeriveCreateMultiple, RequestDeriveCreateV3, RequestDeriveValidateV2, RequestEarlyValidateYield, RequestExportAccountProxyMnemonic, RequestGetAllTonWalletContractVersion, RequestGetAmountForPair, RequestGetDeriveAccounts, RequestGetDeriveSuggestion, RequestGetTokensCanPayFee, RequestGetYieldPoolTargets, RequestInputAccountSubscribe, RequestJsonGetAccountInfo, RequestJsonRestoreV2, RequestMetadataHash, RequestMnemonicCreateV2, RequestMnemonicValidateV2, RequestPrivateKeyValidateV2, RequestShortenMetadata, RequestStakeCancelWithdrawal, RequestStakeClaimReward, RequestSubmitProcessTransaction, RequestSubscribeProcessById, RequestTransfer, RequestUnlockDotCheckCanMint, RequestUnlockDotSubscribeMintedData, RequestYieldLeave, RequestYieldStepSubmit, RequestYieldWithdrawal, ResponseAccountBatchExportV2, ResponseAccountCreateSuriV2, ResponseAccountNameValidate, ResponseBatchJsonGetAccountInfo, ResponseCheckPublicAndSecretKey, ResponseDeriveValidateV2, ResponseEarlyValidateYield, ResponseExportAccountProxyMnemonic, ResponseGetAllTonWalletContractVersion, ResponseGetDeriveAccounts, ResponseGetDeriveSuggestion, ResponseGetYieldPoolTargets, ResponseInputAccountSubscribe, ResponseJsonGetAccountInfo, ResponseMetadataHash, ResponseMnemonicCreateV2, ResponseMnemonicValidateV2, ResponsePrivateKeyValidateV2, ResponseShortenMetadata, ResponseSubscribeProcessAlive, ResponseSubscribeProcessById, StorageDataInterface, SubmitYieldStepData, SubnetYieldPositionInfo, SwapPair, SwapQuoteResponse, SwapRequest, SwapRequestResult, SwapSubmitParams, SwapTxData, TokenSpendingApprovalParams, UnlockDotTransactionNft, UnstakingStatus, ValidateSwapProcessParams, ValidateYieldProcessParams, YieldPoolInfo, YieldPositionInfo } from '@subwallet/extension-base/types';
19
19
  import { RequestSubmitTransfer, RequestSubscribeTransfer, ResponseSubscribeTransfer } from '@subwallet/extension-base/types/balance/transfer';
20
20
  import { RequestClaimBridge } from '@subwallet/extension-base/types/bridge';
21
21
  import { GetNotificationParams, RequestIsClaimedPolygonBridge, RequestSwitchStatusParams } from '@subwallet/extension-base/types/notification';
@@ -1696,7 +1696,7 @@ export interface KoniRequestSignatures {
1696
1696
  'pri(freeBalance.subscribe)': [RequestFreeBalance, AmountDataWithId, AmountDataWithId];
1697
1697
  'pri(accounts.checkTransfer)': [RequestCheckTransfer, ValidateTransactionResponse];
1698
1698
  'pri(accounts.transfer)': [RequestSubmitTransfer, SWTransactionResponse];
1699
- 'pri(accounts.getOptimalTransferProcess)': [RequestOptimalTransferProcess, CommonOptimalPath];
1699
+ 'pri(accounts.getOptimalTransferProcess)': [RequestOptimalTransferProcess, CommonOptimalTransferPath];
1700
1700
  'pri(accounts.approveSpending)': [TokenSpendingApprovalParams, SWTransactionResponse];
1701
1701
  'pri(accounts.checkCrossChainTransfer)': [RequestCheckCrossChainTransfer, ValidateTransactionResponse];
1702
1702
  'pri(accounts.crossChainTransfer)': [RequestCrossChainTransfer, SWTransactionResponse];
@@ -1778,8 +1778,9 @@ export interface KoniRequestSignatures {
1778
1778
  'pri(database.setLocalStorage)': [StorageDataInterface, boolean];
1779
1779
  'pri(database.getLocalStorage)': [string, string | null];
1780
1780
  'pri(swapService.subscribePairs)': [null, SwapPair[], SwapPair[]];
1781
- 'pri(swapService.generateOptimalProcess)': [OptimalSwapPathParams, CommonOptimalPath];
1781
+ 'pri(swapService.getOptimalProcessOnSelectQuote)': [OptimalSwapPathParamsV2, CommonOptimalSwapPath];
1782
1782
  'pri(swapService.handleSwapRequest)': [SwapRequest, SwapRequestResult];
1783
+ 'pri(swapService.handleSwapRequestV2)': [SwapRequest, SwapRequestResult];
1783
1784
  'pri(swapService.handleSwapStep)': [SwapSubmitParams, SWTransactionResponse];
1784
1785
  'pri(swapService.getLatestQuote)': [SwapRequest, SwapQuoteResponse];
1785
1786
  'pri(swapService.validateSwapProcess)': [ValidateSwapProcessParams, TransactionError[]];
@@ -1,6 +1,8 @@
1
1
  import { SWWarning } from '@subwallet/extension-base/background/warnings/SWWarning';
2
2
  import { TransactionWarningType } from '@subwallet/extension-base/types';
3
+ import { TransactionError } from '../errors/TransactionError';
3
4
  export declare class TransactionWarning extends SWWarning {
4
5
  warningType: TransactionWarningType;
5
6
  constructor(warningType: TransactionWarningType, message?: string, code?: number, data?: unknown);
7
+ toError(): TransactionError | null;
6
8
  }
@@ -2,9 +2,10 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import { SWWarning } from '@subwallet/extension-base/background/warnings/SWWarning';
5
- import { BasicTxWarningCode } from '@subwallet/extension-base/types';
5
+ import { BasicTxErrorType, BasicTxWarningCode } from '@subwallet/extension-base/types';
6
6
  import { detectTranslate } from '@subwallet/extension-base/utils';
7
7
  import { t } from 'i18next';
8
+ import { TransactionError } from "../errors/TransactionError.js";
8
9
  const defaultWarningMap = {
9
10
  [BasicTxWarningCode.NOT_ENOUGH_EXISTENTIAL_DEPOSIT]: {
10
11
  message: detectTranslate('Insufficient balance to cover existential deposit. Please decrease the transaction amount or increase your current balance'),
@@ -22,4 +23,18 @@ export class TransactionWarning extends SWWarning {
22
23
  super(warningType, warningMessage, (_defaultWarningMap$wa2 = defaultWarningMap[warningType]) === null || _defaultWarningMap$wa2 === void 0 ? void 0 : _defaultWarningMap$wa2.code, data);
23
24
  this.warningType = warningType;
24
25
  }
26
+ toError() {
27
+ const type = (() => {
28
+ switch (this.warningType) {
29
+ case BasicTxWarningCode.IS_BOUNCEABLE_ADDRESS:
30
+ return null;
31
+ case BasicTxWarningCode.NOT_ENOUGH_EXISTENTIAL_DEPOSIT:
32
+ return BasicTxErrorType.NOT_ENOUGH_EXISTENTIAL_DEPOSIT;
33
+ }
34
+ })();
35
+ if (!type) {
36
+ return null;
37
+ }
38
+ return new TransactionError(type, this.message, this.data);
39
+ }
25
40
  }
@@ -8,6 +8,7 @@ var _SWWarning = require("@subwallet/extension-base/background/warnings/SWWarnin
8
8
  var _types = require("@subwallet/extension-base/types");
9
9
  var _utils = require("@subwallet/extension-base/utils");
10
10
  var _i18next = require("i18next");
11
+ var _TransactionError = require("../errors/TransactionError");
11
12
  // Copyright 2019-2022 @subwallet/extension-koni authors & contributors
12
13
  // SPDX-License-Identifier: Apache-2.0
13
14
 
@@ -28,5 +29,19 @@ class TransactionWarning extends _SWWarning.SWWarning {
28
29
  super(warningType, warningMessage, (_defaultWarningMap$wa2 = defaultWarningMap[warningType]) === null || _defaultWarningMap$wa2 === void 0 ? void 0 : _defaultWarningMap$wa2.code, data);
29
30
  this.warningType = warningType;
30
31
  }
32
+ toError() {
33
+ const type = (() => {
34
+ switch (this.warningType) {
35
+ case _types.BasicTxWarningCode.IS_BOUNCEABLE_ADDRESS:
36
+ return null;
37
+ case _types.BasicTxWarningCode.NOT_ENOUGH_EXISTENTIAL_DEPOSIT:
38
+ return _types.BasicTxErrorType.NOT_ENOUGH_EXISTENTIAL_DEPOSIT;
39
+ }
40
+ })();
41
+ if (!type) {
42
+ return null;
43
+ }
44
+ return new _TransactionError.TransactionError(type, this.message, this.data);
45
+ }
31
46
  }
32
47
  exports.TransactionWarning = TransactionWarning;
@@ -3,9 +3,18 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ var _exportNames = {
7
+ validateSpendingAndFeePayment: true
8
+ };
9
+ exports.validateSpendingAndFeePayment = validateSpendingAndFeePayment;
10
+ var _TransactionError = require("@subwallet/extension-base/background/errors/TransactionError");
11
+ var _utils = require("@subwallet/extension-base/services/chain-service/utils");
12
+ var _types = require("@subwallet/extension-base/types");
13
+ var _i18next = require("i18next");
6
14
  var _swap = require("./swap");
7
15
  Object.keys(_swap).forEach(function (key) {
8
16
  if (key === "default" || key === "__esModule") return;
17
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
9
18
  if (key in exports && exports[key] === _swap[key]) return;
10
19
  Object.defineProperty(exports, key, {
11
20
  enumerable: true,
@@ -17,6 +26,7 @@ Object.keys(_swap).forEach(function (key) {
17
26
  var _request = require("./request");
18
27
  Object.keys(_request).forEach(function (key) {
19
28
  if (key === "default" || key === "__esModule") return;
29
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
20
30
  if (key in exports && exports[key] === _request[key]) return;
21
31
  Object.defineProperty(exports, key, {
22
32
  enumerable: true,
@@ -28,6 +38,7 @@ Object.keys(_request).forEach(function (key) {
28
38
  var _earning = require("./earning");
29
39
  Object.keys(_earning).forEach(function (key) {
30
40
  if (key === "default" || key === "__esModule") return;
41
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
31
42
  if (key in exports && exports[key] === _earning[key]) return;
32
43
  Object.defineProperty(exports, key, {
33
44
  enumerable: true,
@@ -39,6 +50,7 @@ Object.keys(_earning).forEach(function (key) {
39
50
  var _transfer = require("./transfer");
40
51
  Object.keys(_transfer).forEach(function (key) {
41
52
  if (key === "default" || key === "__esModule") return;
53
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
42
54
  if (key in exports && exports[key] === _transfer[key]) return;
43
55
  Object.defineProperty(exports, key, {
44
56
  enumerable: true,
@@ -46,4 +58,23 @@ Object.keys(_transfer).forEach(function (key) {
46
58
  return _transfer[key];
47
59
  }
48
60
  });
49
- });
61
+ });
62
+ // Copyright 2019-2022 @subwallet/extension-base
63
+ // SPDX-License-Identifier: Apache-2.0
64
+
65
+ // apply for all tx: transfer, xcm, swap, earning
66
+ function validateSpendingAndFeePayment(spendingToken, feeToken, bnSpendingAmount, bnFromTokenBalance, bnFeeAmount, bnFeeTokenBalance) {
67
+ if (spendingToken.slug === feeToken.slug) {
68
+ if (bnFromTokenBalance.lte(bnSpendingAmount.plus(bnFeeAmount).plus((0, _utils._isNativeToken)(spendingToken) ? '0' : (0, _utils._getTokenMinAmount)(spendingToken)))) {
69
+ return [new _TransactionError.TransactionError(_types.BasicTxErrorType.NOT_ENOUGH_BALANCE, (0, _i18next.t)(`Insufficient balance. Deposit ${spendingToken.symbol} and try again.`))];
70
+ }
71
+ } else {
72
+ if (bnFromTokenBalance.lte(bnSpendingAmount.plus((0, _utils._isNativeToken)(spendingToken) ? '0' : (0, _utils._getTokenMinAmount)(spendingToken)))) {
73
+ return [new _TransactionError.TransactionError(_types.BasicTxErrorType.NOT_ENOUGH_BALANCE, (0, _i18next.t)(`Insufficient balance. Deposit ${spendingToken.symbol} and try again.`))];
74
+ }
75
+ if (bnFeeTokenBalance.lte(bnFeeAmount.plus((0, _utils._isNativeToken)(feeToken) ? '0' : (0, _utils._getTokenMinAmount)(feeToken)))) {
76
+ return [new _TransactionError.TransactionError(_types.BasicTxErrorType.NOT_ENOUGH_BALANCE, (0, _i18next.t)(`Insufficient balance. Deposit ${feeToken.symbol} and try again.`))];
77
+ }
78
+ }
79
+ return [];
80
+ }
package/cjs/core/utils.js CHANGED
@@ -7,6 +7,7 @@ exports._getAppliedExistentialDeposit = _getAppliedExistentialDeposit;
7
7
  exports._isAddress = _isAddress;
8
8
  exports._isNotDuplicateAddress = _isNotDuplicateAddress;
9
9
  exports._isNotNull = _isNotNull;
10
+ exports._isSufficientToken = void 0;
10
11
  exports._isSupportLedgerAccount = _isSupportLedgerAccount;
11
12
  exports._isValidAddressForEcosystem = _isValidAddressForEcosystem;
12
13
  exports._isValidCardanoAddressFormat = _isValidCardanoAddressFormat;
@@ -15,9 +16,11 @@ exports._isValidTonAddressFormat = _isValidTonAddressFormat;
15
16
  exports.getMaxBigInt = getMaxBigInt;
16
17
  exports.getStrictMode = getStrictMode;
17
18
  exports.ledgerMustCheckNetwork = ledgerMustCheckNetwork;
19
+ var _types = require("@subwallet/chain-list/types");
18
20
  var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
19
- var _types = require("@subwallet/extension-base/core/substrate/types");
21
+ var _types2 = require("@subwallet/extension-base/core/substrate/types");
20
22
  var _utils = require("@subwallet/extension-base/services/balance-service/helpers/subscribe/ton/utils");
23
+ var _constants = require("@subwallet/extension-base/services/chain-service/constants");
21
24
  var _utils2 = require("@subwallet/extension-base/services/chain-service/utils");
22
25
  var _utils3 = require("@subwallet/extension-base/utils");
23
26
  var _keyring = require("@subwallet/keyring");
@@ -26,7 +29,7 @@ var _utilCrypto = require("@polkadot/util-crypto");
26
29
  // SPDX-License-Identifier: Apache-2.0
27
30
 
28
31
  function getStrictMode(type, extrinsicType) {
29
- if (type === _types.BalanceAccountType.FrameSystemAccountInfo) {
32
+ if (type === _types2.BalanceAccountType.FrameSystemAccountInfo) {
30
33
  return !extrinsicType || ![_KoniTypes.ExtrinsicType.TRANSFER_BALANCE].includes(extrinsicType);
31
34
  }
32
35
  return false;
@@ -146,4 +149,23 @@ function _isSupportLedgerAccount(validateRecipientParams) {
146
149
  }
147
150
  }
148
151
  return '';
149
- }
152
+ }
153
+ const _isSufficientToken = async (tokenInfo, substrateApi) => {
154
+ if (_constants.SUFFICIENT_CHAIN.includes(tokenInfo.originChain) && tokenInfo.assetType !== _types._AssetType.NATIVE) {
155
+ const assetId = (0, _utils2._isBridgedToken)(tokenInfo) ? (0, _utils2._getXcmAssetMultilocation)(tokenInfo) : (0, _utils2._getTokenOnChainAssetId)(tokenInfo);
156
+ const queryParams = {
157
+ section: 'query',
158
+ module: 'foreignAssets',
159
+ method: 'asset',
160
+ args: [assetId]
161
+ };
162
+ if (!(0, _utils2._isBridgedToken)(tokenInfo)) {
163
+ queryParams.module = 'assets';
164
+ }
165
+ const metadata = await substrateApi.makeRpcQuery(queryParams);
166
+ return metadata.isSufficient;
167
+ } else {
168
+ return false;
169
+ }
170
+ };
171
+ exports._isSufficientToken = _isSufficientToken;