| 1470 | } |
| 1471 | |
| 1472 | func streamHandoffTopicFromPayload(payload string, currentEvent string) (string, bool) { |
| 1473 | var raw map[string]interface{} |
| 1474 | if err := json.Unmarshal([]byte(payload), &raw); err != nil { |
| 1475 | return "", false |
| 1476 | } |
| 1477 | eventType, _ := raw["type"].(string) |
| 1478 | if eventType == "stream_handoff" { |
| 1479 | if topicID := streamHandoffTopicFromEvent(raw); topicID != "" { |
| 1480 | return topicID, true |
| 1481 | } |
| 1482 | return "", true |
| 1483 | } |
| 1484 | if eventType == "server_ste_metadata" || currentEvent == "server_ste_metadata" { |
| 1485 | if topicID := streamHandoffTopicFromMetadata(raw); topicID != "" { |
| 1486 | return topicID, true |
| 1487 | } |
| 1488 | return "", eventType == "server_ste_metadata" |
| 1489 | } |
| 1490 | if eventType == "resume_conversation_token" { |
| 1491 | return "", true |
| 1492 | } |
| 1493 | return "", false |
| 1494 | } |
| 1495 | |
| 1496 | func streamHandoffTopicFromEvent(raw map[string]interface{}) string { |
| 1497 | options, ok := raw["options"].([]interface{}) |