mirror of
https://github.com/aljazceru/mutiny-web.git
synced 2025-12-18 14:54:26 +01:00
Start of sentry integration
This commit is contained in:
committed by
Tony Giorgio
parent
0da0dce559
commit
2b18c9568d
12
package.json
12
package.json
@@ -33,11 +33,11 @@
|
|||||||
"tailwindcss": "^3.4.1",
|
"tailwindcss": "^3.4.1",
|
||||||
"typescript": "^5.4.5",
|
"typescript": "^5.4.5",
|
||||||
"vite": "^5.2.10",
|
"vite": "^5.2.10",
|
||||||
|
"vite-plugin-comlink": "^4.0.3",
|
||||||
"vite-plugin-pwa": "^0.19.8",
|
"vite-plugin-pwa": "^0.19.8",
|
||||||
"vite-plugin-solid": "^2.10.2",
|
"vite-plugin-solid": "^2.10.2",
|
||||||
"vite-plugin-wasm": "^3.3.0",
|
"vite-plugin-wasm": "^3.3.0",
|
||||||
"workbox-window": "^7.0.0",
|
"workbox-window": "^7.0.0"
|
||||||
"vite-plugin-comlink": "^4.0.3"
|
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@capacitor-mlkit/barcode-scanning": "^6.0.0",
|
"@capacitor-mlkit/barcode-scanning": "^6.0.0",
|
||||||
@@ -55,12 +55,15 @@
|
|||||||
"@capacitor/toast": "^6.0.0",
|
"@capacitor/toast": "^6.0.0",
|
||||||
"@kobalte/core": "^0.12.6",
|
"@kobalte/core": "^0.12.6",
|
||||||
"@kobalte/tailwindcss": "^0.9.0",
|
"@kobalte/tailwindcss": "^0.9.0",
|
||||||
"@mutinywallet/mutiny-wasm": "1.7.5",
|
|
||||||
"@modular-forms/solid": "^0.20.0",
|
"@modular-forms/solid": "^0.20.0",
|
||||||
|
"@mutinywallet/mutiny-wasm": "1.7.5",
|
||||||
|
"@sentry/browser": "^8.7.0",
|
||||||
|
"@sentry/wasm": "^8.7.0",
|
||||||
"@solid-primitives/upload": "^0.0.117",
|
"@solid-primitives/upload": "^0.0.117",
|
||||||
"@solidjs/meta": "^0.29.3",
|
"@solidjs/meta": "^0.29.3",
|
||||||
"@solidjs/router": "^0.13.1",
|
"@solidjs/router": "^0.13.1",
|
||||||
"capacitor-secure-storage-plugin": "^0.9.0",
|
"capacitor-secure-storage-plugin": "^0.9.0",
|
||||||
|
"comlink": "^4.4.1",
|
||||||
"i18next": "^23.10.1",
|
"i18next": "^23.10.1",
|
||||||
"i18next-browser-languagedetector": "^7.2.0",
|
"i18next-browser-languagedetector": "^7.2.0",
|
||||||
"i18next-http-backend": "^2.5.0",
|
"i18next-http-backend": "^2.5.0",
|
||||||
@@ -68,8 +71,7 @@
|
|||||||
"qr-scanner": "^1.4.2",
|
"qr-scanner": "^1.4.2",
|
||||||
"solid-js": "^1.8.16",
|
"solid-js": "^1.8.16",
|
||||||
"solid-qr-code": "^0.0.8",
|
"solid-qr-code": "^0.0.8",
|
||||||
"solid-transition-group": "^0.2.3",
|
"solid-transition-group": "^0.2.3"
|
||||||
"comlink": "^4.4.1"
|
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
|
|||||||
87
pnpm-lock.yaml
generated
87
pnpm-lock.yaml
generated
@@ -56,6 +56,12 @@ dependencies:
|
|||||||
'@mutinywallet/mutiny-wasm':
|
'@mutinywallet/mutiny-wasm':
|
||||||
specifier: 1.7.5
|
specifier: 1.7.5
|
||||||
version: 1.7.5
|
version: 1.7.5
|
||||||
|
'@sentry/browser':
|
||||||
|
specifier: ^8.7.0
|
||||||
|
version: 8.7.0
|
||||||
|
'@sentry/wasm':
|
||||||
|
specifier: ^8.7.0
|
||||||
|
version: 8.7.0
|
||||||
'@solid-primitives/upload':
|
'@solid-primitives/upload':
|
||||||
specifier: ^0.0.117
|
specifier: ^0.0.117
|
||||||
version: 0.0.117(solid-js@1.8.16)
|
version: 0.0.117(solid-js@1.8.16)
|
||||||
@@ -2399,6 +2405,87 @@ packages:
|
|||||||
dev: true
|
dev: true
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
/@sentry-internal/browser-utils@8.7.0:
|
||||||
|
resolution: {integrity: sha512-RFBK1sYBwV5qGMEwWF0rjOTqQpp4/SvE+qHkOJNRUTVYmfjM+Y9lcxwn4B6lu3aboxePpBw/i1PlP6XwX4UnGA==}
|
||||||
|
engines: {node: '>=14.18'}
|
||||||
|
dependencies:
|
||||||
|
'@sentry/core': 8.7.0
|
||||||
|
'@sentry/types': 8.7.0
|
||||||
|
'@sentry/utils': 8.7.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@sentry-internal/feedback@8.7.0:
|
||||||
|
resolution: {integrity: sha512-qcGtWCtRB4eP7NVQoxW936oPkU4qu9otMLYELPGmOJPnuAG0lujlJXW7BucaM7ADyJgJTE75hG849bHecfnbmQ==}
|
||||||
|
engines: {node: '>=14.18'}
|
||||||
|
dependencies:
|
||||||
|
'@sentry/core': 8.7.0
|
||||||
|
'@sentry/types': 8.7.0
|
||||||
|
'@sentry/utils': 8.7.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@sentry-internal/replay-canvas@8.7.0:
|
||||||
|
resolution: {integrity: sha512-FOnvBPbq6MJVHPduc0hcsdE3PeeovQ2z5WJnZDGhvp/Obehxqe+XgX7K/595vRIknv4EokRn/3Kw0mFwG8E+ZQ==}
|
||||||
|
engines: {node: '>=14.18'}
|
||||||
|
dependencies:
|
||||||
|
'@sentry-internal/replay': 8.7.0
|
||||||
|
'@sentry/core': 8.7.0
|
||||||
|
'@sentry/types': 8.7.0
|
||||||
|
'@sentry/utils': 8.7.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@sentry-internal/replay@8.7.0:
|
||||||
|
resolution: {integrity: sha512-bQzOkWplaWTe3u+aDBhxWY3Qy0aT7ss2A3VR8iC6N8ZIEP9PxqyJwTNoouhinfgmlnCguI7RDOO4f3r3e2M80Q==}
|
||||||
|
engines: {node: '>=14.18'}
|
||||||
|
dependencies:
|
||||||
|
'@sentry-internal/browser-utils': 8.7.0
|
||||||
|
'@sentry/core': 8.7.0
|
||||||
|
'@sentry/types': 8.7.0
|
||||||
|
'@sentry/utils': 8.7.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@sentry/browser@8.7.0:
|
||||||
|
resolution: {integrity: sha512-4EEp+PlcktsMN0p+MdCPl/lghTkq7eOtZjQG9NGhWzfyWrJ3tuL1nsDr2SSivJ1V277F01KtKYo6BFwP2NtBZA==}
|
||||||
|
engines: {node: '>=14.18'}
|
||||||
|
dependencies:
|
||||||
|
'@sentry-internal/browser-utils': 8.7.0
|
||||||
|
'@sentry-internal/feedback': 8.7.0
|
||||||
|
'@sentry-internal/replay': 8.7.0
|
||||||
|
'@sentry-internal/replay-canvas': 8.7.0
|
||||||
|
'@sentry/core': 8.7.0
|
||||||
|
'@sentry/types': 8.7.0
|
||||||
|
'@sentry/utils': 8.7.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@sentry/core@8.7.0:
|
||||||
|
resolution: {integrity: sha512-Sq/46B+5nWmgnCD6dEMZ6HTkKbV/KAdgaSvT8oXDb9OWoPy1jJ/gbLrhLs62KbjuDQk4/vWnOgHiKQbcslSzMw==}
|
||||||
|
engines: {node: '>=14.18'}
|
||||||
|
dependencies:
|
||||||
|
'@sentry/types': 8.7.0
|
||||||
|
'@sentry/utils': 8.7.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@sentry/types@8.7.0:
|
||||||
|
resolution: {integrity: sha512-11KLOKumP6akugVGLvSoEig+JlP0ZEzW3nN9P+ppgdIx9HAxMIh6UvumbieG4/DWjAh2kh6NPNfUw3gk2Gfq1A==}
|
||||||
|
engines: {node: '>=14.18'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@sentry/utils@8.7.0:
|
||||||
|
resolution: {integrity: sha512-aWmcbSoOmrbzll/FkNQFJcCtLAuJLvTYbRKiCSkV3FScA7UaA742HkTZAPFiioALFIESWk/fcGZqtN0s4I281Q==}
|
||||||
|
engines: {node: '>=14.18'}
|
||||||
|
dependencies:
|
||||||
|
'@sentry/types': 8.7.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
|
/@sentry/wasm@8.7.0:
|
||||||
|
resolution: {integrity: sha512-kxzSR/H7A+h8c28gN4vivrukdk6wphf2Oz0MVQd18up1Fbwqmy226hCuAqZgw7aaPI4gfwatEQFm0Higghr9tA==}
|
||||||
|
engines: {node: '>=14.18'}
|
||||||
|
dependencies:
|
||||||
|
'@sentry/browser': 8.7.0
|
||||||
|
'@sentry/core': 8.7.0
|
||||||
|
'@sentry/types': 8.7.0
|
||||||
|
'@sentry/utils': 8.7.0
|
||||||
|
dev: false
|
||||||
|
|
||||||
/@solid-primitives/event-listener@2.3.3(solid-js@1.8.16):
|
/@solid-primitives/event-listener@2.3.3(solid-js@1.8.16):
|
||||||
resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==}
|
resolution: {integrity: sha512-DAJbl+F0wrFW2xmcV8dKMBhk9QLVLuBSW+TR4JmIfTaObxd13PuL7nqaXnaYKDWOYa6otB00qcCUIGbuIhSUgQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
// Inspired by https://github.com/solidjs/solid-realworld/blob/main/src/store/index.js
|
// Inspired by https://github.com/solidjs/solid-realworld/blob/main/src/store/index.js
|
||||||
import { MutinyBalance, TagItem } from "@mutinywallet/mutiny-wasm";
|
import { MutinyBalance, TagItem } from "@mutinywallet/mutiny-wasm";
|
||||||
|
import * as Sentry from "@sentry/browser";
|
||||||
import { useNavigate, useSearchParams } from "@solidjs/router";
|
import { useNavigate, useSearchParams } from "@solidjs/router";
|
||||||
import { SecureStoragePlugin } from "capacitor-secure-storage-plugin";
|
import { SecureStoragePlugin } from "capacitor-secure-storage-plugin";
|
||||||
import { Remote } from "comlink";
|
import { Remote } from "comlink";
|
||||||
import {
|
import {
|
||||||
|
DEV,
|
||||||
createContext,
|
createContext,
|
||||||
onCleanup,
|
onCleanup,
|
||||||
onMount,
|
onMount,
|
||||||
@@ -41,10 +43,42 @@ type LoadStage =
|
|||||||
|
|
||||||
export type WalletWorker = Remote<typeof import("../workers/walletWorker")>;
|
export type WalletWorker = Remote<typeof import("../workers/walletWorker")>;
|
||||||
|
|
||||||
|
const RELEASE_VERSION = import.meta.env.__RELEASE_VERSION__;
|
||||||
|
const sentryenv = import.meta.env.VITE_SENTRY_ENVIRONMENT || (DEV ? "dev" : "prod");
|
||||||
|
|
||||||
export const makeMegaStoreContext = () => {
|
export const makeMegaStoreContext = () => {
|
||||||
const [searchParams] = useSearchParams();
|
const [searchParams] = useSearchParams();
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
// initialize both inside worker and outside
|
||||||
|
// TODO figure out when to set or not
|
||||||
|
Sentry.init({
|
||||||
|
dsn: "https://192c556849619517322719962a057376@sen.mutinywallet.com/2",
|
||||||
|
environment: sentryenv,
|
||||||
|
release: "mutiny-web@" + RELEASE_VERSION,
|
||||||
|
integrations: [
|
||||||
|
Sentry.browserTracingIntegration(),
|
||||||
|
Sentry.replayIntegration()
|
||||||
|
],
|
||||||
|
|
||||||
|
initialScope: {
|
||||||
|
tags: { component: "main" }
|
||||||
|
},
|
||||||
|
|
||||||
|
// Set tracesSampleRate to 1.0 to capture 100%
|
||||||
|
// of transactions for performance monitoring.
|
||||||
|
// We recommend adjusting this value in production
|
||||||
|
tracesSampleRate: 1.0,
|
||||||
|
|
||||||
|
// Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled
|
||||||
|
tracePropagationTargets: ["localhost", /^https:\/\/mutinywallet\.com/],
|
||||||
|
|
||||||
|
// Capture Replay for 10% of all sessions,
|
||||||
|
// plus 100% of sessions with an error
|
||||||
|
replaysSessionSampleRate: 0.1,
|
||||||
|
replaysOnErrorSampleRate: 1.0
|
||||||
|
});
|
||||||
|
|
||||||
// Not actually a shared worker, but it's the same code
|
// Not actually a shared worker, but it's the same code
|
||||||
const sw = new ComlinkWorker<typeof import("../workers/walletWorker")>(
|
const sw = new ComlinkWorker<typeof import("../workers/walletWorker")>(
|
||||||
new URL("../workers/walletWorker", import.meta.url),
|
new URL("../workers/walletWorker", import.meta.url),
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { DEV } from "solid-js";
|
||||||
import initMutinyWallet, {
|
import initMutinyWallet, {
|
||||||
ActivityItem,
|
ActivityItem,
|
||||||
BudgetPeriod,
|
BudgetPeriod,
|
||||||
@@ -17,6 +18,7 @@ import initMutinyWallet, {
|
|||||||
PendingNwcInvoice,
|
PendingNwcInvoice,
|
||||||
TagItem
|
TagItem
|
||||||
} from "@mutinywallet/mutiny-wasm";
|
} from "@mutinywallet/mutiny-wasm";
|
||||||
|
import * as Sentry from "@sentry/browser";
|
||||||
|
|
||||||
import { IActivityItem } from "~/components";
|
import { IActivityItem } from "~/components";
|
||||||
import { MutinyWalletSettingStrings } from "~/logic/mutinyWalletSetup";
|
import { MutinyWalletSettingStrings } from "~/logic/mutinyWalletSetup";
|
||||||
@@ -26,6 +28,9 @@ import {
|
|||||||
MutinyFederationIdentity
|
MutinyFederationIdentity
|
||||||
} from "~/routes/settings";
|
} from "~/routes/settings";
|
||||||
|
|
||||||
|
const RELEASE_VERSION = import.meta.env.__RELEASE_VERSION__;
|
||||||
|
const sentryenv = import.meta.env.VITE_SENTRY_ENVIRONMENT || (DEV ? "dev" : "prod");
|
||||||
|
|
||||||
// For some reason {...invoice } doesn't bring across the paid field
|
// For some reason {...invoice } doesn't bring across the paid field
|
||||||
function destructureInvoice(invoice: MutinyInvoice): MutinyInvoice {
|
function destructureInvoice(invoice: MutinyInvoice): MutinyInvoice {
|
||||||
return {
|
return {
|
||||||
@@ -95,6 +100,51 @@ export async function setupMutinyWallet(
|
|||||||
shouldZapHodl?: boolean,
|
shouldZapHodl?: boolean,
|
||||||
nsec?: string
|
nsec?: string
|
||||||
): Promise<boolean> {
|
): Promise<boolean> {
|
||||||
|
// initialize both inside worker and outside
|
||||||
|
// TODO figure out when to set or not
|
||||||
|
Sentry.init({
|
||||||
|
dsn: "https://192c556849619517322719962a057376@sen.mutinywallet.com/2",
|
||||||
|
environment: sentryenv,
|
||||||
|
release: "mutiny-web@" + RELEASE_VERSION,
|
||||||
|
integrations: [
|
||||||
|
Sentry.captureConsoleIntegration(), // grab all mutiny-node console lines
|
||||||
|
Sentry.browserTracingIntegration(),
|
||||||
|
Sentry.replayIntegration()
|
||||||
|
],
|
||||||
|
|
||||||
|
initialScope: {
|
||||||
|
tags: { component: "worker" }
|
||||||
|
},
|
||||||
|
|
||||||
|
// ignore any hex larger than 20 char
|
||||||
|
ignoreErrors: [/(?:[0-9a-fA-F]{20,}\b)+/],
|
||||||
|
|
||||||
|
// only do a new issue for errors w/ or w/o exceptions, and warnings
|
||||||
|
beforeSend(event, hint) {
|
||||||
|
const error = hint.originalException;
|
||||||
|
if (error && error.message) {
|
||||||
|
return event;
|
||||||
|
} else if (event.level == "warning" || event.level == "error") {
|
||||||
|
return event;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Set tracesSampleRate to 1.0 to capture 100%
|
||||||
|
// of transactions for performance monitoring.
|
||||||
|
// We recommend adjusting this value in production
|
||||||
|
tracesSampleRate: 1.0,
|
||||||
|
|
||||||
|
// Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled
|
||||||
|
tracePropagationTargets: ["localhost", /^https:\/\/mutinywallet\.com/],
|
||||||
|
|
||||||
|
// Capture Replay for 10% of all sessions,
|
||||||
|
// plus 100% of sessions with an error
|
||||||
|
replaysSessionSampleRate: 0.1,
|
||||||
|
replaysOnErrorSampleRate: 1.0
|
||||||
|
});
|
||||||
|
|
||||||
console.log("Starting setup...");
|
console.log("Starting setup...");
|
||||||
|
|
||||||
const {
|
const {
|
||||||
|
|||||||
Reference in New Issue
Block a user