@web3auth/no-modal 10.8.2 → 10.9.0-alpha.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 (112) hide show
  1. package/dist/lib.cjs/base/connector/baseConnector.js +9 -5
  2. package/dist/lib.cjs/base/connector/connectorStatus.js +9 -0
  3. package/dist/lib.cjs/base/connector/constants.js +8 -1
  4. package/dist/lib.cjs/base/utils.js +2 -1
  5. package/dist/lib.cjs/connectors/auth-connector/authConnector.js +21 -9
  6. package/dist/lib.cjs/connectors/base-evm-connector/baseEvmConnector.js +20 -1
  7. package/dist/lib.cjs/connectors/base-solana-connector/baseSolanaConnector.js +20 -1
  8. package/dist/lib.cjs/connectors/coinbase-connector/coinbaseConnector.js +11 -35
  9. package/dist/lib.cjs/connectors/injected-evm-connector/injectedEvmConnector.js +5 -4
  10. package/dist/lib.cjs/connectors/injected-solana-connector/walletStandardConnector.js +6 -5
  11. package/dist/lib.cjs/connectors/metamask-connector/metamaskConnector.js +3 -2
  12. package/dist/lib.cjs/connectors/wallet-connect-v2-connector/WalletConnectV2Provider.js +1 -0
  13. package/dist/lib.cjs/connectors/wallet-connect-v2-connector/config.js +1 -0
  14. package/dist/lib.cjs/connectors/wallet-connect-v2-connector/walletConnectV2Connector.js +24 -5
  15. package/dist/lib.cjs/connectors/wallet-connect-v2-connector/walletConnectV2Utils.js +1 -0
  16. package/dist/lib.cjs/index.js +4 -0
  17. package/dist/lib.cjs/noModal.js +87 -21
  18. package/dist/lib.cjs/plugins/nft-checkout-plugin/plugin.js +3 -2
  19. package/dist/lib.cjs/plugins/wallet-services-plugin/plugin.js +3 -5
  20. package/dist/lib.cjs/providers/account-abstraction-provider/providers/AccountAbstractionProvider.js +1 -0
  21. package/dist/lib.cjs/providers/account-abstraction-provider/providers/utils.js +1 -0
  22. package/dist/lib.cjs/providers/base-provider/baseProvider.js +1 -0
  23. package/dist/lib.cjs/providers/ethereum-mpc-provider/providers/signingProviders/EthereumSigningProvider.js +1 -0
  24. package/dist/lib.cjs/providers/ethereum-mpc-provider/providers/signingProviders/signingUtils.js +1 -0
  25. package/dist/lib.cjs/providers/ethereum-provider/providers/privateKeyProviders/TransactionFormatter/formatter.js +1 -0
  26. package/dist/lib.cjs/providers/solana-provider/providers/injectedProviders/base/baseInjectedProvider.js +1 -0
  27. package/dist/lib.cjs/providers/solana-provider/providers/injectedProviders/walletStandardProvider.js +1 -0
  28. package/dist/lib.cjs/providers/xrpl-provider/providers/privateKeyProviders/xrplPrivateKeyProvider.js +1 -0
  29. package/dist/lib.cjs/react/context/WalletServicesInnerContext.js +1 -0
  30. package/dist/lib.cjs/react/context/Web3AuthInnerContext.js +20 -3
  31. package/dist/lib.cjs/react/hooks/useCheckout.js +1 -0
  32. package/dist/lib.cjs/react/hooks/useFunding.js +1 -0
  33. package/dist/lib.cjs/react/hooks/useIdentityToken.js +8 -3
  34. package/dist/lib.cjs/react/hooks/useReceive.js +1 -0
  35. package/dist/lib.cjs/react/hooks/useSwap.js +1 -0
  36. package/dist/lib.cjs/react/hooks/useWalletConnectScanner.js +1 -0
  37. package/dist/lib.cjs/react/hooks/useWalletUI.js +1 -0
  38. package/dist/lib.cjs/react/hooks/useWeb3Auth.js +2 -0
  39. package/dist/lib.cjs/react/hooks/useWeb3AuthInner.js +1 -0
  40. package/dist/lib.cjs/react/solana/hooks/useSolanaWallet.js +1 -0
  41. package/dist/lib.cjs/react/wagmi/provider.js +1 -0
  42. package/dist/lib.cjs/types/base/connector/baseConnector.d.ts +2 -1
  43. package/dist/lib.cjs/types/base/connector/connectorStatus.d.ts +3 -0
  44. package/dist/lib.cjs/types/base/connector/constants.d.ts +8 -0
  45. package/dist/lib.cjs/types/base/connector/index.d.ts +1 -0
  46. package/dist/lib.cjs/types/base/connector/interfaces.d.ts +12 -4
  47. package/dist/lib.cjs/types/base/core/IWeb3Auth.d.ts +7 -1
  48. package/dist/lib.cjs/types/base/hooks/index.d.ts +1 -0
  49. package/dist/lib.cjs/types/noModal.d.ts +1 -0
  50. package/dist/lib.cjs/types/vue/interfaces.d.ts +1 -0
  51. package/dist/lib.cjs/types/vue/solana/composables/useSignMessage.d.ts +1 -1
  52. package/dist/lib.cjs/vue/WalletServicesInnerProvider.js +1 -0
  53. package/dist/lib.cjs/vue/Web3AuthProvider.js +17 -2
  54. package/dist/lib.cjs/vue/composables/useCheckout.js +3 -1
  55. package/dist/lib.cjs/vue/composables/useEnableMFA.js +3 -1
  56. package/dist/lib.cjs/vue/composables/useFunding.js +3 -1
  57. package/dist/lib.cjs/vue/composables/useIdentityToken.js +12 -4
  58. package/dist/lib.cjs/vue/composables/useManageMFA.js +3 -1
  59. package/dist/lib.cjs/vue/composables/useReceive.js +3 -1
  60. package/dist/lib.cjs/vue/composables/useSwap.js +3 -1
  61. package/dist/lib.cjs/vue/composables/useSwitchChain.js +3 -1
  62. package/dist/lib.cjs/vue/composables/useWalletConnectScanner.js +3 -1
  63. package/dist/lib.cjs/vue/composables/useWalletUI.js +3 -1
  64. package/dist/lib.cjs/vue/composables/useWeb3Auth.js +2 -0
  65. package/dist/lib.cjs/vue/composables/useWeb3AuthConnect.js +3 -1
  66. package/dist/lib.cjs/vue/composables/useWeb3AuthDisconnect.js +3 -1
  67. package/dist/lib.cjs/vue/composables/useWeb3AuthInner.js +1 -0
  68. package/dist/lib.cjs/vue/composables/useWeb3AuthUser.js +3 -1
  69. package/dist/lib.cjs/vue/solana/composables/useSignAndSendTransaction.js +15 -0
  70. package/dist/lib.cjs/vue/solana/composables/useSignMessage.js +15 -0
  71. package/dist/lib.cjs/vue/solana/composables/useSignTransaction.js +15 -0
  72. package/dist/lib.cjs/vue/solana/composables/useSolanaWallet.js +1 -0
  73. package/dist/lib.cjs/vue/wagmi/provider.js +1 -0
  74. package/dist/lib.esm/base/connector/baseConnector.js +9 -5
  75. package/dist/lib.esm/base/connector/connectorStatus.js +6 -0
  76. package/dist/lib.esm/base/connector/constants.js +8 -2
  77. package/dist/lib.esm/base/utils.js +1 -1
  78. package/dist/lib.esm/connectors/auth-connector/authConnector.js +21 -9
  79. package/dist/lib.esm/connectors/base-evm-connector/baseEvmConnector.js +20 -2
  80. package/dist/lib.esm/connectors/base-solana-connector/baseSolanaConnector.js +20 -2
  81. package/dist/lib.esm/connectors/coinbase-connector/coinbaseConnector.js +10 -35
  82. package/dist/lib.esm/connectors/injected-evm-connector/injectedEvmConnector.js +4 -4
  83. package/dist/lib.esm/connectors/injected-solana-connector/walletStandardConnector.js +5 -5
  84. package/dist/lib.esm/connectors/metamask-connector/metamaskConnector.js +2 -2
  85. package/dist/lib.esm/connectors/wallet-connect-v2-connector/walletConnectV2Connector.js +23 -5
  86. package/dist/lib.esm/index.js +2 -1
  87. package/dist/lib.esm/noModal.js +90 -23
  88. package/dist/lib.esm/plugins/nft-checkout-plugin/plugin.js +2 -2
  89. package/dist/lib.esm/plugins/wallet-services-plugin/plugin.js +2 -5
  90. package/dist/lib.esm/react/context/Web3AuthInnerContext.js +20 -3
  91. package/dist/lib.esm/react/hooks/useIdentityToken.js +8 -3
  92. package/dist/lib.esm/react/hooks/useWeb3Auth.js +2 -0
  93. package/dist/lib.esm/vue/Web3AuthProvider.js +16 -1
  94. package/dist/lib.esm/vue/composables/useCheckout.js +2 -0
  95. package/dist/lib.esm/vue/composables/useEnableMFA.js +2 -0
  96. package/dist/lib.esm/vue/composables/useFunding.js +2 -0
  97. package/dist/lib.esm/vue/composables/useIdentityToken.js +11 -3
  98. package/dist/lib.esm/vue/composables/useManageMFA.js +2 -0
  99. package/dist/lib.esm/vue/composables/useReceive.js +2 -0
  100. package/dist/lib.esm/vue/composables/useSwap.js +2 -0
  101. package/dist/lib.esm/vue/composables/useSwitchChain.js +2 -0
  102. package/dist/lib.esm/vue/composables/useWalletConnectScanner.js +2 -0
  103. package/dist/lib.esm/vue/composables/useWalletUI.js +2 -0
  104. package/dist/lib.esm/vue/composables/useWeb3Auth.js +2 -0
  105. package/dist/lib.esm/vue/composables/useWeb3AuthConnect.js +2 -0
  106. package/dist/lib.esm/vue/composables/useWeb3AuthDisconnect.js +2 -0
  107. package/dist/lib.esm/vue/composables/useWeb3AuthUser.js +2 -0
  108. package/dist/lib.esm/vue/solana/composables/useSignAndSendTransaction.js +2 -0
  109. package/dist/lib.esm/vue/solana/composables/useSignMessage.js +3 -1
  110. package/dist/lib.esm/vue/solana/composables/useSignTransaction.js +2 -0
  111. package/dist/noModal.umd.min.js +1 -1
  112. package/package.json +2 -2
@@ -10,6 +10,7 @@ var analytics = require('./base/analytics.js');
10
10
  var IChainInterface = require('./base/chain/IChainInterface.js');
11
11
  var index = require('./base/errors/index.js');
12
12
  var index$1 = require('./base/wallet/index.js');
13
+ var connectorStatus = require('./base/connector/connectorStatus.js');
13
14
  var constants = require('./base/connector/constants.js');
14
15
  var utils$1 = require('./base/connector/utils.js');
15
16
  var constants$1 = require('./base/constants.js');
@@ -56,7 +57,8 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
56
57
  });
57
58
  this.loadState(initialState);
58
59
  if (this.state.idToken && this.coreOptions.ssr) {
59
- this.status = constants.CONNECTOR_STATUS.CONNECTED;
60
+ // connect-only is the default authentication mode, so we need to set the status to connected if the idToken is present and ssr is enabled
61
+ this.status = this.coreOptions.initialAuthenticationMode === constants.CONNECTOR_INITIAL_AUTHENTICATION_MODE.CONNECT_AND_SIGN ? constants.CONNECTOR_STATUS.AUTHORIZED : constants.CONNECTOR_STATUS.CONNECTED;
60
62
  }
61
63
  }
62
64
  get currentChain() {
@@ -90,6 +92,9 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
90
92
  get accountAbstractionProvider() {
91
93
  return this.aaProvider;
92
94
  }
95
+ get idToken() {
96
+ return this.state.idToken || null;
97
+ }
93
98
  set provider(_) {
94
99
  throw new Error("Not implemented");
95
100
  }
@@ -213,7 +218,7 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
213
218
  if (params.chainId === ((_this$currentChain2 = this.currentChain) === null || _this$currentChain2 === void 0 ? void 0 : _this$currentChain2.chainId)) return;
214
219
  const newChainConfig = this.coreOptions.chains.find(x => x.chainId === params.chainId);
215
220
  if (!newChainConfig) throw index.WalletInitializationError.invalidParams("Invalid chainId");
216
- if (this.status === constants.CONNECTOR_STATUS.CONNECTED && this.connectedConnector) {
221
+ if (connectorStatus.CONNECTED_STATUSES.includes(this.status) && this.connectedConnector) {
217
222
  await this.connectedConnector.switchChain(params);
218
223
  return;
219
224
  }
@@ -233,7 +238,8 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
233
238
  if (!connector || !this.commonJRPCProvider) throw index.WalletInitializationError.notFound(`Please add wallet connector for ${connectorName} wallet, before connecting`);
234
239
  const initialChain = this.getInitialChainIdForConnector(connector);
235
240
  const finalLoginParams = _objectSpread(_objectSpread({}, loginParams), {}, {
236
- chainId: initialChain.chainId
241
+ chainId: initialChain.chainId,
242
+ getIdentityToken: this.coreOptions.initialAuthenticationMode === constants.CONNECTOR_INITIAL_AUTHENTICATION_MODE.CONNECT_AND_SIGN
237
243
  });
238
244
  // track connection started event
239
245
  const startTime = Date.now();
@@ -278,19 +284,48 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
278
284
  // track connection started event
279
285
  this.analytics.track(analytics.ANALYTICS_EVENTS.CONNECTION_STARTED, eventData);
280
286
  return new Promise((resolve, reject) => {
287
+ let connectedEventCompleted = false;
288
+ let authorizedEventReceived = false;
281
289
  const cleanup = () => {
282
290
  this.off(constants.CONNECTOR_EVENTS.CONNECTED, onConnected);
283
291
  this.off(constants.CONNECTOR_EVENTS.ERRORED, onErrored);
292
+ this.off(constants.CONNECTOR_EVENTS.AUTHORIZED, onAuthorized);
293
+ };
294
+ const checkCompletion = async () => {
295
+ // In CONNECT_AND_SIGN mode, wait for both connected event and authorized event
296
+ if (finalLoginParams.getIdentityToken) {
297
+ if (connectedEventCompleted && authorizedEventReceived) {
298
+ await completeConnection();
299
+ }
300
+ } else {
301
+ // In CONNECT_ONLY mode, just wait for connected event
302
+ if (connectedEventCompleted) {
303
+ await completeConnection();
304
+ }
305
+ }
306
+ };
307
+ const completeConnection = async () => {
308
+ try {
309
+ // track connection completed event
310
+ const userInfo = await connector.getUserInfo();
311
+ this.analytics.track(analytics.ANALYTICS_EVENTS.CONNECTION_COMPLETED, _objectSpread(_objectSpread({}, eventData), {}, {
312
+ is_mfa_enabled: userInfo === null || userInfo === void 0 ? void 0 : userInfo.isMfaEnabled,
313
+ duration: Date.now() - startTime
314
+ }));
315
+ cleanup();
316
+ resolve(this.provider);
317
+ } catch (error) {
318
+ cleanup();
319
+ reject(error);
320
+ }
284
321
  };
285
322
  const onConnected = async () => {
286
- // track connection completed event
287
- const userInfo = await connector.getUserInfo();
288
- this.analytics.track(analytics.ANALYTICS_EVENTS.CONNECTION_COMPLETED, _objectSpread(_objectSpread({}, eventData), {}, {
289
- is_mfa_enabled: userInfo === null || userInfo === void 0 ? void 0 : userInfo.isMfaEnabled,
290
- duration: Date.now() - startTime
291
- }));
292
- cleanup();
293
- resolve(this.provider);
323
+ connectedEventCompleted = true;
324
+ await checkCompletion();
325
+ };
326
+ const onAuthorized = async () => {
327
+ authorizedEventReceived = true;
328
+ await checkCompletion();
294
329
  };
295
330
  const onErrored = async err => {
296
331
  // track connection failed event
@@ -301,6 +336,9 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
301
336
  reject(err);
302
337
  };
303
338
  this.once(constants.CONNECTOR_EVENTS.CONNECTED, onConnected);
339
+ if (finalLoginParams.getIdentityToken) {
340
+ this.once(constants.CONNECTOR_EVENTS.AUTHORIZED, onAuthorized);
341
+ }
304
342
  this.once(constants.CONNECTOR_EVENTS.ERRORED, onErrored);
305
343
  connector.connect(finalLoginParams);
306
344
  this.setCurrentChain(initialChain.chainId);
@@ -309,18 +347,18 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
309
347
  async logout(options = {
310
348
  cleanup: false
311
349
  }) {
312
- if (this.status !== constants.CONNECTOR_STATUS.CONNECTED || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
350
+ if (!connectorStatus.CONNECTED_STATUSES.includes(this.status) || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
313
351
  await this.connectedConnector.disconnect(options);
314
352
  }
315
353
  async getUserInfo() {
316
354
  var _this$connectedConnec;
317
355
  loglevel.log.debug("Getting user info", this.status, (_this$connectedConnec = this.connectedConnector) === null || _this$connectedConnec === void 0 ? void 0 : _this$connectedConnec.name);
318
- if (this.status !== constants.CONNECTOR_STATUS.CONNECTED || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
356
+ if (!connectorStatus.CAN_AUTHORIZE_STATUSES.includes(this.status) || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
319
357
  return this.connectedConnector.getUserInfo();
320
358
  }
321
359
  async enableMFA(loginParams) {
322
360
  var _authConnector$authIn2;
323
- if (this.status !== constants.CONNECTOR_STATUS.CONNECTED || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
361
+ if (!connectorStatus.CONNECTED_STATUSES.includes(this.status) || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
324
362
  if (this.connectedConnector.name !== index$1.WALLET_CONNECTORS.AUTH) throw index.WalletLoginError.unsupportedOperation(`EnableMFA is not supported for this connector.`);
325
363
  const authConnector = this.connectedConnector;
326
364
  const trackData = {
@@ -337,7 +375,7 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
337
375
  }
338
376
  async manageMFA(loginParams) {
339
377
  var _authConnector$authIn3;
340
- if (this.status !== constants.CONNECTOR_STATUS.CONNECTED || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
378
+ if (!connectorStatus.CONNECTED_STATUSES.includes(this.status) || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
341
379
  if (this.connectedConnector.name !== index$1.WALLET_CONNECTORS.AUTH) throw index.WalletLoginError.unsupportedOperation(`ManageMFA is not supported for this connector.`);
342
380
  const authConnector = this.connectedConnector;
343
381
  const trackData = {
@@ -353,7 +391,7 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
353
391
  }
354
392
  }
355
393
  async getIdentityToken() {
356
- if (this.status !== constants.CONNECTOR_STATUS.CONNECTED || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
394
+ if (!connectorStatus.CAN_AUTHORIZE_STATUSES.includes(this.status) || !this.connectedConnector) throw index.WalletLoginError.notConnectedError(`No wallet is connected`);
357
395
  const trackData = {
358
396
  connector: this.connectedConnector.name
359
397
  };
@@ -597,9 +635,9 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
597
635
  const isExternalWalletEnabled = Boolean(projectConfig.externalWalletAuth);
598
636
  const isMipdEnabled = isExternalWalletEnabled && ((_this$coreOptions$mul = this.coreOptions.multiInjectedProviderDiscovery) !== null && _this$coreOptions$mul !== void 0 ? _this$coreOptions$mul : true);
599
637
  const chainNamespaces = new Set(this.coreOptions.chains.map(chain => chain.chainNamespace));
600
- // prioritize using MM connector over injected connector for EVM chains
601
- if (utils.isBrowser() && chainNamespaces.has(baseControllers.CHAIN_NAMESPACES.EIP155)) {
602
- // only set headless to true if modal SDK is used, otherwise just use the modal from native Metamask SDK
638
+ // it's safe to add it here as if there is a MetaMask injected provider, this won't override it
639
+ // only set headless to true if modal SDK is used, otherwise just use the modal from native Metamask SDK
640
+ if (utils.isBrowser() && chainNamespaces.has(baseControllers.CHAIN_NAMESPACES.EIP155) && !chainNamespaces.has(baseControllers.CHAIN_NAMESPACES.SOLANA)) {
603
641
  connectorFns.push(metamaskConnector.metaMaskConnector(modalMode ? {
604
642
  headless: true
605
643
  } : undefined));
@@ -635,6 +673,13 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
635
673
  connectorFns.push(...evmMipd.getProviders().map(injectedEvmConnector));
636
674
  }
637
675
  }
676
+ // it's safe to add it here as if there is a MetaMask injected provider, this won't override it
677
+ // only set headless to true if modal SDK is used, otherwise just use the modal from native Metamask SDK
678
+ if (utils.isBrowser() && (chainNamespaces.has(baseControllers.CHAIN_NAMESPACES.SOLANA) || chainNamespaces.has(baseControllers.CHAIN_NAMESPACES.EIP155))) {
679
+ connectorFns.push(metamaskConnector.metaMaskConnector(modalMode ? {
680
+ headless: true
681
+ } : undefined));
682
+ }
638
683
  // add WalletConnectV2 connector if external wallets are enabled
639
684
  if (utils.isBrowser() && isExternalWalletEnabled && (chainNamespaces.has(baseControllers.CHAIN_NAMESPACES.SOLANA) || chainNamespaces.has(baseControllers.CHAIN_NAMESPACES.EIP155))) {
640
685
  const {
@@ -682,8 +727,14 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
682
727
  var _this$currentChain3, _accountAbstractionCo;
683
728
  if (!this.commonJRPCProvider) throw index.WalletInitializationError.notFound(`CommonJrpcProvider not found`);
684
729
  const {
685
- provider
730
+ provider,
731
+ identityTokenInfo
686
732
  } = data;
733
+ if (identityTokenInfo) {
734
+ this.setState({
735
+ idToken: identityTokenInfo.idToken
736
+ });
737
+ }
687
738
  // when ssr is enabled, we need to get the idToken from the connector.
688
739
  if (this.coreOptions.ssr) {
689
740
  try {
@@ -738,7 +789,9 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
738
789
  this.cacheWallet(data.connector);
739
790
  this.status = constants.CONNECTOR_STATUS.CONNECTED;
740
791
  loglevel.log.debug("connected", this.status, this.connectedConnectorName);
741
- this.connectToPlugins(data);
792
+ this.connectToPlugins(_objectSpread(_objectSpread({}, data), {}, {
793
+ connector: data.connector
794
+ }));
742
795
  this.emit(constants.CONNECTOR_EVENTS.CONNECTED, _objectSpread(_objectSpread({}, data), {}, {
743
796
  loginMode: this.loginMode
744
797
  }));
@@ -808,6 +861,19 @@ class Web3AuthNoModal extends auth.SafeEventEmitter {
808
861
  });
809
862
  this.emit(constants.CONNECTOR_EVENTS.MFA_ENABLED, isMFAEnabled);
810
863
  });
864
+ connector.on(constants.CONNECTOR_EVENTS.AUTHORIZING, data => {
865
+ this.status = constants.CONNECTOR_STATUS.AUTHORIZING;
866
+ this.emit(constants.CONNECTOR_EVENTS.AUTHORIZING, data);
867
+ loglevel.log.debug("authorizing", this.status, this.connectedConnectorName);
868
+ });
869
+ connector.on(constants.CONNECTOR_EVENTS.AUTHORIZED, data => {
870
+ this.status = constants.CONNECTOR_STATUS.AUTHORIZED;
871
+ this.setState({
872
+ idToken: data.identityTokenInfo.idToken
873
+ });
874
+ this.emit(constants.CONNECTOR_EVENTS.AUTHORIZED, data);
875
+ loglevel.log.debug("authorized", this.status, this.connectedConnectorName);
876
+ });
811
877
  }
812
878
  checkInitRequirements() {
813
879
  if (this.status === constants.CONNECTOR_STATUS.READY) throw index.WalletInitializationError.notReady("Connector is already initialized");
@@ -8,7 +8,8 @@ require('../../base/loglevel.js');
8
8
  require('@toruslabs/base-controllers');
9
9
  require('../../base/errors/index.js');
10
10
  var index = require('../../base/wallet/index.js');
11
- var constants = require('../../base/connector/constants.js');
11
+ var connectorStatus = require('../../base/connector/connectorStatus.js');
12
+ require('../../base/connector/constants.js');
12
13
  require('jwt-decode');
13
14
  var errors = require('../../base/plugin/errors.js');
14
15
  var IPlugin = require('../../base/plugin/IPlugin.js');
@@ -44,7 +45,7 @@ class NFTCheckoutPlugin extends auth.SafeEventEmitter {
44
45
  if (!this.isInitialized) throw errors.NFTCheckoutPluginError.notInitialized();
45
46
  this.emit(IPlugin.PLUGIN_EVENTS.CONNECTING);
46
47
  this.status = IPlugin.PLUGIN_STATUS.CONNECTING;
47
- if (this.web3auth.status !== constants.CONNECTOR_STATUS.CONNECTED) throw errors.NFTCheckoutPluginError.web3AuthNotConnected();
48
+ if (!connectorStatus.CONNECTED_STATUSES.includes(this.web3auth.status)) throw errors.NFTCheckoutPluginError.web3AuthNotConnected();
48
49
  if (!this.web3auth.provider) throw errors.NFTCheckoutPluginError.providerRequired();
49
50
  const accounts = await this.web3auth.provider.request({
50
51
  method: "eth_accounts"
@@ -6,7 +6,8 @@ var analytics = require('../../base/analytics.js');
6
6
  var baseControllers = require('@toruslabs/base-controllers');
7
7
  require('../../base/errors/index.js');
8
8
  var index = require('../../base/wallet/index.js');
9
- var constants = require('../../base/connector/constants.js');
9
+ var connectorStatus = require('../../base/connector/connectorStatus.js');
10
+ require('../../base/connector/constants.js');
10
11
  require('jwt-decode');
11
12
  var loglevel = require('../../base/loglevel.js');
12
13
  var errors = require('../../base/plugin/errors.js');
@@ -15,7 +16,6 @@ require('@toruslabs/constants');
15
16
  require('@toruslabs/http-helpers');
16
17
  var wsEmbed = require('@web3auth/ws-embed');
17
18
 
18
- // TODO: support project config items here. incl. key export flag, multiple chains
19
19
  class WalletServicesPlugin extends auth.SafeEventEmitter {
20
20
  constructor(...args) {
21
21
  super(...args);
@@ -67,7 +67,7 @@ class WalletServicesPlugin extends auth.SafeEventEmitter {
67
67
  this.provider = this.web3auth.provider;
68
68
  }
69
69
  }
70
- if (this.web3auth.status !== constants.CONNECTOR_STATUS.CONNECTED) {
70
+ if (!connectorStatus.CAN_AUTHORIZE_STATUSES.includes(this.web3auth.status)) {
71
71
  throw errors.WalletServicesPluginError.web3AuthNotConnected();
72
72
  } else if (!this.web3auth.provider) {
73
73
  throw errors.WalletServicesPluginError.providerRequired();
@@ -108,8 +108,6 @@ class WalletServicesPlugin extends auth.SafeEventEmitter {
108
108
  (_this$analytics3 = this.analytics) === null || _this$analytics3 === void 0 || _this$analytics3.track(analytics.ANALYTICS_EVENTS.WALLET_CHECKOUT_CLICKED, {
109
109
  is_visible: showCheckoutParams === null || showCheckoutParams === void 0 ? void 0 : showCheckoutParams.show,
110
110
  receive_wallet_address_enabled: !!(showCheckoutParams !== null && showCheckoutParams !== void 0 && showCheckoutParams.receiveWalletAddress),
111
- // TODO: where is the below?
112
- // receive_wallet_address: showCheckoutParams?.receiveWalletAddress,
113
111
  token_list: showCheckoutParams === null || showCheckoutParams === void 0 ? void 0 : showCheckoutParams.tokenList,
114
112
  fiat_list: showCheckoutParams === null || showCheckoutParams === void 0 ? void 0 : showCheckoutParams.fiatList,
115
113
  crypto: showCheckoutParams === null || showCheckoutParams === void 0 ? void 0 : showCheckoutParams.crypto,
@@ -11,6 +11,7 @@ require('../../../base/loglevel.js');
11
11
  var baseControllers = require('@toruslabs/base-controllers');
12
12
  var index = require('../../../base/errors/index.js');
13
13
  require('../../../base/wallet/index.js');
14
+ require('../../../base/connector/connectorStatus.js');
14
15
  require('../../../base/connector/constants.js');
15
16
  require('jwt-decode');
16
17
  require('../../../base/plugin/errors.js');
@@ -10,6 +10,7 @@ var loglevel = require('../../../base/loglevel.js');
10
10
  require('@toruslabs/base-controllers');
11
11
  require('../../../base/errors/index.js');
12
12
  require('../../../base/wallet/index.js');
13
+ require('../../../base/connector/connectorStatus.js');
13
14
  require('../../../base/connector/constants.js');
14
15
  require('jwt-decode');
15
16
  require('../../../base/plugin/errors.js');
@@ -8,6 +8,7 @@ require('@segment/analytics-next');
8
8
  require('../../base/loglevel.js');
9
9
  var index = require('../../base/errors/index.js');
10
10
  require('../../base/wallet/index.js');
11
+ require('../../base/connector/connectorStatus.js');
11
12
  require('../../base/connector/constants.js');
12
13
  require('jwt-decode');
13
14
  require('../../base/plugin/errors.js');
@@ -9,6 +9,7 @@ require('../../../../base/loglevel.js');
9
9
  var baseControllers = require('@toruslabs/base-controllers');
10
10
  var index = require('../../../../base/errors/index.js');
11
11
  require('../../../../base/wallet/index.js');
12
+ require('../../../../base/connector/connectorStatus.js');
12
13
  require('../../../../base/connector/constants.js');
13
14
  require('jwt-decode');
14
15
  require('../../../../base/plugin/errors.js');
@@ -11,6 +11,7 @@ require('@segment/analytics-next');
11
11
  var loglevel = require('../../../../base/loglevel.js');
12
12
  require('../../../../base/errors/index.js');
13
13
  require('../../../../base/wallet/index.js');
14
+ require('../../../../base/connector/connectorStatus.js');
14
15
  require('../../../../base/connector/constants.js');
15
16
  require('jwt-decode');
16
17
  require('../../../../base/plugin/errors.js');
@@ -10,6 +10,7 @@ require('@toruslabs/base-controllers');
10
10
  require('@web3auth/auth');
11
11
  require('../../../../../base/errors/index.js');
12
12
  require('../../../../../base/wallet/index.js');
13
+ require('../../../../../base/connector/connectorStatus.js');
13
14
  require('../../../../../base/connector/constants.js');
14
15
  require('jwt-decode');
15
16
  require('../../../../../base/plugin/errors.js');
@@ -8,6 +8,7 @@ require('../../../../../base/loglevel.js');
8
8
  require('@toruslabs/base-controllers');
9
9
  var index = require('../../../../../base/errors/index.js');
10
10
  require('../../../../../base/wallet/index.js');
11
+ require('../../../../../base/connector/connectorStatus.js');
11
12
  require('../../../../../base/connector/constants.js');
12
13
  require('jwt-decode');
13
14
  require('../../../../../base/plugin/errors.js');
@@ -11,6 +11,7 @@ require('@toruslabs/base-controllers');
11
11
  require('@web3auth/auth');
12
12
  var index = require('../../../../base/errors/index.js');
13
13
  require('../../../../base/wallet/index.js');
14
+ require('../../../../base/connector/connectorStatus.js');
14
15
  require('../../../../base/connector/constants.js');
15
16
  require('jwt-decode');
16
17
  require('../../../../base/plugin/errors.js');
@@ -8,6 +8,7 @@ require('../../../../base/loglevel.js');
8
8
  var baseControllers = require('@toruslabs/base-controllers');
9
9
  var index = require('../../../../base/errors/index.js');
10
10
  require('../../../../base/wallet/index.js');
11
+ require('../../../../base/connector/connectorStatus.js');
11
12
  require('../../../../base/connector/constants.js');
12
13
  require('jwt-decode');
13
14
  require('../../../../base/plugin/errors.js');
@@ -9,6 +9,7 @@ require('@toruslabs/base-controllers');
9
9
  require('@web3auth/auth');
10
10
  require('../../base/errors/index.js');
11
11
  require('../../base/wallet/index.js');
12
+ require('../../base/connector/connectorStatus.js');
12
13
  var constants = require('../../base/connector/constants.js');
13
14
  require('jwt-decode');
14
15
  require('../../base/plugin/errors.js');
@@ -7,6 +7,7 @@ require('@babel/runtime/helpers/defineProperty');
7
7
  require('@web3auth/auth');
8
8
  var index = require('../../base/errors/index.js');
9
9
  require('../../base/wallet/index.js');
10
+ require('../../base/connector/connectorStatus.js');
10
11
  var constants = require('../../base/connector/constants.js');
11
12
  require('jwt-decode');
12
13
  require('../../base/loglevel.js');
@@ -39,6 +40,7 @@ function Web3AuthInnerProvider(params) {
39
40
  const [isInitialized, setIsInitialized] = react.useState(false);
40
41
  const [status, setStatus] = react.useState(null);
41
42
  const [isMFAEnabled, setIsMFAEnabled] = react.useState(false);
43
+ const [isAuthorized, setIsAuthorized] = react.useState(false);
42
44
  const getPlugin = react.useCallback(name => {
43
45
  if (!web3Auth) throw index.WalletInitializationError.notReady();
44
46
  return web3Auth.getPlugin(name);
@@ -78,7 +80,9 @@ function Web3AuthInnerProvider(params) {
78
80
  if (provider) {
79
81
  provider.on("chainChanged", handleChainChange);
80
82
  return () => {
81
- provider.off("chainChanged", handleChainChange);
83
+ if (provider) {
84
+ provider.off("chainChanged", handleChainChange);
85
+ }
82
86
  };
83
87
  }
84
88
  }, [web3Auth, provider]);
@@ -100,6 +104,7 @@ function Web3AuthInnerProvider(params) {
100
104
  const disconnectedListener = () => {
101
105
  setStatus(web3Auth.status);
102
106
  setIsConnected(false);
107
+ setIsAuthorized(false);
103
108
  setProvider(null);
104
109
  };
105
110
  const connectingListener = () => {
@@ -111,17 +116,27 @@ function Web3AuthInnerProvider(params) {
111
116
  const rehydrationErrorListener = () => {
112
117
  setStatus(web3Auth.status);
113
118
  setIsConnected(false);
119
+ setIsAuthorized(false);
114
120
  setProvider(null);
115
121
  };
122
+ const authorizedListener = () => {
123
+ setStatus(web3Auth.status);
124
+ if (web3Auth.status === constants.CONNECTOR_STATUS.AUTHORIZED) {
125
+ setIsConnected(true);
126
+ setIsAuthorized(true);
127
+ }
128
+ };
116
129
  const mfaEnabledListener = isMFAEnabled => {
117
130
  if (typeof isMFAEnabled === "boolean") setIsMFAEnabled(isMFAEnabled);
118
131
  };
132
+ // TODO: In strict mode, web3auth becomes null and .off throws an error sometimes.
119
133
  if (web3Auth) {
120
134
  // web3Auth is initialized here.
121
135
  setStatus(web3Auth.status);
122
136
  web3Auth.on(constants.CONNECTOR_EVENTS.NOT_READY, notReadyListener);
123
137
  web3Auth.on(constants.CONNECTOR_EVENTS.READY, readyListener);
124
138
  web3Auth.on(constants.CONNECTOR_EVENTS.CONNECTED, connectedListener);
139
+ web3Auth.on(constants.CONNECTOR_EVENTS.AUTHORIZED, authorizedListener);
125
140
  web3Auth.on(constants.CONNECTOR_EVENTS.DISCONNECTED, disconnectedListener);
126
141
  web3Auth.on(constants.CONNECTOR_EVENTS.CONNECTING, connectingListener);
127
142
  web3Auth.on(constants.CONNECTOR_EVENTS.ERRORED, errorListener);
@@ -138,6 +153,7 @@ function Web3AuthInnerProvider(params) {
138
153
  web3Auth.off(constants.CONNECTOR_EVENTS.ERRORED, errorListener);
139
154
  web3Auth.off(constants.CONNECTOR_EVENTS.REHYDRATION_ERROR, rehydrationErrorListener);
140
155
  web3Auth.off(constants.CONNECTOR_EVENTS.MFA_ENABLED, mfaEnabledListener);
156
+ web3Auth.off(constants.CONNECTOR_EVENTS.AUTHORIZED, authorizedListener);
141
157
  }
142
158
  };
143
159
  }, [web3Auth]);
@@ -154,9 +170,10 @@ function Web3AuthInnerProvider(params) {
154
170
  chainId,
155
171
  chainNamespace,
156
172
  getPlugin,
157
- setIsMFAEnabled
173
+ setIsMFAEnabled,
174
+ isAuthorized
158
175
  };
159
- }, [web3Auth, isConnected, isInitialized, provider, status, getPlugin, isInitializing, initError, isMFAEnabled, setIsMFAEnabled, chainId, chainNamespace]);
176
+ }, [web3Auth, isConnected, isInitialized, provider, status, getPlugin, isInitializing, initError, isMFAEnabled, setIsMFAEnabled, chainId, chainNamespace, isAuthorized]);
160
177
  return react.createElement(Web3AuthInnerContext.Provider, {
161
178
  value
162
179
  }, children);
@@ -9,6 +9,7 @@ require('@toruslabs/base-controllers');
9
9
  require('@web3auth/auth');
10
10
  require('../../base/errors/index.js');
11
11
  require('../../base/wallet/index.js');
12
+ require('../../base/connector/connectorStatus.js');
12
13
  require('../../base/connector/constants.js');
13
14
  require('jwt-decode');
14
15
  var errors = require('../../base/plugin/errors.js');
@@ -9,6 +9,7 @@ require('@toruslabs/base-controllers');
9
9
  require('@web3auth/auth');
10
10
  require('../../base/errors/index.js');
11
11
  require('../../base/wallet/index.js');
12
+ require('../../base/connector/connectorStatus.js');
12
13
  require('../../base/connector/constants.js');
13
14
  require('jwt-decode');
14
15
  var errors = require('../../base/plugin/errors.js');
@@ -6,7 +6,8 @@ var useWeb3AuthInner = require('./useWeb3AuthInner.js');
6
6
  const useIdentityToken = () => {
7
7
  const {
8
8
  web3Auth,
9
- isConnected
9
+ isConnected,
10
+ isAuthorized
10
11
  } = useWeb3AuthInner.useWeb3AuthInner();
11
12
  const [loading, setLoading] = react.useState(false);
12
13
  const [error, setError] = react.useState(null);
@@ -27,10 +28,14 @@ const useIdentityToken = () => {
27
28
  }
28
29
  }, [web3Auth]);
29
30
  react.useEffect(() => {
30
- if (!isConnected && token) {
31
+ if (!web3Auth) return;
32
+ if (!isAuthorized && token) {
31
33
  setToken(null);
32
34
  }
33
- }, [isConnected, token]);
35
+ if (isAuthorized && !token) {
36
+ setToken(web3Auth.idToken);
37
+ }
38
+ }, [isConnected, isAuthorized, token]);
34
39
  return {
35
40
  loading,
36
41
  error,
@@ -9,6 +9,7 @@ require('@toruslabs/base-controllers');
9
9
  require('@web3auth/auth');
10
10
  require('../../base/errors/index.js');
11
11
  require('../../base/wallet/index.js');
12
+ require('../../base/connector/connectorStatus.js');
12
13
  require('../../base/connector/constants.js');
13
14
  require('jwt-decode');
14
15
  var errors = require('../../base/plugin/errors.js');
@@ -9,6 +9,7 @@ require('@toruslabs/base-controllers');
9
9
  require('@web3auth/auth');
10
10
  require('../../base/errors/index.js');
11
11
  require('../../base/wallet/index.js');
12
+ require('../../base/connector/connectorStatus.js');
12
13
  require('../../base/connector/constants.js');
13
14
  require('jwt-decode');
14
15
  var errors = require('../../base/plugin/errors.js');
@@ -9,6 +9,7 @@ require('@toruslabs/base-controllers');
9
9
  require('@web3auth/auth');
10
10
  require('../../base/errors/index.js');
11
11
  require('../../base/wallet/index.js');
12
+ require('../../base/connector/connectorStatus.js');
12
13
  require('../../base/connector/constants.js');
13
14
  require('jwt-decode');
14
15
  var errors = require('../../base/plugin/errors.js');
@@ -9,6 +9,7 @@ require('@toruslabs/base-controllers');
9
9
  require('@web3auth/auth');
10
10
  require('../../base/errors/index.js');
11
11
  require('../../base/wallet/index.js');
12
+ require('../../base/connector/connectorStatus.js');
12
13
  require('../../base/connector/constants.js');
13
14
  require('jwt-decode');
14
15
  var errors = require('../../base/plugin/errors.js');
@@ -6,6 +6,7 @@ const useWeb3Auth = () => {
6
6
  const {
7
7
  initError,
8
8
  isConnected,
9
+ isAuthorized,
9
10
  isInitialized,
10
11
  isInitializing,
11
12
  provider,
@@ -21,6 +22,7 @@ const useWeb3Auth = () => {
21
22
  provider,
22
23
  status,
23
24
  web3Auth,
25
+ isAuthorized,
24
26
  getPlugin
25
27
  };
26
28
  };
@@ -9,6 +9,7 @@ require('@toruslabs/base-controllers');
9
9
  require('@web3auth/auth');
10
10
  var index = require('../../base/errors/index.js');
11
11
  require('../../base/wallet/index.js');
12
+ require('../../base/connector/connectorStatus.js');
12
13
  require('../../base/connector/constants.js');
13
14
  require('jwt-decode');
14
15
  require('../../base/plugin/errors.js');
@@ -12,6 +12,7 @@ require('../../../base/loglevel.js');
12
12
  require('@web3auth/auth');
13
13
  require('../../../base/errors/index.js');
14
14
  require('../../../base/wallet/index.js');
15
+ require('../../../base/connector/connectorStatus.js');
15
16
  require('../../../base/connector/constants.js');
16
17
  require('jwt-decode');
17
18
  require('../../../base/plugin/errors.js');
@@ -13,6 +13,7 @@ var baseControllers = require('@toruslabs/base-controllers');
13
13
  require('@web3auth/auth');
14
14
  var index = require('../../base/errors/index.js');
15
15
  require('../../base/wallet/index.js');
16
+ require('../../base/connector/connectorStatus.js');
16
17
  require('../../base/connector/constants.js');
17
18
  require('jwt-decode');
18
19
  require('../../base/plugin/errors.js');
@@ -13,7 +13,8 @@ export declare abstract class BaseConnector<T> extends SafeEventEmitter<Connecto
13
13
  abstract name: WALLET_CONNECTOR_TYPE | string;
14
14
  abstract status: CONNECTOR_STATUS_TYPE;
15
15
  constructor(options: BaseConnectorSettings);
16
- get connnected(): boolean;
16
+ get connected(): boolean;
17
+ get canAuthorize(): boolean;
17
18
  abstract get provider(): IProvider | null;
18
19
  checkConnectionRequirements(): void;
19
20
  checkInitializationRequirements({ chainConfig }: {
@@ -0,0 +1,3 @@
1
+ import { CONNECTOR_STATUS_TYPE } from "./interfaces";
2
+ export declare const CONNECTED_STATUSES: CONNECTOR_STATUS_TYPE[];
3
+ export declare const CAN_AUTHORIZE_STATUSES: CONNECTOR_STATUS_TYPE[];
@@ -6,6 +6,8 @@ export declare const CONNECTOR_STATUS: {
6
6
  readonly DISCONNECTING: "disconnecting";
7
7
  readonly DISCONNECTED: "disconnected";
8
8
  readonly ERRORED: "errored";
9
+ readonly AUTHORIZED: "authorized";
10
+ readonly AUTHORIZING: "authorizing";
9
11
  };
10
12
  export declare const CONNECTOR_EVENTS: {
11
13
  readonly CONNECTOR_DATA_UPDATED: "connector_data_updated";
@@ -20,8 +22,14 @@ export declare const CONNECTOR_EVENTS: {
20
22
  readonly DISCONNECTING: "disconnecting";
21
23
  readonly DISCONNECTED: "disconnected";
22
24
  readonly ERRORED: "errored";
25
+ readonly AUTHORIZED: "authorized";
26
+ readonly AUTHORIZING: "authorizing";
23
27
  };
24
28
  export declare const CONNECTOR_CATEGORY: {
25
29
  readonly EXTERNAL: "external";
26
30
  readonly IN_APP: "in_app";
27
31
  };
32
+ export declare const CONNECTOR_INITIAL_AUTHENTICATION_MODE: {
33
+ readonly CONNECT_ONLY: "connect-only";
34
+ readonly CONNECT_AND_SIGN: "connect-and-sign";
35
+ };
@@ -1,4 +1,5 @@
1
1
  export * from "./baseConnector";
2
+ export * from "./connectorStatus";
2
3
  export * from "./constants";
3
4
  export * from "./interfaces";
4
5
  export * from "./utils";