@privy-io/js-sdk-core 0.30.4 → 0.31.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.
- package/dist/cjs/index.js +1 -1
- package/dist/dts/EmbeddedWalletApi.d.mts +4 -6
- package/dist/dts/EmbeddedWalletApi.d.ts +4 -6
- package/dist/dts/embedded/types.d.mts +15 -3
- package/dist/dts/embedded/types.d.ts +15 -3
- package/dist/esm/EmbeddedWalletApi.mjs +1 -1
- package/dist/esm/PrivyInternal.mjs +1 -1
- package/dist/esm/embedded/methods.mjs +1 -1
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PrivyBitcoinSegwitEmbeddedWalletAccount, PrivyBitcoinTaprootEmbeddedWalletAccount, PrivyEthereumEmbeddedWalletAccount, PrivySolanaEmbeddedWalletAccount, PrivyUser } from '@privy-io/public-api/schemas';
|
|
2
2
|
import { EmbeddedSolanaWalletProvider, EmbeddedWalletProvider } from './embedded';
|
|
3
|
-
import type { EntropyIdVerifier, IEmbeddedWalletRecoveryOptions, PrivyResponseEvent, SetRecoveryInput } from './embedded/types';
|
|
3
|
+
import type { EntropyIdVerifier, IEmbeddedWalletRecoveryOptions, PrivyResponseEvent, SetRecoveryInput, SetRecoveryOutput } from './embedded/types';
|
|
4
4
|
/** Options for creating the Solana embedded wallet */
|
|
5
5
|
type CreateSolanaOpts = {
|
|
6
6
|
/**
|
|
@@ -95,12 +95,10 @@ export default class EmbeddedWalletApi {
|
|
|
95
95
|
*
|
|
96
96
|
* @param password New recovery password
|
|
97
97
|
* @param currentPassword Current recovery password used to recover the embedded wallet
|
|
98
|
-
* @returns
|
|
98
|
+
* @returns PrivyUser the user object with the updated embedded wallet.
|
|
99
|
+
* @returns EmbeddedWalletProvider implementing EIP1193Provider if the input wallet is an Ethereum wallet.
|
|
99
100
|
*/
|
|
100
|
-
setRecovery(
|
|
101
|
-
user: PrivyUser;
|
|
102
|
-
provider: EmbeddedWalletProvider;
|
|
103
|
-
}>;
|
|
101
|
+
setRecovery(setRecoveryInput: SetRecoveryInput): Promise<SetRecoveryOutput>;
|
|
104
102
|
/**
|
|
105
103
|
* @returns URL to load in the embedded wallet iframe
|
|
106
104
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { PrivyBitcoinSegwitEmbeddedWalletAccount, PrivyBitcoinTaprootEmbeddedWalletAccount, PrivyEthereumEmbeddedWalletAccount, PrivySolanaEmbeddedWalletAccount, PrivyUser } from '@privy-io/public-api/schemas';
|
|
2
2
|
import { EmbeddedSolanaWalletProvider, EmbeddedWalletProvider } from './embedded';
|
|
3
|
-
import type { EntropyIdVerifier, IEmbeddedWalletRecoveryOptions, PrivyResponseEvent, SetRecoveryInput } from './embedded/types';
|
|
3
|
+
import type { EntropyIdVerifier, IEmbeddedWalletRecoveryOptions, PrivyResponseEvent, SetRecoveryInput, SetRecoveryOutput } from './embedded/types';
|
|
4
4
|
/** Options for creating the Solana embedded wallet */
|
|
5
5
|
type CreateSolanaOpts = {
|
|
6
6
|
/**
|
|
@@ -95,12 +95,10 @@ export default class EmbeddedWalletApi {
|
|
|
95
95
|
*
|
|
96
96
|
* @param password New recovery password
|
|
97
97
|
* @param currentPassword Current recovery password used to recover the embedded wallet
|
|
98
|
-
* @returns
|
|
98
|
+
* @returns PrivyUser the user object with the updated embedded wallet.
|
|
99
|
+
* @returns EmbeddedWalletProvider implementing EIP1193Provider if the input wallet is an Ethereum wallet.
|
|
99
100
|
*/
|
|
100
|
-
setRecovery(
|
|
101
|
-
user: PrivyUser;
|
|
102
|
-
provider: EmbeddedWalletProvider;
|
|
103
|
-
}>;
|
|
101
|
+
setRecovery(setRecoveryInput: SetRecoveryInput): Promise<SetRecoveryOutput>;
|
|
104
102
|
/**
|
|
105
103
|
* @returns URL to load in the embedded wallet iframe
|
|
106
104
|
*/
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
* can therefore be implemented by clients of the iframe.
|
|
10
10
|
*/
|
|
11
11
|
import type { TypedMessage, MessageTypes } from '@metamask/eth-sig-util';
|
|
12
|
-
import type { PrivyEthereumEmbeddedWalletAccount } from '@privy-io/public-api';
|
|
12
|
+
import type { PrivyEthereumEmbeddedWalletAccount, PrivySolanaEmbeddedWalletAccount, PrivyUser } from '@privy-io/public-api';
|
|
13
|
+
import type { EmbeddedWalletProvider } from './EmbeddedWalletProvider';
|
|
13
14
|
import type { MfaSubmitArgs } from './withMfa';
|
|
14
15
|
export declare const SUPPORTED_JSON_RPC_METHODS: readonly ["eth_sign", "eth_populateTransactionRequest", "eth_signTransaction", "personal_sign", "eth_signTypedData_v4"];
|
|
15
16
|
export type JsonRpcMethodType = (typeof SUPPORTED_JSON_RPC_METHODS)[number];
|
|
@@ -161,8 +162,19 @@ export type ICloudNativeRecoveryInput = {
|
|
|
161
162
|
iCloudRecordNameOverride: string;
|
|
162
163
|
};
|
|
163
164
|
export type SetRecoveryInput = {
|
|
164
|
-
wallet: PrivyEthereumEmbeddedWalletAccount;
|
|
165
|
-
} & (PasswordRecoveryInput | CloudRecoveryInput | ICloudNativeRecoveryInput
|
|
165
|
+
wallet: PrivyEthereumEmbeddedWalletAccount | PrivySolanaEmbeddedWalletAccount;
|
|
166
|
+
} & (PasswordRecoveryInput | CloudRecoveryInput | ICloudNativeRecoveryInput);
|
|
167
|
+
export interface SetRecoveryOutput {
|
|
168
|
+
/** User object with the updated embedded wallet */
|
|
169
|
+
user: PrivyUser;
|
|
170
|
+
/**
|
|
171
|
+
* Provider for the embedded ethereum wallet.
|
|
172
|
+
*
|
|
173
|
+
* This value will be `null` if and only if the wallet passed in the input is not an Ethereum wallet.
|
|
174
|
+
* @deprecated Get the provider instance from the `getProvider(...)` method instead.
|
|
175
|
+
*/
|
|
176
|
+
provider: EmbeddedWalletProvider | null;
|
|
177
|
+
}
|
|
166
178
|
type BaseProxyRequest = {
|
|
167
179
|
accessToken: string;
|
|
168
180
|
} & Partial<MfaSubmitArgs>;
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
* can therefore be implemented by clients of the iframe.
|
|
10
10
|
*/
|
|
11
11
|
import type { TypedMessage, MessageTypes } from '@metamask/eth-sig-util';
|
|
12
|
-
import type { PrivyEthereumEmbeddedWalletAccount } from '@privy-io/public-api';
|
|
12
|
+
import type { PrivyEthereumEmbeddedWalletAccount, PrivySolanaEmbeddedWalletAccount, PrivyUser } from '@privy-io/public-api';
|
|
13
|
+
import type { EmbeddedWalletProvider } from './EmbeddedWalletProvider';
|
|
13
14
|
import type { MfaSubmitArgs } from './withMfa';
|
|
14
15
|
export declare const SUPPORTED_JSON_RPC_METHODS: readonly ["eth_sign", "eth_populateTransactionRequest", "eth_signTransaction", "personal_sign", "eth_signTypedData_v4"];
|
|
15
16
|
export type JsonRpcMethodType = (typeof SUPPORTED_JSON_RPC_METHODS)[number];
|
|
@@ -161,8 +162,19 @@ export type ICloudNativeRecoveryInput = {
|
|
|
161
162
|
iCloudRecordNameOverride: string;
|
|
162
163
|
};
|
|
163
164
|
export type SetRecoveryInput = {
|
|
164
|
-
wallet: PrivyEthereumEmbeddedWalletAccount;
|
|
165
|
-
} & (PasswordRecoveryInput | CloudRecoveryInput | ICloudNativeRecoveryInput
|
|
165
|
+
wallet: PrivyEthereumEmbeddedWalletAccount | PrivySolanaEmbeddedWalletAccount;
|
|
166
|
+
} & (PasswordRecoveryInput | CloudRecoveryInput | ICloudNativeRecoveryInput);
|
|
167
|
+
export interface SetRecoveryOutput {
|
|
168
|
+
/** User object with the updated embedded wallet */
|
|
169
|
+
user: PrivyUser;
|
|
170
|
+
/**
|
|
171
|
+
* Provider for the embedded ethereum wallet.
|
|
172
|
+
*
|
|
173
|
+
* This value will be `null` if and only if the wallet passed in the input is not an Ethereum wallet.
|
|
174
|
+
* @deprecated Get the provider instance from the `getProvider(...)` method instead.
|
|
175
|
+
*/
|
|
176
|
+
provider: EmbeddedWalletProvider | null;
|
|
177
|
+
}
|
|
166
178
|
type BaseProxyRequest = {
|
|
167
179
|
accessToken: string;
|
|
168
180
|
} & Partial<MfaSubmitArgs>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{PrivyClientError as e}from"./Error.mjs";import{DEFAULT_SUPPORTED_CHAINS as r}from"./chains/index.mjs";import{EmbeddedWalletProvider as t}from"./embedded/EmbeddedWalletProvider.mjs";import{EmbeddedSolanaWalletProvider as o}from"./embedded/EmbeddedSolanaWalletProvider.mjs";import{EmbeddedWalletProxy as s}from"./embedded/EmbeddedWalletProxy.mjs";import{errorIndicatesRecoveryIsNeeded as i}from"./embedded/errors.mjs";import{throwIfInvalidRecoveryUpgradePath as d}from"./embedded/utils/index.mjs";import"./chains/arbitrum.mjs";import"./chains/arbitrumGoerli.mjs";import"./chains/arbitrumSepolia.mjs";import"./chains/avalanche.mjs";import"./chains/avalancheFuji.mjs";import"./chains/base.mjs";import"./chains/baseGoerli.mjs";import"./chains/baseSepolia.mjs";import"./chains/berachainArtio.mjs";import"./chains/celo.mjs";import"./chains/celoAlfajores.mjs";import"./chains/filecoin.mjs";import"./chains/filecoinCalibration.mjs";import"./chains/garnetHolesky.mjs";import"./chains/goerli.mjs";import"./chains/holesky.mjs";import"./chains/linea.mjs";import"./chains/lineaTestnet.mjs";import"./chains/mainnet.mjs";import"./chains/optimism.mjs";import"./chains/optimismGoerli.mjs";import"./chains/optimismSepolia.mjs";import"./chains/polygon.mjs";import"./chains/polygonMumbai.mjs";import"./chains/redstone.mjs";import"./chains/redstoneHolesky.mjs";import"./chains/sepolia.mjs";import"./chains/zora.mjs";import"./chains/zoraSepolia.mjs";import"./chains/zoraTestnet.mjs";import"eventemitter3";import"./embedded/methods.mjs";import"./embedded/EventCallbackQueue.mjs";import"./embedded/withMfa.mjs";import"./embedded/types.mjs";import"@ethersproject/abstract-signer";import"@ethersproject/providers";import"./embedded/gas/arbitrum.mjs";import"@ethersproject/bignumber";import"./embedded/utils/ethers.mjs";import"./embedded/gas/bsc.mjs";import"./embedded/gas/op-stack.mjs";import"@ethersproject/contracts";import"@ethersproject/transactions";import"./embedded/gas/polygon.mjs";import"@ethersproject/units";import"fetch-retry";import"./chains/polygonAmoy.mjs";import"./embedded/utils/gas.mjs";class a{_privyInternal;_proxy;_chains=Array.from(r);_mfa;_mfaPromises;constructor(e,r,t,o,i){this._privyInternal=e,r&&(this._proxy=new s(r,i),o.setProxy(this._proxy)),t&&(this._chains=t),this._mfa=o,this._mfaPromises=i}setMessagePoster(e){this._proxy=new s(e,this._mfaPromises),this._mfa.setProxy(this._proxy)}async create(e,r,o,s,i,d){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");let a;if(a=r||(e?"user-passcode":"privy"),e&&"string"!=typeof e)throw new Error("Invalid recovery password, must be a string");if("privy"===a&&this._privyInternal.config?.embedded_wallet_config.require_user_password_on_create)throw new Error("Password not provided yet is required by App configuration");const n=await this._privyInternal.getAccessToken();if(!n)throw new Error("User must be logged in to create an embedded wallet");const{address:c}=await this._proxy.create({accessToken:n,recoveryMethod:a,recoveryPassword:e,recoveryAccessToken:o,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAddress:d?.address});if(!c)throw new Error("Failed to create wallet");const{user:l}=await this._privyInternal.refreshSession();return{user:l,provider:new t({address:c,privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}}async createSolana(r){if(!this._proxy)throw new e({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_creation_error"});const t=await this._privyInternal.getAccessToken();if(!t)throw new e({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});if(r?.ethereumAccount){if("privy"!==r.ethereumAccount.recovery_method)throw new e({error:"Cannot create Solana wallet for user with Ethereum wallet with user-controlled recovery",code:"embedded_wallet_creation_error"});await this.getProvider(r.ethereumAccount)}const{publicKey:s}=await this._proxy.createSolana({accessToken:t,ethereumAddress:r?.ethereumAccount?.address});if(!s)throw new e({error:"Failed to create wallet",code:"embedded_wallet_creation_error"});const{user:i}=await this._privyInternal.refreshSession();return{user:i,provider:new o({proxy:this._proxy,privyInternal:this._privyInternal,primaryPublicKey:s,publicKey:s,hdWalletIndex:0})}}async createAdditionalSolana({primaryPublicKey:r,hdWalletIndex:t}){if(!this._proxy)throw new e({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_creation_error"});const s=await this._privyInternal.getAccessToken();if(!s)throw new e({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});const{publicKey:i}=await this._proxy.createAdditionalSolana({accessToken:s,primaryPublicKey:r,hdWalletIndex:t});if(!i)throw new e({error:"Failed to create wallet",code:"embedded_wallet_creation_error"});const{user:d}=await this._privyInternal.refreshSession();return{user:d,provider:new o({proxy:this._proxy,privyInternal:this._privyInternal,primaryPublicKey:r,publicKey:i,hdWalletIndex:t})}}async hasEmbeddedWallet(){const{user:e,token:r}=await this._privyInternal.refreshSession();if(!e||!r)throw new Error("User must be logged in to interact with embedded wallets");return!!this._getEmbeddedWallet(e)}async isPasswordRequired(){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");const{user:e,token:r}=await this._privyInternal.refreshSession();if(!e||!r)throw new Error("User must be logged in to interact with embedded wallets");const t=this._getEmbeddedWallet(e);if(!t)return!1;if("privy"===t.recovery_method)return!1;try{return await this._proxy.connect({accessToken:r,entropyId:t.address,entropyIdVerifier:"ethereum-address-verifier"}),!1}catch(e){return i(e)}}async getProvider(e,r,o,s){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");const i=await this._load({wallet:e,entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier",recoveryPassword:r,recoveryAccessToken:o,recoverySecretOverride:s});return new t({address:i,privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}async getSolanaProvider(r,t=r.address,s,i,d){if(!this._proxy)throw new e({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_webview_not_loaded"});return await this._load({wallet:r,entropyId:t,entropyIdVerifier:"solana-address-verifier",recoveryPassword:s,recoveryAccessToken:i,recoverySecretOverride:d}),new o({publicKey:r.address,privyInternal:this._privyInternal,proxy:this._proxy,primaryPublicKey:t,hdWalletIndex:r.wallet_index})}async setPassword(e,r){const{provider:t}=await this.setRecovery({wallet:e,recoveryMethod:"user-passcode",password:r});return t}async setRecovery({wallet:e,...r}){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");d({currentRecoveryMethod:e.recovery_method,upgradeToRecoveryMethod:"icloud-native"===r.recoveryMethod?"icloud":r.recoveryMethod});const o=await this._load({wallet:e,entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier"}),s=await this._privyInternal.getAccessToken();if(!s)throw new Error("User must be logged in to interact with embedded wallets");const i=e.recovery_method;this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_started",{address:e.address,target_recovery_method:r.recoveryMethod,existing_recovery_method:i});try{let d;if("user-passcode"===r.recoveryMethod)d={recoveryMethod:"user-passcode",recoveryPassword:r.password};else if("google-drive"===r.recoveryMethod)d={recoveryMethod:"google-drive",recoveryAccessToken:r.recoveryAccessToken};else if("icloud"===r.recoveryMethod)d={recoveryMethod:"icloud",recoveryAccessToken:r.recoveryAccessToken};else if("icloud-native"===r.recoveryMethod)d={recoveryMethod:"icloud-native",iCloudRecordNameOverride:r.iCloudRecordNameOverride,recoverySecretOverride:r.recoverySecretOverride};else{if("privy"!==r.recoveryMethod)throw new Error(`Unknown recovery method: ${r.recoveryMethod}`);d={recoveryMethod:"privy"}}await this._proxy.setRecovery({accessToken:s,entropyId:o,entropyIdVerifier:"ethereum-address-verifier",...d}),this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_completed",{address:e.address,target_recovery_method:r.recoveryMethod,existing_recovery_method:i});const{user:a}=await this._privyInternal.refreshSession();return{user:a,provider:new t({address:o,privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}}catch(r){throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_failed",{address:e.address,recovery_method:e.recovery_method,error:r instanceof Error?r.message:"Unable to recover wallet"}),r}}getURL(){const e=new URL(`${this._privyInternal.baseUrl}/apps/${this._privyInternal.appId}/embedded-wallets`);return this._privyInternal.caid&&e.searchParams.append("caid",this._privyInternal.caid),this._privyInternal.appClientId&&e.searchParams.append("client_id",this._privyInternal.appClientId),e.href}getMessageHandler(){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");return this._proxy.handleEmbeddedWalletMessages.bind(this._proxy)}onMessage(e){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");return this._proxy.handleEmbeddedWalletMessages(e)}async ping(e){try{if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");return await this._proxy.ping(e),!0}catch(e){return console.error(e),!1}}async _load({entropyId:e,entropyIdVerifier:r,wallet:t,recoveryPassword:o,recoveryAccessToken:s,recoverySecretOverride:d}){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");const a=await this._privyInternal.getAccessToken();if(!a)throw new Error("User must be logged in to interact with embedded wallets");try{return await this._proxy.connect({accessToken:a,entropyId:e,entropyIdVerifier:r}),e}catch(n){if(i(n)){try{if("privy"===t.recovery_method){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});const o=await this._proxy.recover({accessToken:a,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if("user-passcode"===t.recovery_method&&o){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});const s=await this._proxy.recover({accessToken:a,recoveryPassword:o,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),s.entropyId}if(["google-drive","icloud"].includes(t.recovery_method)&&s){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});const o=await this._proxy.recover({accessToken:a,recoveryAccessToken:s,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if("icloud"===t.recovery_method&&d){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:"icloud-native"});const o=await this._proxy.recover({accessToken:a,recoverySecretOverride:d,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:"icloud-native"}),o.entropyId}}catch(r){throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_failed",{address:t.address,recovery_method:t.recovery_method,error:r instanceof Error?r.message:`Unable to recover wallet: ${e}`}),r}throw n}throw n}}_getEmbeddedWallet(e){return e?.linked_accounts.find((e=>"wallet"===e.type&&"embedded"===e.connector_type&&"privy"===e.wallet_client_type))}}export{a as default};
|
|
1
|
+
import{PrivyClientError as e}from"./Error.mjs";import{DEFAULT_SUPPORTED_CHAINS as r}from"./chains/index.mjs";import{EmbeddedWalletProvider as t}from"./embedded/EmbeddedWalletProvider.mjs";import{EmbeddedSolanaWalletProvider as o}from"./embedded/EmbeddedSolanaWalletProvider.mjs";import{EmbeddedWalletProxy as s}from"./embedded/EmbeddedWalletProxy.mjs";import{errorIndicatesRecoveryIsNeeded as i}from"./embedded/errors.mjs";import{throwIfInvalidRecoveryUpgradePath as d}from"./embedded/utils/index.mjs";import"./chains/arbitrum.mjs";import"./chains/arbitrumGoerli.mjs";import"./chains/arbitrumSepolia.mjs";import"./chains/avalanche.mjs";import"./chains/avalancheFuji.mjs";import"./chains/base.mjs";import"./chains/baseGoerli.mjs";import"./chains/baseSepolia.mjs";import"./chains/berachainArtio.mjs";import"./chains/celo.mjs";import"./chains/celoAlfajores.mjs";import"./chains/filecoin.mjs";import"./chains/filecoinCalibration.mjs";import"./chains/garnetHolesky.mjs";import"./chains/goerli.mjs";import"./chains/holesky.mjs";import"./chains/linea.mjs";import"./chains/lineaTestnet.mjs";import"./chains/mainnet.mjs";import"./chains/optimism.mjs";import"./chains/optimismGoerli.mjs";import"./chains/optimismSepolia.mjs";import"./chains/polygon.mjs";import"./chains/polygonMumbai.mjs";import"./chains/redstone.mjs";import"./chains/redstoneHolesky.mjs";import"./chains/sepolia.mjs";import"./chains/zora.mjs";import"./chains/zoraSepolia.mjs";import"./chains/zoraTestnet.mjs";import"eventemitter3";import"./embedded/methods.mjs";import"./embedded/EventCallbackQueue.mjs";import"./embedded/withMfa.mjs";import"./embedded/types.mjs";import"@ethersproject/abstract-signer";import"@ethersproject/providers";import"./embedded/gas/arbitrum.mjs";import"@ethersproject/bignumber";import"./embedded/utils/ethers.mjs";import"./embedded/gas/bsc.mjs";import"./embedded/gas/op-stack.mjs";import"@ethersproject/contracts";import"@ethersproject/transactions";import"./embedded/gas/polygon.mjs";import"@ethersproject/units";import"fetch-retry";import"./chains/polygonAmoy.mjs";import"./embedded/utils/gas.mjs";class a{_privyInternal;_proxy;_chains=Array.from(r);_mfa;_mfaPromises;constructor(e,r,t,o,i){this._privyInternal=e,r&&(this._proxy=new s(r,i),o.setProxy(this._proxy)),t&&(this._chains=t),this._mfa=o,this._mfaPromises=i}setMessagePoster(e){this._proxy=new s(e,this._mfaPromises),this._mfa.setProxy(this._proxy)}async create(e,r,o,s,i,d){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");let a;if(a=r||(e?"user-passcode":"privy"),e&&"string"!=typeof e)throw new Error("Invalid recovery password, must be a string");if("privy"===a&&this._privyInternal.config?.embedded_wallet_config.require_user_password_on_create)throw new Error("Password not provided yet is required by App configuration");const n=await this._privyInternal.getAccessToken();if(!n)throw new Error("User must be logged in to create an embedded wallet");const{address:c}=await this._proxy.create({accessToken:n,recoveryMethod:a,recoveryPassword:e,recoveryAccessToken:o,recoverySecretOverride:s,iCloudRecordNameOverride:i,solanaAddress:d?.address});if(!c)throw new Error("Failed to create wallet");const{user:l}=await this._privyInternal.refreshSession();return{user:l,provider:new t({address:c,privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}}async createSolana(r){if(!this._proxy)throw new e({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_creation_error"});const t=await this._privyInternal.getAccessToken();if(!t)throw new e({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});if(r?.ethereumAccount){if("privy"!==r.ethereumAccount.recovery_method)throw new e({error:"Cannot create Solana wallet for user with Ethereum wallet with user-controlled recovery",code:"embedded_wallet_creation_error"});await this.getProvider(r.ethereumAccount)}const{publicKey:s}=await this._proxy.createSolana({accessToken:t,ethereumAddress:r?.ethereumAccount?.address});if(!s)throw new e({error:"Failed to create wallet",code:"embedded_wallet_creation_error"});const{user:i}=await this._privyInternal.refreshSession();return{user:i,provider:new o({proxy:this._proxy,privyInternal:this._privyInternal,primaryPublicKey:s,publicKey:s,hdWalletIndex:0})}}async createAdditionalSolana({primaryPublicKey:r,hdWalletIndex:t}){if(!this._proxy)throw new e({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_creation_error"});const s=await this._privyInternal.getAccessToken();if(!s)throw new e({error:"User must be logged in to create an embedded wallet",code:"embedded_wallet_creation_error"});const{publicKey:i}=await this._proxy.createAdditionalSolana({accessToken:s,primaryPublicKey:r,hdWalletIndex:t});if(!i)throw new e({error:"Failed to create wallet",code:"embedded_wallet_creation_error"});const{user:d}=await this._privyInternal.refreshSession();return{user:d,provider:new o({proxy:this._proxy,privyInternal:this._privyInternal,primaryPublicKey:r,publicKey:i,hdWalletIndex:t})}}async hasEmbeddedWallet(){const{user:e,token:r}=await this._privyInternal.refreshSession();if(!e||!r)throw new Error("User must be logged in to interact with embedded wallets");return!!this._getEmbeddedWallet(e)}async isPasswordRequired(){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");const{user:e,token:r}=await this._privyInternal.refreshSession();if(!e||!r)throw new Error("User must be logged in to interact with embedded wallets");const t=this._getEmbeddedWallet(e);if(!t)return!1;if("privy"===t.recovery_method)return!1;try{return await this._proxy.connect({accessToken:r,entropyId:t.address,entropyIdVerifier:"ethereum-address-verifier"}),!1}catch(e){return i(e)}}async getProvider(e,r,o,s){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");const i=await this._load({wallet:e,entropyId:e.address,entropyIdVerifier:"ethereum-address-verifier",recoveryPassword:r,recoveryAccessToken:o,recoverySecretOverride:s});return new t({address:i,privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}async getSolanaProvider(r,t=r.address,s,i,d){if(!this._proxy)throw new e({error:"Embedded wallet proxy not initialized",code:"embedded_wallet_webview_not_loaded"});return await this._load({wallet:r,entropyId:t,entropyIdVerifier:"solana-address-verifier",recoveryPassword:s,recoveryAccessToken:i,recoverySecretOverride:d}),new o({publicKey:r.address,privyInternal:this._privyInternal,proxy:this._proxy,primaryPublicKey:t,hdWalletIndex:r.wallet_index})}async setPassword(e,r){const{provider:t}=await this.setRecovery({wallet:e,recoveryMethod:"user-passcode",password:r});return t}async setRecovery(e){const{wallet:r,...o}=e;if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");d({currentRecoveryMethod:r.recovery_method,upgradeToRecoveryMethod:"icloud-native"===o.recoveryMethod?"icloud":o.recoveryMethod}),await this._load("solana"===r.chain_type?{wallet:r,entropyId:r.address,entropyIdVerifier:"solana-address-verifier"}:{wallet:r,entropyId:r.address,entropyIdVerifier:"ethereum-address-verifier"});const s=await this._privyInternal.getAccessToken();if(!s)throw new Error("User must be logged in to interact with embedded wallets");const i=r.recovery_method;this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_started",{address:r.address,target_recovery_method:o.recoveryMethod,existing_recovery_method:i});try{let e;if("user-passcode"===o.recoveryMethod)e={recoveryMethod:"user-passcode",recoveryPassword:o.password};else if("google-drive"===o.recoveryMethod)e={recoveryMethod:"google-drive",recoveryAccessToken:o.recoveryAccessToken};else if("icloud"===o.recoveryMethod)e={recoveryMethod:"icloud",recoveryAccessToken:o.recoveryAccessToken};else if("icloud-native"===o.recoveryMethod)e={recoveryMethod:"icloud-native",iCloudRecordNameOverride:o.iCloudRecordNameOverride,recoverySecretOverride:o.recoverySecretOverride};else{if("privy"!==o.recoveryMethod)throw new Error(`Unknown recovery method: ${o.recoveryMethod}`);e={recoveryMethod:"privy"}}await this._proxy.setRecovery({accessToken:s,entropyId:r.address,entropyIdVerifier:"solana"===r.chain_type?"solana-address-verifier":"ethereum-address-verifier",...e}),this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_completed",{address:r.address,target_recovery_method:o.recoveryMethod,existing_recovery_method:i});const{user:d}=await this._privyInternal.refreshSession();return{user:d,provider:"ethereum"!==r.chain_type?null:new t({address:r.address,privyInternal:this._privyInternal,chains:this._chains,walletProxy:this._proxy})}}catch(e){throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_set_recovery_failed",{address:r.address,recovery_method:r.recovery_method,error:e instanceof Error?e.message:"Unable to recover wallet"}),e}}getURL(){const e=new URL(`${this._privyInternal.baseUrl}/apps/${this._privyInternal.appId}/embedded-wallets`);return this._privyInternal.caid&&e.searchParams.append("caid",this._privyInternal.caid),this._privyInternal.appClientId&&e.searchParams.append("client_id",this._privyInternal.appClientId),e.href}getMessageHandler(){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");return this._proxy.handleEmbeddedWalletMessages.bind(this._proxy)}onMessage(e){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");return this._proxy.handleEmbeddedWalletMessages(e)}async ping(e){try{if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");return await this._proxy.ping(e),!0}catch(e){return console.error(e),!1}}async _load({entropyId:e,entropyIdVerifier:r,wallet:t,recoveryPassword:o,recoveryAccessToken:s,recoverySecretOverride:d}){if(!this._proxy)throw new Error("Embedded wallet proxy not initialized");const a=await this._privyInternal.getAccessToken();if(!a)throw new Error("User must be logged in to interact with embedded wallets");try{return await this._proxy.connect({accessToken:a,entropyId:e,entropyIdVerifier:r}),e}catch(n){if(i(n)){try{if("privy"===t.recovery_method){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});const o=await this._proxy.recover({accessToken:a,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if("user-passcode"===t.recovery_method&&o){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});const s=await this._proxy.recover({accessToken:a,recoveryPassword:o,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),s.entropyId}if(["google-drive","icloud"].includes(t.recovery_method)&&s){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:t.recovery_method});const o=await this._proxy.recover({accessToken:a,recoveryAccessToken:s,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:t.recovery_method}),o.entropyId}if("icloud"===t.recovery_method&&d){this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_started",{address:t.address,recovery_method:"icloud-native"});const o=await this._proxy.recover({accessToken:a,recoverySecretOverride:d,entropyId:e,entropyIdVerifier:r});return this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_completed",{address:t.address,recovery_method:"icloud-native"}),o.entropyId}}catch(r){throw this._privyInternal.createAnalyticsEvent("embedded_wallet_sdk_recovery_failed",{address:t.address,recovery_method:t.recovery_method,error:r instanceof Error?r.message:`Unable to recover wallet: ${e}`}),r}throw n}throw n}}_getEmbeddedWallet(e){return e?.linked_accounts.find((e=>"wallet"===e.type&&"embedded"===e.connector_type&&"privy"===e.wallet_client_type))}}export{a as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import t from"fetch-retry";import{v4 as e}from"uuid";import{PrivyErrorCode as s}from"@privy-io/api-base";import{getPathWithParams as i,AppConfig as a,AnalyticsEvent as n,RefreshSession as r}from"@privy-io/public-api";import{PrivyClientError as o,PrivyApiError as c}from"./Error.mjs";import{Session as h}from"./Session.mjs";import l from"./toAbortSignalTimeout.mjs";import"eventemitter3";import"jose";import"js-cookie";import"./Token.mjs";const d="privy:caid";class p{baseUrl;_config;appId;appClientId;_storage;_analyticsId;_sdkVersion="js-sdk-core:0.
|
|
1
|
+
import t from"fetch-retry";import{v4 as e}from"uuid";import{PrivyErrorCode as s}from"@privy-io/api-base";import{getPathWithParams as i,AppConfig as a,AnalyticsEvent as n,RefreshSession as r}from"@privy-io/public-api";import{PrivyClientError as o,PrivyApiError as c}from"./Error.mjs";import{Session as h}from"./Session.mjs";import l from"./toAbortSignalTimeout.mjs";import"eventemitter3";import"jose";import"js-cookie";import"./Token.mjs";const d="privy:caid";class p{baseUrl;_config;appId;appClientId;_storage;_analyticsId;_sdkVersion="js-sdk-core:0.31.0";_fetch;nativeAppIdentifier;callbacks;_cache=new Map;session;constructor(e){this._storage=e.storage,this._analyticsId=null,this._getOrGenerateClientAnalyticsId(),this.baseUrl=e.baseUrl??"https://auth.privy.io",this.appId=e.appId,this.appClientId=e.appClientId,this._sdkVersion=e.sdkVersion??this._sdkVersion,this.callbacks=e.callbacks,"undefined"==typeof document&&(this.nativeAppIdentifier=e.nativeAppIdentifier),this.session=new h({storage:this._storage,isUsingServerCookies:!1,appId:e.appId}),this._fetch=t(fetch,{retries:3,retryDelay:500}),this.session.on("error_storing_tokens",(t=>{this.createAnalyticsEvent("error_updating_tokens_in_storage",{reason:t})}))}setCallbacks(t){this.callbacks={...this.callbacks,...t}}get isReady(){return Boolean(this._config)}get config(){return this._config}get caid(){return this._analyticsId}async _initialize(){if(this.isReady)this.callbacks?.setIsReady?.(!0);else{if(!await this.isStorageAccessible())throw new o({code:"storage_error",error:"Unable to access storage"});this._config=await this.getAppConfig(),this._config?.custom_api_url&&(this.baseUrl=this._config.custom_api_url,this.session.isUsingServerCookies=!0),this.callbacks?.setIsReady?.(!0),this.createAnalyticsEvent("sdk_initialize",{})}}async fetch(t,{body:e,params:s,headers:a,options:n={onRequest:this._beforeRequest.bind(this)}}){const r=`${this.baseUrl}${i(t.path,s)}`,o=new Request(r,{method:t.method,body:JSON.stringify(e),headers:a}),h=await n.onRequest(o),l=await this._fetch(o,h),d=await l.json();if(l.status>299)throw new c(d);return d}async _beforeRequestWithoutInitialize(t){const e=await this.session.getToken(),s=new Headers(t.headers);s.set("privy-app-id",this.appId),this.appClientId&&s.set("privy-client-id",this.appClientId),s.set("privy-client",this._sdkVersion),s.set("Authorization",`Bearer ${e}`),s.set("Content-Type","application/json"),s.set("Accept","application/json");const i=await this._getOrGenerateClientAnalyticsId();return i&&s.set("privy-ca-id",i),this.nativeAppIdentifier&&s.set("x-native-app-identifier",this.nativeAppIdentifier),{signal:l(2e4),headers:s,credentials:"include"}}async beforeRequestWithoutRefresh(t){return await this._initialize(),this._beforeRequestWithoutInitialize(t)}async _beforeRequest(t){return await this._initialize(),await this.getAccessToken(),this.beforeRequestWithoutRefresh(t)}async getAppConfig(){return await this.fetch(a,{params:{app_id:this.appId},options:{onRequest:this._beforeRequestWithoutInitialize.bind(this)}})}async _getOrGenerateClientAnalyticsId(){if(this._analyticsId)return this._analyticsId;try{const t=await this._storage.get(d);if("string"==typeof t&&t.length>0)return this._analyticsId=t,t}catch(t){console.error("Unable to load clientId",t)}try{this._analyticsId=e()}catch(t){console.error("Unable to generate uuidv4",t)}if(!this._analyticsId)return null;try{await this._storage.put(d,this._analyticsId)}catch(t){console.error(`Unable to store clientId: ${this._analyticsId}`,t)}return this._analyticsId}async destroyClientAnalyticsId(){try{return await this._storage.del(d)}catch(t){console.error("Unable to delete clientId",t)}}async createAnalyticsEvent(t,e){try{await this.fetch(n,{body:{event_name:t,client_id:await this._getOrGenerateClientAnalyticsId(),payload:e},options:{onRequest:this.beforeRequestWithoutRefresh.bind(this)}})}catch(t){}}async refreshSession(){const t=await this.session.getRefreshToken()??void 0,e=t??"key",s=this._cache.get(e);if(s)return await s;const i=this._refreshSession(t);this._cache.set(e,i);try{return await i}catch(t){throw t}finally{this._cache.delete(e)}}async _refreshSession(t){const e=await this.session.getToken();if(!this.session.hasRefreshCredentials(e,t??null))throw await this._initialize(),new c({code:s.MISSING_OR_INVALID_TOKEN,error:"No tokens found in storage"});try{const e=await this.fetch(r,{body:{refresh_token:t},options:{onRequest:this.beforeRequestWithoutRefresh.bind(this)}}),s=e.session_update_action;return this.callbacks?.setUser?.(e.user),"set"===s&&await this.session.updateWithTokensResponse(e),"clear"===s&&(await this.session.destroyLocalState(),this.callbacks?.setUser?.(null)),"ignore"===s&&e.token&&(await this.session.storeToken(e.token),e.identity_token&&await this.session.storeIdentityToken(e.identity_token)),e}catch(t){throw t instanceof c&&t.code===s.MISSING_OR_INVALID_TOKEN&&(await this.session.destroyLocalState(),this.callbacks?.setUser?.(null)),t}}async getAccessToken(){const[t,e]=await Promise.all([this.session.getToken(),this.session.getRefreshToken()]);return!this.session.tokenIsActive(t)&&this.session.hasRefreshCredentials(t,e)?(await this.refreshSession(),await this.session.getToken()):t}async getIdentityToken(){return await this.session.getIdentityToken()}async isStorageAccessible(){try{const t="privy:__storage__test",e="blobby";await this._storage.put(t,e);const s=await this._storage.get(t);return await this._storage.del(t),s===e}catch(t){return console.error(t),!1}}}export{p as PrivyInternal};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const s=["eth_sign","eth_signTransaction","personal_sign","eth_signTypedData_v4","csw_signUserOperation","secp256k1_sign"],n=n=>s.includes(n);export{n as isSupportedIframeRpcMethod};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@privy-io/js-sdk-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.0",
|
|
4
4
|
"description": "Vanilla JS client for the Privy Auth API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"authentication",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
"@ethersproject/transactions": "^5.7.0",
|
|
60
60
|
"@ethersproject/units": "^5.7.0",
|
|
61
61
|
"@privy-io/api-base": "^1.4.0",
|
|
62
|
-
"@privy-io/public-api": "2.12.
|
|
62
|
+
"@privy-io/public-api": "2.12.1",
|
|
63
63
|
"eventemitter3": "^5.0.1",
|
|
64
64
|
"fetch-retry": "^5.0.6",
|
|
65
65
|
"jose": "^4.15.5",
|