2026-05-30 19:55:48 +08:00
|
|
|
|
package api
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"context"
|
|
|
|
|
|
|
|
|
|
|
|
"apigo.cc/go/jsmod"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
|
|
jsmod.Register("api", map[string]any{
|
2026-05-31 00:14:26 +08:00
|
|
|
|
"call": call,
|
|
|
|
|
|
"setConfig": SetConfig,
|
|
|
|
|
|
"registerAction": RegisterAction,
|
|
|
|
|
|
"registerSigner": registerSigner,
|
2026-05-30 19:55:48 +08:00
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-05-31 00:14:26 +08:00
|
|
|
|
// call 提供给 JS 的私有入口
|
|
|
|
|
|
func call(ctx context.Context, name string, payload any) (any, error) {
|
|
|
|
|
|
// 注意:在低代码环境中,我们可能需要将 ctx 传入以透传追踪信息给 JS 签名器。
|
|
|
|
|
|
// 虽然 api.CallBy[any] 目前不接收 ctx,但底层的 jsRunner 钩子可以从 context 中获取信息。
|
|
|
|
|
|
// 如果未来 jsRunner 需要 ctx,我们可以在这里通过 context.WithValue 注入。
|
|
|
|
|
|
return CallBy[any](name, payload)
|
2026-05-30 19:55:48 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-05-31 00:14:26 +08:00
|
|
|
|
// registerSigner 允许从 JS 注册动态签名逻辑
|
|
|
|
|
|
func registerSigner(name string, code string) {
|
|
|
|
|
|
RegisterSigner(name, &jsSigner{code: code})
|
2026-05-30 19:55:48 +08:00
|
|
|
|
}
|