@privy-io/react-auth 1.17.1-beta.1 → 1.18.0-beta.2

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.
package/dist/index.d.ts CHANGED
@@ -8,6 +8,13 @@ declare const SUPPORTED_OAUTH_PROVIDERS: readonly ["google", "discord", "twitter
8
8
  type OAuthProviderType = typeof SUPPORTED_OAUTH_PROVIDERS[number];
9
9
  declare const SUPPORTED_WALLET_TYPES: readonly ["metamask", "coinbase_wallet", "wallet_connect"];
10
10
  type WalletType = typeof SUPPORTED_WALLET_TYPES[number];
11
+ /**
12
+ * Wallet metadata currently for internal use only
13
+ */
14
+ type WalletMeta = {
15
+ name: string;
16
+ icon?: string | EmbeddedSVG;
17
+ };
11
18
  type LinkedAccountType = 'wallet' | 'email' | 'phone' | 'google_oauth' | 'twitter_oauth' | 'discord_oauth' | 'github_oauth';
12
19
  /** @ignore */
13
20
  interface LinkMetadata {
@@ -252,14 +259,14 @@ interface EIP1193Provider {
252
259
  declare class PrivyProxyProvider implements EIP1193Provider {
253
260
  walletProvider?: EIP1193Provider;
254
261
  private _subscriptions;
255
- constructor(provider?: EIP1193Provider);
262
+ constructor(walletProvider?: EIP1193Provider);
256
263
  on(eventName: string, listener: (...args: any[]) => void): any;
257
264
  request(request: {
258
265
  method: string;
259
266
  params?: any[] | undefined;
260
267
  }): Promise<any>;
261
268
  removeListener: (eventName: string | symbol, listener: (...args: any[]) => void) => any;
262
- setProvider: (provider: EIP1193Provider) => void;
269
+ setWalletProvider: (provider: EIP1193Provider) => void;
263
270
  }
264
271
  declare class AsExternalProvider extends PrivyProxyProvider implements ExternalProvider {
265
272
  constructor(provider: EIP1193Provider);
@@ -278,15 +285,16 @@ declare class AsExternalProvider extends PrivyProxyProvider implements ExternalP
278
285
  }
279
286
 
280
287
  declare abstract class WalletConnector {
281
- provider: PrivyProxyProvider;
288
+ proxyProvider: PrivyProxyProvider;
282
289
  walletType: WalletType;
283
290
  connected: boolean;
284
291
  address: string | null;
285
292
  chain: string | null;
286
- constructor(walletType: WalletType, provider: PrivyProxyProvider, address: string | null);
293
+ constructor(walletType: WalletType, proxyProvider: PrivyProxyProvider, address: string | null);
287
294
  fetchAddress(): Promise<string | null>;
288
295
  fetchChainId(): Promise<string>;
289
296
  getConnectedWallet(): Promise<Wallet | null>;
297
+ abstract get walletMeta(): WalletMeta;
290
298
  abstract connect(options: {
291
299
  showPrompt: boolean;
292
300
  }): Promise<Wallet | null>;
@@ -299,21 +307,34 @@ declare abstract class WalletConnector {
299
307
  /**
300
308
  * Light wrapper around WCConnectionManager that uses the global connection manager
301
309
  * to manage the local storage layer and avoid conflicts.
310
+ * There can be multiple WCWalletConnectors, but should only ever be a single
311
+ * WCConnectionManager, which should be the class referenced - it will in turn find
312
+ * the appropriate WCWalletConnector for use with an action.
302
313
  */
303
314
  declare class WCWalletConnector extends WalletConnector {
304
315
  private _connectionManager;
305
- private _provider;
306
- constructor(connectionManager: WCConnectionManager, provider: PrivyProxyProvider, address: string | null);
316
+ constructor(connectionManager: WCConnectionManager, proxyProvider: PrivyProxyProvider, address: string | null);
307
317
  connect(options: {
308
318
  showPrompt: boolean;
309
319
  }): Promise<Wallet | null>;
310
320
  isConnected(): Promise<boolean>;
321
+ /**
322
+ * Metadata about the wallet represented by this connector.
323
+ */
324
+ get walletMeta(): {
325
+ name: string;
326
+ icon: string | EmbeddedSVG;
327
+ };
311
328
  promptConnection(): Promise<void>;
312
329
  /**
313
- * Perform personal_sign with the user's wallet.
330
+ * Perform personal_sign with the user's first wallet associated with WalletConnect
314
331
  */
315
332
  sign(message: string): Promise<string>;
316
333
  disconnect(): void;
334
+ /**
335
+ * Access the underlying WCProvider directly with proper typings
336
+ */
337
+ private get walletProvider();
317
338
  }
318
339
  /**
319
340
  * An object representation of the Wallet Connect V1 protocol. This is used to initiate and manage connections
@@ -332,13 +353,27 @@ declare class WCConnectionManager {
332
353
  */
333
354
  disconnect(): Promise<void>;
334
355
  /**
335
- * Handles storage retrieval and assignment for WalletConnectProvider instances
356
+ * Given an address, either fetch (reusing a stored connection) or create a new one if no stored
357
+ * connection is found
358
+ */
359
+ getOrCreateProviderForAddress(address: string | null): WCProvider;
360
+ /**
361
+ * Create a WC provider and add an entry to the internal provider registry keyed on the internal
362
+ * WC storageId
363
+ */
364
+ private createProvider;
365
+ /**
366
+ * Replace the given provider, *assuming it's the one with null address*
367
+ *
368
+ * Couldn't find any WC docs, but a reference implementation library had a similar error we were
369
+ * seeing - WC sessions wouldn't open a new modal/etc when doing `provider.enable()` if it had
370
+ * previously been rejected: https://github.com/Uniswap/web3-react/issues/217
336
371
  */
337
- getProviderForAddress(address: string | null): WCProvider;
372
+ replaceProvider(provider: WCProvider): WCProvider;
338
373
  /**
339
- * Updates internal global connector data structures with address mappings as new accounts are added
374
+ * Enables the provider. Under the hood, this calls connect() and 'eth_RequestAccounts'.
340
375
  */
341
- indexProvider(provider: WCProvider): void;
376
+ enableProvider(provider: WCProvider): Promise<string[]>;
342
377
  }
343
378
 
344
379
  declare class ConnectorManager {
@@ -481,6 +516,7 @@ interface PrivyInterface {
481
516
  unlinkPhone: (phoneNumber: string) => Promise<User>;
482
517
  /**
483
518
  * Unlink a wallet account from a user, by passing the public address. Note that you can only unlink a wallet account if the user has at least one other account.
519
+ * If the unlinked wallet was the active one, and more wallets are linked to the user, then we attempt to make the most recently linked wallet active.
484
520
  */
485
521
  unlinkWallet: (address: string) => Promise<User>;
486
522
  /**
@@ -502,11 +538,12 @@ interface PrivyInterface {
502
538
  /**
503
539
  * Set one of the authenticated wallet addresses (part of user.linkedAccounts with type 'wallet'). as the active wallet.
504
540
  * If you pass a wallet that's not one of the linkedAccounts, this will throw an error.
541
+ * This will prompt the user to reconnect their wallet if the connection is lost.
505
542
  *
506
543
  * The active wallet will be the one that getEthersProvider() will use as a signer (used for signing & transactions).
507
544
  * It is also the wallet present at `user.wallet`, and that value is updated when this is called.
508
545
  *
509
- * Note that when you link a new wallet, it becomes 'active' by default.
546
+ * Note that when you link a new wallet, it becomes active.
510
547
  */
511
548
  setActiveWallet: (address: string) => Promise<void>;
512
549
  /**