diff --git a/README.md b/README.md index 43b613a..926dd97 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,15 @@ On Windows, we recommend installing [the latest Visual Studio 2019](https://www. To get started with Target Node.js SDK, just add it as a dependency by [installing from NuGet](https://www.nuget.org/packages/Adobe.Target.Client). +### Super Simple to Use + +Please take a look at [our documentation](https://adobetarget-sdks.gitbook.io/docs/sdk-reference-guides/dotnet-sdk) to learn how to use the .NET SDK. + +### Sample Apps + +There's a couple of sample apps showing sample sync/async Target SDK usage under [SampleApp project](SampleApp). +To switch between sync and async sample apps, just modify `StartupObject` property in [SampleApp project file](SampleApp/SampleApp.csproj) accordingly. + ### Build To build everything and generate NuGet packages, run [dotnet Cake](https://cakebuild.net/) CLI commands. Binaries and NuGet packages will be dropped in an *Artefacts* directory at the repo root. @@ -58,16 +67,9 @@ Each project can also be built individually directly through the CLI or your edi We publish NuGet packages to [nuget.org](https://www.nuget.org/packages/Adobe.Target.Client) for each release. -### Using nugets built locally in your project - -```bash -# Add Adobe.Target.Client nuget package -dotnet add package Adobe.Target.Client -s /Artefacts -``` - ### Contributing -Contributions are welcomed! Read the [Contributing Guide](./.github/CONTRIBUTING.md) for more information. +Contributions are welcome! Read the [Contributing Guide](./.github/CONTRIBUTING.md) for more information. ### Licensing diff --git a/SampleApp/App.cs b/SampleApp/App.cs index e54cd36..11b31f7 100644 --- a/SampleApp/App.cs +++ b/SampleApp/App.cs @@ -33,15 +33,23 @@ public App(ITargetClient targetClient, ILogger logger) public async Task RunAsync(string[] args) { Console.WriteLine("Async app"); - this.logger.LogInformation("Starting ..."); + + // Initialize the SDK var targetClientConfig = new TargetClientConfig.Builder("adobetargetmobile", "B8A054D958807F770A495DD6@AdobeOrg") .SetLogger(this.logger) + .SetDecisioningMethod(DecisioningMethod.OnDevice) + .SetOnDeviceDecisioningReady(this.DecisioningReady) + .SetArtifactDownloadSucceeded(artifact => Console.WriteLine("ArtifactDownloadSucceeded: " + artifact)) + .SetArtifactDownloadFailed(exception => Console.WriteLine("ArtifactDownloadFailed " + exception.Message)) .Build(); this.targetClient.Initialize(targetClientConfig); + // sample server-side GetOffers call + var deliveryRequest = new TargetDeliveryRequest.Builder() + .SetDecisioningMethod(DecisioningMethod.ServerSide) .SetThirdPartyId("testThirdPartyId") .SetContext(new Context(ChannelType.Web)) .SetExecute(new ExecuteRequest(null, new List @@ -54,7 +62,10 @@ public async Task RunAsync(string[] args) App.PrintCookies(this.logger, response); + // sample SendNotifications call + var notificationRequest = new TargetDeliveryRequest.Builder() + .SetDecisioningMethod(DecisioningMethod.ServerSide) .SetSessionId(response.Request.SessionId) .SetTntId(response.Response?.Id?.TntId) .SetThirdPartyId("testThirdPartyId") @@ -68,8 +79,6 @@ public async Task RunAsync(string[] args) App.PrintCookies(this.logger, await this.targetClient.SendNotificationsAsync(notificationRequest)); - this.logger.LogInformation("Done"); - await Task.CompletedTask; } @@ -78,5 +87,27 @@ internal static void PrintCookies(ILogger logger, TargetDeliveryResponse respons logger.LogInformation("Mbox cookie: " + response.GetCookies()[TargetConstants.MboxCookieName].Value); logger.LogInformation("Cluster cookie: " + response.GetCookies()[TargetConstants.ClusterCookieName].Value); } + + private void DecisioningReady() + { + Console.WriteLine("OnDeviceDecisioningReady"); + _ = this.GetOnDeviceOffersAsync(); + } + + private async Task GetOnDeviceOffersAsync() + { + // sample on-device GetOffers call + + var deliveryRequest = new TargetDeliveryRequest.Builder() + .SetContext(new Context(ChannelType.Web, geo: new Geo("193.105.140.131"))) + .SetExecute(new ExecuteRequest(new RequestDetails(), new List + { + new(index:1, name: "a1-mobile-tstsree") + })) + .Build(); + + var response = await targetClient.GetOffersAsync(deliveryRequest); + App.PrintCookies(this.logger, response); + } } } diff --git a/SampleApp/ProgramSync.cs b/SampleApp/ProgramSync.cs index 1909678..32a2039 100644 --- a/SampleApp/ProgramSync.cs +++ b/SampleApp/ProgramSync.cs @@ -11,6 +11,7 @@ namespace SampleApp internal class ProgramSync { private static TargetClient targetClient; + private static ILogger logger; public static void Main(string[] args) { Console.WriteLine("Sync app"); @@ -20,7 +21,9 @@ public static void Main(string[] args) builder.AddSimpleConsole(options => options.TimestampFormat = "hh:mm:ss "); builder.SetMinimumLevel(LogLevel.Debug); }); - var logger = loggerFactory.CreateLogger(); + logger = loggerFactory.CreateLogger(); + + // Initialize the SDK var targetClientConfig = new TargetClientConfig.Builder("adobetargetmobile", "B8A054D958807F770A495DD6@AdobeOrg") .SetLogger(logger) @@ -31,6 +34,40 @@ public static void Main(string[] args) .Build(); targetClient = TargetClient.Create(targetClientConfig); + // sample server-side GetOffers call + + var deliveryRequest = new TargetDeliveryRequest.Builder() + .SetDecisioningMethod(DecisioningMethod.ServerSide) + .SetThirdPartyId("testThirdPartyId") + .SetContext(new Context(ChannelType.Web)) + .SetExecute(new ExecuteRequest(null, new List + { + new MboxRequest(index:1, name: "a1-serverside-ab") + })) + .Build(); + + var response = targetClient.GetOffers(deliveryRequest); + + App.PrintCookies(logger, response); + + // sample SendNotifications call + + var notificationRequest = new TargetDeliveryRequest.Builder() + .SetDecisioningMethod(DecisioningMethod.ServerSide) + .SetSessionId(response.Request.SessionId) + .SetTntId(response.Response?.Id?.TntId) + .SetThirdPartyId("testThirdPartyId") + .SetContext(new Context(ChannelType.Web)) + .SetNotifications(new List() + { + { new(id:"notificationId1", type: MetricType.Display, timestamp: DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), + tokens: new List())} + }) + .Build(); + + var notificationResponse = targetClient.SendNotifications(notificationRequest); + App.PrintCookies(logger, notificationResponse); + Thread.Sleep(3000); } @@ -38,8 +75,9 @@ private static void DecisioningReady() { Console.WriteLine("OnDeviceDecisioningReady"); + // sample on-device GetOffers call + var deliveryRequest = new TargetDeliveryRequest.Builder() - .SetThirdPartyId("testThirdPartyId") .SetContext(new Context(ChannelType.Web, geo: new Geo("193.105.140.131"))) .SetExecute(new ExecuteRequest(new RequestDetails(), new List { @@ -48,6 +86,7 @@ private static void DecisioningReady() .Build(); var response = targetClient.GetOffers(deliveryRequest); + App.PrintCookies(logger, response); } } } diff --git a/Source/Adobe.Target.Client/Adobe.Target.Client.csproj b/Source/Adobe.Target.Client/Adobe.Target.Client.csproj index 260b827..6765149 100644 --- a/Source/Adobe.Target.Client/Adobe.Target.Client.csproj +++ b/Source/Adobe.Target.Client/Adobe.Target.Client.csproj @@ -6,13 +6,13 @@ Adobe.Target.Client - Target .NET SDK + Adobe Target .NET SDK - https://adobetarget-sdks.gitbook.io/docs/sdk-reference-guides/dotnet-sdk adobe;target;target-sdk;target-client - + diff --git a/Source/Adobe.Target.Client/OnDevice/ClusterLocator.cs b/Source/Adobe.Target.Client/OnDevice/ClusterLocator.cs index 4a176f0..16c0ad1 100644 --- a/Source/Adobe.Target.Client/OnDevice/ClusterLocator.cs +++ b/Source/Adobe.Target.Client/OnDevice/ClusterLocator.cs @@ -46,6 +46,7 @@ private void FetchLocation(ITargetService targetService) private async Task FetchLocationAsync(ITargetService targetService) { var request = new TargetDeliveryRequest.Builder() + .SetDecisioningMethod(DecisioningMethod.ServerSide) .SetContext(new Context(ChannelType.Web)) .Build(); diff --git a/Source/Adobe.Target.Client/TargetClient.cs b/Source/Adobe.Target.Client/TargetClient.cs index 18f9d4a..5ca5fcc 100644 --- a/Source/Adobe.Target.Client/TargetClient.cs +++ b/Source/Adobe.Target.Client/TargetClient.cs @@ -47,11 +47,11 @@ public static TargetClient Create(TargetClientConfig clientConfig) public void Initialize(TargetClientConfig clientConfig) { Logger = clientConfig.Logger; + VisitorProvider.Initialize(clientConfig.OrganizationId); this.targetService = new TargetService(clientConfig); this.localService = new OnDeviceDecisioningService(clientConfig, this.targetService); this.defaultDecisioningMethod = clientConfig.DecisioningMethod; this.defaultPropertyToken = clientConfig.DefaultPropertyToken; - VisitorProvider.Initialize(clientConfig.OrganizationId); Logger?.LogDebug("Initialized Target Client: " + clientConfig.OrganizationId); } diff --git a/Source/Adobe.Target.Client/Util/TargetConstants.cs b/Source/Adobe.Target.Client/Util/TargetConstants.cs index 93cac62..2b8b71c 100644 --- a/Source/Adobe.Target.Client/Util/TargetConstants.cs +++ b/Source/Adobe.Target.Client/Util/TargetConstants.cs @@ -18,7 +18,7 @@ public static class TargetConstants /// /// SDK Version /// - public const string SdkVersion = "0.0.1"; + public const string SdkVersion = "1.0.0"; /// /// Mbox cookie name diff --git a/Source/Adobe.Target.Delivery/Adobe.Target.Delivery.csproj b/Source/Adobe.Target.Delivery/Adobe.Target.Delivery.csproj index b545267..62170a8 100644 --- a/Source/Adobe.Target.Delivery/Adobe.Target.Delivery.csproj +++ b/Source/Adobe.Target.Delivery/Adobe.Target.Delivery.csproj @@ -6,7 +6,7 @@ Adobe.Target.Delivery - Target .NET Delivery API + Target .NET Delivery API - https://developers.adobetarget.com/api/delivery-api/ adobe;target;target-delivery;target-delivery-api diff --git a/Source/Adobe.Target.Delivery/Model/DeliveryRequest.cs b/Source/Adobe.Target.Delivery/Model/DeliveryRequest.cs index c2096ce..2cc4cba 100644 --- a/Source/Adobe.Target.Delivery/Model/DeliveryRequest.cs +++ b/Source/Adobe.Target.Delivery/Model/DeliveryRequest.cs @@ -55,7 +55,8 @@ protected DeliveryRequest() { } /// telemetry. /// Notifications for the displayed content, clicked selectors, and/or visited views or mboxes.. /// qaMode. - public DeliveryRequest(string requestId = default(string), string impressionId = default(string), VisitorId id = default(VisitorId), long environmentId = default(long), Property property = default(Property), Trace trace = default(Trace), Context context = default(Context), ExperienceCloud experienceCloud = default(ExperienceCloud), ExecuteRequest execute = default(ExecuteRequest), PrefetchRequest prefetch = default(PrefetchRequest), Telemetry telemetry = default(Telemetry), List notifications = default(List), QAMode qaMode = default(QAMode)) + /// preview. + public DeliveryRequest(string requestId = default(string), string impressionId = default(string), VisitorId id = default(VisitorId), long environmentId = default(long), Property property = default(Property), Trace trace = default(Trace), Context context = default(Context), ExperienceCloud experienceCloud = default(ExperienceCloud), ExecuteRequest execute = default(ExecuteRequest), PrefetchRequest prefetch = default(PrefetchRequest), Telemetry telemetry = default(Telemetry), List notifications = default(List), QAMode qaMode = default(QAMode), Preview preview = default(Preview)) { // to ensure "context" is required (not null) this.Context = context ?? throw new ArgumentNullException("context is a required property for DeliveryRequest and cannot be null"); @@ -71,6 +72,7 @@ protected DeliveryRequest() { } this.Telemetry = telemetry; this.Notifications = notifications; this.QaMode = qaMode; + this.Preview = preview; } /// @@ -155,6 +157,12 @@ protected DeliveryRequest() { } [DataMember(Name = "qaMode", EmitDefaultValue = false)] public QAMode QaMode { get; set; } + /// + /// Gets or Sets Preview + /// + [DataMember(Name = "preview", EmitDefaultValue = false)] + public Preview Preview { get; set; } + /// /// Returns the string presentation of the object /// @@ -176,6 +184,7 @@ public override string ToString() sb.Append(" Telemetry: ").Append(Telemetry).Append("\n"); sb.Append(" Notifications: ").Append(Notifications).Append("\n"); sb.Append(" QaMode: ").Append(QaMode).Append("\n"); + sb.Append(" Preview: ").Append(Preview).Append("\n"); sb.Append("}\n"); return sb.ToString(); } @@ -274,6 +283,11 @@ public bool Equals(DeliveryRequest input) this.QaMode == input.QaMode || (this.QaMode != null && this.QaMode.Equals(input.QaMode)) + ) && + ( + this.Preview == input.Preview || + (this.Preview != null && + this.Preview.Equals(input.Preview)) ); } @@ -311,6 +325,8 @@ public override int GetHashCode() hashCode = hashCode * 59 + this.Notifications.GetHashCode(); if (this.QaMode != null) hashCode = hashCode * 59 + this.QaMode.GetHashCode(); + if (this.Preview != null) + hashCode = hashCode * 59 + this.Preview.GetHashCode(); return hashCode; } } diff --git a/Source/Adobe.Target.Delivery/Model/DeliveryResponse.cs b/Source/Adobe.Target.Delivery/Model/DeliveryResponse.cs index d5010ba..3dad652 100644 --- a/Source/Adobe.Target.Delivery/Model/DeliveryResponse.cs +++ b/Source/Adobe.Target.Delivery/Model/DeliveryResponse.cs @@ -44,7 +44,8 @@ public partial class DeliveryResponse : IEquatable, IValidatab /// Cluster host name that served the response. Ideally, all subsequent requests should be made to that host.. /// execute. /// prefetch. - public DeliveryResponse(int status = default(int), string requestId = default(string), VisitorId id = default(VisitorId), string _client = default(string), string edgeHost = default(string), ExecuteResponse execute = default(ExecuteResponse), PrefetchResponse prefetch = default(PrefetchResponse)) + /// notifications. + public DeliveryResponse(int status = default(int), string requestId = default(string), VisitorId id = default(VisitorId), string _client = default(string), string edgeHost = default(string), ExecuteResponse execute = default(ExecuteResponse), PrefetchResponse prefetch = default(PrefetchResponse), NotificationResponse notifications = default(NotificationResponse)) { this.Status = status; this.RequestId = requestId; @@ -53,6 +54,7 @@ public partial class DeliveryResponse : IEquatable, IValidatab this.EdgeHost = edgeHost; this.Execute = execute; this.Prefetch = prefetch; + this.Notifications = notifications; } /// @@ -100,6 +102,12 @@ public partial class DeliveryResponse : IEquatable, IValidatab [DataMember(Name = "prefetch", EmitDefaultValue = false)] public PrefetchResponse Prefetch { get; set; } + /// + /// Gets or Sets Notifications + /// + [DataMember(Name = "notifications", EmitDefaultValue = false)] + public NotificationResponse Notifications { get; set; } + /// /// Returns the string presentation of the object /// @@ -115,6 +123,7 @@ public override string ToString() sb.Append(" EdgeHost: ").Append(EdgeHost).Append("\n"); sb.Append(" Execute: ").Append(Execute).Append("\n"); sb.Append(" Prefetch: ").Append(Prefetch).Append("\n"); + sb.Append(" Notifications: ").Append(Notifications).Append("\n"); sb.Append("}\n"); return sb.ToString(); } @@ -182,6 +191,11 @@ public bool Equals(DeliveryResponse input) this.Prefetch == input.Prefetch || (this.Prefetch != null && this.Prefetch.Equals(input.Prefetch)) + ) && + ( + this.Notifications == input.Notifications || + (this.Notifications != null && + this.Notifications.Equals(input.Notifications)) ); } @@ -207,6 +221,8 @@ public override int GetHashCode() hashCode = hashCode * 59 + this.Execute.GetHashCode(); if (this.Prefetch != null) hashCode = hashCode * 59 + this.Prefetch.GetHashCode(); + if (this.Notifications != null) + hashCode = hashCode * 59 + this.Notifications.GetHashCode(); return hashCode; } } diff --git a/Source/Adobe.Target.Delivery/Model/NotificationResponse.cs b/Source/Adobe.Target.Delivery/Model/NotificationResponse.cs new file mode 100644 index 0000000..b3895dc --- /dev/null +++ b/Source/Adobe.Target.Delivery/Model/NotificationResponse.cs @@ -0,0 +1,147 @@ +// +/* + * Copyright 2021 Adobe. All rights reserved. + * This file is licensed to you 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 REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Text.RegularExpressions; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Linq; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Adobe.Target.Delivery.Client.OpenAPIDateConverter; + +namespace Adobe.Target.Delivery.Model +{ + /// + /// Notification response. Contains the result of a processed notification. + /// + [DataContract(Name = "NotificationResponse")] + public partial class NotificationResponse : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// Notification id which indicates that the notification was processed successfully. . + /// The object containing all trace data for the request, only present if the trace token was provided in the request. . + public NotificationResponse(string id = default(string), Dictionary trace = default(Dictionary)) + { + this.Id = id; + this.Trace = trace; + } + + /// + /// Notification id which indicates that the notification was processed successfully. + /// + /// Notification id which indicates that the notification was processed successfully. + [DataMember(Name = "id", EmitDefaultValue = false)] + public string Id { get; set; } + + /// + /// The object containing all trace data for the request, only present if the trace token was provided in the request. + /// + /// The object containing all trace data for the request, only present if the trace token was provided in the request. + [DataMember(Name = "trace", EmitDefaultValue = false)] + public Dictionary Trace { 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 NotificationResponse {\n"); + sb.Append(" Id: ").Append(Id).Append("\n"); + sb.Append(" Trace: ").Append(Trace).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 Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as NotificationResponse); + } + + /// + /// Returns true if NotificationResponse instances are equal + /// + /// Instance of NotificationResponse to be compared + /// Boolean + public bool Equals(NotificationResponse input) + { + if (input == null) + return false; + + return + ( + this.Id == input.Id || + (this.Id != null && + this.Id.Equals(input.Id)) + ) && + ( + this.Trace == input.Trace || + this.Trace != null && + input.Trace != null && + this.Trace.SequenceEqual(input.Trace) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Id != null) + hashCode = hashCode * 59 + this.Id.GetHashCode(); + if (this.Trace != null) + hashCode = hashCode * 59 + this.Trace.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/Source/Adobe.Target.Delivery/Model/Preview.cs b/Source/Adobe.Target.Delivery/Model/Preview.cs new file mode 100644 index 0000000..98ebe49 --- /dev/null +++ b/Source/Adobe.Target.Delivery/Model/Preview.cs @@ -0,0 +1,129 @@ +// +/* + * Copyright 2021 Adobe. All rights reserved. + * This file is licensed to you 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 REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + * Generated by: https://github.com/openapitools/openapi-generator.git + */ + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.IO; +using System.Runtime.Serialization; +using System.Text; +using System.Text.RegularExpressions; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Linq; +using System.ComponentModel.DataAnnotations; +using OpenAPIDateConverter = Adobe.Target.Delivery.Client.OpenAPIDateConverter; + +namespace Adobe.Target.Delivery.Model +{ + /// + /// Use this object to enable the Preview mode in the request. Use the Preview mode to test the look and feel of your site for various location and offer combinations. + /// + [DataContract(Name = "Preview")] + public partial class Preview : IEquatable, IValidatableObject + { + /// + /// Initializes a new instance of the class. + /// + /// The token for the Preview mode. Validation * Verify that the token belongs to the client provided in request. . + public Preview(string token = default(string)) + { + this.Token = token; + } + + /// + /// The token for the Preview mode. Validation * Verify that the token belongs to the client provided in request. + /// + /// The token for the Preview mode. Validation * Verify that the token belongs to the client provided in request. + [DataMember(Name = "token", EmitDefaultValue = false)] + public string Token { 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 Preview {\n"); + sb.Append(" Token: ").Append(Token).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 Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented); + } + + /// + /// Returns true if objects are equal + /// + /// Object to be compared + /// Boolean + public override bool Equals(object input) + { + return this.Equals(input as Preview); + } + + /// + /// Returns true if Preview instances are equal + /// + /// Instance of Preview to be compared + /// Boolean + public bool Equals(Preview input) + { + if (input == null) + return false; + + return + ( + this.Token == input.Token || + (this.Token != null && + this.Token.Equals(input.Token)) + ); + } + + /// + /// Gets the hash code + /// + /// Hash code + public override int GetHashCode() + { + unchecked // Overflow is fine, just wrap + { + int hashCode = 41; + if (this.Token != null) + hashCode = hashCode * 59 + this.Token.GetHashCode(); + return hashCode; + } + } + + /// + /// To validate all properties of the instance + /// + /// Validation context + /// Validation Result + IEnumerable IValidatableObject.Validate(ValidationContext validationContext) + { + yield break; + } + } + +} diff --git a/openapi b/openapi index ed1850b..671d16a 160000 --- a/openapi +++ b/openapi @@ -1 +1 @@ -Subproject commit ed1850b53ffb4383156f367fa67d4aed84667763 +Subproject commit 671d16a9fd123ee0c8685ed039ed740a16e59ee4 diff --git a/packages-local/Adobe.ExperienceCloud.Ecid.1.0.0.nupkg b/packages-local/Adobe.ExperienceCloud.Ecid.1.0.0.nupkg index b1689a2..b28903b 100644 Binary files a/packages-local/Adobe.ExperienceCloud.Ecid.1.0.0.nupkg and b/packages-local/Adobe.ExperienceCloud.Ecid.1.0.0.nupkg differ diff --git a/packages-local/Adobe.ExperienceCloud.Ecid.1.0.0.snupkg b/packages-local/Adobe.ExperienceCloud.Ecid.1.0.0.snupkg index b78ccd0..c052d2e 100644 Binary files a/packages-local/Adobe.ExperienceCloud.Ecid.1.0.0.snupkg and b/packages-local/Adobe.ExperienceCloud.Ecid.1.0.0.snupkg differ diff --git a/packages-local/Adobe.Target.Delivery.0.0.0-preview.0.14.nupkg b/packages-local/Adobe.Target.Delivery.0.0.0-preview.0.14.nupkg deleted file mode 100644 index 6b75f2f..0000000 Binary files a/packages-local/Adobe.Target.Delivery.0.0.0-preview.0.14.nupkg and /dev/null differ diff --git a/packages-local/Adobe.Target.Delivery.0.0.0-preview.0.14.snupkg b/packages-local/Adobe.Target.Delivery.0.0.0-preview.0.14.snupkg deleted file mode 100644 index b2f1df7..0000000 Binary files a/packages-local/Adobe.Target.Delivery.0.0.0-preview.0.14.snupkg and /dev/null differ diff --git a/packages-local/Adobe.Target.Delivery.1.0.0.nupkg b/packages-local/Adobe.Target.Delivery.1.0.0.nupkg new file mode 100644 index 0000000..27cd629 Binary files /dev/null and b/packages-local/Adobe.Target.Delivery.1.0.0.nupkg differ diff --git a/packages-local/Adobe.Target.Delivery.1.0.0.snupkg b/packages-local/Adobe.Target.Delivery.1.0.0.snupkg new file mode 100644 index 0000000..b2378f7 Binary files /dev/null and b/packages-local/Adobe.Target.Delivery.1.0.0.snupkg differ