diff --git a/internal/processor/filter-expr.go b/internal/processor/filter-expr.go index 4072d4b..f725ac0 100644 --- a/internal/processor/filter-expr.go +++ b/internal/processor/filter-expr.go @@ -15,21 +15,9 @@ type FilterExpr struct { Program *vm.Program } -func SafeExprEnv(payload any) any { - exprEnv := ExprEnv{ - Payload: payload, - } - - return exprEnv -} - -type ExprEnv struct { - Payload any -} - func (fe *FilterExpr) Process(ctx context.Context, payload any) (any, error) { - exprEnv := SafeExprEnv(payload) + exprEnv := GetEnvData(ctx, payload) output, err := expr.Run(fe.Program, exprEnv) if err != nil { diff --git a/internal/processor/processor.go b/internal/processor/processor.go index b0b605e..7a5317f 100644 --- a/internal/processor/processor.go +++ b/internal/processor/processor.go @@ -101,6 +101,11 @@ type TemplateData struct { Sender any } +type EnvData struct { + Payload any + Sender any +} + func GetTemplateData(ctx context.Context, payload any) TemplateData { templateData := TemplateData{Payload: payload} modules := ctx.Value(common.ModulesContextKey) @@ -114,3 +119,13 @@ func GetTemplateData(ctx context.Context, payload any) TemplateData { } return templateData } + +func GetEnvData(ctx context.Context, payload any) EnvData { + envData := EnvData{Payload: payload} + + sender := ctx.Value(common.SenderContextKey) + if sender != nil { + envData.Sender = sender + } + return envData +} diff --git a/internal/processor/script-expr.go b/internal/processor/script-expr.go index 421cf63..0e84b51 100644 --- a/internal/processor/script-expr.go +++ b/internal/processor/script-expr.go @@ -17,7 +17,7 @@ type ScriptExpr struct { func (se *ScriptExpr) Process(ctx context.Context, payload any) (any, error) { - exprEnv := SafeExprEnv(payload) + exprEnv := GetEnvData(ctx, payload) output, err := expr.Run(se.Program, exprEnv) if err != nil { diff --git a/internal/processor/script-js.go b/internal/processor/script-js.go index c2bffd4..58cf638 100644 --- a/internal/processor/script-js.go +++ b/internal/processor/script-js.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" + "github.com/jwetzell/showbridge-go/internal/common" "github.com/jwetzell/showbridge-go/internal/config" "modernc.org/quickjs" ) @@ -30,6 +31,16 @@ func (sj *ScriptJS) Process(ctx context.Context, payload any) (any, error) { vm.SetProperty(vm.GlobalObject(), payloadAtom, payload) + sender := ctx.Value(common.SenderContextKey) + if sender != nil { + senderAtom, err := vm.NewAtom("sender") + + if err != nil { + return nil, err + } + vm.SetProperty(vm.GlobalObject(), senderAtom, sender) + } + _, err = vm.Eval(sj.Program, quickjs.EvalGlobal) if err != nil {