11using System ;
22using System . Collections . Generic ;
3- using System . Linq ;
43using System . Threading . Tasks ;
5- using Microsoft . Extensions . Logging ;
64using NexusRpc . Handlers ;
75using Temporalio . Api . Common . V1 ;
86using Temporalio . Client ;
@@ -15,8 +13,6 @@ namespace Temporalio.Nexus
1513 /// </summary>
1614 internal static class NexusActivityStartHelper
1715 {
18- private const string NexusOperationTokenHeader = "Nexus-Operation-Token" ;
19-
2016 /// <summary>
2117 /// Start a standalone activity and return the activity-execution operation token. This
2218 /// handles all Nexus plumbing: cloning options, defaulting task queue / ID, processing
@@ -59,7 +55,7 @@ internal static async Task<string> StartActivityAndGetTokenAsync(
5955 var activityId = options . Id ! ;
6056
6157 // Generate the token before starting the activity (needed for callback header)
62- var token = new NexusActivityExecutionHandle ( namespace_ , activityId , 0 ) . ToToken ( ) ;
58+ var token = NexusActivityExecutionToken . Build ( namespace_ , activityId ) ;
6359
6460 if ( options . IdConflictPolicy == Api . Enums . V1 . ActivityIdConflictPolicy . UseExisting )
6561 {
@@ -70,45 +66,14 @@ internal static async Task<string> StartActivityAndGetTokenAsync(
7066 AttachRequestId = true ,
7167 } ;
7268 }
73- if ( nexusStartContext . InboundLinks . Count > 0 )
69+ if ( NexusOperationStartCommon . BuildInboundLinks (
70+ nexusStartContext , temporalContext ) is { } links )
7471 {
75- options . Links = nexusStartContext . InboundLinks . Select ( link =>
76- {
77- try
78- {
79- return new Link { WorkflowEvent = link . ToWorkflowEvent ( ) } ;
80- }
81- catch ( ArgumentException e )
82- {
83- temporalContext . Logger . LogWarning ( e , "Invalid Nexus link: {Url}" , link . Uri ) ;
84- return null ;
85- }
86- } ) . OfType < Link > ( ) . ToList ( ) ;
72+ options . Links = links ;
8773 }
88- if ( nexusStartContext . CallbackUrl is { } callbackUrl )
74+ if ( NexusOperationStartCommon . BuildCallback (
75+ nexusStartContext , token , options . Links ) is { } callback )
8976 {
90- var callback = new Callback ( ) { Nexus = new ( ) { Url = callbackUrl } } ;
91- var callbackHeadersHasToken = false ;
92- if ( nexusStartContext . CallbackHeaders is { } callbackHeaders )
93- {
94- foreach ( var kv in callbackHeaders )
95- {
96- callback . Nexus . Header . Add ( kv . Key , kv . Value ) ;
97- if ( string . Equals (
98- kv . Key , NexusOperationTokenHeader , StringComparison . OrdinalIgnoreCase ) )
99- {
100- callbackHeadersHasToken = true ;
101- }
102- }
103- }
104- if ( ! callbackHeadersHasToken )
105- {
106- callback . Nexus . Header [ NexusOperationTokenHeader ] = token ;
107- }
108- if ( options . Links is { } links )
109- {
110- callback . Links . AddRange ( links ) ;
111- }
11277 options . CompletionCallbacks = new [ ] { callback } ;
11378 }
11479 options . RequestId = nexusStartContext . RequestId ;
0 commit comments