Skip to content

Commit 30b6644

Browse files
committed
feat: add overloads to allow custom authentication routes
1 parent 682bb2d commit 30b6644

File tree

2 files changed

+176
-32
lines changed

2 files changed

+176
-32
lines changed

Catglobe.CgScript.Runtime/ApiClientBase.cs

Lines changed: 80 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,48 @@ namespace Catglobe.CgScript.Runtime;
1010

1111
internal abstract class ApiClientBase(HttpClient httpClient, ILogger<ICgScriptApiClient> logger) : ICgScriptApiClient, ILongRunningCgScriptApiClient
1212
{
13-
public async Task<ScriptResult<TR>> Execute<TP, TR>(string scriptName, TP parameter, JsonTypeInfo<TP> callJsonTypeInfo, JsonTypeInfo<TR> resultJsonTypeInfo, CancellationToken cancellationToken)
13+
public Task<ScriptResult<TR>> Execute<TP, TR>(string scriptName, TP parameter, JsonTypeInfo<TP> callJsonTypeInfo, JsonTypeInfo<TR> resultJsonTypeInfo, CancellationToken cancellationToken) =>
14+
ExecuteCustomOptions(scriptName, parameter, callJsonTypeInfo, resultJsonTypeInfo, null, cancellationToken);
15+
16+
public async Task<ScriptResult<TR>> ExecuteCustomOptions<TP, TR>(string scriptName, TP parameter, JsonTypeInfo<TP> callJsonTypeInfo, JsonTypeInfo<TR> resultJsonTypeInfo,
17+
Action<HttpRequestOptions>? applyOptions, CancellationToken cancellationToken)
1418
{
15-
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
16-
var path = await GetPath(scriptName);
17-
var jsonContent = await GetJsonContent(scriptName, parameter, callJsonTypeInfo);
18-
var httpResponseMessage = await httpClient.PostAsync(path, jsonContent, cancellationToken).ConfigureAwait(false);
19+
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
20+
var path = await GetPath(scriptName);
21+
var jsonContent = await GetJsonContent(scriptName, parameter, callJsonTypeInfo);
22+
var request = new HttpRequestMessage(HttpMethod.Post, path) {Content = jsonContent,};
23+
applyOptions?.Invoke(request.Options);
24+
var httpResponseMessage = await httpClient.SendAsync(request, cancellationToken).ConfigureAwait(false);
1925
return await ParseResponse(httpResponseMessage, resultJsonTypeInfo, cancellationToken);
2026
}
2127

22-
public async Task<ScriptResult<TR>> ExecuteArray<TP, TR>(string scriptName, TP parameter, JsonTypeInfo<TP> callJsonTypeInfo, JsonTypeInfo<TR> resultJsonTypeInfo, CancellationToken cancellationToken)
28+
public Task<ScriptResult<TR>> ExecuteArray<TP, TR>(string scriptName, TP parameter, JsonTypeInfo<TP> callJsonTypeInfo, JsonTypeInfo<TR> resultJsonTypeInfo, CancellationToken cancellationToken) =>
29+
ExecuteArrayCustomOptions(scriptName, parameter, callJsonTypeInfo, resultJsonTypeInfo, null, cancellationToken);
30+
31+
public async Task<ScriptResult<TR>> ExecuteArrayCustomOptions<TP, TR>(string scriptName, TP parameter, JsonTypeInfo<TP> callJsonTypeInfo, JsonTypeInfo<TR> resultJsonTypeInfo,
32+
Action<HttpRequestOptions>? applyOptions, CancellationToken cancellationToken)
2333
{
24-
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
25-
var path = await GetPath(scriptName, "?expandParameters=true");
26-
var jsonContent = await GetJsonContent(scriptName, parameter, callJsonTypeInfo);
27-
var httpResponseMessage = await httpClient.PostAsync(path, jsonContent, cancellationToken).ConfigureAwait(false);
34+
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
35+
var path = await GetPath(scriptName, "?expandParameters=true");
36+
var jsonContent = await GetJsonContent(scriptName, parameter, callJsonTypeInfo);
37+
var request = new HttpRequestMessage(HttpMethod.Post, path) {Content = jsonContent,};
38+
applyOptions?.Invoke(request.Options);
39+
var httpResponseMessage = await httpClient.SendAsync(request, cancellationToken).ConfigureAwait(false);
2840
return await ParseResponse(httpResponseMessage, resultJsonTypeInfo, cancellationToken);
2941
}
3042

31-
public async Task<ScriptResult<TR>> Execute<TR>(string scriptName, JsonTypeInfo<TR> resultJsonTypeInfo, CancellationToken cancellationToken = default)
43+
public Task<ScriptResult<TR>> Execute<TR>(string scriptName, JsonTypeInfo<TR> resultJsonTypeInfo, CancellationToken cancellationToken = default) =>
44+
ExecuteCustomOptions(scriptName, resultJsonTypeInfo, null, cancellationToken);
45+
46+
public async Task<ScriptResult<TR>> ExecuteCustomOptions<TR>(string scriptName, JsonTypeInfo<TR> resultJsonTypeInfo, Action<HttpRequestOptions>? applyOptions,
47+
CancellationToken cancellationToken = default)
3248
{
33-
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
34-
var path = await GetPath(scriptName, "?expandParameters=true");
35-
var jsonContent = await GetJsonContent(scriptName, null, (JsonTypeInfo<object>)null!);
36-
var httpResponseMessage = await httpClient.PostAsync(path, jsonContent, cancellationToken).ConfigureAwait(false);
49+
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
50+
var path = await GetPath(scriptName, "?expandParameters=true");
51+
var jsonContent = await GetJsonContent(scriptName, null, (JsonTypeInfo<object>)null!);
52+
var request = new HttpRequestMessage(HttpMethod.Post, path) {Content = jsonContent,};
53+
applyOptions?.Invoke(request.Options);
54+
var httpResponseMessage = await httpClient.SendAsync(request, cancellationToken).ConfigureAwait(false);
3755
return await ParseResponse(httpResponseMessage, resultJsonTypeInfo, cancellationToken);
3856
}
3957

@@ -67,39 +85,69 @@ private async Task<ScriptResult<TR>> ParseResponse<TR>(HttpResponseMessage call,
6785
}
6886

6987
[RequiresUnreferencedCode("JSON")]
70-
public async Task<ScriptResult<TR>> Execute<TP, TR>(string scriptName, TP parameter, JsonSerializerOptions? options, CancellationToken cancellationToken = default)
88+
public Task<ScriptResult<TR>> Execute<TP, TR>(string scriptName, TP parameter, JsonSerializerOptions? options, CancellationToken cancellationToken = default) =>
89+
ExecuteCustomOptions<TP, TR>(scriptName, parameter, options, null, cancellationToken);
90+
91+
[RequiresUnreferencedCode("JSON")]
92+
public async Task<ScriptResult<TR>> ExecuteCustomOptions<TP, TR>(string scriptName, TP parameter, JsonSerializerOptions? options, Action<HttpRequestOptions>? applyOptions,
93+
CancellationToken cancellationToken = default)
7194
{
7295
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
73-
return await ParseResponse<TR>(await httpClient.PostAsync(await GetPath(scriptName), await GetJsonContent(scriptName, parameter, options), cancellationToken).ConfigureAwait(false), options, cancellationToken);
96+
var path = await GetPath(scriptName);
97+
var jsonContent = await GetJsonContent(scriptName, parameter, options);
98+
var request = new HttpRequestMessage(HttpMethod.Post, path) {Content = jsonContent,};
99+
applyOptions?.Invoke(request.Options);
100+
var httpResponseMessage = await httpClient.SendAsync(request, cancellationToken).ConfigureAwait(false);
101+
return await ParseResponse<TR>(httpResponseMessage, options, cancellationToken);
74102
}
75103

76104
[RequiresUnreferencedCode("JSON")]
77-
public async Task<ScriptResult<TR>> ExecuteArray<TP, TR>(string scriptName, TP parameter, JsonSerializerOptions? options, CancellationToken cancellationToken = default)
105+
public async Task<ScriptResult<TR>> ExecuteArrayCustomOptions<TP, TR>(string scriptName, TP parameter, JsonSerializerOptions? options, Action<HttpRequestOptions>? applyOptions, CancellationToken cancellationToken = default)
78106
{
79-
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
80-
var path = await GetPath(scriptName, "?expandParameters=true");
81-
var jsonContent = await GetJsonContent(scriptName, parameter, options);
82-
var httpResponseMessage = await httpClient.PostAsync(path, jsonContent, cancellationToken).ConfigureAwait(false);
107+
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
108+
var path = await GetPath(scriptName, "?expandParameters=true");
109+
var jsonContent = await GetJsonContent(scriptName, parameter, options);
110+
var request = new HttpRequestMessage(HttpMethod.Post, path) {Content = jsonContent,};
111+
applyOptions?.Invoke(request.Options);
112+
var httpResponseMessage = await httpClient.SendAsync(request, cancellationToken).ConfigureAwait(false);
83113
return await ParseResponse<TR>(httpResponseMessage, options, cancellationToken);
84114
}
85115

86116
[RequiresUnreferencedCode("JSON")]
87-
public async Task<ScriptResult<TR>> Execute<TR>(string scriptName, IReadOnlyCollection<object> parameters, JsonSerializerOptions? options = null, CancellationToken cancellationToken = default)
117+
public Task<ScriptResult<TR>> ExecuteArray<TP, TR>(string scriptName, TP parameter, JsonSerializerOptions? options, CancellationToken cancellationToken = default) =>
118+
ExecuteArrayCustomOptions<TP, TR>(scriptName, parameter, options, null, cancellationToken);
119+
120+
[RequiresUnreferencedCode("JSON")]
121+
public Task<ScriptResult<TR>> Execute<TR>(string scriptName, IReadOnlyCollection<object> parameters, JsonSerializerOptions? options = null, CancellationToken cancellationToken = default) =>
122+
ExecuteCustomOptions<TR>(scriptName, parameters, options, null, cancellationToken);
123+
124+
[RequiresUnreferencedCode("JSON")]
125+
public async Task<ScriptResult<TR>> ExecuteCustomOptions<TR>(string scriptName, IReadOnlyCollection<object> parameters, JsonSerializerOptions? options,
126+
Action<HttpRequestOptions>? applyOptions, CancellationToken cancellationToken = default)
88127
{
89-
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
90-
var path = await GetPath(scriptName, "?expandParameters=true");
91-
var jsonContent = await GetJsonContent(scriptName, parameters, options);
92-
var httpResponseMessage = await httpClient.PostAsync(path, jsonContent, cancellationToken).ConfigureAwait(false);
128+
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
129+
var path = await GetPath(scriptName, "?expandParameters=true");
130+
var jsonContent = await GetJsonContent(scriptName, parameters, options);
131+
var request = new HttpRequestMessage(HttpMethod.Post, path) {Content = jsonContent,};
132+
applyOptions?.Invoke(request.Options);
133+
var httpResponseMessage = await httpClient.SendAsync(request, cancellationToken).ConfigureAwait(false);
93134
return await ParseResponse<TR>(httpResponseMessage, options, cancellationToken);
94135
}
95136

96137
[RequiresUnreferencedCode("JSON")]
97-
public async Task<ScriptResult<TR>> Execute<TR>(string scriptName, JsonSerializerOptions? options = null, CancellationToken cancellationToken = default)
138+
public Task<ScriptResult<TR>> Execute<TR>(string scriptName, JsonSerializerOptions? options = null, CancellationToken cancellationToken = default) =>
139+
ExecuteCustomOptions<TR>(scriptName, options, null, cancellationToken);
140+
141+
[RequiresUnreferencedCode("JSON")]
142+
public async Task<ScriptResult<TR>> ExecuteCustomOptions<TR>(string scriptName, JsonSerializerOptions? options, Action<HttpRequestOptions>? applyOptions,
143+
CancellationToken cancellationToken = default)
98144
{
99-
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
100-
var path = await GetPath(scriptName);
101-
var jsonContent = await GetJsonContent(scriptName, null, (JsonTypeInfo<object>)null!);
102-
var httpResponseMessage = await httpClient.PostAsync(path, jsonContent, cancellationToken).ConfigureAwait(false);
145+
using var activity = CgScriptTelemetry.Source.StartActivity(scriptName);
146+
var path = await GetPath(scriptName);
147+
var jsonContent = await GetJsonContent(scriptName, null, (JsonTypeInfo<object>)null!);
148+
var request = new HttpRequestMessage(HttpMethod.Post, path) {Content = jsonContent,};
149+
applyOptions?.Invoke(request.Options);
150+
var httpResponseMessage = await httpClient.SendAsync(request, cancellationToken).ConfigureAwait(false);
103151
return await ParseResponse<TR>(httpResponseMessage, options, cancellationToken);
104152
}
105153

0 commit comments

Comments
 (0)