fix: cross install tracking

This commit is contained in:
kyranjamie
2023-07-19 18:36:56 +02:00
committed by kyranjamie
parent b3427bfcbf
commit 3bc59ac5dc
5 changed files with 99 additions and 58 deletions

View File

@@ -141,9 +141,9 @@
"@scure/bip32": "1.3.0",
"@scure/bip39": "1.2.1",
"@scure/btc-signer": "1.0.1",
"@segment/analytics-next": "1.53.0",
"@sentry/react": "7.57.0",
"@sentry/tracing": "7.57.0",
"@segment/analytics-next": "1.53.1",
"@sentry/react": "7.59.2",
"@sentry/tracing": "7.59.2",
"@stacks/auth": "6.5.4",
"@stacks/blockchain-api-client": "6.3.4",
"@stacks/common": "6.5.2",

View File

@@ -2,9 +2,11 @@ import { AddressVersion } from '@stacks/transactions';
import { decryptMnemonic, encryptMnemonic } from '@shared/crypto/mnemonic-encryption';
import { logger } from '@shared/logger';
import { identifyUser } from '@shared/utils/analytics';
import { recurseAccountsForActivity } from '@app/common/account-restoration/account-restore';
import { checkForLegacyGaiaConfigWithKnownGeneratedAccountIndex } from '@app/common/account-restoration/legacy-gaia-config-lookup';
import { mnemonicToRootNode } from '@app/common/keychain/keychain';
import { BitcoinClient } from '@app/query/bitcoin/bitcoin-client';
import { fetchNamesForAddress } from '@app/query/stacks/bns/bns.utils';
import { StacksClient } from '@app/query/stacks/stacks-client';
@@ -100,8 +102,12 @@ function unlockWalletAction(password: string): AppThunk {
if (!currentKey) return;
if (currentKey.type !== 'software') return;
const { secretKey, encryptionKey } = await decryptMnemonic({ password, ...currentKey });
await initalizeWalletSession(encryptionKey, secretKey);
const rootKey = mnemonicToRootNode(secretKey);
if (!rootKey.publicKey) throw new Error('Could not derive root key from mnemonic');
void identifyUser(rootKey.publicKey);
dispatch(inMemoryKeySlice.actions.setKeysInMemory({ default: secretKey }));
};
}

View File

@@ -0,0 +1,22 @@
import { deriveAnalyticsIdentifier } from './analytics';
describe(deriveAnalyticsIdentifier.name, () => {
test('the derivation of the users identifier', () =>
expect(deriveAnalyticsIdentifier(Uint8Array.from([1, 2, 3]))).toBe('T49D6FxBz57'));
const expectedLength = 11;
function createRandomValue() {
return window.crypto.getRandomValues(new Uint8Array());
}
test.each([
createRandomValue(),
createRandomValue(),
createRandomValue(),
createRandomValue(),
createRandomValue(),
])('random test value %#', value => {
expect(deriveAnalyticsIdentifier(value).length).toBe(expectedLength);
});
});

View File

@@ -1,3 +1,6 @@
import { ripemd160 } from '@noble/hashes/ripemd160';
import { sha256 } from '@noble/hashes/sha256';
import { base58 } from '@scure/base';
import { AnalyticsBrowser } from '@segment/analytics-next';
import * as Sentry from '@sentry/react';
import { getStoredState } from 'redux-persist';
@@ -33,6 +36,16 @@ export function initAnalytics() {
);
}
// Used to create a unique identifier for a user's key in base58.
// K = ripemd160(sha256(publicKey))[:8]
export function deriveAnalyticsIdentifier(publicKey: Uint8Array) {
return base58.encode(ripemd160(sha256(publicKey)).slice(0, 8));
}
export async function identifyUser(publicKey: Uint8Array) {
return analytics.identify(deriveAnalyticsIdentifier(publicKey));
}
export function initSentry() {
if (IS_TEST_ENV || !SENTRY_DSN) return;

108
yarn.lock
View File

@@ -3798,10 +3798,10 @@
dset "^3.1.2"
tslib "^2.4.1"
"@segment/analytics-next@1.53.0":
version "1.53.0"
resolved "https://registry.yarnpkg.com/@segment/analytics-next/-/analytics-next-1.53.0.tgz#05dce27ce20a9abb3f9ea2d6e6d67667c82f2a9d"
integrity sha512-7bzUjxGuccQpDx7CrteAx4yM2eDosjheQLySLBi6cz25EwPbBPb2X+ZzBUZIfLA0V0Co0zWaE6xXzVw8X5zSpQ==
"@segment/analytics-next@1.53.1":
version "1.53.1"
resolved "https://registry.yarnpkg.com/@segment/analytics-next/-/analytics-next-1.53.1.tgz#0ffe13b5af72e6a235dcc489a8bccf687e4d8da4"
integrity sha512-Tf5suyN00Qq2irdUP6q2KJje1reFTN5vCrh4mi/E/gTma2by9j5jYYsbHavMaOGM51aYVbWkf6a3HOyTqWOm1A==
dependencies:
"@lukeed/uuid" "^2.0.0"
"@segment/analytics-core" "1.3.0"
@@ -3864,26 +3864,26 @@
"@sentry/utils" "7.53.1"
tslib "^1.9.3"
"@sentry-internal/tracing@7.57.0":
version "7.57.0"
resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.57.0.tgz#cb761931b635f8f24c84be0eecfacb8516b20551"
integrity sha512-tpViyDd8AhQGYYhI94xi2aaDopXOPfL2Apwrtb3qirWkomIQ2K86W1mPmkce+B0cFOnW2Dxv/ZTFKz6ghjK75A==
"@sentry-internal/tracing@7.59.2":
version "7.59.2"
resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.59.2.tgz#91c44a37151bb81fac0500b4e031f53583dff772"
integrity sha512-02gteChV/lMobWU06VlITq+myEWk0MzhnDCm8n/DMigB47I9HkWZFAJ+CYG6Ns0rTL+3+/c2V0bPyQkZwIC+Sg==
dependencies:
"@sentry/core" "7.57.0"
"@sentry/types" "7.57.0"
"@sentry/utils" "7.57.0"
"@sentry/core" "7.59.2"
"@sentry/types" "7.59.2"
"@sentry/utils" "7.59.2"
tslib "^2.4.1 || ^1.9.3"
"@sentry/browser@7.57.0":
version "7.57.0"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.57.0.tgz#6e724c9eac680dba99ced0fdf81be8d1e3b3bceb"
integrity sha512-E0HaYYlaqHFiIRZXxcvOO8Odvlt+TR1vFFXzqUWXPOvDRxURglTOCQ3EN/u6bxtAGJ6y/Zc2obgihTtypuel/w==
"@sentry/browser@7.59.2":
version "7.59.2"
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.59.2.tgz#77f6c7af33448ec375d684442ef51f21f5c26ace"
integrity sha512-N1JiBs1VRR5DV0209TZgaMwRGiTYN1C34sFzIW7nuC82X4gHy3tuJjZPlMDTtgFrALBMJ24yQ7D4HJjXrS2+Dw==
dependencies:
"@sentry-internal/tracing" "7.57.0"
"@sentry/core" "7.57.0"
"@sentry/replay" "7.57.0"
"@sentry/types" "7.57.0"
"@sentry/utils" "7.57.0"
"@sentry-internal/tracing" "7.59.2"
"@sentry/core" "7.59.2"
"@sentry/replay" "7.59.2"
"@sentry/types" "7.59.2"
"@sentry/utils" "7.59.2"
tslib "^2.4.1 || ^1.9.3"
"@sentry/bundler-plugin-core@2.4.0":
@@ -3920,13 +3920,13 @@
"@sentry/utils" "7.53.1"
tslib "^1.9.3"
"@sentry/core@7.57.0":
version "7.57.0"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.57.0.tgz#65093d739c04f320a54395a21be955fcbe326acb"
integrity sha512-l014NudPH0vQlzybtXajPxYFfs9w762NoarjObC3gu76D1jzBBFzhdRelkGpDbSLNTIsKhEDDRpgAjBWJ9icfw==
"@sentry/core@7.59.2":
version "7.59.2"
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.59.2.tgz#5c69cc7b8321f47c3da353f51084e2f4c4170e7d"
integrity sha512-GRhoPw6b6GkvOsa060aREc9yyHjgAKITgITNbzUmn0GqIeWD5SMoCBAcENRHVgUnpQWOpnkEF1/sqxvwx+rf6Q==
dependencies:
"@sentry/types" "7.57.0"
"@sentry/utils" "7.57.0"
"@sentry/types" "7.59.2"
"@sentry/utils" "7.59.2"
tslib "^2.4.1 || ^1.9.3"
"@sentry/node@7.53.1":
@@ -3943,42 +3943,42 @@
lru_map "^0.3.3"
tslib "^1.9.3"
"@sentry/react@7.57.0":
version "7.57.0"
resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.57.0.tgz#cf91f0115bcd2a8306d6c8a39d8e8b53d4b21814"
integrity sha512-XGNTjIoCG3naSmCU8qObd+y+CqAB6NQkGWOp2yyBwp2inyKF2ehJvDh6bIQloBYq2TmOJDa4NfXdMrkilxaLFQ==
"@sentry/react@7.59.2":
version "7.59.2"
resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.59.2.tgz#d2ffe0048591253ec0809ab7d69c4fcc1cb103eb"
integrity sha512-n7m1GbBfCjvc/tLx8+wRNr/ol7VtGNsqAZ++mPoeMyT8WWkj17rDyTgShB1PQoevAAoZ74XJUEVg3MliOdEIrA==
dependencies:
"@sentry/browser" "7.57.0"
"@sentry/types" "7.57.0"
"@sentry/utils" "7.57.0"
"@sentry/browser" "7.59.2"
"@sentry/types" "7.59.2"
"@sentry/utils" "7.59.2"
hoist-non-react-statics "^3.3.2"
tslib "^2.4.1 || ^1.9.3"
"@sentry/replay@7.57.0":
version "7.57.0"
resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.57.0.tgz#c8f7eae7b7edc9d32c3d2955b337f3b3c76dff39"
integrity sha512-pN4ryNS3J5EYbkXvR+O/+hseAJha7XDl8mPFtK0OGTHG10JzCi4tQJazblHQdpb5QBaMMPCeZ+isyfoQLDNXnw==
"@sentry/replay@7.59.2":
version "7.59.2"
resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.59.2.tgz#4fc9c455e0e3b933075afe1729d8ba42953c62d4"
integrity sha512-Ma72ofTdtSinBY5GH0zM7k8o/WsdaVdPP/1iyFbcWQDt8dnrcsJVUKK0t9+8gijpiSMUKE+vjFjQNL9/PGYekw==
dependencies:
"@sentry/core" "7.57.0"
"@sentry/types" "7.57.0"
"@sentry/utils" "7.57.0"
"@sentry/core" "7.59.2"
"@sentry/types" "7.59.2"
"@sentry/utils" "7.59.2"
"@sentry/tracing@7.57.0":
version "7.57.0"
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.57.0.tgz#8bd07317db7b88ec5ecae48ad680e269af71b54d"
integrity sha512-D8eKJMYN529mDP9lsOLyhe0Rf9Qiexo7Ul4+MQwDlwRr9c9tc0AdGwFlnKGvCMDh7ucITzvZkMZDHBapU3WHNQ==
"@sentry/tracing@7.59.2":
version "7.59.2"
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.59.2.tgz#65b82fde3a336376a80c423354ae207743a3b150"
integrity sha512-8HXnlmiES+sMPwq1h4HsVO1QI58WTtXM9z6taPRX/olNkhmN3Pk2o4PQeItLRzYs84K/X4GPk/aofeqMbBX8+g==
dependencies:
"@sentry-internal/tracing" "7.57.0"
"@sentry-internal/tracing" "7.59.2"
"@sentry/types@7.53.1":
version "7.53.1"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.53.1.tgz#3eefbad851f2d0deff67285d7e976d23d7d06a41"
integrity sha512-/ijchRIu+jz3+j/zY+7KRPfLSCY14fTx5xujjbOdmEKjmIHQmwPBdszcQm40uwofrR8taV4hbt5MFN+WnjCkCw==
"@sentry/types@7.57.0":
version "7.57.0"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.57.0.tgz#4fdb80cbd49ba034dd8d9be0c0005a016d5db3ce"
integrity sha512-D7ifoUfxuVCUyktIr5Gc+jXUbtcUMmfHdTtTbf1XCZHua5mJceK9wtl3YCg3eq/HK2Ppd52BKnTzEcS5ZKQM+w==
"@sentry/types@7.59.2":
version "7.59.2"
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.59.2.tgz#25b2ae0b2dc6733ca48621cf9167c9a7965852ae"
integrity sha512-rylG7UQ0cC/xbV6trSuaAE/bsruSZy92jxQ1/KSOYKwBBvRFPXJBuiBtA81b8eYa4THZ+mE/ol2qOTJYuuV4Ug==
"@sentry/utils@7.53.1":
version "7.53.1"
@@ -3988,12 +3988,12 @@
"@sentry/types" "7.53.1"
tslib "^1.9.3"
"@sentry/utils@7.57.0":
version "7.57.0"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.57.0.tgz#8253c6fcf35138b4c424234b8da1596e11b98ad8"
integrity sha512-YXrkMCiNklqkXctn4mKYkrzNCf/dfVcRUQrkXjeBC+PHXbcpPyaJgInNvztR7Skl8lE3JPGPN4v5XhLxK1bUUg==
"@sentry/utils@7.59.2":
version "7.59.2"
resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.59.2.tgz#c4c76b1ea2a7f9363d1203dedfeafec2387bf634"
integrity sha512-uxC8xH9wsB/tZUnjmaQ1uGtsumFOc19KWfedVHXzcNwqdt5uS3EB4+D1d8WwiJyLy2nm61DdmTC9SiB4HS+OSw==
dependencies:
"@sentry/types" "7.57.0"
"@sentry/types" "7.59.2"
tslib "^2.4.1 || ^1.9.3"
"@sentry/webpack-plugin@2.4.0":