Scan Report
15 /100
alista
Save restaurants, bars, and cafes from TikTok and Instagram videos. Search saved places and get weekend suggestions.
A legitimate restaurant bookmark manager with well-scoped filesystem and network access; no malicious patterns found. The hardcoded IP flagged in pre-scan is a false positive (Chrome UA string fragment, not a C2 IP).
Safe to install
No blocking action needed. Consider pinning better-sqlite3 and date-fns versions in package.json for supply-chain hygiene.
Findings 2 items
| Severity | Finding | Location |
|---|---|---|
| Low | Runtime dependencies use unpinned version ranges Supply Chain | package.json:11 |
| Low | shell:WRITE capability not declared in metadata block Doc Mismatch | scripts/fetch-post.ts:84 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Filesystem | WRITE | WRITE | ✓ Aligned | db.ts:reads migrations from __dirname; getDb():creates/opens alista.db |
| Network | READ | READ | ✓ Aligned | metadata-fetcher.ts:apify.com, instagram.com, tiktok.com; place-verifier.ts:plac… |
| Shell | NONE | WRITE | ✓ Aligned | fetch-post.ts:84-89: execFileSync('ffmpeg'/'ffprobe') — necessary for video fram… |
2 High 12 findings
High API Key 疑似硬编码凭证
API_KEY="your-google-places-key" README.md:41 High IP Address 硬编码 IP 地址
120.0.0.0 scripts/lib/metadata-fetcher.ts:204 Medium External URL 外部 URL
https://console.cloud.google.com/apis/library/places-backend.googleapis.com README.md:48 Medium External URL 外部 URL
https://console.apify.com/ README.md:49 Medium External URL 外部 URL
https://www.instagram.com/reel/ABC123/ README.md:60 Medium External URL 外部 URL
https://opencollective.com/biome package-lock.json:92 Medium External URL 外部 URL
https://www.patreon.com/feross package-lock.json:204 Medium External URL 外部 URL
https://feross.org/support package-lock.json:208 Medium External URL 外部 URL
https://api.apify.com/v2/acts/$ scripts/lib/metadata-fetcher.ts:47 Medium External URL 外部 URL
https://www.instagram.com/$ scripts/lib/metadata-fetcher.ts:53 Medium External URL 外部 URL
https://www.tiktok.com/oembed?url=$ scripts/lib/metadata-fetcher.ts:326 Medium External URL 外部 URL
https://api.example.com/data scripts/lib/utils/circuit-breaker.ts:35 File Tree
22 files · 108.9 KB · 3955 lines TypeScript 16f · 2965L
JSON 3f · 663L
Markdown 2f · 258L
SQL 1f · 69L
├─
▾
migrations
│ └─
001-initial.sql
SQL
├─
▾
scripts
│ ├─
▾
lib
│ │ ├─
▾
utils
│ │ │ ├─
circuit-breaker.ts
TypeScript
│ │ │ ├─
html.ts
TypeScript
│ │ │ ├─
index.ts
TypeScript
│ │ │ ├─
retry.ts
TypeScript
│ │ │ ├─
text.ts
TypeScript
│ │ │ └─
url-normalizer.ts
TypeScript
│ │ ├─
db.ts
TypeScript
│ │ ├─
metadata-fetcher.ts
TypeScript
│ │ ├─
nudge-scorer.ts
TypeScript
│ │ ├─
place-verifier.ts
TypeScript
│ │ └─
types.ts
TypeScript
│ ├─
fetch-post.ts
TypeScript
│ ├─
lookup-place.ts
TypeScript
│ ├─
nudge.ts
TypeScript
│ ├─
save-place.ts
TypeScript
│ └─
search-places.ts
TypeScript
├─
package-lock.json
JSON
├─
package.json
JSON
├─
README.md
Markdown
├─
SKILL.md
Markdown
└─
tsconfig.json
JSON
Dependencies 4 items
| Package | Version | Source | Known Vulns | Notes |
|---|---|---|---|---|
better-sqlite3 | ^11.0.0 | npm | No | Version not pinned — recommend exact pin |
date-fns | ^4.1.0 | npm | No | Version not pinned |
date-fns-tz | ^3.2.0 | npm | No | Version not pinned |
zod | ^3.23.0 | npm | No | Version not pinned |
Security Positives
✓ No credential harvesting — API keys are read from env vars and used only for their intended APIs
✓ No sensitive path access (no ~/.ssh, ~/.aws, .env file reads)
✓ No base64, eval, or obfuscation patterns
✓ No data exfiltration — all network calls go to declared, legitimate endpoints (Google Places, Apify, Instagram, TikTok CDN)
✓ No reverse shell, C2, or persistence mechanisms
✓ Image/video downloads are restricted to whitelisted CDN hostnames (cdninstagram.com, tiktokcdn.com, fbcdn.net, akamaized.net)
✓ Download and frame-extraction directories are sandboxed to CWD (path traversal check in fetch-post.ts)
✓ SQLite DB is local-only with WAL mode and foreign keys enforced
✓ Circuit breaker pattern protects against cascading API failures
✓ API keys are environment-variable-only, never hardcoded in source