{"id":50727776,"url":"https://github.com/102300671/ejp","last_synced_at":"2026-06-10T05:32:20.585Z","repository":{"id":331829067,"uuid":"1120954002","full_name":"102300671/ejp","owner":"102300671","description":"Java-based multi-protocol chat application (TCP/WebSocket) with user auth, room management, and friend system.","archived":false,"fork":false,"pushed_at":"2026-04-03T09:34:59.000Z","size":3498,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-03T14:44:37.155Z","etag":null,"topics":["chat-application","java","socket","spring-boot","websocket"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/102300671.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-22T07:53:22.000Z","updated_at":"2026-04-03T09:35:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/102300671/ejp","commit_stats":null,"previous_names":["102300671/ejp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/102300671/ejp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/102300671%2Fejp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/102300671%2Fejp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/102300671%2Fejp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/102300671%2Fejp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/102300671","download_url":"https://codeload.github.com/102300671/ejp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/102300671%2Fejp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34139178,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chat-application","java","socket","spring-boot","websocket"],"created_at":"2026-06-10T05:32:14.258Z","updated_at":"2026-06-10T05:32:20.572Z","avatar_url":"https://github.com/102300671.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# EJP Chat Application\n\nEJP是一个基于Java开发的多功能聊天应用，支持TCP Socket和WebSocket连接，提供了客户端和服务器端的完整实现。\n\n## 功能特点\n\n### 核心功能\n- **双协议支持**：同时支持TCP Socket和WebSocket连接\n- **多客户端类型**：命令行客户端和Web客户端\n- **用户认证**：支持用户登录和注册功能\n- **房间管理**：支持创建、加入、离开房间（公开房间和私有房间）\n- **消息管理**：支持文本消息、系统消息等多种消息类型\n- **数据库集成**：使用MySQL数据库存储房间信息、用户数据和消息历史\n- **消息历史**：支持房间消息和私人消息的历史记录查询\n- **消息加密**：使用AES-GCM加密敏感消息内容\n- **好友系统**：支持好友请求、好友关系管理和好友聊天\n- **管理后台**：基于Spring Boot的Web管理界面，提供用户、房间、消息管理功能\n- **会话管理**：支持查看和管理用户会话，包括私人聊天会话\n- **实时监控**：管理后台提供系统实时监控功能\n\n### 高级功能\n- **自动重连机制**：客户端断线后自动尝试重连\n- **消息路由**：基于消息类型和目标的智能路由系统\n- **多线程处理**：高性能的多线程架构\n- **配置灵活**：支持命令行参数和配置文件\n- **会话管理**：基于UUID的用户会话管理\n- **文件上传集成**：支持ZFile文件服务器集成\n- **跨窗口同步**：Web客户端支持多窗口消息同步\n- **NSFW内容检测**：支持敏感内容标记和加密存储\n\n## 系统架构\n\n### 服务器端\n- **ServerListener**：处理TCP Socket连接\n- **WebSocketServer**：处理WebSocket连接\n- **MessageRouter**：消息路由和分发\n- **DatabaseManager**：数据库操作管理\n- **Room**：房间管理系统（公开房间和私有房间）\n- **Session**：用户会话管理\n- **MessageDAO**：消息数据访问对象，处理消息持久化\n- **UserDAO**：用户数据访问对象\n- **RoomDAO**：房间数据访问对象\n- **UUIDGenerator**：UUID生成器，用于用户会话标识\n- **AESUtil**：AES-GCM加密工具类\n- **ZFileTokenManager**：ZFile文件服务器集成管理\n- **ZFileConfig**：ZFile配置管理\n- **FriendshipDAO**：好友关系数据访问对象\n- **FriendRequestDAO**：好友请求数据访问对象\n- **ServiceConfig**：服务配置管理\n\n### 管理后台（Spring Boot）\n- **AdminApplication**：Spring Boot主应用类\n- **MainController**：主页面控制器，提供仪表板、用户、房间、消息管理界面\n- **UserController**：用户管理API，提供用户CRUD、搜索、好友管理等功能\n- **RoomController**：房间管理API\n- **MessageController**：消息管理API\n- **ConversationController**：会话管理API，处理私人聊天会话\n- **UserService**：用户服务层，处理用户相关业务逻辑\n- **RoomService**：房间服务层，处理房间相关业务逻辑\n- **MessageService**：消息服务层，处理消息相关业务逻辑\n- **ConversationService**：会话服务层，处理私人聊天会话相关业务逻辑\n\n### 客户端\n- **ClientConnection**：与服务器的网络连接\n- **UserInterface**：用户界面\n- **AuthenticationInterface**：用户认证界面\n- **Message**：消息处理系统\n- **MessageCodec**：消息编解码器\n- **UUIDCache**：UUID缓存管理\n- **Web客户端**：基于HTML/CSS/JavaScript的Web界面\n  - 支持WebSocket实时通信\n  - 支持localStorage数据持久化\n  - 支持BroadcastChannel跨窗口消息同步\n\n## 安装步骤\n\n### 环境要求\n- Java 8 或更高版本\n- MySQL 数据库（可选，用于持久化存储）\n\n### 依赖库\n\n#### 服务器端依赖 (`chatroom/server/lib/`)\n- `bcrypt-0.10.2.jar` - 密码加密库\n- `bytes-1.5.0.jar` - 字节处理工具（bcrypt依赖）\n- `gson-2.13.2.jar` - JSON数据处理\n- `Java-WebSocket-1.5.7.jar` - WebSocket协议支持\n- `mysql-connector-j-9.5.0.jar` - MySQL数据库驱动\n- `slf4j-api-1.7.36.jar` - 日志框架API\n- `slf4j-simple-1.7.36.jar` - 简单日志实现\n\n#### 管理后台依赖 (`chatroom/server/pom.xml`)\n- Spring Boot 3.2.0 - Spring Boot框架\n- Spring Boot Starter Web - Web应用支持\n- Spring Boot Starter Thymeleaf - 模板引擎\n- Spring Boot Starter Data JPA - JPA数据访问\n- MySQL Connector Java 8.0.33 - MySQL数据库驱动\n- Lombok - 简化Java代码\n- bcrypt 0.10.2 - 密码加密\n\n#### 客户端依赖 (`chatroom/client/lib/`)\n- `gson-2.13.2.jar` - JSON数据处理\n\n### 安装方法\n\n1. **克隆项目**\n```bash\ngit clone https://github.com/yourusername/ejp.git\ncd ejp\n```\n\n2. **使用自动化脚本**（推荐）\n项目提供了一个自动化脚本 `run.sh`，可以简化编译和运行过程：\n\n```bash\n# 查看脚本帮助信息\n./run.sh -h\n\n# 编译所有代码（自动下载依赖）\n./run.sh -c\n\n# 运行服务器端\n./run.sh -s [port]\n\n# 运行客户端\n./run.sh -cl [server_address] [port]\n```\n\n**脚本功能说明：**\n- 自动检查Java环境\n- 自动下载所需依赖库\n- 支持编译客户端和服务器端\n- 提供简单的运行命令\n- 支持命令行参数传递\n\n**脚本选项：**\n- `-c, --compile` - 编译所有代码\n- `-s, --server` - 运行服务器端\n- `-cl, --client` - 运行客户端\n- `-h, --help` - 显示帮助信息\n\n3. **手动编译项目**（可选）\n```bash\n# 编译客户端\njavac -cp .:chatroom/client/lib/* -d chatroom/client/bin $(find chatroom/client -name \"*.java\")\n\n# 编译服务器端\njavac -cp .:chatroom/server/lib/* -d chatroom/server/bin $(find chatroom/server -name \"*.java\")\n```\n\n4. **配置数据库**（可选）\n- 创建数据库\n- 执行数据库脚本创建表结构：`mysql -u username -p new_database \u003c sql/chatroom/schema.sql`\n- 修改 `server/sql/database.properties` 配置文件\n- 将修改后的配置文件复制到bin目录：`cp chatroom/server/sql/database.properties chatroom/server/bin/server/sql`\n\n**数据库表结构：**\n- `user`：用户表，存储用户信息\n- `room`：房间表，存储房间信息（公开/私有）\n- `room_member`：房间成员表，管理用户与房间的关联\n- `user_uuid`：用户UUID表，管理用户会话标识\n- `messages`：消息表，存储所有消息历史（房间消息和私人消息）\n- `friendships`：好友关系表，存储用户之间的好友关系\n- `friend_requests`：好友请求表，管理好友请求状态（PENDING/ACCEPTED/REJECTED）\n\n5. **MySQL自动配置**\n项目提供了 `setup_mysql.sh` 脚本，可以帮助您自动配置MySQL数据库：\n\n```bash\n# 运行MySQL配置脚本（需要root权限）\n./setup_mysql.sh\n```\n\n脚本功能：\n- 检测并安装MySQL\n- 创建数据库和用户\n- 设置权限\n- 创建表结构\n- 配置时区\n- 更新database.properties文件\n\n6. **运行项目**\n\n## 使用说明\n\n### 启动服务器\n\n```bash\n# 使用自动化脚本启动服务器（推荐）\n./run.sh -s\n\n# 指定端口启动服务器\n./run.sh -s [port]\n\n# 使用手动命令启动服务器\njava -cp .:chatroom/server/bin:chatroom/server/lib/* server.ChatServer\n\n# 指定端口启动服务器\njava -cp .:chatroom/server/bin:chatroom/server/lib/* server.ChatServer [port]\n```\n\n### 启动管理后台\n\n```bash\n# 使用Maven启动Spring Boot管理后台\ncd chatroom/dashboard\nmvn spring-boot:run\n\n# 或者先打包再运行\nmvn clean package\njava -jar target/dashboard-1.0.0.jar\n```\n\n管理后台默认运行在 `http://localhost:8083`，提供以下功能：\n- **仪表板**：查看系统统计信息（用户数、房间数、消息数）\n- **用户管理**：查看、创建、删除用户，修改用户密码，查看用户好友和房间\n- **房间管理**：查看和管理所有房间\n- **消息管理**：查看消息历史和统计信息\n- **会话管理**：查看和管理用户私人聊天会话\n\n### 启动客户端\n\n```bash\n# 使用自动化脚本启动客户端（推荐）\n./run.sh -cl\n\n# 指定服务器地址和端口连接\n./run.sh -cl localhost/[ip] [port]\n\n# 使用手动命令启动客户端\njava -cp .:chatroom/client/bin:chatroom/client/lib/* client.Client\n\n# 指定服务器地址和端口连接\njava -cp .:chatroom/client/bin:chatroom/client/lib/* client.Client localhost/[ip] [port]\n```\n\n### Web客户端\n\n1. 启动服务器\n2. 打开浏览器访问 `http://localhost:[port]`\n3. 注册或登录账号\n4. 创建房间或加入房间\n5. 开始聊天\n\n### 好友功能使用说明\n\n好友系统允许用户之间建立好友关系并进行私人聊天：\n\n1. **发送好友请求**：\n   - 在聊天客户端中使用 `/addfriend \u003cusername\u003e` 命令发送好友请求\n   - 系统会向目标用户发送好友请求通知\n\n2. **处理好友请求**：\n   - 使用 `/accept \u003cusername\u003e` 接受好友请求\n   - 使用 `/reject \u003cusername\u003e` 拒绝好友请求\n   - 使用 `/friends` 查看所有好友请求\n\n3. **好友聊天**：\n   - 添加好友后，可以使用 `/chat \u003cusername\u003e` 开始私人聊天\n   - 好友之间的消息是私密的，只有双方可见\n\n4. **管理好友**：\n   - 使用 `/removefriend \u003cusername\u003e` 删除好友\n   - 使用 `/listfriends` 查看好友列表\n\n## 项目结构\n\n```\nejp/\n├── chatroom/\n│   ├── client/            # 客户端代码\n│   │   ├── bin/           # 编译输出目录\n│   │   ├── lib/           # 客户端依赖库\n│   │   ├── message/       # 消息相关类\n│   │   │   ├── Message.java\n│   │   │   ├── MessageCodec.java\n│   │   │   └── MessageType.java\n│   │   ├── network/       # 网络连接类\n│   │   │   └── ClientConnection.java\n│   │   ├── ui/            # 用户界面类\n│   │   │   ├── UserInterface.java\n│   │   │   └── AuthenticationInterface.java\n│   │   ├── util/          # 工具类\n│   │   │   └── UUIDCache.java\n│   │   ├── web/           # Web客户端代码\n│   │   │   ├── css/\n│   │   │   │   └── style.css\n│   │   │   ├── js/\n│   │   │   │   ├── chat.js\n│   │   │   │   └── localStorage.js\n│   │   │   └── test_sync.html\n│   │   ├── user_cache.properties\n│   │   └── Client.java    # 客户端主类\n│   ├── dashboard/         # 管理后台（Spring Boot）\n│   │   ├── src/           # 源码目录\n│   │   │   └── main/\n│   │   │       ├── java/admin/     # 管理后台Java代码\n│   │   │       │   ├── AdminApplication.java\n│   │   │       │   ├── controller/    # 控制器\n│   │   │       │   │   ├── MainController.java\n│   │   │       │   │   ├── UserController.java\n│   │   │       │   │   ├── RoomController.java\n│   │   │       │   │   ├── MessageController.java\n│   │   │       │   │   └── ConversationController.java\n│   │   │       │   └── service/       # 服务层\n│   │   │       │       ├── UserService.java\n│   │   │       │       ├── RoomService.java\n│   │   │       │       ├── MessageService.java\n│   │   │       │       └── ConversationService.java\n│   │   │       └── resources/         # 资源文件\n│   │   │           ├── application.properties\n│   │   │           └── templates/     # Thymeleaf模板\n│   │   │               ├── index.html\n│   │   │               ├── users.html\n│   │   │               ├── rooms.html\n│   │   │               ├── messages.html\n│   │   │               └── conversations.html\n│   │   ├── target/      # Maven编译输出目录\n│   │   └── pom.xml      # Maven项目配置文件\n│   └── server/            # 服务器端代码\n│       ├── bin/           # 编译输出目录\n│       ├── lib/           # 服务器端依赖库\n│       ├── message/     # 消息相关类\n│       │   ├── Message.java\n│       │   ├── MessageCodec.java\n│       │   └── MessageType.java\n│       ├── network/     # 网络连接类\n│       │   ├── router/\n│       │   │   └── MessageRouter.java\n│       │   ├── socket/    # Socket相关类\n│       │   │   ├── ServerListener.java\n│       │   │   ├── ClientConnection.java\n│       │   │   └── Session.java\n│       │   └── websocket/ # WebSocket相关类\n│       │       ├── WebSocketServer.java\n│       │       ├── WebSocketConnection.java\n│       │       └── WebSocketClientConnectionAdapter.java\n│       ├── room/        # 房间相关类\n│       │   ├── Room.java\n│       │   ├── PublicRoom.java\n│       │   └── PrivateRoom.java\n│       ├── sql/         # 数据库相关类\n│       │   ├── DatabaseManager.java\n│       │   ├── database.properties\n│       │   ├── user/\n│       │   │   ├── UserDAO.java\n│       │   │   └── uuid/\n│       │   │       └── UUIDGenerator.java\n│       │   ├── room/\n│       │   │   └── RoomDAO.java\n│       │   ├── message/\n│       │   │   └── MessageDAO.java\n│       │   └── friend/    # 好友相关类\n│       │       ├── FriendshipDAO.java\n│       │       └── FriendRequestDAO.java\n│       ├── user/        # 用户相关类\n│       │   └── User.java\n│       ├── util/        # 工具类\n│       │   └── AESUtil.java\n│       ├── config/      # 配置类\n│       │   └── ServiceConfig.java\n│       ├── zfile/       # ZFile文件服务器集成\n│       │   ├── ZFileConfig.java\n│       │   └── ZFileTokenManager.java\n│       └── ChatServer.java # 服务器主类\n├── run.sh                # 自动化编译和运行脚本\n├── setup_mysql.sh        # MySQL自动配置脚本\n├── .gitignore            # Git忽略文件配置\n├── LICENSE               # 许可证文件\n└── README.md             # 项目说明文件\n```\n\n## 技术栈\n\n### 后端技术\n- Java 8+ / Java 17（管理后台）\n- Socket API\n- WebSocket API\n- JDBC\n- MySQL（可选）\n- Spring Boot 3.2.0（管理后台）\n- Spring MVC（管理后台）\n- Spring Data JPA（管理后台）\n- Thymeleaf（管理后台模板引擎）\n\n### 前端技术\n- HTML5\n- CSS3\n- JavaScript\n- WebSocket API\n- Thymeleaf（管理后台）\n\n## 开发说明\n\n### 代码规范\n- 遵循Java编码规范\n- 使用Javadoc注释\n- 采用MVC设计模式\n\n### 调试方法\n- 使用Java日志系统进行调试\n- 服务器端日志输出到控制台\n- 客户端支持DEBUG模式\n\n### 核心功能说明\n\n#### 消息加密\n项目使用AES-GCM加密算法对敏感消息内容进行加密：\n- 加密密钥：基于SHA-256派生\n- 加密模式：AES/GCM/NoPadding\n- IV长度：12字节\n- 标签长度：128位\n\n#### 会话管理\n使用UUID作为用户会话标识：\n- 每次登录生成唯一UUID\n- UUID存储在数据库的`user_uuid`表中\n- 支持多设备同时登录\n\n#### ZFile集成\n支持与ZFile文件服务器集成：\n- 自动获取上传Token\n- 支持文件上传功能\n- 可配置ZFile服务器地址和凭证\n\n#### 消息历史\n支持消息历史记录查询：\n- 房间消息历史\n- 私人消息历史\n- 支持分页查询\n- 支持时间范围查询\n\n#### Web客户端特性\n- 实时WebSocket通信\n- localStorage数据持久化\n- BroadcastChannel跨窗口消息同步\n- 响应式设计\n\n#### 好友系统\n- 好友请求机制：支持发送、接受、拒绝好友请求\n- 好友关系管理：建立和删除好友关系\n- 好友聊天：支持好友之间的私人聊天\n- 好友查询：支持查询用户的好友列表和好友请求状态\n- 数据持久化：好友关系和请求存储在数据库中\n\n#### 管理后台特性\n- 基于Spring Boot的Web管理界面\n- RESTful API设计\n- Thymeleaf模板引擎\n- 用户管理：查看、创建、删除用户，修改密码\n- 房间管理：查看和管理所有房间\n- 消息管理：查看消息历史和统计信息\n- 会话管理：查看和管理用户私人聊天会话\n- 响应式设计，支持移动端访问\n\n### 数据库配置\n\n#### database.properties配置示例\n```properties\n# 数据库驱动配置\ndb.driver=com.mysql.cj.jdbc.Driver\n\n# 数据库连接配置\ndb.url=jdbc:mysql://localhost:3306/dbname?useSSL=false\u0026serverTimezone=Asia/Shanghai\u0026characterEncoding=UTF-8\u0026allowPublicKeyRetrieval=true\ndb.user=your_username\ndb.password=your_password\n```\n\n### ZFile配置\n\n#### 什么是ZFile？\nZFile是一个开源的文件管理系统，本项目集成ZFile用于支持文件上传功能。通过ZFile，用户可以在聊天中发送图片和文件。\n\n#### ZFile集成说明\n本项目通过以下方式与ZFile集成：\n- **ZFileTokenManager**：管理ZFile服务器的认证token\n- **ZFileConfig**：配置ZFile服务器连接信息\n- **消息流程**：\n  1. 客户端发送`REQUEST_TOKEN`消息请求上传token\n  2. 服务器通过ZFileTokenManager获取ZFile的认证token\n  3. 服务器返回`TOKEN_RESPONSE`消息给客户端\n  4. 客户端使用token直接向ZFile服务器上传文件\n  5. 上传成功后，客户端发送文件URL消息到聊天室\n\n#### ZFile服务器要求\n- **ZFile版本**：建议使用ZFile 3.x或更高版本\n- **网络要求**：EJP服务器需要能够访问ZFile服务器\n- **认证要求**：需要配置ZFile的用户名和密码\n- **API要求**：ZFile需要提供以下API：\n  - `/user/login` - 用户登录接口（返回token）\n\n#### ZFile配置步骤\n\n**1. 安装和配置ZFile服务器**\n```bash\n# 参考ZFile官方文档安装ZFile\n# https://github.com/zfile-dev/zfile\n```\n\n**2. 修改ZFileTokenManager配置**\n编辑文件：`chatroom/server/zfile/ZFileTokenManager.java`\n\n找到构造函数中的配置行：\n```java\nconfig = new ZFileConfig(\"http://ip:port\", \"username\", \"password\");\n```\n\n修改为你的ZFile服务器配置：\n```java\nconfig = new ZFileConfig(\"http://your-zfile-server:port\", \"your-username\", \"your-password\");\n```\n\n**配置参数说明：**\n- `http://ip:port`：ZFile服务器地址和端口\n- `username`：ZFile登录用户名\n- `password`：ZFile登录密码\n\n**3. 重新编译服务器**\n```bash\n./run.sh -c\n```\n\n**4. 启动服务器**\n```bash\n./run.sh -s\n```\n\n#### 使用示例\n\n**客户端发送文件：**\n```javascript\n// 1. 请求上传token\nchatClient.sendMessage(MessageType.REQUEST_TOKEN, 'server', '');\n\n// 2. 收到TOKEN_RESPONSE后，使用token上传文件到ZFile\n// 3. 上传成功后，发送文件URL消息\nchatClient.sendMessage(MessageType.FILE, 'room-name', 'http://zfile-server/file-url');\n```\n\n#### 注意事项\n- **安全性**：ZFile密码明文存储在代码中，生产环境建议使用配置文件或环境变量\n- **网络**：确保EJP服务器能够访问ZFile服务器\n- **Token管理**：ZFileTokenManager实现了token缓存机制，减少重复登录\n- **可选功能**：如果不使用文件上传功能，可以忽略ZFile配置\n\n## 许可证\n\n本项目采用MIT许可证，详见LICENSE文件。\n\n## 贡献\n\n欢迎提交Issue和Pull Request！\n\n## 联系方式\n\n如有问题或建议，请通过以下方式联系：\n- Email: jy2193807541@gmail.com\n- GitHub: https://github.com/102300671/ejp\n\n---\n\n© 2026 EJP Chat Application. All rights reserved.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F102300671%2Fejp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F102300671%2Fejp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F102300671%2Fejp/lists"}