tailchat-desktop
maintainer zxp19821005
· 0 votes
· scanned 2026-08-03 00:08:14.047287
LOW
View on AUR ↗
Why flagged
The flagged pattern involves using yarn to install dependencies during build, but this is part of a standard build process for a Node.js application sourced from a legitimate GitHub repository; no external or untrusted packages are added beyond the project's own declared dependencies.
Triggered rules
LOW
AI review downgraded a static finding
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 90%): The flagged pattern involves using yarn to install dependencies during build, but this is part of a standard build process for a Node.js application sourced from a legitimate GitHub repository; no external or untrusted packages are added beyond the project's own declared dependencies.
1 higher static finding superseded - not the current verdict (shown for transparency)
MEDIUM
npm/yarn/pnpm install of an undeclared external package
npm_install_external
Runs `npm/yarn/pnpm install <package>` for a package not in source=(), pulling unpinned, unreviewed code at build time. Severity downgraded: the package declares/looks like a Node.js consumer, where build-time installs are expected.
-
PKGBUILD:94
NODE_ENV=development yarn add -D ts-node source-map-support
PKGBUILD
1 offending line(s) highlighted
1
# Maintainer: zxp19821005 <zxp19821005 at 163 dot com>
2
_pkgname=tailchat
3
pkgname="${_pkgname}-desktop"
4
pkgver=1.11.12
5
_electronversion=18
6
_nodeversion=16
7
pkgrel=1
8
pkgdesc="Next generation noIM application in your own workspace, not only another Slack/Discord/Rocket.chat.(Use system-wide electron)"
9
arch=('any')
10
url="https://tailchat.msgbyte.com/"
11
_ghurl="https://github.com/msgbyte/tailchat"
12
license=('Apache-2.0')
13
conflicts=("${pkgname}")
14
depends=(
15
"electron${_electronversion}"
16
)
17
makedepends=(
18
'gendesk'
19
'npm'
20
'nvm'
21
'pnpm'
22
'git'
23
'curl'
24
'jq'
25
)
26
source=(
27
"${pkgname}-${pkgver}::git+${_ghurl}#tag=v${pkgver}"
28
"${pkgname}.sh"
29
)
30
sha256sums=('a0fda9ee3dc390e6afb309661c9514fd205342689c0d85be7a40f97330a331ad'
31
'a774c2f54fbbeeaac3cefc0f7250796d30c86d27f0fd40b7eaf9c0fdb021623d')
32
_ensure_local_nvm() {
33
local NVM_DIR="${srcdir}/.nvm"
34
source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]]
35
nvm install "${_nodeversion}"
36
nvm use "${_nodeversion}"
37
}
38
_get_app_dir() {
39
find "${srcdir}" -type f -name "resources.pak" -exec dirname {} + | head -n 1
40
}
41
_set_build_env() {
42
export ELECTRON_DIST="/usr/lib/electron${_electronversion}"
43
export ELECTRON_SKIP_BINARY_DOWNLOAD=1
44
export SYSTEM_ELECTRON_VERSION="$(electron${_electronversion} -v | sed 's/v//g')"
45
export HOME="${srcdir}/.electron-gyp"
46
mkdir -p "${srcdir}/.electron-gyp"
47
if [[ "$(curl -s ipinfo.io/country)" == *"CN"* ]]; then
48
{
49
export YARN_REGISTRY="https://registry.npmmirror.com"
50
export ELECTRON_MIRROR="https://registry.npmmirror.com/-/binary/electron/"
51
export ELECTRON_BUILDER_BINARIES_MIRROR="https://registry.npmmirror.com/-/binary/electron-builder-binaries/"
52
export NODEJS_ORG_MIRROR="https://npmmirror.com/mirrors/node"
53
export YARN_CACHE_FOLDER="${srcdir}/.yarn/cache"
54
export YARN_PLUGINS_FOLDER="${srcdir}/.yarn/plugins"
55
export YARN_GLOBAL_FOLDER="${srcdir}/.yarn/global"
56
export YARN_USE_HARDLINKS=true
57
# export YARN_BUILD_FROM_SOURCE=true
58
export YARN_LINK_WORKSPACE_PACKAGES=true
59
export YARN_FETCH_RETRIES=3
60
export YARN_FETCH_RETRY_TIMEOUT=10000
61
export YARN_NETWORK_CONCURRENCY=32
62
}
63
find ./ -type f -name "yarn.lock" -exec sed -i "s/registry.yarnpkg.com/registry.npmmirror.com/g" {} +
64
fi
65
}
66
_get_electron_version() {
67
_elec_ver=$(find "${srcdir}" -maxdepth 5 -name "package.json" ! -path "*/node_modules/*" \
68
-exec grep -l '"electron"' {} + | xargs -I{} jq -r '(.devDependencies.electron // .dependencies.electron) // empty' {} 2>/dev/null | head -1)
69
[[ -z "${_elec_ver}" ]] && return 1
70
echo -e "The electron version is: \033[1;31m${_elec_ver%%.*}\033[0m"
71
}
72
prepare() {
73
cd "${srcdir}/${pkgname}-${pkgver}"
74
_get_electron_version
75
sed -i -e "
76
s/@electronversion@/${_electronversion}/g
77
s/@appname@/${pkgname}/g
78
s/@runname@/app.asar/g
79
s/@cfgdirname@/${_pkgname}/g
80
" "${srcdir}/${pkgname}.sh"
81
_set_build_env
82
_ensure_local_nvm
83
gendesk -q -f -n \
84
--pkgname="${_pkgname}-desktop" \
85
--pkgdesc="${pkgdesc}" \
86
--categories="Network" \
87
--name="${pkgname}" \
88
--exec="${pkgname} %U"
89
cd "${srcdir}/${pkgname}-${pkgver}/client/desktop"
90
find src -type f -exec sed -i "s/process.resourcesPath/\'\/usr\/lib\/${pkgname}\'/g" {} \;
91
sed -i "s/\"electron\": \"[^\"]*\"/\"electron\": \"${SYSTEM_ELECTRON_VERSION}\"/g" package.json
92
sed -i "s/\/build//g" -i electron-builder.yml
93
NODE_ENV=development yarn install
94
NODE_ENV=development yarn add -D ts-node source-map-support
95
}
96
build() {
97
cd "${srcdir}/${pkgname}-${pkgver}/client/desktop"
98
_set_build_env
99
_ensure_local_nvm
100
NODE_ENV=production yarn ts-node ./.erb/scripts/clean.js dist
101
NODE_ENV=production yarn run build
102
NODE_ENV=production yarn electron-builder --linux dir -c.electronDist="${electronDist}" --config.asar=false
103
}
104
package() {
105
install -Dm755 "${srcdir}/${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}"
106
install -Dm755 -d "${pkgdir}/usr/lib/${pkgname}"
107
local _app_dir=$(_get_app_dir)
108
cp -a "${_app_dir}/resources/"* "${pkgdir}/usr/lib/${pkgname}/"
109
install -Dm644 "${srcdir}/${pkgname}-${pkgver}/client/desktop/assets/icon.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png"
110
install -Dm644 "${srcdir}/${pkgname}.desktop" -t "${pkgdir}/usr/share/applications"
111
install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}"
112
}
113
Changes since previous scan
--- PKGBUILD @ 2026-07-21 00:24+++ PKGBUILD @ 2026-08-03 00:08@@ -1,7 +1,7 @@ # Maintainer: zxp19821005 <zxp19821005 at 163 dot com> _pkgname=tailchat pkgname="${_pkgname}-desktop"-pkgver=1.11.11+pkgver=1.11.12 _electronversion=18 _nodeversion=16 pkgrel=1@@ -27,13 +27,41 @@ "${pkgname}-${pkgver}::git+${_ghurl}#tag=v${pkgver}" "${pkgname}.sh" )-sha256sums=('1a710b43c3495ba044a3330bc464e7826c04d47b0d7281eeb176028ce21b32f8'+sha256sums=('a0fda9ee3dc390e6afb309661c9514fd205342689c0d85be7a40f97330a331ad' 'a774c2f54fbbeeaac3cefc0f7250796d30c86d27f0fd40b7eaf9c0fdb021623d') _ensure_local_nvm() { local NVM_DIR="${srcdir}/.nvm" source /usr/share/nvm/init-nvm.sh || [[ $? != 1 ]] nvm install "${_nodeversion}" nvm use "${_nodeversion}"+}+_get_app_dir() {+ find "${srcdir}" -type f -name "resources.pak" -exec dirname {} + | head -n 1+}+_set_build_env() {+ export ELECTRON_DIST="/usr/lib/electron${_electronversion}"+ export ELECTRON_SKIP_BINARY_DOWNLOAD=1+ export SYSTEM_ELECTRON_VERSION="$(electron${_electronversion} -v | sed 's/v//g')"+ export HOME="${srcdir}/.electron-gyp"+ mkdir -p "${srcdir}/.electron-gyp"+ if [[ "$(curl -s ipinfo.io/country)" == *"CN"* ]]; then+ {+ export YARN_REGISTRY="https://registry.npmmirror.com"+ export ELECTRON_MIRROR="https://registry.npmmirror.com/-/binary/electron/"+ export ELECTRON_BUILDER_BINARIES_MIRROR="https://registry.npmmirror.com/-/binary/electron-builder-binaries/"+ export NODEJS_ORG_MIRROR="https://npmmirror.com/mirrors/node"+ export YARN_CACHE_FOLDER="${srcdir}/.yarn/cache"+ export YARN_PLUGINS_FOLDER="${srcdir}/.yarn/plugins"+ export YARN_GLOBAL_FOLDER="${srcdir}/.yarn/global"+ export YARN_USE_HARDLINKS=true+ # export YARN_BUILD_FROM_SOURCE=true+ export YARN_LINK_WORKSPACE_PACKAGES=true+ export YARN_FETCH_RETRIES=3+ export YARN_FETCH_RETRY_TIMEOUT=10000+ export YARN_NETWORK_CONCURRENCY=32+ }+ find ./ -type f -name "yarn.lock" -exec sed -i "s/registry.yarnpkg.com/registry.npmmirror.com/g" {} ++ fi } _get_electron_version() { _elec_ver=$(find "${srcdir}" -maxdepth 5 -name "package.json" ! -path "*/node_modules/*" \@@ -50,6 +78,7 @@ s/@runname@/app.asar/g s/@cfgdirname@/${_pkgname}/g " "${srcdir}/${pkgname}.sh"+ _set_build_env _ensure_local_nvm gendesk -q -f -n \ --pkgname="${_pkgname}-desktop" \@@ -58,28 +87,6 @@ --name="${pkgname}" \ --exec="${pkgname} %U" cd "${srcdir}/${pkgname}-${pkgver}/client/desktop"- export ELECTRON_SKIP_BINARY_DOWNLOAD=1- export SYSTEM_ELECTRON_VERSION="$(electron${_electronversion} -v | sed 's/v//g')"- local HOME="${srcdir}/.electron-gyp"- mkdir -p "${srcdir}/.electron-gyp"- if [[ "$(curl -s ipinfo.io/country)" == *"CN"* ]]; then- {- export YARN_REGISTRY="https://registry.npmmirror.com"- export ELECTRON_MIRROR="https://registry.npmmirror.com/-/binary/electron/"- export ELECTRON_BUILDER_BINARIES_MIRROR="https://registry.npmmirror.com/-/binary/electron-builder-binaries/"- export NODEJS_ORG_MIRROR="https://npmmirror.com/mirrors/node"- export YARN_CACHE_FOLDER="${srcdir}/.yarn/cache"- export YARN_PLUGINS_FOLDER="${srcdir}/.yarn/plugins"- export YARN_GLOBAL_FOLDER="${srcdir}/.yarn/global"- export YARN_USE_HARDLINKS=true- # export YARN_BUILD_FROM_SOURCE=true- export YARN_LINK_WORKSPACE_PACKAGES=true- export YARN_FETCH_RETRIES=3- export YARN_FETCH_RETRY_TIMEOUT=10000- export YARN_NETWORK_CONCURRENCY=32- }- find ./ -type f -name "yarn.lock" -exec sed -i "s/registry.yarnpkg.com/registry.npmmirror.com/g" {} +- fi find src -type f -exec sed -i "s/process.resourcesPath/\'\/usr\/lib\/${pkgname}\'/g" {} \; sed -i "s/\"electron\": \"[^\"]*\"/\"electron\": \"${SYSTEM_ELECTRON_VERSION}\"/g" package.json sed -i "s/\/build//g" -i electron-builder.yml@@ -88,7 +95,8 @@ } build() { cd "${srcdir}/${pkgname}-${pkgver}/client/desktop"- local electronDist="/usr/lib/electron${_electronversion}"+ _set_build_env+ _ensure_local_nvm NODE_ENV=production yarn ts-node ./.erb/scripts/clean.js dist NODE_ENV=production yarn run build NODE_ENV=production yarn electron-builder --linux dir -c.electronDist="${electronDist}" --config.asar=false@@ -96,8 +104,8 @@ package() { install -Dm755 "${srcdir}/${pkgname}.sh" "${pkgdir}/usr/bin/${pkgname}" install -Dm755 -d "${pkgdir}/usr/lib/${pkgname}"- local _app_dir=$(find "${srcdir}" -type f -name "resources.pak" ! -path "*/node_modules/*" -exec dirname {} + | head -n 1)- cp -a "${_app_dir}/resources/". "${pkgdir}/usr/lib/${pkgname}/"+ local _app_dir=$(_get_app_dir)+ cp -a "${_app_dir}/resources/"* "${pkgdir}/usr/lib/${pkgname}/" install -Dm644 "${srcdir}/${pkgname}-${pkgver}/client/desktop/assets/icon.png" "${pkgdir}/usr/share/pixmaps/${pkgname}.png" install -Dm644 "${srcdir}/${pkgname}.desktop" -t "${pkgdir}/usr/share/applications" install -Dm644 "${srcdir}/${pkgname}-${pkgver}/LICENSE" -t "${pkgdir}/usr/share/licenses/${pkgname}"Scan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-08-03 00:08:14 | LOW | 2 |
| 2026-08-02 00:16:08 | LOW | 2 |
| 2026-08-01 00:11:18 | LOW | 2 |
| 2026-07-31 00:14:10 | LOW | 2 |
| 2026-07-30 00:17:23 | LOW | 2 |
| 2026-07-29 00:25:53 | LOW | 2 |
| 2026-07-28 00:07:28 | LOW | 2 |
| 2026-07-27 00:24:32 | LOW | 2 |
| 2026-07-26 00:07:32 | LOW | 2 |
| 2026-07-25 00:13:44 | LOW | 2 |
| 2026-07-24 00:02:28 | LOW | 2 |
| 2026-07-23 00:14:47 | LOW | 2 |
| 2026-07-22 00:29:32 | LOW | 2 |
| 2026-07-21 03:15:42 | MEDIUM | 1 |
| 2026-07-21 00:24:15 | LOW | 2 |
| 2026-07-20 00:19:49 | LOW | 2 |
| 2026-07-19 00:17:08 | LOW | 2 |
| 2026-07-18 00:14:48 | LOW | 2 |
| 2026-07-17 00:06:16 | LOW | 2 |
| 2026-07-16 00:05:41 | LOW | 2 |