Skip to content

Commit e689140

Browse files
feat: Expose method for making custom HTTP requests (box/box-codegen#622) (#329)
1 parent 21a4459 commit e689140

File tree

568 files changed

+1334
-927
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

568 files changed

+1334
-927
lines changed

.codegen.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{ "engineHash": "1c0a1c0", "specHash": "544d370", "version": "1.4.0" }
1+
{ "engineHash": "ca891f7", "specHash": "544d370", "version": "1.4.0" }

Box.Sdk.Gen.Tests.Integration/Test/Client/ClientManagerTests.cs

+52-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Microsoft.VisualStudio.TestTools.UnitTesting;
22
using Box.Sdk.Gen.Internal;
3-
using System.Collections.Generic;
4-
using System.Collections.ObjectModel;
53
using System;
4+
using System.Collections.ObjectModel;
5+
using System.Collections.Generic;
66
using Box.Sdk.Gen;
77
using Box.Sdk.Gen.Schemas;
88
using Box.Sdk.Gen.Managers;
@@ -15,6 +15,56 @@ public class ClientManagerTests {
1515
public ClientManagerTests() {
1616
client = new CommonsManager().GetDefaultClient();
1717
}
18+
[TestMethod]
19+
public async System.Threading.Tasks.Task TestMakeRequestJsonCrud() {
20+
string newFolderName = Utils.GetUUID();
21+
string requestBodyPost = string.Concat("{\"name\": \"", newFolderName, "\", \"parent\": { \"id\": \"0\"}}");
22+
FetchResponse createFolderResponse = await client.MakeRequestAsync(fetchOptions: new FetchOptions(method: "post", url: "https://api.box.com/2.0/folders") { Data = JsonUtils.JsonToSerializedData(text: requestBodyPost) });
23+
Assert.IsTrue(createFolderResponse.Status == 201);
24+
SerializedData createdFolder = NullableUtils.Unwrap(createFolderResponse.Data);
25+
Assert.IsTrue(JsonUtils.GetSdValueByKey(obj: createdFolder, key: "name") == newFolderName);
26+
string updatedName = Utils.GetUUID();
27+
string requestBodyPut = string.Concat("{\"name\": \"", updatedName, "\"}");
28+
FetchResponse updateFolderResponse = await client.MakeRequestAsync(fetchOptions: new FetchOptions(method: "put", url: string.Concat("https://api.box.com/2.0/folders/", JsonUtils.GetSdValueByKey(obj: createdFolder, key: "id"))) { Data = JsonUtils.JsonToSerializedData(text: requestBodyPut) });
29+
Assert.IsTrue(updateFolderResponse.Status == 200);
30+
SerializedData updatedFolder = NullableUtils.Unwrap(updateFolderResponse.Data);
31+
Assert.IsTrue(JsonUtils.GetSdValueByKey(obj: updatedFolder, key: "name") == updatedName);
32+
Assert.IsTrue(JsonUtils.GetSdValueByKey(obj: updatedFolder, key: "id") == JsonUtils.GetSdValueByKey(obj: createdFolder, key: "id"));
33+
FetchResponse getFolderResponse = await client.MakeRequestAsync(fetchOptions: new FetchOptions(url: string.Concat("https://api.box.com/2.0/folders/", JsonUtils.GetSdValueByKey(obj: createdFolder, key: "id")), method: "GET"));
34+
Assert.IsTrue(getFolderResponse.Status == 200);
35+
SerializedData receivedFolder = NullableUtils.Unwrap(getFolderResponse.Data);
36+
Assert.IsTrue(JsonUtils.GetSdValueByKey(obj: receivedFolder, key: "name") == updatedName);
37+
Assert.IsTrue(JsonUtils.GetSdValueByKey(obj: receivedFolder, key: "id") == JsonUtils.GetSdValueByKey(obj: updatedFolder, key: "id"));
38+
FetchResponse deleteFolderResponse = await client.MakeRequestAsync(fetchOptions: new FetchOptions(url: string.Concat("https://api.box.com/2.0/folders/", JsonUtils.GetSdValueByKey(obj: receivedFolder, key: "id")), method: "DELETE"));
39+
Assert.IsTrue(deleteFolderResponse.Status == 204);
40+
}
41+
42+
[TestMethod]
43+
public async System.Threading.Tasks.Task TestMakeRequestMultipart() {
44+
string newFolderName = Utils.GetUUID();
45+
FolderFull newFolder = await client.Folders.CreateFolderAsync(requestBody: new CreateFolderRequestBody(name: newFolderName, parent: new CreateFolderRequestBodyParentField(id: "0")));
46+
string newFolderId = newFolder.Id;
47+
string newFileName = string.Concat(Utils.GetUUID(), ".pdf");
48+
System.IO.Stream fileContentStream = Utils.GenerateByteStream(size: 1024 * 1024);
49+
string multipartAttributes = string.Concat("{\"name\": \"", newFileName, "\", \"parent\": { \"id\":", newFolderId, "}}");
50+
FetchResponse uploadFileResponse = await client.MakeRequestAsync(fetchOptions: new FetchOptions(method: "POST", url: "https://upload.box.com/api/2.0/files/content", contentType: "multipart/form-data") { MultipartData = Array.AsReadOnly(new [] {new MultipartItem(partName: "attributes") { Data = JsonUtils.JsonToSerializedData(text: multipartAttributes) },new MultipartItem(partName: "file") { FileStream = fileContentStream }}) });
51+
Assert.IsTrue(uploadFileResponse.Status == 201);
52+
await client.Folders.DeleteFolderByIdAsync(folderId: newFolderId, queryParams: new DeleteFolderByIdQueryParams() { Recursive = true });
53+
}
54+
55+
[TestMethod]
56+
public async System.Threading.Tasks.Task TestMakeRequestBinaryFormat() {
57+
string newFileName = Utils.GetUUID();
58+
byte[] fileBuffer = Utils.GenerateByteBuffer(size: 1024 * 1024);
59+
System.IO.Stream fileContentStream = Utils.GenerateByteStreamFromBuffer(buffer: fileBuffer);
60+
Files uploadedFiles = await client.Uploads.UploadFileAsync(requestBody: new UploadFileRequestBody(attributes: new UploadFileRequestBodyAttributesField(name: newFileName, parent: new UploadFileRequestBodyAttributesParentField(id: "0")), file: fileContentStream));
61+
FileFull uploadedFile = NullableUtils.Unwrap(uploadedFiles.Entries)[0];
62+
FetchResponse downloadFileResponse = await client.MakeRequestAsync(fetchOptions: new FetchOptions(method: "GET", url: string.Concat("https://api.box.com/2.0/files/", uploadedFile.Id, "/content"), responseFormat: Box.Sdk.Gen.ResponseFormat.Binary));
63+
Assert.IsTrue(downloadFileResponse.Status == 200);
64+
Assert.IsTrue(Utils.BufferEquals(buffer1: await Utils.ReadByteStreamAsync(byteStream: NullableUtils.Unwrap(downloadFileResponse.Content)), buffer2: fileBuffer));
65+
await client.Files.DeleteFileByIdAsync(fileId: uploadedFile.Id);
66+
}
67+
1868
[TestMethod]
1969
public async System.Threading.Tasks.Task TestWithAsUserHeader() {
2070
string userName = Utils.GetUUID();

Box.Sdk.Gen.Tests.Integration/Test/Folders/FoldersManagerTests.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Microsoft.VisualStudio.TestTools.UnitTesting;
2+
using Box.Sdk.Gen.Internal;
23
using System;
34
using System.Collections.ObjectModel;
45
using System.Collections.Generic;
5-
using Box.Sdk.Gen.Internal;
66
using Box.Sdk.Gen;
77
using Box.Sdk.Gen.Schemas;
88
using Box.Sdk.Gen.Managers;
@@ -20,6 +20,7 @@ public async System.Threading.Tasks.Task TestGetFolderInfo() {
2020
FolderFull rootFolder = await client.Folders.GetFolderByIdAsync(folderId: "0");
2121
Assert.IsTrue(rootFolder.Id == "0");
2222
Assert.IsTrue(rootFolder.Name == "All Files");
23+
Assert.IsTrue(StringUtils.ToStringRepresentation(rootFolder.Type?.Value) == "folder");
2324
}
2425

2526
[TestMethod]

Box.Sdk.Gen/Box/CcgAuth/BoxCcgAuth.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class BoxCcgAuth : IAuthentication {
2626
/// <summary>
2727
/// The type of the subject ID provided. Must be either 'user' or 'enterprise'.
2828
/// </summary>
29-
internal StringEnum<PostOAuth2TokenBoxSubjectTypeField>? SubjectType { get; }
29+
internal PostOAuth2TokenBoxSubjectTypeField? SubjectType { get; }
3030

3131
public BoxCcgAuth(CcgConfig config) {
3232
Config = config;

Box.Sdk.Gen/Box/JwtAuth/BoxJwtAuth.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public async System.Threading.Tasks.Task<AccessToken> RefreshTokenAsync(NetworkS
4545
if (Utils.IsBrowser()) {
4646
throw new BoxSdkException(message: "JWT auth is not supported in browser environment.");
4747
}
48-
JwtAlgorithm alg = this.Config.Algorithm?.Value != null ? NullableUtils.Unwrap(this.Config.Algorithm?.Value) : JwtAlgorithm.Rs256;
48+
JwtAlgorithm alg = this.Config.Algorithm != null ? NullableUtils.Unwrap(this.Config.Algorithm) : JwtAlgorithm.Rs256;
4949
Dictionary<string, object> claims = new Dictionary<string, object>() { { "exp", Utils.GetEpochTimeInSeconds() + 30 }, { "box_sub_type", this.SubjectType } };
5050
JwtSignOptions jwtOptions = new JwtSignOptions(algorithm: alg, audience: "https://api.box.com/oauth2/token", subject: this.SubjectId, issuer: this.Config.ClientId, jwtid: Utils.GetUUID(), keyid: this.Config.JwtKeyId);
5151
JwtKey jwtKey = new JwtKey(key: this.Config.PrivateKey, passphrase: this.Config.PrivateKeyPassphrase);

Box.Sdk.Gen/Box/JwtAuth/JwtConfig.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class JwtConfig {
4242
/// </summary>
4343
public string? UserId { get; init; }
4444

45-
internal StringEnum<JwtAlgorithm>? Algorithm { get; }
45+
internal JwtAlgorithm? Algorithm { get; }
4646

4747
public ITokenStorage TokenStorage { get; }
4848

Box.Sdk.Gen/Client/BoxClient.cs

+15-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
using Box.Sdk.Gen.Internal;
2+
using Box.Sdk.Gen;
13
using System.Collections.Generic;
24
using System.Collections.ObjectModel;
35
using Box.Sdk.Gen.Managers;
4-
using Box.Sdk.Gen.Internal;
56

67
namespace Box.Sdk.Gen {
78
public class BoxClient : IBoxClient {
@@ -223,6 +224,19 @@ public BoxClient(IAuthentication auth, NetworkSession? networkSession = default)
223224
IntegrationMappings = new IntegrationMappingsManager(networkSession: this.NetworkSession) { Auth = this.Auth };
224225
Ai = new AiManager(networkSession: this.NetworkSession) { Auth = this.Auth };
225226
}
227+
/// <summary>
228+
/// Make a custom http request using the client authentication and network session.
229+
/// </summary>
230+
/// <param name="fetchOptions">
231+
/// Options to be passed to the fetch call
232+
/// </param>
233+
public async System.Threading.Tasks.Task<FetchResponse> MakeRequestAsync(FetchOptions fetchOptions) {
234+
IAuthentication auth = fetchOptions.Auth == null ? this.Auth : NullableUtils.Unwrap(fetchOptions.Auth);
235+
NetworkSession networkSession = fetchOptions.NetworkSession == null ? this.NetworkSession : NullableUtils.Unwrap(fetchOptions.NetworkSession);
236+
FetchOptions enrichedFetchOptions = new FetchOptions(url: fetchOptions.Url, method: fetchOptions.Method, contentType: fetchOptions.ContentType, responseFormat: fetchOptions.ResponseFormat) { Auth = auth, NetworkSession = networkSession, Parameters = fetchOptions.Parameters, Headers = fetchOptions.Headers, Data = fetchOptions.Data, FileStream = fetchOptions.FileStream, MultipartData = fetchOptions.MultipartData };
237+
return await HttpClientAdapter.FetchAsync(enrichedFetchOptions).ConfigureAwait(false);
238+
}
239+
226240
/// <summary>
227241
/// Create a new client to impersonate user with the provided ID. All calls made with the new client will be made in context of the impersonated user, leaving the original client unmodified.
228242
/// </summary>

Box.Sdk.Gen/Internal/Utils.cs

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Linq;
55
using System.Threading;
66
using System.Threading.Tasks;
7+
using System.Text.Json;
78
using System.Globalization;
89

910
namespace Box.Sdk.Gen.Internal

Box.Sdk.Gen/Managers/Ai/AiManager.cs

+10-10
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ public AiManager(NetworkSession? networkSession = default) {
2828
public async System.Threading.Tasks.Task<AiResponseFull> CreateAiAskAsync(AiAsk requestBody, CreateAiAskHeaders? headers = default, System.Threading.CancellationToken? cancellationToken = null) {
2929
headers = headers ?? new CreateAiAskHeaders();
3030
Dictionary<string, string> headersMap = Utils.PrepareParams(map: DictionaryUtils.MergeDictionaries(new Dictionary<string, string?>() { }, headers.ExtraHeaders));
31-
FetchResponse response = await HttpClientAdapter.FetchAsync(new FetchOptions(url: string.Concat(this.NetworkSession.BaseUrls.BaseUrl, "/2.0/ai/ask"), networkSession: this.NetworkSession) { Method = "POST", Headers = headersMap, Data = SimpleJsonSerializer.Serialize(requestBody), ContentType = "application/json", ResponseFormat = "json", Auth = this.Auth, CancellationToken = cancellationToken }).ConfigureAwait(false);
32-
return SimpleJsonSerializer.Deserialize<AiResponseFull>(response.Data);
31+
FetchResponse response = await HttpClientAdapter.FetchAsync(new FetchOptions(url: string.Concat(this.NetworkSession.BaseUrls.BaseUrl, "/2.0/ai/ask"), method: "POST", contentType: "application/json", responseFormat: Box.Sdk.Gen.ResponseFormat.Json) { Headers = headersMap, Data = SimpleJsonSerializer.Serialize(requestBody), Auth = this.Auth, NetworkSession = this.NetworkSession, CancellationToken = cancellationToken }).ConfigureAwait(false);
32+
return SimpleJsonSerializer.Deserialize<AiResponseFull>(NullableUtils.Unwrap(response.Data));
3333
}
3434

3535
/// <summary>
@@ -47,8 +47,8 @@ public async System.Threading.Tasks.Task<AiResponseFull> CreateAiAskAsync(AiAsk
4747
public async System.Threading.Tasks.Task<AiResponse> CreateAiTextGenAsync(AiTextGen requestBody, CreateAiTextGenHeaders? headers = default, System.Threading.CancellationToken? cancellationToken = null) {
4848
headers = headers ?? new CreateAiTextGenHeaders();
4949
Dictionary<string, string> headersMap = Utils.PrepareParams(map: DictionaryUtils.MergeDictionaries(new Dictionary<string, string?>() { }, headers.ExtraHeaders));
50-
FetchResponse response = await HttpClientAdapter.FetchAsync(new FetchOptions(url: string.Concat(this.NetworkSession.BaseUrls.BaseUrl, "/2.0/ai/text_gen"), networkSession: this.NetworkSession) { Method = "POST", Headers = headersMap, Data = SimpleJsonSerializer.Serialize(requestBody), ContentType = "application/json", ResponseFormat = "json", Auth = this.Auth, CancellationToken = cancellationToken }).ConfigureAwait(false);
51-
return SimpleJsonSerializer.Deserialize<AiResponse>(response.Data);
50+
FetchResponse response = await HttpClientAdapter.FetchAsync(new FetchOptions(url: string.Concat(this.NetworkSession.BaseUrls.BaseUrl, "/2.0/ai/text_gen"), method: "POST", contentType: "application/json", responseFormat: Box.Sdk.Gen.ResponseFormat.Json) { Headers = headersMap, Data = SimpleJsonSerializer.Serialize(requestBody), Auth = this.Auth, NetworkSession = this.NetworkSession, CancellationToken = cancellationToken }).ConfigureAwait(false);
51+
return SimpleJsonSerializer.Deserialize<AiResponse>(NullableUtils.Unwrap(response.Data));
5252
}
5353

5454
/// <summary>
@@ -67,8 +67,8 @@ public async System.Threading.Tasks.Task<AiAgentAskOrAiAgentExtractOrAiAgentExtr
6767
headers = headers ?? new GetAiAgentDefaultConfigHeaders();
6868
Dictionary<string, string> queryParamsMap = Utils.PrepareParams(map: new Dictionary<string, string?>() { { "mode", StringUtils.ToStringRepresentation(queryParams.Mode?.Value) }, { "language", StringUtils.ToStringRepresentation(queryParams.Language) }, { "model", StringUtils.ToStringRepresentation(queryParams.Model) } });
6969
Dictionary<string, string> headersMap = Utils.PrepareParams(map: DictionaryUtils.MergeDictionaries(new Dictionary<string, string?>() { }, headers.ExtraHeaders));
70-
FetchResponse response = await HttpClientAdapter.FetchAsync(new FetchOptions(url: string.Concat(this.NetworkSession.BaseUrls.BaseUrl, "/2.0/ai_agent_default"), networkSession: this.NetworkSession) { Method = "GET", Parameters = queryParamsMap, Headers = headersMap, ResponseFormat = "json", Auth = this.Auth, CancellationToken = cancellationToken }).ConfigureAwait(false);
71-
return SimpleJsonSerializer.DeserializeWithoutRawJson<AiAgentAskOrAiAgentExtractOrAiAgentExtractStructuredOrAiAgentTextGen>(response.Data);
70+
FetchResponse response = await HttpClientAdapter.FetchAsync(new FetchOptions(url: string.Concat(this.NetworkSession.BaseUrls.BaseUrl, "/2.0/ai_agent_default"), method: "GET", responseFormat: Box.Sdk.Gen.ResponseFormat.Json) { Parameters = queryParamsMap, Headers = headersMap, Auth = this.Auth, NetworkSession = this.NetworkSession, CancellationToken = cancellationToken }).ConfigureAwait(false);
71+
return SimpleJsonSerializer.DeserializeWithoutRawJson<AiAgentAskOrAiAgentExtractOrAiAgentExtractStructuredOrAiAgentTextGen>(NullableUtils.Unwrap(response.Data));
7272
}
7373

7474
/// <summary>
@@ -87,8 +87,8 @@ public async System.Threading.Tasks.Task<AiAgentAskOrAiAgentExtractOrAiAgentExtr
8787
public async System.Threading.Tasks.Task<AiResponse> CreateAiExtractAsync(AiExtract requestBody, CreateAiExtractHeaders? headers = default, System.Threading.CancellationToken? cancellationToken = null) {
8888
headers = headers ?? new CreateAiExtractHeaders();
8989
Dictionary<string, string> headersMap = Utils.PrepareParams(map: DictionaryUtils.MergeDictionaries(new Dictionary<string, string?>() { }, headers.ExtraHeaders));
90-
FetchResponse response = await HttpClientAdapter.FetchAsync(new FetchOptions(url: string.Concat(this.NetworkSession.BaseUrls.BaseUrl, "/2.0/ai/extract"), networkSession: this.NetworkSession) { Method = "POST", Headers = headersMap, Data = SimpleJsonSerializer.Serialize(requestBody), ContentType = "application/json", ResponseFormat = "json", Auth = this.Auth, CancellationToken = cancellationToken }).ConfigureAwait(false);
91-
return SimpleJsonSerializer.Deserialize<AiResponse>(response.Data);
90+
FetchResponse response = await HttpClientAdapter.FetchAsync(new FetchOptions(url: string.Concat(this.NetworkSession.BaseUrls.BaseUrl, "/2.0/ai/extract"), method: "POST", contentType: "application/json", responseFormat: Box.Sdk.Gen.ResponseFormat.Json) { Headers = headersMap, Data = SimpleJsonSerializer.Serialize(requestBody), Auth = this.Auth, NetworkSession = this.NetworkSession, CancellationToken = cancellationToken }).ConfigureAwait(false);
91+
return SimpleJsonSerializer.Deserialize<AiResponse>(NullableUtils.Unwrap(response.Data));
9292
}
9393

9494
/// <summary>
@@ -109,8 +109,8 @@ public async System.Threading.Tasks.Task<AiResponse> CreateAiExtractAsync(AiExtr
109109
public async System.Threading.Tasks.Task<AiExtractResponse> CreateAiExtractStructuredAsync(AiExtractStructured requestBody, CreateAiExtractStructuredHeaders? headers = default, System.Threading.CancellationToken? cancellationToken = null) {
110110
headers = headers ?? new CreateAiExtractStructuredHeaders();
111111
Dictionary<string, string> headersMap = Utils.PrepareParams(map: DictionaryUtils.MergeDictionaries(new Dictionary<string, string?>() { }, headers.ExtraHeaders));
112-
FetchResponse response = await HttpClientAdapter.FetchAsync(new FetchOptions(url: string.Concat(this.NetworkSession.BaseUrls.BaseUrl, "/2.0/ai/extract_structured"), networkSession: this.NetworkSession) { Method = "POST", Headers = headersMap, Data = SimpleJsonSerializer.Serialize(requestBody), ContentType = "application/json", ResponseFormat = "json", Auth = this.Auth, CancellationToken = cancellationToken }).ConfigureAwait(false);
113-
return SimpleJsonSerializer.Deserialize<AiExtractResponse>(response.Data);
112+
FetchResponse response = await HttpClientAdapter.FetchAsync(new FetchOptions(url: string.Concat(this.NetworkSession.BaseUrls.BaseUrl, "/2.0/ai/extract_structured"), method: "POST", contentType: "application/json", responseFormat: Box.Sdk.Gen.ResponseFormat.Json) { Headers = headersMap, Data = SimpleJsonSerializer.Serialize(requestBody), Auth = this.Auth, NetworkSession = this.NetworkSession, CancellationToken = cancellationToken }).ConfigureAwait(false);
113+
return SimpleJsonSerializer.Deserialize<AiExtractResponse>(NullableUtils.Unwrap(response.Data));
114114
}
115115

116116
}

Box.Sdk.Gen/Managers/Ai/CreateAiAskHeaders.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Box.Sdk.Gen;
22
using System.Collections.Generic;
33
using System.Collections.ObjectModel;
4-
using Box.Sdk.Gen.Schemas;
54
using Box.Sdk.Gen.Internal;
5+
using Box.Sdk.Gen.Schemas;
66

77
namespace Box.Sdk.Gen.Managers {
88
public class CreateAiAskHeaders {

Box.Sdk.Gen/Managers/Ai/CreateAiExtractHeaders.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Box.Sdk.Gen;
22
using System.Collections.Generic;
33
using System.Collections.ObjectModel;
4-
using Box.Sdk.Gen.Schemas;
54
using Box.Sdk.Gen.Internal;
5+
using Box.Sdk.Gen.Schemas;
66

77
namespace Box.Sdk.Gen.Managers {
88
public class CreateAiExtractHeaders {

Box.Sdk.Gen/Managers/Ai/CreateAiExtractStructuredHeaders.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Box.Sdk.Gen;
22
using System.Collections.Generic;
33
using System.Collections.ObjectModel;
4-
using Box.Sdk.Gen.Schemas;
54
using Box.Sdk.Gen.Internal;
5+
using Box.Sdk.Gen.Schemas;
66

77
namespace Box.Sdk.Gen.Managers {
88
public class CreateAiExtractStructuredHeaders {

Box.Sdk.Gen/Managers/Ai/CreateAiTextGenHeaders.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Box.Sdk.Gen;
22
using System.Collections.Generic;
33
using System.Collections.ObjectModel;
4-
using Box.Sdk.Gen.Schemas;
54
using Box.Sdk.Gen.Internal;
5+
using Box.Sdk.Gen.Schemas;
66

77
namespace Box.Sdk.Gen.Managers {
88
public class CreateAiTextGenHeaders {

0 commit comments

Comments
 (0)