diff --git a/.manifest.json b/.manifest.json index e29aebe..5c156c7 100644 --- a/.manifest.json +++ b/.manifest.json @@ -1,24 +1,24 @@ { - "liblabVersion": "2.1.28", - "date": "2024-08-21T11:02:23.117Z", + "liblabVersion": "2.10.9", + "date": "2025-01-15T12:59:44.632Z", "config": { - "apiId": 947, + "apiId": 1666, "sdkName": "signplus", - "sdkVersion": "1.0.0", + "sdkVersion": "1.1.0", + "languages": ["csharp"], + "auth": ["bearer"], "liblabVersion": "2", "deliveryMethods": ["zip"], - "languages": ["csharp"], - "apiVersion": "2.0.0", + "apiVersion": "2.1.0", "apiName": "signplus-api", "specFilePath": "openapi.yaml", - "auth": ["bearer"], "languageOptions": { "csharp": { "packageId": "Alohi.Signplus", "githubRepoName": "signplus-sharp", "ignoreFiles": [], "liblabVersion": "2", - "sdkVersion": "1.0.0" + "sdkVersion": "1.1.0" }, "go": { "goModuleName": "github.com/alohihq/signplus-go", @@ -26,14 +26,23 @@ "githubRepoName": "signplus-go", "ignoreFiles": [], "liblabVersion": "2", - "sdkVersion": "1.0.0" + "sdkVersion": "1.1.0" }, "java": { - "groupId": "alohi.signplus", + "groupId": "com.alohi", + "artifactId": "signplus", + "developers": [ + { + "name": "Alohi SA", + "email": "support@alohi.com", + "organization": "Alohi SA", + "organizationUrl": "https://www.alohi.com" + } + ], "additionalConstructorParameters": [], "githubRepoName": "signplus-java", "liblabVersion": "2", - "sdkVersion": "1.0.0" + "sdkVersion": "1.1.0" }, "python": { "alwaysInitializeOptionals": false, @@ -42,7 +51,7 @@ "githubRepoName": "signplus-python", "ignoreFiles": [], "liblabVersion": "2", - "sdkVersion": "1.0.0" + "sdkVersion": "1.1.0" }, "php": { "packageName": "alohi/signplus", @@ -50,7 +59,7 @@ "githubRepoName": "signplus-php", "ignoreFiles": [], "liblabVersion": "2", - "sdkVersion": "2.0.0" + "sdkVersion": "1.1.0" }, "typescript": { "bundle": false, @@ -62,7 +71,8 @@ "githubRepoName": "signplus-typescript", "ignoreFiles": [], "liblabVersion": "2", - "sdkVersion": "1.0.0" + "sdkVersion": "1.1.0", + "generateEnumAs": "enum" } }, "publishing": { @@ -96,7 +106,6 @@ "httpMethodsToRetry": ["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD", "OPTIONS"] }, "multiTenant": true, - "specUrl": "https://prod-liblab-api-stack-specs.s3.us-east-1.amazonaws.com/947/open-api-spec.yaml?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA5P3QKKDKGVNIJ2H7%2F20240821%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240821T110214Z&X-Amz-Expires=43200&X-Amz-Signature=009d5622184bfe1c39e60a5d0a55af4a2e741c467ac7da365003bdd60373a218&X-Amz-SignedHeaders=host&x-id=GetObject", "includeWatermark": false, "packageId": "Alohi.Signplus", "githubRepoName": "signplus-sharp", @@ -113,7 +122,7 @@ "httpLibrary": { "name": "axios", "packages": { - "axios": "^1.7.4" + "axios": "^1.7.7" }, "languages": ["typescript"] }, @@ -121,29 +130,30 @@ "paths": [], "rawQueries": [], "queriesData": [] - } + }, + "ai": false }, "files": [ - "Signplus/Signplus.csproj", + "Alohi.Signplus/Alohi.Signplus.csproj", "install.sh", - "Signplus/Services/BaseService.cs", - "Signplus/Models/ValueEnum.cs", - "Signplus/Json/ValueEnumJsonConverter.cs", - "Signplus/Json/ValueEnumJsonConverterFactory.cs", - "Signplus/Http/Handlers/TokenHandler.cs", + "Alohi.Signplus/Services/BaseService.cs", + "Alohi.Signplus/Models/ValueEnum.cs", + "Alohi.Signplus/Json/ValueEnumJsonConverter.cs", + "Alohi.Signplus/Json/ValueEnumJsonConverterFactory.cs", + "Alohi.Signplus/Http/Handlers/TokenHandler.cs", "Example/Example.csproj", "Example/Program.cs", "Example/.gitignore", - "Signplus/Http/Serialization/SerializationStyle.cs", - "Signplus/Http/Serialization/QuerySerializationStyle.cs", - "Signplus/Http/Serialization/PathSerializationStyle.cs", - "Signplus/Http/Serialization/Serializer.cs", - "Signplus/Http/RequestBuilder.cs", - "Signplus/Config/SignplusConfig.cs", - "Signplus/Http/Environment.cs", - "Signplus/SignplusClient.cs", - "Signplus/Http/Handlers/RetryHandler.cs", - "Signplus/.gitignore", + "Alohi.Signplus/Http/Serialization/SerializationStyle.cs", + "Alohi.Signplus/Http/Serialization/QuerySerializationStyle.cs", + "Alohi.Signplus/Http/Serialization/PathSerializationStyle.cs", + "Alohi.Signplus/Http/Serialization/Serializer.cs", + "Alohi.Signplus/Http/RequestBuilder.cs", + "Alohi.Signplus/Config/SignplusConfig.cs", + "Alohi.Signplus/Http/Environment.cs", + "Alohi.Signplus/SignplusClient.cs", + "Alohi.Signplus/Http/Handlers/RetryHandler.cs", + "Alohi.Signplus/.gitignore", "./LICENSE", "documentation/models/CreateEnvelopeRequest.md", "documentation/models/Envelope.md", @@ -204,67 +214,136 @@ "documentation/models/TemplateRecipientRole.md", "documentation/models/TemplateOrderField.md", "documentation/models/WebhookEvent.md", - "Signplus/Models/CreateEnvelopeRequest.cs", - "Signplus/Models/Envelope.cs", - "Signplus/Models/CreateEnvelopeFromTemplateRequest.cs", - "Signplus/Models/ListEnvelopesRequest.cs", - "Signplus/Models/ListEnvelopesResponse.cs", - "Signplus/Models/Document.cs", - "Signplus/Models/ListEnvelopeDocumentsResponse.cs", - "Signplus/Models/AddEnvelopeDocumentRequest.cs", - "Signplus/Models/SetEnvelopeDynamicFieldsRequest.cs", - "Signplus/Models/AddEnvelopeSigningStepsRequest.cs", - "Signplus/Models/RenameEnvelopeRequest.cs", - "Signplus/Models/SetEnvelopeCommentRequest.cs", - "Signplus/Models/EnvelopeNotification.cs", - "Signplus/Models/SetEnvelopeExpirationRequest.cs", - "Signplus/Models/SetEnvelopeLegalityLevelRequest.cs", - "Signplus/Models/Annotation.cs", - "Signplus/Models/ListEnvelopeDocumentAnnotationsResponse.cs", - "Signplus/Models/AddAnnotationRequest.cs", - "Signplus/Models/CreateTemplateRequest.cs", - "Signplus/Models/Template.cs", - "Signplus/Models/ListTemplatesRequest.cs", - "Signplus/Models/ListTemplatesResponse.cs", - "Signplus/Models/AddTemplateDocumentRequest.cs", - "Signplus/Models/ListTemplateDocumentsResponse.cs", - "Signplus/Models/AddTemplateSigningStepsRequest.cs", - "Signplus/Models/RenameTemplateRequest.cs", - "Signplus/Models/SetTemplateCommentRequest.cs", - "Signplus/Models/ListTemplateAnnotationsResponse.cs", - "Signplus/Models/ListTemplateDocumentAnnotationsResponse.cs", - "Signplus/Models/CreateWebhookRequest.cs", - "Signplus/Models/Webhook.cs", - "Signplus/Models/ListWebhooksRequest.cs", - "Signplus/Models/ListWebhooksResponse.cs", - "Signplus/Models/EnvelopeLegalityLevel.cs", - "Signplus/Models/EnvelopeFlowType.cs", - "Signplus/Models/EnvelopeStatus.cs", - "Signplus/Models/SigningStep.cs", - "Signplus/Models/Recipient.cs", - "Signplus/Models/RecipientRole.cs", - "Signplus/Models/RecipientVerification.cs", - "Signplus/Models/RecipientVerificationType.cs", - "Signplus/Models/Page.cs", - "Signplus/Models/EnvelopeOrderField.cs", - "Signplus/Models/DynamicField.cs", - "Signplus/Models/AnnotationType.cs", - "Signplus/Models/AnnotationSignature.cs", - "Signplus/Models/AnnotationInitials.cs", - "Signplus/Models/AnnotationText.cs", - "Signplus/Models/AnnotationDateTime.cs", - "Signplus/Models/AnnotationCheckbox.cs", - "Signplus/Models/AnnotationFont.cs", - "Signplus/Models/AnnotationFontFamily.cs", - "Signplus/Models/AnnotationDateTimeFormat.cs", - "Signplus/Models/AnnotationCheckboxStyle.cs", - "Signplus/Models/TemplateSigningStep.cs", - "Signplus/Models/TemplateRecipient.cs", - "Signplus/Models/TemplateRecipientRole.cs", - "Signplus/Models/TemplateOrderField.cs", - "Signplus/Models/WebhookEvent.cs", + "Alohi.Signplus/Http/ApiException.cs", + "Alohi.Signplus/Http/Extensions/HttpResponseMessageExtensions.cs", + "Alohi.Signplus/Http/Extensions/MultipartFormDataContentExtensions.cs", + "Alohi.Signplus/Validation/CreateEnvelopeRequestValidator.cs", + "Alohi.Signplus/Validation/EnvelopeValidator.cs", + "Alohi.Signplus/Validation/CreateEnvelopeFromTemplateRequestValidator.cs", + "Alohi.Signplus/Validation/ListEnvelopesRequestValidator.cs", + "Alohi.Signplus/Validation/ListEnvelopesResponseValidator.cs", + "Alohi.Signplus/Validation/DocumentValidator.cs", + "Alohi.Signplus/Validation/ListEnvelopeDocumentsResponseValidator.cs", + "Alohi.Signplus/Validation/AddEnvelopeDocumentRequestValidator.cs", + "Alohi.Signplus/Validation/SetEnvelopeDynamicFieldsRequestValidator.cs", + "Alohi.Signplus/Validation/AddEnvelopeSigningStepsRequestValidator.cs", + "Alohi.Signplus/Validation/RenameEnvelopeRequestValidator.cs", + "Alohi.Signplus/Validation/SetEnvelopeCommentRequestValidator.cs", + "Alohi.Signplus/Validation/EnvelopeNotificationValidator.cs", + "Alohi.Signplus/Validation/SetEnvelopeExpirationRequestValidator.cs", + "Alohi.Signplus/Validation/SetEnvelopeLegalityLevelRequestValidator.cs", + "Alohi.Signplus/Validation/AnnotationValidator.cs", + "Alohi.Signplus/Validation/ListEnvelopeDocumentAnnotationsResponseValidator.cs", + "Alohi.Signplus/Validation/AddAnnotationRequestValidator.cs", + "Alohi.Signplus/Validation/CreateTemplateRequestValidator.cs", + "Alohi.Signplus/Validation/TemplateValidator.cs", + "Alohi.Signplus/Validation/ListTemplatesRequestValidator.cs", + "Alohi.Signplus/Validation/ListTemplatesResponseValidator.cs", + "Alohi.Signplus/Validation/AddTemplateDocumentRequestValidator.cs", + "Alohi.Signplus/Validation/ListTemplateDocumentsResponseValidator.cs", + "Alohi.Signplus/Validation/AddTemplateSigningStepsRequestValidator.cs", + "Alohi.Signplus/Validation/RenameTemplateRequestValidator.cs", + "Alohi.Signplus/Validation/SetTemplateCommentRequestValidator.cs", + "Alohi.Signplus/Validation/ListTemplateAnnotationsResponseValidator.cs", + "Alohi.Signplus/Validation/ListTemplateDocumentAnnotationsResponseValidator.cs", + "Alohi.Signplus/Validation/CreateWebhookRequestValidator.cs", + "Alohi.Signplus/Validation/WebhookValidator.cs", + "Alohi.Signplus/Validation/ListWebhooksRequestValidator.cs", + "Alohi.Signplus/Validation/ListWebhooksResponseValidator.cs", + "Alohi.Signplus/Validation/EnvelopeLegalityLevelValidator.cs", + "Alohi.Signplus/Validation/EnvelopeFlowTypeValidator.cs", + "Alohi.Signplus/Validation/EnvelopeStatusValidator.cs", + "Alohi.Signplus/Validation/SigningStepValidator.cs", + "Alohi.Signplus/Validation/RecipientValidator.cs", + "Alohi.Signplus/Validation/RecipientRoleValidator.cs", + "Alohi.Signplus/Validation/RecipientVerificationValidator.cs", + "Alohi.Signplus/Validation/RecipientVerificationTypeValidator.cs", + "Alohi.Signplus/Validation/PageValidator.cs", + "Alohi.Signplus/Validation/EnvelopeOrderFieldValidator.cs", + "Alohi.Signplus/Validation/DynamicFieldValidator.cs", + "Alohi.Signplus/Validation/AnnotationTypeValidator.cs", + "Alohi.Signplus/Validation/AnnotationSignatureValidator.cs", + "Alohi.Signplus/Validation/AnnotationInitialsValidator.cs", + "Alohi.Signplus/Validation/AnnotationTextValidator.cs", + "Alohi.Signplus/Validation/AnnotationDateTimeValidator.cs", + "Alohi.Signplus/Validation/AnnotationCheckboxValidator.cs", + "Alohi.Signplus/Validation/AnnotationFontValidator.cs", + "Alohi.Signplus/Validation/AnnotationFontFamilyValidator.cs", + "Alohi.Signplus/Validation/AnnotationDateTimeFormatValidator.cs", + "Alohi.Signplus/Validation/AnnotationCheckboxStyleValidator.cs", + "Alohi.Signplus/Validation/TemplateSigningStepValidator.cs", + "Alohi.Signplus/Validation/TemplateRecipientValidator.cs", + "Alohi.Signplus/Validation/TemplateRecipientRoleValidator.cs", + "Alohi.Signplus/Validation/TemplateOrderFieldValidator.cs", + "Alohi.Signplus/Validation/WebhookEventValidator.cs", + "Alohi.Signplus/Http/ValidationException.cs", + "Alohi.Signplus/Validation/FloatValidator.cs", + "Alohi.Signplus/Validation/NumberValidator.cs", + "Alohi.Signplus/Validation/StringValidator.cs", + "Alohi.Signplus/Validation/ListValidator.cs", + "Alohi.Signplus/Validation/Extensions/ValidationExtensions.cs", + "Alohi.Signplus/Http/Extensions/UriExtensions.cs", + "Alohi.Signplus/Models/CreateEnvelopeRequest.cs", + "Alohi.Signplus/Models/Envelope.cs", + "Alohi.Signplus/Models/CreateEnvelopeFromTemplateRequest.cs", + "Alohi.Signplus/Models/ListEnvelopesRequest.cs", + "Alohi.Signplus/Models/ListEnvelopesResponse.cs", + "Alohi.Signplus/Models/Document.cs", + "Alohi.Signplus/Models/ListEnvelopeDocumentsResponse.cs", + "Alohi.Signplus/Models/AddEnvelopeDocumentRequest.cs", + "Alohi.Signplus/Models/SetEnvelopeDynamicFieldsRequest.cs", + "Alohi.Signplus/Models/AddEnvelopeSigningStepsRequest.cs", + "Alohi.Signplus/Models/RenameEnvelopeRequest.cs", + "Alohi.Signplus/Models/SetEnvelopeCommentRequest.cs", + "Alohi.Signplus/Models/EnvelopeNotification.cs", + "Alohi.Signplus/Models/SetEnvelopeExpirationRequest.cs", + "Alohi.Signplus/Models/SetEnvelopeLegalityLevelRequest.cs", + "Alohi.Signplus/Models/Annotation.cs", + "Alohi.Signplus/Models/ListEnvelopeDocumentAnnotationsResponse.cs", + "Alohi.Signplus/Models/AddAnnotationRequest.cs", + "Alohi.Signplus/Models/CreateTemplateRequest.cs", + "Alohi.Signplus/Models/Template.cs", + "Alohi.Signplus/Models/ListTemplatesRequest.cs", + "Alohi.Signplus/Models/ListTemplatesResponse.cs", + "Alohi.Signplus/Models/AddTemplateDocumentRequest.cs", + "Alohi.Signplus/Models/ListTemplateDocumentsResponse.cs", + "Alohi.Signplus/Models/AddTemplateSigningStepsRequest.cs", + "Alohi.Signplus/Models/RenameTemplateRequest.cs", + "Alohi.Signplus/Models/SetTemplateCommentRequest.cs", + "Alohi.Signplus/Models/ListTemplateAnnotationsResponse.cs", + "Alohi.Signplus/Models/ListTemplateDocumentAnnotationsResponse.cs", + "Alohi.Signplus/Models/CreateWebhookRequest.cs", + "Alohi.Signplus/Models/Webhook.cs", + "Alohi.Signplus/Models/ListWebhooksRequest.cs", + "Alohi.Signplus/Models/ListWebhooksResponse.cs", + "Alohi.Signplus/Models/EnvelopeLegalityLevel.cs", + "Alohi.Signplus/Models/EnvelopeFlowType.cs", + "Alohi.Signplus/Models/EnvelopeStatus.cs", + "Alohi.Signplus/Models/SigningStep.cs", + "Alohi.Signplus/Models/Recipient.cs", + "Alohi.Signplus/Models/RecipientRole.cs", + "Alohi.Signplus/Models/RecipientVerification.cs", + "Alohi.Signplus/Models/RecipientVerificationType.cs", + "Alohi.Signplus/Models/Page.cs", + "Alohi.Signplus/Models/EnvelopeOrderField.cs", + "Alohi.Signplus/Models/DynamicField.cs", + "Alohi.Signplus/Models/AnnotationType.cs", + "Alohi.Signplus/Models/AnnotationSignature.cs", + "Alohi.Signplus/Models/AnnotationInitials.cs", + "Alohi.Signplus/Models/AnnotationText.cs", + "Alohi.Signplus/Models/AnnotationDateTime.cs", + "Alohi.Signplus/Models/AnnotationCheckbox.cs", + "Alohi.Signplus/Models/AnnotationFont.cs", + "Alohi.Signplus/Models/AnnotationFontFamily.cs", + "Alohi.Signplus/Models/AnnotationDateTimeFormat.cs", + "Alohi.Signplus/Models/AnnotationCheckboxStyle.cs", + "Alohi.Signplus/Models/TemplateSigningStep.cs", + "Alohi.Signplus/Models/TemplateRecipient.cs", + "Alohi.Signplus/Models/TemplateRecipientRole.cs", + "Alohi.Signplus/Models/TemplateOrderField.cs", + "Alohi.Signplus/Models/WebhookEvent.cs", "README.md", - "Signplus/Services/SignplusService.cs", + "Alohi.Signplus/Services/SignplusService.cs", "documentation/services/SignplusService.md" ] } diff --git a/Signplus/.gitignore b/Alohi.Signplus/.gitignore similarity index 99% rename from Signplus/.gitignore rename to Alohi.Signplus/.gitignore index 8a30d25..81dc9a0 100644 --- a/Signplus/.gitignore +++ b/Alohi.Signplus/.gitignore @@ -396,3 +396,7 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml + +# OS generated files +.DS_Store +Thumbs.db diff --git a/Signplus/Signplus.csproj b/Alohi.Signplus/Alohi.Signplus.csproj similarity index 55% rename from Signplus/Signplus.csproj rename to Alohi.Signplus/Alohi.Signplus.csproj index ee9761c..bb4d2c2 100644 --- a/Signplus/Signplus.csproj +++ b/Alohi.Signplus/Alohi.Signplus.csproj @@ -4,15 +4,15 @@ net6.0 enable enable - Signplus - 1.0.0 + Alohi.Signplus + 1.1.0 Alohi.Signplus README.md - - + + + - diff --git a/Signplus/Config/SignplusConfig.cs b/Alohi.Signplus/Config/SignplusConfig.cs similarity index 76% rename from Signplus/Config/SignplusConfig.cs rename to Alohi.Signplus/Config/SignplusConfig.cs index ba9ea70..a0688b9 100644 --- a/Signplus/Config/SignplusConfig.cs +++ b/Alohi.Signplus/Config/SignplusConfig.cs @@ -1,6 +1,6 @@ -using Environment = Signplus.Http.Environment; +using Environment = Alohi.Signplus.Http.Environment; -namespace Signplus.Config; +namespace Alohi.Signplus.Config; /// /// Configuration options for the SignplusClient. diff --git a/Alohi.Signplus/Http/ApiException.cs b/Alohi.Signplus/Http/ApiException.cs new file mode 100644 index 0000000..62e9e51 --- /dev/null +++ b/Alohi.Signplus/Http/ApiException.cs @@ -0,0 +1,16 @@ +namespace Alohi.Signplus.Http.Exceptions; + +public class ApiException : HttpRequestException +{ + public HttpResponseMessage Response { get; } + + public ApiException(HttpResponseMessage responseMessage) + : base( + $"Response status code does not indicate success: {(int)responseMessage.StatusCode} ({responseMessage.StatusCode}).", + null, + responseMessage.StatusCode + ) + { + Response = responseMessage; + } +} diff --git a/Signplus/Http/Environment.cs b/Alohi.Signplus/Http/Environment.cs similarity index 66% rename from Signplus/Http/Environment.cs rename to Alohi.Signplus/Http/Environment.cs index 6fd8901..0cc9094 100644 --- a/Signplus/Http/Environment.cs +++ b/Alohi.Signplus/Http/Environment.cs @@ -1,4 +1,6 @@ -namespace Signplus.Http; +namespace Alohi.Signplus.Http; + +using Alohi.Signplus.Http.Extensions; /// /// The environments available for the SDK. @@ -6,9 +8,11 @@ namespace Signplus.Http; public class Environment { internal Uri Uri { get; private set; } + internal string OriginalString { get; private set; } private Environment(string uri) { + OriginalString = uri; Uri = new Uri(uri); } diff --git a/Alohi.Signplus/Http/Extensions/HttpResponseMessageExtensions.cs b/Alohi.Signplus/Http/Extensions/HttpResponseMessageExtensions.cs new file mode 100644 index 0000000..12a406d --- /dev/null +++ b/Alohi.Signplus/Http/Extensions/HttpResponseMessageExtensions.cs @@ -0,0 +1,15 @@ +using Alohi.Signplus.Http.Exceptions; + +namespace Alohi.Signplus.Http.Extensions; + +public static class HttpResponseMessageExtensions +{ + public static HttpResponseMessage EnsureSuccessfulResponse(this HttpResponseMessage response) + { + if (!response.IsSuccessStatusCode) + { + throw new ApiException(response); + } + return response; + } +} diff --git a/Alohi.Signplus/Http/Extensions/MultipartFormDataContentExtensions.cs b/Alohi.Signplus/Http/Extensions/MultipartFormDataContentExtensions.cs new file mode 100644 index 0000000..adef575 --- /dev/null +++ b/Alohi.Signplus/Http/Extensions/MultipartFormDataContentExtensions.cs @@ -0,0 +1,59 @@ +using System.Net.Http.Headers; +using System.Reflection; +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Alohi.Signplus.Http.Extensions; + +public static class MultipartFormDataContentExtensions +{ + public static MultipartFormDataContent AddObject( + this MultipartFormDataContent formData, + object content, + JsonSerializerOptions? options + ) + { + foreach (var property in content.GetType().GetProperties()) + { + var value = property.GetValue(content); + var key = property.Name; + var mappedKey = GetPropertyName(property); + + if (value is byte[] fileBytes) + { + var fileContent = new ByteArrayContent(fileBytes); + fileContent.Headers.ContentType = new MediaTypeHeaderValue( + "application/octet-stream" + ); + + formData.Add(fileContent, mappedKey, mappedKey); + } + else if (value != null && !IsPrimitive(property.PropertyType)) + { + var nestedContent = new MultipartFormDataContent().AddObject(value, options); + formData.Add(nestedContent, mappedKey); + } + else + { + formData.Add(new StringContent(value?.ToString() ?? string.Empty), mappedKey); + } + } + + return formData; + } + + private static bool IsPrimitive(Type type) + { + return type.IsPrimitive || type.IsValueType || type == typeof(string); + } + + private static string GetPropertyName(PropertyInfo property) + { + var jsonPropertyAttribute = property.GetCustomAttribute(); + if (jsonPropertyAttribute != null) + { + return jsonPropertyAttribute.Name; + } + return property.Name; + } +} diff --git a/Alohi.Signplus/Http/Extensions/UriExtensions.cs b/Alohi.Signplus/Http/Extensions/UriExtensions.cs new file mode 100644 index 0000000..16ffc43 --- /dev/null +++ b/Alohi.Signplus/Http/Extensions/UriExtensions.cs @@ -0,0 +1,18 @@ +namespace Alohi.Signplus.Http.Extensions; + +public static class UriExtensions +{ + public static Uri EnsureTrailingSlash(this Uri uri) + { + if (uri == null) + throw new ArgumentNullException(nameof(uri)); + + var uriString = uri.ToString(); + if (!uriString.EndsWith("/")) + { + uriString += "/"; + } + + return new Uri(uriString); + } +} diff --git a/Signplus/Http/Handlers/RetryHandler.cs b/Alohi.Signplus/Http/Handlers/RetryHandler.cs similarity index 97% rename from Signplus/Http/Handlers/RetryHandler.cs rename to Alohi.Signplus/Http/Handlers/RetryHandler.cs index 03b77d6..c9c3323 100644 --- a/Signplus/Http/Handlers/RetryHandler.cs +++ b/Alohi.Signplus/Http/Handlers/RetryHandler.cs @@ -2,7 +2,7 @@ using Polly; using Polly.Retry; -namespace Signplus.Http.Handlers; +namespace Alohi.Signplus.Http.Handlers; /// /// A handler for retrying requests when they fail. diff --git a/Signplus/Http/Handlers/TokenHandler.cs b/Alohi.Signplus/Http/Handlers/TokenHandler.cs similarity index 95% rename from Signplus/Http/Handlers/TokenHandler.cs rename to Alohi.Signplus/Http/Handlers/TokenHandler.cs index 3daf700..4ba8af6 100644 --- a/Signplus/Http/Handlers/TokenHandler.cs +++ b/Alohi.Signplus/Http/Handlers/TokenHandler.cs @@ -1,4 +1,4 @@ -namespace Signplus.Http.Handlers; +namespace Alohi.Signplus.Http.Handlers; /// /// A handler for adding a token to the request. diff --git a/Signplus/Http/RequestBuilder.cs b/Alohi.Signplus/Http/RequestBuilder.cs similarity index 66% rename from Signplus/Http/RequestBuilder.cs rename to Alohi.Signplus/Http/RequestBuilder.cs index 8f47747..4ca4dc0 100644 --- a/Signplus/Http/RequestBuilder.cs +++ b/Alohi.Signplus/Http/RequestBuilder.cs @@ -1,8 +1,11 @@ +using System.Net.Http.Headers; using System.Net.Http.Json; +using System.Text; using System.Text.Json; -using Signplus.Http.Serialization; +using Alohi.Signplus.Http.Extensions; +using Alohi.Signplus.Http.Serialization; -namespace Signplus.Http; +namespace Alohi.Signplus.Http; /// /// A builder for creating instances with full support for serialization. @@ -108,9 +111,72 @@ public RequestBuilder SetOptionalHeader(string key, object? value, bool explode /// /// Sets the content of the request as JSON. /// - public RequestBuilder SetContentAsJson(object content, JsonSerializerOptions? options = null) + public RequestBuilder SetContentAsJson( + object content, + JsonSerializerOptions? options = null, + MediaTypeHeaderValue? mediaType = null + ) + { + _content = JsonContent.Create(content, mediaType, options); + return this; + } + + /// + /// Sets the content of the request as Text. + /// + public RequestBuilder SetContentAsText( + string content, + string mediaType, + Encoding? encoding = null + ) + { + encoding ??= Encoding.UTF8; + _content = new StringContent(content, encoding, mediaType); + return this; + } + + /// + /// Sets the content of the request as Binary. + /// + public RequestBuilder SetContentAsBinary(byte[] content, MediaTypeHeaderValue mediaType) + { + _content = new ByteArrayContent(content); + _content.Headers.ContentType = mediaType; + return this; + } + + /// + /// Sets the content of the request as application/x-www-form-urlencoded. + /// + public RequestBuilder SetUrlEncodedContent( + object content, + JsonSerializerOptions? options = null + ) + { + var jsonContent = JsonSerializer.Serialize(content, options); + var dictionary = JsonSerializer.Deserialize>( + jsonContent, + options + ); + + if (dictionary is null) + { + throw new ArgumentException("Invalid content for form-urlencoded content type."); + } + + _content = new FormUrlEncodedContent(dictionary); + return this; + } + + /// + /// Sets the content of the request as multipart/form-data. + /// + public RequestBuilder SetContentAsMultipartFormData( + object content, + JsonSerializerOptions? options = null + ) { - _content = JsonContent.Create(content, options: options); + _content = new MultipartFormDataContent().AddObject(content, options); return this; } diff --git a/Signplus/Http/Serialization/PathSerializationStyle.cs b/Alohi.Signplus/Http/Serialization/PathSerializationStyle.cs similarity index 58% rename from Signplus/Http/Serialization/PathSerializationStyle.cs rename to Alohi.Signplus/Http/Serialization/PathSerializationStyle.cs index 66e0218..cb567d9 100644 --- a/Signplus/Http/Serialization/PathSerializationStyle.cs +++ b/Alohi.Signplus/Http/Serialization/PathSerializationStyle.cs @@ -1,8 +1,8 @@ -namespace Signplus.Http.Serialization; +namespace Alohi.Signplus.Http.Serialization; public enum PathSerializationStyle { Simple = SerializationStyle.Simple, Label = SerializationStyle.Label, - Matrix = SerializationStyle.Matrix + Matrix = SerializationStyle.Matrix, } diff --git a/Signplus/Http/Serialization/QuerySerializationStyle.cs b/Alohi.Signplus/Http/Serialization/QuerySerializationStyle.cs similarity index 66% rename from Signplus/Http/Serialization/QuerySerializationStyle.cs rename to Alohi.Signplus/Http/Serialization/QuerySerializationStyle.cs index ab08194..11e6683 100644 --- a/Signplus/Http/Serialization/QuerySerializationStyle.cs +++ b/Alohi.Signplus/Http/Serialization/QuerySerializationStyle.cs @@ -1,9 +1,9 @@ -namespace Signplus.Http.Serialization; +namespace Alohi.Signplus.Http.Serialization; public enum QuerySerializationStyle { Form = SerializationStyle.Form, SpaceDelimited = SerializationStyle.SpaceDelimited, PipeDelimited = SerializationStyle.PipeDelimited, - DeepObject = SerializationStyle.DeepObject + DeepObject = SerializationStyle.DeepObject, } diff --git a/Signplus/Http/Serialization/SerializationStyle.cs b/Alohi.Signplus/Http/Serialization/SerializationStyle.cs similarity index 68% rename from Signplus/Http/Serialization/SerializationStyle.cs rename to Alohi.Signplus/Http/Serialization/SerializationStyle.cs index 1f85577..cb23e51 100644 --- a/Signplus/Http/Serialization/SerializationStyle.cs +++ b/Alohi.Signplus/Http/Serialization/SerializationStyle.cs @@ -1,4 +1,4 @@ -namespace Signplus.Http.Serialization; +namespace Alohi.Signplus.Http.Serialization; public enum SerializationStyle { @@ -8,5 +8,5 @@ public enum SerializationStyle Form = 3, SpaceDelimited = 4, PipeDelimited = 5, - DeepObject = 6 + DeepObject = 6, } diff --git a/Signplus/Http/Serialization/Serializer.cs b/Alohi.Signplus/Http/Serialization/Serializer.cs similarity index 91% rename from Signplus/Http/Serialization/Serializer.cs rename to Alohi.Signplus/Http/Serialization/Serializer.cs index 43fe29b..15a1df8 100644 --- a/Signplus/Http/Serialization/Serializer.cs +++ b/Alohi.Signplus/Http/Serialization/Serializer.cs @@ -2,7 +2,7 @@ using System.Net; using System.Text.Json.Serialization; -namespace Signplus.Http.Serialization; +namespace Alohi.Signplus.Http.Serialization; public static class Serializer { @@ -20,13 +20,11 @@ public static string Serialize( { return value switch { - null - or string - or bool - or int - or long - or double - => SerializePrimitive(key, value, style), + null or string or bool or int or long or double => SerializePrimitive( + key, + value, + style + ), IEnumerable e => SerializeEnumerable(key, e, style, explode), object o => SerializeObject(key, o, style, explode), }; @@ -40,9 +38,13 @@ private static string SerializeValue(object? value) string s => WebUtility.UrlEncode(s), bool b => b.ToString().ToLowerInvariant(), int or long or double => value.ToString(), - IEnumerable e - => SerializeEnumerable(string.Empty, e, SerializationStyle.Simple, false), - not null => SerializeObject(string.Empty, value, SerializationStyle.Simple, false) + IEnumerable e => SerializeEnumerable( + string.Empty, + e, + SerializationStyle.Simple, + false + ), + not null => SerializeObject(string.Empty, value, SerializationStyle.Simple, false), } ?? string.Empty; } @@ -53,7 +55,7 @@ private static string SerializePrimitive(string key, object? value, Serializatio SerializationStyle.Label => $".{SerializeValue(value)}", SerializationStyle.Matrix => $";{SerializeValue(value)}", SerializationStyle.Form => $"{key}={SerializeValue(value)}", - _ => SerializeValue(value) + _ => SerializeValue(value), }; } @@ -91,7 +93,7 @@ bool explode { SerializationStyle.SpaceDelimited => " ", SerializationStyle.PipeDelimited => "|", - _ => "," + _ => ",", }; return $"{key}={string.Join(separator, serializedValues)}"; diff --git a/Alohi.Signplus/Http/ValidationException.cs b/Alohi.Signplus/Http/ValidationException.cs new file mode 100644 index 0000000..0a642ae --- /dev/null +++ b/Alohi.Signplus/Http/ValidationException.cs @@ -0,0 +1,16 @@ +namespace Alohi.Signplus.Http.Exceptions; + +using System; +using FluentValidation.Results; + +public class ValidationException : Exception +{ + public List ValidationFailure { get; } + + public ValidationException(List validationFailure) + : base("Validation failed.") + { + ValidationFailure = + validationFailure ?? throw new ArgumentNullException(nameof(validationFailure)); + } +} diff --git a/Signplus/Json/ValueEnumJsonConverter.cs b/Alohi.Signplus/Json/ValueEnumJsonConverter.cs similarity index 96% rename from Signplus/Json/ValueEnumJsonConverter.cs rename to Alohi.Signplus/Json/ValueEnumJsonConverter.cs index 9f2c379..a165629 100644 --- a/Signplus/Json/ValueEnumJsonConverter.cs +++ b/Alohi.Signplus/Json/ValueEnumJsonConverter.cs @@ -1,8 +1,8 @@ using System.Text.Json; using System.Text.Json.Serialization; -using Signplus.Models; +using Alohi.Signplus.Models; -namespace Signplus.Json; +namespace Alohi.Signplus.Json; internal class ValueEnumJsonConverter : JsonConverter where TValueEnum : ValueEnum, new() diff --git a/Signplus/Json/ValueEnumJsonConverterFactory.cs b/Alohi.Signplus/Json/ValueEnumJsonConverterFactory.cs similarity index 95% rename from Signplus/Json/ValueEnumJsonConverterFactory.cs rename to Alohi.Signplus/Json/ValueEnumJsonConverterFactory.cs index a15d0f3..22601f3 100644 --- a/Signplus/Json/ValueEnumJsonConverterFactory.cs +++ b/Alohi.Signplus/Json/ValueEnumJsonConverterFactory.cs @@ -1,9 +1,9 @@ using System.Diagnostics; using System.Text.Json; using System.Text.Json.Serialization; -using Signplus.Models; +using Alohi.Signplus.Models; -namespace Signplus.Json; +namespace Alohi.Signplus.Json; internal class ValueEnumJsonConverterFactory : JsonConverterFactory { diff --git a/Signplus/Models/AddAnnotationRequest.cs b/Alohi.Signplus/Models/AddAnnotationRequest.cs similarity index 98% rename from Signplus/Models/AddAnnotationRequest.cs rename to Alohi.Signplus/Models/AddAnnotationRequest.cs index 9d682e7..19a7e55 100644 --- a/Signplus/Models/AddAnnotationRequest.cs +++ b/Alohi.Signplus/Models/AddAnnotationRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record AddAnnotationRequest( /// ID of the document diff --git a/Signplus/Models/AddEnvelopeDocumentRequest.cs b/Alohi.Signplus/Models/AddEnvelopeDocumentRequest.cs similarity index 81% rename from Signplus/Models/AddEnvelopeDocumentRequest.cs rename to Alohi.Signplus/Models/AddEnvelopeDocumentRequest.cs index 89e4eca..f8df193 100644 --- a/Signplus/Models/AddEnvelopeDocumentRequest.cs +++ b/Alohi.Signplus/Models/AddEnvelopeDocumentRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record AddEnvelopeDocumentRequest( /// File to upload in binary format @@ -8,5 +8,5 @@ public record AddEnvelopeDocumentRequest( JsonPropertyName("file"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull) ] - object? File = null + byte[]? File = null ); diff --git a/Signplus/Models/AddEnvelopeSigningStepsRequest.cs b/Alohi.Signplus/Models/AddEnvelopeSigningStepsRequest.cs similarity index 90% rename from Signplus/Models/AddEnvelopeSigningStepsRequest.cs rename to Alohi.Signplus/Models/AddEnvelopeSigningStepsRequest.cs index 70851cb..55831c4 100644 --- a/Signplus/Models/AddEnvelopeSigningStepsRequest.cs +++ b/Alohi.Signplus/Models/AddEnvelopeSigningStepsRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record AddEnvelopeSigningStepsRequest( /// List of signing steps diff --git a/Signplus/Models/AddTemplateDocumentRequest.cs b/Alohi.Signplus/Models/AddTemplateDocumentRequest.cs similarity index 77% rename from Signplus/Models/AddTemplateDocumentRequest.cs rename to Alohi.Signplus/Models/AddTemplateDocumentRequest.cs index b76615a..5dd53dc 100644 --- a/Signplus/Models/AddTemplateDocumentRequest.cs +++ b/Alohi.Signplus/Models/AddTemplateDocumentRequest.cs @@ -1,9 +1,9 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record AddTemplateDocumentRequest( /// File to upload in binary format [property: JsonPropertyName("file")] - object File + byte[] File ); diff --git a/Signplus/Models/AddTemplateSigningStepsRequest.cs b/Alohi.Signplus/Models/AddTemplateSigningStepsRequest.cs similarity index 87% rename from Signplus/Models/AddTemplateSigningStepsRequest.cs rename to Alohi.Signplus/Models/AddTemplateSigningStepsRequest.cs index d483a60..0354a19 100644 --- a/Signplus/Models/AddTemplateSigningStepsRequest.cs +++ b/Alohi.Signplus/Models/AddTemplateSigningStepsRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record AddTemplateSigningStepsRequest( /// List of signing steps diff --git a/Signplus/Models/Annotation.cs b/Alohi.Signplus/Models/Annotation.cs similarity index 99% rename from Signplus/Models/Annotation.cs rename to Alohi.Signplus/Models/Annotation.cs index 367f7c3..1b49b75 100644 --- a/Signplus/Models/Annotation.cs +++ b/Alohi.Signplus/Models/Annotation.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record Annotation( /// Unique identifier of the annotation diff --git a/Signplus/Models/AnnotationCheckbox.cs b/Alohi.Signplus/Models/AnnotationCheckbox.cs similarity index 94% rename from Signplus/Models/AnnotationCheckbox.cs rename to Alohi.Signplus/Models/AnnotationCheckbox.cs index 20d5a69..30ece7e 100644 --- a/Signplus/Models/AnnotationCheckbox.cs +++ b/Alohi.Signplus/Models/AnnotationCheckbox.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Checkbox annotation (null if annotation is not a checkbox) public record AnnotationCheckbox( diff --git a/Signplus/Models/AnnotationCheckboxStyle.cs b/Alohi.Signplus/Models/AnnotationCheckboxStyle.cs similarity index 92% rename from Signplus/Models/AnnotationCheckboxStyle.cs rename to Alohi.Signplus/Models/AnnotationCheckboxStyle.cs index 6a81a17..c3372cc 100644 --- a/Signplus/Models/AnnotationCheckboxStyle.cs +++ b/Alohi.Signplus/Models/AnnotationCheckboxStyle.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Style of the checkbox public record AnnotationCheckboxStyle : ValueEnum diff --git a/Signplus/Models/AnnotationDateTime.cs b/Alohi.Signplus/Models/AnnotationDateTime.cs similarity index 98% rename from Signplus/Models/AnnotationDateTime.cs rename to Alohi.Signplus/Models/AnnotationDateTime.cs index d4fdf2d..3267808 100644 --- a/Signplus/Models/AnnotationDateTime.cs +++ b/Alohi.Signplus/Models/AnnotationDateTime.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Date annotation (null if annotation is not a date) public record AnnotationDateTime( diff --git a/Signplus/Models/AnnotationDateTimeFormat.cs b/Alohi.Signplus/Models/AnnotationDateTimeFormat.cs similarity index 96% rename from Signplus/Models/AnnotationDateTimeFormat.cs rename to Alohi.Signplus/Models/AnnotationDateTimeFormat.cs index e33c2c2..168c5cb 100644 --- a/Signplus/Models/AnnotationDateTimeFormat.cs +++ b/Alohi.Signplus/Models/AnnotationDateTimeFormat.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Format of the date time (DMY_NUMERIC_SLASH is day/month/year with slashes, MDY_NUMERIC_SLASH is month/day/year with slashes, YMD_NUMERIC_SLASH is year/month/day with slashes, DMY_NUMERIC_DASH_SHORT is day/month/year with dashes, DMY_NUMERIC_DASH is day/month/year with dashes, YMD_NUMERIC_DASH is year/month/day with dashes, MDY_TEXT_DASH_SHORT is month/day/year with dashes, MDY_TEXT_SPACE_SHORT is month/day/year with spaces, MDY_TEXT_SPACE is month/day/year with spaces) public record AnnotationDateTimeFormat : ValueEnum diff --git a/Signplus/Models/AnnotationFont.cs b/Alohi.Signplus/Models/AnnotationFont.cs similarity index 95% rename from Signplus/Models/AnnotationFont.cs rename to Alohi.Signplus/Models/AnnotationFont.cs index cc827a0..000785d 100644 --- a/Signplus/Models/AnnotationFont.cs +++ b/Alohi.Signplus/Models/AnnotationFont.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record AnnotationFont( /// Font family of the text diff --git a/Signplus/Models/AnnotationFontFamily.cs b/Alohi.Signplus/Models/AnnotationFontFamily.cs similarity index 89% rename from Signplus/Models/AnnotationFontFamily.cs rename to Alohi.Signplus/Models/AnnotationFontFamily.cs index c7b1054..c49046a 100644 --- a/Signplus/Models/AnnotationFontFamily.cs +++ b/Alohi.Signplus/Models/AnnotationFontFamily.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Font family of the text public record AnnotationFontFamily : ValueEnum diff --git a/Signplus/Models/AnnotationInitials.cs b/Alohi.Signplus/Models/AnnotationInitials.cs similarity index 91% rename from Signplus/Models/AnnotationInitials.cs rename to Alohi.Signplus/Models/AnnotationInitials.cs index c7dab0a..f71f0eb 100644 --- a/Signplus/Models/AnnotationInitials.cs +++ b/Alohi.Signplus/Models/AnnotationInitials.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Initials annotation (null if annotation is not initials) public record AnnotationInitials( diff --git a/Signplus/Models/AnnotationSignature.cs b/Alohi.Signplus/Models/AnnotationSignature.cs similarity index 91% rename from Signplus/Models/AnnotationSignature.cs rename to Alohi.Signplus/Models/AnnotationSignature.cs index fae188c..d60c3d2 100644 --- a/Signplus/Models/AnnotationSignature.cs +++ b/Alohi.Signplus/Models/AnnotationSignature.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Signature annotation (null if annotation is not a signature) public record AnnotationSignature( diff --git a/Signplus/Models/AnnotationText.cs b/Alohi.Signplus/Models/AnnotationText.cs similarity index 97% rename from Signplus/Models/AnnotationText.cs rename to Alohi.Signplus/Models/AnnotationText.cs index 24674cf..034a6f0 100644 --- a/Signplus/Models/AnnotationText.cs +++ b/Alohi.Signplus/Models/AnnotationText.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Text annotation (null if annotation is not a text) public record AnnotationText( diff --git a/Signplus/Models/AnnotationType.cs b/Alohi.Signplus/Models/AnnotationType.cs similarity index 90% rename from Signplus/Models/AnnotationType.cs rename to Alohi.Signplus/Models/AnnotationType.cs index 9a8a29d..6d783d7 100644 --- a/Signplus/Models/AnnotationType.cs +++ b/Alohi.Signplus/Models/AnnotationType.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Type of the annotation public record AnnotationType : ValueEnum diff --git a/Signplus/Models/CreateEnvelopeFromTemplateRequest.cs b/Alohi.Signplus/Models/CreateEnvelopeFromTemplateRequest.cs similarity index 95% rename from Signplus/Models/CreateEnvelopeFromTemplateRequest.cs rename to Alohi.Signplus/Models/CreateEnvelopeFromTemplateRequest.cs index 6646de3..20e11c9 100644 --- a/Signplus/Models/CreateEnvelopeFromTemplateRequest.cs +++ b/Alohi.Signplus/Models/CreateEnvelopeFromTemplateRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record CreateEnvelopeFromTemplateRequest( /// Name of the envelope diff --git a/Signplus/Models/CreateEnvelopeRequest.cs b/Alohi.Signplus/Models/CreateEnvelopeRequest.cs similarity index 97% rename from Signplus/Models/CreateEnvelopeRequest.cs rename to Alohi.Signplus/Models/CreateEnvelopeRequest.cs index 88e5859..7332cfa 100644 --- a/Signplus/Models/CreateEnvelopeRequest.cs +++ b/Alohi.Signplus/Models/CreateEnvelopeRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record CreateEnvelopeRequest( /// Name of the envelope diff --git a/Signplus/Models/CreateTemplateRequest.cs b/Alohi.Signplus/Models/CreateTemplateRequest.cs similarity index 79% rename from Signplus/Models/CreateTemplateRequest.cs rename to Alohi.Signplus/Models/CreateTemplateRequest.cs index 6895c23..95f7f6e 100644 --- a/Signplus/Models/CreateTemplateRequest.cs +++ b/Alohi.Signplus/Models/CreateTemplateRequest.cs @@ -1,5 +1,5 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record CreateTemplateRequest([property: JsonPropertyName("name")] string Name); diff --git a/Signplus/Models/CreateWebhookRequest.cs b/Alohi.Signplus/Models/CreateWebhookRequest.cs similarity index 90% rename from Signplus/Models/CreateWebhookRequest.cs rename to Alohi.Signplus/Models/CreateWebhookRequest.cs index 4371af4..9649835 100644 --- a/Signplus/Models/CreateWebhookRequest.cs +++ b/Alohi.Signplus/Models/CreateWebhookRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record CreateWebhookRequest( /// Event of the webhook diff --git a/Signplus/Models/Document.cs b/Alohi.Signplus/Models/Document.cs similarity index 97% rename from Signplus/Models/Document.cs rename to Alohi.Signplus/Models/Document.cs index 128de2f..79bd721 100644 --- a/Signplus/Models/Document.cs +++ b/Alohi.Signplus/Models/Document.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record Document( /// Unique identifier of the document diff --git a/Signplus/Models/DynamicField.cs b/Alohi.Signplus/Models/DynamicField.cs similarity index 93% rename from Signplus/Models/DynamicField.cs rename to Alohi.Signplus/Models/DynamicField.cs index 7849ba6..363d1a9 100644 --- a/Signplus/Models/DynamicField.cs +++ b/Alohi.Signplus/Models/DynamicField.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record DynamicField( /// Name of the dynamic field diff --git a/Signplus/Models/Envelope.cs b/Alohi.Signplus/Models/Envelope.cs similarity index 99% rename from Signplus/Models/Envelope.cs rename to Alohi.Signplus/Models/Envelope.cs index 74e334f..7a0d29e 100644 --- a/Signplus/Models/Envelope.cs +++ b/Alohi.Signplus/Models/Envelope.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record Envelope( /// Unique identifier of the envelope diff --git a/Signplus/Models/EnvelopeFlowType.cs b/Alohi.Signplus/Models/EnvelopeFlowType.cs similarity index 89% rename from Signplus/Models/EnvelopeFlowType.cs rename to Alohi.Signplus/Models/EnvelopeFlowType.cs index c49ffae..84d3518 100644 --- a/Signplus/Models/EnvelopeFlowType.cs +++ b/Alohi.Signplus/Models/EnvelopeFlowType.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Flow type of the envelope (REQUEST_SIGNATURE is a request for signature, SIGN_MYSELF is a self-signing flow) public record EnvelopeFlowType : ValueEnum diff --git a/Signplus/Models/EnvelopeLegalityLevel.cs b/Alohi.Signplus/Models/EnvelopeLegalityLevel.cs similarity index 91% rename from Signplus/Models/EnvelopeLegalityLevel.cs rename to Alohi.Signplus/Models/EnvelopeLegalityLevel.cs index f93ac7e..6b302b7 100644 --- a/Signplus/Models/EnvelopeLegalityLevel.cs +++ b/Alohi.Signplus/Models/EnvelopeLegalityLevel.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Legal level of the envelope (SES is Simple Electronic Signature, QES_EIDAS is Qualified Electronic Signature, QES_ZERTES is Qualified Electronic Signature with Zertes) public record EnvelopeLegalityLevel : ValueEnum diff --git a/Signplus/Models/EnvelopeNotification.cs b/Alohi.Signplus/Models/EnvelopeNotification.cs similarity index 95% rename from Signplus/Models/EnvelopeNotification.cs rename to Alohi.Signplus/Models/EnvelopeNotification.cs index c9efb6e..8581699 100644 --- a/Signplus/Models/EnvelopeNotification.cs +++ b/Alohi.Signplus/Models/EnvelopeNotification.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record EnvelopeNotification( /// Subject of the notification diff --git a/Signplus/Models/EnvelopeOrderField.cs b/Alohi.Signplus/Models/EnvelopeOrderField.cs similarity index 91% rename from Signplus/Models/EnvelopeOrderField.cs rename to Alohi.Signplus/Models/EnvelopeOrderField.cs index 73ee5c1..a476448 100644 --- a/Signplus/Models/EnvelopeOrderField.cs +++ b/Alohi.Signplus/Models/EnvelopeOrderField.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Field to order envelopes by public record EnvelopeOrderField : ValueEnum diff --git a/Signplus/Models/EnvelopeStatus.cs b/Alohi.Signplus/Models/EnvelopeStatus.cs similarity index 91% rename from Signplus/Models/EnvelopeStatus.cs rename to Alohi.Signplus/Models/EnvelopeStatus.cs index a6789a2..fa3493b 100644 --- a/Signplus/Models/EnvelopeStatus.cs +++ b/Alohi.Signplus/Models/EnvelopeStatus.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Status of the envelope public record EnvelopeStatus : ValueEnum diff --git a/Signplus/Models/ListEnvelopeDocumentAnnotationsResponse.cs b/Alohi.Signplus/Models/ListEnvelopeDocumentAnnotationsResponse.cs similarity index 89% rename from Signplus/Models/ListEnvelopeDocumentAnnotationsResponse.cs rename to Alohi.Signplus/Models/ListEnvelopeDocumentAnnotationsResponse.cs index 83e605b..605ff08 100644 --- a/Signplus/Models/ListEnvelopeDocumentAnnotationsResponse.cs +++ b/Alohi.Signplus/Models/ListEnvelopeDocumentAnnotationsResponse.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record ListEnvelopeDocumentAnnotationsResponse( [property: diff --git a/Signplus/Models/ListEnvelopeDocumentsResponse.cs b/Alohi.Signplus/Models/ListEnvelopeDocumentsResponse.cs similarity index 88% rename from Signplus/Models/ListEnvelopeDocumentsResponse.cs rename to Alohi.Signplus/Models/ListEnvelopeDocumentsResponse.cs index ae82fba..bd88d90 100644 --- a/Signplus/Models/ListEnvelopeDocumentsResponse.cs +++ b/Alohi.Signplus/Models/ListEnvelopeDocumentsResponse.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record ListEnvelopeDocumentsResponse( [property: diff --git a/Signplus/Models/ListEnvelopesRequest.cs b/Alohi.Signplus/Models/ListEnvelopesRequest.cs similarity index 99% rename from Signplus/Models/ListEnvelopesRequest.cs rename to Alohi.Signplus/Models/ListEnvelopesRequest.cs index df35d63..428262b 100644 --- a/Signplus/Models/ListEnvelopesRequest.cs +++ b/Alohi.Signplus/Models/ListEnvelopesRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record ListEnvelopesRequest( /// Name of the envelope diff --git a/Signplus/Models/ListEnvelopesResponse.cs b/Alohi.Signplus/Models/ListEnvelopesResponse.cs similarity index 95% rename from Signplus/Models/ListEnvelopesResponse.cs rename to Alohi.Signplus/Models/ListEnvelopesResponse.cs index d0a2a59..aa50cf4 100644 --- a/Signplus/Models/ListEnvelopesResponse.cs +++ b/Alohi.Signplus/Models/ListEnvelopesResponse.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record ListEnvelopesResponse( /// Whether there is a next page diff --git a/Signplus/Models/ListTemplateAnnotationsResponse.cs b/Alohi.Signplus/Models/ListTemplateAnnotationsResponse.cs similarity index 88% rename from Signplus/Models/ListTemplateAnnotationsResponse.cs rename to Alohi.Signplus/Models/ListTemplateAnnotationsResponse.cs index b8bb7c9..5becd7a 100644 --- a/Signplus/Models/ListTemplateAnnotationsResponse.cs +++ b/Alohi.Signplus/Models/ListTemplateAnnotationsResponse.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record ListTemplateAnnotationsResponse( [property: diff --git a/Signplus/Models/ListTemplateDocumentAnnotationsResponse.cs b/Alohi.Signplus/Models/ListTemplateDocumentAnnotationsResponse.cs similarity index 89% rename from Signplus/Models/ListTemplateDocumentAnnotationsResponse.cs rename to Alohi.Signplus/Models/ListTemplateDocumentAnnotationsResponse.cs index d57b4f9..ca47dd2 100644 --- a/Signplus/Models/ListTemplateDocumentAnnotationsResponse.cs +++ b/Alohi.Signplus/Models/ListTemplateDocumentAnnotationsResponse.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record ListTemplateDocumentAnnotationsResponse( [property: diff --git a/Signplus/Models/ListTemplateDocumentsResponse.cs b/Alohi.Signplus/Models/ListTemplateDocumentsResponse.cs similarity index 88% rename from Signplus/Models/ListTemplateDocumentsResponse.cs rename to Alohi.Signplus/Models/ListTemplateDocumentsResponse.cs index 1e15f3d..c34493d 100644 --- a/Signplus/Models/ListTemplateDocumentsResponse.cs +++ b/Alohi.Signplus/Models/ListTemplateDocumentsResponse.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record ListTemplateDocumentsResponse( [property: diff --git a/Signplus/Models/ListTemplatesRequest.cs b/Alohi.Signplus/Models/ListTemplatesRequest.cs similarity index 98% rename from Signplus/Models/ListTemplatesRequest.cs rename to Alohi.Signplus/Models/ListTemplatesRequest.cs index 618fd4f..46455bb 100644 --- a/Signplus/Models/ListTemplatesRequest.cs +++ b/Alohi.Signplus/Models/ListTemplatesRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record ListTemplatesRequest( /// Name of the template diff --git a/Signplus/Models/ListTemplatesResponse.cs b/Alohi.Signplus/Models/ListTemplatesResponse.cs similarity index 95% rename from Signplus/Models/ListTemplatesResponse.cs rename to Alohi.Signplus/Models/ListTemplatesResponse.cs index 0b36499..397b79a 100644 --- a/Signplus/Models/ListTemplatesResponse.cs +++ b/Alohi.Signplus/Models/ListTemplatesResponse.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record ListTemplatesResponse( /// Whether there is a next page diff --git a/Signplus/Models/ListWebhooksRequest.cs b/Alohi.Signplus/Models/ListWebhooksRequest.cs similarity index 93% rename from Signplus/Models/ListWebhooksRequest.cs rename to Alohi.Signplus/Models/ListWebhooksRequest.cs index a3752bd..25be56d 100644 --- a/Signplus/Models/ListWebhooksRequest.cs +++ b/Alohi.Signplus/Models/ListWebhooksRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record ListWebhooksRequest( /// ID of the webhook diff --git a/Signplus/Models/ListWebhooksResponse.cs b/Alohi.Signplus/Models/ListWebhooksResponse.cs similarity index 88% rename from Signplus/Models/ListWebhooksResponse.cs rename to Alohi.Signplus/Models/ListWebhooksResponse.cs index c3d1ada..d1a99ff 100644 --- a/Signplus/Models/ListWebhooksResponse.cs +++ b/Alohi.Signplus/Models/ListWebhooksResponse.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record ListWebhooksResponse( [property: diff --git a/Signplus/Models/Page.cs b/Alohi.Signplus/Models/Page.cs similarity index 93% rename from Signplus/Models/Page.cs rename to Alohi.Signplus/Models/Page.cs index 370dd83..ed86a3c 100644 --- a/Signplus/Models/Page.cs +++ b/Alohi.Signplus/Models/Page.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record Page( /// Width of the page in pixels diff --git a/Signplus/Models/Recipient.cs b/Alohi.Signplus/Models/Recipient.cs similarity index 97% rename from Signplus/Models/Recipient.cs rename to Alohi.Signplus/Models/Recipient.cs index 187d602..ea4f86a 100644 --- a/Signplus/Models/Recipient.cs +++ b/Alohi.Signplus/Models/Recipient.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record Recipient( /// Name of the recipient diff --git a/Signplus/Models/RecipientRole.cs b/Alohi.Signplus/Models/RecipientRole.cs similarity index 91% rename from Signplus/Models/RecipientRole.cs rename to Alohi.Signplus/Models/RecipientRole.cs index 68d4273..920f5df 100644 --- a/Signplus/Models/RecipientRole.cs +++ b/Alohi.Signplus/Models/RecipientRole.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Role of the recipient (SIGNER signs the document, RECEIVES_COPY receives a copy of the document, IN_PERSON_SIGNER signs the document in person, SENDER sends the document) public record RecipientRole : ValueEnum diff --git a/Signplus/Models/RecipientVerification.cs b/Alohi.Signplus/Models/RecipientVerification.cs similarity index 94% rename from Signplus/Models/RecipientVerification.cs rename to Alohi.Signplus/Models/RecipientVerification.cs index 1d49bd6..dbd344c 100644 --- a/Signplus/Models/RecipientVerification.cs +++ b/Alohi.Signplus/Models/RecipientVerification.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record RecipientVerification( /// Type of signature verification (SMS sends a code via SMS, PASSCODE requires a code to be entered) diff --git a/Signplus/Models/RecipientVerificationType.cs b/Alohi.Signplus/Models/RecipientVerificationType.cs similarity index 89% rename from Signplus/Models/RecipientVerificationType.cs rename to Alohi.Signplus/Models/RecipientVerificationType.cs index 23422dd..32417e6 100644 --- a/Signplus/Models/RecipientVerificationType.cs +++ b/Alohi.Signplus/Models/RecipientVerificationType.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Type of signature verification (SMS sends a code via SMS, PASSCODE requires a code to be entered) public record RecipientVerificationType : ValueEnum diff --git a/Signplus/Models/RenameEnvelopeRequest.cs b/Alohi.Signplus/Models/RenameEnvelopeRequest.cs similarity index 89% rename from Signplus/Models/RenameEnvelopeRequest.cs rename to Alohi.Signplus/Models/RenameEnvelopeRequest.cs index 2633d73..a50428e 100644 --- a/Signplus/Models/RenameEnvelopeRequest.cs +++ b/Alohi.Signplus/Models/RenameEnvelopeRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record RenameEnvelopeRequest( /// Name of the envelope diff --git a/Signplus/Models/RenameTemplateRequest.cs b/Alohi.Signplus/Models/RenameTemplateRequest.cs similarity index 84% rename from Signplus/Models/RenameTemplateRequest.cs rename to Alohi.Signplus/Models/RenameTemplateRequest.cs index 98c529d..8e56e8c 100644 --- a/Signplus/Models/RenameTemplateRequest.cs +++ b/Alohi.Signplus/Models/RenameTemplateRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record RenameTemplateRequest( /// Name of the template diff --git a/Signplus/Models/SetEnvelopeCommentRequest.cs b/Alohi.Signplus/Models/SetEnvelopeCommentRequest.cs similarity index 85% rename from Signplus/Models/SetEnvelopeCommentRequest.cs rename to Alohi.Signplus/Models/SetEnvelopeCommentRequest.cs index 7568210..7479a13 100644 --- a/Signplus/Models/SetEnvelopeCommentRequest.cs +++ b/Alohi.Signplus/Models/SetEnvelopeCommentRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record SetEnvelopeCommentRequest( /// Comment for the envelope diff --git a/Signplus/Models/SetEnvelopeDynamicFieldsRequest.cs b/Alohi.Signplus/Models/SetEnvelopeDynamicFieldsRequest.cs similarity index 87% rename from Signplus/Models/SetEnvelopeDynamicFieldsRequest.cs rename to Alohi.Signplus/Models/SetEnvelopeDynamicFieldsRequest.cs index 9d8e021..c108a55 100644 --- a/Signplus/Models/SetEnvelopeDynamicFieldsRequest.cs +++ b/Alohi.Signplus/Models/SetEnvelopeDynamicFieldsRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record SetEnvelopeDynamicFieldsRequest( /// List of dynamic fields diff --git a/Signplus/Models/SetEnvelopeExpirationRequest.cs b/Alohi.Signplus/Models/SetEnvelopeExpirationRequest.cs similarity index 86% rename from Signplus/Models/SetEnvelopeExpirationRequest.cs rename to Alohi.Signplus/Models/SetEnvelopeExpirationRequest.cs index e4e3073..a0c5f07 100644 --- a/Signplus/Models/SetEnvelopeExpirationRequest.cs +++ b/Alohi.Signplus/Models/SetEnvelopeExpirationRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record SetEnvelopeExpirationRequest( /// Unix timestamp of the expiration date diff --git a/Signplus/Models/SetEnvelopeLegalityLevelRequest.cs b/Alohi.Signplus/Models/SetEnvelopeLegalityLevelRequest.cs similarity index 93% rename from Signplus/Models/SetEnvelopeLegalityLevelRequest.cs rename to Alohi.Signplus/Models/SetEnvelopeLegalityLevelRequest.cs index 1a163d0..61395fd 100644 --- a/Signplus/Models/SetEnvelopeLegalityLevelRequest.cs +++ b/Alohi.Signplus/Models/SetEnvelopeLegalityLevelRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record SetEnvelopeLegalityLevelRequest( /// Legal level of the envelope (SES is Simple Electronic Signature, QES_EIDAS is Qualified Electronic Signature, QES_ZERTES is Qualified Electronic Signature with Zertes) diff --git a/Signplus/Models/SetTemplateCommentRequest.cs b/Alohi.Signplus/Models/SetTemplateCommentRequest.cs similarity index 85% rename from Signplus/Models/SetTemplateCommentRequest.cs rename to Alohi.Signplus/Models/SetTemplateCommentRequest.cs index cc568e7..5857588 100644 --- a/Signplus/Models/SetTemplateCommentRequest.cs +++ b/Alohi.Signplus/Models/SetTemplateCommentRequest.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record SetTemplateCommentRequest( /// Comment for the template diff --git a/Signplus/Models/SigningStep.cs b/Alohi.Signplus/Models/SigningStep.cs similarity index 89% rename from Signplus/Models/SigningStep.cs rename to Alohi.Signplus/Models/SigningStep.cs index 66f1e60..0dddd7e 100644 --- a/Signplus/Models/SigningStep.cs +++ b/Alohi.Signplus/Models/SigningStep.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record SigningStep( /// List of recipients diff --git a/Signplus/Models/Template.cs b/Alohi.Signplus/Models/Template.cs similarity index 98% rename from Signplus/Models/Template.cs rename to Alohi.Signplus/Models/Template.cs index 64c111c..6d1f5ff 100644 --- a/Signplus/Models/Template.cs +++ b/Alohi.Signplus/Models/Template.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record Template( /// Unique identifier of the template diff --git a/Signplus/Models/TemplateOrderField.cs b/Alohi.Signplus/Models/TemplateOrderField.cs similarity index 91% rename from Signplus/Models/TemplateOrderField.cs rename to Alohi.Signplus/Models/TemplateOrderField.cs index 4fa7150..04a981d 100644 --- a/Signplus/Models/TemplateOrderField.cs +++ b/Alohi.Signplus/Models/TemplateOrderField.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Field to order templates by public record TemplateOrderField : ValueEnum diff --git a/Signplus/Models/TemplateRecipient.cs b/Alohi.Signplus/Models/TemplateRecipient.cs similarity index 97% rename from Signplus/Models/TemplateRecipient.cs rename to Alohi.Signplus/Models/TemplateRecipient.cs index 13e5e1b..ef73175 100644 --- a/Signplus/Models/TemplateRecipient.cs +++ b/Alohi.Signplus/Models/TemplateRecipient.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record TemplateRecipient( /// Unique identifier of the recipient diff --git a/Signplus/Models/TemplateRecipientRole.cs b/Alohi.Signplus/Models/TemplateRecipientRole.cs similarity index 91% rename from Signplus/Models/TemplateRecipientRole.cs rename to Alohi.Signplus/Models/TemplateRecipientRole.cs index d789e0c..c1b5cb8 100644 --- a/Signplus/Models/TemplateRecipientRole.cs +++ b/Alohi.Signplus/Models/TemplateRecipientRole.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Role of the recipient (SIGNER signs the document, RECEIVES_COPY receives a copy of the document, IN_PERSON_SIGNER signs the document in person, SENDER sends the document) public record TemplateRecipientRole : ValueEnum diff --git a/Signplus/Models/TemplateSigningStep.cs b/Alohi.Signplus/Models/TemplateSigningStep.cs similarity index 90% rename from Signplus/Models/TemplateSigningStep.cs rename to Alohi.Signplus/Models/TemplateSigningStep.cs index 5c32b03..0e46df5 100644 --- a/Signplus/Models/TemplateSigningStep.cs +++ b/Alohi.Signplus/Models/TemplateSigningStep.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record TemplateSigningStep( /// List of recipients diff --git a/Signplus/Models/ValueEnum.cs b/Alohi.Signplus/Models/ValueEnum.cs similarity index 90% rename from Signplus/Models/ValueEnum.cs rename to Alohi.Signplus/Models/ValueEnum.cs index 76672c7..471ee0a 100644 --- a/Signplus/Models/ValueEnum.cs +++ b/Alohi.Signplus/Models/ValueEnum.cs @@ -1,4 +1,4 @@ -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// /// Emulates an enum for a given type. diff --git a/Signplus/Models/Webhook.cs b/Alohi.Signplus/Models/Webhook.cs similarity index 95% rename from Signplus/Models/Webhook.cs rename to Alohi.Signplus/Models/Webhook.cs index 383c562..6f56fe7 100644 --- a/Signplus/Models/Webhook.cs +++ b/Alohi.Signplus/Models/Webhook.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; public record Webhook( /// Unique identifier of the webhook diff --git a/Signplus/Models/WebhookEvent.cs b/Alohi.Signplus/Models/WebhookEvent.cs similarity index 90% rename from Signplus/Models/WebhookEvent.cs rename to Alohi.Signplus/Models/WebhookEvent.cs index 65ae7a7..0a7e03e 100644 --- a/Signplus/Models/WebhookEvent.cs +++ b/Alohi.Signplus/Models/WebhookEvent.cs @@ -1,7 +1,7 @@ using System.Text.Json.Serialization; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Models; +namespace Alohi.Signplus.Models; /// Event of the webhook public record WebhookEvent : ValueEnum diff --git a/Signplus/Services/BaseService.cs b/Alohi.Signplus/Services/BaseService.cs similarity index 87% rename from Signplus/Services/BaseService.cs rename to Alohi.Signplus/Services/BaseService.cs index 9bf0795..d10e788 100644 --- a/Signplus/Services/BaseService.cs +++ b/Alohi.Signplus/Services/BaseService.cs @@ -1,7 +1,7 @@ using System.Text.Json; -using Signplus.Json; +using Alohi.Signplus.Json; -namespace Signplus.Services; +namespace Alohi.Signplus.Services; public class BaseService { @@ -13,7 +13,7 @@ public BaseService(HttpClient httpClient) _httpClient = httpClient; _jsonSerializerOptions = new JsonSerializerOptions(JsonSerializerDefaults.Web) { - Converters = { new ValueEnumJsonConverterFactory() } + Converters = { new ValueEnumJsonConverterFactory() }, }; } } diff --git a/Signplus/Services/SignplusService.cs b/Alohi.Signplus/Services/SignplusService.cs similarity index 58% rename from Signplus/Services/SignplusService.cs rename to Alohi.Signplus/Services/SignplusService.cs index 3ec4e98..c823d82 100644 --- a/Signplus/Services/SignplusService.cs +++ b/Alohi.Signplus/Services/SignplusService.cs @@ -1,9 +1,14 @@ +using System.Net.Http.Headers; using System.Net.Http.Json; -using Signplus.Http; -using Signplus.Http.Serialization; -using Signplus.Models; +using Alohi.Signplus.Http; +using Alohi.Signplus.Http.Exceptions; +using Alohi.Signplus.Http.Extensions; +using Alohi.Signplus.Http.Serialization; +using Alohi.Signplus.Models; +using Alohi.Signplus.Validation; +using Alohi.Signplus.Validation.Extensions; -namespace Signplus.Services; +namespace Alohi.Signplus.Services; public class SignplusService : BaseService { @@ -17,6 +22,13 @@ public async Task CreateEnvelopeAsync( ) { ArgumentNullException.ThrowIfNull(input, nameof(input)); + var validationResults = new List { }; + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Post, "envelope") .SetContentAsJson(input, _jsonSerializerOptions) @@ -25,9 +37,9 @@ public async Task CreateEnvelopeAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -41,6 +53,20 @@ public async Task CreateEnvelopeFromTemplateAsync( { ArgumentNullException.ThrowIfNull(input, nameof(input)); ArgumentNullException.ThrowIfNull(templateId, nameof(templateId)); + var validationResults = new List { }; + var templateIdValidationResult = new StringValidator().ValidateRequired( + (string?)templateId + ); + if (templateIdValidationResult != null) + { + validationResults.Add(templateIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Post, "envelope/from_template/{template_id}") .SetPathParameter("template_id", templateId) @@ -50,9 +76,9 @@ public async Task CreateEnvelopeFromTemplateAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -64,6 +90,13 @@ public async Task ListEnvelopesAsync( ) { ArgumentNullException.ThrowIfNull(input, nameof(input)); + var validationResults = new List { }; + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Post, "envelopes") .SetContentAsJson(input, _jsonSerializerOptions) @@ -72,9 +105,9 @@ public async Task ListEnvelopesAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync( _jsonSerializerOptions, cancellationToken @@ -89,6 +122,20 @@ public async Task GetEnvelopeAsync( ) { ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Get, "envelope/{envelope_id}") .SetPathParameter("envelope_id", envelopeId) @@ -97,9 +144,9 @@ public async Task GetEnvelopeAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -111,6 +158,20 @@ public async Task DeleteEnvelopeAsync( ) { ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Delete, "envelope/{envelope_id}") .SetPathParameter("envelope_id", envelopeId) @@ -119,7 +180,8 @@ public async Task DeleteEnvelopeAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); + + response.EnsureSuccessfulResponse(); } /// Get envelope document @@ -131,6 +193,28 @@ public async Task GetEnvelopeDocumentAsync( { ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); ArgumentNullException.ThrowIfNull(documentId, nameof(documentId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + ; + var documentIdValidationResult = new StringValidator().ValidateRequired( + (string?)documentId + ); + if (documentIdValidationResult != null) + { + validationResults.Add(documentIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder( HttpMethod.Get, @@ -143,9 +227,9 @@ public async Task GetEnvelopeDocumentAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -157,6 +241,20 @@ public async Task GetEnvelopeDocumentsAsync( ) { ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Get, "envelope/{envelope_id}/documents") .SetPathParameter("envelope_id", envelopeId) @@ -165,9 +263,9 @@ public async Task GetEnvelopeDocumentsAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync( _jsonSerializerOptions, cancellationToken @@ -184,18 +282,32 @@ public async Task AddEnvelopeDocumentAsync( { ArgumentNullException.ThrowIfNull(input, nameof(input)); ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Post, "envelope/{envelope_id}/document") .SetPathParameter("envelope_id", envelopeId) - .SetContentAsJson(input, _jsonSerializerOptions) + .SetContentAsMultipartFormData(input, _jsonSerializerOptions) .Build(); var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -209,6 +321,20 @@ public async Task SetEnvelopeDynamicFieldsAsync( { ArgumentNullException.ThrowIfNull(input, nameof(input)); ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Put, "envelope/{envelope_id}/dynamic_fields") .SetPathParameter("envelope_id", envelopeId) @@ -218,9 +344,9 @@ public async Task SetEnvelopeDynamicFieldsAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -234,6 +360,20 @@ public async Task AddEnvelopeSigningStepsAsync( { ArgumentNullException.ThrowIfNull(input, nameof(input)); ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Post, "envelope/{envelope_id}/signing_steps") .SetPathParameter("envelope_id", envelopeId) @@ -243,9 +383,9 @@ public async Task AddEnvelopeSigningStepsAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -257,6 +397,20 @@ public async Task SendEnvelopeAsync( ) { ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Post, "envelope/{envelope_id}/send") .SetPathParameter("envelope_id", envelopeId) @@ -265,9 +419,9 @@ public async Task SendEnvelopeAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -279,6 +433,20 @@ public async Task DuplicateEnvelopeAsync( ) { ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Post, "envelope/{envelope_id}/duplicate") .SetPathParameter("envelope_id", envelopeId) @@ -287,9 +455,9 @@ public async Task DuplicateEnvelopeAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -301,6 +469,20 @@ public async Task VoidEnvelopeAsync( ) { ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Put, "envelope/{envelope_id}/void") .SetPathParameter("envelope_id", envelopeId) @@ -309,9 +491,9 @@ public async Task VoidEnvelopeAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -325,6 +507,20 @@ public async Task RenameEnvelopeAsync( { ArgumentNullException.ThrowIfNull(input, nameof(input)); ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Put, "envelope/{envelope_id}/rename") .SetPathParameter("envelope_id", envelopeId) @@ -334,9 +530,9 @@ public async Task RenameEnvelopeAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -350,6 +546,20 @@ public async Task SetEnvelopeCommentAsync( { ArgumentNullException.ThrowIfNull(input, nameof(input)); ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Put, "envelope/{envelope_id}/set_comment") .SetPathParameter("envelope_id", envelopeId) @@ -359,9 +569,9 @@ public async Task SetEnvelopeCommentAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -375,6 +585,20 @@ public async Task SetEnvelopeNotificationAsync( { ArgumentNullException.ThrowIfNull(input, nameof(input)); ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Put, "envelope/{envelope_id}/set_notification") .SetPathParameter("envelope_id", envelopeId) @@ -384,9 +608,9 @@ public async Task SetEnvelopeNotificationAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -400,6 +624,20 @@ public async Task SetEnvelopeExpirationDateAsync( { ArgumentNullException.ThrowIfNull(input, nameof(input)); ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder( HttpMethod.Put, @@ -412,9 +650,9 @@ public async Task SetEnvelopeExpirationDateAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -428,6 +666,20 @@ public async Task SetEnvelopeLegalityLevelAsync( { ArgumentNullException.ThrowIfNull(input, nameof(input)); ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder( HttpMethod.Put, @@ -440,9 +692,9 @@ public async Task SetEnvelopeLegalityLevelAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -455,6 +707,20 @@ public async Task> GetEnvelopeAnnotationsAsync( ) { ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Get, "envelope/{envelope_id}/annotations") .SetPathParameter("envelope_id", envelopeId) @@ -463,9 +729,9 @@ public async Task> GetEnvelopeAnnotationsAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync>( _jsonSerializerOptions, cancellationToken @@ -484,6 +750,28 @@ public async Task GetEnvelopeDocumentAn { ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); ArgumentNullException.ThrowIfNull(documentId, nameof(documentId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + ; + var documentIdValidationResult = new StringValidator().ValidateRequired( + (string?)documentId + ); + if (documentIdValidationResult != null) + { + validationResults.Add(documentIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder( HttpMethod.Get, @@ -496,9 +784,9 @@ public async Task GetEnvelopeDocumentAn var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync( _jsonSerializerOptions, cancellationToken @@ -516,6 +804,20 @@ public async Task AddEnvelopeAnnotationAsync( { ArgumentNullException.ThrowIfNull(input, nameof(input)); ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder(HttpMethod.Post, "envelope/{envelope_id}/annotation") .SetPathParameter("envelope_id", envelopeId) @@ -525,9 +827,9 @@ public async Task AddEnvelopeAnnotationAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); return await response + .EnsureSuccessfulResponse() .Content.ReadFromJsonAsync(_jsonSerializerOptions, cancellationToken) .ConfigureAwait(false) ?? throw new Exception("Failed to deserialize response."); } @@ -543,6 +845,28 @@ public async Task DeleteEnvelopeAnnotationAsync( { ArgumentNullException.ThrowIfNull(envelopeId, nameof(envelopeId)); ArgumentNullException.ThrowIfNull(annotationId, nameof(annotationId)); + var validationResults = new List { }; + var envelopeIdValidationResult = new StringValidator().ValidateRequired( + (string?)envelopeId + ); + if (envelopeIdValidationResult != null) + { + validationResults.Add(envelopeIdValidationResult); + } + ; + var annotationIdValidationResult = new StringValidator().ValidateRequired( + (string?)annotationId + ); + if (annotationIdValidationResult != null) + { + validationResults.Add(annotationIdValidationResult); + } + + var combinedFailures = validationResults.SelectMany(result => result.Errors).ToList(); + if (combinedFailures.Any()) + { + throw new Http.Exceptions.ValidationException(combinedFailures); + } var request = new RequestBuilder( HttpMethod.Delete, @@ -555,7 +879,8 @@ public async Task DeleteEnvelopeAnnotationAsync( var response = await _httpClient .SendAsync(request, cancellationToken) .ConfigureAwait(false); - response.EnsureSuccessStatusCode(); + + response.EnsureSuccessfulResponse(); } /// Create new template @@ -565,6 +890,13 @@ public async Task