From 57e3ece765e6016d7f0a4b714a4d97919bfb8017 Mon Sep 17 00:00:00 2001 From: Adam Van Ymeren Date: Fri, 6 Feb 2026 09:42:07 -0800 Subject: [PATCH 1/3] handlemeta: mark IG typing receiver uncertain --- pkg/connector/handlemeta.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pkg/connector/handlemeta.go b/pkg/connector/handlemeta.go index af67f3a..cf65f51 100644 --- a/pkg/connector/handlemeta.go +++ b/pkg/connector/handlemeta.go @@ -173,12 +173,16 @@ func (m *MetaClient) handleMetaEvent(ctx context.Context, rawEvt any) { if !evt.IsTyping { timeout = 0 } + portalKey := m.makeFBPortalKey(threadKey, table.UNKNOWN_THREAD_TYPE) m.UserLogin.QueueRemoteEvent(&simplevent.Typing{ EventMeta: simplevent.EventMeta{ Type: bridgev2.RemoteEventTyping, - PortalKey: m.makeFBPortalKey(threadKey, table.UNKNOWN_THREAD_TYPE), - Sender: m.makeEventSender(userID), - Timestamp: evt.Timestamp, + PortalKey: portalKey, + // We don't know the thread type here, which affects whether the portal key receiver should be set. + // Mark it as uncertain so the bridge can fall back to a receiver-less portal key if needed. + UncertainReceiver: !m.Main.Bridge.Config.SplitPortals, + Sender: m.makeEventSender(userID), + Timestamp: evt.Timestamp, }, Timeout: timeout, Type: bridgev2.TypingTypeText, From e91eccef5136af14fea5da86f52e7359f3347257 Mon Sep 17 00:00:00 2001 From: Adam Van Ymeren Date: Fri, 6 Feb 2026 10:01:02 -0800 Subject: [PATCH 2/3] lightspeed: coerce numeric values into bool fields --- pkg/connector/handlemeta.go | 10 +++------- pkg/messagix/lightspeed/decode.go | 11 ++++++++--- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/pkg/connector/handlemeta.go b/pkg/connector/handlemeta.go index cf65f51..af67f3a 100644 --- a/pkg/connector/handlemeta.go +++ b/pkg/connector/handlemeta.go @@ -173,16 +173,12 @@ func (m *MetaClient) handleMetaEvent(ctx context.Context, rawEvt any) { if !evt.IsTyping { timeout = 0 } - portalKey := m.makeFBPortalKey(threadKey, table.UNKNOWN_THREAD_TYPE) m.UserLogin.QueueRemoteEvent(&simplevent.Typing{ EventMeta: simplevent.EventMeta{ Type: bridgev2.RemoteEventTyping, - PortalKey: portalKey, - // We don't know the thread type here, which affects whether the portal key receiver should be set. - // Mark it as uncertain so the bridge can fall back to a receiver-less portal key if needed. - UncertainReceiver: !m.Main.Bridge.Config.SplitPortals, - Sender: m.makeEventSender(userID), - Timestamp: evt.Timestamp, + PortalKey: m.makeFBPortalKey(threadKey, table.UNKNOWN_THREAD_TYPE), + Sender: m.makeEventSender(userID), + Timestamp: evt.Timestamp, }, Timeout: timeout, Type: bridgev2.TypingTypeText, diff --git a/pkg/messagix/lightspeed/decode.go b/pkg/messagix/lightspeed/decode.go index 77695a2..b7b3d9d 100644 --- a/pkg/messagix/lightspeed/decode.go +++ b/pkg/messagix/lightspeed/decode.go @@ -296,12 +296,17 @@ func (ls *LightSpeedDecoder) handleStoredProcedure(referenceName string, data [] } newDepInstance.Field(i).Set(reflect.ValueOf(val)) case reflect.Bool: - boolean, ok := val.(bool) - if !ok { + switch v := val.(type) { + case bool: + newDepInstance.Field(i).SetBool(v) + case int64: + newDepInstance.Field(i).SetBool(v != 0) + case float64: + newDepInstance.Field(i).SetBool(v != 0) + default: badGlobalLog.Warn().Any("val", redactForLog(val)).Type("val_type", val).Int("field_index", index).Str("field_name", fieldInfo.Name).Str("struct_name", depFieldsType.Name()).Msg("Failed to set bool") continue } - newDepInstance.Field(i).SetBool(boolean) case reflect.Int: integer, ok := val.(int) if !ok { From 24091043abb758656c2dfb7f1d93f3164a9f0e02 Mon Sep 17 00:00:00 2001 From: Adam Van Ymeren Date: Fri, 6 Feb 2026 13:07:41 -0800 Subject: [PATCH 3/3] Revert "lightspeed: coerce numeric values into bool fields" This reverts commit e91eccef5136af14fea5da86f52e7359f3347257. --- pkg/connector/handlemeta.go | 10 +++++++--- pkg/messagix/lightspeed/decode.go | 11 +++-------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/pkg/connector/handlemeta.go b/pkg/connector/handlemeta.go index af67f3a..cf65f51 100644 --- a/pkg/connector/handlemeta.go +++ b/pkg/connector/handlemeta.go @@ -173,12 +173,16 @@ func (m *MetaClient) handleMetaEvent(ctx context.Context, rawEvt any) { if !evt.IsTyping { timeout = 0 } + portalKey := m.makeFBPortalKey(threadKey, table.UNKNOWN_THREAD_TYPE) m.UserLogin.QueueRemoteEvent(&simplevent.Typing{ EventMeta: simplevent.EventMeta{ Type: bridgev2.RemoteEventTyping, - PortalKey: m.makeFBPortalKey(threadKey, table.UNKNOWN_THREAD_TYPE), - Sender: m.makeEventSender(userID), - Timestamp: evt.Timestamp, + PortalKey: portalKey, + // We don't know the thread type here, which affects whether the portal key receiver should be set. + // Mark it as uncertain so the bridge can fall back to a receiver-less portal key if needed. + UncertainReceiver: !m.Main.Bridge.Config.SplitPortals, + Sender: m.makeEventSender(userID), + Timestamp: evt.Timestamp, }, Timeout: timeout, Type: bridgev2.TypingTypeText, diff --git a/pkg/messagix/lightspeed/decode.go b/pkg/messagix/lightspeed/decode.go index b7b3d9d..77695a2 100644 --- a/pkg/messagix/lightspeed/decode.go +++ b/pkg/messagix/lightspeed/decode.go @@ -296,17 +296,12 @@ func (ls *LightSpeedDecoder) handleStoredProcedure(referenceName string, data [] } newDepInstance.Field(i).Set(reflect.ValueOf(val)) case reflect.Bool: - switch v := val.(type) { - case bool: - newDepInstance.Field(i).SetBool(v) - case int64: - newDepInstance.Field(i).SetBool(v != 0) - case float64: - newDepInstance.Field(i).SetBool(v != 0) - default: + boolean, ok := val.(bool) + if !ok { badGlobalLog.Warn().Any("val", redactForLog(val)).Type("val_type", val).Int("field_index", index).Str("field_name", fieldInfo.Name).Str("struct_name", depFieldsType.Name()).Msg("Failed to set bool") continue } + newDepInstance.Field(i).SetBool(boolean) case reflect.Int: integer, ok := val.(int) if !ok {