From 02c17779805f7a8baccd1ab499a2aceb67b03662 Mon Sep 17 00:00:00 2001 From: Yaser Adel Mehraban Date: Fri, 17 Jan 2020 11:21:16 +1100 Subject: [PATCH 1/4] Updated SDK to 1.0.8 and added Github actions to test and push to Nuget --- .dockerignore | 2 + .github/workflows/pr.yml | 19 + .github/workflows/publish-nuget.yml | 23 + .gitignore | 186 ++ .openapi-generator-ignore | 23 + .travis.yml | 9 - .../DesignTimeBuild/.dtbcache | Bin 0 -> 1241818 bytes .../v16/Server/sqlite3/db.lock | 0 .../v16/Server/sqlite3/storage.ide | Bin 0 -> 1900544 bytes DockerFile | 12 + LICENSE | 201 --- README.md | 95 +- Telstra.Messaging.sln | 36 + build.bat | 17 - build.sh | 68 - com.telstra.messaging.sln | 27 - com.telstra.messaging.userprefs | 14 - docker-compose.yaml | 11 + docs/AuthApi.md | 72 - docs/AuthenticationApi.md | 47 +- docs/AuthgeneratetokenpostResponse.md | 12 - docs/DeleteNumberRequest.md | 4 +- docs/ErrorError.md | 10 - docs/ErrorErrorError.md | 10 - docs/ErrorErrorError62.md | 10 - docs/ErrorErrorErrorError.md | 10 - docs/GetMmsResponse.md | 16 + docs/GetSubscriptionResponse.md | 2 +- ...{MessageType.md => HealthCheckResponse.md} | 4 +- docs/InboundPollResponse.md | 7 +- docs/MMSContent.md | 8 +- docs/Message.md | 10 +- docs/MessageMulti.md | 11 + docs/MessageSentResponse.md | 13 - docs/MessageSentResponseMms.md | 13 + docs/MessageSentResponseSms.md | 12 + docs/MessagingApi.md | 530 +++++- docs/OAuthRequest.md | 12 - docs/OAuthResponse.md | 4 +- docs/OutboundPollResponse.md | 6 +- docs/OutboundPollResponseInner.md | 12 - docs/ProvisionNumberRequest.md | 6 +- docs/ProvisionNumberResponse.md | 3 +- docs/ProvisioningApi.md | 97 +- docs/SendMmsRequest.md | 13 +- docs/SendMmsRequestMMSContent.md | 11 - docs/SendSMSRequest.md | 17 +- docs/SendSmsMultiRequest.md | 10 + docs/Status.md | 2 +- git_push.sh | 58 + mono_nunit_test.sh | 22 - nuget.config | 5 + .../Program.cs | 49 + ...elstra.Messaging.BackwardCompatTest.csproj | 16 + .../Api/AuthenticationApiTests.cs | 46 +- .../Api/MessagingApiTests.cs | 164 ++ .../Api/ProvisioningApiTests.cs | 95 + .../Model/DeleteNumberRequestTests.cs | 39 +- .../Model/GetMmsResponseTests.cs | 127 ++ .../Model/GetSubscriptionResponseTests.cs | 43 +- .../Model/HealthCheckResponseTests.cs | 71 + .../Model/InboundPollResponseTests.cs | 111 ++ .../Model/MMSContentTests.cs | 43 +- .../Model/MessageMultiTests.cs | 87 + .../Model/MessageSentResponseMmsTests.cs | 103 ++ .../Model/MessageSentResponseSmsTests.cs | 95 + .../Model/MessageTests.cs | 45 +- .../Model/OAuthResponseTests.cs | 43 +- .../Model/OutboundPollResponseTests.cs | 57 +- .../Model/ProvisionNumberRequestTests.cs | 41 +- .../Model/ProvisionNumberResponseTests.cs | 61 +- .../Model/SendMmsRequestTests.cs | 67 +- .../Model/SendSMSRequestTests.cs | 59 +- .../Model/SendSmsMultiRequestTests.cs | 79 + .../Model/StatusTests.cs | 37 +- .../Telstra.Messaging.Test.csproj | 38 + .../Api/AuthenticationApi.cs | 387 ++++ src/Telstra.Messaging/Api/MessagingApi.cs | 1565 +++++++++++++++++ src/Telstra.Messaging/Api/ProvisioningApi.cs | 643 +++++++ src/Telstra.Messaging/Client/ApiClient.cs | 643 +++++++ .../Client/ApiException.cs | 9 +- src/Telstra.Messaging/Client/ApiResponse.cs | 167 ++ src/Telstra.Messaging/Client/ClientUtils.cs | 258 +++ .../Client/Configuration.cs | 257 ++- .../Client/ExceptionFactory.cs | 23 + .../Client/GlobalConfiguration.cs | 68 + src/Telstra.Messaging/Client/HttpMethod.cs | 34 + .../Client/IApiAccessor.cs | 14 +- .../Client/IAsynchronousClient.cs | 96 + .../Client/IReadableConfiguration.cs | 16 +- .../Client/ISynchronousClient.cs | 94 + src/Telstra.Messaging/Client/Multimap.cs | 306 ++++ .../Client/OpenAPIDateConverter.cs | 30 + .../Client/RequestOptions.cs | 75 + .../Model/DeleteNumberRequest.cs | 31 +- src/Telstra.Messaging/Model/GetMmsResponse.cs | 296 ++++ .../Model/GetSubscriptionResponse.cs | 27 +- .../Model/HealthCheckResponse.cs} | 58 +- .../Model/InboundPollResponse.cs | 49 +- .../Model/MMSContent.cs | 59 +- .../Model/Message.cs | 64 +- src/Telstra.Messaging/Model/MessageMulti.cs | 158 ++ .../Model/MessageSentResponseMms.cs | 224 +++ .../Model/MessageSentResponseSms.cs | 209 +++ .../Model/OAuthResponse.cs | 31 +- .../Model/OutboundPollResponse.cs | 70 +- .../Model/ProvisionNumberRequest.cs | 39 +- .../Model/ProvisionNumberResponse.cs | 34 +- src/Telstra.Messaging/Model/SendMmsRequest.cs | 233 +++ src/Telstra.Messaging/Model/SendSMSRequest.cs | 260 +++ .../Model/SendSmsMultiRequest.cs | 144 ++ .../Model/Status.cs | 39 +- .../Properties/AssemblyInfo.cs | 13 +- .../Telstra.Messaging.csproj | 37 + src/Telstra.Messaging/project.json | 11 + .../Api/AuthApiTests.cs | 82 - .../Api/MessagingApiTests.cs | 128 -- .../Api/ProvisioningApiTests.cs | 106 -- .../AuthgeneratetokenpostResponseTests.cs | 104 -- .../Model/ErrorErrorError62Tests.cs | 88 - .../Model/ErrorErrorErrorErrorTests.cs | 88 - .../Model/ErrorErrorErrorTests.cs | 88 - .../Model/ErrorErrorTests.cs | 88 - .../Model/InboundPollResponseTests.cs | 120 -- .../Model/MessageSentResponseTests.cs | 112 -- .../Model/MessageTypeTests.cs | 72 - .../Model/OAuthRequestTests.cs | 104 -- .../Model/OutboundPollResponseInnerTests.cs | 104 -- .../Model/SendMmsRequestMMSContentTests.cs | 96 - .../com.telstra.messaging.Test.csproj | 89 - .../packages.config | 7 - src/com.telstra.messaging/Api/AuthApi.cs | 323 ---- .../Api/AuthenticationApi.cs | 339 ---- src/com.telstra.messaging/Api/MessagingApi.cs | 1087 ------------ .../Api/ProvisioningApi.cs | 707 -------- src/com.telstra.messaging/Client/ApiClient.cs | 530 ------ .../Client/ApiResponse.cs | 54 - .../Client/ExceptionFactory.cs | 24 - .../Client/GlobalConfiguration.cs | 34 - .../Client/SwaggerDateConverter.cs | 30 - .../Model/AuthgeneratetokenpostResponse.cs | 172 -- src/com.telstra.messaging/Model/ErrorError.cs | 155 -- .../Model/ErrorErrorError62.cs | 155 -- .../Model/ErrorErrorErrorError.cs | 142 -- .../Model/MessageSentResponse.cs | 217 --- .../Model/MessageType.cs | 55 - .../Model/OAuthRequest.cs | 213 --- .../Model/OutboundPollResponseInner.cs | 175 -- .../Model/SendMmsRequest.cs | 238 --- .../Model/SendMmsRequestMMSContent.cs | 187 -- .../Model/SendSMSRequest.cs | 248 --- .../com.telstra.messaging.csproj | 78 - .../com.telstra.messaging.nuspec | 41 - src/com.telstra.messaging/packages.config | 6 - 154 files changed, 8725 insertions(+), 8170 deletions(-) create mode 100644 .dockerignore create mode 100644 .github/workflows/pr.yml create mode 100644 .github/workflows/publish-nuget.yml create mode 100644 .gitignore create mode 100644 .openapi-generator-ignore delete mode 100644 .travis.yml create mode 100644 .vs/Telstra.Messaging/DesignTimeBuild/.dtbcache create mode 100644 .vs/Telstra.Messaging/v16/Server/sqlite3/db.lock create mode 100644 .vs/Telstra.Messaging/v16/Server/sqlite3/storage.ide create mode 100644 DockerFile delete mode 100644 LICENSE create mode 100644 Telstra.Messaging.sln delete mode 100644 build.bat delete mode 100644 build.sh delete mode 100644 com.telstra.messaging.sln delete mode 100644 com.telstra.messaging.userprefs create mode 100644 docker-compose.yaml delete mode 100644 docs/AuthApi.md delete mode 100644 docs/AuthgeneratetokenpostResponse.md delete mode 100644 docs/ErrorError.md delete mode 100644 docs/ErrorErrorError.md delete mode 100644 docs/ErrorErrorError62.md delete mode 100644 docs/ErrorErrorErrorError.md create mode 100644 docs/GetMmsResponse.md rename docs/{MessageType.md => HealthCheckResponse.md} (64%) create mode 100644 docs/MessageMulti.md delete mode 100644 docs/MessageSentResponse.md create mode 100644 docs/MessageSentResponseMms.md create mode 100644 docs/MessageSentResponseSms.md delete mode 100644 docs/OAuthRequest.md delete mode 100644 docs/OutboundPollResponseInner.md delete mode 100644 docs/SendMmsRequestMMSContent.md create mode 100644 docs/SendSmsMultiRequest.md create mode 100644 git_push.sh delete mode 100644 mono_nunit_test.sh create mode 100644 nuget.config create mode 100644 src/Telstra.Messaging.BackwardCompatTest/Program.cs create mode 100644 src/Telstra.Messaging.BackwardCompatTest/Telstra.Messaging.BackwardCompatTest.csproj rename src/{com.telstra.messaging.Test => Telstra.Messaging.Test}/Api/AuthenticationApiTests.cs (51%) create mode 100644 src/Telstra.Messaging.Test/Api/MessagingApiTests.cs create mode 100644 src/Telstra.Messaging.Test/Api/ProvisioningApiTests.cs rename src/{com.telstra.messaging.Test => Telstra.Messaging.Test}/Model/DeleteNumberRequestTests.cs (58%) create mode 100644 src/Telstra.Messaging.Test/Model/GetMmsResponseTests.cs rename src/{com.telstra.messaging.Test => Telstra.Messaging.Test}/Model/GetSubscriptionResponseTests.cs (64%) create mode 100644 src/Telstra.Messaging.Test/Model/HealthCheckResponseTests.cs create mode 100644 src/Telstra.Messaging.Test/Model/InboundPollResponseTests.cs rename src/{com.telstra.messaging.Test => Telstra.Messaging.Test}/Model/MMSContentTests.cs (62%) create mode 100644 src/Telstra.Messaging.Test/Model/MessageMultiTests.cs create mode 100644 src/Telstra.Messaging.Test/Model/MessageSentResponseMmsTests.cs create mode 100644 src/Telstra.Messaging.Test/Model/MessageSentResponseSmsTests.cs rename src/{com.telstra.messaging.Test => Telstra.Messaging.Test}/Model/MessageTests.cs (65%) rename src/{com.telstra.messaging.Test => Telstra.Messaging.Test}/Model/OAuthResponseTests.cs (63%) rename src/{com.telstra.messaging.Test => Telstra.Messaging.Test}/Model/OutboundPollResponseTests.cs (66%) rename src/{com.telstra.messaging.Test => Telstra.Messaging.Test}/Model/ProvisionNumberRequestTests.cs (61%) rename src/{com.telstra.messaging.Test => Telstra.Messaging.Test}/Model/ProvisionNumberResponseTests.cs (52%) rename src/{com.telstra.messaging.Test => Telstra.Messaging.Test}/Model/SendMmsRequestTests.cs (68%) rename src/{com.telstra.messaging.Test => Telstra.Messaging.Test}/Model/SendSMSRequestTests.cs (71%) create mode 100644 src/Telstra.Messaging.Test/Model/SendSmsMultiRequestTests.cs rename src/{com.telstra.messaging.Test => Telstra.Messaging.Test}/Model/StatusTests.cs (51%) create mode 100644 src/Telstra.Messaging.Test/Telstra.Messaging.Test.csproj create mode 100644 src/Telstra.Messaging/Api/AuthenticationApi.cs create mode 100644 src/Telstra.Messaging/Api/MessagingApi.cs create mode 100644 src/Telstra.Messaging/Api/ProvisioningApi.cs create mode 100644 src/Telstra.Messaging/Client/ApiClient.cs rename src/{com.telstra.messaging => Telstra.Messaging}/Client/ApiException.cs (81%) create mode 100644 src/Telstra.Messaging/Client/ApiResponse.cs create mode 100644 src/Telstra.Messaging/Client/ClientUtils.cs rename src/{com.telstra.messaging => Telstra.Messaging}/Client/Configuration.cs (62%) create mode 100644 src/Telstra.Messaging/Client/ExceptionFactory.cs create mode 100644 src/Telstra.Messaging/Client/GlobalConfiguration.cs create mode 100644 src/Telstra.Messaging/Client/HttpMethod.cs rename src/{com.telstra.messaging => Telstra.Messaging}/Client/IApiAccessor.cs (57%) create mode 100644 src/Telstra.Messaging/Client/IAsynchronousClient.cs rename src/{com.telstra.messaging => Telstra.Messaging}/Client/IReadableConfiguration.cs (83%) create mode 100644 src/Telstra.Messaging/Client/ISynchronousClient.cs create mode 100644 src/Telstra.Messaging/Client/Multimap.cs create mode 100644 src/Telstra.Messaging/Client/OpenAPIDateConverter.cs create mode 100644 src/Telstra.Messaging/Client/RequestOptions.cs rename src/{com.telstra.messaging => Telstra.Messaging}/Model/DeleteNumberRequest.cs (76%) create mode 100644 src/Telstra.Messaging/Model/GetMmsResponse.cs rename src/{com.telstra.messaging => Telstra.Messaging}/Model/GetSubscriptionResponse.cs (84%) rename src/{com.telstra.messaging/Model/ErrorErrorError.cs => Telstra.Messaging/Model/HealthCheckResponse.cs} (57%) rename src/{com.telstra.messaging => Telstra.Messaging}/Model/InboundPollResponse.cs (81%) rename src/{com.telstra.messaging => Telstra.Messaging}/Model/MMSContent.cs (68%) rename src/{com.telstra.messaging => Telstra.Messaging}/Model/Message.cs (62%) create mode 100644 src/Telstra.Messaging/Model/MessageMulti.cs create mode 100644 src/Telstra.Messaging/Model/MessageSentResponseMms.cs create mode 100644 src/Telstra.Messaging/Model/MessageSentResponseSms.cs rename src/{com.telstra.messaging => Telstra.Messaging}/Model/OAuthResponse.cs (82%) rename src/{com.telstra.messaging => Telstra.Messaging}/Model/OutboundPollResponse.cs (79%) rename src/{com.telstra.messaging => Telstra.Messaging}/Model/ProvisionNumberRequest.cs (58%) rename src/{com.telstra.messaging => Telstra.Messaging}/Model/ProvisionNumberResponse.cs (71%) create mode 100644 src/Telstra.Messaging/Model/SendMmsRequest.cs create mode 100644 src/Telstra.Messaging/Model/SendSMSRequest.cs create mode 100644 src/Telstra.Messaging/Model/SendSmsMultiRequest.cs rename src/{com.telstra.messaging => Telstra.Messaging}/Model/Status.cs (67%) rename src/{com.telstra.messaging => Telstra.Messaging}/Properties/AssemblyInfo.cs (75%) create mode 100644 src/Telstra.Messaging/Telstra.Messaging.csproj create mode 100644 src/Telstra.Messaging/project.json delete mode 100644 src/com.telstra.messaging.Test/Api/AuthApiTests.cs delete mode 100644 src/com.telstra.messaging.Test/Api/MessagingApiTests.cs delete mode 100644 src/com.telstra.messaging.Test/Api/ProvisioningApiTests.cs delete mode 100644 src/com.telstra.messaging.Test/Model/AuthgeneratetokenpostResponseTests.cs delete mode 100644 src/com.telstra.messaging.Test/Model/ErrorErrorError62Tests.cs delete mode 100644 src/com.telstra.messaging.Test/Model/ErrorErrorErrorErrorTests.cs delete mode 100644 src/com.telstra.messaging.Test/Model/ErrorErrorErrorTests.cs delete mode 100644 src/com.telstra.messaging.Test/Model/ErrorErrorTests.cs delete mode 100644 src/com.telstra.messaging.Test/Model/InboundPollResponseTests.cs delete mode 100644 src/com.telstra.messaging.Test/Model/MessageSentResponseTests.cs delete mode 100644 src/com.telstra.messaging.Test/Model/MessageTypeTests.cs delete mode 100644 src/com.telstra.messaging.Test/Model/OAuthRequestTests.cs delete mode 100644 src/com.telstra.messaging.Test/Model/OutboundPollResponseInnerTests.cs delete mode 100644 src/com.telstra.messaging.Test/Model/SendMmsRequestMMSContentTests.cs delete mode 100644 src/com.telstra.messaging.Test/com.telstra.messaging.Test.csproj delete mode 100644 src/com.telstra.messaging.Test/packages.config delete mode 100644 src/com.telstra.messaging/Api/AuthApi.cs delete mode 100644 src/com.telstra.messaging/Api/AuthenticationApi.cs delete mode 100644 src/com.telstra.messaging/Api/MessagingApi.cs delete mode 100644 src/com.telstra.messaging/Api/ProvisioningApi.cs delete mode 100644 src/com.telstra.messaging/Client/ApiClient.cs delete mode 100644 src/com.telstra.messaging/Client/ApiResponse.cs delete mode 100644 src/com.telstra.messaging/Client/ExceptionFactory.cs delete mode 100644 src/com.telstra.messaging/Client/GlobalConfiguration.cs delete mode 100644 src/com.telstra.messaging/Client/SwaggerDateConverter.cs delete mode 100644 src/com.telstra.messaging/Model/AuthgeneratetokenpostResponse.cs delete mode 100644 src/com.telstra.messaging/Model/ErrorError.cs delete mode 100644 src/com.telstra.messaging/Model/ErrorErrorError62.cs delete mode 100644 src/com.telstra.messaging/Model/ErrorErrorErrorError.cs delete mode 100644 src/com.telstra.messaging/Model/MessageSentResponse.cs delete mode 100644 src/com.telstra.messaging/Model/MessageType.cs delete mode 100644 src/com.telstra.messaging/Model/OAuthRequest.cs delete mode 100644 src/com.telstra.messaging/Model/OutboundPollResponseInner.cs delete mode 100644 src/com.telstra.messaging/Model/SendMmsRequest.cs delete mode 100644 src/com.telstra.messaging/Model/SendMmsRequestMMSContent.cs delete mode 100644 src/com.telstra.messaging/Model/SendSMSRequest.cs delete mode 100644 src/com.telstra.messaging/com.telstra.messaging.csproj delete mode 100644 src/com.telstra.messaging/com.telstra.messaging.nuspec delete mode 100644 src/com.telstra.messaging/packages.config diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..a0270fb --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +node_modules +dist \ No newline at end of file diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000..e2a3d5a --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,19 @@ +name: validate-pr +on: pull_request + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: "Checkout Project" + uses: actions/checkout@v1 + with: + fetch-depth: 1 + - name: "Docker run test" + env: # Or as an environment variable + CLIENT_ID: ${{ secrets.CLIENT_ID }} + CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }} + PHONE_NO: ${{ secrets.PHONE_NO }} + FROM_ALIAS: ${{ secrets.FROM_ALIAS }} + run: docker-compose up --build \ No newline at end of file diff --git a/.github/workflows/publish-nuget.yml b/.github/workflows/publish-nuget.yml new file mode 100644 index 0000000..89d7fbf --- /dev/null +++ b/.github/workflows/publish-nuget.yml @@ -0,0 +1,23 @@ +name: publish to nuget +on: + push: + branches: + - master # Your default release branch +jobs: + publish: + runs-on: ubuntu-latest + steps: + # Checkout + - uses: actions/checkout@master + - uses: actions/setup-dotnet@v1 + with: + dotnet-version: '3.1.100' # SDK Version to use. + source-url: https://nuget.pkg.github.com/telstra/index.json + env: + NUGET_AUTH_TOKEN: ${{secrets.NUGET_DEPLOY_KEY}} + - run: dotnet build src/Telstra.Messaging + + - name: Create the package + run: dotnet pack --configuration Release src/Telstra.Messaging + - name: Publish the package to GPR + run: dotnet nuget push src/Telstra.Messaging/bin/Release/*.nupkg \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..17302c9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,186 @@ +# Ref: https://gist.github.com/kmorcinek/2710267 +# Download this file using PowerShell v3 under Windows with the following comand +# Invoke-WebRequest https://gist.githubusercontent.com/kmorcinek/2710267/raw/ -OutFile .gitignore + +# User-specific files +*.suo +*.user +*.sln.docstates +./nuget + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# OS generated files # +.DS_Store* +ehthumbs.db +Icon? +Thumbs.db + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings +modulesbin/ +tempbin/ + +# EPiServer Site file (VPP) +AppData/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# vim +*.txt~ +*.swp +*.swo + +# svn +.svn + +# SQL Server files +**/App_Data/*.mdf +**/App_Data/*.ldf +**/App_Data/*.sdf + + +#LightSwitch generated files +GeneratedArtifacts/ +_Pvt_Extensions/ +ModelManifest.xml + +# ========================= +# Windows detritus +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac desktop service store files +.DS_Store + +# SASS Compiler cache +.sass-cache + +# Visual Studio 2014 CTP +**/*.sln.ide diff --git a/.openapi-generator-ignore b/.openapi-generator-ignore new file mode 100644 index 0000000..7484ee5 --- /dev/null +++ b/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 204253d..0000000 --- a/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -# -# Generated by: https://github.com/swagger-api/swagger-codegen.git -# -language: csharp -mono: - - latest -solution: com.telstra.messaging.sln -script: - - /bin/sh ./mono_nunit_test.sh diff --git a/.vs/Telstra.Messaging/DesignTimeBuild/.dtbcache b/.vs/Telstra.Messaging/DesignTimeBuild/.dtbcache new file mode 100644 index 0000000000000000000000000000000000000000..05477cd07237f534eb0d986b97c9d55605123757 GIT binary patch literal 1241818 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

amr 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 z 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 Y(_Negr%qo6)3~z>e{0T_7?gkhA6c8(zyJUM literal 0 HcmV?d00001 diff --git a/.vs/Telstra.Messaging/v16/Server/sqlite3/db.lock b/.vs/Telstra.Messaging/v16/Server/sqlite3/db.lock new file mode 100644 index 0000000..e69de29 diff --git a/.vs/Telstra.Messaging/v16/Server/sqlite3/storage.ide b/.vs/Telstra.Messaging/v16/Server/sqlite3/storage.ide new file mode 100644 index 0000000000000000000000000000000000000000..b01f1e8fd610be7acd1f40078857052042bf1536 GIT binary patch literal 1900544 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 sy|J~6+4jq&fS2F2nXBHHqC zjA#qzP|>Etg`!PYO)>fm(Uuq7=V3gL#^@JfJiica^8Z=1<;AwDP!{i=qD{|}WAuE{ zCQrR+3#V1Ig)>Fv6Bz~yXUBN1iP86nw)8$K+Vb%^(bT6Z;n$)G19}^E;;c*#6m4ld zP_(6;J0uwCguhv|m6wXN0g!Izdj-GfO-c@8`vXUwC?T_cFNlT=t62*}o`Ss&Mogg+sX_oY!P; zZP!~d`uC#YAOK67j_VBZS3*lF`0+T-ohLwLQXE614Ua}UYDJUv9te# zWF{@h% z8%2{w?AHl|3B6I+E1+-IFYOZcUl*hzM}IFy?=8BgFho!j;?k(<;nGBTqfAh~h6%$3 z_$LX-b)+y)I7(P3JSaROj1eXZ4+u{R#QhDSSy&@vg%;r?;Wpt8;V$7m;Zb3GVY*Nw zNJXx#IYPh4HCotD*k3qUm?10>W(x4`E09hV8Aq?wFZnzuXcqR)62nPy>2ulRs6$1tGZJJM&k4x4N=OPBVS~^iTqIl~Tq;~G+$jtedI(d5XNC2`0D-iT?)kzO zgf9tC36!C70XZ=f=O}@;2_2e!FVTcMTlkJJM4)}a?;PPdVW{w!Kv{$r{gPhN$uD;C z_|XA&_X=MW77IHF#A`C*mwbI#AU)9E7Dx;9CIMaH=P3c%vF{`7Ba9TPg@c4cg{i_U z;nTtu!b1XjB!8C+#|p;@D}+{|O*mCR&SQiI;VR)WfwUhltQFunO~C&)Lak6I)C&nA zC8UKDg;Rvj2p0&1bG>kjaF4L9Kw8Le@)kdsPY|vV2#0uA3ys3H!e<5i!`CESClC*L zwoW)pI9oVZI8V4xxLmk9peY+C3ug-F2Vl z0RQR28N#gsytrR1kWSoh5N;H15-2O>(rS+pW#hXa>C`KmfA`Z~+p%j!u7CTC&K>;J zxFWOU!H`8Xxp(lDi9M=Wky#>B;`ze0$S7C%;np^6ozI^0qYFSR=SOSdE&^(qZ)sNXPB$ z1Te7$YN~fTxL6B^R~It!mt zkc~4eNT)Ub9!2d>DORhwHmMQTJeMGeiA)$MBf1R7hHT!qJ78AxF-^5h!PvN~Rxqt) zvR{Xo7g$-wlkl_-OK`PaLHp1`LMsm<+8?2oV3gXkO$`rKi&?eB=}^kZvbh-vBXf}= zLO*VTy_nHit0@g#rmsrttrHo;(c%(T!K6Dy%TnR1qRXbR+{fJ-6YJe@e2S59pK!cH z*5PYlGwz(46P(Ij$YC|d(rs>msSh+WL1vy7$%3SIJoq;|IWk$Eq2a39`bx1^-irOgC9opiou*MSPGKO{IL z{K31Ce`6?4ZeC&65$&NL(V18wo}EaoY+03`L@l6EfQ_wLoz7e2;)E>eQZlF{iy2D> z#d@C2xs(bjHh1OKGgk#f3z7P-a}?hj%n)Gy@PzzdLvMp z@}pjms82L#t#RnhmJ!7)qRd{Hq%IfMy*%6E3ZCa&s(yQhyt)`!m5vN%_vW{n5_#Bi z3~pIcn6^clT5K#;Ve*9WC(DPP7RM@1>`h_k(1(1H+pNagmAs35J_Po$R@K=gV=auE z_;d4$`MKp@@dU&YFnI{XmJUYDBDQV*?VWR2VcUvCUj zvD;yw#bfRQ1@T2q=1lceTiVZ)oEUEi57|TzS@cX81IF=0@G^0g-k|eKb>QjBb|HaVoy>H5sR) znNZnIr?J(0O#ycc5R zEGfvpOuBUhMOhdTX zyn3EKz8c-_3DGpt-g`gugI(`=-`Q`s9qws)ukw=Mwvy1RUze|Y==6m* zJ-F4#Z^n+o)TgmVak=|8Q6Jg*AUKz78rQ}751Poi=z=u&4bDf5AC`$NmF*YHFD7`H zRqZP<8_Vo2Gp4S~i8BUu?&MRLuhmiZL`CAL_sjnF zrCxv8D(_x@z^2L{6c!2XYS8Qv^FK$|Cbj!MRo|G1LgT(XZ)bdPX#~V? zuJf6@Sl8?}B#vrLwCdtdZU&3Wg?HM5UxKre2t6<3j^Z<`@OnXg`1{EG-=gxyq^~`c zs?jo7$+%ZE>n6ypuM3na=&uOmCbX42N(pONb{95RlHjLA5jWt6 z@LVmh&IFp$L@A>bQMxE)(D*So{PFD%%F5Pt>v5a@Y<;$BpmQ{k8`-f(MfZlU9($ze?zt~b+4;Hm4|w+M3HMF=LFMRh{@jL5gA2IB$y_&j$;_`Nsi|%D z&?->F0JV-5f!Ytfi$G0-=E0taUuq;Zbf|zk*hj$L_^({j@yUwZ==-)QYX3Xo+`agI zz3OO+H9Aykzl)QLUpVUMWnZ51>XW;+oY#KFGshgdLgI7h6!-3M)?9Qe6;zAX(Iwpx zQ`|>YY~#;<J*N@ZHu$|N~H;DIj@d$1d-j}-IcEk&Ku;!KaSgq?kL)l_O^Tjn7MLFA%}KF zX8;l=@)S$@_x;4r6*O+sW1+cJ`2LQqM#bG$GXA*xmdk>jOX$ODklwiSi8zbnHSOC; zfTcL_%OPi+L|E_27iG8Cd^aUNo`Wb@}v+RakF6cQ45Q&HMV#pt=o zGY(iws{hJ8R;AMEwZL6hE5*UNk)^ckZ^0ro%7s6(k$S)>lBN0c4}J4KI0DX}ub3<- zucqbr(QuoS1+A}_*3rRA#m~K2g{=hlhjB9GmU#RPc!Xv*uoZ_Bm#0}V`PyB~$8mT_ zQ>ta4Ca+X3P)?xNJN+f3Nz1`f;U%>Cnw<0PKq(Gx`l57Dt~h~|yUobWM(KFV^&tPI zKi{Sx{g(9=Ki`s)pjNgEYbzB_Hn1igiM_-f=0&SPJYytT30L!f_;nZExhfv-s(z6M$QY)cF=&lU)S zxBJe*@q#TX{iNuWu&Y21U{B!;fxbO`diwtK^>ODJEPP%de){;BpA>cz;2$FVNFW}b zVZ!eOdM@x|{)>Rz@DCR_>cQk6A@e6?=F67{Gp8QK&4tl+5;hi21kzbCb;E2l3&~epb`h zc$u%1nQuNG%-73o`GxsmnJqrdUzXYQi}`y6?p$YV^5Fia%%qP8GuI1KUU)Fuem*m^ zr*8lTJ-82*IWF&{0(bWJnZDuwl+2c&n1PLWV6W(1c$5jgaj6IRCymI3E-0Vyk`DY* zU&u2sKp;I*BDs1>T+oCM4{;GE{wYiF^R12D-hzFDBLgzR zkM5C;I!HL91l*{*@C_5-!7ud$nUK{+j|Ph-oS_2ojTPXbjKDWWz#Y9IFKI=-s^E8^ zezE5(fiw&kh)dD)-OCX$)0`X85iMOocE8Y5x(x0u*Rt;>`z*Y@x z)xiH>G;n6JW3P(b&KDd}G%)nBp4c2amZ`dEchygyu3LG^IbZ$WE4x46_rAx6_I|zJ z;B@7;gA)Z~K3Vp+AW@glfPS<$q{uQ@+7`qT{OG33)<)acPAB8;#~M^7@PpmlY+E;b0!pS-%TrL8eBC!I=a zUBA|Ga<*S4+04jcxJoiy&Q~Cy+ELU2%Qv=0h+y`*3UanwDDgp+W7xVG<`Dok5gRq>-5v@ zJpDm_WV%!IK>gz9O3}y$&4X+_4+!*S3Fm16ztG7!2wFS5|brN7FzEBQh?3CsGL(8xnRLDSbgXMV??6}kN{U0c-H zeC(sp!5MA3`Ni!(%h+zdYJXte^k7uK`}kc(eeU=>Uisu(XFXkYSL)h{k9XXC_~o2= zRXp;*=n6N%_;G}_`ehue&e`ODTi*~mw}J8q26n63RXKCxDAjMVwj9E&eLI?ZSm zV{nXlaaYY+Nx@|deq0Ud;@tUTaNd`{tEO3_cDNFrA4RH@xj5a(vO=M*7q1^ZT_K-- zoNbwmi01?7#4u400NI8L?v=5&bd3Tmfv}e-yt8mA>TrhXqjz+=8pD=d_v|F^-n9mig zouX~IEU?#)Ym;u%ugOgt^+bXB2Qt%+@!!5D)DX=AI&GyLd>) z4l-NY%P;RG3lHEXf5aioOHgSnx=KX$|?YbUqq6@4QYZ7%vFOymaS z1G+~~q!qmx4}Q=)GQtBd?J_{e02-NS*NL0dQZ$I_uZp zT|I8wXH&1AaLU2Trp;YTMsv)>GtD}$pmqA?CBT4r&)2;R=+eU@NHbzF-RBlow2ki z*FM(oK{wRE4EvG#rn!Of@NZ*Zm7UJ zpMmU3WP=!Hi@IExgWq!nYvErOO;N%xzZ4T_14Wg`irdqoEne#-@C&TiQOtP55g+nG zgEIzo46MkFJ-3tBCYCOG!QRQ}%CoYulYe#YF&zgy{O07te|2%+>er|2`<=`0A65B6 zS>7ojmVs`2UlfSHBE|m=Z9^isDW=VR?T5B3N_93hvyzF%dWs8HvyzQk1?ff+Le`K_ zfo8*FA`{w3Ab-J2Xj79X<3b&^o#rlvnvn9>6r?l02-eJS$8d9KMKAzRo6>n4d^ts@ zRIvQAz$%~FVzIDmLUBToqY`g@LKO;E;)m$hO5Z-BsS%VI&U&U4QCd$FXw)cu`wOoB zrr!+$eH`p56a zFGW*h;J0+ZW3>qXe+b;+;e2Xjg&rc>!jUnoX{$w}2jrwiL6d&;K^(LW^aJrr|BQYb zI-wR)Yx#wjUwb*=&uS#RR&xoTu<2```-zUKirnDKJ9$xg=~|k%4DXm-e|OByJAH8I z{->RKNfgoRe7c@Y$=y!>*GP`$RHiV zk;wR8f5t{OlpD^VtqtrHcx0(qy{pBY$P^9rMs4Tbs-yNWrh22=53B!Q5KXqXEP z{Hy~Zess7oX1^lF-x}i~t>{FoEd|r4eST%7k}{Jk9X#-WsTi>w3oeI*0^nEo42<4bpKcTFYNdA zeuwtGukY@CF6+~~_i4S}>$S4yk9#hxe4=tf#f=p^mS0xhv->x@ALxz_RR}txuy1*8 z=dy#^%gb}U%Zffi{`K+U_U+4agFlXd$5oH19 zB1ttrsV;$&VrF~4^4zXnkT=0mP1))tIu<7FFRCufoL1g`T2~088*Ryx9oqYp=XUHO z0it_}T&bPjRSlmmP^yl}GF=y)r(=g)4)d9=df^i{d13<2no%I#~vH)jQeAqEkY37DmDs);V2O zSe+=*A=tj-U&Z)HdD*Mo`o7&~Q}5v-wmw@m@P9!A=N{29ydrn><+FZs`~%CBmrbs*+J5swlv*nX|X`lBy9t2Q<@eKD!h|ql1@9B2{TFCut`#aEV3%N zfgtdLf*_(Of`W{>@7C!iiCo*%ni(q> z+jiTUk`LClHA@myM0ceB_`mM@zArs{`^piQ?6>Y42jvEuC+u-a)s2+} zS#Gmqb9YZ$D(j1N)5zKfolG}c3=JoB>j-^aei23;5W(`JxfsVXjbGI1(E?@CF@A4OW{G>53C!I~u{niFb^Fs7 z2FVX?QP{~IX;a&#yWR^%v%4Kkl*=xc^k`SOw;i9=F1OlKR0;}a@Qzq2S;r`BW}o0S z9V}z;DJ4_$OiTYtz*IM{9F}64?gl?zJS=T8Ma`#_Om~A{Eu5)#@Y6i}CZ;Do3(NUv?hLxL`q%C~>5wz`eW!;Nn;dl4{P{Yb6rk{JpX}dr3V(p=;uldLL zs=TY*#bN3aI&nN*sGp7QfN5&@8nuLt4Q;7zddcn$(zqUmXA9=}=-D&~6;N-LMO!M$s;Vi2W_Ba9g0zVJ3c<>`{$QOXJ#xMT;`won$ z>>trTcFX3GCenFzhU-PeQyJk+Jxv3bzjpc+(|7;b^ZPwH;?Eztz2-e%tr}5ytCxI` z)2q>BXJeD4SxF1F(@;K1KWXMM+hb$OJ#`QJSvdT0BMi^kyAF)5?BD-_cWznxMAM`B z8m*1By3KfPQDMI1uP=Y|w#hqO(D%#3kN@7ZYcBkG<55pn-5c)D@<}+ry&(jc6J>->}>UjA%oc>T9Du5A*j>*a3GmkoHhPX$UDSR8$HIIE{3T zfC`8E&jr?y)~I&jPs8}Xp8HcC{+e(rXom^sWq_O!3d;+JuxkYrROqE44$lb!IcY-1tKEU+M`iXr;H_4$9)0-szza6o1McDMZ-zUyPg-R3OyvK%`7 zz+L}w{**%(Jd@n@>Qhd?<*VyoXn*{TmsRi++RV?FbbJ-XH(Gpc$1mU5;mUbkZ10c0 zW3z9)__~g>oa}2hJ_A4o670M-cajhv2c!p)#+P7xL*_yf6S4DMnbRbxu+hn0e9OhR zetbt}TDq_F2=AoW$z@r6s=&ty8%vA(M$tk>CsUPAIhG*qj?hMYE63M`8QBPTK5}qY zPOvs*2JXoj8ZB{CN0!k@KK9h0Fc=Rxa=6 zry}BT-$;@+v!kCIK3}BQV6KrJeEl}%8kM_pd2eyKbG`T~6RQ;GNqHW=Zd@zNa&lU( zU?=2I8?d;Avu_ajfQ6D0&$04+<@2LhR$ObBSMF1pF6qFRmZYYfjpAIzvM3RJ^UC*| zcKR4@rL||UPko{iO096`mr+mo8j}{n+=!PNhnqX^(bqT1y;8n)LG4@>N~9G)!r-CZ zd4c4wJ0Xt`kleX&rS-5=T5|4KO1!jFv`Vfmay7Kn-%dER^9GCg`GS=cMCmE7XDOeh z(&^!(P>S4_$x+TmlF2j9scg~U&b4zcy=_VptzP+zLdmD`P%GXFy~w4_bUhhJS|DYSKE ztz5osEX149f|DN;gV=AKeE6bzV|tYDY#kCh)9KuNNSfJ~H&30_%S>e!5#gf0}+YgYx?Y z^rg{foZwLbeS4k>g5L%n*88_{*7qHa_~dH zE}Hy+o+)^jgrN`g!GckuEj_bv6K(kiy;L;gHXi8r$LQ6fDW^R6pC#J#gZ_|cU*3O< z9u2b|{J$%jdWJsGKND@~nJpS1fAJ?Dl$^j{Y=wG3dZ{C%10L!Jc}hA7yQ_e?3C7dJ z&G`5L0rhf%0A9)#>6|P;ALyF$D*0^%Z0(lJJWjEMr`MQ7v_78&s1hVIDTQvg4@5O1}B_{Is)nY2P<6J(GV z$Q>at-QYnd(qMBov|+@@ggW|-6p%jZH2jn$e=;HI8IU$&SYiaC$ z&!5zqb$M%&8-w}#?u-T)=W$Aj^%=3CrP+Mlnak^fe004=dH~Vs>*e`O3Vgi9txthv z>Cp`4js^MP-i?dh2{3k=Ha$k?v$=hKQf6nsyK`B}mCj(1KQco^*FdaRU>l)iN(7AGC8IB6W4IJfBBce8!D zv{IhjxQ1}dSPhQP1}UDO{LYJE!Y&V^QZ6Y@|4uLxf^%#k{jETEAjLV9@4dS*804; zu%-G^!b~Sxl-@v>QrB`JIWvizwKm($dAT{D;t{sBS;g%`T&A^>v>=p7YdC zq&P=hqP1&rcWMiMSedfu+Ng3|lv3Vn)O_B4{A~%^bk1XU5-dI38Q@w*|3DFUk~?!~ zu0?Srq%Dx-w;eVf=dH__&2lfU6|Ds|$e(5NTM^&i%_>sQ%B7b$ir)j}`FO99)1(dy zU@`ZuclQMFhAc13@jC0q)8*!3T;C#+>v&zQDeiy3)2;r?%)pM!h+%!~KrZ4pUA;hT zT+VN%dOU;qA%WUoY-wzVBv;32aT#-?->QJ0dj@E)qt>kS?O!Z`^5ahP;tlWW6MB~m zM?G_8&Sok6cNO-rx`&>WnBo)Hiqqma{8Cx!pH+IS=jXpY;G_gZ?MXarG3~5e{AMfW zh}T-u=~4;Sqnx1qakJ~CZ_mx)ad$xYbMvlsCKhZ(*^9p=H}=N0G`aQ%DXvdhuAKVs z%;I$W;YbBiT`4Z@NklPNn-Ya41>|K~wkqFB5QbiiYp;r_;v0pq_ zH||^7UKI0Fv)o%Wx^IUxIqSN%C`w_uxT%-+Ua~h?`B>o`tae#%9PKv7SKR+B&uw{X zzT_dLJYI@iS=~G?ax*^eDh=uCe^i6%WwD+>T{9ceR&|JWZJ}#hdGnV$Kaz3~omW|W zb|e}V_q^fG2dfvHw&?0mJjcrMxN`1h$L*#YX0|(}Gy28thBbYE!n^xMoJAQ^F`nHV zp5mHIh|)KBG&9foAEg70Xe-^S8=BhOK6zqqX7|3bnPC4tW*p_;?Px$=TWNMR*$?lJ zu6;bJL(J{-&a$x}`JnOtF}(j=p1adA8AX=X7TRUfVQUnA+{Gowodg=6L)aXiawR$* z4&AuTD&Bu7&*xfN(&zlGj~(YOl}8D3<=K@0^4IkQob73ic#}uH;=yE~G4;#6N#lJK z;wgTAm*%bG;VK%jCk-W{`K*=PWPHy<^Jrm6vLV?G?W#EKc*~h`sW? z4Oi=;aTO)9oJBd=m2ya(i~6F2aq^BN|2Xs3mF`mO5;OO%xeSb`GBJP@u~VWnKrDx<5v@wXg# zKX^;(`s(P#j2!jF*^8Xz9n`7c2rupTSebFXP)ZLu6S?N4Hzg_>qqq`KYHZw#nAIJ8JZiq>N2KOkeoPv*LAmoehtjn;rgBxoGtXc4|W>F_#-GcQ6=wm~g^$^xEIt8q0 zupYs>%IN~u901m7J|tjGf@iMaQh~({{TTuAvu-k1@GSvh(dP)k0|NM=j}$y5AU^0t zf|muX#Xv6>3>U(h3G@=dyM(aD!#YWmfVEWoS-Uz$z0BO2XVUxDrsZThE0ZxGFT5%$AYe9VH~Sf8OccB^PxyIU*zN1{pZFah+F zqS0SJYTbqm`GXMTnLXwmosr}?FX%f$fBgjKgRxe+n{b{_2%Z#e`a?f2n)NfD%LUs= z5bI!shaM>!f9&-s!6Bm22YXyCI7T#S!OJtf6D4ZqRoDv75%?qc%eg}*;i}j6Z&1EsbgXra)V%kXv!bYO@c#2 zvu=od==X^>d)+KLBbxY0BlKCK$LN>mD}ozElODoD-z~aIzdW}Kz9ZW7fqqyt`3L`3 z1-}pdg$}tx@S14k=_jCfR6!!YpzjjwBN}~pz9pD08hw!my-+my2YrvARkYRjZ;M_l zdW3#?pg$^lbU-=!PSNBS;qkvuH2KN%9l@ibi64LHS45B0FVDS#J(PILFaFR|MN>X` z?i0)v&6+C@^n#fG(V{JX@NXAw`a}1MuFx;?p-&S{`!P&#zu;WaKFb`iyot2;)C9Po5+4Y6n&s*YmcB06^%adLmwg9+QT1-K2Efy z=YK?Zibg;E1ox1fD#Yr?!*aVQ^r!qnUn!dW;rWH&M$u+3=sQIdKM(Z%qG=y_pdS=X zd&UF(sA$Ry5A0AbM}nCLg*+G`u{}(?wevpbv|MKPnbJ zDcZ_3{5@XyKZ-sh5N&l7`h3xre&{P={x^y?d*gqHXnRLNKNt)DYtg&Q zod^HFh(=!?=pAL;cL$WCM~Jrk!GD%$KfVQ`t-RxZoM@}V(Cb87enOuux>~I-{m1_z(UyMbD@2?9puZ^E$^-QGL|5yV2l`pj)_y{7tIRR`LGLbFEWrak zPPEwvdZtIeA-W-?3GffWa?vtj@IbeTw(?sT6YMKE zUVwY8fcVK%S z2nXPfZ1Mt~DgW3Ao-qRA9w$JTDFWmjEFesS06hi-#Q#MB`Y|3u|NjvX9v*BoQGi~p z0_>F*pu+_M;{LRNa5oEx=Vt=a`YQo4o)@6U`@`SS`bGX91^9Of@V_yniDRgsO+dPm z0^&PefWAK#5dNnE;(JVhef}W8F0%xLYZ8#I*95rF6kx9t1lVD{0C~LvxJ@`2SZxx{nL#ll4ow z@&fdJIsAQ}esTY{fb#ZX0djsJAiht8^w;!D`S@r^Kc!#deL#Tz9Rl=OB_MtM0`xdX zK>7QU0DbNkp#P%+_|6p&&(8(e_i+L4|1H3NzZ77ntbqLZjDUQ+R)D>~DuC~40r8wA zK(F%!==DhfdVEWO|3d=wd_zEd7YRu3Wdg!oA%O2n0pULX)h}{~s|6i4V(8vMLn?Z6p1u$>J1{Q0|IA9d=k-+gw6)9)Mm$s?+EcBirwLJjwl#%UPj3KqmFJka*^4y5QS=RWhu=X<|*|9L9@w(Fcd3~s$P+SypT=V9}>i+4V- zSKYpgVE4{Cf!i^`+OzwTV`DsVY3yxs`>nerht+=W<1JnJbh0uQs#t7+-TQ4HsY0E#=tQsSWI7U{%)bi*>uYN>@BLy{jS4QM`-PeBCYya*G`) z(Qde6e_Qiq#T*M@eRloESM3MiOTsPQ zr?F*mZWr$X8*IO$NgysttK0upyvxzIC~b}9yKkq>3sGvP!NR!`{pR9|huL&&5>^;&yD)k_Ru7n|`CmOT}P2 z-yEOoart=p9!Q*ne2Vu!;yk{6TwiN&j^bJ!=kvcijQjat25yd4K7Vl?jZ2Q_!sc0q z5dqHjK2J$C&g z`-Z~F-W>jNmiP5D8MMvl>`oObR}1N-IbWxd-=?+&Ipy}b@{MuymMoRzzEyBvp`i(K z+}psF?7{qtZEt;P`z_U}Sh8l}Rs`e!s=p4|Y01XS+)dE{Bu+;)vEwI%B|JNf?mzfqPOQx~N=R&}pS@;92zUOn&CJ%2R&3zz@B=Vui= z@AQGkk87CxTGd3G&9*CP8x+32H#yZzku$NpH$hu&1F-ztl>B-*1J^Dovpst=&wI@_=^{w zc-!pXU3N+SmK}Fq^S9lr{#fBGr4V6&#wPA2$z{`Zx+JA>=~5kkpX|m?xz6C)4mstr z+!vxNJc3J78keq}S-9rH-TbYI_KsxE;V~~ov@V-l92uEGjv5YxBLC*1{S4o?Cc@NjBr$=BE=Kd53ywDRBrdE_d!> zT6EBV+IQfjb4M>rwkCBI-~3#*Q|l%@=}@Q8d9g07Pjr;{Hm~aGZp*F<^;(|Dukr3B zX>Cn*>7o>+Ntuw51p+)2=;Orc(_UnOGgd1g%d-v*?1puhw|2R^FNN5RY`W+mlUFU_ zg#OSBE80RfA)yW~ogC2~J9fRX$z`c`_emjJ8XHdP(GBoAdwq)Pggw-?52=!{9yeC- zQQ@p1f^#k%^=!Q0IN>bKfHw(;AG}pKbr5`kaQzQ(>MZqlw1Bl#mTAC=n>9}GT7kJQ z7f!sm|CfOEQ*i1ubs71ri<-<@MT8&jtVgrH2>-bPlXH!imd^`EC(?DdaMrQGSqnvf z!agkb?evTLRRY!|apyu4v(K%fi5K_V1+-J(Kk)D;gu{>fa{@~*>zb_N;?DW+<~~L^ zy5T-UIJ$u^68@eLM=#byN#|<0TYA?EHyxf8ZfR)@?L!zIbmnXWkfd%fv&kdNA?COR2;o+dgzmRd`c}n(TS0 zOk3m92DQWlvnx*G_~PK^?wsA*>bK{Gw?Mrb_Krk%c%uXj3HfIaZ36bEjA6S(_>0>S z0`eIgTT%wVj}K|^nF7irVJXYxAvpO<83X6BGKma;d;!Qu6}6y@QMSNwho7=AbohoL z`oHzrYJsg5*zy+mSnt4OHJhLB+Oo}Nu*oELAE;|KyQ^>g`l3(1`pAhtKIP}%J^8fl zU$}9byQ`jjM>zWE$#kbWwGX4SOMNOei$TMiXFE<)Cfys|gEOxumF9MIU47cDtN3Va zBg$Oeop$;9WJ^y6UDyR&qnqf?<{HBrZ|oYod^paj?bdZWEj``IWj(s2DxrNZq{B;w z;z{IsBZqlubr2)6F45h(DsWR@RF_|=zn@5Z-nx%bw>Wl3E(O(mr}l*U#h!y3gKfk? zH#eq~s<5x$m`Qn|qhR!6BPtBDK%|q3?V<-<4DUo-q*Q@nct~QrTc!fbOkvG@!b|$-% zxyUJA=pvuybtx5`I^7WEFwdvAvn89Z&$b4cKp|f4mp>92FOw^Zi>TdIRk*XbF@{;r zh8asLi6e9tiq^aH?EXsTc--pbaf zi$+uJ%nj&H((Yb&*M_L_BsLmc>48~>hQ4-m%iYO>gdr21pl&t zaUMM9$eq3(?)3t2`i=A@>4$!s)kyzbZgac<9^0PrTcyBTD}l_l4pIhoA4>;Q{9xea1(`d%6I9 z2)nlzmP<7m(;(+l;x{>;7mf_zV&SG+o%l&3{IiuVMHk3_uMp!|A|A8JC*==+t>9R> zV+X>v3pf4wb{;+9TO%AE;_VfVox#_6VF!ep-IymZIn~k!8Nl-j%kLP$J3@Ex&v;?) zRk|3XA%8b7?CW0GC&Xj+oG2ds59C&c_!!Z5NT!vaBjvuk+_1%WXsa7#1!04S5h zWt?`Hx;j=cPB2R_Td-WPLhydUBmpw21v5RIGBdR5+9CSC_1S8Htrpm7fvpzUYJvYK z3tV#Sz?91Vsn_hZWhcmN#=oX6*W1;d?Z_p%R`u4@raQ8^RQIaRe6(8s^*NV3_S6>| z{4sd)$uId%DT!}``$39U2N zC*9h#rYFk!&kt6vi+r0k;gaa?$(0XV@GXR_*C=;wa$awDGVgTLFupz2QQy#9-(0Kz zh53=Zh(d5rG2gi$wV|%AC$}~k{xJK&(sEnim~W`7PqnwFlA88QcP27Rds@;i)phmx zL_=K^qj1(?7A~%>TU*u8Z)iAU@1M3UYN+QQnR6?oG7~OUvhZsb|5!@`~&PL4pRA689|~aa{Z>0 zDyYp?a|*RGsw@R3N(cp_;NWI_yfyv8s(-Ym&zuc?b9J`WZdvh4F(uv;XXk)V<_;+!c8B}zO=AklLCz67(bmS+~WOU z=uX&q9)F{7#x1xXCERRvyoV<}oH-kGL;kJ8;Rnx(hjATp`h+vK13z83*aDop;w@bt zlOy9&!d@zO#$)i`EZl5zj~AAC2*!-?+$-F4=G;w-_j!;1Md7AH)v(Bh?-5R!K+b!G zGbRQr@_(>yWk8(g-iMLuXLclopK*0>bT)`*-b|ozQ#tWa+34k(lgv)2cIB7U+@D2%nuNkrHwH?`cD!tW@oHV8sTBSfw>jpgJ#ZPnt*tb$M~Q4!I?)v z5AZ_;=mXAt4mPMzsBdr*&-2RnLFAafhXcfAHMB4*S#r-+JNpW1p$|%P`l|@&fC{phcNxEx9Ed z9UiV1_{7xEtFU(CJdHd?-8`)}I7ioc2nl*L`7S9I((WvRkZ5kzq<)Co>Sahei4s`b z*2Y2`%Xd!vaxJ`Mgj(G6n?x>BSFlIh?PBE7+6R}-1@@WG8diiwyY94TvP4@O*Crb~ zC19Qwt|FJEdL1?{YHDxKC%c8ZvMvPOEih^T71V zzTOYc*|IgePE|3g$B$nA=~pjmOuY2tx*OVW=zL)HQ6F6M(WC>7M?a77em8X+=SHYvr1-3{Ru6i~$X_YUV>s_4a>Poh;*)zX1)s@W0_6CH@yYamX zjTzPRY?p0iC^uj`cE*(1by})RwWnIOx|v_TN~@go?%C>^r?}ZeHK1CML0DiKUmjdo&*IEI*gqlK;-dIa^zlayMZ=2Pt-=XQmHn&$negz7JK;Yrz>T8F(?4-wT4mq5{>+vwR%{9{ zoRm^~-HSiyy!wv&FTZQU{(t&@?Ow;GyB1f?c4bG5;Vx}&tMt-jGPgX-Uy4?uC9AzB z8o9ZR(0NQ|57|0K1X+RUF%?PY7qeh0vWNZvtpoTp0W!dO%)H(W<`9VGNz#^qUpKbHBc{?X+)A`^q~SYUXbL;_P?sE5$cT#Wy4!sVyA z%)U?MuA8*S<-YOf6b4d>p2)QuqfA<{9U|FwqDUlhFiy^Aa9_;!7GjT59NE}njQo6S zaB2akkZ^+vU!(E`Zj`I;EC#-GcQ@vu3n_A(&VrE^oW;S{v}oqvF6!U1X!lS>ag?5a zf(*Wt_D@uBU*M*^JdIKq-J#>|RVlu?44pX`HTf0arB`cmwoC3m02~ikV zQg9>Rxm}5J@83RFnvTuMxty%;tjXC1rRlc%<=EYE#d&mP$`^kgbNCB@C+C^x>(6;jGJJ)R~3@zMT5uMBDZ45=2R1jys57OWG{o8qY!oF_mwPqpAe0k2J-YQfb4 z>-|B0SwI?x3PuRNFF;Qo()y&p;)8x(fd249zag-$#3FktKqfH z1HDi*=^Y-@E4=Vy<;GqW-cvl#eCuHHq0bRbSRQD;W2p)#M_(cuJM-ZGInlnnyF}YN z6aVjsw)}>EP_!@a=c4Hj@!^Tc4hxQ7wuBghtY^K(WZ~1POLj*<%)bVmtU#F z`qG^%Ycf3@$?laJI3|-|Yx0S9V zSK|%yYqVt1tr>zsM`qa6gHOG^`NmntPFVQU%SJ8z=)J$VzwJw@aaDcc7lDI}08EVA zj_gHX9(hBwuT{eU{nf5NeK}&zZkKT;uho})gZpX9XpoRyryYukTuNJt>2jsyZ9!^V zT5`#?DKTm^9-O5z^AP4# z(AUihlt^-4(Umy6r5xMP$OK6Vi#~i!=8~D#BsT19N%xj=xV`0#ngYrt+e*BT)`C?q z{!$mc;JH-#7YH{+Q6LNHWzwSBE7J7l7l@|TQX>|7_;YGLsEO1TY6mrnns&H=7K2)N zj)2+@{@(&>9{7C%YAyJq0$Kp@R|T{H;5$k_Ee$v=0=1V~S}pf#{o+1XxbYt&oSKUJ z$-*tJ%Y~yO?lT4GOsjFH+>wj>L;A zckHUDgI0~!7aSQIdIx5yMH*<|vMrMLN%zuRN}ro*+RcVmYLS*+G4i>4Up?xIyB}#e zVDAeaJH6(>Z!NFtbgfwwl#jXRr?cyVikM9|b@8dP`?daUUZfqreXo zAOoC2XklwToN(|UXORG1;ODV|ae{C%9Uck<1;h%6Unr1I!5}>TqyZc`=dB+&xUz4} zWpDk!*7ZI5Fr!8dtD1Pdg$}Bjx-y+=;VqQcM7ij3V>%7_Zn;NY0><6L4Y}G$9}1EVGn^qsRCY%;7tM=XYdvQjWu{)z>5t0TmfBI@GAwh1K>9a zjQ=jr{ZopUHesyb2cG*ch0}f!_E`Zh1MuNP-HQl(H{rZEz!^3f|3Shnt_BZ3TDa+- z^7wl_oZ%5|&j`WCLYtu5Wpbx|#Qiqmmd5W1x3oVgoEH^5A5>V{G5rjAP41>ApNyM) zYx}VIZgMvsJ|8zd+3s%c^MzZwE)hL)%VXpdanJwdbS*cjBRpVJkWcyzHw5 zqXlCG;{*o?D4XcW5Don{>^m@%PtRv=;TON_u-0hT5T6Wr@BBTcO?ZCS3tpZw{I(yy z+J9gA@!LL|xuZ(UfcfqudyE3^c`1GK*qzj&BCJTHlj{rXYWkF@vrC_+@l{dbn2E-4 z7Y?q}3wx-q*q?mBuGkLSf@3Re3_V={5BQ-1Y-oJsB{+|j9rBHMa3{~7mvGQ#l=^Bq9?WB!MCL0`%%kDDGlFFcIV3!s4|&{!O1`jJxf3( zz_?U?Dh9?pT0rH6cccJbpizK3JUo_pR3cB@s@4vr>MtQ+giri7(gGbzO%bl0p1!qdU6*rTtaqJO(m zRsV&?9K?J$o55=PcB$weQL4q}8qD?Eld7kge5xgtPIdRzB-bZfd+3vIs=HrctZ`)m zyA1nN-~JW-hre}=!Ym}~vKf8B-Kh~@x+amyWV?e_Bd^?>vC-Tk*MgvIxlGs8MnO?< z=*=fp^tHZq{WM$EonMv6b*-E_WoFIHnuFuRA;6*R4cGYnycq#42q{ zS~+z_&1^+oGA5j{(pZ9Gv0LA`ivFg5hZ@mqPlpF+=+@lb)0WECP>YsYYE)!8oxO%V z);Fr6f5E?3(PG^+8=ObehD=8)6YLim_S?Rp75&5Cx{~2=y@eLueZwA1Fi($XBZaDz zH^|VR^i=e%`KL8_lhX>rzVd;Jz7PDfu@*OXOtEjOr3HodcQI!mxGYRD6P@2=<{|DRyUc|Gk~{|Rc!kiYirQPDs7KS8V7 zF3q!R5We1->(ar74PE+TscuzLXLRNmJiLvKOY{yeH*_8HwZ45S`VaoMnl94N^)j@% zIMo_di9hu1UeQ14KSa5@La%hlohMiH^^{R7*x~%I7z~yf`MF`~ZqFN!-H zsQ&8)p>50^3>`Lhi2iSVwpw5i3w-kEfkSi`;%%k3J;r+t|GM2C-l`jIi;kunI=%6t zrNfS&eCbCHKmU7 zl!f*0*DAg9ioJuR*LK(Xw>CKm#LJyeaI%9CEi&5a$Q>!TM>{N?54!+yWoN3}#kpR; z$gn+zj?Zy%?+o!^y)NNdNhLJz%$``6Mz^EX?FYtwU7^*mJ96078rPYeqcqtrQ8dIZ=;L+}uMT`OL21rt zS2S8uhS+;aiNN-_b?G0WZMSq@u4qoY$Y&okE`)PCSKZ%rfs8fspGq*xIr7BS63Us|rm7Uh4lyZgLI^^PVjucznGapJy z{2r)$aB~pcE*~AQ+o9|J7N^D4z3KW=!C|y&>lAvuzO9_1ZwRq0_lBlqOWXZTD%MN? zbdXcjomIl}qW_goQz(q}34n)R)-+hl0B50#^$vi=EEX$S2Vq@=#Yh$$@xzTpP1aN3 zWBmi(83K4&3t>%Vj=&aX3A;c*c-CUZ2o?)iGeO<~f)xT5Eukj~k^=POnI^~!kjDdk zx`6OJ&}Ruq2k}E+B%nXW!(!bP0@iVOpuZqsK@NWCI|QVM=ODqo0$baG{+F0s|wE&v*LO&xw9?v0yKMGizB7W#M1jvJauV6bN?+j^dxsPbl$HRi- z7|~{L=mSMtdJhvlJM>3i=((aT{<)&-MPqCI41sPG!ul9bt$=g+2+IR~T+E+^eUpcO zXGoJ?=#xDEdeJ?iExpiZiN^js4T1|je&`R2Mix3ivoQdB@KBaGvyc48ANm&2mLH9x z*}3P_e2-3gdGP_@G~i@w3^0@WhY*Fd^gz&yj-dL|gpO?-ot@ zQLw;&Z_!qM7s+j;Xv;t7$)b^`pJ1ccOd%$3iQH;MTX<;B)c5_DizYrE{JA5+(hq&2 zXv;t7R?(z~2Ra=KpA&8A!=Lm1tiC`Gh&KB{UnrXV`lD#4$_AV>_*y&k2I4GcqpI5Nj}iVfwOUfdO;h3`$z%d zsk4M3Ec8wS((^6>cCQu?#|Q!OOclTn5B>mgk<(vVt~4zib#Gp1lR=M%_p5d;#G|Bfm8Q!qZkFe^f}1(J%5QhBRr0wv7;zgrf&- zAo|m`5g%~?*orXJ9c=O*0eT!DAl&%ymrX6?#bN>S_Yj~5`G$UMn1E&@B>t@BBX6_- zISm5j9w>l+o&f$S0@76%{x*ic69n+h6`<>p0?J0M06Fynv@7pu$}T^x?f1vt`S3Z<&AE2hsZ|5vf#xR6Kc6Ws z%KP*;{BlxfA9;>!{?MYbRxazZUA=6f)P|F_`cPQs@@TPv!<6E5(a}enFG?pUpq`f1Tj&X_%zOw^Pt%XK;dN_!kb)5h{7Mox><(c($?`bM2wR%fF<89?5!w&h-II@z1p@`s)tO*JEi4Tg zofp=cY*R^F!OcuX_9{;l>sH_?R&2h$31OEmap+{NbPt=+*(rg8BBKB(x`J9|<2T0w z7x`~emnH2Odb|-Exv-r9m%__x*w%$*8VeNr_Ue<`iWBVss|yz# zBje}o>~N(fa^<8B|0MA+S0u5pJFqbSUUEu;HvEtvohP2kxRVp2GZc=~83#?d#i>kB zzA2Mz%=4j-zAoaWU=KS9_tKk)mliJ+UOc=MdEuTHy7Qvy(H~x%V+G3v@bIF!GQ@eg zz7gWQ{E^3tkB$W|BVNqN91!r*2cIOF$VO(nfQ}3@*9v&)fqy|jT*$viK*s=lm!XcI zxT=N25B~8`PvpK|e~6dP(A3bKxUThh&hYT1!g)Euf4gwv=iyNED*Y1nrvlv3|4|Qr zTDYZgj`(>g!+)=E>~?_QH^Q+8osAz0rxON_Y-|sIo!rrZjuRhyf)m#q;TA8unDNJ* zhwwa~S6FzE^G)G&0MMyL{B*eB=P+`!|HYmh4$H!Z@O)i3c>(@IkN8Qa!OuZ??_YzK-#GQk%C`;fRo=skWHwrgfo#63ggD(SFI7~nX zZ=qnSz&g6vca&hXV1j^7;voV$g>wb9f;vIHpg}NSaD;$Pr?NcIXS{x?$AHuhI^J~V z=Ls4Gg{(oUMOANDeO zoN#z&3Fw@IR|_^AHE?KU|84{OZrN^YeJ-(1J)yFjk>}P`KC^VM)Olmh$+es{{C`LE zzWSRvRg2tam@u5)5!qaDEN1X$zAi7+S4sMiq=3v1z6I0wVDk&_ifH>d1=b!KdMXHw z0tTbeppl}Gk%{~Q7}$8oK=|ONqEVp1X<*<5CsW8Ya0;b`6w?HOet6b-(%`RRv8YWi=f97AFx-Ikms`G|A({V3r zr(HVap}`%j9!-BxC(mkUpuTm~KCI3K$ECU)CZsmkx=I6&2y4(+;k^+_Xva)%%Jt{G zz8uZ1J=6?J9i@_AvWZs}h8-n<7o29@GGwiAN-kk&Mk(3woFTvsu$lvYa!7-Bg*b8X zSfLxv+CuH1knoG2)hzsxXEl`qg3eZxj2<@huS16aL4USB|1VkK zn%aT6`dIqgYfIXRx4pp(c6WBBZM>As6;}8!`}p{u-!*^H`UkH3;pvknUAt;|<7GcS zP_G2HM$7tKOR&Dm3Y-(Gz z<<<^a+bdqn#NF0T*M@Pis@b6sk)Eui4R#(<6rS}xJK3n%)vYG7GRQsw*5_<>-mQA4 z!u2`U8Ch3k?Nu#C%g1&ZI9%PHoA=)G8NNhkj%i}4_|y2I(-%L!sA;!_`~Li{vo1Pe z+zab3`P9{aJ7POEW2}I(JHV~!w~J<#nOztg+tsl#zv%3&jd4Zm!^G_G3~}qotevNo zE3B*98Z9fzti+b{bL;DEL4LD4f)dB7aYvAEtUIp?R)X0_;YxIAi6U=ZP7?#W3ZfNw z{IXg@X2(k$k4uXCBguArxO!lcC^fA7Ms>)Yq7~I1(hyk(chl1H%+i8$m znIHAvUx~*;@jP)mHPG4RtlLw->U}wj=T-7J&&~GG6t@c2R#4mh+T-?K_%7u&p#&D^ z#HP<$i_XX^-F4#jnYh2U+oW8oia96~rTbC*{U?;L=zOxM6h<|CFb>L?or<@4yG2U( zkg(f>y)|yf4BC?S?5^VdLeBXo+P$?sCdK*Z@7N%2Vy9e1ds0fvv+v7Z6n1C$srTiW zFLHUaxYFTvuta-RY_|zgO5Zr~eI)ECDb?zq>0B{t*n@#tzUo2yCn|QutRxn)sma_vlf=ek?7&ib12;LCT z=f|Is_%I=sex^?L5N+v$9xvMTVLUTSG`8V^K3p_*;(=Z&n)LEOpCH=wfo6XNG|zNF zw`iMnfIdU?JMq*5&3SS@{}rMctMK4|o#=N3l%u~Ynz0QJ{`ZKc4Ddid5Qf)JK>s47 z@n<&T*Ps=E&rhb8>8Yb@4!CTn0P3Q$RiHYLEfS-KsvA`_9Kt6 z1JmEs;R6Nu6BhZnA&)wN8-B#MrvO>hJ>1ZhIFLo$gvE`zgAUXg+$Iaq2mO&l-lGe) zBMsDTd)BtS20Kzy`0 z_%l_B9@PTmQfA;EDL}^w0`!_FAimuN$fph<$7biI2}cjg26Acy=tJ2c9A%P+w+U~A zO`m=0zlU9zXcuHO`r_@w&eYN|TdB+7yxDLsBV#`LN4${+lNDl2K?d44dHg+QcH%fhTp1=H^l{UnIxoJY4L9ah0>urs|WEXglBG?g(c) zirx6811r%oSeU3L74w$*vy0yCt@mT#>jf-1SUOAn%cXF0S^}q0IZnSla9ny=GL>?eRR@0ylpAHTi+sIWh%V&~Z3S~FEF>m!;L;GeJuK$^hfEt(#OJ|e(8G!`18QqD4;LK1HD{8So(p`#|nspK0N)_ zguwdr^czHlI6=-ovV9}oT2aiZz}^FSXG@*BNG zH1T00{M$s+M@C=zv5YZI-XWp~M4SH5=ZR+gpr2ry17k|;%tPLMTQv6Ofo6*fvU#8x zQ_^qefo9u_#RvTt(N-RycT_^rmxnD0qeSD+1I?I_azY%?OFjR&qPd^m>e_ zJ^wnv$RjzZT8- z2Y={)gtX9LE6ctrNM_IZa+@XE?6W}h648X`fnF2y?-OnLgZ~Ahtvo@0PPF9*^fyHB zqhB8AM@0Mb|03G#jsLc)*j9g_0mg@6Szo~+e0_qepDC@{PR6zbx7SI8k65nA0 z!p#++H?q+Uofu2whd#t%V{5_@2Rz#fNE^D59^wE;XZ)}^GDZlHOWKJaTSF5kfNbI+ zj|o3X0Pk!8e2lf>s}W#lbO1&P2#5WN4?pB%JM^0%z-^)c{^#`$Qv}32O+a|sIONfGlimga{xbxmZKeRZwF2bK5ugYA5H{x_ zOvRA9hU_$ShcVmF6Y~G7=h7hq^_BfAt}p#A{mpN6;RvrcbL3ZH7jEhCS~~N&H8{X+ zMK{OHrToLdyWV~9`cv-9K3TtbhZRF#@2Wofw=-|9dThIbH2>f(|72rYAth{^K-IGps>lpLibT-lE&Q%OHhZDy_owv3q z(UWP_M*|@T&LNlQqL^cn0u`M;`50qxqhl(;2O93|!hFbF=lS5I-O(~myRLXtYCOXi z4gpmfGw$H-wc2=Io9oC235z>&kZY7}+LtYcbeITj+e>QKQgkarF|!Wi4)*z#xOQphgR1iYk&-5@;%ts%#=rRypuBoGhx|Id0 z3Jx!r*UJoN8n5=aSc3d2PL!E`THqI!Fh992k9#sj8Ra(Nm28MBl=6U?!X2Hqh}o>< z_^pmAL{UovU!fu3Eou)t>}(S~Z_j(&cK32Fr2k{sT?$ayCG_<4)+R{fmhySJh) zZ1miJ=7p^gkLk&VcY0CCt}ek<*Yz z!~;&c_%H%F@*dJCoN(Z$iHDv6^hLtWJ_+%l13XuUa^U%_-1R@`+3~>vX{;9HWH-X% zccyUMz^@ffj|cn@5{8T*ZsF*R-FUDY&y`|CXP#4qqdVz(OaMP}=zW8erw<7Ti@V|U za_I4x{cn<|=}AwY9uNHY38yCr{-kj13I2k|^Ec0Ztvu0(r$a!`it@nC)#MLhcTl=0 zGo)*jaBKp;UVxq9$FArwUvQp)e8+uz2|y-tJ|i&x8InUeK@O{>=p4utjxE8t@ta=o zPJ%lH@F4R@@gN7D8>J_`KjdRGbQmYF9y+olCg`bRzmbAbg3$tclv4%M1k(ldQ0cW} z>q!D+jTOui&?~0rSTC3>s1?i;P!6z%R0`t34&d~R(HER}sf*|VPB_wz-$()agQFLA zMkcuFgFodQo6;*sclhb?Vq4^r7Se!S@FQLDf+L5p;G_>bfxkmALV)dN3Jwu4I;j)j z2hSV2{-v|AG^q@HuhjYsscrhB13Vd z=z~*D&Aml9#gHOp_6Da|^9%n90mYA^Nizu_ezgLM8~8#2Jjms-yh1j5P&BQ08V(OQ z`3oO7WnjZ81GSa?+Yg*vlDAuC7w}R}hPCs(9zSl{Y1e+J`K71!dF7CnV=vkL*I)ZW z*J3Hjs)1WiUZoYEgl33Yowfb3{)(pm;e?Nu?nZL+&ym~+V~v!PfozpB@+p;qxq0jj zWVo3dQ`1^n7LmoYlJN6D)52SIgq{?-lU2~P++;ToMSvEXw*?P0V67MKgoB^BDMrYk zxDp5Yq66Ii&|OzOAiw;lA*i;KJ~l z!bi&9l_4!p=TF^z?q!evzV?bekH2xnv%7qI-0oGch9All1O(yT=UuvbJZ!2oTIo_t znPWV`;s3Sy-b||!v?|*ceu-bW6EE;8gfHSzcfCE;q5JgO3jVe05~<+C+rj*jxnf=o zCK*d>{v)jxH`Q*#d_IqkJGhXvz=b?#2| zAm^6?(~WSr^J{e!9GS?nW*a~1sWsc^L47tpaBlDN%Q@-mS^vZ%o^U& z;h4Di^?dI&V#p4Ef@m_Hhe-*)ZwU zrg!eLdiqCCIrOQ&SM@scC|rFeKQF0M@O6F&lVS6EgL5@-2`BS36H??SI`kyL3;*@6k{FFxezV-&81mec;1OcTQntnC43A|ol?#qQE z8~0TLa*?p)6mH1PhctLXK&i)%$InsZlbiTaW6pZt!2HVo{mvV`Wpg!}Tg%rJA6%}_ zJ$2s9x{oY>@Ve#idg$RN9(e7L&M(~X$C^(bRrTkvCHDfWhh;~zd#+3xGhf%3$#bX- zN2<`iCvv(cs@R#6EVw07r%|s>X<9E5!YLB$oB*D$9T#MT&>FCPnMXIF621tIl0rNtIbC)K4jN5)-Mbbsuj zU`-Uk0FWv>Prv{UoQ$XW11Hn1X{8ybx>Fdl0^_0Sr$EsBep6u0!}Y=`V95EE=l%l^ zzeTt;_dgR(a|8eH1jLQZ(*)+;FPt7dJRcJfFE}zR-m8ThztBR#rJ$lSI$3i>0VW>O zMMXglgIdBHAG}lu3xgcO3>FqWHs((yL>A$#BEe7GR^iacbU80E(4g;#FRkCQm1|Kd zb5e~;Yp$2V6E&BojQ#k{YxmiI&V8f)QF-jghdjLhPxpJS>ZReXy(Ca{Qc6Q`t4}r; zxdieGLTfuZa>)*TORQTtYcst%175S@wfV?jld>9DtG2Pqp`{%C4er0F*zlLT<*H*jCRDw&zr>;6V6tjMT+ zIc8Nd$A{UCfriPpf{hzvn6+W9^@ti8y}W{JA-o2M*&BOkP!1A7rI{dL=7$0fKG(zR zgj3jYZxm2jzk^ljiB*d zFCHp8@!l>RoxqtTCob@Z1ZI<8c=)5jX;4TD`oe>)o)wterl?}a_Z3wx$;)9qa0H2B2JYKP_Tl^%YraEps{j}buIi-NG= zVk@|TV=rcc4QIS$IAzRm#y5szo2sEV4B6?r?cTp_Zul$1&J?lr`46-}-_Zk2nyBmB z!Xv%qNnMQ+oQB5HHEyDgF7ErD_}DH7A9Uh(QvJVdUv%t!d%tt}qEXH`ulW7+y-nvdLFZ@Ng-ATbp2n1L_~Mx#PAaWPDQA1@>` ztntzy(wl~7o`4Ds4w#WKGz|^ExSicQuvqi?7q)C!g9k-vS+b)iozN+LcIt~a1Gf66 z*9LYx>zUWjziZ6Z&)+uhkC)a?{&m&U!<>}~T^hJ9(bcUPEBh&oPl7&G@F(g@1ow;w ze`0P8YZK|7g!WTNesX>ACtzEi>P%*PqAS1yA9o63-m&&*KSvlUK*MbrC7qb^BPZ+H zMCy3G95<{g9kDfLL9yydG617?wlZwKQie- zfCGOO*l=kl@lfb-=P*2Q-f#;;H{x9^FdbG3r+0&UwfIRF`rj&`Qh~1)AP=6bfJz8{ zj({N<_@x5U0)CZ%o*no*LY!gkRLRFC$mHuVwle>FXF+RN41|z7w`=<70=f72aScf3%Mwb)ox*n z?oMjci6uHzG}A%$*hAI81eh8#VOBbfB##F_d(LebII^;T)Fq`S?7Xd$vv#6!@$txY z`QV0DH$zqRxu{ReO69Ob$5BE_V(rS5aH}paI|WDLvvX+J8dj-_!7kQVRUO@U-9r?c|1D`Hy&iu2q6D)xuYkt7?olh@TY{s2Y#4v z-WA}_c<%4>+@JT{`O3xk6{OI}ydrl?JGW8r-aw{}4&@ZI$+XonU!WK7HS!D^eaJ&= zz>vlJi*V!@E)76A64VFwR#=Zt}FLG>x*|k__42iX^*1^e*M#ht514% zLe<>D9`2HJnS-m^8=FFT!8BjC%NA=3OS@R#9%|hIBCt563F}yn2@P_cUo1sVSWc2t z$F1-4q?|DXjf?ig5B*+22qrE@HA z`!+9@6SWkW=?=dCD0d9tIlo$b(d`Q=?mPR&onHLxu|Uh9lXG?XB@+3M^cvR?D*V~ zBYXnA=`_Sc#6Qy}4)>uoo8>r|jAIKq{)`W&|GCf`*Pp}C+)<7312Q-=k?Zp~48$&b zEO)p{bc}%=qFH>90;%9=G7iFs=b3XWKHPAy!#263lPfN*EcqJ=OVh|v5Lj>HM`)A_ z=kmrb`E-ZoL6HlT404AO3&!CHb~r<6jE)D}aTEx30i8IM4&Jq*xu%dyE8TGd?$Szk zG+?P_d>YTOGgz0S7O(@2-BNB$Z0#7!0h`E?+inB9r{sbVxs5 zKO_fdVk6QSm*TDrEmw-{7>2>iW1NH16tCTO+^e$;f3a7w7Vg5?O>>mm%HN_&hnI&g z8Xa~Xa5~s@{cxl6Y@K;J+6M~g^5IYC+q!yms2L#56%LBb$H1^a_K(ibN%`;MPxoFcL znn9}X&(bJ%;=%tB(F|gEpg9h}y4}zWJV)TE2bv?}EN`Kwh-RR~13f?He~f7Ifd~JS zMEmk_ql_q;pxZC+z+QCkiN^+eguyNh4Uk6|@)g?y*qCwwFytW3kl|%+RVc~ z@{@t8rEZ>0AsQ`2bF1chx{WG0yD6DX&gWYdQtE^GnmYYrM$BC;z_e6Del43YE5(E& zFvzAMGjdm5zo+}nIZbW^?BPZaK%mo&6WMbZ$IEI*Mapq1E9Mm(UK27 zw$%o!{K{!HQ);HKOs85_W|G}}U97uD+T^&hls9UZZn^N5rW+p~^SN=KXj*l^jQyT$ z|Jg$aRK4mhs&0&5bmDYN)pE})y7u;QFES{J^ zNvr$jAAE#fScooiO>0%ccTn4)Pc(cNcKG_Vk85|gR(j2)wmm$)!Srh^xM&-1j&-ZX zc}Znb5`_v(kyC*y+6ZB?EpP1Wje<%Ixm-49T*$S=*QJw*Oi!1Y&-W@s?K>7C$B{&r z5rA_+6F*WsilpLDED=kW6B)P%w@dZ}`<08u#C=O;N}sN5Ja&SG9;G2lV~FvT7%til zP%Z_9l2t6Y;9Mk~{7AOBx)c`UfN%w`jCki!B-%L@iEZlX?&|3dB(cyI#=t(&F2k(| zS^=R(H5NYa2`DExKnn|o0kupw{kZMvMWH?CZmkBk^mGUHR2w3U-IEwO7RwI4_(Ye8 zq2N^9)&*BO!buSg{uH#aLL0c&k^K%UWI{lO+Q94#wlJCQ(nnfuHNX`Z_Bb!`-aE|u zTc>@o+;7l}oBjds@2`3IQR*-R?{2xDAe_!JJU`MO8<0Ke;V*k(tMu}xqYVFQMMmd; zk$}O8$$Vb4^&4O`neP%#=bo^m^oLG3_^$-Ula@Zn#C@Ho+kkL7>bPGn+y(((5>6)` z_wRb{&k8r0qvU6Hm?4}20{rim{@4qAFCnJ?fl3R56xB#Y@kgc+ZeK12ga|gj-tb^DIdlkD^#sBv+Gtc|ZDVqe9#Q**6B+s7bnR#aB znPe;)HY3s*WTa1x8~UJ(jTF!qr=Na= zfc#fbE^PBlLpew z;F$bo5I#yUS};biw_v1+ zmDAS~Pi0vnOzKFj^1mT@E5o6FjTBVYq0L=)Xn%$ZEM9a&{j_?BzNve(1++JmAL=pn zl{$Kq09_0gz-#rAwq~G!wh4dWeB-QrB!8@pqkV1^z(ZSyOoImPKVa)8^{3zTYhV*J zaP2m|C)W4uc<;_tvlwsqTC#gMaCW|_t6l5KVK!sn^kcWZIRC&|&rf;!*&Rj{-}~TG zyFNbTj#EqS6QK~yjq0|#M4z!zZ&X8JzEmklV<*^7UJ^HZ22d` z?3u&rm2dCQ^PeRdc{YTY(-rulLbAMyR~>Cd5J}4UabaEGUrx?58LV-#I!dl!Th1SA zvRXp?vMw2~|M}-LSQVxel4I4Sk%#%bdq(bF>*+N$(B&)NYn^s^poE+uJiC0oGAH0H zzxKv1SYIny;w#+k;v8FfU8^|#LnW;3b1^)!n|@QQGW;~}D@#x6XJh4Ttz=H0GbyL+ zVMa=J-!8QtbMULXzU834@W=#z*>k|daa?_Gdh~XzKl210oR!-0d0EBy=L^G%zsOPC#dg0S=uo8`LrAUMzqgcLqPF3Furv z(_!fp(8<9tAXzIQY&s^;?+_pp9S}N?y#nOH>@B!LzyJpWeVxE{QUZOae({f?^Ynm# zjt&O;GXhH=^iu-TLwu72F9=LGbgX_Xpo55k{*?f|V4(jlKz`B(Jy-#eehj+e_z7vl z9hwP}A^Ii0DT3XESbPk&#sznwZt%6Q=&c}RaGx&P!iQ$7FyUdKXN!)*J0ZC1$GLNu z)$~uN@pRFqUuYg_v+$tvfnPtales41XF%00+VlhcZqcTH=<7tAJkWQFw)mkxAeyp= zf&P$a^o4=`m}rv^`ZE>othiI|Fu1b?n+~mh9Q~>g(;q!pR^Uw@=z3)g36BW^aLPWv=m@#UGs2$lRiw*2<*KKz+aJb3ejtM`~*xc!7DPI_PQiXoo~#~RCb zM>?NaaWi&$Gjt8>aMiMNS)f^Ew-Q%Qg`02QIvd#&Bw# zLhu7v8~D|dZbNQ9b~M8zz=k+UJsXq##$wBd*W=$dY?IHeO5uiMGwu!Zk^WXUuwt@+ zK`iB@I*0sVoZ&cwuNT0Kc$Zelns+*U5d|_E6O-q>G8d3zT#Z!*X#0~^&kE}tSzCoZjo)@rS+{jdqY$~KLfWD#GcyX)3;`3SDha#)pr_rX3x33%Q&lBeWCapIv7h% z(Kc|oNpy41l9Nk+ylUJpKL5Sj9^3C%H$F1p<|E&lv737mPtK3~Gb_{9wn8JO`I$m- zWu|TBI_(qk-5p(V$=)w^>{Ja(tlLiSk>LoVXS(fl!$%1i27n(SpsNm!iM#o9&9SFD zPnR8FSVI>boNm1h1FSnwHy#`}aJu~On%KLvzGsKaH}hy%yV)C#DU~{_?@s#BRhNEZ z>W8M~Zfd@K%vBHO9`1O&Zo-he!p)8Hrd{v;37lf=Kd}v)t}E#oT_s&R$i+8o)LN{E zqT0hfhxtMrj@y#mtXHH8`I6sM=I=o)=hC=6*VNcdfTeY@_Yiw*l{^;^TiUZhc0p?F z7G5(dw^CWs1+TGPxRoai+pEf0RVlQ4I=H5!Dc6~4v-^ZXGLo^i>!`a!>51s+9>e5< z#ndXgg@|b(GZgG2MKHC*IQm?bI0`vaI2qwKozp6s@wY3CvgenA%k4H4ZpP`S2pGo_ zPPc$Cz;6;Twg>-U_yvDlVDWxmxbeIyoJs-@V|U^O#~psg+T4tQoK&I%15SM0zlS}t z84k~0vZs>5W0ebhitM4m8--J08Q0GcP6L2F1|H000b^`rfS0j4vN7d~uBf#5Lw>8+ zGyqJ=5e9n0A2OmV8Up+w8~nIq2d{#3VUcEV;v#Nv{G$)U(GfU#A#9ajj^sPf*FK|T zb{yRE3t)T`=?$iDyW66d^|RxCoOh!Kz!%Z?rz*!$^sW2u%hh%*@7uv+OEeq$!fq;` z^#M1|&o>z^-*54+Ak*t)#8m!uEvHRN`1}aZFVxxBy7uUU-XJ63bUaeo6Y=9+dWjtO zguA-Onf5b~I_8c0T1Z0ZaUVJjy)snaQ?l?XUDqiT>tFlBr7ZkXzN~kQ6tBnEG-=pk zLsA=U_`W`Umg-R}i;?hg5S6i39CvjXq@4a#x*T0AKA->QV*SH-++H3}dEGF7vF#d{ zG7gkd3gZzF`DQ-K$9k!D%a28;{Qih_NhwES7A7sEN*Brvai@pF(N!FGTw>8=s~g|Z z7xdas!}gr1bbaT&=Pa)ymEriY53zvx_N0;rdvsG-FE-wa#d%P>_Qf2P_0ZgC3tF9i znSG)sotMr_vhgEhq^4d{+WoRH2dT-6T5VvwlpW*gbpqDv`C3XT_8KAd%2A%@Wkl{r zAN*zBiyTDr%*)}*xW{h}p@yPO+PCt&F^+V^Sghb+Jb|C`IkAnEo$_{_m`RDX9o8X zUCEQ?S6@=69Mz@4LL(=A`<~A1Sc~k-dih)|xk7tr{*AZ1^{!R^%!k!_+W1s1Wc4~I zZ>7mkbn0iw;ELLij-yYYpOLMZaG{!#5^R`wvFz0xrk(KgBp$L0Bbe{LFYd%jk2b*?pOjG3BQv zq4(v#FnkXyOC_mKc~bdPKL5q%avK}jQLidDC{i+L(f!=M$9zwL5|^%Fc|N}Ub}bDv zft^lvY|}L@KZ|T*9bYHQ=Ps+iiItlk({UzWM#he;##MpPvhJ;6sisX$#G* zkqzncEgES`=kdK}{T4<_9K9gg^J>YAhq75&;;OmbPBps&`L5BzG0b1_ zW`pS)`jeuO7X$rO(afLe$I-tKg6^T03)q@w^r@mpie_#Hc}^3sHH~>3($^$7R5baa zAN4OKvk;rh$%$?kjeo*FQ*fSW^aH(0aBZN`XPbbRt_d3`2tF*Das&Tr!Na00zt)I; zEYL#L`_oxX(WDoC=O1Z`RnYs0-VSCN+z%E_ei9$_aiYmD>Zv_kPh`!CmM8 z=u0Zx-z%E@K)<-(FIq`(^j-S>aPW`&-GV1YTYb1k^jAe&enNj&wADB0UyDW_M4SBgi#|xS=^J{!Xv;6?Wfku2qOCsRzFsu?M1JV&0xfjF2LyME zw(y`oEZXuL`ccs)5A-vlt^Py5B-+Y5^nZ)C`U*W%nQiHX-b1wIFZ3kQrZ4CtMaSVE zC)(1Fdq#9D?<&!8_~(g^<-J059R8i6?fXM`kBHt?zZmFmh_?KMez}7GPZj*zOPJAk zmVtko=vW^|i;lxvDmsq8y@J0-be#UnMaSv6O>`{p!=mkbK>S}89jEtu74)m3)nqvX z{~tuh^3{*<^^@{~`?jJ@o(DwlF52XQo)q|nx?>mni?;OR-dN$jNOTjlI)TR{A@fylQ|K>Qa9kdwBPc=i(z&)Wsavs?f_eOGi`5Fqbefj&;Z_**T2 z?+yX!J6J&Yiv;MIJ}vq7P66>v5)j^D0^&Pb06)CQ-yk5|!v*jiB_KVg2+&VS0N;24 z?o$QWpCo{9y?}I27hr#~0J%>UkghfX;omC2eU*T4kP$tO5+K+90`z;VfN&oWz_(I> z|GWUX=L#rG^97_~o`8I!?7%-#0RMpkW<;ApZgZ;Wi6!f46}29U&mytpfNv1cciuK%bWgi1#1?<)>XhIK2Y= z9}?)EKp&%D(vu1FS%F@wU;NJz5YG|;@ti9ly!Q%_>pcR(T_zx%CkpU)p8)-|2+;Qh z0^<3A0QVIFV90C0A6A;gB0_5lx;O~9`@m?e#T{nc^d-aR|f%M*qWQ&_yJ9^))SGpfvTDATC z4c$9tcSNSQH>QVoCSS0}XU8A??3bVa?03%o>z=*y&iL~umJRu@t;;To46mQ-#EqPe1nC~hy$#+MwtG$!WO^Gkv0O#EFdRo4yYwD^T z7B}TP?J;(V6E2+68#tM^+}Yu>KBKtHPp`EaNkq2!ExjAduDl{W+CjBePscWO=?R{7 z3$umxT(KxmMV_FZ(bS|9L*|&sl~}mT))LCD?=p)tuqvOa6YmE#revdec8?RXD=)EV z(^jyKlHXazYuXaGalyh&Y30mZhn~ac0X03E>u~?*-^{L-7QIv3ytt$@UhQ)_nisSL zbZt}CWkF+y-iXUJ&(>M8WDnK+Ye1v+E7dkhP1aM2 zD|Mx)uE}ffobR5lUYu*~z;zJ0s#-cf7n-i>hQ*hNT&E(*sPf{X+ zmygG_lK2~EwdwdMT5YuSHd472z7R5B5ODfbV+C&! zbPJ9WkY4a!1&%v@uNQ7Ie@HleUF;8%oEBF$ii;!V^n;Q4Af;Vwj{l=VOrD<#-!0hh z7U}0RvPVw(?!<}Ck>@#uPh7~qOW?unMCk-QPY_HMZh3S>(DQiN-zC53AHTB|*KqwJ zKlA6vgZ--!&x-*cEBh}B$Wz8(qayx{!m+gM9NGV`{2~uw{xIN#vn-1Da}m$J@=HF# z&)taVobvSRNQYdSFDEDS$wG)1-Ey@6_(_7}6~2|R9@!HP_MZ}<6Xbtc5mByM1+Phm zmcQG}p7MiE{vh1!CkYpuv!5Yc{~dmi5Q*)|9Uo&lc_@$4Vra&}?z zJ6eI8&W{ogdLyo5Bb>K7k%zQ(3P&FB)e(M#aQtHbj)=ckI6B0hwGng+eochGH^PsJ z@H>Q?-}@tcuYjYw1(E&u$bMO5KRL2LJ+ePXxBq?q5wHSFwjuI>o(7rAeyj{TD z%o&1=fcz$(X9!3)WtlNO<8|uMK7zplVrsIVjM!vyGnH0&!tKcoYX*3Sp}qm&%LP*e=*-gGCY(HI5)cRVVXoj10e+|x@Zi=gSSf&?G-L%i!9jva z0(dM@VJ+;1Pm#YVC z-npn~%-^u2kZIBwE}e`zaL?ned*I9?N1uGmr-whi<73yo_4AiJH00HAk}mQYJo>SS zre0QSARk7n-p(dq9K}5^9pUa3jlA3Sf`qq^a0b!AvP<&~1&1>ml8k1Y&D>nJt+|Gk zA2g>dOEMw2#?}tqt5fbnk2veOh-M$(yzJ^AnjI{3q3DoYu7!)$-Rz8KUC`O2nJDM% z->8Vt@)*4HEKT;rx9mjh$*?W5i=*-ZEY6mg2k@~cNm`OA`rCDw)hT5=ToCB*_0RgstkFUn0!XOj}o$+v@j@YA7Q@ZiXKwyU_x^gnVhh*^$JT2b?cAUoyU0Pe%NF z>G%R+&lhOxfb&H%e35W^`S9>XH~XS+df(Xh3g{Jr-yon@0)DT+!hcA($?z57e0|_~ zQNY(8{AGdJ|BrCvA0(Mc7d*VZZ1}FijfczB=#{|3(_m(Qig1&&UAW14fpGK&|HTo0 zwQx%>?>U=p|3kRx_8#GUOQY8_QovW8u#uS_6TOL10_@N+dLV7|+>py?dR>G~IT;&p zdVcSm+`GKK=kUv>Y~FUz=HxY(l`W)?B{%38Yjb{0(VYG5GlQlcbU@b+UOahG?@`@9 zKISdwe)8;h&Hv%;Cl9$cG>w6~BCPVDW@lS6dS1oxv}Bqp+N4F}-Y zyr(7k;LXinSBsv=nlxO#ZKH^pq51li2rI&DvZUxz^y#=$1Szhw1Qc;_1^`qC@Ye)X zN!*6XFVzLSB(S2rUidfx{8TaGqIz*Km}*2^T;v5mejfgaNdOhbjwBb)|a7)fw4o8sH(FVowGZ#*3V~ zg5eY`qg`0qyj9lLUwGozA4pGoE^j*E5a830aZ zU{6NQ5Rie`L(?vkxfo~+1(UGgArk;H0A4bzcUp_h&RRU^%@8cW)KIYTaH!UR<+$?CJ zin>)XZKi6nW2x1%71=@(0$EpK<@<&;c%#KQi#X{cX<0B@?OfcY2di4u%hLq=>YSDg zj_b&;>7WahM4TW=5ahlYO3?2_P&z0je2MvTQWXylH27ix)fRlEfTjTaoCyD$a0};h z;WTaV+#{e#0RMu(!vB$Qnj7q`i9rTvfGe6 zpuvX@sC%>i^qYPS^lM;KHPC%x@9FhD1H0e0c^moT_4Yv_*Hlcut=sN!#}Ol*dgkTg z_eanBb=xn0cFXp^ZyK_#|F#-8ZGjouG;0rNCotBAfM36|_q6(+1s~l0Uy!h}3n(F0 z=8L6&^7cvQDD+)Ry8g%B_r7Niy5!d_FMaI0uYTmSKe&7D*Gr!t^5lr*BFp$5OCDph zWoF+Qb(iDJ>1fS$xQ7yvPalg?zA4|v8f=sL!-aL>PM+w!$V`VW4lcNN-j0!%z!3WT zv)Xd%<6AJqnLIQZmZBSZl}_6x+LF6_Eedmx@3rfy1SoS&0!{qZ_JeH|uan9p+a)4d z`L?idpOYPl3(NwK1Kvwv!u&)m@1*DET7$9QRv!a@s`|p5&E^)FCWIHhkGQ4`Pn9=+I3|r>B=0m&0Y}Cvt*|FVklbt$iS1v5OZTb3`e#G!6RY4Cn$Wpoupm3 zai#ytOy#$Q(?4D$_%Gq~hrxLpkfAyKTb=`8ssMY2*L>&jOTV1HG=82A_Km{l$S?Mc zQ@|9)(Si>vUi$UOz&OP0*D77ai>%FxmvD%8 zdxc|i9vWnZ-c>l$2grAefbj|Xc}T$QAozbo_-};6kNr@^Wq6x#?1=ZOfa_<#(TbPZ zNaSA_@!ukxxZr6P5BUYp`4RtHvQolzE?hoM$9dN1aEu2S$qyL$LCdp5_$nT2< zgh?9ils$P%x~2&TADw(h_UH%Nbh$+M`HBk~8CD4=9B}r5VNX5!Z~0}sjNgw4$DZ(a z7Eb*5nJAq60^d<`PSvl18}N07WAd}#0-SL8MXrMcf0ez-hVE_FdZcjlJ6fP%283dVGN%waZRkn+^`AX3Og42@Is`Ay~3qb1$-X?&b*6C6Ktq?tsw+r}c;7035 z%SbqD1bo53&lA8;*tE75j!@@^-+cvyLtMy0%L))4G+`09YyBdeIL*HIpx!1Gm3N(1 zRaE}5r#N0madEF)a$cq3q^h?r4>@_|`u7jJX4k8JG5yKzTV{U#iEY03YLCR`0z&_c z23Nkt7p!sxWUcF$;_JxDucpiEYBerk;#&DQEPwTP^-F=ZLbq1}Eu1t&E?VNs9)F=Y zevOA~cI@&Yk8y1k*AZ?CPtg?xsls(g$V$w10*V&diX9zI%VvrJ9SWl~^r-@hJq9{2AUq7TffYN7sTEsfCv4=gssukp z9vt6b0*GJB{ z=aL0$_IuZgXFCQB*~PbVoM0*ofr@H|MuwE5Su}(pr5Jv#l0)|#+MChFt)7mm)W6{s zS8cGn1Kp4I*M)=+oPN-CmtAq!4_|rDy+2+0!+S>^cgFWGz4Qs%!<8!9B^CepKB;vo zBI%Qsam8Gt%CN#Em1I%~Ocmg$fkK3x6$GKKfG`rWLd!3JI^oAJH2(2>>6yJ}sPJ4n zvr2t$XyHk&;%{L8RI!1HhnBYdnzZoDf9mfor#|)TZ@rLt{ErH9i#}l1%Su|nqnb{G3h1GmbpK3SK2fi>D0UQ?<#N^urHQw7&L(Ur zY05gvPY5O3NYZ0cba5uC)S988m@a}+O_ND)fnEcp{gUtt&KQqhYtpTWJxO--Zm@3= zSU5C1@bI~qB%t{nEjUYn8~iT`7~_Kfmw;v-{O3~rcl0zOY;1eQMdA6C4UE_NgGiNyc20>S`( zDSPbTe=*|6jn)%6WbNc64wDCW@(p+90mcgU7EBNj5BXKgA899V&?PNqrC;pGck^rU z;V+H@8aMQ3Jh40BBO~sy+!lXjyvRhnmHd@_2KqJ7uYrCI z^lPAB1DjC;-6QIHb{VvJ2V?2|FAX;6V;nZPzI&^>p6xcbFgkFgn=%^wh7-5%Y0y`? zhu8J&w1osIpV=7nt?pgxdZun6St^aEft(~C=pIzpQ@`1j)6(Xj!*eo>+AziG#KJnu<+r0YOt@l_o^b5Ct`Uh{7PR`VwuDs0QUp=wc$5^)VZ?5oy{Ml~d z%)c`c&)ze8gW;F?b__T(Xc+96ogqgs(9G~KgM@(w;Ab|+W^$N8!v4ah-dugpnBHld zUyosVJ3Qjr;I{-P%3RaE_iY`+?*2|;&u_f2@94Yk`1k{Fy5(pI+@!TWp2=Z-&o6DD zT%P*iL6i-m}CQ!WtLUowxI?)CJ|9J>PPKNC|dUL+fYI8 zFPaHV4DM_IV!{mr4On(ES;@p4*-u=!5eN3**b#U4vfhUWV_eKFz`50(`8bA$0 z9%=yc5GK>(xMOcMg|Ki#HWi;1)r|G4tBTJXS~KkQs+zq_u01-Iv;NmZN1poVQNKNZ z*XN#p>9zdnuTJQAaLAQmPmlRZ4zStP)-++UB{saa1YUL8sQnkyJ{ z?a3mVRx8ic2mtk(p@uFHf!a|q*@Jq?k|hFG5U^h%z#lj(U^Hsr=LpQ6)e>+TuyF#4 z0XRj1MiKl-0e-ZU4$P z7hV0MPt7}K>;bfNgUvUD=SyrCe3g?@&2O%UOIq!gK)3asC5H84pYxUu=s$*&X zd{*B_wFrg+CfWS4wc6oUA6~1}bWmAElI`?X!W|M>buftYU8Vr1Nhf&Xt?by?H0Kuf zC&cB#e~7&fq7xyk>6@XI;%tL`FgQ~IK2~s)?5X9@m&hI*`%wbAa+3vi(+fN;0$M5T zUl7pBU_U|O(EFz4`JjMS1N(;rv}Cj#UyN|}vRhoY%bu1C{&xz@@0G&wOML$$U@rl! z6vL}uD8Sq31Q|JJ0=D{A_-YncY1>8A`EZF~1IC@5Y(!tkd zn&2P->;LGjOJH&F3(sf){>BK1V~T*ZOcLxX*iV2vdV(K+;{~Gxiqi2TkHmF2x?;}* zZiK-I5}dHedvL-;MsUJLKKv8MM1ig26CZgCA7zDj!N&>g>hY4#%{oba$GOgdbK zqoaXCE+3%({ia_7{Tk@kK)(k1HL!&=aCJxTs`{R-?ri=SjKN;Vd5d&(5e?t}IOP|& z-29(M@3!dvhi4DF>6brgU4Fo;L!PSl{nN-t7^$Z=NiV;sJJ;N3dqE)_iq`I4-O%Q* zQ)A_pr#NQk+-_vOOTu2(tge{L7jy$=6kcLoabhRsuY8h&hd*?{)7aL$$7Wqi8suB%Dc@MYS(NI6|XR_sHnMCc7gToF%{ zlr;Ha43s<)QS($*9}oDHoz_Zbe4_ExjHre)p89Wf2(5okzmxPKY8(x z0A0cJ6~VRve@VaQ_e_OJxgm`|6PP@+gkvw~0cYzE`iG}G$Z&x0-wQ17j#RuBSEF## z`EubF=I@1@Zspa5&o4_Y7S}t3Gv>z6IPrs%mX9f3!bAqfUDE`lODyhuIC7FE{NYYK zl-VhQsejla$3>1n7t`3CF_NRR1I8=b!P(?dgYv0BRs~dtz#$h8(EonZuYrCI z^lPAB1N|D<{2I8r*xRPn`#W2zhW@W-^GAEGNo%J0mQus(82(2KZpo&lzwPvi(=HqP zj+bw)pZJ@X|8m^_+;hQC54v3)h9+&PXmgu0nzR+e@A9f;S9F~1I@`^DF~7;FJ#6@B z)3y&TSIEe|pnqJ@0RKwabm)DBtlJi{I{3=SwbgAA>CmbL7a~-;;Db2WgVyArT1H&* z^4;#@XciZcrh!=2$%c@8ECq4;3m6T^en3`fE}g zY~*3v4;Njuie_8S>(g&0%D30&v%2j3qyBx~G`m!gZ|RK%F`kxqZ2dk-F8}c5s+O)c zTneh?-&Fo`dHeR|%g^hHr_x7xOqJ!TR+=k$YL&f8o=w$f(bXtg1+H9ScPgbc-X3X} zv1DtO-8HT*Q7_iW*FSF#$SxT8Iv(SWSq)8)EI%SSu)qc*d8|<)6Nji z*bxKYu>!`BjPIaN5D-4*ErR6&#+exCWaRr+|L#eFYz%xyIO!;n300J1vbux z{kpZIsW5W=_^!|5Y@4 z!$9w9OVWK1Cz>YGEj<92FP8=fz$N~>^ zod6k-$;R%;0T4GjftNVpBQ4ld2H~M>6V7M>?xY(TDVxYJN&p|SARlFbu*gHwLzyA1 zb@g=vhMm9F!S&Ay={Nlv=+{8M2L2z?K=<6<&ibBhy0_i@L(dtVongmhGV*Mh{80Xz zg9|?^{%pU4&c1&CFMWH|vc^tATobq46dLpFa(!s=v0*`<+5qFyQ< zcFr~LeAj}*zB_cp3D2$`)3p0@Sw2ty%z-L@#(@tShA)?Wz4)~b0XQE?>rg@SQ8v{< z^MU4rh=B(1kDBqzN1J%yG53pR_IA|wOk98F=2vxcsad!x&EAAaw0(6~>BR>h+WCq5 zPq^au$1ESWU-90_ubnE{V1$ z+X#J>06zGk=L)Pe5$*2lh+lXvJGZyJzGwXP zD>i>Aik^#g56y<#+mb@`i><%#%o)$@_le)H+UBX38;%&Z|M)9PMWvODE-Axu8pU&O zA$Jl|RG80T{;H^vVovtV3Dp|y`k682y_f?bG(U^xXQnc4{;S|-NLu9TXHJNZSr2^V zT#>OEFUHFFVIG5`#GDrM3^t2pb7fYLTExLzjLnwSnkgep#?6Fia}|BfjF~)0&nzCJ z|2Ao4ol76HT(xILIO^CX9?}%c6x*Xw3 z-<=a^K1+=E)(dD@FpM296_`BGw+Lu-2oL&B0pm^#W5EXnG5u%-{gi0@W8nX)0C@=y z`nv+sf#H+-Yk~1Y|3P5#LH|Wy>4hGyfM~=q(7fzR`Z3UBL|a}!?(GaYW-N|@ zK0&ml2l`aead^y8qc%i7t~pd%mpMK1D+_(=l|I%%`=K_gFC*r9Xg2pInp9_0l8 z@DLtu@Y=iqdBKMYUc$4F1vq^8AzsG&gio500bOHH*?^ZkfTnEmOPttKHVB9G;m_h? zUO=f`9ZunJYREt55-if!UgqXHa>bR|=G4YL{=$8sxr|=$*2_9g!BcYFhkbBuI#y+8 zeDn}wA&SYKAez;d&2)5i&ebKUT?O|7m$_J^$YpjGEq1f?dQ`Pj_2?E{pC)qIV@Xiu0+my#Xyx|) z2xZJ@!VwoT7bISbRkVr}`=zE-=iC6QN8OC|4r@y=AtV-M3i`{ZHN z3a%gpUL!P(DLGH+{FPHF7y02B62#vaj9qy8s&Ph(PG!cW(j_qDaH58o_5#H=t^$`? zB>55BntIGG{Gvp&N>8);B9@9*R+`J2(8jdIwE7ZRCH|^fQFiM3mj^4F(Z)GZJK7jp z%~)rs%Mw#wb)CY@DUrqyOJ(dokq=91X^jA}PK1pE!NCGg@~S*U*L;>Wxt_7ISuGEy z(zQBF$rHD_X`sQO+DCN^6+Cgv>%&WmQ7xq;j^zO-)@7ml*4Kqv#_kJqjo`gQ4c@X~ zeaqm2^=+_2LnG{QUU1V#Jgt>cGnXD?m{rK?1!Y$T(0x#1LhF>nd~Ov|KwdD;Jtyl= zq3kp`I?g+((@(cbLI;o4y8GJooTN^*_(LzrvxBd=KB)i0IfQlUu+k5HN${dNtMpYb z5xf%N^jqosV&AR~G5u}u^CSF1(fb7Z59)V(!0%G$n7;5ef-ZHC>04hQm?)s1PB=#j z=#zu*q)xxZ#XDxijr~=M%Vhhb!a;`52!<&@`u*Uq2q#SN*Mu{s1iwRm>9Z5ge+Vr6 zQ-mWA_7^Ek`tcVC9uYq}!Tw9Kq)(6h_edx3V2>V6{@pczG5KGUJ>vj)&J-{f0N+|X zW`Cu^VN8MjhZP{>6ymsB42)GS5G)iA>3UIcjqFM91%m$`?s3LUmr1eMgU^*cVS=v` zPF&z077t;9e<8wOi2S}H968~+N%Dwv>3vu@Iv<6b6k_3@BL?i@-&Xb({t3d-5B8&! zAi^PyV#QK71%YT4BYrD;PYbtn{Wyd} znEML1`ob$SN~ZJsXW3hruP8uE@4!$m@Vkc?EWK}z?8gf?zuPEG)5EmL{?^Fv;j*`Q z8-<(v-;iI4;pDkmh{d&|aIv|3{EPCGbX_9&p>WC)_%Y%EM_0emBnI+hzo!ZS;m{Ug zCX0p-dW70IMd|o{qX`iBJ}VfjOhP7jrV6KAf}bLM&w$SnZtdN}D(E6zI9&=~O_;00 zYa_pxMShnmF*fIRgk-R`Y>9Bn0dlVrZf)iHkv;EqA}2ie3P)d#Uov3-qTpQNlsWK2 zgcCkE?#%C?BU!sNg5M&-^zcRD}P#V5am;-oyVzDT;X>@E;1d^!`~gAV2m8s^D3Ae;4uaMy-{Dp=!iUhu@dI z<^5Y_Z#)MIml!V0trd>Mb2$5ltZdDVc#fBxrrV{mC+*0yO!lUqcG*)Nu)ie2?-6eC zelEiQDA_D6FUsD+*+cS}Y)d7N$@WUb^Jn4acco-7nMbG&SbbhCd(*>Z!mVzM7mwLb zQe5_3&nhm{`QZ`IV&TI>x=s~t`E`%Nq+XETj|(@QJT2V9d|rZ$mOJK$vNxHBDNjwF zb&8kvf^d$KJcie)a9X@M#cMj;R`wQ7x9kl+PJT^?7b#5B;d>&Uk&)lKWN+b5lfCgj z7}+n6!n{Ud8vm!nV{$$r+;lQi;g}AWMq!?#z$ri12tFm9kf#?2z9bwSf{&F>EX>If zE+F_?`R(_roZuOC~ zhNhqTD1UbsZsqd_;&)4piWQ} zGzyeNC)3*lj%@n{J7h$bM+A=wJ}uze@MQu1El%P)OF-C`p6?2mYFxg3OTRx8bPC`h zjmS(Iq0#;K1jL0r-w}{@@b3#A3iuE7`&ht#tY35j&rbyC2K=W2!UF%f0G;n9xK?nd z;KPE-^gJ#*()4YCispcBL66`J}J{Jt&V-TECL;Rgr2N52yy{E&cOsNVx4{Lp}te+NbQVF4#k+avspfPYTE zBLjY!eh&{g`Sp1LX+UqJ;j4mr!4SdSf_nt_3hom;DEO4%D}v_)dkaV-elvm{0!}!D zyRoo7DIN>&8R1_O5biO8odqV-?ZPX=yIFR(3T_kJA*dy5U*TuPzq_C^{4dHbmihI> z@df#PQt%}K`iaxCNc39;aeNPmCQTcQ^ZnwfOxp)!_aOoKVQJh@{3nTTw4gHnPsr|H zA;U)$&c_803pPcbnc^EKFnMkee!Bpj^d-}Ea=Tt|lb|wRHm0N3E8hW%W1`^o$hV#N zt=-(5vQAOFqbg*r7d=FTA=L=;3d)#B0Zx>B^ zD5sVAP8j$huJ;S9UYr^1smqkdX9Tn@ze|Ou9^dm4q5_E``H?B+R3}f?Nc8O-)E=x9PBY(V&x_Ybh)}id~tY5y+81Om)UmEP_!H*DNh6(l-)C>5M zLi2^UaE1#%P_Tml1I-teaNvjL>uH}3!ew-dJqDVu(smFs(5nR|8}vH_#EXFjb`%i) zn*_-1zEt`}4rE2Xtptn`@e9!F#Er1&aRBfT9(KsovsZ7izGqU;=*?fk8y7UN09w%g z5$z*tn5#`!;oS*)c;@gc{%6-|x6Js>%fGp9&yJgRKjFZo-{?XSY;)x@0g3{ff&G?g z{>Fs?HDO3Ds=&lJcBs)*4-KF?%S!0(Q+o^b-RE~7yZKcVzrwTan1RbaJNB_dw*T?$ zzx=elVa*e_zV&WIjg#!3azSVe2_qpGa8n3&fR*vDp51%ake*T9H=a?ILTv-cH0#p% zjlH6>mW^r+*|nu?M=`e|$KtlAY*QB-2bNE3*kA9AwB=TmzcVs*xp@nW4bAzIZmI~I z?sc>OPlrBz!m-o0zkdC9$6os5`R5&Q#ZO+`Wyse@xxH`6CNrW~+`P&?AkXFrR^-Dn zyj?UIHtdAmYq4#z2gTg{x_z6TU~gKLErd-MK1B=jxsFoUf0wT6FU%Hf8nItB)YwTE^mu3jfZxTtJJeKTCERQU)PGd~1(r8n=intSpAV5OLQY4nK zDC|&KXWC1pHSwGa0wjp-%WxKn80A!Lo{;B$10o)hojheknqg(uK4^Y(8;2d6M@hvIVEhutAE4 zBNpY?Sa6A&6NE?-B1v?$O`7s*H%q>EDa$o&-BFcp>M9hn9Zl<^8Xgp*4X(4ZZP`|B z3}WAvZF;S;LxE|}%1Qt`1|!>e-)Cy=6Zs!_8w%NH>$+LK6W~#>$F+=3XceS-e z1-WX6Yt;tV#KLy+p#jUZ5Rz#zCecw$CsjDIEJM+TzKLCQ2L|h8#*kA7|I{7O5dDAO z^see%Q{S`f;(yhN-|!W;Cx0^0X7S}y_2k&}>aM`_<;iP34YTv5J`==xOFPP{F^Chofob108>y zj{#7@^;XMihE)vF{82HJv?#jENtbhS)|Nc(@@;s?Ll+Md4}Y+Gi@=6J&?5y5S?D4% zOqe2|bBUqP%mS13lcA5Spy!Cj9|m`ZKummMpfdu7E*R*dAP#Sx=r}%j;HR5PkDo3r zLmlK}=)^Dvet>WQ(!r1hIq=U=h%{2EaU(q3E-Lk|uJ4)u&V8zSyKng2YU+Hr$GhE& zQu)sC;%2cS*hf3plY^({JvyQL{kwjB{$GzMd}+Yr!!Pdq=(l%6n+&x%ZphHx50?GV z*h(@-G|y65qI9OmHYxWEnmGz+7f?~68ArvXm-0`;D1A4N+_$eEdTkJ8=M+vMPLN5|nIfOn*z%Pbh zfbb}X{^Q{7kj=^=Ws3OWrJMoS5ienb2#e*YF2YNuV320r2GR`R5nExvrg zH~u8i8dT(2FcIJ@RtVH7p(LY ztQC`5p>S^>MYSpTqChgcWA@Ezko~ODO1U%#`xQ9H@Yr?v) zxc{Mo=4}kZm$h5>XWyfBCH9rwNYRu74D^AbP2bQ*iQWoF8R(-c{LdF{`obMRpTsvz zAZMo!x+3rq7V@A2${lv-bCiI1DFg6~6KpN8t~BM9a4Ey!V+HWxhj?}iIBCNkzr=wb z;$|p8T%!fVH$MDQHlYcFunb2=_(uu|V^a8~j^H*%K={-V{E+9+dkK(%v>_+DMIQ2$ zw2)WmhPng)t^(ZYG9vRX0_507Ko}DQ#7|iuJoGzUJN$Oiu85)MZ}p#BEg169kcsuz z)fMUoZ`X^<(4V?@sOuTCC8coU=%#~$rU{)$r){Z> zN)(g4OpQE)_wOEE*E45Js%TbWo#q@{HOstmUBgKSOgVT~RtGg(cqTdPCSV3n>wZgJ z&%ysTGD?B%xst9gaMBH$*1daO&jJ57(#`2;$~RkSJHC6Tx}Hg~Y~9<{_3RZ}Fb8nN z>2Lf@L~<2EgC>LB8lNkF$8M=A8Vym)Gj#B7{{|wJH>ZPM>mE_pv&)vvHn%H;R&~$r zUFv!!{~HK1FW0)Vv?j}6SC)?M-nFi0>c4?tm3wCf{jU4Xbv+ZetYoaXa8ZC;-*exh zrQKWA^=!8Vq^fxGVbFhdZ(Y~3+ZGVS=0}g`>Bn4?|J>}-J-n`Gr!6SWynII2@wg&A zrF+M^p7C2ymdcr9`V5C|sXl{cSEW$Pavjb2HS8mBv)#yeQ1`gHp85YqimN^4KIjiy ztYr_%IwsT6+!i`o6Sh=G%W{ql1=^NXNERxV=89c<_R}?2w{EdkLW|g4g(fL!Ss|xw zGESO1tGZU3ttVyDuriKZ^D`Zp)*#kJTV6?A9uu0cZMuil^=z{xYGK;lq{}j8%Vn0` z09IomWYF)K4;Wncu>srOvCX#n={Nlv=+{8M2L7EjaOJYzv+KLp+%|Xf&o!zgcc&2E zJO9ENXMXec(}um}Ph&pX`OJNtXPt7}Cp8rtujTqxSk_>-i@-&&hJSZU>K2>Pks)PxPIfrM*Yq}IqsL2JLZg2$$&G`;bfU;56O zKcV4QC~bAu-zCm^IGde#^^J95*0udwd3i2WZir$fv_+h(o1zuJqRcw1&l$GEP)=A+ zPG9*-TCHax9Es<>&o?OR>#@@z*7PK#0=}VlykpBzg!Cc zs@Qa$>@0s@Y^~NLr)Ucc>$&JF=SrHdE0ml{(-17^#jx^$0cW*^6%OoJWigypk&yy^ zSwUgNhE)*wSY2X;Wx9Y>7z`^aM+jJ5!5w<8fbcP_v@8+8k300~0{Ahk6txOig<+)z z`YZu5Vp#DxPk=o5hrUF>st^3E09_eq{W#gL)33=lQuzA>tO&tBQa~rpbTLZ!BLdQo zJM`xSwyHQ<__G4y#y~$OV3iAg=>HI~q6N)L)%OJE&dS-#0(1%NE%=GR4+7-H zKPyiIg_!)TOmPz(@?qRcm1z89pvQiZ=P6 zZx_v~AO;#Bd|A72$*Zje=$mo~?=}L;GICOe$zN76;Ug{B6DNGcg?#9YaH$`p2fz(G z+yQXH!Y^eXKa@$r9VLJV96nZ4iH9;mSi}WQoiG`&XSI@ekR5kcCZR_P2#>rcOja-9 zrwk$kdLSHDJ>lP1fPcyu_LIUdbqsmO3eeTw0^*`>A?H2<+{X(@&o}}069pG;-@C59 zXW&H*o3U#VrjBN6|2xBa*S~n`#c7W`HuLw7J~3?2OFN!C`>11X?S6Qgy2w#1u8$%>`r%efam^udYypS9Jk?|rrL-5>qK z*U!9q^7f>)uf9*GbWi`M`fHuOu~Ghv5hdTW4vt1J*iqBb4qAgo>!wxss9EM08X%Y8 zN4sd*!bI!vl9TlVzBQnJ@4C7{-yQfJq5n5b_j$eN*Z1tyy?QfN<#3oY%pGc(Lo;^i z4*tV$$R7FkhR^fS!_b(Kr5JE4 z0@wj$F~8mC_MTVYGp2hByr>;5ZI-Viy4LNN=l$iXKjnV(hdC$g_?8#WdiI|4?;l>G zY|{^}J_%i|0Lro{0K8HG*0S`B?LAlTy7g>eT5kU-g?C zhEEuH&AX<|8UMj+J3II$*;vfRZRN$GdNh#g!|FP^v%&#R-Ns;NUs0p6qt2s03J-M8 zp1tp=@7begbAI(gRXM4>t&bPucE0EFt7m@Z{ih##Q&d>+7`8fzfH9s7B3Be9y;sQr1RX^Za>Z>t4*Cyz67ve6RDV_n-0N-}5^tmHx1h z?I4d!UOHZ^-2d)Jr}R7gn6FkJq}GnqT72cR6lt6sUs|F1&zRW1u+Gc{H6rCHf6K{a z=h%iF2=VhB<-RtS8fF>j5&8KBW;@oonTJX{;`6f$jE!sgD(9%Bk&XLGpF{Mo(K8C( zxG(ObV88mNaj#LBUSqYxPUkY><6^#TCI)oH=c!z?e$P2~UD&(WFS(dm`A5ooZWGEAd2Hnger9#bU&AY}uhp|@@o0oHVPg zU}I&OS6v&hZ!y4^M?Vaqsn*!y8{J$BKd66-%8#7$VF6WIuBoPapV zGwk6-Hqu0R0AW$K@QaSIqs$`1XaV{dBS0Q-(vA*@k2-+;cmeTD6ktEFe&GQ9?>GG# z=+{8M2KqJdPiWxUeb*1r3c|fxVA5?~uH&p^2B0&)-3Qma_RYsnU6lFQUayXr|J74Z zY#FK#B`X2+Em?)8k4sOV{v>P5>-3k)MEq!&o+_9>dCl0|pTW(9c>w=XH~o1|;nJJ0 zUYYP?V!wXtaeATjKK)F9?-`em<5=_M^e#II7>hId@I6*`0B~~LpG#&m?o&`{!>WCG zn6=Wun3VoH@vxtPRqYt74yAI$YCUvb`%e4oXG#;KkP&gU_SpMi{@`L=hVeUR%o&?v zM=FtqF_Ir;`1Fu#q^mkqi<5jL74}=52F3>+T7xD|VkcL8F2qu>&w(j4c;m5Le8$?s zE~s3r6PL*dg_PtlvXXwjuc7G|!-D~*A51?J13f`NzuNlg`wF-53w_yx1cXN%(1#0% zm+d#0Dj!Z2+j~#8t5D61U5dU?|Y8G#uv!eD??$^3N(4m4h_@a+eFWhMR$m%jAEcUM{nte?iOw3FExnY*Yef^jeq7mnuMon6K0S8DY!?p=@**uzsU#vkZ9@+2KtMlO&`!-6>aqi`dgyo@HnR*hxdx;IR0OYru<^? z&$~r2{lB6ueYgXr59GiNegM5=NBjWg7@$4?=y{xgvJ1eEZU_SzEeygZO@zUC7Pqki z!rnX3@IaHd@DVot(G}s17f5tBUWOhez@4&1c#MVdKOy|m_7LW-0{9pYBfHHB*m$2Z zK%8$1?vwOO+V&IRpE`*=jJ*k;I)Oc94?fx`(mX~$Jk!H3?Hv3g1@Jcr&<|}K_Pd4O zz4S}?`v^$KQ~|miEg)RVAnBbbz@0iwc#{RVQ>V}^WgBmisOZIAbGjE!D9>a z`83B)_`{&r{ygXVs|U<`G{4{Fqw5AXAM*4IlGopW+3dRBw(Xj{VqivhoFy0*cUZ8D zhe+)jJhZtkybX=%`ZGMS0e8%ee};ez+I(ldSzDqRA~SeMH+)y}8IQk#FdhWOp_dO~ zRyt`}*z?0ATd2i`Z&SpCgF`d_5JCqAgF8UIrH+w4lao4y8}*Bh6m<4Xz)35zP&Wb6jUTIv@K9f`IDh@X`tEaXebZ*#BiF8r+Y7oFKWQ@8erwj#JN&gY z?uvCI*B}4M+xC3+ifb-@P^o5pld-;UD*f&YW={OrnI5dAH4K9tvULWWdO)fw?q3H^M|TK#gC!^ZtK zQwEox5$S7xDOH(yIA&=Gm)Qfa8Nb6Lo#FCx0{%l|TMdh@>9SKTHtSS5%f-A9tIf8by|~#WMxQr+&y1gm>ibhoi9{~)f|L?t`T=LQh}kCJ*!OkD z#^<_kqHTuEr`p@~b#|tFpTNdW(lExs(6rEWV8CfMXkxHqoMKG|_BL+9jWO960nG{q zUdAKV9e`%M0Uu2mW1V9KG&?k9jF}b*2p2<>wOn9L9du4$O)_J(a|JYAga^G|VDU4C zx>`W|xI^C}ux`jm;qMdJCji+$DzNyWKP@m_Kz~7iJcI}RoWPpovBG~KAT7AlWqMhF zJ7%2V*8-Cl`p*KBZ@h5kVW2S+1lx&5-x%nfM4Nx;w~97-C&Cllg}SlfRM93s?r#%q z;X}_7jsErH_?c%ReVBa&Cq?|wO`=U6=$vTl7D6-6f_^d31<}Zhfj&pH$phUZdN__U z(A;Mjhj*1|#?u(wnOC9wV4#8F0$ICsp?mUwumFF^3O_ugi_a|)Fs?U2?&pRNIaBr(mqx|c+?4GXWj#M>Ky*Y3rHW`1N@H@AkSz4{DTJV zJYbvA`qOXvHQ+Sx{5#gy59!&Z`@W82J?Jedw1vhWvG+ALOMz7v>A4%!;<~Xb{+}l^MNl zq-#@h#geXAnx(DMOLN&Zv$HF@T4(19*(Nx17^aQZQwKIxGK5Nr=WXwY62qG(Xd{GS?CAQE6T{Cqxh-CTK2OOdP#v z3+MRX3hUy+IrB5ExhDN&+m*nXZTY5E3+MQ|Q5Me8jgZ+)`+`p1k}BFgE;{f89YP9J zg{Z;S#~FxudEJ%Bqf}ihitCD{Y`f*&oTm27^yvr8C=@d5^h}B_V&`(eY(c`T2q@Xn z+^9Y9ymwP7nP< zq5bo^@iAK{2HQE!xzdb|W<<($bY z`eK(JU62wgbQx5v@?GsVKhuf&y&Gw?U>CHs6tg9Hz;bc!?5xn^b-co-Q^XQdQN`_S z^}5rnyzZbfF3}+b5?JI>pgF5mo{%T8(V;Hoc}bFlSAiDiT01hOu0j@;<8%#}MYbrP zFI6ak;Pp(8zkG6u-W2N~Y(!7eAt7`X+=^_0NZ}B>p6Z#IZ(f%cfYi>{;*gQ4wZ{_C zf_u&4UuGHQEcU@)^5&D3hQuP`*Q0RlIrpyNVr8wbpVkyFY+eyGu_!B5bwu74tFUDX zfj<#=cGk5L2_1QGS?7xQQrBWkNn;ZK0xGZPavroLZ{^k3KGGEEyPtNO)RLJUb39oL&*lFl<<)E{sWy ziOKjFClvU$p2|*@6;(45aWc@t6*?B_IsVXFOP>~Etu>E0W}oI#9b6pWFE+uOQB7**9Hpy@#Lg{mWZVe*A{FcU^Pw=4-6-%Z9(5uGxF>FLu~LvfWEQ za%8^&VJ9uSmEQjGMfi)PqQijj0HVm>-UG93e*3<%?G6_4rgzVlaPuAQR?7rWG8|!P|F9L5U^8E<#_9E8P>_dQe60vT_@SG^}MKyS)2!0H>O2qmc z1D+>h?T!JTAPW6)^Zh6G9m4$&{McJyuYxoP=X(ywhTOP8>X7}fA2D>NI7MhksF zk?D}WoT_Dm`n&41k2S3J{FkJS701+igC9Gua)$Ya|NY~i=0@i-&a$C-uT8o&Tbp00 z{(D?zBw>_k@f$y3E+gW&_?eoc?od}=Gktb6&99je&ko1e*32?@&Cw>!)(qd!xcc~6 zt-CPoi?-vrr#-zu7*|c7mvmlPT%^7%Pn6Xto=MX+9X0RB+Ir~7+cXtjUOTgVIst9T z6p7f1bDLqzvoO`v7lPXCwrT6%;1nlXJ7ZpzKF;fz(OyXkhg?Z@iI>_>RBG`}9HKpdMJ-ckRc1B?wE5>M%DcqE z=Qvx>h5CVty7?8+a&J<_LGxH$MteaiP?Z0|Y_t@8(pR-OjV`aMidtF?ivc$Bd{@KP zKP`~9-U3`7DTjzd>(3eGRkbx0EnfPban{LlUf^L-@WC2mA)Q3EX;j3~x=IN6s z0gkPua;88MV~c;=5o#HbG$Nu(Iat`eRFvxCTC(KZ2GJ(7gPqIkXOF6yRjcLY?CPRL zW3-)@9RQNzv)A6KH|C&u+7f5` zyyaukzVkRP9%NvnIZddkT9k0LIE~kSyJlq7bIa>A1tY#Htw9rqmQ9o}zGVDrSxauf zfnRLCk?F1pE_2rhM3>2rIr=uDmE_L+7x#X$bKZr0OW8Re!@g6%GgWrZ0CE4l4huO8 zeS5_N z5Anp?k^uRRnNcjEk57S2p5_ZdO_N6Jnaz;lW0!(#j8dZI(( zp*+wV_7}yYzli^JSzON_%IRmFTG0et_)n#P->;ZzcwK=7?^J z?RBz$7TX(S|5OzWp7TT_lsNVaMOVi5%Vb|)^%nQ*MTf+8boNqgzg6}jQWQM*h~~%k z`(-~ul@0e7MZb^jugJc>DlP7R6!ljl#r}!to!Gv#^wVF3g8M46Z>{ph&hJxx9NUM; zzLE0lWwgEQUbiR6?sa&E>|TdImHq`I{r@=NKSt%{b?-d6D~YH~uan)&?%aUq*K()M zP_Lel-RtwGvbzjjB(Te{n(Qva1BwTC>c&g5Q*W_1OE&5PeZltP_jWx|cHBtoK-v4m zc0Ec?5FQ%iyJh!!`E0=ViPGS`1=46xc`KQcvqiV)1q9@NRP=OU|4?@1!~JemRuyyf zz0R(((;wk}oGiE#&vq&^{YBs8oG1(KUx`+T!@~c#?C9|+(N7hYG9&Doaz|!(M#xT{ zv5%4+Jz{@Bc2)f->A?Ly+0hj|2g!~M z^acAULh^`g(`5I$b+zog8-n|zvU{C)Np`OjU&*ehBA%6{WWmV3mh4{twvwH6iKmzH zOZ?<_yxe_UoG$y?G0%~*5033WQ{?CznXi_e^2L6s5<+Im@dojG-FsMeZ$B@~?y{|? zbdim8Hc*gi^j${P0%#ZUam`9%=V3UYMWHkIAWZadjsClh3Mog5>({-StJlg0D+ z3)x+^J7xDcCrSoylNGXi-~FKCpiMG1{8kUr!v3bhdb-OhgQUyY^Qqij56dWnedJDF zHkRG{g&kz~a+xB#_X|hL?y~W_HFQgyhe;kUuTuhDoi2W-0o|kVF5O?J4DZ#vN87{k*`wp^uneHXK z*U!h5mWnS*w^r_6j)%+cah@nUvJw9);`eeqFL1v`c8~vF*}V?DB)iM=k?gJq-q-Xp zRkTsP;<;Gyqc`fwm*S^glkT#LoOH3TBfFQ;PO^L7J5hF*c|Y0p7xB-PW$oC0mh7IF zpUdvD-6K1CApR*z2-&FTp9f`u|0vOVBI+7E8;kA|y)Jq~gudxNM~F5T-68sy=o`@r zijO*rER1C{L??-UCOThqv*7RCmF6jp-Cv-`DKwm0~NdL^+ z=p*}z28afV=qHDWhKkk~4HFF)Z6exKw3%oN(UzjEL|cot7wsqdk!XL>0itQ53ehal zY*D4?K+zmgt!S?3AW@yDUeq8uUUY)!T+w-=3q%)+E)rcLx>R(T=vvWrqU%LBh<+uy zQFN2&7SXMuJ4JVk?h)N9x=(b!==Y-MMK6e66ul&RS@eqN529B^e-ynY`jhA_(VsJBY@Mb`$L` znjo4e+C#LbXp(5MXfM&;qA8-Oq92I%5&clKuV__KFVSKV?Wwn@k7xtY-$Z{G{X_Im z(dVKsMaxOf74+OlbfV~N(IcYAMNf*J6@4XIO|*_^rszS@L!w7TzZE?pdP>CjL^^tu z{91IXXk8KM5MM{=;w+^*TvRIRE?Q2sqG)B&TA~4>VWLe%w8gDO+l%%W(dKAt2Z`!M z-mWf^{Zi3&qF;$_5#24iPxOL_c0m27zEjt!=hX3!Mbv5PGWFQ&F!h%@>vfend9~;? z5i%|<>M0s1A}^bXwh|p6nk||msuMMc&J$fIx=eJv=tj}4qI*R5i)gE~(Lahl5z)SA zSF|7640Y&o5q0O=r2B2t^z^P!I$cCA|H-mTjHoW28Q8Cqy{qUH(N9D_7yUv+SjXkE z6ZRYteAwYTLqvP%i2Ap@((TgyXC*y1*S}8Fsew)nbZVee1DzV^U=5tOR`b%`nzlHj z1FnnkPeG?n(aY?GF1;z2e9-0nllD7i%Uk|Da_9F?TdwTY?KgPh%uf;-&ox(B<W!7@o=Lc=@DO+8|iu56)w`?y;8q~qAe*~li#lt!N2wJp}c7c+RtnH zeObGufV(ZZkc3px3$>yu+GC)Jv*ut9h{4XWa*FgLbK}t!a5T z{?WzT-d$h2!fUVYdFbqy58q?jN^{Oy_=cpO5w&w})$sd7?1l~h?n<^*(q{ghFvLS2 zZ#Op7$8p$O_grBU_Kw_R!fhSivl1rsx4R$w*4N7DUe+r0V%%j>Bl*H_b#V75srqdl z))U#qQ63`v{tId4LpY~D!!*Ls+^y=pEH}U=ee06BFtj`GE3nfS zVQ^!Q#QDIxh`il`_Y--)Mms4N(YIm12a7^{x-k5-8T`)@(H1bY!D~gd6a2w9iM$`7 zEwR_c6T|Znk@pMW--(b91BPge#D_cm0&R|d0lBjMg11r9q^%Pc`DpJRA95i(Jm`Qh zxG9yRxV@QMPps7J%QD=V<24aq?A&I;*uglM-0i|wPpEHp*DtYf|Bl_b!;QwYHDbfn zZp`6^9qw*nbmdMI>OLd>G{wv~MTqQO(nW4bY@`~>YhQ&i*W&L+;b(c^H!wwCks(Iz z8d?}h==aWi8{Xoah4%}k=O5gWvm{}X8+l9v+>q0LIBQMG+|F}CFGAThs2{SDs){uN zFE{S^z28OUWcNG!oj}xsVoCCRd>5Kqm8k)i0ur_MZSk}Zn)2Ip%3Cf>Yb~B)Zu&+` z(QbsI=1~{y`(sOfPm|r}G*2OI2AQ-PWDe)x+~Q;<#Vib6ak*Od7g%svpKLzN-|X%x z?q5Rcu#e1ghqo8C{jjBnuH1sf4etI6u%g&QejjmZMaYkQzG4acqhtoq7FW?X&f1PQ z9Oa8;ZCxg61TzU_0B2U&29okCO=3&^mg@3l(eKkiIW-v3=mvFoM9K|v%s@04`j9!dQd^y4U zn0zl6av|lcmj0ALXN9-C}&Oc(}UM=Axv4 zRLO;-$!aDa2ctOs3jb{$+y1PWz8ak}X7a7mTBVifCZF@R`7L!MwtASfZ=27e2TChD zzGhoZHgtRZVT(zJZ9C?y@3)C3D^oh%CF>pjoiN2RTHl_;XPEztU|DzSJilzWnu)C5 z%DBOjPz_7ajtJ!=eDXaWt4p?{XQMPT0Y*V)o#v9AvxmOnToK7URFapx=Cdx=!tF|G zUniO#vYbh3rZKyvl^GRv_}g%&S9JNX#2D^k!$H55+^~vv=;2uTvdyO!^5sh_@%2(kT*6sTUPAb69iF6~xOqxi{~t{~C%>Es zSQu8A_669YToJ3U6+J}zV}Wy~OV3?xq@fljE{sO>wACp$o6E5du-jgJFP(7MeK&)C zu())+p4-gXa!n1Pq?lWhDrYUpXza7*Vl7+Pu(v4UWBx+xEb_B;6h1}uBk@hv%H$Ib zP>;izb88&oPTfp}w-NKr?2e4r0C>ooeOoqMoAUi3W)FmB*TZD6 zIY&0MwKrDZp^w!nJ7KaB+V^3|XM^f3-+Hz?k8L)OKJ5F?cCN!bC)s5IAqO)t=4GT> zG%L%-kk?Q;&b)uRmc!lN%4|t^{L9uR`)uiz{?|qx3!mP3<=$p`LuLcC58v%&XQGHd z83Wq(bve?hk%IMjMWGYl;?PKE<-uIRX8P2gqPW8Rx94A+nvKhLw>0x$T6|GVX+FO5 zMoIcz(LP&D#x~~XaCncAluoj1m%c}PmP(QR5NcvuZPLHmM{i(rPTL=1ETiY5{n2v~ zUuzsL6?vVfSkkxTAgjs2Je65HqXG6s(K>*1==)74ln}int=mpV+2NtCkqhg~^1WG6 z|3{k4h?#w7^Ta;Ufl+?)K4`h^ehfWvCQ4ssy}GUA=m#hd`Uqd0;Fj;@%+-1?dJ0=N zq+KaFb4m95eAg6re5qrWgQQQhokrUYr_Na4247qIOxYP_nm;`jm}Inmn-ifAN;JI3 z-K0vsC{C>)PM3$8wMZ^SuF1UAdQq!+J}2Z(`b1+hq;2*;_-F(*jrmtPyz4gYYO`E; z`5=YKPmN4Q6-pKzJ4Z4Grr$ZpYc8#=MAo!Bv6EU-x|SZAq^{e(4(*;k&SppSV18;s zZYcxi2{vD(|H{t;56nw=3_ zo8^o0#px8qLM|AsZTBEMQzY#M{ib3wrHXB1y~Ay`&Gah+v!Rc4Z=ci+9}R4N&1@_@ zjX*oa8niKlJ~g`zur%qVs4c|L+N@rjwyR<7kNgt{n)BHP+~Ll+t^SKOmGD_@FnPQe zu$oieik6eG$PX`hOyr`^MSkxoLaD5F+x|KwQ&b*F{KNs*!O}qSDu^_oWFLffX8VF@ z2U*PD^_;XHLbClzeAr0a^d{_u&py+>{G(W@DqQmSkVk_^dT?hKGdIw>i>*l}Sd){4PCg^0&iV?<_8!`vA!+@8jIZ`>yyEM@b}wU9)aTJxCiTJA z8k8Vw32PJ75K0GW87Y(VIru1f=EtpnFe}_2PxdPE{e_J;wv!(At)V+THKTXv=IyvX zcC`_U`aU<(Rx*k)7BPY+dvnBto>^&8Ykk&REM3Cs`zy)bN*I%`%hGP7LFpwaA|w5R z=OFZ>|F%<+Y+6gkW!i9wJvMaW<4cyqHOoxGMowlZyf?t?Fwq%)b_XY=!8sWH2%~8p zQI57|EYfH?TvAV#gx7Oc#EVwx1+3)V999hx=X)m^U3slfIgBH5&L4aM`{gu%MzDvG*qGsj{LF<)LXT~hY+v^MIp z{|=@uq~}0IGO7_VUd?(JcMvG{w!@k8z1oW}b;=?Mr8i3N)GxV>83N z=EHehXb;zF#kDHrPDU17k(l~rl4g4$Y6WGmWHqBTZtF9O^0TCMuBdjl9&6J3F=8dX zQ;`IW&8@l9Gg22@Umy8>$1{}8lR96tN4V?h zwK4BwrEI&d%;1cJ`io9%K1jVyR%FRO5%q!okuenA@Ro&rT9R^L9h+SR*gD70QL{5L zAK}vd!;-Y%WIVDwSkLM089Dq+$lZLNg|=wtwyGc(w&!K@JbW0JZRU$wJVVG5)4QhNHRrkdnt7`sZsSA!w`gT4rW#~$4{tf^^~yf7N8D#ynO$ajC3=JGw;#hc)OrkPk={D2MOIVNyG3cay~ea2FYnabzG(3X>}xx6 zN$O!t?$@4M`|o=e$5iC%@7CDNhC0rigAiIKf>Mmn^d#lGjpdWDfIU&Go9VS6+-n@*>dZ}-`_s0EZ3dCAU=TIXd9&-%JH zzI}e^!)S><{@dI*lt=6TW06{bAGh0|OWGJut7&id%{kjz$HGHz$b2%iqe;%==?i=mT@rutW^)eWwOA~i z+1W**?_)h-JBiMfj3>BQFBFF41cf#G!Evm`TJ+eGnh?riZwNAvO;!iCCT4C$j%{Dn z(lr+^H7jT4YW{W#{Q{#s{gLnR6-j05eH*!{LAIO6o=p4PjE%NOXTM(MZGPKHqPB*8 zW>H+pZ?eMQljeIoYG0*RF7znt>HbCqHZ@v+Uh>8$s>Y?Y8PpuLnJp&6kmu z+UviDCp3MQ{gPsaW;OKUMZIe4VJMHHp2N~eNN*DuL8bZs4#x=!Tzz=BkRBY-Ka&8ukBz`H<*1TzbDLVu~;&nm51%pN-keBkjCbC zwyWmzVVAEc1iH1g4P305Y27yWwRJynQ3h6bjW=}3=frp@Iog`H_@q9Ortg9ouZ?Fm zGY(zo>8KfD?!8|L-Ap54-rF8a(=*{TvVNcOnDeHhwPBGPTFCZT{@YVV%5>kcKylYZ z@2c?56TJ>~+vD|eEApcz{m(SL_yM_0ACdpg9Q*1beg}>lcXwdtehGeK&K-aJew^Qv z4;76S;m2>r@tZ30-`Ml}`k5l`n;;JGLeW4GW}@hP5x+_2x9ebjBhT;9`Ca>D(cL1_ z;y3S=qNhcq$8XsW6ul{emo(AyKSgVbFh`2GYt{1x=B`cdx`4pkU5M=9V?-l`xiT1_7C%Q?a$gh?NBnP|5Rt`z2;4h;TB2%|6L1)m{2FvdUE z^LAmAf2m{1_b)|HwYb@xk?#omJqWkRzl$y)K!?Z#UO|{LB8^)`>k7M0xbtA7u;&Rp zS-78`=mY|JQ~05hgE`@f)J@ zm|xcD9@$yK`itWKi=J}?s8hJTBdV8$GQxZyI!+k*FyNmFdz%4YCro)D-^ZdyVods< zirx^W4TArPn=s{r`ASqO4=)dJUt#i&0S^#XkjQ}76Q;ePKk#P4p5L#9w-NUHY`ThR zyfEcOoZuP4+&KZ}UeQ`%&o6i89xY7W!+=kY`N<#n>;Q8Q>}A5pgFkoK{wfZS%-oTD zr?9sH`h%y1*Oeaz{IRgt5Abp-TyIm{(L7if{mUBN**sF%)8pRUF~Z)*aGx{Z52DW^ zeQ;Hbk&iooj})fvkbmxc{;@FSDKVmZsxK2pANbQ>-7bv22+v)o4+s-KhW_hCVb?eK zufo)C4EQ5q|S~5=mju$3BQd`L`!ao&8KbVQam&O==@C`9P`eMAe zOW5^4S@p6ZZPFx9|tT%5o&{RN>Erz5Ou$^i<^dqrV>suPThc ztkHP1zA*Ztd}hdToG|qR|C#zXRoLs-EaB=nJn|nXe2lQShic&qh5N+eYlZI-rhH{B z;U4?PVt&DrgM{A_rhbrT@V|sf4|x{|uc*eYEJfiD73TXj-hQ|Xf2c6=W5AmVBR}~8 z?-={b8jZITgnfKCQjV3vedUJ%^Bo&+FW?J=k%#!eHwq&wrb+mAVXt4{=Y&0e@M2-F z&)}sctj7;tQ<(C>fcpuD{96ipea3&Pu(x0EEMersfDg@tKSMZ_=UU-D5x4RGP8j`? zKf*sROnn9)E&L~8A5WTvKM`imggL)gm$|Cz$xeoq%ZOxX4HQ{i)k8NZMZ{7Yf<3ueCcfH3Wu zJe)23e9SLca=!3ig()xi!F&tG<-bsPS#{3j4+CCR*vl6@SQvd^z$1jce*p8{7$0B3 z6NSAzz*B|2d@mNR7FH3I$XWtkDD3*ZM7UAd)4N>wL}BuW0iQ3tw(PP-_zq#$*A;Sn zQP|}Nzc1|ag8wD#`3LiD8RSQQ;5CH3{$3@#QS2{k33#+Hy!0Pe3y&2>x0q{%#|e9V z1OGtS$6xS5VTlkK@G-(JFZgU>&p-H5VcHjIg0B+x_V6p=2ZTL6@Uy}`-htl}_WmCH zm9Y0eHwv#LWw<=xwS~#QtR>)0h0z!3-z2=FfTwqx@Z{KE-X-Aa8UK1=A3yQ;Z_>zG za)IIAKp8{8M3<|9;^sh1CS3^uad@ zdwKsx_%3135BQM`enyz~BCits{~%0!m-G6T;oibxi41s1#($Ks zr;q=5VcM^(CE)VF{~_TjVdO_=;Q4|7W5SIY?BAmid-R<}zDYxP^bP-&!YZ;Tz26Go zBJBBlLim1RpHG0F6K1THwd8mD_p&hgBfj4YzbowJ_muG0!mbZ+FBOiQqVV9s!u^FY zPYdrN%y@wTR|tE0-~$8vj4)jILxY0gn}Sd0!HqBJA}6JWZJT zM;P#&*dP3g@ch_cu;f+YBZT!A8SrTte7UgqKluMjnDGMxzC+mM0Y4^8d!@dCUl;cB zeM9&&Vfss1OTb?UdwcnlaH*KReZDEYauj$emYtD#OK#tnn}W6A^@ORT@+!f9BVixY z{wzFJSbvcL|1jpq0bC)>n1um13Huxwe4H?Ol(pn9`p0+TybS*;e1ov}G2nZI^%oiN zGXk^`$^iUY!2gc$2f|(lz@-x2`yB8J!sK7p67VX*9{;<-gM?MBA_LxB*vkmKy)bPE z1KuMJk38UtApHBn3xxF-r3XGq!284xgnuUN@_i_LiLlo}@HMf&tR>)Eg}n_e7Jf)r zf06k}_!R-yFZexSkN;!gzh&?@!me-pmsf?OKFC@E?jwwTz@O;fCc>WoPld+_d;H)D z!d?f#Q-!@weA&UR+!bc11FEalSJ|}~(7xq2_|67E;&jjBu>}x>q zE5cr$p9_B=?0q2kYhj;Lu_w2dDi88tz$1h`|KKsg#3yU?{o5(RiXt*!%CTD5^#eX! z*!v*xnZo*O;lD<})5HIMVXtrC$ArW9Ul(?L;{TDb=O6r~u+N#my_C4uZ}3oIZ;#*& zg%u<+UkQ&D_WB3jQ`q$do*wXjEqt)B{vrcDO~CU5zET+ZWi0{U6=MQ?Bm9i8%MX4{ z*yRO(D(w0Mm#T2RzXGq8!9#_;kHvqaa2S4PVIPz5pDrAxw?LTog~7jB*!wf^rNX`j z1YafW`UBr5O#R1z9~0JJlz;G>0v=z~2vk@uFL-%j_#-1cNZ8}Ye;Z+MFW^0ey?!qx zJVV&^37#wLV*vQDfWM3IDZ=`*mx61hMD(qt%{(B00{puz>OW5@ZK3drOGw^A`9zXc9jQ_8M zy*}apps@ZT1Abk=^AG-5*vkXlLzxZJ>m}^^!@rMk7~fXHv@i69|4zbvExD5J!n1^> z!pMLdg*|@oDZ)PI0-qu5{RQ|uVXr^nn}uCp;KzhLKj2q{y?+6JEbR3kjB;JS;I#$B z63GwVBE|^3wD4ZSo`3NE!k#|3LD=gfxKY^4r-$(A!Y&W^7s4(t_zq#$C-}LH|6hcC ze8B&GVQ;VCPldgI1Ai^-^%J~`27@sD^@Lr1{I?NCUdj(VLDr*xNt;CuhQ6Anf%G|C@zfzuU4P)GguVX(zbx$f1HUKi`2n+FCw}q+UQKwA z?3iVRw-F|Pu!2Vmd;RDsyr;0&Pw)Z4E-!e2u>K+gK2snJf4Q)__!j@WguVX4|Gcn@ zsKx(NVV}R^{|{j=PjHt$>GXRGd;7+Jm~hBHQrO!Q{#y%s{REE_c6~1|JW1Ho2Tu`p zeS)imy*+{(guQ-&j}!Lt0iT))e}yphRbD0dUnA`GX+`0?go&T>0zWA1`d>--nb=?6 zCE!Ec!hpe-b+b!;Qqq25AdqOLjwFg;SFLe?~?BeZz}Bi25&9w zh|qIi5&ET1Cd_&w`ooPy)Pr&nJkvz#3Zrl1_R+J;QWnny*@^SVB5!Ax$xdAC$r0CY z^dx=O)8w7>@JCMi%HbmF_@*M{UnrssPZW`_3q;6#k%)Ni6j4Txi)dSa6QRSNiXWXU zuP3rB)RVM+q9TEMC&CRB!M~FTdB%$1-A#m?lSIfjMMQq4 ziimSR5porWnvLS;d5S11 zvsk`e^n{PI6!bvc_-`aa{%u91v!jT#b`cTJ0V4E#kchtXFcESdA)<~qiO|ngBILVH zL^}70$luc<(t1IJUOp5d|JNdP)l2fA#|e6(pFQ=YJbtDp@(>qtj1dw4;Ue6x72)@c zhkLKC-T3bC*cN&2)CUGImV0N=L{A( z88?t)e-Y{3FQPvoFO=ivBKY?ap@*M{i2qU%?t}rOQ}`(}^l`c3$DcAq4)2$!!{}v% z2)=DZq;-r4{rp~p|1c4H*+7K*Y!Une;(YC(C+Q9r!FRYY`dCLq_!%Pj8$`r^f(TiE zEIwqqUPQgRM}$l-i;!`k{Kj__#p2&Hcp45xUBFbYg5pvgxs22x|kpCJH;RlO9>R0qc&hZdIYUG~ek~%OzmCIAl%04M#O^o6;W!IG zKK8gNk4;4AZ!;0~bfgIR7KzaNsUphh77@C9ON5-fQ$l`!5XU!PPs(SJo|MlydQuJ# z=n4Nk5%C-%BHb%QxPKxdy;ov>_I;6KlnA-{#_reY3Ewyo;f@zYa>hO=&e~qJ^4lif3^51-;?!3zwDF3S1%%-KZ+=ie~Bp9-DAE# z>PfmEh>+(>5%P_dJ93|-C*g0^lk^trN&T29g8wuT`5r2F@=+mz?{X1xvEL5gt|I)m zj^o)%PyCP6lk}ewA#b19zeaZWM+p=D0zHw3^&EWt;&8L{Bwv3JA?J%C;$t08{7;I| zM-TBKS7jWoCJwi++|b8f!tmcNBK-Ekr27j!X)l!`>dm1d@_(d=c2FXJ>g7~Dk>f%U ze7uW5d0eX}>Aou>Ki?N7y}2UzzlfhV>xuuLMWjDOeB@{6IDEaH$aAKiq zXf4sjBI@ytBEoMgfATXvejX(|a@-*z-iJh__jeKT9W6e>9j_< z^xiA{>j}fZiJtTa^YkRXKgE1!$`1coBJ|EaDEMb0>c>eU@Yy2j$qKRmIkHnPJ{Cpw zDRw_s7`}63e4gy+#u#Nxl~7i9D}~2>(|R;ocU(KP~2eTu=0Jg9yE>5xd_jJN#!0qyMgYlK*S;q+j@x zh;;rgtiO_fh=_Mh0pz??Pr^N^C-L4ULeKAus8`>UJ9_#ZcF~H$$oZ%U_l;uw8`;U% z6C&bWN$#YxtDeNWou2sbuP6HWRqW6HG4ZV)yZ=p3(jTWM`Q1%Vhzm%TD z_k^C*U-n~=^C4mQUe^;jpVf19J-^hGbk5Kdxz~;Tf2b$?)AdCDr}RX=Rb&5`^h7V` z#m`mrB%P;Y|E2Xrf9zkN&tD27Pq+BlT~FLMj-Q+A$+&-zp2+o;p5$YMo}_=4p2)YH zB0>J0gprT^ee|=rF!`9HCvsh_C+*@kJ&~JzE6QU_VdA?(PyI#jm>~E00_bxOJ&E@j zJxPbPH2&F#S=3p7bZD>q+=i^(6gw^(3Bq^^EF`o`gfW$o;Y~_3L3hk>kYJpM6r?PZ1`) z6@*Ej^9%C%JGqmuNAyI#8}uZ;$Mhth@99Z;@92p>IcLG2{U+l3bL{>}{Cr}r@)7Na>iG|01uglfp2WXY>1!qW>olDj=+r=`2L3N;pz&{qHuvb>wDeK$9KQ9W zMb*=4t0vb~RE(>cS-b82ljc@bRgIoqF?~)&-TtGu+;^{fecXND@);FX)%%v!%$rrw zu2u0wRn+fWT{*q3w!U^|L)pLaq2d`;RaY(3eW{Hf-)YvZl~-?c-Q3beGkdRg zz!%T{^0_Am4PehUyjPT8qVmgjejCnL>g)zDySIp6YUY0{8iwaiw&WgO`^9MXSHbY} z`%Qe^&TlsDHURquN?W&0!ND!M{Du@heqqcnZuy-s_f7bB2#B%h-g167%I}sJME5-K z+id$SDfc~FOvKD@a`~;O-T%d{A4NImW<+kCnHTBHZ^y8^3-bBqZZ&>QYqt~dyHLA# ziC<-tmTM*d%h~J=SM76f_kqctmxH@5lH0QEUV`>+dq)C(MLs*yIg)ZuTT$HnZku}I zcLwt7U2b8ul1kkDcfWQ&tNn_&HO+8_3eX%U+Uj+;&s^ z^`oq8{Epvmj84~|ET`YI;J<+P9?kCQrN?lW_Vi)5^my*t&yVr@@8{d+r|r?#Sp6@T ztv!j7xYMQW?%YG?8clQ9c)`6b#div3wHVeKtF4y1_GKhT#kclwzqQ>M(Oy1jtK5ZT zcl)*7M({<4c868*?LFDtecPIv=1=+}>{ZWZY| ztGQ6yMg0QfvEBBRj}6(l&6GagzEhIi8<8JF$fw=i%a@Z z8DBpj&!!i~9BMtch|;Si7?f_`-v4Gf{hPc#$8e2v#H?jWj*5#d&9v>`yME8xmzA0;`>D0jgJqVN3UkG|XU@P`MTy9*n4 zG+nMTWH|QAn3GHS*t)~8b*LS@$Y5t{5Q7`U79-E2$2a%v*7W^jSNZO9KDxGgZf#9P zO~Y=rT2{B@d*?^jJ!#CouWx+9k%#qq=aW&}9C+zBL+T|dUA1?B`Ae64Fix&PO0J{N zbF)06t7F(=@}(lRUbw9-qD(QA>mU(481SYdF#O;hMQmMTDEIwD906d!)gt&X zV2CYY4^N#UeYTm|ibe+FCk*Z!doWZGu4(7y<+?R3b5yVIzCKN@t|}W}S#wZJP5ReC zbB?-c+cD3a_`AhBJhOVYftS2?*ghO#*g$`f^ll4UCO%;qER;s7w0QPugO>yOC$AXn z2|NsHT$lHdM}6C*{4|nut!$m!`$}e}Eo>R2KLW$# zldH6>&Dqu8EKHJmpIoiw+C~Ft0)yRaJZ>CtKo~FwGNJZ4xc7MQhp3&D7U75weoDyw zPhPQknQl$%p0mPtuk9Tx%V*Wp);Cm6ua~ZCH5ep{e(Qnhvkp7)-ltw%^U39|yKCSw zulDR;%h?Ydp6wtd`*l?4>}_y)m!xC#6(>Uq9aCj|+g-lHY@ahMTDv`QN%j!vW?6M` z=Oy!2Dh{2c&rN-v%&e3hf_&8?H}*9c+fAZNr(0c;)brodvHcRiOOjhblP}y^x9vl2 z8ktUQm$P-BqB2W!gJ?qhXT@V*Po}A)`E2!QyQB8qn6$s`60>gRzFhW;UGC7QeR-@| z^2I&A^n*kUcGMSQM)R$GhmTbyCD~fj&vyv_-p%pp+=aC;>|VlL6C%_xIijAiBbUE5 zmgzy_>UaH_2JA-Zr0e3{MGRdG10n{yPsVWLT?-$~dG-@={!7=ypgK~-AcbKNnIIwz z{^02%;skTGi(F2+%}YeYLwN9wBJWC>G~6zt>%@TX z6_F44!B2>IPlNdBcHa^qFNTTAKSe&-0QV51>junwTZG4ehY6Dp44C(=kP8EzEKL3} zVBS0F8zI9-3X>lU{+!Qye!#r1z+j94UnLyIce8LP?}NfVl)w)$Nt1J=XND5^(Fgga zESLX!Gs zc;DvhJ=FceF1Ab?HzDF4Ra0BDsJeDuJ!o`Qr8Zb5HPlstgNe;-cVUv1DG%uTa=W=g`?TVRnOHc6SXzva7?MK(~A^%POdAjsjsfA zua_$uKgK+!W?uDf^QyE0Dz9(Yv7)MCR(V6kZvI}yl**coH=0yFvtsA+ni*9U^;n6^ zVB)b)MP2QLy4@;k=G9NAsTfy3u4aCDRpktZHaFkMFsw05GTaRc?Dxyg(8U1w@cyDOJZ|ul9&;)}xB_OMkFdj~50bqGJZ^s{C7i{egp zQ`qMA@5HkSYCA5-ZX3~Tdl$!%m%`$)w*hS5DZ3lxDHO%%r=?+YD$;@PA~=8Y^?)Mo zFt+w{W#56IBsj+=4ZnH`al4;9#2TAd&miY)6Q~eTQ*@Kj9eQ;K$I#&<)VEG2j{T(=h`d z&7E!m|D#0SJE5B}Q-d-n{6=<4L$qG$Z+7Lk|k z4}HLcT=-Eglok5IPWOl(ZpcFZ2!r0qJO0Rk8@eJc{D_OZfeC{hd5DWJxO*DNf;&S1 ze$*4<@DIHMK?LqzPG@Tmg)Ig^OG8#B)?dDawH6C&FE*-NF@bkz~SA6o@>Pzl; z12mctr!;d7{OIQr}%)}Xr-OkoO zZw#;|NS|c-pg`y8^KQ2@Sm8!zP6v#kv+XCMlgEIEiRid7;EhEdFBoEgU~nNE@zTjN zsL;8ShVz{hbJgx39iL{1F(P8qT#uf9}D7GAcnCAzJK{B+Sm z+u3e7+a}I@sC1fbg({NRV?<`Ov*a>(i1yQOe~Te3Y3hCJ8V=>-jF{7N^u@R2!W9j= zvfm3FtY=u;eEXr;pO?$pszu>?#J;9?kkaN2f*G;Y`4S3cMq0W}>tOS|p*D+ni^_1x zw6$bhuuQF{lzqwIGwJ) z24yA8eg(Y{1E&qA^kxgCC-x4gW4ub2?zL%C-s=%+u!biLYYv7n40hHY7~F=6`iL0P zz`Kb2+?wHYwg^86TqTOuD|!;wA`xpMhDhQ)Nz^yStZl9lvG&2RHo9NbA0Pw%vxxN& zLo4_*5oe=d&StqU0gT}+b*M1wFysOAyLZ;*;65ULzYf+Ty3^@ESy;ni28y^hf*~G% zaHA}wgBc_`SJaOqJpsQV?D_}uJMa+m zJN+=dHH3YA4*zgr@`nNMB+RBZ20T5(KR<(y&*1ZfeLYS1%Y`X74EWBB|AU$EFJ|}& z(_N%&MfFAAQF);Q@C`}L8aVdA=I`l%^v50W{`~0Lx{8+N z#H;6B{P&-XEC2MV(O1p9s`|+T_c(UWS+`1PUj?SOcyVP)TB*TVqK?9y{+L4OWoZbeIJBJIVHwB8JpOlFfdA%m%an zl&RQi<{Or55#`-pK}0$h z2TX?RqppXVLO0|?7IwNRx?9}nmgu_ZqUd4=i*N_STNXd{i1@b96Mw=JZhH}3D2C?* z5nVb2-a|z9NPKj2d&N&ZqONkLo(wPe({w|m|KY1b^;wF8FZW=fALO6y8^n^Qcpbzp0 zCJqQUp5&3Z2!kCNNQ1oMPn@{>utFTCS2VBMt!c%}J7~*iQmrm!Xh`0W?mghHH@Exb zl>Kks;;(0(R)78SE6(|{SGDxTJe1~115SQ-X>(I%ublQI?#T*0`_8eQt8wnbD$8fi ztfQF`+l<#w)i~O<<6qmgpkb3D=W8@l=F+}xRJ_?_TyzvPrsPB_c}o?J`MRGmzn-LX z@im@xD0YM#y0;ywXj9DADz<(P*B{yAZhoQ8``Nq^ob~fH5#1zZVsDx!+E2T)??Bhw zn!lab`7c`Y+;nm13+?&a?zq{nP3iFXA(6X;W#S=8!H?((#SoB4livJGHUbll{2TOP zn1s(Z6m1=4YvGVD`9*E$T3m11=Ll;7!$2Z;=#$j5);RnuHuNtpKN}S7)`Hf#i%YY$ zuxZITTc4-Wu{YG&txIy{gIRjNipc(^a3@WueVeD;k96Mwl?TF|^w* zC9%^A8d`?zP`m8U@%l*^o4KSl80J2I-n)T1VGNx#9XAF$oizgmZp`oL$iZ~#47dyu zU5 zAwoV(AJK^-1|j0_BRVIx!{1+YzR1%<)~iGeNTfGVbiK&)K3Mj~r-D+!}Fx6Ac%3`M?_sqgTvO(byR45n;c_5C8Q= zGv$H)@CPrDh4mz6n27t~T)*IpggrlC?yd9ufFBn2{Sq+uz%8vO2FyKhu0QaJGMZ`lJMYh2rr#i6EMDOcE9|lSy~}U0-0=$D zs%iXwY18^$zWej2Nfp!Q)m1huDjQw5Xl_I8th(~KvjytsvViP5tg&ZlQ|}HCivuzH z@%I!-XFmb&I{v}u_RlE!~V+jY6duBA;&cYqXn<#$Hyf@qT8W!@2`jYo8Z3>DL; z7+pSTT&}cfwGI+s=Z1#4do@&6QEd_CjmGY!P0M$HFngC*&8wI^Z*Enz-O}Z&#vY|j zD|dh#(F^3|(HrPiJq9(dP};P1M@urkc6xbquH9ve#%`re%XNf2v-O()jLMo>QAOFO zai!9xz8xyYuM>Oh+E`Z-pIcWV4zY15F7Ev!hG ziRE?WdLi0s@`sJRN}GoN50Gli!iI_(elZehtLxB?ui6vz>zS(ZxpVDJ@vfzf%ak^) z+7X(nSlCcDre=DrxBIR`I;<+CL`fG}ml2K2mNtFA0~F-H6iKdC=<1&o16wf{9*7bydtvMLX6`pI5ElkB}J4iR__aT|pf7!TdY17~i5N9%-_MR29=2ex~jafLiPFK&g46_@sKhSllCrg%p zyzB4u=rsS!HE`6y&8z80o5vjZ-EY14tH8T!AgSY?Bh~uo-t*Nq8oGGplRw+A>&;L6 zz3Jhq*KYnr%^l;UXWj_qHcR%~xsQh(c0aJ^jAEhu9P{32+vjrOOWm9c*m<45lgnF@ zoCk%w{`p;ZcKa~ws<>0}v>&7l2yLTAyMk0?Fyk+c8 zc<}ZjcI7an1A*};9c_|E@sk$u5C(sCMR7wW+zEI3qUK)Rn)biE-+!p|8!GA>=2n$A z%&e`eE~}k(pngSJ%}sv$j@Yzpi?R*(t*V^1uP(%|Z_tmn%j;&0DBE=3mS1$2O;+HE z9@s6Trqwsp1xx#=f(-d$m%%q{Kop!bI%>_gptJXxX6LVl# zqk|VaprP>W)mJNM4%|4}<62jaC+&EJ!&we{^M`dy${$`g#0%!UOuOWlSy74ofZ7iK z?Dg(!>b%}-Z&w%>sigA*2l}wXZ5j+OG3WWx`9?#?Ty(Tuq*ZT>T&&A6Ht%|H7;P8U zdK2SV+^*R*9yll+cH6iO4){DF!ojaSH9un#{tO4AvC?q5DgRwLA~~KqRm8xG0be2_Jq-97kq@fi+eJR;f`20l!#^v` zkr?UW|0fXxB>C$ndMCzuM8|R;>52T90iw@E9v^sFjmGGL@L-OLUA{rWYYKaQz#9mo z2Ml;j#{UPx9P?rDuNOw&81Tu$el!feLKyvFz_$x?42S_gD$H@G9uaupMn2*LZz}BatS7viaCbd1;7P(>KH&X@{iqtutKdWQ#DFi% z@Z;u3@8nb7k^U(^jzF2{px>oMmedd;v#Osvq%T@A6lG$!ssWz^CXM+4;{MvCAj> zoWIwp7o9V&a_ncHto-=JFHM)YKC@?1XH&Xl2=^|!PJZ^)fNbZMOjHB-OTrj}i__~LOrCvJD_3B9+yV7>c4x^3z^3#E#- zH$-i-lQ}%wZfwLR-yrjQ-->wn5gr?$Y{T$f%$d;)pDhwx*`C8rJ202x6wHsd;UCgr zLxdmQaZ!xlNI_e&ZOUSw5t1Sd#qSWf64Eyb+x87Nf6|;`F48{9uP>~vqP0*0w)WTx z&dY7L^wG-GA+nq0Y2Q%Bu(z?TGupr15`x4YMAwY#lH4?Fk(z!#+mQg{C#^`ulEkv zY5nvFxUm-V1wDR!MLg*_XywCV3_m^PND<-a4G6ovh@J_5HVJkYd0H&?r-%qg&jY5X zf}i;5HS0vgLwGhC8bxdzVA!BIQ{+7~_)-y@3mEW?qR{_dVdTc(|67r-H^HxnoSzMi zw?*EQfp-2l|lQ!~^9z4i{u5iar8swFDsT;Ua2jC?P@slU~sVlg3>Ds%b`w;!> zG@Tmg)PQNAxo7j5`fA<@9q`pWT?)^K^WqnET3(}A`q|U_9`)|gJ-Yw4?^8D~KKh?; z-dwZai4xW~Qhi9Z$$PPDa(-6q?_01;F6^hNe!69o4x98a`I)6<1LwXB*6!EZSu>xC z4e!)WLNFW?14|)`j}utF*=EzlA~)MC=JtdlU(bOLAarzeo*3*t(BVc0?E?pRsE7^` z17={RL!|=;v!tLy#_${?B2El=qKLr)0`DoJW7hZ*b;MI+tVfhixa1&R26B%dTqAP% zz=w%EUtowy1Mwp#=^_vE5)W>4{KyV3g8_sccf!JtjMxc-ok0SB{BXy9`lRMHx;55c zzQccMX|ix$O=Uw_d3}9FUBkW`m2FZsBL5D_hJn&y|nA^VD9Sj=Zyf!?^>V z{LO}Uo_5-m$}xNQ_O=jv|H-f8{RIk+QPXxiuJ>~VX3My61xJ2=KMYBe$=-mCn_b9} z4_m}v%*7i}<*M?`pz|EeOPLGX(J!$k{Oxh`3wwUc%qtn$GZY#f`dU=z$DTpGb|dVS zjiS(YH$su_^W3~n!Z9?j;$-C@-?mG^OufjTdjNQm!oP2CXE}Z=Kye7umahtmd0O`k z^;T3S7JFM7bdJ`wWE}0~-niHyDz4||kA~=+^Z9H&WY{U&t1lJ@ZNc8evzpB=6|3&n zYm&WkVY^Mda=;5WtkLt*WH~)d``naO_zBjc)=DixR%^?C%SYl`RFbW0j{EMoD2Ec7 z74D-P<8bf zh6x{furn+$tl-A_gf$4m4)zU1zAk1>vzv$~!x7H|M65~RXH9dEh&2s{HOg@!-0=sW zFJhP@J@~E`d3e?`cZ%?bpCSA)5knN|u||4EPdmUz##oQY|0l9ABx44N&KE}C z81SXS?0#av_Y1qez%K~9J_if)vIlEP47j^8%1|!n2(K(m{=n;r`UrdaLxlNVKf1zz zH;nlmZzt^e!++0=f4Q*h2md-@&kuNEhW}XMF#R)xnRZ~{KU>(#6AUdQLVn6k-qDnW z=?+sJ!V({8l5cloS_2Q$9P)=BJn#}fL|o_+{ZdD$`_wtYQ0LJbM0v7~Cq8sd9K?xS z5NRPBX`?Ibls%ZZNte2atmFrN>K5@07U53XV9Fj$nuJHUgr}__3vB>D>ON`r6X8!? zhJTOsOY|0xBjwpnobS;57EFeU7Od{Cxecy`7bRws{IpV zW#8g7B>i#h9qaUA>~S?SYg-m0iypq~rO$RB`@@H?z2MlcU1~~y-Q(wFGo`i}8h-tt z!`?PcTx_DoJJd|8il#3KZ!$5pqe0g6P=3I+=?2@%<(KX?Q0n@e6Wzmg-hsAb1qAspXPalft^0pAs1!0J1ClTT3+QH*RbYU2};7KCq z2Ol7U9|MMbXmdFT?_D$9C_IEAef;2q@WYLCA$Z_zoZGyPzR}*;0f%y`hI`dim)Dff zs+h4`MRjf6BKwwJOFdk%>dT$(I_{d4kDb0jyPnb7mTw%b@p+9rS<8nL9!yKo3;hvojnCE35q9~OBF zqGow5#qKp4HwJlX83s)2f(HX;aOdfz)mL_ECzz5RD)R6=HxW^rG2qQb9v^rc5%FQb zqeaAr0Yk_~ZNN@C#77Gv9_*xxop=a~-CGiVUX!pB$0@5ducbFL&Re4cYExzTteV<- zeRZ;4o2oU@Z;z5+rX70Qq^mcdI&|k}&+I?(tcPBDWX4UEgO^f{!(AV<+j%c5U{+X_ zTH$gh9hIiN3ubM%hHA+!lkeU*=Eo^~H;x}D(S_T|XK^}I+9X_^DtK}VZIzD=*d>o6 z`SN`G=_S1OBcS#}u;XJtqhP4>wK&_m{759L2j{k*(b(H5$&Z~p*WnL~vN6!8lXGr# z6`ruSFE4M)_>Y6y=bkIwGtBZsrEpJ!f!ojT+mD5EpDE(WeU+T+r++ZCByofn0^1Im zot|4=$k*4f9_34dlA?wu7yjCTLSB;A-~Gs!9J=y*8`hm#%3294$=#+CiJ%E&)|nR3#Z`+A!$jwLQLfgvO8%4fP!5Z_N*j66&eMH0u z{zOE)7>1Q)9}KSci+@Mpq4^n$<0gvX6x zPR`OlM>P)!2zq8+JC-K;i_3Xfqe$~F$leB5R7h-QFrjG|%;?SdV;=x4Aejk!|v%TCb zXR>h0hp->Su>(r~$XSEk>Wbv{ju2AX!Ys_A`H>Ue93$6hUw)8hOS7yrv*g~IpO0~j z`suOU#uKD99h+veCr@_R%ACUcXO2X14NIg*n^~TsGS178lpLe6Eio&V9;2?knMFyN zu0s7V2VjwEb-=V+ER~;!%v266eLEe<@BDkJ;ZLSpi_@h`%almnTDhWC>bH%~Goo<= z`=TKCj3uqR<#m`|h9|QX(`LOig=Vegv_LWPvL1C?mpYfwhzk5zAaYlwGM z>=Za%2h%8DBa5W4Q!4ant=V-)OEAA8&6=;BCnE_G!R_Z}eny?uA4_a%4>`@g^N9?s zN5W+|^WEZ-@Y-hb(t?Wlm`^W>Z}NV<_rakiG{F8FW}i3=W4OYCyE&FnM;7D##oP%KB5Ce%oCW;^bysF2+#aykmxWG^AF}l>xqsP zF;8J$G(>co$YmWS`z0dcgCBgo2zfEgfgcnx2O>T23nJz!n2kkmiI@`+9{f)c`9q#f zM9ay8@c3^gT3Z(8MEH*smBkqO*kIf)=9jf(YZ2e+LYMG^c|R2S!P|;v$Khoy*;DcVV@U|6MjmVvcQ0!i~044@SkLHeeWVS z=CK}rS7E-}g?=&MZc2#!W5B(HJ%8Y}g}pp>6JB4K@+H09MOy~`6NGmbM!y*9&OXA# z4?lR0@N#-$_7L&o?hrS|;o-;sbYbSO;5|jx1pJePZ;Sb5jW&266Q*us@c+HA*Jtn_ zg_$E`z@G_IUohYvDhTGo81VOmJwM<ZMVPjWp)c7_*y97w6=to00Us|+A4Yia zX~NV`%nw9o3sXNZ;2VWqAK?3hUEkm*g()u#_+?@AjRC(a?DB)Z6n1&RT~xVTpWqdR zJ^$eT!eM$FW&GhmKJr7ls(w-bDz+#c(n3D+NIj(QrGDUso=BVciGy;1a6<<4)JsIz z)kL`U7Lgy;f8Q4k7m=2-6~#f^q)FV!0}t`_7r`?^M0%UWPgReIk2p!2KAJc-5aG6? zi1d*K*$0S_eWZwVw-J#ZagsmA6vDHfBwg0L@DCLc&n6<=;U&+5MfkIZ#%-Vo|3M<$ zM~QIXTtt2#;#pmUKVuMb&{relt|Ib5xe(8$BHT9?5q2jLvhFM*9{PObA1y*2>K@^S zh)8z_5#jrYNN+0<{u_$$-(7^R$BS^^LPR>-iAZOA5qjK6MEQ*s!B5+Pzpn^=tuG?} zej?H<6Cu|wBIMjnL>-$LKljj+@*F23o-IYBH(5kF6Jk6@PvYBCM0}G(@YD7vd-@do z>6>uxTKaNH&o!1lM~_a^sew)nbZX%LfCi4)y1Ac@ush=C;Ja5elYi)%n%1FY1ZSdhc^Fo$UJxY*O_^LmxZ5xxQw>{!)luS5cWHhUEp+j;X0j> z6vIf#ECYkx-Em`vz=*{t2xjDDq{T3TF|%O=#ef;9Lw{xljBptI837r2G2rPU;%5d2 zo+)C)#K2c2VkE|Z>qVhIZlsTVq)R-E(8S5i0y{j+Rv^NXKjLKMCQrDLHc#S$k1)p_ z+T2&a1wUolcYkO;x>nx@h(Euvdu`3wiW)9-ZK=Zx&Y1l46_Zze?)lfB{Cvym8?O4G z?A$&6A&GrQhg}(~kL=&GH$p9CuZrIru(QHmP}|)0+iiAY@U&67B; z+^4yZZjydt=y%`$MBk>$TvZ-j6x`6~S9gs+_wTRl|I{HbK6>zB%YAh9()W~0;QUE{ zdwaa0f7|=GzNc&F2R5GBI~7TPQLhm%dA}ilc0ylA-{bq$j;(*R-Ff^Sdz#))hJN8Y zF!XBVoxSr!f})C(_^>cQjV|}lE-x}(kXg$ znobS;H)!CsDa`}BH}!73>pyid{kM3PpAUm%KfM?YCI?@>?-spo|9tA(@148Z{mVb{ z-s6i8eengghkSD^>QH@hSmfs~)!D0({BY7$86KEGs#`g;Y5(Q{-I_KyYMt+X@(^BRwNqtP#oiTleD5Un^Noit9XRxyIh%dF z;Gxg1yKegMp<7j4cGMsVUi?O*Uk7d@mcNsPl2Lm&6A$Od%*im!#hBM&urv3<;Kt4~ z^DpLq;65TShB+X_Tn~Tde(>Or`x!el_tym#R~-J`t2mmU?J=*SZc+I(`&MMspbi;y z_Oe(gFulwxU?|m)Nxq)d`RJCSB)sPXM84Z=2w`r)PwmZSfB>zqg z_s%gBvYVW!%2e658lKOJn2RL8tS5xME6dCv8TEPBHTfmCRby*J%<$6hvC)k3E=4nm z{Q8bjnzcn;bsF{m;G!$df6slD@K#XWxP z=jH4dixVFP`;)|7AMjJfJ$>WF&x_o{FBbP+9nSmvq+ge0&-`ZHc==&Z`z~>phrQ#6 z#a$n8&c%EB;m?SBc)N=~FHU$ER=neL@^H?{dwSsC7T;J`4Ez`3ls63gog9Bp+~vU@ zxculHJNyIm#52+ZD0hJJ1JDbgjw1tlqz+Ox0bwDlhebTNC9KT_>;?+NF-YJ!y5Ko( zc}|%4rwkC@5P`56T`4KaxdfgM5O7D`#6K%(_}?+TZl){tv< z4SVV;X{-^jr>r9%?G@otHnATppab$Ae_IKpVF!WuDAQbr3xqR5!2c%&^xIz`9YY1u zwY`9U$_DA$NkC5O68@>fTt^GI_xz(Q?DMw-pse(f-``mzYR!V%2(>?3BdfqxYr*%*eDh4K=7+bAo1-Ig4%@w=5E`|q=m{F|M)%)UDp zyD!cG%H2{^>}Sp_9qiJ0IF-WBKd&rF-euXG$YQfu6JHJYQLsO^oT45xH}M>ITeQi{ z3mbC7UAsN0V>OZ55}xsP1+M*>`|^Ar5AhTBo=CTqApfYJ`$JO3vq_N+**h)PPx)8QyhZi!v#Bvg>qra1+?w*5uOY63 zth-{1myM&6>(F*l6S98LJS|xEX}&(YJl^&f!^xIv+*_*{mm$^-_&@^xZLh$-wr+9T z9=_GqY)|R-#Lk@EzEaLd8M6IOa2I|w(pqc&lSWue7^U}P``iX3N9(9n;W0 zmY1V^jNZP|M*CPY^fWznO{(d4sS}mT0^wJR%}TeG;CyYWEJL=1$h#vI)@PJ!EZBRm z-B2O#g3GdvknTdSEM@sr5lkWQV%DzdTwOnY}`-HA#t=wbA@wls1Ntye}&QY@34mxw!|4bUfK2$NylwHcE zo$BpL-{TS$!?Jj+oRry8MvBkN)~u{uioa0bGk^9o416=IJNNWaUAc)@AmY3!TSe=t zK87_^kIiM^-VIv!Q>Bv$Ecb^2bk#vmjqr52XWr+Mas&l25QDZy9xjCuJo9UD(=xV9S1ht@a~{&j#sRm{qYd#Hf}yNQvzpFqeqG z%@4&h8ewaTx6O5!^rgV1ZpO zz|Ps>0&%c2#?IX_0=sMMps@otPrzRvfgQ3=0eg1d*lD{|KpuAH*g3m4<=9UY?npWQ zCkYRwT$kj8!LupHev0s_z^)+j>??d*VCNHg4iSDLu#*T!_CE`xkMztGsueN%z@GP- zJ|Rwc$aAc~ucooXiN0nFyQUod)(QuSZ=$O%DldAAKjnnKP-qlKU-)kjmWdNS@}DGh ziW8PDDnUBskh<5cN>{I5SL8TfgTp-r``g6HKf;4Ql-lc}GTN)x6S^Tj%rb$mXt48& zf%Ek@c5E^5cg4{U2L3m3c6u@JjT902iGgn+j_%|v;aiKd>>}>r!w(QAeB8s2 z5+}bfD};ICU+8&eU#_V@LV^9FSYdgoUp05%X77Oe{t$I<~m`BIQ56{;d_X0t}EtxVY)ac42Tcj zAny9TNqm{Omk;>a;$Gh2m!|Fs{}$oe$p5Y4cZhrWfIlYgg@1^9p1dT!u?i%4iamU&_!hciUKS>bdm9CxCGPRV7v$WZ zCGPsf{&I1T4}Pn-w;Aw<#J$eJpA&a|y(0eo$UXd5;vPQyFXCS3;Onhzr(bm2>r295 zaWCWWvEs;2df`*W2@n3NFe~!^W$_kqmk)lXxYxPY#4i;0@Zr~pdw#+17x(f5|8mN8 zoBXQGPsF{vy{=~;>uZhRu|6H8(VQ~MCocoQ}&H5i8?)t<1aB<2P>48rc=QI@jO<|7s09`R( z5zZE;zG2{3ihKO<2gO~V@K?n-WrczNT%7Wbf&We1^#R{(JG2(IfE#h8Yu|G%L^$EWs=l(u%uOHYylXL&3c$~hUipTQ(w|E@?x)K(7(I??; zCZZyin78zQTX9vPm3)x6*Kh2{if<6vPs;H_bM8+Nmk5c${~~cu4}7_}=O6sSoc-0} zaeQ}(t4JmC3?0pvQd$+#V#Lmm>t~+X8_()?$G$n*{QuMc7KXRv_Fy0&-Ugq=PV#i?~Qf ze*t-!n;{or;GQs$_b7pQ=L-0%69{9tfVvXAAimEExZhvE-3S5uLj=(Jr9xNdoa4Ea2}jf#;72g!j5YJv&gq-^l`XGcs^33sx9{nbJr;SB*j%n^A0jDXxr1masLkVj_=$Z>~2dS?pg<9Gpi<_Wle zO+YWl3D`d+5dQ4~;Xf!K=UW1LX%qOezdNH`ze8V>jlbZ ztAIY*1mw6#Ae;vT^zcx6{erIO`AY(FJSh;*Qh|8x6_9tnfPI62-kJsMFA;EmxxT_7OueZrQ)R|M?O7x4dS0e6=P==XAgblxBk&u0XlUn3CD zr2=w%PQd;ufpp#`@cep#@V+dN&ld{h>x}~8+#;a&HwD6bR6y<*gf(W32GBt7Yy2D} zJBjSvuwNVY6#XfC!;ONyugR_|J8R~n%&u}+tbNWvcm3b@2pj`OU1qs z??AG~?&r#D<)1S=JZEJ)Jcn_5k7staE!cUic5)}{uV_~;zn>h6cUeLVJjEa9q-y^|wI3p0BPFS_KOnm<&eEo=b82t5h@|pc!}X-b7#Np zZ6%WTA>!6OZWprdC}*7Kuol2HSS)KlW!%mdvBONcF8@UZZ|jkQUtK81YHf;_Zrfe8T2;v{waMBMJExT2m9-FqD{35l zM$sL5L3&QAkSg294QKj_<=)fo=X2wn3AN4Ym-X!BF5+51DX;9q>SSd}D%<$pI&B5t zhM>i?(-8D|D^#PX3230KG?)+ja+H--f5Q2GeAx~@;o95pw9Z*(-1-Y@v~#PUgvwi0 z;kV=5h39U_6T+p}_BO&oLT}eXxsgf`A?F z_Yvv@;=}AOGz!E^{BTzC;Jt-|1y(KyANxaus|CWse!6h0z)A~dhQLZBD;<4P{<^OC z#T+TTB_JEm;NKGn5BJ9iKNZjcs}Zas{Z-gnV3mVas!u9n;={gP*jbzvALMBi_R`H( zDR0u1-*92YgH@1bp-!BY5&X9ZeA9uI5aeOi=2POtg<(~SZ#du|1HV=r{SY3UZ#Li` z&Z-dKU_gHI?@Zyl;>d^jl<;eD;>W=MC{B2~B)qQzLO+=Egbl@A9{4B3$q(Ga2a0=o z&llfEd>viUCwa$jwrrmAi*!9foN|O=6^YX*rP=8=hU4`q3qE^SEw4nL4;! zS5BND0|x$Uab(0j{D12PePBMzKM99D2ELKF#|hsqwI_}68gXR^Ip> z7SfElS~yCa@Q5GIi4*b&bFFZOxaR?!-(ewq+{14b_dI7M?ZL=B{8@3rLmv3oQ+qfo zc0Y>jS#f(mvcE~3!sdB=v*>!_o<2CgyTWQH<`!YM$US^Y&i-g|uLIaG5+9-~=2qb{ zajygL8^mc7bV*ibZ_~|ox<~%IgqOuPP5Irren;H(caQjQ#r2mMI44RxemK9QLVgh5 zy~29pUI*?I-&*`*x?(y}UdiK0n8oihKTJe}*{ui+}h9;$FTU z62C^AHU|U0P2BSX{(v}j5(EE&xR-bMw^H|{5B_6um;Yh$KZ<+#g7=oPJv{hEIlhg! zhmZYOahC@^A;%BQxt}ZU>B0RH@eOpvz)um6<3CT_^?^O7Rbu-)a{N(o8ZS@5hDjMfOjM|19O`3;wRSRFu@;r*wTka{sJ2r(L|f!9Sq}(AyXINO5n& z;0K5kKL&oZxR(d`oSgg9a{Nkh*B9<@6-OVW2hM4ikLikePIy^-+k_c^JMxeH@5E_y zNiV!wjg{xm^WqzcyZ+(ZiF( z>*AiD*#AP@>jV5x;>d@A|6ROa!i-l*8L|IQihF+JeuTKU7w`kby}rU1ihKUTmx_CP z4R05Z(|4t~mrv~P6_4Y8LA;-yW3c~{xVJ~}Z;8k0`+3g(eepPcNUXng#JztYyaD2U zb;ZC3iYti3z(`xA15H&3<0^A7a+@L1mb;EAUygI z;!*KPFj`mAvx`7@(*)ufpAV0 z$g{Hr!ns%=4Oa-rPuqig{NfHb+;1%q?f`*!w->P6QJ^f074Y975Z(;}>Apw6{ZRtp zd{!WwTLt8$@8G(ffIT`UJ^cmTO%Sl(Paxcj1mrtXz-_aD9G@4EcLxD?M+lVN;|0Q_ zjpDkyfShv#!fz5NkAnol8!k|GCkm9G%LH_JmB8~c0`BGs=(Dxy@uL}gyT`%D7b^(2C zBM{yYf$;Yf2=`M0{znS9qwhzK@dEbO3WPgU!2iwy^6nU<3FzZW z0Xa?=$hQ{+o}Viq|6GCiuNKhDQv&%pNg&({1md|j<>%{)KA#Yf_bh?*JSPzTq3QKl zU3orJApDaB!aq~s`BZ^;E)|gXKmqw%1neIakh@VJy-y4HpD!TSeFFM;MZn!50`Z@e z@`bu0--SYz@UTF>d_kaGoF zAm1qh?(Ptf=SBhhn*{uQNg&GC-M3tYqPvLN18F{vUhT4_vi$} zGk}h{p1q)RXm!Wt=kB}u6FYrrV_W@_x|(UVjq@7nT305w`Nl0fA9?=kS3U9Q=0~3U zlW$I2bkc8jnjleaBfu6*%eI->q+qL+#Z;D3`8aZZtEg5_ZJU!L2ey2lRpUbWvDaK} zS(zX4Zd9{6I;pl2BPnjKPKq8XN0mII3Q}x&hKlJfDV7+n0|bga2EMaER$<_y1^i>+ zG^d1vfdh&$@llSrYwb-m-`9uU>oPwf9_m$jfuT z`-Mlp_NS`%nq6ehQ?U0&0bL|;ZixbJdwcosQ*q|N_EG)&@x}d3JD0#-T$6fg z{>LX3Y>$)B!wD&NN2zG+;8BJ0rv|dNzDMCt*#)utc(=d!#P=Qi*Le6YfStyPcOUVW zKP%*WCCFUdbE)(!e-5n7U2!kS&&K#QdoszN5*FW$;Y3;4v#$5=dhR2;uU77_c!sCU zUG`)|_bx1j*>d8(Dr=2W%nrBj(7TWP^R7a-eY4<`U9|YTMb?I2QDO(3U9s?WPYa`G zxzLr{a{arH%9=M9q1PK_Vm-A zpmHrhsJ-+8At zW!<7V+L`!yyvL7k`UUcv`em-^Q7b*qpKu^#{8PF;U1j+dzBW?XhxJfdmu08Q=BTBh zmiw1wk-jWWVzLuwlsap3?MpkBQht}D=z=fR(0BV6Z+rxiKf6}eMseB*xyX}jFA&Zl zAqPE`wQ5#RC@DU^vah#PI?vYg_LB1(HfBLma@6!y><>e3``HfjQRXt=@^~rq?-~~U zgmX{fOiMnLuH0nXEIXmb`PT(Xk)4Gk@AGF{?Atq5DvG1d_zQOe{Z}(_>f8Hgz1I8Dy6fn&#{561flCK;?p)n5 z?1sUse>yj#Ztl{S`nDA{lUr6aw>2$jscl{;(%QUoWuxD{KfU|s8_fCji@RTZ=8p3w zUAblT-|kymv(j1>P?{_sjBy~4M$(RoQk-q-M{^Y#Q-*Esk}Ab<=7oAPSN@tam6NJO z)uE~8N;NiD#ipF$ApVO@H-mK!H(FC}AHfUR$vI`;grYr2eONlbM0 zrem7epd0Iy_~bs5KpI4gzxZMdUFm2^#{Zs6MDx!NhV@i`92cYuUp1|x6&tMCs|R-A zf0RO@$sV-|@tcp)(mjWI@oo1#Pl5RwqirjW{St!RuWATmCHLqw1iN3A5W;ell{)*G z0jmSWCp`~&VA?RV$i<>JhI=*|SiIudRst)47#75bq*v!`B+=nvu-{K$p&bKf0pC|5 z;d2CERD;uH5+93Za5hY^hqF|7mViBm4V0?{UtEK;!Ne7VyGI0H*@Uy9M0lhJ&PESc z!e>L`I|7S$*pt>D3dn)kT6j-D4h)=6gt`21e#ndP@DJ~wa@{7IPkbWG-EX63d*tkA zh_jfeOXB`m-H<-aw!#VG$cce37e`*?ho2#i+`9DYFI=74!v_dA>c;K27k@gn*KM*% z_(E#${0BMvx5ZtbJIK**#EBOJ2k1wSlYB-lR;Nibn+K$Y6=Pp1c3rbD$_5l^$1QQ- zma@V#$`tv^;wpYAQ-H9^AIc_SpnLR#?g8>(=d0GpK=_2k6XW(8^1DSvp-2{<~qE2Fju+Btkiyc zB)e)+oa+W(K4-Kw0DdcTRl;G07QW8OfPk{%15R7(XSm3Gk5w900*f)SW5WP5%-C#B z*mHk2XrhB86v`&UH-E>BcU@glo4eb)4y=sX@1%s78Qz9BWXpWzw*=!(9K9}1>PLPX zu$b!Nlb{FFB5B}Dw7!Pn-7ifSO(ceU?*@1_PVi=(=5`;!{lTgKG^aFa@WleP%bWRg zbx+d?r>VU`pr&A`DW4Z;s;NQnrv#UUCjAA$YbN|lg4byH8-mLR|7MQUO}o6<|2AjO zGr9rfqehbsYCbiXrkuEt9~rzGqANjG?2#My$UwSD8_x-s@JI{xv^G3L2gpPBg4->6 zpVMojvo@;Quw%oj4La8U?)pR4YgzZDb+=fjVePlqK4Gn2uQjFL71e*KZms&Ds;%#j z`tIKQoIdyW*;yXfm=8q*?Srd24(`)!zk76T>+Bg#OIzmF&7N7;(Aw5gJNw|e*4Eku z+C`pt*#5(3OgV7)yr#Csy0+P^Epy#X%}O^llWONKURK*OPur`_wQV!&THAW$sAg_! zb4$~rs`>4`sycfA>*XvFDwSZ*_I0Z|KJl-Ypr(Rucbj;SB2ENQNOcsVw= zebcIr9lMwDh}OE6*4ef5>Kc~Ju4!DlKqaVIWuBx@MP}QL`KB=gd~IYi-l16_u}1dgR_xhc#9(8OHV9zrAl&$66o0RCAkJ z>besMHwe*Z?24-P)(=C5+EyvAt-E;5Rg(NI+pDWO*85PRowTdzH~Pw^_Aq!FWZM#bsYPlh}M#xr<$uKuf9R0ysqWs`nft-wY0Id zc7C0N94{5+ghXqpkbWMECKLZN-2V}Yf5ffYqJ4*|j{QCqaS^krQQBM5q{>)R+t}FD zR%`jYOU>9WB}Kx->%ocFiNR~4(|${<+86(GGPbDoYh75|(mZ?A$Z<8}YQ~q9w&`*- z14qQ#`|~~QGP-Jj8tay|sem`lZ>w3Ym#@!p z&)OP>XKaPA)`x-D2)?!l-$h^@jkP%VUg=er#9h1!k3Ybg8tz$7V=WHrga?bK-S^s8p-oJciC%3{0zq}hx7jb;S*1K`dJ2?K7Rp9*Ty!h|{>*<_qkI&b4wK~oA zzMZUMS7uouY+sk943GyH?%6`~JRYQb@&(Ryn7}$RoVC+20?#o#-%TJdG4RQPuNT7) z5MuX-iF=vD9#A$2pLJNu3}uKiLm470+~bbt$jvjtdF}&+ce3u;$d(K zQ2r$Z3ZtDC3Fk!E8VSee!d;nv+!jNv^f^-BFtm>bQm8pNM@1+P#Sh84tKi=@k;3OP z{m3{?C$FM#7RT?(!Vb24&dfGZaL-wuCDLev?rn>RjZE7N<>&rz!{_PdL@&qK&j2o$ zPrnPHd*jNdvaIU*3pTdB6#T?5owP<_S!J~i*5EpRnmzDpZb*S0lP`Y6l+d#uH?*xW zw7?H3l17s*+l5%e(_M;Gm;MKaZUjShq$*>)+ET4~#ug1%sx@0KI|x)=ukJ&1k00!* z?sP>|b^Nn!L$l+}0^2!sJsuZfADrVyiF*@={c!@#90uMjFx2l6_@~{_?LD&@ywPvKR-grG1{7tDRY;7oZ*FMZxlqM0WLhLRWUQnf8;!wD#5~ z+9}JduU@@xJZJ09;njM}^&@zd^N_l>npt&o4r^&zzJkeSl9jLDIq2rmf7+(=qUYz` zIrOa2qmsi12{axwC{*a7f;UK1ej0q9W8h;2!o2qBYd)&~F z5Iz;3c=1nTLW6(|fG~LO4H^D;?s2OY#lvk%E9HthM5crfsAfwV1NB)hw zC%VHErnR&nXvvNP<=X`tRhG95{t_kf(ppt+L-Os^s<_RzXyqg2qRzhT{7}8yVPJUIQEueN|_z_vvF@e*F!Ga@8 zE5T1T=R-VMz4XjgTzBG-XqrNdc`0#eC*@5O96wwnNvUmqwfbP?9L=|^wDG(x(=R#A z33-m!(X>)O`BZ-8@|i8kS)FAWp)qf;_aUhJNN1lCw%V0-?}x#P->N`2%OoS|_3u~2 zO?!MFUXUmL_@zQy#Gtg7%^7&_gZCh4#lm<3|KWM1em`5A@_y_UFzOq?giVV~nIyLvwPf2#cb(0@ayN0_RF*W~ z2Y3wm=N3Zc9%hteC)cg-DIXohF8C03=(*zB6I_`d>^La(1)K7;+6>hXYg+qdAMK!i zk;DFTB}nLUTKIOrGw;V;<=uyT%(oTp!(_pqje)tNNARAra$4Pwy+0IsM=z%~%cfLh z^Pj`9=#$z-7)#{>xBnW$un5Dj#^;mVGyh?T!?W!LhGPtcn5*xaa$S;B@Q3K?bISp` zKT%*lg?s!q3e2+@S`8M?7jTCeBHS%7pTZvgqOgO287lltU|z?N49;AZc^LBTBy1v& z3?1Rag)PMyqTzm|FeJ6tt=`4aGjYPhz^96nKHS536N7Z>k}P5K=7qawSb32+`oX~Y zoHgmhz~2yO=&DP?zpon~T8`7RpNli3B);(iKeq1Su^hUdEJz;)zJs{0J;29_qi@m+ z=X2FA-=5;fi4#8Y!xxB?7nr?-#p37(179vqco_Hv;{72qaDGhPhqv&D#F3Bi;jf94 zKFr?2H^qG@5C5S!@?hY<6sL?~;J?lJ=hN4*|K3Wd%Zqz{Y@H!G@x!+i_p-}z=3T^H z|M1DFd)@Y$An@sH>@gFB^J+ zj~nU%etCvl{1P|v5jJ6>JL23ny&s?}>DfV$=t&!bEW-ri7%reM>KggJt3Z7CAw4?_ z#7S8~E@ej&FK$U6Zjc4pkZVGECC%8AM&cPLAn#5Bc6$iKK^-J*q=B$@5eSbm#q-eu zag7m(AKfDV_5$Gz5{PG$UB zL$Dt#poiTB{Lyyue1w2J)TK41I}Na-!05r=2Da@qd;hpueL2f8j2~iK#`o@m@k?0< zv77Qxm`$@MR4D|v&-=FdZGLZv`6MGNA4wr~ygR^b6hFRQjQg?~CNmY@MEnMK(Tt}#2aRZaWZ9P*3#h3|ai_ejdW z>Q{VvN)iJMyc*L`?6R(hw|OC@Cs7+nxUm?WLho= zlNmA}$YQL`xYxt)xyz8pt~2|IKyuUOG^CW0Mr^j4%Z7QJyY92RG<0n{I?AiEvcx;} z#U0V^!pznY%fqhyta>b~9!G1GR>~t94O00N${I%+2*0gc`>y3K53_5@-482U*0QcB zk%Ce|t4wVyrXjX1mM|+>EJ0VHq17&Kf&fwS<1X6vD6i{)${b{T^7Ug_8~7TE!@eu7S4UU zv}JC5P0QV&cV1Ywl7WwK4uWU2rNOPYt>H=Bf?8^<*Q6$dAABw5&#Hz%`Lgwi{1-<& zBwJJPPg)_n^<=J<*6s!^J+|LJb;%f&u`7mq#-WUxdDdUx8Dn(DlZ-`dXKZ|tz}T9x>JZ_2fpIQ|xbGE+ z4+DQraM|Hs74VON|ECc9|D8DUW3c}~KtAG!v;N@rjG4DiIrebYAFzjy2I9;k;LHW~ z5of%uOESivrW?lF80IX8ME3Am5#Lq(L~-Q7pj*}}&;W!jFK8JrwWWTSToiFa` zhu49nM_zA7(1((d=&_%! z#J84!-iZtU_@Q1PEAwEVQ*W(%>eKeZhQdw)cGO+c%{&}Gy9>BQ$E*RME5es}iTz+* ziDR;WTx$!IbKDRwc}%?h1?1g9;5lx1PMYzzqkzoRJ>=mT_Q--i+62;0877@W1l-Uz zVLwbj4%!M&JNC$oZU~FAM%;vhA9O`r_@k_GPg_Nttdk)7&H{QFE)WKB6Fy}P|Fq@s z0Rr~a0pgu1@EjeZ6V`R$BL!p_D3F$+DW9k-@r)60KUTm!Z2{p?=aGAaKs=)ao=*_a zHR~2!X?sY|6oGV16L3FC_)rXrtLpQ&UK?(-&akyUp_?^kjRyYzqJi@^?HpU(vD-yw zd`PF^dh+s9?!{ugP+VWzP=8ADreMusE%i(Es^H1dFF$d725D;4XY7V|#(j6pMa(9=f|^*6m;V zD~9K@!0ucX&)?WboR|;wEGFiTVO7ihq?l|(^GW{J_4l^xlv$bfq_3Gc>M713qHbv|Cd0Ii-G?ky*ei%dV1%$p|>V} zdO~`C~+=(@Ty{er)V9$Nut|5&Mrie$s1Oj=cNi)7D?-m6?*(YfZh{0#-t7 zE>8*L1NO8KtdnrhnrY9Tgq5k{T5c$JtS_*Nz=>NvnMGN(wPVV)&F5KbW3JzjXj|eY z+V-6HT;n;<$PID;<2gvqVc`7*#zh!7<0oP`>XRNwytQLyYg^t)5aI=_2y#_ zTsQRct;V$6boeVr-Q0Q!Ka|Z{jD1jz7LJ_q(=26YvwG&*RuKJEWbhOJjJ%bAuI#es zr+jC|-{E1^&%Po{DdP*UzG~^Ein8t}Ha%^&cY#guiLa;egBP^Ktd|kC?Hz=$%5Af0 zF8W%vH*u_YAg%0LaXQDsXGO0pUwZ03E2Z@(A*E=s`!cXfcI0l8^?{}O`Fu?y8W-38uhVaQ`p~ACr_cMCD{Em41onvae zf0x|9@?EwwS6qd+zIfIBgf}L6H!$qE_v(EUg`iL0qk65=pnq%38V#(`z=xuNPjB2g zUJdCLi&lR_>hJjP->9!BH#M*PWLf&%6Swv^vc@j`&+i;F{oD!dKb^Mq=}(?=-oZb< z>6k0j7xB7tJPgTp^2LcOZo>;fOgij%hQFv$^brP7wvox?+7=*u@(?B%tKycX-j3nS zPX<@~mWqXpR11G9ul#l8CZA553dKhZ7|z*(gH4cpSe#$L z2|8mCZAXj3cZcHxL@Y?qk=c=bo8m3Vr4pUSudFjnrsG*5wHwcMP~j3BH`c;A=l29yHDo z#~+4)*%E<4A%jGCyWoRZuAdPG3mDuzB_M+jCcmtEA9ND$TY?YH;Xf9*Vz~Y(y*giC z5y$Sg7570f?#GEUFvY-`b`n1Zevo(^|8#L5bYsr}cJzXQ*Ngik0M1VbxSrvF0j(Y< z=_Q@$1$|@3;MoVwgo|t}M=@w-%tPFyhcLM38S>$l0W*Vc{1Ao@w0!`L8{$CE$cP*A ziu57_96Q_-7GV?DMH_dHtM1t1s*hkuE@&*?IvEK~)O3xR_kY zB^rod$IDMgD*3}#n8I+FX_YI5@Ppni_^|wu>Ygr^1(M!I}-aJChmP2_VgJspP1wH8MLPu z+#e@ST6IbIiMsJVg>>6F&EZkIeW(HsVJI9v1PDKZJu@?8!qw9QY+{{2~i( zk%c}6;Eph`!!K^pA#o#vhfSQM2S0tQ|JZBojn>*umo;XM2G(d`jRw|e;QwU}bPVp? zy}Dz^j?t@sacaMYra9rfOUaKyef`nte^~L|ca}bM;++>9x@`D)bKYv~LubfO+%l+R zdY*l+D;~TtZD0^imyDr%qr1j%PxlE2bcuA?7`k6T_lX_dB)q+$bGPb_b=r?#{hB&N zKcmo6KR5hb)`pwhviEwgzWH|RkG4PPy@q#was9@BoJ&_92FVPs*+~q8S<--ExZrx= z-iJ-D3%9>yN$0NB9ot=h!0JzL=2zhKvljYQo0S{ev;8sCo?Z8ikH2u` zwl7}r`0piqaV3eBHeU3|{-#@)Nra7FU)i%6K=yNnVO`5Nm*Xe-)w5vdTe!?Y;w@@s zLE(4cWB29Hi?I@dt&uTz4I%i}R#6kd4KL6jkGahr8Y^?;$%6yuN&RU?)*n?}Ejq>t{trk|wJ)WaERu+Qq_;VcPPrFJ( z?3-;pI~Z5KWnUh8agJE-u2QOE3D6 zY4n&YjTL-e$NY4%K*NuLGp~lzc*2hr2nWMPezV{m1^hIDIUa^J#)}0y7YzJnfw>q4 z{*d7D!=D#iUidcz(uL_S{8;dLDf~Br+YiwFp9TCQFPsl$`n-Av@y&94fH>|k*pC(W z^$7T3Is19yo<8hP7WeeQ&lmT3H~jJ(zgFD!hdt|yvHPdQV|iZ@_jy0=za{P+7W@Y} z{`cBTW1u8);zvj_l+e{wWiH zIN;j|_(S*jBhLv7*>OkNRxP>R4sp>=hLuLz^6bu!tw^$?WS{$?<)zjx*8e%l9pC)s zg<4zX3m?C23xSXtz0*~%pvrO#od95)RL$6oah9}?(V2k6#EEoCla`)q&B zvA5utb#{(t+5x)o99@zgPgT~&)=L*e;m|Vk)IMg$K3z6kJ5=b$nmx5hY3u&%R?Q_4)pS94LQkx$gPm;dJGeew2PP{uNikx88>QLBpgd#&kT&uGwYA0e+Cg@FZ+jn>rnp^0YownL{MQ}IB%!v_ z4wTIu@~04%CR(!3`&+4;r#xAa=98U9uzVY(7ZTltJz?)8`(&J6-pf9*_;`jEJWnVc z*_S4=j8>E$i{izrRiB_Th+C^F`ZZ zBL=Gtm8FW8i0l-LeNv|TSj&A@irHF7Qo;Usv2?IJ#mNzBeYTf%&Xs)NKP8e@hMi8H zSef_xxK5#Ys{=NJ@}4A~PsR5|*(j$LpO;v#^Ul4+aqjI6l3DLUTVQo4d@#a82`{6$ zYnRb^w!hCloi81*OItZK^X=}6vUv{{#vFVg#M-&;LUmbs>aJ4kHYVsU6mwNMjIMi3 zmo#E zH>*jr^D-Vz0rtX)FFXl7VE!3>VE!4sVE&o40mpF4!CE2$$XJ# zg9PTR%zgU{y9ho9X8y?wQ_N?vA0iwfFkfUIxs%W!xcd>hUn($HCHyf0Yaz^8;bVnQ z3Cu;|lD7M>88UnBPv;WdGIZ*O6m@I8U~EaB}h{7xV|+#e|X zLtx%Zc!vsn*o1j9?nw)04w(1CX9=7`bNi#k8^qBMhIOA)#hH^MFZ@&DF5ijbSBoPb zW}d)@Rhe6(KltO3{Q_}5Ok(qHwlwr3C^`OjarA|M?D-H0`37Gk3=~Jd@FfBt8ets* z(=1FC_q7@LQR1XWm&BeAtDy9KW#S{mDO05B6k%80xK2+O_m7X@A0B^vN_V8wL@(9x|bcp+!3H%Ci) z58qZC`3UbyVJC6V-_MCp5~q$};Cy@)ed8bA6xm-b{%P?obj84L&++HPef<#o?}<|f zFz{c9QwEU-{zq}o?`y>WE>4-oTraGn%0~Kd58p)G%fk)g1H`w`6$9U0oHZ{Dd|Hkl zne#tioHhi5`%}d|et2if(Fgo8amqjP+$3BT@tehO6!-9M5r0(N<%Pc@?()IEF7EjQ z|B*QQBK%v0cf^sWk8qptr_{Y}d)*=QQRC+M4_{Z@^$p)#+}jxV7;#S@d~b1YGvG7D z$sY`SuDI(Lewz5USjxb!5%>BAzfBxjF`pOi5GQ>Y_`~AVKhg*PqB#1*+$Fpz?&TZ) zt(2=8B=$cNCqB%*!mq?V{qXl9|L_mQU4Hn-6xrswV&FT9%oY zr@g{p{~dAGkO>d|CvnfeN5!iZnU^>C$Hj>s1K&!-<%JK7_+#S3Q?A=yj|=0(UH|Y2 zIevh+L`V$whl{(u;B&>j{J`6D{6_IO{JX@xyyE^*@d3JG;NKEoKVin-7XP?7`oR8u zagYBA@qS9Iw@>f^;w}$-A8~IF;j_j2>xzM&Caxe813yRH;;#QMh}Wg=v4^in z-Rm~_(B1jskB?d-18S+pK{U%Zx(m`Jukjo+~tFJM*iU!iIaaA_~qgrAN*Qz zB`MJ_{Pu{yApStgb=&Jj;VE(bB?b<*6OfN|(sm;s?IC(mcbxPO$UwOyZN!Hg?vaK3 z;2C-&Z1S5rK{+6805{}2cC?q|(Ut;r^OFL3j32_lZZm;;2#9--u)Q!;*jm_8AnsuT zVT=+8W3+(GV+CXxC+r}!3fl^22*m$cfjAx#kPjJ1KW#Sts5_*QG!qYTlEwoC(tU+M z`UsnN_Z0|lo`8R3B|Sp~>?aDyIaNTfCkuqXyFmC20^u$bi08tT@1rX+93T)bX~2G_ zfd4T9{;n6$F=+tALAqSmhwC1BZWNGbuz>ut1md3~5bj9=?ig#37Y_@Bv$H_>y9wms zWMLEG;FNz}SL`WEq;tAJIK;v80RsMp3xqdUKu*d4oU%b4OcL;aqJZpm0%hPaf#(AS z!rV{5?_~mV+$E5%Lj>Y$76^ZufZh%jkmneIbY3j<6|NL;-(P@_6wt>~0eR082xotR za1Ij)=V$@_?B+FLww$Z%?nE z)0J>f5Qyhd0XdEnaJNt(+{FUnenCKQmkQWlBjEma0e6oJr0+BV_Zp8lT5BCcAe^wyA8wA3AN+6sE1mb-{!2TWqe~+a68C?nY z`SkjNu9S;DeU9x_eX{5sN;c1|A^Ugi1JBD2F5xwrHpB|l7$FJN^Zfa<#o7-03 z)VT6I>5(7o^u@~u9ntXLqt010dd4+p-TLSif29_(XBE!C_}h-YGVE`?u|pHTXJd^qdO>|*f46=vgaO|#a_$IjXRDoV);ID1E|llz-{>`-Mx z^!0sYBb*Q$>*w*_k-g={{uZn4gi{tPtp|oyla>j?J*^Mm*+v4bWp9C2ufIU=f}u4Y zE#L?n)(=A~zCdvQaC#9BA5O1JD~W;A3VZl)K)A?@ z?8M_~!j3eN4&o$TgoS&69d1dVyG2%>(^6xH-*2AMxktZ_A?|J%;`;Ff2fy7QzbxB2BZw|xF965LLHaqfm1!pF0y2Y$ALk0i3Q!AI^n zYs4-d?%1=*pX~|zH2%pPc5?iTM45ZuMYfY)UV=H-(4?Ne>}v*d6hFI4oTh0@cDmU4 zvc2zO=zezX1ck@WN~`J}Zg~@#8Z{>gt0hTq*hBO5Q7cHbbBo2F`aUUc!cHV^vZt7e zQg!9p_r!=LxGM|8bVhr^9;mk@m0d2AJ90IgY5tq`=t{@+EkI!?(F0n;#UaHw$ z=Bx%avrKQnbyufE*#W22#-VrR9_jptNL>?l;>?+yD6%mDZ?(`*7fWNdrr293R%*&p zlXcDMR9c8|W`fd2J3u&A*ZBfVQ7hSS!WlJ2B352~#8U2;a^!pGgav2(Vl9b1p#^SI z?vXo;Za9Z$Cz{X`;~2t5(ro^^ZTZPHw+%A4O0Ri6lu4a;Q>H5miFYFGr_D(dsmZq? zoTR2*wy_vGqqc`re?IO+muMm12W8tiTImpnx7$3i+@SR*{Ja!?=F~@x#nZ&zu6Q0f z52siBiRb2mBuA)C=z>w;Vc=EBEPdnFYCsea1Mk=KuPM5i<9EQaa`)Ey5UD;2o(!@`fSxZ9g z38%B{WWUC^w=q)g+xM(q>;JrJi7so*8V#(`z-rV$dwu6V)g7C+e*`bw9<`*QMwrqx zS8p0Owyj(osebRP7alQg{)1oc{p9(#{^5t~9>4$92Qq1mmj{-sn`%g=#^{PEFw!Y>&yA1HJ7w%&mJI8oxxaq`kSQD!9;QNzlWv>l*azmmSVMOnKd0-l*AnOe zga7c10o@|`q5F&N>F}9yGqGgw6WfKO0Wr3dh^X`Q2y-e@%Di(h7v($N_fnI>*8W0!@po3wKILhFo-lD^f@Z@cdtJrqVbRVGHm`{EhMN^RDZ^r_4@H?iuv}!He9UTo zD21u>{3d~T2_ODg%5_OLa9`JzC0p#b z6W$VVhaoNR2*`nfuO-2dANTN2h?9O@k`40hbc6hufx-y!%@SsOsyOsau0t|9Q|P6UlsRdZ}{8dt}pmIk^dp$???XOfbyZoi9hsC{FEQkMOrBz zJnNT&__3p$5Etc=Fen$Ko$^2)kxrfw24#_FltKLT7qBNRIB6iBtpviROb{kzh49fm z?pYe=IdR|*Kg9V-f#+KY_{S}FLj?Sghok|SDKCTx-&VjqWs~$_2j4*;jO_*FA0QCk zp!AAvwG*|M23Z#jUj5^a@KyVU+WIBoV=kTVt=<2)XD0mN%ujypTi^YA(+R&H+W5ew z64lmoS&a#Itc%bb^OQG5nSt6a4~GHWDsnswf~%Ey+qEymZg zAEAjmpJEscs_4|MLC$`i(W?|if^5ccPm#dzjN*kmstTNf_ zccKvU!^Ei)80=3J2nYZ0dVz2-6!BI8d9a7mG~*savF;FDcK8K?%MS$rTjatoa9!aCH`q~ikS&R;daGXgTVvK}V2uXWXkd*7OaoWcc2217 zIP|VQAJV8nzh2YU+)&##zo}(O4P;?cYuoHmV{3M+89BS5e$H(Dd}M1|ZR5P!mU*LU z#?C&ter`)sYt#I;nwfHZnERZphpn)wjSK1<>sBscJlJsi#=qL&oXdam)Irl0zCL>Y z_ZEyA{sVO#Or*lsQWy`|2^3#5E_q@*Gc17EB%HAaqX?ELn9B2W zVzv^`bd5=yy^YDFj%5k9=^8WuCq&7LBec_ z3+^eQ@d>lAlh&d+0Cm;sp6z$Xqv`nGccVGWzygt-$YJlS=Q$KyvWP_*Lo1Qh4Kl|I zRQ~H5*}Tmz`dA*udEpwPyjm`m=Y+fKNj~J=TAIiutEF!5?U*k!`SY%Fqu5f~*Rfaz zC;3cp?;JPfkkA^1EB z{x%!u$vOJ`xmrTsO>pkZ-84jkr&1b`sxJ9KB%R zhlmp%27a`-#|K{|?n_>9mXvU>OX8j-B=n9MCfp&;@(Bk11#$F?f%6?Z&r5jxojN#Q zG$nsA@IQ;MmoVdOM=*cWFa344Hm+wBGF54uGzfDDvb z^iJ6#Tx3IrfdXy@351Iq!bJwsv!j5!;R0zSY(QF&kuv6K!5+Vajb4a{FtDetlD_@| zX&feye###1NF(ls2-y45*_+cO&r#?Qmn1aX@F7(tRhoZ7N8n^`+f zA2C)armNVqGBORJ7NxN9YF3KyiRrjUCv3J(I5}(MCrTDQc^s-gi$g?5a|E=DX2^Y> z*w<66uV%Dlzj|h)QAX3OiE{OGcW}~dPuSS9Ej2jlXwzGR;}TnAd~+q(@wF8gXMjV@ zlr;2>WM&(*1?QAa9I|r{+c}}zswQ9mVvEi4I(vfF;wpQ_W~rY`we$J$=z~?pf4w;) zje<6rb`8Tl?TSC6&BBiMn>LkphxW$X&M~@o_q0WO3bd8@$L-+)Z8L4)jzYaadrWw= zk*5gwhtoEnEztJipSJQE0U2n^M+tYNT$kkC(1%k__~V4<1lnK18!x;m&}L$G6MiEQ z7WVLW1=@c6Gp1TsH?;f2Pg*t+r`^TRJ_6sMp*_a^6k%Y>aX(eqS)4uy`)NQouG{^^ z=ZMosU=MH8jgK=95Wi5|`(^me;>d%0_~&(lJm~*Gfvqe0C+rUuUeyhD@WX^Rbc1^g zdGT#=`W)=x@9GBqW2OuLTb%TvA2>JUH)f`=fjIJD;G2rOKHyu6lfTGtgfKkyPkcuU zyNi2zj}bpyocOVaA0xi5uITevVV*eh>yo@<*p#{#?RBECT-?WH@Jmzox=rk_O*!G8 zDBO{9!mkw`5=UOlJmDpA;>W<>OzrUx|DiZ#0aGXZM4bG@z~2`qKQQpM6_Fk#>4C2+ z?)kA${1Z9eU)=S9{f^=ue!ch};+`LHzNbU|AP)G<$o*n*zNbU^#=zTi_MZ_auSg&E zpA)Z6d4sOkiR&-1U!v=cBE*Mj6z)mwo!>9+`o#YEoc&AUqz{Ar8{++RMSl2yh%=5t zo@U|4;>d?NN%)z#>ks~}xaSxA192~p@ZR!F_=MLYtR?R5Tg5jKXDo(+4-}{VV&D_R zsV^A#(cBjT z?)eXYTU>vMf&V;b|KH*tkL>wbZP!2UHxzgMz&8~qe@WlTLjRQOR-+!ZZ{nUFIN$4` zU%B0RIk^kl5 zFNk}2fqz-t+uIf5Uyb-F;@?iWZj*PMf0*Mx6ZiZ-Rc`(($KOvm@?ihhh@U22rNp@Z z)5X^pcYVM&%klo=%q=k3kIdQg%+p6Xrk;_%swPP~DLb?;5+f;R@}A@eI{1WuuBmUx zK)D0k2$TW*l6Tk<2K^jHQ2{k@q-(=YVjKm2eIgNXsq)VI3xr z#^VLjwzI(VSpv_G5(tAh@jp}`EObCPLj+_!MnGS#OU5MJ?<5fao&vhB6_9y*0r~eA zNcWKf{?R>pnJ5td-U9y6DdF@Nkb}C6T*C#P?<(;8K!I=$70|;Xf#=NvdLJg>Z#RK( z_Y+9R;R5O2OCbIo1l-jKq+^6YJdFb3o}OOE>Wcd@0{WXS;BTNnyeA6C(jm632|PbVApG40!k-|Z zhe-l;Wr~3N69n8(PWc>NdkY5$#5Y^O-@XERJ47J727&yXD z_u9Ju)V}rdrH%D%HMMhE+w@ypd_19b_UM|CHDmHS)p|I)=r-(1U-ICg_k4TMy+f`! zbm7pk+q^yhJKq}0_>G-OTXo8=7qZI6JDjY_@gFz5p~hQ*_GT`-DMdH9v(+J6Ke0ES zSwHlz+w+_?I&AW*kim|3$8GBNW8eCYb0Hr}mfM;c?*o=U&p!24 zJa+TYn&*`I%X=Q4-Z`=Dl%3rrR_n;F$ zcx+aKI$bN*_C_*qEwdU)dWuh2Q|D+u=QGOR>NP*COUGw3C;^moc4Aj31nPwypN~s> z2$_{cRwwbpH|IHM-?hu^u5{i#X(9K*&Tz3l@p=n!u;OX82|a|f583r```!Zb*)e_7 z2(L+)=6D{j74zIqukhssZz*seUW`Gb=*8FB(I9V~^G&Di zi*;@^Njl^GkfJu+mz4)t{zQzOZi(0Oy%q2;066EAi{&S8ccL>}E9aXHW$$SB%wIM? z@I#5Qm3vm@?G5JmY(dryxy$|oC5Lt^zYCCcZRM4g#mcpL7V%i2&h&Z!Pg zKg4-lj2CzI3-V>Z0fKGumqEhYyS{T^HOKmcd~Nc!lPj|D`$kqj>{kx?)g0s5lhZI> z>atx1J9W)|SJ+uV4{?czf1@J1Q&riK3*%KQADxGA=F*|vZZP8&=w5We7Hy}`nycjSey z`NZ;6meOkJw3B#YH!_Youo&9+qft95I-BaF*BkOY4l}FoU?oEpPNU+T1s>^wwQDd^5`Ph>ZpT8*dGCGX;ybI37|E$gEvar7kA%K6~&b{$jqHGmc| zKaP%bu4voSJS_U`D#b ze&~l7rBwDyA7mpKA6fj*{4y@+DxONAR>}{a)7RUYgUcU3?OBP5eN@h$*cJC>ZE)$&3+MbGNrAgd%7ujVr{WmFXVEtAoICC*0>%hmqT2H9yo zaxk1p^D$~yZoJHR{~Vt;3;qsHS8drJVGjtyJ^N7Xk?@TDGw19pv2Vow2YW8;#j#Jt zJ`#H-xMkmqJu>Y33&#s^%s_$t6~eRly8o`=X@UPrAWazf`vUHf7tSmB9v^#a9}_1%>x-@Me``Dx7kkbHp)ca!S9nC6asuB^_>Yw9Hra!ISKQ;Dre~b%iTMC=^oPNI zj5zXP;8Sw;M~Zv-z`kCbeMsVmFBfO87qh>>?_8k|?BVx{v&W8M50Y~=*kj<|6Zi51 z=iH3v7yS3)lqU>z;~(Pa0|Vb&1s{E2;A3-qhPcO%eZ9EnH~b87FW>MB#Mjdm1HVGt z^#{LS-1Px}QQY+j|3=Q9-=SJh&(R0=zZZ9XA0*yKg%x`Yd;@V055Aqa%LgAOj(#xk zUB$gT!YAhZ&k%QgW4}n8eOe5>SzLdKfdkk7`np$fT3H^+2i%hX>=9E>))pwwJR=>X z4Uh)(1c;wH$Fu$d@(vQn7urMegStsrlxgBcMh}y?h6%*Kvw(b41?&k6_v;GSZ!ciK zgFqMq1^i3xiCf$tCwYpW0|ie5?kLm9PnftxM$$K0z@9dMD{ZnC(ZCuFtkJ-~rv^TIc<1Emj*afz{+~M6v1H{} z1@yUrxlJu~HMPyn$!s^AQ4`>LDjPW~^v!t6NeNenKOB!RXH;e{=nHzus?) z>32UdWu0r@`PqWmV}JjuhA6f>%gP~Z4z@d!U#DS3fcbX3FIBdlQ`{G2_8HdFZTE<9 zY?seg^;swI9iU2kL}j~i;cG~Qz}^CDFt+F5yGN{hGb3eX;G^F$>xm{-b#JYx%kW{t zO4?+X+Rh==C%R_`AMG?$$p50NvV1MN3bAyx-$f4b8x-Ybk1+U5rR{>5)Md}uHM9LC za})0&*}M7t77Hbf9V^?fW~GDDVe2TirWRH^d?kY&1v}lu&S9}U$M&A$_?eYKTYF(o zl{;T$W}kohhNV?hEVd$YGJVT9h86126By5MGfqnK4SdOoCd=^ z^AqO5JYzn?yg<|WWIn(=2{&-&9n3SBpW&W4B=aUX_JqTH26t-wleyFkU75$=o_W?W z0`n^jbE?Gx_V|al2!zL+ggMn|0`g#X5I!X^kHNq%6@1+R{&^vG|A;vAFyz7h%Yxf8 z*ZoG0|0u_QE$;H-{x1UaEYbu2hkzb1g9X;vVm?SbnOCLuqf?H1bi0o@^F9oGa^xO< zm^k{t3>A(MXWoZ_FO2-d{Zp8FoY?azOytEdcU&fpZn1}-uA8-V#q1=UBaXZnINvoO zKQVCD^;{nKJ>s4p@JGd6Kk%o-(LZLG@Rm67W8mM+@$ZW>&&6Q>YjF=B4w%>LagvYZ zEAsah2p3(hEg%Ew;2Hjrnexdq!UyP)ydr;*k@8O&A-(9Hu-6lK&bk2MY%dTWfD;Ds z5jNMs0?z?%@XK@7BZ!-O{7}}BjXJ@#zkvGz06$ey&KExGE)p+=44fo{f( zPH)ETlHMHF){=bJvTjCOi$1A6vuVm` z%PuPm7bi#c1=`4=lY7>Ol~_qfpXyzOsTME5g6Rg7{|lt`l>3c{g^DqmJ&45%RS zxfRvr`UwT7HjW4$1&&k%%3?-QZKw>D$xtf4P;oGt=O&q>C+2mSTUAVzoa$&*xID=_ zZ$d0lwU%(CCc9WtqG3;2XkdDoR~AzOWz|9Wu}kcDx+6ms z0|!u_M(galvS8G69utg&Cq(i?71hxR6~Vk{Ud3!FSn?;+?Kppb)m1DPeK`Hr3U$Er zhe6T9a?@wyo~MqCK5(7r2Km#s;s1i%^wYRYMerb}Qbb>e`>*1mAB1O)h&~m6-n*v% z#J{Nq6DwzLx#>^w&yt(|822!_88dJf%5CG8$c;Sw7syRNkNXn2>3eZ+@%h{LmGOT^ z{)`v6KbPC4`-|K*-PSS=;|M$#YXHE1xu}Eut^9+0?i_`YNBG%uVI0DJx(GX<>kJJv zj2p8>r^?Nki2Ee*TbnJnJ<59^9$v+d0e3|Yv)c94*xpQt>Urvd_wN7@{LyEbXsZY}Hsm|?whlZZY-K*}<9WsB&pgw{ z{n+P!jM5@*P&D0_?iI>AHYe{}JbU@v1LbD!fPaPL+q!g$ z+_tP&$c=76(U&4+*-7t5{n~tS-WFwn9?W@33-`H-%lwA8>wWH9Eh2EnDW9sMMNHP&y~MTYmtwKy=$AV z3*@%^FG)|^roNJ!xIxiRa<_BcgY=8tmWy_g{jmc)z2vrao8#kcoqSymRp|!nL^u0% zxJPd4Cwj6MZu86h*w&M`eD06rwlcqx+v?Bx8AAn*k9r3 ze1dpL7xz{2w{7PRxoy7Al@XB7RVKHhIC&Ybh{&W~JtK#03(ej3OTOCr+;5AAHb`3E z$jy8dcUuX!^>B)0Ql`i(@yRcf8y)bk_PI~LXH+Ttx2_YXHu9DlfyZhxPE&Sh< z8{6RiLGF&O8@po9b)p*SVEdo;@+1uY4!&~iBDbPDvU>UKoGCrw4~h0uTx-vPK7Iu` zJp7ImKlWcI;;faX`bEFta-$D!&Wf|{335w4$A5_&wvHX;cUF74xRC1b%w?;Hp@{vh7 z7RjwBj{A6@d#2AFksBMrkL>j#%C);_hNx6DSF}>JO0-$jP(=T9vWR@G7OfGHE_v=O z>MJ@}G**P{6{1^3jBU4zrihdUCoY&Vv775hUeJNMiB6OUwx`ZhPLwm{Lb=k9V$U9; zo}yl&exd=QF{0_BVo`}GDykOE5uGYxt}1wJ-6XnRbc^Ut(LEx{qlIXH(E*~tqT!;$MMsGOqM4#9(P^S9L|2Ng z5nU^~S9G6fhzMDyzwV583wT2M_M?C?8$oeNc9LYMgy3zFW*k&UkW{JxhD`yV)}`Z&#&{VRqTf-j+Xx z-ErlehUD|8>+_zLc_)&$r)t;DzCG!2rqjtvVn>Z#Id5;&hQvP~Zhbxb_;cumvQK90 z#J-++FU;(xnK#I=wSCu<9X}hBcvv>-ScvDY%^M*0RBqnDnIXykx2?@H;fcN{i;K7P z*flh7!cnTE%R4y8^}mZ~dk{gNHcGRp2GRxY3imFt0*K=25tr;}8doO$kFs!kFt|Cv1)!Y(hAGgyTnA zZAF`!EFIZ&;eKz;O?rqVKUftg(JJBzIfqQ0tkvk~)IdqFtbA%#MRjSgYHDSmc$QYd zqf>v^10?n&1-o$WE|$8-gf!}ZP{F~!Tz^B})$@P2a_imKo^;nfAMbPJbs10ZVb&_0 z9fD9*jen=W?{=5o-9!@7&;l(>meD+xNZqwf)-MZ-vWrG$7iDLUoHA-e-uRIxOeiQS z#8FT*DJOf}xSR>&r-;Vq<~VGyj?9}hGPf{ite8gT6&4g^Ps+|O962Ssus}??<8t!} zg(i>Bn=n52sGQt_yz!$ZjLI9ATa=fdJ8HtD{OqFKqMT8a$2)BNjvAMJL?I5O=4F@6 z4n?&MP%$fSM5v-9r)qAVR*WmyKX6y86S0D;0{RX}ByZ$6lGYC*^T=XC)M$dI!7;6z z(EM;kXqJRI7IJoX9OsnmNqO1hl?gXEzhGR^(FM7V@_FN@Ocp{kh^X3U5Nt48QsE~7$K z`Pxm8bz-{%BV-$Qivh6;QsJ?4H| zb50-K#VCZ@4MMh0gDs>`(hpgoaz)xzbj_;exB z(ZMq9$mC4Ok8MOqpxHz6ClQnFRvK-FObhVksEpy-BxhzoTSDIMkL#`d7?a1s zU?5UFvmj74)6>l5DF{SVUdooU-4e?a`!Q_cxtale`+qUP9)EIDxsgcN*0LjV%yy0a z#iU16hrAs{6YM_u7mgUHou@pL_w15DrF3-BD4h|dy(<^F{c$Wb-cH5lX|6&TYi zM|DX!fkSa@bOoASXE#^=BurZJiQ`ZV6A(=diJBfro8ncGqHtlAW+*plO5n~*nTPW{ zB~Op>20G6-n%S;5&*j_(X5>6Q$(wwMF}yQ@n1v_4+g;zd$?uCMr^|fUe3z*1bS!V( za_w`Y=IwoZst5NIJlSWSyW=T7b7}-B^Q@uglXwyUZ>3`+o{8n&3r=Kv?_}Ed*1dBe z%n2>tSBsK)dB>C!?kNNEM5^X}Qgesl#Yij#V$`iuVyqfTx98sQRUgjVAn#RjQ)9gJ zxG%I{0Q37MKJ8n#4#`glC)NS`zHWWK0OaXHtuA%zZ{1q>xznX@>PCGnWVopZJR_Q3 zgV|2qO0-+N4!lW!vhMSfZDsW~HPyUTOgR-xYN{tZlkeeKL!kZF9oPR{tlw?#bIY6> z<9*G_wklI+d288x=-hrUDzQzaZhQVOADA|k7%#Cc))k&?#dvG`@0Y22^pVy&<`k!R zADd6?P2a(38ay40%k(dlK3dh)o-IEb#=l2zWD`zJ@$=#KKV5IbY-=&r;p-KqKG<+u zbLc5d?s!6&5dboJr~6J;qJR3FCvwI=YwuYok&k>Pe_sTCIIG>h2fOl}75ZjRV;f4F zu;=%9Bb()nZ=dNb5YLrZ)8gxm`JjDRYeY7Ux^u;8i{yfHo~UWGbovZx679xoO+3Y( z+!oS(gRDNi3NwPbuR@oFH4D}zxNx(^z&ZzhtQoOZ!TQHuqHZGALBM;94imAS!Noq& zQ6kntSRVl&FJg^@b(GGcGLcLX&G zhqSoBH;Pz$Aw4jAIOGSOEYagGM*jh#*F~hyHAwV{hFMI zc9w%R9WM5CItybbF7TnktmVKD&XJw@2c2cIQu^9R0A zm^~!)9VX)01iQ|cBg}U}C`9zP!rB~JFGnTPZqZN93gzJF!e=0&b!Gs%VFc^$#1(b_Td7*B5dsm{z}-cGlK0i zU+53!xi4Fn#|ZO2zO^Sf*A15#Xa91lF!h;hoTy6J+8ca^@J{-LAG}tW^5+^a;`uOJ zzF^+ZZ?0eTnIO7D*y>v#{G_n0zu@PDZGORTB;b#Pk;g?i-@Wkj|0v9QBNyR3XV%6+ z2Jb7}(T9f#`_msOZ1p96zA)v-HBnS7Z0!R+MVR!+ANXux+kPeqUnXqR2j3)Y?GN52 zZ0i$vyRfwn_#I)JAMigC!keq2vmVMt_@2W4_xA3Ftc!4n{E~m#A@zdvRSZtOle$j*P&7vlwx+yT-z6Pr7ZGv&Vbn45g>3AH zn|#1a7-fPU^trSr+BD^|pNKH}O6=BG1P^@yIt&-}7EKT#mpG)6D*|LMO_U z_Cuba{YA*3&Z93nkjH~W_#H07UL!>|&&VS!^zJMoyo>vbY{KaSNbd*{c_dHhl_!Ef zUxcmbWAP_%$fPXMJ4=Lo$^$w5MfeXAA&))<{!Sw7hz*d@M?@a7Md(WyWj9bneEL+% zs;7wb2aDk8C?bA05q3F1g!}_V=sQM)ZF{)CUG)n;eLQ?QBJ}Jf!hgI7|8XMn*U!Zx z^oxClh~Q_;fNzwG57saG6^KZ8vB7E?rYAjRQdk)*E6bS~EY?E?|D7jIV(-Rf<(BIUHseC2GpptV z`5XHv&50xax#u%OHedR4^{Y*GZhiXO$K>|?fk}CZ7SqiGXDpSQ#XoaAC`-L;BKZBh zg+!KcS^V`LIrA?TbF0AROtp>EadRugtsu97+;%W!2XjkdZ*k;wZkf1s;1-IDc#!31 z%8v}D_Qb`X@ax(y9o2NXJ}6t4J{mtQhT{mWL~11v6&j`lk+B@zsn! z-}dI$o9};n!>H%09(+XhGi%VCH_N)TJ;l_XKW^4v&0eM5VN2w(Cs(BUa*y3%u;*Qy zoe6X9OS)B9R?ay?glF&)cWKyT@t(BwyAxO4Ss^diKh|~aD!W;akFQRt!^|l)W^Fz` zmU&W;^>1(W-oH18+nkt_xSq~_M515v`f_rflTQrh>>Mn_*|L<1fB&=V7|;k zdHcD|j+WiUFev$3PpN7I=isEX6{VbdpEh|fG=6nI{pmW1do_viOjlCdt{k~D`$q9Q z0A^o>wm{8;%d`tDZoW!`pEt-)B*m-8_CtDBPY28j8TAkJG zg_hs7JhsJsE!sC32l$AC5e!(tH7Iyg~weY{a zz}-)y;}^7UvT&b2Ql$bN6*#qR{DR$^EIi_waNk^x2rmALE|P1oBaXG*mtF9hM9jtk=VvAFEzWk%= zPHL5oDmNY0E`L;KkXo(y&Y47Y zttJPY6+H9TzkljvGUFruV=C6Iz##oy;HauCY)HyP8lDU)fz($7oqBUB@BfE}{FKeSS zoc!??yLnF8)R9WrmT!Bpjbcj+e)2=iRJk$!d@a|kXPOmid+vI2%`&x%=e$Xi?V1uj zab=Nti>7}99w3eb6Z{71ef2>JeuMQ)*Z^r_R)5Xc6uocl+Oy?ZUAJE_<4JAy4JaS< zM_;Qu`tb!d@635>pFItL)?+rAOb)yg54MQRGnHpfM zW!j0c12w{&hRz#A_2skgm>B-BWbj>QTjSWrsH=aePt4>NVq&GL#Wuv2&~MkpE8Wy_ z(`#eXOm5?;dxS(?ljEgJE15G@`PIc`OOHJ#Q`gyI zjDB2T-m@TFKMtNK2l0{5v%b7{!Dc%b&-hLgW*?1k@QE(gkMpc^m5T+Pvr$eHCO=#} zle;`2{9Iw4C)SS>ex)2d_Y3CP-aF+WFJPW==Dc+)k7s`WB+SDCgoB@y!`2<1DSlrV zdvk#~Khl;T_$OhWbLIl?q>S18f_E22KQ3@rVSoJY!syFIIPZN>UR>ZpVf)?&nC~!B zZ@IuLg>89&FBGPpa)Iv@-dn#?)4`kp4Cdk)>@S3Q)|<M#27pb2{KD-xSyH}Z=8X+zW#WYd0# zL%y*M@*reT*NICQZg{Cr*Z@28OgirskQTDh9huYtWKlNo($^5yQAFBZM3hTc5zno6 z7s1^bHy(`_xZ&8$Z>v zI{x~bEI)lNt;}?}v*Fw`nfoJikCd3F+H%cXy_A(-FY8y|oO}HCEpwh`^BzR3Er)f* zt&i^hJ7n`Fd+J(4eoSuTW7H>&`s5*fIoWh;PpR$}690r<;z=8+LhDuWM^dW+d!gfYXbz3H`1emc+}i`576U{6s@Y{&5}D_IsRiRKQ{tYOq9 z+xEY;r;*O0_vD`jxpqMtZCHxo~?Uv6n+XPx|s=gyDKW-`=SqJiu$aAG9y$EMzn6l?SI;68sy!AGZ$L7ZN z$RX7R8$U5Db*ZP~Pi_t7=}J?>YNQYSZKu>kEbrv8c59>uT80=3)VMddg|EmvpjF+m};(^ZuXl>vcGg{ zlWOav;WzEno~)9rgY9=yOT=R6!d$q_*$eSjrp@;;O&?Jo9&+@z+u)ouXp%W!m_lzAb>bz~qU^`~k7M5IdY_C9jN1Evct#%)ny$$>Xx|9!Di=Lsutk79dhJI>g>odN`L)sg{~c(M zI5L{v+?#RuB`k=mAYhYXl+`iy94vI zOrDd~7FNGHkt~xw)qXiSzIG(@#g>?2#=1gt*WWID|V8F4D+5C=ZL1~u``#%9@1YonAOZyyNQ9lmxBYg6_6)u-OZ^QW$_ex7vY=;y(m+~4~-Qq?ejc)FV9=dn4qy}iZ$d(l*W zsoIwR?$pLHGsIMPI35Rghwv_4+gZ;6?Md-{v8|meW z8cPuRG!x~E_7G-&5BccQTMqOGPZk{}2l{eN5ls+gACLTic_x7LxTcEc3zP3gF1|vT zJxD1-gL2?&iBsP<0n1B&lde8jJ{mdh2}C0>2ZNM z+tH8v3X>k?Pk6R4`QtiIbd0dAKj5G+<;?}2Eo{>VFLJ}BMuYQ3ob_n)d!g{P!fo`+ zb*YFwdgPNn_#t7+k88c?88<%m1i$O@%jtXzD8wMV#eGIM+?0DZ*A?a7Y;Yz`t3<*^TJRb*pH;F!|>KpDAq16MUU8>5)G8 zK4I!J*X^R`-EgVx;E#lQgCjI+G z1wQ@Cv78Ma5%E1+s}K0k3HWQ_wlM1=ys-+> z>I>dY*dM;Xu&tkj4-uxlbAkDmD}5&VfP=!=hwD)h-*C453;3J_e4VhLf19wa-`IdS zPs-1h=@Y`Q3RA~O6a1mDtus#w|150N1n;WGP9LJ8YXI&mZ0qzh!b62^n&45w)`s8{ zgslz05n*d1@ZyB<3xttJ854e`u(k1X!ne8May9_-4OS};{G2fQkv}lsWwrT#Uih!V z)JZPz-`)7|gPUluXsuta7esA^t$o0~gl(Gu=O*B3!Z!be*9f=OFBf=a0{;eK>MR%G zn-cgR61Msi{;aTVbKv)dsY6^~GH1&V+)mimIdC^&6|rL<@BzYhOnOmxxUiM?lJHbv z#x(2$K1JBde_42qu&smO>x8X-;H?SaFABGnKjlmKhr;^rT(9cy7j8HnV2oqy4|rE$ zn?AUwFm)aMz`cd7z5XmbL|Ffw3!Ech>l3(0*p@eVy6_$jx7xpcYlLlj;IoBy_k~|A zZ0iHz+l0IN!rvFh-du$LRharo{=wf0+vnO|7v5Qw-g(nF7S3?>JR+j*M+UU-V*-A#}EEqnDT@l z+)$ad_WX5Edk}t&uwVY2!ZtsIKPqh71Nh|x z{*Q$H^1c@)zvKsgUaq1)22=K|jM3fuA`{5E0Ai}b+{`}jW;emMbuENs&! z{A)M9oX#`I4OQ6w@Rq_hJ^1%d2;X1W=9lpP!q(p4!-Q@B2A(Kv>lZj6Z2L3tiNgBt zT;Li3TVCL$!v6HuxS0GCeyMO%{c?RIS}$zt7kI0%O%MEtux)SPH-&9_;J*sn{sjCl zVVfUt8)e3hU*Mj?w*0_Dg>C%@A1Q46FYrmi`tMxe1p>DIfzKCKlFkLbM%b^$R9T9B+3x&C(^L)xHUXF`cntUCo(91WYTVxoMSKYh#nAe zsKXGp#=gizMn@5G28qbm2_p2}Dk9BiMd(Ku`jH0lyNS?kln8x~5TQebhq>qX>`yg|K0*_|u|4v;h|s&M2)R8)bDW5D>6@`NV+pn&Cn8Rzh;odGkbSZUeQy;Z=YA1# z8EcVaZFrFDf4F|(&laJ_@gn4(ErR!25#ftOaO(Np&E5fc>BK&V~ z@i6^Tp0h-h)0HCZev63mxLZV?4izD1m5B7;7Ll(7BJ{XagnlQ9(C0J}>0K@&{zehu z2Z+dDz6kkaMCel_LXTra#G5LjUau6P*9#)}_ZJb~U4;Jt5qyV<$ajtiIWt7$<6IGX zj~1c#ToL-*AwvKAM1=Php~plK^3QaC*Xft=J|g7x7g3J$M95nzLe9e?(w!rMzd(e4 zR0RK#F1|>=#Jf|39?yxIhz5$#f3OHS+eD=IfQWoPBO=}q5qz^n$XzHRo%2QTT_8g4 zha&QGtcd(vAtL@V5#=>jw7V!QqMp4aB3_AzctH{QC>0_9X7@LwU-&K&A@3d$e1#(T zjuN5A(IWIO6Tv@TMEGSQ;$0^qA9*75dsLJmdP+pRt3}x1NfGi+6;b{xM1(&fBHan1 z_M)@g-*@y2f3*m^ZWkf%$a%`WHaFtF9m>P`~Tb`^Kk8=uZ8t<&) zXk{dPqK*a7cbUgDf9m;na`yYV>&ne1A8_>HMMrF$_I1X`ySRzQ)8=KIv6Ocn&})ioGO77!Tw|ls{&QkQG^x-D@yXqqmzOsRSV%`b&L=3 z$1V!P=X~N63Dwh2)Hj^*niQ-otMNo>CUEb9WkpNJWGvio;o0qyi~N7^ykz?YaE^I# z4uyE**`r!^KlsU^-@n)6hMwR5{POmpPgML%Js*$JvCVH^)#dTsRDR~s*08fJ4}bh4 zi)_~0jcNNxN_}|DE8QGxN~-ZPkyo34ed79gco-z{;r!$@*@i5YCW#?PG7k`@Iu?V+ zsO;lzY+KI|@ykQN$vI2r@avhFa_!uya>dI+JQVBwRy($&lp---?}0x~~D$>XI1e0dFN(aMCg$xkih6*xBL(Un>b2R1@e!b}}BI9^X410_f5Y_@!P%F?`yg*_L% zb&YYUi_W zHqb55Z1~zOaGmfN8S;bq?q-Njhu;e$EPI|&e0#OX*vKmx^!DC- zz@~86_YS-e>M4lf#dhwz1(f)nN7UuAWkGATpSWP?Gf$3D^Wxu%FtUwA24SzQ*(Voi zLCJkw~YUZu*PNlc?HSKs;yi2vfVJw(sM~$oMw$d*ks|Booo!8=ujX8w7h( zRl6K(+uy3c`E~^75c%aZu9}H*>U#BCc;m~(E5W+bh>ur$d7AU3XcMMQCECtQi}oKs z@sFQm*T!jTv3b_l+9z3_$K{oY<)$TYlVP8~^-tbO+05b0O^rDzkepy`bE{ONxZWFt z^^K7@R{Y+0{u235$e?Z~&W~%eCkp{(%0GIfyHzZaOzdU*oJ1U-hj?CpSZdwk`E8$J zZ+HFiDK&cAf%-RCWk|j#dDA19w*_fiv^?|G7O&pa&du8pj2n!Yb`E52(W!6oI@sG} z`)gt`6AL;sMB-7S%(rCB+?5)~?2#}^*^abcYPE&Nr(a*rRMut$L@)0xreq)T!TBQC zv#wBoUs^k_?YZHy??sw-Wz5s|wfQp(^}o@ZjyK*;snhZEq_U9d?U*^HDyP~*{j%%N znNADlD#;^HVlO;HwVhJ1HOZSZ+xpCXg?Dm~nbVs0H|#vvL-sz(^r=XQpEW0kqrH9C zkGT^y{P)E1+wR|upUR?j$^0$p`+4h5%Z^xybD+eMM8hi05a>@RQO-}Yy%Ief_Y5bC z$MDtOpT+lnjNkTNruKOBuB1sRnz^)%XGYaZXAJOsj!(ar<@A{r}y+KX&T;+g^@d(VRe+ zsx%V0s2OGrmdzk<48b??{N42J172@s)6C40TT#?GODJ&-Bax5QGWu6@k~bq5);H@m zlniYszSQEw630i{5O39Sw_@iUjFhyBbRqt-svlRXGVx-1H8Pc7>eReA{_xt6y5Z0yBCdmt}dB=+x!;ZRCc5%vS-Pod;Au5?V<5{)F#Kz`P;Ry z{d(fOClOOhoIG#$m+a02qo7@xiC+~;l#nhZ+tbl!B*yWFr5Z(R(a#=&(VO<(wq1Ab*haooo@AwQ$HQey;rhM#=oxm#>iv(V^%`=zDM0L z66Zz!w3BB|>FXzV6tpk1R?Zy7uExYmOve>(Us@^80dNPDsvgxIo=#S(@x_yr9O{>2 z*JSHnjY`j%dc3#%@wTM}YD?6Q%b$<To^ zWRBEUN}l=PlensHR(aybAo%?IA&IzlZd0#mRjdc|-67f-M4PNppKRukvz!qBSPZ8h zry83L4|lWdU)$3f>Gk7l1AP8*B7TIl_qleaOiE^V$GiVd%$XYXIX)&U8bKuRV_9> z1HF-VuZief9_V!nK^UX2FFuP~qzvt&Z zi@QVGb$ktqms|T@S3Ix3?Zk(eny>r+d%Su92dhISb?SwEekFZKDx1SyznYh9<5Z(w zGMBLw_1exPIe`nkZ5>aJLyfdGo^Kx|j-K(hN({ASo*d7Xrj?zZBe7Hy)3B1fwCDp^ zd7xgfW{|2@(zn#jkTi{aOT(!|p7QuxXnPfH??Ue)jRdM{#Pd)5d|y-(FQ)E4GX zwZ43*>ZOfqo`W*ycUeE$T>SlO`jAxmB**u2)uv7Q*_YKIJ%>LHo}!@LnXx9hyja2D z$sqb6Qx3Ek`YT4m_`3N=zXY=*{r~$c(6*t`nRnNChm;F9@9+_XUk4HIBJ!Twexg32 zJw?2a)?Jh<;vGNUo9ic%NNdjgoA{6cMu+MjxhO$zg#rg$Ik=(CkXGQU-SXjxZ&g{ zB3dMjeq6IfX9;6__~`7KlC)rks%vZYoD7{mR>U4|;!L$_srLi}+R;{N!hu=on$j8~&9d&Kc{dUoOh} zeBrJRGWZ^s--f>;%)6Qve=6KgfIJYNgpkk0`H|0>b-!n}j3ALl*ihvl&OyHS2`3wPEp*G-~^GE8p= z8Qe#h@pzJ?+T+o7npOts4v(H{EIO5B|i^} zc9r4x(=Xuv%4}MHEMwt9?Jt>+dY|9566}I|r7e3v`4?a)W)_3r= z!nS;#7JgXRruU5S3&QBj#e2LT3!^U=I70tzMSG!nF=RNDq!ju=` z?~3jdw)N+I;qAgUzuczm1veQ^_L4=m4N37+xA8HdBT(j`hqtL zTl@Z9cxwWFECIhDZ0!yI`@-nY1^%0`{yP`=TY>l+bgg0*pw!Gncu z{Um&Xu&qzvVqx?}e{h8`^#}Z|Xpykh?>phO!lcgy-XKi>gFfKMQ$oo;mnP9eje-a+%GjcBQ8N%p<&fp7NOqu>Fx>nfg*icLl3R@e4 zUlr~sJ}&Tg!q#Ts3^jPG54eM{?Nh;r2-`e?^M!3422U2YbqHK4?3X`VSpOaU3128+ z%dnB~YGLv(XM@K2bDgl&r-|@=!sLf=@QcD$pQgf`3uem%{EZtQesHD&tv#4O?kjBN zg9i%RJ`S8MZ0iJgtgx+<;1h&x{=gN&)B!H=5@COOmk94|f}QX!!u$L1Tf(+{iT^h@ zzMKu3=}%)R*U{zA6z(Ey^#LCwO!>>%0L(dHU0wd>!qvhuiF1J$2wVNY7YMiag>MqJ z`6GN=0zc<`S^E?INkV+i^|Eb<@Lh!c>2(+O%Rf-SmIwS}6Yw-)+dc@NE37IU%g-WV zzdq*+`}1>)Fk=Q6@$V2;H|AX6`-SyChMyMj$Nxx}K2xkt{O^RV{aeVhr7~;ffp-%o z9DZ;QVcT9>3ilHxJ;K4meewC$@@Qe({=pN3RV5sL@Kj;jr|u+NB5d1VYvI|#RzL6x zVbbFQUzEUqLjt}}cwfWr@V_BU{^@Us|GA4{X(RlzFFtr@G28M2cNgvqvo3I+ux(%9 zLSb7!!6zidpCfGR58-DD>%Vh>FBiZ*T;LlL_#aFNe@58a1OB%X!ao(Z?V0d~GOn$k z;C8~czJYrR+x{1vBP^3R7r0Q^pWbv~zrJB%B^l$NFKo+?_-hlwuMzgAf0wYWukb%F z?AQMjVZVL?NjCmn1-evyeD@N^K-=io=$xUm8C9NlP-)B(z&lZgCK=kcR2W;|uyL_O*yf~U6# z8GS@50_XfM>Pdf5H_>1b<#wQm@grA6JD4QuB05q;8fS>md9A3U=s^+rzf44YbR!?6 zjqd11ddMLCqeSF)g9tlq6_G#s7UJ|1k?vR#^5%<(w?stVFBK8*J`w4BA#&=A;vqO-1ZV`3haS`_VR)qh(BI1u05${G3`aB~--piuh zMSl~K-cS+Yc_QSMiio#Rg#I^+kbj#9zEef;-6g{RVfQyjzl4t$5xz`>{jL+C&#NNj zeIO#BgR(=YOz zdj{Onk9lglGMTDOwB43|~8jGG5QGU;fi1)6D z`tg8>^!_A5-!ny|cZCQ${Y!+Mmx_>IE`sko5qdu)f`4b}O*vd8LjEHn@IOS@=_?U- z`n!nu%t7JXD8l~*5&FI2DFi|BVPexmUr?XNllnAtIf#MaWw%g70$??dEh5 z?TtAsa&8i#_lqLpaW6IYdzm2ahpB{`9 z220D8mcv^R3C|8ibs!O^;-x>2E+-NUR0VZLTeLV5s^kD8q>l`i1(SV`2y&QP9HXmU zesx(@+>v*Fe}8Vw(QqTeB~B(L1&f19bi#}o{wyi|1oI?IkbzNw@j zTvld#y0}6~5gsSrIWdxcGOqu0`iI%Uk~q)grcbNjh{|M3#fSJ)^x9BrQ&HRFI(^?U zmT_H;`quntX}SR*&cwD?@(l;l+i$1T9DcoB4kwl(=Lbtdfw3cy@mmH5r?aE&r##iu z=@pz1f6DP)w>{l+N}w!Mq66^Ips;vmu%x;ySYnF^Pddw38%{U?w5lKy3P;@7YA)d; zf)&Ats%MF+cxfb1evTQWoxi{88mOrNvx#Yx=Z!DqM4bY43PV3@we0O za?#UrGc#Z|@uH>x%x1XmZ)9c!%xw7z4YPw9(XMhZV;Cjki(p71PLLeRahm8rrHdaj=gJKax;-rU66MHWAO~(_c9+1t^oy-_lAAjR%IiDH zXBJ5wn<=h!A0*sGggvP*dyC+&Rvw8<9#4@z)B)@~Rc>1c`pBO6V{=wrtp9`JK~McO z_{_~0=^iGT_y8#!&ok2_!Vv8w~_b#f!0GF>M3F8W2!S0$&jen*M! zkh_EH|F~r0KU%awZtK6FK9uzRa)?n)=UvL zp^Ui8#9b=-Nc^~wbG`U+QwQd`HmAO^!;MVjw2{uZM~n7S;k4K9G*Lsj@ka-qFzBe? z>7ujch6n$}a$^(n!Y(v6A+64mi9O-D2`oall_G2NpC!MGa7gsJ+_sKAs<`BlGW|&M zch@iJzM_0lKgrh?rG=Zc_{tsj#6H7)Zg$a$3lC2$VE+N4GL<84%JC}k(=L#?TyEPg zqH>cjWKNRZsL$AKpxm}TA1(RBMgDNPZQRp*anJXqd!8@dmz6JcAYVMKgPlpMRBmjD z`y{1>n{>JBhG&T=TQa$`BQF=rZn%et#z{VI^7W|*{jon^RKpGbc2_s@%cUUa!j=kh zo_-r4nbetSBEHZlRh_c<(RJqwKPylC(VwsU;YMaucEF8ID&-J#>c(<8Y~7I8j_VJ# z0Hxcw;X@5t@0|IQes)~{*ID4K!OJ={T{!&WL;kJvoXbPSk#ICTBX*{UF3VN^0c>eZXO)5#UeV9Z343-=z5%lNSj&cs0Dy2H~$zYNlvcQ})iLHZ?} zYd6tw5fcS2@C5f)4cfuQ`eg!wJSJY{E+(9GnaD8VAe>1QTN0#4I1{NABAXtQ#PdYW zMOg<+%S}KfqCrT>I?2FjLo^gy@YN0U>^I&9{O>@hsuFGFcZ$va$rZUj-um) zZCQeu$YMXPj-t83Ha+lZ!d4$JME>OM_)`w(LwPgd#unHM8RQ$njSSMI>>+GGx=gx> zLs^m!%8>G*Y~Z0x$Pczf1`|xugBL#B5N_n51L>1z(#B0Z>JEJH5SNKCdXX3WNrT_^ zBJzT+=!Fg8>*)Ss^A&BD?bUSQL2KqF4V?BvD12#Wax@r;P7Ra<%gU!_RaBSii#nBo z;#q-G4T}HeK~taKNi}L_Y;GJIbaTQb!R(4aSxqz)^~T>kEfGiL>kY#>e0!&?%-Pn- znHi`k4LYCA@jJui`c6-%D(Lg`BxYAuYB4a+7nWC1Sr#Y`7HVm|qI5)cs7y_*i}nm)1P^R01#XM$B8oO?{`H z({}b%L&d+V=vxtOk2+l_qVB{0xQM#nS@ajz-9^8&A^ee3>bl|YDVek(+6VnHY2km2 zn-;jA+*S`3Nvsa5T{m&Z`1mjJ`7iPL50RTTjLhBSMj!IR>rBYNf04-Mg}l-3;fsjJ z_A^1bY2)y7p&J)l0zHvB6tXc29Z)M>U^5z}t7 zirt2*p44f$S=ANMz>MJ3L0Jds1|kxiF;(9wi|X@WC4oo@_Y{RDzT57z5*vQjWG8;? z)?&>1PUkFJ_SRRUc7440=9zO}4{zSG+c0H}2^()3r@9rWZPH)+c3QlFBf^bo>FgS&Q9}Uu0;3jh0N`6n=Z^*J0__@|67B6akyeesI*!` z7oR)&Z8yi-!S&+0l~_aluyz9*?EB=ix1YP^>nEljdraoHP5XAq__RrEsP_irI05;= z@^GZa{EZ86c1SfSrwB4%4%A>CstA_2W49+>PkF=%a{1!?tngG}u5^Dc-8AAvj19&H z;W+=8Xup6-L1&wlj|RpuPYQ>%>F2X&p&9s7WI9zo^C~Q(9rQJ82?omJL|TPX1evUA z&fwF)vd8}XS@&Cc+ z&m(!v8}RQew~b4;N!P|aVS>^koGz`C+;oARL{sF3kFoS0ic9+NJuSCQ>ngb!d+~oy zZpK&KjTG1N+%12b?hyIge6hian{=(4v^u(e$T?7PyXqJB{vyU@C|krm3T`et3=EV^ zN#8)7;^hd5&q$l%l<8omd)6QYu&t zt5Z5$wl*CsH?;|}wFft)!Y`MdRA7B9P7UCf+O>S*vUW`up1yiOlI4HPY%t|raJzr+mhImfO|yN1V)MfuLykLZ)0qSAd;Q59PtBh6ea!)rAL_k_^2qWdC+o1x z=U=`x=Vvo}2gRL?AP3L9SrORrUJVTsGW>7|&nz~awDPiI$ahuTuc3SJ&- z=k%Yj3un58WdC9<-5nPVj)uo&-82~d=>F->xNH|o*U1GQD59(60*@5gApm@Wh=xgH z1P4WQja>hA9Ib7x5tSOXovA>GZGze&|77(HlQI z)G*B8CN5#fB3YHY<18b{$U3SGjYwG!~7EUJ%fywf&tq6IV~B1da?&uP&Vu z3eJh2z{aDLbKuld=;WEPI~R_ZXlB~}nXs+FD*Ofvod@Zc8c6NS7g4KlQ{$*v)Vhu$ zJL#cSQnQFtDWb*VK3YVrBQ7iA`A%-~fj^gRg|@|!p1(EH(yScxuq})hL6~h7mIl*vtdKj!DQck zaof<`JHDFR@!=PKJ~DL0m$yCmYWcP^r<}F4$(R?Kh0i>oaNhcYwl`F~-?;PkU$$P@ z(P1!!J!%K!Wf2jFiFL}2A#8IJVo6McGxld^A>%Ch3d~5m67hb;dflrS7 z`;gJaT{DmCI{l@e|28gv_3PP(?=x}Y=bucT{-;B`oVCY>eU>)qc-@0bT6Jji+SFJ3 zzq)vYw4(ch)TuOd91Ues`jm`js;WGs*&w59QLv0jOqO{%Rg2{xQcV^aXm8|W%RC(EN!woNwd|&Y=%Da@%EhP0ZMH%Y_N0 z*yYB8=SNJRvD=v{#oaHX6u*Cb->=+KTxLu0B&B@%A%C8G#942)-_Wq*@=3;FLXRm7Z;3r?a_G+`gZ0tIr=O^9n>EC3` zsBrs@^H!a?W&Y>K{&iWw(`S8i*rL^sH`}sm!{WVis*XNt(v~sb_6_W@+opTlJvw4_ zF#ns-PS2()D{MlI|9xe3lVbj7%j$Vav}Lt)_my9nR{KV3C+q}5E_{(RCx3Ac_U*#cdf9$dGfuZ-l;x?bN#MN>^ zi%EYgdHSg*pM0XtDYrK5+^5Gef4XzG9-)6^ZySF1^{WmVfB8xKF21I^@|6uOuRgP9 z_3j6c?3#7r+N*X7AHTW(sI}YgpVwz)yOF`2uDRp8UN7A-eEL;uF1&2nkE0IS_3nq> zx%Q(?TQ7OP;T_$+`*rh?r5}IYe((ijdfwZ2UXx>Ao3{0n-YrhJq-EAKXRNq#UANhr zRy>+nUH(-cf2k}`r?j9eW3w5ZGxpF(;eVsXKEmE0V~^xkkgx5ovdqTQ6uGr}LON)t zXj^!jKN)TFoaeF4R*-w|)F@+5w}JKUXd0URrMdM@lTcO~)ut=yk5z;u&y~?4TemK= zgCheqQCeNIa(VtkJ-(f~Wi*dH0Uir~U$x41;u&p|AHa_>HW3#+IafwzQP_;m8I5{K z^~`3oq*xSR5jH2+EXt*M?l?|=X@WbfCm65?FSy?nAvq#w3Ju@=Yd)%&`*K%dH z&S>8wP2OV>4p9GRBV@D`_vk=W6M~YUm-3rZoAHJ#BhxLFV8*UJT&I>!HG`-M&aHB! z(vgkVIB2u7WWvgKOygMD*))#m_@WjQ?>y+mqe@2o_|~T*@0hdg*SlyOc2F(dcdgq9 zMk>j7o;hvd-uFLsSc?HaHa@KBPx%e6d*|-TGj5LDa8=2qHJ|id{ui73olmWGTP`VPv~zX{&5omQ0kA>F zp2-y|N3R`KRAn|kQ4!ZEqm1`l87+P9m;W+v(lCm*Dt&4)?m7~IJF2||V zTdgO?)Qopy!quKG9QqaOw41YopIs{J$MiTuxrw#COu~7eCl=hn-<~oH0@3K4aHJ#_ ze6v4zSJixD(<4JwGmTxnAM|M7M=N`G&ar)dXT>;uY2zct9re>gFLuj1Ht(E4O=di};Ku{MJ7b@MmtVX5 zpUsPI`m~{2>(3SQq^|24>^|s>J3c(_wqHL#s@eBzTYPZSZo7~9<-;%Aw;6j^_xtZ& z^UsU#*#E=}PG9qv6~pd3|H5U_8*?`g-L~k^Yg&Fae)O|j@5s!0aByI7)jzMj`==FG ztlwqkm!((CUB2O#A4X3qANApL{ZD=C-ORn`t=aRY&iT9V+w;-~zH45%(`_B6zuWxL zz{wk~U)6t)+c)-q>*JoU9`xqjz4yJN*VprPi~{ zcY4T-&dF`j8AYaL;;q?4%R59IdLaoWZ zEfx!YQXOZkH8pczAd7`=S0@vzy0P9qGsE`g8+C&bi*5V*Sm+O`WU;oMwyz(qn+nUN zzP?ot&lIul{cLqmmM6Y@k0th+7HMO>PW`&~?pn{a+ArC2+FBMdG-VAhWBgsuOa7MU-|W4I`5Rzki>o5B}uyFcbHP1cN>93*no72^Ex|)n# zeXo_)caGCt6^(AAo)zBL?PMH~uG*(iW4d~%T-8|HLuF)`Hv?mpa-RC_SY?P+O8*pu z7g=n<#-<=GY^Ck1pjiC0)v{W4vRs+1GIsBgLe*IPd`FGXGRN1?SgN#v(1a^0WYDoJ&H^s&4n zA3OJ%e#4(_)A_i9Yv%0XuOAAJyG~lL$ux!qGfZkfciXGWltDAw|M1-tqeTQ5To_xhFf4^!;ZrMJc>~?00 z9@q6vRa4nxU3E*e)fpRJfA8gRryKVwZt_9zXHTBKx#sYfZvCd_lsDq49BR1Q@MEf+ zxrYfy>b&*2$Y14lQek*c!pN|7)H$09_L`wuwG+DNa{7OJ*W!*!O=l@!Pt~m02+$^X zZgJ2#-D8w?8uiRftdcw^Hrwef9lXlU&MS-=GkQ***m3!*%{ynm{KSmU8o&1N#t$#C z9dUOh^7WoGXI4y|_j>-^Gl%Va>vbI-n>D!0U7xRBGv~-%Qb0!ZOa^X?UR!_NgY2F@dUN~dpMWCdtXqckT|c|i2hVl< z^Yg1)&pqh1F-z{Kx;wBe>+HS@t9xwx==t`0U)=oH1y3)z{)?qq=WKlA&ZX@e9`y0z zTdKM(?l5lk=y?NwzV-XdzwK1?NJYcTcI~$N=LM6tU3T{e?bmO-_m1p&h1u;-3Qs@x z<}IJUH+RxUZ=CmWw9$mQnWxTq>BjH<#q6J^W9E!z?o0P|&C!2xTf2U=E>h>RjG3eF zm)zC3bM#;|swb_Ppns@BvJFHvrDK})9N)T*ChDr8H~1S?qoT0WeyKrWaFm#sW?H(pHOyPX@n-d3C_HKU z6q{&Ys)eT5Tqo`H={>FWTCU8UGn)5swTVrcdTOW5GQ>}rVkynjvmmhsQ@<(w@tr-@ z7dKhu&Y70AGL2{My70C;{$94v$eRW%?|%N4^LLvt`pr~*&~O#P-`Y+8{E)A=hAw@3 z;r13QPMSG)z_6vdO#+CAoBg3|#+Ywf3|DMF!YMy%Xhv-D69&@#Uc1agL^ zjPA)b*6r@&6QZIuRn3jb+IeENj_ipOW=6qJ#ih#TTp4Z5D42rnCFLqslUlO|lY(i5 z2DMmLN1hN{C>c)>UdM$Q4&$Gm}^JbQ|w?F>+>rbry=}MNiPk!Lmwbz9F**g#Gxv1U95Bl7<#kaKm{iuPv z-u=MU*M8J*>m{EyyrbziENwqxmbUNiJ1^suAEs^nzLl1?ckX@G8BcClcbJy8pJ^VL zSI5$JE4KwY#|PEbaW+=@Gl`;0sz=A!E~)>U9uAkOt*4ra#C4{QHY{O0p>m8(+x$J_ zt(u>p23JNC4yuZEWGhs>w(K)ncxP9|81B)XkDcClJ)Qqn@e*~JNqt>xwfbZAgt1O4 zZC}^Nw>qH}jMlcVbMhAJ@D};|&D2ZOXRA;AjUCFW)-ulPZiif1Np?5cZ3+eVq(HE#N7gQkzRI=cCmCeJjSD32Z2@3+9x>NDMO?@adw zV*J6!oH}7(sOC?N_WwN4=a6%s-T2&@wo9Pde>m>peH(R*-ZQ&b#ciAKzpLu~1HU`B zb^q19Ui<##YjTv!uR8RddB>hNv)woMw7KEsOP{)abIrIWhp)|Pe)P_p);G)j za?a+*+i%+Ta+}4kmi6qCaph~n-z(~Sd7ov&fB4%O4L7wu?ddt4=MTwzXid9QzpZL_ z)lM^h-mlk#{??y#E78tQlYM7^>1e^a2FRT>WUwk?F?tc7~5tn~QY> zns_4d7yhhHAl6H?Hb>;yQ!is;URN(*r()hX?A>u}Q;!u> zB55DtWZ(Fje$V&;-}tIKjy>%toM6=0csxiO2C=a{Zaj|NfIOtZHI}#f-GG#J@^Z4c z>6z|$ysWhuk7s|LdC-f0&+c)})_cnq{`hOJJ$_lf&foYVfB&rG)4$9;a`~RaE^gNT zfMNSBe`;2vIi2*p`Pk28j|G_ILSPi&O6ISn1rk*tPgt9)~Dtuw$9h|J+q< zAotcnxewd1O!>cHnbNLzzOTw{ySdCJu|>@i%}ea$B{L)D-C2D?jJsvbdz-xNL`FMC zgL;gvs;cx>n0t40?gz>Pm4~|BwE0oDU1WRio+w18eXV+B+w(|P@82NH$oN0)y$3*5 zInywFX@^UdUaSa+fPf+vR4jm~SP`(}O1l)LNtIPpnt&p9QP&381qBOY1ADKlu6-AK zSFCIIpE><<&qdwudEb4$?gQHflkYx`n3V6lp z%Vwdl!>rd2ST+Ni*>EPU?VavSF}kn$4i+DsM(q#GwMjC&J9)&2#wXGkMh9yu(e(pK zj(MF&1YViiTr+0!q6-fvIv=OGS_UMu_S3d#KmD|9*5^~C{Z!?1r|s)#`{_yvWk2n> z;VsX8np3pn{jIBv{q!2zPg`Y@_R|)Ir2TXRXFvV0-!1o6*s_gaKMi*R`|0y0=N9_w zC!b3z5VW5vQ<@Hv59(7AGd11Oa{l*326bp)XtW;{8C0yPSzNyHRG|AUClO8+Q3Yt$9fw)-+W;SLGnb#qSoj2vKiScGL28uMF3RISzigSUG7+`5# zAX{n|-hlW)@2y0jf95l?n&s9|E73eRib9X656RPebvHrdNx&fGr*2nvHN5D|P^b;G z+`&Z$rc0t;KfhoWH!;oR>pZms`68#r?qk1(42>8xc1~Q;ycIKk`SN_(Rhn#Zb3@DA zV}qJa9-WtDOZKd34 z`RTTrtA_QT|K;t*9e*~=f3qomP2ik)&GXFqw|jek%3kr5+(yK=H7eV8&Wv8M$>Gt< zOy`d~UfcL?k$i|RFS6G-q~JJC>uQ5;YeFyl=BZoa>h!^|qI^_Vp-VzT2Vz6}duoP$ zGaG#ls1EV7;7{v(AsEFnSOQ1MoEH2&a*p{qa&9A|B4UJ9;lH>nmg_bkP~AWvpsDb% zl+TDNXd%N1Hvk4MOJsGqI35Pl1$mVWgccsm%N{$-4k8Db7Jwot7}grW6x9Kem%|qaz!^K$gHAvdosy3#gYZL2#Jb0zYEtoAq*NfOQxLc&9=`u%9b;m>%INxWu~P z@aoY%i&TIGh1qZ*v84s3O_hZ?RgS2ez3AiiAb|TJx*;T{HPE0El}SA^(|1} z0{?w2kkw))BU25eWU4k_^-~|TPz$@1oN(;G$_FjSd-o>2k&vz1!E-#h?dKkLji;t~ zzpQrKvRd!g1^y;_ktgO9_r9Yz((&Xb|G|}Uo!3-e|7-kaR6}64HSkOXclZ;TL&e*x zf2)dXlHF%gx46A++cX!q>iWkPRsX78D<5_>T@t!Od;5wQb9PzM1mW9!;lMp%h_SJens-i{#j)S+se z3?0e}Eb81{39QUh1ac9xf=2HtX&OArkC?``5b9vRm%(Qje z8@U=M1dO;A>euo2DS`ZknI3LPHw>O=@x|TdfK|IW{6PvQ^m|7{2L?n) zd!*I1k;fl$mB3fw>W6GHX>T?{hmX()ER`_k>aaTUq3L6#aPKBwM!>pz7>o%Os3h7S z5i}e?vHvhIJtZdaJD<_(MmojM8jc1c&)NuxO_tG&{nIpRO^M@+Ky{iMPbC7iY2pwE zH;jb`nF)L+xsi>m=y2d@*q#^&F>~<>GAkkyUgg2+is2K}dd%EM5z$O~7foWsv5{p; zeJc8;hOJoMwz&6=*IE~%y+8cC+p~{ftv{#zZuL#H!EuuLUY~v`o@)uK&!`!c*Q&+qmTeba2Y|$buaojbPh~u}Mx;tC8*j~71j#||6K3chL zme~zGJN1V1vv6za`=B^_u zUhZtaBi;$>T3W-adYIbgtzR>Madq=p=G$!%u%v30yf_S%d#VW$sPt503BZAPz~ zZCgzX>RfiS+?7whe02hRaHyss*xD@@7->+-%ySeR-h0P5SX^i2QTMfub|`24Qn)C&)Tu$!L`}p4KmJeHW{Y=cz!3_5xPMd zzU$tEcQ%=^<=GLhGb=2c4qhLqp+5NfnT-S1y>Io&xAgGt4l8Hb&CKu!ZWG$^Y<24k zy=+Y%sbE2Ma${RInlXCBX`WyXg#qwrdZ>4aNbRX!ZoYLQ|zpsQDc(pAgTVLI{GGtaNr z_%^d+<(~={`W>(vW@7cWa$i+>^2xsDZ(4`8?qfbbe9Nd^R!x^j9h&&b!E(akT_J0_ zH@QElQ*zgo!zKI~H5~+{R7-F2PIKgmga#$i4v7zs_`bXF2$+OeCamKV5Cykp{3>C# ze)9JN3%O^~vNNwh+%w#hFZ$`T4!pk6q)~G~K#ag9Rc=#1F%GgffVqQ}r*wHJe8|H_ zU;?Hx)Zr)xzHRVrhWxov(-TetV$REyI!S=QE&ThSB~d29K&TCgjqr#H!eap_M>znP z3R5|&i`T?`8y(u!h6w?QmPMk0XK%a4xh2O-@Z;%n%K% zgOg!ncX$xkdm&EcfUjA=SD738fG1uMy;B`>lb35^ZgtwLkUWwFngNPB3@bwLc_9O# z$IpmcQ)1%91}Lf`WKDCPMMDh_Wbl@RO2{4eL>T1%%YxSi>Yi~3F(5orLVX?_1jByb zpDnl*`s{vrwAHtuA+>UP|F&D%W#td!2&Jz5{jXg%7%LjIfnf${Q+wrMG4Dw~^U(XJ z%ee-1uoI^&&1v(p>8_KI6(Cr*8ypyb(YsM7Bn-_G2$ zs`QU3%U%sl{bh!kcAqJ>&u)k5*u6JBFx>0zfumz?@AB4-QP?sir`O`*UX?eyeeM>p zN@MY!+qNFFyMM~Rcevrr@z+;v`QSLhzQsIZc(;q63pH@X4gE#0q~Um<97_-bfk>?2 zB`kx*8kADXaL|gt2U+Qk7C?z^6Comm~*Vsw6gR4)7uPpA3XSt@fpg(ISfhh_S$l*j1RB z5Uf-gY`z{XMItk*2oa%EyF=K%Xl_lZI$-?ZnydlQfE^jY522|^NPkHE43J0^&{86? zF`+v~BD1s4L})7^c2_N&s5lt|jFMUSiA}^>@H7mB_g!r{+7p}bI5Vb0**2}D(ygs! zhbuF)^Y=O0koY10b_c2axeD?Tcp~4Ca+ilGP3F8Yx-ip5bd0} zN)mb`MM%{{gkOVe`}__(MnF(iVH3kU0wDts267$C?AD}OdmOxO;>;7Fq;+X5n!cTQ zOL>9)oOD%;I&(@h5IYF0A`YubJ-8~0#oYU_UK}?P>u~QieYkNY*5lqgj^GB3SWT?X z;6EF{!>_@;zZJy8ug|@|7s11Cz`eJK=Hb`mnkXfS>kDvOBMB9o?o2Yr@x+GQ`#GuH zfE62Y?;B-s0}^FjC577}B2p<4{?v#6=UO0LGmqAkPHRjFjVIr^PErbq-FU*Q;p8=G zm-jR}X@3ueMi?UGBcg>tv_kBzn%e42+L>{kKdiSHDVcu7WyVv7cE{!$R38X?ETxhp z+YNMe7*M%HsH3a_N2-QJ2iIwP2nOI0P&8|XQi7=kHP{w%IUI*s0-1{-GjJ+05X!hS z2j>qJOu7w8be-Uo3)qvxrr<&GY$k%5GugyINMzZSGVa4+lU6|zi&2%?PRf*r_Yt!O zGZk|04V$wS6sJO0Gc!7`lv>r#2&DRC&HB>DFM5@J*nVP6&8J3B!*4`;nlgesN;4Z@ zY--+jzm8w>!GlBBKXA*fiJ7z@Y(Vif<*_s9-pT_g^4vek@#AprUz>^K=Eza|wiq}k zzj3c>x)U}>p7=AN>C}=W+#Ct#{tX$D+{4mt?1Cb#$Y17^!MT6s-EEFG?HP>c{*A?R z|F+_}e-CkUw0#1ecwMF?%n*r>a(l#v@gg@R2{TJF>3R{shjoptaWg3gHIHh0xJhD2CeSv{4>z zDL^H#G$sR~MqXiO686_SHTZXaUE9`}UL`QzS`JDQJurp8~a4%Fzg z#iosd-I)V_txN2uaCu7=~ z@y(-CPYj9<(H?lgIyT79YFNB~Vchs3fgQ_koiF&+pxan|yNpe%E?FiY4!0mY4gYAj zVb8A>L(WBO-tO43^_6oak3+s>2j8};j5K;4@3o*{_RP@1!@AE_zB4EIcC|&Pvp1(| znCrG0GiSWxgJa6YR@d%p6uF72zJy#{=hf!G$7Pu*dH231H#*h8eE;_CS{FO!FV)Cg ztrHX9{ot}?!;S>&O?cco;G(&uP0XGCPZT#DHFb0zyIgzt{tGw$+Fjt$tUewcPRRlZvET-XxHwWWBs=ICJ+P0-?V95W3b|!WApCY zj}sfk7NgQG7hDj}Yoggm(WR)1b+e&Wtu{IgKUHG3d)?Ywu_Ld%j~*3#>hH25*99K0 z9p}v2@?~JVeP7pUyE~7)6OuV}PMK@}_Tv{jmuQb2^QpJ*^oOtZ-2QFY?GrZDXVzZR zZ{;ru+FfyMwEgNJwPvYZ!uHLVeA#Ny=9pH>>qo<9jS19A%${;UImdMT1g+JVeEuS~ z4vQepDm^hR-nyVX>&)tlrsAqK8q=Sid7&`z{>s>$CGB=LH*^#2?SO zXm);%*V?7`4>vlqM^Sx2{J<*-uLfy1pLVPyu{b@y@dLk@M}5z}9=2}n^_~IY9^Zv1*z96y=3~NzQF4ZP%mny+bEw8xI@4Vn9((0knf)hyp^g!jag(Js~bW zIug}3c$Q62oikhy$Z-_-39eZH0q_z}xWg_yAOf$zBeXo>@J}wPJtm01S^!o-$X^%K zss*lQh6B@rflLNMV+@CxWI6~j8z5MwrHREcIxiMv8-TFtH+>!wA4z;Xtj4I#Y=}%1 zrZh&y2vs$)mb>K^j^h9(qXrz2Sr9_fD|hP9=8>8Fiiw2QE<}bgK_Fa)qYTwEP!Ny2@UcX z^ax2LecmL=<}G2_%tELQgmWa~;0{Ud#6Vw2XX~hreiz)~nk0fW0AS@K)NxAn7%soI zNEHDqU1kMFpJ3z$UNl$)Nq>5>>q&4(mtEWu;xU1so&_DQNNgl@k|Mq0WQ#+JSPCUE z3?G*JP}Nw}jnZ2-V6Q&imgC{3N7yrIByNaW(L^d6Ngn)u zLoD!VPoVsGx11o?AY5Ah7+#~|B7{pC2BZlS1J&O2Duhclfh7z}Y2-45OS>7$L&~f} zxa5^%Wfme_Vi+(CW+j61t%8Dz2>$>7Z&((WM|-609!o99oR5bLUC`w1tKFH)Mvk7l zxOCNWuZ@gc>J1GQ!PVD>Jl#!;s-1xs zRqh&U*lw}Qw7&iHZ|-e3c29KsmZv1*y}dqcTe3Z+>f1U0JT*~i^(yzlNrQ*S&v`d3 zb!M`u{qjz4-i^w!SzzOE*ng?o%*Q4@1`NsX@a@sGvI`}%o0w(CJ=AjdIkGS*qWtSM z`$aw(<$hm#D5gwy3f3+5&dSSe+w#GV=)jV>d)o9?>f-t6i1E|h{wV|3F4>yRN!VZhQUs(253Yqhfw(H;FH^;dH_nb6{wL?~f<7o1W4p|Cl8QCllzA zTF2ZGnlSj`&|Jz*2__SYH=@l(;9w|JJIfS}3$E>aDa(Y9Qc96ddBOrb0WuHHuo%cH z_%Kxf-6Xw;`wL`0R&qm}EQ~PD<1kyZIJM!MfO|&3%`Rb*pmBUdOe6rYVr4^VI4R8R zTG0UPAMigJ2t98Jn4Bev63FQ-iGjn=1gbs-xT%c>Cj&kEo75X%|6lN0!^U{SF@WGk>@ zk{N|0G!Db^0i4iCG?76lRbfCbZiboKcu|)VB6*XwfKQ{?0b2_S&}n!r?9zb3*n9c& zu`7G8BB52u#YAZ5qrJAgr%QV|{)+)W7j5WHF@+++Dv(d0086g1(s z6RldwbMF1+r#$=`6hUGW?S9M23Sf<8n@-_9ClQD( zxc3=fIVL5xx%cLC6_f3m=_}g&r4{YY}Bd=Cgyax49`=F`?Kk7q$3;aLP0@Z1q0;`MP$ygC$Dw)`3g*oWHN$d2zpw#qq>S@n_p2T7v_V zk!WnLLFM-08z+Vj>HekBjakPJ+du2$kYg5d-n@n0`ekQr3|G5ZR>beHaPFe%X#ZRG z$fcIE)A~H0<6>&taQcPK*`Lhp9%iQQ-jrRPo8@S*R`Sx(a?i;RS6b|On0(8k6EQM; z)AJQcJ1rj0I(SL*a+h5#25q@ja%A4i^dXVXPZz&GY;^W=si;zG$aHVZF0YiIPqOT2 zuF^Dv|4+upeX-rb)&6piYqPbXEt_#EgTJ_D^7|BeLcR zp+DxIaKWDYg3RDqw154K{uIl|z3CQkXYrCweatjxJsy15Ie&u*s|SYm6`ibJGq2a? zKh|za>*I1UKwEL+)yIzy=F*%X2LRr>&VKXk=%t6IJ1w(Z#^&rj_PO;pt>634?|WzN z-qnL_9QUvO?Aav3sOy=Q{0pxk* zt>ukArqK)Ph8^YTo*g_9kH>ZAisGTK+!K~@AqM3%t$n$HXvW9&F$NL+&% z0F|)jVTf1$NvX;($QUTG7Tm5W=i69Xp9l^X;}9i7)Cqg2Q!R9~2Xlr*%3xBlB?8$)gv3QC_d{@L0c2o7=A2 zT)C_~=Ib510W0`4Nqz@(D+a71+~X?a^jxQx#aPJn2G9wK&i;&dwM?zh zh}jNm&KmM4`yYES_zCDp`okzEMDDW~ zAs(|Gv-a&R-C3%&?OKIK^PEN}wbw6OztX#?M5U!l;y9Q5F~o>3rWrR+{;67B)gozf zX5)JwB)zh<&nT?+J96ElwSqWlSJlmJ57Mn0WmoQvYH&Z_IK0%Xrp3nXuO1GH+7Y|+ z?13R8-u`iCp^1mhdJU7w&ZNpM1hBp4iX;bLX# zt|n3-nGYn0VkripYn9J*;R!`>r&&xyGSfSZO!Lx>Q}YmFuh{VDSbj}xfWNUd5fFLA zy?N=(e85T|RegDkTdv5X0zM54dnZL6>CR-Qfq(%Vob)un7I@p|r>B8K!?`bji3#@q z-x8^9hJWfqeGAmL!2eqeaFRV!oN==8T@S@@?{gHBL|v!aE*)%MlDTRt&KU$XH`$*JF-dwntOyI*oNvDm(i&7SiE`c@u0 z{$hz)C+%tNwy%0+a`EHzeEm!LlJ=IC3&ejbtJ#mLta`uY z>9oALf3+Es5f|UtZC|L}kcR0G25f0G>%Md2)8$FT=h5+rf%y$`7Cu(c-M&Q6MmsOG z{ciK1CrZytpG>~HNjYJ%;s^fJkIp1hEn(_`i4WI(aQ8dz7Jx-{co3Xx6deW2?;rCh z!Q3cONMD>ts3AIX13?|f;&5&z0@v4&25!MhjRQgPDF}S5vcQlnOv=zl%_#u91t3AW zKnB8C_De}SB5U%y3F{|ZjNw;-NnV>pPMI4Cu^J(8V3=@q$t+mkr678+(nmvSl(j0Y zCf2|lGeGcX{VMciE6vt-4~W0GNI)3|WCArpSEkiSSbs=g209oNH^^_(60}ol%k%k> z!3w$*kutO^Bfr323{-zitCt<~S0x6)(Hm2_fL5JMU9O4?khi>*Bl^8XGX?CQC;xspcn&61}b z6EIiOU?*GDGFM^|K#&=>+>j&9mGpZ8Bw=QB!KP1wtP;RGb>m1Lj9Kja=WZNf=X%bf zchD@RFC6Qsc5&7QW#hd|GvDVLKWT4y?9jsn3^(r#A6g>HHrTORY4l&mPKF#(zVx^} zudAz`knWaY-AuM8RlSoLhOH@tUCnzO$KBsq82 z5g)uFOdGVmqfq_H@$u!n?GDbyZ9jQ6dOv5%w2Cj8S316EkZLw*|C$G#=FJ`6O1Z*H zc}C64CmtiM&n_DCsHj!mtM;06M)$aH5&ZjIyNf56wO2_m^lDqVHvZIgmCz2I`e&-x zuetGH@44RPPhXyFciiS<#5otQm+n!0rdIEm^vnL2{V%+5Gw`h$FtqFK{qdRpzs?hB zZ#Di}vpLsxZ+6Gct~!ak`e~e97hAFKc}?I4<;s}_op!T5^lPVmR!KK|b#ZK-z2?cV4+A1y^d}CQwt9TStA5jq%X6Fd@0<5%;p*x}&BT1} zKNZh~(Ci@^3{3%NhsfBszjscc8n7A^v`M~i1pe;=JFW@Up>Ve(%p|~*2myUKt$qM) zHFsrh0N{KHxY?Dyv8T@<=MHTg$Mkgd_3-r^;4!AxAnyULzR2eYgzgM<#wyO>WPy-? zgot>di*dDsM0o=gxFQ47TpoxuLK{(!n}gX zheZK5)RLV=!H^qp$U_nP!nD9nl&aWx(bP6qGSwKmkL?4sA+Y(yHI&|&LZ)AUbhZb@ zm<|W#klIl)xd{4*t)q<=g5+ECbO8hf z!nS`IFmQGn(ejP%DG5vn1(iZ{Y&`I6Jn088l-Th)NzFAlm_h<(3`V!YN^Ot<2CE{l zf40dRuo3W11he$XIHyLT}dPmeYHyW*u-^{(Mcb$Tmetnd|~3 z`P)Pc54(1!zg}63_9=U|`7Q5KQrXs0Dfp64f#{p}Q`OIflkC5gKPoz$xi`&t?uOop z`j=*PX>~QR=c-Ge_-vYFu)yFjV80PYG9s8S>^Xwtyo_XR4wxcV@`r34Kn`K0bPYHU z6>K4KctQpt4v&IkOryx1TS77|;&2cy6PaB)AZA9BG=o}37YRUM2&77sh*cRHYXBd` zj$%#bTvW2gEKD`PXkvZ{gceqU+K!B$#R54%vtW;7$oysYY-(XRqX*Sze)A?KL{B-@ z5zY%Jh`!i<^Wc#2JqDLZJx%||-vztCa=_#2Aam)^2m zyn4kmt!zi#kyD#?*Jxj?Qnk@z*xB1vnX|-AU5!_MU14ANcF)ooU&c<3f1y!OeLHE| zQ_1OwR}0#jHF?lCUGw3S%!NDF-?_J6XZUshF=2gdTD`Ma=Up;7HX%7>$oh3^SCmJW zy;Z-xV#?~)(~O)&ll|9!%iB0dt=p=jZ5?fzG><6RlcTxk`o!?<6RaDbmYT!)%3GKy z;KW~2=O*oM{XGrtPhKe0Sn5=7(pQwdG7xlpLPrWwW^aM2q1kH>%*QPA6f?f!$gfD< z=wYA{hQ0{#!07n!Wd0@OZ{f4KWZ!5X>JT_;o+Pcg7lH4x5R7V*H8{Nj%3;}|T-ByC zOw4iuFSelf*( zm?;AsOW7ls|3;#G*wfsr5(v8)Ihcmmp zd}z0BlBHA1i^;e8_3Y$zMQXqBRQN75&zK>h;e)deD`wSc#_|X7As{H?ScX5K^A(ZWlz7%vJ` zR1-*<=Xu-*vK#S%?9Aw6_$X*VHv`&)DJ*nW4b?xX-c&XWDc>t7AUeYju*b^ppS)ypZZRi#B(q zg;2%$w+LFW@la$%iz&}{&bec=!le4vC?Rq%11zd5gY0!%8vpXle7u;;93rv?GEV6exy>zesP(E`y)P;Rfw_t^S> z)@Mn&YyrcZb1l)38BLS{j*C$j&(`)(g0b^Ad?YK_@=bGU!1;h^$UsQj-`ZR7>~Au@ zM!$m&gOe}>&1UH>xj`#rd8+_vnPoCUzCAdIhYMTxIcZV2sbF)ZN~0GOeWqnxyTS}uoUVM{rwp_Xi@|#eP)5swr>(}f#p72G zuy|EH?S;Ah@>M#vn@+zRkQ8P&N^rn|>!?SahZ@$F}g4*BeGHENMz&GL`A1zlQQWt#eT}zMnN^B!`|E?7S@Zc?DsVHgB^-qT)kC2cE;t4i z0yy);5E?FUzoqZcfQST1w>o&6vOi?|7047nnq-YAWHT2Mz?l`nYy_k<20I^jb6N47 zp7|JPteFAKG>qgxPid-RaUi68fD}eRAZII2lAgc{>>eE%6A&wjB{$Y1G}NyK<~9bJ z(1KO2M^r+jBsL&EIu>>h01z$%!+`3r*D#1RsP}ko(=ZrS%zHu!R(nJzsu3gpQb_@U5(gp#!{+g8z_ z#$dZz4}9|JW~c!=U_U{_H#Ql1k8FC7P@qWAl*lRe2=pC;kWh{f3y&j|M){6Lyy5VH zgFr_CR6zzp8EOOi82ZzG1I+}RM39AXi3h-Sf~k*K2hNvpjg1XRmTq<`s|hb&*);3ld1Kd{`@cn--S!`GQAohTLOZYYo~FAn z-E+=|f@xt(zJ|VX+`G}MBxOYOnL8dwMn*L7sX6bEz3rJ&fZ3W5g$qHRuZGWR_rb1g z_`WSg=kGT^rT4e{3)QGmOD&eWo`2&}=yQY5xcJ%uoID9#{zkGNQ4Bajo1?_Z@+@J+ zfWYQcQZXP?95ShRz{xNdX}LR(E)9T$bOP@n8F&jBz?MiWCZu%&2Y?V6IU6pd;q6(M zhEoQbgdt1eLOAegqBgTi!<~ZySvWoEy{6KT%YpjP#)g3~lHD&V4c!5T8Y&ntaL}Y< z6}d%J8u}D`5(}*dP@ocJwyaA-hCx5Gwa^4ea(a-4c?W!qZ6gg*b{pU$4N?xB&N2fM z1W-wXg!5LZ=}Gyp=ENmuRxC9H=FIbJI8<-sc}vAPEAMN~GwS1=WX11sa+RC?S%4z@`odDrT4~d6G5hImV-77SbBZ zW9dSRDKc0Zodz@+J98V*KomC6sz}2=0a#GhlOeNlKCN+>?m~6{h!OJ+tkc`{CDLH2 zDDUyJjr~k^-4^QpK9E1rDWaX{%eM#P=T4k*TmMUwGP5T`C$$-?YjnmEHVcHz~X0puX0X?KAI6xqI_DA9g9N`eOYS z@msz}4tOsfHobgu5IC(I5j&8&Ea|e4Dh|>J;inK)r0}Vtp)?L*;^+s&!P@_2h@+TK z9AdZV;AH6@j0KXwF@k{*qvxV@x(g(->6$RDhX;eWC=H_yOpj$HhB7{k(!h@Zn6UyA zTBxiGL2aEh(C;85u{5Z|UzSP3Z36bhGGmg@qZ1XmJzHa=fkr0g{i`u9kzrpd#pj*uru$6n!WLD9W9Nbc3iHTMKxju8d#~AEk~f}#83Gi zi5db$p~x+tMBB=)8xS$Wv4F~C%0yDVLnDTtLZphvxUdY&T)6(iBs&90)*P`yV3{-d zt+cZ?yw?NNOt-bPO=5)~m*=?Uc=DIe`x{9ERPE@?9r zhO~M_41FKFKCs>P6g~Ba`Ry(9raoBxbf3h1bHhJNdu$GR^Jrhp*#g^-6@Od0YrM@j zjE%XWZcsHv-js$52#S?)nw}q_lm9bTR;#Rk#L74v!gTR7tW1_wNwG2wdRLh=DRc)? zU@4{!zG4i7!15J&OzIr~u}lh&5TbX~Nf&tzx{J|Sr8ikfD>J8cqu5XHh3R%rW*Sb( zaosX^VBiafGvU@lg=oqd`n*HH#fNUoS`1S@_r6kVs*6WTcKExY`)Y<|ul({$qt1uL z@3;Qlv}gX!25(nh(+b{ER(&~E<9SxMU(Myw5w27T6P^&s@SPtaCOzN{D96iZIs*Hf z5V3>20+FIF(^%oB5XV``=Qzy-5DAl29DFG(K*>O;3kgO~VU}dp<>|jHq!n0Mw0&@8 zb<-nD#~A-P&fQSF>z9G^Z68a>Gph01@nOylN1N_g`-q0t*X{&+m$hgf+_kjv5~n?t zudI~fF9j9pZ1(!BbfaR@`g`Bjz37>`H(j;p$bjHL$`n<1sRA2)NL`G?Uof< z*F)d1>>Ioh#z~@NdHghJBX%rmu?J2|55+Ms`WYbnD;AZDv@U5>syz`CDj${H6w~3w ze|1RrSVU_XvgljUZnmiIe0_`g2@8u)xkD$tVoD~pi7*gvPaj4>4&x$Cyui= zn%&E7cv{p}_Z5mpEp8`#)nC22&$>Y|8v^rRn0NJ#Y?7bwET(kZPQy1#{&GIIK^|q| zvV$-orBrEy@{iExKW8EG3jApnB7jJkR;5^oCS!q?Ca>qv8mz>k$(W&~VGi-6n$(Vq z==E|My$08loXVVx(bdC_fXj`gw($Q5QT}rwNuVsG$Ddm7 zN#hVEMJXXka5gLD&1QrV9Q_POS5waV!NIYhXOJezTp&qSt)z=10-WW904Da&+I<@@L8s+H61B^8lnv&OW12xIa?=dbBCNRJ6^DeV*9^x{$>5?tQ zUtfXG)@7dpoz31)m2Q+yvT0FXytZfN-Xi0ojYpI8U(V7qIS=#u%ev?H#;ATw2#gDg z4UfT%6+a`48Ntkq{<&CTIAopk++uZBPI6}Yx(Y?=eL!P|pF(r~9{!wfAqSZ-8P9{+ z-vZG>fV~r721}Im3`nj;oMu3rOvlO97JTAQ{@enN>q%%{WNEIDgk^H?6&BInb_ayH5T2>bfylu%cpKTQd8ko^E9 ze7E~hhskswq0OCaAk7vGppzN8N$;0Wue!46+c&b^Qv*ki99$4K>gr+L2tV(U=g+he z>SWSM(>}t)<=P#85a?}!yUuC6t3&12SSzKFx4m!ayg2tX9R|Gp>hg6vdhXwwrCL~Z zG|}nm*}2*K6Fm-}zb3Dn;S<20TYAO#JuQzKj6@WJ<&SXz=Xq=thg#)eXKtmD!B3%K z9l#&fMqGa3{%Zvzne7p=tZY6Rs2aM141^|gIjnSl^@k>5`Mri$KypNMKrOv=bHKsO zEg22+=`~umImN@{m;SvVGwq1pp0AyA+stf#NT>36E1@oRg=*a1pt0rKj@##A-fQRV z*?J`2XW*Qzp;}$Om8G@))+2JKUTQ({jsJs zZ*FY3-oa>P_Es3O2s|F1DV?uO=$&`Nbd7>pPOqdRr-oXOd0SRn#V_JZ!PcQMqrgXw&s6xifc6eLCt122jG zjLmP@==VD%J**q(XZjzSP|Gq#mB;)Wy10hwcE(ToTA{?l|KsAMxVzIYD34UDYBO}e z3M?1JJzzhgmuj8Y9iodwCh}8$(i!6y(^Qs2f9B0bo<#;TN5!})JsSDT-K#6s4z&~u z%^*FYsJmNIMma255Z`@zj>3?jC)(c5QI7&$+E3Cm^H<93a5m$?+Nb`JZnGMGtq87a zc`Uq#^Wg%AH^;u@_Ex`}uN)KdN8fh4>$dusct!<+B`nwr?xFvg1>!$fwaF_GCy}4h z)(apKom-9_kPW_Z!t0mf|J^6rFFs*|XlxWnZhqNcYmI4kqX{O0j4>m>h_%+m%hqDNJx z6(v7ka+vp9^OGv=RyA8(v#rx7Ppiq@1`CmSduW`K5r=jvmHS67@(oaYDyezCzTttS zEzM33yMYLcNcH3Ta0vG@d-p+IKtQHX$uycfd`h^3~M|ljHVo>{Hy& zcShiXvxQxMi7?DhDv2pWJIcqi*5{_n>nN0piAL-)?x*|epSyt6Q6_fRPq}~y;}Y(% z89OTV*fs7hQuKMo<0HGL%A${N?S}~AiMlrVIfsQsd8)}R{EjHhwnJ5}D za$fmrp^hbWJr1Djx&En#cWFZNkdy^}%i9)LCR%C)Uv@9h+Z^*u|HigS>+Q=c)_SDw zo!6{zMkaJP)LaMaJ2;x zrt35MEh?pkYYwf!bG}lZclYAJQA^{FZ;h@wvm)!<40oYkb%h$fyQZ<_OZlyH{_k^L zw{7W_*leKg%OtJ1=ZmY%@0-}Rl+5zD7i5)ieEbgk%*{F5o|S5JJXfewc6VI*gGC3d zoAp*6FK^U>FaV>LZZ2HTG9nrHx%>!+{pX{$jxv9G)C%Jg?s%zDOW$xJsim@)a@^8} zrWhaz4iD((Cf&V{`6FA{z3U)Q0Hg2&Z7Jm-E300_RXyt;P^Wv>BoNG)i5f{aMie0m z7fD2MqImk>Soj++iY4DBlJ6oR72nFj#)*PNVUQ9mN&r0gHyHj!jF>Z4l+0p{gLo8~ z8Y>DQ;SggSuUrNqQpA)u9lQ#Fbs%ZntxARcOt z_4@IW>(0%U#ngd<|0iWg=aGk*dyiii5C4V3_ff4F0KZ~*ZHMiQy%zvI77xFuz6=tL zs|CZg4Tl~3A|Bc-4)DwC8xBS&ANMW}@C1s+LQR4IC-WZvMv%RZ6vMrZhWb(8mJDCR z(L%f^ng=DFmPmeMIM7`wijrm>SSqgD<|G?l5PX)x8zQFiNh-3R8JjNeGoDttW z@I548ItGk4hd4jI6U6a*ARC$P0deO0d%-(zh%@E&fw+X1ALA(yXBIOU&x5!*{DnUv zPk2h<2lhLLe(;>6)0y})IvvZ$bg>d;Eyeu(;b{zUrhf)P+#2GH;OGT$CpsN|l3P5x zL!2?CWBNddqb!eMFg(K`&a9R&9tLrSelR{6;!J;IJQw1O1d8$BAdd8f^}~1x58emj zxEjOu!|%cPF^Dttg0y~-&JRCD7{3p3#s-M-Z@ly&5Z47lH-o02Of!Arjcafbdd{UyYi_Q5#b zT4Bh8H-Le~&^M-ALY!&ekr3}p$FY4d?geos|0sw{Ag&94Fj8G6Kc z5yX)m5Ff@jL7bs?KZu`(I79CkzXx#!AI85yoWX~2JzyLRePO%_#F_eF98a5K))^S@ z0db~(G2Xvc`Y#YiiwOoy$369Y{BgD7=umeRWIKxjdz7XQ@KN&E- z6e0{i!uTqP^XrH2a6DjpVLu|BKogKS85KSx~ny_g5z*6<*mbbtrxqaQp7hvN#%!nz?G;>LQlf(O&_TQMKL z!+JQtgD@WOU_N|@?S*wlm^ScW9oxf$c{{^{c)a03{5WRtJ&rw$BMo7GQ+TkPmhd1> zH#*)J{$hESbleL5Vp)CQ!S5ab55n8QgWuo?54MvNJXnv8@L(Id!-Mtf4G-dL1P|ux z2@mGOw!`wx;KBDeW--4PJXp_R@Zk62*ugmL&?oy2^Wgio@L;`~z=P#Cr~lf+U+jBq zb1VbrD8%0#9{grFua)el9`G0Oj)Vtk#1x{fFslEGXTPSo^-LN2Ty!cn@n7!nI=rUD>6nbfU?K^o$YCUrZ~wMc-HQD205 zrEsVVYGwE}34lBZftnafMFMaCJD@&?Z_Gj zL2lGdGVf!^+J`}0Lbgm4lo$nl2;33aq{2&;G_@)NSvn+X?mt0+4yXziAVYl3(W0Vb z$4{%4_uH!Oxc|tE&-1N)7wmm_vC@>dpi7fIOZAwqmX9E#iN~Zk`dm>tAbd@?v>UqA z=5*n06v8GieyPF`KUgTwWKDmBtRY&!v4UT|Kr&l6boTB!aoLSk()tzH%651y#)GFM z$N9lY%@L7)4p9lAz+hs)6$wtQi1UjK4~mVBiw=o*kW7e|MB#bfaSlQJb9?=q92^}S z{UX8x{eU&a!Ev&|;KS6`p^e`FHm?VlSL)1Phv0|^k~?)XauPK?adz9h9WRgjjT$L_ ztJ2yc0mMOy+aR6eSP2KJPJpq@AET(9M=D2sa3sK?ejec?;6F4F3J{-kgF&(w%0c0CsUF4N0`<3z_u{9$A5B40#Gv#B()?*x$#_H`6c3u@9CzKvl@YHUrAIrrbN0DUTV>{y8 z5VG$%8w}z{yAjU9lw?E6JV>!C*Pu1WD7uD5UJrUcyPUi z@VI_m0T1HG@^Fo~10F0N1L8de4^uwI@4|!YJ;aCcx9}i747jFMg9KbJVmik4;Rmkk zFkrnKLLAqpn2vEP_<`$047he}4RKuOVZeA-h%@!UxHrVHo)|D5266l@3>b&&?xo;o zL7b@{rWZjR+XwXy7~e$4;U}rH*a>me55ONXUIjlaF%g0pJa-_D--YQI{|Y~F9gXqk z@E8MP=6i4rZw7J1hXLbO5XbhxfbljEM|>DC-Vfr44+F-7A8O8rXeoO zk2Hkej(M;grf(4z%f`M#SgaHF1D1{N@EfsyOj}|a!s9!HMViAn_7TQWpM>9rdJp_- zM*qb&$8;_6I#Gj(+RwE|XdTpY)-2G}(nwW*sys1*R5D%Aj$C9n% zk!qlvX7jIC3C_Wc49D{{;;>dq>Z$t5X)XWtTJ?;D8lg#ptW>j9b>%d}f2UHoaWWR% zi9tz8)}>LZo^o1?f4?px!())fNm4RNHB?S(_3ziI)}VX+Z;k)n5z&Eg`0TIbIYwj) z#r<1@O}Z*Poiz@&&i~e6ldhF}Km;7*6c9^t0L4A28p>(L{{k`fOonR}!-E{W;g$s0 zy-)UAWU7*Kn(Dt%nb?3Nu#u8OzNMDZG0rM+`D*uOUo2;o{n~0o58vMF{a+Ff>P=~JtT7BMg#xy+pE0GS#bgJm zq7np1>c^$`E})JP1M2orPly43qkazq zzC(Q;qwmEy>J|BMM!$$UL)0yz{t|VIG`^84X`RxV{$~amueDSAW(O;$b&B|pBZhPS zkqycA&`)+F7|4bCksx)e&^%=L1_6JRD`$6ANi%%>eZKn>v?=Ic@?+M01t%enbOF@2 z!k#9~9vC5y6D|$?J2-z2?)~??HyB8y>e_xBOj;n&cre&!m^hA&1h9;ujfel1viML? zxVHx_v}jS{d{-C@)P6B)7Y}7&LywGD`0qz{Vf|QcrmQ&9?u_=lAFmm=la1PcM(ufG zFk<=m9dM2EgWg40Dur37rKogj_gh`*!qh^w zCFieHcU`IdWU@3@8%yol%ge{W3GbDwja6RVek?ar7PYSq#~Y5XV4w-gPvb{R!&-bl zw{&S#zew+}(R}R`Vd{~F;&u|sYbAN`OsPmg+}w-5km@NLGoP9%O8l`> z>c;W2B~vv1e^xSuLw?EJ&Pw!)!QGoeeS-Zd^uF%5wObhXOY-+w^4lN3GE}NZs5g|C zAyW=w#2Jb58o;-d2cbNQk%eV23E^SVm{Nqt83RROz;8f)8~}1&Alpjl^@zMY1io0h zU6~Zw_vjNs%~(i9R9oQJac$3eE&k}(m7jz83d&z1{s%_5JUT?a@+0}V64Cc5ndh%W zQ5NMXg1%(ZJ8L;V5XMhTm@;JHeqIXr865oY!MPE=(U=<6E}73yO@cLJu7D!J*oeOQU>>ktV58hvS~VhZ`YrwVn*^&zG0@nD~47De6a9@IE++{s>B{ zOGH|h8piOaKGe5BeGB|w*aB&m+1>tU*8l&(Wx8!q^!6m*)ZU@H?0t_Nnewz(YWp;T zxqO9nW0zG3fbTdS#fbh>Ou+R#<5z`x5Y&^PE(P^0jNSzGBp4VS3jVHN|JSv9gPAkx z*Zo%R2;gqieVPcx&aBfJJWkDN5fDLna*qSey?`_A*uu0J;u4|~Enyd^yM z`X6knXco6C(Kc#pS!G51oeqD`({`L~d-eULwFZiRpX}S_YHDDsOgP2~a}>Zcz{G81 z!HqA;lWr8AT(KcSq4c^@zT;$8_JUVEBBc1 zt~R1UX@RQ8i=?t+rlnPvbTTeS*jNySSG(W#ZN1z+yZeV{Sqi1vlTRm^PwgZ=Fvn=p z+jyfQt&lIxZ1?kzoJs|KX{sd-ddiKGFrv>w;vYE$SJH?GW1jkwW?uuMVZVl0$shBA zz7*Xxk!=v_JFqR_ zZVtSNakm9Lw$|i5-*lb3*_n}1su+k-cg)aNK`V+?10nZl;9Lv_xM!U@`3Y{5hU7>n zU=(yC`gvj?ROzb$+0-@Q4$5#o?if$F6_ACv0!n1Y-x-edPKXSY#4;BGvOw3M)zPsO z10nW}_KA-Lt*w~AN{oYdRp7>C#y#ijlV)n{CA34*+3J&q7tN0W_fL*f7~ zy$?KF87OfB!o*s*V_Eoi-~r3P6B@9esZT&$m^<_^SMULFer3N+O!upV(6^?4g3X(} zrfve{g z6SLD_Ck)Fm>9$1Gv{koeIj6=cCN)<{^Xd1*Z>~fkVr$cj8l#ufgU=gUt|-y%=&Qxs zwnW@2c{C-fxJBUnBmHX5*|)#qo1j-UX3m-}3Wg~!oIAR_N&ib*{c&lR*Jexe8-MiN z`26r1m2XBXGaB@o-&eKtsOF+pM}i;c#$}pT@J9>w7dackADkEog4!}w*XRfaI7=8E zY}+b(c?|3cq(C&4NB$I2TuYQeMx1>y5XwFt1AUQ(R4~Z}-m^)nJw5t+4)sQ~RO&fM zVhL5%W4M>6w+ELR3bQ_!3VA(zd8uFdsl4gkCr&3^YR>(WEhot9ZHeRHN<`O^AZgSq_; z`reuQdG#QB$Mf4i`*covJSro;rd83%T+B)n;_E)w#Gd_T!xwXDOV;u!`AqmhuyYlW*5 z2#kCq^fSvT)w%79*qGPXF5%@K;$6w`rRc$v5iqtihA z$OdP@yu{L)Tt;^ZT>Tj+u@*2o;V)ttohL9?240%cu?3%n9RWYd=rUo00P`g%2`Fm$ ziL@`mKlP!$1?pR%z6I)ApuPp_TcExL>RX_`1?pR%z6I)A;2*U>T6}hhO4@+`tRJkf zuc55X;=8n(w#hLCl@ZJCS`NF1IXG>JlT>n$Pu>V6X P4sNSLP5!@Z5BvWBBpPLx literal 0 HcmV?d00001 diff --git a/DockerFile b/DockerFile new file mode 100644 index 0000000..550d0c8 --- /dev/null +++ b/DockerFile @@ -0,0 +1,12 @@ +FROM microsoft/dotnet:2.2-sdk + +WORKDIR /telstradev +COPY . . + +RUN dotnet build + +WORKDIR /telstradev/src/Telstra.Messaging.Test +RUN dotnet test + +WORKDIR /telstradev/src/Telstra.Messaging.BackwardCompatTest +CMD dotnet run \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index acb0be4..0000000 --- a/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2017 Telstra Corporation Limited (ABN 33 051 775 556) - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/README.md b/README.md index 8147378..982214f 100644 --- a/README.md +++ b/README.md @@ -1,84 +1,84 @@ -# com.telstra.messaging - the C# library for the Telstra Messaging API +# Telstra.Messaging - the C# library for the Telstra Messaging API - The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. +The API specification for Telstra Messaging API +This C# SDK is automatically generated by the [OpenAPI Generator](https://openapi-generator.tech) project: -- API version: 2.2.4 -- SDK version: 1.0.2 +- API version: 2.2.9 +- SDK version: 1.0.8 +- Build package: org.openapitools.codegen.languages.CSharpNetCoreClientCodegen ## Frameworks supported -- .NET 4.0 or later -- Windows Phone 7.1 (Mango) +- .NET Core >=1.0 +- .NET Framework >=4.6 +- Mono/Xamarin >=vNext ## Dependencies -- [RestSharp](https://www.nuget.org/packages/RestSharp) - 105.1.0 or later -- [Json.NET](https://www.nuget.org/packages/Newtonsoft.Json/) - 7.0.0 or later -- [JsonSubTypes](https://www.nuget.org/packages/JsonSubTypes/) - 1.2.0 or later +- [RestSharp](https://www.nuget.org/packages/RestSharp) - 106.6.7 or later +- [Json.NET](https://www.nuget.org/packages/Newtonsoft.Json/) - 12.0.1 or later +- [JsonSubTypes](https://www.nuget.org/packages/JsonSubTypes/) - 1.5.2 or later +- [CompareNETObjects](https://www.nuget.org/packages/CompareNETObjects) - 4.57.0 or later +- [System.ComponentModel.Annotations](https://www.nuget.org/packages/System.ComponentModel.Annotations) - 4.5.0 or later + +The DLLs included in the package may not be the latest version. We recommend using [NuGet](https://docs.nuget.org/consume/installing-nuget) to obtain the latest version of the packages: ``` Install-Package RestSharp Install-Package Newtonsoft.Json Install-Package JsonSubTypes +Install-Package System.ComponentModel.Annotations +Install-Package CompareNETObjects ``` NOTE: RestSharp versions greater than 105.1.0 have a bug which causes file uploads to fail. See [RestSharp#742](https://github.com/restsharp/RestSharp/issues/742) ## Installation -Run the following command to generate the DLL -- [Mac/Linux] `/bin/sh build.sh` -- [Windows] `build.bat` +Generate the DLL using your preferred tool (e.g. `dotnet build`) Then include the DLL (under the `bin` folder) in the C# project, and use the namespaces: ```csharp -using com.telstra.messaging.Api; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; -``` - -## Packaging - - -This `.nuspec` uses placeholders from the `.csproj`, so build the `.csproj` directly: - -``` -nuget pack -Build -OutputDirectory out com.telstra.messaging.csproj +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; ``` - - ## Getting Started ```csharp -using System; +using System.Collections.Generic; using System.Diagnostics; -using com.telstra.messaging.Api; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; namespace Example { public class Example { - public void main() + public static void Main() { - var apiInstance = new AuthenticationApi(); + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; + var apiInstance = new AuthenticationApi(Configuration.Default); var clientId = clientId_example; // string | var clientSecret = clientSecret_example; // string | - var grantType = grantType_example; // string | (default to client_credentials) + var grantType = grantType_example; // string | (default to "client_credentials") + var scope = scope_example; // string | NSMS (optional) try { - // Generate authentication token - OAuthResponse result = apiInstance.AuthToken(clientId, clientSecret, grantType); + // Generate OAuth2 token + OAuthResponse result = apiInstance.AuthToken(clientId, clientSecret, grantType, scope); Debug.WriteLine(result); } - catch (Exception e) + catch (ApiException e) { Debug.Print("Exception when calling AuthenticationApi.AuthToken: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); } } @@ -93,10 +93,14 @@ All URIs are relative to *https://tapi.telstra.com/v2* Class | Method | HTTP request | Description ------------ | ------------- | ------------- | ------------- -*AuthenticationApi* | [**AuthToken**](docs/AuthenticationApi.md#authtoken) | **POST** /oauth/token | Generate authentication token +*AuthenticationApi* | [**AuthToken**](docs/AuthenticationApi.md#authtoken) | **POST** /oauth/token | Generate OAuth2 token *MessagingApi* | [**GetMMSStatus**](docs/MessagingApi.md#getmmsstatus) | **GET** /messages/mms/{messageid}/status | Get MMS Status *MessagingApi* | [**GetSMSStatus**](docs/MessagingApi.md#getsmsstatus) | **GET** /messages/sms/{messageId}/status | Get SMS Status -*MessagingApi* | [**RetrieveSMSResponses**](docs/MessagingApi.md#retrievesmsresponses) | **GET** /messages/sms | Retrieve SMS Responses +*MessagingApi* | [**MMSHealthCheck**](docs/MessagingApi.md#mmshealthcheck) | **GET** /messages/mms/heathcheck | MMS Health Check +*MessagingApi* | [**RetrieveMMSReplies**](docs/MessagingApi.md#retrievemmsreplies) | **GET** /messages/mms | Retrieve MMS Replies +*MessagingApi* | [**RetrieveSMSReplies**](docs/MessagingApi.md#retrievesmsreplies) | **GET** /messages/sms | Retrieve SMS Replies +*MessagingApi* | [**SMSHealthCheck**](docs/MessagingApi.md#smshealthcheck) | **GET** /messages/sms/heathcheck | SMS Health Check +*MessagingApi* | [**SMSMulti**](docs/MessagingApi.md#smsmulti) | **POST** /messages/sms/multi | Send Multiple SMS *MessagingApi* | [**SendMMS**](docs/MessagingApi.md#sendmms) | **POST** /messages/mms | Send MMS *MessagingApi* | [**SendSMS**](docs/MessagingApi.md#sendsms) | **POST** /messages/sms | Send SMS *ProvisioningApi* | [**CreateSubscription**](docs/ProvisioningApi.md#createsubscription) | **POST** /messages/provisioning/subscriptions | Create Subscription @@ -108,33 +112,34 @@ Class | Method | HTTP request | Description ## Documentation for Models - [Model.DeleteNumberRequest](docs/DeleteNumberRequest.md) - - [Model.ErrorError](docs/ErrorError.md) - - [Model.ErrorErrorError](docs/ErrorErrorError.md) + - [Model.GetMmsResponse](docs/GetMmsResponse.md) - [Model.GetSubscriptionResponse](docs/GetSubscriptionResponse.md) + - [Model.HealthCheckResponse](docs/HealthCheckResponse.md) - [Model.InboundPollResponse](docs/InboundPollResponse.md) - [Model.MMSContent](docs/MMSContent.md) - [Model.Message](docs/Message.md) - - [Model.MessageSentResponse](docs/MessageSentResponse.md) - - [Model.MessageType](docs/MessageType.md) - - [Model.OAuthRequest](docs/OAuthRequest.md) + - [Model.MessageMulti](docs/MessageMulti.md) + - [Model.MessageSentResponseMms](docs/MessageSentResponseMms.md) + - [Model.MessageSentResponseSms](docs/MessageSentResponseSms.md) - [Model.OAuthResponse](docs/OAuthResponse.md) - [Model.OutboundPollResponse](docs/OutboundPollResponse.md) - [Model.ProvisionNumberRequest](docs/ProvisionNumberRequest.md) - [Model.ProvisionNumberResponse](docs/ProvisionNumberResponse.md) - [Model.SendMmsRequest](docs/SendMmsRequest.md) - [Model.SendSMSRequest](docs/SendSMSRequest.md) + - [Model.SendSmsMultiRequest](docs/SendSmsMultiRequest.md) - [Model.Status](docs/Status.md) -## Documentation for Authorisation +## Documentation for Authorization ### auth - **Type**: OAuth - **Flow**: application -- **Authorisation URL**: +- **Authorization URL**: - **Scopes**: - NSMS: NSMS diff --git a/Telstra.Messaging.sln b/Telstra.Messaging.sln new file mode 100644 index 0000000..774e286 --- /dev/null +++ b/Telstra.Messaging.sln @@ -0,0 +1,36 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29001.49 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Telstra.Messaging", "src\Telstra.Messaging\Telstra.Messaging.csproj", "{B98ACF0D-EE51-49A8-BA8E-71750CAAB9E3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Telstra.Messaging.Test", "src\Telstra.Messaging.Test\Telstra.Messaging.Test.csproj", "{19F1DEBC-DE5E-4517-8062-F000CD499087}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Telstra.Messaging.BackwardCompatTest", "src\Telstra.Messaging.BackwardCompatTest\Telstra.Messaging.BackwardCompatTest.csproj", "{EFCB5739-9CBE-43FC-80FD-78E552CD415E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B98ACF0D-EE51-49A8-BA8E-71750CAAB9E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B98ACF0D-EE51-49A8-BA8E-71750CAAB9E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B98ACF0D-EE51-49A8-BA8E-71750CAAB9E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B98ACF0D-EE51-49A8-BA8E-71750CAAB9E3}.Release|Any CPU.Build.0 = Release|Any CPU + {19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.Build.0 = Debug|Any CPU + {19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.ActiveCfg = Release|Any CPU + {19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.Build.0 = Release|Any CPU + {EFCB5739-9CBE-43FC-80FD-78E552CD415E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EFCB5739-9CBE-43FC-80FD-78E552CD415E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EFCB5739-9CBE-43FC-80FD-78E552CD415E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EFCB5739-9CBE-43FC-80FD-78E552CD415E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {9B2B0E7E-CEBF-46C0-BB6C-20FC6C8F8EEF} + EndGlobalSection +EndGlobal diff --git a/build.bat b/build.bat deleted file mode 100644 index 632d114..0000000 --- a/build.bat +++ /dev/null @@ -1,17 +0,0 @@ -:: Generated by: https://github.com/swagger-api/swagger-codegen.git -:: - -@echo off - -SET CSCPATH=%SYSTEMROOT%\Microsoft.NET\Framework\v4.0.30319 - -if not exist ".\nuget.exe" powershell -Command "(new-object System.Net.WebClient).DownloadFile('https://dist.nuget.org/win-x86-commandline/latest/nuget.exe', '.\nuget.exe')" -.\nuget.exe install src\com.telstra.messaging\packages.config -o packages - -if not exist ".\bin" mkdir bin - -copy packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll bin\Newtonsoft.Json.dll -copy packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll bin\JsonSubTypes.dll -copy packages\RestSharp.105.1.0\lib\net45\RestSharp.dll bin\RestSharp.dll -%CSCPATH%\csc /reference:bin\Newtonsoft.Json.dll;bin\JsonSubTypes.dll;bin\RestSharp.dll;System.ComponentModel.DataAnnotations.dll /target:library /out:bin\com.telstra.messaging.dll /recurse:src\com.telstra.messaging\*.cs /doc:bin\com.telstra.messaging.xml - diff --git a/build.sh b/build.sh deleted file mode 100644 index dc2b8c7..0000000 --- a/build.sh +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env bash -# -# Generated by: https://github.com/swagger-api/swagger-codegen.git -# - -frameworkVersion=net45 - -# sdk must match installed framworks under PREFIX/lib/mono/[value] -sdk=4.5.2-api - -# langversion refers to C# language features. see man mcs for details. -langversion=${sdk} -nuget_cmd=nuget - -# Match against our known SDK possibilities -case "${sdk}" in - 4) - langversion=4 - ;; - 4.5*) - langversion=5 - ;; - 4.6*) - langversion=6 - ;; - 4.7*) - langversion=7 # ignoring 7.1 for now. - ;; - *) - langversion=6 - ;; -esac - -echo "[INFO] Target framework: ${frameworkVersion}" - -if ! type nuget &>/dev/null; then - echo "[INFO] Download nuget and packages" - wget -nc https://dist.nuget.org/win-x86-commandline/latest/nuget.exe; - nuget_cmd="mono nuget.exe" -fi - -mozroots --import --sync -${nuget_cmd} install src/com.telstra.messaging/packages.config -o packages; - -echo "[INFO] Copy DLLs to the 'bin' folder" -mkdir -p bin; -cp packages/Newtonsoft.Json.10.0.3/lib/net45/Newtonsoft.Json.dll bin/Newtonsoft.Json.dll; -cp packages/RestSharp.105.1.0/lib/net45/RestSharp.dll bin/RestSharp.dll; -cp packages/JsonSubTypes.1.2.0/lib/net45/JsonSubTypes.dll bin/JsonSubTypes.dll - -echo "[INFO] Run 'mcs' to build bin/com.telstra.messaging.dll" -mcs -langversion:${langversion} -sdk:${sdk} -r:bin/Newtonsoft.Json.dll,bin/JsonSubTypes.dll,\ -bin/RestSharp.dll,\ -System.ComponentModel.DataAnnotations.dll,\ -System.Runtime.Serialization.dll \ --target:library \ --out:bin/com.telstra.messaging.dll \ --recurse:'src/com.telstra.messaging/*.cs' \ --doc:bin/com.telstra.messaging.xml \ --platform:anycpu - -if [ $? -ne 0 ] -then - echo "[ERROR] Compilation failed with exit code $?" - exit 1 -else - echo "[INFO] bin/com.telstra.messaging.dll was created successfully" -fi diff --git a/com.telstra.messaging.sln b/com.telstra.messaging.sln deleted file mode 100644 index ac0a23a..0000000 --- a/com.telstra.messaging.sln +++ /dev/null @@ -1,27 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -VisualStudioVersion = 12.0.0.0 -MinimumVisualStudioVersion = 10.0.0.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "com.telstra.messaging", "src\com.telstra.messaging\com.telstra.messaging.csproj", "{C0869B26-6FED-45CB-88E0-8AD7E6B96330}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "com.telstra.messaging.Test", "src\com.telstra.messaging.Test\com.telstra.messaging.Test.csproj", "{19F1DEBC-DE5E-4517-8062-F000CD499087}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C0869B26-6FED-45CB-88E0-8AD7E6B96330}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C0869B26-6FED-45CB-88E0-8AD7E6B96330}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C0869B26-6FED-45CB-88E0-8AD7E6B96330}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C0869B26-6FED-45CB-88E0-8AD7E6B96330}.Release|Any CPU.Build.0 = Release|Any CPU - {19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19F1DEBC-DE5E-4517-8062-F000CD499087}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19F1DEBC-DE5E-4517-8062-F000CD499087}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal \ No newline at end of file diff --git a/com.telstra.messaging.userprefs b/com.telstra.messaging.userprefs deleted file mode 100644 index c53e8c0..0000000 --- a/com.telstra.messaging.userprefs +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..44446f8 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,11 @@ +version: '3' +services: + telstradev: + environment: + - CLIENT_ID + - CLIENT_SECRET + - PHONE_NO + - FROM_ALIAS + build: + context: . + dockerfile: DockerFile \ No newline at end of file diff --git a/docs/AuthApi.md b/docs/AuthApi.md deleted file mode 100644 index 106c1ba..0000000 --- a/docs/AuthApi.md +++ /dev/null @@ -1,72 +0,0 @@ -# com.telstra.messaging.Api.AuthApi - -All URIs are relative to *https://tapi.telstra.com/v2* - -Method | HTTP request | Description -------------- | ------------- | ------------- -[**OauthTokenPost**](AuthApi.md#oauthtokenpost) | **POST** /oauth/token | AuthGeneratetokenPost - - - -# **OauthTokenPost** -> AuthgeneratetokenpostResponse OauthTokenPost (string oAuthClientId, string oAuthClientSecret) - -AuthGeneratetokenPost - -generate auth token - -### Example -```csharp -using System; -using System.Diagnostics; -using com.telstra.messaging.Api; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; - -namespace Example -{ - public class OauthTokenPostExample - { - public void main() - { - var apiInstance = new AuthApi(); - var oAuthClientId = oAuthClientId_example; // string | - var oAuthClientSecret = oAuthClientSecret_example; // string | - - try - { - // AuthGeneratetokenPost - AuthgeneratetokenpostResponse result = apiInstance.OauthTokenPost(oAuthClientId, oAuthClientSecret); - Debug.WriteLine(result); - } - catch (Exception e) - { - Debug.Print("Exception when calling AuthApi.OauthTokenPost: " + e.Message ); - } - } - } -} -``` - -### Parameters - -Name | Type | Description | Notes -------------- | ------------- | ------------- | ------------- - **oAuthClientId** | **string**| | - **oAuthClientSecret** | **string**| | - -### Return type - -[**AuthgeneratetokenpostResponse**](AuthgeneratetokenpostResponse.md) - -### Authorization - -No authorization required - -### HTTP request headers - - - **Content-Type**: application/x-www-form-urlencoded - - **Accept**: application/json - -[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - diff --git a/docs/AuthenticationApi.md b/docs/AuthenticationApi.md index ceaa61a..d1eb36b 100644 --- a/docs/AuthenticationApi.md +++ b/docs/AuthenticationApi.md @@ -1,48 +1,52 @@ -# com.telstra.messaging.Api.AuthenticationApi +# Telstra.Messaging.Api.AuthenticationApi All URIs are relative to *https://tapi.telstra.com/v2* Method | HTTP request | Description ------------- | ------------- | ------------- -[**AuthToken**](AuthenticationApi.md#authtoken) | **POST** /oauth/token | Generate authentication token +[**AuthToken**](AuthenticationApi.md#authtoken) | **POST** /oauth/token | Generate OAuth2 token # **AuthToken** -> OAuthResponse AuthToken (string clientId, string clientSecret, string grantType) +> OAuthResponse AuthToken (string clientId, string clientSecret, string grantType, string scope = null) -Generate authentication token +Generate OAuth2 token -Generate authentication token +To generate an OAuth2 Authentication token, pass through your `Client key` and `Client secret` that you received when you registered for the **API Free Trial** Product. The grant_type should be left as `client_credentials` and the scope as `NSMS`. The token will expire in one hour. ### Example ```csharp -using System; +using System.Collections.Generic; using System.Diagnostics; -using com.telstra.messaging.Api; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; namespace Example { public class AuthTokenExample { - public void main() + public static void Main() { - var apiInstance = new AuthenticationApi(); + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; + var apiInstance = new AuthenticationApi(Configuration.Default); var clientId = clientId_example; // string | var clientSecret = clientSecret_example; // string | - var grantType = grantType_example; // string | (default to client_credentials) + var grantType = grantType_example; // string | (default to "client_credentials") + var scope = scope_example; // string | NSMS (optional) try { - // Generate authentication token - OAuthResponse result = apiInstance.AuthToken(clientId, clientSecret, grantType); + // Generate OAuth2 token + OAuthResponse result = apiInstance.AuthToken(clientId, clientSecret, grantType, scope); Debug.WriteLine(result); } - catch (Exception e) + catch (ApiException e) { Debug.Print("Exception when calling AuthenticationApi.AuthToken: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); } } } @@ -55,7 +59,8 @@ Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- **clientId** | **string**| | **clientSecret** | **string**| | - **grantType** | **string**| | [default to client_credentials] + **grantType** | **string**| | [default to "client_credentials"] + **scope** | **string**| NSMS | [optional] ### Return type @@ -70,5 +75,15 @@ No authorization required - **Content-Type**: application/x-www-form-urlencoded - **Accept**: application/json +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Success | - | +| **400** | unsupported_grant_type | - | +| **401** | invalid_client | - | +| **404** | The requested URI does not exist | - | +| **503** | The service requested is currently unavailable | - | +| **0** | An internal error occurred when processing the request | - | + [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/AuthgeneratetokenpostResponse.md b/docs/AuthgeneratetokenpostResponse.md deleted file mode 100644 index d668d26..0000000 --- a/docs/AuthgeneratetokenpostResponse.md +++ /dev/null @@ -1,12 +0,0 @@ -# com.telstra.messaging.Model.AuthgeneratetokenpostResponse -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**AccessToken** | **string** | | [optional] -**ExpiresIn** | **int?** | | [optional] -**RefreshToken** | **string** | | [optional] -**TokenType** | **string** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/DeleteNumberRequest.md b/docs/DeleteNumberRequest.md index cc4df09..5ebb2db 100644 --- a/docs/DeleteNumberRequest.md +++ b/docs/DeleteNumberRequest.md @@ -1,9 +1,9 @@ -# com.telstra.messaging.Model.DeleteNumberRequest +# Telstra.Messaging.Model.DeleteNumberRequest ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**EmptyArr** | **int?** | Empty Arr | [optional] [default to 0] +**EmptyArr** | **int** | Empty Arr | [optional] [default to 0] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/ErrorError.md b/docs/ErrorError.md deleted file mode 100644 index d3e745c..0000000 --- a/docs/ErrorError.md +++ /dev/null @@ -1,10 +0,0 @@ -# com.telstra.messaging.Model.ErrorError -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**Status** | **string** | A short error code | -**Message** | **string** | Message describing the error. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/ErrorErrorError.md b/docs/ErrorErrorError.md deleted file mode 100644 index f81354a..0000000 --- a/docs/ErrorErrorError.md +++ /dev/null @@ -1,10 +0,0 @@ -# com.telstra.messaging.Model.ErrorErrorError -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**Status** | **int?** | The status code. | [optional] -**Message** | **string** | Message describing the error. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/ErrorErrorError62.md b/docs/ErrorErrorError62.md deleted file mode 100644 index 7b848a1..0000000 --- a/docs/ErrorErrorError62.md +++ /dev/null @@ -1,10 +0,0 @@ -# com.telstra.messaging.Model.ErrorErrorError62 -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**Status** | **string** | A short error code | -**Message** | **string** | Message describing the error. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/ErrorErrorErrorError.md b/docs/ErrorErrorErrorError.md deleted file mode 100644 index 9fa0c27..0000000 --- a/docs/ErrorErrorErrorError.md +++ /dev/null @@ -1,10 +0,0 @@ -# com.telstra.messaging.Model.ErrorErrorErrorError -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**Status** | **int?** | The status code. | [optional] -**Message** | **string** | Message describing the error. | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/GetMmsResponse.md b/docs/GetMmsResponse.md new file mode 100644 index 0000000..785195b --- /dev/null +++ b/docs/GetMmsResponse.md @@ -0,0 +1,16 @@ +# Telstra.Messaging.Model.GetMmsResponse +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Status** | **string** | The final state of the message. | +**DestinationAddress** | **string** | The number the message was sent to. | +**SenderAddress** | **string** | The number the message was sent from. | +**Subject** | **string** | The subject assigned to the message. | [optional] +**MessageId** | **string** | Message Id assigned by the MMSC. | [optional] +**ApiMsgId** | **string** | Message Id assigned by the API. | [optional] +**SentTimestamp** | **string** | Time handling of the message ended. | +**MMSContent** | [**List<MMSContent>**](MMSContent.md) | An array of content that was received in an MMS message. | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/GetSubscriptionResponse.md b/docs/GetSubscriptionResponse.md index 2148f40..16f63f0 100644 --- a/docs/GetSubscriptionResponse.md +++ b/docs/GetSubscriptionResponse.md @@ -1,4 +1,4 @@ -# com.telstra.messaging.Model.GetSubscriptionResponse +# Telstra.Messaging.Model.GetSubscriptionResponse ## Properties Name | Type | Description | Notes diff --git a/docs/MessageType.md b/docs/HealthCheckResponse.md similarity index 64% rename from docs/MessageType.md rename to docs/HealthCheckResponse.md index f1130f4..1c5ea1d 100644 --- a/docs/MessageType.md +++ b/docs/HealthCheckResponse.md @@ -1,8 +1,10 @@ -# com.telstra.messaging.Model.MessageType +# Telstra.Messaging.Model.HealthCheckResponse +Information regarding service being up or down. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- +**Status** | **string** | message status | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/InboundPollResponse.md b/docs/InboundPollResponse.md index 897e7b3..fc605b9 100644 --- a/docs/InboundPollResponse.md +++ b/docs/InboundPollResponse.md @@ -1,11 +1,12 @@ -# com.telstra.messaging.Model.InboundPollResponse +# Telstra.Messaging.Model.InboundPollResponse +Poll for incoming messages returning the latest. Only works if no callback url was specified when provisioning a number. ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **Status** | **string** | message status | [optional] -**DestinationAddress** | **string** | The phone number (recipient) that the message was sent to(in E.164 format). | [optional] -**SenderAddress** | **string** | The phone number (sender) that the message was sent from (in E.164 format). | [optional] +**DestinationAddress** | **string** | The phone number (recipient) that the message was sent to (in E.164 format). | [optional] +**SenderAddress** | **string** | The phone number (sender) that the message was sent from (in E.164 format). | [optional] **Message** | **string** | Text of the message that was sent | [optional] **MessageId** | **string** | Message Id | [optional] **SentTimestamp** | **string** | The date and time when the message was sent by recipient. | [optional] diff --git a/docs/MMSContent.md b/docs/MMSContent.md index 0c78c3a..34630df 100644 --- a/docs/MMSContent.md +++ b/docs/MMSContent.md @@ -1,11 +1,11 @@ -# com.telstra.messaging.Model.MMSContent +# Telstra.Messaging.Model.MMSContent ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**Type** | **string** | The following types are supported audio/amr audio/aac audio/mp3 audio/mpeg3 audio/mpeg audio/mpg audio/wav audio/3gpp audio/mp4 image/gif image/jpeg image/jpg image/png image/bmp video/mpeg4 video/mp4 video/mpeg video/3gpp video/3gp video/h263 text/plain text/x-vCard text/x-vCalendar | -**Filename** | **string** | The file name to be associated with the content. Some devices will display this file name with a placeholder for the content. | -**Payload** | **string** | | +**Type** | **string** | The following types are supported audio/amr audio/aac audio/mp3 audio/mpeg3 audio/mpeg audio/mpg audio/wav audio/3gpp audio/mp4 image/gif image/jpeg image/jpg image/png image/bmp video/mpeg4 video/mp4 video/mpeg video/3gpp video/3gp video/h263 text/plain text/x-vCard text/x-vCalendar | +**Filename** | **string** | The file name to be associated with the content. Some devices will display this file name with a placeholder for the content. | +**Payload** | **string** | Base64 encoded message content. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/Message.md b/docs/Message.md index 3890f4a..8d54631 100644 --- a/docs/Message.md +++ b/docs/Message.md @@ -1,12 +1,12 @@ -# com.telstra.messaging.Model.Message +# Telstra.Messaging.Model.Message ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**To** | **string** | | -**DeliveryStatus** | **string** | | -**MessageId** | **string** | | -**MessageStatusURL** | **string** | | [optional] +**To** | **string** | Just a copy of the number the message is sent to. | +**DeliveryStatus** | **string** | Gives an indication if the message has been accepted for delivery. The description field contains information on why a message may have been rejected. | +**MessageId** | **string** | For an accepted message, ths will be a unique reference that can be used to check the messages status. Please refer to the Delivery Notification section. Note that `messageId` will be different for each number that the message was sent to. | +**MessageStatusURL** | **string** | For an accepted message, ths will be the URL that can be used to check the messages status. Please refer to the Delivery Notification section. | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/MessageMulti.md b/docs/MessageMulti.md new file mode 100644 index 0000000..6d0b851 --- /dev/null +++ b/docs/MessageMulti.md @@ -0,0 +1,11 @@ +# Telstra.Messaging.Model.MessageMulti +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**To** | **string** | Phone number (in E.164 format) to send the SMS to. This number can be in international format `\"to\": \"+61412345678\"` or in national format. | [optional] +**Body** | **string** | The text body of the message. Messages longer than 160 characters will be counted as multiple messages. This field contains the message text, this can be up to 1900 (for a single recipient) or 500 (for multiple recipients) UTF-8 characters. As mobile devices rarely support the full range of UTF-8 characters, it is possible that some characters may not be translated correctly by the mobile device | [optional] +**ReceiptOff** | **bool** | Whether Delivery Receipt will be sent back or not. Setting this field to `true` will disable Delivery Receipts. The `notifyURL` field will be ignored, if there is one in the payload. An \"OLD-NONEXISTANT-MESSAGE-ID\" 400 error will also be returned upon Polling for the SMS Status. | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/MessageSentResponse.md b/docs/MessageSentResponse.md deleted file mode 100644 index b415d27..0000000 --- a/docs/MessageSentResponse.md +++ /dev/null @@ -1,13 +0,0 @@ -# com.telstra.messaging.Model.MessageSentResponse -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**Messages** | [**List<Message>**](Message.md) | | -**MessageType** | **string** | | -**NumberSegments** | **int?** | | -**NumberNationalDestinations** | **int?** | | [optional] -**NumberInternationalDestinations** | **int?** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/MessageSentResponseMms.md b/docs/MessageSentResponseMms.md new file mode 100644 index 0000000..ce84867 --- /dev/null +++ b/docs/MessageSentResponseMms.md @@ -0,0 +1,13 @@ +# Telstra.Messaging.Model.MessageSentResponseMms +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Messages** | [**List<Message>**](Message.md) | An array of messages. | +**MmsMediaKB** | **int** | Indicates the message size in kB of the MMS sent. | [optional] +**Country** | **List<Object>** | An array of the countries to which the destination MSISDNs belong. | [optional] +**MessageType** | **string** | This returns whether the message sent was a SMS or MMS. | +**NumberSegments** | **int** | MMS with numberSegments below 600 are classed as Small whereas those that are bigger than 600 are classed as Large. They will be charged accordingly. | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/MessageSentResponseSms.md b/docs/MessageSentResponseSms.md new file mode 100644 index 0000000..2afb50d --- /dev/null +++ b/docs/MessageSentResponseSms.md @@ -0,0 +1,12 @@ +# Telstra.Messaging.Model.MessageSentResponseSms +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Messages** | [**List<Message>**](Message.md) | An array of messages. | +**Country** | **List<Object>** | An array of the countries to which the destination MSISDNs belong. | [optional] +**MessageType** | **string** | This returns whether the message sent was a SMS or MMS. | +**NumberSegments** | **int** | A message which has 160 GSM-7 characters or less will have numberSegments=1. Note that multi-part messages which are over 160 GSM-7 characters will include the User Data Header as part of the numberSegments. The User Data Header is being used for the re-assembly of the messages. | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/MessagingApi.md b/docs/MessagingApi.md index 7dba801..457a05c 100644 --- a/docs/MessagingApi.md +++ b/docs/MessagingApi.md @@ -1,4 +1,4 @@ -# com.telstra.messaging.Api.MessagingApi +# Telstra.Messaging.Api.MessagingApi All URIs are relative to *https://tapi.telstra.com/v2* @@ -6,14 +6,18 @@ Method | HTTP request | Description ------------- | ------------- | ------------- [**GetMMSStatus**](MessagingApi.md#getmmsstatus) | **GET** /messages/mms/{messageid}/status | Get MMS Status [**GetSMSStatus**](MessagingApi.md#getsmsstatus) | **GET** /messages/sms/{messageId}/status | Get SMS Status -[**RetrieveSMSResponses**](MessagingApi.md#retrievesmsresponses) | **GET** /messages/sms | Retrieve SMS Responses +[**MMSHealthCheck**](MessagingApi.md#mmshealthcheck) | **GET** /messages/mms/heathcheck | MMS Health Check +[**RetrieveMMSReplies**](MessagingApi.md#retrievemmsreplies) | **GET** /messages/mms | Retrieve MMS Replies +[**RetrieveSMSReplies**](MessagingApi.md#retrievesmsreplies) | **GET** /messages/sms | Retrieve SMS Replies +[**SMSHealthCheck**](MessagingApi.md#smshealthcheck) | **GET** /messages/sms/heathcheck | SMS Health Check +[**SMSMulti**](MessagingApi.md#smsmulti) | **POST** /messages/sms/multi | Send Multiple SMS [**SendMMS**](MessagingApi.md#sendmms) | **POST** /messages/mms | Send MMS [**SendSMS**](MessagingApi.md#sendsms) | **POST** /messages/sms | Send SMS # **GetMMSStatus** -> List GetMMSStatus (string messageid) +> List<OutboundPollResponse> GetMMSStatus (string messageid) Get MMS Status @@ -21,33 +25,36 @@ Get MMS Status ### Example ```csharp -using System; +using System.Collections.Generic; using System.Diagnostics; -using com.telstra.messaging.Api; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; namespace Example { public class GetMMSStatusExample { - public void main() + public static void Main() { + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; // Configure OAuth2 access token for authorization: auth Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new MessagingApi(); - var messageid = messageid_example; // string | Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/mms + var apiInstance = new MessagingApi(Configuration.Default); + var messageid = messageid_example; // string | Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/mms try { // Get MMS Status - List<OutboundPollResponse> result = apiInstance.GetMMSStatus(messageid); + List result = apiInstance.GetMMSStatus(messageid); Debug.WriteLine(result); } - catch (Exception e) + catch (ApiException e) { Debug.Print("Exception when calling MessagingApi.GetMMSStatus: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); } } } @@ -58,11 +65,11 @@ namespace Example Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **messageid** | **string**| Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/mms | + **messageid** | **string**| Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/mms | ### Return type -[**List**](OutboundPollResponse.md) +[**List<OutboundPollResponse>**](OutboundPollResponse.md) ### Authorization @@ -70,48 +77,67 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/json + - **Content-Type**: Not defined - **Accept**: application/json +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | | - | +| **400** | Invalid or missing request parameters NOT-PROVISIONED Request flagged as containing suspicious content | - | +| **401** | Invalid access token. Please try with a valid token | - | +| **403** | Authorization credentials passed and accepted but account does not have permission SpikeArrest-The API call rate limit has been exceeded | - | +| **404** | The requested URI does not exist OLD-NONEXISTANT-MESSAGE-ID RESOURCE-NOT-FOUND | - | +| **405** | The requested resource does not support the supplied verb | - | +| **415** | API does not support the requested content type | - | +| **422** | The request is formed correctly, but due to some condition the request cannot be processed e.g. email is required and it is not provided in the request | - | +| **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | +| **501** | The HTTP method being used has not yet been implemented for the requested resource | - | +| **503** | The service requested is currently unavailable | - | +| **0** | An internal error occurred when processing the request | - | + [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **GetSMSStatus** -> List GetSMSStatus (string messageId) +> List<OutboundPollResponse> GetSMSStatus (string messageId) Get SMS Status -Get Message Status +If no notification URL has been specified, it is possible to poll for the message status. Note that the `MessageId` that appears in the URL must be URL encoded. Just copying the `MessageId` as it was supplied when submitting the message may not work. # SMS Status with Notification URL When a message has reached its final state, the API will send a POST to the URL that has been previously specified.
{     \"to\": \"+61418123456\",     \"sentTimestamp\": \"2017-03-17T10:05:22+10:00\",     \"receivedTimestamp\": \"2017-03-17T10:05:23+10:00\",     \"messageId\": \"1234567890ABCDEFGHIJKLNOPQRSTUVW\",     \"deliveryStatus\": \"DELIVRD\"   } 
The fields are: | Field | Description | | - -- | - --| | `to` | The number the message was sent to. | | `receivedTimestamp` | Time the message was sent to the API. | | `sentTimestamp` | Time handling of the message ended. | | `deliveryStatus` | The final state of the message. | | `messageId` | The same reference that was returned when the original message was sent.| | `receivedTimestamp` | Time the message was sent to the API.| Upon receiving this call it is expected that your servers will give a 204 (No Content) response. ### Example ```csharp -using System; +using System.Collections.Generic; using System.Diagnostics; -using com.telstra.messaging.Api; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; namespace Example { public class GetSMSStatusExample { - public void main() + public static void Main() { + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; // Configure OAuth2 access token for authorization: auth Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new MessagingApi(); - var messageId = messageId_example; // string | Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/sms + var apiInstance = new MessagingApi(Configuration.Default); + var messageId = messageId_example; // string | Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/sms. try { // Get SMS Status - List<OutboundPollResponse> result = apiInstance.GetSMSStatus(messageId); + List result = apiInstance.GetSMSStatus(messageId); Debug.WriteLine(result); } - catch (Exception e) + catch (ApiException e) { Debug.Print("Exception when calling MessagingApi.GetSMSStatus: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); } } } @@ -122,11 +148,11 @@ namespace Example Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **messageId** | **string**| Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/sms | + **messageId** | **string**| Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/sms. | ### Return type -[**List**](OutboundPollResponse.md) +[**List<OutboundPollResponse>**](OutboundPollResponse.md) ### Authorization @@ -134,47 +160,214 @@ Name | Type | Description | Notes ### HTTP request headers - - **Content-Type**: application/json + - **Content-Type**: Not defined - **Accept**: application/json +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Success | - | +| **400** | Invalid or missing request parameters NOT-PROVISIONED Request flagged as containing suspicious content | - | +| **401** | Invalid access token. Please try with a valid token | - | +| **403** | Authorization credentials passed and accepted but account does not have permission SpikeArrest-The API call rate limit has been exceeded | - | +| **404** | The requested URI does not exist OLD-NONEXISTANT-MESSAGE-ID RESOURCE-NOT-FOUND | - | +| **405** | The requested resource does not support the supplied verb | - | +| **415** | API does not support the requested content type | - | +| **422** | The request is formed correctly, but due to some condition the request cannot be processed e.g. email is required and it is not provided in the request | - | +| **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | +| **501** | The HTTP method being used has not yet been implemented for the requested resource | - | +| **503** | The service requested is currently unavailable | - | +| **0** | An internal error occurred when processing the request | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +# **MMSHealthCheck** +> HealthCheckResponse MMSHealthCheck () + +MMS Health Check + +Determine whether the MMS service is up or down. + +### Example +```csharp +using System.Collections.Generic; +using System.Diagnostics; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; + +namespace Example +{ + public class MMSHealthCheckExample + { + public static void Main() + { + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; + var apiInstance = new MessagingApi(Configuration.Default); + + try + { + // MMS Health Check + HealthCheckResponse result = apiInstance.MMSHealthCheck(); + Debug.WriteLine(result); + } + catch (ApiException e) + { + Debug.Print("Exception when calling MessagingApi.MMSHealthCheck: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); + } + } + } +} +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**HealthCheckResponse**](HealthCheckResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Success | - | +| **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | +| **501** | The HTTP method being used has not yet been implemented for the requested resource | - | +| **503** | The service requested is currently unavailable | - | +| **0** | An internal error occurred when processing the request | - | + [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) - -# **RetrieveSMSResponses** -> InboundPollResponse RetrieveSMSResponses () + +# **RetrieveMMSReplies** +> GetMmsResponse RetrieveMMSReplies () -Retrieve SMS Responses +Retrieve MMS Replies -Retrieve Messages +Messages are retrieved one at a time, starting with the earliest reply. If the subscription has a `notifyURL`, reply messages will be logged there instead, i.e. `GET` and reply `notifyURL` are exclusive. # MMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified.
{   \"to\": \"+61418123456\",   \"from\": \"+61421987654\",   \"sentTimestamp\": \"2018-03-23T12:15:45+10:00\",   \"messageId\": \"XFRO1ApiA0000000111\",   \"subject\": \"Foo\",   \"envelope\": \"string\",   \"MMSContent\":     [       {         \"type\": \"text/plain\",         \"filename\": \"text_1.txt\",         \"payload\": \"string\"       },       {         \"type\": \"image/jpeg\",         \"filename\": \"sample.jpeg\",         \"payload\": \"string\"       }     ] }
The fields are: | Field | Description | | - -- | - -- | | `to` |The number the message was sent to. | | `from` | The number the message was sent from. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | Message Id assigned by the MMSC | | `subject` | The subject assigned to the message. | | `envelope` | Information about about terminal type and originating operator. | | `MMSContent` | An array of the actual content of the reply message. | | `type` | The content type of the message. | | `filename` | The filename for the message content. | | `payload` | The content of the message. | ### Example ```csharp -using System; +using System.Collections.Generic; using System.Diagnostics; -using com.telstra.messaging.Api; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; namespace Example { - public class RetrieveSMSResponsesExample + public class RetrieveMMSRepliesExample { - public void main() + public static void Main() { + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; // Configure OAuth2 access token for authorization: auth Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new MessagingApi(); + var apiInstance = new MessagingApi(Configuration.Default); try { - // Retrieve SMS Responses - InboundPollResponse result = apiInstance.RetrieveSMSResponses(); + // Retrieve MMS Replies + GetMmsResponse result = apiInstance.RetrieveMMSReplies(); Debug.WriteLine(result); } - catch (Exception e) + catch (ApiException e) { - Debug.Print("Exception when calling MessagingApi.RetrieveSMSResponses: " + e.Message ); + Debug.Print("Exception when calling MessagingApi.RetrieveMMSReplies: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); + } + } + } +} +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**GetMmsResponse**](GetMmsResponse.md) + +### Authorization + +[auth](../README.md#auth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Success | - | +| **400** | Invalid or missing request parameters NOT-PROVISIONED Request flagged as containing suspicious content | - | +| **401** | Invalid access token. Please try with a valid token | - | +| **403** | Authorization credentials passed and accepted but account does not have permission SpikeArrest-The API call rate limit has been exceeded | - | +| **404** | The requested URI does not exist RESOURCE-NOT-FOUND | - | +| **405** | The requested resource does not support the supplied verb | - | +| **415** | API does not support the requested content type | - | +| **422** | The request is formed correctly, but due to some condition the request cannot be processed e.g. email is required and it is not provided in the request | - | +| **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | +| **501** | The HTTP method being used has not yet been implemented for the requested resource | - | +| **503** | The service requested is currently unavailable | - | +| **0** | An internal error occurred when processing the request | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +# **RetrieveSMSReplies** +> InboundPollResponse RetrieveSMSReplies () + +Retrieve SMS Replies + +Messages are retrieved one at a time, starting with the earliest reply. The API supports the encoding of emojis in the reply message. The emojis will be in their UTF-8 format. If the subscription has a `notifyURL`, reply messages will be logged there instead. # SMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified.
{   \"to\":\"+61472880123\",   \"from\":\"+61412345678\",   \"body\":\"Foo4\",   \"sentTimestamp\":\"2018-04-20T14:24:35\",   \"messageId\":\"DMASApiA0000000146\" }
The fields are: | Field | Description | | - -- |- -- | | `to` | The number the message was sent to. | | `from` | The number the message was sent from. | | `body` | The content of the SMS response. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | The ID assigned to the message. | + +### Example +```csharp +using System.Collections.Generic; +using System.Diagnostics; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; + +namespace Example +{ + public class RetrieveSMSRepliesExample + { + public static void Main() + { + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; + // Configure OAuth2 access token for authorization: auth + Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; + + var apiInstance = new MessagingApi(Configuration.Default); + + try + { + // Retrieve SMS Replies + InboundPollResponse result = apiInstance.RetrieveSMSReplies(); + Debug.WriteLine(result); + } + catch (ApiException e) + { + Debug.Print("Exception when calling MessagingApi.RetrieveSMSReplies: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); } } } @@ -192,16 +385,175 @@ This endpoint does not need any parameter. [auth](../README.md#auth) +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Success | - | +| **400** | Invalid or missing request parameters NOT-PROVISIONED Request flagged as containing suspicious content | - | +| **401** | Invalid access token. Please try with a valid token | - | +| **403** | Authorization credentials passed and accepted but account does not have permission SpikeArrest-The API call rate limit has been exceeded | - | +| **404** | The requested URI does not exist RESOURCE-NOT-FOUND | - | +| **405** | The requested resource does not support the supplied verb | - | +| **415** | API does not support the requested content type | - | +| **422** | The request is formed correctly, but due to some condition the request cannot be processed e.g. email is required and it is not provided in the request | - | +| **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | +| **501** | The HTTP method being used has not yet been implemented for the requested resource | - | +| **503** | The service requested is currently unavailable | - | +| **0** | An internal error occurred when processing the request | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +# **SMSHealthCheck** +> HealthCheckResponse SMSHealthCheck () + +SMS Health Check + +Determine whether the SMS service is up or down. + +### Example +```csharp +using System.Collections.Generic; +using System.Diagnostics; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; + +namespace Example +{ + public class SMSHealthCheckExample + { + public static void Main() + { + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; + var apiInstance = new MessagingApi(Configuration.Default); + + try + { + // SMS Health Check + HealthCheckResponse result = apiInstance.SMSHealthCheck(); + Debug.WriteLine(result); + } + catch (ApiException e) + { + Debug.Print("Exception when calling MessagingApi.SMSHealthCheck: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); + } + } + } +} +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**HealthCheckResponse**](HealthCheckResponse.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Success | - | +| **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | +| **501** | The HTTP method being used has not yet been implemented for the requested resource | - | +| **503** | The service requested is currently unavailable | - | +| **0** | An internal error occurred when processing the request | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + + +# **SMSMulti** +> MessageSentResponseSms SMSMulti (SendSmsMultiRequest payload) + +Send Multiple SMS + +Send multiple SMS in one API call. + +### Example +```csharp +using System.Collections.Generic; +using System.Diagnostics; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; + +namespace Example +{ + public class SMSMultiExample + { + public static void Main() + { + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; + var apiInstance = new MessagingApi(Configuration.Default); + var payload = new SendSmsMultiRequest(); // SendSmsMultiRequest | A JSON payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + + try + { + // Send Multiple SMS + MessageSentResponseSms result = apiInstance.SMSMulti(payload); + Debug.WriteLine(result); + } + catch (ApiException e) + { + Debug.Print("Exception when calling MessagingApi.SMSMulti: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); + } + } + } +} +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **payload** | [**SendSmsMultiRequest**](SendSmsMultiRequest.md)| A JSON payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. | + +### Return type + +[**MessageSentResponseSms**](MessageSentResponseSms.md) + +### Authorization + +No authorization required + ### HTTP request headers - **Content-Type**: application/json - **Accept**: application/json +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Success | - | +| **400** | Invalid or missing request parameters * DR-NOTIFY-URL-MISSING : when receiptOff is missing or receiptOff=false but notifyURL is missing | - | +| **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | +| **501** | The HTTP method being used has not yet been implemented for the requested resource | - | +| **503** | The service requested is currently unavailable | - | +| **0** | An internal error occurred when processing the request | - | + [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **SendMMS** -> MessageSentResponse SendMMS (SendMmsRequest body) +> MessageSentResponseMms SendMMS (SendMmsRequest body) Send MMS @@ -209,33 +561,36 @@ Send MMS ### Example ```csharp -using System; +using System.Collections.Generic; using System.Diagnostics; -using com.telstra.messaging.Api; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; namespace Example { public class SendMMSExample { - public void main() + public static void Main() { + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; // Configure OAuth2 access token for authorization: auth Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new MessagingApi(); - var body = new SendMmsRequest(); // SendMmsRequest | A JSON or XML payload containing the recipient's phone number and MMS message.The recipient number should be in the format '04xxxxxxxx' where x is a digit + var apiInstance = new MessagingApi(Configuration.Default); + var body = new SendMmsRequest(); // SendMmsRequest | A JSON or XML payload containing the recipient's phone number and MMS message. The recipient number should be in the format '04xxxxxxxx' where x is a digit. try { // Send MMS - MessageSentResponse result = apiInstance.SendMMS(body); + MessageSentResponseMms result = apiInstance.SendMMS(body); Debug.WriteLine(result); } - catch (Exception e) + catch (ApiException e) { Debug.Print("Exception when calling MessagingApi.SendMMS: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); } } } @@ -246,11 +601,11 @@ namespace Example Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **body** | [**SendMmsRequest**](SendMmsRequest.md)| A JSON or XML payload containing the recipient's phone number and MMS message.The recipient number should be in the format '04xxxxxxxx' where x is a digit | + **body** | [**SendMmsRequest**](SendMmsRequest.md)| A JSON or XML payload containing the recipient's phone number and MMS message. The recipient number should be in the format '04xxxxxxxx' where x is a digit. | ### Return type -[**MessageSentResponse**](MessageSentResponse.md) +[**MessageSentResponseMms**](MessageSentResponseMms.md) ### Authorization @@ -261,45 +616,64 @@ Name | Type | Description | Notes - **Content-Type**: application/json - **Accept**: application/json +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **201** | Created | - | +| **400** | Invalid or missing request parameters MMS-TYPE-MISSING MMS-PAYLOAD-MISSING MMS-FILENAME-MISSING DELIVERY-IMPOSSIBLE TO-MSISDN-NOT-VALID SENDER-MISSING DELIVERY-IMPOSSIBLE SUBJECT-TOO-LONG FROM-MSISDN-TOO-LONG TO-MSISDN-TOO-LONG NOT-PROVISIONED Request flagged as containing suspicious content | - | +| **401** | Invalid access token. Please try with a valid token | - | +| **403** | Authorization credentials passed and accepted but account does not have permission SpikeArrest-The API call rate limit has been exceeded | - | +| **404** | The requested URI does not exist RESOURCE-NOT-FOUND | - | +| **405** | The requested resource does not support the supplied verb | - | +| **415** | API does not support the requested content type | - | +| **422** | The request is formed correctly, but due to some condition the request cannot be processed e.g. email is required and it is not provided in the request | - | +| **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | +| **501** | The HTTP method being used has not yet been implemented for the requested resource | - | +| **503** | The service requested is currently unavailable | - | +| **0** | An internal error occurred when processing the request | - | + [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) # **SendSMS** -> MessageSentResponse SendSMS (SendSMSRequest payload) +> MessageSentResponseSms SendSMS (SendSMSRequest payload) Send SMS -Send Message +Send an SMS Message to a single or multiple mobile number/s. ### Example ```csharp -using System; +using System.Collections.Generic; using System.Diagnostics; -using com.telstra.messaging.Api; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; namespace Example { public class SendSMSExample { - public void main() + public static void Main() { + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; // Configure OAuth2 access token for authorization: auth Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new MessagingApi(); - var payload = new SendSMSRequest(); // SendSMSRequest | A JSON or XML payload containing the recipient's phone number and text message. The recipient number should be in the format '04xxxxxxxx' where x is a digit + var apiInstance = new MessagingApi(Configuration.Default); + var payload = new SendSMSRequest(); // SendSMSRequest | A JSON or XML payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. try { // Send SMS - MessageSentResponse result = apiInstance.SendSMS(payload); + MessageSentResponseSms result = apiInstance.SendSMS(payload); Debug.WriteLine(result); } - catch (Exception e) + catch (ApiException e) { Debug.Print("Exception when calling MessagingApi.SendSMS: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); } } } @@ -310,11 +684,11 @@ namespace Example Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- - **payload** | [**SendSMSRequest**](SendSMSRequest.md)| A JSON or XML payload containing the recipient's phone number and text message. The recipient number should be in the format '04xxxxxxxx' where x is a digit | + **payload** | [**SendSMSRequest**](SendSMSRequest.md)| A JSON or XML payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. | ### Return type -[**MessageSentResponse**](MessageSentResponse.md) +[**MessageSentResponseSms**](MessageSentResponseSms.md) ### Authorization @@ -325,5 +699,21 @@ Name | Type | Description | Notes - **Content-Type**: application/json - **Accept**: application/json +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **201** | Created | - | +| **400** | Invalid or missing request parameters * TO-MSISDN-NOT-VALID * SENDER-MISSING * DELIVERY-IMPOSSIBLE * FROM-MSISDN-TOO-LONG * BODY-TOO-LONG * BODY-MISSING * TO-MSISDN-TOO-LONG * TECH-ERR * BODY-NOT-VALID * NOT-PROVISIONED * Request flagged as containing suspicious content. * Invalid 'from' address specified. | - | +| **401** | Invalid access token. Please try with a valid token | - | +| **403** | Authorization credentials passed and accepted but account does not have permission. SpikeArrest-The API call rate limit has been exceeded | - | +| **404** | The requested URI does not exist RESOURCE-NOT-FOUND | - | +| **405** | The requested resource does not support the supplied verb | - | +| **415** | API does not support the requested content type | - | +| **422** | The request is formed correctly, but due to some condition the request cannot be processed e.g. email is required and it is not provided in the request | - | +| **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | +| **501** | The HTTP method being used has not yet been implemented for the requested resource | - | +| **503** | The service requested is currently unavailable | - | +| **0** | An internal error occurred when processing the request | - | + [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/OAuthRequest.md b/docs/OAuthRequest.md deleted file mode 100644 index c4fdf47..0000000 --- a/docs/OAuthRequest.md +++ /dev/null @@ -1,12 +0,0 @@ -# com.telstra.messaging.Model.OAuthRequest -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**ClientId** | **string** | Client id | -**ClientSecret** | **string** | Client secret | -**GrantType** | **string** | OAuth grant type | -**Scopes** | **string** | OAuth scope | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/OAuthResponse.md b/docs/OAuthResponse.md index 34175dc..c7158fa 100644 --- a/docs/OAuthResponse.md +++ b/docs/OAuthResponse.md @@ -1,11 +1,11 @@ -# com.telstra.messaging.Model.OAuthResponse +# Telstra.Messaging.Model.OAuthResponse ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **AccessToken** | **string** | OAuth access token | [optional] **TokenType** | **string** | OAuth token type | [optional] -**ExpiresIn** | **string** | OAuth expity time | [optional] +**ExpiresIn** | **string** | OAuth expiry time | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/OutboundPollResponse.md b/docs/OutboundPollResponse.md index 3888736..bfda9f8 100644 --- a/docs/OutboundPollResponse.md +++ b/docs/OutboundPollResponse.md @@ -1,11 +1,11 @@ -# com.telstra.messaging.Model.OutboundPollResponse +# Telstra.Messaging.Model.OutboundPollResponse ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**To** | **string** | The phone number (recipient) the message was sent to (in E.164 format). | [optional] -**ReceivedTimestamp** | **string** | The date and time when the message was recieved by recipient. | [optional] +**To** | **string** | The phone number (recipient) the message was sent to (in E.164 format). | [optional] **SentTimestamp** | **string** | The date and time when the message was sent. | [optional] +**ReceivedTimestamp** | **string** | The date and time when the message was recieved by recipient. | [optional] **DeliveryStatus** | **Status** | | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/OutboundPollResponseInner.md b/docs/OutboundPollResponseInner.md deleted file mode 100644 index ba99da3..0000000 --- a/docs/OutboundPollResponseInner.md +++ /dev/null @@ -1,12 +0,0 @@ -# com.telstra.messaging.Model.OutboundPollResponseInner -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**To** | **string** | The phone number (recipient) the message was sent to (in E.164 format). | [optional] -**ReceivedTimestamp** | **string** | The date and time when the message was recieved by recipient. | [optional] -**SentTimestamp** | **string** | The date and time when the message was sent. | [optional] -**DeliveryStatus** | **Status** | | [optional] - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/ProvisionNumberRequest.md b/docs/ProvisionNumberRequest.md index 092ed67..1d056f4 100644 --- a/docs/ProvisionNumberRequest.md +++ b/docs/ProvisionNumberRequest.md @@ -1,10 +1,10 @@ -# com.telstra.messaging.Model.ProvisionNumberRequest +# Telstra.Messaging.Model.ProvisionNumberRequest ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**ActiveDays** | **int?** | Number of active days | [optional] -**NotifyURL** | **string** | Notify url | [optional] +**ActiveDays** | **int** | The number of days before for which this number is provisioned. | [optional] +**NotifyURL** | **string** | A notification URL that will be POSTed to whenever a new message (i.e. a reply to a message sent) arrives at this destination address. If this is not provided then you can use the Get /sms or /mms API to poll for reply messages. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). *Please note that the notification URLs and the Get /sms or /mms call are exclusive. If a notification URL has been set then the GET call will not provide any useful information.* | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/ProvisionNumberResponse.md b/docs/ProvisionNumberResponse.md index f7dfa72..f813d8a 100644 --- a/docs/ProvisionNumberResponse.md +++ b/docs/ProvisionNumberResponse.md @@ -1,9 +1,10 @@ -# com.telstra.messaging.Model.ProvisionNumberResponse +# Telstra.Messaging.Model.ProvisionNumberResponse ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **DestinationAddress** | **string** | The mobile phone number that was allocated | [optional] +**ExpiryDate** | **decimal** | Free Trial apps can only add activeDays for their provisioned number every 30 days. This is in Unix time format. | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/ProvisioningApi.md b/docs/ProvisioningApi.md index a452e1c..147079d 100644 --- a/docs/ProvisioningApi.md +++ b/docs/ProvisioningApi.md @@ -1,4 +1,4 @@ -# com.telstra.messaging.Api.ProvisioningApi +# Telstra.Messaging.Api.ProvisioningApi All URIs are relative to *https://tapi.telstra.com/v2* @@ -15,26 +15,27 @@ Method | HTTP request | Description Create Subscription -Provision a mobile number +Invoke the provisioning API to get a dedicated mobile number for an account or application. Note that Free Trial apps will have a 30-Day Limit for their provisioned number. If the Provisioning call is made several times within that 30-Day period, it will return the `expiryDate` in the Unix format and will not add any activeDays until after that `expiryDate`. After the `expiryDate`, you may make another Provisioning call to extend the activeDays by another 30-Days. For paid apps, a provisioned number can be allotted for a maximum of 5 years. If a Provisioning call is made which will result to activeDays > 1825, a 409 `Active Days Max` response will be returned to indicate that the provisioned number is already valid for more than 5 years and that no update to activeDays has been made. ### Example ```csharp -using System; +using System.Collections.Generic; using System.Diagnostics; -using com.telstra.messaging.Api; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; namespace Example { public class CreateSubscriptionExample { - public void main() + public static void Main() { + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; // Configure OAuth2 access token for authorization: auth Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new ProvisioningApi(); + var apiInstance = new ProvisioningApi(Configuration.Default); var body = new ProvisionNumberRequest(); // ProvisionNumberRequest | A JSON payload containing the required attributes try @@ -43,9 +44,11 @@ namespace Example ProvisionNumberResponse result = apiInstance.CreateSubscription(body); Debug.WriteLine(result); } - catch (Exception e) + catch (ApiException e) { Debug.Print("Exception when calling ProvisioningApi.CreateSubscription: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); } } } @@ -71,6 +74,18 @@ Name | Type | Description | Notes - **Content-Type**: application/json - **Accept**: application/json +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **201** | Created | - | +| **400** | Invalid or missing request parameters | - | +| **401** | Invalid access token. Please try with a valid token | - | +| **403** | Authorization credentials passed and accepted but account does not have permission SpikeArrest-The API call rate limit has been exceeded | - | +| **404** | The requested URI does not exist RESOURCE-NOT-FOUND | - | +| **409** | Active Days Max. You can no longer update or add to activeDays because it already exceeds more than 5 years. | - | +| **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | +| **0** | An internal error occurred when processing the request | - | + [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -79,26 +94,27 @@ Name | Type | Description | Notes Delete Subscription -Delete a mobile number subscription from an account +Delete a mobile number subscription from an account ### Example ```csharp -using System; +using System.Collections.Generic; using System.Diagnostics; -using com.telstra.messaging.Api; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; namespace Example { public class DeleteSubscriptionExample { - public void main() + public static void Main() { + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; // Configure OAuth2 access token for authorization: auth Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new ProvisioningApi(); + var apiInstance = new ProvisioningApi(Configuration.Default); var body = new DeleteNumberRequest(); // DeleteNumberRequest | EmptyArr try @@ -106,9 +122,11 @@ namespace Example // Delete Subscription apiInstance.DeleteSubscription(body); } - catch (Exception e) + catch (ApiException e) { Debug.Print("Exception when calling ProvisioningApi.DeleteSubscription: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); } } } @@ -132,7 +150,18 @@ void (empty response body) ### HTTP request headers - **Content-Type**: application/json - - **Accept**: application/json + - **Accept**: Not defined + +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **204** | No Content | - | +| **400** | Invalid or missing request parameters | - | +| **401** | Invalid access token. Please try with a valid token | - | +| **403** | Authorization credentials passed and accepted but account does not have permission SpikeArrest-The API call rate limit has been exceeded | - | +| **404** | The requested URI does not exist RESOURCE-NOT-FOUND | - | +| **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | +| **0** | An internal error occurred when processing the request | - | [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) @@ -142,26 +171,27 @@ void (empty response body) Get Subscription -Get mobile number subscription for an account +Get mobile number subscription for an account ### Example ```csharp -using System; +using System.Collections.Generic; using System.Diagnostics; -using com.telstra.messaging.Api; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; namespace Example { public class GetSubscriptionExample { - public void main() + public static void Main() { + Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; // Configure OAuth2 access token for authorization: auth Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; - var apiInstance = new ProvisioningApi(); + var apiInstance = new ProvisioningApi(Configuration.Default); try { @@ -169,9 +199,11 @@ namespace Example GetSubscriptionResponse result = apiInstance.GetSubscription(); Debug.WriteLine(result); } - catch (Exception e) + catch (ApiException e) { Debug.Print("Exception when calling ProvisioningApi.GetSubscription: " + e.Message ); + Debug.Print("Status Code: "+ e.ErrorCode); + Debug.Print(e.StackTrace); } } } @@ -191,8 +223,19 @@ This endpoint does not need any parameter. ### HTTP request headers - - **Content-Type**: application/json + - **Content-Type**: Not defined - **Accept**: application/json +### HTTP response details +| Status code | Description | Response headers | +|-------------|-------------|------------------| +| **200** | Success | - | +| **400** | Invalid or missing request parameters | - | +| **401** | Invalid access token. Please try with a valid token | - | +| **403** | Authorization credentials passed and accepted but account does not have permission SpikeArrest-The API call rate limit has been exceeded | - | +| **404** | The requested URI does not exist RESOURCE-NOT-FOUND | - | +| **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | +| **0** | An internal error occurred when processing the request | - | + [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) diff --git a/docs/SendMmsRequest.md b/docs/SendMmsRequest.md index 342f179..d8596f6 100644 --- a/docs/SendMmsRequest.md +++ b/docs/SendMmsRequest.md @@ -1,13 +1,14 @@ -# com.telstra.messaging.Model.SendMmsRequest +# Telstra.Messaging.Model.SendMmsRequest ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**From** | **string** | This will be the source address that will be displayed on the receiving device. If it is not present then it will default to the MSISDN assigned to the app. If replyRequest is set to true, then this field will be ignored. | -**To** | **string** | This is the destination address. | -**Subject** | **string** | The subject that will be used in an MMS message. | -**ReplyRequest** | **bool?** | If set to true, the reply message functionality will be implemented and the to address will be ignored if present. | -**MMSContent** | [**List<MMSContent>**](MMSContent.md) | An Array of content that will be sent in an MMS message. If this array is present it will cause the “body” element to be ignored, and the message will be sent as an MMS. | +**To** | **string** | This is the destination address. Can be an array of strings if sending to multiple numbers: \"to\":[\"+61412345678\", \"+61418765432\"] | +**From** | **string** | This will be the source address that will be displayed on the receiving device. You can set an Alphanumeric sender ID of up to 11 characters that the MMS was sent from. Phone numbers in the `from` attribute will be blocked (400-error) to prevent number spoofing. Most standard ASCII characters are accepted in the alphanumeric `from` attribute, however there are some limitations. The following limitations and characters are allowed in the alphanumeric `from` attribute; any alphabetic character (e.g. `abc`), any number mixed with alphabetic characters (e.g. `123abc`), uppercase and lowercase characters (e.g. `aBc`), any of the following special characters mixed with alphabetic characters are allowed; `~!@#$%^&*()~_~+-={}|[];'?,./` (e.g. `abc~!@`), any combination of lowercase, uppercase, numeric or allowed special characters (e.g. `abc@#123DE`). All other characters, including spaces and extended ASCII characters, are not allowed (e.g. `<>:\"\\`). If attribute is not present, the service will use the mobile number associated with the application (in E.164 format). If `replyRequest` is set to true, this field should not be present. This feature is only available on Telstra Account paid plans, not through Free Trials or credit card paid plans. *Please note:* *- Alphanumeric sender ID works for domestic, i.e. Australian, destinations only.* *- When Alphanumeric sender ID is used in sending MMS, Delivery Reports will NOT be returned.* | [optional] +**Subject** | **string** | The subject that will be used in an MMS message. Subject is limited to maximum of 64 characters. Some special characters need to be encoded if used in the `subject` field (e.g. &amp;amp; for & and &amp;lt; for <). | [optional] +**ReplyRequest** | **bool** | If set to true, the reply message functionality will be implemented. The `from` field should not be present. | [optional] +**NotifyURL** | **string** | Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). | [optional] +**MMSContent** | [**List<MMSContent>**](MMSContent.md) | An array of content that will be sent in an MMS message. If this array is present it will cause the `body` element to be ignored, and the message will be sent as an MMS. | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SendMmsRequestMMSContent.md b/docs/SendMmsRequestMMSContent.md deleted file mode 100644 index bb33d82..0000000 --- a/docs/SendMmsRequestMMSContent.md +++ /dev/null @@ -1,11 +0,0 @@ -# com.telstra.messaging.Model.SendMmsRequestMMSContent -## Properties - -Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- -**Type** | **string** | The following types are supported audio/amr audio/aac audio/mp3 audio/mpeg3 audio/mpeg audio/mpg audio/wav audio/3gpp audio/mp4 image/gif image/jpeg image/jpg image/png image/bmp video/mpeg4 video/mp4 video/mpeg video/3gpp video/3gp video/h263 text/plain text/x-vCard text/x-vCalendar | -**Filename** | **string** | The file name to be associated with the content. Some devices will display this file name with a placeholder for the content. | -**Payload** | **string** | | - -[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) - diff --git a/docs/SendSMSRequest.md b/docs/SendSMSRequest.md index 863b5bc..f2c5fa5 100644 --- a/docs/SendSMSRequest.md +++ b/docs/SendSMSRequest.md @@ -1,15 +1,16 @@ -# com.telstra.messaging.Model.SendSMSRequest +# Telstra.Messaging.Model.SendSMSRequest ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**To** | **string** | Phone number (in E.164 format) to send the SMS to. This number can be in international format if preceeded by a ‘+’, or in national format. | -**Body** | **string** | The text body of the message. Messages longer than 160 characters will be counted as multiple messages. | -**From** | **string** | Phone number (in E.164 format) the SMS was sent from. If not present, the serverice will use the mobile number associated with the application, or it be an Alphanumeric address of up to 11 characters. | [optional] -**Validity** | **int?** | How long the platform should attempt to deliver the message for. This period is specified in minutes from the message | [optional] -**ScheduledDelivery** | **int?** | How long the platform should wait before attempting to send the message - specified in minutes. | [optional] -**NotifyURL** | **string** | Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. | [optional] -**ReplyRequest** | **bool?** | If set to true, the reply message functionality will be implemented and the to address will be ignored if present. If false or not present, then normal message handling is implemented. | [optional] +**To** | **string** | Phone number (in E.164 format) to send the SMS to. This number can be in international format `\"to\": \"+61412345678\"` or in national format. Can be an array of strings if sending to multiple numbers: `\"to\":[\"+61412345678\", \"+61418765432\"]` | +**Body** | **string** | The text body of the message. Messages longer than 160 characters will be counted as multiple messages. This field contains the message text, this can be up to 1900 (for a single recipient) or 500 (for multiple recipients) UTF-8 characters. As mobile devices rarely support the full range of UTF-8 characters, it is possible that some characters may not be translated correctly by the mobile device | +**From** | **string** | This will be the source address that will be displayed on the receiving device. You can set an Alphanumeric sender ID of up to 11 characters that the SMS was sent from. Phone numbers in the `from` attribute will be blocked (400-error) to prevent number spoofing. Most standard ASCII characters are accepted in the alphanumeric `from` attribute, however there are some limitations. The following limitations and characters are allowed in the alphanumeric `from` attribute; any alphabetic character (e.g. `abc`), any number mixed with alphabetic characters (e.g. `123abc`), uppercase and lowercase characters (e.g. `aBc`), any of the following special characters mixed with alphabetic characters are allowed; `~!@#$%^&*()~_~+-={}|[];'?,./` (e.g. `abc~!@`), any combination of lowercase, uppercase, numeric or allowed special characters (e.g. `abc@#123DE`). All other characters, including spaces and extended ASCII characters, are not allowed (e.g. `<>:\"\\`). If attribute is not present, the service will use the mobile number associated with the application (in E.164 format). If `replyRequest` is set to true, then this field should not be present. This feature is only available on Telstra Account paid plans, not through Free Trials or credit card paid plans. *Please note that Alphanumeric sender ID works for domestic, i.e. Australian, destinations only.* | [optional] +**Validity** | **int** | How long the platform should attempt to deliver the message for. This period is specified in minutes from the message. Normally if the message cannot be delivered immediately, it will be stored and delivery will be periodically reattempted. The network will attempt to send the message for up to seven days. It is possible to define a period smaller than 7 days by including this parameter and specifying the number of minutes that delivery should be attempted. e.g.: including `\"validity\": 60` will specify that if a message can't be delivered within the first 60 minutes then the network should stop. | [optional] +**ScheduledDelivery** | **int** | How long the platform should wait before attempting to send the message - specified in minutes. e.g.: If `\"scheduledDelivery\": 120` is included, then the network will not attempt to start message delivery for two hours after the message has been submitted | [optional] +**NotifyURL** | **string** | Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). | [optional] +**ReplyRequest** | **bool** | If set to true, the reply message functionality will be implemented. The `from` field should not be present. If false or not present, then normal message handling is implemented. When set to true, network will use a temporary number to deliver this message. All messages sent by a mobile to this temporary number will be stored against the same `messageId`. If a `notifyURL` is provided then user replies will be delivered to the URL where `messageId` will be same as `messageId` in the response to the original API request. This field contains the message text, this can be up to 500 UTF-8 characters. As mobile devices rarely support the full range of UTF-8 characters, it is possible that some characters may not be translated correctly by the mobile device. | [optional] +**Priority** | **bool** | When messages are queued up for a number, then it is possible to set where a new message will be placed in the queue. If the priority is set to true then the new message will be placed ahead of all messages with a normal priority. If there are no messages queued for the number, then this parameter has no effect. | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/docs/SendSmsMultiRequest.md b/docs/SendSmsMultiRequest.md new file mode 100644 index 0000000..f814d61 --- /dev/null +++ b/docs/SendSmsMultiRequest.md @@ -0,0 +1,10 @@ +# Telstra.Messaging.Model.SendSmsMultiRequest +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**SmsMulti** | [**List<MessageMulti>**](MessageMulti.md) | Multiple SMS. Up to 10 messages can be sent in one API call. | [optional] +**NotiyURL** | **string** | Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/docs/Status.md b/docs/Status.md index 02a6b8a..8b5d097 100644 --- a/docs/Status.md +++ b/docs/Status.md @@ -1,4 +1,4 @@ -# com.telstra.messaging.Model.Status +# Telstra.Messaging.Model.Status ## Properties Name | Type | Description | Notes diff --git a/git_push.sh b/git_push.sh new file mode 100644 index 0000000..d09c2f6 --- /dev/null +++ b/git_push.sh @@ -0,0 +1,58 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-pestore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="Telstra" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="MessagingAPI-SDK-dotnet2" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=`git remote` +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:${GIT_TOKEN}@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' + diff --git a/mono_nunit_test.sh b/mono_nunit_test.sh deleted file mode 100644 index 3084c81..0000000 --- a/mono_nunit_test.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash -# -# Generated by: https://github.com/swagger-api/swagger-codegen.git -# - -wget -nc https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -mozroots --import --sync - -echo "[INFO] remove bin/Debug/SwaggerClientTest.dll" -rm src/com.telstra.messaging.Test/bin/Debug/com.telstra.messaging.Test.dll 2> /dev/null - -echo "[INFO] install NUnit runners via NuGet" -wget -nc https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -mozroots --import --sync -mono nuget.exe install src/com.telstra.messaging.Test/packages.config -o packages - -echo "[INFO] Install NUnit runners via NuGet" -mono nuget.exe install NUnit.Runners -Version 2.6.4 -OutputDirectory packages - -echo "[INFO] Build the solution and run the unit test" -xbuild com.telstra.messaging.sln && \ - mono ./packages/NUnit.Runners.2.6.4/tools/nunit-console.exe src/com.telstra.messaging.Test/bin/Debug/com.telstra.messaging.Test.dll diff --git a/nuget.config b/nuget.config new file mode 100644 index 0000000..d6ac81f --- /dev/null +++ b/nuget.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/Telstra.Messaging.BackwardCompatTest/Program.cs b/src/Telstra.Messaging.BackwardCompatTest/Program.cs new file mode 100644 index 0000000..d89bbf0 --- /dev/null +++ b/src/Telstra.Messaging.BackwardCompatTest/Program.cs @@ -0,0 +1,49 @@ +using System; +using Telstra.Messaging.Api; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; + +namespace Telstra.Messaging.BackwardCompatTest +{ + class Program + { + static void Main(string[] args) + { + var config = new Configuration(); + config.BasePath = "https://tapi.telstra.com/v2"; + var apiInstance = new AuthenticationApi(config); + var clientId = Environment.GetEnvironmentVariable("CLIENT_ID"); // string | + var clientSecret = Environment.GetEnvironmentVariable("CLIENT_SECRET"); // string | + var grantType = "client_credentials"; // string | (default to "client_credentials") + var scope = "NSMS"; // string | NSMS (optional) + + try + { + // Generate OAuth2 token + OAuthResponse result = apiInstance.AuthToken(clientId, clientSecret, grantType, scope); + Console.WriteLine("Token acquired!"); + config.AccessToken = result.AccessToken; + + var provisioningInstance = new ProvisioningApi(config); + var body = new ProvisionNumberRequest(30); + ProvisionNumberResponse provisioningResult = provisioningInstance.CreateSubscription(body); + Console.WriteLine("Number provisioned!"); + + var smsApiInstance = new MessagingApi(config); + var payload = new SendSMSRequest( + Environment.GetEnvironmentVariable("PHONE_NO"), + "Test C# SDK", + Environment.GetEnvironmentVariable("FROM_ALIAS")); + + MessageSentResponseSms smsResult = smsApiInstance.SendSMS(payload); + Console.WriteLine("Message sent"); + } + catch (ApiException e) + { + Console.WriteLine("Exception when calling AuthenticationApi.AuthToken: " + e.Message); + Console.WriteLine("Status Code: " + e.ErrorCode); + Console.WriteLine(e.StackTrace); + } + } + } +} diff --git a/src/Telstra.Messaging.BackwardCompatTest/Telstra.Messaging.BackwardCompatTest.csproj b/src/Telstra.Messaging.BackwardCompatTest/Telstra.Messaging.BackwardCompatTest.csproj new file mode 100644 index 0000000..441c58e --- /dev/null +++ b/src/Telstra.Messaging.BackwardCompatTest/Telstra.Messaging.BackwardCompatTest.csproj @@ -0,0 +1,16 @@ + + + + Exe + netcoreapp2.2 + + + + + + + + + + + diff --git a/src/com.telstra.messaging.Test/Api/AuthenticationApiTests.cs b/src/Telstra.Messaging.Test/Api/AuthenticationApiTests.cs similarity index 51% rename from src/com.telstra.messaging.Test/Api/AuthenticationApiTests.cs rename to src/Telstra.Messaging.Test/Api/AuthenticationApiTests.cs index 7487fdc..c25a6b0 100644 --- a/src/com.telstra.messaging.Test/Api/AuthenticationApiTests.cs +++ b/src/Telstra.Messaging.Test/Api/AuthenticationApiTests.cs @@ -1,11 +1,11 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ using System; @@ -15,67 +15,59 @@ using System.Linq; using System.Reflection; using RestSharp; -using NUnit.Framework; +using Xunit; -using com.telstra.messaging.Client; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; +using Telstra.Messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; -namespace com.telstra.messaging.Test +namespace Telstra.Messaging.Test { /// /// Class for testing AuthenticationApi /// /// - /// This file is automatically generated by Swagger Codegen. + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). /// Please update the test case below to test the API endpoint. /// - [TestFixture] - public class AuthenticationApiTests + public class AuthenticationApiTests : IDisposable { private AuthenticationApi instance; - /// - /// Setup before each unit test - /// - [SetUp] - public void Init() + public AuthenticationApiTests() { instance = new AuthenticationApi(); } - /// - /// Clean up after each unit test - /// - [TearDown] - public void Cleanup() + public void Dispose() { - + // Cleanup when everything is done. } /// /// Test an instance of AuthenticationApi /// - [Test] + [Fact] public void InstanceTest() { // TODO uncomment below to test 'IsInstanceOfType' AuthenticationApi - //Assert.IsInstanceOfType(typeof(AuthenticationApi), instance, "instance is a AuthenticationApi"); + //Assert.IsType(typeof(AuthenticationApi), instance, "instance is a AuthenticationApi"); } /// /// Test AuthToken /// - [Test] + [Fact] public void AuthTokenTest() { // TODO uncomment below to test the method and replace null with proper value //string clientId = null; //string clientSecret = null; //string grantType = null; - //var response = instance.AuthToken(clientId, clientSecret, grantType); - //Assert.IsInstanceOf (response, "response is OAuthResponse"); + //string scope = null; + //var response = instance.AuthToken(clientId, clientSecret, grantType, scope); + //Assert.IsType (response, "response is OAuthResponse"); } } diff --git a/src/Telstra.Messaging.Test/Api/MessagingApiTests.cs b/src/Telstra.Messaging.Test/Api/MessagingApiTests.cs new file mode 100644 index 0000000..a3042ad --- /dev/null +++ b/src/Telstra.Messaging.Test/Api/MessagingApiTests.cs @@ -0,0 +1,164 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using Xunit; + +using Telstra.Messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; + +namespace Telstra.Messaging.Test +{ + /// + /// Class for testing MessagingApi + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the API endpoint. + /// + public class MessagingApiTests : IDisposable + { + private MessagingApi instance; + + public MessagingApiTests() + { + instance = new MessagingApi(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of MessagingApi + /// + [Fact] + public void InstanceTest() + { + // TODO uncomment below to test 'IsInstanceOfType' MessagingApi + //Assert.IsType(typeof(MessagingApi), instance, "instance is a MessagingApi"); + } + + + /// + /// Test GetMMSStatus + /// + [Fact] + public void GetMMSStatusTest() + { + // TODO uncomment below to test the method and replace null with proper value + //string messageid = null; + //var response = instance.GetMMSStatus(messageid); + //Assert.IsType> (response, "response is List"); + } + + /// + /// Test GetSMSStatus + /// + [Fact] + public void GetSMSStatusTest() + { + // TODO uncomment below to test the method and replace null with proper value + //string messageId = null; + //var response = instance.GetSMSStatus(messageId); + //Assert.IsType> (response, "response is List"); + } + + /// + /// Test MMSHealthCheck + /// + [Fact] + public void MMSHealthCheckTest() + { + // TODO uncomment below to test the method and replace null with proper value + //var response = instance.MMSHealthCheck(); + //Assert.IsType (response, "response is HealthCheckResponse"); + } + + /// + /// Test RetrieveMMSReplies + /// + [Fact] + public void RetrieveMMSRepliesTest() + { + // TODO uncomment below to test the method and replace null with proper value + //var response = instance.RetrieveMMSReplies(); + //Assert.IsType (response, "response is GetMmsResponse"); + } + + /// + /// Test RetrieveSMSReplies + /// + [Fact] + public void RetrieveSMSRepliesTest() + { + // TODO uncomment below to test the method and replace null with proper value + //var response = instance.RetrieveSMSReplies(); + //Assert.IsType (response, "response is InboundPollResponse"); + } + + /// + /// Test SMSHealthCheck + /// + [Fact] + public void SMSHealthCheckTest() + { + // TODO uncomment below to test the method and replace null with proper value + //var response = instance.SMSHealthCheck(); + //Assert.IsType (response, "response is HealthCheckResponse"); + } + + /// + /// Test SMSMulti + /// + [Fact] + public void SMSMultiTest() + { + // TODO uncomment below to test the method and replace null with proper value + //SendSmsMultiRequest payload = null; + //var response = instance.SMSMulti(payload); + //Assert.IsType (response, "response is MessageSentResponseSms"); + } + + /// + /// Test SendMMS + /// + [Fact] + public void SendMMSTest() + { + // TODO uncomment below to test the method and replace null with proper value + //SendMmsRequest body = null; + //var response = instance.SendMMS(body); + //Assert.IsType (response, "response is MessageSentResponseMms"); + } + + /// + /// Test SendSMS + /// + [Fact] + public void SendSMSTest() + { + // TODO uncomment below to test the method and replace null with proper value + //SendSMSRequest payload = null; + //var response = instance.SendSMS(payload); + //Assert.IsType (response, "response is MessageSentResponseSms"); + } + + } + +} diff --git a/src/Telstra.Messaging.Test/Api/ProvisioningApiTests.cs b/src/Telstra.Messaging.Test/Api/ProvisioningApiTests.cs new file mode 100644 index 0000000..28c9612 --- /dev/null +++ b/src/Telstra.Messaging.Test/Api/ProvisioningApiTests.cs @@ -0,0 +1,95 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.IO; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Reflection; +using RestSharp; +using Xunit; + +using Telstra.Messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; + +namespace Telstra.Messaging.Test +{ + /// + /// Class for testing ProvisioningApi + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the API endpoint. + /// + public class ProvisioningApiTests : IDisposable + { + private ProvisioningApi instance; + + public ProvisioningApiTests() + { + instance = new ProvisioningApi(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of ProvisioningApi + /// + [Fact] + public void InstanceTest() + { + // TODO uncomment below to test 'IsInstanceOfType' ProvisioningApi + //Assert.IsType(typeof(ProvisioningApi), instance, "instance is a ProvisioningApi"); + } + + + /// + /// Test CreateSubscription + /// + [Fact] + public void CreateSubscriptionTest() + { + // TODO uncomment below to test the method and replace null with proper value + //ProvisionNumberRequest body = null; + //var response = instance.CreateSubscription(body); + //Assert.IsType (response, "response is ProvisionNumberResponse"); + } + + /// + /// Test DeleteSubscription + /// + [Fact] + public void DeleteSubscriptionTest() + { + // TODO uncomment below to test the method and replace null with proper value + //DeleteNumberRequest body = null; + //instance.DeleteSubscription(body); + + } + + /// + /// Test GetSubscription + /// + [Fact] + public void GetSubscriptionTest() + { + // TODO uncomment below to test the method and replace null with proper value + //var response = instance.GetSubscription(); + //Assert.IsType (response, "response is GetSubscriptionResponse"); + } + + } + +} diff --git a/src/com.telstra.messaging.Test/Model/DeleteNumberRequestTests.cs b/src/Telstra.Messaging.Test/Model/DeleteNumberRequestTests.cs similarity index 58% rename from src/com.telstra.messaging.Test/Model/DeleteNumberRequestTests.cs rename to src/Telstra.Messaging.Test/Model/DeleteNumberRequestTests.cs index 5f40c95..edad2dd 100644 --- a/src/com.telstra.messaging.Test/Model/DeleteNumberRequestTests.cs +++ b/src/Telstra.Messaging.Test/Model/DeleteNumberRequestTests.cs @@ -1,64 +1,55 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ -using NUnit.Framework; +using Xunit; using System; using System.Linq; using System.IO; using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; using System.Reflection; using Newtonsoft.Json; -namespace com.telstra.messaging.Test +namespace Telstra.Messaging.Test { /// /// Class for testing DeleteNumberRequest /// /// - /// This file is automatically generated by Swagger Codegen. + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). /// Please update the test case below to test the model. /// - [TestFixture] - public class DeleteNumberRequestTests + public class DeleteNumberRequestTests : IDisposable { // TODO uncomment below to declare an instance variable for DeleteNumberRequest //private DeleteNumberRequest instance; - /// - /// Setup before each test - /// - [SetUp] - public void Init() + public DeleteNumberRequestTests() { // TODO uncomment below to create an instance of DeleteNumberRequest //instance = new DeleteNumberRequest(); } - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() + public void Dispose() { - + // Cleanup when everything is done. } /// /// Test an instance of DeleteNumberRequest /// - [Test] + [Fact] public void DeleteNumberRequestInstanceTest() { // TODO uncomment below to test "IsInstanceOfType" DeleteNumberRequest @@ -69,7 +60,7 @@ public void DeleteNumberRequestInstanceTest() /// /// Test the property 'EmptyArr' /// - [Test] + [Fact] public void EmptyArrTest() { // TODO unit test for the property 'EmptyArr' diff --git a/src/Telstra.Messaging.Test/Model/GetMmsResponseTests.cs b/src/Telstra.Messaging.Test/Model/GetMmsResponseTests.cs new file mode 100644 index 0000000..379168f --- /dev/null +++ b/src/Telstra.Messaging.Test/Model/GetMmsResponseTests.cs @@ -0,0 +1,127 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Telstra.Messaging.Test +{ + /// + /// Class for testing GetMmsResponse + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class GetMmsResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for GetMmsResponse + //private GetMmsResponse instance; + + public GetMmsResponseTests() + { + // TODO uncomment below to create an instance of GetMmsResponse + //instance = new GetMmsResponse(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of GetMmsResponse + /// + [Fact] + public void GetMmsResponseInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" GetMmsResponse + //Assert.IsInstanceOfType (instance, "variable 'instance' is a GetMmsResponse"); + } + + + /// + /// Test the property 'Status' + /// + [Fact] + public void StatusTest() + { + // TODO unit test for the property 'Status' + } + /// + /// Test the property 'DestinationAddress' + /// + [Fact] + public void DestinationAddressTest() + { + // TODO unit test for the property 'DestinationAddress' + } + /// + /// Test the property 'SenderAddress' + /// + [Fact] + public void SenderAddressTest() + { + // TODO unit test for the property 'SenderAddress' + } + /// + /// Test the property 'Subject' + /// + [Fact] + public void SubjectTest() + { + // TODO unit test for the property 'Subject' + } + /// + /// Test the property 'MessageId' + /// + [Fact] + public void MessageIdTest() + { + // TODO unit test for the property 'MessageId' + } + /// + /// Test the property 'ApiMsgId' + /// + [Fact] + public void ApiMsgIdTest() + { + // TODO unit test for the property 'ApiMsgId' + } + /// + /// Test the property 'SentTimestamp' + /// + [Fact] + public void SentTimestampTest() + { + // TODO unit test for the property 'SentTimestamp' + } + /// + /// Test the property 'MMSContent' + /// + [Fact] + public void MMSContentTest() + { + // TODO unit test for the property 'MMSContent' + } + + } + +} diff --git a/src/com.telstra.messaging.Test/Model/GetSubscriptionResponseTests.cs b/src/Telstra.Messaging.Test/Model/GetSubscriptionResponseTests.cs similarity index 64% rename from src/com.telstra.messaging.Test/Model/GetSubscriptionResponseTests.cs rename to src/Telstra.Messaging.Test/Model/GetSubscriptionResponseTests.cs index 93b4219..5c43cca 100644 --- a/src/com.telstra.messaging.Test/Model/GetSubscriptionResponseTests.cs +++ b/src/Telstra.Messaging.Test/Model/GetSubscriptionResponseTests.cs @@ -1,64 +1,55 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ -using NUnit.Framework; +using Xunit; using System; using System.Linq; using System.IO; using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; using System.Reflection; using Newtonsoft.Json; -namespace com.telstra.messaging.Test +namespace Telstra.Messaging.Test { /// /// Class for testing GetSubscriptionResponse /// /// - /// This file is automatically generated by Swagger Codegen. + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). /// Please update the test case below to test the model. /// - [TestFixture] - public class GetSubscriptionResponseTests + public class GetSubscriptionResponseTests : IDisposable { // TODO uncomment below to declare an instance variable for GetSubscriptionResponse //private GetSubscriptionResponse instance; - /// - /// Setup before each test - /// - [SetUp] - public void Init() + public GetSubscriptionResponseTests() { // TODO uncomment below to create an instance of GetSubscriptionResponse //instance = new GetSubscriptionResponse(); } - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() + public void Dispose() { - + // Cleanup when everything is done. } /// /// Test an instance of GetSubscriptionResponse /// - [Test] + [Fact] public void GetSubscriptionResponseInstanceTest() { // TODO uncomment below to test "IsInstanceOfType" GetSubscriptionResponse @@ -69,7 +60,7 @@ public void GetSubscriptionResponseInstanceTest() /// /// Test the property 'ActiveDays' /// - [Test] + [Fact] public void ActiveDaysTest() { // TODO unit test for the property 'ActiveDays' @@ -77,7 +68,7 @@ public void ActiveDaysTest() /// /// Test the property 'NotifyURL' /// - [Test] + [Fact] public void NotifyURLTest() { // TODO unit test for the property 'NotifyURL' @@ -85,7 +76,7 @@ public void NotifyURLTest() /// /// Test the property 'DestinationAddress' /// - [Test] + [Fact] public void DestinationAddressTest() { // TODO unit test for the property 'DestinationAddress' diff --git a/src/Telstra.Messaging.Test/Model/HealthCheckResponseTests.cs b/src/Telstra.Messaging.Test/Model/HealthCheckResponseTests.cs new file mode 100644 index 0000000..9256b59 --- /dev/null +++ b/src/Telstra.Messaging.Test/Model/HealthCheckResponseTests.cs @@ -0,0 +1,71 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Telstra.Messaging.Test +{ + /// + /// Class for testing HealthCheckResponse + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class HealthCheckResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for HealthCheckResponse + //private HealthCheckResponse instance; + + public HealthCheckResponseTests() + { + // TODO uncomment below to create an instance of HealthCheckResponse + //instance = new HealthCheckResponse(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of HealthCheckResponse + /// + [Fact] + public void HealthCheckResponseInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" HealthCheckResponse + //Assert.IsInstanceOfType (instance, "variable 'instance' is a HealthCheckResponse"); + } + + + /// + /// Test the property 'Status' + /// + [Fact] + public void StatusTest() + { + // TODO unit test for the property 'Status' + } + + } + +} diff --git a/src/Telstra.Messaging.Test/Model/InboundPollResponseTests.cs b/src/Telstra.Messaging.Test/Model/InboundPollResponseTests.cs new file mode 100644 index 0000000..f6a566b --- /dev/null +++ b/src/Telstra.Messaging.Test/Model/InboundPollResponseTests.cs @@ -0,0 +1,111 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Telstra.Messaging.Test +{ + /// + /// Class for testing InboundPollResponse + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class InboundPollResponseTests : IDisposable + { + // TODO uncomment below to declare an instance variable for InboundPollResponse + //private InboundPollResponse instance; + + public InboundPollResponseTests() + { + // TODO uncomment below to create an instance of InboundPollResponse + //instance = new InboundPollResponse(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of InboundPollResponse + /// + [Fact] + public void InboundPollResponseInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" InboundPollResponse + //Assert.IsInstanceOfType (instance, "variable 'instance' is a InboundPollResponse"); + } + + + /// + /// Test the property 'Status' + /// + [Fact] + public void StatusTest() + { + // TODO unit test for the property 'Status' + } + /// + /// Test the property 'DestinationAddress' + /// + [Fact] + public void DestinationAddressTest() + { + // TODO unit test for the property 'DestinationAddress' + } + /// + /// Test the property 'SenderAddress' + /// + [Fact] + public void SenderAddressTest() + { + // TODO unit test for the property 'SenderAddress' + } + /// + /// Test the property 'Message' + /// + [Fact] + public void MessageTest() + { + // TODO unit test for the property 'Message' + } + /// + /// Test the property 'MessageId' + /// + [Fact] + public void MessageIdTest() + { + // TODO unit test for the property 'MessageId' + } + /// + /// Test the property 'SentTimestamp' + /// + [Fact] + public void SentTimestampTest() + { + // TODO unit test for the property 'SentTimestamp' + } + + } + +} diff --git a/src/com.telstra.messaging.Test/Model/MMSContentTests.cs b/src/Telstra.Messaging.Test/Model/MMSContentTests.cs similarity index 62% rename from src/com.telstra.messaging.Test/Model/MMSContentTests.cs rename to src/Telstra.Messaging.Test/Model/MMSContentTests.cs index 7898069..6398e11 100644 --- a/src/com.telstra.messaging.Test/Model/MMSContentTests.cs +++ b/src/Telstra.Messaging.Test/Model/MMSContentTests.cs @@ -1,64 +1,55 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ -using NUnit.Framework; +using Xunit; using System; using System.Linq; using System.IO; using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; using System.Reflection; using Newtonsoft.Json; -namespace com.telstra.messaging.Test +namespace Telstra.Messaging.Test { /// /// Class for testing MMSContent /// /// - /// This file is automatically generated by Swagger Codegen. + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). /// Please update the test case below to test the model. /// - [TestFixture] - public class MMSContentTests + public class MMSContentTests : IDisposable { // TODO uncomment below to declare an instance variable for MMSContent //private MMSContent instance; - /// - /// Setup before each test - /// - [SetUp] - public void Init() + public MMSContentTests() { // TODO uncomment below to create an instance of MMSContent //instance = new MMSContent(); } - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() + public void Dispose() { - + // Cleanup when everything is done. } /// /// Test an instance of MMSContent /// - [Test] + [Fact] public void MMSContentInstanceTest() { // TODO uncomment below to test "IsInstanceOfType" MMSContent @@ -69,7 +60,7 @@ public void MMSContentInstanceTest() /// /// Test the property 'Type' /// - [Test] + [Fact] public void TypeTest() { // TODO unit test for the property 'Type' @@ -77,7 +68,7 @@ public void TypeTest() /// /// Test the property 'Filename' /// - [Test] + [Fact] public void FilenameTest() { // TODO unit test for the property 'Filename' @@ -85,7 +76,7 @@ public void FilenameTest() /// /// Test the property 'Payload' /// - [Test] + [Fact] public void PayloadTest() { // TODO unit test for the property 'Payload' diff --git a/src/Telstra.Messaging.Test/Model/MessageMultiTests.cs b/src/Telstra.Messaging.Test/Model/MessageMultiTests.cs new file mode 100644 index 0000000..7c7a0d4 --- /dev/null +++ b/src/Telstra.Messaging.Test/Model/MessageMultiTests.cs @@ -0,0 +1,87 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Telstra.Messaging.Test +{ + /// + /// Class for testing MessageMulti + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class MessageMultiTests : IDisposable + { + // TODO uncomment below to declare an instance variable for MessageMulti + //private MessageMulti instance; + + public MessageMultiTests() + { + // TODO uncomment below to create an instance of MessageMulti + //instance = new MessageMulti(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of MessageMulti + /// + [Fact] + public void MessageMultiInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" MessageMulti + //Assert.IsInstanceOfType (instance, "variable 'instance' is a MessageMulti"); + } + + + /// + /// Test the property 'To' + /// + [Fact] + public void ToTest() + { + // TODO unit test for the property 'To' + } + /// + /// Test the property 'Body' + /// + [Fact] + public void BodyTest() + { + // TODO unit test for the property 'Body' + } + /// + /// Test the property 'ReceiptOff' + /// + [Fact] + public void ReceiptOffTest() + { + // TODO unit test for the property 'ReceiptOff' + } + + } + +} diff --git a/src/Telstra.Messaging.Test/Model/MessageSentResponseMmsTests.cs b/src/Telstra.Messaging.Test/Model/MessageSentResponseMmsTests.cs new file mode 100644 index 0000000..c23e770 --- /dev/null +++ b/src/Telstra.Messaging.Test/Model/MessageSentResponseMmsTests.cs @@ -0,0 +1,103 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Telstra.Messaging.Test +{ + /// + /// Class for testing MessageSentResponseMms + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class MessageSentResponseMmsTests : IDisposable + { + // TODO uncomment below to declare an instance variable for MessageSentResponseMms + //private MessageSentResponseMms instance; + + public MessageSentResponseMmsTests() + { + // TODO uncomment below to create an instance of MessageSentResponseMms + //instance = new MessageSentResponseMms(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of MessageSentResponseMms + /// + [Fact] + public void MessageSentResponseMmsInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" MessageSentResponseMms + //Assert.IsInstanceOfType (instance, "variable 'instance' is a MessageSentResponseMms"); + } + + + /// + /// Test the property 'Messages' + /// + [Fact] + public void MessagesTest() + { + // TODO unit test for the property 'Messages' + } + /// + /// Test the property 'MmsMediaKB' + /// + [Fact] + public void MmsMediaKBTest() + { + // TODO unit test for the property 'MmsMediaKB' + } + /// + /// Test the property 'Country' + /// + [Fact] + public void CountryTest() + { + // TODO unit test for the property 'Country' + } + /// + /// Test the property 'MessageType' + /// + [Fact] + public void MessageTypeTest() + { + // TODO unit test for the property 'MessageType' + } + /// + /// Test the property 'NumberSegments' + /// + [Fact] + public void NumberSegmentsTest() + { + // TODO unit test for the property 'NumberSegments' + } + + } + +} diff --git a/src/Telstra.Messaging.Test/Model/MessageSentResponseSmsTests.cs b/src/Telstra.Messaging.Test/Model/MessageSentResponseSmsTests.cs new file mode 100644 index 0000000..5257f73 --- /dev/null +++ b/src/Telstra.Messaging.Test/Model/MessageSentResponseSmsTests.cs @@ -0,0 +1,95 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Telstra.Messaging.Test +{ + /// + /// Class for testing MessageSentResponseSms + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class MessageSentResponseSmsTests : IDisposable + { + // TODO uncomment below to declare an instance variable for MessageSentResponseSms + //private MessageSentResponseSms instance; + + public MessageSentResponseSmsTests() + { + // TODO uncomment below to create an instance of MessageSentResponseSms + //instance = new MessageSentResponseSms(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of MessageSentResponseSms + /// + [Fact] + public void MessageSentResponseSmsInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" MessageSentResponseSms + //Assert.IsInstanceOfType (instance, "variable 'instance' is a MessageSentResponseSms"); + } + + + /// + /// Test the property 'Messages' + /// + [Fact] + public void MessagesTest() + { + // TODO unit test for the property 'Messages' + } + /// + /// Test the property 'Country' + /// + [Fact] + public void CountryTest() + { + // TODO unit test for the property 'Country' + } + /// + /// Test the property 'MessageType' + /// + [Fact] + public void MessageTypeTest() + { + // TODO unit test for the property 'MessageType' + } + /// + /// Test the property 'NumberSegments' + /// + [Fact] + public void NumberSegmentsTest() + { + // TODO unit test for the property 'NumberSegments' + } + + } + +} diff --git a/src/com.telstra.messaging.Test/Model/MessageTests.cs b/src/Telstra.Messaging.Test/Model/MessageTests.cs similarity index 65% rename from src/com.telstra.messaging.Test/Model/MessageTests.cs rename to src/Telstra.Messaging.Test/Model/MessageTests.cs index 5d81f4d..81f7437 100644 --- a/src/com.telstra.messaging.Test/Model/MessageTests.cs +++ b/src/Telstra.Messaging.Test/Model/MessageTests.cs @@ -1,64 +1,55 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ -using NUnit.Framework; +using Xunit; using System; using System.Linq; using System.IO; using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; using System.Reflection; using Newtonsoft.Json; -namespace com.telstra.messaging.Test +namespace Telstra.Messaging.Test { /// /// Class for testing Message /// /// - /// This file is automatically generated by Swagger Codegen. + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). /// Please update the test case below to test the model. /// - [TestFixture] - public class MessageTests + public class MessageTests : IDisposable { // TODO uncomment below to declare an instance variable for Message //private Message instance; - /// - /// Setup before each test - /// - [SetUp] - public void Init() + public MessageTests() { // TODO uncomment below to create an instance of Message //instance = new Message(); } - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() + public void Dispose() { - + // Cleanup when everything is done. } /// /// Test an instance of Message /// - [Test] + [Fact] public void MessageInstanceTest() { // TODO uncomment below to test "IsInstanceOfType" Message @@ -69,7 +60,7 @@ public void MessageInstanceTest() /// /// Test the property 'To' /// - [Test] + [Fact] public void ToTest() { // TODO unit test for the property 'To' @@ -77,7 +68,7 @@ public void ToTest() /// /// Test the property 'DeliveryStatus' /// - [Test] + [Fact] public void DeliveryStatusTest() { // TODO unit test for the property 'DeliveryStatus' @@ -85,7 +76,7 @@ public void DeliveryStatusTest() /// /// Test the property 'MessageId' /// - [Test] + [Fact] public void MessageIdTest() { // TODO unit test for the property 'MessageId' @@ -93,7 +84,7 @@ public void MessageIdTest() /// /// Test the property 'MessageStatusURL' /// - [Test] + [Fact] public void MessageStatusURLTest() { // TODO unit test for the property 'MessageStatusURL' diff --git a/src/com.telstra.messaging.Test/Model/OAuthResponseTests.cs b/src/Telstra.Messaging.Test/Model/OAuthResponseTests.cs similarity index 63% rename from src/com.telstra.messaging.Test/Model/OAuthResponseTests.cs rename to src/Telstra.Messaging.Test/Model/OAuthResponseTests.cs index bf0d5ce..1341209 100644 --- a/src/com.telstra.messaging.Test/Model/OAuthResponseTests.cs +++ b/src/Telstra.Messaging.Test/Model/OAuthResponseTests.cs @@ -1,64 +1,55 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ -using NUnit.Framework; +using Xunit; using System; using System.Linq; using System.IO; using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; using System.Reflection; using Newtonsoft.Json; -namespace com.telstra.messaging.Test +namespace Telstra.Messaging.Test { /// /// Class for testing OAuthResponse /// /// - /// This file is automatically generated by Swagger Codegen. + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). /// Please update the test case below to test the model. /// - [TestFixture] - public class OAuthResponseTests + public class OAuthResponseTests : IDisposable { // TODO uncomment below to declare an instance variable for OAuthResponse //private OAuthResponse instance; - /// - /// Setup before each test - /// - [SetUp] - public void Init() + public OAuthResponseTests() { // TODO uncomment below to create an instance of OAuthResponse //instance = new OAuthResponse(); } - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() + public void Dispose() { - + // Cleanup when everything is done. } /// /// Test an instance of OAuthResponse /// - [Test] + [Fact] public void OAuthResponseInstanceTest() { // TODO uncomment below to test "IsInstanceOfType" OAuthResponse @@ -69,7 +60,7 @@ public void OAuthResponseInstanceTest() /// /// Test the property 'AccessToken' /// - [Test] + [Fact] public void AccessTokenTest() { // TODO unit test for the property 'AccessToken' @@ -77,7 +68,7 @@ public void AccessTokenTest() /// /// Test the property 'TokenType' /// - [Test] + [Fact] public void TokenTypeTest() { // TODO unit test for the property 'TokenType' @@ -85,7 +76,7 @@ public void TokenTypeTest() /// /// Test the property 'ExpiresIn' /// - [Test] + [Fact] public void ExpiresInTest() { // TODO unit test for the property 'ExpiresIn' diff --git a/src/com.telstra.messaging.Test/Model/OutboundPollResponseTests.cs b/src/Telstra.Messaging.Test/Model/OutboundPollResponseTests.cs similarity index 66% rename from src/com.telstra.messaging.Test/Model/OutboundPollResponseTests.cs rename to src/Telstra.Messaging.Test/Model/OutboundPollResponseTests.cs index e487a48..e6093f0 100644 --- a/src/com.telstra.messaging.Test/Model/OutboundPollResponseTests.cs +++ b/src/Telstra.Messaging.Test/Model/OutboundPollResponseTests.cs @@ -1,64 +1,55 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ -using NUnit.Framework; +using Xunit; using System; using System.Linq; using System.IO; using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; using System.Reflection; using Newtonsoft.Json; -namespace com.telstra.messaging.Test +namespace Telstra.Messaging.Test { /// /// Class for testing OutboundPollResponse /// /// - /// This file is automatically generated by Swagger Codegen. + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). /// Please update the test case below to test the model. /// - [TestFixture] - public class OutboundPollResponseTests + public class OutboundPollResponseTests : IDisposable { // TODO uncomment below to declare an instance variable for OutboundPollResponse //private OutboundPollResponse instance; - /// - /// Setup before each test - /// - [SetUp] - public void Init() + public OutboundPollResponseTests() { // TODO uncomment below to create an instance of OutboundPollResponse //instance = new OutboundPollResponse(); } - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() + public void Dispose() { - + // Cleanup when everything is done. } /// /// Test an instance of OutboundPollResponse /// - [Test] + [Fact] public void OutboundPollResponseInstanceTest() { // TODO uncomment below to test "IsInstanceOfType" OutboundPollResponse @@ -69,31 +60,31 @@ public void OutboundPollResponseInstanceTest() /// /// Test the property 'To' /// - [Test] + [Fact] public void ToTest() { // TODO unit test for the property 'To' } /// - /// Test the property 'ReceivedTimestamp' + /// Test the property 'SentTimestamp' /// - [Test] - public void ReceivedTimestampTest() + [Fact] + public void SentTimestampTest() { - // TODO unit test for the property 'ReceivedTimestamp' + // TODO unit test for the property 'SentTimestamp' } /// - /// Test the property 'SentTimestamp' + /// Test the property 'ReceivedTimestamp' /// - [Test] - public void SentTimestampTest() + [Fact] + public void ReceivedTimestampTest() { - // TODO unit test for the property 'SentTimestamp' + // TODO unit test for the property 'ReceivedTimestamp' } /// /// Test the property 'DeliveryStatus' /// - [Test] + [Fact] public void DeliveryStatusTest() { // TODO unit test for the property 'DeliveryStatus' diff --git a/src/com.telstra.messaging.Test/Model/ProvisionNumberRequestTests.cs b/src/Telstra.Messaging.Test/Model/ProvisionNumberRequestTests.cs similarity index 61% rename from src/com.telstra.messaging.Test/Model/ProvisionNumberRequestTests.cs rename to src/Telstra.Messaging.Test/Model/ProvisionNumberRequestTests.cs index 98baa2c..e85552b 100644 --- a/src/com.telstra.messaging.Test/Model/ProvisionNumberRequestTests.cs +++ b/src/Telstra.Messaging.Test/Model/ProvisionNumberRequestTests.cs @@ -1,64 +1,55 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ -using NUnit.Framework; +using Xunit; using System; using System.Linq; using System.IO; using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; using System.Reflection; using Newtonsoft.Json; -namespace com.telstra.messaging.Test +namespace Telstra.Messaging.Test { /// /// Class for testing ProvisionNumberRequest /// /// - /// This file is automatically generated by Swagger Codegen. + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). /// Please update the test case below to test the model. /// - [TestFixture] - public class ProvisionNumberRequestTests + public class ProvisionNumberRequestTests : IDisposable { // TODO uncomment below to declare an instance variable for ProvisionNumberRequest //private ProvisionNumberRequest instance; - /// - /// Setup before each test - /// - [SetUp] - public void Init() + public ProvisionNumberRequestTests() { // TODO uncomment below to create an instance of ProvisionNumberRequest //instance = new ProvisionNumberRequest(); } - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() + public void Dispose() { - + // Cleanup when everything is done. } /// /// Test an instance of ProvisionNumberRequest /// - [Test] + [Fact] public void ProvisionNumberRequestInstanceTest() { // TODO uncomment below to test "IsInstanceOfType" ProvisionNumberRequest @@ -69,7 +60,7 @@ public void ProvisionNumberRequestInstanceTest() /// /// Test the property 'ActiveDays' /// - [Test] + [Fact] public void ActiveDaysTest() { // TODO unit test for the property 'ActiveDays' @@ -77,7 +68,7 @@ public void ActiveDaysTest() /// /// Test the property 'NotifyURL' /// - [Test] + [Fact] public void NotifyURLTest() { // TODO unit test for the property 'NotifyURL' diff --git a/src/com.telstra.messaging.Test/Model/ProvisionNumberResponseTests.cs b/src/Telstra.Messaging.Test/Model/ProvisionNumberResponseTests.cs similarity index 52% rename from src/com.telstra.messaging.Test/Model/ProvisionNumberResponseTests.cs rename to src/Telstra.Messaging.Test/Model/ProvisionNumberResponseTests.cs index 66f7f85..f57681e 100644 --- a/src/com.telstra.messaging.Test/Model/ProvisionNumberResponseTests.cs +++ b/src/Telstra.Messaging.Test/Model/ProvisionNumberResponseTests.cs @@ -1,64 +1,55 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ -using NUnit.Framework; +using Xunit; using System; using System.Linq; using System.IO; using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; using System.Reflection; using Newtonsoft.Json; -namespace com.telstra.messaging.Test +namespace Telstra.Messaging.Test { /// /// Class for testing ProvisionNumberResponse /// /// - /// This file is automatically generated by Swagger Codegen. + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). /// Please update the test case below to test the model. /// - [TestFixture] - public class ProvisionNumberResponseTests + public class ProvisionNumberResponseTests : IDisposable { // TODO uncomment below to declare an instance variable for ProvisionNumberResponse //private ProvisionNumberResponse instance; - /// - /// Setup before each test - /// - [SetUp] - public void Init() + public ProvisionNumberResponseTests() { // TODO uncomment below to create an instance of ProvisionNumberResponse //instance = new ProvisionNumberResponse(); } - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() + public void Dispose() { - + // Cleanup when everything is done. } /// /// Test an instance of ProvisionNumberResponse /// - [Test] + [Fact] public void ProvisionNumberResponseInstanceTest() { // TODO uncomment below to test "IsInstanceOfType" ProvisionNumberResponse @@ -67,28 +58,20 @@ public void ProvisionNumberResponseInstanceTest() /// - /// Test the property 'ActiveDays' - /// - [Test] - public void ActiveDaysTest() - { - // TODO unit test for the property 'ActiveDays' - } - /// - /// Test the property 'NotifyURL' + /// Test the property 'DestinationAddress' /// - [Test] - public void NotifyURLTest() + [Fact] + public void DestinationAddressTest() { - // TODO unit test for the property 'NotifyURL' + // TODO unit test for the property 'DestinationAddress' } /// - /// Test the property 'DestinationAddress' + /// Test the property 'ExpiryDate' /// - [Test] - public void DestinationAddressTest() + [Fact] + public void ExpiryDateTest() { - // TODO unit test for the property 'DestinationAddress' + // TODO unit test for the property 'ExpiryDate' } } diff --git a/src/com.telstra.messaging.Test/Model/SendMmsRequestTests.cs b/src/Telstra.Messaging.Test/Model/SendMmsRequestTests.cs similarity index 68% rename from src/com.telstra.messaging.Test/Model/SendMmsRequestTests.cs rename to src/Telstra.Messaging.Test/Model/SendMmsRequestTests.cs index 575572c..b34b6f4 100644 --- a/src/com.telstra.messaging.Test/Model/SendMmsRequestTests.cs +++ b/src/Telstra.Messaging.Test/Model/SendMmsRequestTests.cs @@ -1,64 +1,55 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ -using NUnit.Framework; +using Xunit; using System; using System.Linq; using System.IO; using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; using System.Reflection; using Newtonsoft.Json; -namespace com.telstra.messaging.Test +namespace Telstra.Messaging.Test { /// /// Class for testing SendMmsRequest /// /// - /// This file is automatically generated by Swagger Codegen. + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). /// Please update the test case below to test the model. /// - [TestFixture] - public class SendMmsRequestTests + public class SendMmsRequestTests : IDisposable { // TODO uncomment below to declare an instance variable for SendMmsRequest //private SendMmsRequest instance; - /// - /// Setup before each test - /// - [SetUp] - public void Init() + public SendMmsRequestTests() { // TODO uncomment below to create an instance of SendMmsRequest //instance = new SendMmsRequest(); } - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() + public void Dispose() { - + // Cleanup when everything is done. } /// /// Test an instance of SendMmsRequest /// - [Test] + [Fact] public void SendMmsRequestInstanceTest() { // TODO uncomment below to test "IsInstanceOfType" SendMmsRequest @@ -67,25 +58,25 @@ public void SendMmsRequestInstanceTest() /// - /// Test the property 'From' + /// Test the property 'To' /// - [Test] - public void FromTest() + [Fact] + public void ToTest() { - // TODO unit test for the property 'From' + // TODO unit test for the property 'To' } /// - /// Test the property 'To' + /// Test the property 'From' /// - [Test] - public void ToTest() + [Fact] + public void FromTest() { - // TODO unit test for the property 'To' + // TODO unit test for the property 'From' } /// /// Test the property 'Subject' /// - [Test] + [Fact] public void SubjectTest() { // TODO unit test for the property 'Subject' @@ -93,15 +84,23 @@ public void SubjectTest() /// /// Test the property 'ReplyRequest' /// - [Test] + [Fact] public void ReplyRequestTest() { // TODO unit test for the property 'ReplyRequest' } /// + /// Test the property 'NotifyURL' + /// + [Fact] + public void NotifyURLTest() + { + // TODO unit test for the property 'NotifyURL' + } + /// /// Test the property 'MMSContent' /// - [Test] + [Fact] public void MMSContentTest() { // TODO unit test for the property 'MMSContent' diff --git a/src/com.telstra.messaging.Test/Model/SendSMSRequestTests.cs b/src/Telstra.Messaging.Test/Model/SendSMSRequestTests.cs similarity index 71% rename from src/com.telstra.messaging.Test/Model/SendSMSRequestTests.cs rename to src/Telstra.Messaging.Test/Model/SendSMSRequestTests.cs index 5461c30..502e77f 100644 --- a/src/com.telstra.messaging.Test/Model/SendSMSRequestTests.cs +++ b/src/Telstra.Messaging.Test/Model/SendSMSRequestTests.cs @@ -1,64 +1,55 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ -using NUnit.Framework; +using Xunit; using System; using System.Linq; using System.IO; using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; using System.Reflection; using Newtonsoft.Json; -namespace com.telstra.messaging.Test +namespace Telstra.Messaging.Test { /// /// Class for testing SendSMSRequest /// /// - /// This file is automatically generated by Swagger Codegen. + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). /// Please update the test case below to test the model. /// - [TestFixture] - public class SendSMSRequestTests + public class SendSMSRequestTests : IDisposable { // TODO uncomment below to declare an instance variable for SendSMSRequest //private SendSMSRequest instance; - /// - /// Setup before each test - /// - [SetUp] - public void Init() + public SendSMSRequestTests() { // TODO uncomment below to create an instance of SendSMSRequest //instance = new SendSMSRequest(); } - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() + public void Dispose() { - + // Cleanup when everything is done. } /// /// Test an instance of SendSMSRequest /// - [Test] + [Fact] public void SendSMSRequestInstanceTest() { // TODO uncomment below to test "IsInstanceOfType" SendSMSRequest @@ -69,7 +60,7 @@ public void SendSMSRequestInstanceTest() /// /// Test the property 'To' /// - [Test] + [Fact] public void ToTest() { // TODO unit test for the property 'To' @@ -77,7 +68,7 @@ public void ToTest() /// /// Test the property 'Body' /// - [Test] + [Fact] public void BodyTest() { // TODO unit test for the property 'Body' @@ -85,7 +76,7 @@ public void BodyTest() /// /// Test the property 'From' /// - [Test] + [Fact] public void FromTest() { // TODO unit test for the property 'From' @@ -93,7 +84,7 @@ public void FromTest() /// /// Test the property 'Validity' /// - [Test] + [Fact] public void ValidityTest() { // TODO unit test for the property 'Validity' @@ -101,7 +92,7 @@ public void ValidityTest() /// /// Test the property 'ScheduledDelivery' /// - [Test] + [Fact] public void ScheduledDeliveryTest() { // TODO unit test for the property 'ScheduledDelivery' @@ -109,7 +100,7 @@ public void ScheduledDeliveryTest() /// /// Test the property 'NotifyURL' /// - [Test] + [Fact] public void NotifyURLTest() { // TODO unit test for the property 'NotifyURL' @@ -117,11 +108,19 @@ public void NotifyURLTest() /// /// Test the property 'ReplyRequest' /// - [Test] + [Fact] public void ReplyRequestTest() { // TODO unit test for the property 'ReplyRequest' } + /// + /// Test the property 'Priority' + /// + [Fact] + public void PriorityTest() + { + // TODO unit test for the property 'Priority' + } } diff --git a/src/Telstra.Messaging.Test/Model/SendSmsMultiRequestTests.cs b/src/Telstra.Messaging.Test/Model/SendSmsMultiRequestTests.cs new file mode 100644 index 0000000..cff8d75 --- /dev/null +++ b/src/Telstra.Messaging.Test/Model/SendSmsMultiRequestTests.cs @@ -0,0 +1,79 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using Xunit; + +using System; +using System.Linq; +using System.IO; +using System.Collections.Generic; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; +using System.Reflection; +using Newtonsoft.Json; + +namespace Telstra.Messaging.Test +{ + /// + /// Class for testing SendSmsMultiRequest + /// + /// + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). + /// Please update the test case below to test the model. + /// + public class SendSmsMultiRequestTests : IDisposable + { + // TODO uncomment below to declare an instance variable for SendSmsMultiRequest + //private SendSmsMultiRequest instance; + + public SendSmsMultiRequestTests() + { + // TODO uncomment below to create an instance of SendSmsMultiRequest + //instance = new SendSmsMultiRequest(); + } + + public void Dispose() + { + // Cleanup when everything is done. + } + + /// + /// Test an instance of SendSmsMultiRequest + /// + [Fact] + public void SendSmsMultiRequestInstanceTest() + { + // TODO uncomment below to test "IsInstanceOfType" SendSmsMultiRequest + //Assert.IsInstanceOfType (instance, "variable 'instance' is a SendSmsMultiRequest"); + } + + + /// + /// Test the property 'SmsMulti' + /// + [Fact] + public void SmsMultiTest() + { + // TODO unit test for the property 'SmsMulti' + } + /// + /// Test the property 'NotiyURL' + /// + [Fact] + public void NotiyURLTest() + { + // TODO unit test for the property 'NotiyURL' + } + + } + +} diff --git a/src/com.telstra.messaging.Test/Model/StatusTests.cs b/src/Telstra.Messaging.Test/Model/StatusTests.cs similarity index 51% rename from src/com.telstra.messaging.Test/Model/StatusTests.cs rename to src/Telstra.Messaging.Test/Model/StatusTests.cs index 956cccc..cd6c917 100644 --- a/src/com.telstra.messaging.Test/Model/StatusTests.cs +++ b/src/Telstra.Messaging.Test/Model/StatusTests.cs @@ -1,64 +1,55 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ -using NUnit.Framework; +using Xunit; using System; using System.Linq; using System.IO; using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; +using Telstra.Messaging.Api; +using Telstra.Messaging.Model; +using Telstra.Messaging.Client; using System.Reflection; using Newtonsoft.Json; -namespace com.telstra.messaging.Test +namespace Telstra.Messaging.Test { /// /// Class for testing Status /// /// - /// This file is automatically generated by Swagger Codegen. + /// This file is automatically generated by OpenAPI Generator (https://openapi-generator.tech). /// Please update the test case below to test the model. /// - [TestFixture] - public class StatusTests + public class StatusTests : IDisposable { // TODO uncomment below to declare an instance variable for Status //private Status instance; - /// - /// Setup before each test - /// - [SetUp] - public void Init() + public StatusTests() { // TODO uncomment below to create an instance of Status //instance = new Status(); } - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() + public void Dispose() { - + // Cleanup when everything is done. } /// /// Test an instance of Status /// - [Test] + [Fact] public void StatusInstanceTest() { // TODO uncomment below to test "IsInstanceOfType" Status diff --git a/src/Telstra.Messaging.Test/Telstra.Messaging.Test.csproj b/src/Telstra.Messaging.Test/Telstra.Messaging.Test.csproj new file mode 100644 index 0000000..0c882eb --- /dev/null +++ b/src/Telstra.Messaging.Test/Telstra.Messaging.Test.csproj @@ -0,0 +1,38 @@ + + + + + false + Properties + Telstra.Messaging.Test + Telstra.Messaging.Test + + netcoreapp2.0 + false + 512 + + + + + + + + + + + + + + {B98ACF0D-EE51-49A8-BA8E-71750CAAB9E3} + Telstra.Messaging + + + + diff --git a/src/Telstra.Messaging/Api/AuthenticationApi.cs b/src/Telstra.Messaging/Api/AuthenticationApi.cs new file mode 100644 index 0000000..d537829 --- /dev/null +++ b/src/Telstra.Messaging/Api/AuthenticationApi.cs @@ -0,0 +1,387 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net; +using System.Net.Mime; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; + +namespace Telstra.Messaging.Api +{ + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IAuthenticationApiSync : IApiAccessor + { + #region Synchronous Operations + /// + /// Generate OAuth2 token + /// + /// + /// To generate an OAuth2 Authentication token, pass through your `Client key` and `Client secret` that you received when you registered for the **API Free Trial** Product. The grant_type should be left as `client_credentials` and the scope as `NSMS`. The token will expire in one hour. + /// + /// Thrown when fails to make API call + /// + /// + /// + /// NSMS (optional) + /// OAuthResponse + OAuthResponse AuthToken (string clientId, string clientSecret, string grantType, string scope = default(string)); + + /// + /// Generate OAuth2 token + /// + /// + /// To generate an OAuth2 Authentication token, pass through your `Client key` and `Client secret` that you received when you registered for the **API Free Trial** Product. The grant_type should be left as `client_credentials` and the scope as `NSMS`. The token will expire in one hour. + /// + /// Thrown when fails to make API call + /// + /// + /// + /// NSMS (optional) + /// ApiResponse of OAuthResponse + ApiResponse AuthTokenWithHttpInfo (string clientId, string clientSecret, string grantType, string scope = default(string)); + #endregion Synchronous Operations + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IAuthenticationApiAsync : IApiAccessor + { + #region Asynchronous Operations + /// + /// Generate OAuth2 token + /// + /// + /// To generate an OAuth2 Authentication token, pass through your `Client key` and `Client secret` that you received when you registered for the **API Free Trial** Product. The grant_type should be left as `client_credentials` and the scope as `NSMS`. The token will expire in one hour. + /// + /// Thrown when fails to make API call + /// + /// + /// + /// NSMS (optional) + /// Task of OAuthResponse + System.Threading.Tasks.Task AuthTokenAsync (string clientId, string clientSecret, string grantType, string scope = default(string)); + + /// + /// Generate OAuth2 token + /// + /// + /// To generate an OAuth2 Authentication token, pass through your `Client key` and `Client secret` that you received when you registered for the **API Free Trial** Product. The grant_type should be left as `client_credentials` and the scope as `NSMS`. The token will expire in one hour. + /// + /// Thrown when fails to make API call + /// + /// + /// + /// NSMS (optional) + /// Task of ApiResponse (OAuthResponse) + System.Threading.Tasks.Task> AuthTokenAsyncWithHttpInfo (string clientId, string clientSecret, string grantType, string scope = default(string)); + #endregion Asynchronous Operations + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IAuthenticationApi : IAuthenticationApiSync, IAuthenticationApiAsync + { + + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public partial class AuthenticationApi : IAuthenticationApi + { + private Telstra.Messaging.Client.ExceptionFactory _exceptionFactory = (name, response) => null; + + /// + /// Initializes a new instance of the class. + /// + /// + public AuthenticationApi() : this((string) null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// + public AuthenticationApi(String basePath) + { + this.Configuration = Telstra.Messaging.Client.Configuration.MergeConfigurations( + Telstra.Messaging.Client.GlobalConfiguration.Instance, + new Telstra.Messaging.Client.Configuration { BasePath = basePath } + ); + this.Client = new Telstra.Messaging.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Telstra.Messaging.Client.ApiClient(this.Configuration.BasePath); + this.ExceptionFactory = Telstra.Messaging.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using Configuration object + /// + /// An instance of Configuration + /// + public AuthenticationApi(Telstra.Messaging.Client.Configuration configuration) + { + if (configuration == null) throw new ArgumentNullException("configuration"); + + this.Configuration = Telstra.Messaging.Client.Configuration.MergeConfigurations( + Telstra.Messaging.Client.GlobalConfiguration.Instance, + configuration + ); + this.Client = new Telstra.Messaging.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Telstra.Messaging.Client.ApiClient(this.Configuration.BasePath); + ExceptionFactory = Telstra.Messaging.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using a Configuration object and client instance. + /// + /// The client interface for synchronous API access. + /// The client interface for asynchronous API access. + /// The configuration object. + public AuthenticationApi(Telstra.Messaging.Client.ISynchronousClient client,Telstra.Messaging.Client.IAsynchronousClient asyncClient, Telstra.Messaging.Client.IReadableConfiguration configuration) + { + if(client == null) throw new ArgumentNullException("client"); + if(asyncClient == null) throw new ArgumentNullException("asyncClient"); + if(configuration == null) throw new ArgumentNullException("configuration"); + + this.Client = client; + this.AsynchronousClient = asyncClient; + this.Configuration = configuration; + this.ExceptionFactory = Telstra.Messaging.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// The client for accessing this underlying API asynchronously. + /// + public Telstra.Messaging.Client.IAsynchronousClient AsynchronousClient { get; set; } + + /// + /// The client for accessing this underlying API synchronously. + /// + public Telstra.Messaging.Client.ISynchronousClient Client { get; set; } + + /// + /// Gets the base path of the API client. + /// + /// The base path + public String GetBasePath() + { + return this.Configuration.BasePath; + } + + /// + /// Gets or sets the configuration object + /// + /// An instance of the Configuration + public Telstra.Messaging.Client.IReadableConfiguration Configuration {get; set;} + + /// + /// Provides a factory method hook for the creation of exceptions. + /// + public Telstra.Messaging.Client.ExceptionFactory ExceptionFactory + { + get + { + if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) + { + throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); + } + return _exceptionFactory; + } + set { _exceptionFactory = value; } + } + + /// + /// Generate OAuth2 token To generate an OAuth2 Authentication token, pass through your `Client key` and `Client secret` that you received when you registered for the **API Free Trial** Product. The grant_type should be left as `client_credentials` and the scope as `NSMS`. The token will expire in one hour. + /// + /// Thrown when fails to make API call + /// + /// + /// + /// NSMS (optional) + /// OAuthResponse + public OAuthResponse AuthToken (string clientId, string clientSecret, string grantType, string scope = default(string)) + { + Telstra.Messaging.Client.ApiResponse localVarResponse = AuthTokenWithHttpInfo(clientId, clientSecret, grantType, scope); + return localVarResponse.Data; + } + + /// + /// Generate OAuth2 token To generate an OAuth2 Authentication token, pass through your `Client key` and `Client secret` that you received when you registered for the **API Free Trial** Product. The grant_type should be left as `client_credentials` and the scope as `NSMS`. The token will expire in one hour. + /// + /// Thrown when fails to make API call + /// + /// + /// + /// NSMS (optional) + /// ApiResponse of OAuthResponse + public Telstra.Messaging.Client.ApiResponse< OAuthResponse > AuthTokenWithHttpInfo (string clientId, string clientSecret, string grantType, string scope = default(string)) + { + // verify the required parameter 'clientId' is set + if (clientId == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'clientId' when calling AuthenticationApi->AuthToken"); + + // verify the required parameter 'clientSecret' is set + if (clientSecret == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'clientSecret' when calling AuthenticationApi->AuthToken"); + + // verify the required parameter 'grantType' is set + if (grantType == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'grantType' when calling AuthenticationApi->AuthToken"); + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + "application/x-www-form-urlencoded" + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + if (clientId != null) + { + localVarRequestOptions.FormParameters.Add("client_id", Telstra.Messaging.Client.ClientUtils.ParameterToString(clientId)); // form parameter + } + if (clientSecret != null) + { + localVarRequestOptions.FormParameters.Add("client_secret", Telstra.Messaging.Client.ClientUtils.ParameterToString(clientSecret)); // form parameter + } + if (grantType != null) + { + localVarRequestOptions.FormParameters.Add("grant_type", Telstra.Messaging.Client.ClientUtils.ParameterToString(grantType)); // form parameter + } + if (scope != null) + { + localVarRequestOptions.FormParameters.Add("scope", Telstra.Messaging.Client.ClientUtils.ParameterToString(scope)); // form parameter + } + + + // make the HTTP request + var localVarResponse = this.Client.Post< OAuthResponse >("/oauth/token", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("AuthToken", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Generate OAuth2 token To generate an OAuth2 Authentication token, pass through your `Client key` and `Client secret` that you received when you registered for the **API Free Trial** Product. The grant_type should be left as `client_credentials` and the scope as `NSMS`. The token will expire in one hour. + /// + /// Thrown when fails to make API call + /// + /// + /// + /// NSMS (optional) + /// Task of OAuthResponse + public async System.Threading.Tasks.Task AuthTokenAsync (string clientId, string clientSecret, string grantType, string scope = default(string)) + { + Telstra.Messaging.Client.ApiResponse localVarResponse = await AuthTokenAsyncWithHttpInfo(clientId, clientSecret, grantType, scope); + return localVarResponse.Data; + + } + + /// + /// Generate OAuth2 token To generate an OAuth2 Authentication token, pass through your `Client key` and `Client secret` that you received when you registered for the **API Free Trial** Product. The grant_type should be left as `client_credentials` and the scope as `NSMS`. The token will expire in one hour. + /// + /// Thrown when fails to make API call + /// + /// + /// + /// NSMS (optional) + /// Task of ApiResponse (OAuthResponse) + public async System.Threading.Tasks.Task> AuthTokenAsyncWithHttpInfo (string clientId, string clientSecret, string grantType, string scope = default(string)) + { + // verify the required parameter 'clientId' is set + if (clientId == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'clientId' when calling AuthenticationApi->AuthToken"); + + // verify the required parameter 'clientSecret' is set + if (clientSecret == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'clientSecret' when calling AuthenticationApi->AuthToken"); + + // verify the required parameter 'grantType' is set + if (grantType == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'grantType' when calling AuthenticationApi->AuthToken"); + + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + "application/x-www-form-urlencoded" + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + if (clientId != null) + { + localVarRequestOptions.FormParameters.Add("client_id", Telstra.Messaging.Client.ClientUtils.ParameterToString(clientId)); // form parameter + } + if (clientSecret != null) + { + localVarRequestOptions.FormParameters.Add("client_secret", Telstra.Messaging.Client.ClientUtils.ParameterToString(clientSecret)); // form parameter + } + if (grantType != null) + { + localVarRequestOptions.FormParameters.Add("grant_type", Telstra.Messaging.Client.ClientUtils.ParameterToString(grantType)); // form parameter + } + if (scope != null) + { + localVarRequestOptions.FormParameters.Add("scope", Telstra.Messaging.Client.ClientUtils.ParameterToString(scope)); // form parameter + } + + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.PostAsync("/oauth/token", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("AuthToken", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + } +} diff --git a/src/Telstra.Messaging/Api/MessagingApi.cs b/src/Telstra.Messaging/Api/MessagingApi.cs new file mode 100644 index 0000000..7dc1328 --- /dev/null +++ b/src/Telstra.Messaging/Api/MessagingApi.cs @@ -0,0 +1,1565 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net; +using System.Net.Mime; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; + +namespace Telstra.Messaging.Api +{ + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IMessagingApiSync : IApiAccessor + { + #region Synchronous Operations + /// + /// Get MMS Status + /// + /// + /// Get MMS Status + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/mms + /// List<OutboundPollResponse> + List GetMMSStatus (string messageid); + + /// + /// Get MMS Status + /// + /// + /// Get MMS Status + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/mms + /// ApiResponse of List<OutboundPollResponse> + ApiResponse> GetMMSStatusWithHttpInfo (string messageid); + /// + /// Get SMS Status + /// + /// + /// If no notification URL has been specified, it is possible to poll for the message status. Note that the `MessageId` that appears in the URL must be URL encoded. Just copying the `MessageId` as it was supplied when submitting the message may not work. # SMS Status with Notification URL When a message has reached its final state, the API will send a POST to the URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"sentTimestamp\": \"2017-03-17T10:05:22+10:00\", \"receivedTimestamp\": \"2017-03-17T10:05:23+10:00\", \"messageId\": \"1234567890ABCDEFGHIJKLNOPQRSTUVW\", \"deliveryStatus\": \"DELIVRD\" } </code></pre> The fields are: | Field | Description | | - -- | - --| | `to` | The number the message was sent to. | | `receivedTimestamp` | Time the message was sent to the API. | | `sentTimestamp` | Time handling of the message ended. | | `deliveryStatus` | The final state of the message. | | `messageId` | The same reference that was returned when the original message was sent.| | `receivedTimestamp` | Time the message was sent to the API.| Upon receiving this call it is expected that your servers will give a 204 (No Content) response. + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/sms. + /// List<OutboundPollResponse> + List GetSMSStatus (string messageId); + + /// + /// Get SMS Status + /// + /// + /// If no notification URL has been specified, it is possible to poll for the message status. Note that the `MessageId` that appears in the URL must be URL encoded. Just copying the `MessageId` as it was supplied when submitting the message may not work. # SMS Status with Notification URL When a message has reached its final state, the API will send a POST to the URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"sentTimestamp\": \"2017-03-17T10:05:22+10:00\", \"receivedTimestamp\": \"2017-03-17T10:05:23+10:00\", \"messageId\": \"1234567890ABCDEFGHIJKLNOPQRSTUVW\", \"deliveryStatus\": \"DELIVRD\" } </code></pre> The fields are: | Field | Description | | - -- | - --| | `to` | The number the message was sent to. | | `receivedTimestamp` | Time the message was sent to the API. | | `sentTimestamp` | Time handling of the message ended. | | `deliveryStatus` | The final state of the message. | | `messageId` | The same reference that was returned when the original message was sent.| | `receivedTimestamp` | Time the message was sent to the API.| Upon receiving this call it is expected that your servers will give a 204 (No Content) response. + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/sms. + /// ApiResponse of List<OutboundPollResponse> + ApiResponse> GetSMSStatusWithHttpInfo (string messageId); + /// + /// MMS Health Check + /// + /// + /// Determine whether the MMS service is up or down. + /// + /// Thrown when fails to make API call + /// HealthCheckResponse + HealthCheckResponse MMSHealthCheck (); + + /// + /// MMS Health Check + /// + /// + /// Determine whether the MMS service is up or down. + /// + /// Thrown when fails to make API call + /// ApiResponse of HealthCheckResponse + ApiResponse MMSHealthCheckWithHttpInfo (); + /// + /// Retrieve MMS Replies + /// + /// + /// Messages are retrieved one at a time, starting with the earliest reply. If the subscription has a `notifyURL`, reply messages will be logged there instead, i.e. `GET` and reply `notifyURL` are exclusive. # MMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"from\": \"+61421987654\", \"sentTimestamp\": \"2018-03-23T12:15:45+10:00\", \"messageId\": \"XFRO1ApiA0000000111\", \"subject\": \"Foo\", \"envelope\": \"string\", \"MMSContent\": [ { \"type\": \"text/plain\", \"filename\": \"text_1.txt\", \"payload\": \"string\" }, { \"type\": \"image/jpeg\", \"filename\": \"sample.jpeg\", \"payload\": \"string\" } ] }</code></pre> The fields are: | Field | Description | | - -- | - -- | | `to` |The number the message was sent to. | | `from` | The number the message was sent from. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | Message Id assigned by the MMSC | | `subject` | The subject assigned to the message. | | `envelope` | Information about about terminal type and originating operator. | | `MMSContent` | An array of the actual content of the reply message. | | `type` | The content type of the message. | | `filename` | The filename for the message content. | | `payload` | The content of the message. | + /// + /// Thrown when fails to make API call + /// GetMmsResponse + GetMmsResponse RetrieveMMSReplies (); + + /// + /// Retrieve MMS Replies + /// + /// + /// Messages are retrieved one at a time, starting with the earliest reply. If the subscription has a `notifyURL`, reply messages will be logged there instead, i.e. `GET` and reply `notifyURL` are exclusive. # MMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"from\": \"+61421987654\", \"sentTimestamp\": \"2018-03-23T12:15:45+10:00\", \"messageId\": \"XFRO1ApiA0000000111\", \"subject\": \"Foo\", \"envelope\": \"string\", \"MMSContent\": [ { \"type\": \"text/plain\", \"filename\": \"text_1.txt\", \"payload\": \"string\" }, { \"type\": \"image/jpeg\", \"filename\": \"sample.jpeg\", \"payload\": \"string\" } ] }</code></pre> The fields are: | Field | Description | | - -- | - -- | | `to` |The number the message was sent to. | | `from` | The number the message was sent from. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | Message Id assigned by the MMSC | | `subject` | The subject assigned to the message. | | `envelope` | Information about about terminal type and originating operator. | | `MMSContent` | An array of the actual content of the reply message. | | `type` | The content type of the message. | | `filename` | The filename for the message content. | | `payload` | The content of the message. | + /// + /// Thrown when fails to make API call + /// ApiResponse of GetMmsResponse + ApiResponse RetrieveMMSRepliesWithHttpInfo (); + /// + /// Retrieve SMS Replies + /// + /// + /// Messages are retrieved one at a time, starting with the earliest reply. The API supports the encoding of emojis in the reply message. The emojis will be in their UTF-8 format. If the subscription has a `notifyURL`, reply messages will be logged there instead. # SMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\":\"+61472880123\", \"from\":\"+61412345678\", \"body\":\"Foo4\", \"sentTimestamp\":\"2018-04-20T14:24:35\", \"messageId\":\"DMASApiA0000000146\" }</code></pre> The fields are: | Field | Description | | - -- |- -- | | `to` | The number the message was sent to. | | `from` | The number the message was sent from. | | `body` | The content of the SMS response. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | The ID assigned to the message. | + /// + /// Thrown when fails to make API call + /// InboundPollResponse + InboundPollResponse RetrieveSMSReplies (); + + /// + /// Retrieve SMS Replies + /// + /// + /// Messages are retrieved one at a time, starting with the earliest reply. The API supports the encoding of emojis in the reply message. The emojis will be in their UTF-8 format. If the subscription has a `notifyURL`, reply messages will be logged there instead. # SMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\":\"+61472880123\", \"from\":\"+61412345678\", \"body\":\"Foo4\", \"sentTimestamp\":\"2018-04-20T14:24:35\", \"messageId\":\"DMASApiA0000000146\" }</code></pre> The fields are: | Field | Description | | - -- |- -- | | `to` | The number the message was sent to. | | `from` | The number the message was sent from. | | `body` | The content of the SMS response. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | The ID assigned to the message. | + /// + /// Thrown when fails to make API call + /// ApiResponse of InboundPollResponse + ApiResponse RetrieveSMSRepliesWithHttpInfo (); + /// + /// SMS Health Check + /// + /// + /// Determine whether the SMS service is up or down. + /// + /// Thrown when fails to make API call + /// HealthCheckResponse + HealthCheckResponse SMSHealthCheck (); + + /// + /// SMS Health Check + /// + /// + /// Determine whether the SMS service is up or down. + /// + /// Thrown when fails to make API call + /// ApiResponse of HealthCheckResponse + ApiResponse SMSHealthCheckWithHttpInfo (); + /// + /// Send Multiple SMS + /// + /// + /// Send multiple SMS in one API call. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// MessageSentResponseSms + MessageSentResponseSms SMSMulti (SendSmsMultiRequest payload); + + /// + /// Send Multiple SMS + /// + /// + /// Send multiple SMS in one API call. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// ApiResponse of MessageSentResponseSms + ApiResponse SMSMultiWithHttpInfo (SendSmsMultiRequest payload); + /// + /// Send MMS + /// + /// + /// Send MMS + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and MMS message. The recipient number should be in the format '04xxxxxxxx' where x is a digit. + /// MessageSentResponseMms + MessageSentResponseMms SendMMS (SendMmsRequest body); + + /// + /// Send MMS + /// + /// + /// Send MMS + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and MMS message. The recipient number should be in the format '04xxxxxxxx' where x is a digit. + /// ApiResponse of MessageSentResponseMms + ApiResponse SendMMSWithHttpInfo (SendMmsRequest body); + /// + /// Send SMS + /// + /// + /// Send an SMS Message to a single or multiple mobile number/s. + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// MessageSentResponseSms + MessageSentResponseSms SendSMS (SendSMSRequest payload); + + /// + /// Send SMS + /// + /// + /// Send an SMS Message to a single or multiple mobile number/s. + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// ApiResponse of MessageSentResponseSms + ApiResponse SendSMSWithHttpInfo (SendSMSRequest payload); + #endregion Synchronous Operations + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IMessagingApiAsync : IApiAccessor + { + #region Asynchronous Operations + /// + /// Get MMS Status + /// + /// + /// Get MMS Status + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/mms + /// Task of List<OutboundPollResponse> + System.Threading.Tasks.Task> GetMMSStatusAsync (string messageid); + + /// + /// Get MMS Status + /// + /// + /// Get MMS Status + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/mms + /// Task of ApiResponse (List<OutboundPollResponse>) + System.Threading.Tasks.Task>> GetMMSStatusAsyncWithHttpInfo (string messageid); + /// + /// Get SMS Status + /// + /// + /// If no notification URL has been specified, it is possible to poll for the message status. Note that the `MessageId` that appears in the URL must be URL encoded. Just copying the `MessageId` as it was supplied when submitting the message may not work. # SMS Status with Notification URL When a message has reached its final state, the API will send a POST to the URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"sentTimestamp\": \"2017-03-17T10:05:22+10:00\", \"receivedTimestamp\": \"2017-03-17T10:05:23+10:00\", \"messageId\": \"1234567890ABCDEFGHIJKLNOPQRSTUVW\", \"deliveryStatus\": \"DELIVRD\" } </code></pre> The fields are: | Field | Description | | - -- | - --| | `to` | The number the message was sent to. | | `receivedTimestamp` | Time the message was sent to the API. | | `sentTimestamp` | Time handling of the message ended. | | `deliveryStatus` | The final state of the message. | | `messageId` | The same reference that was returned when the original message was sent.| | `receivedTimestamp` | Time the message was sent to the API.| Upon receiving this call it is expected that your servers will give a 204 (No Content) response. + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/sms. + /// Task of List<OutboundPollResponse> + System.Threading.Tasks.Task> GetSMSStatusAsync (string messageId); + + /// + /// Get SMS Status + /// + /// + /// If no notification URL has been specified, it is possible to poll for the message status. Note that the `MessageId` that appears in the URL must be URL encoded. Just copying the `MessageId` as it was supplied when submitting the message may not work. # SMS Status with Notification URL When a message has reached its final state, the API will send a POST to the URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"sentTimestamp\": \"2017-03-17T10:05:22+10:00\", \"receivedTimestamp\": \"2017-03-17T10:05:23+10:00\", \"messageId\": \"1234567890ABCDEFGHIJKLNOPQRSTUVW\", \"deliveryStatus\": \"DELIVRD\" } </code></pre> The fields are: | Field | Description | | - -- | - --| | `to` | The number the message was sent to. | | `receivedTimestamp` | Time the message was sent to the API. | | `sentTimestamp` | Time handling of the message ended. | | `deliveryStatus` | The final state of the message. | | `messageId` | The same reference that was returned when the original message was sent.| | `receivedTimestamp` | Time the message was sent to the API.| Upon receiving this call it is expected that your servers will give a 204 (No Content) response. + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/sms. + /// Task of ApiResponse (List<OutboundPollResponse>) + System.Threading.Tasks.Task>> GetSMSStatusAsyncWithHttpInfo (string messageId); + /// + /// MMS Health Check + /// + /// + /// Determine whether the MMS service is up or down. + /// + /// Thrown when fails to make API call + /// Task of HealthCheckResponse + System.Threading.Tasks.Task MMSHealthCheckAsync (); + + /// + /// MMS Health Check + /// + /// + /// Determine whether the MMS service is up or down. + /// + /// Thrown when fails to make API call + /// Task of ApiResponse (HealthCheckResponse) + System.Threading.Tasks.Task> MMSHealthCheckAsyncWithHttpInfo (); + /// + /// Retrieve MMS Replies + /// + /// + /// Messages are retrieved one at a time, starting with the earliest reply. If the subscription has a `notifyURL`, reply messages will be logged there instead, i.e. `GET` and reply `notifyURL` are exclusive. # MMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"from\": \"+61421987654\", \"sentTimestamp\": \"2018-03-23T12:15:45+10:00\", \"messageId\": \"XFRO1ApiA0000000111\", \"subject\": \"Foo\", \"envelope\": \"string\", \"MMSContent\": [ { \"type\": \"text/plain\", \"filename\": \"text_1.txt\", \"payload\": \"string\" }, { \"type\": \"image/jpeg\", \"filename\": \"sample.jpeg\", \"payload\": \"string\" } ] }</code></pre> The fields are: | Field | Description | | - -- | - -- | | `to` |The number the message was sent to. | | `from` | The number the message was sent from. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | Message Id assigned by the MMSC | | `subject` | The subject assigned to the message. | | `envelope` | Information about about terminal type and originating operator. | | `MMSContent` | An array of the actual content of the reply message. | | `type` | The content type of the message. | | `filename` | The filename for the message content. | | `payload` | The content of the message. | + /// + /// Thrown when fails to make API call + /// Task of GetMmsResponse + System.Threading.Tasks.Task RetrieveMMSRepliesAsync (); + + /// + /// Retrieve MMS Replies + /// + /// + /// Messages are retrieved one at a time, starting with the earliest reply. If the subscription has a `notifyURL`, reply messages will be logged there instead, i.e. `GET` and reply `notifyURL` are exclusive. # MMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"from\": \"+61421987654\", \"sentTimestamp\": \"2018-03-23T12:15:45+10:00\", \"messageId\": \"XFRO1ApiA0000000111\", \"subject\": \"Foo\", \"envelope\": \"string\", \"MMSContent\": [ { \"type\": \"text/plain\", \"filename\": \"text_1.txt\", \"payload\": \"string\" }, { \"type\": \"image/jpeg\", \"filename\": \"sample.jpeg\", \"payload\": \"string\" } ] }</code></pre> The fields are: | Field | Description | | - -- | - -- | | `to` |The number the message was sent to. | | `from` | The number the message was sent from. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | Message Id assigned by the MMSC | | `subject` | The subject assigned to the message. | | `envelope` | Information about about terminal type and originating operator. | | `MMSContent` | An array of the actual content of the reply message. | | `type` | The content type of the message. | | `filename` | The filename for the message content. | | `payload` | The content of the message. | + /// + /// Thrown when fails to make API call + /// Task of ApiResponse (GetMmsResponse) + System.Threading.Tasks.Task> RetrieveMMSRepliesAsyncWithHttpInfo (); + /// + /// Retrieve SMS Replies + /// + /// + /// Messages are retrieved one at a time, starting with the earliest reply. The API supports the encoding of emojis in the reply message. The emojis will be in their UTF-8 format. If the subscription has a `notifyURL`, reply messages will be logged there instead. # SMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\":\"+61472880123\", \"from\":\"+61412345678\", \"body\":\"Foo4\", \"sentTimestamp\":\"2018-04-20T14:24:35\", \"messageId\":\"DMASApiA0000000146\" }</code></pre> The fields are: | Field | Description | | - -- |- -- | | `to` | The number the message was sent to. | | `from` | The number the message was sent from. | | `body` | The content of the SMS response. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | The ID assigned to the message. | + /// + /// Thrown when fails to make API call + /// Task of InboundPollResponse + System.Threading.Tasks.Task RetrieveSMSRepliesAsync (); + + /// + /// Retrieve SMS Replies + /// + /// + /// Messages are retrieved one at a time, starting with the earliest reply. The API supports the encoding of emojis in the reply message. The emojis will be in their UTF-8 format. If the subscription has a `notifyURL`, reply messages will be logged there instead. # SMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\":\"+61472880123\", \"from\":\"+61412345678\", \"body\":\"Foo4\", \"sentTimestamp\":\"2018-04-20T14:24:35\", \"messageId\":\"DMASApiA0000000146\" }</code></pre> The fields are: | Field | Description | | - -- |- -- | | `to` | The number the message was sent to. | | `from` | The number the message was sent from. | | `body` | The content of the SMS response. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | The ID assigned to the message. | + /// + /// Thrown when fails to make API call + /// Task of ApiResponse (InboundPollResponse) + System.Threading.Tasks.Task> RetrieveSMSRepliesAsyncWithHttpInfo (); + /// + /// SMS Health Check + /// + /// + /// Determine whether the SMS service is up or down. + /// + /// Thrown when fails to make API call + /// Task of HealthCheckResponse + System.Threading.Tasks.Task SMSHealthCheckAsync (); + + /// + /// SMS Health Check + /// + /// + /// Determine whether the SMS service is up or down. + /// + /// Thrown when fails to make API call + /// Task of ApiResponse (HealthCheckResponse) + System.Threading.Tasks.Task> SMSHealthCheckAsyncWithHttpInfo (); + /// + /// Send Multiple SMS + /// + /// + /// Send multiple SMS in one API call. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// Task of MessageSentResponseSms + System.Threading.Tasks.Task SMSMultiAsync (SendSmsMultiRequest payload); + + /// + /// Send Multiple SMS + /// + /// + /// Send multiple SMS in one API call. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// Task of ApiResponse (MessageSentResponseSms) + System.Threading.Tasks.Task> SMSMultiAsyncWithHttpInfo (SendSmsMultiRequest payload); + /// + /// Send MMS + /// + /// + /// Send MMS + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and MMS message. The recipient number should be in the format '04xxxxxxxx' where x is a digit. + /// Task of MessageSentResponseMms + System.Threading.Tasks.Task SendMMSAsync (SendMmsRequest body); + + /// + /// Send MMS + /// + /// + /// Send MMS + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and MMS message. The recipient number should be in the format '04xxxxxxxx' where x is a digit. + /// Task of ApiResponse (MessageSentResponseMms) + System.Threading.Tasks.Task> SendMMSAsyncWithHttpInfo (SendMmsRequest body); + /// + /// Send SMS + /// + /// + /// Send an SMS Message to a single or multiple mobile number/s. + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// Task of MessageSentResponseSms + System.Threading.Tasks.Task SendSMSAsync (SendSMSRequest payload); + + /// + /// Send SMS + /// + /// + /// Send an SMS Message to a single or multiple mobile number/s. + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// Task of ApiResponse (MessageSentResponseSms) + System.Threading.Tasks.Task> SendSMSAsyncWithHttpInfo (SendSMSRequest payload); + #endregion Asynchronous Operations + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IMessagingApi : IMessagingApiSync, IMessagingApiAsync + { + + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public partial class MessagingApi : IMessagingApi + { + private Telstra.Messaging.Client.ExceptionFactory _exceptionFactory = (name, response) => null; + + /// + /// Initializes a new instance of the class. + /// + /// + public MessagingApi() : this((string) null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// + public MessagingApi(String basePath) + { + this.Configuration = Telstra.Messaging.Client.Configuration.MergeConfigurations( + Telstra.Messaging.Client.GlobalConfiguration.Instance, + new Telstra.Messaging.Client.Configuration { BasePath = basePath } + ); + this.Client = new Telstra.Messaging.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Telstra.Messaging.Client.ApiClient(this.Configuration.BasePath); + this.ExceptionFactory = Telstra.Messaging.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using Configuration object + /// + /// An instance of Configuration + /// + public MessagingApi(Telstra.Messaging.Client.Configuration configuration) + { + if (configuration == null) throw new ArgumentNullException("configuration"); + + this.Configuration = Telstra.Messaging.Client.Configuration.MergeConfigurations( + Telstra.Messaging.Client.GlobalConfiguration.Instance, + configuration + ); + this.Client = new Telstra.Messaging.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Telstra.Messaging.Client.ApiClient(this.Configuration.BasePath); + ExceptionFactory = Telstra.Messaging.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using a Configuration object and client instance. + /// + /// The client interface for synchronous API access. + /// The client interface for asynchronous API access. + /// The configuration object. + public MessagingApi(Telstra.Messaging.Client.ISynchronousClient client,Telstra.Messaging.Client.IAsynchronousClient asyncClient, Telstra.Messaging.Client.IReadableConfiguration configuration) + { + if(client == null) throw new ArgumentNullException("client"); + if(asyncClient == null) throw new ArgumentNullException("asyncClient"); + if(configuration == null) throw new ArgumentNullException("configuration"); + + this.Client = client; + this.AsynchronousClient = asyncClient; + this.Configuration = configuration; + this.ExceptionFactory = Telstra.Messaging.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// The client for accessing this underlying API asynchronously. + /// + public Telstra.Messaging.Client.IAsynchronousClient AsynchronousClient { get; set; } + + /// + /// The client for accessing this underlying API synchronously. + /// + public Telstra.Messaging.Client.ISynchronousClient Client { get; set; } + + /// + /// Gets the base path of the API client. + /// + /// The base path + public String GetBasePath() + { + return this.Configuration.BasePath; + } + + /// + /// Gets or sets the configuration object + /// + /// An instance of the Configuration + public Telstra.Messaging.Client.IReadableConfiguration Configuration {get; set;} + + /// + /// Provides a factory method hook for the creation of exceptions. + /// + public Telstra.Messaging.Client.ExceptionFactory ExceptionFactory + { + get + { + if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) + { + throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); + } + return _exceptionFactory; + } + set { _exceptionFactory = value; } + } + + /// + /// Get MMS Status Get MMS Status + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/mms + /// List<OutboundPollResponse> + public List GetMMSStatus (string messageid) + { + Telstra.Messaging.Client.ApiResponse> localVarResponse = GetMMSStatusWithHttpInfo(messageid); + return localVarResponse.Data; + } + + /// + /// Get MMS Status Get MMS Status + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/mms + /// ApiResponse of List<OutboundPollResponse> + public Telstra.Messaging.Client.ApiResponse< List > GetMMSStatusWithHttpInfo (string messageid) + { + // verify the required parameter 'messageid' is set + if (messageid == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'messageid' when calling MessagingApi->GetMMSStatus"); + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + if (messageid != null) + localVarRequestOptions.PathParameters.Add("messageid", Telstra.Messaging.Client.ClientUtils.ParameterToString(messageid)); // path parameter + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + var localVarResponse = this.Client.Get< List >("/messages/mms/{messageid}/status", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("GetMMSStatus", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Get MMS Status Get MMS Status + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/mms + /// Task of List<OutboundPollResponse> + public async System.Threading.Tasks.Task> GetMMSStatusAsync (string messageid) + { + Telstra.Messaging.Client.ApiResponse> localVarResponse = await GetMMSStatusAsyncWithHttpInfo(messageid); + return localVarResponse.Data; + + } + + /// + /// Get MMS Status Get MMS Status + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/mms + /// Task of ApiResponse (List<OutboundPollResponse>) + public async System.Threading.Tasks.Task>> GetMMSStatusAsyncWithHttpInfo (string messageid) + { + // verify the required parameter 'messageid' is set + if (messageid == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'messageid' when calling MessagingApi->GetMMSStatus"); + + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + if (messageid != null) + localVarRequestOptions.PathParameters.Add("messageid", Telstra.Messaging.Client.ClientUtils.ParameterToString(messageid)); // path parameter + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.GetAsync>("/messages/mms/{messageid}/status", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("GetMMSStatus", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Get SMS Status If no notification URL has been specified, it is possible to poll for the message status. Note that the `MessageId` that appears in the URL must be URL encoded. Just copying the `MessageId` as it was supplied when submitting the message may not work. # SMS Status with Notification URL When a message has reached its final state, the API will send a POST to the URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"sentTimestamp\": \"2017-03-17T10:05:22+10:00\", \"receivedTimestamp\": \"2017-03-17T10:05:23+10:00\", \"messageId\": \"1234567890ABCDEFGHIJKLNOPQRSTUVW\", \"deliveryStatus\": \"DELIVRD\" } </code></pre> The fields are: | Field | Description | | - -- | - --| | `to` | The number the message was sent to. | | `receivedTimestamp` | Time the message was sent to the API. | | `sentTimestamp` | Time handling of the message ended. | | `deliveryStatus` | The final state of the message. | | `messageId` | The same reference that was returned when the original message was sent.| | `receivedTimestamp` | Time the message was sent to the API.| Upon receiving this call it is expected that your servers will give a 204 (No Content) response. + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/sms. + /// List<OutboundPollResponse> + public List GetSMSStatus (string messageId) + { + Telstra.Messaging.Client.ApiResponse> localVarResponse = GetSMSStatusWithHttpInfo(messageId); + return localVarResponse.Data; + } + + /// + /// Get SMS Status If no notification URL has been specified, it is possible to poll for the message status. Note that the `MessageId` that appears in the URL must be URL encoded. Just copying the `MessageId` as it was supplied when submitting the message may not work. # SMS Status with Notification URL When a message has reached its final state, the API will send a POST to the URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"sentTimestamp\": \"2017-03-17T10:05:22+10:00\", \"receivedTimestamp\": \"2017-03-17T10:05:23+10:00\", \"messageId\": \"1234567890ABCDEFGHIJKLNOPQRSTUVW\", \"deliveryStatus\": \"DELIVRD\" } </code></pre> The fields are: | Field | Description | | - -- | - --| | `to` | The number the message was sent to. | | `receivedTimestamp` | Time the message was sent to the API. | | `sentTimestamp` | Time handling of the message ended. | | `deliveryStatus` | The final state of the message. | | `messageId` | The same reference that was returned when the original message was sent.| | `receivedTimestamp` | Time the message was sent to the API.| Upon receiving this call it is expected that your servers will give a 204 (No Content) response. + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/sms. + /// ApiResponse of List<OutboundPollResponse> + public Telstra.Messaging.Client.ApiResponse< List > GetSMSStatusWithHttpInfo (string messageId) + { + // verify the required parameter 'messageId' is set + if (messageId == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'messageId' when calling MessagingApi->GetSMSStatus"); + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + if (messageId != null) + localVarRequestOptions.PathParameters.Add("messageId", Telstra.Messaging.Client.ClientUtils.ParameterToString(messageId)); // path parameter + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + var localVarResponse = this.Client.Get< List >("/messages/sms/{messageId}/status", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("GetSMSStatus", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Get SMS Status If no notification URL has been specified, it is possible to poll for the message status. Note that the `MessageId` that appears in the URL must be URL encoded. Just copying the `MessageId` as it was supplied when submitting the message may not work. # SMS Status with Notification URL When a message has reached its final state, the API will send a POST to the URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"sentTimestamp\": \"2017-03-17T10:05:22+10:00\", \"receivedTimestamp\": \"2017-03-17T10:05:23+10:00\", \"messageId\": \"1234567890ABCDEFGHIJKLNOPQRSTUVW\", \"deliveryStatus\": \"DELIVRD\" } </code></pre> The fields are: | Field | Description | | - -- | - --| | `to` | The number the message was sent to. | | `receivedTimestamp` | Time the message was sent to the API. | | `sentTimestamp` | Time handling of the message ended. | | `deliveryStatus` | The final state of the message. | | `messageId` | The same reference that was returned when the original message was sent.| | `receivedTimestamp` | Time the message was sent to the API.| Upon receiving this call it is expected that your servers will give a 204 (No Content) response. + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/sms. + /// Task of List<OutboundPollResponse> + public async System.Threading.Tasks.Task> GetSMSStatusAsync (string messageId) + { + Telstra.Messaging.Client.ApiResponse> localVarResponse = await GetSMSStatusAsyncWithHttpInfo(messageId); + return localVarResponse.Data; + + } + + /// + /// Get SMS Status If no notification URL has been specified, it is possible to poll for the message status. Note that the `MessageId` that appears in the URL must be URL encoded. Just copying the `MessageId` as it was supplied when submitting the message may not work. # SMS Status with Notification URL When a message has reached its final state, the API will send a POST to the URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"sentTimestamp\": \"2017-03-17T10:05:22+10:00\", \"receivedTimestamp\": \"2017-03-17T10:05:23+10:00\", \"messageId\": \"1234567890ABCDEFGHIJKLNOPQRSTUVW\", \"deliveryStatus\": \"DELIVRD\" } </code></pre> The fields are: | Field | Description | | - -- | - --| | `to` | The number the message was sent to. | | `receivedTimestamp` | Time the message was sent to the API. | | `sentTimestamp` | Time handling of the message ended. | | `deliveryStatus` | The final state of the message. | | `messageId` | The same reference that was returned when the original message was sent.| | `receivedTimestamp` | Time the message was sent to the API.| Upon receiving this call it is expected that your servers will give a 204 (No Content) response. + /// + /// Thrown when fails to make API call + /// Unique identifier of a message - it is the value returned from a previous POST call to https://tapi.telstra.com/v2/messages/sms. + /// Task of ApiResponse (List<OutboundPollResponse>) + public async System.Threading.Tasks.Task>> GetSMSStatusAsyncWithHttpInfo (string messageId) + { + // verify the required parameter 'messageId' is set + if (messageId == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'messageId' when calling MessagingApi->GetSMSStatus"); + + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + if (messageId != null) + localVarRequestOptions.PathParameters.Add("messageId", Telstra.Messaging.Client.ClientUtils.ParameterToString(messageId)); // path parameter + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.GetAsync>("/messages/sms/{messageId}/status", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("GetSMSStatus", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// MMS Health Check Determine whether the MMS service is up or down. + /// + /// Thrown when fails to make API call + /// HealthCheckResponse + public HealthCheckResponse MMSHealthCheck () + { + Telstra.Messaging.Client.ApiResponse localVarResponse = MMSHealthCheckWithHttpInfo(); + return localVarResponse.Data; + } + + /// + /// MMS Health Check Determine whether the MMS service is up or down. + /// + /// Thrown when fails to make API call + /// ApiResponse of HealthCheckResponse + public Telstra.Messaging.Client.ApiResponse< HealthCheckResponse > MMSHealthCheckWithHttpInfo () + { + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + + + // make the HTTP request + var localVarResponse = this.Client.Get< HealthCheckResponse >("/messages/mms/heathcheck", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("MMSHealthCheck", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// MMS Health Check Determine whether the MMS service is up or down. + /// + /// Thrown when fails to make API call + /// Task of HealthCheckResponse + public async System.Threading.Tasks.Task MMSHealthCheckAsync () + { + Telstra.Messaging.Client.ApiResponse localVarResponse = await MMSHealthCheckAsyncWithHttpInfo(); + return localVarResponse.Data; + + } + + /// + /// MMS Health Check Determine whether the MMS service is up or down. + /// + /// Thrown when fails to make API call + /// Task of ApiResponse (HealthCheckResponse) + public async System.Threading.Tasks.Task> MMSHealthCheckAsyncWithHttpInfo () + { + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.GetAsync("/messages/mms/heathcheck", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("MMSHealthCheck", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Retrieve MMS Replies Messages are retrieved one at a time, starting with the earliest reply. If the subscription has a `notifyURL`, reply messages will be logged there instead, i.e. `GET` and reply `notifyURL` are exclusive. # MMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"from\": \"+61421987654\", \"sentTimestamp\": \"2018-03-23T12:15:45+10:00\", \"messageId\": \"XFRO1ApiA0000000111\", \"subject\": \"Foo\", \"envelope\": \"string\", \"MMSContent\": [ { \"type\": \"text/plain\", \"filename\": \"text_1.txt\", \"payload\": \"string\" }, { \"type\": \"image/jpeg\", \"filename\": \"sample.jpeg\", \"payload\": \"string\" } ] }</code></pre> The fields are: | Field | Description | | - -- | - -- | | `to` |The number the message was sent to. | | `from` | The number the message was sent from. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | Message Id assigned by the MMSC | | `subject` | The subject assigned to the message. | | `envelope` | Information about about terminal type and originating operator. | | `MMSContent` | An array of the actual content of the reply message. | | `type` | The content type of the message. | | `filename` | The filename for the message content. | | `payload` | The content of the message. | + /// + /// Thrown when fails to make API call + /// GetMmsResponse + public GetMmsResponse RetrieveMMSReplies () + { + Telstra.Messaging.Client.ApiResponse localVarResponse = RetrieveMMSRepliesWithHttpInfo(); + return localVarResponse.Data; + } + + /// + /// Retrieve MMS Replies Messages are retrieved one at a time, starting with the earliest reply. If the subscription has a `notifyURL`, reply messages will be logged there instead, i.e. `GET` and reply `notifyURL` are exclusive. # MMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"from\": \"+61421987654\", \"sentTimestamp\": \"2018-03-23T12:15:45+10:00\", \"messageId\": \"XFRO1ApiA0000000111\", \"subject\": \"Foo\", \"envelope\": \"string\", \"MMSContent\": [ { \"type\": \"text/plain\", \"filename\": \"text_1.txt\", \"payload\": \"string\" }, { \"type\": \"image/jpeg\", \"filename\": \"sample.jpeg\", \"payload\": \"string\" } ] }</code></pre> The fields are: | Field | Description | | - -- | - -- | | `to` |The number the message was sent to. | | `from` | The number the message was sent from. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | Message Id assigned by the MMSC | | `subject` | The subject assigned to the message. | | `envelope` | Information about about terminal type and originating operator. | | `MMSContent` | An array of the actual content of the reply message. | | `type` | The content type of the message. | | `filename` | The filename for the message content. | | `payload` | The content of the message. | + /// + /// Thrown when fails to make API call + /// ApiResponse of GetMmsResponse + public Telstra.Messaging.Client.ApiResponse< GetMmsResponse > RetrieveMMSRepliesWithHttpInfo () + { + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + var localVarResponse = this.Client.Get< GetMmsResponse >("/messages/mms", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("RetrieveMMSReplies", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Retrieve MMS Replies Messages are retrieved one at a time, starting with the earliest reply. If the subscription has a `notifyURL`, reply messages will be logged there instead, i.e. `GET` and reply `notifyURL` are exclusive. # MMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"from\": \"+61421987654\", \"sentTimestamp\": \"2018-03-23T12:15:45+10:00\", \"messageId\": \"XFRO1ApiA0000000111\", \"subject\": \"Foo\", \"envelope\": \"string\", \"MMSContent\": [ { \"type\": \"text/plain\", \"filename\": \"text_1.txt\", \"payload\": \"string\" }, { \"type\": \"image/jpeg\", \"filename\": \"sample.jpeg\", \"payload\": \"string\" } ] }</code></pre> The fields are: | Field | Description | | - -- | - -- | | `to` |The number the message was sent to. | | `from` | The number the message was sent from. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | Message Id assigned by the MMSC | | `subject` | The subject assigned to the message. | | `envelope` | Information about about terminal type and originating operator. | | `MMSContent` | An array of the actual content of the reply message. | | `type` | The content type of the message. | | `filename` | The filename for the message content. | | `payload` | The content of the message. | + /// + /// Thrown when fails to make API call + /// Task of GetMmsResponse + public async System.Threading.Tasks.Task RetrieveMMSRepliesAsync () + { + Telstra.Messaging.Client.ApiResponse localVarResponse = await RetrieveMMSRepliesAsyncWithHttpInfo(); + return localVarResponse.Data; + + } + + /// + /// Retrieve MMS Replies Messages are retrieved one at a time, starting with the earliest reply. If the subscription has a `notifyURL`, reply messages will be logged there instead, i.e. `GET` and reply `notifyURL` are exclusive. # MMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\": \"+61418123456\", \"from\": \"+61421987654\", \"sentTimestamp\": \"2018-03-23T12:15:45+10:00\", \"messageId\": \"XFRO1ApiA0000000111\", \"subject\": \"Foo\", \"envelope\": \"string\", \"MMSContent\": [ { \"type\": \"text/plain\", \"filename\": \"text_1.txt\", \"payload\": \"string\" }, { \"type\": \"image/jpeg\", \"filename\": \"sample.jpeg\", \"payload\": \"string\" } ] }</code></pre> The fields are: | Field | Description | | - -- | - -- | | `to` |The number the message was sent to. | | `from` | The number the message was sent from. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | Message Id assigned by the MMSC | | `subject` | The subject assigned to the message. | | `envelope` | Information about about terminal type and originating operator. | | `MMSContent` | An array of the actual content of the reply message. | | `type` | The content type of the message. | | `filename` | The filename for the message content. | | `payload` | The content of the message. | + /// + /// Thrown when fails to make API call + /// Task of ApiResponse (GetMmsResponse) + public async System.Threading.Tasks.Task> RetrieveMMSRepliesAsyncWithHttpInfo () + { + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.GetAsync("/messages/mms", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("RetrieveMMSReplies", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Retrieve SMS Replies Messages are retrieved one at a time, starting with the earliest reply. The API supports the encoding of emojis in the reply message. The emojis will be in their UTF-8 format. If the subscription has a `notifyURL`, reply messages will be logged there instead. # SMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\":\"+61472880123\", \"from\":\"+61412345678\", \"body\":\"Foo4\", \"sentTimestamp\":\"2018-04-20T14:24:35\", \"messageId\":\"DMASApiA0000000146\" }</code></pre> The fields are: | Field | Description | | - -- |- -- | | `to` | The number the message was sent to. | | `from` | The number the message was sent from. | | `body` | The content of the SMS response. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | The ID assigned to the message. | + /// + /// Thrown when fails to make API call + /// InboundPollResponse + public InboundPollResponse RetrieveSMSReplies () + { + Telstra.Messaging.Client.ApiResponse localVarResponse = RetrieveSMSRepliesWithHttpInfo(); + return localVarResponse.Data; + } + + /// + /// Retrieve SMS Replies Messages are retrieved one at a time, starting with the earliest reply. The API supports the encoding of emojis in the reply message. The emojis will be in their UTF-8 format. If the subscription has a `notifyURL`, reply messages will be logged there instead. # SMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\":\"+61472880123\", \"from\":\"+61412345678\", \"body\":\"Foo4\", \"sentTimestamp\":\"2018-04-20T14:24:35\", \"messageId\":\"DMASApiA0000000146\" }</code></pre> The fields are: | Field | Description | | - -- |- -- | | `to` | The number the message was sent to. | | `from` | The number the message was sent from. | | `body` | The content of the SMS response. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | The ID assigned to the message. | + /// + /// Thrown when fails to make API call + /// ApiResponse of InboundPollResponse + public Telstra.Messaging.Client.ApiResponse< InboundPollResponse > RetrieveSMSRepliesWithHttpInfo () + { + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + var localVarResponse = this.Client.Get< InboundPollResponse >("/messages/sms", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("RetrieveSMSReplies", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Retrieve SMS Replies Messages are retrieved one at a time, starting with the earliest reply. The API supports the encoding of emojis in the reply message. The emojis will be in their UTF-8 format. If the subscription has a `notifyURL`, reply messages will be logged there instead. # SMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\":\"+61472880123\", \"from\":\"+61412345678\", \"body\":\"Foo4\", \"sentTimestamp\":\"2018-04-20T14:24:35\", \"messageId\":\"DMASApiA0000000146\" }</code></pre> The fields are: | Field | Description | | - -- |- -- | | `to` | The number the message was sent to. | | `from` | The number the message was sent from. | | `body` | The content of the SMS response. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | The ID assigned to the message. | + /// + /// Thrown when fails to make API call + /// Task of InboundPollResponse + public async System.Threading.Tasks.Task RetrieveSMSRepliesAsync () + { + Telstra.Messaging.Client.ApiResponse localVarResponse = await RetrieveSMSRepliesAsyncWithHttpInfo(); + return localVarResponse.Data; + + } + + /// + /// Retrieve SMS Replies Messages are retrieved one at a time, starting with the earliest reply. The API supports the encoding of emojis in the reply message. The emojis will be in their UTF-8 format. If the subscription has a `notifyURL`, reply messages will be logged there instead. # SMS Reply with Notification URL When a reply is received, the API will send a POST to the subscription URL that has been previously specified. <pre><code class=\"language-sh\">{ \"to\":\"+61472880123\", \"from\":\"+61412345678\", \"body\":\"Foo4\", \"sentTimestamp\":\"2018-04-20T14:24:35\", \"messageId\":\"DMASApiA0000000146\" }</code></pre> The fields are: | Field | Description | | - -- |- -- | | `to` | The number the message was sent to. | | `from` | The number the message was sent from. | | `body` | The content of the SMS response. | | `sentTimestamp` | Time handling of the message ended. | | `messageId` | The ID assigned to the message. | + /// + /// Thrown when fails to make API call + /// Task of ApiResponse (InboundPollResponse) + public async System.Threading.Tasks.Task> RetrieveSMSRepliesAsyncWithHttpInfo () + { + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.GetAsync("/messages/sms", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("RetrieveSMSReplies", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// SMS Health Check Determine whether the SMS service is up or down. + /// + /// Thrown when fails to make API call + /// HealthCheckResponse + public HealthCheckResponse SMSHealthCheck () + { + Telstra.Messaging.Client.ApiResponse localVarResponse = SMSHealthCheckWithHttpInfo(); + return localVarResponse.Data; + } + + /// + /// SMS Health Check Determine whether the SMS service is up or down. + /// + /// Thrown when fails to make API call + /// ApiResponse of HealthCheckResponse + public Telstra.Messaging.Client.ApiResponse< HealthCheckResponse > SMSHealthCheckWithHttpInfo () + { + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + + + // make the HTTP request + var localVarResponse = this.Client.Get< HealthCheckResponse >("/messages/sms/heathcheck", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("SMSHealthCheck", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// SMS Health Check Determine whether the SMS service is up or down. + /// + /// Thrown when fails to make API call + /// Task of HealthCheckResponse + public async System.Threading.Tasks.Task SMSHealthCheckAsync () + { + Telstra.Messaging.Client.ApiResponse localVarResponse = await SMSHealthCheckAsyncWithHttpInfo(); + return localVarResponse.Data; + + } + + /// + /// SMS Health Check Determine whether the SMS service is up or down. + /// + /// Thrown when fails to make API call + /// Task of ApiResponse (HealthCheckResponse) + public async System.Threading.Tasks.Task> SMSHealthCheckAsyncWithHttpInfo () + { + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.GetAsync("/messages/sms/heathcheck", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("SMSHealthCheck", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Send Multiple SMS Send multiple SMS in one API call. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// MessageSentResponseSms + public MessageSentResponseSms SMSMulti (SendSmsMultiRequest payload) + { + Telstra.Messaging.Client.ApiResponse localVarResponse = SMSMultiWithHttpInfo(payload); + return localVarResponse.Data; + } + + /// + /// Send Multiple SMS Send multiple SMS in one API call. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// ApiResponse of MessageSentResponseSms + public Telstra.Messaging.Client.ApiResponse< MessageSentResponseSms > SMSMultiWithHttpInfo (SendSmsMultiRequest payload) + { + // verify the required parameter 'payload' is set + if (payload == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'payload' when calling MessagingApi->SMSMulti"); + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + localVarRequestOptions.Data = payload; + + + // make the HTTP request + var localVarResponse = this.Client.Post< MessageSentResponseSms >("/messages/sms/multi", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("SMSMulti", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Send Multiple SMS Send multiple SMS in one API call. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// Task of MessageSentResponseSms + public async System.Threading.Tasks.Task SMSMultiAsync (SendSmsMultiRequest payload) + { + Telstra.Messaging.Client.ApiResponse localVarResponse = await SMSMultiAsyncWithHttpInfo(payload); + return localVarResponse.Data; + + } + + /// + /// Send Multiple SMS Send multiple SMS in one API call. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// Task of ApiResponse (MessageSentResponseSms) + public async System.Threading.Tasks.Task> SMSMultiAsyncWithHttpInfo (SendSmsMultiRequest payload) + { + // verify the required parameter 'payload' is set + if (payload == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'payload' when calling MessagingApi->SMSMulti"); + + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + localVarRequestOptions.Data = payload; + + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.PostAsync("/messages/sms/multi", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("SMSMulti", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Send MMS Send MMS + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and MMS message. The recipient number should be in the format '04xxxxxxxx' where x is a digit. + /// MessageSentResponseMms + public MessageSentResponseMms SendMMS (SendMmsRequest body) + { + Telstra.Messaging.Client.ApiResponse localVarResponse = SendMMSWithHttpInfo(body); + return localVarResponse.Data; + } + + /// + /// Send MMS Send MMS + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and MMS message. The recipient number should be in the format '04xxxxxxxx' where x is a digit. + /// ApiResponse of MessageSentResponseMms + public Telstra.Messaging.Client.ApiResponse< MessageSentResponseMms > SendMMSWithHttpInfo (SendMmsRequest body) + { + // verify the required parameter 'body' is set + if (body == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'body' when calling MessagingApi->SendMMS"); + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + localVarRequestOptions.Data = body; + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + var localVarResponse = this.Client.Post< MessageSentResponseMms >("/messages/mms", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("SendMMS", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Send MMS Send MMS + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and MMS message. The recipient number should be in the format '04xxxxxxxx' where x is a digit. + /// Task of MessageSentResponseMms + public async System.Threading.Tasks.Task SendMMSAsync (SendMmsRequest body) + { + Telstra.Messaging.Client.ApiResponse localVarResponse = await SendMMSAsyncWithHttpInfo(body); + return localVarResponse.Data; + + } + + /// + /// Send MMS Send MMS + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and MMS message. The recipient number should be in the format '04xxxxxxxx' where x is a digit. + /// Task of ApiResponse (MessageSentResponseMms) + public async System.Threading.Tasks.Task> SendMMSAsyncWithHttpInfo (SendMmsRequest body) + { + // verify the required parameter 'body' is set + if (body == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'body' when calling MessagingApi->SendMMS"); + + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + localVarRequestOptions.Data = body; + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.PostAsync("/messages/mms", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("SendMMS", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Send SMS Send an SMS Message to a single or multiple mobile number/s. + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// MessageSentResponseSms + public MessageSentResponseSms SendSMS (SendSMSRequest payload) + { + Telstra.Messaging.Client.ApiResponse localVarResponse = SendSMSWithHttpInfo(payload); + return localVarResponse.Data; + } + + /// + /// Send SMS Send an SMS Message to a single or multiple mobile number/s. + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// ApiResponse of MessageSentResponseSms + public Telstra.Messaging.Client.ApiResponse< MessageSentResponseSms > SendSMSWithHttpInfo (SendSMSRequest payload) + { + // verify the required parameter 'payload' is set + if (payload == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'payload' when calling MessagingApi->SendSMS"); + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + localVarRequestOptions.Data = payload; + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + var localVarResponse = this.Client.Post< MessageSentResponseSms >("/messages/sms", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("SendSMS", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Send SMS Send an SMS Message to a single or multiple mobile number/s. + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// Task of MessageSentResponseSms + public async System.Threading.Tasks.Task SendSMSAsync (SendSMSRequest payload) + { + Telstra.Messaging.Client.ApiResponse localVarResponse = await SendSMSAsyncWithHttpInfo(payload); + return localVarResponse.Data; + + } + + /// + /// Send SMS Send an SMS Message to a single or multiple mobile number/s. + /// + /// Thrown when fails to make API call + /// A JSON or XML payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. + /// Task of ApiResponse (MessageSentResponseSms) + public async System.Threading.Tasks.Task> SendSMSAsyncWithHttpInfo (SendSMSRequest payload) + { + // verify the required parameter 'payload' is set + if (payload == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'payload' when calling MessagingApi->SendSMS"); + + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + localVarRequestOptions.Data = payload; + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.PostAsync("/messages/sms", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("SendSMS", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + } +} diff --git a/src/Telstra.Messaging/Api/ProvisioningApi.cs b/src/Telstra.Messaging/Api/ProvisioningApi.cs new file mode 100644 index 0000000..dadb31a --- /dev/null +++ b/src/Telstra.Messaging/Api/ProvisioningApi.cs @@ -0,0 +1,643 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Net; +using System.Net.Mime; +using Telstra.Messaging.Client; +using Telstra.Messaging.Model; + +namespace Telstra.Messaging.Api +{ + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IProvisioningApiSync : IApiAccessor + { + #region Synchronous Operations + /// + /// Create Subscription + /// + /// + /// Invoke the provisioning API to get a dedicated mobile number for an account or application. Note that Free Trial apps will have a 30-Day Limit for their provisioned number. If the Provisioning call is made several times within that 30-Day period, it will return the `expiryDate` in the Unix format and will not add any activeDays until after that `expiryDate`. After the `expiryDate`, you may make another Provisioning call to extend the activeDays by another 30-Days. For paid apps, a provisioned number can be allotted for a maximum of 5 years. If a Provisioning call is made which will result to activeDays > 1825, a 409 `Active Days Max` response will be returned to indicate that the provisioned number is already valid for more than 5 years and that no update to activeDays has been made. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the required attributes + /// ProvisionNumberResponse + ProvisionNumberResponse CreateSubscription (ProvisionNumberRequest body); + + /// + /// Create Subscription + /// + /// + /// Invoke the provisioning API to get a dedicated mobile number for an account or application. Note that Free Trial apps will have a 30-Day Limit for their provisioned number. If the Provisioning call is made several times within that 30-Day period, it will return the `expiryDate` in the Unix format and will not add any activeDays until after that `expiryDate`. After the `expiryDate`, you may make another Provisioning call to extend the activeDays by another 30-Days. For paid apps, a provisioned number can be allotted for a maximum of 5 years. If a Provisioning call is made which will result to activeDays > 1825, a 409 `Active Days Max` response will be returned to indicate that the provisioned number is already valid for more than 5 years and that no update to activeDays has been made. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the required attributes + /// ApiResponse of ProvisionNumberResponse + ApiResponse CreateSubscriptionWithHttpInfo (ProvisionNumberRequest body); + /// + /// Delete Subscription + /// + /// + /// Delete a mobile number subscription from an account + /// + /// Thrown when fails to make API call + /// EmptyArr + /// + void DeleteSubscription (DeleteNumberRequest body); + + /// + /// Delete Subscription + /// + /// + /// Delete a mobile number subscription from an account + /// + /// Thrown when fails to make API call + /// EmptyArr + /// ApiResponse of Object(void) + ApiResponse DeleteSubscriptionWithHttpInfo (DeleteNumberRequest body); + /// + /// Get Subscription + /// + /// + /// Get mobile number subscription for an account + /// + /// Thrown when fails to make API call + /// GetSubscriptionResponse + GetSubscriptionResponse GetSubscription (); + + /// + /// Get Subscription + /// + /// + /// Get mobile number subscription for an account + /// + /// Thrown when fails to make API call + /// ApiResponse of GetSubscriptionResponse + ApiResponse GetSubscriptionWithHttpInfo (); + #endregion Synchronous Operations + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IProvisioningApiAsync : IApiAccessor + { + #region Asynchronous Operations + /// + /// Create Subscription + /// + /// + /// Invoke the provisioning API to get a dedicated mobile number for an account or application. Note that Free Trial apps will have a 30-Day Limit for their provisioned number. If the Provisioning call is made several times within that 30-Day period, it will return the `expiryDate` in the Unix format and will not add any activeDays until after that `expiryDate`. After the `expiryDate`, you may make another Provisioning call to extend the activeDays by another 30-Days. For paid apps, a provisioned number can be allotted for a maximum of 5 years. If a Provisioning call is made which will result to activeDays > 1825, a 409 `Active Days Max` response will be returned to indicate that the provisioned number is already valid for more than 5 years and that no update to activeDays has been made. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the required attributes + /// Task of ProvisionNumberResponse + System.Threading.Tasks.Task CreateSubscriptionAsync (ProvisionNumberRequest body); + + /// + /// Create Subscription + /// + /// + /// Invoke the provisioning API to get a dedicated mobile number for an account or application. Note that Free Trial apps will have a 30-Day Limit for their provisioned number. If the Provisioning call is made several times within that 30-Day period, it will return the `expiryDate` in the Unix format and will not add any activeDays until after that `expiryDate`. After the `expiryDate`, you may make another Provisioning call to extend the activeDays by another 30-Days. For paid apps, a provisioned number can be allotted for a maximum of 5 years. If a Provisioning call is made which will result to activeDays > 1825, a 409 `Active Days Max` response will be returned to indicate that the provisioned number is already valid for more than 5 years and that no update to activeDays has been made. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the required attributes + /// Task of ApiResponse (ProvisionNumberResponse) + System.Threading.Tasks.Task> CreateSubscriptionAsyncWithHttpInfo (ProvisionNumberRequest body); + /// + /// Delete Subscription + /// + /// + /// Delete a mobile number subscription from an account + /// + /// Thrown when fails to make API call + /// EmptyArr + /// Task of void + System.Threading.Tasks.Task DeleteSubscriptionAsync (DeleteNumberRequest body); + + /// + /// Delete Subscription + /// + /// + /// Delete a mobile number subscription from an account + /// + /// Thrown when fails to make API call + /// EmptyArr + /// Task of ApiResponse + System.Threading.Tasks.Task> DeleteSubscriptionAsyncWithHttpInfo (DeleteNumberRequest body); + /// + /// Get Subscription + /// + /// + /// Get mobile number subscription for an account + /// + /// Thrown when fails to make API call + /// Task of GetSubscriptionResponse + System.Threading.Tasks.Task GetSubscriptionAsync (); + + /// + /// Get Subscription + /// + /// + /// Get mobile number subscription for an account + /// + /// Thrown when fails to make API call + /// Task of ApiResponse (GetSubscriptionResponse) + System.Threading.Tasks.Task> GetSubscriptionAsyncWithHttpInfo (); + #endregion Asynchronous Operations + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public interface IProvisioningApi : IProvisioningApiSync, IProvisioningApiAsync + { + + } + + /// + /// Represents a collection of functions to interact with the API endpoints + /// + public partial class ProvisioningApi : IProvisioningApi + { + private Telstra.Messaging.Client.ExceptionFactory _exceptionFactory = (name, response) => null; + + /// + /// Initializes a new instance of the class. + /// + /// + public ProvisioningApi() : this((string) null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// + public ProvisioningApi(String basePath) + { + this.Configuration = Telstra.Messaging.Client.Configuration.MergeConfigurations( + Telstra.Messaging.Client.GlobalConfiguration.Instance, + new Telstra.Messaging.Client.Configuration { BasePath = basePath } + ); + this.Client = new Telstra.Messaging.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Telstra.Messaging.Client.ApiClient(this.Configuration.BasePath); + this.ExceptionFactory = Telstra.Messaging.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using Configuration object + /// + /// An instance of Configuration + /// + public ProvisioningApi(Telstra.Messaging.Client.Configuration configuration) + { + if (configuration == null) throw new ArgumentNullException("configuration"); + + this.Configuration = Telstra.Messaging.Client.Configuration.MergeConfigurations( + Telstra.Messaging.Client.GlobalConfiguration.Instance, + configuration + ); + this.Client = new Telstra.Messaging.Client.ApiClient(this.Configuration.BasePath); + this.AsynchronousClient = new Telstra.Messaging.Client.ApiClient(this.Configuration.BasePath); + ExceptionFactory = Telstra.Messaging.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// Initializes a new instance of the class + /// using a Configuration object and client instance. + /// + /// The client interface for synchronous API access. + /// The client interface for asynchronous API access. + /// The configuration object. + public ProvisioningApi(Telstra.Messaging.Client.ISynchronousClient client,Telstra.Messaging.Client.IAsynchronousClient asyncClient, Telstra.Messaging.Client.IReadableConfiguration configuration) + { + if(client == null) throw new ArgumentNullException("client"); + if(asyncClient == null) throw new ArgumentNullException("asyncClient"); + if(configuration == null) throw new ArgumentNullException("configuration"); + + this.Client = client; + this.AsynchronousClient = asyncClient; + this.Configuration = configuration; + this.ExceptionFactory = Telstra.Messaging.Client.Configuration.DefaultExceptionFactory; + } + + /// + /// The client for accessing this underlying API asynchronously. + /// + public Telstra.Messaging.Client.IAsynchronousClient AsynchronousClient { get; set; } + + /// + /// The client for accessing this underlying API synchronously. + /// + public Telstra.Messaging.Client.ISynchronousClient Client { get; set; } + + /// + /// Gets the base path of the API client. + /// + /// The base path + public String GetBasePath() + { + return this.Configuration.BasePath; + } + + /// + /// Gets or sets the configuration object + /// + /// An instance of the Configuration + public Telstra.Messaging.Client.IReadableConfiguration Configuration {get; set;} + + /// + /// Provides a factory method hook for the creation of exceptions. + /// + public Telstra.Messaging.Client.ExceptionFactory ExceptionFactory + { + get + { + if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) + { + throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); + } + return _exceptionFactory; + } + set { _exceptionFactory = value; } + } + + /// + /// Create Subscription Invoke the provisioning API to get a dedicated mobile number for an account or application. Note that Free Trial apps will have a 30-Day Limit for their provisioned number. If the Provisioning call is made several times within that 30-Day period, it will return the `expiryDate` in the Unix format and will not add any activeDays until after that `expiryDate`. After the `expiryDate`, you may make another Provisioning call to extend the activeDays by another 30-Days. For paid apps, a provisioned number can be allotted for a maximum of 5 years. If a Provisioning call is made which will result to activeDays > 1825, a 409 `Active Days Max` response will be returned to indicate that the provisioned number is already valid for more than 5 years and that no update to activeDays has been made. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the required attributes + /// ProvisionNumberResponse + public ProvisionNumberResponse CreateSubscription (ProvisionNumberRequest body) + { + Telstra.Messaging.Client.ApiResponse localVarResponse = CreateSubscriptionWithHttpInfo(body); + return localVarResponse.Data; + } + + /// + /// Create Subscription Invoke the provisioning API to get a dedicated mobile number for an account or application. Note that Free Trial apps will have a 30-Day Limit for their provisioned number. If the Provisioning call is made several times within that 30-Day period, it will return the `expiryDate` in the Unix format and will not add any activeDays until after that `expiryDate`. After the `expiryDate`, you may make another Provisioning call to extend the activeDays by another 30-Days. For paid apps, a provisioned number can be allotted for a maximum of 5 years. If a Provisioning call is made which will result to activeDays > 1825, a 409 `Active Days Max` response will be returned to indicate that the provisioned number is already valid for more than 5 years and that no update to activeDays has been made. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the required attributes + /// ApiResponse of ProvisionNumberResponse + public Telstra.Messaging.Client.ApiResponse< ProvisionNumberResponse > CreateSubscriptionWithHttpInfo (ProvisionNumberRequest body) + { + // verify the required parameter 'body' is set + if (body == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'body' when calling ProvisioningApi->CreateSubscription"); + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + localVarRequestOptions.Data = body; + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + var localVarResponse = this.Client.Post< ProvisionNumberResponse >("/messages/provisioning/subscriptions", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("CreateSubscription", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Create Subscription Invoke the provisioning API to get a dedicated mobile number for an account or application. Note that Free Trial apps will have a 30-Day Limit for their provisioned number. If the Provisioning call is made several times within that 30-Day period, it will return the `expiryDate` in the Unix format and will not add any activeDays until after that `expiryDate`. After the `expiryDate`, you may make another Provisioning call to extend the activeDays by another 30-Days. For paid apps, a provisioned number can be allotted for a maximum of 5 years. If a Provisioning call is made which will result to activeDays > 1825, a 409 `Active Days Max` response will be returned to indicate that the provisioned number is already valid for more than 5 years and that no update to activeDays has been made. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the required attributes + /// Task of ProvisionNumberResponse + public async System.Threading.Tasks.Task CreateSubscriptionAsync (ProvisionNumberRequest body) + { + Telstra.Messaging.Client.ApiResponse localVarResponse = await CreateSubscriptionAsyncWithHttpInfo(body); + return localVarResponse.Data; + + } + + /// + /// Create Subscription Invoke the provisioning API to get a dedicated mobile number for an account or application. Note that Free Trial apps will have a 30-Day Limit for their provisioned number. If the Provisioning call is made several times within that 30-Day period, it will return the `expiryDate` in the Unix format and will not add any activeDays until after that `expiryDate`. After the `expiryDate`, you may make another Provisioning call to extend the activeDays by another 30-Days. For paid apps, a provisioned number can be allotted for a maximum of 5 years. If a Provisioning call is made which will result to activeDays > 1825, a 409 `Active Days Max` response will be returned to indicate that the provisioned number is already valid for more than 5 years and that no update to activeDays has been made. + /// + /// Thrown when fails to make API call + /// A JSON payload containing the required attributes + /// Task of ApiResponse (ProvisionNumberResponse) + public async System.Threading.Tasks.Task> CreateSubscriptionAsyncWithHttpInfo (ProvisionNumberRequest body) + { + // verify the required parameter 'body' is set + if (body == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'body' when calling ProvisioningApi->CreateSubscription"); + + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + localVarRequestOptions.Data = body; + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.PostAsync("/messages/provisioning/subscriptions", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("CreateSubscription", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Delete Subscription Delete a mobile number subscription from an account + /// + /// Thrown when fails to make API call + /// EmptyArr + /// + public void DeleteSubscription (DeleteNumberRequest body) + { + DeleteSubscriptionWithHttpInfo(body); + } + + /// + /// Delete Subscription Delete a mobile number subscription from an account + /// + /// Thrown when fails to make API call + /// EmptyArr + /// ApiResponse of Object(void) + public Telstra.Messaging.Client.ApiResponse DeleteSubscriptionWithHttpInfo (DeleteNumberRequest body) + { + // verify the required parameter 'body' is set + if (body == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'body' when calling ProvisioningApi->DeleteSubscription"); + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] _accepts = new String[] { + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + localVarRequestOptions.Data = body; + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + var localVarResponse = this.Client.Delete("/messages/provisioning/subscriptions", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("DeleteSubscription", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Delete Subscription Delete a mobile number subscription from an account + /// + /// Thrown when fails to make API call + /// EmptyArr + /// Task of void + public async System.Threading.Tasks.Task DeleteSubscriptionAsync (DeleteNumberRequest body) + { + await DeleteSubscriptionAsyncWithHttpInfo(body); + + } + + /// + /// Delete Subscription Delete a mobile number subscription from an account + /// + /// Thrown when fails to make API call + /// EmptyArr + /// Task of ApiResponse + public async System.Threading.Tasks.Task> DeleteSubscriptionAsyncWithHttpInfo (DeleteNumberRequest body) + { + // verify the required parameter 'body' is set + if (body == null) + throw new Telstra.Messaging.Client.ApiException(400, "Missing required parameter 'body' when calling ProvisioningApi->DeleteSubscription"); + + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + "application/json" + }; + + // to determine the Accept header + String[] _accepts = new String[] { + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + localVarRequestOptions.Data = body; + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.DeleteAsync("/messages/provisioning/subscriptions", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("DeleteSubscription", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Get Subscription Get mobile number subscription for an account + /// + /// Thrown when fails to make API call + /// GetSubscriptionResponse + public GetSubscriptionResponse GetSubscription () + { + Telstra.Messaging.Client.ApiResponse localVarResponse = GetSubscriptionWithHttpInfo(); + return localVarResponse.Data; + } + + /// + /// Get Subscription Get mobile number subscription for an account + /// + /// Thrown when fails to make API call + /// ApiResponse of GetSubscriptionResponse + public Telstra.Messaging.Client.ApiResponse< GetSubscriptionResponse > GetSubscriptionWithHttpInfo () + { + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + var localVarContentType = Telstra.Messaging.Client.ClientUtils.SelectHeaderContentType(_contentTypes); + if (localVarContentType != null) localVarRequestOptions.HeaderParameters.Add("Content-Type", localVarContentType); + + var localVarAccept = Telstra.Messaging.Client.ClientUtils.SelectHeaderAccept(_accepts); + if (localVarAccept != null) localVarRequestOptions.HeaderParameters.Add("Accept", localVarAccept); + + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + var localVarResponse = this.Client.Get< GetSubscriptionResponse >("/messages/provisioning/subscriptions", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("GetSubscription", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + /// + /// Get Subscription Get mobile number subscription for an account + /// + /// Thrown when fails to make API call + /// Task of GetSubscriptionResponse + public async System.Threading.Tasks.Task GetSubscriptionAsync () + { + Telstra.Messaging.Client.ApiResponse localVarResponse = await GetSubscriptionAsyncWithHttpInfo(); + return localVarResponse.Data; + + } + + /// + /// Get Subscription Get mobile number subscription for an account + /// + /// Thrown when fails to make API call + /// Task of ApiResponse (GetSubscriptionResponse) + public async System.Threading.Tasks.Task> GetSubscriptionAsyncWithHttpInfo () + { + + Telstra.Messaging.Client.RequestOptions localVarRequestOptions = new Telstra.Messaging.Client.RequestOptions(); + + String[] _contentTypes = new String[] { + }; + + // to determine the Accept header + String[] _accepts = new String[] { + "application/json" + }; + + foreach (var _contentType in _contentTypes) + localVarRequestOptions.HeaderParameters.Add("Content-Type", _contentType); + + foreach (var _accept in _accepts) + localVarRequestOptions.HeaderParameters.Add("Accept", _accept); + + + // authentication (auth) required + // oauth required + if (!String.IsNullOrEmpty(this.Configuration.AccessToken)) + { + localVarRequestOptions.HeaderParameters.Add("Authorization", "Bearer " + this.Configuration.AccessToken); + } + + // make the HTTP request + + var localVarResponse = await this.AsynchronousClient.GetAsync("/messages/provisioning/subscriptions", localVarRequestOptions, this.Configuration); + + if (this.ExceptionFactory != null) + { + Exception _exception = this.ExceptionFactory("GetSubscription", localVarResponse); + if (_exception != null) throw _exception; + } + + return localVarResponse; + } + + } +} diff --git a/src/Telstra.Messaging/Client/ApiClient.cs b/src/Telstra.Messaging/Client/ApiClient.cs new file mode 100644 index 0000000..b09b587 --- /dev/null +++ b/src/Telstra.Messaging/Client/ApiClient.cs @@ -0,0 +1,643 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Globalization; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.IO; +using System.Linq; +using System.Net; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters; +using System.Text; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; +using RestSharp; +using RestSharp.Deserializers; +using ErrorEventArgs = Newtonsoft.Json.Serialization.ErrorEventArgs; +using RestSharpMethod = RestSharp.Method; + +namespace Telstra.Messaging.Client +{ + /// + /// Allows RestSharp to Serialize/Deserialize JSON using our custom logic, but only when ContentType is JSON. + /// + internal class CustomJsonCodec : RestSharp.Serializers.ISerializer, RestSharp.Deserializers.IDeserializer + { + private readonly IReadableConfiguration _configuration; + private readonly JsonSerializer _serializer; + private string _contentType = "application/json"; + private readonly JsonSerializerSettings _serializerSettings = new JsonSerializerSettings + { + // OpenAPI generated types generally hide default constructors. + ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor, + ContractResolver = new DefaultContractResolver + { + NamingStrategy = new CamelCaseNamingStrategy() + { + OverrideSpecifiedNames = true + } + } + }; + + public CustomJsonCodec(IReadableConfiguration configuration) + { + _configuration = configuration; + _serializer = JsonSerializer.Create(_serializerSettings); + } + + public CustomJsonCodec(JsonSerializerSettings serializerSettings, IReadableConfiguration configuration) + { + _serializerSettings = serializerSettings; + _serializer = JsonSerializer.Create(_serializerSettings); + _configuration = configuration; + } + + public string Serialize(object obj) + { + String result = JsonConvert.SerializeObject(obj, _serializerSettings); + return result; + } + + public T Deserialize(IRestResponse response) + { + var result = (T) Deserialize(response, typeof(T)); + return result; + } + + /// + /// Deserialize the JSON string into a proper object. + /// + /// The HTTP response. + /// Object type. + /// Object representation of the JSON string. + internal object Deserialize(IRestResponse response, Type type) + { + IList headers = response.Headers; + if (type == typeof(byte[])) // return byte array + { + return response.RawBytes; + } + + // TODO: ? if (type.IsAssignableFrom(typeof(Stream))) + if (type == typeof(Stream)) + { + if (headers != null) + { + var filePath = String.IsNullOrEmpty(_configuration.TempFolderPath) + ? Path.GetTempPath() + : _configuration.TempFolderPath; + var regex = new Regex(@"Content-Disposition=.*filename=['""]?([^'""\s]+)['""]?$"); + foreach (var header in headers) + { + var match = regex.Match(header.ToString()); + if (match.Success) + { + string fileName = filePath + ClientUtils.SanitizeFilename(match.Groups[1].Value.Replace("\"", "").Replace("'", "")); + File.WriteAllBytes(fileName, response.RawBytes); + return new FileStream(fileName, FileMode.Open); + } + } + } + var stream = new MemoryStream(response.RawBytes); + return stream; + } + + if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object + { + return DateTime.Parse(response.Content, null, System.Globalization.DateTimeStyles.RoundtripKind); + } + + if (type == typeof(String) || type.Name.StartsWith("System.Nullable")) // return primitive type + { + return ClientUtils.ConvertType(response.Content, type); + } + + // at this point, it must be a model (json) + try + { + return JsonConvert.DeserializeObject(response.Content, type, _serializerSettings); + } + catch (Exception e) + { + throw new ApiException(500, e.Message); + } + } + + public string RootElement { get; set; } + public string Namespace { get; set; } + public string DateFormat { get; set; } + + public string ContentType + { + get { return _contentType; } + set { throw new InvalidOperationException("Not allowed to set content type."); } + } + } + /// + /// Provides a default implementation of an Api client (both synchronous and asynchronous implementatios), + /// encapsulating general REST accessor use cases. + /// + public partial class ApiClient : ISynchronousClient, IAsynchronousClient + { + private readonly String _baseUrl; + + /// + /// Allows for extending request processing for generated code. + /// + /// The RestSharp request object + partial void InterceptRequest(IRestRequest request); + + /// + /// Allows for extending response processing for generated code. + /// + /// The RestSharp request object + /// The RestSharp response object + partial void InterceptResponse(IRestRequest request, IRestResponse response); + + /// + /// Initializes a new instance of the , defaulting to the global configurations' base url. + /// + public ApiClient() + { + _baseUrl = Telstra.Messaging.Client.GlobalConfiguration.Instance.BasePath; + } + + /// + /// Initializes a new instance of the + /// + /// The target service's base path in URL format. + /// + public ApiClient(String basePath) + { + if (String.IsNullOrEmpty(basePath)) + throw new ArgumentException("basePath cannot be empty"); + + _baseUrl = basePath; + } + + /// + /// Constructs the RestSharp version of an http method + /// + /// Swagger Client Custom HttpMethod + /// RestSharp's HttpMethod instance. + /// + private RestSharpMethod Method(HttpMethod method) + { + RestSharpMethod other; + switch (method) + { + case HttpMethod.Get: + other = RestSharpMethod.GET; + break; + case HttpMethod.Post: + other = RestSharpMethod.POST; + break; + case HttpMethod.Put: + other = RestSharpMethod.PUT; + break; + case HttpMethod.Delete: + other = RestSharpMethod.DELETE; + break; + case HttpMethod.Head: + other = RestSharpMethod.HEAD; + break; + case HttpMethod.Options: + other = RestSharpMethod.OPTIONS; + break; + case HttpMethod.Patch: + other = RestSharpMethod.PATCH; + break; + default: + throw new ArgumentOutOfRangeException("method", method, null); + } + + return other; + } + + /// + /// Provides all logic for constructing a new RestSharp . + /// At this point, all information for querying the service is known. Here, it is simply + /// mapped into the RestSharp request. + /// + /// The http verb. + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// [private] A new RestRequest instance. + /// + private RestRequest newRequest( + HttpMethod method, + String path, + RequestOptions options, + IReadableConfiguration configuration) + { + if (path == null) throw new ArgumentNullException("path"); + if (options == null) throw new ArgumentNullException("options"); + if (configuration == null) throw new ArgumentNullException("configuration"); + + RestRequest request = new RestRequest(Method(method)) + { + Resource = path, + JsonSerializer = new CustomJsonCodec(configuration) + }; + + if (options.PathParameters != null) + { + foreach (var pathParam in options.PathParameters) + { + request.AddParameter(pathParam.Key, pathParam.Value, ParameterType.UrlSegment); + } + } + + if (options.QueryParameters != null) + { + foreach (var queryParam in options.QueryParameters) + { + foreach (var value in queryParam.Value) + { + request.AddQueryParameter(queryParam.Key, value); + } + } + } + + if (configuration.DefaultHeaders != null) + { + foreach (var headerParam in configuration.DefaultHeaders) + { + request.AddHeader(headerParam.Key, headerParam.Value); + } + } + + if (options.HeaderParameters != null) + { + foreach (var headerParam in options.HeaderParameters) + { + foreach (var value in headerParam.Value) + { + request.AddHeader(headerParam.Key, value); + } + } + } + + if (options.FormParameters != null) + { + foreach (var formParam in options.FormParameters) + { + request.AddParameter(formParam.Key, formParam.Value); + } + } + + if (options.Data != null) + { + if (options.HeaderParameters != null) + { + var contentTypes = options.HeaderParameters["Content-Type"]; + if (contentTypes == null || contentTypes.Any(header => header.Contains("application/json"))) + { + request.RequestFormat = DataFormat.Json; + } + else + { + // TODO: Generated client user should add additional handlers. RestSharp only supports XML and JSON, with XML as default. + } + } + else + { + // Here, we'll assume JSON APIs are more common. XML can be forced by adding produces/consumes to openapi spec explicitly. + request.RequestFormat = DataFormat.Json; + } + + request.AddJsonBody(options.Data); + } + + if (options.FileParameters != null) + { + foreach (var fileParam in options.FileParameters) + { + var bytes = ClientUtils.ReadAsBytes(fileParam.Value); + var fileStream = fileParam.Value as FileStream; + if (fileStream != null) + request.Files.Add(FileParameter.Create(fileParam.Key, bytes, System.IO.Path.GetFileName(fileStream.Name))); + else + request.Files.Add(FileParameter.Create(fileParam.Key, bytes, "no_file_name_provided")); + } + } + + if (options.Cookies != null && options.Cookies.Count > 0) + { + foreach (var cookie in options.Cookies) + { + request.AddCookie(cookie.Name, cookie.Value); + } + } + + return request; + } + + private ApiResponse toApiResponse(IRestResponse response) + { + T result = response.Data; + string rawContent = response.Content; + + var transformed = new ApiResponse(response.StatusCode, new Multimap(), result, rawContent) + { + ErrorText = response.ErrorMessage, + Cookies = new List() + }; + + if (response.Headers != null) + { + foreach (var responseHeader in response.Headers) + { + transformed.Headers.Add(responseHeader.Name, ClientUtils.ParameterToString(responseHeader.Value)); + } + } + + if (response.Cookies != null) + { + foreach (var responseCookies in response.Cookies) + { + transformed.Cookies.Add( + new Cookie( + responseCookies.Name, + responseCookies.Value, + responseCookies.Path, + responseCookies.Domain) + ); + } + } + + return transformed; + } + + private async Task> Exec(RestRequest req, IReadableConfiguration configuration) + { + RestClient client = new RestClient(_baseUrl); + + client.ClearHandlers(); + var existingDeserializer = req.JsonSerializer as IDeserializer; + if (existingDeserializer != null) + { + client.AddHandler(existingDeserializer, "application/json", "text/json", "text/x-json", "text/javascript", "*+json"); + } + else + { + var codec = new CustomJsonCodec(configuration); + client.AddHandler(codec, "application/json", "text/json", "text/x-json", "text/javascript", "*+json"); + } + + client.AddHandler(new XmlDeserializer(), "application/xml", "text/xml", "*+xml", "*"); + + client.Timeout = configuration.Timeout; + + if (configuration.UserAgent != null) + { + client.UserAgent = configuration.UserAgent; + } + + InterceptRequest(req); + var response = await client.ExecuteTaskAsync(req); + InterceptResponse(req, response); + + var result = toApiResponse(response); + if (response.ErrorMessage != null) + { + result.ErrorText = response.ErrorMessage; + } + + if (response.Cookies != null && response.Cookies.Count > 0) + { + if(result.Cookies == null) result.Cookies = new List(); + foreach (var restResponseCookie in response.Cookies) + { + var cookie = new Cookie( + restResponseCookie.Name, + restResponseCookie.Value, + restResponseCookie.Path, + restResponseCookie.Domain + ) + { + Comment = restResponseCookie.Comment, + CommentUri = restResponseCookie.CommentUri, + Discard = restResponseCookie.Discard, + Expired = restResponseCookie.Expired, + Expires = restResponseCookie.Expires, + HttpOnly = restResponseCookie.HttpOnly, + Port = restResponseCookie.Port, + Secure = restResponseCookie.Secure, + Version = restResponseCookie.Version + }; + + result.Cookies.Add(cookie); + } + } + return result; + } + + #region IAsynchronousClient + /// + /// Make a HTTP GET request (async). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public async Task> GetAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Get, path, options, config), config); + } + + /// + /// Make a HTTP POST request (async). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public async Task> PostAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Post, path, options, config), config); + } + + /// + /// Make a HTTP PUT request (async). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public async Task> PutAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Put, path, options, config), config); + } + + /// + /// Make a HTTP DELETE request (async). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public async Task> DeleteAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Delete, path, options, config), config); + } + + /// + /// Make a HTTP HEAD request (async). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public async Task> HeadAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Head, path, options, config), config); + } + + /// + /// Make a HTTP OPTION request (async). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public async Task> OptionsAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Options, path, options, config), config); + } + + /// + /// Make a HTTP PATCH request (async). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public async Task> PatchAsync(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + var config = configuration ?? GlobalConfiguration.Instance; + return await Exec(newRequest(HttpMethod.Patch, path, options, config), config); + } + #endregion IAsynchronousClient + + #region ISynchronousClient + /// + /// Make a HTTP GET request (synchronous). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public ApiResponse Get(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return GetAsync(path, options, configuration).Result; + } + + /// + /// Make a HTTP POST request (synchronous). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public ApiResponse Post(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return PostAsync(path, options, configuration).Result; + } + + /// + /// Make a HTTP PUT request (synchronous). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public ApiResponse Put(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return PutAsync(path, options, configuration).Result; + } + + /// + /// Make a HTTP DELETE request (synchronous). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public ApiResponse Delete(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return DeleteAsync(path, options, configuration).Result; + } + + /// + /// Make a HTTP HEAD request (synchronous). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public ApiResponse Head(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return HeadAsync(path, options, configuration).Result; + } + + /// + /// Make a HTTP OPTION request (synchronous). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public ApiResponse Options(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return OptionsAsync(path, options, configuration).Result; + } + + /// + /// Make a HTTP PATCH request (synchronous). + /// + /// The target path (or resource). + /// The additional request options. + /// A per-request configuration object. It is assumed that any merge with + /// GlobalConfiguration has been done before calling this method. + /// A Task containing ApiResponse + public ApiResponse Patch(string path, RequestOptions options, IReadableConfiguration configuration = null) + { + return PatchAsync(path, options, configuration).Result; + } + #endregion ISynchronousClient + } +} diff --git a/src/com.telstra.messaging/Client/ApiException.cs b/src/Telstra.Messaging/Client/ApiException.cs similarity index 81% rename from src/com.telstra.messaging/Client/ApiException.cs rename to src/Telstra.Messaging/Client/ApiException.cs index eee011d..11d30d4 100644 --- a/src/com.telstra.messaging/Client/ApiException.cs +++ b/src/Telstra.Messaging/Client/ApiException.cs @@ -1,16 +1,17 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; -namespace com.telstra.messaging.Client +namespace Telstra.Messaging.Client { /// /// API Exception diff --git a/src/Telstra.Messaging/Client/ApiResponse.cs b/src/Telstra.Messaging/Client/ApiResponse.cs new file mode 100644 index 0000000..64a9652 --- /dev/null +++ b/src/Telstra.Messaging/Client/ApiResponse.cs @@ -0,0 +1,167 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections.Generic; +using System.Net; + +namespace Telstra.Messaging.Client +{ + /// + /// Provides a non-generic contract for the ApiResponse wrapper. + /// + public interface IApiResponse + { + /// + /// The data type of + /// + Type ResponseType { get; } + + /// + /// The content of this response + /// + Object Content { get; } + + /// + /// Gets or sets the status code (HTTP status code) + /// + /// The status code. + HttpStatusCode StatusCode { get; } + + /// + /// Gets or sets the HTTP headers + /// + /// HTTP headers + Multimap Headers { get; } + + /// + /// Gets or sets any error text defined by the calling client. + /// + String ErrorText { get; set; } + + /// + /// Gets or sets any cookies passed along on the response. + /// + List Cookies { get; set; } + + /// + /// The raw content of this response + /// + string RawContent { get; } + } + + /// + /// API Response + /// + public class ApiResponse : IApiResponse + { + #region Properties + + /// + /// Gets or sets the status code (HTTP status code) + /// + /// The status code. + public HttpStatusCode StatusCode { get; } + + /// + /// Gets or sets the HTTP headers + /// + /// HTTP headers + public Multimap Headers { get; } + + /// + /// Gets or sets the data (parsed HTTP body) + /// + /// The data. + public T Data { get; } + + /// + /// Gets or sets any error text defined by the calling client. + /// + public String ErrorText { get; set; } + + /// + /// Gets or sets any cookies passed along on the response. + /// + public List Cookies { get; set; } + + /// + /// The content of this response + /// + public Type ResponseType + { + get { return typeof(T); } + } + + /// + /// The data type of + /// + public object Content + { + get { return Data; } + } + + /// + /// The raw content + /// + public string RawContent { get;} + + #endregion Properties + + #region Constructors + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// HTTP headers. + /// Data (parsed HTTP body) + /// Raw content. + public ApiResponse(HttpStatusCode statusCode, Multimap headers, T data, string rawContent) + { + StatusCode = statusCode; + Headers = headers; + Data = data; + RawContent = rawContent; + } + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// HTTP headers. + /// Data (parsed HTTP body) + public ApiResponse(HttpStatusCode statusCode, Multimap headers, T data) : this(statusCode, headers, data, null) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// Data (parsed HTTP body) + /// Raw content. + public ApiResponse(HttpStatusCode statusCode, T data, string rawContent) : this(statusCode, null, data, rawContent) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// HTTP status code. + /// Data (parsed HTTP body) + public ApiResponse(HttpStatusCode statusCode, T data) : this(statusCode, data, null) + { + } + + #endregion Constructors + } +} diff --git a/src/Telstra.Messaging/Client/ClientUtils.cs b/src/Telstra.Messaging/Client/ClientUtils.cs new file mode 100644 index 0000000..d2dd3f5 --- /dev/null +++ b/src/Telstra.Messaging/Client/ClientUtils.cs @@ -0,0 +1,258 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Net; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace Telstra.Messaging.Client +{ + /// + /// Utility functions providing some benefit to API client consumers. + /// + public static class ClientUtils + { + /// + /// Sanitize filename by removing the path + /// + /// Filename + /// Filename + public static string SanitizeFilename(string filename) + { + Match match = Regex.Match(filename, @".*[/\\](.*)$"); + return match.Success ? match.Groups[1].Value : filename; + } + + /// + /// Convert params to key/value pairs. + /// Use collectionFormat to properly format lists and collections. + /// + /// The swagger-supported collection format, one of: csv, tsv, ssv, pipes, multi + /// Key name. + /// Value object. + /// A multimap of keys with 1..n associated values. + public static Multimap ParameterToMultiMap(string collectionFormat, string name, object value) + { + var parameters = new Multimap(); + + if (IsCollection(value) && collectionFormat == "multi") + { + var valueCollection = value as IEnumerable; + if (valueCollection != null) + { + foreach (var item in valueCollection) + { + parameters.Add(name, ParameterToString(item)); + } + } + } + else + { + parameters.Add(name, ParameterToString(value)); + } + + return parameters; + } + + /// + /// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime. + /// If parameter is a list, join the list with ",". + /// Otherwise just return the string. + /// + /// The parameter (header, path, query, form). + /// An optional configuration instance, providing formatting options used in processing. + /// Formatted string. + public static string ParameterToString(object obj, IReadableConfiguration configuration = null) + { + if (obj is DateTime) + // Return a formatted date string - Can be customized with Configuration.DateTimeFormat + // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o") + // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 + // For example: 2009-06-15T13:45:30.0000000 + return ((DateTime)obj).ToString((configuration ?? GlobalConfiguration.Instance).DateTimeFormat); + else if (obj is DateTimeOffset) + // Return a formatted date string - Can be customized with Configuration.DateTimeFormat + // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o") + // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 + // For example: 2009-06-15T13:45:30.0000000 + return ((DateTimeOffset)obj).ToString((configuration ?? GlobalConfiguration.Instance).DateTimeFormat); + else + { + if (obj is IList) + { + var list = obj as IList; + var flattenedString = new StringBuilder(); + foreach (var param in list) + { + if (flattenedString.Length > 0) + flattenedString.Append(","); + flattenedString.Append(param); + } + return flattenedString.ToString(); + } + + return Convert.ToString (obj); + } + } + + /// + /// Check if generic object is a collection. + /// + /// + /// True if object is a collection type + private static bool IsCollection(object value) + { + return value is IList || value is ICollection; + } + + /// + /// URL encode a string + /// Credit/Ref: https://github.com/restsharp/RestSharp/blob/master/RestSharp/Extensions/StringExtensions.cs#L50 + /// + /// String to be URL encoded + /// Byte array + public static string UrlEncode(string input) + { + const int maxLength = 32766; + + if (input == null) + { + throw new ArgumentNullException("input"); + } + + if (input.Length <= maxLength) + { + return Uri.EscapeDataString(input); + } + + StringBuilder sb = new StringBuilder(input.Length * 2); + int index = 0; + + while (index < input.Length) + { + int length = Math.Min(input.Length - index, maxLength); + string subString = input.Substring(index, length); + + sb.Append(Uri.EscapeDataString(subString)); + index += subString.Length; + } + + return sb.ToString(); + } + + /// + /// Encode string in base64 format. + /// + /// String to be encoded. + /// Encoded string. + public static string Base64Encode(string text) + { + return System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(text)); + } + + /// + /// Convert stream to byte array + /// + /// Input stream to be converted + /// Byte array + public static byte[] ReadAsBytes(Stream inputStream) + { + byte[] buf = new byte[16*1024]; + using (MemoryStream ms = new MemoryStream()) + { + int count; + while ((count = inputStream.Read(buf, 0, buf.Length)) > 0) + { + ms.Write(buf, 0, count); + } + return ms.ToArray(); + } + } + + /// + /// Dynamically cast the object into target type. + /// + /// Object to be casted + /// Target type + /// Casted object + public static dynamic ConvertType(dynamic fromObject, Type toObject) + { + return Convert.ChangeType(fromObject, toObject); + } + + /// + /// Select the Content-Type header's value from the given content-type array: + /// if JSON type exists in the given array, use it; + /// otherwise use the first one defined in 'consumes' + /// + /// The Content-Type array to select from. + /// The Content-Type header to use. + public static String SelectHeaderContentType(String[] contentTypes) + { + if (contentTypes.Length == 0) + return "application/json"; + + foreach (var contentType in contentTypes) + { + if (IsJsonMime(contentType)) + return contentType; + } + + return contentTypes[0]; // use the first content type specified in 'consumes' + } + + /// + /// Select the Accept header's value from the given accepts array: + /// if JSON exists in the given array, use it; + /// otherwise use all of them (joining into a string) + /// + /// The accepts array to select from. + /// The Accept header to use. + public static String SelectHeaderAccept(String[] accepts) + { + if (accepts.Length == 0) + return null; + + if (accepts.Contains("application/json", StringComparer.OrdinalIgnoreCase)) + return "application/json"; + + return String.Join(",", accepts); + } + + /// + /// Provides a case-insensitive check that a provided content type is a known JSON-like content type. + /// + public static readonly Regex JsonRegex = new Regex("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$"); + + /// + /// Check if the given MIME is a JSON MIME. + /// JSON MIME examples: + /// application/json + /// application/json; charset=UTF8 + /// APPLICATION/JSON + /// application/vnd.company+json + /// + /// MIME + /// Returns True if MIME type is json. + public static bool IsJsonMime(String mime) + { + if (String.IsNullOrWhiteSpace(mime)) return false; + + return JsonRegex.IsMatch(mime) || mime.Equals("application/json-patch+json"); + } + } +} diff --git a/src/com.telstra.messaging/Client/Configuration.cs b/src/Telstra.Messaging/Client/Configuration.cs similarity index 62% rename from src/com.telstra.messaging/Client/Configuration.cs rename to src/Telstra.Messaging/Client/Configuration.cs index b000fc8..5673630 100644 --- a/src/com.telstra.messaging/Client/Configuration.cs +++ b/src/Telstra.Messaging/Client/Configuration.cs @@ -1,13 +1,14 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; using System.Reflection; using System.Collections.Concurrent; @@ -16,7 +17,7 @@ using System.Linq; using System.Text; -namespace com.telstra.messaging.Client +namespace Telstra.Messaging.Client { /// /// Represents a set of configuration settings @@ -29,7 +30,7 @@ public class Configuration : IReadableConfiguration /// Version of the package. /// /// Version of the package. - public const string Version = "1.0.2"; + public const string Version = "1.0.8"; /// /// Identifier for ISO 8601 DateTime Format @@ -42,9 +43,6 @@ public class Configuration : IReadableConfiguration #region Static Members - private static readonly object GlobalConfigSync = new { }; - private static Configuration _globalConfiguration; - /// /// Default creation of exceptions for a given method name and response object /// @@ -54,48 +52,35 @@ public class Configuration : IReadableConfiguration if (status >= 400) { return new ApiException(status, - string.Format("Error calling {0}: {1}", methodName, response.Content), - response.Content); - } - if (status == 0) - { - return new ApiException(status, - string.Format("Error calling {0}: {1}", methodName, response.ErrorMessage), response.ErrorMessage); + string.Format("Error calling {0}: {1}", methodName, response.RawContent), + response.RawContent); } + return null; }; - /// - /// Gets or sets the default Configuration. - /// - /// Configuration. - public static Configuration Default - { - get { return _globalConfiguration; } - set - { - lock (GlobalConfigSync) - { - _globalConfiguration = value; - } - } - } - #endregion Static Members #region Private Members + /// + /// Defines the base path of the target API server. + /// Example: http://localhost:3000/v1/ + /// + private String _basePath; + /// /// Gets or sets the API key based on the authentication name. + /// This is the key and value comprising the "secret" for acessing an API. /// /// The API key. - private IDictionary _apiKey = null; + private IDictionary _apiKey; /// /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. /// /// The prefix of the API key. - private IDictionary _apiKeyPrefix = null; + private IDictionary _apiKeyPrefix; private string _dateTimeFormat = ISO8601_DATETIME_FORMAT; private string _tempFolderPath = Path.GetTempPath(); @@ -104,19 +89,15 @@ public static Configuration Default #region Constructors - static Configuration() - { - _globalConfiguration = new GlobalConfiguration(); - } - /// /// Initializes a new instance of the class /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("ReSharper", "VirtualMemberCallInConstructor")] public Configuration() { - UserAgent = "Swagger-Codegen/1.0.2/csharp"; + UserAgent = "OpenAPI-Generator/1.0.8/csharp"; BasePath = "https://tapi.telstra.com/v2"; - DefaultHeader = new ConcurrentDictionary(); + DefaultHeaders = new ConcurrentDictionary(); ApiKey = new ConcurrentDictionary(); ApiKeyPrefix = new ConcurrentDictionary(); @@ -127,16 +108,17 @@ public Configuration() /// /// Initializes a new instance of the class /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("ReSharper", "VirtualMemberCallInConstructor")] public Configuration( - IDictionary defaultHeader, + IDictionary defaultHeaders, IDictionary apiKey, IDictionary apiKeyPrefix, string basePath = "https://tapi.telstra.com/v2") : this() { if (string.IsNullOrWhiteSpace(basePath)) throw new ArgumentException("The provided basePath is invalid.", "basePath"); - if (defaultHeader == null) - throw new ArgumentNullException("defaultHeader"); + if (defaultHeaders == null) + throw new ArgumentNullException("defaultHeaders"); if (apiKey == null) throw new ArgumentNullException("apiKey"); if (apiKeyPrefix == null) @@ -144,9 +126,9 @@ public Configuration( BasePath = basePath; - foreach (var keyValuePair in defaultHeader) + foreach (var keyValuePair in defaultHeaders) { - DefaultHeader.Add(keyValuePair); + DefaultHeaders.Add(keyValuePair); } foreach (var keyValuePair in apiKey) @@ -160,70 +142,10 @@ public Configuration( } } - /// - /// Initializes a new instance of the class with different settings - /// - /// Api client - /// Dictionary of default HTTP header - /// Username - /// Password - /// accessToken - /// Dictionary of API key - /// Dictionary of API key prefix - /// Temp folder path - /// DateTime format string - /// HTTP connection timeout (in milliseconds) - /// HTTP user agent - [Obsolete("Use explicit object construction and setting of properties.", true)] - public Configuration( - // ReSharper disable UnusedParameter.Local - ApiClient apiClient = null, - IDictionary defaultHeader = null, - string username = null, - string password = null, - string accessToken = null, - IDictionary apiKey = null, - IDictionary apiKeyPrefix = null, - string tempFolderPath = null, - string dateTimeFormat = null, - int timeout = 100000, - string userAgent = "Swagger-Codegen/1.0.2/csharp" - // ReSharper restore UnusedParameter.Local - ) - { - - } - - /// - /// Initializes a new instance of the Configuration class. - /// - /// Api client. - [Obsolete("This constructor caused unexpected sharing of static data. It is no longer supported.", true)] - // ReSharper disable once UnusedParameter.Local - public Configuration(ApiClient apiClient) - { - - } - #endregion Constructors - #region Properties - private ApiClient _apiClient = null; - /// - /// Gets an instance of an ApiClient for this configuration - /// - public virtual ApiClient ApiClient - { - get - { - if (_apiClient == null) _apiClient = CreateApiClient(); - return _apiClient; - } - } - - private String _basePath = null; /// /// Gets or sets the base path for API access. /// @@ -231,27 +153,34 @@ public virtual string BasePath { get { return _basePath; } set { _basePath = value; - // pass-through to ApiClient if it's set. - if(_apiClient != null) { - _apiClient.RestClient.BaseUrl = new Uri(_basePath); - } } } /// /// Gets or sets the default header. /// - public virtual IDictionary DefaultHeader { get; set; } + [Obsolete("Use DefaultHeaders instead.")] + public virtual IDictionary DefaultHeader + { + get + { + return DefaultHeaders; + } + set + { + DefaultHeaders = value; + } + } + + /// + /// Gets or sets the default headers. + /// + public virtual IDictionary DefaultHeaders { get; set; } /// /// Gets or sets the HTTP timeout (milliseconds) of ApiClient. Default to 100000 milliseconds. /// - public virtual int Timeout - { - - get { return ApiClient.RestClient.Timeout; } - set { ApiClient.RestClient.Timeout = value; } - } + public virtual int Timeout { get; set; } /// /// Gets or sets the HTTP user agent. @@ -278,17 +207,21 @@ public virtual int Timeout /// API key with prefix. public string GetApiKeyWithPrefix(string apiKeyIdentifier) { - var apiKeyValue = ""; + string apiKeyValue; ApiKey.TryGetValue (apiKeyIdentifier, out apiKeyValue); - var apiKeyPrefix = ""; - if (ApiKeyPrefix.TryGetValue (apiKeyIdentifier, out apiKeyPrefix)) + string apiKeyPrefix; + if (ApiKeyPrefix.TryGetValue(apiKeyIdentifier, out apiKeyPrefix)) + { return apiKeyPrefix + " " + apiKeyValue; - else - return apiKeyValue; + } + + return apiKeyValue; } /// /// Gets or sets the access token for OAuth2 authentication. + /// + /// This helper property simplifies code generation. /// /// The access token. public virtual string AccessToken { get; set; } @@ -305,7 +238,6 @@ public virtual string TempFolderPath { if (string.IsNullOrEmpty(value)) { - // Possible breaking change since swagger-codegen 2.2.1, enforce a valid temporary path on set. _tempFolderPath = Path.GetTempPath(); return; } @@ -329,7 +261,7 @@ public virtual string TempFolderPath } /// - /// Gets or sets the the date time format used when serializing in the ApiClient + /// Gets or sets the date time format used when serializing in the ApiClient /// By default, it's set to ISO 8601 - "o", for others see: /// https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx /// and https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx @@ -356,6 +288,18 @@ public virtual string DateTimeFormat /// /// Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. + /// + /// Whatever you set here will be prepended to the value defined in AddApiKey. + /// + /// An example invocation here might be: + /// + /// ApiKeyPrefix["Authorization"] = "Bearer"; + /// + /// … where ApiKey["Authorization"] would then be used to set the value of your bearer token. + /// + /// + /// OAuth2 workflows should set tokens via AccessToken. + /// /// /// The prefix of the API key. public virtual IDictionary ApiKeyPrefix @@ -392,37 +336,15 @@ public virtual IDictionary ApiKey #region Methods - /// - /// Add default header. - /// - /// Header field name. - /// Header field value. - /// - public void AddDefaultHeader(string key, string value) - { - DefaultHeader[key] = value; - } - - /// - /// Creates a new based on this instance. - /// - /// - public ApiClient CreateApiClient() - { - return new ApiClient(BasePath) { Configuration = this }; - } - - /// /// Returns a string with essential information for debugging. /// public static String ToDebugReport() { - String report = "C# SDK (com.telstra.messaging) Debug Report:\n"; - report += " OS: " + System.Environment.OSVersion + "\n"; - report += " .NET Framework Version: " + System.Environment.Version + "\n"; - report += " Version of the API: 2.2.4\n"; - report += " SDK Package Version: 1.0.2\n"; + String report = "C# SDK (Telstra.Messaging) Debug Report:\n"; + report += " OS: " + System.Runtime.InteropServices.RuntimeInformation.OSDescription + "\n"; + report += " Version of the API: 2.2.9\n"; + report += " SDK Package Version: 1.0.8\n"; return report; } @@ -449,5 +371,42 @@ public void AddApiKeyPrefix(string key, string value) } #endregion Methods + + #region Static Members + /// + /// Merge configurations. + /// + /// First configuration. + /// Second configuration. + /// Merged configuration. + public static IReadableConfiguration MergeConfigurations(IReadableConfiguration first, IReadableConfiguration second) + { + if (second == null) return first ?? GlobalConfiguration.Instance; + + Dictionary apiKey = first.ApiKey.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + Dictionary apiKeyPrefix = first.ApiKeyPrefix.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + Dictionary defaultHeaders = first.DefaultHeaders.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); + + foreach (var kvp in second.ApiKey) apiKey[kvp.Key] = kvp.Value; + foreach (var kvp in second.ApiKeyPrefix) apiKeyPrefix[kvp.Key] = kvp.Value; + foreach (var kvp in second.DefaultHeaders) defaultHeaders[kvp.Key] = kvp.Value; + + var config = new Configuration + { + ApiKey = apiKey, + ApiKeyPrefix = apiKeyPrefix, + DefaultHeaders = defaultHeaders, + BasePath = second.BasePath ?? first.BasePath, + Timeout = second.Timeout, + UserAgent = second.UserAgent ?? first.UserAgent, + Username = second.Username ?? first.Username, + Password = second.Password ?? first.Password, + AccessToken = second.AccessToken ?? first.AccessToken, + TempFolderPath = second.TempFolderPath ?? first.TempFolderPath, + DateTimeFormat = second.DateTimeFormat ?? first.DateTimeFormat + }; + return config; + } + #endregion Static Members } } diff --git a/src/Telstra.Messaging/Client/ExceptionFactory.cs b/src/Telstra.Messaging/Client/ExceptionFactory.cs new file mode 100644 index 0000000..6fea742 --- /dev/null +++ b/src/Telstra.Messaging/Client/ExceptionFactory.cs @@ -0,0 +1,23 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; + +namespace Telstra.Messaging.Client +{ + /// + /// A delegate to ExceptionFactory method + /// + /// Method name + /// Response + /// Exceptions + public delegate Exception ExceptionFactory(string methodName, IApiResponse response); +} diff --git a/src/Telstra.Messaging/Client/GlobalConfiguration.cs b/src/Telstra.Messaging/Client/GlobalConfiguration.cs new file mode 100644 index 0000000..b8ce3c2 --- /dev/null +++ b/src/Telstra.Messaging/Client/GlobalConfiguration.cs @@ -0,0 +1,68 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System.Collections.Generic; + +namespace Telstra.Messaging.Client +{ + /// + /// provides a compile-time extension point for globally configuring + /// API Clients. + /// + /// + /// A customized implementation via partial class may reside in another file and may + /// be excluded from automatic generation via a .openapi-generator-ignore file. + /// + public partial class GlobalConfiguration : Configuration + { + #region Private Members + + private static readonly object GlobalConfigSync = new { }; + private static IReadableConfiguration _globalConfiguration; + + #endregion Private Members + + #region Constructors + + /// + private GlobalConfiguration() + { + } + + /// + public GlobalConfiguration(IDictionary defaultHeader, IDictionary apiKey, IDictionary apiKeyPrefix, string basePath = "http://localhost:3000/api") : base(defaultHeader, apiKey, apiKeyPrefix, basePath) + { + } + + static GlobalConfiguration() + { + Instance = new GlobalConfiguration(); + } + + #endregion Constructors + + /// + /// Gets or sets the default Configuration. + /// + /// Configuration. + public static IReadableConfiguration Instance + { + get { return _globalConfiguration; } + set + { + lock (GlobalConfigSync) + { + _globalConfiguration = value; + } + } + } + } +} \ No newline at end of file diff --git a/src/Telstra.Messaging/Client/HttpMethod.cs b/src/Telstra.Messaging/Client/HttpMethod.cs new file mode 100644 index 0000000..c1e5c62 --- /dev/null +++ b/src/Telstra.Messaging/Client/HttpMethod.cs @@ -0,0 +1,34 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +namespace Telstra.Messaging.Client +{ + /// + /// Http methods supported by swagger + /// + public enum HttpMethod + { + /// HTTP GET request. + Get, + /// HTTP POST request. + Post, + /// HTTP PUT request. + Put, + /// HTTP DELETE request. + Delete, + /// HTTP HEAD request. + Head, + /// HTTP OPTIONS request. + Options, + /// HTTP PATCH request. + Patch + } +} diff --git a/src/com.telstra.messaging/Client/IApiAccessor.cs b/src/Telstra.Messaging/Client/IApiAccessor.cs similarity index 57% rename from src/com.telstra.messaging/Client/IApiAccessor.cs rename to src/Telstra.Messaging/Client/IApiAccessor.cs index 97afec9..3dc5e66 100644 --- a/src/com.telstra.messaging/Client/IApiAccessor.cs +++ b/src/Telstra.Messaging/Client/IApiAccessor.cs @@ -1,21 +1,17 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using RestSharp; -namespace com.telstra.messaging.Client +namespace Telstra.Messaging.Client { /// /// Represents configuration aspects required to interact with the API endpoints. @@ -26,7 +22,7 @@ public interface IApiAccessor /// Gets or sets the configuration object /// /// An instance of the Configuration - Configuration Configuration {get; set;} + IReadableConfiguration Configuration {get; set;} /// /// Gets the base path of the API client. diff --git a/src/Telstra.Messaging/Client/IAsynchronousClient.cs b/src/Telstra.Messaging/Client/IAsynchronousClient.cs new file mode 100644 index 0000000..e1ea976 --- /dev/null +++ b/src/Telstra.Messaging/Client/IAsynchronousClient.cs @@ -0,0 +1,96 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + + +using System; +using System.Threading.Tasks; + +namespace Telstra.Messaging.Client +{ + /// + /// Contract for Asynchronous RESTful API interactions. + /// + /// This interface allows consumers to provide a custom API accessor client. + /// + public interface IAsynchronousClient + { + /// + /// Executes a non-blocking call to some using the GET http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> GetAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the POST http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> PostAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the PUT http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> PutAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the DELETE http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> DeleteAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the HEAD http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> HeadAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the OPTIONS http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> OptionsAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a non-blocking call to some using the PATCH http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// A task eventually representing the response data, decorated with + Task> PatchAsync(String path, RequestOptions options, IReadableConfiguration configuration = null); + } +} + diff --git a/src/com.telstra.messaging/Client/IReadableConfiguration.cs b/src/Telstra.Messaging/Client/IReadableConfiguration.cs similarity index 83% rename from src/com.telstra.messaging/Client/IReadableConfiguration.cs rename to src/Telstra.Messaging/Client/IReadableConfiguration.cs index d00d15b..50488f3 100644 --- a/src/com.telstra.messaging/Client/IReadableConfiguration.cs +++ b/src/Telstra.Messaging/Client/IReadableConfiguration.cs @@ -1,17 +1,18 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ +using System; using System.Collections.Generic; -namespace com.telstra.messaging.Client +namespace Telstra.Messaging.Client { /// /// Represents a readable-only configuration contract. @@ -52,8 +53,15 @@ public interface IReadableConfiguration /// Gets the default header. /// /// Default header. + [Obsolete("Use DefaultHeaders instead.")] IDictionary DefaultHeader { get; } + /// + /// Gets the default headers. + /// + /// Default headers. + IDictionary DefaultHeaders { get; } + /// /// Gets the temp folder path. /// diff --git a/src/Telstra.Messaging/Client/ISynchronousClient.cs b/src/Telstra.Messaging/Client/ISynchronousClient.cs new file mode 100644 index 0000000..37a5b97 --- /dev/null +++ b/src/Telstra.Messaging/Client/ISynchronousClient.cs @@ -0,0 +1,94 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.IO; + +namespace Telstra.Messaging.Client +{ + /// + /// Contract for Synchronous RESTful API interactions. + /// + /// This interface allows consumers to provide a custom API accessor client. + /// + public interface ISynchronousClient + { + /// + /// Executes a blocking call to some using the GET http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Get(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the POST http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Post(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the PUT http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Put(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the DELETE http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Delete(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the HEAD http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Head(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the OPTIONS http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Options(String path, RequestOptions options, IReadableConfiguration configuration = null); + + /// + /// Executes a blocking call to some using the PATCH http verb. + /// + /// The relative path to invoke. + /// The request parameters to pass along to the client. + /// Per-request configurable settings. + /// The return type. + /// The response data, decorated with + ApiResponse Patch(String path, RequestOptions options, IReadableConfiguration configuration = null); + } +} \ No newline at end of file diff --git a/src/Telstra.Messaging/Client/Multimap.cs b/src/Telstra.Messaging/Client/Multimap.cs new file mode 100644 index 0000000..f85e17d --- /dev/null +++ b/src/Telstra.Messaging/Client/Multimap.cs @@ -0,0 +1,306 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections; +using System.Collections.Concurrent; +using System.Collections.Generic; + +namespace Telstra.Messaging.Client +{ + /// + /// A dictionary in which one key has many associated values. + /// + /// The type of the key + /// The type of the value associated with the key. + public class Multimap : IDictionary> + { + #region Private Fields + + private readonly ConcurrentDictionary> _dictionary = + new ConcurrentDictionary>(); + + #endregion Private Fields + + #region Constructors + + /// + /// Empty Constructor. + /// + public Multimap() + { + _dictionary = new ConcurrentDictionary>(); + } + + /// + /// Constructor with comparer. + /// + /// + public Multimap(IEqualityComparer comparer) { + _dictionary = new ConcurrentDictionary>(comparer); + } + + #endregion Constructors + + #region Enumerators + + /// + /// To get the enumerator. + /// + /// Enumerator + public IEnumerator>> GetEnumerator() + { + return _dictionary.GetEnumerator(); + } + + /// + /// To get the enumerator. + /// + /// Enumerator + IEnumerator IEnumerable.GetEnumerator() + { + return _dictionary.GetEnumerator(); + } + + #endregion Enumerators + + #region Public Members + /// + /// Add values to Multimap + /// + /// Key value pair + public void Add(KeyValuePair> item) + { + if (!TryAdd(item.Key, item.Value)) + throw new InvalidOperationException("Could not add values to Multimap."); + } + + /// + /// Clear Multimap + /// + public void Clear() + { + _dictionary.Clear(); + } + + /// + /// Determines whether Multimap contains the specified item. + /// + /// Key value pair + /// Method needs to be implemented + /// true if the Multimap contains the item; otherwise, false. + public bool Contains(KeyValuePair> item) + { + throw new NotImplementedException(); + } + + /// + /// Copy items of the Multimap to an array, + /// starting at a particular array index. + /// + /// The array that is the destination of the items copied + /// from Multimap. The array must have zero-based indexing. + /// The zero-based index in array at which copying begins. + /// Method needs to be implemented + public void CopyTo(KeyValuePair>[] array, int arrayIndex) + { + throw new NotImplementedException(); + } + + /// + /// Removes the specified item from the Multimap. + /// + /// Key value pair + /// true if the item is successfully removed; otherwise, false. + /// Method needs to be implemented + public bool Remove(KeyValuePair> item) + { + throw new NotImplementedException(); + } + + /// + /// Gets the number of items contained in the Multimap. + /// + public int Count + { + get + { + return _dictionary.Count; + } + } + + /// + /// Gets a value indicating whether the Multimap is read-only. + /// + public bool IsReadOnly + { + get + { + return false; + } + } + + /// + /// Adds an item with the provided key and value to the Multimap. + /// + /// The object to use as the key of the item to add. + /// The object to use as the value of the item to add. + /// Thrown when couldn't add the value to Multimap. + public void Add(T key, IList value) + { + if (value != null && value.Count > 0) + { + IList list; + if (_dictionary.TryGetValue(key, out list)) + { + foreach (var k in value) list.Add(k); + } + else + { + list = new List(value); + if (!TryAdd(key, list)) + throw new InvalidOperationException("Could not add values to Multimap."); + } + } + } + + /// + /// Determines whether the Multimap contains an item with the specified key. + /// + /// The key to locate in the Multimap. + /// true if the Multimap contains an item with + /// the key; otherwise, false. + public bool ContainsKey(T key) + { + return _dictionary.ContainsKey(key); + } + + /// + /// Removes item with the specified key from the Multimap. + /// + /// The key to locate in the Multimap. + /// true if the item is successfully removed; otherwise, false. + public bool Remove(T key) + { + IList list; + return TryRemove(key, out list); + } + + /// + /// Gets the value associated with the specified key. + /// + /// The key whose value to get. + /// When this method returns, the value associated with the specified key, if the + /// key is found; otherwise, the default value for the type of the value parameter. + /// This parameter is passed uninitialized. + /// true if the object that implements Multimap contains + /// an item with the specified key; otherwise, false. + public bool TryGetValue(T key, out IList value) + { + return _dictionary.TryGetValue(key, out value); + } + + /// + /// Gets or sets the item with the specified key. + /// + /// The key of the item to get or set. + /// The value of the specified key. + public IList this[T key] + { + get + { + return _dictionary[key]; + } + set { _dictionary[key] = value; } + } + + /// + /// Gets a System.Collections.Generic.ICollection containing the keys of the Multimap. + /// + public ICollection Keys + { + get + { + return _dictionary.Keys; + } + } + + /// + /// Gets a System.Collections.Generic.ICollection containing the values of the Multimap. + /// + public ICollection> Values + { + get + { + return _dictionary.Values; + } + } + + /// + /// Copy the items of the Multimap to an System.Array, + /// starting at a particular System.Array index. + /// + /// The one-dimensional System.Array that is the destination of the items copied + /// from Multimap. The System.Array must have zero-based indexing. + /// The zero-based index in array at which copying begins. + public void CopyTo(Array array, int index) + { + ((ICollection) _dictionary).CopyTo(array, index); + } + + /// + /// Adds an item with the provided key and value to the Multimap. + /// + /// The object to use as the key of the item to add. + /// The object to use as the value of the item to add. + /// Thrown when couldn't add value to Multimap. + public void Add(T key, TValue value) + { + if (value != null) + { + IList list; + if (_dictionary.TryGetValue(key, out list)) + { + list.Add(value); + } + else + { + list = new List(); + list.Add(value); + if (!TryAdd(key, list)) + throw new InvalidOperationException("Could not add value to Multimap."); + } + } + } + + #endregion Public Members + + #region Private Members + + /** + * Helper method to encapsulate generator differences between dictionary types. + */ + private bool TryRemove(T key, out IList value) + { + return _dictionary.TryRemove(key, out value); + + } + + /** + * Helper method to encapsulate generator differences between dictionary types. + */ + private bool TryAdd(T key, IList value) + { + return _dictionary.TryAdd(key, value); + } + #endregion Private Members + } +} diff --git a/src/Telstra.Messaging/Client/OpenAPIDateConverter.cs b/src/Telstra.Messaging/Client/OpenAPIDateConverter.cs new file mode 100644 index 0000000..ac9e22e --- /dev/null +++ b/src/Telstra.Messaging/Client/OpenAPIDateConverter.cs @@ -0,0 +1,30 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using Newtonsoft.Json.Converters; + +namespace Telstra.Messaging.Client +{ + /// + /// Formatter for 'date' openapi formats ss defined by full-date - RFC3339 + /// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types + /// + public class OpenAPIDateConverter : IsoDateTimeConverter + { + /// + /// Initializes a new instance of the class. + /// + public OpenAPIDateConverter() + { + // full-date = date-fullyear "-" date-month "-" date-mday + DateTimeFormat = "yyyy-MM-dd"; + } + } +} diff --git a/src/Telstra.Messaging/Client/RequestOptions.cs b/src/Telstra.Messaging/Client/RequestOptions.cs new file mode 100644 index 0000000..4891ae7 --- /dev/null +++ b/src/Telstra.Messaging/Client/RequestOptions.cs @@ -0,0 +1,75 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; + +namespace Telstra.Messaging.Client +{ + /// + /// A container for generalized request inputs. This type allows consumers to extend the request functionality + /// by abstracting away from the default (built-in) request framework (e.g. RestSharp). + /// + public class RequestOptions + { + /// + /// Parameters to be bound to path parts of the Request's URL + /// + public Dictionary PathParameters { get; set; } + + /// + /// Query parameters to be applied to the request. + /// Keys may have 1 or more values associated. + /// + public Multimap QueryParameters { get; set; } + + /// + /// Header parameters to be applied to to the request. + /// Keys may have 1 or more values associated. + /// + public Multimap HeaderParameters { get; set; } + + /// + /// Form parameters to be sent along with the request. + /// + public Dictionary FormParameters { get; set; } + + /// + /// File parameters to be sent along with the request. + /// + public Dictionary FileParameters { get; set; } + + /// + /// Cookies to be sent along with the request. + /// + public List Cookies { get; set; } + + /// + /// Any data associated with a request body. + /// + public Object Data { get; set; } + + /// + /// Constructs a new instance of + /// + public RequestOptions() + { + PathParameters = new Dictionary(); + QueryParameters = new Multimap(); + HeaderParameters = new Multimap(); + FormParameters = new Dictionary(); + FileParameters = new Dictionary(); + Cookies = new List(); + } + } +} \ No newline at end of file diff --git a/src/com.telstra.messaging/Model/DeleteNumberRequest.cs b/src/Telstra.Messaging/Model/DeleteNumberRequest.cs similarity index 76% rename from src/com.telstra.messaging/Model/DeleteNumberRequest.cs rename to src/Telstra.Messaging/Model/DeleteNumberRequest.cs index a331233..81c3fc0 100644 --- a/src/com.telstra.messaging/Model/DeleteNumberRequest.cs +++ b/src/Telstra.Messaging/Model/DeleteNumberRequest.cs @@ -1,13 +1,14 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; using System.Linq; using System.IO; @@ -20,9 +21,9 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; -namespace com.telstra.messaging.Model +namespace Telstra.Messaging.Model { /// /// DeleteNumberRequest @@ -33,17 +34,17 @@ public partial class DeleteNumberRequest : IEquatable, IVa /// /// Initializes a new instance of the class. /// - /// Empty Arr (default to 0). - public DeleteNumberRequest(int? EmptyArr = 0) + /// Empty Arr (default to 0). + public DeleteNumberRequest(int emptyArr = 0) { - // use default value if no "EmptyArr" provided - if (EmptyArr == null) + // use default value if no "emptyArr" provided + if (emptyArr == null) { this.EmptyArr = 0; } else { - this.EmptyArr = EmptyArr; + this.EmptyArr = emptyArr; } } @@ -52,7 +53,7 @@ public DeleteNumberRequest(int? EmptyArr = 0) /// /// Empty Arr [DataMember(Name="emptyArr", EmitDefaultValue=false)] - public int? EmptyArr { get; set; } + public int EmptyArr { get; set; } /// /// Returns the string presentation of the object @@ -71,7 +72,7 @@ public override string ToString() /// Returns the JSON string presentation of the object /// /// JSON string presentation of the object - public string ToJson() + public virtual string ToJson() { return JsonConvert.SerializeObject(this, Formatting.Indented); } @@ -99,8 +100,7 @@ public bool Equals(DeleteNumberRequest input) return ( this.EmptyArr == input.EmptyArr || - (this.EmptyArr != null && - this.EmptyArr.Equals(input.EmptyArr)) + this.EmptyArr.Equals(input.EmptyArr) ); } @@ -113,8 +113,7 @@ public override int GetHashCode() unchecked // Overflow is fine, just wrap { int hashCode = 41; - if (this.EmptyArr != null) - hashCode = hashCode * 59 + this.EmptyArr.GetHashCode(); + hashCode = hashCode * 59 + this.EmptyArr.GetHashCode(); return hashCode; } } diff --git a/src/Telstra.Messaging/Model/GetMmsResponse.cs b/src/Telstra.Messaging/Model/GetMmsResponse.cs new file mode 100644 index 0000000..0dab9c1 --- /dev/null +++ b/src/Telstra.Messaging/Model/GetMmsResponse.cs @@ -0,0 +1,296 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; + +namespace Telstra.Messaging.Model +{ + /// + /// GetMmsResponse + /// + [DataContract] + public partial class GetMmsResponse : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected GetMmsResponse() { } + /// + /// Initializes a new instance of the class. + /// + /// The final state of the message. (required). + /// The number the message was sent to. (required). + /// The number the message was sent from. (required). + /// The subject assigned to the message. . + /// Message Id assigned by the MMSC. . + /// Message Id assigned by the API. . + /// Time handling of the message ended. (required). + /// An array of content that was received in an MMS message. (required). + public GetMmsResponse(string status = default(string), string destinationAddress = default(string), string senderAddress = default(string), string subject = default(string), string messageId = default(string), string apiMsgId = default(string), string sentTimestamp = default(string), List mMSContent = default(List)) + { + // to ensure "status" is required (not null) + if (status == null) + { + throw new InvalidDataException("status is a required property for GetMmsResponse and cannot be null"); + } + else + { + this.Status = status; + } + + // to ensure "destinationAddress" is required (not null) + if (destinationAddress == null) + { + throw new InvalidDataException("destinationAddress is a required property for GetMmsResponse and cannot be null"); + } + else + { + this.DestinationAddress = destinationAddress; + } + + // to ensure "senderAddress" is required (not null) + if (senderAddress == null) + { + throw new InvalidDataException("senderAddress is a required property for GetMmsResponse and cannot be null"); + } + else + { + this.SenderAddress = senderAddress; + } + + // to ensure "sentTimestamp" is required (not null) + if (sentTimestamp == null) + { + throw new InvalidDataException("sentTimestamp is a required property for GetMmsResponse and cannot be null"); + } + else + { + this.SentTimestamp = sentTimestamp; + } + + // to ensure "mMSContent" is required (not null) + if (mMSContent == null) + { + throw new InvalidDataException("mMSContent is a required property for GetMmsResponse and cannot be null"); + } + else + { + this.MMSContent = mMSContent; + } + + this.Subject = subject; + this.MessageId = messageId; + this.ApiMsgId = apiMsgId; + } + + /// + /// The final state of the message. + /// + /// The final state of the message. + [DataMember(Name="status", EmitDefaultValue=false)] + public string Status { get; set; } + + /// + /// The number the message was sent to. + /// + /// The number the message was sent to. + [DataMember(Name="destinationAddress", EmitDefaultValue=false)] + public string DestinationAddress { get; set; } + + /// + /// The number the message was sent from. + /// + /// The number the message was sent from. + [DataMember(Name="senderAddress", EmitDefaultValue=false)] + public string SenderAddress { get; set; } + + /// + /// The subject assigned to the message. + /// + /// The subject assigned to the message. + [DataMember(Name="subject", EmitDefaultValue=false)] + public string Subject { get; set; } + + /// + /// Message Id assigned by the MMSC. + /// + /// Message Id assigned by the MMSC. + [DataMember(Name="messageId", EmitDefaultValue=false)] + public string MessageId { get; set; } + + /// + /// Message Id assigned by the API. + /// + /// Message Id assigned by the API. + [DataMember(Name="apiMsgId", EmitDefaultValue=false)] + public string ApiMsgId { get; set; } + + /// + /// Time handling of the message ended. + /// + /// Time handling of the message ended. + [DataMember(Name="sentTimestamp", EmitDefaultValue=false)] + public string SentTimestamp { get; set; } + + /// + /// An array of content that was received in an MMS message. + /// + /// An array of content that was received in an MMS message. + [DataMember(Name="MMSContent", EmitDefaultValue=false)] + public List MMSContent { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class GetMmsResponse {\n"); + sb.Append(" Status: ").Append(Status).Append("\n"); + sb.Append(" DestinationAddress: ").Append(DestinationAddress).Append("\n"); + sb.Append(" SenderAddress: ").Append(SenderAddress).Append("\n"); + sb.Append(" Subject: ").Append(Subject).Append("\n"); + sb.Append(" MessageId: ").Append(MessageId).Append("\n"); + sb.Append(" ApiMsgId: ").Append(ApiMsgId).Append("\n"); + sb.Append(" SentTimestamp: ").Append(SentTimestamp).Append("\n"); + sb.Append(" MMSContent: ").Append(MMSContent).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as GetMmsResponse); + } + + /// + /// Returns true if GetMmsResponse instances are equal + /// + /// Instance of GetMmsResponse to be compared + /// Boolean + public bool Equals(GetMmsResponse input) + { + if (input == null) + return false; + + return + ( + this.Status == input.Status || + (this.Status != null && + this.Status.Equals(input.Status)) + ) && + ( + this.DestinationAddress == input.DestinationAddress || + (this.DestinationAddress != null && + this.DestinationAddress.Equals(input.DestinationAddress)) + ) && + ( + this.SenderAddress == input.SenderAddress || + (this.SenderAddress != null && + this.SenderAddress.Equals(input.SenderAddress)) + ) && + ( + this.Subject == input.Subject || + (this.Subject != null && + this.Subject.Equals(input.Subject)) + ) && + ( + this.MessageId == input.MessageId || + (this.MessageId != null && + this.MessageId.Equals(input.MessageId)) + ) && + ( + this.ApiMsgId == input.ApiMsgId || + (this.ApiMsgId != null && + this.ApiMsgId.Equals(input.ApiMsgId)) + ) && + ( + this.SentTimestamp == input.SentTimestamp || + (this.SentTimestamp != null && + this.SentTimestamp.Equals(input.SentTimestamp)) + ) && + ( + this.MMSContent == input.MMSContent || + this.MMSContent != null && + input.MMSContent != null && + this.MMSContent.SequenceEqual(input.MMSContent) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Status != null) + hashCode = hashCode * 59 + this.Status.GetHashCode(); + if (this.DestinationAddress != null) + hashCode = hashCode * 59 + this.DestinationAddress.GetHashCode(); + if (this.SenderAddress != null) + hashCode = hashCode * 59 + this.SenderAddress.GetHashCode(); + if (this.Subject != null) + hashCode = hashCode * 59 + this.Subject.GetHashCode(); + if (this.MessageId != null) + hashCode = hashCode * 59 + this.MessageId.GetHashCode(); + if (this.ApiMsgId != null) + hashCode = hashCode * 59 + this.ApiMsgId.GetHashCode(); + if (this.SentTimestamp != null) + hashCode = hashCode * 59 + this.SentTimestamp.GetHashCode(); + if (this.MMSContent != null) + hashCode = hashCode * 59 + this.MMSContent.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/src/com.telstra.messaging/Model/GetSubscriptionResponse.cs b/src/Telstra.Messaging/Model/GetSubscriptionResponse.cs similarity index 84% rename from src/com.telstra.messaging/Model/GetSubscriptionResponse.cs rename to src/Telstra.Messaging/Model/GetSubscriptionResponse.cs index a86b549..3bbce3b 100644 --- a/src/com.telstra.messaging/Model/GetSubscriptionResponse.cs +++ b/src/Telstra.Messaging/Model/GetSubscriptionResponse.cs @@ -1,13 +1,14 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; using System.Linq; using System.IO; @@ -20,9 +21,9 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; -namespace com.telstra.messaging.Model +namespace Telstra.Messaging.Model { /// /// GetSubscriptionResponse @@ -33,14 +34,14 @@ public partial class GetSubscriptionResponse : IEquatable /// Initializes a new instance of the class. /// - /// Number of active days. - /// Notify url configured. - /// The mobile phone number that was allocated. - public GetSubscriptionResponse(string ActiveDays = default(string), string NotifyURL = default(string), string DestinationAddress = default(string)) + /// Number of active days. + /// Notify url configured. + /// The mobile phone number that was allocated. + public GetSubscriptionResponse(string activeDays = default(string), string notifyURL = default(string), string destinationAddress = default(string)) { - this.ActiveDays = ActiveDays; - this.NotifyURL = NotifyURL; - this.DestinationAddress = DestinationAddress; + this.ActiveDays = activeDays; + this.NotifyURL = notifyURL; + this.DestinationAddress = destinationAddress; } /// @@ -83,7 +84,7 @@ public override string ToString() /// Returns the JSON string presentation of the object /// /// JSON string presentation of the object - public string ToJson() + public virtual string ToJson() { return JsonConvert.SerializeObject(this, Formatting.Indented); } diff --git a/src/com.telstra.messaging/Model/ErrorErrorError.cs b/src/Telstra.Messaging/Model/HealthCheckResponse.cs similarity index 57% rename from src/com.telstra.messaging/Model/ErrorErrorError.cs rename to src/Telstra.Messaging/Model/HealthCheckResponse.cs index 0b9fed9..e096afe 100644 --- a/src/com.telstra.messaging/Model/ErrorErrorError.cs +++ b/src/Telstra.Messaging/Model/HealthCheckResponse.cs @@ -1,13 +1,14 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; using System.Linq; using System.IO; @@ -20,40 +21,31 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; -namespace com.telstra.messaging.Model +namespace Telstra.Messaging.Model { /// - /// Returns error status code and message + /// Information regarding service being up or down. /// [DataContract] - public partial class ErrorErrorError : IEquatable, IValidatableObject + public partial class HealthCheckResponse : IEquatable, IValidatableObject { /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// - /// The status code.. - /// Message describing the error.. - public ErrorErrorError(int? Status = default(int?), string Message = default(string)) + /// message status. + public HealthCheckResponse(string status = default(string)) { - this.Status = Status; - this.Message = Message; + this.Status = status; } /// - /// The status code. + /// message status /// - /// The status code. + /// message status [DataMember(Name="status", EmitDefaultValue=false)] - public int? Status { get; set; } - - /// - /// Message describing the error. - /// - /// Message describing the error. - [DataMember(Name="message", EmitDefaultValue=false)] - public string Message { get; set; } + public string Status { get; set; } /// /// Returns the string presentation of the object @@ -62,9 +54,8 @@ public partial class ErrorErrorError : IEquatable, IValidatabl public override string ToString() { var sb = new StringBuilder(); - sb.Append("class ErrorErrorError {\n"); + sb.Append("class HealthCheckResponse {\n"); sb.Append(" Status: ").Append(Status).Append("\n"); - sb.Append(" Message: ").Append(Message).Append("\n"); sb.Append("}\n"); return sb.ToString(); } @@ -73,7 +64,7 @@ public override string ToString() /// Returns the JSON string presentation of the object /// /// JSON string presentation of the object - public string ToJson() + public virtual string ToJson() { return JsonConvert.SerializeObject(this, Formatting.Indented); } @@ -85,15 +76,15 @@ public string ToJson() /// Boolean public override bool Equals(object input) { - return this.Equals(input as ErrorErrorError); + return this.Equals(input as HealthCheckResponse); } /// - /// Returns true if ErrorErrorError instances are equal + /// Returns true if HealthCheckResponse instances are equal /// - /// Instance of ErrorErrorError to be compared + /// Instance of HealthCheckResponse to be compared /// Boolean - public bool Equals(ErrorErrorError input) + public bool Equals(HealthCheckResponse input) { if (input == null) return false; @@ -103,11 +94,6 @@ public bool Equals(ErrorErrorError input) this.Status == input.Status || (this.Status != null && this.Status.Equals(input.Status)) - ) && - ( - this.Message == input.Message || - (this.Message != null && - this.Message.Equals(input.Message)) ); } @@ -122,8 +108,6 @@ public override int GetHashCode() int hashCode = 41; if (this.Status != null) hashCode = hashCode * 59 + this.Status.GetHashCode(); - if (this.Message != null) - hashCode = hashCode * 59 + this.Message.GetHashCode(); return hashCode; } } diff --git a/src/com.telstra.messaging/Model/InboundPollResponse.cs b/src/Telstra.Messaging/Model/InboundPollResponse.cs similarity index 81% rename from src/com.telstra.messaging/Model/InboundPollResponse.cs rename to src/Telstra.Messaging/Model/InboundPollResponse.cs index 71969a4..477fe50 100644 --- a/src/com.telstra.messaging/Model/InboundPollResponse.cs +++ b/src/Telstra.Messaging/Model/InboundPollResponse.cs @@ -1,13 +1,14 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; using System.Linq; using System.IO; @@ -20,12 +21,12 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; -namespace com.telstra.messaging.Model +namespace Telstra.Messaging.Model { /// - /// Poll for incoming messages returning the latest. Only works if no callback url was specified when provisioning a number. + /// Poll for incoming messages returning the latest. Only works if no callback url was specified when provisioning a number. /// [DataContract] public partial class InboundPollResponse : IEquatable, IValidatableObject @@ -33,20 +34,20 @@ public partial class InboundPollResponse : IEquatable, IVa /// /// Initializes a new instance of the class. /// - /// message status. - /// The phone number (recipient) that the message was sent to(in E.164 format).. - /// The phone number (sender) that the message was sent from (in E.164 format).. - /// Text of the message that was sent. - /// Message Id. - /// The date and time when the message was sent by recipient.. - public InboundPollResponse(string Status = default(string), string DestinationAddress = default(string), string SenderAddress = default(string), string Message = default(string), string MessageId = default(string), string SentTimestamp = default(string)) + /// message status. + /// The phone number (recipient) that the message was sent to (in E.164 format). . + /// The phone number (sender) that the message was sent from (in E.164 format). . + /// Text of the message that was sent. + /// Message Id. + /// The date and time when the message was sent by recipient.. + public InboundPollResponse(string status = default(string), string destinationAddress = default(string), string senderAddress = default(string), string message = default(string), string messageId = default(string), string sentTimestamp = default(string)) { - this.Status = Status; - this.DestinationAddress = DestinationAddress; - this.SenderAddress = SenderAddress; - this.Message = Message; - this.MessageId = MessageId; - this.SentTimestamp = SentTimestamp; + this.Status = status; + this.DestinationAddress = destinationAddress; + this.SenderAddress = senderAddress; + this.Message = message; + this.MessageId = messageId; + this.SentTimestamp = sentTimestamp; } /// @@ -57,16 +58,16 @@ public partial class InboundPollResponse : IEquatable, IVa public string Status { get; set; } /// - /// The phone number (recipient) that the message was sent to(in E.164 format). + /// The phone number (recipient) that the message was sent to (in E.164 format). /// - /// The phone number (recipient) that the message was sent to(in E.164 format). + /// The phone number (recipient) that the message was sent to (in E.164 format). [DataMember(Name="destinationAddress", EmitDefaultValue=false)] public string DestinationAddress { get; set; } /// - /// The phone number (sender) that the message was sent from (in E.164 format). + /// The phone number (sender) that the message was sent from (in E.164 format). /// - /// The phone number (sender) that the message was sent from (in E.164 format). + /// The phone number (sender) that the message was sent from (in E.164 format). [DataMember(Name="senderAddress", EmitDefaultValue=false)] public string SenderAddress { get; set; } @@ -113,7 +114,7 @@ public override string ToString() /// Returns the JSON string presentation of the object /// /// JSON string presentation of the object - public string ToJson() + public virtual string ToJson() { return JsonConvert.SerializeObject(this, Formatting.Indented); } diff --git a/src/com.telstra.messaging/Model/MMSContent.cs b/src/Telstra.Messaging/Model/MMSContent.cs similarity index 68% rename from src/com.telstra.messaging/Model/MMSContent.cs rename to src/Telstra.Messaging/Model/MMSContent.cs index 85c6b5c..108dc01 100644 --- a/src/com.telstra.messaging/Model/MMSContent.cs +++ b/src/Telstra.Messaging/Model/MMSContent.cs @@ -1,13 +1,14 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; using System.Linq; using System.IO; @@ -20,9 +21,9 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; -namespace com.telstra.messaging.Model +namespace Telstra.Messaging.Model { /// /// MMSContent @@ -38,57 +39,61 @@ protected MMSContent() { } /// /// Initializes a new instance of the class. /// - /// The following types are supported audio/amr audio/aac audio/mp3 audio/mpeg3 audio/mpeg audio/mpg audio/wav audio/3gpp audio/mp4 image/gif image/jpeg image/jpg image/png image/bmp video/mpeg4 video/mp4 video/mpeg video/3gpp video/3gp video/h263 text/plain text/x-vCard text/x-vCalendar (required). - /// The file name to be associated with the content. Some devices will display this file name with a placeholder for the content. (required). - /// Payload (required). - public MMSContent(string Type = default(string), string Filename = default(string), string Payload = default(string)) + /// The following types are supported audio/amr audio/aac audio/mp3 audio/mpeg3 audio/mpeg audio/mpg audio/wav audio/3gpp audio/mp4 image/gif image/jpeg image/jpg image/png image/bmp video/mpeg4 video/mp4 video/mpeg video/3gpp video/3gp video/h263 text/plain text/x-vCard text/x-vCalendar (required). + /// The file name to be associated with the content. Some devices will display this file name with a placeholder for the content. (required). + /// Base64 encoded message content. (required). + public MMSContent(string type = default(string), string filename = default(string), string payload = default(string)) { - // to ensure "Type" is required (not null) - if (Type == null) + // to ensure "type" is required (not null) + if (type == null) { - throw new InvalidDataException("Type is a required property for MMSContent and cannot be null"); + throw new InvalidDataException("type is a required property for MMSContent and cannot be null"); } else { - this.Type = Type; + this.Type = type; } - // to ensure "Filename" is required (not null) - if (Filename == null) + + // to ensure "filename" is required (not null) + if (filename == null) { - throw new InvalidDataException("Filename is a required property for MMSContent and cannot be null"); + throw new InvalidDataException("filename is a required property for MMSContent and cannot be null"); } else { - this.Filename = Filename; + this.Filename = filename; } - // to ensure "Payload" is required (not null) - if (Payload == null) + + // to ensure "payload" is required (not null) + if (payload == null) { - throw new InvalidDataException("Payload is a required property for MMSContent and cannot be null"); + throw new InvalidDataException("payload is a required property for MMSContent and cannot be null"); } else { - this.Payload = Payload; + this.Payload = payload; } + } /// - /// The following types are supported audio/amr audio/aac audio/mp3 audio/mpeg3 audio/mpeg audio/mpg audio/wav audio/3gpp audio/mp4 image/gif image/jpeg image/jpg image/png image/bmp video/mpeg4 video/mp4 video/mpeg video/3gpp video/3gp video/h263 text/plain text/x-vCard text/x-vCalendar + /// The following types are supported audio/amr audio/aac audio/mp3 audio/mpeg3 audio/mpeg audio/mpg audio/wav audio/3gpp audio/mp4 image/gif image/jpeg image/jpg image/png image/bmp video/mpeg4 video/mp4 video/mpeg video/3gpp video/3gp video/h263 text/plain text/x-vCard text/x-vCalendar /// - /// The following types are supported audio/amr audio/aac audio/mp3 audio/mpeg3 audio/mpeg audio/mpg audio/wav audio/3gpp audio/mp4 image/gif image/jpeg image/jpg image/png image/bmp video/mpeg4 video/mp4 video/mpeg video/3gpp video/3gp video/h263 text/plain text/x-vCard text/x-vCalendar + /// The following types are supported audio/amr audio/aac audio/mp3 audio/mpeg3 audio/mpeg audio/mpg audio/wav audio/3gpp audio/mp4 image/gif image/jpeg image/jpg image/png image/bmp video/mpeg4 video/mp4 video/mpeg video/3gpp video/3gp video/h263 text/plain text/x-vCard text/x-vCalendar [DataMember(Name="type", EmitDefaultValue=false)] public string Type { get; set; } /// - /// The file name to be associated with the content. Some devices will display this file name with a placeholder for the content. + /// The file name to be associated with the content. Some devices will display this file name with a placeholder for the content. /// - /// The file name to be associated with the content. Some devices will display this file name with a placeholder for the content. + /// The file name to be associated with the content. Some devices will display this file name with a placeholder for the content. [DataMember(Name="filename", EmitDefaultValue=false)] public string Filename { get; set; } /// - /// Gets or Sets Payload + /// Base64 encoded message content. /// + /// Base64 encoded message content. [DataMember(Name="payload", EmitDefaultValue=false)] public string Payload { get; set; } @@ -111,7 +116,7 @@ public override string ToString() /// Returns the JSON string presentation of the object /// /// JSON string presentation of the object - public string ToJson() + public virtual string ToJson() { return JsonConvert.SerializeObject(this, Formatting.Indented); } diff --git a/src/com.telstra.messaging/Model/Message.cs b/src/Telstra.Messaging/Model/Message.cs similarity index 62% rename from src/com.telstra.messaging/Model/Message.cs rename to src/Telstra.Messaging/Model/Message.cs index 71f6895..06640ce 100644 --- a/src/com.telstra.messaging/Model/Message.cs +++ b/src/Telstra.Messaging/Model/Message.cs @@ -1,13 +1,14 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; using System.Linq; using System.IO; @@ -20,9 +21,9 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; -namespace com.telstra.messaging.Model +namespace Telstra.Messaging.Model { /// /// Message @@ -38,63 +39,70 @@ protected Message() { } /// /// Initializes a new instance of the class. /// - /// To (required). - /// DeliveryStatus (required). - /// MessageId (required). - /// MessageStatusURL. - public Message(string To = default(string), string DeliveryStatus = default(string), string MessageId = default(string), string MessageStatusURL = default(string)) + /// Just a copy of the number the message is sent to. (required). + /// Gives an indication if the message has been accepted for delivery. The description field contains information on why a message may have been rejected. (required). + /// For an accepted message, ths will be a unique reference that can be used to check the messages status. Please refer to the Delivery Notification section. Note that `messageId` will be different for each number that the message was sent to. (required). + /// For an accepted message, ths will be the URL that can be used to check the messages status. Please refer to the Delivery Notification section. . + public Message(string to = default(string), string deliveryStatus = default(string), string messageId = default(string), string messageStatusURL = default(string)) { - // to ensure "To" is required (not null) - if (To == null) + // to ensure "to" is required (not null) + if (to == null) { - throw new InvalidDataException("To is a required property for Message and cannot be null"); + throw new InvalidDataException("to is a required property for Message and cannot be null"); } else { - this.To = To; + this.To = to; } - // to ensure "DeliveryStatus" is required (not null) - if (DeliveryStatus == null) + + // to ensure "deliveryStatus" is required (not null) + if (deliveryStatus == null) { - throw new InvalidDataException("DeliveryStatus is a required property for Message and cannot be null"); + throw new InvalidDataException("deliveryStatus is a required property for Message and cannot be null"); } else { - this.DeliveryStatus = DeliveryStatus; + this.DeliveryStatus = deliveryStatus; } - // to ensure "MessageId" is required (not null) - if (MessageId == null) + + // to ensure "messageId" is required (not null) + if (messageId == null) { - throw new InvalidDataException("MessageId is a required property for Message and cannot be null"); + throw new InvalidDataException("messageId is a required property for Message and cannot be null"); } else { - this.MessageId = MessageId; + this.MessageId = messageId; } - this.MessageStatusURL = MessageStatusURL; + + this.MessageStatusURL = messageStatusURL; } /// - /// Gets or Sets To + /// Just a copy of the number the message is sent to. /// + /// Just a copy of the number the message is sent to. [DataMember(Name="to", EmitDefaultValue=false)] public string To { get; set; } /// - /// Gets or Sets DeliveryStatus + /// Gives an indication if the message has been accepted for delivery. The description field contains information on why a message may have been rejected. /// + /// Gives an indication if the message has been accepted for delivery. The description field contains information on why a message may have been rejected. [DataMember(Name="deliveryStatus", EmitDefaultValue=false)] public string DeliveryStatus { get; set; } /// - /// Gets or Sets MessageId + /// For an accepted message, ths will be a unique reference that can be used to check the messages status. Please refer to the Delivery Notification section. Note that `messageId` will be different for each number that the message was sent to. /// + /// For an accepted message, ths will be a unique reference that can be used to check the messages status. Please refer to the Delivery Notification section. Note that `messageId` will be different for each number that the message was sent to. [DataMember(Name="messageId", EmitDefaultValue=false)] public string MessageId { get; set; } /// - /// Gets or Sets MessageStatusURL + /// For an accepted message, ths will be the URL that can be used to check the messages status. Please refer to the Delivery Notification section. /// + /// For an accepted message, ths will be the URL that can be used to check the messages status. Please refer to the Delivery Notification section. [DataMember(Name="messageStatusURL", EmitDefaultValue=false)] public string MessageStatusURL { get; set; } @@ -118,7 +126,7 @@ public override string ToString() /// Returns the JSON string presentation of the object /// /// JSON string presentation of the object - public string ToJson() + public virtual string ToJson() { return JsonConvert.SerializeObject(this, Formatting.Indented); } diff --git a/src/Telstra.Messaging/Model/MessageMulti.cs b/src/Telstra.Messaging/Model/MessageMulti.cs new file mode 100644 index 0000000..ad6e677 --- /dev/null +++ b/src/Telstra.Messaging/Model/MessageMulti.cs @@ -0,0 +1,158 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; + +namespace Telstra.Messaging.Model +{ + /// + /// MessageMulti + /// + [DataContract] + public partial class MessageMulti : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// Phone number (in E.164 format) to send the SMS to. This number can be in international format `\"to\": \"+61412345678\"` or in national format. . + /// The text body of the message. Messages longer than 160 characters will be counted as multiple messages. This field contains the message text, this can be up to 1900 (for a single recipient) or 500 (for multiple recipients) UTF-8 characters. As mobile devices rarely support the full range of UTF-8 characters, it is possible that some characters may not be translated correctly by the mobile device . + /// Whether Delivery Receipt will be sent back or not. Setting this field to `true` will disable Delivery Receipts. The `notifyURL` field will be ignored, if there is one in the payload. An \"OLD-NONEXISTANT-MESSAGE-ID\" 400 error will also be returned upon Polling for the SMS Status. . + public MessageMulti(string to = default(string), string body = default(string), bool receiptOff = default(bool)) + { + this.To = to; + this.Body = body; + this.ReceiptOff = receiptOff; + } + + /// + /// Phone number (in E.164 format) to send the SMS to. This number can be in international format `\"to\": \"+61412345678\"` or in national format. + /// + /// Phone number (in E.164 format) to send the SMS to. This number can be in international format `\"to\": \"+61412345678\"` or in national format. + [DataMember(Name="to", EmitDefaultValue=false)] + public string To { get; set; } + + /// + /// The text body of the message. Messages longer than 160 characters will be counted as multiple messages. This field contains the message text, this can be up to 1900 (for a single recipient) or 500 (for multiple recipients) UTF-8 characters. As mobile devices rarely support the full range of UTF-8 characters, it is possible that some characters may not be translated correctly by the mobile device + /// + /// The text body of the message. Messages longer than 160 characters will be counted as multiple messages. This field contains the message text, this can be up to 1900 (for a single recipient) or 500 (for multiple recipients) UTF-8 characters. As mobile devices rarely support the full range of UTF-8 characters, it is possible that some characters may not be translated correctly by the mobile device + [DataMember(Name="body", EmitDefaultValue=false)] + public string Body { get; set; } + + /// + /// Whether Delivery Receipt will be sent back or not. Setting this field to `true` will disable Delivery Receipts. The `notifyURL` field will be ignored, if there is one in the payload. An \"OLD-NONEXISTANT-MESSAGE-ID\" 400 error will also be returned upon Polling for the SMS Status. + /// + /// Whether Delivery Receipt will be sent back or not. Setting this field to `true` will disable Delivery Receipts. The `notifyURL` field will be ignored, if there is one in the payload. An \"OLD-NONEXISTANT-MESSAGE-ID\" 400 error will also be returned upon Polling for the SMS Status. + [DataMember(Name="receiptOff", EmitDefaultValue=false)] + public bool ReceiptOff { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class MessageMulti {\n"); + sb.Append(" To: ").Append(To).Append("\n"); + sb.Append(" Body: ").Append(Body).Append("\n"); + sb.Append(" ReceiptOff: ").Append(ReceiptOff).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as MessageMulti); + } + + /// + /// Returns true if MessageMulti instances are equal + /// + /// Instance of MessageMulti to be compared + /// Boolean + public bool Equals(MessageMulti input) + { + if (input == null) + return false; + + return + ( + this.To == input.To || + (this.To != null && + this.To.Equals(input.To)) + ) && + ( + this.Body == input.Body || + (this.Body != null && + this.Body.Equals(input.Body)) + ) && + ( + this.ReceiptOff == input.ReceiptOff || + this.ReceiptOff.Equals(input.ReceiptOff) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.To != null) + hashCode = hashCode * 59 + this.To.GetHashCode(); + if (this.Body != null) + hashCode = hashCode * 59 + this.Body.GetHashCode(); + hashCode = hashCode * 59 + this.ReceiptOff.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/src/Telstra.Messaging/Model/MessageSentResponseMms.cs b/src/Telstra.Messaging/Model/MessageSentResponseMms.cs new file mode 100644 index 0000000..f20c644 --- /dev/null +++ b/src/Telstra.Messaging/Model/MessageSentResponseMms.cs @@ -0,0 +1,224 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; + +namespace Telstra.Messaging.Model +{ + /// + /// MessageSentResponseMms + /// + [DataContract] + public partial class MessageSentResponseMms : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected MessageSentResponseMms() { } + /// + /// Initializes a new instance of the class. + /// + /// An array of messages. (required). + /// Indicates the message size in kB of the MMS sent. . + /// An array of the countries to which the destination MSISDNs belong.. + /// This returns whether the message sent was a SMS or MMS. (required). + /// MMS with numberSegments below 600 are classed as Small whereas those that are bigger than 600 are classed as Large. They will be charged accordingly. (required). + public MessageSentResponseMms(List messages = default(List), int mmsMediaKB = default(int), List country = default(List), string messageType = default(string), int numberSegments = default(int)) + { + // to ensure "messages" is required (not null) + if (messages == null) + { + throw new InvalidDataException("messages is a required property for MessageSentResponseMms and cannot be null"); + } + else + { + this.Messages = messages; + } + + // to ensure "messageType" is required (not null) + if (messageType == null) + { + throw new InvalidDataException("messageType is a required property for MessageSentResponseMms and cannot be null"); + } + else + { + this.MessageType = messageType; + } + + // to ensure "numberSegments" is required (not null) + if (numberSegments == null) + { + throw new InvalidDataException("numberSegments is a required property for MessageSentResponseMms and cannot be null"); + } + else + { + this.NumberSegments = numberSegments; + } + + this.MmsMediaKB = mmsMediaKB; + this.Country = country; + } + + /// + /// An array of messages. + /// + /// An array of messages. + [DataMember(Name="messages", EmitDefaultValue=false)] + public List Messages { get; set; } + + /// + /// Indicates the message size in kB of the MMS sent. + /// + /// Indicates the message size in kB of the MMS sent. + [DataMember(Name="MmsMediaKB", EmitDefaultValue=false)] + public int MmsMediaKB { get; set; } + + /// + /// An array of the countries to which the destination MSISDNs belong. + /// + /// An array of the countries to which the destination MSISDNs belong. + [DataMember(Name="Country", EmitDefaultValue=false)] + public List Country { get; set; } + + /// + /// This returns whether the message sent was a SMS or MMS. + /// + /// This returns whether the message sent was a SMS or MMS. + [DataMember(Name="messageType", EmitDefaultValue=false)] + public string MessageType { get; set; } + + /// + /// MMS with numberSegments below 600 are classed as Small whereas those that are bigger than 600 are classed as Large. They will be charged accordingly. + /// + /// MMS with numberSegments below 600 are classed as Small whereas those that are bigger than 600 are classed as Large. They will be charged accordingly. + [DataMember(Name="numberSegments", EmitDefaultValue=false)] + public int NumberSegments { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class MessageSentResponseMms {\n"); + sb.Append(" Messages: ").Append(Messages).Append("\n"); + sb.Append(" MmsMediaKB: ").Append(MmsMediaKB).Append("\n"); + sb.Append(" Country: ").Append(Country).Append("\n"); + sb.Append(" MessageType: ").Append(MessageType).Append("\n"); + sb.Append(" NumberSegments: ").Append(NumberSegments).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as MessageSentResponseMms); + } + + /// + /// Returns true if MessageSentResponseMms instances are equal + /// + /// Instance of MessageSentResponseMms to be compared + /// Boolean + public bool Equals(MessageSentResponseMms input) + { + if (input == null) + return false; + + return + ( + this.Messages == input.Messages || + this.Messages != null && + input.Messages != null && + this.Messages.SequenceEqual(input.Messages) + ) && + ( + this.MmsMediaKB == input.MmsMediaKB || + this.MmsMediaKB.Equals(input.MmsMediaKB) + ) && + ( + this.Country == input.Country || + this.Country != null && + input.Country != null && + this.Country.SequenceEqual(input.Country) + ) && + ( + this.MessageType == input.MessageType || + (this.MessageType != null && + this.MessageType.Equals(input.MessageType)) + ) && + ( + this.NumberSegments == input.NumberSegments || + this.NumberSegments.Equals(input.NumberSegments) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Messages != null) + hashCode = hashCode * 59 + this.Messages.GetHashCode(); + hashCode = hashCode * 59 + this.MmsMediaKB.GetHashCode(); + if (this.Country != null) + hashCode = hashCode * 59 + this.Country.GetHashCode(); + if (this.MessageType != null) + hashCode = hashCode * 59 + this.MessageType.GetHashCode(); + hashCode = hashCode * 59 + this.NumberSegments.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/src/Telstra.Messaging/Model/MessageSentResponseSms.cs b/src/Telstra.Messaging/Model/MessageSentResponseSms.cs new file mode 100644 index 0000000..fb2bf4e --- /dev/null +++ b/src/Telstra.Messaging/Model/MessageSentResponseSms.cs @@ -0,0 +1,209 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; + +namespace Telstra.Messaging.Model +{ + /// + /// MessageSentResponseSms + /// + [DataContract] + public partial class MessageSentResponseSms : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected MessageSentResponseSms() { } + /// + /// Initializes a new instance of the class. + /// + /// An array of messages. (required). + /// An array of the countries to which the destination MSISDNs belong.. + /// This returns whether the message sent was a SMS or MMS. (required). + /// A message which has 160 GSM-7 characters or less will have numberSegments=1. Note that multi-part messages which are over 160 GSM-7 characters will include the User Data Header as part of the numberSegments. The User Data Header is being used for the re-assembly of the messages. (required). + public MessageSentResponseSms(List messages = default(List), List country = default(List), string messageType = default(string), int numberSegments = default(int)) + { + // to ensure "messages" is required (not null) + if (messages == null) + { + throw new InvalidDataException("messages is a required property for MessageSentResponseSms and cannot be null"); + } + else + { + this.Messages = messages; + } + + // to ensure "messageType" is required (not null) + if (messageType == null) + { + throw new InvalidDataException("messageType is a required property for MessageSentResponseSms and cannot be null"); + } + else + { + this.MessageType = messageType; + } + + // to ensure "numberSegments" is required (not null) + if (numberSegments == null) + { + throw new InvalidDataException("numberSegments is a required property for MessageSentResponseSms and cannot be null"); + } + else + { + this.NumberSegments = numberSegments; + } + + this.Country = country; + } + + /// + /// An array of messages. + /// + /// An array of messages. + [DataMember(Name="messages", EmitDefaultValue=false)] + public List Messages { get; set; } + + /// + /// An array of the countries to which the destination MSISDNs belong. + /// + /// An array of the countries to which the destination MSISDNs belong. + [DataMember(Name="Country", EmitDefaultValue=false)] + public List Country { get; set; } + + /// + /// This returns whether the message sent was a SMS or MMS. + /// + /// This returns whether the message sent was a SMS or MMS. + [DataMember(Name="messageType", EmitDefaultValue=false)] + public string MessageType { get; set; } + + /// + /// A message which has 160 GSM-7 characters or less will have numberSegments=1. Note that multi-part messages which are over 160 GSM-7 characters will include the User Data Header as part of the numberSegments. The User Data Header is being used for the re-assembly of the messages. + /// + /// A message which has 160 GSM-7 characters or less will have numberSegments=1. Note that multi-part messages which are over 160 GSM-7 characters will include the User Data Header as part of the numberSegments. The User Data Header is being used for the re-assembly of the messages. + [DataMember(Name="numberSegments", EmitDefaultValue=false)] + public int NumberSegments { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class MessageSentResponseSms {\n"); + sb.Append(" Messages: ").Append(Messages).Append("\n"); + sb.Append(" Country: ").Append(Country).Append("\n"); + sb.Append(" MessageType: ").Append(MessageType).Append("\n"); + sb.Append(" NumberSegments: ").Append(NumberSegments).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as MessageSentResponseSms); + } + + /// + /// Returns true if MessageSentResponseSms instances are equal + /// + /// Instance of MessageSentResponseSms to be compared + /// Boolean + public bool Equals(MessageSentResponseSms input) + { + if (input == null) + return false; + + return + ( + this.Messages == input.Messages || + this.Messages != null && + input.Messages != null && + this.Messages.SequenceEqual(input.Messages) + ) && + ( + this.Country == input.Country || + this.Country != null && + input.Country != null && + this.Country.SequenceEqual(input.Country) + ) && + ( + this.MessageType == input.MessageType || + (this.MessageType != null && + this.MessageType.Equals(input.MessageType)) + ) && + ( + this.NumberSegments == input.NumberSegments || + this.NumberSegments.Equals(input.NumberSegments) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Messages != null) + hashCode = hashCode * 59 + this.Messages.GetHashCode(); + if (this.Country != null) + hashCode = hashCode * 59 + this.Country.GetHashCode(); + if (this.MessageType != null) + hashCode = hashCode * 59 + this.MessageType.GetHashCode(); + hashCode = hashCode * 59 + this.NumberSegments.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/src/com.telstra.messaging/Model/OAuthResponse.cs b/src/Telstra.Messaging/Model/OAuthResponse.cs similarity index 82% rename from src/com.telstra.messaging/Model/OAuthResponse.cs rename to src/Telstra.Messaging/Model/OAuthResponse.cs index ce1aed3..052919f 100644 --- a/src/com.telstra.messaging/Model/OAuthResponse.cs +++ b/src/Telstra.Messaging/Model/OAuthResponse.cs @@ -1,13 +1,14 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; using System.Linq; using System.IO; @@ -20,9 +21,9 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; -namespace com.telstra.messaging.Model +namespace Telstra.Messaging.Model { /// /// OAuthResponse @@ -33,14 +34,14 @@ public partial class OAuthResponse : IEquatable, IValidatableObj /// /// Initializes a new instance of the class. /// - /// OAuth access token. - /// OAuth token type. - /// OAuth expity time. - public OAuthResponse(string AccessToken = default(string), string TokenType = default(string), string ExpiresIn = default(string)) + /// OAuth access token. + /// OAuth token type. + /// OAuth expiry time. + public OAuthResponse(string accessToken = default(string), string tokenType = default(string), string expiresIn = default(string)) { - this.AccessToken = AccessToken; - this.TokenType = TokenType; - this.ExpiresIn = ExpiresIn; + this.AccessToken = accessToken; + this.TokenType = tokenType; + this.ExpiresIn = expiresIn; } /// @@ -58,9 +59,9 @@ public partial class OAuthResponse : IEquatable, IValidatableObj public string TokenType { get; set; } /// - /// OAuth expity time + /// OAuth expiry time /// - /// OAuth expity time + /// OAuth expiry time [DataMember(Name="expires_in", EmitDefaultValue=false)] public string ExpiresIn { get; set; } @@ -83,7 +84,7 @@ public override string ToString() /// Returns the JSON string presentation of the object /// /// JSON string presentation of the object - public string ToJson() + public virtual string ToJson() { return JsonConvert.SerializeObject(this, Formatting.Indented); } diff --git a/src/com.telstra.messaging/Model/OutboundPollResponse.cs b/src/Telstra.Messaging/Model/OutboundPollResponse.cs similarity index 79% rename from src/com.telstra.messaging/Model/OutboundPollResponse.cs rename to src/Telstra.Messaging/Model/OutboundPollResponse.cs index 33c0233..bcdabbe 100644 --- a/src/com.telstra.messaging/Model/OutboundPollResponse.cs +++ b/src/Telstra.Messaging/Model/OutboundPollResponse.cs @@ -1,13 +1,14 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; using System.Linq; using System.IO; @@ -20,9 +21,9 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; -namespace com.telstra.messaging.Model +namespace Telstra.Messaging.Model { /// /// OutboundPollResponse @@ -38,32 +39,25 @@ public partial class OutboundPollResponse : IEquatable, I /// /// Initializes a new instance of the class. /// - /// The phone number (recipient) the message was sent to (in E.164 format).. - /// The date and time when the message was recieved by recipient.. - /// The date and time when the message was sent.. - /// DeliveryStatus. - public OutboundPollResponse(string To = default(string), string ReceivedTimestamp = default(string), string SentTimestamp = default(string), Status? DeliveryStatus = default(Status?)) + /// The phone number (recipient) the message was sent to (in E.164 format). . + /// The date and time when the message was sent.. + /// The date and time when the message was recieved by recipient.. + /// deliveryStatus. + public OutboundPollResponse(string to = default(string), string sentTimestamp = default(string), string receivedTimestamp = default(string), Status deliveryStatus = default(Status)) { - this.To = To; - this.ReceivedTimestamp = ReceivedTimestamp; - this.SentTimestamp = SentTimestamp; - this.DeliveryStatus = DeliveryStatus; + this.To = to; + this.SentTimestamp = sentTimestamp; + this.ReceivedTimestamp = receivedTimestamp; + this.DeliveryStatus = deliveryStatus; } /// - /// The phone number (recipient) the message was sent to (in E.164 format). + /// The phone number (recipient) the message was sent to (in E.164 format). /// - /// The phone number (recipient) the message was sent to (in E.164 format). + /// The phone number (recipient) the message was sent to (in E.164 format). [DataMember(Name="to", EmitDefaultValue=false)] public string To { get; set; } - /// - /// The date and time when the message was recieved by recipient. - /// - /// The date and time when the message was recieved by recipient. - [DataMember(Name="receivedTimestamp", EmitDefaultValue=false)] - public string ReceivedTimestamp { get; set; } - /// /// The date and time when the message was sent. /// @@ -71,6 +65,12 @@ public partial class OutboundPollResponse : IEquatable, I [DataMember(Name="sentTimestamp", EmitDefaultValue=false)] public string SentTimestamp { get; set; } + /// + /// The date and time when the message was recieved by recipient. + /// + /// The date and time when the message was recieved by recipient. + [DataMember(Name="receivedTimestamp", EmitDefaultValue=false)] + public string ReceivedTimestamp { get; set; } /// /// Returns the string presentation of the object @@ -81,8 +81,8 @@ public override string ToString() var sb = new StringBuilder(); sb.Append("class OutboundPollResponse {\n"); sb.Append(" To: ").Append(To).Append("\n"); - sb.Append(" ReceivedTimestamp: ").Append(ReceivedTimestamp).Append("\n"); sb.Append(" SentTimestamp: ").Append(SentTimestamp).Append("\n"); + sb.Append(" ReceivedTimestamp: ").Append(ReceivedTimestamp).Append("\n"); sb.Append(" DeliveryStatus: ").Append(DeliveryStatus).Append("\n"); sb.Append("}\n"); return sb.ToString(); @@ -92,7 +92,7 @@ public override string ToString() /// Returns the JSON string presentation of the object /// /// JSON string presentation of the object - public string ToJson() + public virtual string ToJson() { return JsonConvert.SerializeObject(this, Formatting.Indented); } @@ -123,20 +123,19 @@ public bool Equals(OutboundPollResponse input) (this.To != null && this.To.Equals(input.To)) ) && - ( - this.ReceivedTimestamp == input.ReceivedTimestamp || - (this.ReceivedTimestamp != null && - this.ReceivedTimestamp.Equals(input.ReceivedTimestamp)) - ) && ( this.SentTimestamp == input.SentTimestamp || (this.SentTimestamp != null && this.SentTimestamp.Equals(input.SentTimestamp)) ) && + ( + this.ReceivedTimestamp == input.ReceivedTimestamp || + (this.ReceivedTimestamp != null && + this.ReceivedTimestamp.Equals(input.ReceivedTimestamp)) + ) && ( this.DeliveryStatus == input.DeliveryStatus || - (this.DeliveryStatus != null && - this.DeliveryStatus.Equals(input.DeliveryStatus)) + this.DeliveryStatus.Equals(input.DeliveryStatus) ); } @@ -151,12 +150,11 @@ public override int GetHashCode() int hashCode = 41; if (this.To != null) hashCode = hashCode * 59 + this.To.GetHashCode(); - if (this.ReceivedTimestamp != null) - hashCode = hashCode * 59 + this.ReceivedTimestamp.GetHashCode(); if (this.SentTimestamp != null) hashCode = hashCode * 59 + this.SentTimestamp.GetHashCode(); - if (this.DeliveryStatus != null) - hashCode = hashCode * 59 + this.DeliveryStatus.GetHashCode(); + if (this.ReceivedTimestamp != null) + hashCode = hashCode * 59 + this.ReceivedTimestamp.GetHashCode(); + hashCode = hashCode * 59 + this.DeliveryStatus.GetHashCode(); return hashCode; } } diff --git a/src/com.telstra.messaging/Model/ProvisionNumberRequest.cs b/src/Telstra.Messaging/Model/ProvisionNumberRequest.cs similarity index 58% rename from src/com.telstra.messaging/Model/ProvisionNumberRequest.cs rename to src/Telstra.Messaging/Model/ProvisionNumberRequest.cs index bad16d0..697f511 100644 --- a/src/com.telstra.messaging/Model/ProvisionNumberRequest.cs +++ b/src/Telstra.Messaging/Model/ProvisionNumberRequest.cs @@ -1,13 +1,14 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; using System.Linq; using System.IO; @@ -20,9 +21,9 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; -namespace com.telstra.messaging.Model +namespace Telstra.Messaging.Model { /// /// ProvisionNumberRequest @@ -33,25 +34,25 @@ public partial class ProvisionNumberRequest : IEquatable /// Initializes a new instance of the class. /// - /// Number of active days. - /// Notify url. - public ProvisionNumberRequest(int? ActiveDays = default(int?), string NotifyURL = default(string)) + /// The number of days before for which this number is provisioned. . + /// A notification URL that will be POSTed to whenever a new message (i.e. a reply to a message sent) arrives at this destination address. If this is not provided then you can use the Get /sms or /mms API to poll for reply messages. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). *Please note that the notification URLs and the Get /sms or /mms call are exclusive. If a notification URL has been set then the GET call will not provide any useful information.* . + public ProvisionNumberRequest(int activeDays = default(int), string notifyURL = default(string)) { - this.ActiveDays = ActiveDays; - this.NotifyURL = NotifyURL; + this.ActiveDays = activeDays; + this.NotifyURL = notifyURL; } /// - /// Number of active days + /// The number of days before for which this number is provisioned. /// - /// Number of active days + /// The number of days before for which this number is provisioned. [DataMember(Name="activeDays", EmitDefaultValue=false)] - public int? ActiveDays { get; set; } + public int ActiveDays { get; set; } /// - /// Notify url + /// A notification URL that will be POSTed to whenever a new message (i.e. a reply to a message sent) arrives at this destination address. If this is not provided then you can use the Get /sms or /mms API to poll for reply messages. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). *Please note that the notification URLs and the Get /sms or /mms call are exclusive. If a notification URL has been set then the GET call will not provide any useful information.* /// - /// Notify url + /// A notification URL that will be POSTed to whenever a new message (i.e. a reply to a message sent) arrives at this destination address. If this is not provided then you can use the Get /sms or /mms API to poll for reply messages. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). *Please note that the notification URLs and the Get /sms or /mms call are exclusive. If a notification URL has been set then the GET call will not provide any useful information.* [DataMember(Name="notifyURL", EmitDefaultValue=false)] public string NotifyURL { get; set; } @@ -73,7 +74,7 @@ public override string ToString() /// Returns the JSON string presentation of the object /// /// JSON string presentation of the object - public string ToJson() + public virtual string ToJson() { return JsonConvert.SerializeObject(this, Formatting.Indented); } @@ -101,8 +102,7 @@ public bool Equals(ProvisionNumberRequest input) return ( this.ActiveDays == input.ActiveDays || - (this.ActiveDays != null && - this.ActiveDays.Equals(input.ActiveDays)) + this.ActiveDays.Equals(input.ActiveDays) ) && ( this.NotifyURL == input.NotifyURL || @@ -120,8 +120,7 @@ public override int GetHashCode() unchecked // Overflow is fine, just wrap { int hashCode = 41; - if (this.ActiveDays != null) - hashCode = hashCode * 59 + this.ActiveDays.GetHashCode(); + hashCode = hashCode * 59 + this.ActiveDays.GetHashCode(); if (this.NotifyURL != null) hashCode = hashCode * 59 + this.NotifyURL.GetHashCode(); return hashCode; diff --git a/src/com.telstra.messaging/Model/ProvisionNumberResponse.cs b/src/Telstra.Messaging/Model/ProvisionNumberResponse.cs similarity index 71% rename from src/com.telstra.messaging/Model/ProvisionNumberResponse.cs rename to src/Telstra.Messaging/Model/ProvisionNumberResponse.cs index 0ec5ad1..2433ed7 100644 --- a/src/com.telstra.messaging/Model/ProvisionNumberResponse.cs +++ b/src/Telstra.Messaging/Model/ProvisionNumberResponse.cs @@ -1,13 +1,14 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; using System.Linq; using System.IO; @@ -20,9 +21,9 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; -namespace com.telstra.messaging.Model +namespace Telstra.Messaging.Model { /// /// ProvisionNumberResponse @@ -33,10 +34,12 @@ public partial class ProvisionNumberResponse : IEquatable /// Initializes a new instance of the class. /// - /// The mobile phone number that was allocated. - public ProvisionNumberResponse(string DestinationAddress = default(string)) + /// The mobile phone number that was allocated. + /// Free Trial apps can only add activeDays for their provisioned number every 30 days. This is in Unix time format.. + public ProvisionNumberResponse(string destinationAddress = default(string), decimal expiryDate = default(decimal)) { - this.DestinationAddress = DestinationAddress; + this.DestinationAddress = destinationAddress; + this.ExpiryDate = expiryDate; } /// @@ -46,6 +49,13 @@ public partial class ProvisionNumberResponse : IEquatable + /// Free Trial apps can only add activeDays for their provisioned number every 30 days. This is in Unix time format. + /// + /// Free Trial apps can only add activeDays for their provisioned number every 30 days. This is in Unix time format. + [DataMember(Name="expiryDate", EmitDefaultValue=false)] + public decimal ExpiryDate { get; set; } + /// /// Returns the string presentation of the object /// @@ -55,6 +65,7 @@ public override string ToString() var sb = new StringBuilder(); sb.Append("class ProvisionNumberResponse {\n"); sb.Append(" DestinationAddress: ").Append(DestinationAddress).Append("\n"); + sb.Append(" ExpiryDate: ").Append(ExpiryDate).Append("\n"); sb.Append("}\n"); return sb.ToString(); } @@ -63,7 +74,7 @@ public override string ToString() /// Returns the JSON string presentation of the object /// /// JSON string presentation of the object - public string ToJson() + public virtual string ToJson() { return JsonConvert.SerializeObject(this, Formatting.Indented); } @@ -93,6 +104,10 @@ public bool Equals(ProvisionNumberResponse input) this.DestinationAddress == input.DestinationAddress || (this.DestinationAddress != null && this.DestinationAddress.Equals(input.DestinationAddress)) + ) && + ( + this.ExpiryDate == input.ExpiryDate || + this.ExpiryDate.Equals(input.ExpiryDate) ); } @@ -107,6 +122,7 @@ public override int GetHashCode() int hashCode = 41; if (this.DestinationAddress != null) hashCode = hashCode * 59 + this.DestinationAddress.GetHashCode(); + hashCode = hashCode * 59 + this.ExpiryDate.GetHashCode(); return hashCode; } } diff --git a/src/Telstra.Messaging/Model/SendMmsRequest.cs b/src/Telstra.Messaging/Model/SendMmsRequest.cs new file mode 100644 index 0000000..ec4a283 --- /dev/null +++ b/src/Telstra.Messaging/Model/SendMmsRequest.cs @@ -0,0 +1,233 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; + +namespace Telstra.Messaging.Model +{ + /// + /// SendMmsRequest + /// + [DataContract] + public partial class SendMmsRequest : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected SendMmsRequest() { } + /// + /// Initializes a new instance of the class. + /// + /// This is the destination address. Can be an array of strings if sending to multiple numbers: \"to\":[\"+61412345678\", \"+61418765432\"] (required). + /// This will be the source address that will be displayed on the receiving device. You can set an Alphanumeric sender ID of up to 11 characters that the MMS was sent from. Phone numbers in the `from` attribute will be blocked (400-error) to prevent number spoofing. Most standard ASCII characters are accepted in the alphanumeric `from` attribute, however there are some limitations. The following limitations and characters are allowed in the alphanumeric `from` attribute; any alphabetic character (e.g. `abc`), any number mixed with alphabetic characters (e.g. `123abc`), uppercase and lowercase characters (e.g. `aBc`), any of the following special characters mixed with alphabetic characters are allowed; `~!@#$%^&*()~_~+-={}|[];'?,./` (e.g. `abc~!@`), any combination of lowercase, uppercase, numeric or allowed special characters (e.g. `abc@#123DE`). All other characters, including spaces and extended ASCII characters, are not allowed (e.g. `<>:\"\\`). If attribute is not present, the service will use the mobile number associated with the application (in E.164 format). If `replyRequest` is set to true, this field should not be present. This feature is only available on Telstra Account paid plans, not through Free Trials or credit card paid plans. *Please note:* *- Alphanumeric sender ID works for domestic, i.e. Australian, destinations only.* *- When Alphanumeric sender ID is used in sending MMS, Delivery Reports will NOT be returned.* . + /// The subject that will be used in an MMS message. Subject is limited to maximum of 64 characters. Some special characters need to be encoded if used in the `subject` field (e.g. &amp;amp; for & and &amp;lt; for <). . + /// If set to true, the reply message functionality will be implemented. The `from` field should not be present. . + /// Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). . + /// An array of content that will be sent in an MMS message. If this array is present it will cause the `body` element to be ignored, and the message will be sent as an MMS. (required). + public SendMmsRequest(string to = default(string), string from = default(string), string subject = default(string), bool replyRequest = default(bool), string notifyURL = default(string), List mMSContent = default(List)) + { + // to ensure "to" is required (not null) + if (to == null) + { + throw new InvalidDataException("to is a required property for SendMmsRequest and cannot be null"); + } + else + { + this.To = to; + } + + // to ensure "mMSContent" is required (not null) + if (mMSContent == null) + { + throw new InvalidDataException("mMSContent is a required property for SendMmsRequest and cannot be null"); + } + else + { + this.MMSContent = mMSContent; + } + + this.From = from; + this.Subject = subject; + this.ReplyRequest = replyRequest; + this.NotifyURL = notifyURL; + } + + /// + /// This is the destination address. Can be an array of strings if sending to multiple numbers: \"to\":[\"+61412345678\", \"+61418765432\"] + /// + /// This is the destination address. Can be an array of strings if sending to multiple numbers: \"to\":[\"+61412345678\", \"+61418765432\"] + [DataMember(Name="to", EmitDefaultValue=false)] + public string To { get; set; } + + /// + /// This will be the source address that will be displayed on the receiving device. You can set an Alphanumeric sender ID of up to 11 characters that the MMS was sent from. Phone numbers in the `from` attribute will be blocked (400-error) to prevent number spoofing. Most standard ASCII characters are accepted in the alphanumeric `from` attribute, however there are some limitations. The following limitations and characters are allowed in the alphanumeric `from` attribute; any alphabetic character (e.g. `abc`), any number mixed with alphabetic characters (e.g. `123abc`), uppercase and lowercase characters (e.g. `aBc`), any of the following special characters mixed with alphabetic characters are allowed; `~!@#$%^&*()~_~+-={}|[];'?,./` (e.g. `abc~!@`), any combination of lowercase, uppercase, numeric or allowed special characters (e.g. `abc@#123DE`). All other characters, including spaces and extended ASCII characters, are not allowed (e.g. `<>:\"\\`). If attribute is not present, the service will use the mobile number associated with the application (in E.164 format). If `replyRequest` is set to true, this field should not be present. This feature is only available on Telstra Account paid plans, not through Free Trials or credit card paid plans. *Please note:* *- Alphanumeric sender ID works for domestic, i.e. Australian, destinations only.* *- When Alphanumeric sender ID is used in sending MMS, Delivery Reports will NOT be returned.* + /// + /// This will be the source address that will be displayed on the receiving device. You can set an Alphanumeric sender ID of up to 11 characters that the MMS was sent from. Phone numbers in the `from` attribute will be blocked (400-error) to prevent number spoofing. Most standard ASCII characters are accepted in the alphanumeric `from` attribute, however there are some limitations. The following limitations and characters are allowed in the alphanumeric `from` attribute; any alphabetic character (e.g. `abc`), any number mixed with alphabetic characters (e.g. `123abc`), uppercase and lowercase characters (e.g. `aBc`), any of the following special characters mixed with alphabetic characters are allowed; `~!@#$%^&*()~_~+-={}|[];'?,./` (e.g. `abc~!@`), any combination of lowercase, uppercase, numeric or allowed special characters (e.g. `abc@#123DE`). All other characters, including spaces and extended ASCII characters, are not allowed (e.g. `<>:\"\\`). If attribute is not present, the service will use the mobile number associated with the application (in E.164 format). If `replyRequest` is set to true, this field should not be present. This feature is only available on Telstra Account paid plans, not through Free Trials or credit card paid plans. *Please note:* *- Alphanumeric sender ID works for domestic, i.e. Australian, destinations only.* *- When Alphanumeric sender ID is used in sending MMS, Delivery Reports will NOT be returned.* + [DataMember(Name="from", EmitDefaultValue=false)] + public string From { get; set; } + + /// + /// The subject that will be used in an MMS message. Subject is limited to maximum of 64 characters. Some special characters need to be encoded if used in the `subject` field (e.g. &amp;amp; for & and &amp;lt; for <). + /// + /// The subject that will be used in an MMS message. Subject is limited to maximum of 64 characters. Some special characters need to be encoded if used in the `subject` field (e.g. &amp;amp; for & and &amp;lt; for <). + [DataMember(Name="subject", EmitDefaultValue=false)] + public string Subject { get; set; } + + /// + /// If set to true, the reply message functionality will be implemented. The `from` field should not be present. + /// + /// If set to true, the reply message functionality will be implemented. The `from` field should not be present. + [DataMember(Name="replyRequest", EmitDefaultValue=false)] + public bool ReplyRequest { get; set; } + + /// + /// Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). + /// + /// Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). + [DataMember(Name="notifyURL", EmitDefaultValue=false)] + public string NotifyURL { get; set; } + + /// + /// An array of content that will be sent in an MMS message. If this array is present it will cause the `body` element to be ignored, and the message will be sent as an MMS. + /// + /// An array of content that will be sent in an MMS message. If this array is present it will cause the `body` element to be ignored, and the message will be sent as an MMS. + [DataMember(Name="MMSContent", EmitDefaultValue=false)] + public List MMSContent { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class SendMmsRequest {\n"); + sb.Append(" To: ").Append(To).Append("\n"); + sb.Append(" From: ").Append(From).Append("\n"); + sb.Append(" Subject: ").Append(Subject).Append("\n"); + sb.Append(" ReplyRequest: ").Append(ReplyRequest).Append("\n"); + sb.Append(" NotifyURL: ").Append(NotifyURL).Append("\n"); + sb.Append(" MMSContent: ").Append(MMSContent).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as SendMmsRequest); + } + + /// + /// Returns true if SendMmsRequest instances are equal + /// + /// Instance of SendMmsRequest to be compared + /// Boolean + public bool Equals(SendMmsRequest input) + { + if (input == null) + return false; + + return + ( + this.To == input.To || + (this.To != null && + this.To.Equals(input.To)) + ) && + ( + this.From == input.From || + (this.From != null && + this.From.Equals(input.From)) + ) && + ( + this.Subject == input.Subject || + (this.Subject != null && + this.Subject.Equals(input.Subject)) + ) && + ( + this.ReplyRequest == input.ReplyRequest || + this.ReplyRequest.Equals(input.ReplyRequest) + ) && + ( + this.NotifyURL == input.NotifyURL || + (this.NotifyURL != null && + this.NotifyURL.Equals(input.NotifyURL)) + ) && + ( + this.MMSContent == input.MMSContent || + this.MMSContent != null && + input.MMSContent != null && + this.MMSContent.SequenceEqual(input.MMSContent) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.To != null) + hashCode = hashCode * 59 + this.To.GetHashCode(); + if (this.From != null) + hashCode = hashCode * 59 + this.From.GetHashCode(); + if (this.Subject != null) + hashCode = hashCode * 59 + this.Subject.GetHashCode(); + hashCode = hashCode * 59 + this.ReplyRequest.GetHashCode(); + if (this.NotifyURL != null) + hashCode = hashCode * 59 + this.NotifyURL.GetHashCode(); + if (this.MMSContent != null) + hashCode = hashCode * 59 + this.MMSContent.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/src/Telstra.Messaging/Model/SendSMSRequest.cs b/src/Telstra.Messaging/Model/SendSMSRequest.cs new file mode 100644 index 0000000..e58e73f --- /dev/null +++ b/src/Telstra.Messaging/Model/SendSMSRequest.cs @@ -0,0 +1,260 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; + +namespace Telstra.Messaging.Model +{ + /// + /// SendSMSRequest + /// + [DataContract] + public partial class SendSMSRequest : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + [JsonConstructorAttribute] + protected SendSMSRequest() { } + /// + /// Initializes a new instance of the class. + /// + /// Phone number (in E.164 format) to send the SMS to. This number can be in international format `\"to\": \"+61412345678\"` or in national format. Can be an array of strings if sending to multiple numbers: `\"to\":[\"+61412345678\", \"+61418765432\"]` (required). + /// The text body of the message. Messages longer than 160 characters will be counted as multiple messages. This field contains the message text, this can be up to 1900 (for a single recipient) or 500 (for multiple recipients) UTF-8 characters. As mobile devices rarely support the full range of UTF-8 characters, it is possible that some characters may not be translated correctly by the mobile device (required). + /// This will be the source address that will be displayed on the receiving device. You can set an Alphanumeric sender ID of up to 11 characters that the SMS was sent from. Phone numbers in the `from` attribute will be blocked (400-error) to prevent number spoofing. Most standard ASCII characters are accepted in the alphanumeric `from` attribute, however there are some limitations. The following limitations and characters are allowed in the alphanumeric `from` attribute; any alphabetic character (e.g. `abc`), any number mixed with alphabetic characters (e.g. `123abc`), uppercase and lowercase characters (e.g. `aBc`), any of the following special characters mixed with alphabetic characters are allowed; `~!@#$%^&*()~_~+-={}|[];'?,./` (e.g. `abc~!@`), any combination of lowercase, uppercase, numeric or allowed special characters (e.g. `abc@#123DE`). All other characters, including spaces and extended ASCII characters, are not allowed (e.g. `<>:\"\\`). If attribute is not present, the service will use the mobile number associated with the application (in E.164 format). If `replyRequest` is set to true, then this field should not be present. This feature is only available on Telstra Account paid plans, not through Free Trials or credit card paid plans. *Please note that Alphanumeric sender ID works for domestic, i.e. Australian, destinations only.* . + /// How long the platform should attempt to deliver the message for. This period is specified in minutes from the message. Normally if the message cannot be delivered immediately, it will be stored and delivery will be periodically reattempted. The network will attempt to send the message for up to seven days. It is possible to define a period smaller than 7 days by including this parameter and specifying the number of minutes that delivery should be attempted. e.g.: including `\"validity\": 60` will specify that if a message can't be delivered within the first 60 minutes then the network should stop. . + /// How long the platform should wait before attempting to send the message - specified in minutes. e.g.: If `\"scheduledDelivery\": 120` is included, then the network will not attempt to start message delivery for two hours after the message has been submitted . + /// Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). . + /// If set to true, the reply message functionality will be implemented. The `from` field should not be present. If false or not present, then normal message handling is implemented. When set to true, network will use a temporary number to deliver this message. All messages sent by a mobile to this temporary number will be stored against the same `messageId`. If a `notifyURL` is provided then user replies will be delivered to the URL where `messageId` will be same as `messageId` in the response to the original API request. This field contains the message text, this can be up to 500 UTF-8 characters. As mobile devices rarely support the full range of UTF-8 characters, it is possible that some characters may not be translated correctly by the mobile device. . + /// When messages are queued up for a number, then it is possible to set where a new message will be placed in the queue. If the priority is set to true then the new message will be placed ahead of all messages with a normal priority. If there are no messages queued for the number, then this parameter has no effect. . + public SendSMSRequest(string to = default(string), string body = default(string), string from = default(string), int validity = default(int), int scheduledDelivery = default(int), string notifyURL = default(string), bool replyRequest = default(bool), bool priority = default(bool)) + { + // to ensure "to" is required (not null) + if (to == null) + { + throw new InvalidDataException("to is a required property for SendSMSRequest and cannot be null"); + } + else + { + this.To = to; + } + + // to ensure "body" is required (not null) + if (body == null) + { + throw new InvalidDataException("body is a required property for SendSMSRequest and cannot be null"); + } + else + { + this.Body = body; + } + + this.From = from; + this.Validity = validity; + this.ScheduledDelivery = scheduledDelivery; + this.NotifyURL = notifyURL; + this.ReplyRequest = replyRequest; + this.Priority = priority; + } + + /// + /// Phone number (in E.164 format) to send the SMS to. This number can be in international format `\"to\": \"+61412345678\"` or in national format. Can be an array of strings if sending to multiple numbers: `\"to\":[\"+61412345678\", \"+61418765432\"]` + /// + /// Phone number (in E.164 format) to send the SMS to. This number can be in international format `\"to\": \"+61412345678\"` or in national format. Can be an array of strings if sending to multiple numbers: `\"to\":[\"+61412345678\", \"+61418765432\"]` + [DataMember(Name="to", EmitDefaultValue=false)] + public string To { get; set; } + + /// + /// The text body of the message. Messages longer than 160 characters will be counted as multiple messages. This field contains the message text, this can be up to 1900 (for a single recipient) or 500 (for multiple recipients) UTF-8 characters. As mobile devices rarely support the full range of UTF-8 characters, it is possible that some characters may not be translated correctly by the mobile device + /// + /// The text body of the message. Messages longer than 160 characters will be counted as multiple messages. This field contains the message text, this can be up to 1900 (for a single recipient) or 500 (for multiple recipients) UTF-8 characters. As mobile devices rarely support the full range of UTF-8 characters, it is possible that some characters may not be translated correctly by the mobile device + [DataMember(Name="body", EmitDefaultValue=false)] + public string Body { get; set; } + + /// + /// This will be the source address that will be displayed on the receiving device. You can set an Alphanumeric sender ID of up to 11 characters that the SMS was sent from. Phone numbers in the `from` attribute will be blocked (400-error) to prevent number spoofing. Most standard ASCII characters are accepted in the alphanumeric `from` attribute, however there are some limitations. The following limitations and characters are allowed in the alphanumeric `from` attribute; any alphabetic character (e.g. `abc`), any number mixed with alphabetic characters (e.g. `123abc`), uppercase and lowercase characters (e.g. `aBc`), any of the following special characters mixed with alphabetic characters are allowed; `~!@#$%^&*()~_~+-={}|[];'?,./` (e.g. `abc~!@`), any combination of lowercase, uppercase, numeric or allowed special characters (e.g. `abc@#123DE`). All other characters, including spaces and extended ASCII characters, are not allowed (e.g. `<>:\"\\`). If attribute is not present, the service will use the mobile number associated with the application (in E.164 format). If `replyRequest` is set to true, then this field should not be present. This feature is only available on Telstra Account paid plans, not through Free Trials or credit card paid plans. *Please note that Alphanumeric sender ID works for domestic, i.e. Australian, destinations only.* + /// + /// This will be the source address that will be displayed on the receiving device. You can set an Alphanumeric sender ID of up to 11 characters that the SMS was sent from. Phone numbers in the `from` attribute will be blocked (400-error) to prevent number spoofing. Most standard ASCII characters are accepted in the alphanumeric `from` attribute, however there are some limitations. The following limitations and characters are allowed in the alphanumeric `from` attribute; any alphabetic character (e.g. `abc`), any number mixed with alphabetic characters (e.g. `123abc`), uppercase and lowercase characters (e.g. `aBc`), any of the following special characters mixed with alphabetic characters are allowed; `~!@#$%^&*()~_~+-={}|[];'?,./` (e.g. `abc~!@`), any combination of lowercase, uppercase, numeric or allowed special characters (e.g. `abc@#123DE`). All other characters, including spaces and extended ASCII characters, are not allowed (e.g. `<>:\"\\`). If attribute is not present, the service will use the mobile number associated with the application (in E.164 format). If `replyRequest` is set to true, then this field should not be present. This feature is only available on Telstra Account paid plans, not through Free Trials or credit card paid plans. *Please note that Alphanumeric sender ID works for domestic, i.e. Australian, destinations only.* + [DataMember(Name="from", EmitDefaultValue=false)] + public string From { get; set; } + + /// + /// How long the platform should attempt to deliver the message for. This period is specified in minutes from the message. Normally if the message cannot be delivered immediately, it will be stored and delivery will be periodically reattempted. The network will attempt to send the message for up to seven days. It is possible to define a period smaller than 7 days by including this parameter and specifying the number of minutes that delivery should be attempted. e.g.: including `\"validity\": 60` will specify that if a message can't be delivered within the first 60 minutes then the network should stop. + /// + /// How long the platform should attempt to deliver the message for. This period is specified in minutes from the message. Normally if the message cannot be delivered immediately, it will be stored and delivery will be periodically reattempted. The network will attempt to send the message for up to seven days. It is possible to define a period smaller than 7 days by including this parameter and specifying the number of minutes that delivery should be attempted. e.g.: including `\"validity\": 60` will specify that if a message can't be delivered within the first 60 minutes then the network should stop. + [DataMember(Name="validity", EmitDefaultValue=false)] + public int Validity { get; set; } + + /// + /// How long the platform should wait before attempting to send the message - specified in minutes. e.g.: If `\"scheduledDelivery\": 120` is included, then the network will not attempt to start message delivery for two hours after the message has been submitted + /// + /// How long the platform should wait before attempting to send the message - specified in minutes. e.g.: If `\"scheduledDelivery\": 120` is included, then the network will not attempt to start message delivery for two hours after the message has been submitted + [DataMember(Name="scheduledDelivery", EmitDefaultValue=false)] + public int ScheduledDelivery { get; set; } + + /// + /// Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). + /// + /// Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). + [DataMember(Name="notifyURL", EmitDefaultValue=false)] + public string NotifyURL { get; set; } + + /// + /// If set to true, the reply message functionality will be implemented. The `from` field should not be present. If false or not present, then normal message handling is implemented. When set to true, network will use a temporary number to deliver this message. All messages sent by a mobile to this temporary number will be stored against the same `messageId`. If a `notifyURL` is provided then user replies will be delivered to the URL where `messageId` will be same as `messageId` in the response to the original API request. This field contains the message text, this can be up to 500 UTF-8 characters. As mobile devices rarely support the full range of UTF-8 characters, it is possible that some characters may not be translated correctly by the mobile device. + /// + /// If set to true, the reply message functionality will be implemented. The `from` field should not be present. If false or not present, then normal message handling is implemented. When set to true, network will use a temporary number to deliver this message. All messages sent by a mobile to this temporary number will be stored against the same `messageId`. If a `notifyURL` is provided then user replies will be delivered to the URL where `messageId` will be same as `messageId` in the response to the original API request. This field contains the message text, this can be up to 500 UTF-8 characters. As mobile devices rarely support the full range of UTF-8 characters, it is possible that some characters may not be translated correctly by the mobile device. + [DataMember(Name="replyRequest", EmitDefaultValue=false)] + public bool ReplyRequest { get; set; } + + /// + /// When messages are queued up for a number, then it is possible to set where a new message will be placed in the queue. If the priority is set to true then the new message will be placed ahead of all messages with a normal priority. If there are no messages queued for the number, then this parameter has no effect. + /// + /// When messages are queued up for a number, then it is possible to set where a new message will be placed in the queue. If the priority is set to true then the new message will be placed ahead of all messages with a normal priority. If there are no messages queued for the number, then this parameter has no effect. + [DataMember(Name="priority", EmitDefaultValue=false)] + public bool Priority { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class SendSMSRequest {\n"); + sb.Append(" To: ").Append(To).Append("\n"); + sb.Append(" Body: ").Append(Body).Append("\n"); + sb.Append(" From: ").Append(From).Append("\n"); + sb.Append(" Validity: ").Append(Validity).Append("\n"); + sb.Append(" ScheduledDelivery: ").Append(ScheduledDelivery).Append("\n"); + sb.Append(" NotifyURL: ").Append(NotifyURL).Append("\n"); + sb.Append(" ReplyRequest: ").Append(ReplyRequest).Append("\n"); + sb.Append(" Priority: ").Append(Priority).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as SendSMSRequest); + } + + /// + /// Returns true if SendSMSRequest instances are equal + /// + /// Instance of SendSMSRequest to be compared + /// Boolean + public bool Equals(SendSMSRequest input) + { + if (input == null) + return false; + + return + ( + this.To == input.To || + (this.To != null && + this.To.Equals(input.To)) + ) && + ( + this.Body == input.Body || + (this.Body != null && + this.Body.Equals(input.Body)) + ) && + ( + this.From == input.From || + (this.From != null && + this.From.Equals(input.From)) + ) && + ( + this.Validity == input.Validity || + this.Validity.Equals(input.Validity) + ) && + ( + this.ScheduledDelivery == input.ScheduledDelivery || + this.ScheduledDelivery.Equals(input.ScheduledDelivery) + ) && + ( + this.NotifyURL == input.NotifyURL || + (this.NotifyURL != null && + this.NotifyURL.Equals(input.NotifyURL)) + ) && + ( + this.ReplyRequest == input.ReplyRequest || + this.ReplyRequest.Equals(input.ReplyRequest) + ) && + ( + this.Priority == input.Priority || + this.Priority.Equals(input.Priority) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.To != null) + hashCode = hashCode * 59 + this.To.GetHashCode(); + if (this.Body != null) + hashCode = hashCode * 59 + this.Body.GetHashCode(); + if (this.From != null) + hashCode = hashCode * 59 + this.From.GetHashCode(); + hashCode = hashCode * 59 + this.Validity.GetHashCode(); + hashCode = hashCode * 59 + this.ScheduledDelivery.GetHashCode(); + if (this.NotifyURL != null) + hashCode = hashCode * 59 + this.NotifyURL.GetHashCode(); + hashCode = hashCode * 59 + this.ReplyRequest.GetHashCode(); + hashCode = hashCode * 59 + this.Priority.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/src/Telstra.Messaging/Model/SendSmsMultiRequest.cs b/src/Telstra.Messaging/Model/SendSmsMultiRequest.cs new file mode 100644 index 0000000..10754b8 --- /dev/null +++ b/src/Telstra.Messaging/Model/SendSmsMultiRequest.cs @@ -0,0 +1,144 @@ +/* + * Telstra Messaging API + * + * The API specification for Telstra Messaging API + * + * The version of the OpenAPI document: 2.2.9 + * + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + + +using System; +using System.Linq; +using System.IO; +using System.Text; +using System.Text.RegularExpressions; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Runtime.Serialization; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; + +namespace Telstra.Messaging.Model +{ + /// + /// SendSmsMultiRequest + /// + [DataContract] + public partial class SendSmsMultiRequest : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// Multiple SMS. Up to 10 messages can be sent in one API call.. + /// Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). . + public SendSmsMultiRequest(List smsMulti = default(List), string notiyURL = default(string)) + { + this.SmsMulti = smsMulti; + this.NotiyURL = notiyURL; + } + + /// + /// Multiple SMS. Up to 10 messages can be sent in one API call. + /// + /// Multiple SMS. Up to 10 messages can be sent in one API call. + [DataMember(Name="smsMulti", EmitDefaultValue=false)] + public List SmsMulti { get; set; } + + /// + /// Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). + /// + /// Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). + [DataMember(Name="notiyURL", EmitDefaultValue=false)] + public string NotiyURL { get; set; } + + /// + /// Returns the string presentation of the object + /// + /// String presentation of the object + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("class SendSmsMultiRequest {\n"); + sb.Append(" SmsMulti: ").Append(SmsMulti).Append("\n"); + sb.Append(" NotiyURL: ").Append(NotiyURL).Append("\n"); + sb.Append("}\n"); + return sb.ToString(); + } + + /// + /// Returns the JSON string presentation of the object + /// + /// JSON string presentation of the object + public virtual string ToJson() + { + return JsonConvert.SerializeObject(this, Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as SendSmsMultiRequest); + } + + /// + /// Returns true if SendSmsMultiRequest instances are equal + /// + /// Instance of SendSmsMultiRequest to be compared + /// Boolean + public bool Equals(SendSmsMultiRequest input) + { + if (input == null) + return false; + + return + ( + this.SmsMulti == input.SmsMulti || + this.SmsMulti != null && + input.SmsMulti != null && + this.SmsMulti.SequenceEqual(input.SmsMulti) + ) && + ( + this.NotiyURL == input.NotiyURL || + (this.NotiyURL != null && + this.NotiyURL.Equals(input.NotiyURL)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.SmsMulti != null) + hashCode = hashCode * 59 + this.SmsMulti.GetHashCode(); + if (this.NotiyURL != null) + hashCode = hashCode * 59 + this.NotiyURL.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/src/com.telstra.messaging/Model/Status.cs b/src/Telstra.Messaging/Model/Status.cs similarity index 67% rename from src/com.telstra.messaging/Model/Status.cs rename to src/Telstra.Messaging/Model/Status.cs index 68dbb79..2b1b27a 100644 --- a/src/com.telstra.messaging/Model/Status.cs +++ b/src/Telstra.Messaging/Model/Status.cs @@ -1,13 +1,14 @@ /* * Telstra Messaging API * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. + * The API specification for Telstra Messaging API * - * OpenAPI spec version: 2.2.4 + * The version of the OpenAPI document: 2.2.9 * - * Generated by: https://github.com/swagger-api/swagger-codegen.git + * Generated by: https://github.com/openapitools/openapi-generator.git */ + using System; using System.Linq; using System.IO; @@ -20,9 +21,9 @@ using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; +using OpenAPIDateConverter = Telstra.Messaging.Client.OpenAPIDateConverter; -namespace com.telstra.messaging.Model +namespace Telstra.Messaging.Model { /// /// Defines Status @@ -32,54 +33,54 @@ namespace com.telstra.messaging.Model public enum Status { - /// /// Enum PEND for value: PEND /// [EnumMember(Value = "PEND")] PEND = 1, - + /// /// Enum SENT for value: SENT /// [EnumMember(Value = "SENT")] SENT = 2, - + /// /// Enum DELIVRD for value: DELIVRD /// [EnumMember(Value = "DELIVRD")] DELIVRD = 3, - + /// /// Enum EXPIRED for value: EXPIRED /// [EnumMember(Value = "EXPIRED")] EXPIRED = 4, - + /// /// Enum DELETED for value: DELETED /// [EnumMember(Value = "DELETED")] DELETED = 5, - + /// /// Enum UNDVBL for value: UNDVBL /// [EnumMember(Value = "UNDVBL")] UNDVBL = 6, - + /// - /// Enum REJECTED for value: REJECTED + /// Enum REJECTD for value: REJECTD /// - [EnumMember(Value = "REJECTED")] - REJECTED = 7, - + [EnumMember(Value = "REJECTD")] + REJECTD = 7, + /// - /// Enum READ for value: READ + /// Enum Unknown for value: Unknown /// - [EnumMember(Value = "READ")] - READ = 8 + [EnumMember(Value = "Unknown")] + Unknown = 8 + } } diff --git a/src/com.telstra.messaging/Properties/AssemblyInfo.cs b/src/Telstra.Messaging/Properties/AssemblyInfo.cs similarity index 75% rename from src/com.telstra.messaging/Properties/AssemblyInfo.cs rename to src/Telstra.Messaging/Properties/AssemblyInfo.cs index 07b5cab..b2c8adb 100644 --- a/src/com.telstra.messaging/Properties/AssemblyInfo.cs +++ b/src/Telstra.Messaging/Properties/AssemblyInfo.cs @@ -1,14 +1,15 @@ using System.Reflection; +using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. -[assembly: AssemblyTitle("Swagger Library")] -[assembly: AssemblyDescription("A library generated from a Swagger doc")] +[assembly: AssemblyTitle("OpenAPI Library")] +[assembly: AssemblyDescription("A library generated from a OpenAPI doc")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Swagger")] -[assembly: AssemblyProduct("SwaggerLibrary")] +[assembly: AssemblyCompany("OpenAPI")] +[assembly: AssemblyProduct("OpenAPILibrary")] [assembly: AssemblyCopyright("No Copyright")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -28,5 +29,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.2")] -[assembly: AssemblyFileVersion("1.0.2")] +[assembly: AssemblyVersion("1.0.8")] +[assembly: AssemblyFileVersion("1.0.8")] diff --git a/src/Telstra.Messaging/Telstra.Messaging.csproj b/src/Telstra.Messaging/Telstra.Messaging.csproj new file mode 100644 index 0000000..5ec6a0c --- /dev/null +++ b/src/Telstra.Messaging/Telstra.Messaging.csproj @@ -0,0 +1,37 @@ + + + + + false + 14.0 + Debug + AnyCPU + {B98ACF0D-EE51-49A8-BA8E-71750CAAB9E3} + Library + Properties + Telstra.Messaging + Telstra.Messaging + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + netstandard2.0 + 512 + bin\$(Configuration)\$(TargetFramework)\Telstra.Messaging.xml + + + + + + + + + + + + + diff --git a/src/Telstra.Messaging/project.json b/src/Telstra.Messaging/project.json new file mode 100644 index 0000000..df4ce16 --- /dev/null +++ b/src/Telstra.Messaging/project.json @@ -0,0 +1,11 @@ +{ + "supports": {}, + "dependencies": { + "Newtonsoft.Json": "12.0.1", + "JsonSubTypes": "1.5.2", + "RestSharp": "106.6.7" + }, + "frameworks": { + "netstandard2.0": {} + } +} diff --git a/src/com.telstra.messaging.Test/Api/AuthApiTests.cs b/src/com.telstra.messaging.Test/Api/AuthApiTests.cs deleted file mode 100644 index 7be97d7..0000000 --- a/src/com.telstra.messaging.Test/Api/AuthApiTests.cs +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Reflection; -using RestSharp; -using NUnit.Framework; - -using com.telstra.messaging.Client; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing AuthApi - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the API endpoint. - /// - [TestFixture] - public class AuthApiTests - { - private AuthApi instance; - - /// - /// Setup before each unit test - /// - [SetUp] - public void Init() - { - instance = new AuthApi(); - } - - /// - /// Clean up after each unit test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of AuthApi - /// - [Test] - public void InstanceTest() - { - // TODO uncomment below to test 'IsInstanceOfType' AuthApi - //Assert.IsInstanceOfType(typeof(AuthApi), instance, "instance is a AuthApi"); - } - - - /// - /// Test OauthTokenPost - /// - [Test] - public void OauthTokenPostTest() - { - // TODO uncomment below to test the method and replace null with proper value - //string oAuthClientId = null; - //string oAuthClientSecret = null; - //var response = instance.OauthTokenPost(oAuthClientId, oAuthClientSecret); - //Assert.IsInstanceOf (response, "response is AuthgeneratetokenpostResponse"); - } - - } - -} diff --git a/src/com.telstra.messaging.Test/Api/MessagingApiTests.cs b/src/com.telstra.messaging.Test/Api/MessagingApiTests.cs deleted file mode 100644 index ee112ba..0000000 --- a/src/com.telstra.messaging.Test/Api/MessagingApiTests.cs +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Reflection; -using RestSharp; -using NUnit.Framework; - -using com.telstra.messaging.Client; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing MessagingApi - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the API endpoint. - /// - [TestFixture] - public class MessagingApiTests - { - private MessagingApi instance; - - /// - /// Setup before each unit test - /// - [SetUp] - public void Init() - { - instance = new MessagingApi(); - } - - /// - /// Clean up after each unit test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of MessagingApi - /// - [Test] - public void InstanceTest() - { - // TODO uncomment below to test 'IsInstanceOfType' MessagingApi - //Assert.IsInstanceOfType(typeof(MessagingApi), instance, "instance is a MessagingApi"); - } - - - /// - /// Test GetMMSStatus - /// - [Test] - public void GetMMSStatusTest() - { - // TODO uncomment below to test the method and replace null with proper value - //string messageid = null; - //var response = instance.GetMMSStatus(messageid); - //Assert.IsInstanceOf (response, "response is OutboundPollResponse"); - } - - /// - /// Test GetSMSStatus - /// - [Test] - public void GetSMSStatusTest() - { - // TODO uncomment below to test the method and replace null with proper value - //string messageId = null; - //var response = instance.GetSMSStatus(messageId); - //Assert.IsInstanceOf (response, "response is OutboundPollResponse"); - } - - /// - /// Test RetrieveSMSResponses - /// - [Test] - public void RetrieveSMSResponsesTest() - { - // TODO uncomment below to test the method and replace null with proper value - //var response = instance.RetrieveSMSResponses(); - //Assert.IsInstanceOf> (response, "response is List"); - } - - /// - /// Test SendMMS - /// - [Test] - public void SendMMSTest() - { - // TODO uncomment below to test the method and replace null with proper value - //SendMmsRequest body = null; - //var response = instance.SendMMS(body); - //Assert.IsInstanceOf (response, "response is Object"); - } - - /// - /// Test SendSMS - /// - [Test] - public void SendSMSTest() - { - // TODO uncomment below to test the method and replace null with proper value - //SendSMSRequest payload = null; - //var response = instance.SendSMS(payload); - //Assert.IsInstanceOf (response, "response is MessageSentResponse"); - } - - } - -} diff --git a/src/com.telstra.messaging.Test/Api/ProvisioningApiTests.cs b/src/com.telstra.messaging.Test/Api/ProvisioningApiTests.cs deleted file mode 100644 index 707aa2c..0000000 --- a/src/com.telstra.messaging.Test/Api/ProvisioningApiTests.cs +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.IO; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Reflection; -using RestSharp; -using NUnit.Framework; - -using com.telstra.messaging.Client; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing ProvisioningApi - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the API endpoint. - /// - [TestFixture] - public class ProvisioningApiTests - { - private ProvisioningApi instance; - - /// - /// Setup before each unit test - /// - [SetUp] - public void Init() - { - instance = new ProvisioningApi(); - } - - /// - /// Clean up after each unit test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of ProvisioningApi - /// - [Test] - public void InstanceTest() - { - // TODO uncomment below to test 'IsInstanceOfType' ProvisioningApi - //Assert.IsInstanceOfType(typeof(ProvisioningApi), instance, "instance is a ProvisioningApi"); - } - - - /// - /// Test CreateSubscription - /// - [Test] - public void CreateSubscriptionTest() - { - // TODO uncomment below to test the method and replace null with proper value - //string authorization = null; - //ProvisionNumberRequest body = null; - //var response = instance.CreateSubscription(authorization, body); - //Assert.IsInstanceOf (response, "response is ProvisionNumberResponse"); - } - - /// - /// Test DeleteSubscription - /// - [Test] - public void DeleteSubscriptionTest() - { - // TODO uncomment below to test the method and replace null with proper value - //string authorization = null; - //instance.DeleteSubscription(authorization); - - } - - /// - /// Test GetSubscription - /// - [Test] - public void GetSubscriptionTest() - { - // TODO uncomment below to test the method and replace null with proper value - //string authorization = null; - //var response = instance.GetSubscription(authorization); - //Assert.IsInstanceOf> (response, "response is List"); - } - - } - -} diff --git a/src/com.telstra.messaging.Test/Model/AuthgeneratetokenpostResponseTests.cs b/src/com.telstra.messaging.Test/Model/AuthgeneratetokenpostResponseTests.cs deleted file mode 100644 index 7c6a75f..0000000 --- a/src/com.telstra.messaging.Test/Model/AuthgeneratetokenpostResponseTests.cs +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using NUnit.Framework; - -using System; -using System.Linq; -using System.IO; -using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; -using System.Reflection; -using Newtonsoft.Json; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing AuthgeneratetokenpostResponse - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the model. - /// - [TestFixture] - public class AuthgeneratetokenpostResponseTests - { - // TODO uncomment below to declare an instance variable for AuthgeneratetokenpostResponse - //private AuthgeneratetokenpostResponse instance; - - /// - /// Setup before each test - /// - [SetUp] - public void Init() - { - // TODO uncomment below to create an instance of AuthgeneratetokenpostResponse - //instance = new AuthgeneratetokenpostResponse(); - } - - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of AuthgeneratetokenpostResponse - /// - [Test] - public void AuthgeneratetokenpostResponseInstanceTest() - { - // TODO uncomment below to test "IsInstanceOfType" AuthgeneratetokenpostResponse - //Assert.IsInstanceOfType (instance, "variable 'instance' is a AuthgeneratetokenpostResponse"); - } - - - /// - /// Test the property 'AccessToken' - /// - [Test] - public void AccessTokenTest() - { - // TODO unit test for the property 'AccessToken' - } - /// - /// Test the property 'ExpiresIn' - /// - [Test] - public void ExpiresInTest() - { - // TODO unit test for the property 'ExpiresIn' - } - /// - /// Test the property 'RefreshToken' - /// - [Test] - public void RefreshTokenTest() - { - // TODO unit test for the property 'RefreshToken' - } - /// - /// Test the property 'TokenType' - /// - [Test] - public void TokenTypeTest() - { - // TODO unit test for the property 'TokenType' - } - - } - -} diff --git a/src/com.telstra.messaging.Test/Model/ErrorErrorError62Tests.cs b/src/com.telstra.messaging.Test/Model/ErrorErrorError62Tests.cs deleted file mode 100644 index d8bea9a..0000000 --- a/src/com.telstra.messaging.Test/Model/ErrorErrorError62Tests.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using NUnit.Framework; - -using System; -using System.Linq; -using System.IO; -using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; -using System.Reflection; -using Newtonsoft.Json; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing ErrorErrorError62 - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the model. - /// - [TestFixture] - public class ErrorErrorError62Tests - { - // TODO uncomment below to declare an instance variable for ErrorErrorError62 - //private ErrorErrorError62 instance; - - /// - /// Setup before each test - /// - [SetUp] - public void Init() - { - // TODO uncomment below to create an instance of ErrorErrorError62 - //instance = new ErrorErrorError62(); - } - - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of ErrorErrorError62 - /// - [Test] - public void ErrorErrorError62InstanceTest() - { - // TODO uncomment below to test "IsInstanceOfType" ErrorErrorError62 - //Assert.IsInstanceOfType (instance, "variable 'instance' is a ErrorErrorError62"); - } - - - /// - /// Test the property 'Status' - /// - [Test] - public void StatusTest() - { - // TODO unit test for the property 'Status' - } - /// - /// Test the property 'Message' - /// - [Test] - public void MessageTest() - { - // TODO unit test for the property 'Message' - } - - } - -} diff --git a/src/com.telstra.messaging.Test/Model/ErrorErrorErrorErrorTests.cs b/src/com.telstra.messaging.Test/Model/ErrorErrorErrorErrorTests.cs deleted file mode 100644 index 23edaa3..0000000 --- a/src/com.telstra.messaging.Test/Model/ErrorErrorErrorErrorTests.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using NUnit.Framework; - -using System; -using System.Linq; -using System.IO; -using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; -using System.Reflection; -using Newtonsoft.Json; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing ErrorErrorErrorError - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the model. - /// - [TestFixture] - public class ErrorErrorErrorErrorTests - { - // TODO uncomment below to declare an instance variable for ErrorErrorErrorError - //private ErrorErrorErrorError instance; - - /// - /// Setup before each test - /// - [SetUp] - public void Init() - { - // TODO uncomment below to create an instance of ErrorErrorErrorError - //instance = new ErrorErrorErrorError(); - } - - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of ErrorErrorErrorError - /// - [Test] - public void ErrorErrorErrorErrorInstanceTest() - { - // TODO uncomment below to test "IsInstanceOfType" ErrorErrorErrorError - //Assert.IsInstanceOfType (instance, "variable 'instance' is a ErrorErrorErrorError"); - } - - - /// - /// Test the property 'Status' - /// - [Test] - public void StatusTest() - { - // TODO unit test for the property 'Status' - } - /// - /// Test the property 'Message' - /// - [Test] - public void MessageTest() - { - // TODO unit test for the property 'Message' - } - - } - -} diff --git a/src/com.telstra.messaging.Test/Model/ErrorErrorErrorTests.cs b/src/com.telstra.messaging.Test/Model/ErrorErrorErrorTests.cs deleted file mode 100644 index b045c97..0000000 --- a/src/com.telstra.messaging.Test/Model/ErrorErrorErrorTests.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using NUnit.Framework; - -using System; -using System.Linq; -using System.IO; -using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; -using System.Reflection; -using Newtonsoft.Json; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing ErrorErrorError - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the model. - /// - [TestFixture] - public class ErrorErrorErrorTests - { - // TODO uncomment below to declare an instance variable for ErrorErrorError - //private ErrorErrorError instance; - - /// - /// Setup before each test - /// - [SetUp] - public void Init() - { - // TODO uncomment below to create an instance of ErrorErrorError - //instance = new ErrorErrorError(); - } - - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of ErrorErrorError - /// - [Test] - public void ErrorErrorErrorInstanceTest() - { - // TODO uncomment below to test "IsInstanceOfType" ErrorErrorError - //Assert.IsInstanceOfType (instance, "variable 'instance' is a ErrorErrorError"); - } - - - /// - /// Test the property 'Status' - /// - [Test] - public void StatusTest() - { - // TODO unit test for the property 'Status' - } - /// - /// Test the property 'Message' - /// - [Test] - public void MessageTest() - { - // TODO unit test for the property 'Message' - } - - } - -} diff --git a/src/com.telstra.messaging.Test/Model/ErrorErrorTests.cs b/src/com.telstra.messaging.Test/Model/ErrorErrorTests.cs deleted file mode 100644 index 0b92b3a..0000000 --- a/src/com.telstra.messaging.Test/Model/ErrorErrorTests.cs +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using NUnit.Framework; - -using System; -using System.Linq; -using System.IO; -using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; -using System.Reflection; -using Newtonsoft.Json; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing ErrorError - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the model. - /// - [TestFixture] - public class ErrorErrorTests - { - // TODO uncomment below to declare an instance variable for ErrorError - //private ErrorError instance; - - /// - /// Setup before each test - /// - [SetUp] - public void Init() - { - // TODO uncomment below to create an instance of ErrorError - //instance = new ErrorError(); - } - - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of ErrorError - /// - [Test] - public void ErrorErrorInstanceTest() - { - // TODO uncomment below to test "IsInstanceOfType" ErrorError - //Assert.IsInstanceOfType (instance, "variable 'instance' is a ErrorError"); - } - - - /// - /// Test the property 'Status' - /// - [Test] - public void StatusTest() - { - // TODO unit test for the property 'Status' - } - /// - /// Test the property 'Message' - /// - [Test] - public void MessageTest() - { - // TODO unit test for the property 'Message' - } - - } - -} diff --git a/src/com.telstra.messaging.Test/Model/InboundPollResponseTests.cs b/src/com.telstra.messaging.Test/Model/InboundPollResponseTests.cs deleted file mode 100644 index 4405172..0000000 --- a/src/com.telstra.messaging.Test/Model/InboundPollResponseTests.cs +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using NUnit.Framework; - -using System; -using System.Linq; -using System.IO; -using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; -using System.Reflection; -using Newtonsoft.Json; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing InboundPollResponse - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the model. - /// - [TestFixture] - public class InboundPollResponseTests - { - // TODO uncomment below to declare an instance variable for InboundPollResponse - //private InboundPollResponse instance; - - /// - /// Setup before each test - /// - [SetUp] - public void Init() - { - // TODO uncomment below to create an instance of InboundPollResponse - //instance = new InboundPollResponse(); - } - - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of InboundPollResponse - /// - [Test] - public void InboundPollResponseInstanceTest() - { - // TODO uncomment below to test "IsInstanceOfType" InboundPollResponse - //Assert.IsInstanceOfType (instance, "variable 'instance' is a InboundPollResponse"); - } - - - /// - /// Test the property 'To' - /// - [Test] - public void ToTest() - { - // TODO unit test for the property 'To' - } - /// - /// Test the property 'From' - /// - [Test] - public void FromTest() - { - // TODO unit test for the property 'From' - } - /// - /// Test the property 'Body' - /// - [Test] - public void BodyTest() - { - // TODO unit test for the property 'Body' - } - /// - /// Test the property 'ReceivedTimestamp' - /// - [Test] - public void ReceivedTimestampTest() - { - // TODO unit test for the property 'ReceivedTimestamp' - } - /// - /// Test the property 'MoreMessages' - /// - [Test] - public void MoreMessagesTest() - { - // TODO unit test for the property 'MoreMessages' - } - /// - /// Test the property 'MessageId' - /// - [Test] - public void MessageIdTest() - { - // TODO unit test for the property 'MessageId' - } - - } - -} diff --git a/src/com.telstra.messaging.Test/Model/MessageSentResponseTests.cs b/src/com.telstra.messaging.Test/Model/MessageSentResponseTests.cs deleted file mode 100644 index 3c83eea..0000000 --- a/src/com.telstra.messaging.Test/Model/MessageSentResponseTests.cs +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using NUnit.Framework; - -using System; -using System.Linq; -using System.IO; -using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; -using System.Reflection; -using Newtonsoft.Json; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing MessageSentResponse - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the model. - /// - [TestFixture] - public class MessageSentResponseTests - { - // TODO uncomment below to declare an instance variable for MessageSentResponse - //private MessageSentResponse instance; - - /// - /// Setup before each test - /// - [SetUp] - public void Init() - { - // TODO uncomment below to create an instance of MessageSentResponse - //instance = new MessageSentResponse(); - } - - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of MessageSentResponse - /// - [Test] - public void MessageSentResponseInstanceTest() - { - // TODO uncomment below to test "IsInstanceOfType" MessageSentResponse - //Assert.IsInstanceOfType (instance, "variable 'instance' is a MessageSentResponse"); - } - - - /// - /// Test the property 'Messages' - /// - [Test] - public void MessagesTest() - { - // TODO unit test for the property 'Messages' - } - /// - /// Test the property 'MessageType' - /// - [Test] - public void MessageTypeTest() - { - // TODO unit test for the property 'MessageType' - } - /// - /// Test the property 'NumberSegments' - /// - [Test] - public void NumberSegmentsTest() - { - // TODO unit test for the property 'NumberSegments' - } - /// - /// Test the property 'NumberNationalDestinations' - /// - [Test] - public void NumberNationalDestinationsTest() - { - // TODO unit test for the property 'NumberNationalDestinations' - } - /// - /// Test the property 'NumberInternationalDestinations' - /// - [Test] - public void NumberInternationalDestinationsTest() - { - // TODO unit test for the property 'NumberInternationalDestinations' - } - - } - -} diff --git a/src/com.telstra.messaging.Test/Model/MessageTypeTests.cs b/src/com.telstra.messaging.Test/Model/MessageTypeTests.cs deleted file mode 100644 index 6baf792..0000000 --- a/src/com.telstra.messaging.Test/Model/MessageTypeTests.cs +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using NUnit.Framework; - -using System; -using System.Linq; -using System.IO; -using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; -using System.Reflection; -using Newtonsoft.Json; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing MessageType - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the model. - /// - [TestFixture] - public class MessageTypeTests - { - // TODO uncomment below to declare an instance variable for MessageType - //private MessageType instance; - - /// - /// Setup before each test - /// - [SetUp] - public void Init() - { - // TODO uncomment below to create an instance of MessageType - //instance = new MessageType(); - } - - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of MessageType - /// - [Test] - public void MessageTypeInstanceTest() - { - // TODO uncomment below to test "IsInstanceOfType" MessageType - //Assert.IsInstanceOfType (instance, "variable 'instance' is a MessageType"); - } - - - - } - -} diff --git a/src/com.telstra.messaging.Test/Model/OAuthRequestTests.cs b/src/com.telstra.messaging.Test/Model/OAuthRequestTests.cs deleted file mode 100644 index 07c2cc2..0000000 --- a/src/com.telstra.messaging.Test/Model/OAuthRequestTests.cs +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using NUnit.Framework; - -using System; -using System.Linq; -using System.IO; -using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; -using System.Reflection; -using Newtonsoft.Json; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing OAuthRequest - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the model. - /// - [TestFixture] - public class OAuthRequestTests - { - // TODO uncomment below to declare an instance variable for OAuthRequest - //private OAuthRequest instance; - - /// - /// Setup before each test - /// - [SetUp] - public void Init() - { - // TODO uncomment below to create an instance of OAuthRequest - //instance = new OAuthRequest(); - } - - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of OAuthRequest - /// - [Test] - public void OAuthRequestInstanceTest() - { - // TODO uncomment below to test "IsInstanceOfType" OAuthRequest - //Assert.IsInstanceOfType (instance, "variable 'instance' is a OAuthRequest"); - } - - - /// - /// Test the property 'ClientId' - /// - [Test] - public void ClientIdTest() - { - // TODO unit test for the property 'ClientId' - } - /// - /// Test the property 'ClientSecret' - /// - [Test] - public void ClientSecretTest() - { - // TODO unit test for the property 'ClientSecret' - } - /// - /// Test the property 'GrantType' - /// - [Test] - public void GrantTypeTest() - { - // TODO unit test for the property 'GrantType' - } - /// - /// Test the property 'Scopes' - /// - [Test] - public void ScopesTest() - { - // TODO unit test for the property 'Scopes' - } - - } - -} diff --git a/src/com.telstra.messaging.Test/Model/OutboundPollResponseInnerTests.cs b/src/com.telstra.messaging.Test/Model/OutboundPollResponseInnerTests.cs deleted file mode 100644 index 8aaccf7..0000000 --- a/src/com.telstra.messaging.Test/Model/OutboundPollResponseInnerTests.cs +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using NUnit.Framework; - -using System; -using System.Linq; -using System.IO; -using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; -using System.Reflection; -using Newtonsoft.Json; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing OutboundPollResponseInner - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the model. - /// - [TestFixture] - public class OutboundPollResponseInnerTests - { - // TODO uncomment below to declare an instance variable for OutboundPollResponseInner - //private OutboundPollResponseInner instance; - - /// - /// Setup before each test - /// - [SetUp] - public void Init() - { - // TODO uncomment below to create an instance of OutboundPollResponseInner - //instance = new OutboundPollResponseInner(); - } - - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of OutboundPollResponseInner - /// - [Test] - public void OutboundPollResponseInnerInstanceTest() - { - // TODO uncomment below to test "IsInstanceOfType" OutboundPollResponseInner - //Assert.IsInstanceOfType (instance, "variable 'instance' is a OutboundPollResponseInner"); - } - - - /// - /// Test the property 'To' - /// - [Test] - public void ToTest() - { - // TODO unit test for the property 'To' - } - /// - /// Test the property 'ReceivedTimestamp' - /// - [Test] - public void ReceivedTimestampTest() - { - // TODO unit test for the property 'ReceivedTimestamp' - } - /// - /// Test the property 'SentTimestamp' - /// - [Test] - public void SentTimestampTest() - { - // TODO unit test for the property 'SentTimestamp' - } - /// - /// Test the property 'DeliveryStatus' - /// - [Test] - public void DeliveryStatusTest() - { - // TODO unit test for the property 'DeliveryStatus' - } - - } - -} diff --git a/src/com.telstra.messaging.Test/Model/SendMmsRequestMMSContentTests.cs b/src/com.telstra.messaging.Test/Model/SendMmsRequestMMSContentTests.cs deleted file mode 100644 index 6c7b143..0000000 --- a/src/com.telstra.messaging.Test/Model/SendMmsRequestMMSContentTests.cs +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using NUnit.Framework; - -using System; -using System.Linq; -using System.IO; -using System.Collections.Generic; -using com.telstra.messaging.Api; -using com.telstra.messaging.Model; -using com.telstra.messaging.Client; -using System.Reflection; -using Newtonsoft.Json; - -namespace com.telstra.messaging.Test -{ - /// - /// Class for testing SendMmsRequestMMSContent - /// - /// - /// This file is automatically generated by Swagger Codegen. - /// Please update the test case below to test the model. - /// - [TestFixture] - public class SendMmsRequestMMSContentTests - { - // TODO uncomment below to declare an instance variable for SendMmsRequestMMSContent - //private SendMmsRequestMMSContent instance; - - /// - /// Setup before each test - /// - [SetUp] - public void Init() - { - // TODO uncomment below to create an instance of SendMmsRequestMMSContent - //instance = new SendMmsRequestMMSContent(); - } - - /// - /// Clean up after each test - /// - [TearDown] - public void Cleanup() - { - - } - - /// - /// Test an instance of SendMmsRequestMMSContent - /// - [Test] - public void SendMmsRequestMMSContentInstanceTest() - { - // TODO uncomment below to test "IsInstanceOfType" SendMmsRequestMMSContent - //Assert.IsInstanceOfType (instance, "variable 'instance' is a SendMmsRequestMMSContent"); - } - - - /// - /// Test the property 'Type' - /// - [Test] - public void TypeTest() - { - // TODO unit test for the property 'Type' - } - /// - /// Test the property 'Filename' - /// - [Test] - public void FilenameTest() - { - // TODO unit test for the property 'Filename' - } - /// - /// Test the property 'Payload' - /// - [Test] - public void PayloadTest() - { - // TODO unit test for the property 'Payload' - } - - } - -} diff --git a/src/com.telstra.messaging.Test/com.telstra.messaging.Test.csproj b/src/com.telstra.messaging.Test/com.telstra.messaging.Test.csproj deleted file mode 100644 index c353f99..0000000 --- a/src/com.telstra.messaging.Test/com.telstra.messaging.Test.csproj +++ /dev/null @@ -1,89 +0,0 @@ - - - - - Debug - AnyCPU - {19F1DEBC-DE5E-4517-8062-F000CD499087} - Library - Properties - com.telstra.messaging.Test - com.telstra.messaging.Test - v4.5 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - $(SolutionDir)\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - ..\..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - ..\..\vendor\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - - - $(SolutionDir)\packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll - ..\packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll - ..\..\packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll - ..\..\vendor\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll - - - $(SolutionDir)\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll - ..\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll - ..\..\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll - ..\..\vendor\RestSharp.105.1.0\lib\net45\RestSharp.dll - - - $(SolutionDir)\packages\NUnit.2.6.4\lib\nunit.framework.dll - ..\packages\NUnit.2.6.4\lib\nunit.framework.dll - ..\..\packages\NUnit.2.6.4\lib\nunit.framework.dll - ..\..\vendor\NUnit.2.6.4\lib\nunit.framework.dll - - - - - - - - - - - - {C0869B26-6FED-45CB-88E0-8AD7E6B96330} - com.telstra.messaging - - - - diff --git a/src/com.telstra.messaging.Test/packages.config b/src/com.telstra.messaging.Test/packages.config deleted file mode 100644 index ac390c1..0000000 --- a/src/com.telstra.messaging.Test/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/com.telstra.messaging/Api/AuthApi.cs b/src/com.telstra.messaging/Api/AuthApi.cs deleted file mode 100644 index 68af2ef..0000000 --- a/src/com.telstra.messaging/Api/AuthApi.cs +++ /dev/null @@ -1,323 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using RestSharp; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; - -namespace com.telstra.messaging.Api -{ - /// - /// Represents a collection of functions to interact with the API endpoints - /// - public interface IAuthApi : IApiAccessor - { - #region Synchronous Operations - /// - /// AuthGeneratetokenPost - /// - /// - /// generate auth token - /// - /// Thrown when fails to make API call - /// - /// - /// AuthgeneratetokenpostResponse - AuthgeneratetokenpostResponse OauthTokenPost (string oAuthClientId, string oAuthClientSecret); - - /// - /// AuthGeneratetokenPost - /// - /// - /// generate auth token - /// - /// Thrown when fails to make API call - /// - /// - /// ApiResponse of AuthgeneratetokenpostResponse - ApiResponse OauthTokenPostWithHttpInfo (string oAuthClientId, string oAuthClientSecret); - #endregion Synchronous Operations - #region Asynchronous Operations - /// - /// AuthGeneratetokenPost - /// - /// - /// generate auth token - /// - /// Thrown when fails to make API call - /// - /// - /// Task of AuthgeneratetokenpostResponse - System.Threading.Tasks.Task OauthTokenPostAsync (string oAuthClientId, string oAuthClientSecret); - - /// - /// AuthGeneratetokenPost - /// - /// - /// generate auth token - /// - /// Thrown when fails to make API call - /// - /// - /// Task of ApiResponse (AuthgeneratetokenpostResponse) - System.Threading.Tasks.Task> OauthTokenPostAsyncWithHttpInfo (string oAuthClientId, string oAuthClientSecret); - #endregion Asynchronous Operations - } - - /// - /// Represents a collection of functions to interact with the API endpoints - /// - public partial class AuthApi : IAuthApi - { - private com.telstra.messaging.Client.ExceptionFactory _exceptionFactory = (name, response) => null; - - /// - /// Initializes a new instance of the class. - /// - /// - public AuthApi(String basePath) - { - this.Configuration = new Configuration { BasePath = basePath }; - - ExceptionFactory = com.telstra.messaging.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class - /// using Configuration object - /// - /// An instance of Configuration - /// - public AuthApi(Configuration configuration = null) - { - if (configuration == null) // use the default one in Configuration - this.Configuration = Configuration.Default; - else - this.Configuration = configuration; - - ExceptionFactory = com.telstra.messaging.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Gets the base path of the API client. - /// - /// The base path - public String GetBasePath() - { - return this.Configuration.ApiClient.RestClient.BaseUrl.ToString(); - } - - /// - /// Sets the base path of the API client. - /// - /// The base path - [Obsolete("SetBasePath is deprecated, please do 'Configuration.ApiClient = new ApiClient(\"http://new-path\")' instead.")] - public void SetBasePath(String basePath) - { - // do nothing - } - - /// - /// Gets or sets the configuration object - /// - /// An instance of the Configuration - public Configuration Configuration {get; set;} - - /// - /// Provides a factory method hook for the creation of exceptions. - /// - public com.telstra.messaging.Client.ExceptionFactory ExceptionFactory - { - get - { - if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) - { - throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); - } - return _exceptionFactory; - } - set { _exceptionFactory = value; } - } - - /// - /// Gets the default header. - /// - /// Dictionary of HTTP header - [Obsolete("DefaultHeader is deprecated, please use Configuration.DefaultHeader instead.")] - public IDictionary DefaultHeader() - { - return new ReadOnlyDictionary(this.Configuration.DefaultHeader); - } - - /// - /// Add default header. - /// - /// Header field name. - /// Header field value. - /// - [Obsolete("AddDefaultHeader is deprecated, please use Configuration.AddDefaultHeader instead.")] - public void AddDefaultHeader(string key, string value) - { - this.Configuration.AddDefaultHeader(key, value); - } - - /// - /// AuthGeneratetokenPost generate auth token - /// - /// Thrown when fails to make API call - /// - /// - /// AuthgeneratetokenpostResponse - public AuthgeneratetokenpostResponse OauthTokenPost (string oAuthClientId, string oAuthClientSecret) - { - ApiResponse localVarResponse = OauthTokenPostWithHttpInfo(oAuthClientId, oAuthClientSecret); - return localVarResponse.Data; - } - - /// - /// AuthGeneratetokenPost generate auth token - /// - /// Thrown when fails to make API call - /// - /// - /// ApiResponse of AuthgeneratetokenpostResponse - public ApiResponse< AuthgeneratetokenpostResponse > OauthTokenPostWithHttpInfo (string oAuthClientId, string oAuthClientSecret) - { - // verify the required parameter 'oAuthClientId' is set - if (oAuthClientId == null) - throw new ApiException(400, "Missing required parameter 'oAuthClientId' when calling AuthApi->OauthTokenPost"); - // verify the required parameter 'oAuthClientSecret' is set - if (oAuthClientSecret == null) - throw new ApiException(400, "Missing required parameter 'oAuthClientSecret' when calling AuthApi->OauthTokenPost"); - - var localVarPath = "/oauth/token"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/x-www-form-urlencoded" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (oAuthClientId != null) localVarFormParams.Add("oAuthClientId", Configuration.ApiClient.ParameterToString(oAuthClientId)); // form parameter - if (oAuthClientSecret != null) localVarFormParams.Add("oAuthClientSecret", Configuration.ApiClient.ParameterToString(oAuthClientSecret)); // form parameter - - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath, - Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("OauthTokenPost", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (AuthgeneratetokenpostResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(AuthgeneratetokenpostResponse))); - } - - /// - /// AuthGeneratetokenPost generate auth token - /// - /// Thrown when fails to make API call - /// - /// - /// Task of AuthgeneratetokenpostResponse - public async System.Threading.Tasks.Task OauthTokenPostAsync (string oAuthClientId, string oAuthClientSecret) - { - ApiResponse localVarResponse = await OauthTokenPostAsyncWithHttpInfo(oAuthClientId, oAuthClientSecret); - return localVarResponse.Data; - - } - - /// - /// AuthGeneratetokenPost generate auth token - /// - /// Thrown when fails to make API call - /// - /// - /// Task of ApiResponse (AuthgeneratetokenpostResponse) - public async System.Threading.Tasks.Task> OauthTokenPostAsyncWithHttpInfo (string oAuthClientId, string oAuthClientSecret) - { - // verify the required parameter 'oAuthClientId' is set - if (oAuthClientId == null) - throw new ApiException(400, "Missing required parameter 'oAuthClientId' when calling AuthApi->OauthTokenPost"); - // verify the required parameter 'oAuthClientSecret' is set - if (oAuthClientSecret == null) - throw new ApiException(400, "Missing required parameter 'oAuthClientSecret' when calling AuthApi->OauthTokenPost"); - - var localVarPath = "/oauth/token"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/x-www-form-urlencoded" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (oAuthClientId != null) localVarFormParams.Add("oAuthClientId", Configuration.ApiClient.ParameterToString(oAuthClientId)); // form parameter - if (oAuthClientSecret != null) localVarFormParams.Add("oAuthClientSecret", Configuration.ApiClient.ParameterToString(oAuthClientSecret)); // form parameter - - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath, - Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("OauthTokenPost", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (AuthgeneratetokenpostResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(AuthgeneratetokenpostResponse))); - } - - } -} diff --git a/src/com.telstra.messaging/Api/AuthenticationApi.cs b/src/com.telstra.messaging/Api/AuthenticationApi.cs deleted file mode 100644 index 41d146e..0000000 --- a/src/com.telstra.messaging/Api/AuthenticationApi.cs +++ /dev/null @@ -1,339 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using RestSharp; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; - -namespace com.telstra.messaging.Api -{ - /// - /// Represents a collection of functions to interact with the API endpoints - /// - public interface IAuthenticationApi : IApiAccessor - { - #region Synchronous Operations - /// - /// Generate authentication token - /// - /// - /// Generate authentication token - /// - /// Thrown when fails to make API call - /// - /// - /// - /// OAuthResponse - OAuthResponse AuthToken (string clientId, string clientSecret, string grantType); - - /// - /// Generate authentication token - /// - /// - /// Generate authentication token - /// - /// Thrown when fails to make API call - /// - /// - /// - /// ApiResponse of OAuthResponse - ApiResponse AuthTokenWithHttpInfo (string clientId, string clientSecret, string grantType); - #endregion Synchronous Operations - #region Asynchronous Operations - /// - /// Generate authentication token - /// - /// - /// Generate authentication token - /// - /// Thrown when fails to make API call - /// - /// - /// - /// Task of OAuthResponse - System.Threading.Tasks.Task AuthTokenAsync (string clientId, string clientSecret, string grantType); - - /// - /// Generate authentication token - /// - /// - /// Generate authentication token - /// - /// Thrown when fails to make API call - /// - /// - /// - /// Task of ApiResponse (OAuthResponse) - System.Threading.Tasks.Task> AuthTokenAsyncWithHttpInfo (string clientId, string clientSecret, string grantType); - #endregion Asynchronous Operations - } - - /// - /// Represents a collection of functions to interact with the API endpoints - /// - public partial class AuthenticationApi : IAuthenticationApi - { - private com.telstra.messaging.Client.ExceptionFactory _exceptionFactory = (name, response) => null; - - /// - /// Initializes a new instance of the class. - /// - /// - public AuthenticationApi(String basePath) - { - this.Configuration = new Configuration { BasePath = basePath }; - - ExceptionFactory = com.telstra.messaging.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class - /// using Configuration object - /// - /// An instance of Configuration - /// - public AuthenticationApi(Configuration configuration = null) - { - if (configuration == null) // use the default one in Configuration - this.Configuration = Configuration.Default; - else - this.Configuration = configuration; - - ExceptionFactory = com.telstra.messaging.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Gets the base path of the API client. - /// - /// The base path - public String GetBasePath() - { - return this.Configuration.ApiClient.RestClient.BaseUrl.ToString(); - } - - /// - /// Sets the base path of the API client. - /// - /// The base path - [Obsolete("SetBasePath is deprecated, please do 'Configuration.ApiClient = new ApiClient(\"http://new-path\")' instead.")] - public void SetBasePath(String basePath) - { - // do nothing - } - - /// - /// Gets or sets the configuration object - /// - /// An instance of the Configuration - public Configuration Configuration {get; set;} - - /// - /// Provides a factory method hook for the creation of exceptions. - /// - public com.telstra.messaging.Client.ExceptionFactory ExceptionFactory - { - get - { - if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) - { - throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); - } - return _exceptionFactory; - } - set { _exceptionFactory = value; } - } - - /// - /// Gets the default header. - /// - /// Dictionary of HTTP header - [Obsolete("DefaultHeader is deprecated, please use Configuration.DefaultHeader instead.")] - public IDictionary DefaultHeader() - { - return new ReadOnlyDictionary(this.Configuration.DefaultHeader); - } - - /// - /// Add default header. - /// - /// Header field name. - /// Header field value. - /// - [Obsolete("AddDefaultHeader is deprecated, please use Configuration.AddDefaultHeader instead.")] - public void AddDefaultHeader(string key, string value) - { - this.Configuration.AddDefaultHeader(key, value); - } - - /// - /// Generate authentication token Generate authentication token - /// - /// Thrown when fails to make API call - /// - /// - /// - /// OAuthResponse - public OAuthResponse AuthToken (string clientId, string clientSecret, string grantType) - { - ApiResponse localVarResponse = AuthTokenWithHttpInfo(clientId, clientSecret, grantType); - return localVarResponse.Data; - } - - /// - /// Generate authentication token Generate authentication token - /// - /// Thrown when fails to make API call - /// - /// - /// - /// ApiResponse of OAuthResponse - public ApiResponse< OAuthResponse > AuthTokenWithHttpInfo (string clientId, string clientSecret, string grantType) - { - // verify the required parameter 'clientId' is set - if (clientId == null) - throw new ApiException(400, "Missing required parameter 'clientId' when calling AuthenticationApi->AuthToken"); - // verify the required parameter 'clientSecret' is set - if (clientSecret == null) - throw new ApiException(400, "Missing required parameter 'clientSecret' when calling AuthenticationApi->AuthToken"); - // verify the required parameter 'grantType' is set - if (grantType == null) - throw new ApiException(400, "Missing required parameter 'grantType' when calling AuthenticationApi->AuthToken"); - - var localVarPath = "/oauth/token"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/x-www-form-urlencoded" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (clientId != null) localVarFormParams.Add("client_id", Configuration.ApiClient.ParameterToString(clientId)); // form parameter - if (clientSecret != null) localVarFormParams.Add("client_secret", Configuration.ApiClient.ParameterToString(clientSecret)); // form parameter - if (grantType != null) localVarFormParams.Add("grant_type", Configuration.ApiClient.ParameterToString(grantType)); // form parameter - - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath, - Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("AuthToken", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (OAuthResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(OAuthResponse))); - } - - /// - /// Generate authentication token Generate authentication token - /// - /// Thrown when fails to make API call - /// - /// - /// - /// Task of OAuthResponse - public async System.Threading.Tasks.Task AuthTokenAsync (string clientId, string clientSecret, string grantType) - { - ApiResponse localVarResponse = await AuthTokenAsyncWithHttpInfo(clientId, clientSecret, grantType); - return localVarResponse.Data; - - } - - /// - /// Generate authentication token Generate authentication token - /// - /// Thrown when fails to make API call - /// - /// - /// - /// Task of ApiResponse (OAuthResponse) - public async System.Threading.Tasks.Task> AuthTokenAsyncWithHttpInfo (string clientId, string clientSecret, string grantType) - { - // verify the required parameter 'clientId' is set - if (clientId == null) - throw new ApiException(400, "Missing required parameter 'clientId' when calling AuthenticationApi->AuthToken"); - // verify the required parameter 'clientSecret' is set - if (clientSecret == null) - throw new ApiException(400, "Missing required parameter 'clientSecret' when calling AuthenticationApi->AuthToken"); - // verify the required parameter 'grantType' is set - if (grantType == null) - throw new ApiException(400, "Missing required parameter 'grantType' when calling AuthenticationApi->AuthToken"); - - var localVarPath = "/oauth/token"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/x-www-form-urlencoded" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (clientId != null) localVarFormParams.Add("client_id", Configuration.ApiClient.ParameterToString(clientId)); // form parameter - if (clientSecret != null) localVarFormParams.Add("client_secret", Configuration.ApiClient.ParameterToString(clientSecret)); // form parameter - if (grantType != null) localVarFormParams.Add("grant_type", Configuration.ApiClient.ParameterToString(grantType)); // form parameter - - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath, - Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("AuthToken", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (OAuthResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(OAuthResponse))); - } - - } -} diff --git a/src/com.telstra.messaging/Api/MessagingApi.cs b/src/com.telstra.messaging/Api/MessagingApi.cs deleted file mode 100644 index 55ba4c1..0000000 --- a/src/com.telstra.messaging/Api/MessagingApi.cs +++ /dev/null @@ -1,1087 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using RestSharp; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; - -namespace com.telstra.messaging.Api -{ - /// - /// Represents a collection of functions to interact with the API endpoints - /// - public interface IMessagingApi : IApiAccessor - { - #region Synchronous Operations - /// - /// Get MMS Status - /// - /// - /// Get MMS Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/mms - /// List<OutboundPollResponse> - List GetMMSStatus (string messageid); - - /// - /// Get MMS Status - /// - /// - /// Get MMS Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/mms - /// ApiResponse of List<OutboundPollResponse> - ApiResponse> GetMMSStatusWithHttpInfo (string messageid); - /// - /// Get SMS Status - /// - /// - /// Get Message Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/sms - /// List<OutboundPollResponse> - List GetSMSStatus (string messageId); - - /// - /// Get SMS Status - /// - /// - /// Get Message Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/sms - /// ApiResponse of List<OutboundPollResponse> - ApiResponse> GetSMSStatusWithHttpInfo (string messageId); - /// - /// Retrieve SMS Responses - /// - /// - /// Retrieve Messages - /// - /// Thrown when fails to make API call - /// InboundPollResponse - InboundPollResponse RetrieveSMSResponses (); - - /// - /// Retrieve SMS Responses - /// - /// - /// Retrieve Messages - /// - /// Thrown when fails to make API call - /// ApiResponse of InboundPollResponse - ApiResponse RetrieveSMSResponsesWithHttpInfo (); - /// - /// Send MMS - /// - /// - /// Send MMS - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and MMS message.The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// MessageSentResponse - MessageSentResponse SendMMS (SendMmsRequest body); - - /// - /// Send MMS - /// - /// - /// Send MMS - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and MMS message.The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// ApiResponse of MessageSentResponse - ApiResponse SendMMSWithHttpInfo (SendMmsRequest body); - /// - /// Send SMS - /// - /// - /// Send Message - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and text message. The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// MessageSentResponse - MessageSentResponse SendSMS (SendSMSRequest payload); - - /// - /// Send SMS - /// - /// - /// Send Message - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and text message. The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// ApiResponse of MessageSentResponse - ApiResponse SendSMSWithHttpInfo (SendSMSRequest payload); - #endregion Synchronous Operations - #region Asynchronous Operations - /// - /// Get MMS Status - /// - /// - /// Get MMS Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/mms - /// Task of List<OutboundPollResponse> - System.Threading.Tasks.Task> GetMMSStatusAsync (string messageid); - - /// - /// Get MMS Status - /// - /// - /// Get MMS Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/mms - /// Task of ApiResponse (List<OutboundPollResponse>) - System.Threading.Tasks.Task>> GetMMSStatusAsyncWithHttpInfo (string messageid); - /// - /// Get SMS Status - /// - /// - /// Get Message Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/sms - /// Task of List<OutboundPollResponse> - System.Threading.Tasks.Task> GetSMSStatusAsync (string messageId); - - /// - /// Get SMS Status - /// - /// - /// Get Message Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/sms - /// Task of ApiResponse (List<OutboundPollResponse>) - System.Threading.Tasks.Task>> GetSMSStatusAsyncWithHttpInfo (string messageId); - /// - /// Retrieve SMS Responses - /// - /// - /// Retrieve Messages - /// - /// Thrown when fails to make API call - /// Task of InboundPollResponse - System.Threading.Tasks.Task RetrieveSMSResponsesAsync (); - - /// - /// Retrieve SMS Responses - /// - /// - /// Retrieve Messages - /// - /// Thrown when fails to make API call - /// Task of ApiResponse (InboundPollResponse) - System.Threading.Tasks.Task> RetrieveSMSResponsesAsyncWithHttpInfo (); - /// - /// Send MMS - /// - /// - /// Send MMS - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and MMS message.The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// Task of MessageSentResponse - System.Threading.Tasks.Task SendMMSAsync (SendMmsRequest body); - - /// - /// Send MMS - /// - /// - /// Send MMS - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and MMS message.The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// Task of ApiResponse (MessageSentResponse) - System.Threading.Tasks.Task> SendMMSAsyncWithHttpInfo (SendMmsRequest body); - /// - /// Send SMS - /// - /// - /// Send Message - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and text message. The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// Task of MessageSentResponse - System.Threading.Tasks.Task SendSMSAsync (SendSMSRequest payload); - - /// - /// Send SMS - /// - /// - /// Send Message - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and text message. The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// Task of ApiResponse (MessageSentResponse) - System.Threading.Tasks.Task> SendSMSAsyncWithHttpInfo (SendSMSRequest payload); - #endregion Asynchronous Operations - } - - /// - /// Represents a collection of functions to interact with the API endpoints - /// - public partial class MessagingApi : IMessagingApi - { - private com.telstra.messaging.Client.ExceptionFactory _exceptionFactory = (name, response) => null; - - /// - /// Initializes a new instance of the class. - /// - /// - public MessagingApi(String basePath) - { - this.Configuration = new Configuration { BasePath = basePath }; - - ExceptionFactory = com.telstra.messaging.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class - /// using Configuration object - /// - /// An instance of Configuration - /// - public MessagingApi(Configuration configuration = null) - { - if (configuration == null) // use the default one in Configuration - this.Configuration = Configuration.Default; - else - this.Configuration = configuration; - - ExceptionFactory = com.telstra.messaging.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Gets the base path of the API client. - /// - /// The base path - public String GetBasePath() - { - return this.Configuration.ApiClient.RestClient.BaseUrl.ToString(); - } - - /// - /// Sets the base path of the API client. - /// - /// The base path - [Obsolete("SetBasePath is deprecated, please do 'Configuration.ApiClient = new ApiClient(\"http://new-path\")' instead.")] - public void SetBasePath(String basePath) - { - // do nothing - } - - /// - /// Gets or sets the configuration object - /// - /// An instance of the Configuration - public Configuration Configuration {get; set;} - - /// - /// Provides a factory method hook for the creation of exceptions. - /// - public com.telstra.messaging.Client.ExceptionFactory ExceptionFactory - { - get - { - if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) - { - throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); - } - return _exceptionFactory; - } - set { _exceptionFactory = value; } - } - - /// - /// Gets the default header. - /// - /// Dictionary of HTTP header - [Obsolete("DefaultHeader is deprecated, please use Configuration.DefaultHeader instead.")] - public IDictionary DefaultHeader() - { - return new ReadOnlyDictionary(this.Configuration.DefaultHeader); - } - - /// - /// Add default header. - /// - /// Header field name. - /// Header field value. - /// - [Obsolete("AddDefaultHeader is deprecated, please use Configuration.AddDefaultHeader instead.")] - public void AddDefaultHeader(string key, string value) - { - this.Configuration.AddDefaultHeader(key, value); - } - - /// - /// Get MMS Status Get MMS Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/mms - /// List<OutboundPollResponse> - public List GetMMSStatus (string messageid) - { - ApiResponse> localVarResponse = GetMMSStatusWithHttpInfo(messageid); - return localVarResponse.Data; - } - - /// - /// Get MMS Status Get MMS Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/mms - /// ApiResponse of List<OutboundPollResponse> - public ApiResponse< List > GetMMSStatusWithHttpInfo (string messageid) - { - // verify the required parameter 'messageid' is set - if (messageid == null) - throw new ApiException(400, "Missing required parameter 'messageid' when calling MessagingApi->GetMMSStatus"); - - var localVarPath = "/messages/mms/{messageid}/status"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (messageid != null) localVarPathParams.Add("messageid", Configuration.ApiClient.ParameterToString(messageid)); // path parameter - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath, - Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("GetMMSStatus", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse>(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (List) Configuration.ApiClient.Deserialize(localVarResponse, typeof(List))); - } - - /// - /// Get MMS Status Get MMS Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/mms - /// Task of List<OutboundPollResponse> - public async System.Threading.Tasks.Task> GetMMSStatusAsync (string messageid) - { - ApiResponse> localVarResponse = await GetMMSStatusAsyncWithHttpInfo(messageid); - return localVarResponse.Data; - - } - - /// - /// Get MMS Status Get MMS Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/mms - /// Task of ApiResponse (List<OutboundPollResponse>) - public async System.Threading.Tasks.Task>> GetMMSStatusAsyncWithHttpInfo (string messageid) - { - // verify the required parameter 'messageid' is set - if (messageid == null) - throw new ApiException(400, "Missing required parameter 'messageid' when calling MessagingApi->GetMMSStatus"); - - var localVarPath = "/messages/mms/{messageid}/status"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (messageid != null) localVarPathParams.Add("messageid", Configuration.ApiClient.ParameterToString(messageid)); // path parameter - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath, - Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("GetMMSStatus", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse>(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (List) Configuration.ApiClient.Deserialize(localVarResponse, typeof(List))); - } - - /// - /// Get SMS Status Get Message Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/sms - /// List<OutboundPollResponse> - public List GetSMSStatus (string messageId) - { - ApiResponse> localVarResponse = GetSMSStatusWithHttpInfo(messageId); - return localVarResponse.Data; - } - - /// - /// Get SMS Status Get Message Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/sms - /// ApiResponse of List<OutboundPollResponse> - public ApiResponse< List > GetSMSStatusWithHttpInfo (string messageId) - { - // verify the required parameter 'messageId' is set - if (messageId == null) - throw new ApiException(400, "Missing required parameter 'messageId' when calling MessagingApi->GetSMSStatus"); - - var localVarPath = "/messages/sms/{messageId}/status"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (messageId != null) localVarPathParams.Add("messageId", Configuration.ApiClient.ParameterToString(messageId)); // path parameter - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath, - Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("GetSMSStatus", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse>(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (List) Configuration.ApiClient.Deserialize(localVarResponse, typeof(List))); - } - - /// - /// Get SMS Status Get Message Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/sms - /// Task of List<OutboundPollResponse> - public async System.Threading.Tasks.Task> GetSMSStatusAsync (string messageId) - { - ApiResponse> localVarResponse = await GetSMSStatusAsyncWithHttpInfo(messageId); - return localVarResponse.Data; - - } - - /// - /// Get SMS Status Get Message Status - /// - /// Thrown when fails to make API call - /// Unique identifier of a message - it is the value returned from a previous POST call to https://api.telstra.com/v2/messages/sms - /// Task of ApiResponse (List<OutboundPollResponse>) - public async System.Threading.Tasks.Task>> GetSMSStatusAsyncWithHttpInfo (string messageId) - { - // verify the required parameter 'messageId' is set - if (messageId == null) - throw new ApiException(400, "Missing required parameter 'messageId' when calling MessagingApi->GetSMSStatus"); - - var localVarPath = "/messages/sms/{messageId}/status"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (messageId != null) localVarPathParams.Add("messageId", Configuration.ApiClient.ParameterToString(messageId)); // path parameter - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath, - Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("GetSMSStatus", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse>(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (List) Configuration.ApiClient.Deserialize(localVarResponse, typeof(List))); - } - - /// - /// Retrieve SMS Responses Retrieve Messages - /// - /// Thrown when fails to make API call - /// InboundPollResponse - public InboundPollResponse RetrieveSMSResponses () - { - ApiResponse localVarResponse = RetrieveSMSResponsesWithHttpInfo(); - return localVarResponse.Data; - } - - /// - /// Retrieve SMS Responses Retrieve Messages - /// - /// Thrown when fails to make API call - /// ApiResponse of InboundPollResponse - public ApiResponse< InboundPollResponse > RetrieveSMSResponsesWithHttpInfo () - { - - var localVarPath = "/messages/sms"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath, - Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("RetrieveSMSResponses", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (InboundPollResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(InboundPollResponse))); - } - - /// - /// Retrieve SMS Responses Retrieve Messages - /// - /// Thrown when fails to make API call - /// Task of InboundPollResponse - public async System.Threading.Tasks.Task RetrieveSMSResponsesAsync () - { - ApiResponse localVarResponse = await RetrieveSMSResponsesAsyncWithHttpInfo(); - return localVarResponse.Data; - - } - - /// - /// Retrieve SMS Responses Retrieve Messages - /// - /// Thrown when fails to make API call - /// Task of ApiResponse (InboundPollResponse) - public async System.Threading.Tasks.Task> RetrieveSMSResponsesAsyncWithHttpInfo () - { - - var localVarPath = "/messages/sms"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath, - Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("RetrieveSMSResponses", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (InboundPollResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(InboundPollResponse))); - } - - /// - /// Send MMS Send MMS - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and MMS message.The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// MessageSentResponse - public MessageSentResponse SendMMS (SendMmsRequest body) - { - ApiResponse localVarResponse = SendMMSWithHttpInfo(body); - return localVarResponse.Data; - } - - /// - /// Send MMS Send MMS - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and MMS message.The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// ApiResponse of MessageSentResponse - public ApiResponse< MessageSentResponse > SendMMSWithHttpInfo (SendMmsRequest body) - { - // verify the required parameter 'body' is set - if (body == null) - throw new ApiException(400, "Missing required parameter 'body' when calling MessagingApi->SendMMS"); - - var localVarPath = "/messages/mms"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (body != null && body.GetType() != typeof(byte[])) - { - localVarPostBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter - } - else - { - localVarPostBody = body; // byte array - } - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath, - Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("SendMMS", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (MessageSentResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(MessageSentResponse))); - } - - /// - /// Send MMS Send MMS - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and MMS message.The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// Task of MessageSentResponse - public async System.Threading.Tasks.Task SendMMSAsync (SendMmsRequest body) - { - ApiResponse localVarResponse = await SendMMSAsyncWithHttpInfo(body); - return localVarResponse.Data; - - } - - /// - /// Send MMS Send MMS - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and MMS message.The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// Task of ApiResponse (MessageSentResponse) - public async System.Threading.Tasks.Task> SendMMSAsyncWithHttpInfo (SendMmsRequest body) - { - // verify the required parameter 'body' is set - if (body == null) - throw new ApiException(400, "Missing required parameter 'body' when calling MessagingApi->SendMMS"); - - var localVarPath = "/messages/mms"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (body != null && body.GetType() != typeof(byte[])) - { - localVarPostBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter - } - else - { - localVarPostBody = body; // byte array - } - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath, - Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("SendMMS", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (MessageSentResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(MessageSentResponse))); - } - - /// - /// Send SMS Send Message - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and text message. The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// MessageSentResponse - public MessageSentResponse SendSMS (SendSMSRequest payload) - { - ApiResponse localVarResponse = SendSMSWithHttpInfo(payload); - return localVarResponse.Data; - } - - /// - /// Send SMS Send Message - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and text message. The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// ApiResponse of MessageSentResponse - public ApiResponse< MessageSentResponse > SendSMSWithHttpInfo (SendSMSRequest payload) - { - // verify the required parameter 'payload' is set - if (payload == null) - throw new ApiException(400, "Missing required parameter 'payload' when calling MessagingApi->SendSMS"); - - var localVarPath = "/messages/sms"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (payload != null && payload.GetType() != typeof(byte[])) - { - localVarPostBody = Configuration.ApiClient.Serialize(payload); // http body (model) parameter - } - else - { - localVarPostBody = payload; // byte array - } - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath, - Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("SendSMS", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (MessageSentResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(MessageSentResponse))); - } - - /// - /// Send SMS Send Message - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and text message. The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// Task of MessageSentResponse - public async System.Threading.Tasks.Task SendSMSAsync (SendSMSRequest payload) - { - ApiResponse localVarResponse = await SendSMSAsyncWithHttpInfo(payload); - return localVarResponse.Data; - - } - - /// - /// Send SMS Send Message - /// - /// Thrown when fails to make API call - /// A JSON or XML payload containing the recipient's phone number and text message. The recipient number should be in the format '04xxxxxxxx' where x is a digit - /// Task of ApiResponse (MessageSentResponse) - public async System.Threading.Tasks.Task> SendSMSAsyncWithHttpInfo (SendSMSRequest payload) - { - // verify the required parameter 'payload' is set - if (payload == null) - throw new ApiException(400, "Missing required parameter 'payload' when calling MessagingApi->SendSMS"); - - var localVarPath = "/messages/sms"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (payload != null && payload.GetType() != typeof(byte[])) - { - localVarPostBody = Configuration.ApiClient.Serialize(payload); // http body (model) parameter - } - else - { - localVarPostBody = payload; // byte array - } - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath, - Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("SendSMS", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (MessageSentResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(MessageSentResponse))); - } - - } -} diff --git a/src/com.telstra.messaging/Api/ProvisioningApi.cs b/src/com.telstra.messaging/Api/ProvisioningApi.cs deleted file mode 100644 index 42a3a55..0000000 --- a/src/com.telstra.messaging/Api/ProvisioningApi.cs +++ /dev/null @@ -1,707 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using RestSharp; -using com.telstra.messaging.Client; -using com.telstra.messaging.Model; - -namespace com.telstra.messaging.Api -{ - /// - /// Represents a collection of functions to interact with the API endpoints - /// - public interface IProvisioningApi : IApiAccessor - { - #region Synchronous Operations - /// - /// Create Subscription - /// - /// - /// Provision a mobile number - /// - /// Thrown when fails to make API call - /// A JSON payload containing the required attributes - /// ProvisionNumberResponse - ProvisionNumberResponse CreateSubscription (ProvisionNumberRequest body); - - /// - /// Create Subscription - /// - /// - /// Provision a mobile number - /// - /// Thrown when fails to make API call - /// A JSON payload containing the required attributes - /// ApiResponse of ProvisionNumberResponse - ApiResponse CreateSubscriptionWithHttpInfo (ProvisionNumberRequest body); - /// - /// Delete Subscription - /// - /// - /// Delete a mobile number subscription from an account - /// - /// Thrown when fails to make API call - /// EmptyArr - /// - void DeleteSubscription (DeleteNumberRequest body); - - /// - /// Delete Subscription - /// - /// - /// Delete a mobile number subscription from an account - /// - /// Thrown when fails to make API call - /// EmptyArr - /// ApiResponse of Object(void) - ApiResponse DeleteSubscriptionWithHttpInfo (DeleteNumberRequest body); - /// - /// Get Subscription - /// - /// - /// Get mobile number subscription for an account - /// - /// Thrown when fails to make API call - /// GetSubscriptionResponse - GetSubscriptionResponse GetSubscription (); - - /// - /// Get Subscription - /// - /// - /// Get mobile number subscription for an account - /// - /// Thrown when fails to make API call - /// ApiResponse of GetSubscriptionResponse - ApiResponse GetSubscriptionWithHttpInfo (); - #endregion Synchronous Operations - #region Asynchronous Operations - /// - /// Create Subscription - /// - /// - /// Provision a mobile number - /// - /// Thrown when fails to make API call - /// A JSON payload containing the required attributes - /// Task of ProvisionNumberResponse - System.Threading.Tasks.Task CreateSubscriptionAsync (ProvisionNumberRequest body); - - /// - /// Create Subscription - /// - /// - /// Provision a mobile number - /// - /// Thrown when fails to make API call - /// A JSON payload containing the required attributes - /// Task of ApiResponse (ProvisionNumberResponse) - System.Threading.Tasks.Task> CreateSubscriptionAsyncWithHttpInfo (ProvisionNumberRequest body); - /// - /// Delete Subscription - /// - /// - /// Delete a mobile number subscription from an account - /// - /// Thrown when fails to make API call - /// EmptyArr - /// Task of void - System.Threading.Tasks.Task DeleteSubscriptionAsync (DeleteNumberRequest body); - - /// - /// Delete Subscription - /// - /// - /// Delete a mobile number subscription from an account - /// - /// Thrown when fails to make API call - /// EmptyArr - /// Task of ApiResponse - System.Threading.Tasks.Task> DeleteSubscriptionAsyncWithHttpInfo (DeleteNumberRequest body); - /// - /// Get Subscription - /// - /// - /// Get mobile number subscription for an account - /// - /// Thrown when fails to make API call - /// Task of GetSubscriptionResponse - System.Threading.Tasks.Task GetSubscriptionAsync (); - - /// - /// Get Subscription - /// - /// - /// Get mobile number subscription for an account - /// - /// Thrown when fails to make API call - /// Task of ApiResponse (GetSubscriptionResponse) - System.Threading.Tasks.Task> GetSubscriptionAsyncWithHttpInfo (); - #endregion Asynchronous Operations - } - - /// - /// Represents a collection of functions to interact with the API endpoints - /// - public partial class ProvisioningApi : IProvisioningApi - { - private com.telstra.messaging.Client.ExceptionFactory _exceptionFactory = (name, response) => null; - - /// - /// Initializes a new instance of the class. - /// - /// - public ProvisioningApi(String basePath) - { - this.Configuration = new Configuration { BasePath = basePath }; - - ExceptionFactory = com.telstra.messaging.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Initializes a new instance of the class - /// using Configuration object - /// - /// An instance of Configuration - /// - public ProvisioningApi(Configuration configuration = null) - { - if (configuration == null) // use the default one in Configuration - this.Configuration = Configuration.Default; - else - this.Configuration = configuration; - - ExceptionFactory = com.telstra.messaging.Client.Configuration.DefaultExceptionFactory; - } - - /// - /// Gets the base path of the API client. - /// - /// The base path - public String GetBasePath() - { - return this.Configuration.ApiClient.RestClient.BaseUrl.ToString(); - } - - /// - /// Sets the base path of the API client. - /// - /// The base path - [Obsolete("SetBasePath is deprecated, please do 'Configuration.ApiClient = new ApiClient(\"http://new-path\")' instead.")] - public void SetBasePath(String basePath) - { - // do nothing - } - - /// - /// Gets or sets the configuration object - /// - /// An instance of the Configuration - public Configuration Configuration {get; set;} - - /// - /// Provides a factory method hook for the creation of exceptions. - /// - public com.telstra.messaging.Client.ExceptionFactory ExceptionFactory - { - get - { - if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1) - { - throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported."); - } - return _exceptionFactory; - } - set { _exceptionFactory = value; } - } - - /// - /// Gets the default header. - /// - /// Dictionary of HTTP header - [Obsolete("DefaultHeader is deprecated, please use Configuration.DefaultHeader instead.")] - public IDictionary DefaultHeader() - { - return new ReadOnlyDictionary(this.Configuration.DefaultHeader); - } - - /// - /// Add default header. - /// - /// Header field name. - /// Header field value. - /// - [Obsolete("AddDefaultHeader is deprecated, please use Configuration.AddDefaultHeader instead.")] - public void AddDefaultHeader(string key, string value) - { - this.Configuration.AddDefaultHeader(key, value); - } - - /// - /// Create Subscription Provision a mobile number - /// - /// Thrown when fails to make API call - /// A JSON payload containing the required attributes - /// ProvisionNumberResponse - public ProvisionNumberResponse CreateSubscription (ProvisionNumberRequest body) - { - ApiResponse localVarResponse = CreateSubscriptionWithHttpInfo(body); - return localVarResponse.Data; - } - - /// - /// Create Subscription Provision a mobile number - /// - /// Thrown when fails to make API call - /// A JSON payload containing the required attributes - /// ApiResponse of ProvisionNumberResponse - public ApiResponse< ProvisionNumberResponse > CreateSubscriptionWithHttpInfo (ProvisionNumberRequest body) - { - // verify the required parameter 'body' is set - if (body == null) - throw new ApiException(400, "Missing required parameter 'body' when calling ProvisioningApi->CreateSubscription"); - - var localVarPath = "/messages/provisioning/subscriptions"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (body != null && body.GetType() != typeof(byte[])) - { - localVarPostBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter - } - else - { - localVarPostBody = body; // byte array - } - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath, - Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("CreateSubscription", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (ProvisionNumberResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(ProvisionNumberResponse))); - } - - /// - /// Create Subscription Provision a mobile number - /// - /// Thrown when fails to make API call - /// A JSON payload containing the required attributes - /// Task of ProvisionNumberResponse - public async System.Threading.Tasks.Task CreateSubscriptionAsync (ProvisionNumberRequest body) - { - ApiResponse localVarResponse = await CreateSubscriptionAsyncWithHttpInfo(body); - return localVarResponse.Data; - - } - - /// - /// Create Subscription Provision a mobile number - /// - /// Thrown when fails to make API call - /// A JSON payload containing the required attributes - /// Task of ApiResponse (ProvisionNumberResponse) - public async System.Threading.Tasks.Task> CreateSubscriptionAsyncWithHttpInfo (ProvisionNumberRequest body) - { - // verify the required parameter 'body' is set - if (body == null) - throw new ApiException(400, "Missing required parameter 'body' when calling ProvisioningApi->CreateSubscription"); - - var localVarPath = "/messages/provisioning/subscriptions"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (body != null && body.GetType() != typeof(byte[])) - { - localVarPostBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter - } - else - { - localVarPostBody = body; // byte array - } - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath, - Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("CreateSubscription", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (ProvisionNumberResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(ProvisionNumberResponse))); - } - - /// - /// Delete Subscription Delete a mobile number subscription from an account - /// - /// Thrown when fails to make API call - /// EmptyArr - /// - public void DeleteSubscription (DeleteNumberRequest body) - { - DeleteSubscriptionWithHttpInfo(body); - } - - /// - /// Delete Subscription Delete a mobile number subscription from an account - /// - /// Thrown when fails to make API call - /// EmptyArr - /// ApiResponse of Object(void) - public ApiResponse DeleteSubscriptionWithHttpInfo (DeleteNumberRequest body) - { - // verify the required parameter 'body' is set - if (body == null) - throw new ApiException(400, "Missing required parameter 'body' when calling ProvisioningApi->DeleteSubscription"); - - var localVarPath = "/messages/provisioning/subscriptions"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (body != null && body.GetType() != typeof(byte[])) - { - localVarPostBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter - } - else - { - localVarPostBody = body; // byte array - } - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath, - Method.DELETE, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("DeleteSubscription", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - null); - } - - /// - /// Delete Subscription Delete a mobile number subscription from an account - /// - /// Thrown when fails to make API call - /// EmptyArr - /// Task of void - public async System.Threading.Tasks.Task DeleteSubscriptionAsync (DeleteNumberRequest body) - { - await DeleteSubscriptionAsyncWithHttpInfo(body); - - } - - /// - /// Delete Subscription Delete a mobile number subscription from an account - /// - /// Thrown when fails to make API call - /// EmptyArr - /// Task of ApiResponse - public async System.Threading.Tasks.Task> DeleteSubscriptionAsyncWithHttpInfo (DeleteNumberRequest body) - { - // verify the required parameter 'body' is set - if (body == null) - throw new ApiException(400, "Missing required parameter 'body' when calling ProvisioningApi->DeleteSubscription"); - - var localVarPath = "/messages/provisioning/subscriptions"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - if (body != null && body.GetType() != typeof(byte[])) - { - localVarPostBody = Configuration.ApiClient.Serialize(body); // http body (model) parameter - } - else - { - localVarPostBody = body; // byte array - } - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath, - Method.DELETE, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("DeleteSubscription", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - null); - } - - /// - /// Get Subscription Get mobile number subscription for an account - /// - /// Thrown when fails to make API call - /// GetSubscriptionResponse - public GetSubscriptionResponse GetSubscription () - { - ApiResponse localVarResponse = GetSubscriptionWithHttpInfo(); - return localVarResponse.Data; - } - - /// - /// Get Subscription Get mobile number subscription for an account - /// - /// Thrown when fails to make API call - /// ApiResponse of GetSubscriptionResponse - public ApiResponse< GetSubscriptionResponse > GetSubscriptionWithHttpInfo () - { - - var localVarPath = "/messages/provisioning/subscriptions"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) Configuration.ApiClient.CallApi(localVarPath, - Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("GetSubscription", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (GetSubscriptionResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(GetSubscriptionResponse))); - } - - /// - /// Get Subscription Get mobile number subscription for an account - /// - /// Thrown when fails to make API call - /// Task of GetSubscriptionResponse - public async System.Threading.Tasks.Task GetSubscriptionAsync () - { - ApiResponse localVarResponse = await GetSubscriptionAsyncWithHttpInfo(); - return localVarResponse.Data; - - } - - /// - /// Get Subscription Get mobile number subscription for an account - /// - /// Thrown when fails to make API call - /// Task of ApiResponse (GetSubscriptionResponse) - public async System.Threading.Tasks.Task> GetSubscriptionAsyncWithHttpInfo () - { - - var localVarPath = "/messages/provisioning/subscriptions"; - var localVarPathParams = new Dictionary(); - var localVarQueryParams = new List>(); - var localVarHeaderParams = new Dictionary(Configuration.DefaultHeader); - var localVarFormParams = new Dictionary(); - var localVarFileParams = new Dictionary(); - Object localVarPostBody = null; - - // to determine the Content-Type header - String[] localVarHttpContentTypes = new String[] { - "application/json" - }; - String localVarHttpContentType = Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes); - - // to determine the Accept header - String[] localVarHttpHeaderAccepts = new String[] { - "application/json" - }; - String localVarHttpHeaderAccept = Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts); - if (localVarHttpHeaderAccept != null) - localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept); - - - // authentication (auth) required - // oauth required - if (!String.IsNullOrEmpty(Configuration.AccessToken)) - { - localVarHeaderParams["Authorization"] = "Bearer " + Configuration.AccessToken; - } - - // make the HTTP request - IRestResponse localVarResponse = (IRestResponse) await Configuration.ApiClient.CallApiAsync(localVarPath, - Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams, - localVarPathParams, localVarHttpContentType); - - int localVarStatusCode = (int) localVarResponse.StatusCode; - - if (ExceptionFactory != null) - { - Exception exception = ExceptionFactory("GetSubscription", localVarResponse); - if (exception != null) throw exception; - } - - return new ApiResponse(localVarStatusCode, - localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()), - (GetSubscriptionResponse) Configuration.ApiClient.Deserialize(localVarResponse, typeof(GetSubscriptionResponse))); - } - - } -} diff --git a/src/com.telstra.messaging/Client/ApiClient.cs b/src/com.telstra.messaging/Client/ApiClient.cs deleted file mode 100644 index 6ebf32e..0000000 --- a/src/com.telstra.messaging/Client/ApiClient.cs +++ /dev/null @@ -1,530 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Globalization; -using System.Text.RegularExpressions; -using System.IO; -using System.Web; -using System.Linq; -using System.Net; -using System.Text; -using Newtonsoft.Json; -using RestSharp; - -namespace com.telstra.messaging.Client -{ - /// - /// API client is mainly responsible for making the HTTP call to the API backend. - /// - public partial class ApiClient - { - private JsonSerializerSettings serializerSettings = new JsonSerializerSettings - { - ConstructorHandling = ConstructorHandling.AllowNonPublicDefaultConstructor - }; - - /// - /// Allows for extending request processing for generated code. - /// - /// The RestSharp request object - partial void InterceptRequest(IRestRequest request); - - /// - /// Allows for extending response processing for generated code. - /// - /// The RestSharp request object - /// The RestSharp response object - partial void InterceptResponse(IRestRequest request, IRestResponse response); - - /// - /// Initializes a new instance of the class - /// with default configuration. - /// - public ApiClient() - { - Configuration = com.telstra.messaging.Client.Configuration.Default; - RestClient = new RestClient("https://tapi.telstra.com/v2"); - } - - /// - /// Initializes a new instance of the class - /// with default base path (https://tapi.telstra.com/v2). - /// - /// An instance of Configuration. - public ApiClient(Configuration config) - { - Configuration = config ?? com.telstra.messaging.Client.Configuration.Default; - - RestClient = new RestClient(Configuration.BasePath); - } - - /// - /// Initializes a new instance of the class - /// with default configuration. - /// - /// The base path. - public ApiClient(String basePath = "https://tapi.telstra.com/v2") - { - if (String.IsNullOrEmpty(basePath)) - throw new ArgumentException("basePath cannot be empty"); - - RestClient = new RestClient(basePath); - Configuration = Client.Configuration.Default; - } - - /// - /// Gets or sets the default API client for making HTTP calls. - /// - /// The default API client. - [Obsolete("ApiClient.Default is deprecated, please use 'Configuration.Default.ApiClient' instead.")] - public static ApiClient Default; - - /// - /// Gets or sets an instance of the IReadableConfiguration. - /// - /// An instance of the IReadableConfiguration. - /// - /// helps us to avoid modifying possibly global - /// configuration values from within a given client. It does not guarantee thread-safety - /// of the instance in any way. - /// - public IReadableConfiguration Configuration { get; set; } - - /// - /// Gets or sets the RestClient. - /// - /// An instance of the RestClient - public RestClient RestClient { get; set; } - - // Creates and sets up a RestRequest prior to a call. - private RestRequest PrepareRequest( - String path, RestSharp.Method method, List> queryParams, Object postBody, - Dictionary headerParams, Dictionary formParams, - Dictionary fileParams, Dictionary pathParams, - String contentType) - { - var request = new RestRequest(path, method); - - // add path parameter, if any - foreach(var param in pathParams) - request.AddParameter(param.Key, param.Value, ParameterType.UrlSegment); - - // add header parameter, if any - foreach(var param in headerParams) - request.AddHeader(param.Key, param.Value); - - // add query parameter, if any - foreach(var param in queryParams) - request.AddQueryParameter(param.Key, param.Value); - - // add form parameter, if any - foreach(var param in formParams) - request.AddParameter(param.Key, param.Value); - - // add file parameter, if any - foreach(var param in fileParams) - { - request.AddFile(param.Value.Name, param.Value.Writer, param.Value.FileName, param.Value.ContentType); - } - - if (postBody != null) // http body (model or byte[]) parameter - { - request.AddParameter(contentType, postBody, ParameterType.RequestBody); - } - - return request; - } - - /// - /// Makes the HTTP request (Sync). - /// - /// URL path. - /// HTTP method. - /// Query parameters. - /// HTTP body (POST request). - /// Header parameters. - /// Form parameters. - /// File parameters. - /// Path parameters. - /// Content Type of the request - /// Object - public Object CallApi( - String path, RestSharp.Method method, List> queryParams, Object postBody, - Dictionary headerParams, Dictionary formParams, - Dictionary fileParams, Dictionary pathParams, - String contentType) - { - var request = PrepareRequest( - path, method, queryParams, postBody, headerParams, formParams, fileParams, - pathParams, contentType); - - // set timeout - - RestClient.Timeout = Configuration.Timeout; - // set user agent - RestClient.UserAgent = Configuration.UserAgent; - - InterceptRequest(request); - var response = RestClient.Execute(request); - InterceptResponse(request, response); - - return (Object) response; - } - /// - /// Makes the asynchronous HTTP request. - /// - /// URL path. - /// HTTP method. - /// Query parameters. - /// HTTP body (POST request). - /// Header parameters. - /// Form parameters. - /// File parameters. - /// Path parameters. - /// Content type. - /// The Task instance. - public async System.Threading.Tasks.Task CallApiAsync( - String path, RestSharp.Method method, List> queryParams, Object postBody, - Dictionary headerParams, Dictionary formParams, - Dictionary fileParams, Dictionary pathParams, - String contentType) - { - var request = PrepareRequest( - path, method, queryParams, postBody, headerParams, formParams, fileParams, - pathParams, contentType); - InterceptRequest(request); - var response = await RestClient.ExecuteTaskAsync(request); - InterceptResponse(request, response); - return (Object)response; - } - - /// - /// Escape string (url-encoded). - /// - /// String to be escaped. - /// Escaped string. - public string EscapeString(string str) - { - return UrlEncode(str); - } - - /// - /// Create FileParameter based on Stream. - /// - /// Parameter name. - /// Input stream. - /// FileParameter. - public FileParameter ParameterToFile(string name, Stream stream) - { - if (stream is FileStream) - return FileParameter.Create(name, ReadAsBytes(stream), Path.GetFileName(((FileStream)stream).Name)); - else - return FileParameter.Create(name, ReadAsBytes(stream), "no_file_name_provided"); - } - - /// - /// If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime. - /// If parameter is a list, join the list with ",". - /// Otherwise just return the string. - /// - /// The parameter (header, path, query, form). - /// Formatted string. - public string ParameterToString(object obj) - { - if (obj is DateTime) - // Return a formatted date string - Can be customized with Configuration.DateTimeFormat - // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o") - // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 - // For example: 2009-06-15T13:45:30.0000000 - return ((DateTime)obj).ToString (Configuration.DateTimeFormat); - else if (obj is DateTimeOffset) - // Return a formatted date string - Can be customized with Configuration.DateTimeFormat - // Defaults to an ISO 8601, using the known as a Round-trip date/time pattern ("o") - // https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 - // For example: 2009-06-15T13:45:30.0000000 - return ((DateTimeOffset)obj).ToString (Configuration.DateTimeFormat); - else if (obj is IList) - { - var flattenedString = new StringBuilder(); - foreach (var param in (IList)obj) - { - if (flattenedString.Length > 0) - flattenedString.Append(","); - flattenedString.Append(param); - } - return flattenedString.ToString(); - } - else - return Convert.ToString (obj); - } - - /// - /// Deserialize the JSON string into a proper object. - /// - /// The HTTP response. - /// Object type. - /// Object representation of the JSON string. - public object Deserialize(IRestResponse response, Type type) - { - IList headers = response.Headers; - if (type == typeof(byte[])) // return byte array - { - return response.RawBytes; - } - - // TODO: ? if (type.IsAssignableFrom(typeof(Stream))) - if (type == typeof(Stream)) - { - if (headers != null) - { - var filePath = String.IsNullOrEmpty(Configuration.TempFolderPath) - ? Path.GetTempPath() - : Configuration.TempFolderPath; - var regex = new Regex(@"Content-Disposition=.*filename=['""]?([^'""\s]+)['""]?$"); - foreach (var header in headers) - { - var match = regex.Match(header.ToString()); - if (match.Success) - { - string fileName = filePath + SanitizeFilename(match.Groups[1].Value.Replace("\"", "").Replace("'", "")); - File.WriteAllBytes(fileName, response.RawBytes); - return new FileStream(fileName, FileMode.Open); - } - } - } - var stream = new MemoryStream(response.RawBytes); - return stream; - } - - if (type.Name.StartsWith("System.Nullable`1[[System.DateTime")) // return a datetime object - { - return DateTime.Parse(response.Content, null, System.Globalization.DateTimeStyles.RoundtripKind); - } - - if (type == typeof(String) || type.Name.StartsWith("System.Nullable")) // return primitive type - { - return ConvertType(response.Content, type); - } - - // at this point, it must be a model (json) - try - { - return JsonConvert.DeserializeObject(response.Content, type, serializerSettings); - } - catch (Exception e) - { - throw new ApiException(500, e.Message); - } - } - - /// - /// Serialize an input (model) into JSON string - /// - /// Object. - /// JSON string. - public String Serialize(object obj) - { - try - { - return obj != null ? JsonConvert.SerializeObject(obj) : null; - } - catch (Exception e) - { - throw new ApiException(500, e.Message); - } - } - - /// - ///Check if the given MIME is a JSON MIME. - ///JSON MIME examples: - /// application/json - /// application/json; charset=UTF8 - /// APPLICATION/JSON - /// application/vnd.company+json - /// - /// MIME - /// Returns True if MIME type is json. - public bool IsJsonMime(String mime) - { - var jsonRegex = new Regex("(?i)^(application/json|[^;/ \t]+/[^;/ \t]+[+]json)[ \t]*(;.*)?$"); - return mime != null && (jsonRegex.IsMatch(mime) || mime.Equals("application/json-patch+json")); - } - - /// - /// Select the Content-Type header's value from the given content-type array: - /// if JSON type exists in the given array, use it; - /// otherwise use the first one defined in 'consumes' - /// - /// The Content-Type array to select from. - /// The Content-Type header to use. - public String SelectHeaderContentType(String[] contentTypes) - { - if (contentTypes.Length == 0) - return "application/json"; - - foreach (var contentType in contentTypes) - { - if (IsJsonMime(contentType.ToLower())) - return contentType; - } - - return contentTypes[0]; // use the first content type specified in 'consumes' - } - - /// - /// Select the Accept header's value from the given accepts array: - /// if JSON exists in the given array, use it; - /// otherwise use all of them (joining into a string) - /// - /// The accepts array to select from. - /// The Accept header to use. - public String SelectHeaderAccept(String[] accepts) - { - if (accepts.Length == 0) - return null; - - if (accepts.Contains("application/json", StringComparer.OrdinalIgnoreCase)) - return "application/json"; - - return String.Join(",", accepts); - } - - /// - /// Encode string in base64 format. - /// - /// String to be encoded. - /// Encoded string. - public static string Base64Encode(string text) - { - return System.Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(text)); - } - - /// - /// Dynamically cast the object into target type. - /// - /// Object to be casted - /// Target type - /// Casted object - public static dynamic ConvertType(dynamic fromObject, Type toObject) - { - return Convert.ChangeType(fromObject, toObject); - } - - /// - /// Convert stream to byte array - /// - /// Input stream to be converted - /// Byte array - public static byte[] ReadAsBytes(Stream inputStream) - { - byte[] buf = new byte[16*1024]; - using (MemoryStream ms = new MemoryStream()) - { - int count; - while ((count = inputStream.Read(buf, 0, buf.Length)) > 0) - { - ms.Write(buf, 0, count); - } - return ms.ToArray(); - } - } - - /// - /// URL encode a string - /// Credit/Ref: https://github.com/restsharp/RestSharp/blob/master/RestSharp/Extensions/StringExtensions.cs#L50 - /// - /// String to be URL encoded - /// Byte array - public static string UrlEncode(string input) - { - const int maxLength = 32766; - - if (input == null) - { - throw new ArgumentNullException("input"); - } - - if (input.Length <= maxLength) - { - return Uri.EscapeDataString(input); - } - - StringBuilder sb = new StringBuilder(input.Length * 2); - int index = 0; - - while (index < input.Length) - { - int length = Math.Min(input.Length - index, maxLength); - string subString = input.Substring(index, length); - - sb.Append(Uri.EscapeDataString(subString)); - index += subString.Length; - } - - return sb.ToString(); - } - - /// - /// Sanitize filename by removing the path - /// - /// Filename - /// Filename - public static string SanitizeFilename(string filename) - { - Match match = Regex.Match(filename, @".*[/\\](.*)$"); - - if (match.Success) - { - return match.Groups[1].Value; - } - else - { - return filename; - } - } - - /// - /// Convert params to key/value pairs. - /// Use collectionFormat to properly format lists and collections. - /// - /// Key name. - /// Value object. - /// A list of KeyValuePairs - public IEnumerable> ParameterToKeyValuePairs(string collectionFormat, string name, object value) - { - var parameters = new List>(); - - if (IsCollection(value) && collectionFormat == "multi") - { - var valueCollection = value as IEnumerable; - parameters.AddRange(from object item in valueCollection select new KeyValuePair(name, ParameterToString(item))); - } - else - { - parameters.Add(new KeyValuePair(name, ParameterToString(value))); - } - - return parameters; - } - - /// - /// Check if generic object is a collection. - /// - /// - /// True if object is a collection type - private static bool IsCollection(object value) - { - return value is IList || value is ICollection; - } - } -} diff --git a/src/com.telstra.messaging/Client/ApiResponse.cs b/src/com.telstra.messaging/Client/ApiResponse.cs deleted file mode 100644 index af4a7b7..0000000 --- a/src/com.telstra.messaging/Client/ApiResponse.cs +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Collections.Generic; - -namespace com.telstra.messaging.Client -{ - /// - /// API Response - /// - public class ApiResponse - { - /// - /// Gets or sets the status code (HTTP status code) - /// - /// The status code. - public int StatusCode { get; private set; } - - /// - /// Gets or sets the HTTP headers - /// - /// HTTP headers - public IDictionary Headers { get; private set; } - - /// - /// Gets or sets the data (parsed HTTP body) - /// - /// The data. - public T Data { get; private set; } - - /// - /// Initializes a new instance of the class. - /// - /// HTTP status code. - /// HTTP headers. - /// Data (parsed HTTP body) - public ApiResponse(int statusCode, IDictionary headers, T data) - { - this.StatusCode= statusCode; - this.Headers = headers; - this.Data = data; - } - - } - -} diff --git a/src/com.telstra.messaging/Client/ExceptionFactory.cs b/src/com.telstra.messaging/Client/ExceptionFactory.cs deleted file mode 100644 index be3ffa0..0000000 --- a/src/com.telstra.messaging/Client/ExceptionFactory.cs +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using System; -using RestSharp; - -namespace com.telstra.messaging.Client -{ - /// - /// A delegate to ExceptionFactory method - /// - /// Method name - /// Response - /// Exceptions - public delegate Exception ExceptionFactory(string methodName, IRestResponse response); -} diff --git a/src/com.telstra.messaging/Client/GlobalConfiguration.cs b/src/com.telstra.messaging/Client/GlobalConfiguration.cs deleted file mode 100644 index 3bf4f74..0000000 --- a/src/com.telstra.messaging/Client/GlobalConfiguration.cs +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - - -using System; -using System.Reflection; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; - -namespace com.telstra.messaging.Client -{ - /// - /// provides a compile-time extension point for globally configuring - /// API Clients. - /// - /// - /// A customized implementation via partial class may reside in another file and may - /// be excluded from automatic generation via a .swagger-codegen-ignore file. - /// - public partial class GlobalConfiguration : Configuration - { - - } -} \ No newline at end of file diff --git a/src/com.telstra.messaging/Client/SwaggerDateConverter.cs b/src/com.telstra.messaging/Client/SwaggerDateConverter.cs deleted file mode 100644 index fdf13f9..0000000 --- a/src/com.telstra.messaging/Client/SwaggerDateConverter.cs +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using Newtonsoft.Json.Converters; - -namespace com.telstra.messaging.Client -{ - /// - /// Formatter for 'date' swagger formats ss defined by full-date - RFC3339 - /// see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types - /// - public class SwaggerDateConverter : IsoDateTimeConverter - { - /// - /// Initializes a new instance of the class. - /// - public SwaggerDateConverter() - { - // full-date = date-fullyear "-" date-month "-" date-mday - DateTimeFormat = "yyyy-MM-dd"; - } - } -} diff --git a/src/com.telstra.messaging/Model/AuthgeneratetokenpostResponse.cs b/src/com.telstra.messaging/Model/AuthgeneratetokenpostResponse.cs deleted file mode 100644 index d91e542..0000000 --- a/src/com.telstra.messaging/Model/AuthgeneratetokenpostResponse.cs +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Linq; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; - -namespace com.telstra.messaging.Model -{ - /// - /// AuthgeneratetokenpostResponse - /// - [DataContract] - public partial class AuthgeneratetokenpostResponse : IEquatable, IValidatableObject - { - /// - /// Initializes a new instance of the class. - /// - /// AccessToken. - /// ExpiresIn. - /// RefreshToken. - /// TokenType. - public AuthgeneratetokenpostResponse(string AccessToken = default(string), int? ExpiresIn = default(int?), string RefreshToken = default(string), string TokenType = default(string)) - { - this.AccessToken = AccessToken; - this.ExpiresIn = ExpiresIn; - this.RefreshToken = RefreshToken; - this.TokenType = TokenType; - } - - /// - /// Gets or Sets AccessToken - /// - [DataMember(Name="access_token", EmitDefaultValue=false)] - public string AccessToken { get; set; } - - /// - /// Gets or Sets ExpiresIn - /// - [DataMember(Name="expires_in", EmitDefaultValue=false)] - public int? ExpiresIn { get; set; } - - /// - /// Gets or Sets RefreshToken - /// - [DataMember(Name="refresh_token", EmitDefaultValue=false)] - public string RefreshToken { get; set; } - - /// - /// Gets or Sets TokenType - /// - [DataMember(Name="token_type", EmitDefaultValue=false)] - public string TokenType { get; set; } - - /// - /// Returns the string presentation of the object - /// - /// String presentation of the object - public override string ToString() - { - var sb = new StringBuilder(); - sb.Append("class AuthgeneratetokenpostResponse {\n"); - sb.Append(" AccessToken: ").Append(AccessToken).Append("\n"); - sb.Append(" ExpiresIn: ").Append(ExpiresIn).Append("\n"); - sb.Append(" RefreshToken: ").Append(RefreshToken).Append("\n"); - sb.Append(" TokenType: ").Append(TokenType).Append("\n"); - sb.Append("}\n"); - return sb.ToString(); - } - - /// - /// Returns the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() - { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - - /// - /// Returns true if objects are equal - /// - /// Object to be compared - /// Boolean - public override bool Equals(object input) - { - return this.Equals(input as AuthgeneratetokenpostResponse); - } - - /// - /// Returns true if AuthgeneratetokenpostResponse instances are equal - /// - /// Instance of AuthgeneratetokenpostResponse to be compared - /// Boolean - public bool Equals(AuthgeneratetokenpostResponse input) - { - if (input == null) - return false; - - return - ( - this.AccessToken == input.AccessToken || - (this.AccessToken != null && - this.AccessToken.Equals(input.AccessToken)) - ) && - ( - this.ExpiresIn == input.ExpiresIn || - (this.ExpiresIn != null && - this.ExpiresIn.Equals(input.ExpiresIn)) - ) && - ( - this.RefreshToken == input.RefreshToken || - (this.RefreshToken != null && - this.RefreshToken.Equals(input.RefreshToken)) - ) && - ( - this.TokenType == input.TokenType || - (this.TokenType != null && - this.TokenType.Equals(input.TokenType)) - ); - } - - /// - /// Gets the hash code - /// - /// Hash code - public override int GetHashCode() - { - unchecked // Overflow is fine, just wrap - { - int hashCode = 41; - if (this.AccessToken != null) - hashCode = hashCode * 59 + this.AccessToken.GetHashCode(); - if (this.ExpiresIn != null) - hashCode = hashCode * 59 + this.ExpiresIn.GetHashCode(); - if (this.RefreshToken != null) - hashCode = hashCode * 59 + this.RefreshToken.GetHashCode(); - if (this.TokenType != null) - hashCode = hashCode * 59 + this.TokenType.GetHashCode(); - return hashCode; - } - } - - /// - /// To validate all properties of the instance - /// - /// Validation context - /// Validation Result - IEnumerable IValidatableObject.Validate(ValidationContext validationContext) - { - yield break; - } - } - -} diff --git a/src/com.telstra.messaging/Model/ErrorError.cs b/src/com.telstra.messaging/Model/ErrorError.cs deleted file mode 100644 index 96c0ec6..0000000 --- a/src/com.telstra.messaging/Model/ErrorError.cs +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Linq; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; - -namespace com.telstra.messaging.Model -{ - /// - /// ErrorError - /// - [DataContract] - public partial class ErrorError : IEquatable, IValidatableObject - { - /// - /// Initializes a new instance of the class. - /// - [JsonConstructorAttribute] - protected ErrorError() { } - /// - /// Initializes a new instance of the class. - /// - /// A short error code (required). - /// Message describing the error.. - public ErrorError(string Status = default(string), string Message = default(string)) - { - // to ensure "Status" is required (not null) - if (Status == null) - { - throw new InvalidDataException("Status is a required property for ErrorError and cannot be null"); - } - else - { - this.Status = Status; - } - this.Message = Message; - } - - /// - /// A short error code - /// - /// A short error code - [DataMember(Name="status", EmitDefaultValue=false)] - public string Status { get; set; } - - /// - /// Message describing the error. - /// - /// Message describing the error. - [DataMember(Name="message", EmitDefaultValue=false)] - public string Message { get; set; } - - /// - /// Returns the string presentation of the object - /// - /// String presentation of the object - public override string ToString() - { - var sb = new StringBuilder(); - sb.Append("class ErrorError {\n"); - sb.Append(" Status: ").Append(Status).Append("\n"); - sb.Append(" Message: ").Append(Message).Append("\n"); - sb.Append("}\n"); - return sb.ToString(); - } - - /// - /// Returns the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() - { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - - /// - /// Returns true if objects are equal - /// - /// Object to be compared - /// Boolean - public override bool Equals(object input) - { - return this.Equals(input as ErrorError); - } - - /// - /// Returns true if ErrorError instances are equal - /// - /// Instance of ErrorError to be compared - /// Boolean - public bool Equals(ErrorError input) - { - if (input == null) - return false; - - return - ( - this.Status == input.Status || - (this.Status != null && - this.Status.Equals(input.Status)) - ) && - ( - this.Message == input.Message || - (this.Message != null && - this.Message.Equals(input.Message)) - ); - } - - /// - /// Gets the hash code - /// - /// Hash code - public override int GetHashCode() - { - unchecked // Overflow is fine, just wrap - { - int hashCode = 41; - if (this.Status != null) - hashCode = hashCode * 59 + this.Status.GetHashCode(); - if (this.Message != null) - hashCode = hashCode * 59 + this.Message.GetHashCode(); - return hashCode; - } - } - - /// - /// To validate all properties of the instance - /// - /// Validation context - /// Validation Result - IEnumerable IValidatableObject.Validate(ValidationContext validationContext) - { - yield break; - } - } - -} diff --git a/src/com.telstra.messaging/Model/ErrorErrorError62.cs b/src/com.telstra.messaging/Model/ErrorErrorError62.cs deleted file mode 100644 index a26a2c1..0000000 --- a/src/com.telstra.messaging/Model/ErrorErrorError62.cs +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Linq; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; - -namespace com.telstra.messaging.Model -{ - /// - /// ErrorErrorError62 - /// - [DataContract] - public partial class ErrorErrorError62 : IEquatable, IValidatableObject - { - /// - /// Initializes a new instance of the class. - /// - [JsonConstructorAttribute] - protected ErrorErrorError62() { } - /// - /// Initializes a new instance of the class. - /// - /// A short error code (required). - /// Message describing the error.. - public ErrorErrorError62(string Status = default(string), string Message = default(string)) - { - // to ensure "Status" is required (not null) - if (Status == null) - { - throw new InvalidDataException("Status is a required property for ErrorErrorError62 and cannot be null"); - } - else - { - this.Status = Status; - } - this.Message = Message; - } - - /// - /// A short error code - /// - /// A short error code - [DataMember(Name="status", EmitDefaultValue=false)] - public string Status { get; set; } - - /// - /// Message describing the error. - /// - /// Message describing the error. - [DataMember(Name="message", EmitDefaultValue=false)] - public string Message { get; set; } - - /// - /// Returns the string presentation of the object - /// - /// String presentation of the object - public override string ToString() - { - var sb = new StringBuilder(); - sb.Append("class ErrorErrorError62 {\n"); - sb.Append(" Status: ").Append(Status).Append("\n"); - sb.Append(" Message: ").Append(Message).Append("\n"); - sb.Append("}\n"); - return sb.ToString(); - } - - /// - /// Returns the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() - { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - - /// - /// Returns true if objects are equal - /// - /// Object to be compared - /// Boolean - public override bool Equals(object input) - { - return this.Equals(input as ErrorErrorError62); - } - - /// - /// Returns true if ErrorErrorError62 instances are equal - /// - /// Instance of ErrorErrorError62 to be compared - /// Boolean - public bool Equals(ErrorErrorError62 input) - { - if (input == null) - return false; - - return - ( - this.Status == input.Status || - (this.Status != null && - this.Status.Equals(input.Status)) - ) && - ( - this.Message == input.Message || - (this.Message != null && - this.Message.Equals(input.Message)) - ); - } - - /// - /// Gets the hash code - /// - /// Hash code - public override int GetHashCode() - { - unchecked // Overflow is fine, just wrap - { - int hashCode = 41; - if (this.Status != null) - hashCode = hashCode * 59 + this.Status.GetHashCode(); - if (this.Message != null) - hashCode = hashCode * 59 + this.Message.GetHashCode(); - return hashCode; - } - } - - /// - /// To validate all properties of the instance - /// - /// Validation context - /// Validation Result - IEnumerable IValidatableObject.Validate(ValidationContext validationContext) - { - yield break; - } - } - -} diff --git a/src/com.telstra.messaging/Model/ErrorErrorErrorError.cs b/src/com.telstra.messaging/Model/ErrorErrorErrorError.cs deleted file mode 100644 index dcc9323..0000000 --- a/src/com.telstra.messaging/Model/ErrorErrorErrorError.cs +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Linq; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; - -namespace com.telstra.messaging.Model -{ - /// - /// Returns error status code and message - /// - [DataContract] - public partial class ErrorErrorErrorError : IEquatable, IValidatableObject - { - /// - /// Initializes a new instance of the class. - /// - /// The status code.. - /// Message describing the error.. - public ErrorErrorErrorError(int? Status = default(int?), string Message = default(string)) - { - this.Status = Status; - this.Message = Message; - } - - /// - /// The status code. - /// - /// The status code. - [DataMember(Name="status", EmitDefaultValue=false)] - public int? Status { get; set; } - - /// - /// Message describing the error. - /// - /// Message describing the error. - [DataMember(Name="message", EmitDefaultValue=false)] - public string Message { get; set; } - - /// - /// Returns the string presentation of the object - /// - /// String presentation of the object - public override string ToString() - { - var sb = new StringBuilder(); - sb.Append("class ErrorErrorErrorError {\n"); - sb.Append(" Status: ").Append(Status).Append("\n"); - sb.Append(" Message: ").Append(Message).Append("\n"); - sb.Append("}\n"); - return sb.ToString(); - } - - /// - /// Returns the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() - { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - - /// - /// Returns true if objects are equal - /// - /// Object to be compared - /// Boolean - public override bool Equals(object input) - { - return this.Equals(input as ErrorErrorErrorError); - } - - /// - /// Returns true if ErrorErrorErrorError instances are equal - /// - /// Instance of ErrorErrorErrorError to be compared - /// Boolean - public bool Equals(ErrorErrorErrorError input) - { - if (input == null) - return false; - - return - ( - this.Status == input.Status || - (this.Status != null && - this.Status.Equals(input.Status)) - ) && - ( - this.Message == input.Message || - (this.Message != null && - this.Message.Equals(input.Message)) - ); - } - - /// - /// Gets the hash code - /// - /// Hash code - public override int GetHashCode() - { - unchecked // Overflow is fine, just wrap - { - int hashCode = 41; - if (this.Status != null) - hashCode = hashCode * 59 + this.Status.GetHashCode(); - if (this.Message != null) - hashCode = hashCode * 59 + this.Message.GetHashCode(); - return hashCode; - } - } - - /// - /// To validate all properties of the instance - /// - /// Validation context - /// Validation Result - IEnumerable IValidatableObject.Validate(ValidationContext validationContext) - { - yield break; - } - } - -} diff --git a/src/com.telstra.messaging/Model/MessageSentResponse.cs b/src/com.telstra.messaging/Model/MessageSentResponse.cs deleted file mode 100644 index 13081fb..0000000 --- a/src/com.telstra.messaging/Model/MessageSentResponse.cs +++ /dev/null @@ -1,217 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Linq; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; - -namespace com.telstra.messaging.Model -{ - /// - /// MessageSentResponse - /// - [DataContract] - public partial class MessageSentResponse : IEquatable, IValidatableObject - { - /// - /// Initializes a new instance of the class. - /// - [JsonConstructorAttribute] - protected MessageSentResponse() { } - /// - /// Initializes a new instance of the class. - /// - /// Messages (required). - /// MessageType (required). - /// NumberSegments (required). - /// NumberNationalDestinations. - /// NumberInternationalDestinations. - public MessageSentResponse(List Messages = default(List), string MessageType = default(string), int? NumberSegments = default(int?), int? NumberNationalDestinations = default(int?), int? NumberInternationalDestinations = default(int?)) - { - // to ensure "Messages" is required (not null) - if (Messages == null) - { - throw new InvalidDataException("Messages is a required property for MessageSentResponse and cannot be null"); - } - else - { - this.Messages = Messages; - } - // to ensure "MessageType" is required (not null) - if (MessageType == null) - { - throw new InvalidDataException("MessageType is a required property for MessageSentResponse and cannot be null"); - } - else - { - this.MessageType = MessageType; - } - // to ensure "NumberSegments" is required (not null) - if (NumberSegments == null) - { - throw new InvalidDataException("NumberSegments is a required property for MessageSentResponse and cannot be null"); - } - else - { - this.NumberSegments = NumberSegments; - } - this.NumberNationalDestinations = NumberNationalDestinations; - this.NumberInternationalDestinations = NumberInternationalDestinations; - } - - /// - /// Gets or Sets Messages - /// - [DataMember(Name="messages", EmitDefaultValue=false)] - public List Messages { get; set; } - - /// - /// Gets or Sets MessageType - /// - [DataMember(Name="messageType", EmitDefaultValue=false)] - public string MessageType { get; set; } - - /// - /// Gets or Sets NumberSegments - /// - [DataMember(Name="numberSegments", EmitDefaultValue=false)] - public int? NumberSegments { get; set; } - - /// - /// Gets or Sets NumberNationalDestinations - /// - [DataMember(Name="NumberNationalDestinations", EmitDefaultValue=false)] - public int? NumberNationalDestinations { get; set; } - - /// - /// Gets or Sets NumberInternationalDestinations - /// - [DataMember(Name="NumberInternationalDestinations", EmitDefaultValue=false)] - public int? NumberInternationalDestinations { get; set; } - - /// - /// Returns the string presentation of the object - /// - /// String presentation of the object - public override string ToString() - { - var sb = new StringBuilder(); - sb.Append("class MessageSentResponse {\n"); - sb.Append(" Messages: ").Append(Messages).Append("\n"); - sb.Append(" MessageType: ").Append(MessageType).Append("\n"); - sb.Append(" NumberSegments: ").Append(NumberSegments).Append("\n"); - sb.Append(" NumberNationalDestinations: ").Append(NumberNationalDestinations).Append("\n"); - sb.Append(" NumberInternationalDestinations: ").Append(NumberInternationalDestinations).Append("\n"); - sb.Append("}\n"); - return sb.ToString(); - } - - /// - /// Returns the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() - { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - - /// - /// Returns true if objects are equal - /// - /// Object to be compared - /// Boolean - public override bool Equals(object input) - { - return this.Equals(input as MessageSentResponse); - } - - /// - /// Returns true if MessageSentResponse instances are equal - /// - /// Instance of MessageSentResponse to be compared - /// Boolean - public bool Equals(MessageSentResponse input) - { - if (input == null) - return false; - - return - ( - this.Messages == input.Messages || - this.Messages != null && - this.Messages.SequenceEqual(input.Messages) - ) && - ( - this.MessageType == input.MessageType || - (this.MessageType != null && - this.MessageType.Equals(input.MessageType)) - ) && - ( - this.NumberSegments == input.NumberSegments || - (this.NumberSegments != null && - this.NumberSegments.Equals(input.NumberSegments)) - ) && - ( - this.NumberNationalDestinations == input.NumberNationalDestinations || - (this.NumberNationalDestinations != null && - this.NumberNationalDestinations.Equals(input.NumberNationalDestinations)) - ) && - ( - this.NumberInternationalDestinations == input.NumberInternationalDestinations || - (this.NumberInternationalDestinations != null && - this.NumberInternationalDestinations.Equals(input.NumberInternationalDestinations)) - ); - } - - /// - /// Gets the hash code - /// - /// Hash code - public override int GetHashCode() - { - unchecked // Overflow is fine, just wrap - { - int hashCode = 41; - if (this.Messages != null) - hashCode = hashCode * 59 + this.Messages.GetHashCode(); - if (this.MessageType != null) - hashCode = hashCode * 59 + this.MessageType.GetHashCode(); - if (this.NumberSegments != null) - hashCode = hashCode * 59 + this.NumberSegments.GetHashCode(); - if (this.NumberNationalDestinations != null) - hashCode = hashCode * 59 + this.NumberNationalDestinations.GetHashCode(); - if (this.NumberInternationalDestinations != null) - hashCode = hashCode * 59 + this.NumberInternationalDestinations.GetHashCode(); - return hashCode; - } - } - - /// - /// To validate all properties of the instance - /// - /// Validation context - /// Validation Result - IEnumerable IValidatableObject.Validate(ValidationContext validationContext) - { - yield break; - } - } - -} diff --git a/src/com.telstra.messaging/Model/MessageType.cs b/src/com.telstra.messaging/Model/MessageType.cs deleted file mode 100644 index 8ebc062..0000000 --- a/src/com.telstra.messaging/Model/MessageType.cs +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Linq; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; - -namespace com.telstra.messaging.Model -{ - /// - /// Defines MessageType - /// - - [JsonConverter(typeof(StringEnumConverter))] - - public enum MessageType - { - - /// - /// Enum SMS for value: SMS - /// - [EnumMember(Value = "SMS")] - SMS = 1, - - /// - /// Enum MMS for value: MMS - /// - [EnumMember(Value = "MMS")] - MMS = 2, - - /// - /// Enum RCS for value: RCS - /// - [EnumMember(Value = "RCS")] - RCS = 3 - } - -} diff --git a/src/com.telstra.messaging/Model/OAuthRequest.cs b/src/com.telstra.messaging/Model/OAuthRequest.cs deleted file mode 100644 index 4d4f736..0000000 --- a/src/com.telstra.messaging/Model/OAuthRequest.cs +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Linq; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; - -namespace com.telstra.messaging.Model -{ - /// - /// OAuthRequest - /// - [DataContract] - public partial class OAuthRequest : IEquatable, IValidatableObject - { - /// - /// Initializes a new instance of the class. - /// - [JsonConstructorAttribute] - protected OAuthRequest() { } - /// - /// Initializes a new instance of the class. - /// - /// Client id (required). - /// Client secret (required). - /// OAuth grant type (required). - /// OAuth scope (required). - public OAuthRequest(string ClientId = default(string), string ClientSecret = default(string), string GrantType = default(string), string Scopes = default(string)) - { - // to ensure "ClientId" is required (not null) - if (ClientId == null) - { - throw new InvalidDataException("ClientId is a required property for OAuthRequest and cannot be null"); - } - else - { - this.ClientId = ClientId; - } - // to ensure "ClientSecret" is required (not null) - if (ClientSecret == null) - { - throw new InvalidDataException("ClientSecret is a required property for OAuthRequest and cannot be null"); - } - else - { - this.ClientSecret = ClientSecret; - } - // to ensure "GrantType" is required (not null) - if (GrantType == null) - { - throw new InvalidDataException("GrantType is a required property for OAuthRequest and cannot be null"); - } - else - { - this.GrantType = GrantType; - } - // to ensure "Scopes" is required (not null) - if (Scopes == null) - { - throw new InvalidDataException("Scopes is a required property for OAuthRequest and cannot be null"); - } - else - { - this.Scopes = Scopes; - } - } - - /// - /// Client id - /// - /// Client id - [DataMember(Name="client_id", EmitDefaultValue=false)] - public string ClientId { get; set; } - - /// - /// Client secret - /// - /// Client secret - [DataMember(Name="client_secret", EmitDefaultValue=false)] - public string ClientSecret { get; set; } - - /// - /// OAuth grant type - /// - /// OAuth grant type - [DataMember(Name="grant_type", EmitDefaultValue=false)] - public string GrantType { get; set; } - - /// - /// OAuth scope - /// - /// OAuth scope - [DataMember(Name="scopes", EmitDefaultValue=false)] - public string Scopes { get; set; } - - /// - /// Returns the string presentation of the object - /// - /// String presentation of the object - public override string ToString() - { - var sb = new StringBuilder(); - sb.Append("class OAuthRequest {\n"); - sb.Append(" ClientId: ").Append(ClientId).Append("\n"); - sb.Append(" ClientSecret: ").Append(ClientSecret).Append("\n"); - sb.Append(" GrantType: ").Append(GrantType).Append("\n"); - sb.Append(" Scopes: ").Append(Scopes).Append("\n"); - sb.Append("}\n"); - return sb.ToString(); - } - - /// - /// Returns the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() - { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - - /// - /// Returns true if objects are equal - /// - /// Object to be compared - /// Boolean - public override bool Equals(object input) - { - return this.Equals(input as OAuthRequest); - } - - /// - /// Returns true if OAuthRequest instances are equal - /// - /// Instance of OAuthRequest to be compared - /// Boolean - public bool Equals(OAuthRequest input) - { - if (input == null) - return false; - - return - ( - this.ClientId == input.ClientId || - (this.ClientId != null && - this.ClientId.Equals(input.ClientId)) - ) && - ( - this.ClientSecret == input.ClientSecret || - (this.ClientSecret != null && - this.ClientSecret.Equals(input.ClientSecret)) - ) && - ( - this.GrantType == input.GrantType || - (this.GrantType != null && - this.GrantType.Equals(input.GrantType)) - ) && - ( - this.Scopes == input.Scopes || - (this.Scopes != null && - this.Scopes.Equals(input.Scopes)) - ); - } - - /// - /// Gets the hash code - /// - /// Hash code - public override int GetHashCode() - { - unchecked // Overflow is fine, just wrap - { - int hashCode = 41; - if (this.ClientId != null) - hashCode = hashCode * 59 + this.ClientId.GetHashCode(); - if (this.ClientSecret != null) - hashCode = hashCode * 59 + this.ClientSecret.GetHashCode(); - if (this.GrantType != null) - hashCode = hashCode * 59 + this.GrantType.GetHashCode(); - if (this.Scopes != null) - hashCode = hashCode * 59 + this.Scopes.GetHashCode(); - return hashCode; - } - } - - /// - /// To validate all properties of the instance - /// - /// Validation context - /// Validation Result - IEnumerable IValidatableObject.Validate(ValidationContext validationContext) - { - yield break; - } - } - -} diff --git a/src/com.telstra.messaging/Model/OutboundPollResponseInner.cs b/src/com.telstra.messaging/Model/OutboundPollResponseInner.cs deleted file mode 100644 index b57789d..0000000 --- a/src/com.telstra.messaging/Model/OutboundPollResponseInner.cs +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Linq; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; - -namespace com.telstra.messaging.Model -{ - /// - /// OutboundPollResponseInner - /// - [DataContract] - public partial class OutboundPollResponseInner : IEquatable, IValidatableObject - { - /// - /// Gets or Sets DeliveryStatus - /// - [DataMember(Name="deliveryStatus", EmitDefaultValue=false)] - public Status? DeliveryStatus { get; set; } - /// - /// Initializes a new instance of the class. - /// - /// The phone number (recipient) the message was sent to (in E.164 format).. - /// The date and time when the message was recieved by recipient.. - /// The date and time when the message was sent.. - /// DeliveryStatus. - public OutboundPollResponseInner(string To = default(string), string ReceivedTimestamp = default(string), string SentTimestamp = default(string), Status? DeliveryStatus = default(Status?)) - { - this.To = To; - this.ReceivedTimestamp = ReceivedTimestamp; - this.SentTimestamp = SentTimestamp; - this.DeliveryStatus = DeliveryStatus; - } - - /// - /// The phone number (recipient) the message was sent to (in E.164 format). - /// - /// The phone number (recipient) the message was sent to (in E.164 format). - [DataMember(Name="to", EmitDefaultValue=false)] - public string To { get; set; } - - /// - /// The date and time when the message was recieved by recipient. - /// - /// The date and time when the message was recieved by recipient. - [DataMember(Name="receivedTimestamp", EmitDefaultValue=false)] - public string ReceivedTimestamp { get; set; } - - /// - /// The date and time when the message was sent. - /// - /// The date and time when the message was sent. - [DataMember(Name="sentTimestamp", EmitDefaultValue=false)] - public string SentTimestamp { get; set; } - - - /// - /// Returns the string presentation of the object - /// - /// String presentation of the object - public override string ToString() - { - var sb = new StringBuilder(); - sb.Append("class OutboundPollResponseInner {\n"); - sb.Append(" To: ").Append(To).Append("\n"); - sb.Append(" ReceivedTimestamp: ").Append(ReceivedTimestamp).Append("\n"); - sb.Append(" SentTimestamp: ").Append(SentTimestamp).Append("\n"); - sb.Append(" DeliveryStatus: ").Append(DeliveryStatus).Append("\n"); - sb.Append("}\n"); - return sb.ToString(); - } - - /// - /// Returns the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() - { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - - /// - /// Returns true if objects are equal - /// - /// Object to be compared - /// Boolean - public override bool Equals(object input) - { - return this.Equals(input as OutboundPollResponseInner); - } - - /// - /// Returns true if OutboundPollResponseInner instances are equal - /// - /// Instance of OutboundPollResponseInner to be compared - /// Boolean - public bool Equals(OutboundPollResponseInner input) - { - if (input == null) - return false; - - return - ( - this.To == input.To || - (this.To != null && - this.To.Equals(input.To)) - ) && - ( - this.ReceivedTimestamp == input.ReceivedTimestamp || - (this.ReceivedTimestamp != null && - this.ReceivedTimestamp.Equals(input.ReceivedTimestamp)) - ) && - ( - this.SentTimestamp == input.SentTimestamp || - (this.SentTimestamp != null && - this.SentTimestamp.Equals(input.SentTimestamp)) - ) && - ( - this.DeliveryStatus == input.DeliveryStatus || - (this.DeliveryStatus != null && - this.DeliveryStatus.Equals(input.DeliveryStatus)) - ); - } - - /// - /// Gets the hash code - /// - /// Hash code - public override int GetHashCode() - { - unchecked // Overflow is fine, just wrap - { - int hashCode = 41; - if (this.To != null) - hashCode = hashCode * 59 + this.To.GetHashCode(); - if (this.ReceivedTimestamp != null) - hashCode = hashCode * 59 + this.ReceivedTimestamp.GetHashCode(); - if (this.SentTimestamp != null) - hashCode = hashCode * 59 + this.SentTimestamp.GetHashCode(); - if (this.DeliveryStatus != null) - hashCode = hashCode * 59 + this.DeliveryStatus.GetHashCode(); - return hashCode; - } - } - - /// - /// To validate all properties of the instance - /// - /// Validation context - /// Validation Result - IEnumerable IValidatableObject.Validate(ValidationContext validationContext) - { - yield break; - } - } - -} diff --git a/src/com.telstra.messaging/Model/SendMmsRequest.cs b/src/com.telstra.messaging/Model/SendMmsRequest.cs deleted file mode 100644 index 65cd031..0000000 --- a/src/com.telstra.messaging/Model/SendMmsRequest.cs +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Linq; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; - -namespace com.telstra.messaging.Model -{ - /// - /// SendMmsRequest - /// - [DataContract] - public partial class SendMmsRequest : IEquatable, IValidatableObject - { - /// - /// Initializes a new instance of the class. - /// - [JsonConstructorAttribute] - protected SendMmsRequest() { } - /// - /// Initializes a new instance of the class. - /// - /// This will be the source address that will be displayed on the receiving device. If it is not present then it will default to the MSISDN assigned to the app. If replyRequest is set to true, then this field will be ignored. (required). - /// This is the destination address. (required). - /// The subject that will be used in an MMS message. (required). - /// If set to true, the reply message functionality will be implemented and the to address will be ignored if present. (required). - /// An Array of content that will be sent in an MMS message. If this array is present it will cause the “body” element to be ignored, and the message will be sent as an MMS. (required). - public SendMmsRequest(string From = default(string), string To = default(string), string Subject = default(string), bool? ReplyRequest = default(bool?), List MMSContent = default(List)) - { - // to ensure "From" is required (not null) - if (From == null) - { - throw new InvalidDataException("From is a required property for SendMmsRequest and cannot be null"); - } - else - { - this.From = From; - } - // to ensure "To" is required (not null) - if (To == null) - { - throw new InvalidDataException("To is a required property for SendMmsRequest and cannot be null"); - } - else - { - this.To = To; - } - // to ensure "Subject" is required (not null) - if (Subject == null) - { - throw new InvalidDataException("Subject is a required property for SendMmsRequest and cannot be null"); - } - else - { - this.Subject = Subject; - } - // to ensure "ReplyRequest" is required (not null) - if (ReplyRequest == null) - { - throw new InvalidDataException("ReplyRequest is a required property for SendMmsRequest and cannot be null"); - } - else - { - this.ReplyRequest = ReplyRequest; - } - // to ensure "MMSContent" is required (not null) - if (MMSContent == null) - { - throw new InvalidDataException("MMSContent is a required property for SendMmsRequest and cannot be null"); - } - else - { - this.MMSContent = MMSContent; - } - } - - /// - /// This will be the source address that will be displayed on the receiving device. If it is not present then it will default to the MSISDN assigned to the app. If replyRequest is set to true, then this field will be ignored. - /// - /// This will be the source address that will be displayed on the receiving device. If it is not present then it will default to the MSISDN assigned to the app. If replyRequest is set to true, then this field will be ignored. - [DataMember(Name="from", EmitDefaultValue=false)] - public string From { get; set; } - - /// - /// This is the destination address. - /// - /// This is the destination address. - [DataMember(Name="to", EmitDefaultValue=false)] - public string To { get; set; } - - /// - /// The subject that will be used in an MMS message. - /// - /// The subject that will be used in an MMS message. - [DataMember(Name="subject", EmitDefaultValue=false)] - public string Subject { get; set; } - - /// - /// If set to true, the reply message functionality will be implemented and the to address will be ignored if present. - /// - /// If set to true, the reply message functionality will be implemented and the to address will be ignored if present. - [DataMember(Name="replyRequest", EmitDefaultValue=false)] - public bool? ReplyRequest { get; set; } - - /// - /// An Array of content that will be sent in an MMS message. If this array is present it will cause the “body” element to be ignored, and the message will be sent as an MMS. - /// - /// An Array of content that will be sent in an MMS message. If this array is present it will cause the “body” element to be ignored, and the message will be sent as an MMS. - [DataMember(Name="MMSContent", EmitDefaultValue=false)] - public List MMSContent { get; set; } - - /// - /// Returns the string presentation of the object - /// - /// String presentation of the object - public override string ToString() - { - var sb = new StringBuilder(); - sb.Append("class SendMmsRequest {\n"); - sb.Append(" From: ").Append(From).Append("\n"); - sb.Append(" To: ").Append(To).Append("\n"); - sb.Append(" Subject: ").Append(Subject).Append("\n"); - sb.Append(" ReplyRequest: ").Append(ReplyRequest).Append("\n"); - sb.Append(" MMSContent: ").Append(MMSContent).Append("\n"); - sb.Append("}\n"); - return sb.ToString(); - } - - /// - /// Returns the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() - { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - - /// - /// Returns true if objects are equal - /// - /// Object to be compared - /// Boolean - public override bool Equals(object input) - { - return this.Equals(input as SendMmsRequest); - } - - /// - /// Returns true if SendMmsRequest instances are equal - /// - /// Instance of SendMmsRequest to be compared - /// Boolean - public bool Equals(SendMmsRequest input) - { - if (input == null) - return false; - - return - ( - this.From == input.From || - (this.From != null && - this.From.Equals(input.From)) - ) && - ( - this.To == input.To || - (this.To != null && - this.To.Equals(input.To)) - ) && - ( - this.Subject == input.Subject || - (this.Subject != null && - this.Subject.Equals(input.Subject)) - ) && - ( - this.ReplyRequest == input.ReplyRequest || - (this.ReplyRequest != null && - this.ReplyRequest.Equals(input.ReplyRequest)) - ) && - ( - this.MMSContent == input.MMSContent || - this.MMSContent != null && - this.MMSContent.SequenceEqual(input.MMSContent) - ); - } - - /// - /// Gets the hash code - /// - /// Hash code - public override int GetHashCode() - { - unchecked // Overflow is fine, just wrap - { - int hashCode = 41; - if (this.From != null) - hashCode = hashCode * 59 + this.From.GetHashCode(); - if (this.To != null) - hashCode = hashCode * 59 + this.To.GetHashCode(); - if (this.Subject != null) - hashCode = hashCode * 59 + this.Subject.GetHashCode(); - if (this.ReplyRequest != null) - hashCode = hashCode * 59 + this.ReplyRequest.GetHashCode(); - if (this.MMSContent != null) - hashCode = hashCode * 59 + this.MMSContent.GetHashCode(); - return hashCode; - } - } - - /// - /// To validate all properties of the instance - /// - /// Validation context - /// Validation Result - IEnumerable IValidatableObject.Validate(ValidationContext validationContext) - { - yield break; - } - } - -} diff --git a/src/com.telstra.messaging/Model/SendMmsRequestMMSContent.cs b/src/com.telstra.messaging/Model/SendMmsRequestMMSContent.cs deleted file mode 100644 index 5a6c101..0000000 --- a/src/com.telstra.messaging/Model/SendMmsRequestMMSContent.cs +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Linq; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; - -namespace com.telstra.messaging.Model -{ - /// - /// SendMmsRequestMMSContent - /// - [DataContract] - public partial class SendMmsRequestMMSContent : IEquatable, IValidatableObject - { - /// - /// Initializes a new instance of the class. - /// - [JsonConstructorAttribute] - protected SendMmsRequestMMSContent() { } - /// - /// Initializes a new instance of the class. - /// - /// The following types are supported audio/amr audio/aac audio/mp3 audio/mpeg3 audio/mpeg audio/mpg audio/wav audio/3gpp audio/mp4 image/gif image/jpeg image/jpg image/png image/bmp video/mpeg4 video/mp4 video/mpeg video/3gpp video/3gp video/h263 text/plain text/x-vCard text/x-vCalendar (required). - /// The file name to be associated with the content. Some devices will display this file name with a placeholder for the content. (required). - /// Payload (required). - public SendMmsRequestMMSContent(string Type = default(string), string Filename = default(string), string Payload = default(string)) - { - // to ensure "Type" is required (not null) - if (Type == null) - { - throw new InvalidDataException("Type is a required property for SendMmsRequestMMSContent and cannot be null"); - } - else - { - this.Type = Type; - } - // to ensure "Filename" is required (not null) - if (Filename == null) - { - throw new InvalidDataException("Filename is a required property for SendMmsRequestMMSContent and cannot be null"); - } - else - { - this.Filename = Filename; - } - // to ensure "Payload" is required (not null) - if (Payload == null) - { - throw new InvalidDataException("Payload is a required property for SendMmsRequestMMSContent and cannot be null"); - } - else - { - this.Payload = Payload; - } - } - - /// - /// The following types are supported audio/amr audio/aac audio/mp3 audio/mpeg3 audio/mpeg audio/mpg audio/wav audio/3gpp audio/mp4 image/gif image/jpeg image/jpg image/png image/bmp video/mpeg4 video/mp4 video/mpeg video/3gpp video/3gp video/h263 text/plain text/x-vCard text/x-vCalendar - /// - /// The following types are supported audio/amr audio/aac audio/mp3 audio/mpeg3 audio/mpeg audio/mpg audio/wav audio/3gpp audio/mp4 image/gif image/jpeg image/jpg image/png image/bmp video/mpeg4 video/mp4 video/mpeg video/3gpp video/3gp video/h263 text/plain text/x-vCard text/x-vCalendar - [DataMember(Name="type", EmitDefaultValue=false)] - public string Type { get; set; } - - /// - /// The file name to be associated with the content. Some devices will display this file name with a placeholder for the content. - /// - /// The file name to be associated with the content. Some devices will display this file name with a placeholder for the content. - [DataMember(Name="filename", EmitDefaultValue=false)] - public string Filename { get; set; } - - /// - /// Gets or Sets Payload - /// - [DataMember(Name="payload", EmitDefaultValue=false)] - public string Payload { get; set; } - - /// - /// Returns the string presentation of the object - /// - /// String presentation of the object - public override string ToString() - { - var sb = new StringBuilder(); - sb.Append("class SendMmsRequestMMSContent {\n"); - sb.Append(" Type: ").Append(Type).Append("\n"); - sb.Append(" Filename: ").Append(Filename).Append("\n"); - sb.Append(" Payload: ").Append(Payload).Append("\n"); - sb.Append("}\n"); - return sb.ToString(); - } - - /// - /// Returns the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() - { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - - /// - /// Returns true if objects are equal - /// - /// Object to be compared - /// Boolean - public override bool Equals(object input) - { - return this.Equals(input as SendMmsRequestMMSContent); - } - - /// - /// Returns true if SendMmsRequestMMSContent instances are equal - /// - /// Instance of SendMmsRequestMMSContent to be compared - /// Boolean - public bool Equals(SendMmsRequestMMSContent input) - { - if (input == null) - return false; - - return - ( - this.Type == input.Type || - (this.Type != null && - this.Type.Equals(input.Type)) - ) && - ( - this.Filename == input.Filename || - (this.Filename != null && - this.Filename.Equals(input.Filename)) - ) && - ( - this.Payload == input.Payload || - (this.Payload != null && - this.Payload.Equals(input.Payload)) - ); - } - - /// - /// Gets the hash code - /// - /// Hash code - public override int GetHashCode() - { - unchecked // Overflow is fine, just wrap - { - int hashCode = 41; - if (this.Type != null) - hashCode = hashCode * 59 + this.Type.GetHashCode(); - if (this.Filename != null) - hashCode = hashCode * 59 + this.Filename.GetHashCode(); - if (this.Payload != null) - hashCode = hashCode * 59 + this.Payload.GetHashCode(); - return hashCode; - } - } - - /// - /// To validate all properties of the instance - /// - /// Validation context - /// Validation Result - IEnumerable IValidatableObject.Validate(ValidationContext validationContext) - { - yield break; - } - } - -} diff --git a/src/com.telstra.messaging/Model/SendSMSRequest.cs b/src/com.telstra.messaging/Model/SendSMSRequest.cs deleted file mode 100644 index af6ef87..0000000 --- a/src/com.telstra.messaging/Model/SendSMSRequest.cs +++ /dev/null @@ -1,248 +0,0 @@ -/* - * Telstra Messaging API - * - * The Telstra SMS Messaging API allows your applications to send and receive SMS text messages from Australia's leading network operator. It also allows your application to track the delivery status of both sent and received SMS messages. - * - * OpenAPI spec version: 2.2.4 - * - * Generated by: https://github.com/swagger-api/swagger-codegen.git - */ - -using System; -using System.Linq; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using System.Collections; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Runtime.Serialization; -using Newtonsoft.Json; -using Newtonsoft.Json.Converters; -using System.ComponentModel.DataAnnotations; -using SwaggerDateConverter = com.telstra.messaging.Client.SwaggerDateConverter; - -namespace com.telstra.messaging.Model -{ - /// - /// SendSMSRequest - /// - [DataContract] - public partial class SendSMSRequest : IEquatable, IValidatableObject - { - /// - /// Initializes a new instance of the class. - /// - [JsonConstructorAttribute] - protected SendSMSRequest() { } - /// - /// Initializes a new instance of the class. - /// - /// Phone number (in E.164 format) to send the SMS to. This number can be in international format if preceeded by a ‘+’, or in national format. (required). - /// The text body of the message. Messages longer than 160 characters will be counted as multiple messages. (required). - /// Phone number (in E.164 format) the SMS was sent from. If not present, the serverice will use the mobile number associated with the application, or it be an Alphanumeric address of up to 11 characters.. - /// How long the platform should attempt to deliver the message for. This period is specified in minutes from the message. - /// How long the platform should wait before attempting to send the message - specified in minutes.. - /// Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc.. - /// If set to true, the reply message functionality will be implemented and the to address will be ignored if present. If false or not present, then normal message handling is implemented.. - public SendSMSRequest(string To = default(string), string Body = default(string), string From = default(string), int? Validity = default(int?), int? ScheduledDelivery = default(int?), string NotifyURL = default(string), bool? ReplyRequest = default(bool?)) - { - // to ensure "To" is required (not null) - if (To == null) - { - throw new InvalidDataException("To is a required property for SendSMSRequest and cannot be null"); - } - else - { - this.To = To; - } - // to ensure "Body" is required (not null) - if (Body == null) - { - throw new InvalidDataException("Body is a required property for SendSMSRequest and cannot be null"); - } - else - { - this.Body = Body; - } - this.From = From; - this.Validity = Validity; - this.ScheduledDelivery = ScheduledDelivery; - this.NotifyURL = NotifyURL; - this.ReplyRequest = ReplyRequest; - } - - /// - /// Phone number (in E.164 format) to send the SMS to. This number can be in international format if preceeded by a ‘+’, or in national format. - /// - /// Phone number (in E.164 format) to send the SMS to. This number can be in international format if preceeded by a ‘+’, or in national format. - [DataMember(Name="to", EmitDefaultValue=false)] - public string To { get; set; } - - /// - /// The text body of the message. Messages longer than 160 characters will be counted as multiple messages. - /// - /// The text body of the message. Messages longer than 160 characters will be counted as multiple messages. - [DataMember(Name="body", EmitDefaultValue=false)] - public string Body { get; set; } - - /// - /// Phone number (in E.164 format) the SMS was sent from. If not present, the serverice will use the mobile number associated with the application, or it be an Alphanumeric address of up to 11 characters. - /// - /// Phone number (in E.164 format) the SMS was sent from. If not present, the serverice will use the mobile number associated with the application, or it be an Alphanumeric address of up to 11 characters. - [DataMember(Name="from", EmitDefaultValue=false)] - public string From { get; set; } - - /// - /// How long the platform should attempt to deliver the message for. This period is specified in minutes from the message - /// - /// How long the platform should attempt to deliver the message for. This period is specified in minutes from the message - [DataMember(Name="validity", EmitDefaultValue=false)] - public int? Validity { get; set; } - - /// - /// How long the platform should wait before attempting to send the message - specified in minutes. - /// - /// How long the platform should wait before attempting to send the message - specified in minutes. - [DataMember(Name="scheduledDelivery", EmitDefaultValue=false)] - public int? ScheduledDelivery { get; set; } - - /// - /// Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. - /// - /// Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. - [DataMember(Name="notifyURL", EmitDefaultValue=false)] - public string NotifyURL { get; set; } - - /// - /// If set to true, the reply message functionality will be implemented and the to address will be ignored if present. If false or not present, then normal message handling is implemented. - /// - /// If set to true, the reply message functionality will be implemented and the to address will be ignored if present. If false or not present, then normal message handling is implemented. - [DataMember(Name="replyRequest", EmitDefaultValue=false)] - public bool? ReplyRequest { get; set; } - - /// - /// Returns the string presentation of the object - /// - /// String presentation of the object - public override string ToString() - { - var sb = new StringBuilder(); - sb.Append("class SendSMSRequest {\n"); - sb.Append(" To: ").Append(To).Append("\n"); - sb.Append(" Body: ").Append(Body).Append("\n"); - sb.Append(" From: ").Append(From).Append("\n"); - sb.Append(" Validity: ").Append(Validity).Append("\n"); - sb.Append(" ScheduledDelivery: ").Append(ScheduledDelivery).Append("\n"); - sb.Append(" NotifyURL: ").Append(NotifyURL).Append("\n"); - sb.Append(" ReplyRequest: ").Append(ReplyRequest).Append("\n"); - sb.Append("}\n"); - return sb.ToString(); - } - - /// - /// Returns the JSON string presentation of the object - /// - /// JSON string presentation of the object - public string ToJson() - { - return JsonConvert.SerializeObject(this, Formatting.Indented); - } - - /// - /// Returns true if objects are equal - /// - /// Object to be compared - /// Boolean - public override bool Equals(object input) - { - return this.Equals(input as SendSMSRequest); - } - - /// - /// Returns true if SendSMSRequest instances are equal - /// - /// Instance of SendSMSRequest to be compared - /// Boolean - public bool Equals(SendSMSRequest input) - { - if (input == null) - return false; - - return - ( - this.To == input.To || - (this.To != null && - this.To.Equals(input.To)) - ) && - ( - this.Body == input.Body || - (this.Body != null && - this.Body.Equals(input.Body)) - ) && - ( - this.From == input.From || - (this.From != null && - this.From.Equals(input.From)) - ) && - ( - this.Validity == input.Validity || - (this.Validity != null && - this.Validity.Equals(input.Validity)) - ) && - ( - this.ScheduledDelivery == input.ScheduledDelivery || - (this.ScheduledDelivery != null && - this.ScheduledDelivery.Equals(input.ScheduledDelivery)) - ) && - ( - this.NotifyURL == input.NotifyURL || - (this.NotifyURL != null && - this.NotifyURL.Equals(input.NotifyURL)) - ) && - ( - this.ReplyRequest == input.ReplyRequest || - (this.ReplyRequest != null && - this.ReplyRequest.Equals(input.ReplyRequest)) - ); - } - - /// - /// Gets the hash code - /// - /// Hash code - public override int GetHashCode() - { - unchecked // Overflow is fine, just wrap - { - int hashCode = 41; - if (this.To != null) - hashCode = hashCode * 59 + this.To.GetHashCode(); - if (this.Body != null) - hashCode = hashCode * 59 + this.Body.GetHashCode(); - if (this.From != null) - hashCode = hashCode * 59 + this.From.GetHashCode(); - if (this.Validity != null) - hashCode = hashCode * 59 + this.Validity.GetHashCode(); - if (this.ScheduledDelivery != null) - hashCode = hashCode * 59 + this.ScheduledDelivery.GetHashCode(); - if (this.NotifyURL != null) - hashCode = hashCode * 59 + this.NotifyURL.GetHashCode(); - if (this.ReplyRequest != null) - hashCode = hashCode * 59 + this.ReplyRequest.GetHashCode(); - return hashCode; - } - } - - /// - /// To validate all properties of the instance - /// - /// Validation context - /// Validation Result - IEnumerable IValidatableObject.Validate(ValidationContext validationContext) - { - yield break; - } - } - -} diff --git a/src/com.telstra.messaging/com.telstra.messaging.csproj b/src/com.telstra.messaging/com.telstra.messaging.csproj deleted file mode 100644 index d463ee4..0000000 --- a/src/com.telstra.messaging/com.telstra.messaging.csproj +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - Debug - AnyCPU - {C0869B26-6FED-45CB-88E0-8AD7E6B96330} - Library - Properties - com.telstra.messaging - com.telstra.messaging - v4.5 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - $(SolutionDir)\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - ..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - ..\..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - ..\..\vendor\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll - - - $(SolutionDir)\packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll - ..\packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll - ..\..\packages\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll - ..\..\vendor\JsonSubTypes.1.2.0\lib\net45\JsonSubTypes.dll - - - $(SolutionDir)\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll - ..\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll - ..\..\packages\RestSharp.105.1.0\lib\net45\RestSharp.dll - ..\..\vendor\RestSharp.105.1.0\lib\net45\RestSharp.dll - - - - - - - - - - - diff --git a/src/com.telstra.messaging/com.telstra.messaging.nuspec b/src/com.telstra.messaging/com.telstra.messaging.nuspec deleted file mode 100644 index ab6e7ee..0000000 --- a/src/com.telstra.messaging/com.telstra.messaging.nuspec +++ /dev/null @@ -1,41 +0,0 @@ - - - - - $id$ - Swagger Library - - - $version$ - - - $author$ - - - $author$ - false - false - - - A library generated from a Swagger doc - http://github.com/gruntjs/grunt/blob/master/LICENSE-MIT - - - - - - - - - - - - - - - - - - diff --git a/src/com.telstra.messaging/packages.config b/src/com.telstra.messaging/packages.config deleted file mode 100644 index 3caf34e..0000000 --- a/src/com.telstra.messaging/packages.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - From 752da0b8840d0701aa0162a534c0bf152d1ebb20 Mon Sep 17 00:00:00 2001 From: Yaser Adel Mehraban Date: Fri, 17 Jan 2020 11:31:10 +1100 Subject: [PATCH 2/4] throwing the error --- src/Telstra.Messaging.BackwardCompatTest/Program.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Telstra.Messaging.BackwardCompatTest/Program.cs b/src/Telstra.Messaging.BackwardCompatTest/Program.cs index d89bbf0..798cb76 100644 --- a/src/Telstra.Messaging.BackwardCompatTest/Program.cs +++ b/src/Telstra.Messaging.BackwardCompatTest/Program.cs @@ -43,6 +43,7 @@ static void Main(string[] args) Console.WriteLine("Exception when calling AuthenticationApi.AuthToken: " + e.Message); Console.WriteLine("Status Code: " + e.ErrorCode); Console.WriteLine(e.StackTrace); + throw; } } } From b8ce95a2901f2d91dd450ee194f410e225ef65c6 Mon Sep 17 00:00:00 2001 From: Yaser Adel Mehraban Date: Fri, 17 Jan 2020 11:54:39 +1100 Subject: [PATCH 3/4] Set exit codes --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index e2a3d5a..92961aa 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -16,4 +16,4 @@ jobs: CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }} PHONE_NO: ${{ secrets.PHONE_NO }} FROM_ALIAS: ${{ secrets.FROM_ALIAS }} - run: docker-compose up --build \ No newline at end of file + run: docker-compose up --build --exit-code-from telstradev \ No newline at end of file From ca8a3f1d1dc3c001c8e7bed45e3aa472ba816dd7 Mon Sep 17 00:00:00 2001 From: Yaser Adel Mehraban Date: Mon, 10 Feb 2020 12:24:23 +1100 Subject: [PATCH 4/4] Updated to 1.0.8 with the latests updates from Christy --- .gitignore | 1 + DockerFile | 2 +- docs/MessagingApi.md | 11 +++++--- docs/SendSmsMultiRequest.md | 2 +- nuget.config | 5 ---- .../Api/AuthenticationApiTests.cs | 2 +- .../Api/MessagingApiTests.cs | 2 +- .../Api/ProvisioningApiTests.cs | 2 +- .../Model/DeleteNumberRequestTests.cs | 2 +- .../Model/GetMmsResponseTests.cs | 2 +- .../Model/GetSubscriptionResponseTests.cs | 2 +- .../Model/HealthCheckResponseTests.cs | 2 +- .../Model/InboundPollResponseTests.cs | 2 +- .../Model/MMSContentTests.cs | 2 +- .../Model/MessageMultiTests.cs | 2 +- .../Model/MessageSentResponseMmsTests.cs | 2 +- .../Model/MessageSentResponseSmsTests.cs | 2 +- .../Model/MessageTests.cs | 2 +- .../Model/OAuthResponseTests.cs | 2 +- .../Model/OutboundPollResponseTests.cs | 2 +- .../Model/ProvisionNumberRequestTests.cs | 2 +- .../Model/ProvisionNumberResponseTests.cs | 2 +- .../Model/SendMmsRequestTests.cs | 2 +- .../Model/SendSMSRequestTests.cs | 2 +- .../Model/SendSmsMultiRequestTests.cs | 8 +++--- .../Model/StatusTests.cs | 2 +- .../Telstra.Messaging.Test.csproj | 4 +-- .../Api/AuthenticationApi.cs | 2 +- src/Telstra.Messaging/Api/MessagingApi.cs | 22 +++++++++++---- src/Telstra.Messaging/Api/ProvisioningApi.cs | 2 +- src/Telstra.Messaging/Client/ApiClient.cs | 2 +- src/Telstra.Messaging/Client/ApiException.cs | 2 +- src/Telstra.Messaging/Client/ApiResponse.cs | 2 +- src/Telstra.Messaging/Client/ClientUtils.cs | 2 +- src/Telstra.Messaging/Client/Configuration.cs | 2 +- .../Client/ExceptionFactory.cs | 2 +- .../Client/GlobalConfiguration.cs | 2 +- src/Telstra.Messaging/Client/HttpMethod.cs | 2 +- src/Telstra.Messaging/Client/IApiAccessor.cs | 2 +- .../Client/IAsynchronousClient.cs | 2 +- .../Client/IReadableConfiguration.cs | 2 +- .../Client/ISynchronousClient.cs | 2 +- src/Telstra.Messaging/Client/Multimap.cs | 2 +- .../Client/OpenAPIDateConverter.cs | 2 +- .../Client/RequestOptions.cs | 2 +- .../Model/DeleteNumberRequest.cs | 2 +- src/Telstra.Messaging/Model/GetMmsResponse.cs | 2 +- .../Model/GetSubscriptionResponse.cs | 2 +- .../Model/HealthCheckResponse.cs | 2 +- .../Model/InboundPollResponse.cs | 2 +- src/Telstra.Messaging/Model/MMSContent.cs | 2 +- src/Telstra.Messaging/Model/Message.cs | 2 +- src/Telstra.Messaging/Model/MessageMulti.cs | 2 +- .../Model/MessageSentResponseMms.cs | 2 +- .../Model/MessageSentResponseSms.cs | 2 +- src/Telstra.Messaging/Model/OAuthResponse.cs | 2 +- .../Model/OutboundPollResponse.cs | 2 +- .../Model/ProvisionNumberRequest.cs | 2 +- .../Model/ProvisionNumberResponse.cs | 2 +- src/Telstra.Messaging/Model/SendMmsRequest.cs | 2 +- src/Telstra.Messaging/Model/SendSMSRequest.cs | 2 +- .../Model/SendSmsMultiRequest.cs | 28 +++++++++---------- src/Telstra.Messaging/Model/Status.cs | 2 +- .../Telstra.Messaging.csproj | 4 +-- 64 files changed, 103 insertions(+), 92 deletions(-) delete mode 100644 nuget.config diff --git a/.gitignore b/.gitignore index 17302c9..4725853 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ build/ # NuGet Packages *.nupkg +nuget.config # The packages folder can be ignored because of Package Restore **/packages/* # except build/, which is used as an MSBuild target. diff --git a/DockerFile b/DockerFile index 550d0c8..2c47392 100644 --- a/DockerFile +++ b/DockerFile @@ -3,7 +3,7 @@ FROM microsoft/dotnet:2.2-sdk WORKDIR /telstradev COPY . . -RUN dotnet build +RUN dotnet build WORKDIR /telstradev/src/Telstra.Messaging.Test RUN dotnet test diff --git a/docs/MessagingApi.md b/docs/MessagingApi.md index 457a05c..fc66d81 100644 --- a/docs/MessagingApi.md +++ b/docs/MessagingApi.md @@ -6,10 +6,10 @@ Method | HTTP request | Description ------------- | ------------- | ------------- [**GetMMSStatus**](MessagingApi.md#getmmsstatus) | **GET** /messages/mms/{messageid}/status | Get MMS Status [**GetSMSStatus**](MessagingApi.md#getsmsstatus) | **GET** /messages/sms/{messageId}/status | Get SMS Status -[**MMSHealthCheck**](MessagingApi.md#mmshealthcheck) | **GET** /messages/mms/heathcheck | MMS Health Check +[**MMSHealthCheck**](MessagingApi.md#mmshealthcheck) | **GET** /messages/mms/healthcheck | MMS Health Check [**RetrieveMMSReplies**](MessagingApi.md#retrievemmsreplies) | **GET** /messages/mms | Retrieve MMS Replies [**RetrieveSMSReplies**](MessagingApi.md#retrievesmsreplies) | **GET** /messages/sms | Retrieve SMS Replies -[**SMSHealthCheck**](MessagingApi.md#smshealthcheck) | **GET** /messages/sms/heathcheck | SMS Health Check +[**SMSHealthCheck**](MessagingApi.md#smshealthcheck) | **GET** /messages/sms/healthcheck | SMS Health Check [**SMSMulti**](MessagingApi.md#smsmulti) | **POST** /messages/sms/multi | Send Multiple SMS [**SendMMS**](MessagingApi.md#sendmms) | **POST** /messages/mms | Send MMS [**SendSMS**](MessagingApi.md#sendsms) | **POST** /messages/sms | Send SMS @@ -500,6 +500,9 @@ namespace Example public static void Main() { Configuration.Default.BasePath = "https://tapi.telstra.com/v2"; + // Configure OAuth2 access token for authorization: auth + Configuration.Default.AccessToken = "YOUR_ACCESS_TOKEN"; + var apiInstance = new MessagingApi(Configuration.Default); var payload = new SendSmsMultiRequest(); // SendSmsMultiRequest | A JSON payload containing the recipient's phone number and text message. This number can be in international format if preceeded by a '+' or in national format ('04xxxxxxxx') where x is a digit. @@ -532,7 +535,7 @@ Name | Type | Description | Notes ### Authorization -No authorization required +[auth](../README.md#auth) ### HTTP request headers @@ -543,7 +546,7 @@ No authorization required | Status code | Description | Response headers | |-------------|-------------|------------------| | **200** | Success | - | -| **400** | Invalid or missing request parameters * DR-NOTIFY-URL-MISSING : when receiptOff is missing or receiptOff=false but notifyURL is missing | - | +| **400** | Invalid or missing request parameters * DR-NOTIFY-URL-MISSING : when `\"receiptOff\"` is missing or `\"receiptOff\":\"false\"` but notifyURL is missing | - | | **500** | Technical error : Unable to route the message to a Target Endpoint : An error has occurred while processing your request, please refer to API Docs for summary on the issue | - | | **501** | The HTTP method being used has not yet been implemented for the requested resource | - | | **503** | The service requested is currently unavailable | - | diff --git a/docs/SendSmsMultiRequest.md b/docs/SendSmsMultiRequest.md index f814d61..e730b54 100644 --- a/docs/SendSmsMultiRequest.md +++ b/docs/SendSmsMultiRequest.md @@ -4,7 +4,7 @@ Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- **SmsMulti** | [**List<MessageMulti>**](MessageMulti.md) | Multiple SMS. Up to 10 messages can be sent in one API call. | [optional] -**NotiyURL** | **string** | Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). | [optional] +**NotifyURL** | **string** | Contains a URL that will be called once your message has been processed. The status may be delivered, expired, deleted, etc. Please refer to the Delivery Status section for more information. If you are using a domain URL you must include the forward slash at the end of the URL (e.g. http://www.example.com/). This is required when `\"receiptOff\"` is missing or `\"receiptOff\":\"false\"`. | [optional] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/nuget.config b/nuget.config deleted file mode 100644 index d6ac81f..0000000 --- a/nuget.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/Telstra.Messaging.Test/Api/AuthenticationApiTests.cs b/src/Telstra.Messaging.Test/Api/AuthenticationApiTests.cs index c25a6b0..01057cf 100644 --- a/src/Telstra.Messaging.Test/Api/AuthenticationApiTests.cs +++ b/src/Telstra.Messaging.Test/Api/AuthenticationApiTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Api/MessagingApiTests.cs b/src/Telstra.Messaging.Test/Api/MessagingApiTests.cs index a3042ad..7f97a99 100644 --- a/src/Telstra.Messaging.Test/Api/MessagingApiTests.cs +++ b/src/Telstra.Messaging.Test/Api/MessagingApiTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Api/ProvisioningApiTests.cs b/src/Telstra.Messaging.Test/Api/ProvisioningApiTests.cs index 28c9612..6193f2e 100644 --- a/src/Telstra.Messaging.Test/Api/ProvisioningApiTests.cs +++ b/src/Telstra.Messaging.Test/Api/ProvisioningApiTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/DeleteNumberRequestTests.cs b/src/Telstra.Messaging.Test/Model/DeleteNumberRequestTests.cs index edad2dd..3291373 100644 --- a/src/Telstra.Messaging.Test/Model/DeleteNumberRequestTests.cs +++ b/src/Telstra.Messaging.Test/Model/DeleteNumberRequestTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/GetMmsResponseTests.cs b/src/Telstra.Messaging.Test/Model/GetMmsResponseTests.cs index 379168f..62129b6 100644 --- a/src/Telstra.Messaging.Test/Model/GetMmsResponseTests.cs +++ b/src/Telstra.Messaging.Test/Model/GetMmsResponseTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/GetSubscriptionResponseTests.cs b/src/Telstra.Messaging.Test/Model/GetSubscriptionResponseTests.cs index 5c43cca..b479154 100644 --- a/src/Telstra.Messaging.Test/Model/GetSubscriptionResponseTests.cs +++ b/src/Telstra.Messaging.Test/Model/GetSubscriptionResponseTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/HealthCheckResponseTests.cs b/src/Telstra.Messaging.Test/Model/HealthCheckResponseTests.cs index 9256b59..2ff5501 100644 --- a/src/Telstra.Messaging.Test/Model/HealthCheckResponseTests.cs +++ b/src/Telstra.Messaging.Test/Model/HealthCheckResponseTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/InboundPollResponseTests.cs b/src/Telstra.Messaging.Test/Model/InboundPollResponseTests.cs index f6a566b..d2ccf01 100644 --- a/src/Telstra.Messaging.Test/Model/InboundPollResponseTests.cs +++ b/src/Telstra.Messaging.Test/Model/InboundPollResponseTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/MMSContentTests.cs b/src/Telstra.Messaging.Test/Model/MMSContentTests.cs index 6398e11..dfd4237 100644 --- a/src/Telstra.Messaging.Test/Model/MMSContentTests.cs +++ b/src/Telstra.Messaging.Test/Model/MMSContentTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/MessageMultiTests.cs b/src/Telstra.Messaging.Test/Model/MessageMultiTests.cs index 7c7a0d4..346fb5b 100644 --- a/src/Telstra.Messaging.Test/Model/MessageMultiTests.cs +++ b/src/Telstra.Messaging.Test/Model/MessageMultiTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/MessageSentResponseMmsTests.cs b/src/Telstra.Messaging.Test/Model/MessageSentResponseMmsTests.cs index c23e770..c8256b1 100644 --- a/src/Telstra.Messaging.Test/Model/MessageSentResponseMmsTests.cs +++ b/src/Telstra.Messaging.Test/Model/MessageSentResponseMmsTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/MessageSentResponseSmsTests.cs b/src/Telstra.Messaging.Test/Model/MessageSentResponseSmsTests.cs index 5257f73..ffd57b2 100644 --- a/src/Telstra.Messaging.Test/Model/MessageSentResponseSmsTests.cs +++ b/src/Telstra.Messaging.Test/Model/MessageSentResponseSmsTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/MessageTests.cs b/src/Telstra.Messaging.Test/Model/MessageTests.cs index 81f7437..9279e1e 100644 --- a/src/Telstra.Messaging.Test/Model/MessageTests.cs +++ b/src/Telstra.Messaging.Test/Model/MessageTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/OAuthResponseTests.cs b/src/Telstra.Messaging.Test/Model/OAuthResponseTests.cs index 1341209..b1badcc 100644 --- a/src/Telstra.Messaging.Test/Model/OAuthResponseTests.cs +++ b/src/Telstra.Messaging.Test/Model/OAuthResponseTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/OutboundPollResponseTests.cs b/src/Telstra.Messaging.Test/Model/OutboundPollResponseTests.cs index e6093f0..e26252d 100644 --- a/src/Telstra.Messaging.Test/Model/OutboundPollResponseTests.cs +++ b/src/Telstra.Messaging.Test/Model/OutboundPollResponseTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/ProvisionNumberRequestTests.cs b/src/Telstra.Messaging.Test/Model/ProvisionNumberRequestTests.cs index e85552b..40f774c 100644 --- a/src/Telstra.Messaging.Test/Model/ProvisionNumberRequestTests.cs +++ b/src/Telstra.Messaging.Test/Model/ProvisionNumberRequestTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/ProvisionNumberResponseTests.cs b/src/Telstra.Messaging.Test/Model/ProvisionNumberResponseTests.cs index f57681e..7072e21 100644 --- a/src/Telstra.Messaging.Test/Model/ProvisionNumberResponseTests.cs +++ b/src/Telstra.Messaging.Test/Model/ProvisionNumberResponseTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/SendMmsRequestTests.cs b/src/Telstra.Messaging.Test/Model/SendMmsRequestTests.cs index b34b6f4..100e15c 100644 --- a/src/Telstra.Messaging.Test/Model/SendMmsRequestTests.cs +++ b/src/Telstra.Messaging.Test/Model/SendMmsRequestTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/SendSMSRequestTests.cs b/src/Telstra.Messaging.Test/Model/SendSMSRequestTests.cs index 502e77f..c9c6f96 100644 --- a/src/Telstra.Messaging.Test/Model/SendSMSRequestTests.cs +++ b/src/Telstra.Messaging.Test/Model/SendSMSRequestTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Model/SendSmsMultiRequestTests.cs b/src/Telstra.Messaging.Test/Model/SendSmsMultiRequestTests.cs index cff8d75..36f4d2c 100644 --- a/src/Telstra.Messaging.Test/Model/SendSmsMultiRequestTests.cs +++ b/src/Telstra.Messaging.Test/Model/SendSmsMultiRequestTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * @@ -66,12 +66,12 @@ public void SmsMultiTest() // TODO unit test for the property 'SmsMulti' } /// - /// Test the property 'NotiyURL' + /// Test the property 'NotifyURL' /// [Fact] - public void NotiyURLTest() + public void NotifyURLTest() { - // TODO unit test for the property 'NotiyURL' + // TODO unit test for the property 'NotifyURL' } } diff --git a/src/Telstra.Messaging.Test/Model/StatusTests.cs b/src/Telstra.Messaging.Test/Model/StatusTests.cs index cd6c917..ecc55d2 100644 --- a/src/Telstra.Messaging.Test/Model/StatusTests.cs +++ b/src/Telstra.Messaging.Test/Model/StatusTests.cs @@ -1,7 +1,7 @@ /* * Telstra Messaging API * - * The API specification for Telstra Messaging API + * The Telstra Messaging API specification * * The version of the OpenAPI document: 2.2.9 * diff --git a/src/Telstra.Messaging.Test/Telstra.Messaging.Test.csproj b/src/Telstra.Messaging.Test/Telstra.Messaging.Test.csproj index 0c882eb..ad727cd 100644 --- a/src/Telstra.Messaging.Test/Telstra.Messaging.Test.csproj +++ b/src/Telstra.Messaging.Test/Telstra.Messaging.Test.csproj @@ -2,7 +2,7 @@