diff --git a/src/ApiService/ApiService/ApiService.csproj b/src/ApiService/ApiService/ApiService.csproj
index 3e4e2c2b1..645abb483 100644
--- a/src/ApiService/ApiService/ApiService.csproj
+++ b/src/ApiService/ApiService/ApiService.csproj
@@ -44,4 +44,4 @@
Never
-
+
\ No newline at end of file
diff --git a/src/ApiService/ApiService/HttpClient.cs b/src/ApiService/ApiService/HttpClient.cs
index a51ca6bfe..ca95e0b19 100644
--- a/src/ApiService/ApiService/HttpClient.cs
+++ b/src/ApiService/ApiService/HttpClient.cs
@@ -47,18 +47,18 @@ public class Request {
public async Task Post(Uri url, String json, IDictionary? headers = null) {
using var b = new StringContent(json);
b.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
- return await Send(method: HttpMethod.Post, url: url, headers: headers);
+ return await Send(method: HttpMethod.Post, content: b, url: url, headers: headers);
}
public async Task Put(Uri url, String json, IDictionary? headers = null) {
using var b = new StringContent(json);
b.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
- return await Send(method: HttpMethod.Put, url: url, headers: headers);
+ return await Send(method: HttpMethod.Put, content: b, url: url, headers: headers);
}
public async Task Patch(Uri url, String json, IDictionary? headers = null) {
using var b = new StringContent(json);
b.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
- return await Send(method: HttpMethod.Patch, url: url, headers: headers);
+ return await Send(method: HttpMethod.Patch, content: b, url: url, headers: headers);
}
}
diff --git a/src/ApiService/ApiService/Log.cs b/src/ApiService/ApiService/Log.cs
index 31bce2b09..1fc04436b 100644
--- a/src/ApiService/ApiService/Log.cs
+++ b/src/ApiService/ApiService/Log.cs
@@ -105,7 +105,7 @@ public interface ILogTracer {
void Critical(string message);
void Error(string message);
void Event(string evt, IReadOnlyDictionary? metrics);
- void Exception(Exception ex, IReadOnlyDictionary? metrics);
+ void Exception(Exception ex, IReadOnlyDictionary? metrics = null);
void ForceFlush();
void Info(string message);
void Warning(string message);
diff --git a/src/ApiService/ApiService/OneFuzzTypes/Events.cs b/src/ApiService/ApiService/OneFuzzTypes/Events.cs
index 222e30e25..772a7671e 100644
--- a/src/ApiService/ApiService/OneFuzzTypes/Events.cs
+++ b/src/ApiService/ApiService/OneFuzzTypes/Events.cs
@@ -45,6 +45,7 @@ public abstract record BaseEvent() {
this switch {
EventNodeHeartbeat _ => EventType.NodeHeartbeat,
EventTaskHeartbeat _ => EventType.TaskHeartbeat,
+ EventPing _ => EventType.Ping,
EventInstanceConfigUpdated _ => EventType.InstanceConfigUpdated,
EventProxyCreated _ => EventType.ProxyCreated,
EventProxyDeleted _ => EventType.ProxyDeleted,
@@ -66,6 +67,7 @@ public abstract record BaseEvent() {
EventType.NodeHeartbeat => typeof(EventNodeHeartbeat),
EventType.InstanceConfigUpdated => typeof(EventInstanceConfigUpdated),
EventType.TaskHeartbeat => typeof(EventTaskHeartbeat),
+ EventType.Ping => typeof(EventPing),
EventType.ProxyCreated => typeof(EventProxyCreated),
EventType.ProxyDeleted => typeof(EventProxyDeleted),
EventType.ProxyFailed => typeof(EventProxyFailed),
@@ -151,11 +153,9 @@ public record EventTaskHeartbeat(
TaskConfig Config
) : BaseEvent();
-
-//record EventPing(
-// PingId: Guid
-//): BaseEvent();
-
+public record EventPing(
+ Guid PingId
+) : BaseEvent();
//record EventScalesetCreated(
// Guid ScalesetId,
@@ -295,7 +295,7 @@ public record EventMessage(
BaseEvent Event,
Guid InstanceId,
String InstanceName
-) : EntityBase();
+);
public class BaseEventConverter : JsonConverter {
public override BaseEvent? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) {
diff --git a/src/ApiService/ApiService/OneFuzzTypes/Model.cs b/src/ApiService/ApiService/OneFuzzTypes/Model.cs
index 4c870b316..d90e3a675 100644
--- a/src/ApiService/ApiService/OneFuzzTypes/Model.cs
+++ b/src/ApiService/ApiService/OneFuzzTypes/Model.cs
@@ -245,7 +245,6 @@ public record NodeAssignment(
public record Task(
- // Timestamp: Optional[datetime] = Field(alias="Timestamp")
[PartitionKey] Guid JobId,
[RowKey] Guid TaskId,
TaskState State,
@@ -307,13 +306,13 @@ public record ApiAccessRule(
Guid[] AllowedGroups
);
+//# initial set of admins can only be set during deployment.
+//# if admins are set, only admins can update instance configs.
+//# if set, only admins can manage pools or scalesets
public record InstanceConfig
(
[PartitionKey, RowKey] string InstanceName,
- //# initial set of admins can only be set during deployment.
- //# if admins are set, only admins can update instance configs.
Guid[]? Admins,
- //# if set, only admins can manage pools or scalesets
bool? AllowPoolManagement,
string[] AllowedAadTenants,
NetworkConfig NetworkConfig,
@@ -490,20 +489,20 @@ public record Repro(
UserInfo? UserInfo
) : StatefulEntityBase(State);
+// TODO: Make this >1 and < 7*24 (more than one hour, less than seven days)
public record ReproConfig(
Container Container,
string Path,
- // TODO: Make this >1 and < 7*24 (more than one hour, less than seven days)
int Duration
);
+// Skipping AutoScaleConfig because it's not used anymore
public record Pool(
DateTimeOffset Timestamp,
PoolName Name,
Guid PoolId,
Os Os,
bool Managed,
- // Skipping AutoScaleConfig because it's not used anymore
Architecture Architecture,
PoolState State,
Guid? ClientId,
diff --git a/src/ApiService/ApiService/OneFuzzTypes/Webhooks.cs b/src/ApiService/ApiService/OneFuzzTypes/Webhooks.cs
index 1e6205426..bcf159e16 100644
--- a/src/ApiService/ApiService/OneFuzzTypes/Webhooks.cs
+++ b/src/ApiService/ApiService/OneFuzzTypes/Webhooks.cs
@@ -9,6 +9,11 @@ public enum WebhookMessageFormat {
EventGrid
}
+public record WebhookMessageQueueObj(
+ Guid WebhookId,
+ Guid EventId
+ );
+
public record WebhookMessage(Guid EventId,
EventType EventType,
BaseEvent Event,
@@ -27,24 +32,18 @@ public record WebhookMessageEventGrid(
[property: JsonConverter(typeof(BaseEventConverter))]
BaseEvent Data);
-
-// TODO: This should inherit from Entity Base ? no, since there is
-// a table WebhookMessaageLog
public record WebhookMessageLog(
[RowKey] Guid EventId,
EventType EventType,
+ [property: TypeDiscrimnatorAttribute("EventType", typeof(EventTypeProvider))]
+ [property: JsonConverter(typeof(BaseEventConverter))]
BaseEvent Event,
Guid InstanceId,
String InstanceName,
[PartitionKey] Guid WebhookId,
- WebhookMessageState State = WebhookMessageState.Queued,
- int TryCount = 0
- ) : WebhookMessage(EventId,
- EventType,
- Event,
- InstanceId,
- InstanceName,
- WebhookId);
+ long TryCount,
+ WebhookMessageState State = WebhookMessageState.Queued
+ ) : EntityBase();
public record Webhook(
[PartitionKey] Guid WebhookId,
diff --git a/src/ApiService/ApiService/Program.cs b/src/ApiService/ApiService/Program.cs
index 8ffaf3bb2..3188819bf 100644
--- a/src/ApiService/ApiService/Program.cs
+++ b/src/ApiService/ApiService/Program.cs
@@ -45,7 +45,8 @@ public class Program {
return loggers;
}
-
+ //Move out expensive resources into separate class, and add those as Singleton
+ // ArmClient, Table Client(s), Queue Client(s), HttpClient, etc.
public static void Main() {
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults(
@@ -82,7 +83,7 @@ public class Program {
.AddScoped()
//Move out expensive resources into separate class, and add those as Singleton
- // ArmClient, Table Client(s), Queue Client(s), HttpClient, etc.
+ // ArmClient, Table Client(s), Queue Client(s), HttpClient, etc.\
.AddSingleton()
.AddSingleton()
.AddHttpClient()
diff --git a/src/ApiService/ApiService/QueueWebhooks.cs b/src/ApiService/ApiService/QueueWebhooks.cs
new file mode 100644
index 000000000..c5cd0fa3c
--- /dev/null
+++ b/src/ApiService/ApiService/QueueWebhooks.cs
@@ -0,0 +1,24 @@
+using System.Text.Json;
+using Microsoft.Azure.Functions.Worker;
+using Microsoft.OneFuzz.Service.OneFuzzLib.Orm;
+
+namespace Microsoft.OneFuzz.Service;
+
+public class QueueWebhooks {
+ private readonly ILogTracer _log;
+ private readonly IWebhookMessageLogOperations _webhookMessageLog;
+ public QueueWebhooks(ILogTracer log, IWebhookMessageLogOperations webhookMessageLog) {
+ _log = log;
+ _webhookMessageLog = webhookMessageLog;
+ }
+
+ [Function("QueueWebhooks")]
+ public async Async.Task Run([QueueTrigger("myqueue-items", Connection = "AzureWebJobsStorage")] string msg) {
+
+ _log.Info($"Webhook Message Queued: {msg}");
+
+ var obj = JsonSerializer.Deserialize(msg, EntityConverter.GetJsonSerializerOptions()).EnsureNotNull($"wrong data {msg}");
+
+ await _webhookMessageLog.ProcessFromQueue(obj);
+ }
+}
diff --git a/src/ApiService/ApiService/ServiceConfiguration.cs b/src/ApiService/ApiService/ServiceConfiguration.cs
index 416c324f6..cf4cc7589 100644
--- a/src/ApiService/ApiService/ServiceConfiguration.cs
+++ b/src/ApiService/ApiService/ServiceConfiguration.cs
@@ -35,7 +35,7 @@ public interface IServiceConfig {
public string? OneFuzzResourceGroup { get; }
public string? OneFuzzTelemetry { get; }
- public string OnefuzzVersion { get; }
+ public string OneFuzzVersion { get; }
}
public class ServiceConfiguration : IServiceConfig {
@@ -77,5 +77,5 @@ public class ServiceConfiguration : IServiceConfig {
public string? OneFuzzOwner { get => Environment.GetEnvironmentVariable("ONEFUZZ_OWNER"); }
public string? OneFuzzResourceGroup { get => Environment.GetEnvironmentVariable("ONEFUZZ_RESOURCE_GROUP"); }
public string? OneFuzzTelemetry { get => Environment.GetEnvironmentVariable("ONEFUZZ_TELEMETRY"); }
- public string OnefuzzVersion { get => Environment.GetEnvironmentVariable("ONEFUZZ_VERSION") ?? "0.0.0"; }
+ public string OneFuzzVersion { get => Environment.GetEnvironmentVariable("ONEFUZZ_VERSION") ?? "0.0.0"; }
}
diff --git a/src/ApiService/ApiService/onefuzzlib/Containers.cs b/src/ApiService/ApiService/onefuzzlib/Containers.cs
index 3a4694285..1c271a9af 100644
--- a/src/ApiService/ApiService/onefuzzlib/Containers.cs
+++ b/src/ApiService/ApiService/onefuzzlib/Containers.cs
@@ -1,125 +1,124 @@
-using System.Threading.Tasks;
-using Azure;
-using Azure.ResourceManager;
-using Azure.Storage;
-using Azure.Storage.Blobs;
-using Azure.Storage.Sas;
-
-namespace Microsoft.OneFuzz.Service;
-
-
-public interface IContainers {
- public Task GetBlob(Container container, string name, StorageType storageType);
-
- public Async.Task FindContainer(Container container, StorageType storageType);
-
- public Async.Task GetFileSasUrl(Container container, string name, StorageType storageType, BlobSasPermissions permissions, TimeSpan? duration = null);
- Async.Task saveBlob(Container container, string v1, string v2, StorageType config);
- Task GetInstanceId();
-}
-
-public class Containers : IContainers {
- private ILogTracer _log;
- private IStorage _storage;
- private ICreds _creds;
- private ArmClient _armClient;
- public Containers(ILogTracer log, IStorage storage, ICreds creds) {
- _log = log;
- _storage = storage;
- _creds = creds;
- _armClient = creds.ArmClient;
- }
- public async Task GetBlob(Container container, string name, StorageType storageType) {
- var client = await FindContainer(container, storageType);
-
- if (client == null) {
- return null;
- }
-
- try {
- return (await client.GetBlobClient(name).DownloadContentAsync())
- .Value.Content;
- } catch (RequestFailedException) {
- return null;
- }
- }
-
- public async Async.Task FindContainer(Container container, StorageType storageType) {
- // # check secondary accounts first by searching in reverse.
- // #
- // # By implementation, the primary account is specified first, followed by
- // # any secondary accounts.
- // #
- // # Secondary accounts, if they exist, are preferred for containers and have
- // # increased IOP rates, this should be a slight optimization
- return await _storage.GetAccounts(storageType)
- .Reverse()
- .Select(account => GetBlobService(account)?.GetBlobContainerClient(container.ContainerName))
- .ToAsyncEnumerable()
- .WhereAwait(async client => client != null && (await client.ExistsAsync()).Value)
- .FirstOrDefaultAsync();
- }
-
- private BlobServiceClient? GetBlobService(string accountId) {
- _log.Info($"getting blob container (account_id: {accountId}");
- var (accountName, accountKey) = _storage.GetStorageAccountNameAndKey(accountId);
- if (accountName == null) {
- _log.Error("Failed to get storage account name");
- return null;
- }
- var storageKeyCredential = new StorageSharedKeyCredential(accountName, accountKey);
- var accountUrl = GetUrl(accountName);
- return new BlobServiceClient(accountUrl, storageKeyCredential);
- }
-
- private static Uri GetUrl(string accountName) {
- return new Uri($"https://{accountName}.blob.core.windows.net/");
- }
-
- public async Async.Task GetFileSasUrl(Container container, string name, StorageType storageType, BlobSasPermissions permissions, TimeSpan? duration = null) {
- var client = await FindContainer(container, storageType) ?? throw new Exception($"unable to find container: {container.ContainerName} - {storageType}");
- var (accountName, accountKey) = _storage.GetStorageAccountNameAndKey(client.AccountName);
-
- var (startTime, endTime) = SasTimeWindow(duration ?? TimeSpan.FromDays(30));
-
- var sasBuilder = new BlobSasBuilder(permissions, endTime) {
- StartsOn = startTime,
- BlobContainerName = container.ContainerName,
- BlobName = name
- };
-
- var sasUrl = client.GetBlobClient(name).GenerateSasUri(sasBuilder);
- return sasUrl;
- }
-
- public (DateTimeOffset, DateTimeOffset) SasTimeWindow(TimeSpan timeSpan) {
- // SAS URLs are valid 6 hours earlier, primarily to work around dev
- // workstations having out-of-sync time. Additionally, SAS URLs are stopped
- // 15 minutes later than requested based on "Be careful with SAS start time"
- // guidance.
- // Ref: https://docs.microsoft.com/en-us/azure/storage/common/storage-sas-overview
-
- var SAS_START_TIME_DELTA = TimeSpan.FromHours(6);
- var SAS_END_TIME_DELTA = TimeSpan.FromMinutes(6);
-
- var now = DateTimeOffset.UtcNow;
- var start = now - SAS_START_TIME_DELTA;
- var expiry = now + timeSpan + SAS_END_TIME_DELTA;
- return (start, expiry);
- }
-
- public async System.Threading.Tasks.Task saveBlob(Container container, string name, string data, StorageType storageType) {
- var client = await FindContainer(container, storageType) ?? throw new Exception($"unable to find container: {container.ContainerName} - {storageType}");
-
- await client.UploadBlobAsync(name, new BinaryData(data));
- }
-
- public async Async.Task GetInstanceId() {
- var blob = await GetBlob(new Container("base-config"), "instance_id", StorageType.Config);
- if (blob == null) {
- throw new System.Exception("Blob Not Found");
- }
- return System.Guid.Parse(blob.ToString());
- }
-}
-
+using System.Threading.Tasks;
+using Azure;
+using Azure.ResourceManager;
+using Azure.Storage;
+using Azure.Storage.Blobs;
+using Azure.Storage.Sas;
+
+namespace Microsoft.OneFuzz.Service;
+
+
+public interface IContainers {
+ public Task GetBlob(Container container, string name, StorageType storageType);
+
+ public Async.Task FindContainer(Container container, StorageType storageType);
+
+ public Async.Task GetFileSasUrl(Container container, string name, StorageType storageType, BlobSasPermissions permissions, TimeSpan? duration = null);
+ Async.Task saveBlob(Container container, string v1, string v2, StorageType config);
+ Task GetInstanceId();
+}
+
+public class Containers : IContainers {
+ private ILogTracer _log;
+ private IStorage _storage;
+ private ICreds _creds;
+ private ArmClient _armClient;
+ public Containers(ILogTracer log, IStorage storage, ICreds creds) {
+ _log = log;
+ _storage = storage;
+ _creds = creds;
+ _armClient = creds.ArmClient;
+ }
+ public async Task GetBlob(Container container, string name, StorageType storageType) {
+ var client = await FindContainer(container, storageType);
+
+ if (client == null) {
+ return null;
+ }
+
+ try {
+ return (await client.GetBlobClient(name).DownloadContentAsync())
+ .Value.Content;
+ } catch (RequestFailedException) {
+ return null;
+ }
+ }
+
+ public async Async.Task FindContainer(Container container, StorageType storageType) {
+ // # check secondary accounts first by searching in reverse.
+ // #
+ // # By implementation, the primary account is specified first, followed by
+ // # any secondary accounts.
+ // #
+ // # Secondary accounts, if they exist, are preferred for containers and have
+ // # increased IOP rates, this should be a slight optimization
+ return await _storage.GetAccounts(storageType)
+ .Reverse()
+ .Select(account => GetBlobService(account)?.GetBlobContainerClient(container.ContainerName))
+ .ToAsyncEnumerable()
+ .WhereAwait(async client => client != null && (await client.ExistsAsync()).Value)
+ .FirstOrDefaultAsync();
+ }
+
+ private BlobServiceClient? GetBlobService(string accountId) {
+ _log.Info($"getting blob container (account_id: {accountId}");
+ var (accountName, accountKey) = _storage.GetStorageAccountNameAndKey(accountId);
+ if (accountName == null) {
+ _log.Error("Failed to get storage account name");
+ return null;
+ }
+ var storageKeyCredential = new StorageSharedKeyCredential(accountName, accountKey);
+ var accountUrl = GetUrl(accountName);
+ return new BlobServiceClient(accountUrl, storageKeyCredential);
+ }
+
+ private static Uri GetUrl(string accountName) {
+ return new Uri($"https://{accountName}.blob.core.windows.net/");
+ }
+
+ public async Async.Task GetFileSasUrl(Container container, string name, StorageType storageType, BlobSasPermissions permissions, TimeSpan? duration = null) {
+ var client = await FindContainer(container, storageType) ?? throw new Exception($"unable to find container: {container.ContainerName} - {storageType}");
+ var (accountName, accountKey) = _storage.GetStorageAccountNameAndKey(client.AccountName);
+
+ var (startTime, endTime) = SasTimeWindow(duration ?? TimeSpan.FromDays(30));
+
+ var sasBuilder = new BlobSasBuilder(permissions, endTime) {
+ StartsOn = startTime,
+ BlobContainerName = container.ContainerName,
+ BlobName = name
+ };
+
+ var sasUrl = client.GetBlobClient(name).GenerateSasUri(sasBuilder);
+ return sasUrl;
+ }
+
+ public (DateTimeOffset, DateTimeOffset) SasTimeWindow(TimeSpan timeSpan) {
+ // SAS URLs are valid 6 hours earlier, primarily to work around dev
+ // workstations having out-of-sync time. Additionally, SAS URLs are stopped
+ // 15 minutes later than requested based on "Be careful with SAS start time"
+ // guidance.
+ // Ref: https://docs.microsoft.com/en-us/azure/storage/common/storage-sas-overview
+
+ var SAS_START_TIME_DELTA = TimeSpan.FromHours(6);
+ var SAS_END_TIME_DELTA = TimeSpan.FromMinutes(6);
+
+ var now = DateTimeOffset.UtcNow;
+ var start = now - SAS_START_TIME_DELTA;
+ var expiry = now + timeSpan + SAS_END_TIME_DELTA;
+ return (start, expiry);
+ }
+
+ public async System.Threading.Tasks.Task saveBlob(Container container, string name, string data, StorageType storageType) {
+ var client = await FindContainer(container, storageType) ?? throw new Exception($"unable to find container: {container.ContainerName} - {storageType}");
+
+ await client.UploadBlobAsync(name, new BinaryData(data));
+ }
+
+ public async Async.Task GetInstanceId() {
+ var blob = await GetBlob(new Container("base-config"), "instance_id", StorageType.Config);
+ if (blob == null) {
+ throw new System.Exception("Blob Not Found");
+ }
+ return System.Guid.Parse(blob.ToString());
+ }
+}
diff --git a/src/ApiService/ApiService/onefuzzlib/Creds.cs b/src/ApiService/ApiService/onefuzzlib/Creds.cs
index 97b7d221c..8e2b8c871 100644
--- a/src/ApiService/ApiService/onefuzzlib/Creds.cs
+++ b/src/ApiService/ApiService/onefuzzlib/Creds.cs
@@ -14,6 +14,7 @@ public interface ICreds {
public ResourceIdentifier GetResourceGroupResourceIdentifier();
+ public string GetInstanceName();
public ArmClient ArmClient { get; }
@@ -59,6 +60,13 @@ public class Creds : ICreds {
return new ResourceIdentifier(resourceId);
}
+ public string GetInstanceName() {
+ var instanceName = _config.OneFuzzInstanceName
+ ?? throw new System.Exception("Instance Name env var is not present");
+
+ return instanceName;
+ }
+
public ResourceGroupResource GetResourceGroupResource() {
var resourceId = GetResourceGroupResourceIdentifier();
return ArmClient.GetResourceGroupResource(resourceId);
diff --git a/src/ApiService/ApiService/onefuzzlib/Network.cs b/src/ApiService/ApiService/onefuzzlib/Network.cs
index dd63f765b..0adf20cd7 100644
--- a/src/ApiService/ApiService/onefuzzlib/Network.cs
+++ b/src/ApiService/ApiService/onefuzzlib/Network.cs
@@ -55,5 +55,4 @@ public partial class TimerProxy {
}
-}
-
+}
diff --git a/src/ApiService/ApiService/onefuzzlib/ProxyOperations.cs b/src/ApiService/ApiService/onefuzzlib/ProxyOperations.cs
index 847bfa136..6c4697039 100644
--- a/src/ApiService/ApiService/onefuzzlib/ProxyOperations.cs
+++ b/src/ApiService/ApiService/onefuzzlib/ProxyOperations.cs
@@ -55,7 +55,7 @@ public class ProxyOperations : StatefulOrm, IProxyOperations {
}
_logTracer.Info($"creating proxy: region:{region}");
- var newProxy = new Proxy(region, Guid.NewGuid(), DateTimeOffset.UtcNow, VmState.Init, Auth.BuildAuth(), null, null, _config.OnefuzzVersion, null, false);
+ var newProxy = new Proxy(region, Guid.NewGuid(), DateTimeOffset.UtcNow, VmState.Init, Auth.BuildAuth(), null, null, _config.OneFuzzVersion, null, false);
await Replace(newProxy);
await _events.SendEvent(new EventProxyCreated(region, newProxy.ProxyId));
@@ -83,8 +83,8 @@ public class ProxyOperations : StatefulOrm, IProxyOperations {
return false;
}
- if (proxy.Version != _config.OnefuzzVersion) {
- _logTracer.Info($"mismatch version: proxy:{proxy.Version} service:{_config.OnefuzzVersion} state:{proxy.State}");
+ if (proxy.Version != _config.OneFuzzVersion) {
+ _logTracer.Info($"mismatch version: proxy:{proxy.Version} service:{_config.OneFuzzVersion} state:{proxy.State}");
return true;
}
diff --git a/src/ApiService/ApiService/onefuzzlib/Storage.cs b/src/ApiService/ApiService/onefuzzlib/Storage.cs
index 92775df8c..6e7b12f33 100644
--- a/src/ApiService/ApiService/onefuzzlib/Storage.cs
+++ b/src/ApiService/ApiService/onefuzzlib/Storage.cs
@@ -14,7 +14,6 @@ public interface IStorage {
public IEnumerable CorpusAccounts();
string GetPrimaryAccount(StorageType storageType);
public (string?, string?) GetStorageAccountNameAndKey(string accountId);
-
public IEnumerable GetAccounts(StorageType storageType);
}
@@ -98,6 +97,28 @@ public class Storage : IStorage {
return (resourceId.Name, key?.Value);
}
+ public string ChooseAccounts(StorageType storageType) {
+ var accounts = GetAccounts(storageType);
+ if (!accounts.Any()) {
+ throw new Exception($"No Storage Accounts for {storageType}");
+ }
+
+ var account_list = accounts.ToList();
+ if (account_list.Count == 1) {
+ return account_list[0];
+ }
+
+ // Use a random secondary storage account if any are available. This
+ // reduces IOP contention for the Storage Queues, which are only available
+ // on primary accounts
+ //
+ // security note: this is not used as a security feature
+ var random = new Random();
+ var index = random.Next(account_list.Count);
+
+ return account_list[index]; // nosec
+ }
+
public IEnumerable GetAccounts(StorageType storageType) {
switch (storageType) {
case StorageType.Corpus:
diff --git a/src/ApiService/ApiService/onefuzzlib/WebhookOperations.cs b/src/ApiService/ApiService/onefuzzlib/WebhookOperations.cs
index 9651cd9dc..b58c8a283 100644
--- a/src/ApiService/ApiService/onefuzzlib/WebhookOperations.cs
+++ b/src/ApiService/ApiService/onefuzzlib/WebhookOperations.cs
@@ -1,106 +1,253 @@
-using ApiService.OneFuzzLib.Orm;
-
-namespace Microsoft.OneFuzz.Service;
-
-
-public interface IWebhookMessageLogOperations : IOrm {
- IAsyncEnumerable SearchExpired();
-}
-
-
-public class WebhookMessageLogOperations : Orm, IWebhookMessageLogOperations {
- const int EXPIRE_DAYS = 7;
-
- record WebhookMessageQueueObj(
- Guid WebhookId,
- Guid EventId
- );
-
- private readonly IQueue _queue;
- private readonly ILogTracer _log;
- public WebhookMessageLogOperations(IStorage storage, IQueue queue, ILogTracer log, IServiceConfig config) : base(storage, log, config) {
- _queue = queue;
- _log = log;
- }
-
-
- public async Async.Task QueueWebhook(WebhookMessageLog webhookLog) {
- var obj = new WebhookMessageQueueObj(webhookLog.WebhookId, webhookLog.EventId);
-
- TimeSpan? visibilityTimeout = webhookLog.State switch {
- WebhookMessageState.Queued => TimeSpan.Zero,
- WebhookMessageState.Retrying => TimeSpan.FromSeconds(30),
- _ => null
- };
-
- if (visibilityTimeout == null) {
- _log.WithTags(
- new[] {
- ("WebhookId", webhookLog.WebhookId.ToString()),
- ("EventId", webhookLog.EventId.ToString()) }
- ).
- Error($"invalid WebhookMessage queue state, not queuing. {webhookLog.WebhookId}:{webhookLog.EventId} - {webhookLog.State}");
- } else {
- await _queue.QueueObject("webhooks", obj, StorageType.Config, visibilityTimeout: visibilityTimeout);
- }
- }
-
- private void QueueObject(string v, WebhookMessageQueueObj obj, StorageType config, int? visibility_timeout) {
- throw new NotImplementedException();
- }
-
- public IAsyncEnumerable SearchExpired() {
- var expireTime = (DateTimeOffset.UtcNow - TimeSpan.FromDays(EXPIRE_DAYS)).ToString("o");
-
- var timeFilter = $"Timestamp lt datetime'{expireTime}'";
- return QueryAsync(filter: timeFilter);
- }
-}
-
-
-public interface IWebhookOperations {
- Async.Task SendEvent(EventMessage eventMessage);
-}
-
-public class WebhookOperations : Orm, IWebhookOperations {
- private readonly IWebhookMessageLogOperations _webhookMessageLogOperations;
- private readonly ILogTracer _log;
- public WebhookOperations(IStorage storage, IWebhookMessageLogOperations webhookMessageLogOperations, ILogTracer log, IServiceConfig config)
- : base(storage, log, config) {
- _webhookMessageLogOperations = webhookMessageLogOperations;
- _log = log;
- }
-
- async public Async.Task SendEvent(EventMessage eventMessage) {
- await foreach (var webhook in GetWebhooksCached()) {
- if (!webhook.EventTypes.Contains(eventMessage.EventType)) {
- continue;
- }
- await AddEvent(webhook, eventMessage);
- }
- }
-
- async private Async.Task AddEvent(Webhook webhook, EventMessage eventMessage) {
- var message = new WebhookMessageLog(
- EventId: eventMessage.EventId,
- EventType: eventMessage.EventType,
- Event: eventMessage.Event,
- InstanceId: eventMessage.InstanceId,
- InstanceName: eventMessage.InstanceName,
- WebhookId: webhook.WebhookId
- );
-
- var r = await _webhookMessageLogOperations.Replace(message);
- if (!r.IsOk) {
- var (status, reason) = r.ErrorV;
- _log.Error($"Failed to replace webhook message log due to [{status}] {reason}");
- }
- }
-
-
- //todo: caching
- public IAsyncEnumerable GetWebhooksCached() {
- return QueryAsync();
- }
-
-}
+using System.Net;
+using System.Net.Http;
+using System.Security.Cryptography;
+using System.Text.Json;
+using ApiService.OneFuzzLib.Orm;
+using Microsoft.OneFuzz.Service.OneFuzzLib.Orm;
+
+namespace Microsoft.OneFuzz.Service;
+
+public interface IWebhookOperations {
+ Async.Task SendEvent(EventMessage eventMessage);
+ Async.Task GetByWebhookId(Guid webhookId);
+ Async.Task Send(WebhookMessageLog messageLog);
+}
+
+public class WebhookOperations : Orm, IWebhookOperations {
+
+ private readonly IWebhookMessageLogOperations _webhookMessageLogOperations;
+ private readonly ILogTracer _log;
+ private readonly ICreds _creds;
+ private readonly IContainers _containers;
+ private readonly IHttpClientFactory _httpFactory;
+
+ public WebhookOperations(IHttpClientFactory httpFactory, ICreds creds, IStorage storage, IWebhookMessageLogOperations webhookMessageLogOperations, IContainers containers, ILogTracer log, IServiceConfig config)
+ : base(storage, log, config) {
+ _webhookMessageLogOperations = webhookMessageLogOperations;
+ _log = log;
+ _creds = creds;
+ _containers = containers;
+ _httpFactory = httpFactory;
+ }
+
+ async public Async.Task SendEvent(EventMessage eventMessage) {
+ await foreach (var webhook in GetWebhooksCached()) {
+ if (!webhook.EventTypes.Contains(eventMessage.EventType)) {
+ continue;
+ }
+ await AddEvent(webhook, eventMessage);
+ }
+ }
+
+ async private Async.Task AddEvent(Webhook webhook, EventMessage eventMessage) {
+ var message = new WebhookMessageLog(
+ EventId: eventMessage.EventId,
+ EventType: eventMessage.EventType,
+ Event: eventMessage.Event,
+ InstanceId: eventMessage.InstanceId,
+ InstanceName: eventMessage.InstanceName,
+ WebhookId: webhook.WebhookId,
+ TryCount: 0
+ );
+
+ var r = await _webhookMessageLogOperations.Replace(message);
+ if (!r.IsOk) {
+ var (status, reason) = r.ErrorV;
+ _log.Error($"Failed to replace webhook message log due to [{status}] {reason}");
+ }
+ }
+
+ public async Async.Task Send(WebhookMessageLog messageLog) {
+ var webhook = await GetByWebhookId(messageLog.WebhookId);
+ if (webhook == null || webhook.Url == null) {
+ throw new Exception($"Invalid Webhook. Webhook with WebhookId: {messageLog.WebhookId} Not Found");
+ }
+
+ var (data, digest) = await BuildMessage(webhookId: webhook.WebhookId, eventId: messageLog.EventId, eventType: messageLog.EventType, webhookEvent: messageLog.Event, secretToken: webhook.SecretToken, messageFormat: webhook.MessageFormat);
+
+ var headers = new Dictionary { { "User-Agent", $"onefuzz-webhook {_config.OneFuzzVersion}" } };
+
+ if (digest != null) {
+ headers["X-Onefuzz-Digest"] = digest;
+ }
+
+ var client = new Request(_httpFactory.CreateClient());
+ _log.Info(data);
+ var response = client.Post(url: webhook.Url, json: data, headers: headers);
+ var result = response.Result;
+ if (result.StatusCode == HttpStatusCode.Accepted) {
+ return true;
+ }
+ return false;
+ }
+
+ // Not converting to bytes, as it's not neccessary in C#. Just keeping as string.
+ public async Async.Task> BuildMessage(Guid webhookId, Guid eventId, EventType eventType, BaseEvent webhookEvent, String? secretToken, WebhookMessageFormat? messageFormat) {
+ var entityConverter = new EntityConverter();
+ string data = "";
+ if (messageFormat != null && messageFormat == WebhookMessageFormat.EventGrid) {
+ var eventGridMessage = new[] { new WebhookMessageEventGrid(Id: eventId, Data: webhookEvent, DataVersion: "1.0.0", Subject: _creds.GetInstanceName(), EventType: eventType, EventTime: DateTimeOffset.UtcNow) };
+ data = JsonSerializer.Serialize(eventGridMessage, options: EntityConverter.GetJsonSerializerOptions());
+ } else {
+ var instanceId = await _containers.GetInstanceId();
+ var webhookMessage = new WebhookMessage(WebhookId: webhookId, EventId: eventId, EventType: eventType, Event: webhookEvent, InstanceId: instanceId, InstanceName: _creds.GetInstanceName());
+
+ data = JsonSerializer.Serialize(webhookMessage, options: EntityConverter.GetJsonSerializerOptions());
+ }
+
+ string? digest = null;
+ var hmac = HMAC.Create("HMACSHA512");
+ if (secretToken != null && hmac != null) {
+ hmac.Key = System.Text.Encoding.UTF8.GetBytes(secretToken);
+ digest = Convert.ToHexString(hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(data)));
+ }
+ return new Tuple(data, digest);
+
+ }
+
+ public async Async.Task GetByWebhookId(Guid webhookId) {
+ var data = QueryAsync(filter: $"PartitionKey eq '{webhookId}'");
+
+ return await data.FirstOrDefaultAsync();
+ }
+
+ //todo: caching
+ public IAsyncEnumerable GetWebhooksCached() {
+ return QueryAsync();
+ }
+
+}
+
+public interface IWebhookMessageLogOperations : IOrm {
+ IAsyncEnumerable SearchExpired();
+ public Async.Task ProcessFromQueue(WebhookMessageQueueObj obj);
+}
+
+
+public class WebhookMessageLogOperations : Orm, IWebhookMessageLogOperations {
+ const int EXPIRE_DAYS = 7;
+ const int MAX_TRIES = 5;
+
+ private readonly IQueue _queue;
+ private readonly ILogTracer _log;
+ private readonly IWebhookOperations _webhook;
+
+ public WebhookMessageLogOperations(IStorage storage, IQueue queue, ILogTracer log, IServiceConfig config, ICreds creds, IHttpClientFactory httpFactory, IContainers containers) : base(storage, log, config) {
+ _queue = queue;
+ _log = log;
+ _webhook = new WebhookOperations(httpFactory: httpFactory, creds: creds, storage: storage, webhookMessageLogOperations: this, containers: containers, log: log, config: config);
+ }
+
+
+ public async Async.Task QueueWebhook(WebhookMessageLog webhookLog) {
+ var obj = new WebhookMessageQueueObj(webhookLog.WebhookId, webhookLog.EventId);
+
+ TimeSpan? visibilityTimeout = webhookLog.State switch {
+ WebhookMessageState.Queued => TimeSpan.Zero,
+ WebhookMessageState.Retrying => TimeSpan.FromSeconds(30),
+ _ => null
+ };
+
+ if (visibilityTimeout == null) {
+ _log.WithTags(
+ new[] {
+ ("WebhookId", webhookLog.WebhookId.ToString()),
+ ("EventId", webhookLog.EventId.ToString()) }
+ ).
+ Error($"invalid WebhookMessage queue state, not queuing. {webhookLog.WebhookId}:{webhookLog.EventId} - {webhookLog.State}");
+ } else {
+ await _queue.QueueObject("webhooks", obj, StorageType.Config, visibilityTimeout: visibilityTimeout);
+ }
+ }
+
+ public async Async.Task ProcessFromQueue(WebhookMessageQueueObj obj) {
+ var message = await GetWebhookMessageById(obj.WebhookId, obj.EventId);
+
+ if (message == null) {
+ _log.WithTags(
+ new[] {
+ ("WebhookId", obj.WebhookId.ToString()),
+ ("EventId", obj.EventId.ToString()) }
+ ).
+ Error($"webhook message log not found for webhookId: {obj.WebhookId} and eventId: {obj.EventId}");
+ } else {
+ await Process(message);
+ }
+ }
+
+ private async System.Threading.Tasks.Task Process(WebhookMessageLog message) {
+
+ if (message.State == WebhookMessageState.Failed || message.State == WebhookMessageState.Succeeded) {
+ _log.WithTags(
+ new[] {
+ ("WebhookId", message.WebhookId.ToString()),
+ ("EventId", message.EventId.ToString()) }
+ ).
+ Error($"webhook message already handled. {message.WebhookId}:{message.EventId}");
+ return;
+ }
+
+ var newMessage = message with { TryCount = message.TryCount + 1 };
+
+ _log.Info($"sending webhook: {message.WebhookId}:{message.EventId}");
+ var success = await Send(newMessage);
+ if (success) {
+ newMessage = newMessage with { State = WebhookMessageState.Succeeded };
+ await Replace(newMessage);
+ _log.Info($"sent webhook event {newMessage.WebhookId}:{newMessage.EventId}");
+ } else if (newMessage.TryCount < MAX_TRIES) {
+ newMessage = newMessage with { State = WebhookMessageState.Retrying };
+ await Replace(newMessage);
+ await QueueWebhook(newMessage);
+ _log.Warning($"sending webhook event failed, re-queued {newMessage.WebhookId}:{newMessage.EventId}");
+ } else {
+ newMessage = newMessage with { State = WebhookMessageState.Failed };
+ await Replace(newMessage);
+ _log.Info($"sending webhook: {newMessage.WebhookId} event: {newMessage.EventId} failed {newMessage.TryCount} times.");
+ }
+
+ }
+
+ private async Async.Task Send(WebhookMessageLog message) {
+ var webhook = await _webhook.GetByWebhookId(message.WebhookId);
+ if (webhook == null) {
+ _log.WithTags(
+ new[] {
+ ("WebhookId", message.WebhookId.ToString()),
+ }
+ ).
+ Error($"webhook not found for webhookId: {message.WebhookId}");
+ return false;
+ }
+
+ try {
+ return await _webhook.Send(message);
+ } catch (Exception exc) {
+ _log.WithTags(
+ new[] {
+ ("WebhookId", message.WebhookId.ToString())
+ }
+ ).
+ Exception(exc);
+ return false;
+ }
+
+ }
+
+ private void QueueObject(string v, WebhookMessageQueueObj obj, StorageType config, int? visibility_timeout) {
+ throw new NotImplementedException();
+ }
+
+ public IAsyncEnumerable SearchExpired() {
+ var expireTime = (DateTimeOffset.UtcNow - TimeSpan.FromDays(EXPIRE_DAYS)).ToString("o");
+
+ var timeFilter = $"Timestamp lt datetime'{expireTime}'";
+ return QueryAsync(filter: timeFilter);
+ }
+
+ public async Async.Task GetWebhookMessageById(Guid webhookId, Guid eventId) {
+ var data = QueryAsync(filter: $"PartitionKey eq '{webhookId}' and RowKey eq '{eventId}'");
+
+ return await data.FirstOrDefaultAsync();
+ }
+}
diff --git a/src/ApiService/ApiService/packages.lock.json b/src/ApiService/ApiService/packages.lock.json
index 35c0b219f..2e1238ae4 100644
--- a/src/ApiService/ApiService/packages.lock.json
+++ b/src/ApiService/ApiService/packages.lock.json
@@ -1,1067 +1,1067 @@
-{
- "version": 1,
- "dependencies": {
- "net6.0": {
- "Azure.Core": {
- "type": "Direct",
- "requested": "[1.24.0, )",
- "resolved": "1.24.0",
- "contentHash": "+/qI1j2oU1S4/nvxb2k/wDsol00iGf1AyJX5g3epV7eOpQEP/2xcgh/cxgKMeFgn3U2fmgSiBnQZdkV+l5y0Uw==",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "1.1.1",
- "System.Diagnostics.DiagnosticSource": "4.6.0",
- "System.Memory.Data": "1.0.2",
- "System.Numerics.Vectors": "4.5.0",
- "System.Text.Encodings.Web": "4.7.2",
- "System.Text.Json": "4.7.2",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "Azure.Data.Tables": {
- "type": "Direct",
- "requested": "[12.5.0, )",
- "resolved": "12.5.0",
- "contentHash": "XeIxPf+rF1NXkX3NJSB0ZTNgU233vyPXGmaFsR0lUVibtWP/lj+Qu1FcPxoslURcX0KC+UgTb226nqVdHjoweQ==",
- "dependencies": {
- "Azure.Core": "1.22.0",
- "System.Text.Json": "4.7.2"
- }
- },
- "Azure.Identity": {
- "type": "Direct",
- "requested": "[1.6.0, )",
- "resolved": "1.6.0",
- "contentHash": "EycyMsb6rD2PK9P0SyibFfEhvWWttdrYhyPF4f41uzdB/44yQlV+2Wehxyg489Rj6gbPvSPgbKq0xsHJBhipZA==",
- "dependencies": {
- "Azure.Core": "1.24.0",
- "Microsoft.Identity.Client": "4.39.0",
- "Microsoft.Identity.Client.Extensions.Msal": "2.19.3",
- "System.Memory": "4.5.4",
- "System.Security.Cryptography.ProtectedData": "4.7.0",
- "System.Text.Json": "4.7.2",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "Azure.Messaging.EventGrid": {
- "type": "Direct",
- "requested": "[4.10.0, )",
- "resolved": "4.10.0",
- "contentHash": "X3dh3Cek/7wFPUrBJ2KbnkJteGjWvKBoSBmD/uQm8reMIavCFTKhnl95F937eLn/2cSsm5l3oPHtYPFtDerA7Q==",
- "dependencies": {
- "Azure.Core": "1.24.0",
- "System.Memory.Data": "1.0.2",
- "System.Text.Json": "4.7.2"
- }
- },
- "Azure.ResourceManager": {
- "type": "Direct",
- "requested": "[1.0.0, )",
- "resolved": "1.0.0",
- "contentHash": "UGaoiPcJ8a9Et030+F3zc2KhTssPAgPm7uXm4E9kyNI4jYYenUe6zj2J1bTimaTfcOZnn5scSjSYxKtZCzftcA==",
- "dependencies": {
- "Azure.Core": "1.24.0",
- "System.Text.Json": "4.7.2"
- }
- },
- "Azure.ResourceManager.Compute": {
- "type": "Direct",
- "requested": "[1.0.0-beta.8, )",
- "resolved": "1.0.0-beta.8",
- "contentHash": "rYYjjmEdmcOa8O4UgO/bdJ/qQclNZjuHdalxRJ0AhUHCORcM1f1BbIKR9CoN83IpfuEE+X+n5XY9QZcKvfrGVA==",
- "dependencies": {
- "Azure.Core": "1.24.0",
- "Azure.ResourceManager": "1.0.0",
- "System.Text.Json": "4.7.2"
- }
- },
- "Azure.ResourceManager.Network": {
- "type": "Direct",
- "requested": "[1.0.0-beta.7, )",
- "resolved": "1.0.0-beta.7",
- "contentHash": "Ih8tb6OwxEEEEXATVzgX6oHJzVr9p4X6GfOfBnNAI3aIt9+G8blyQLltaCcJAGJ+dO1sBT/Nalgj/HinO+cBlw==",
- "dependencies": {
- "Azure.Core": "1.24.0",
- "Azure.ResourceManager": "1.0.0",
- "System.Text.Json": "4.7.2"
- }
- },
- "Azure.ResourceManager.Resources": {
- "type": "Direct",
- "requested": "[1.0.0, )",
- "resolved": "1.0.0",
- "contentHash": "oNQRWfh05v9BiY8DMQjV+++kVafR+3ry2FGfMKObovKNfAb4i5J6DQpv0CUIx4jeIZe0fnhxyXRRCe293YtMqw==",
- "dependencies": {
- "Azure.Core": "1.24.0",
- "Azure.ResourceManager": "1.0.0",
- "System.Text.Json": "4.7.2"
- }
- },
- "Azure.ResourceManager.Storage": {
- "type": "Direct",
- "requested": "[1.0.0-beta.8, )",
- "resolved": "1.0.0-beta.8",
- "contentHash": "tlVqStqG53lyGxr0dRq2KSkFdeC/+NQImWgsRXD9o5R4qBia4cx7zAGYBlnDeUxh1WldSZF5ZsBi2n5SAwxbxQ==",
- "dependencies": {
- "Azure.Core": "1.24.0",
- "Azure.ResourceManager": "1.0.0",
- "System.Text.Json": "4.7.2"
- }
- },
- "Azure.Security.KeyVault.Secrets": {
- "type": "Direct",
- "requested": "[4.3.0, )",
- "resolved": "4.3.0",
- "contentHash": "GRnmQzTXDVABry1rC8PwuVOHSDCUGn4Om1ABTCzWfHdDSOwRydtQ13ucJ1Z0YtdajklNwxEL6lhHGhFCI0diAw==",
- "dependencies": {
- "Azure.Core": "1.23.0",
- "System.Memory": "4.5.4",
- "System.Text.Json": "4.7.2",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "Azure.Storage.Blobs": {
- "type": "Direct",
- "requested": "[12.11.0, )",
- "resolved": "12.11.0",
- "contentHash": "50eRjIhY7Q1JN7kT2MSawDKCcwSb7uRZUkz00P/BLjSg47gm2hxUYsnJPyvzCHntYMbOWzrvaVQTwYwXabaR5Q==",
- "dependencies": {
- "Azure.Storage.Common": "12.10.0",
- "System.Text.Json": "4.7.2"
- }
- },
- "Azure.Storage.Queues": {
- "type": "Direct",
- "requested": "[12.9.0, )",
- "resolved": "12.9.0",
- "contentHash": "jDiyHtsCUCrWNvZW7SjJnJb46UhpdgQrWCbL8aWpapDHlq9LvbvxYpfLh4dfKAz09QiTznLMIU3i+md9+7GzqQ==",
- "dependencies": {
- "Azure.Storage.Common": "12.10.0",
- "System.Memory.Data": "1.0.2",
- "System.Text.Json": "4.7.2"
- }
- },
- "Faithlife.Utility": {
- "type": "Direct",
- "requested": "[0.12.2, )",
- "resolved": "0.12.2",
- "contentHash": "JgMAGj8ekeAzKkagubXqf1UqgfHq89GyA1UQYWbkAe441uRr2Rh2rktkx5Z0LPwmD/aOqu9cxjekD2GZjP8rbw=="
- },
- "Microsoft.Azure.Functions.Worker": {
- "type": "Direct",
- "requested": "[1.6.0, )",
- "resolved": "1.6.0",
- "contentHash": "Gzq2IPcMCym6wPpFayLbuvhrfr72OEInJJlKaIAqU9+HldVaTt54cm3hPe7kIok+QuWnwb/TtYtlmrkR0Nbhsg==",
- "dependencies": {
- "Azure.Core": "1.10.0",
- "Microsoft.Azure.Functions.Worker.Core": "1.4.0",
- "Microsoft.Azure.Functions.Worker.Grpc": "1.3.1",
- "Microsoft.Extensions.Hosting": "5.0.0",
- "Microsoft.Extensions.Hosting.Abstractions": "5.0.0"
- }
- },
- "Microsoft.Azure.Functions.Worker.Extensions.EventGrid": {
- "type": "Direct",
- "requested": "[2.1.0, )",
- "resolved": "2.1.0",
- "contentHash": "8Kjhxaj2gK2Bi5K5jiNAG/e9tTlRItFNCINj+kfUDMBbf5lsiZUBChyAQCxrnITeHKkwAtgXB7GBX4W1Xcoc0A==",
- "dependencies": {
- "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.0.0"
- }
- },
- "Microsoft.Azure.Functions.Worker.Extensions.Http": {
- "type": "Direct",
- "requested": "[3.0.13, )",
- "resolved": "3.0.13",
- "contentHash": "GX41psGbjLSPKuFnBcGGB7PAAdhfLsgxvGVsyGq/jQwgGwjAVRRx2UbSl35+imKwCPZdT5vGjq6YV1rgXIeEvA==",
- "dependencies": {
- "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.0.0"
- }
- },
- "Microsoft.Azure.Functions.Worker.Extensions.SignalRService": {
- "type": "Direct",
- "requested": "[1.7.0, )",
- "resolved": "1.7.0",
- "contentHash": "mgk7ZnrXLPCI70cYgqxi+TJMJJgRMPYzZwIFMpxP2cto3D6XSxbF8eGj46T4DwopBBqWpfJ4Y2QFB93hNb4Yxg==",
- "dependencies": {
- "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.1.0",
- "Microsoft.Extensions.Primitives": "5.0.1",
- "System.Text.Json": "5.0.2"
- }
- },
- "Microsoft.Azure.Functions.Worker.Extensions.Storage": {
- "type": "Direct",
- "requested": "[5.0.0, )",
- "resolved": "5.0.0",
- "contentHash": "VwcmWk29//8CkXCxCR7vxMnqsuh+O0018eavRCGscI+uRKHdvlHDG97vwfdwuTzwKuoo7ztQbAvHfkp+sxoiEQ==",
- "dependencies": {
- "Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs": "5.0.0",
- "Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues": "5.0.0"
- }
- },
- "Microsoft.Azure.Functions.Worker.Extensions.Timer": {
- "type": "Direct",
- "requested": "[4.1.0, )",
- "resolved": "4.1.0",
- "contentHash": "8HvZaChaw40EKBfBew0XG132YhO6bEw0nznvey7gkhm9thUe6wkA2LXTXHXxcYefbx0rlh57WedSiJgKTG7MvQ==",
- "dependencies": {
- "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.0.0"
- }
- },
- "Microsoft.Azure.Functions.Worker.Sdk": {
- "type": "Direct",
- "requested": "[1.3.0, )",
- "resolved": "1.3.0",
- "contentHash": "g9oXOl9xr1O3alWItAiYLNu3BnXebLW51BRB06yuO86LPGRZewyJu88EwUdC2NU9wnIeE3/ObMuEAnRALZeuTQ==",
- "dependencies": {
- "Microsoft.Azure.Functions.Worker.Sdk.Analyzers": "1.1.0"
- }
- },
- "Microsoft.Extensions.Logging.ApplicationInsights": {
- "type": "Direct",
- "requested": "[2.20.0, )",
- "resolved": "2.20.0",
- "contentHash": "phuNUDeTlffkJi6zAsMQNOpijNOQ4Olda1WL2L+F33u4fqXmY+EGQnPg81rHW6dOXIYCQvrQUr2gVN5NNMvwKA==",
- "dependencies": {
- "Microsoft.ApplicationInsights": "2.20.0",
- "Microsoft.Extensions.Logging": "2.1.1"
- }
- },
- "Microsoft.Graph": {
- "type": "Direct",
- "requested": "[4.24.0, )",
- "resolved": "4.24.0",
- "contentHash": "OPyHQ+EzuYjp3XExGB0SvySXY3pxU+bXLl3ADdvje/yOMFvpNOpEu111tmh2aM/RCplaoMQjBA5oa9pUVIH0cg==",
- "dependencies": {
- "Microsoft.Graph.Core": "2.0.8"
- }
- },
- "Microsoft.Identity.Client": {
- "type": "Direct",
- "requested": "[4.43.0, )",
- "resolved": "4.43.0",
- "contentHash": "uaUMZB3Ywi7IPVvgRZOQotlYhD8sA4wtZESkA0qF9SYAifr1RzJyaGTFtfbAyZ/J5kGUhRklrCJIRpd0MaihKQ=="
- },
- "Microsoft.Identity.Web.TokenCache": {
- "type": "Direct",
- "requested": "[1.23.1, )",
- "resolved": "1.23.1",
- "contentHash": "fU85i6XDUXL/z6B+pTmNZbof0hL9Jkgsi6GWpQEWjL7Ek0GH0A8btxbqzojPCRdGN7EK/vyEVu5Smy9/spZj2g==",
- "dependencies": {
- "Microsoft.AspNetCore.DataProtection": "5.0.8",
- "Microsoft.Extensions.Caching.Memory": "5.0.0",
- "Microsoft.Extensions.Logging": "5.0.0",
- "Microsoft.Identity.Client": "4.42.0",
- "System.Text.Encodings.Web": "5.0.1"
- }
- },
- "System.IdentityModel.Tokens.Jwt": {
- "type": "Direct",
- "requested": "[6.17.0, )",
- "resolved": "6.17.0",
- "contentHash": "G3rY4WLr54Mo+97+AEq0ANpiKvW7E8Qu5bKWfVMa7rkyJtvrOxUqp/OLqrGw/6JDbD5GlxnAtFKukGteUuB0rQ==",
- "dependencies": {
- "Microsoft.IdentityModel.JsonWebTokens": "6.17.0",
- "Microsoft.IdentityModel.Tokens": "6.17.0"
- }
- },
- "System.Linq.Async": {
- "type": "Direct",
- "requested": "[6.0.1, )",
- "resolved": "6.0.1",
- "contentHash": "0YhHcaroWpQ9UCot3Pizah7ryAzQhNvobLMSxeDIGmnXfkQn8u5owvpOH0K6EVB+z9L7u6Cc4W17Br/+jyttEQ==",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "6.0.0"
- }
- },
- "Azure.Storage.Common": {
- "type": "Transitive",
- "resolved": "12.10.0",
- "contentHash": "vYkHGzUkdZTace/cDPZLG+Mh/EoPqQuGxDIBOau9D+XWoDPmuUFGk325aXplkFE4JFGpSwoytNYzk/qBCaiHqg==",
- "dependencies": {
- "Azure.Core": "1.22.0",
- "System.IO.Hashing": "6.0.0"
- }
- },
- "Google.Protobuf": {
- "type": "Transitive",
- "resolved": "3.15.8",
- "contentHash": "tA0S9QXJq+r3CjwBlcn5glEUrbdAxhPWO4yhq5+ycn6WW6+nsvqzO6Qf6NE9XWbEz/F2QSpBTxjdTI7SvVy7CQ==",
- "dependencies": {
- "System.Memory": "4.5.3",
- "System.Runtime.CompilerServices.Unsafe": "4.5.2"
- }
- },
- "Grpc.Core.Api": {
- "type": "Transitive",
- "resolved": "2.37.0",
- "contentHash": "ubqW2nTpiHyDudYGVXM+Vjh6WbgsI1fVQxsDK14/GnyPgiNMuNl8+GQcAYp5QPhAk5H4fjHJPI+KvbpVk8z6iQ==",
- "dependencies": {
- "System.Memory": "4.5.3"
- }
- },
- "Grpc.Net.Client": {
- "type": "Transitive",
- "resolved": "2.37.0",
- "contentHash": "oMDNXAPkBzfXljv/ZzlZSf22TEstBNI6je85/c3iztlFbbixTMLgi0sIu/uHtEKoEWUPr0nmBMvD+jtqKorGTg==",
- "dependencies": {
- "Grpc.Net.Common": "2.37.0",
- "Microsoft.Extensions.Logging.Abstractions": "3.0.3"
- }
- },
- "Grpc.Net.ClientFactory": {
- "type": "Transitive",
- "resolved": "2.37.0",
- "contentHash": "zyeFej1A36+s5K6+zDUirmDEGHEFnHapQisT7YsR9nQqKsw1uYqjtG1gSVSg/Zvk0KYeLHs5/URtTU71kS4APg==",
- "dependencies": {
- "Grpc.Net.Client": "2.37.0",
- "Microsoft.Extensions.Http": "3.0.3"
- }
- },
- "Grpc.Net.Common": {
- "type": "Transitive",
- "resolved": "2.37.0",
- "contentHash": "V7fZb+87qB6Jio6uWXDHkxI9WT+y4EFwicAHkzB2lm/9wJazD0V35HhQjxvoONsldObaUimjqd4b/XZ0G07sDQ==",
- "dependencies": {
- "Grpc.Core.Api": "2.37.0"
- }
- },
- "Microsoft.ApplicationInsights": {
- "type": "Transitive",
- "resolved": "2.20.0",
- "contentHash": "mb+EC5j06Msn5HhKrhrsMAst6JxvYUnphQMGY2cixCabgGAO3q79Y8o/p1Zce1Azgd1IVkRKAMzAV4vDCbXOqA==",
- "dependencies": {
- "System.Diagnostics.DiagnosticSource": "5.0.0"
- }
- },
- "Microsoft.AspNetCore.Cryptography.Internal": {
- "type": "Transitive",
- "resolved": "5.0.8",
- "contentHash": "giHheyNLOb+cAHpb8b0GhaS0xJ+hAIIDSyWPe5aOPwpgctsjOPRKFyn/268xv+zBVuEtyRJJEnBUlkOVzyIpZA=="
- },
- "Microsoft.AspNetCore.DataProtection": {
- "type": "Transitive",
- "resolved": "5.0.8",
- "contentHash": "wCMdfuKA+ePcB4nEDau5tNhhhC5NFa2LEXoRhk2Xaot13FFlyKA4t5UzIyV/OnAfB/bqbAIvChJD+biWY7u5SA==",
- "dependencies": {
- "Microsoft.AspNetCore.Cryptography.Internal": "5.0.8",
- "Microsoft.AspNetCore.DataProtection.Abstractions": "5.0.8",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
- "Microsoft.Extensions.Hosting.Abstractions": "5.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
- "Microsoft.Extensions.Options": "5.0.0",
- "Microsoft.Win32.Registry": "5.0.0",
- "System.Security.Cryptography.Xml": "5.0.0"
- }
- },
- "Microsoft.AspNetCore.DataProtection.Abstractions": {
- "type": "Transitive",
- "resolved": "5.0.8",
- "contentHash": "ZI9S2NGjuOKXN3PxJcF8EKVwd1cqpWyUSqiVoH8gqq5tlHaXULwPmoR0DBOFON4sEFETRWI69f5RQ3tJWw205A=="
- },
- "Microsoft.Azure.Functions.Worker.Core": {
- "type": "Transitive",
- "resolved": "1.4.0",
- "contentHash": "6fTSb6JDm+1CNKsaPziL36c3tfN4xxYnC9XoJsm0g9tY+72dVqUa2aPc6RtkwBmT5sjNrsUDlUC+IhG+ehjppQ==",
- "dependencies": {
- "Azure.Core": "1.10.0",
- "Microsoft.Extensions.Hosting": "5.0.0",
- "Microsoft.Extensions.Hosting.Abstractions": "5.0.0"
- }
- },
- "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": {
- "type": "Transitive",
- "resolved": "1.1.0",
- "contentHash": "kAs9BTuzdOvyuN2m5CYyQzyvzXKJ6hhIOgcwm0W8Q+Fwj91a1eBmRSi9pVzpM4V3skNt/+pkPD3wxFD4nEw0bg=="
- },
- "Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "Cr+ziBQA/Lyt5rMURHBje+foGook+B82gnAfEE32bHcXGlpKJnnVdLqHy0OqHliUksFddkRYS2gY8dYx+NH/mA==",
- "dependencies": {
- "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.1.0"
- }
- },
- "Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "cF95kiiU6PD9sptrV3GKQKzRv2DYATYNTpOtvUtbAYQ4xPFKgF4ke3fDBcu+cu2O1/C8FQ7MhzkEQv00bx552A==",
- "dependencies": {
- "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.1.0"
- }
- },
- "Microsoft.Azure.Functions.Worker.Grpc": {
- "type": "Transitive",
- "resolved": "1.3.1",
- "contentHash": "lMlbyfRagSQZVWN73jnaB0tVTMhfKHSy6IvFXC7fCGh+7uA9LJNjcMOQbVkUnmvb/I/SxslMqD7xcebrxFL3TQ==",
- "dependencies": {
- "Azure.Core": "1.10.0",
- "Google.Protobuf": "3.15.8",
- "Grpc.Net.Client": "2.37.0",
- "Grpc.Net.ClientFactory": "2.37.0",
- "Microsoft.Azure.Functions.Worker.Core": "1.3.1",
- "Microsoft.Extensions.Hosting": "5.0.0",
- "Microsoft.Extensions.Hosting.Abstractions": "5.0.0"
- }
- },
- "Microsoft.Azure.Functions.Worker.Sdk.Analyzers": {
- "type": "Transitive",
- "resolved": "1.1.0",
- "contentHash": "J7AZ9iv/UCd4Di0c84h1P/Sa1aQr5uqO0EBUKwE0AZeWJ11dDfKAwxMiAxYOKR+giy31DWBnuFc4GKY3BQYUjg=="
- },
- "Microsoft.Bcl.AsyncInterfaces": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg=="
- },
- "Microsoft.CSharp": {
- "type": "Transitive",
- "resolved": "4.5.0",
- "contentHash": "kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ=="
- },
- "Microsoft.Extensions.Caching.Abstractions": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "bu8As90/SBAouMZ6fJ+qRNo1X+KgHGrVueFhhYi+E5WqEhcnp2HoWRFnMzXQ6g4RdZbvPowFerSbKNH4Dtg5yg==",
- "dependencies": {
- "Microsoft.Extensions.Primitives": "5.0.0"
- }
- },
- "Microsoft.Extensions.Caching.Memory": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "/1qPCleFOkJe0O+xmFqCNLFYQZTJz965sVw8CUB/BQgsApBwzAUsL2BUkDvQW+geRUVTXUS9zLa0pBjC2VJ1gA==",
- "dependencies": {
- "Microsoft.Extensions.Caching.Abstractions": "5.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
- "Microsoft.Extensions.Options": "5.0.0",
- "Microsoft.Extensions.Primitives": "5.0.0"
- }
- },
- "Microsoft.Extensions.Configuration": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "LN322qEKHjuVEhhXueTUe7RNePooZmS8aGid5aK2woX3NPjSnONFyKUc6+JknOS6ce6h2tCLfKPTBXE3mN/6Ag==",
- "dependencies": {
- "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
- "Microsoft.Extensions.Primitives": "5.0.0"
- }
- },
- "Microsoft.Extensions.Configuration.Abstractions": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "ETjSBHMp3OAZ4HxGQYpwyGsD8Sw5FegQXphi0rpoGMT74S4+I2mm7XJEswwn59XAaKOzC15oDSOWEE8SzDCd6Q==",
- "dependencies": {
- "Microsoft.Extensions.Primitives": "5.0.0"
- }
- },
- "Microsoft.Extensions.Configuration.Binder": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "Of1Irt1+NzWO+yEYkuDh5TpT4On7LKl98Q9iLqCdOZps6XXEWDj3AKtmyvzJPVXZe4apmkJJIiDL7rR1yC+hjQ==",
- "dependencies": {
- "Microsoft.Extensions.Configuration.Abstractions": "5.0.0"
- }
- },
- "Microsoft.Extensions.Configuration.CommandLine": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "OelM+VQdhZ0XMXsEQBq/bt3kFzD+EBGqR4TAgFDRAye0JfvHAaRi+3BxCRcwqUAwDhV0U0HieljBGHlTgYseRA==",
- "dependencies": {
- "Microsoft.Extensions.Configuration": "5.0.0",
- "Microsoft.Extensions.Configuration.Abstractions": "5.0.0"
- }
- },
- "Microsoft.Extensions.Configuration.EnvironmentVariables": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "fqh6y6hAi0Z0fRsb4B/mP9OkKkSlifh5osa+N/YSQ+/S2a//+zYApZMUC1XeP9fdjlgZoPQoZ72Q2eLHyKLddQ==",
- "dependencies": {
- "Microsoft.Extensions.Configuration": "5.0.0",
- "Microsoft.Extensions.Configuration.Abstractions": "5.0.0"
- }
- },
- "Microsoft.Extensions.Configuration.FileExtensions": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "rRdspYKA18ViPOISwAihhCMbusHsARCOtDMwa23f+BGEdIjpKPlhs3LLjmKlxfhpGXBjIsS0JpXcChjRUN+PAw==",
- "dependencies": {
- "Microsoft.Extensions.Configuration": "5.0.0",
- "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
- "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0",
- "Microsoft.Extensions.FileProviders.Physical": "5.0.0",
- "Microsoft.Extensions.Primitives": "5.0.0"
- }
- },
- "Microsoft.Extensions.Configuration.Json": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "Pak8ymSUfdzPfBTLHxeOwcR32YDbuVfhnH2hkfOLnJNQd19ItlBdpMjIDY9C5O/nS2Sn9bzDMai0ZrvF7KyY/Q==",
- "dependencies": {
- "Microsoft.Extensions.Configuration": "5.0.0",
- "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
- "Microsoft.Extensions.Configuration.FileExtensions": "5.0.0",
- "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0"
- }
- },
- "Microsoft.Extensions.Configuration.UserSecrets": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "+tK3seG68106lN277YWQvqmfyI/89w0uTu/5Gz5VYSUu5TI4mqwsaWLlSmT9Bl1yW/i1Nr06gHJxqaqB5NU9Tw==",
- "dependencies": {
- "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
- "Microsoft.Extensions.Configuration.Json": "5.0.0",
- "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0",
- "Microsoft.Extensions.FileProviders.Physical": "5.0.0"
- }
- },
- "Microsoft.Extensions.DependencyInjection": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "Rc2kb/p3Ze6cP6rhFC3PJRdWGbLvSHZc0ev7YlyeU6FmHciDMLrhoVoTUEzKPhN5ZjFgKF1Cf5fOz8mCMIkvpA==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0"
- }
- },
- "Microsoft.Extensions.DependencyInjection.Abstractions": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA=="
- },
- "Microsoft.Extensions.FileProviders.Abstractions": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "iuZIiZ3mteEb+nsUqpGXKx2cGF+cv6gWPd5jqQI4hzqdiJ6I94ddLjKhQOuRW1lueHwocIw30xbSHGhQj0zjdQ==",
- "dependencies": {
- "Microsoft.Extensions.Primitives": "5.0.0"
- }
- },
- "Microsoft.Extensions.FileProviders.Physical": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "1rkd8UO2qf21biwO7X0hL9uHP7vtfmdv/NLvKgCRHkdz1XnW8zVQJXyEYiN68WYpExgtVWn55QF0qBzgfh1mGg==",
- "dependencies": {
- "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0",
- "Microsoft.Extensions.FileSystemGlobbing": "5.0.0",
- "Microsoft.Extensions.Primitives": "5.0.0"
- }
- },
- "Microsoft.Extensions.FileSystemGlobbing": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "ArliS8lGk8sWRtrWpqI8yUVYJpRruPjCDT+EIjrgkA/AAPRctlAkRISVZ334chAKktTLzD1+PK8F5IZpGedSqA=="
- },
- "Microsoft.Extensions.Hosting": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "hiokSU1TOVfcqpQAnpiOzP2rE9p+niq92g5yeAnwlbSrUlIdIS6M8emCknZvhdOagQA9x5YWNwe1n0kFUwE0NQ==",
- "dependencies": {
- "Microsoft.Extensions.Configuration": "5.0.0",
- "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
- "Microsoft.Extensions.Configuration.Binder": "5.0.0",
- "Microsoft.Extensions.Configuration.CommandLine": "5.0.0",
- "Microsoft.Extensions.Configuration.EnvironmentVariables": "5.0.0",
- "Microsoft.Extensions.Configuration.FileExtensions": "5.0.0",
- "Microsoft.Extensions.Configuration.Json": "5.0.0",
- "Microsoft.Extensions.Configuration.UserSecrets": "5.0.0",
- "Microsoft.Extensions.DependencyInjection": "5.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
- "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0",
- "Microsoft.Extensions.FileProviders.Physical": "5.0.0",
- "Microsoft.Extensions.Hosting.Abstractions": "5.0.0",
- "Microsoft.Extensions.Logging": "5.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
- "Microsoft.Extensions.Logging.Configuration": "5.0.0",
- "Microsoft.Extensions.Logging.Console": "5.0.0",
- "Microsoft.Extensions.Logging.Debug": "5.0.0",
- "Microsoft.Extensions.Logging.EventLog": "5.0.0",
- "Microsoft.Extensions.Logging.EventSource": "5.0.0",
- "Microsoft.Extensions.Options": "5.0.0"
- }
- },
- "Microsoft.Extensions.Hosting.Abstractions": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "cbUOCePYBl1UhM+N2zmDSUyJ6cODulbtUd9gEzMFIK3RQDtP/gJsE08oLcBSXH3Q1RAQ0ex7OAB3HeTKB9bXpg==",
- "dependencies": {
- "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
- "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0"
- }
- },
- "Microsoft.Extensions.Http": {
- "type": "Transitive",
- "resolved": "3.0.3",
- "contentHash": "dcyB8szIcSynjVZRuFgqkZpPgTc5zeRSj1HMXSmNqWbHYKiPYJl8ZQgBHz6wmZNSUUNGpCs5uxUg8DZHHDC1Ew==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "3.0.3",
- "Microsoft.Extensions.Logging": "3.0.3",
- "Microsoft.Extensions.Options": "3.0.3"
- }
- },
- "Microsoft.Extensions.Logging": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "MgOwK6tPzB6YNH21wssJcw/2MKwee8b2gI7SllYfn6rvTpIrVvVS5HAjSU2vqSku1fwqRvWP0MdIi14qjd93Aw==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection": "5.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
- "Microsoft.Extensions.Options": "5.0.0"
- }
- },
- "Microsoft.Extensions.Logging.Abstractions": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "NxP6ahFcBnnSfwNBi2KH2Oz8Xl5Sm2krjId/jRR3I7teFphwiUoUeZPwTNA21EX+5PtjqmyAvKaOeBXcJjcH/w=="
- },
- "Microsoft.Extensions.Logging.Configuration": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "N3/d0HeMRnBekadbZlmbp+In8EvNNkQHSdbtRzjrGVckdZWpYs5GNrAfaYqVplDFW0WUedSaFJ3khB50BWYGsw==",
- "dependencies": {
- "Microsoft.Extensions.Configuration": "5.0.0",
- "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
- "Microsoft.Extensions.Configuration.Binder": "5.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
- "Microsoft.Extensions.Logging": "5.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
- "Microsoft.Extensions.Options": "5.0.0",
- "Microsoft.Extensions.Options.ConfigurationExtensions": "5.0.0"
- }
- },
- "Microsoft.Extensions.Logging.Console": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "jH0wbWhfvXjOVmCkbra4vbiovDtTUIWLQjCeJ7Xun3h4AHvwfzm7V7wlsXKs3tNnPrsCxZ9oaV0vUAgGY1JxOA==",
- "dependencies": {
- "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
- "Microsoft.Extensions.Logging": "5.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
- "Microsoft.Extensions.Logging.Configuration": "5.0.0",
- "Microsoft.Extensions.Options": "5.0.0",
- "Microsoft.Extensions.Options.ConfigurationExtensions": "5.0.0"
- }
- },
- "Microsoft.Extensions.Logging.Debug": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "9dvt0xqRrClvhaPNpfyS39WxnW9G55l5lrV5ZX7IrEgwo4VwtmJKtoPiKVYKbhAuOBGUI5WY3hWLvF+PSbJp5A==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
- "Microsoft.Extensions.Logging": "5.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "5.0.0"
- }
- },
- "Microsoft.Extensions.Logging.EventLog": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "CYzsgF2lqgahGl/HuErsIDaZZ9ueN+MBjGfO/0jVDLPaXLaywxlGKFpDgXMaB053DRYZwD1H2Lb1I60mTXS3jg==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
- "Microsoft.Extensions.Logging": "5.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
- "Microsoft.Extensions.Options": "5.0.0",
- "System.Diagnostics.EventLog": "5.0.0"
- }
- },
- "Microsoft.Extensions.Logging.EventSource": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "hF+D6PJkrM0qXcSEGs1BwZwgP8c0BRkj26P/5wmYTcHKOp52GRey/Z/YKRmRIHIrXxj9tz/JgIjU9oWmiJ5HMw==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
- "Microsoft.Extensions.Logging": "5.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
- "Microsoft.Extensions.Options": "5.0.0",
- "Microsoft.Extensions.Primitives": "5.0.0"
- }
- },
- "Microsoft.Extensions.Options": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "CBvR92TCJ5uBIdd9/HzDSrxYak+0W/3+yxrNg8Qm6Bmrkh5L+nu6m3WeazQehcZ5q1/6dDA7J5YdQjim0165zg==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
- "Microsoft.Extensions.Primitives": "5.0.0"
- }
- },
- "Microsoft.Extensions.Options.ConfigurationExtensions": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "280RxNJqOeQqq47aJLy5D9LN61CAWeuRA83gPToQ8B9jl9SNdQ5EXjlfvF66zQI5AXMl+C/3hGnbtIEN+X3mqA==",
- "dependencies": {
- "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
- "Microsoft.Extensions.Configuration.Binder": "5.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
- "Microsoft.Extensions.Options": "5.0.0",
- "Microsoft.Extensions.Primitives": "5.0.0"
- }
- },
- "Microsoft.Extensions.Primitives": {
- "type": "Transitive",
- "resolved": "5.0.1",
- "contentHash": "5WPSmL4YeP7eW+Vc8XZ4DwjYWBAiSwDV9Hm63JJWcz1Ie3Xjv4KuJXzgCstj48LkLfVCYa7mLcx7y+q6yqVvtw=="
- },
- "Microsoft.Graph.Core": {
- "type": "Transitive",
- "resolved": "2.0.8",
- "contentHash": "CcsCgY1O+LQaKMJkQCpVZPmK6uiFFUu49MwqTxoTBYtFG2/NwyGAIpla5gct8jWlS0DBKXWAyRlIzKt/6UGIDQ==",
- "dependencies": {
- "Azure.Core": "1.22.0",
- "Microsoft.Identity.Client": "4.41.0",
- "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.15.1",
- "System.Diagnostics.DiagnosticSource": "4.7.1",
- "System.Security.Claims": "4.3.0",
- "System.Text.Json": "6.0.2"
- }
- },
- "Microsoft.Identity.Client.Extensions.Msal": {
- "type": "Transitive",
- "resolved": "2.19.3",
- "contentHash": "zVVZjn8aW7W79rC1crioDgdOwaFTQorsSO6RgVlDDjc7MvbEGz071wSNrjVhzR0CdQn6Sefx7Abf1o7vasmrLg==",
- "dependencies": {
- "Microsoft.Identity.Client": "4.38.0",
- "System.Security.Cryptography.ProtectedData": "4.5.0"
- }
- },
- "Microsoft.IdentityModel.JsonWebTokens": {
- "type": "Transitive",
- "resolved": "6.17.0",
- "contentHash": "I3cSVE185qF3a222/iQIdmBFhrhZBtz7wZ1RUUbMuHC1un79XCI7vggbWdmbqIttFcUoeziemadO6t+3FLjcSA==",
- "dependencies": {
- "Microsoft.IdentityModel.Tokens": "6.17.0"
- }
- },
- "Microsoft.IdentityModel.Logging": {
- "type": "Transitive",
- "resolved": "6.17.0",
- "contentHash": "Ix6/CMLDoo939NDf1ARDuGK6YERY7pAX9WYbfwb4gZqx7r52unMFIykJk+zlEBX7jjtbDz/0uzikQFvheV9KsQ=="
- },
- "Microsoft.IdentityModel.Protocols": {
- "type": "Transitive",
- "resolved": "6.15.1",
- "contentHash": "6nHr+4yE8vj620Vy4L0pl7kmkvWc06wBrJ+AOo/gjqzu/UD/MYgySUqRGlZYrvvNmKkUWMw4hdn78MPCb4bstA==",
- "dependencies": {
- "Microsoft.IdentityModel.Logging": "6.15.1",
- "Microsoft.IdentityModel.Tokens": "6.15.1"
- }
- },
- "Microsoft.IdentityModel.Protocols.OpenIdConnect": {
- "type": "Transitive",
- "resolved": "6.15.1",
- "contentHash": "WwecgT/PNrytLNUWjkYtnnG2LXMAzkINSaZM+8dPPiEpOGz1bQDBWAenTSurYICxGoA1sOPriFXk+ocnQyprKw==",
- "dependencies": {
- "Microsoft.IdentityModel.Protocols": "6.15.1",
- "System.IdentityModel.Tokens.Jwt": "6.15.1"
- }
- },
- "Microsoft.IdentityModel.Tokens": {
- "type": "Transitive",
- "resolved": "6.17.0",
- "contentHash": "mhOe+d9BQg5U45TkTCyXAFOjl7RvwaFj6v9qo8b+WFolkuGsfjSFfQ+WI9D3ho9sD/fK75gvL4JptmjLzyUPkw==",
- "dependencies": {
- "Microsoft.CSharp": "4.5.0",
- "Microsoft.IdentityModel.Logging": "6.17.0",
- "System.Security.Cryptography.Cng": "4.5.0"
- }
- },
- "Microsoft.NETCore.Platforms": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ=="
- },
- "Microsoft.NETCore.Targets": {
- "type": "Transitive",
- "resolved": "1.1.0",
- "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg=="
- },
- "Microsoft.Win32.Registry": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
- "dependencies": {
- "System.Security.AccessControl": "5.0.0",
- "System.Security.Principal.Windows": "5.0.0"
- }
- },
- "Microsoft.Win32.SystemEvents": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "5.0.0"
- }
- },
- "System.Collections": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0",
- "System.Runtime": "4.3.0"
- }
- },
- "System.Diagnostics.DiagnosticSource": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "tCQTzPsGZh/A9LhhA6zrqCRV4hOHsK90/G7q3Khxmn6tnB1PuNU0cRaKANP2AWcF9bn0zsuOoZOSrHuJk6oNBA=="
- },
- "System.Diagnostics.EventLog": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "FHkCwUfsTs+/5tsK+c0egLfacUgbhvcwi3wUFWSEEArSXao343mYqcpOVVFMlcCkdNtjU4YwAWaKYwal6f02og==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "5.0.0",
- "Microsoft.Win32.Registry": "5.0.0",
- "System.Security.Principal.Windows": "5.0.0"
- }
- },
- "System.Drawing.Common": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "SztFwAnpfKC8+sEKXAFxCBWhKQaEd97EiOL7oZJZP56zbqnLpmxACWA8aGseaUExciuEAUuR9dY8f7HkTRAdnw==",
- "dependencies": {
- "Microsoft.Win32.SystemEvents": "5.0.0"
- }
- },
- "System.Formats.Asn1": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "MTvUIktmemNB+El0Fgw9egyqT9AYSIk6DTJeoDSpc3GIHxHCMo8COqkWT1mptX5tZ1SlQ6HJZ0OsSvMth1c12w=="
- },
- "System.Globalization": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0",
- "System.Runtime": "4.3.0"
- }
- },
- "System.IO": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0",
- "System.Runtime": "4.3.0",
- "System.Text.Encoding": "4.3.0",
- "System.Threading.Tasks": "4.3.0"
- }
- },
- "System.IO.Hashing": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "Rfm2jYCaUeGysFEZjDe7j1R4x6Z6BzumS/vUT5a1AA/AWJuGX71PoGB0RmpyX3VmrGqVnAwtfMn39OHR8Y/5+g=="
- },
- "System.Memory": {
- "type": "Transitive",
- "resolved": "4.5.4",
- "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw=="
- },
- "System.Memory.Data": {
- "type": "Transitive",
- "resolved": "1.0.2",
- "contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==",
- "dependencies": {
- "System.Text.Encodings.Web": "4.7.2",
- "System.Text.Json": "4.6.0"
- }
- },
- "System.Numerics.Vectors": {
- "type": "Transitive",
- "resolved": "4.5.0",
- "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
- },
- "System.Reflection": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0",
- "System.IO": "4.3.0",
- "System.Reflection.Primitives": "4.3.0",
- "System.Runtime": "4.3.0"
- }
- },
- "System.Reflection.Primitives": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0",
- "System.Runtime": "4.3.0"
- }
- },
- "System.Resources.ResourceManager": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0",
- "System.Globalization": "4.3.0",
- "System.Reflection": "4.3.0",
- "System.Runtime": "4.3.0"
- }
- },
- "System.Runtime": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0"
- }
- },
- "System.Runtime.CompilerServices.Unsafe": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
- },
- "System.Runtime.Extensions": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0",
- "System.Runtime": "4.3.0"
- }
- },
- "System.Security.AccessControl": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "5.0.0",
- "System.Security.Principal.Windows": "5.0.0"
- }
- },
- "System.Security.Claims": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==",
- "dependencies": {
- "System.Collections": "4.3.0",
- "System.Globalization": "4.3.0",
- "System.IO": "4.3.0",
- "System.Resources.ResourceManager": "4.3.0",
- "System.Runtime": "4.3.0",
- "System.Runtime.Extensions": "4.3.0",
- "System.Security.Principal": "4.3.0"
- }
- },
- "System.Security.Cryptography.Cng": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "jIMXsKn94T9JY7PvPq/tMfqa6GAaHpElRDpmG+SuL+D3+sTw2M8VhnibKnN8Tq+4JqbPJ/f+BwtLeDMEnzAvRg==",
- "dependencies": {
- "System.Formats.Asn1": "5.0.0"
- }
- },
- "System.Security.Cryptography.Pkcs": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "9TPLGjBCGKmNvG8pjwPeuYy0SMVmGZRwlTZvyPHDbYv/DRkoeumJdfumaaDNQzVGMEmbWtg07zUpSW9q70IlDQ==",
- "dependencies": {
- "System.Formats.Asn1": "5.0.0",
- "System.Security.Cryptography.Cng": "5.0.0"
- }
- },
- "System.Security.Cryptography.ProtectedData": {
- "type": "Transitive",
- "resolved": "4.7.0",
- "contentHash": "ehYW0m9ptxpGWvE4zgqongBVWpSDU/JCFD4K7krxkQwSz/sFQjEXCUqpvencjy6DYDbn7Ig09R8GFffu8TtneQ=="
- },
- "System.Security.Cryptography.Xml": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "MYmkHtCW+paFmPGFDktnLdOeH3zUrNchbZNki87E1ejNSMm9enSRbJokmvFrsWUrDE4bRE1lVeAle01+t6SGhA==",
- "dependencies": {
- "System.Security.Cryptography.Pkcs": "5.0.0",
- "System.Security.Permissions": "5.0.0"
- }
- },
- "System.Security.Permissions": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "uE8juAhEkp7KDBCdjDIE3H9R1HJuEHqeqX8nLX9gmYKWwsqk3T5qZlPx8qle5DPKimC/Fy3AFTdV7HamgCh9qQ==",
- "dependencies": {
- "System.Security.AccessControl": "5.0.0",
- "System.Windows.Extensions": "5.0.0"
- }
- },
- "System.Security.Principal": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==",
- "dependencies": {
- "System.Runtime": "4.3.0"
- }
- },
- "System.Security.Principal.Windows": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA=="
- },
- "System.Text.Encoding": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0",
- "System.Runtime": "4.3.0"
- }
- },
- "System.Text.Encodings.Web": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==",
- "dependencies": {
- "System.Runtime.CompilerServices.Unsafe": "6.0.0"
- }
- },
- "System.Text.Json": {
- "type": "Transitive",
- "resolved": "6.0.2",
- "contentHash": "0nE2gwXLn3PTBOPwORLqwuYvWB+Beomt9ZBX+6LmogMNKUvfD1SoDb/ycB1vBntT94rGaB/SvxEyeLu14H6aEg==",
- "dependencies": {
- "System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "6.0.0"
- }
- },
- "System.Threading.Tasks": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0",
- "System.Runtime": "4.3.0"
- }
- },
- "System.Threading.Tasks.Extensions": {
- "type": "Transitive",
- "resolved": "4.5.4",
- "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg=="
- },
- "System.Windows.Extensions": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "c1ho9WU9ZxMZawML+ssPKZfdnrg/OjR3pe0m9v8230z3acqphwvPJqzAkH54xRYm5ntZHGG1EPP3sux9H3qSPg==",
- "dependencies": {
- "System.Drawing.Common": "5.0.0"
- }
- }
- }
- }
+{
+ "version": 1,
+ "dependencies": {
+ "net6.0": {
+ "Azure.Core": {
+ "type": "Direct",
+ "requested": "[1.24.0, )",
+ "resolved": "1.24.0",
+ "contentHash": "+/qI1j2oU1S4/nvxb2k/wDsol00iGf1AyJX5g3epV7eOpQEP/2xcgh/cxgKMeFgn3U2fmgSiBnQZdkV+l5y0Uw==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "1.1.1",
+ "System.Diagnostics.DiagnosticSource": "4.6.0",
+ "System.Memory.Data": "1.0.2",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Text.Encodings.Web": "4.7.2",
+ "System.Text.Json": "4.7.2",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Azure.Data.Tables": {
+ "type": "Direct",
+ "requested": "[12.5.0, )",
+ "resolved": "12.5.0",
+ "contentHash": "XeIxPf+rF1NXkX3NJSB0ZTNgU233vyPXGmaFsR0lUVibtWP/lj+Qu1FcPxoslURcX0KC+UgTb226nqVdHjoweQ==",
+ "dependencies": {
+ "Azure.Core": "1.22.0",
+ "System.Text.Json": "4.7.2"
+ }
+ },
+ "Azure.Identity": {
+ "type": "Direct",
+ "requested": "[1.6.0, )",
+ "resolved": "1.6.0",
+ "contentHash": "EycyMsb6rD2PK9P0SyibFfEhvWWttdrYhyPF4f41uzdB/44yQlV+2Wehxyg489Rj6gbPvSPgbKq0xsHJBhipZA==",
+ "dependencies": {
+ "Azure.Core": "1.24.0",
+ "Microsoft.Identity.Client": "4.39.0",
+ "Microsoft.Identity.Client.Extensions.Msal": "2.19.3",
+ "System.Memory": "4.5.4",
+ "System.Security.Cryptography.ProtectedData": "4.7.0",
+ "System.Text.Json": "4.7.2",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Azure.Messaging.EventGrid": {
+ "type": "Direct",
+ "requested": "[4.10.0, )",
+ "resolved": "4.10.0",
+ "contentHash": "X3dh3Cek/7wFPUrBJ2KbnkJteGjWvKBoSBmD/uQm8reMIavCFTKhnl95F937eLn/2cSsm5l3oPHtYPFtDerA7Q==",
+ "dependencies": {
+ "Azure.Core": "1.24.0",
+ "System.Memory.Data": "1.0.2",
+ "System.Text.Json": "4.7.2"
+ }
+ },
+ "Azure.ResourceManager": {
+ "type": "Direct",
+ "requested": "[1.0.0, )",
+ "resolved": "1.0.0",
+ "contentHash": "UGaoiPcJ8a9Et030+F3zc2KhTssPAgPm7uXm4E9kyNI4jYYenUe6zj2J1bTimaTfcOZnn5scSjSYxKtZCzftcA==",
+ "dependencies": {
+ "Azure.Core": "1.24.0",
+ "System.Text.Json": "4.7.2"
+ }
+ },
+ "Azure.ResourceManager.Compute": {
+ "type": "Direct",
+ "requested": "[1.0.0-beta.8, )",
+ "resolved": "1.0.0-beta.8",
+ "contentHash": "rYYjjmEdmcOa8O4UgO/bdJ/qQclNZjuHdalxRJ0AhUHCORcM1f1BbIKR9CoN83IpfuEE+X+n5XY9QZcKvfrGVA==",
+ "dependencies": {
+ "Azure.Core": "1.24.0",
+ "Azure.ResourceManager": "1.0.0",
+ "System.Text.Json": "4.7.2"
+ }
+ },
+ "Azure.ResourceManager.Network": {
+ "type": "Direct",
+ "requested": "[1.0.0-beta.7, )",
+ "resolved": "1.0.0-beta.7",
+ "contentHash": "Ih8tb6OwxEEEEXATVzgX6oHJzVr9p4X6GfOfBnNAI3aIt9+G8blyQLltaCcJAGJ+dO1sBT/Nalgj/HinO+cBlw==",
+ "dependencies": {
+ "Azure.Core": "1.24.0",
+ "Azure.ResourceManager": "1.0.0",
+ "System.Text.Json": "4.7.2"
+ }
+ },
+ "Azure.ResourceManager.Resources": {
+ "type": "Direct",
+ "requested": "[1.0.0, )",
+ "resolved": "1.0.0",
+ "contentHash": "oNQRWfh05v9BiY8DMQjV+++kVafR+3ry2FGfMKObovKNfAb4i5J6DQpv0CUIx4jeIZe0fnhxyXRRCe293YtMqw==",
+ "dependencies": {
+ "Azure.Core": "1.24.0",
+ "Azure.ResourceManager": "1.0.0",
+ "System.Text.Json": "4.7.2"
+ }
+ },
+ "Azure.ResourceManager.Storage": {
+ "type": "Direct",
+ "requested": "[1.0.0-beta.8, )",
+ "resolved": "1.0.0-beta.8",
+ "contentHash": "tlVqStqG53lyGxr0dRq2KSkFdeC/+NQImWgsRXD9o5R4qBia4cx7zAGYBlnDeUxh1WldSZF5ZsBi2n5SAwxbxQ==",
+ "dependencies": {
+ "Azure.Core": "1.24.0",
+ "Azure.ResourceManager": "1.0.0",
+ "System.Text.Json": "4.7.2"
+ }
+ },
+ "Azure.Security.KeyVault.Secrets": {
+ "type": "Direct",
+ "requested": "[4.3.0, )",
+ "resolved": "4.3.0",
+ "contentHash": "GRnmQzTXDVABry1rC8PwuVOHSDCUGn4Om1ABTCzWfHdDSOwRydtQ13ucJ1Z0YtdajklNwxEL6lhHGhFCI0diAw==",
+ "dependencies": {
+ "Azure.Core": "1.23.0",
+ "System.Memory": "4.5.4",
+ "System.Text.Json": "4.7.2",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Azure.Storage.Blobs": {
+ "type": "Direct",
+ "requested": "[12.11.0, )",
+ "resolved": "12.11.0",
+ "contentHash": "50eRjIhY7Q1JN7kT2MSawDKCcwSb7uRZUkz00P/BLjSg47gm2hxUYsnJPyvzCHntYMbOWzrvaVQTwYwXabaR5Q==",
+ "dependencies": {
+ "Azure.Storage.Common": "12.10.0",
+ "System.Text.Json": "4.7.2"
+ }
+ },
+ "Azure.Storage.Queues": {
+ "type": "Direct",
+ "requested": "[12.9.0, )",
+ "resolved": "12.9.0",
+ "contentHash": "jDiyHtsCUCrWNvZW7SjJnJb46UhpdgQrWCbL8aWpapDHlq9LvbvxYpfLh4dfKAz09QiTznLMIU3i+md9+7GzqQ==",
+ "dependencies": {
+ "Azure.Storage.Common": "12.10.0",
+ "System.Memory.Data": "1.0.2",
+ "System.Text.Json": "4.7.2"
+ }
+ },
+ "Faithlife.Utility": {
+ "type": "Direct",
+ "requested": "[0.12.2, )",
+ "resolved": "0.12.2",
+ "contentHash": "JgMAGj8ekeAzKkagubXqf1UqgfHq89GyA1UQYWbkAe441uRr2Rh2rktkx5Z0LPwmD/aOqu9cxjekD2GZjP8rbw=="
+ },
+ "Microsoft.Azure.Functions.Worker": {
+ "type": "Direct",
+ "requested": "[1.6.0, )",
+ "resolved": "1.6.0",
+ "contentHash": "Gzq2IPcMCym6wPpFayLbuvhrfr72OEInJJlKaIAqU9+HldVaTt54cm3hPe7kIok+QuWnwb/TtYtlmrkR0Nbhsg==",
+ "dependencies": {
+ "Azure.Core": "1.10.0",
+ "Microsoft.Azure.Functions.Worker.Core": "1.4.0",
+ "Microsoft.Azure.Functions.Worker.Grpc": "1.3.1",
+ "Microsoft.Extensions.Hosting": "5.0.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "5.0.0"
+ }
+ },
+ "Microsoft.Azure.Functions.Worker.Extensions.EventGrid": {
+ "type": "Direct",
+ "requested": "[2.1.0, )",
+ "resolved": "2.1.0",
+ "contentHash": "8Kjhxaj2gK2Bi5K5jiNAG/e9tTlRItFNCINj+kfUDMBbf5lsiZUBChyAQCxrnITeHKkwAtgXB7GBX4W1Xcoc0A==",
+ "dependencies": {
+ "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.0.0"
+ }
+ },
+ "Microsoft.Azure.Functions.Worker.Extensions.Http": {
+ "type": "Direct",
+ "requested": "[3.0.13, )",
+ "resolved": "3.0.13",
+ "contentHash": "GX41psGbjLSPKuFnBcGGB7PAAdhfLsgxvGVsyGq/jQwgGwjAVRRx2UbSl35+imKwCPZdT5vGjq6YV1rgXIeEvA==",
+ "dependencies": {
+ "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.0.0"
+ }
+ },
+ "Microsoft.Azure.Functions.Worker.Extensions.SignalRService": {
+ "type": "Direct",
+ "requested": "[1.7.0, )",
+ "resolved": "1.7.0",
+ "contentHash": "mgk7ZnrXLPCI70cYgqxi+TJMJJgRMPYzZwIFMpxP2cto3D6XSxbF8eGj46T4DwopBBqWpfJ4Y2QFB93hNb4Yxg==",
+ "dependencies": {
+ "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.1.0",
+ "Microsoft.Extensions.Primitives": "5.0.1",
+ "System.Text.Json": "5.0.2"
+ }
+ },
+ "Microsoft.Azure.Functions.Worker.Extensions.Storage": {
+ "type": "Direct",
+ "requested": "[5.0.0, )",
+ "resolved": "5.0.0",
+ "contentHash": "VwcmWk29//8CkXCxCR7vxMnqsuh+O0018eavRCGscI+uRKHdvlHDG97vwfdwuTzwKuoo7ztQbAvHfkp+sxoiEQ==",
+ "dependencies": {
+ "Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs": "5.0.0",
+ "Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues": "5.0.0"
+ }
+ },
+ "Microsoft.Azure.Functions.Worker.Extensions.Timer": {
+ "type": "Direct",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "8HvZaChaw40EKBfBew0XG132YhO6bEw0nznvey7gkhm9thUe6wkA2LXTXHXxcYefbx0rlh57WedSiJgKTG7MvQ==",
+ "dependencies": {
+ "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.0.0"
+ }
+ },
+ "Microsoft.Azure.Functions.Worker.Sdk": {
+ "type": "Direct",
+ "requested": "[1.3.0, )",
+ "resolved": "1.3.0",
+ "contentHash": "g9oXOl9xr1O3alWItAiYLNu3BnXebLW51BRB06yuO86LPGRZewyJu88EwUdC2NU9wnIeE3/ObMuEAnRALZeuTQ==",
+ "dependencies": {
+ "Microsoft.Azure.Functions.Worker.Sdk.Analyzers": "1.1.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.ApplicationInsights": {
+ "type": "Direct",
+ "requested": "[2.20.0, )",
+ "resolved": "2.20.0",
+ "contentHash": "phuNUDeTlffkJi6zAsMQNOpijNOQ4Olda1WL2L+F33u4fqXmY+EGQnPg81rHW6dOXIYCQvrQUr2gVN5NNMvwKA==",
+ "dependencies": {
+ "Microsoft.ApplicationInsights": "2.20.0",
+ "Microsoft.Extensions.Logging": "2.1.1"
+ }
+ },
+ "Microsoft.Graph": {
+ "type": "Direct",
+ "requested": "[4.24.0, )",
+ "resolved": "4.24.0",
+ "contentHash": "OPyHQ+EzuYjp3XExGB0SvySXY3pxU+bXLl3ADdvje/yOMFvpNOpEu111tmh2aM/RCplaoMQjBA5oa9pUVIH0cg==",
+ "dependencies": {
+ "Microsoft.Graph.Core": "2.0.8"
+ }
+ },
+ "Microsoft.Identity.Client": {
+ "type": "Direct",
+ "requested": "[4.43.0, )",
+ "resolved": "4.43.0",
+ "contentHash": "uaUMZB3Ywi7IPVvgRZOQotlYhD8sA4wtZESkA0qF9SYAifr1RzJyaGTFtfbAyZ/J5kGUhRklrCJIRpd0MaihKQ=="
+ },
+ "Microsoft.Identity.Web.TokenCache": {
+ "type": "Direct",
+ "requested": "[1.23.1, )",
+ "resolved": "1.23.1",
+ "contentHash": "fU85i6XDUXL/z6B+pTmNZbof0hL9Jkgsi6GWpQEWjL7Ek0GH0A8btxbqzojPCRdGN7EK/vyEVu5Smy9/spZj2g==",
+ "dependencies": {
+ "Microsoft.AspNetCore.DataProtection": "5.0.8",
+ "Microsoft.Extensions.Caching.Memory": "5.0.0",
+ "Microsoft.Extensions.Logging": "5.0.0",
+ "Microsoft.Identity.Client": "4.42.0",
+ "System.Text.Encodings.Web": "5.0.1"
+ }
+ },
+ "System.IdentityModel.Tokens.Jwt": {
+ "type": "Direct",
+ "requested": "[6.17.0, )",
+ "resolved": "6.17.0",
+ "contentHash": "G3rY4WLr54Mo+97+AEq0ANpiKvW7E8Qu5bKWfVMa7rkyJtvrOxUqp/OLqrGw/6JDbD5GlxnAtFKukGteUuB0rQ==",
+ "dependencies": {
+ "Microsoft.IdentityModel.JsonWebTokens": "6.17.0",
+ "Microsoft.IdentityModel.Tokens": "6.17.0"
+ }
+ },
+ "System.Linq.Async": {
+ "type": "Direct",
+ "requested": "[6.0.1, )",
+ "resolved": "6.0.1",
+ "contentHash": "0YhHcaroWpQ9UCot3Pizah7ryAzQhNvobLMSxeDIGmnXfkQn8u5owvpOH0K6EVB+z9L7u6Cc4W17Br/+jyttEQ==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "6.0.0"
+ }
+ },
+ "Azure.Storage.Common": {
+ "type": "Transitive",
+ "resolved": "12.10.0",
+ "contentHash": "vYkHGzUkdZTace/cDPZLG+Mh/EoPqQuGxDIBOau9D+XWoDPmuUFGk325aXplkFE4JFGpSwoytNYzk/qBCaiHqg==",
+ "dependencies": {
+ "Azure.Core": "1.22.0",
+ "System.IO.Hashing": "6.0.0"
+ }
+ },
+ "Google.Protobuf": {
+ "type": "Transitive",
+ "resolved": "3.15.8",
+ "contentHash": "tA0S9QXJq+r3CjwBlcn5glEUrbdAxhPWO4yhq5+ycn6WW6+nsvqzO6Qf6NE9XWbEz/F2QSpBTxjdTI7SvVy7CQ==",
+ "dependencies": {
+ "System.Memory": "4.5.3",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.2"
+ }
+ },
+ "Grpc.Core.Api": {
+ "type": "Transitive",
+ "resolved": "2.37.0",
+ "contentHash": "ubqW2nTpiHyDudYGVXM+Vjh6WbgsI1fVQxsDK14/GnyPgiNMuNl8+GQcAYp5QPhAk5H4fjHJPI+KvbpVk8z6iQ==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "Grpc.Net.Client": {
+ "type": "Transitive",
+ "resolved": "2.37.0",
+ "contentHash": "oMDNXAPkBzfXljv/ZzlZSf22TEstBNI6je85/c3iztlFbbixTMLgi0sIu/uHtEKoEWUPr0nmBMvD+jtqKorGTg==",
+ "dependencies": {
+ "Grpc.Net.Common": "2.37.0",
+ "Microsoft.Extensions.Logging.Abstractions": "3.0.3"
+ }
+ },
+ "Grpc.Net.ClientFactory": {
+ "type": "Transitive",
+ "resolved": "2.37.0",
+ "contentHash": "zyeFej1A36+s5K6+zDUirmDEGHEFnHapQisT7YsR9nQqKsw1uYqjtG1gSVSg/Zvk0KYeLHs5/URtTU71kS4APg==",
+ "dependencies": {
+ "Grpc.Net.Client": "2.37.0",
+ "Microsoft.Extensions.Http": "3.0.3"
+ }
+ },
+ "Grpc.Net.Common": {
+ "type": "Transitive",
+ "resolved": "2.37.0",
+ "contentHash": "V7fZb+87qB6Jio6uWXDHkxI9WT+y4EFwicAHkzB2lm/9wJazD0V35HhQjxvoONsldObaUimjqd4b/XZ0G07sDQ==",
+ "dependencies": {
+ "Grpc.Core.Api": "2.37.0"
+ }
+ },
+ "Microsoft.ApplicationInsights": {
+ "type": "Transitive",
+ "resolved": "2.20.0",
+ "contentHash": "mb+EC5j06Msn5HhKrhrsMAst6JxvYUnphQMGY2cixCabgGAO3q79Y8o/p1Zce1Azgd1IVkRKAMzAV4vDCbXOqA==",
+ "dependencies": {
+ "System.Diagnostics.DiagnosticSource": "5.0.0"
+ }
+ },
+ "Microsoft.AspNetCore.Cryptography.Internal": {
+ "type": "Transitive",
+ "resolved": "5.0.8",
+ "contentHash": "giHheyNLOb+cAHpb8b0GhaS0xJ+hAIIDSyWPe5aOPwpgctsjOPRKFyn/268xv+zBVuEtyRJJEnBUlkOVzyIpZA=="
+ },
+ "Microsoft.AspNetCore.DataProtection": {
+ "type": "Transitive",
+ "resolved": "5.0.8",
+ "contentHash": "wCMdfuKA+ePcB4nEDau5tNhhhC5NFa2LEXoRhk2Xaot13FFlyKA4t5UzIyV/OnAfB/bqbAIvChJD+biWY7u5SA==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Cryptography.Internal": "5.0.8",
+ "Microsoft.AspNetCore.DataProtection.Abstractions": "5.0.8",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0",
+ "Microsoft.Win32.Registry": "5.0.0",
+ "System.Security.Cryptography.Xml": "5.0.0"
+ }
+ },
+ "Microsoft.AspNetCore.DataProtection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "5.0.8",
+ "contentHash": "ZI9S2NGjuOKXN3PxJcF8EKVwd1cqpWyUSqiVoH8gqq5tlHaXULwPmoR0DBOFON4sEFETRWI69f5RQ3tJWw205A=="
+ },
+ "Microsoft.Azure.Functions.Worker.Core": {
+ "type": "Transitive",
+ "resolved": "1.4.0",
+ "contentHash": "6fTSb6JDm+1CNKsaPziL36c3tfN4xxYnC9XoJsm0g9tY+72dVqUa2aPc6RtkwBmT5sjNrsUDlUC+IhG+ehjppQ==",
+ "dependencies": {
+ "Azure.Core": "1.10.0",
+ "Microsoft.Extensions.Hosting": "5.0.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "5.0.0"
+ }
+ },
+ "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "kAs9BTuzdOvyuN2m5CYyQzyvzXKJ6hhIOgcwm0W8Q+Fwj91a1eBmRSi9pVzpM4V3skNt/+pkPD3wxFD4nEw0bg=="
+ },
+ "Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "Cr+ziBQA/Lyt5rMURHBje+foGook+B82gnAfEE32bHcXGlpKJnnVdLqHy0OqHliUksFddkRYS2gY8dYx+NH/mA==",
+ "dependencies": {
+ "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.1.0"
+ }
+ },
+ "Microsoft.Azure.Functions.Worker.Extensions.Storage.Queues": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "cF95kiiU6PD9sptrV3GKQKzRv2DYATYNTpOtvUtbAYQ4xPFKgF4ke3fDBcu+cu2O1/C8FQ7MhzkEQv00bx552A==",
+ "dependencies": {
+ "Microsoft.Azure.Functions.Worker.Extensions.Abstractions": "1.1.0"
+ }
+ },
+ "Microsoft.Azure.Functions.Worker.Grpc": {
+ "type": "Transitive",
+ "resolved": "1.3.1",
+ "contentHash": "lMlbyfRagSQZVWN73jnaB0tVTMhfKHSy6IvFXC7fCGh+7uA9LJNjcMOQbVkUnmvb/I/SxslMqD7xcebrxFL3TQ==",
+ "dependencies": {
+ "Azure.Core": "1.10.0",
+ "Google.Protobuf": "3.15.8",
+ "Grpc.Net.Client": "2.37.0",
+ "Grpc.Net.ClientFactory": "2.37.0",
+ "Microsoft.Azure.Functions.Worker.Core": "1.3.1",
+ "Microsoft.Extensions.Hosting": "5.0.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "5.0.0"
+ }
+ },
+ "Microsoft.Azure.Functions.Worker.Sdk.Analyzers": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "J7AZ9iv/UCd4Di0c84h1P/Sa1aQr5uqO0EBUKwE0AZeWJ11dDfKAwxMiAxYOKR+giy31DWBnuFc4GKY3BQYUjg=="
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "UcSjPsst+DfAdJGVDsu346FX0ci0ah+lw3WRtn18NUwEqRt70HaOQ7lI72vy3+1LxtqI3T5GWwV39rQSrCzAeg=="
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "kaj6Wb4qoMuH3HySFJhxwQfe8R/sJsNJnANrvv8WdFPMoNbKY5htfNscv+LHCu5ipz+49m2e+WQXpLXr9XYemQ=="
+ },
+ "Microsoft.Extensions.Caching.Abstractions": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "bu8As90/SBAouMZ6fJ+qRNo1X+KgHGrVueFhhYi+E5WqEhcnp2HoWRFnMzXQ6g4RdZbvPowFerSbKNH4Dtg5yg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Caching.Memory": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "/1qPCleFOkJe0O+xmFqCNLFYQZTJz965sVw8CUB/BQgsApBwzAUsL2BUkDvQW+geRUVTXUS9zLa0pBjC2VJ1gA==",
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Abstractions": "5.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0",
+ "Microsoft.Extensions.Primitives": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "LN322qEKHjuVEhhXueTUe7RNePooZmS8aGid5aK2woX3NPjSnONFyKUc6+JknOS6ce6h2tCLfKPTBXE3mN/6Ag==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Primitives": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "ETjSBHMp3OAZ4HxGQYpwyGsD8Sw5FegQXphi0rpoGMT74S4+I2mm7XJEswwn59XAaKOzC15oDSOWEE8SzDCd6Q==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Binder": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "Of1Irt1+NzWO+yEYkuDh5TpT4On7LKl98Q9iLqCdOZps6XXEWDj3AKtmyvzJPVXZe4apmkJJIiDL7rR1yC+hjQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.CommandLine": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "OelM+VQdhZ0XMXsEQBq/bt3kFzD+EBGqR4TAgFDRAye0JfvHAaRi+3BxCRcwqUAwDhV0U0HieljBGHlTgYseRA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "5.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.EnvironmentVariables": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "fqh6y6hAi0Z0fRsb4B/mP9OkKkSlifh5osa+N/YSQ+/S2a//+zYApZMUC1XeP9fdjlgZoPQoZ72Q2eLHyKLddQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "5.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.FileExtensions": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "rRdspYKA18ViPOISwAihhCMbusHsARCOtDMwa23f+BGEdIjpKPlhs3LLjmKlxfhpGXBjIsS0JpXcChjRUN+PAw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "5.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "5.0.0",
+ "Microsoft.Extensions.Primitives": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Json": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "Pak8ymSUfdzPfBTLHxeOwcR32YDbuVfhnH2hkfOLnJNQd19ItlBdpMjIDY9C5O/nS2Sn9bzDMai0ZrvF7KyY/Q==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "5.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Configuration.FileExtensions": "5.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.UserSecrets": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "+tK3seG68106lN277YWQvqmfyI/89w0uTu/5Gz5VYSUu5TI4mqwsaWLlSmT9Bl1yW/i1Nr06gHJxqaqB5NU9Tw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Configuration.Json": "5.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "Rc2kb/p3Ze6cP6rhFC3PJRdWGbLvSHZc0ev7YlyeU6FmHciDMLrhoVoTUEzKPhN5ZjFgKF1Cf5fOz8mCMIkvpA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "ORj7Zh81gC69TyvmcUm9tSzytcy8AVousi+IVRAI8nLieQjOFryRusSFh7+aLk16FN9pQNqJAiMd7BTKINK0kA=="
+ },
+ "Microsoft.Extensions.FileProviders.Abstractions": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "iuZIiZ3mteEb+nsUqpGXKx2cGF+cv6gWPd5jqQI4hzqdiJ6I94ddLjKhQOuRW1lueHwocIw30xbSHGhQj0zjdQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Physical": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "1rkd8UO2qf21biwO7X0hL9uHP7vtfmdv/NLvKgCRHkdz1XnW8zVQJXyEYiN68WYpExgtVWn55QF0qBzgfh1mGg==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0",
+ "Microsoft.Extensions.FileSystemGlobbing": "5.0.0",
+ "Microsoft.Extensions.Primitives": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileSystemGlobbing": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "ArliS8lGk8sWRtrWpqI8yUVYJpRruPjCDT+EIjrgkA/AAPRctlAkRISVZ334chAKktTLzD1+PK8F5IZpGedSqA=="
+ },
+ "Microsoft.Extensions.Hosting": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "hiokSU1TOVfcqpQAnpiOzP2rE9p+niq92g5yeAnwlbSrUlIdIS6M8emCknZvhdOagQA9x5YWNwe1n0kFUwE0NQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "5.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "5.0.0",
+ "Microsoft.Extensions.Configuration.CommandLine": "5.0.0",
+ "Microsoft.Extensions.Configuration.EnvironmentVariables": "5.0.0",
+ "Microsoft.Extensions.Configuration.FileExtensions": "5.0.0",
+ "Microsoft.Extensions.Configuration.Json": "5.0.0",
+ "Microsoft.Extensions.Configuration.UserSecrets": "5.0.0",
+ "Microsoft.Extensions.DependencyInjection": "5.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "5.0.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging": "5.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging.Configuration": "5.0.0",
+ "Microsoft.Extensions.Logging.Console": "5.0.0",
+ "Microsoft.Extensions.Logging.Debug": "5.0.0",
+ "Microsoft.Extensions.Logging.EventLog": "5.0.0",
+ "Microsoft.Extensions.Logging.EventSource": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Hosting.Abstractions": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "cbUOCePYBl1UhM+N2zmDSUyJ6cODulbtUd9gEzMFIK3RQDtP/gJsE08oLcBSXH3Q1RAQ0ex7OAB3HeTKB9bXpg==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Http": {
+ "type": "Transitive",
+ "resolved": "3.0.3",
+ "contentHash": "dcyB8szIcSynjVZRuFgqkZpPgTc5zeRSj1HMXSmNqWbHYKiPYJl8ZQgBHz6wmZNSUUNGpCs5uxUg8DZHHDC1Ew==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "3.0.3",
+ "Microsoft.Extensions.Logging": "3.0.3",
+ "Microsoft.Extensions.Options": "3.0.3"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "MgOwK6tPzB6YNH21wssJcw/2MKwee8b2gI7SllYfn6rvTpIrVvVS5HAjSU2vqSku1fwqRvWP0MdIi14qjd93Aw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "5.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "NxP6ahFcBnnSfwNBi2KH2Oz8Xl5Sm2krjId/jRR3I7teFphwiUoUeZPwTNA21EX+5PtjqmyAvKaOeBXcJjcH/w=="
+ },
+ "Microsoft.Extensions.Logging.Configuration": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "N3/d0HeMRnBekadbZlmbp+In8EvNNkQHSdbtRzjrGVckdZWpYs5GNrAfaYqVplDFW0WUedSaFJ3khB50BWYGsw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "5.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "5.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging": "5.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Console": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "jH0wbWhfvXjOVmCkbra4vbiovDtTUIWLQjCeJ7Xun3h4AHvwfzm7V7wlsXKs3tNnPrsCxZ9oaV0vUAgGY1JxOA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging": "5.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging.Configuration": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Debug": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "9dvt0xqRrClvhaPNpfyS39WxnW9G55l5lrV5ZX7IrEgwo4VwtmJKtoPiKVYKbhAuOBGUI5WY3hWLvF+PSbJp5A==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging": "5.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.EventLog": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "CYzsgF2lqgahGl/HuErsIDaZZ9ueN+MBjGfO/0jVDLPaXLaywxlGKFpDgXMaB053DRYZwD1H2Lb1I60mTXS3jg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging": "5.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0",
+ "System.Diagnostics.EventLog": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.EventSource": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "hF+D6PJkrM0qXcSEGs1BwZwgP8c0BRkj26P/5wmYTcHKOp52GRey/Z/YKRmRIHIrXxj9tz/JgIjU9oWmiJ5HMw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Logging": "5.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0",
+ "Microsoft.Extensions.Primitives": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "CBvR92TCJ5uBIdd9/HzDSrxYak+0W/3+yxrNg8Qm6Bmrkh5L+nu6m3WeazQehcZ5q1/6dDA7J5YdQjim0165zg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Primitives": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options.ConfigurationExtensions": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "280RxNJqOeQqq47aJLy5D9LN61CAWeuRA83gPToQ8B9jl9SNdQ5EXjlfvF66zQI5AXMl+C/3hGnbtIEN+X3mqA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "5.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "5.0.0",
+ "Microsoft.Extensions.Options": "5.0.0",
+ "Microsoft.Extensions.Primitives": "5.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "5.0.1",
+ "contentHash": "5WPSmL4YeP7eW+Vc8XZ4DwjYWBAiSwDV9Hm63JJWcz1Ie3Xjv4KuJXzgCstj48LkLfVCYa7mLcx7y+q6yqVvtw=="
+ },
+ "Microsoft.Graph.Core": {
+ "type": "Transitive",
+ "resolved": "2.0.8",
+ "contentHash": "CcsCgY1O+LQaKMJkQCpVZPmK6uiFFUu49MwqTxoTBYtFG2/NwyGAIpla5gct8jWlS0DBKXWAyRlIzKt/6UGIDQ==",
+ "dependencies": {
+ "Azure.Core": "1.22.0",
+ "Microsoft.Identity.Client": "4.41.0",
+ "Microsoft.IdentityModel.Protocols.OpenIdConnect": "6.15.1",
+ "System.Diagnostics.DiagnosticSource": "4.7.1",
+ "System.Security.Claims": "4.3.0",
+ "System.Text.Json": "6.0.2"
+ }
+ },
+ "Microsoft.Identity.Client.Extensions.Msal": {
+ "type": "Transitive",
+ "resolved": "2.19.3",
+ "contentHash": "zVVZjn8aW7W79rC1crioDgdOwaFTQorsSO6RgVlDDjc7MvbEGz071wSNrjVhzR0CdQn6Sefx7Abf1o7vasmrLg==",
+ "dependencies": {
+ "Microsoft.Identity.Client": "4.38.0",
+ "System.Security.Cryptography.ProtectedData": "4.5.0"
+ }
+ },
+ "Microsoft.IdentityModel.JsonWebTokens": {
+ "type": "Transitive",
+ "resolved": "6.17.0",
+ "contentHash": "I3cSVE185qF3a222/iQIdmBFhrhZBtz7wZ1RUUbMuHC1un79XCI7vggbWdmbqIttFcUoeziemadO6t+3FLjcSA==",
+ "dependencies": {
+ "Microsoft.IdentityModel.Tokens": "6.17.0"
+ }
+ },
+ "Microsoft.IdentityModel.Logging": {
+ "type": "Transitive",
+ "resolved": "6.17.0",
+ "contentHash": "Ix6/CMLDoo939NDf1ARDuGK6YERY7pAX9WYbfwb4gZqx7r52unMFIykJk+zlEBX7jjtbDz/0uzikQFvheV9KsQ=="
+ },
+ "Microsoft.IdentityModel.Protocols": {
+ "type": "Transitive",
+ "resolved": "6.15.1",
+ "contentHash": "6nHr+4yE8vj620Vy4L0pl7kmkvWc06wBrJ+AOo/gjqzu/UD/MYgySUqRGlZYrvvNmKkUWMw4hdn78MPCb4bstA==",
+ "dependencies": {
+ "Microsoft.IdentityModel.Logging": "6.15.1",
+ "Microsoft.IdentityModel.Tokens": "6.15.1"
+ }
+ },
+ "Microsoft.IdentityModel.Protocols.OpenIdConnect": {
+ "type": "Transitive",
+ "resolved": "6.15.1",
+ "contentHash": "WwecgT/PNrytLNUWjkYtnnG2LXMAzkINSaZM+8dPPiEpOGz1bQDBWAenTSurYICxGoA1sOPriFXk+ocnQyprKw==",
+ "dependencies": {
+ "Microsoft.IdentityModel.Protocols": "6.15.1",
+ "System.IdentityModel.Tokens.Jwt": "6.15.1"
+ }
+ },
+ "Microsoft.IdentityModel.Tokens": {
+ "type": "Transitive",
+ "resolved": "6.17.0",
+ "contentHash": "mhOe+d9BQg5U45TkTCyXAFOjl7RvwaFj6v9qo8b+WFolkuGsfjSFfQ+WI9D3ho9sD/fK75gvL4JptmjLzyUPkw==",
+ "dependencies": {
+ "Microsoft.CSharp": "4.5.0",
+ "Microsoft.IdentityModel.Logging": "6.17.0",
+ "System.Security.Cryptography.Cng": "4.5.0"
+ }
+ },
+ "Microsoft.NETCore.Platforms": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ=="
+ },
+ "Microsoft.NETCore.Targets": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg=="
+ },
+ "Microsoft.Win32.Registry": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
+ "dependencies": {
+ "System.Security.AccessControl": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0"
+ }
+ },
+ "Microsoft.Win32.SystemEvents": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "Bh6blKG8VAKvXiLe2L+sEsn62nc1Ij34MrNxepD2OCrS5cpCwQa9MeLyhVQPQ/R4Wlzwuy6wMK8hLb11QPDRsQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "5.0.0"
+ }
+ },
+ "System.Collections": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "tCQTzPsGZh/A9LhhA6zrqCRV4hOHsK90/G7q3Khxmn6tnB1PuNU0cRaKANP2AWcF9bn0zsuOoZOSrHuJk6oNBA=="
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "FHkCwUfsTs+/5tsK+c0egLfacUgbhvcwi3wUFWSEEArSXao343mYqcpOVVFMlcCkdNtjU4YwAWaKYwal6f02og==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "5.0.0",
+ "Microsoft.Win32.Registry": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0"
+ }
+ },
+ "System.Drawing.Common": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "SztFwAnpfKC8+sEKXAFxCBWhKQaEd97EiOL7oZJZP56zbqnLpmxACWA8aGseaUExciuEAUuR9dY8f7HkTRAdnw==",
+ "dependencies": {
+ "Microsoft.Win32.SystemEvents": "5.0.0"
+ }
+ },
+ "System.Formats.Asn1": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "MTvUIktmemNB+El0Fgw9egyqT9AYSIk6DTJeoDSpc3GIHxHCMo8COqkWT1mptX5tZ1SlQ6HJZ0OsSvMth1c12w=="
+ },
+ "System.Globalization": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.IO": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0",
+ "System.Text.Encoding": "4.3.0",
+ "System.Threading.Tasks": "4.3.0"
+ }
+ },
+ "System.IO.Hashing": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Rfm2jYCaUeGysFEZjDe7j1R4x6Z6BzumS/vUT5a1AA/AWJuGX71PoGB0RmpyX3VmrGqVnAwtfMn39OHR8Y/5+g=="
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw=="
+ },
+ "System.Memory.Data": {
+ "type": "Transitive",
+ "resolved": "1.0.2",
+ "contentHash": "JGkzeqgBsiZwKJZ1IxPNsDFZDhUvuEdX8L8BDC8N3KOj+6zMcNU28CNN59TpZE/VJYy9cP+5M+sbxtWJx3/xtw==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "4.7.2",
+ "System.Text.Json": "4.6.0"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
+ },
+ "System.Reflection": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.IO": "4.3.0",
+ "System.Reflection.Primitives": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Reflection.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Resources.ResourceManager": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Globalization": "4.3.0",
+ "System.Reflection": "4.3.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Runtime": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Runtime.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Security.AccessControl": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0"
+ }
+ },
+ "System.Security.Claims": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "P/+BR/2lnc4PNDHt/TPBAWHVMLMRHsyYZbU1NphW4HIWzCggz8mJbTQQ3MKljFE7LS3WagmVFuBgoLcFzYXlkA==",
+ "dependencies": {
+ "System.Collections": "4.3.0",
+ "System.Globalization": "4.3.0",
+ "System.IO": "4.3.0",
+ "System.Resources.ResourceManager": "4.3.0",
+ "System.Runtime": "4.3.0",
+ "System.Runtime.Extensions": "4.3.0",
+ "System.Security.Principal": "4.3.0"
+ }
+ },
+ "System.Security.Cryptography.Cng": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "jIMXsKn94T9JY7PvPq/tMfqa6GAaHpElRDpmG+SuL+D3+sTw2M8VhnibKnN8Tq+4JqbPJ/f+BwtLeDMEnzAvRg==",
+ "dependencies": {
+ "System.Formats.Asn1": "5.0.0"
+ }
+ },
+ "System.Security.Cryptography.Pkcs": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "9TPLGjBCGKmNvG8pjwPeuYy0SMVmGZRwlTZvyPHDbYv/DRkoeumJdfumaaDNQzVGMEmbWtg07zUpSW9q70IlDQ==",
+ "dependencies": {
+ "System.Formats.Asn1": "5.0.0",
+ "System.Security.Cryptography.Cng": "5.0.0"
+ }
+ },
+ "System.Security.Cryptography.ProtectedData": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "ehYW0m9ptxpGWvE4zgqongBVWpSDU/JCFD4K7krxkQwSz/sFQjEXCUqpvencjy6DYDbn7Ig09R8GFffu8TtneQ=="
+ },
+ "System.Security.Cryptography.Xml": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "MYmkHtCW+paFmPGFDktnLdOeH3zUrNchbZNki87E1ejNSMm9enSRbJokmvFrsWUrDE4bRE1lVeAle01+t6SGhA==",
+ "dependencies": {
+ "System.Security.Cryptography.Pkcs": "5.0.0",
+ "System.Security.Permissions": "5.0.0"
+ }
+ },
+ "System.Security.Permissions": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "uE8juAhEkp7KDBCdjDIE3H9R1HJuEHqeqX8nLX9gmYKWwsqk3T5qZlPx8qle5DPKimC/Fy3AFTdV7HamgCh9qQ==",
+ "dependencies": {
+ "System.Security.AccessControl": "5.0.0",
+ "System.Windows.Extensions": "5.0.0"
+ }
+ },
+ "System.Security.Principal": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "I1tkfQlAoMM2URscUtpcRo/hX0jinXx6a/KUtEQoz3owaYwl3qwsO8cbzYVVnjxrzxjHo3nJC+62uolgeGIS9A==",
+ "dependencies": {
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Security.Principal.Windows": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA=="
+ },
+ "System.Text.Encoding": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "6.0.2",
+ "contentHash": "0nE2gwXLn3PTBOPwORLqwuYvWB+Beomt9ZBX+6LmogMNKUvfD1SoDb/ycB1vBntT94rGaB/SvxEyeLu14H6aEg==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Text.Encodings.Web": "6.0.0"
+ }
+ },
+ "System.Threading.Tasks": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0",
+ "Microsoft.NETCore.Targets": "1.1.0",
+ "System.Runtime": "4.3.0"
+ }
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg=="
+ },
+ "System.Windows.Extensions": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "c1ho9WU9ZxMZawML+ssPKZfdnrg/OjR3pe0m9v8230z3acqphwvPJqzAkH54xRYm5ntZHGG1EPP3sux9H3qSPg==",
+ "dependencies": {
+ "System.Drawing.Common": "5.0.0"
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/src/ApiService/Tests/OrmModelsTest.cs b/src/ApiService/Tests/OrmModelsTest.cs
index d470a2d16..35070840b 100644
--- a/src/ApiService/Tests/OrmModelsTest.cs
+++ b/src/ApiService/Tests/OrmModelsTest.cs
@@ -244,9 +244,6 @@ namespace Tests {
); ;
}
-
-
-
public static Gen Report() {
return Arb.Generate, Guid, int>>().Select(
arg =>
@@ -373,6 +370,7 @@ namespace Tests {
return Arb.From(OrmGenerators.Notification());
}
+
public static Arbitrary WebhookMessageEventGrid() {
return Arb.From(OrmGenerators.WebhookMessageEventGrid());
}
@@ -548,7 +546,6 @@ namespace Tests {
return Test(n);
}
-
[Property]
public bool Job(Job j) {
return Test(j);
diff --git a/src/ApiService/Tests/OrmTest.cs b/src/ApiService/Tests/OrmTest.cs
index bd042e608..cd49d44b5 100644
--- a/src/ApiService/Tests/OrmTest.cs
+++ b/src/ApiService/Tests/OrmTest.cs
@@ -246,19 +246,6 @@ namespace Tests {
Assert.Equal(expected.TheName, actual.TheName);
}
-
- [Fact]
- public void TestEventSerialization2() {
-
- var converter = new EntityConverter();
- var expectedEvent = new EventMessage(Guid.NewGuid(), EventType.NodeHeartbeat, new EventNodeHeartbeat(Guid.NewGuid(), Guid.NewGuid(), "test Poool"), Guid.NewGuid(), "test") {
- ETag = new Azure.ETag("33a64df551425fcc55e4d42a148795d9f25f89d4")
- };
- var te = converter.ToTableEntity(expectedEvent);
- var actualEvent = converter.ToRecord(te);
- Assert.Equal(expectedEvent, actualEvent);
- }
-
record Entity3(
[PartitionKey] int Id,
[RowKey] string TheName,