diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f5730db --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +``` +# updated +``` +node_modules/ +.env +.DS_Store +*.log +npm-debug.log* +dist/ +.cache/ diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..9fa8e19 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,22 @@ + +MIT License + +Copyright (c) 2026 seed-phrase-checker-trac + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index c32e9fb..dbc9c83 100644 --- a/README.md +++ b/README.md @@ -1,226 +1,165 @@ -# Awesome Intercom - -A curated list of Intercom & IntercomSwap forks that do awesome stuff. - -_Generated: 2026-02-27 19:51 UTC_ - -Included: **215** out of 300+ total (Intercom: 188, IntercomSwap: 27) - -## Intercom -- [0xbeejay20/intercom](https://github.com/0xbeejay20/intercom) — TaskFlow is a decentralized, gas-free task management app built on Trac Network using the Intercom stack and Pear Runtime. -- [acock207/intercom-vibe-check](https://github.com/acock207/intercom-vibe-check) — This repository is a fork of Intercom, implementing a "Vibe Check" application for the Intercom Vibe Competition. -- [afshanisvarasafaraz-glitch/intercom](https://github.com/afshanisvarasafaraz-glitch/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [alfathir27/intercom-degen-translator](https://github.com/alfathir27/intercom-degen-translator) — _ "We are all gonna make it. Unless you sell." -- [aminurmala91-lang/TRac-pool-8pool](https://github.com/aminurmala91-lang/TRac-pool-8pool) — A fully playable 8-ball pool game built as a fork of Trac Intercom, demonstrating real-time peer-to-peer coordination via Intercom sidechannels. -- [andrew1234-arch/intercom](https://github.com/andrew1234-arch/intercom) — A lightweight, decentralized node monitoring tool built on the Intercom protocol. -- [anerto/dao-engvot](https://github.com/anerto/dao-engvot) — DAO-ENGVOT is a terminal-based constitutional voting engine designed to simulate structured DAO governance mechanisms. -- [anjaysia/intercom](https://github.com/anjaysia/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [aprilianirose6/Goal-Tracker-Bot-Gamified-Saving](https://github.com/aprilianirose6/Goal-Tracker-Bot-Gamified-Saving) — A gamified TNK saving tracker built on the TRAC Network / Intercom ecosystem. -- [Aprxdite/Multi-Agent-Crypto-Alpha-Scanner-Collaboration](https://github.com/Aprxdite/Multi-Agent-Crypto-Alpha-Scanner-Collaboration) — Multi-Agent Collective Intelligence for Crypto Alpha — Built on Intercom (Trac Network) -- [axellord22/intercom](https://github.com/axellord22/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [Azeezibrahim121/intercom](https://github.com/Azeezibrahim121/intercom) — Built on Trac Network / Intercom · Powered by the Pear Runtime -- [babatayo-osifeso/Trac](https://github.com/babatayo-osifeso/Trac) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [bakainako/TipJar-P2P-Decentralized-Tip-Support-Board](https://github.com/bakainako/TipJar-P2P-Decentralized-Tip-Support-Board) — A peer-to-peer creator tipping board built on Intercom by Trac Systems. -- [BbyN008/intercom-jobboard](https://github.com/BbyN008/intercom-jobboard) — A P2P Job Board forked from Trac Intercom. -- [bearteddysi/mariobrosTRac](https://github.com/bearteddysi/mariobrosTRac) — A retro-style Super Mario-inspired platformer game built on top of Intercom — the P2P agent communication layer by Trac Network. -- [Beejay020/intercom](https://github.com/Beejay020/intercom) — A fork of Trac-Systems/intercom that adds a decentralized, agent-native bounty board built on Intercom sidechannels. -- [berkmanbarry70-web/snakeman](https://github.com/berkmanbarry70-web/snakeman) — Neon terminal-based Snake game built with Node.js for CLI environments (Termux compatible). -- [BikaEvrything/axelbuddy-intercom-ai](https://github.com/BikaEvrything/axelbuddy-intercom-ai) — AxelNode is a custom-built Intercom node focused on Web3 safety and learning. -- [bikangabah/evolveaitrac](https://github.com/bikangabah/evolveaitrac) — P2P Autonomous Agent Battle Protocol — Built on Intercom -- [billieg758-arch/intercom](https://github.com/billieg758-arch/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [Bokeunhyun/Minions-Trac](https://github.com/Bokeunhyun/Minions-Trac) — A fun P2P clicker game built on top of Intercom — the Trac Network agent communication stack. -- [bosokntl/intercom-track](https://github.com/bosokntl/intercom-track) — Fork dari Trac-Systems/intercom dengan tambahan fitur crypto tracker real-time (BTC, ETH, SOL) dari CoinGecko API. -- [BrightTonyTech/intercom](https://github.com/BrightTonyTech/intercom) — Built on Trac Intercom · Vibe Competition Entry -- [carlencalinns-wq/pollltrackerTRAC](https://github.com/carlencalinns-wq/pollltrackerTRAC) — A fork of Trac-Systems/intercom that adds a trustless, peer-to-peer polling and voting application. -- [carlodiganio-sketch/dig-multisig](https://github.com/carlodiganio-sketch/dig-multisig) — A hardened CLI-based multi-signature transaction manager built on Intercom architecture. -- [Choam07/intercom](https://github.com/Choam07/intercom) — A simple and interactive multi-chain cryptocurrency balance scanner for Ethereum (ETH), BNB Chain (BNB), Base (BASE), Solana (SOL), and TRAC/TNK. -- [chrisyammsir-source/chrystop-tracker](https://github.com/chrisyammsir-source/chrystop-tracker) — A premium CLI-based crypto market tracker built on top of the Intercom architecture. -- [codeagen/intercom](https://github.com/codeagen/intercom) — A sleek Pomodoro focus timer built on top of the Intercom stack by Trac Systems. -- [comand87/intercom-real-price-analyzer](https://github.com/comand87/intercom-real-price-analyzer) — Realtime Web Dashboard + Agent Signal + CA Token Scanner -- [coucarli6-debug/-Game-Bilia-trac](https://github.com/coucarli6-debug/-Game-Bilia-trac) — A P2P Billiard Game built on Trac Intercom — play pool with moves broadcast over the Intercom peer-to-peer sidechain network. -- [CryptCypher/intercom-emoji-cypher](https://github.com/CryptCypher/intercom-emoji-cypher) — Degen Codec CLI is a specialized communication tool designed for the decentralized trading ecosystem. It facilitates the secure obfuscation of sensiti -- [cryptisme/intercom-ask-for-coins](https://github.com/cryptisme/intercom-ask-for-coins) — The Oracle Agent is a decentralized, peer-to-peer application designed to provide instant, accurate cryptocurrency market intelligence. Built on the P -- [cryptobo1/TracPoll](https://github.com/cryptobo1/TracPoll) — A fork of Trac-Systems/intercom that adds TracPoll: a peer-to-peer polling and voting app where agents create polls, peers vote over Intercom sidechan -- [CryptoKnight007/intercom](https://github.com/CryptoKnight007/intercom) — InterMatch is a structured, deterministic agent-to-agent discovery and coordination engine built on top of the Intercom stack on Trac Network. -- [ctcpumps-cyber/intercom](https://github.com/ctcpumps-cyber/intercom) — A production-ready crypto monitoring platform featuring a proprietary Proof-of-Hold™ scoring engine, designed for extensibility, scalability, and Web3 -- [cybertdelion/PollStation---Voting-Poll-P2P-App](https://github.com/cybertdelion/PollStation---Voting-Poll-P2P-App) — A decentralized, peer-to-peer polling and voting app built on top of Intercom — the Trac Network agent stack. -- [danFabCode/intercom-degen-oracle](https://github.com/danFabCode/intercom-degen-oracle) — DegenOracle is a P2P daily horoscope bot for the Trac Network built on Intercom. -- [danielmushroom886-ai/room-policy-engine](https://github.com/danielmushroom886-ai/room-policy-engine) — A cyber-style CLI policy validation engine built on Intercom architecture. -- [Davexinoh/TaskDropper](https://github.com/Davexinoh/TaskDropper) — A minimal peer-to-peer task board built on Intercom — the Trac Network stack for autonomous agents. -- [deepnsteady/intercom](https://github.com/deepnsteady/intercom) — Built on Intercom (Trac Network) -- [Demolamalik/intercom](https://github.com/Demolamalik/intercom) — Anonymous P2P real-time polling on Trac Network -- [DennyArdy/sentinel](https://github.com/DennyArdy/sentinel) — A lightweight real-time CLI event tracker built on Intercom architecture. -- [deotek4321/intercom](https://github.com/deotek4321/intercom) — TeamPresence is a production-ready app built on the Intercom stack (Trac Network). It turns Intercom into a decentralized presence and availability bo -- [dexter-maxi/dice-snakes-and-ladders](https://github.com/dexter-maxi/dice-snakes-and-ladders) — A fully playable, browser-based Snake & Ladders game built as a fork of Intercom — demonstrating real-time peer-to-peer gameplay coordination over the -- [digitalgenesis-bitmap/intercom](https://github.com/digitalgenesis-bitmap/intercom) — Severy Crypto Live Price is a mobile-first cryptocurrency tracking application built with Node.js and Express. -- [Diksci/intercom](https://github.com/Diksci/intercom) — Intercom Fork + AI Signal Analyzer -- [dlesleymc/intercom](https://github.com/dlesleymc/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [DmdxCode/intercom](https://github.com/DmdxCode/intercom) — PollNet is a peer-to-peer polling and voting agent built on the Intercom stack (Trac Network). -- [doygrond/Trac-alert-scan](https://github.com/doygrond/Trac-alert-scan) — A fork of Trac-Systems/intercom that adds a decentralized crypto price alert agent powered by the Intercom P2P sidechain network. -- [eldawithsoonjump/TRAC-quest](https://github.com/eldawithsoonjump/TRAC-quest) — A peer-to-peer gamified quest board built on top of Intercom — the Trac Network's P2P agent sidechain protocol. -- [elman71/help-habor](https://github.com/elman71/help-habor) — Help Harbor is a P2P support desk for operator teams: tickets are opened, claimed, updated, then closed or reopened when regressions appear. -- [elyyrinafriday/TracPoll](https://github.com/elyyrinafriday/TracPoll) — A fork of Intercom that adds a decentralized polling & voting app — agents create polls, cast votes, and broadcast results over Intercom sidechannels -- [Emperoar07/intercom](https://github.com/Emperoar07/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [entigadog/intercom_super_app](https://github.com/entigadog/intercom_super_app) — Next-Generation Web3 Crypto Intelligence Dashboard -- [erapokxyz/intercom-by-me](https://github.com/erapokxyz/intercom-by-me) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [fabermubai/intercom](https://github.com/fabermubai/intercom) — Multi-agent AI alpha scanner built on Intercom (Trac Network) -- [fahrurxz/intercom](https://github.com/fahrurxz/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [farrelfebrian2023-jpg/intercom](https://github.com/farrelfebrian2023-jpg/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [fasyaaemlia/ping_pong_trac](https://github.com/fasyaaemlia/ping_pong_trac) — Retro Pixel Pong game built on the Trac Network / Intercom protocol -- [felixmath-coder/intercom](https://github.com/felixmath-coder/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [francinfranky-cpu/-Project-TracQuest-P2P-Treasure-Hunt](https://github.com/francinfranky-cpu/-Project-TracQuest-P2P-Treasure-Hunt) — A browser-based treasure hunt game where players post puzzles ("quests") and race to solve them peer-to-peer via Intercom sidechannels. Winners receiv -- [Freak-max/intercom](https://github.com/Freak-max/intercom) — A modern, lightweight, and open-source cryptocurrency token watcher built with Node.js and Express. -- [fredyytonim/Real-alert-TRac](https://github.com/fredyytonim/Real-alert-TRac) — A real-time wallet monitoring and alert app built on the Intercom Network. -- [gamber7/intercom-CLI-Analyze](https://github.com/gamber7/intercom-CLI-Analyze) — Pro Terminal UI • Realtime Market • CA Scanner • Agent Signal (EMA/RSI) -- [gamingonspot/-TracTask-](https://github.com/gamingonspot/-TracTask-) — A peer-to-peer task management app built on the Intercom network. Agents broadcast tasks, bid on bounties, and sync state — all over Intercom sidechan -- [gammavse001/intercom](https://github.com/gammavse001/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [Ghiftt/intercom-ai-orchestrator](https://github.com/Ghiftt/intercom-ai-orchestrator) — This fork adds an AI-powered task orchestrator on top of the Intercom stack -- [gingerbloodhouse-oss/bloster-arena](https://github.com/gingerbloodhouse-oss/bloster-arena) — A cinematic terminal battle engine built for modern CLI gameplay. -- [givarizel/snakchain-TRAC](https://github.com/givarizel/snakchain-TRAC) — A fully playable Snake game built as an Intercom fork on the Trac Network. -- [gregorigor3/ttrac-eco-quest](https://github.com/gregorigor3/ttrac-eco-quest) — A peer-to-peer gamified quest platform built on Intercom — the Trac Network agent sidechain stack. -- [grimore8/intercom_by_grimore8](https://github.com/grimore8/intercom_by_grimore8) — INTERCOM_BY_GRIMORE8 is a high-performance CLI + Web Dashboard AI Trading Copilot built on an Intercom-style multi-agent architecture. -- [gugunriskiyansah/P2P-trac-On-Chain-Job-Board-Bounty-Marketplace](https://github.com/gugunriskiyansah/P2P-trac-On-Chain-Job-Board-Bounty-Marketplace) — A fork of Trac-Systems/intercom that adds a non-custodial, agent-powered bounty board and job marketplace over Intercom sidechannels. -- [hanna-natalya/TRAC-MINER](https://github.com/hanna-natalya/TRAC-MINER) — A paper-trading futures game for TRAC token built on top of Intercom — Trac Network's P2P agent communication layer. -- [hapidummajid-blip/intercom](https://github.com/hapidummajid-blip/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [Harkiem/tracvote](https://github.com/Harkiem/tracvote) — A decentralized, agent-first voting and polling system built on the Intercom stack (Trac Network). -- [helloworldzss280-dev/DegenWatch-Pro](https://github.com/helloworldzss280-dev/DegenWatch-Pro) — description: Advanced Web3 Degen Dashboard for token analysis, wallet tracking, and real-time insights. Built with Node.js (Express) and vanilla front -- [holywingson-alt/Task-Board-P2P-](https://github.com/holywingson-alt/Task-Board-P2P-) — A decentralized, peer-to-peer task board built on top of Intercom by Trac Systems. -- [hululauk/intercom](https://github.com/hululauk/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [Ibnyahyah/intercom](https://github.com/Ibnyahyah/intercom) — Intercom Task Board (ITB) is a decentralized task marketplace built on the Trac Intercom stack. It allows autonomous agents and human peers to post ta -- [idimi/intercomifi](https://github.com/idimi/intercomifi) — A P2P WebSocket Bridge for the Trac Network Internet of Agents -- [imarsela380/XsmartAi](https://github.com/imarsela380/XsmartAi) — Built on Intercom · Trac Network -- [inautang/TracSwap-Radar](https://github.com/inautang/TracSwap-Radar) — P2P Swap Price Intelligence on the Intercom Agent Mesh -- [index2310/Price-Tracker-Basic](https://github.com/index2310/Price-Tracker-Basic) — Simple beta app for local running to check current Crypto Prices using ticker and API Provided by CoinGecko -- [ingerrrubyshoon-sketch/TRAC-vote](https://github.com/ingerrrubyshoon-sketch/TRAC-vote) — A lightweight peer-to-peer voting/polling app built on Intercom (Trac Network). -- [intancy/cycle-repute](https://github.com/intancy/cycle-repute) — A dynamic reputation management engine featuring time-based decay, -- [isekaikomaewa/Quest-Trac-tnk](https://github.com/isekaikomaewa/Quest-Trac-tnk) — A fully decentralized quest/bounty board powered by the Intercom P2P sidechannel network. Post tasks, claim bounties, earn XP — no servers, no middlem -- [itsdecryptor/intercom-nodewatcher-sentinel](https://github.com/itsdecryptor/intercom-nodewatcher-sentinel) — NodeWatcher is a decentralized, peer-to-peer sentinel for blockchain network intelligence. Operating within the Pear Runtime, it provides real-time RP -- [japanesetokyo8-gif/Trac-duel-game](https://github.com/japanesetokyo8-gif/Trac-duel-game) — A real-time multiplayer word battle game built on the Intercom P2P agent framework by Trac Systems. -- [jashongeovedi/intercom](https://github.com/jashongeovedi/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [jayzamam/peerdice](https://github.com/jayzamam/peerdice) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [jeniferatalanta-creator/-TRAC-Time-Machine-](https://github.com/jeniferatalanta-creator/-TRAC-Time-Machine-) — "What did my wallet look like 6 months ago?" — Now you can find out. -- [jeshuotinoshi-arch/trac-ques-earn-TRAC](https://github.com/jeshuotinoshi-arch/trac-ques-earn-TRAC) — A browser-based crypto trivia battle game where agents challenge each other over Intercom P2P sidechannels. Questions are exchanged peer-to-peer, scor -- [jikagom/Kaffehaus-P2P-Debate-Board-](https://github.com/jikagom/Kaffehaus-P2P-Debate-Board-) — "Where every thesis demands its antithesis." -- [joeatang/5FAN](https://github.com/joeatang/5FAN) — A multi-brain AI agent built on Trac Network's Intercom. -- [johnetsiii/TracDice-](https://github.com/johnetsiii/TracDice-) — A non-custodial, peer-to-peer dice gambling app built on Intercom — the Trac Network P2P agent sidechannel stack. -- [jonsnft/intercom](https://github.com/jonsnft/intercom) — Idea Inbox is a tiny app for collecting and reviewing ideas in a shared space. -- [josefajosefin7-web/Trac-arena](https://github.com/josefajosefin7-web/Trac-arena) — A live, multiplayer BTC price prediction game powered by Trac Intercom's P2P sidechannels. -- [juicytomi/JuiciiTrades](https://github.com/juicytomi/JuiciiTrades) — MemoryMatch is a peer-to-peer memory card game built on Intercom / Trac Network. -- [kangsuengenah-pixel/Trac_aiagent-game-ninjafruit](https://github.com/kangsuengenah-pixel/Trac_aiagent-game-ninjafruit) — A fully interactive browser game built on top of the Intercom / IntercomSwap ecosystem, where players slash TRAC tokens to earn rewards. -- [karolinswilliam/sonidash_trac](https://github.com/karolinswilliam/sonidash_trac) — A fork of Intercom that turns the Trac Network into a playable endless runner game. -- [kayleigtrescot/PoolChain](https://github.com/kayleigtrescot/PoolChain) — A decentralized 8-ball billiard game built on Trac Network's Intercom Protocol -- [kblvck/intercom](https://github.com/kblvck/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [kelleyshintia/tracquest](https://github.com/kelleyshintia/tracquest) — A GameFi-style decentralized quest board powered by Intercom's P2P agent network. Post bounties, claim quests, and settle rewards via Intercom sidecha -- [Keok07/amanah-escrow](https://github.com/Keok07/amanah-escrow) — Amanah Escrow is designed for two-party work agreements where funds are secured first, deliverables are verified, and then released or refunded. -- [kingsalamanderz/salamander-consensus](https://github.com/kingsalamanderz/salamander-consensus) — An adaptive consensus engine featuring stake-weight voting, -- [kipasputih58-cpu/PeerPredict](https://github.com/kipasputih58-cpu/PeerPredict) — Decentralized Prediction Market with Trac Wallet Integration -- [Kizimakai/Real-Time-Alert-System](https://github.com/Kizimakai/Real-Time-Alert-System) — A real-time wallet monitoring and alert bot built on top of the Intercom P2P agent network. -- [kromboloni/interclip](https://github.com/kromboloni/interclip) — / | / /____ _____/ ____/ (_) ___ -- [kyablp/intercom-agent](https://github.com/kyablp/intercom-agent) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [lahdlahd/supportintercom](https://github.com/lahdlahd/supportintercom) — Built on Intercom · Trac Network -- [linkinparketh/SkillMatch-P2P](https://github.com/linkinparketh/SkillMatch-P2P) — A decentralized peer-to-peer skill marketplace built on Intercom (TRAC Network) -- [linoxbt/TracWhisper](https://github.com/linoxbt/TracWhisper) — P2P end-to-end encrypted private notes on Trac Network — built on Intercom. -- [lintahdaratr/TracTip-App-App-P2P](https://github.com/lintahdaratr/TracTip-App-App-P2P) — A fork of Intercom by Trac Systems -- [lordnek0/deschel](https://github.com/lordnek0/deschel) — Structured CLI-based Task Grid Simulator -- [Mahbubah58/Tracscope](https://github.com/Mahbubah58/Tracscope) — Live swap analytics and portfolio tracking for IntercomSwap — built on the Trac Network P2P stack. -- [MaivaSoftwares/intercom](https://github.com/MaivaSoftwares/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [makphe/pulse-sentry](https://github.com/makphe/pulse-sentry) — Pulse Sentry is an incident runbook for agent networks: raise alerts quickly, assign ownership, and close with recorded resolution. -- [malefic881/intercom](https://github.com/malefic881/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [mechanus-ort/intercom](https://github.com/mechanus-ort/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [MrHaans/wallet-visualizer](https://github.com/MrHaans/wallet-visualizer) — A lightweight on-chain transaction visualizer with an integrated AI Agent for wallet behavior analysis. -- [mrnetwork0001/TracVault](https://github.com/mrnetwork0001/TracVault) — Fork of Trac-Systems/intercom -- [mugiwarayounkou/TRAC-Reputation-Score-Bot](https://github.com/mugiwarayounkou/TRAC-Reputation-Score-Bot) — On-chain credit intelligence for the TRAC / Bitcoin ecosystem. -- [mum33n/IntercomTicket](https://github.com/mum33n/IntercomTicket) — Decentralized P2P Event Ticketing built on Intercom / Trac Network. -- [mylayla17/intercom](https://github.com/mylayla17/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [Nawatstreat/streatid-agentic](https://github.com/Nawatstreat/streatid-agentic) — A modern agent identity & trust engine built on Intercom architecture. -- [nikolaexander/TRAC-Futures-Trading](https://github.com/nikolaexander/TRAC-Futures-Trading) — A paper-trading futures game for TRAC token built on top of Intercom — Trac Network's P2P agent communication layer. -- [ninjaley/intercom](https://github.com/ninjaley/intercom) — This is a simple Telegram bot built using the Python programming language and run directly via Termux on Android. -- [nusaraze/intercom-password-gen](https://github.com/nusaraze/intercom-password-gen) — Passgen is a decentralized, peer-to-peer mnemonic password generator designed for the crypto community. It creates strong, memorable passwords using c -- [ojgmt/intercom](https://github.com/ojgmt/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [paulamster/intercom](https://github.com/paulamster/intercom) — CLI-based security layer for Intercom. -- [penggunaco/intercom](https://github.com/penggunaco/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [penpentol/intercom](https://github.com/penpentol/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [Pepencikaladitya/cxylaze-breach](https://github.com/Pepencikaladitya/cxylaze-breach) — Cyberpunk terminal hacking simulation built with Node.js. -- [pisceans/intercom](https://github.com/pisceans/intercom) — Enterprise-ready lightweight cryptocurrency tracking web application built with pure frontend technologies. -- [prengki27/intercom](https://github.com/prengki27/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [prismalaster/trac-gallery](https://github.com/prismalaster/trac-gallery) — An agent-first, AI-powered NFT gallery built on the Trac Network Intercom P2P stack. TracGallery discovers Bitcoin Ordinals and Pipe/TAP NFTs, analyze -- [Profay/Intercom-bounty](https://github.com/Profay/Intercom-bounty) — Decentralized Micro-Task Escrow Platform - Built for the Intercom Vibe Competition -- [pudidi17/intercom](https://github.com/pudidi17/intercom) — Trac Address (for payouts) -- [pujogresik/vecto](https://github.com/pujogresik/vecto) — A modular CLI governance engine built on Intercom architecture. -- [radiagit/intercom](https://github.com/radiagit/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [rexcyon-dev/TracTip--P2P-Tipping-Board](https://github.com/rexcyon-dev/TracTip--P2P-Tipping-Board) — Fork of Trac-Systems/intercom -- [rianz909/ac-manage](https://github.com/rianz909/ac-manage) — Modern CLI-based Access Control & Role Governance System -- [rokiru6/bounty-garden](https://github.com/rokiru6/bounty-garden) — Bounty Garden is a result-driven bounty storefront: tasks are posted, hunters claim, submit proof, and issuers approve then settle. -- [rossalbaizs/TracArena-P2P-](https://github.com/rossalbaizs/TracArena-P2P-) — A peer-to-peer gaming arena built on top of Intercom by Trac Systems. -- [rozidev/intercom](https://github.com/rozidev/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [salessman8/TRAC-Social-Comparison-Bot-](https://github.com/salessman8/TRAC-Social-Comparison-Bot-) — A TRAC Network Intercom fork — analyze your wallet activity and rank yourself against the global TRAC ecosystem. -- [Sammy-prog-cloud/intercom](https://github.com/Sammy-prog-cloud/intercom) — A combined token swap DEX + peer-to-peer messaging app built on the Trac Protocol. -- [severy09/intercom](https://github.com/severy09/intercom) — Severy Crypto Live Price is a mobile-first cryptocurrency tracking application built with Node.js and Express. -- [Shanks239/intercom](https://github.com/Shanks239/intercom) — Decentralized poll app on Trac Network. Agents create polls, vote, and see live results — no server, fully P2P. -- [sigmalogistikutama-collab/intercom](https://github.com/sigmalogistikutama-collab/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [sireninsinan/AI-Personal-Finance-Coach](https://github.com/sireninsinan/AI-Personal-Finance-Coach) — An AI-powered personal finance coach for TRAC & crypto holders, built on the Intercom P2P agent network. -- [siucup640-sketch/sketch-watcher](https://github.com/siucup640-sketch/sketch-watcher) — A minimalist live crypto price watcher built on Intercom architecture. -- [ste2430973-bit/intercom](https://github.com/ste2430973-bit/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [stephannillon/Trac-Race-Arena-Ai-agent](https://github.com/stephannillon/Trac-Race-Arena-Ai-agent) — AI-Powered P2P Racing Game built on Intercom by Trac Systems -- [StrongTheDev/flappy-bird-trac](https://github.com/StrongTheDev/flappy-bird-trac) — This folder contains a web-native Flappy Bird remix inspired by the Trac competition plan: a playable canvas experience with coins, TNKc-backed upgrad -- [stuwertWEB3/Ton_fish_TRAC](https://github.com/stuwertWEB3/Ton_fish_TRAC) — READY GO TO FISHERMAN TON-TRAC-FHISING -- [SUCCESS6396/intercom](https://github.com/SUCCESS6396/intercom) — A P2P task delegation and confirmation board built on Intercom (Trac Network). -- [syahidgrager/taskbuddy-relay](https://github.com/syahidgrager/taskbuddy-relay) — TaskBuddy Relay is a lightweight task coordination channel for agents that prioritizes fast handoffs over heavy project management. -- [syusanbee-lgtm/stickman_Ai_agent_TRAC](https://github.com/syusanbee-lgtm/stickman_Ai_agent_TRAC) — A fork of Intercom | Built on TAP Protocol | Powered by TRAC Ordinals -- [technologized/TracPoll](https://github.com/technologized/TracPoll) — TracPoll is a peer-to-peer polling and voting application built on the Intercom stack. Peers create polls over Intercom sidechannels, others vote anon -- [theonlysol/intercom](https://github.com/theonlysol/intercom) — TaskBoard is a decentralized task marketplace built on Intercom / Trac Network. -- [tomashorni/intercom](https://github.com/tomashorni/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [totoplayerz/TracBoard-Collaborative-P2P-Task-Board](https://github.com/totoplayerz/TracBoard-Collaborative-P2P-Task-Board) — A fork of Intercom that transforms it into a decentralized, peer-to-peer task coordination board for agents and humans. -- [Uestace223/intercom](https://github.com/Uestace223/intercom) — Intercom fork extended with a Telegram-based real-time crypto tracking agent. -- [ukmkmhd-tech/intercom](https://github.com/ukmkmhd-tech/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [vairushamdan/TRAC-AI-Wallet-Insight-Assistant](https://github.com/vairushamdan/TRAC-AI-Wallet-Insight-Assistant) — An AI-powered on-chain behavior analysis tool built on Trac Network / Intercom stack. -- [walterhitler/peerOTP](https://github.com/walterhitler/peerOTP) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [wishmelucks99s/Uniswap-Monitor-](https://github.com/wishmelucks99s/Uniswap-Monitor-) — Real-time ETH swap monitor powered by Uniswap V2 and Alchemy. -- [wwizardsz/intercom](https://github.com/wwizardsz/intercom) — 🧙‍♂️ WIZARD – Crypto Utility CLI -- [X-Prism/intercom-trust](https://github.com/X-Prism/intercom-trust) — A P2P reputation system for the Trac Network Intercom ecosystem. Peers rate each other (1-5 stars) after interactions, with ratings stored in the cont -- [xspace-lab/intercom @ `AI-Collaboratory`](https://github.com/xspace-lab/intercom/tree/AI-Collaboratory) — Watch AI Agents Collaborate on Real Tasks in Real-Time -- [xspace-lab/intercom @ `AI-TRADING-ARENA`](https://github.com/xspace-lab/intercom/tree/AI-TRADING-ARENA) — Real-time AI trading tournament platform powered by IntercomSwap -- [xspace-lab/intercom @ `CryptoPortfolio`](https://github.com/xspace-lab/intercom/tree/CryptoPortfolio) — AI-Powered Crypto Trading Assistant built on IntercomSwap -- [xspace-lab/intercom @ `Game-HubPro`](https://github.com/xspace-lab/intercom/tree/Game-HubPro) — AI-Powered Battle Arena with IntercomSwap Integration -- [xspace-lab/intercom @ `GameFi-Hub`](https://github.com/xspace-lab/intercom/tree/GameFi-Hub) — A multiplayer blockchain gaming arena where humans and AI agents battle, earn crypto, and trade NFTs in real-time. -- [xspace-lab/intercom @ `Mood-Tracker`](https://github.com/xspace-lab/intercom/tree/Mood-Tracker) — An AI-powered mental wellness companion built on Intercom -- [xspace-lab/intercom @ `StudyBuddy`](https://github.com/xspace-lab/intercom/tree/StudyBuddy) — Your AI Tutor & Study Companion built on Intercom + IntercomSwap -- [xspace-lab/intercom @ `Task-Keeper`](https://github.com/xspace-lab/intercom/tree/Task-Keeper) — An AI-powered personal task and reminder manager built on Intercom -- [ysaja90/ainz-crypto-tracker](https://github.com/ysaja90/ainz-crypto-tracker) — ⚔ A custom crypto tracking application built on top of the Intercom framework. -- [Yukianameta/IntercomRoulette-](https://github.com/Yukianameta/IntercomRoulette-) — A decentralized, peer-to-peer roulette game built on top of Intercom — the Trac Network P2P agent stack. -- [yunamilanita-eng/intercom](https://github.com/yunamilanita-eng/intercom) — This repository is a reference implementation of the Intercom stack on Trac Network for an internet of agents. -- [Yunshanzxx/tractradingmarketpredict](https://github.com/Yunshanzxx/tractradingmarketpredict) — An all-in-one decentralized trading intelligence platform built on Intercom by Trac Systems. -- [zafarezar3-sudo/TRAC-Wallet-Intelligence-Bot](https://github.com/zafarezar3-sudo/TRAC-Wallet-Intelligence-Bot) — A P2P AI agent built on Intercom that analyzes TRAC/TAP wallet activity, scores wallet health, and delivers real-time intelligence — all over decentra -- [zdronze/fireway](https://github.com/zdronze/fireway) — Stylish Multi-Theme Intercom API Control Panel -- [zitters/agent-market](https://github.com/zitters/agent-market) — A Decentralized AI Agent Service Marketplace Built on Trac Network -- [zkbintang/star-escrow-finance](https://github.com/zkbintang/star-escrow-finance) — Star Escrow Finance is a CLI-based escrow transaction simulation engine built with lifecycle modeling, fee mechanics, and dispute resolution logic. -- [zorabaseapp/intercom](https://github.com/zorabaseapp/intercom) — A Modern Web-Based NFT Generator - -## IntercomSwap -- [Ajaxcerl/Intercom-Swap-Nexus](https://github.com/Ajaxcerl/Intercom-Swap-Nexus) — This project is a custom fork of IntercomSwap built for the Intercom Vibe Competition. -- [albasquarez/Trac_P2P_chat](https://github.com/albasquarez/Trac_P2P_chat) — A fork of Trac-Systems/intercom-swap that adds a real-time AI assistant (Claude) embedded directly into the Intercom sidechannel UI — making P2P commu -- [Albelelep/tank-wallet](https://github.com/Albelelep/tank-wallet) — TankWallet is a self-custody TNK/TRK wallet designed for practical daily operations on Trac workflows. -- [Albertbassey/intercom-app](https://github.com/Albertbassey/intercom-app) — A fork of IntercomSwap that adds a real-time agent-to-agent chat interface built on top of the Intercom P2P sidechannel stack. -- [amri72/rivent](https://github.com/amri72/rivent) — Reactive Intercom Event Engine built on top of the Intercom-Swap stack. -- [andinilino680/TRAC-Portfolio-Chat-Dashboard](https://github.com/andinilino680/TRAC-Portfolio-Chat-Dashboard) — A conversational AI-powered dashboard for tracking and analyzing multi-wallet TRAC holdings on the Intercom P2P network. -- [Arza36/ai-dex-swap](https://github.com/Arza36/ai-dex-swap) — This repo is a fork of upstream Intercom (Trac-Systems/intercom): a reference implementation of the Intercom stack on Trac Network for an internet of -- [bracklyhermes/intercom-swap](https://github.com/bracklyhermes/intercom-swap) — 🚀 Intercom Swap CLI Simulator -- [eligable/TRAC-Onboarding-Assistant](https://github.com/eligable/TRAC-Onboarding-Assistant) — An interactive onboarding assistant for new users entering the TRAC ecosystem, built on top of Intercom. -- [intananjany/TRAC-Quest-Gamification-Bot-Creative-Angle-Konsep](https://github.com/intananjany/TRAC-Quest-Gamification-Bot-Creative-Angle-Konsep) — A fork of Trac-Systems/intercom that adds a daily quest + reward system for TRAC Network users. -- [intellygentle/intercom-swap](https://github.com/intellygentle/intercom-swap) — Reward Address (TAP Wallet) -- [jakatengker/TRAC-Governance-Voting-](https://github.com/jakatengker/TRAC-Governance-Voting-) — A peer-to-peer governance interface built on Intercom — empowering TNK holders to participate in on-chain governance with ease. -- [janesmith198501/intercom-swap](https://github.com/janesmith198501/intercom-swap) — This repo is a fork of upstream Intercom (Trac-Systems/intercom): a reference implementation of the Intercom stack on Trac Network for an internet of -- [JeremyFocy/intercom-swap-advanced](https://github.com/JeremyFocy/intercom-swap-advanced) — This repository is an advanced fork of IntercomSwap with additional tools, Web UI, and agent-interaction features. -- [JuraganRapss/rapss-explorer](https://github.com/JuraganRapss/rapss-explorer) — A powerful CLI-based Bitcoin address tracker built for real-time blockchain monitoring. -- [kulon666/intercom-swap](https://github.com/kulon666/intercom-swap) — A minimal yet powerful local crypto utility dashboard designed for fast monitoring, safe swap simulation, and lightweight mobile usage. -- [LordVolmunk/Intercom-Swap-Smart-Router-Mode](https://github.com/LordVolmunk/Intercom-Swap-Smart-Router-Mode) — This fork upgrades IntercomSwap with -- [nusnuga/SC-BRIDGE-TERMINAL](https://github.com/nusnuga/SC-BRIDGE-TERMINAL) — Pro Web Dashboard • Market Telemetry • Dex Scanner • CoinGecko Chart -- [pakeko78/intercom-swap-by-pakeko](https://github.com/pakeko78/intercom-swap-by-pakeko) — CLI-based AI Multi-Agent Swap Engine -- [papdams/rfq-simulation](https://github.com/papdams/rfq-simulation) — A professional Request For Quote (RFQ) simulation platform built with Node.js (Express) and a modern institutional-style UI. -- [PixieScout/intercom-swap](https://github.com/PixieScout/intercom-swap) — This repository is submitted for the IntercomSwap extension of the Intercom Vibe Competition. -- [Restianrony34/intercom-swap](https://github.com/Restianrony34/intercom-swap) — A Uniswap-inspired decentralized swap interface built for the TRAC Chain ecosystem. -- [SamAndreas01/intercomswap-chatbot](https://github.com/SamAndreas01/intercomswap-chatbot) — A Telegram-based token swap bot built from IntercomSwap. -- [subserina/intercom-swap](https://github.com/subserina/intercom-swap) — Trac Address (for payouts) -- [SukuyamaBugHunter/hunter-treasury](https://github.com/SukuyamaBugHunter/hunter-treasury) — ⚔ Combat Treasury Simulation Engine -- [Syawal2/metrics](https://github.com/Syawal2/metrics) — Real-Time CLI Performance Monitor -- [twityfruity7/Trac-scam-adress-detection](https://github.com/twityfruity7/Trac-scam-adress-detection) — P2P Scam & Risk Detection Agent built on Intercom / Trac Network +# 🔐 Seed Phrase Checker - Trac Network + +A TRAC-themed Seed Phrase Strength Checker built on IntercomSwap. +Check your crypto wallet seed phrase security — 100% locally, nothing sent anywhere. + +## 📸 Screenshots + +### 🏠 Homepage +homepage + +--- + +### 🧪 Testing Results +testing + +--- + +## 🌐 Live Demo +👉 https://onihaxy.github.io/seed-phrase-checker-trac + +--- + +## 🔗 Trac Address +``` +trac1q5r79wn6lc4p3x4desyjw8rna0ml6pakz873vt7r9ary7qlwvgdqwx24d0 +``` +--- + +## ✨ Features +- 🔐 Checks seed phrase strength +- ✅ Validates word count (12, 18, 24 words) +- 🔍 Detects duplicate words +- ⚠️ Detects obvious/weak words +- 📊 Security score out of 100 +- 🔎 BIP39 wordlist validation +- ⚡ 100% runs in browser — no data sent anywhere + +--- + +## 🛠 Tech Stack +- **TypeScript** — Core checking logic +- **Rust** — Fast validation engine +- **Python** — Wordlist generation tools +- **JavaScript** — Frontend app logic +- **CSS** — Separate stylesheet +- **Node.js + Express** — Server + +--- + +## 📁 Project Structure +``` +seed-phrase-checker-trac/ +├── screenshots +├── src/ +│ ├── checker.ts +│ ├── types.ts +│ ├── wordlist.ts +│ └── app.js +├── rust/ +│ ├── Cargo.toml +│ └── src/main.rs +├── python/ +│ ├── wordlist.py +│ └── generate_wordlist.py +├── styles/ +│ └── main.css +├── test/ +│ └── test.ts +├── scripts/ +│ └── run.sh +├── features/ +│ └── roadmap.md +├── dev/ +│ └── notes.md +├── index.html +├── server.ts +├── package.json +├── tsconfig.json +├── SKILL.md +├── LICENSE.md +└── .gitignore +``` + +--- + +## 🚀 Quick Start + +### Prerequisites +- Node.js v22+ +- npm v10+ +- Rust 1.85+ +- Python 3.14.3+ (optional) + +### Installation +```bash +# Clone the repository +git clone https://github.com/Onihaxy/seed-phrase-checker-trac.git + +# Navigate to project +cd seed-phrase-checker-trac + +# Install dependencies +npm install + +# Start the server +npm start +``` + +### Open In Browser +``` +http://localhost:3000 +``` + +--- + +## 🦀 Rust Validation Engine +```bash +# Navigate to rust directory +cd rust + +# Build and run +cargo run +``` + +--- + +## 🐍 Python Wordlist Tools +```bash +# Navigate to python directory +cd python + +# Run wordlist checker +python wordlist.py + +# Generate wordlist files +python generate_wordlist.py +``` + +--- + +## 🧪 Testing +```bash +# Run all tests +npm test + +# Expected output +# ✅ PASS: 12 words is valid +# ✅ PASS: No duplicates passes +# ✅ PASS: Strong phrase detected +``` + +--- + +## 🏆 Competition Entry +- Fork of: https://github.com/Trac-Systems/intercom-swap +- Built for: Intercom Vibe Competition +- Category: IntercomSwap Fork +- onihaxy seed phrase checker IntercomSwap fork +- [onihaxy/seed-phrase-checker-trac](https://github.com/onihaxy/seed-phrase-checker-trac) — A TRAC-themed Seed Phrase Strength Checker built on IntercomSwap. Check wallet security 100% locally. +- Live Demo: https://onihaxy.github.io/seed-phrase-checker-trac + +--- + +## 📄 License +MIT — Fork freely, build on top, win together. diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..be4e214 --- /dev/null +++ b/SKILL.md @@ -0,0 +1,42 @@ + +# Seed Phrase Checker - Skill File + +## What This App Does +A TRAC-themed Seed Phrase Strength Checker built on IntercomSwap. +Checks crypto wallet seed phrase security 100% locally in the browser. +Nothing is ever sent to any server. + +## How To Run +npm install +npm start + +Then open: http://localhost:3000 + +## Features +- Validates word count (12, 18, 24 words) +- Detects duplicate words +- Detects numbers in phrase +- Detects obvious weak words +- Gives security score out of 100 +- Strength rating: Weak, Medium, Strong + +## Built On +- IntercomSwap by Trac Systems +- Trac Network +- Node.js + Express + +## Agent Instructions +- Start server with: npm start +- App runs on port 3000 +- No database required +- No data sent anywhere +- Works fully in browser +- Safe for sensitive wallet data + +## Security Note +This tool is 100% offline safe. +All checks happen in the user's browser only. +No seed phrase data is ever transmitted. +This tool is 100% offline safe. +All checks happen in the user's browser only. +No seed phrase data is ever transmitted. diff --git a/contract/contract.js b/contract/contract.js new file mode 100644 index 0000000..1043d47 --- /dev/null +++ b/contract/contract.js @@ -0,0 +1,102 @@ +// updated +``` +// Seed Phrase Checker - Validation Contract Rules +// Built on IntercomSwap - Trac Network + +'use strict'; + +const CONTRACT_VERSION = '1.0.0'; +const NETWORK = 'Trac Network'; +const BUILT_ON = 'IntercomSwap'; + +// Validation Rules Contract +const VALIDATION_RULES = { + wordCount: { + valid: [12, 18, 24], + minWords: 12, + maxWords: 24, + score: 30 + }, + duplicates: { + allowDuplicates: false, + score: 25 + }, + numbers: { + allowNumbers: false, + score: 20 + }, + lowercase: { + requireLowercase: true, + score: 10 + }, + obviousWords: { + score: 15, + blacklist: [ + 'password', 'crypto', 'bitcoin', 'wallet', + 'trac', 'secret', 'hello', 'test', 'admin', + 'user', 'login', 'access', 'key', 'pass', + 'qwerty', 'letmein', 'welcome', 'monkey' + ] + }, + bip39: { + score: 10, + enforced: true + } +}; + +// Strength Thresholds +const STRENGTH_THRESHOLDS = { + STRONG: 80, + MEDIUM: 50, + WEAK: 0 +}; + +// Contract Methods +function getValidationRules() { + return VALIDATION_RULES; +} + +function getStrengthThresholds() { + return STRENGTH_THRESHOLDS; +} + +function getContractInfo() { + return { + version: CONTRACT_VERSION, + network: NETWORK, + builtOn: BUILT_ON, + totalScore: Object.values(VALIDATION_RULES) + .reduce((sum, rule) => sum + (rule.score || 0), 0) + }; +} + +function validateScore(score) { + if (score >= STRENGTH_THRESHOLDS.STRONG) return 'STRONG'; + if (score >= STRENGTH_THRESHOLDS.MEDIUM) return 'MEDIUM'; + return 'WEAK'; +} + +function isBlacklisted(word) { + return VALIDATION_RULES.obviousWords.blacklist.includes( + word.toLowerCase() + ); +} + +function isValidWordCount(count) { + return VALIDATION_RULES.wordCount.valid.includes(count); +} + +module.exports = { + getValidationRules, + getStrengthThresholds, + getContractInfo, + validateScore, + isBlacklisted, + isValidWordCount, + VALIDATION_RULES, + STRENGTH_THRESHOLDS, + CONTRACT_VERSION, + NETWORK, + BUILT_ON +}; +``` diff --git a/contract/protocol.js b/contract/protocol.js new file mode 100644 index 0000000..e679547 --- /dev/null +++ b/contract/protocol.js @@ -0,0 +1,149 @@ +// Seed Phrase Checker - P2P Protocol Handler +// Built on IntercomSwap - Trac Network + +'use strict'; + +const PROTOCOL_VERSION = '1.0.0'; +const NETWORK = 'Trac Network'; +const BUILT_ON = 'IntercomSwap'; + +// Protocol Configuration +const PROTOCOL_CONFIG = { + name: 'seed-phrase-checker', + version: PROTOCOL_VERSION, + network: NETWORK, + builtOn: BUILT_ON, + port: 3000, + maxConnections: 100, + timeout: 30000, + retryAttempts: 3, + retryDelay: 1000 +}; + +// Message Types +const MESSAGE_TYPES = { + CHECK_PHRASE: 'check_phrase', + PHRASE_RESULT: 'phrase_result', + HEALTH_CHECK: 'health_check', + HEALTH_RESPONSE: 'health_response', + ERROR: 'error', + PING: 'ping', + PONG: 'pong' +}; + +// Protocol State +const STATE = { + IDLE: 'idle', + CHECKING: 'checking', + CONNECTED: 'connected', + DISCONNECTED: 'disconnected', + ERROR: 'error' +}; + +// Message Builder +function buildMessage(type, payload = {}) { + return { + type, + payload, + network: NETWORK, + builtOn: BUILT_ON, + version: PROTOCOL_VERSION, + timestamp: new Date().toISOString() + }; +} + +// Request Handler +function handleRequest(type, data) { + switch (type) { + case MESSAGE_TYPES.CHECK_PHRASE: + return buildMessage(MESSAGE_TYPES.PHRASE_RESULT, { + status: 'processing', + data + }); + case MESSAGE_TYPES.HEALTH_CHECK: + return buildMessage(MESSAGE_TYPES.HEALTH_RESPONSE, { + status: 'ok', + network: NETWORK, + builtOn: BUILT_ON, + version: PROTOCOL_VERSION + }); + case MESSAGE_TYPES.PING: + return buildMessage(MESSAGE_TYPES.PONG, { + status: 'ok', + timestamp: new Date().toISOString() + }); + default: + return buildMessage(MESSAGE_TYPES.ERROR, { + status: 'error', + message: `Unknown message type: ${type}` + }); + } +} + +// Connection Manager +function createConnection(config = {}) { + const connection = { + ...PROTOCOL_CONFIG, + ...config, + state: STATE.IDLE, + connectedAt: null, + messageCount: 0 + }; + + return { + connect() { + connection.state = STATE.CONNECTED; + connection.connectedAt = new Date().toISOString(); + console.log(`✅ Connected to ${NETWORK} via ${BUILT_ON}`); + return connection; + }, + disconnect() { + connection.state = STATE.DISCONNECTED; + console.log(`❌ Disconnected from ${NETWORK}`); + return connection; + }, + send(type, payload) { + connection.messageCount++; + return handleRequest(type, payload); + }, + getState() { + return connection.state; + }, + getInfo() { + return { + ...connection, + uptime: connection.connectedAt + ? Date.now() - new Date(connection.connectedAt).getTime() + : 0 + }; + } + }; +} + +// Protocol Logger +function log(message, level = 'info') { + const levels = { + info: '📡', + warn: '⚠️', + error: '❌', + success: '✅' + }; + const emoji = levels[level] || '📡'; + console.log( + `${emoji} [${NETWORK}] [${new Date().toISOString()}] ${message}` + ); +} + +module.exports = { + PROTOCOL_CONFIG, + MESSAGE_TYPES, + STATE, + buildMessage, + handleRequest, + createConnection, + log, + PROTOCOL_VERSION, + NETWORK, + BUILT_ON +}; +``` diff --git a/dev/notes.md b/dev/notes.md new file mode 100644 index 0000000..69a50cb --- /dev/null +++ b/dev/notes.md @@ -0,0 +1,53 @@ + +# Developer Notes +Built on IntercomSwap - Trac Network + +## Project Overview +Seed Phrase Checker is a TRAC-themed web app that checks +the strength and security of crypto wallet seed phrases. +100% local - nothing is ever sent to any server. + +## Architecture +- Frontend: Pure HTML/CSS/JS (index.html) +- Backend: Node.js + Express (server.js) +- Core Logic: src/checker.js +- Tests: test/test.js +- Run Script: scripts/run.sh + +## How It Works +1. User enters seed phrase in browser +2. JavaScript checks the phrase locally +3. Results shown instantly in browser +4. Nothing sent to server ever + +## Security Decisions +- All checks run in browser only +- No API calls made +- No database used +- No logging of seed phrases +- Auto-clear on page refresh + +## Code Structure +index.html — Main UI and frontend logic +server.js — Express server (serves index.html) +src/checker.js — Core checking logic (reusable) +test/test.js — Unit tests +scripts/run.sh — Easy run script + +## Development Setup +npm install +npm start +open http://localhost:3000 + +## Testing +node test/test.js + +## Built On +- IntercomSwap by Trac Systems +- Trac Network +- Node.js + Express + +## Competition Entry +- Intercom Vibe Competition +- Category: IntercomSwap Fork +- Unique: First seed phrase checker on Trac Network diff --git a/features/roadmap.md b/features/roadmap.md new file mode 100644 index 0000000..a4b03c9 --- /dev/null +++ b/features/roadmap.md @@ -0,0 +1,40 @@ + +# Seed Phrase Checker - Feature Roadmap +Built on IntercomSwap - Trac Network + +## Current Features (v1.0.0) +- ✅ Word count validation (12, 18, 24 words) +- ✅ Duplicate word detection +- ✅ Number detection +- ✅ Obvious weak word detection +- ✅ Lowercase validation +- ✅ Security score out of 100 +- ✅ Strength rating (Weak, Medium, Strong) +- ✅ 100% local - no data sent anywhere +- ✅ TRAC themed dark UI + +## Upcoming Features (v1.1.0) +- 🔜 Full BIP39 wordlist validation +- 🔜 Word suggestion if typo detected +- 🔜 Multiple language support +- 🔜 Copy protection (disable paste detection) +- 🔜 Auto clear after 60 seconds for security + +## Future Features (v2.0.0) +- 🔮 P2P seed phrase strength comparison +- 🔮 Intercom agent integration +- 🔮 Mobile PWA support +- 🔮 TRAC wallet connect +- 🔮 TNK reward for strong phrases +- 🔮 Multi wallet support + +## Security Roadmap +- 🔒 Add BIP39 full wordlist (2048 words) +- 🔒 Entropy calculation +- 🔒 Pattern detection +- 🔒 Dictionary attack simulation +- 🔒 Zero knowledge proof integration + +## Built On +- IntercomSwap by Trac Systems +- Trac Network diff --git a/index.html b/index.html new file mode 100644 index 0000000..5afcb4c --- /dev/null +++ b/index.html @@ -0,0 +1,57 @@ + +``` + + + + + + Seed Phrase Checker - Trac Network + + + + + +

🔐 Seed Phrase Checker

+

BUILT ON INTERCOMSWAP · CHECK YOUR WALLET SECURITY

+ +
+
+ ⚠️ 100% LOCAL — Your seed phrase is NEVER sent anywhere. All checks run in your browser only. +
+ + + + + + + +
+
+
SCORE
+
0
+
+
+ +
+ +
+
TRAC ADDRESS
+
+
+ trac1q5r79wn6lc4p3x4desyjw8rna0ml6pakz873vt7r9ary7qlwvgdqwx24d0 +
+ +
+
+
+ + + + + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..582105e --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "seed-phrase-checker-trac", + "version": "1.0.0", + "description": "A TRAC-themed Seed Phrase Strength Checker built on IntercomSwap", + "main": "dist/server.js", + "scripts": { + "start": "node dist/server.js", + "build": "tsc", + "dev": "ts-node server.ts", + "test": "ts-node test/test.ts" + }, + "dependencies": { + "express": "^4.18.2" + }, + "devDependencies": { + "typescript": "^5.0.0", + "ts-node": "^10.9.1", + "@types/express": "^4.17.17", + "@types/node": "^20.0.0" + }, + "author": "onihaxy", + "license": "MIT", +"keywords": ["trac", "intercom", "seed-phrase", "crypto"] +``` +} diff --git a/python/generate_wordlist.py b/python/generate_wordlist.py new file mode 100644 index 0000000..c47ef2e --- /dev/null +++ b/python/generate_wordlist.py @@ -0,0 +1,154 @@ +# updated +# Seed Phrase Checker - Wordlist Generator +# Built on IntercomSwap - Trac Network + +import json +import os +from typing import List, Dict + + +def generate_wordlist_json(words: List[str], output_path: str) -> None: + """Generate a JSON file from wordlist""" + data = { + "name": "BIP39 Wordlist", + "version": "1.0.0", + "network": "Trac Network", + "built_on": "IntercomSwap", + "total_words": len(words), + "words": words + } + with open(output_path, 'w') as f: + json.dump(data, f, indent=2) + print(f"✅ Generated {output_path} with {len(words)} words") + + +def generate_wordlist_ts(words: List[str], output_path: str) -> None: + """Generate a TypeScript file from wordlist""" + lines = [ + "// Auto-generated BIP39 Wordlist", + "// Built on IntercomSwap - Trac Network", + "", + "export const BIP39_WORDLIST: string[] = [", + ] + for i in range(0, len(words), 7): + chunk = words[i:i+7] + line = " " + ", ".join(f'"{w}"' for w in chunk) + "," + lines.append(line) + lines.append("];") + lines.append("") + lines.append("export default BIP39_WORDLIST;") + + with open(output_path, 'w') as f: + f.write('\n'.join(lines)) + print(f"✅ Generated {output_path} with {len(words)} words") + + +def generate_wordlist_rust(words: List[str], output_path: str) -> None: + """Generate a Rust file from wordlist""" + lines = [ + "// Auto-generated BIP39 Wordlist", + "// Built on IntercomSwap - Trac Network", + "", + f"pub const BIP39_WORDLIST: [&str; {len(words)}] = [", + ] + for i in range(0, len(words), 5): + chunk = words[i:i+5] + line = " " + ", ".join(f'"{w}"' for w in chunk) + "," + lines.append(line) + lines.append("];") + + with open(output_path, 'w') as f: + f.write('\n'.join(lines)) + print(f"✅ Generated {output_path} with {len(words)} words") + + +def validate_wordlist(words: List[str]) -> Dict: + """Validate the wordlist for quality""" + issues = [] + if len(words) < 100: + issues.append(f"⚠️ Only {len(words)} words — BIP39 needs 2048") + duplicates = [w for w in words if words.count(w) > 1] + if duplicates: + issues.append(f"❌ Duplicates found: {set(duplicates)}") + non_alpha = [w for w in words if not w.isalpha()] + if non_alpha: + issues.append(f"❌ Non-alpha words: {non_alpha[:5]}") + uppercase = [w for w in words if w != w.lower()] + if uppercase: + issues.append(f"❌ Uppercase words: {uppercase[:5]}") + return { + 'total': len(words), + 'valid': len(issues) == 0, + 'issues': issues + } + + +def print_stats(words: List[str]) -> None: + """Print wordlist statistics""" + validation = validate_wordlist(words) + print() + print('=' * 40) + print(' WORDLIST STATISTICS') + print(' Built on IntercomSwap - Trac Network') + print('=' * 40) + print(f" Total Words : {validation['total']}") + print(f" Valid : {validation['valid']}") + avg_len = sum(len(w) for w in words) / len(words) + print(f" Avg Length : {avg_len:.1f} chars") + print(f" Min Length : {min(len(w) for w in words)}") + print(f" Max Length : {max(len(w) for w in words)}") + print('=' * 40) + if validation['issues']: + print(' ISSUES:') + for issue in validation['issues']: + print(f" {issue}") + else: + print(' ✅ No issues found!') + print('=' * 40) + print() + + +# Sample BIP39 words +SAMPLE_WORDS = [ + "abandon", "ability", "able", "about", "above", "absent", "absorb", + "abstract", "absurd", "abuse", "access", "accident", "account", "accuse", + "achieve", "acid", "acoustic", "acquire", "across", "act", "action", + "actor", "actress", "actual", "adapt", "add", "addict", "address", + "adjust", "admit", "adult", "advance", "advice", "aerobic", "afford", + "afraid", "again", "age", "agent", "agree", "ahead", "aim", "air", + "airport", "aisle", "alarm", "album", "alcohol", "alert", "alien", + "all", "alley", "allow", "almost", "alone", "alpha", "already", "also", + "alter", "always", "amateur", "amazing", "among", "amount", "amused", + "analyst", "anchor", "ancient", "anger", "angle", "angry", "animal", + "ankle", "announce", "annual", "another", "answer", "antenna", "antique", + "anxiety", "any", "apart", "apology", "appear", "apple", "approve", + "april", "arch", "arctic", "area", "arena", "argue", "arm", "armed", + "armor", "army", "around", "arrange", "arrest", "arrive", "arrow", + "art", "artefact", "artist", "artwork", "ask", "aspect", "assault", + "asset", "assist", "assume", "asthma", "athlete", "atom", "attack", + "attend", "attitude", "attract", "auction", "audit", "august", "aunt", + "author", "auto", "autumn", "average", "avocado", "avoid", "awake", + "aware", "away", "awesome", "awful", "awkward", "axis" +] + + +if __name__ == '__main__': + print('=' * 40) + print(' Wordlist Generator') + print(' Built on IntercomSwap - Trac Network') + print('=' * 40) + + # Print stats + print_stats(SAMPLE_WORDS) + + # Create output directory + os.makedirs('output', exist_ok=True) + + # Generate files + generate_wordlist_json(SAMPLE_WORDS, 'output/wordlist.json') + generate_wordlist_ts(SAMPLE_WORDS, 'output/wordlist.ts') + generate_wordlist_rust(SAMPLE_WORDS, 'output/wordlist.rs') + + print() + print('✅ All wordlist files generated in output/ folder!') + print('🔐 Built on IntercomSwap - Trac Network') diff --git a/python/wordlist.py b/python/wordlist.py new file mode 100644 index 0000000..9506167 --- /dev/null +++ b/python/wordlist.py @@ -0,0 +1,223 @@ +# updated +# Seed Phrase Checker - Python Wordlist Tool +# Built on IntercomSwap - Trac Network + +import json +import re +from typing import List, Dict, Tuple + +# BIP39 Wordlist (First 200 words) +BIP39_WORDLIST = [ + "abandon", "ability", "able", "about", "above", "absent", "absorb", + "abstract", "absurd", "abuse", "access", "accident", "account", "accuse", + "achieve", "acid", "acoustic", "acquire", "across", "act", "action", + "actor", "actress", "actual", "adapt", "add", "addict", "address", + "adjust", "admit", "adult", "advance", "advice", "aerobic", "afford", + "afraid", "again", "age", "agent", "agree", "ahead", "aim", "air", + "airport", "aisle", "alarm", "album", "alcohol", "alert", "alien", + "all", "alley", "allow", "almost", "alone", "alpha", "already", "also", + "alter", "always", "amateur", "amazing", "among", "amount", "amused", + "analyst", "anchor", "ancient", "anger", "angle", "angry", "animal", + "ankle", "announce", "annual", "another", "answer", "antenna", "antique", + "anxiety", "any", "apart", "apology", "appear", "apple", "approve", + "april", "arch", "arctic", "area", "arena", "argue", "arm", "armed", + "armor", "army", "around", "arrange", "arrest", "arrive", "arrow", + "art", "artefact", "artist", "artwork", "ask", "aspect", "assault", + "asset", "assist", "assume", "asthma", "athlete", "atom", "attack", + "attend", "attitude", "attract", "auction", "audit", "august", "aunt", + "author", "auto", "autumn", "average", "avocado", "avoid", "awake", + "aware", "away", "awesome", "awful", "awkward", "axis", "baby", "balance", + "bamboo", "banana", "banner", "bar", "barely", "bargain", "barrel", + "base", "basic", "basket", "battle", "beach", "bean", "beauty", "because", + "become", "beef", "before", "begin", "behave", "behind", "believe", + "below", "belt", "bench", "benefit", "best", "betray", "better", "between", + "beyond", "bicycle", "bid", "bike", "bind", "biology", "bird", "birth", + "bitter", "black", "blade", "blame", "blanket", "blast", "bleak", + "bless", "blind", "blood", "blossom", "blouse", "blue", "blur", "blush", + "board", "boat", "body", "boil", "bomb", "bone", "book", "boost", + "border", "boring", "borrow", "boss", "bottom", "bounce", "box", "boy" +] + +OBVIOUS_WORDS = [ + 'password', 'crypto', 'bitcoin', 'wallet', 'trac', + 'secret', 'hello', 'test', 'admin', 'user', + 'login', 'access', 'key', 'pass', 'qwerty', + 'letmein', 'welcome', 'monkey' +] + +VALID_COUNTS = [12, 18, 24] + + +def is_valid_bip39_word(word: str) -> bool: + return word.lower() in BIP39_WORDLIST + + +def get_invalid_words(words: List[str]) -> List[str]: + return [w for w in words if not is_valid_bip39_word(w)] + + +def get_valid_words(words: List[str]) -> List[str]: + return [w for w in words if is_valid_bip39_word(w)] + + +def check_word_count(words: List[str]) -> Dict: + count = len(words) + if count in VALID_COUNTS: + return { + 'status': 'pass', + 'message': f'✅ Word count is {count} — Valid!', + 'score': 30 + } + elif count < 12: + return { + 'status': 'fail', + 'message': f'❌ Only {count} words — Need at least 12!', + 'score': 0 + } + return { + 'status': 'warn', + 'message': f'⚠️ {count} words — Use 12, 18, or 24', + 'score': 10 + } + + +def check_duplicates(words: List[str]) -> Dict: + if len(set(words)) == len(words): + return { + 'status': 'pass', + 'message': '✅ No duplicate words found — Good!', + 'score': 25 + } + return { + 'status': 'fail', + 'message': '❌ Duplicate words detected — Weak phrase!', + 'score': 0 + } + + +def check_numbers(words: List[str]) -> Dict: + if not any(re.search(r'\d', w) for w in words): + return { + 'status': 'pass', + 'message': '✅ No numbers found — Correct format!', + 'score': 20 + } + return { + 'status': 'fail', + 'message': '❌ Numbers found — Use words only!', + 'score': 0 + } + + +def check_lowercase(words: List[str]) -> Dict: + if all(w == w.lower() for w in words): + return { + 'status': 'pass', + 'message': '✅ All words are lowercase — Correct!', + 'score': 10 + } + return { + 'status': 'warn', + 'message': '⚠️ Some words have capitals — Use lowercase!', + 'score': 5 + } + + +def check_obvious_words(words: List[str]) -> Dict: + found = [w for w in words if w in OBVIOUS_WORDS] + if not found: + return { + 'status': 'pass', + 'message': '✅ No obvious weak words detected — Good!', + 'score': 15 + } + return { + 'status': 'fail', + 'message': f'❌ Weak words found: {", ".join(found)}', + 'score': 0 + } + + +def check_bip39_words(words: List[str]) -> Dict: + invalid = get_invalid_words(words) + if not invalid: + return { + 'status': 'pass', + 'message': '✅ All words are valid BIP39 words!', + 'score': 10 + } + return { + 'status': 'warn', + 'message': f'⚠️ Non-BIP39 words: {", ".join(invalid[:3])}', + 'score': 5 + } + + +def get_strength(score: int) -> str: + if score >= 80: + return 'STRONG' + elif score >= 50: + return 'MEDIUM' + return 'WEAK' + + +def analyze_phrase(phrase: str) -> Dict: + words = phrase.strip().lower().split() + checks = [ + check_word_count(words), + check_duplicates(words), + check_numbers(words), + check_lowercase(words), + check_obvious_words(words), + check_bip39_words(words) + ] + score = sum(c['score'] for c in checks) + strength = get_strength(score) + return { + 'words': words, + 'word_count': len(words), + 'score': score, + 'strength': strength, + 'is_valid': strength != 'WEAK', + 'checks': checks + } + + +def print_report(report: Dict) -> None: + print() + print('=' * 40) + print(' SEED PHRASE ANALYSIS REPORT') + print(' Built on IntercomSwap - Trac Network') + print('=' * 40) + print(f" Word Count : {report['word_count']}") + print(f" Score : {report['score']}/100") + print(f" Strength : {report['strength']}") + print(f" Valid : {report['is_valid']}") + print('=' * 40) + print() + for check in report['checks']: + print(f" {check['message']}") + print() + print('=' * 40) + + +if __name__ == '__main__': + print('=' * 40) + print(' Seed Phrase Checker - Python Tool') + print(' Built on IntercomSwap - Trac Network') + print('=' * 40) + print() + + while True: + try: + phrase = input('Enter your seed phrase: ') + if not phrase.strip(): + print('Please enter a seed phrase!') + continue + report = analyze_phrase(phrase) + print_report(report) + print(json.dumps(report, indent=2)) + except KeyboardInterrupt: + print() + print('Goodbye! Stay SAFU! 🔐') + break diff --git a/rust/Cargo.toml b/rust/Cargo.toml new file mode 100644 index 0000000..75c2d62 --- /dev/null +++ b/rust/Cargo.toml @@ -0,0 +1,15 @@ +# updated +[package] +name = "seed-phrase-checker" +version = "1.0.0" +edition = "2021" +description = "Seed Phrase Strength Checker - Built on IntercomSwap Trac Network" +license = "MIT" + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" + +[[bin]] +name = "seed-checker" +path = "src/main.rs" diff --git a/rust/src/main.rs b/rust/src/main.rs new file mode 100644 index 0000000..eba6f8a --- /dev/null +++ b/rust/src/main.rs @@ -0,0 +1,239 @@ +// updated +// Seed Phrase Checker - Rust Validation Engine +// Built on IntercomSwap - Trac Network + +use serde::{Deserialize, Serialize}; +use std::collections::HashSet; +use std::io::{self, BufRead}; + +#[derive(Debug, Serialize, Deserialize)] +pub struct CheckResult { + pub status: String, + pub message: String, + pub score: u32, +} + +#[derive(Debug, Serialize, Deserialize)] +pub struct SeedPhraseReport { + pub word_count: usize, + pub score: u32, + pub strength: String, + pub is_valid: bool, + pub checks: Vec, +} + +const VALID_COUNTS: [usize; 3] = [12, 18, 24]; + +const OBVIOUS_WORDS: [&str; 18] = [ + "password", "crypto", "bitcoin", "wallet", + "trac", "secret", "hello", "test", "admin", + "user", "login", "access", "key", "pass", + "qwerty", "letmein", "welcome", "monkey", +]; + +const BIP39_WORDS: [&str; 100] = [ + "abandon", "ability", "able", "about", "above", + "absent", "absorb", "abstract", "absurd", "abuse", + "access", "accident", "account", "accuse", "achieve", + "acid", "acoustic", "acquire", "across", "act", + "action", "actor", "actress", "actual", "adapt", + "add", "addict", "address", "adjust", "admit", + "adult", "advance", "advice", "aerobic", "afford", + "afraid", "again", "age", "agent", "agree", + "ahead", "aim", "air", "airport", "aisle", + "alarm", "album", "alcohol", "alert", "alien", + "all", "alley", "allow", "almost", "alone", + "alpha", "already", "also", "alter", "always", + "amateur", "amazing", "among", "amount", "amused", + "analyst", "anchor", "ancient", "anger", "angle", + "angry", "animal", "ankle", "announce", "annual", + "another", "answer", "antenna", "antique", "anxiety", + "any", "apart", "apology", "appear", "apple", + "approve", "april", "arch", "arctic", "area", + "arena", "argue", "arm", "armed", "armor", + "army", "around", "arrange", "arrest", "arrive", +]; + +pub fn check_word_count(words: &[&str]) -> CheckResult { + let count = words.len(); + if VALID_COUNTS.contains(&count) { + CheckResult { + status: "pass".to_string(), + message: format!("✅ Word count is {} — Valid!", count), + score: 30, + } + } else if count < 12 { + CheckResult { + status: "fail".to_string(), + message: format!("❌ Only {} words — Need at least 12!", count), + score: 0, + } + } else { + CheckResult { + status: "warn".to_string(), + message: format!("⚠️ {} words — Use 12, 18, or 24", count), + score: 10, + } + } +} + +pub fn check_duplicates(words: &[&str]) -> CheckResult { + let unique: HashSet<&str> = words.iter().cloned().collect(); + if unique.len() == words.len() { + CheckResult { + status: "pass".to_string(), + message: "✅ No duplicate words found — Good!".to_string(), + score: 25, + } + } else { + CheckResult { + status: "fail".to_string(), + message: "❌ Duplicate words detected — Weak phrase!".to_string(), + score: 0, + } + } +} + +pub fn check_numbers(words: &[&str]) -> CheckResult { + let has_numbers = words.iter().any(|w| w.chars().any(|c| c.is_numeric())); + if !has_numbers { + CheckResult { + status: "pass".to_string(), + message: "✅ No numbers found — Correct format!".to_string(), + score: 20, + } + } else { + CheckResult { + status: "fail".to_string(), + message: "❌ Numbers found — Use words only!".to_string(), + score: 0, + } + } +} + +pub fn check_lowercase(words: &[&str]) -> CheckResult { + let all_lower = words.iter().all(|w| w.chars().all(|c| c.is_lowercase())); + if all_lower { + CheckResult { + status: "pass".to_string(), + message: "✅ All words are lowercase — Correct!".to_string(), + score: 10, + } + } else { + CheckResult { + status: "warn".to_string(), + message: "⚠️ Some words have capitals — Use lowercase!".to_string(), + score: 5, + } + } +} + +pub fn check_obvious_words(words: &[&str]) -> CheckResult { + let found: Vec<&str> = words + .iter() + .filter(|w| OBVIOUS_WORDS.contains(w)) + .cloned() + .collect(); + if found.is_empty() { + CheckResult { + status: "pass".to_string(), + message: "✅ No obvious weak words detected — Good!".to_string(), + score: 15, + } + } else { + CheckResult { + status: "fail".to_string(), + message: format!("❌ Weak words found: {}", found.join(", ")), + score: 0, + } + } +} + +pub fn check_bip39_words(words: &[&str]) -> CheckResult { + let invalid: Vec<&str> = words + .iter() + .filter(|w| !BIP39_WORDS.contains(w)) + .cloned() + .collect(); + if invalid.is_empty() { + CheckResult { + status: "pass".to_string(), + message: "✅ All words are valid BIP39 words!".to_string(), + score: 10, + } + } else { + CheckResult { + status: "warn".to_string(), + message: format!( + "⚠️ Non-BIP39 words: {}", + invalid[..invalid.len().min(3)].join(", ") + ), + score: 5, + } + } +} + +pub fn get_strength(score: u32) -> &'static str { + if score >= 80 { "STRONG" } + else if score >= 50 { "MEDIUM" } + else { "WEAK" } +} + +pub fn analyze_phrase(phrase: &str) -> SeedPhraseReport { + let words: Vec<&str> = phrase + .trim() + .split_whitespace() + .collect(); + + let checks = vec![ + check_word_count(&words), + check_duplicates(&words), + check_numbers(&words), + check_lowercase(&words), + check_obvious_words(&words), + check_bip39_words(&words), + ]; + + let score: u32 = checks.iter().map(|c| c.score).sum(); + let strength = get_strength(score).to_string(); + let is_valid = strength != "WEAK"; + + SeedPhraseReport { + word_count: words.len(), + score, + strength, + is_valid, + checks, + } +} + +fn main() { + println!("=================================="); + println!(" Seed Phrase Checker - Rust Engine"); + println!(" Built on IntercomSwap - Trac Network"); + println!("=================================="); + println!(); + println!("Enter your seed phrase and press Enter:"); + println!(); + + let stdin = io::stdin(); + for line in stdin.lock().lines() { + let phrase = line.unwrap(); + if phrase.trim().is_empty() { + println!("Please enter a seed phrase!"); + continue; + } + + let report = analyze_phrase(&phrase); + let json = serde_json::to_string_pretty(&report).unwrap(); + println!("{}", json); + println!(); + println!("=================================="); + println!(" Score: {}/100", report.score); + println!(" Strength: {}", report.strength); + println!(" Valid: {}", report.is_valid); + println!("=================================="); + println!(); + println!("Enter another phrase or Ctrl+C to exit:"); + } +} diff --git a/scripts/run.sh b/scripts/run.sh new file mode 100644 index 0000000..916e8ed --- /dev/null +++ b/scripts/run.sh @@ -0,0 +1,36 @@ +# updated +``` +#!/bin/bash + +# Seed Phrase Checker - Run Script +# Built on IntercomSwap - Trac Network + +echo "==================================" +echo " Seed Phrase Checker - Trac Network" +echo " Built on IntercomSwap" +echo "==================================" +echo "" + +# Check if Node.js is installed +if ! command -v node &> /dev/null; then + echo "❌ Node.js is not installed!" + echo "Please install Node.js from https://nodejs.org" + exit 1 +fi + +echo "✅ Node.js found: $(node --version)" + +# Check if dependencies are installed +if [ ! -d "node_modules" ]; then + echo "📦 Installing dependencies..." + npm install +fi + +echo "✅ Dependencies ready" +echo "" +echo "🚀 Starting Seed Phrase Checker..." +echo "🌐 Open browser at: http://localhost:3000" +echo "" + +# Start the server +npm start diff --git a/server.ts b/server.ts new file mode 100644 index 0000000..c91d882 --- /dev/null +++ b/server.ts @@ -0,0 +1,75 @@ +// updated +// Seed Phrase Checker - Server +// Built on IntercomSwap - Trac Network + +import express, { Request, Response } from 'express'; +import path from 'path'; +import { analyzePhrase } from './src/checker'; +import { SeedPhraseReport } from './src/types'; + +const app = express(); +const PORT: number = parseInt(process.env.PORT || '3000', 10); + +// Middleware +app.use(express.json()); +app.use(express.static(__dirname)); + +// Routes +app.get('/', (req: Request, res: Response) => { + res.sendFile(path.join(__dirname, 'index.html')); +}); + +app.post('/api/check', (req: Request, res: Response) => { + try { + const { phrase } = req.body; + + if (!phrase || typeof phrase !== 'string') { + return res.status(400).json({ + error: 'Invalid request — phrase is required' + }); + } + + if (phrase.trim().length === 0) { + return res.status(400).json({ + error: 'Phrase cannot be empty' + }); + } + + const report: SeedPhraseReport = analyzePhrase(phrase); + + return res.json({ + success: true, + report + }); + + } catch (error) { + return res.status(500).json({ + error: 'Internal server error' + }); + } +}); + +app.get('/api/health', (req: Request, res: Response) => { + res.json({ + status: 'ok', + app: 'Seed Phrase Checker', + version: '1.0.0', + network: 'Trac Network', + built_on: 'IntercomSwap', + timestamp: new Date().toISOString() + }); +}); + +// Start server +app.listen(PORT, () => { + console.log('=================================='); + console.log(' Seed Phrase Checker'); + console.log(' Built on IntercomSwap'); + console.log(' Trac Network'); + console.log('=================================='); + console.log(`🚀 Running on http://localhost:${PORT}`); + console.log(`📡 API: http://localhost:${PORT}/api/health`); + console.log('=================================='); +}); + +export default app; diff --git a/src/app.js b/src/app.js new file mode 100644 index 0000000..29f3d4c --- /dev/null +++ b/src/app.js @@ -0,0 +1,165 @@ +// updated +// Seed Phrase Checker - Frontend App Logic +// Built on IntercomSwap - Trac Network + +const OBVIOUS_WORDS = [ + 'password', 'crypto', 'bitcoin', 'wallet', 'trac', + 'secret', 'hello', 'test', 'admin', 'user', + 'login', 'access', 'key', 'pass', 'qwerty', + 'letmein', 'welcome', 'monkey' +]; + +const BIP39_WORDS = [ + "abandon", "ability", "able", "about", "above", "absent", "absorb", + "abstract", "absurd", "abuse", "access", "accident", "account", "accuse", + "achieve", "acid", "acoustic", "acquire", "across", "act", "action", + "actor", "actress", "actual", "adapt", "add", "addict", "address", + "adjust", "admit", "adult", "advance", "advice", "aerobic", "afford", + "afraid", "again", "age", "agent", "agree", "ahead", "aim", "air", + "airport", "aisle", "alarm", "album", "alcohol", "alert", "alien", + "all", "alley", "allow", "almost", "alone", "alpha", "already", "also", + "alter", "always", "amateur", "amazing", "among", "amount", "amused", + "analyst", "anchor", "ancient", "anger", "angle", "angry", "animal", + "ankle", "announce", "annual", "another", "answer", "antenna", "antique", + "anxiety", "any", "apart", "apology", "appear", "apple", "approve", + "april", "arch", "arctic", "area", "arena", "argue", "arm", "armed", + "armor", "army", "around", "arrange", "arrest", "arrive", "arrow", + "art", "artefact", "artist", "artwork", "ask", "aspect", "assault", + "asset", "assist", "assume", "asthma", "athlete", "atom", "attack", + "attend", "attitude", "attract", "auction", "audit", "august", "aunt", + "author", "auto", "autumn", "average", "avocado", "avoid", "awake", + "aware", "away", "awesome", "awful", "awkward", "axis" +]; + +// Analysis Functions +function analyzePhrase(phrase) { + const words = phrase.trim().toLowerCase().split(/\s+/).filter(w => w.length > 0); + const checks = []; + let score = 0; + + // Word count check + if ([12, 18, 24].includes(words.length)) { + checks.push({ status: 'pass', text: `✅ Word count is ${words.length} — Valid!` }); + score += 30; + } else if (words.length < 12) { + checks.push({ status: 'fail', text: `❌ Only ${words.length} words — Need at least 12!` }); + } else { + checks.push({ status: 'warn', text: `⚠️ ${words.length} words — Use 12, 18, or 24` }); + score += 10; + } + + // Duplicates check + const unique = new Set(words); + if (unique.size === words.length) { + checks.push({ status: 'pass', text: '✅ No duplicate words found — Good!' }); + score += 25; + } else { + checks.push({ status: 'fail', text: '❌ Duplicate words detected — Weak phrase!' }); + } + + // Numbers check + if (!words.some(w => /\d/.test(w))) { + checks.push({ status: 'pass', text: '✅ No numbers found — Correct format!' }); + score += 20; + } else { + checks.push({ status: 'fail', text: '❌ Numbers found — Use words only!' }); + } + + // Lowercase check + if (words.every(w => w === w.toLowerCase())) { + checks.push({ status: 'pass', text: '✅ All words are lowercase — Correct!' }); + score += 10; + } else { + checks.push({ status: 'warn', text: '⚠️ Some words have capitals — Use lowercase!' }); + } + + // Obvious words check + const found = words.filter(w => OBVIOUS_WORDS.includes(w)); + if (found.length === 0) { + checks.push({ status: 'pass', text: '✅ No obvious weak words detected — Good!' }); + score += 15; + } else { + checks.push({ status: 'fail', text: `❌ Weak words found: ${found.join(', ')}` }); + } + + // BIP39 check + const invalid = words.filter(w => !BIP39_WORDS.includes(w)); + if (invalid.length === 0) { + checks.push({ status: 'pass', text: '✅ All words are valid BIP39 words!' }); + score += 10; + } else { + checks.push({ status: 'warn', text: `⚠️ Non-BIP39 words: ${invalid.slice(0, 3).join(', ')}` }); + } + + return { words, score, checks }; +} + +// UI Functions +function checkSeedPhrase() { + const input = document.getElementById('seedInput').value; + if (!input.trim()) { + alert('Please enter a seed phrase first!'); + return; + } + + const { score, checks } = analyzePhrase(input); + const results = document.getElementById('results'); + const checkList = document.getElementById('checkList'); + const scoreBox = document.getElementById('scoreBox'); + const scoreLabel = document.getElementById('scoreLabel'); + const scoreNumber = document.getElementById('scoreNumber'); + const scoreText = document.getElementById('scoreText'); + + checkList.innerHTML = ''; + + let strength, cls, text; + if (score >= 80) { + strength = 'STRONG 💪'; + cls = 'strong'; + text = 'Your seed phrase looks secure!'; + } else if (score >= 50) { + strength = 'MEDIUM ⚠️'; + cls = 'medium'; + text = 'Could be stronger. Review checks below.'; + } else { + strength = 'WEAK ❌'; + cls = 'weak'; + text = 'Serious issues found. Do not use this phrase!'; + } + + scoreBox.className = `score-box ${cls}`; + scoreLabel.className = `score-label ${cls}`; + scoreNumber.className = `score-number ${cls}`; + scoreLabel.textContent = strength; + scoreNumber.textContent = score; + scoreText.textContent = text; + + checks.forEach(c => { + const li = document.createElement('li'); + li.className = `checks ${c.status}`; + li.textContent = c.text; + checkList.appendChild(li); + }); + + results.style.display = 'block'; +} + +function clearAll() { + document.getElementById('seedInput').value = ''; + document.getElementById('results').style.display = 'none'; +} + +function copyAddress() { + const address = 'trac1q5r79wn6lc4p3x4desyjw8rna0ml6pakz873vt7r9ary7qlwvgdqwx24d0'; + navigator.clipboard.writeText(address).then(() => { + const btn = document.getElementById('copyBtn'); + btn.textContent = '✅ COPIED!'; + setTimeout(() => btn.textContent = 'COPY', 2000); + }); +} + +// Event Listeners +document.addEventListener('DOMContentLoaded', () => { + console.log('Seed Phrase Checker loaded'); + console.log('Built on IntercomSwap - Trac Network'); +}); diff --git a/src/checker.ts b/src/checker.ts new file mode 100644 index 0000000..5cee091 --- /dev/null +++ b/src/checker.ts @@ -0,0 +1,169 @@ +// updated +// Seed Phrase Checker - Core Logic +// Built on IntercomSwap - Trac Network + +import { + CheckResult, + CheckerConfig, + SeedPhraseReport, + StrengthLevel, + ScoreBreakdown +} from './types'; + +import { isValidBIP39Word, getInvalidWords } from './wordlist'; + +const DEFAULT_CONFIG: CheckerConfig = { + minWords: 12, + maxWords: 24, + validCounts: [12, 18, 24], + obviousWords: [ + 'password', 'crypto', 'bitcoin', 'wallet', + 'trac', 'secret', 'hello', 'test', 'admin', + 'user', 'login', 'access', 'key', 'pass', + 'qwerty', 'letmein', 'welcome', 'monkey' + ] +}; + +export function checkWordCount( + words: string[], + config: CheckerConfig = DEFAULT_CONFIG +): CheckResult { + const count = words.length; + if (config.validCounts.includes(count)) { + return { + status: 'pass', + message: `✅ Word count is ${count} — Valid!`, + score: 30 + }; + } else if (count < config.minWords) { + return { + status: 'fail', + message: `❌ Only ${count} words — Need at least 12!`, + score: 0 + }; + } + return { + status: 'warn', + message: `⚠️ ${count} words — Use 12, 18, or 24`, + score: 10 + }; +} + +export function checkDuplicates(words: string[]): CheckResult { + const unique = new Set(words); + if (unique.size === words.length) { + return { + status: 'pass', + message: '✅ No duplicate words found — Good!', + score: 25 + }; + } + return { + status: 'fail', + message: '❌ Duplicate words detected — Weak phrase!', + score: 0 + }; +} + +export function checkNumbers(words: string[]): CheckResult { + const hasNumbers = words.some(w => /\d/.test(w)); + if (!hasNumbers) { + return { + status: 'pass', + message: '✅ No numbers found — Correct format!', + score: 20 + }; + } + return { + status: 'fail', + message: '❌ Numbers found — Use words only!', + score: 0 + }; +} + +export function checkLowercase(words: string[]): CheckResult { + const allLower = words.every(w => w === w.toLowerCase()); + if (allLower) { + return { + status: 'pass', + message: '✅ All words are lowercase — Correct!', + score: 10 + }; + } + return { + status: 'warn', + message: '⚠️ Some words have capitals — Use lowercase!', + score: 5 + }; +} + +export function checkObviousWords( + words: string[], + config: CheckerConfig = DEFAULT_CONFIG +): CheckResult { + const found = words.filter(w => config.obviousWords.includes(w)); + if (found.length === 0) { + return { + status: 'pass', + message: '✅ No obvious weak words detected — Good!', + score: 15 + }; + } + return { + status: 'fail', + message: `❌ Weak words found: ${found.join(', ')}`, + score: 0 + }; +} + +export function checkBIP39Words(words: string[]): CheckResult { + const invalid = getInvalidWords(words); + if (invalid.length === 0) { + return { + status: 'pass', + message: '✅ All words are valid BIP39 words!', + score: 10 + }; + } + return { + status: 'warn', + message: `⚠️ Non-BIP39 words: ${invalid.slice(0, 3).join(', ')}`, + score: 5 + }; +} + +export function calculateScore(checks: CheckResult[]): number { + return checks.reduce((total, check) => total + check.score, 0); +} + +export function getStrength(score: number): StrengthLevel { + if (score >= 80) return 'STRONG'; + if (score >= 50) return 'MEDIUM'; + return 'WEAK'; +} + +export function analyzePhrase( + phrase: string, + config: CheckerConfig = DEFAULT_CONFIG +): SeedPhraseReport { + const words = phrase.trim().toLowerCase().split(/\s+/).filter(w => w.length > 0); + const checks: CheckResult[] = [ + checkWordCount(words, config), + checkDuplicates(words), + checkNumbers(words), + checkLowercase(words), + checkObviousWords(words, config), + checkBIP39Words(words) + ]; + const score = calculateScore(checks); + const strength = getStrength(score); + return { + words, + wordCount: words.length, + score, + strength, + checks, + isValid: strength !== 'WEAK', + timestamp: new Date().toISOString() + }; +} diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..fa893f7 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,39 @@ +// updated +// Seed Phrase Checker - TypeScript Types +// Built on IntercomSwap - Trac Network + +export type StrengthLevel = 'WEAK' | 'MEDIUM' | 'STRONG'; + +export type CheckStatus = 'pass' | 'fail' | 'warn'; + +export interface CheckResult { + status: CheckStatus; + message: string; + score: number; +} + +export interface SeedPhraseReport { + words: string[]; + wordCount: number; + score: number; + strength: StrengthLevel; + checks: CheckResult[]; + isValid: boolean; + timestamp: string; +} + +export interface CheckerConfig { + minWords: number; + maxWords: number; + validCounts: number[]; + obviousWords: string[]; +} + +export interface ScoreBreakdown { + wordCount: number; + uniqueness: number; + noNumbers: number; + lowercase: number; + noObviousWords: number; + total: number; +} diff --git a/src/wordlist.ts b/src/wordlist.ts new file mode 100644 index 0000000..9272794 --- /dev/null +++ b/src/wordlist.ts @@ -0,0 +1,50 @@ +// updated +// BIP39 Wordlist (First 200 words) +// Built on IntercomSwap - Trac Network + +export const BIP39_WORDLIST: string[] = [ + "abandon", "ability", "able", "about", "above", "absent", "absorb", + "abstract", "absurd", "abuse", "access", "accident", "account", "accuse", + "achieve", "acid", "acoustic", "acquire", "across", "act", "action", + "actor", "actress", "actual", "adapt", "add", "addict", "address", + "adjust", "admit", "adult", "advance", "advice", "aerobic", "afford", + "afraid", "again", "age", "agent", "agree", "ahead", "aim", "air", + "airport", "aisle", "alarm", "album", "alcohol", "alert", "alien", + "all", "alley", "allow", "almost", "alone", "alpha", "already", "also", + "alter", "always", "amateur", "amazing", "among", "amount", "amused", + "analyst", "anchor", "ancient", "anger", "angle", "angry", "animal", + "ankle", "announce", "annual", "another", "answer", "antenna", "antique", + "anxiety", "any", "apart", "apology", "appear", "apple", "approve", + "april", "arch", "arctic", "area", "arena", "argue", "arm", "armed", + "armor", "army", "around", "arrange", "arrest", "arrive", "arrow", + "art", "artefact", "artist", "artwork", "ask", "aspect", "assault", + "asset", "assist", "assume", "asthma", "athlete", "atom", "attack", + "attend", "attitude", "attract", "auction", "audit", "august", "aunt", + "author", "auto", "autumn", "average", "avocado", "avoid", "awake", + "aware", "away", "awesome", "awful", "awkward", "axis", "baby", "balance", + "bamboo", "banana", "banner", "bar", "barely", "bargain", "barrel", + "base", "basic", "basket", "battle", "beach", "bean", "beauty", "because", + "become", "beef", "before", "begin", "behave", "behind", "believe", + "below", "belt", "bench", "benefit", "best", "betray", "better", "between", + "beyond", "bicycle", "bid", "bike", "bind", "biology", "bird", "birth", + "bitter", "black", "blade", "blame", "blanket", "blast", "bleak", + "bless", "blind", "blood", "blossom", "blouse", "blue", "blur", "blush", + "board", "boat", "body", "boil", "bomb", "bone", "book", "boost", + "border", "boring", "borrow", "boss", "bottom", "bounce", "box", "boy", + "bracket", "brain", "brand", "brave", "breeze", "brick", "bridge", + "brief", "bright", "bring", "brisk", "broccoli", "broken", "bronze", + "broom", "brother", "brown", "brush", "bubble", "buddy", "budget", + "buffalo", "build", "bulb", "bulk", "bullet", "bundle", "bunker" +]; + +export function isValidBIP39Word(word: string): boolean { + return BIP39_WORDLIST.includes(word.toLowerCase()); +} + +export function getInvalidWords(words: string[]): string[] { + return words.filter(w => !isValidBIP39Word(w)); +} + +export function getValidWords(words: string[]): string[] { + return words.filter(w => isValidBIP39Word(w)); +} diff --git a/styles/main.css b/styles/main.css new file mode 100644 index 0000000..8fd24a4 --- /dev/null +++ b/styles/main.css @@ -0,0 +1,295 @@ +/* updated */ +/* Seed Phrase Checker - Main Stylesheet */ +/* Built on IntercomSwap - Trac Network */ + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + background: #0a0a0a; + color: #fff; + font-family: 'Courier New', monospace; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 100vh; + padding: 20px; +} + +/* Header */ +.logo { + font-size: 13px; + color: #ff6b00; + letter-spacing: 4px; + margin-bottom: 10px; +} + +h1 { + font-size: 24px; + color: #ff6b00; + margin-bottom: 5px; + text-align: center; +} + +.subtitle { + font-size: 11px; + color: #555; + margin-bottom: 30px; + letter-spacing: 2px; + text-align: center; +} + +/* Main Box */ +.box { + background: #111; + border: 2px solid #ff6b00; + border-radius: 20px; + padding: 40px; + width: 100%; + max-width: 600px; + box-shadow: 0 0 40px rgba(255, 107, 0, 0.15); +} + +/* Warning Banner */ +.warning { + background: #1a1000; + border: 1px solid #ff6b00; + border-radius: 8px; + padding: 12px 16px; + font-size: 11px; + color: #ff6b00; + margin-bottom: 25px; + letter-spacing: 1px; + text-align: center; +} + +/* Input */ +label { + font-size: 12px; + color: #888; + letter-spacing: 2px; + display: block; + margin-bottom: 10px; +} + +textarea { + width: 100%; + background: #0a0a0a; + border: 1px solid #333; + border-radius: 10px; + color: #fff; + font-family: 'Courier New', monospace; + font-size: 14px; + padding: 15px; + resize: none; + height: 100px; + outline: none; + transition: border 0.3s; +} + +textarea:focus { + border-color: #ff6b00; +} + +/* Buttons */ +.btn { + margin-top: 20px; + width: 100%; + padding: 14px; + background: #ff6b00; + color: #000; + border: none; + border-radius: 10px; + font-size: 14px; + font-family: 'Courier New', monospace; + font-weight: bold; + letter-spacing: 3px; + cursor: pointer; + transition: background 0.2s; +} + +.btn:hover { + background: #ff8c00; +} + +.clear-btn { + margin-top: 10px; + width: 100%; + padding: 10px; + background: #1a1a1a; + color: #777; + border: 1px solid #333; + border-radius: 10px; + font-size: 12px; + font-family: 'Courier New', monospace; + letter-spacing: 2px; + cursor: pointer; +} + +.clear-btn:hover { + background: #222; +} + +/* Results */ +.results { + margin-top: 30px; + display: none; +} + +/* Score Box */ +.score-box { + text-align: center; + padding: 25px; + border-radius: 12px; + margin-bottom: 20px; +} + +.score-box.weak { + background: #1a0000; + border: 2px solid #ff3333; +} + +.score-box.medium { + background: #1a1000; + border: 2px solid #ffaa00; +} + +.score-box.strong { + background: #001a00; + border: 2px solid #00ff88; +} + +/* Score Label */ +.score-label { + font-size: 11px; + letter-spacing: 3px; + margin-bottom: 8px; +} + +.score-label.weak { color: #ff3333; } +.score-label.medium { color: #ffaa00; } +.score-label.strong { color: #00ff88; } + +/* Score Number */ +.score-number { + font-size: 60px; + font-weight: bold; +} + +.score-number.weak { color: #ff3333; } +.score-number.medium { color: #ffaa00; } +.score-number.strong { color: #00ff88; } + +.score-text { + font-size: 11px; + color: #777; + margin-top: 5px; +} + +/* Check Items */ +.checks { + list-style: none; +} + +.checks li { + padding: 12px 15px; + border-radius: 8px; + margin-bottom: 8px; + font-size: 12px; + letter-spacing: 1px; +} + +.checks li.pass { + background: #001a00; + color: #00ff88; + border: 1px solid #00ff8833; +} + +.checks li.fail { + background: #1a0000; + color: #ff3333; + border: 1px solid #ff333333; +} + +.checks li.warn { + background: #1a1000; + color: #ffaa00; + border: 1px solid #ffaa0033; +} + +/* Trac Address Section */ +.trac-section { + margin-top: 25px; + padding-top: 20px; + border-top: 1px solid #222; + text-align: center; +} + +.trac-label { + font-size: 10px; + color: #555; + letter-spacing: 3px; + margin-bottom: 10px; +} + +.trac-address-box { + display: flex; + align-items: center; + justify-content: center; + gap: 10px; + flex-wrap: wrap; +} + +.trac-address { + background: #0a0a0a; + border: 1px solid #ff6b00; + padding: 8px 12px; + border-radius: 8px; + font-size: 10px; + color: #ff6b00; + word-break: break-all; +} + +.copy-btn { + padding: 8px 14px; + background: #ff6b00; + color: #000; + border: none; + border-radius: 8px; + font-family: 'Courier New', monospace; + font-size: 11px; + font-weight: bold; + cursor: pointer; + letter-spacing: 1px; + white-space: nowrap; +} + +.copy-btn:hover { + background: #ff8c00; +} + +/* Footer */ +.footer { + margin-top: 30px; + font-size: 10px; + color: #333; + letter-spacing: 2px; + text-align: center; +} + +.footer a { + color: #ff6b00; + text-decoration: none; +} + +/* Responsive */ +@media (max-width: 480px) { + .box { padding: 20px; } + h1 { font-size: 18px; } + .score-number { font-size: 40px; } + .trac-address { font-size: 9px; } +} diff --git a/test/test.ts b/test/test.ts new file mode 100644 index 0000000..e25febd --- /dev/null +++ b/test/test.ts @@ -0,0 +1,130 @@ +// updated +// Seed Phrase Checker - Tests +// Built on IntercomSwap - Trac Network + +import { + checkWordCount, + checkDuplicates, + checkNumbers, + checkLowercase, + checkObviousWords, + checkBIP39Words, + calculateScore, + getStrength, + analyzePhrase +} from '../src/checker'; + +let passed: number = 0; +let failed: number = 0; + +function test(name: string, condition: boolean): void { + if (condition) { + console.log(`✅ PASS: ${name}`); + passed++; + } else { + console.log(`❌ FAIL: ${name}`); + failed++; + } +} + +console.log(''); +console.log('================================'); +console.log(' Seed Phrase Checker Tests'); +console.log(' Built on IntercomSwap - Trac'); +console.log('================================'); +console.log(''); + +// Word Count Tests +console.log('--- Word Count Tests ---'); +test('12 words is valid', + checkWordCount('a b c d e f g h i j k l'.split(' ')).status === 'pass'); +test('18 words is valid', + checkWordCount('a b c d e f g h i j k l m n o p q r'.split(' ')).status === 'pass'); +test('24 words is valid', + checkWordCount('a b c d e f g h i j k l m n o p q r s t u v w x'.split(' ')).status === 'pass'); +test('5 words is invalid', + checkWordCount('a b c d e'.split(' ')).status === 'fail'); +test('12 words gives score 30', + checkWordCount('a b c d e f g h i j k l'.split(' ')).score === 30); + +// Duplicate Tests +console.log(''); +console.log('--- Duplicate Tests ---'); +test('No duplicates passes', + checkDuplicates(['apple', 'banana', 'cherry']).status === 'pass'); +test('Duplicates detected', + checkDuplicates(['apple', 'apple', 'cherry']).status === 'fail'); +test('No duplicates gives score 25', + checkDuplicates(['apple', 'banana']).score === 25); + +// Number Tests +console.log(''); +console.log('--- Number Tests ---'); +test('No numbers passes', + checkNumbers(['apple', 'banana']).status === 'pass'); +test('Numbers detected', + checkNumbers(['apple', '123']).status === 'fail'); +test('No numbers gives score 20', + checkNumbers(['apple', 'banana']).score === 20); + +// Lowercase Tests +console.log(''); +console.log('--- Lowercase Tests ---'); +test('All lowercase passes', + checkLowercase(['apple', 'banana']).status === 'pass'); +test('Capitals detected', + checkLowercase(['Apple', 'banana']).status === 'warn'); +test('All lowercase gives score 10', + checkLowercase(['apple', 'banana']).score === 10); + +// Obvious Words Tests +console.log(''); +console.log('--- Obvious Words Tests ---'); +test('No obvious words passes', + checkObviousWords(['abandon', 'ability']).status === 'pass'); +test('Password detected', + checkObviousWords(['password', 'ability']).status === 'fail'); +test('No obvious words gives score 15', + checkObviousWords(['abandon', 'ability']).score === 15); + +// BIP39 Tests +console.log(''); +console.log('--- BIP39 Tests ---'); +test('Valid BIP39 words pass', + checkBIP39Words(['abandon', 'ability']).status === 'pass'); +test('Invalid BIP39 words warned', + checkBIP39Words(['xyz123', 'abc456']).status === 'warn'); + +// Strength Tests +console.log(''); +console.log('--- Strength Tests ---'); +test('Score 100 is STRONG', getStrength(100) === 'STRONG'); +test('Score 80 is STRONG', getStrength(80) === 'STRONG'); +test('Score 60 is MEDIUM', getStrength(60) === 'MEDIUM'); +test('Score 50 is MEDIUM', getStrength(50) === 'MEDIUM'); +test('Score 30 is WEAK', getStrength(30) === 'WEAK'); + +// Full Analysis Test +console.log(''); +console.log('--- Full Analysis Tests ---'); +const strongPhrase = 'abandon ability able about above absent absorb abstract absurd abuse access accident'; +const report = analyzePhrase(strongPhrase); +test('Strong phrase detected', report.strength === 'STRONG'); +test('Word count is 12', report.wordCount === 12); +test('Report has checks', report.checks.length > 0); +test('Report has timestamp', report.timestamp.length > 0); +test('Strong phrase is valid', report.isValid === true); + +const weakPhrase = 'password bitcoin'; +const weakReport = analyzePhrase(weakPhrase); +test('Weak phrase detected', weakReport.strength === 'WEAK'); +test('Weak phrase is invalid', weakReport.isValid === false); + +// Summary +console.log(''); +console.log('================================'); +console.log(` ✅ Passed: ${passed}`); +console.log(` ❌ Failed: ${failed}`); +console.log(` Total: ${passed + failed}`); +console.log('================================'); +console.log(''); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..699f68f --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "lib": ["ES2020"], + "outDir": "./dist", + "rootDir": "./", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, +``` + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true + }, + "include": [ + "server.ts", + "src/**/*", + "test/**/*" + ], + "exclude": [ + "node_modules", + "dist" + ] +}