codedeviate/sercon
GitHub: codedeviate/sercon
纯 Go 实现的 TypeScript 脚本运行 CLI,用单一静态二进制文件替代 Node 环境来执行侦察、排障和测试脚本。
Stars: 0 | Forks: 0
# sercon
[](https://github.com/codedeviate/sercon)
[](LICENSE)
[](https://go.dev)
[](https://github.com/codedeviate/sercon/actions/workflows/ci.yml)
[](https://github.com/codedeviate/sercon/actions/workflows/integration.yml)
[](https://github.com/codedeviate/sercon/releases) [](https://pkg.go.dev/github.com/codedeviate/sercon/pkg/scriptengine) [](https://github.com/codedeviate/homebrew-cli) ***Sercon – 由代码塑造的侦查*** `sercon` 是一个 CLI 工具,用于运行 TypeScript 脚本来进行侦查、 故障排除和测试。编写一个简短的 `.ts` 文件,将其交给 `sercon`, 即可探测服务、检查 endpoint、复现 bug 或编写快速检查脚本 —— 无需搭建 Node 项目或引入依赖树。 少量内置全局变量为脚本提供了 HTTP、shell exec、日志记录等功能, 并且整个程序打包为一个单一的静态二进制文件。纯 Go 实现(无 cgo), 不需要 Node。 在底层,它是一个用 Go 实现的 TypeScript 脚本引擎: - CLI:`cmd/sercon` —— **受支持的产品。** 针对 内置全局接口运行 `.ts` 文件。当你在进行侦查、调试和测试检查时, 需要一种可重复、可脚本化的替代方案,来代替一大堆临时的 `curl`/`jq`/shell 命令时, 就可以使用它。可通过 `codedeviate/cli` Homebrew tap 安装:`brew install codedeviate/cli/sercon`。 - Library:`pkg/scriptengine` —— 构建 CLI 的底层引擎。你*可以* 将其嵌入到你自己的 Go 程序中并注册可被 Go 调用的绑定,但是 **不提供对库使用的支持**:该包的存在是为了服务于 CLI,其 API 可能会随时更改,并且不提供任何稳定性或沙盒 保证。作为库使用需自担风险。 Runtime:[goja](https://github.com/dop251/goja)。TypeScript 在进程内通过 [esbuild](https://github.com/evanw/esbuild/tree/main/pkg/api) 进行转译。 Promise、`setTimeout` 和 `require` 来自于 [goja_nodejs](https://github.com/dop251/goja_nodejs)。 ## 文档 - [`MANUAL.md`](MANUAL.md) —— 完整参考:库 API、CLI、保留的 脚本全局变量、`server` namespace 以及生成的绑定参考 (§16)。还可以在命令行中使用 `sercon --help` 和 `sercon --examples`。 - [`CHANGELOG.md`](CHANGELOG.md) —— 每个版本的变更日志 (Keep a Changelog)。 - [`HISTORY.md`](HISTORY.md) —— 主题化功能历史:每个子系统 何时引入以及如何演进,从 v0.1.0 开始。 - [`OUT-OF-SCOPE.md`](OUT-OF-SCOPE.md) —— 开放的待办事项:未完成/暂时搁置的项目, 每个都附有尚未完成的原因。 ## 快速开始 ``` go build -o sercon ./cmd/sercon cat > hello.ts <<'EOF' log("hello", await http.get("https://example.com").then(r => r.status)); EOF ./sercon hello.ts ``` 库的用法: ``` eng := scriptengine.New(scriptengine.Options{ Timeout: 5 * time.Second, ScriptRoot: "./scripts", }) eng.Register("greet", func(name string) string { return "hi " + name }) _, err := eng.RunFile(ctx, "./scripts/main.ts") ``` 注册一个返回 Promise 的 I/O 密集型绑定: ``` eng.RegisterFactory("httpGet", func(vm *goja.Runtime, loop *eventloop.EventLoop) any { return scriptengine.PromisifyAsync(vm, loop, func(ctx context.Context, call goja.FunctionCall) (map[string]any, error) { // do work, return map / struct / error }) }) ``` 仅需一条命令,即可在脚本目录中设置编辑器的自动补全和悬停文档(适用于任何支持 TypeScript 的编辑器 —— VSCode、 Zed、Neovim 等): ``` sercon init # drops sercon.d.ts + jsconfig.json into the current dir sercon init ./scripts # …or a target dir ``` `sercon init` 会写入绑定声明(`sercon.d.ts`)以及一个 `jsconfig.json`,用于将编辑器的语言服务器指向它们 —— 无需插件。 如果只需要生成声明(例如用于你自己的配置),请使用 `./sercon -emit-dts sercon.d.ts`。 ## 数据库引擎 —— 测试状态 `sercon` 内置了 SQL 客户端(`db.sqlite`、`db.postgres`、`db.mysql`、 `db.mssql`、`db.clickhouse`、`db.oracle`)以及一些非 SQL 存储 (`db.redis`、`db.memcached`、`db.ldap`、`db.dict`)。它们共享同一种 经过验证的句柄结构,但在 CI 中并非所有引擎都针对真实服务器进行了测试: - **已通过端到端验证:** `db.sqlite`(内存模式)、`db.redis`(miniredis)、 `db.memcached` 和 `db.dict`(进程内 stub 服务器)。 - **尚未针对真实服务器进行验证 —— 使用需自担风险:** `db.postgres`、`db.mysql`、`db.mssql`、`db.clickhouse`、`db.oracle` (DSN 组装和连接配线已通过单元测试,但未针对 真实引擎进行功能性的往返测试),以及 `db.ldap` (仅测试了错误路径)。它们遵循与已验证 引擎相同的模式,*应该*可以正常工作,但尚未针对真实 服务器进行确认 —— 请将其视为临时的。 此列表会随着引擎被手动验证而更新;欢迎提供关于任何 临时引擎的反馈。
[](https://github.com/codedeviate/sercon/releases) [](https://pkg.go.dev/github.com/codedeviate/sercon/pkg/scriptengine) [](https://github.com/codedeviate/homebrew-cli) ***Sercon – 由代码塑造的侦查*** `sercon` 是一个 CLI 工具,用于运行 TypeScript 脚本来进行侦查、 故障排除和测试。编写一个简短的 `.ts` 文件,将其交给 `sercon`, 即可探测服务、检查 endpoint、复现 bug 或编写快速检查脚本 —— 无需搭建 Node 项目或引入依赖树。 少量内置全局变量为脚本提供了 HTTP、shell exec、日志记录等功能, 并且整个程序打包为一个单一的静态二进制文件。纯 Go 实现(无 cgo), 不需要 Node。 在底层,它是一个用 Go 实现的 TypeScript 脚本引擎: - CLI:`cmd/sercon` —— **受支持的产品。** 针对 内置全局接口运行 `.ts` 文件。当你在进行侦查、调试和测试检查时, 需要一种可重复、可脚本化的替代方案,来代替一大堆临时的 `curl`/`jq`/shell 命令时, 就可以使用它。可通过 `codedeviate/cli` Homebrew tap 安装:`brew install codedeviate/cli/sercon`。 - Library:`pkg/scriptengine` —— 构建 CLI 的底层引擎。你*可以* 将其嵌入到你自己的 Go 程序中并注册可被 Go 调用的绑定,但是 **不提供对库使用的支持**:该包的存在是为了服务于 CLI,其 API 可能会随时更改,并且不提供任何稳定性或沙盒 保证。作为库使用需自担风险。 Runtime:[goja](https://github.com/dop251/goja)。TypeScript 在进程内通过 [esbuild](https://github.com/evanw/esbuild/tree/main/pkg/api) 进行转译。 Promise、`setTimeout` 和 `require` 来自于 [goja_nodejs](https://github.com/dop251/goja_nodejs)。 ## 文档 - [`MANUAL.md`](MANUAL.md) —— 完整参考:库 API、CLI、保留的 脚本全局变量、`server` namespace 以及生成的绑定参考 (§16)。还可以在命令行中使用 `sercon --help` 和 `sercon --examples`。 - [`CHANGELOG.md`](CHANGELOG.md) —— 每个版本的变更日志 (Keep a Changelog)。 - [`HISTORY.md`](HISTORY.md) —— 主题化功能历史:每个子系统 何时引入以及如何演进,从 v0.1.0 开始。 - [`OUT-OF-SCOPE.md`](OUT-OF-SCOPE.md) —— 开放的待办事项:未完成/暂时搁置的项目, 每个都附有尚未完成的原因。 ## 快速开始 ``` go build -o sercon ./cmd/sercon cat > hello.ts <<'EOF' log("hello", await http.get("https://example.com").then(r => r.status)); EOF ./sercon hello.ts ``` 库的用法: ``` eng := scriptengine.New(scriptengine.Options{ Timeout: 5 * time.Second, ScriptRoot: "./scripts", }) eng.Register("greet", func(name string) string { return "hi " + name }) _, err := eng.RunFile(ctx, "./scripts/main.ts") ``` 注册一个返回 Promise 的 I/O 密集型绑定: ``` eng.RegisterFactory("httpGet", func(vm *goja.Runtime, loop *eventloop.EventLoop) any { return scriptengine.PromisifyAsync(vm, loop, func(ctx context.Context, call goja.FunctionCall) (map[string]any, error) { // do work, return map / struct / error }) }) ``` 仅需一条命令,即可在脚本目录中设置编辑器的自动补全和悬停文档(适用于任何支持 TypeScript 的编辑器 —— VSCode、 Zed、Neovim 等): ``` sercon init # drops sercon.d.ts + jsconfig.json into the current dir sercon init ./scripts # …or a target dir ``` `sercon init` 会写入绑定声明(`sercon.d.ts`)以及一个 `jsconfig.json`,用于将编辑器的语言服务器指向它们 —— 无需插件。 如果只需要生成声明(例如用于你自己的配置),请使用 `./sercon -emit-dts sercon.d.ts`。 ## 数据库引擎 —— 测试状态 `sercon` 内置了 SQL 客户端(`db.sqlite`、`db.postgres`、`db.mysql`、 `db.mssql`、`db.clickhouse`、`db.oracle`)以及一些非 SQL 存储 (`db.redis`、`db.memcached`、`db.ldap`、`db.dict`)。它们共享同一种 经过验证的句柄结构,但在 CI 中并非所有引擎都针对真实服务器进行了测试: - **已通过端到端验证:** `db.sqlite`(内存模式)、`db.redis`(miniredis)、 `db.memcached` 和 `db.dict`(进程内 stub 服务器)。 - **尚未针对真实服务器进行验证 —— 使用需自担风险:** `db.postgres`、`db.mysql`、`db.mssql`、`db.clickhouse`、`db.oracle` (DSN 组装和连接配线已通过单元测试,但未针对 真实引擎进行功能性的往返测试),以及 `db.ldap` (仅测试了错误路径)。它们遵循与已验证 引擎相同的模式,*应该*可以正常工作,但尚未针对真实 服务器进行确认 —— 请将其视为临时的。 此列表会随着引擎被手动验证而更新;欢迎提供关于任何 临时引擎的反馈。
标签:EVTX分析, Go, Ruby工具, TypeScript, 安全插件, 开发辅助, 日志审计, 测试工具