Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#735 | UI tweaks #736

Merged
merged 16 commits into from
Jan 6, 2024
2 changes: 1 addition & 1 deletion src/antelope/chains/EVMChainSettings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ export default abstract class EVMChainSettings implements ChainSettings {
abstract getSystemTokens(): TokenClass[];
abstract getIndexerApiEndpoint(): string;
abstract hasIndexerSupport(): boolean;
abstract trackAnalyticsEvent(params: Record<string, unknown>): void;
abstract trackAnalyticsEvent(eventName: string): void;

async getApy(): Promise<string> {
const response = await this.api.get('apy/evm');
Expand Down
2 changes: 1 addition & 1 deletion src/antelope/chains/NativeChainSettings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ export default abstract class NativeChainSettings implements ChainSettings {
abstract getMapDisplay(): boolean;
abstract getTheme(): Theme;
abstract getFiltersSupported(prop: string): boolean;
abstract trackAnalyticsEvent(params: Record<string, unknown>): void;
abstract trackAnalyticsEvent(eventName: string): void;

/**
* Retrieves the list of IDs for the important tokens.
Expand Down
24 changes: 13 additions & 11 deletions src/antelope/chains/chain-constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,19 @@ import { NETWORK as telosTestnetEvmNetwork } from 'src/antelope/chains/evm/telos

export const TELOS_CHAIN_IDS = ['40', '41'];
export const TELOS_NETWORK_NAMES = [telosEvmNetwork, telosTestnetEvmNetwork];
export const TELOS_ANALYTICS_EVENT_IDS = {
loginStarted: 'JXIYBP1S',
loginSuccessful: 'HIP11SFR',
loginSuccessfulMetamask: 'ABGMND23',
loginFailedMetamask: 'ZFGE6TFS',
loginSuccessfulSafepal: 'LKCBKDU2',
loginFailedSafepal: '6PSIWGNV',
loginSuccessfulOreId: 'MSXMDDNK',
loginFailedOreId: 'UFX3JYRJ',
loginFailedWalletConnect: '9V4IV1BV',
loginSuccessfulWalletConnect: '2EG2OR3H',
export const TELOS_ANALYTICS_EVENT_NAMES = {
loginStarted: 'Login Started',
loginSuccessful: 'Login Successful',
loginSuccessfulMetamask: 'Login Successful - Metamask',
loginFailedMetamask: 'Login Failed - Metamask',
loginSuccessfulSafepal: 'Login Successful - Safepal',
loginFailedSafepal: 'Login Failed - Safepal',
loginSuccessfulOreId: 'Login Successful - OreId',
loginFailedOreId: 'Login Failed - OreId',
loginFailedWalletConnect: 'Login Failed - WalletConnect',
loginSuccessfulWalletConnect: 'Login Successful - WalletConnect',
loginSuccessfulBrave: 'Login Successful - Brave',
loginFailedBrave: 'Login Failed - Brave',
};

export const ZERO_ADDRESS = '0x'.concat('0'.repeat(40));
11 changes: 5 additions & 6 deletions src/antelope/chains/evm/telos-evm-testnet/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ const NETWORK_EVM_ENDPOINT = 'https://testnet.telos.net';
const INDEXER_ENDPOINT = 'https://api.testnet.teloscan.io';
const CONTRACTS_BUCKET = 'https://verified-evm-contracts-testnet.s3.amazonaws.com';

declare const fathom: { trackGoal: (eventId: string, value: 0) => void };
declare const fathom: { trackEvent: (eventName: string) => void };

export default class TelosEVMTestnet extends EVMChainSettings {
isTestnet() {
Expand Down Expand Up @@ -149,7 +149,7 @@ export default class TelosEVMTestnet extends EVMChainSettings {
}

getBuyMoreOfTokenLink(): string {
return 'https://www.telos.net/#buy-tlos-simplex';
return 'https://telos.net/ecosystem?category=Exchanges';
}

getSystemTokens(): TokenClass[] {
Expand All @@ -164,13 +164,12 @@ export default class TelosEVMTestnet extends EVMChainSettings {
return true;
}

trackAnalyticsEvent(params: Record<string, unknown>): void {
trackAnalyticsEvent(eventName: string): void {
if (typeof fathom === 'undefined') {
console.warn(`Failed to track event with ID ${params.id}: Fathom Analytics not loaded`);
console.warn(`Failed to track event with name '${eventName}': Fathom Analytics not loaded`);
return;
}

const id = params.id as string;
fathom.trackGoal(id, 0);
fathom.trackEvent(eventName);
}
}
11 changes: 5 additions & 6 deletions src/antelope/chains/evm/telos-evm/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ const NETWORK_EVM_ENDPOINT = 'https://mainnet.telos.net';
const INDEXER_ENDPOINT = 'https://api.teloscan.io';
const CONTRACTS_BUCKET = 'https://verified-evm-contracts.s3.amazonaws.com';

declare const fathom: { trackGoal: (eventId: string, value: 0) => void };
declare const fathom: { trackEvent: (eventName: string) => void };

export default class TelosEVMTestnet extends EVMChainSettings {
getNetwork(): string {
Expand Down Expand Up @@ -145,7 +145,7 @@ export default class TelosEVMTestnet extends EVMChainSettings {
}

getBuyMoreOfTokenLink(): string {
return 'https://www.telos.net/#buy-tlos-simplex';
return 'https://telos.net/ecosystem?category=Exchanges';
}

getSystemTokens(): TokenClass[] {
Expand All @@ -160,13 +160,12 @@ export default class TelosEVMTestnet extends EVMChainSettings {
return true;
}

trackAnalyticsEvent(params: Record<string, unknown>): void {
trackAnalyticsEvent(eventName: string): void {
if (typeof fathom === 'undefined') {
console.warn(`Failed to track event with ID ${params.id}: Fathom Analytics not loaded`);
console.warn(`Failed to track event with name '${eventName}': Fathom Analytics not loaded`);
return;
}

const id = params.id as string;
fathom.trackGoal(id, 0);
fathom.trackEvent(eventName);
}
}
2 changes: 1 addition & 1 deletion src/antelope/types/ChainSettings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ export interface ChainSettings {
getSystemTokens(): TokenClass[];
getNftsForAccount(address: string, filter: IndexerAccountNftsFilter): Promise<Collectible[]>;
getNftsForCollection(contract: string, filter: IndexerCollectionNftsFilter): Promise<Collectible[]>;
trackAnalyticsEvent(params: Record<string, unknown>): void;
trackAnalyticsEvent(eventName: string): void;
getApy(): Promise<string>;
}
40 changes: 18 additions & 22 deletions src/antelope/wallets/authenticators/InjectedProviderAuth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import {
addressString,
} from 'src/antelope/types';
import { EVMAuthenticator } from 'src/antelope/wallets';
import { TELOS_NETWORK_NAMES, TELOS_ANALYTICS_EVENT_IDS } from 'src/antelope/chains/chain-constants';
import { MetamaskAuthName, SafePalAuthName } from 'src/antelope/wallets';
import { TELOS_NETWORK_NAMES, TELOS_ANALYTICS_EVENT_NAMES } from 'src/antelope/chains/chain-constants';
import { BraveAuthName, MetamaskAuthName, SafePalAuthName } from 'src/antelope/wallets';

export abstract class InjectedProviderAuth extends EVMAuthenticator {
onReady = new BehaviorSubject<boolean>(false);
Expand All @@ -32,31 +32,27 @@ export abstract class InjectedProviderAuth extends EVMAuthenticator {
useFeedbackStore().setLoading(`${this.getName()}.login`);

this.trace('login', 'trackAnalyticsEvent -> login started');
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginStarted },
);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginStarted);

const response = await super.login(network).then((res) => {
if (TELOS_NETWORK_NAMES.includes(network)) {
let successfulLoginEventId = '';
let successfulLoginEventName = '';

if (authName === MetamaskAuthName) {
successfulLoginEventId = TELOS_ANALYTICS_EVENT_IDS.loginSuccessfulMetamask;
successfulLoginEventName = TELOS_ANALYTICS_EVENT_NAMES.loginSuccessfulMetamask;
} else if (authName === SafePalAuthName) {
successfulLoginEventId = TELOS_ANALYTICS_EVENT_IDS.loginSuccessfulSafepal;
successfulLoginEventName = TELOS_ANALYTICS_EVENT_NAMES.loginSuccessfulSafepal;
} else if (authName === BraveAuthName) {
successfulLoginEventName = TELOS_ANALYTICS_EVENT_NAMES.loginSuccessfulBrave;
}

if (successfulLoginEventId) {
this.trace('login', 'trackAnalyticsEvent -> login succeeded', authName, successfulLoginEventId);
chainSettings.trackAnalyticsEvent(
{ id: successfulLoginEventId },
);
if (successfulLoginEventName) {
this.trace('login', 'trackAnalyticsEvent -> login succeeded', authName, successfulLoginEventName);
chainSettings.trackAnalyticsEvent(successfulLoginEventName);
}

this.trace('login', 'trackAnalyticsEvent -> generic login succeeded', TELOS_ANALYTICS_EVENT_IDS.loginSuccessful);
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginSuccessful },
);
this.trace('login', 'trackAnalyticsEvent -> generic login succeeded', authName, TELOS_ANALYTICS_EVENT_NAMES.loginSuccessful);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginSuccessful);
}

return res;
Expand All @@ -69,16 +65,16 @@ export abstract class InjectedProviderAuth extends EVMAuthenticator {
let failedLoginEventId = '';

if (authName === MetamaskAuthName) {
failedLoginEventId = TELOS_ANALYTICS_EVENT_IDS.loginFailedMetamask;
failedLoginEventId = TELOS_ANALYTICS_EVENT_NAMES.loginFailedMetamask;
} else if (authName === SafePalAuthName) {
failedLoginEventId = TELOS_ANALYTICS_EVENT_IDS.loginFailedSafepal;
failedLoginEventId = TELOS_ANALYTICS_EVENT_NAMES.loginFailedSafepal;
} else if (authName === BraveAuthName) {
failedLoginEventId = TELOS_ANALYTICS_EVENT_NAMES.loginFailedBrave;
}

if (failedLoginEventId) {
this.trace('login', 'trackAnalyticsEvent -> login failed', authName, failedLoginEventId);
chainSettings.trackAnalyticsEvent(
{ id: failedLoginEventId },
);
chainSettings.trackAnalyticsEvent(failedLoginEventId);
}
}
}).finally(() => {
Expand Down
28 changes: 9 additions & 19 deletions src/antelope/wallets/authenticators/OreIdAuth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import {
import { useFeedbackStore } from 'src/antelope/stores/feedback';
import { useChainStore } from 'src/antelope/stores/chain';
import { RpcEndpoint } from 'universal-authenticator-library';
import { TELOS_ANALYTICS_EVENT_IDS } from 'src/antelope/chains/chain-constants';
import { TELOS_ANALYTICS_EVENT_NAMES } from 'src/antelope/chains/chain-constants';

const name = 'OreId';
export const OreIdAuthName = name;
Expand Down Expand Up @@ -64,14 +64,10 @@ export class OreIdAuth extends EVMAuthenticator {
this.trace('login', network);
const chainSettings = this.getChainSettings();
const trackSuccessfulLogin = () => {
this.trace('login', 'trackAnalyticsEvent -> generic login succeeded', TELOS_ANALYTICS_EVENT_IDS.loginSuccessful);
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginSuccessful },
);
this.trace('login', 'trackAnalyticsEvent -> login succeeded', this.getName(), TELOS_ANALYTICS_EVENT_IDS.loginSuccessfulOreId);
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginSuccessfulOreId },
);
this.trace('login', 'trackAnalyticsEvent -> generic login succeeded', TELOS_ANALYTICS_EVENT_NAMES.loginSuccessful);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginSuccessful);
this.trace('login', 'trackAnalyticsEvent -> login succeeded', this.getName(), TELOS_ANALYTICS_EVENT_NAMES.loginSuccessfulOreId);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginSuccessfulOreId);
};

useFeedbackStore().setLoading(`${this.getName()}.login`);
Expand All @@ -93,18 +89,14 @@ export class OreIdAuth extends EVMAuthenticator {
this.trace('login', 'userChainAccount', this.userChainAccount);
// track the login start for auto-login procceess
this.trace('login', 'trackAnalyticsEvent -> login started');
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginStarted },
);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginStarted);
// then track the successful login
trackSuccessfulLogin();
return chainAccount;
}

this.trace('login', 'trackAnalyticsEvent -> login started');
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginStarted },
);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginStarted);

// launch the login flow
await oreId.popup.auth({ provider: this.provider as AuthProvider });
Expand All @@ -118,10 +110,8 @@ export class OreIdAuth extends EVMAuthenticator {
const appName = this.options.appName;
const networkName = useChainStore().getNetworkSettings(network).getDisplay();

this.trace('login', 'trackAnalyticsEvent -> login failed', this.getName(), TELOS_ANALYTICS_EVENT_IDS.loginFailedOreId);
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginFailedOreId },
);
this.trace('login', 'trackAnalyticsEvent -> login failed', this.getName(), TELOS_ANALYTICS_EVENT_NAMES.loginFailedOreId);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginFailedOreId);

throw new AntelopeError('antelope.wallets.error_oreid_no_chain_account', {
networkName,
Expand Down
38 changes: 13 additions & 25 deletions src/antelope/wallets/authenticators/WalletConnectAuth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import {
} from '@web3modal/ethereum';
import { Web3Modal, Web3ModalConfig } from '@web3modal/html';
import { BigNumber, ethers } from 'ethers';
import { TELOS_ANALYTICS_EVENT_IDS } from 'src/antelope/chains/chain-constants';
import { TELOS_ANALYTICS_EVENT_NAMES } from 'src/antelope/chains/chain-constants';
import { useChainStore } from 'src/antelope/stores/chain';
import { useContractStore } from 'src/antelope/stores/contract';
import { useFeedbackStore } from 'src/antelope/stores/feedback';
Expand Down Expand Up @@ -106,19 +106,15 @@ export class WalletConnectAuth extends EVMAuthenticator {
'login',
'trackAnalyticsEvent -> login successful',
'WalletConnect',
TELOS_ANALYTICS_EVENT_IDS.loginSuccessfulWalletConnect,
);
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginSuccessfulWalletConnect },
TELOS_ANALYTICS_EVENT_NAMES.loginSuccessfulWalletConnect,
);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginSuccessfulWalletConnect);
this.trace(
'login',
'trackAnalyticsEvent -> generic login successful',
TELOS_ANALYTICS_EVENT_IDS.loginSuccessful,
);
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginSuccessful },
TELOS_ANALYTICS_EVENT_NAMES.loginSuccessful,
);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginSuccessful);

return address;
} catch (e) {
Expand All @@ -128,12 +124,10 @@ export class WalletConnectAuth extends EVMAuthenticator {
'walletConnectLogin',
'trackAnalyticsEvent -> login failed',
'WalletConnect',
TELOS_ANALYTICS_EVENT_IDS.loginFailedWalletConnect,
TELOS_ANALYTICS_EVENT_NAMES.loginFailedWalletConnect,
);
const chainSettings = this.getChainSettings();
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginFailedWalletConnect },
);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginFailedWalletConnect);
throw new AntelopeError('antelope.evm.error_login');
} finally {
useFeedbackStore().unsetLoading(`${this.getName()}.login`);
Expand All @@ -152,11 +146,9 @@ export class WalletConnectAuth extends EVMAuthenticator {
'login',
'trackAnalyticsEvent -> login started',
'WalletConnect',
TELOS_ANALYTICS_EVENT_IDS.loginStarted,
);
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginStarted },
TELOS_ANALYTICS_EVENT_NAMES.loginStarted,
);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginStarted);
return this.walletConnectLogin(network);
} else {
return new Promise(async (resolve) => {
Expand All @@ -170,11 +162,9 @@ export class WalletConnectAuth extends EVMAuthenticator {
'login',
'trackAnalyticsEvent -> login started',
'WalletConnect',
TELOS_ANALYTICS_EVENT_IDS.loginStarted,
);
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginStarted },
TELOS_ANALYTICS_EVENT_NAMES.loginStarted,
);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginStarted);
}

if (newState.open === false) {
Expand All @@ -185,11 +175,9 @@ export class WalletConnectAuth extends EVMAuthenticator {
'login',
'trackAnalyticsEvent -> login failed',
'WalletConnect',
TELOS_ANALYTICS_EVENT_IDS.loginFailedWalletConnect,
);
chainSettings.trackAnalyticsEvent(
{ id: TELOS_ANALYTICS_EVENT_IDS.loginFailedWalletConnect },
TELOS_ANALYTICS_EVENT_NAMES.loginFailedWalletConnect,
);
chainSettings.trackAnalyticsEvent(TELOS_ANALYTICS_EVENT_NAMES.loginFailedWalletConnect);
}

// this prevents multiple subscribers from being attached to the web3Modal
Expand Down
1 change: 1 addition & 0 deletions src/antelope/wallets/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ export * from 'src/antelope/wallets/authenticators/MetamaskAuth';
export * from 'src/antelope/wallets/authenticators/OreIdAuth';
export * from 'src/antelope/wallets/authenticators/WalletConnectAuth';
export * from 'src/antelope/wallets/authenticators/SafePalAuth';
export * from 'src/antelope/wallets/authenticators/BraveAuth';
export * from 'src/antelope/wallets/AntelopeWallets';
Loading
Loading