remove sentry
This commit is contained in:
@@ -24,8 +24,6 @@
|
||||
"@mui/material": "^7.3.2",
|
||||
"@remix-run/router": "^1.23.0",
|
||||
"@rollup/plugin-node-resolve": "^16.0.1",
|
||||
"@sentry/react": "^10.11.0",
|
||||
"@sentry/vite-plugin": "^4.3.0",
|
||||
"@tanstack/react-query": "^5.87.4",
|
||||
"@tanstack/react-query-devtools": "^5.87.4",
|
||||
"@tanstack/react-router": "^1.131.41",
|
||||
|
||||
315
pnpm-lock.yaml
generated
315
pnpm-lock.yaml
generated
@@ -47,12 +47,6 @@ importers:
|
||||
'@rollup/plugin-node-resolve':
|
||||
specifier: ^16.0.1
|
||||
version: 16.0.1(rollup@4.50.1)
|
||||
'@sentry/react':
|
||||
specifier: ^10.11.0
|
||||
version: 10.11.0(react@19.1.1)
|
||||
'@sentry/vite-plugin':
|
||||
specifier: ^4.3.0
|
||||
version: 4.3.0
|
||||
'@tanstack/react-query':
|
||||
specifier: ^5.87.4
|
||||
version: 5.87.4(react@19.1.1)
|
||||
@@ -1867,100 +1861,6 @@ packages:
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@sentry-internal/browser-utils@10.11.0':
|
||||
resolution: {integrity: sha512-fnMlz5ntap6x4vRsLOHwPqXh7t82StgAiRt+EaqcMX0t9l8C0w0df8qwrONKXvE5GdHWTNFJj5qR15FERSkg3Q==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
'@sentry-internal/feedback@10.11.0':
|
||||
resolution: {integrity: sha512-ADey51IIaa29kepb8B7aSgSGSrcyT7QZdRsN1rhitefzrruHzpSUci5c2EPIvmWfKJq8Wnvukm9BHXZXAAIOzA==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
'@sentry-internal/replay-canvas@10.11.0':
|
||||
resolution: {integrity: sha512-brWQ90IYQyZr44IpTprlmvbtz4l2ABzLdpP94Egh12Onf/q6n4CjLKaA25N5kX0uggHqX1Rs7dNaG0mP3ETHhA==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
'@sentry-internal/replay@10.11.0':
|
||||
resolution: {integrity: sha512-t4M2bxMp2rKGK/l7bkVWjN+xVw9H9V12jAeXmO/Fskz2RcG1ZNLQnKSx/W/zCRMk8k7xOQFsfiApq+zDN+ziKA==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
'@sentry/babel-plugin-component-annotate@4.3.0':
|
||||
resolution: {integrity: sha512-OuxqBprXRyhe8Pkfyz/4yHQJc5c3lm+TmYWSSx8u48g5yKewSQDOxkiLU5pAk3WnbLPy8XwU/PN+2BG0YFU9Nw==}
|
||||
engines: {node: '>= 14'}
|
||||
|
||||
'@sentry/browser@10.11.0':
|
||||
resolution: {integrity: sha512-qemaKCJKJHHCyGBpdLq23xL5u9Xvir20XN7YFTnHcEq4Jvj0GoWsslxKi5cQB2JvpYn62WxTiDgVLeQlleZhSg==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
'@sentry/bundler-plugin-core@4.3.0':
|
||||
resolution: {integrity: sha512-dmR4DJhJ4jqVWGWppuTL2blNFqOZZnt4aLkewbD1myFG3KVfUx8CrMQWEmGjkgPOtj5TO6xH9PyTJjXC6o5tnA==}
|
||||
engines: {node: '>= 14'}
|
||||
|
||||
'@sentry/cli-darwin@2.53.0':
|
||||
resolution: {integrity: sha512-NNPfpILMwKgpHiyJubHHuauMKltkrgLQ5tvMdxNpxY60jBNdo5VJtpESp4XmXlnidzV4j1z61V4ozU6ttDgt5Q==}
|
||||
engines: {node: '>=10'}
|
||||
os: [darwin]
|
||||
|
||||
'@sentry/cli-linux-arm64@2.53.0':
|
||||
resolution: {integrity: sha512-xY/CZ1dVazsSCvTXzKpAgXaRqfljVfdrFaYZRUaRPf1ZJRGa3dcrivoOhSIeG/p5NdYtMvslMPY9Gm2MT0M83A==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [arm64]
|
||||
os: [linux, freebsd, android]
|
||||
|
||||
'@sentry/cli-linux-arm@2.53.0':
|
||||
resolution: {integrity: sha512-NdRzQ15Ht83qG0/Lyu11ciy/Hu/oXbbtJUgwzACc7bWvHQA8xEwTsehWexqn1529Kfc5EjuZ0Wmj3MHmp+jOWw==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [arm]
|
||||
os: [linux, freebsd, android]
|
||||
|
||||
'@sentry/cli-linux-i686@2.53.0':
|
||||
resolution: {integrity: sha512-0REmBibGAB4jtqt9S6JEsFF4QybzcXHPcHtJjgMi5T0ueh952uG9wLzjSxQErCsxTKF+fL8oG0Oz5yKBuCwCCQ==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [x86, ia32]
|
||||
os: [linux, freebsd, android]
|
||||
|
||||
'@sentry/cli-linux-x64@2.53.0':
|
||||
resolution: {integrity: sha512-9UGJL+Vy5N/YL1EWPZ/dyXLkShlNaDNrzxx4G7mTS9ywjg+BIuemo6rnN7w43K1NOjObTVO6zY0FwumJ1pCyLg==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [x64]
|
||||
os: [linux, freebsd, android]
|
||||
|
||||
'@sentry/cli-win32-arm64@2.53.0':
|
||||
resolution: {integrity: sha512-G1kjOjrjMBY20rQcJV2GA8KQE74ufmROCDb2GXYRfjvb1fKAsm4Oh8N5+Tqi7xEHdjQoLPkE4CNW0aH68JSUDQ==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@sentry/cli-win32-i686@2.53.0':
|
||||
resolution: {integrity: sha512-qbGTZUzesuUaPtY9rPXdNfwLqOZKXrJRC1zUFn52hdo6B+Dmv0m/AHwRVFHZP53Tg1NCa8bDei2K/uzRN0dUZw==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [x86, ia32]
|
||||
os: [win32]
|
||||
|
||||
'@sentry/cli-win32-x64@2.53.0':
|
||||
resolution: {integrity: sha512-1TXYxYHtwgUq5KAJt3erRzzUtPqg7BlH9T7MdSPHjJatkrr/kwZqnVe2H6Arr/5NH891vOlIeSPHBdgJUAD69g==}
|
||||
engines: {node: '>=10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@sentry/cli@2.53.0':
|
||||
resolution: {integrity: sha512-n2ZNb+5Z6AZKQSI0SusQ7ZzFL637mfw3Xh4C3PEyVSn9LiF683fX0TTq8OeGmNZQS4maYfS95IFD+XpydU0dEA==}
|
||||
engines: {node: '>= 10'}
|
||||
hasBin: true
|
||||
|
||||
'@sentry/core@10.11.0':
|
||||
resolution: {integrity: sha512-39Rxn8cDXConx3+SKOCAhW+/hklM7UDaz+U1OFzFMDlT59vXSpfI6bcXtNiFDrbOxlQ2hX8yAqx8YRltgSftoA==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
'@sentry/react@10.11.0':
|
||||
resolution: {integrity: sha512-bE4lJ5Ni/n9JUdLWGG99yucY0/zOUXjKl9gfSTkvUvOiAIX/bY0Y4WgOqeWySvbMz679ZdOwF34k8RA/gI7a8g==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
react: ^16.14.0 || 17.x || 18.x || 19.x
|
||||
|
||||
'@sentry/vite-plugin@4.3.0':
|
||||
resolution: {integrity: sha512-MeTAHMmTOgBPMAjeW7/ONyXwgScZdaFFtNiALKcAODnVqC7eoHdSRIWeH5mkLr2Dvs7nqtBaDpKxRjUBgfm9LQ==}
|
||||
engines: {node: '>= 14'}
|
||||
|
||||
'@sinclair/typebox@0.27.8':
|
||||
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
|
||||
|
||||
@@ -2537,10 +2437,6 @@ packages:
|
||||
engines: {node: '>=0.4.0'}
|
||||
hasBin: true
|
||||
|
||||
agent-base@6.0.2:
|
||||
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
|
||||
engines: {node: '>= 6.0.0'}
|
||||
|
||||
agent-base@7.1.4:
|
||||
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
|
||||
engines: {node: '>= 14'}
|
||||
@@ -3163,10 +3059,6 @@ packages:
|
||||
dom-helpers@5.2.1:
|
||||
resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==}
|
||||
|
||||
dotenv@16.6.1:
|
||||
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
dotenv@17.2.2:
|
||||
resolution: {integrity: sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==}
|
||||
engines: {node: '>=12'}
|
||||
@@ -3583,10 +3475,6 @@ packages:
|
||||
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
||||
deprecated: Glob versions prior to v9 are no longer supported
|
||||
|
||||
glob@9.3.5:
|
||||
resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
|
||||
globals@14.0.0:
|
||||
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -3693,10 +3581,6 @@ packages:
|
||||
resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
|
||||
engines: {node: '>=8.0.0'}
|
||||
|
||||
https-proxy-agent@5.0.1:
|
||||
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
|
||||
engines: {node: '>= 6'}
|
||||
|
||||
https-proxy-agent@7.0.6:
|
||||
resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
|
||||
engines: {node: '>= 14'}
|
||||
@@ -4257,10 +4141,6 @@ packages:
|
||||
magic-string@0.30.19:
|
||||
resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
|
||||
|
||||
magic-string@0.30.8:
|
||||
resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==}
|
||||
engines: {node: '>=12'}
|
||||
|
||||
make-error@1.3.6:
|
||||
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
|
||||
|
||||
@@ -4411,10 +4291,6 @@ packages:
|
||||
resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
|
||||
engines: {node: '>=10'}
|
||||
|
||||
minimatch@8.0.4:
|
||||
resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
|
||||
minimatch@9.0.5:
|
||||
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
@@ -4422,10 +4298,6 @@ packages:
|
||||
minimist@1.2.8:
|
||||
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
|
||||
|
||||
minipass@4.2.8:
|
||||
resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
minipass@7.1.2:
|
||||
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
@@ -4494,15 +4366,6 @@ packages:
|
||||
node-addon-api@7.1.1:
|
||||
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
|
||||
|
||||
node-fetch@2.7.0:
|
||||
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
|
||||
engines: {node: 4.x || >=6.0.0}
|
||||
peerDependencies:
|
||||
encoding: ^0.1.0
|
||||
peerDependenciesMeta:
|
||||
encoding:
|
||||
optional: true
|
||||
|
||||
node-int64@0.4.0:
|
||||
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
|
||||
|
||||
@@ -4796,10 +4659,6 @@ packages:
|
||||
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
|
||||
engines: {node: '>= 0.6.0'}
|
||||
|
||||
progress@2.0.3:
|
||||
resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
|
||||
promise@8.3.0:
|
||||
resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==}
|
||||
|
||||
@@ -5703,9 +5562,6 @@ packages:
|
||||
resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
|
||||
engines: {node: '>=16'}
|
||||
|
||||
tr46@0.0.3:
|
||||
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
|
||||
|
||||
tr46@5.1.1:
|
||||
resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
|
||||
engines: {node: '>=18'}
|
||||
@@ -5861,9 +5717,6 @@ packages:
|
||||
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
|
||||
engines: {node: '>= 0.8'}
|
||||
|
||||
unplugin@1.0.1:
|
||||
resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==}
|
||||
|
||||
unplugin@2.3.10:
|
||||
resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==}
|
||||
engines: {node: '>=18.12.0'}
|
||||
@@ -6058,9 +5911,6 @@ packages:
|
||||
resolution: {integrity: sha512-ZzxBf288iALJseijWelmECm/1x7ZwQn3sMYIkDr2VvZp7r6SEKuT8D0O9Wiq6L9Nl5mazrOMcmiZE/2NCenaxw==}
|
||||
engines: {node: '>=8.10.0'}
|
||||
|
||||
webidl-conversions@3.0.1:
|
||||
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
|
||||
|
||||
webidl-conversions@7.0.0:
|
||||
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
|
||||
engines: {node: '>=12'}
|
||||
@@ -6069,9 +5919,6 @@ packages:
|
||||
resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
|
||||
webpack-virtual-modules@0.5.0:
|
||||
resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==}
|
||||
|
||||
webpack-virtual-modules@0.6.2:
|
||||
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
|
||||
|
||||
@@ -6100,9 +5947,6 @@ packages:
|
||||
resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
whatwg-url@5.0.0:
|
||||
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
|
||||
|
||||
which-boxed-primitive@1.1.1:
|
||||
resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
|
||||
engines: {node: '>= 0.4'}
|
||||
@@ -7930,109 +7774,6 @@ snapshots:
|
||||
'@rollup/rollup-win32-x64-msvc@4.50.1':
|
||||
optional: true
|
||||
|
||||
'@sentry-internal/browser-utils@10.11.0':
|
||||
dependencies:
|
||||
'@sentry/core': 10.11.0
|
||||
|
||||
'@sentry-internal/feedback@10.11.0':
|
||||
dependencies:
|
||||
'@sentry/core': 10.11.0
|
||||
|
||||
'@sentry-internal/replay-canvas@10.11.0':
|
||||
dependencies:
|
||||
'@sentry-internal/replay': 10.11.0
|
||||
'@sentry/core': 10.11.0
|
||||
|
||||
'@sentry-internal/replay@10.11.0':
|
||||
dependencies:
|
||||
'@sentry-internal/browser-utils': 10.11.0
|
||||
'@sentry/core': 10.11.0
|
||||
|
||||
'@sentry/babel-plugin-component-annotate@4.3.0': {}
|
||||
|
||||
'@sentry/browser@10.11.0':
|
||||
dependencies:
|
||||
'@sentry-internal/browser-utils': 10.11.0
|
||||
'@sentry-internal/feedback': 10.11.0
|
||||
'@sentry-internal/replay': 10.11.0
|
||||
'@sentry-internal/replay-canvas': 10.11.0
|
||||
'@sentry/core': 10.11.0
|
||||
|
||||
'@sentry/bundler-plugin-core@4.3.0':
|
||||
dependencies:
|
||||
'@babel/core': 7.28.4
|
||||
'@sentry/babel-plugin-component-annotate': 4.3.0
|
||||
'@sentry/cli': 2.53.0
|
||||
dotenv: 16.6.1
|
||||
find-up: 5.0.0
|
||||
glob: 9.3.5
|
||||
magic-string: 0.30.8
|
||||
unplugin: 1.0.1
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
- supports-color
|
||||
|
||||
'@sentry/cli-darwin@2.53.0':
|
||||
optional: true
|
||||
|
||||
'@sentry/cli-linux-arm64@2.53.0':
|
||||
optional: true
|
||||
|
||||
'@sentry/cli-linux-arm@2.53.0':
|
||||
optional: true
|
||||
|
||||
'@sentry/cli-linux-i686@2.53.0':
|
||||
optional: true
|
||||
|
||||
'@sentry/cli-linux-x64@2.53.0':
|
||||
optional: true
|
||||
|
||||
'@sentry/cli-win32-arm64@2.53.0':
|
||||
optional: true
|
||||
|
||||
'@sentry/cli-win32-i686@2.53.0':
|
||||
optional: true
|
||||
|
||||
'@sentry/cli-win32-x64@2.53.0':
|
||||
optional: true
|
||||
|
||||
'@sentry/cli@2.53.0':
|
||||
dependencies:
|
||||
https-proxy-agent: 5.0.1
|
||||
node-fetch: 2.7.0
|
||||
progress: 2.0.3
|
||||
proxy-from-env: 1.1.0
|
||||
which: 2.0.2
|
||||
optionalDependencies:
|
||||
'@sentry/cli-darwin': 2.53.0
|
||||
'@sentry/cli-linux-arm': 2.53.0
|
||||
'@sentry/cli-linux-arm64': 2.53.0
|
||||
'@sentry/cli-linux-i686': 2.53.0
|
||||
'@sentry/cli-linux-x64': 2.53.0
|
||||
'@sentry/cli-win32-arm64': 2.53.0
|
||||
'@sentry/cli-win32-i686': 2.53.0
|
||||
'@sentry/cli-win32-x64': 2.53.0
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
- supports-color
|
||||
|
||||
'@sentry/core@10.11.0': {}
|
||||
|
||||
'@sentry/react@10.11.0(react@19.1.1)':
|
||||
dependencies:
|
||||
'@sentry/browser': 10.11.0
|
||||
'@sentry/core': 10.11.0
|
||||
hoist-non-react-statics: 3.3.2
|
||||
react: 19.1.1
|
||||
|
||||
'@sentry/vite-plugin@4.3.0':
|
||||
dependencies:
|
||||
'@sentry/bundler-plugin-core': 4.3.0
|
||||
unplugin: 1.0.1
|
||||
transitivePeerDependencies:
|
||||
- encoding
|
||||
- supports-color
|
||||
|
||||
'@sinclair/typebox@0.27.8': {}
|
||||
|
||||
'@sinclair/typebox@0.34.41': {}
|
||||
@@ -8721,12 +8462,6 @@ snapshots:
|
||||
|
||||
acorn@8.15.0: {}
|
||||
|
||||
agent-base@6.0.2:
|
||||
dependencies:
|
||||
debug: 4.4.1(supports-color@10.2.2)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
agent-base@7.1.4: {}
|
||||
|
||||
ajv-formats@2.1.1(ajv@8.17.1):
|
||||
@@ -9417,8 +9152,6 @@ snapshots:
|
||||
'@babel/runtime': 7.28.4
|
||||
csstype: 3.1.3
|
||||
|
||||
dotenv@16.6.1: {}
|
||||
|
||||
dotenv@17.2.2: {}
|
||||
|
||||
dunder-proto@1.0.1:
|
||||
@@ -9995,13 +9728,6 @@ snapshots:
|
||||
once: 1.4.0
|
||||
path-is-absolute: 1.0.1
|
||||
|
||||
glob@9.3.5:
|
||||
dependencies:
|
||||
fs.realpath: 1.0.0
|
||||
minimatch: 8.0.4
|
||||
minipass: 4.2.8
|
||||
path-scurry: 1.11.1
|
||||
|
||||
globals@14.0.0: {}
|
||||
|
||||
globalthis@1.0.4:
|
||||
@@ -10115,13 +9841,6 @@ snapshots:
|
||||
transitivePeerDependencies:
|
||||
- debug
|
||||
|
||||
https-proxy-agent@5.0.1:
|
||||
dependencies:
|
||||
agent-base: 6.0.2
|
||||
debug: 4.4.1(supports-color@10.2.2)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
https-proxy-agent@7.0.6(supports-color@10.2.2):
|
||||
dependencies:
|
||||
agent-base: 7.1.4
|
||||
@@ -10701,10 +10420,6 @@ snapshots:
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
|
||||
magic-string@0.30.8:
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
|
||||
make-error@1.3.6:
|
||||
optional: true
|
||||
|
||||
@@ -10952,18 +10667,12 @@ snapshots:
|
||||
dependencies:
|
||||
brace-expansion: 2.0.2
|
||||
|
||||
minimatch@8.0.4:
|
||||
dependencies:
|
||||
brace-expansion: 2.0.2
|
||||
|
||||
minimatch@9.0.5:
|
||||
dependencies:
|
||||
brace-expansion: 2.0.2
|
||||
|
||||
minimist@1.2.8: {}
|
||||
|
||||
minipass@4.2.8: {}
|
||||
|
||||
minipass@7.1.2: {}
|
||||
|
||||
mkdirp@1.0.4: {}
|
||||
@@ -11020,10 +10729,6 @@ snapshots:
|
||||
node-addon-api@7.1.1:
|
||||
optional: true
|
||||
|
||||
node-fetch@2.7.0:
|
||||
dependencies:
|
||||
whatwg-url: 5.0.0
|
||||
|
||||
node-int64@0.4.0: {}
|
||||
|
||||
node-releases@2.0.20: {}
|
||||
@@ -11303,8 +11008,6 @@ snapshots:
|
||||
|
||||
process@0.11.10: {}
|
||||
|
||||
progress@2.0.3: {}
|
||||
|
||||
promise@8.3.0:
|
||||
dependencies:
|
||||
asap: 2.0.6
|
||||
@@ -12327,8 +12030,6 @@ snapshots:
|
||||
dependencies:
|
||||
tldts: 6.1.86
|
||||
|
||||
tr46@0.0.3: {}
|
||||
|
||||
tr46@5.1.1:
|
||||
dependencies:
|
||||
punycode: 2.3.1
|
||||
@@ -12491,13 +12192,6 @@ snapshots:
|
||||
|
||||
unpipe@1.0.0: {}
|
||||
|
||||
unplugin@1.0.1:
|
||||
dependencies:
|
||||
acorn: 8.15.0
|
||||
chokidar: 3.6.0
|
||||
webpack-sources: 3.3.3
|
||||
webpack-virtual-modules: 0.5.0
|
||||
|
||||
unplugin@2.3.10:
|
||||
dependencies:
|
||||
'@jridgewell/remapping': 2.3.5
|
||||
@@ -12681,14 +12375,10 @@ snapshots:
|
||||
|
||||
weakmap-polyfill@2.0.4: {}
|
||||
|
||||
webidl-conversions@3.0.1: {}
|
||||
|
||||
webidl-conversions@7.0.0: {}
|
||||
|
||||
webpack-sources@3.3.3: {}
|
||||
|
||||
webpack-virtual-modules@0.5.0: {}
|
||||
|
||||
webpack-virtual-modules@0.6.2: {}
|
||||
|
||||
webpack@5.101.0(@swc/core@1.13.5(@swc/helpers@0.5.17)):
|
||||
@@ -12736,11 +12426,6 @@ snapshots:
|
||||
tr46: 5.1.1
|
||||
webidl-conversions: 7.0.0
|
||||
|
||||
whatwg-url@5.0.0:
|
||||
dependencies:
|
||||
tr46: 0.0.3
|
||||
webidl-conversions: 3.0.1
|
||||
|
||||
which-boxed-primitive@1.1.1:
|
||||
dependencies:
|
||||
is-bigint: 1.1.0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import '@/bridge';
|
||||
import { router } from '@/shared/configs/sentry';
|
||||
import { router } from '@/shared/configs/router';
|
||||
import { Toasts } from '@/shared/ui/toasts/toasts';
|
||||
import { useInitTheme } from './hooks';
|
||||
import { RouterProvider } from 'react-router-dom';
|
||||
|
||||
@@ -2,7 +2,7 @@ import { linkBridge, registerWebMethod } from '@webview-bridge/web';
|
||||
import { NavigateOptions } from 'react-router-dom';
|
||||
|
||||
import { AppBridge, AppPostMessageSchema } from './output';
|
||||
import { router } from './shared/configs/sentry';
|
||||
import { router } from './shared/configs/router';
|
||||
|
||||
// Register functions in the registerWebMethod object in your web code
|
||||
export const webBridge = registerWebMethod({
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { Route } from 'react-router-dom';
|
||||
import { SentryRoutes } from '@/shared/configs/sentry';
|
||||
import { Route, Routes } from 'react-router-dom';
|
||||
import { ROUTE_NAMES } from '@/shared/constants/route-names';
|
||||
import { UserManagePage } from './user/manage-page';
|
||||
import { UserLoginAuthInfoPage } from './user/login-auth-info-page';
|
||||
@@ -14,7 +13,7 @@ export const AccountPages = () => {
|
||||
|
||||
return (
|
||||
<>
|
||||
<SentryRoutes>
|
||||
<Routes>
|
||||
<Route path={ROUTE_NAMES.account.user.base}>
|
||||
<Route path={ROUTE_NAMES.account.user.manage} element={<UserManagePage />} />
|
||||
<Route path={ROUTE_NAMES.account.user.loginAuthInfo} element={<UserLoginAuthInfoPage />} />
|
||||
@@ -27,7 +26,7 @@ export const AccountPages = () => {
|
||||
<Route path={ROUTE_NAMES.account.password.modifyLoginPassword} element={<PasswordModifyLoginPasswordPage />} />
|
||||
<Route path={ROUTE_NAMES.account.password.modifyCancelPassword} element={<PasswordModifyCancelPasswordPage />} />
|
||||
</Route>
|
||||
</SentryRoutes>
|
||||
</Routes>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { Route } from 'react-router-dom';
|
||||
import { SentryRoutes } from '@/shared/configs/sentry';
|
||||
import { Route, Routes } from 'react-router-dom';
|
||||
import { ROUTE_NAMES } from '@/shared/constants/route-names';
|
||||
import { ListPage } from './list-page';
|
||||
import { ArsListPage } from './ars/list-page';
|
||||
@@ -35,7 +34,7 @@ import { FaceAuthPage } from './face-auth/face-auth-page';
|
||||
export const AdditionalServicePages = () => {
|
||||
return (
|
||||
<>
|
||||
<SentryRoutes>
|
||||
<Routes>
|
||||
<Route path={ROUTE_NAMES.additionalService.list} element={<ListPage />} />
|
||||
<Route path={ROUTE_NAMES.additionalService.ars.base}>
|
||||
<Route path={ROUTE_NAMES.additionalService.ars.list} element={<ArsListPage />} />
|
||||
@@ -85,7 +84,7 @@ export const AdditionalServicePages = () => {
|
||||
<Route path={ROUTE_NAMES.additionalService.faceAuth.base}>
|
||||
<Route path={ROUTE_NAMES.additionalService.faceAuth.list} element={<FaceAuthPage />} />
|
||||
</Route>
|
||||
</SentryRoutes>
|
||||
</Routes>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
import { Route } from 'react-router-dom';
|
||||
import { SentryRoutes } from '@/shared/configs/sentry';
|
||||
import { Route, Routes } from 'react-router-dom';
|
||||
import { ROUTE_NAMES } from '@/shared/constants/route-names';
|
||||
import { ListPage } from './list/list-page';
|
||||
|
||||
export const AlarmPages = () => {
|
||||
return (
|
||||
<>
|
||||
<SentryRoutes>
|
||||
<Routes>
|
||||
<Route path={ROUTE_NAMES.alarm.list} element={<ListPage />} />
|
||||
</SentryRoutes>
|
||||
</Routes>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { Route } from 'react-router-dom';
|
||||
import { SentryRoutes } from '@/shared/configs/sentry';
|
||||
import { Route, Routes } from 'react-router-dom';
|
||||
import { ROUTE_NAMES } from '@/shared/constants/route-names';
|
||||
import { InfoPage } from './info/info-page';
|
||||
import { RegistrationStatusPage } from './registration-status/registration-status-page';
|
||||
@@ -7,10 +6,10 @@ import { RegistrationStatusPage } from './registration-status/registration-statu
|
||||
export const MerchantPages = () => {
|
||||
return (
|
||||
<>
|
||||
<SentryRoutes>
|
||||
<Routes>
|
||||
<Route path={ROUTE_NAMES.merchant.info} element={<InfoPage />} />
|
||||
<Route path={ROUTE_NAMES.merchant.registrationStatus} element={<RegistrationStatusPage />} />
|
||||
</SentryRoutes>
|
||||
</Routes>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { Route } from 'react-router-dom';
|
||||
import { SentryRoutes } from '@/shared/configs/sentry';
|
||||
import { Route, Routes } from 'react-router-dom';
|
||||
import { ROUTE_NAMES } from '@/shared/constants/route-names';
|
||||
import { InfoPage } from './info/info-page';
|
||||
import { NotificationDataPage } from './notification-data/notification-data-page';
|
||||
@@ -7,10 +6,10 @@ import { NotificationDataPage } from './notification-data/notification-data-page
|
||||
export const PaymentPages = () => {
|
||||
return (
|
||||
<>
|
||||
<SentryRoutes>
|
||||
<Routes>
|
||||
<Route path={ROUTE_NAMES.payment.info} element={<InfoPage />} />
|
||||
<Route path={ROUTE_NAMES.payment.notificationData} element={<NotificationDataPage />} />
|
||||
</SentryRoutes>
|
||||
</Routes>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { Route } from 'react-router-dom';
|
||||
import { SentryRoutes } from '@/shared/configs/sentry';
|
||||
import { Route, Routes } from 'react-router-dom';
|
||||
import { ROUTE_NAMES } from '@/shared/constants/route-names';
|
||||
import { CalendarPage } from './calendar/calendar-page';
|
||||
import { ListPage } from './list/list-page';
|
||||
@@ -7,10 +6,10 @@ import { ListPage } from './list/list-page';
|
||||
export const SettlementPages = () => {
|
||||
return (
|
||||
<>
|
||||
<SentryRoutes>
|
||||
<Routes>
|
||||
<Route path={ROUTE_NAMES.settlement.calendar} element={<CalendarPage />} />
|
||||
<Route path={ROUTE_NAMES.settlement.list} element={<ListPage />} />
|
||||
</SentryRoutes>
|
||||
</Routes>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { Route } from 'react-router-dom';
|
||||
import { SentryRoutes } from '@/shared/configs/sentry';
|
||||
import { Route, Routes } from 'react-router-dom';
|
||||
import { ROUTE_NAMES } from '@/shared/constants/route-names';
|
||||
import { NoticeListPage } from './notice/list-page';
|
||||
import { FaqListPage } from './faq/list-page';
|
||||
@@ -9,7 +8,7 @@ import { QnaRegisterPage } from './qna/register-page';
|
||||
export const SupportPages = () => {
|
||||
return (
|
||||
<>
|
||||
<SentryRoutes>
|
||||
<Routes>
|
||||
<Route path={ROUTE_NAMES.support.notice.base}>
|
||||
<Route path={ROUTE_NAMES.support.notice.list} element={<NoticeListPage />} />
|
||||
<Route path={ROUTE_NAMES.support.notice.list + '/:seq'} element={<NoticeListPage />} />
|
||||
@@ -22,7 +21,7 @@ export const SupportPages = () => {
|
||||
<Route path={ROUTE_NAMES.support.qna.list + '/:seq'} element={<QnaListPage />} />
|
||||
<Route path={ROUTE_NAMES.support.qna.register} element={<QnaRegisterPage />} />
|
||||
</Route>
|
||||
</SentryRoutes>
|
||||
</Routes>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
import { Route } from 'react-router-dom';
|
||||
import { SentryRoutes } from '@/shared/configs/sentry';
|
||||
import { Route, Routes } from 'react-router-dom';
|
||||
import { ROUTE_NAMES } from '@/shared/constants/route-names';
|
||||
import { SamplePage } from './sample/sample-page';
|
||||
|
||||
export const VatReturnPages = () => {
|
||||
return (
|
||||
<>
|
||||
<SentryRoutes>
|
||||
<Routes>
|
||||
<Route path={ROUTE_NAMES.taxInvoice.sample} element={<SamplePage />} />
|
||||
</SentryRoutes>
|
||||
</Routes>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { Route } from 'react-router-dom';
|
||||
import { SentryRoutes } from '@/shared/configs/sentry';
|
||||
import { Route, Routes } from 'react-router-dom';
|
||||
import { ROUTE_NAMES } from '@/shared/constants/route-names';
|
||||
import { AllTransactionListPage } from './all-transaction/list-page';
|
||||
import { AllTransactionCancelPage } from './all-transaction/cancel-page';
|
||||
@@ -12,7 +11,7 @@ import { BillingChargePage } from './billing/charge-page';
|
||||
export const TransactionPages = () => {
|
||||
return (
|
||||
<>
|
||||
<SentryRoutes>
|
||||
<Routes>
|
||||
<Route path={ROUTE_NAMES.transaction.allTransaction.base}>
|
||||
<Route path={ROUTE_NAMES.transaction.allTransaction.list} element={<AllTransactionListPage />} />
|
||||
<Route path={ROUTE_NAMES.transaction.allTransaction.cancel} element={<AllTransactionCancelPage />} />
|
||||
@@ -28,7 +27,7 @@ export const TransactionPages = () => {
|
||||
<Route path={ROUTE_NAMES.transaction.billing.list} element={<BillingListPage />} />
|
||||
<Route path={ROUTE_NAMES.transaction.billing.charge} element={<BillingChargePage />} />
|
||||
</Route>
|
||||
</SentryRoutes>
|
||||
</Routes>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { Route } from 'react-router-dom';
|
||||
import { SentryRoutes } from '@/shared/configs/sentry';
|
||||
import { Route, Routes } from 'react-router-dom';
|
||||
import { ROUTE_NAMES } from '@/shared/constants/route-names';
|
||||
import { ListPage } from './list-page';
|
||||
import { ReferencePage } from './reference-page';
|
||||
@@ -7,10 +6,10 @@ import { ReferencePage } from './reference-page';
|
||||
export const VatReturnPages = () => {
|
||||
return (
|
||||
<>
|
||||
<SentryRoutes>
|
||||
<Routes>
|
||||
<Route path={ROUTE_NAMES.vatReturn.list} element={<ListPage />} />
|
||||
<Route path={ROUTE_NAMES.vatReturn.reference} element={<ReferencePage />} />
|
||||
</SentryRoutes>
|
||||
</Routes>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
import * as Sentry from '@sentry/react';
|
||||
import { OverlayProvider } from 'overlay-kit';
|
||||
import { lazy } from 'react';
|
||||
import {
|
||||
@@ -15,8 +14,6 @@ import { SubLayout } from '@/widgets/sub-layout';
|
||||
import { ROUTE_NAMES } from '@/shared/constants/route-names';
|
||||
import { toCamelCase } from '@/shared/lib/to-camel-case';
|
||||
|
||||
const sentryCreateBrowserRouter = Sentry.wrapCreateBrowserRouterV6(createBrowserRouter);
|
||||
|
||||
const modules = import.meta.glob('~/pages/**/*.tsx');
|
||||
|
||||
const lazyLoad = (path: string) => {
|
||||
@@ -47,13 +44,12 @@ const XkeypadPage = lazyLoad('/src/pages/xkeypad/xkeypad-page');
|
||||
const XkeypadSample = lazyLoad('/src/pages/xkeypad/xkeypad-sample');
|
||||
const TaxInvoicePages = lazyLoad('/src/pages/tax-invoice/tax-invoice-pages');
|
||||
|
||||
export const SentryRoutes = Sentry.withSentryReactRouterV6Routing(Routes);
|
||||
const Pages = () => {
|
||||
return (
|
||||
<OverlayProvider>
|
||||
<GlobalAPIErrorBoundary>
|
||||
<AppChildren />
|
||||
<SentryRoutes>
|
||||
<Routes>
|
||||
<Route element={<SubLayout />}>
|
||||
<Route element={<ProtectedRoute />}>
|
||||
<Route path={ROUTE_NAMES.home} element={<HomePage />} />
|
||||
@@ -73,13 +69,13 @@ const Pages = () => {
|
||||
</Route>
|
||||
<Route path="*" element={<NotFoundError />} />
|
||||
</Route>
|
||||
</SentryRoutes>
|
||||
</Routes>
|
||||
</GlobalAPIErrorBoundary>
|
||||
</OverlayProvider>
|
||||
);
|
||||
};
|
||||
|
||||
export const router = sentryCreateBrowserRouter([
|
||||
export const router = createBrowserRouter([
|
||||
{
|
||||
path: '/',
|
||||
element: <Navigate to={ROUTE_NAMES.home} />,
|
||||
@@ -2,7 +2,7 @@ import { RouterState } from '@remix-run/router';
|
||||
import { useEffect } from 'react';
|
||||
import { NavigationType } from 'react-router';
|
||||
|
||||
import { router } from '@/shared/configs/sentry';
|
||||
import { router } from '@/shared/configs/router';
|
||||
|
||||
type IRouterListener = (state: RouterState) => void;
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import * as path from 'path';
|
||||
import { sentryVitePlugin } from '@sentry/vite-plugin';
|
||||
import legacy from '@vitejs/plugin-legacy';
|
||||
import react from '@vitejs/plugin-react-swc';
|
||||
import { defineConfig, loadEnv } from 'vite';
|
||||
|
||||
@@ -40,7 +40,6 @@ afterAll(() => {
|
||||
server.close();
|
||||
});
|
||||
|
||||
// vi.mock('@sentry/react');
|
||||
vi.mock('zustand');
|
||||
|
||||
vi.mock('~/shared/lib/hooks', () => ({
|
||||
|
||||
Reference in New Issue
Block a user