mirror of
https://github.com/andrei0x309/clear-wallet.git
synced 2024-11-18 23:41:10 +00:00
chore: improve SWIF
This commit is contained in:
parent
4c0f13840f
commit
beb0d6bbd2
@ -137,7 +137,7 @@ class MetaMaskAPI {
|
||||
_eventsCount = 2
|
||||
_jsonRpcConnection = {}
|
||||
_log = {}
|
||||
_maxListeners= 100
|
||||
_maxListeners = 10
|
||||
_metamask = new Proxy({
|
||||
isUnlocked: () => {
|
||||
return Promise.resolve(true)
|
||||
@ -153,7 +153,6 @@ class MetaMaskAPI {
|
||||
return false
|
||||
}
|
||||
// for maximum compatibility since is cloning the same API
|
||||
|
||||
enable() {
|
||||
return sendMessage({ method: 'eth_requestAccounts', params: Array(0)})
|
||||
}
|
||||
@ -314,7 +313,7 @@ class MetaMaskAPI {
|
||||
}
|
||||
|
||||
getMaxListeners() {
|
||||
return 100
|
||||
return 10
|
||||
}
|
||||
_getExperimentalApi () {
|
||||
return this._metamask
|
||||
@ -380,6 +379,7 @@ const listner = function(event: any) {
|
||||
(<any>eth).selectedAddress = eventDataData?.address?.[0] ?? null;
|
||||
(<any>eth).accounts = eventDataData.address?.[0] ? [eventDataData.address?.[0]] : [];
|
||||
(<any>eth)._state.accounts = (<any>eth).accounts;
|
||||
(<any>eth)._state.isConnected = true;
|
||||
(<any>eth).isConnected = () => true;
|
||||
loadEIP1193Provider(eth)
|
||||
} else if( listnerName === 'chainChanged' ) {
|
||||
|
@ -1,9 +1,11 @@
|
||||
import { signMsg, getSelectedAddress, getOptimismProvider } from './wallet'
|
||||
import { FARCASTER_PARTIAL_KEY_ABI } from './abis'
|
||||
import { ethers } from 'ethers'
|
||||
import { getUrl } from './platform'
|
||||
import { generateApiToken } from './warpcast-auth'
|
||||
import { getUrl, setCachedFcAuthToken, getCachedFcAuthToken } from './platform'
|
||||
import { generateApiToken} from './warpcast-auth'
|
||||
import { getQRCode } from './QR'
|
||||
import { wait } from './misc'
|
||||
|
||||
export interface TChannelTokenStatusResponse {
|
||||
state: string;
|
||||
nonce: string;
|
||||
@ -114,7 +116,8 @@ export const constructWarpcastSWIEMsg = ({
|
||||
return `${domain} wants you to sign in with your Ethereum account:\n${custodyAddress}\n\nFarcaster Auth\n\nURI: ${siweUri}\nVersion: 1\nChain ID: 10\nNonce: ${nonce}${notBefore ? `\nIssued At: ${notBefore}` : `\nIssued At: ${new Date(Date.now() - 1000).toISOString()}`}${expirationTime ? `\nExpiration Time: ${expirationTime}` : ''}${notBefore ? `\nNot Before: ${notBefore}` : ''}\nResources:\n- farcaster://fid/${fid}`
|
||||
}
|
||||
|
||||
|
||||
// WC API has become slow authtoken is many times not considered valid until a few retries
|
||||
// we use cached older token first
|
||||
export const signInWithFarcaster = async ({
|
||||
channelToken,
|
||||
message,
|
||||
@ -126,11 +129,20 @@ export const signInWithFarcaster = async ({
|
||||
signature: string,
|
||||
authToken: string
|
||||
}) => {
|
||||
const response = await fetch(`${EP_SIGNIN}`, {
|
||||
const maxRetries = 4
|
||||
let retries = 1
|
||||
let response: Response
|
||||
const newToken = authToken
|
||||
const cachedToken = await getCachedFcAuthToken()
|
||||
let token = cachedToken || newToken
|
||||
const isCachedToken = token === cachedToken
|
||||
do {
|
||||
await wait(200 * retries)
|
||||
response = await fetch(`${EP_SIGNIN}`, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `Bearer ${authToken}`
|
||||
'Authorization': `Bearer ${token}`
|
||||
},
|
||||
body: JSON.stringify({
|
||||
channelToken,
|
||||
@ -138,6 +150,15 @@ export const signInWithFarcaster = async ({
|
||||
signature,
|
||||
})
|
||||
});
|
||||
if (response.ok) {
|
||||
setCachedFcAuthToken(token)
|
||||
return response.json();
|
||||
}
|
||||
if (isCachedToken) {
|
||||
token = newToken
|
||||
}
|
||||
retries++
|
||||
} while (retries < maxRetries)
|
||||
|
||||
return response.json();
|
||||
}
|
||||
|
@ -161,7 +161,6 @@ export const removeAllAbis = async (): Promise<void> => {
|
||||
await storageSave('abis', defaultAbis)
|
||||
}
|
||||
|
||||
|
||||
export const readCAGetAll = async (): Promise<ContractActions> => {
|
||||
return ((await storageGet('read-actions'))?.['read-actions'] ?? {}) as ContractActions
|
||||
}
|
||||
@ -208,6 +207,15 @@ export const writeCAWipe = async (): Promise<void> => {
|
||||
await storageSave('write-actions', {})
|
||||
}
|
||||
|
||||
export const setCachedFcAuthToken = async (token: string): Promise<void> => {
|
||||
await storageSave('fcAuthToken', token)
|
||||
}
|
||||
|
||||
export const getCachedFcAuthToken = async (): Promise<string> => {
|
||||
return (await storageGet('fcAuthToken'))?.fcAuthToken ?? ''
|
||||
}
|
||||
|
||||
|
||||
export const blockLockout = async (): Promise<Settings> => {
|
||||
const settings = await getSettings()
|
||||
settings.lockOutBlocked = true
|
||||
|
@ -131,7 +131,8 @@
|
||||
<ion-label
|
||||
><h2>Try to scan QR</h2>
|
||||
<p style="font-size: 0.8rem">
|
||||
(must be visible on current page)
|
||||
(must be visible on current page, might fail if QR is small or too
|
||||
complex)
|
||||
</p></ion-label
|
||||
>
|
||||
</ion-item>
|
||||
@ -143,16 +144,20 @@
|
||||
<ion-item>
|
||||
<ion-label
|
||||
><h2>Alternative: paste link from QR</h2>
|
||||
<p style="font-size: 0.8rem; opacity: 0.9">
|
||||
similar to: https://warpcast.com/~/siwf?channelToken=AXLUD4S4
|
||||
<p style="font-size: 0.7rem; opacity: 0.9">
|
||||
Privy has copy link, if you see `I am on mobile` you can also right click
|
||||
to copy. Link is similar to:
|
||||
https://warpcast.com/~/siwf?channelToken=AXXXXXXX
|
||||
</p></ion-label
|
||||
>
|
||||
</ion-item>
|
||||
|
||||
<ion-item>
|
||||
<ion-label>
|
||||
<p>Account needs to own a fid</p>
|
||||
<p>QR needs to be visible on the website you click authorize</p>
|
||||
<p style="font-size: 0.7rem; opacity: 0.9">
|
||||
Account needs to own a fid, WC API has become slow you might need to try
|
||||
multiple, times if you don't get signed in
|
||||
</p>
|
||||
</ion-label>
|
||||
</ion-item>
|
||||
<ion-item>
|
||||
|
@ -44,7 +44,7 @@
|
||||
:clear-on-edit="false"
|
||||
:spellcheck="false"
|
||||
:tabindex="0"
|
||||
@ionInput="mpPass = $event.target.value"
|
||||
@ionInput="(e: any) => (mpPass = String(e.target.value))"
|
||||
id="pass-input"
|
||||
>
|
||||
<div slot="label"><ion-text color="danger">(Password)</ion-text></div>
|
||||
|
Loading…
Reference in New Issue
Block a user