From d9b8496a7d5c4708153b6dbd752bdbabc7f6e259 Mon Sep 17 00:00:00 2001 From: Max Date: Fri, 5 Dec 2025 20:39:19 +0800 Subject: [PATCH] Refactor authorized object handling in JS API - Updated the NewObject method to pass the complete authorized structure instead of individual fields, simplifying the code and improving clarity. - Enhanced handling for nil authorized scenarios by setting an empty object, ensuring consistent behavior in context management. - Released Go-side persistent handles for authorized and empty objects to maintain proper resource management. --- agent/context/jsapi.go | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/agent/context/jsapi.go b/agent/context/jsapi.go index 2de74a69..2ecb77c4 100644 --- a/agent/context/jsapi.go +++ b/agent/context/jsapi.go @@ -113,21 +113,20 @@ func (ctx *Context) NewObject(v8ctx *v8go.Context) (*v8go.Value, error) { metadataVal.Release() // Release Go-side Persistent handle, V8 internal reference remains } - // Authorized object - set individual fields to ensure proper structure - var authorizedData map[string]interface{} + // Authorized object - pass the complete structure if ctx.Authorized != nil { - authorizedData = map[string]interface{}{ - "user_id": ctx.Authorized.UserID, - "tenant_id": ctx.Authorized.TenantID, - "client_id": ctx.Authorized.ClientID, + authorizedVal, err := bridge.JsValue(v8ctx, ctx.Authorized) + if err == nil { + obj.Set("authorized", authorizedVal) + authorizedVal.Release() // Release Go-side Persistent handle, V8 internal reference remains } } else { - authorizedData = map[string]interface{}{} - } - authorizedVal, err := bridge.JsValue(v8ctx, authorizedData) - if err == nil { - obj.Set("authorized", authorizedVal) - authorizedVal.Release() // Release Go-side Persistent handle, V8 internal reference remains + // Set to empty object when nil + emptyObj, err := bridge.JsValue(v8ctx, map[string]interface{}{}) + if err == nil { + obj.Set("authorized", emptyObj) + emptyObj.Release() + } } return instance.Value, nil