From 89ec51a0ca77997935920193b5d124de888023c5 Mon Sep 17 00:00:00 2001 From: CodeMash Date: Wed, 21 Oct 2026 21:14:40 +0300 Subject: [PATCH 1/3] feat(logs): WriteLogsAsync (Api) and GetLogAsync (Hub) from DTOs regenerated off gateway audit/logging 7afc82b57 The client methods are source-generated from the DTOs, so the regeneration is the feature: Api: WriteLogs / WriteLogEntry / WriteLogsResponse (POST /{version}/logs) -> Logs.WriteLogsAsync. Hub: GetLog / GetLogResponse (GET /{version}/logs/{Id}) -> Logs.GetLogAsync; the AWS CloudWatch logging integration request and dto; Origin on TenantLogEntryDto. Breaking: SaveLogSettings.SkipCloudDashboardLogs, SkipHttpBodyMeta and AiChatLoggingEnabled are now bool? (not sent = unchanged) instead of bool. Setting them still compiles; code that reads them as bool needs a cast. Co-Authored-By: Claude Opus 5.5 --- src/Norbix.Sdk.Types/Generated/Api.dtos.cs | 57 ++++++++++++++++++++++ src/Norbix.Sdk.Types/Generated/Hub.dtos.cs | 55 ++++++++++++++++++--- 2 files changed, 106 insertions(+), 6 deletions(-) diff --git a/src/Norbix.Sdk.Types/Generated/Api.dtos.cs b/src/Norbix.Sdk.Types/Generated/Api.dtos.cs index b7ec785..9ed6c5b 100644 --- a/src/Norbix.Sdk.Types/Generated/Api.dtos.cs +++ b/src/Norbix.Sdk.Types/Generated/Api.dtos.cs @@ -1338,6 +1338,63 @@ public partial class UseFileRequest public virtual bool? ReassignOwner { get; set; } } + public partial class WriteLogEntry + { + /// + ///information (default), warning or error. + /// + public virtual string? Level { get; set; } + + /// + ///A short line, 1–200 characters — what the Logs list shows. + /// + public virtual string Title { get; set; } + + /// + ///Details, at most 8 000 characters. + /// + public virtual string? Message { get; set; } + + /// + ///Your own code for this kind of line, e.g. order:paid — lower case letters, digits and _ . : -, at most 64. Stored as app:; app:log when empty. + /// + public virtual string? EventCode { get; set; } + + /// + ///Groups your lines into one flow in the Logs details view: at most 64 letters, digits, _ or -. Empty = the id of this request. + /// + public virtual string? CorrelationId { get; set; } + + /// + ///When it happened (UTC). Empty = when Norbix received it. At most 7 days old and at most 5 minutes ahead. + /// + public virtual DateTime? Timestamp { get; set; } + + /// + ///Extra fields, at most 20; key at most 64, value at most 2 000 characters. Values under secret-looking keys (password, token, apiKey …) are masked. + /// + public virtual Dictionary? Meta { get; set; } + } + + /// + ///Send your app's own log entries to the project's logs. + /// + [NorbixRoute("/{version}/logs", "POST")] + public partial class WriteLogs + : CodeMashRequestBase, INorbixRequest + { + /// + ///1–100 entries. + /// + public virtual List Entries { get; set; } = []; + } + + public partial class WriteLogsResponse + : ResponseBase + { + public virtual int Accepted { get; set; } + } + /// ///Membership · Passkey /// diff --git a/src/Norbix.Sdk.Types/Generated/Hub.dtos.cs b/src/Norbix.Sdk.Types/Generated/Hub.dtos.cs index e8c7010..3a9f8a1 100644 --- a/src/Norbix.Sdk.Types/Generated/Hub.dtos.cs +++ b/src/Norbix.Sdk.Types/Generated/Hub.dtos.cs @@ -953,6 +953,8 @@ public partial class InternalsTypeGen public virtual FakeCodeIntegrationRequest? Typegen_282_FakeCodeIntegrationRequest { get; set; } public virtual CodeFunctionSchedulerTaskRequest? Typegen_283_CodeFunctionSchedulerTaskRequest { get; set; } public virtual MarketplaceFunctionSchedulerTaskRequest? Typegen_284_MarketplaceFunctionSchedulerTaskRequest { get; set; } + public virtual AwsCloudWatchLoggingIntegrationRequest? Typegen_285_AwsCloudWatchLoggingIntegrationRequest { get; set; } + public virtual AwsCloudWatchLoggingIntegrationDto? Typegen_286_AwsCloudWatchLoggingIntegrationDto { get; set; } } [DataContract] @@ -6167,6 +6169,9 @@ public partial class TenantLogEntryDto [DataMember] public virtual string Env { get; set; } + [DataMember] + public virtual string Origin { get; set; } + [DataMember] public virtual IReadOnlyDictionary? Meta { get; set; } } @@ -6194,6 +6199,14 @@ public partial class AmqpLoggingIntegrationDto public virtual string RoutingKey { get; set; } } + public partial class AwsCloudWatchLoggingIntegrationDto + : LoggingIntegrationDto + { + public virtual string Region { get; set; } + public virtual string LogGroup { get; set; } + public virtual string LogStream { get; set; } + } + public partial class AwsKinesisLoggingIntegrationDto : LoggingIntegrationDto { @@ -16874,6 +16887,25 @@ public partial class CleanLogsResponse { } + /// + ///Fetch one tenant log entry by id + /// + [NorbixRoute("/{version}/logs/{Id}", "GET")] + public partial class GetLog + : CodeMashRequestBase, INorbixRequest + { + /// + ///The log entry id (24 hex characters), from a get_logs row. + /// + public virtual string Id { get; set; } + } + + public partial class GetLogResponse + : ResponseBase + { + public virtual TenantLogEntryDto? Item { get; set; } + } + /// ///Fetch a filtered, cursor-paged list of tenant log entries /// @@ -16978,19 +17010,19 @@ public partial class SaveLogSettings : CodeMashRequestBase, INorbixRequest { /// - ///Drop log entries from requests originating from the Norbix studio (cloud dashboard). + ///Drop log entries from requests originating from the Norbix studio (cloud dashboard). Not sent = unchanged. /// - public virtual bool SkipCloudDashboardLogs { get; set; } + public virtual bool? SkipCloudDashboardLogs { get; set; } /// - ///Strip request/response body meta off http:request / http:response log entries. + ///Strip request/response body meta off http:request / http:response log entries. Not sent = unchanged. /// - public virtual bool SkipHttpBodyMeta { get; set; } + public virtual bool? SkipHttpBodyMeta { get; set; } /// - ///Turn on tenant-visible log entries for AI chat turns. Default false. + ///Turn on tenant-visible log entries for AI chat turns. Default false. Not sent = unchanged. /// - public virtual bool AiChatLoggingEnabled { get; set; } + public virtual bool? AiChatLoggingEnabled { get; set; } } public partial class SaveLogSettingsResponse @@ -17011,6 +17043,17 @@ public partial class AmqpLoggingIntegrationRequest public virtual string Password { get; set; } } + public partial class AwsCloudWatchLoggingIntegrationRequest + : LoggingIntegrationRequest + { + public virtual LoggingProvider Provider { get; set; } + public virtual string Region { get; set; } + public virtual string LogGroup { get; set; } + public virtual string LogStream { get; set; } + public virtual string AccessKey { get; set; } + public virtual string SecretKey { get; set; } + } + public partial class AwsKinesisLoggingIntegrationRequest : LoggingIntegrationRequest { From 3a1e7c05ea43a65019efdb7f21f06d5508805f21 Mon Sep 17 00:00:00 2001 From: CodeMash Date: Wed, 21 Oct 2026 21:14:40 +0300 Subject: [PATCH 2/3] test(logs): WriteLogsAsync, GetLogAsync and TestLoggingIntegrationAsync MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LogsEndpointTests (Api): the entries travel in the body, Accepted comes back, a 429 quota refusal throws with CM-ERRORS-LOGGING-003. HubLogsEndpointTests: the log id lands in the path; the integration test posts the integration id. Coverage snapshots accepted: Api.Logs (new), Hub.Logs (+GetLog) — every endpoint matches the gateway manifest; Hub.Internal only gains the two AWS CloudWatch typegen anchor properties. Co-Authored-By: Claude Opus 5.5 --- .../Norbix.Hub.Tests/HubLogsEndpointTests.cs | 62 +++++++++++++ ...intCoverageTests.Hub.Internal.verified.txt | 2 +- ...ndpointCoverageTests.Hub.Logs.verified.txt | 41 ++++++++- ..._the_path_and_reads_the_entry.verified.txt | 25 ++++++ ...tion_posts_the_integration_id.verified.txt | 12 +++ tests/Norbix.Sdk.Tests/LogsEndpointTests.cs | 89 +++++++++++++++++++ ...ndpointCoverageTests.Api.Logs.verified.txt | 40 +++++++++ ..._and_reads_the_accepted_count.verified.txt | 30 +++++++ 8 files changed, 299 insertions(+), 2 deletions(-) create mode 100644 tests/Norbix.Hub.Tests/HubLogsEndpointTests.cs create mode 100644 tests/Norbix.Hub.Tests/test_results/HubLogsEndpointTests.GetLog_puts_the_id_in_the_path_and_reads_the_entry.verified.txt create mode 100644 tests/Norbix.Hub.Tests/test_results/HubLogsEndpointTests.TestLoggingIntegration_posts_the_integration_id.verified.txt create mode 100644 tests/Norbix.Sdk.Tests/LogsEndpointTests.cs create mode 100644 tests/Norbix.Sdk.Tests/test_results/EndpointCoverageTests.Api.Logs.verified.txt create mode 100644 tests/Norbix.Sdk.Tests/test_results/LogsEndpointTests.WriteLogs_posts_the_entries_and_reads_the_accepted_count.verified.txt diff --git a/tests/Norbix.Hub.Tests/HubLogsEndpointTests.cs b/tests/Norbix.Hub.Tests/HubLogsEndpointTests.cs new file mode 100644 index 0000000..524d186 --- /dev/null +++ b/tests/Norbix.Hub.Tests/HubLogsEndpointTests.cs @@ -0,0 +1,62 @@ +using Norbix.Sdk.Tests.Helpers; +using Norbix.Sdk.Types.Hub; +using NUnit.Framework; +using VerifyNUnit; + +namespace Norbix.Hub.Tests; + +/// +/// The Logs endpoints of the Hub that a reader cares about beyond the coverage +/// snapshot (EndpointCoverageTests.Hub.Logs): one log entry by its id, +/// and the logging integration test — nothing is delivered to an integration +/// until its last test passed. +/// +[TestFixture] +public sealed class HubLogsEndpointTests +{ + private const string LogId = "6716f2a0c3b1e4d5f6a7b8c9"; + private const string IntegrationId = "33333333-3333-3333-3333-333333333333"; + + [Test] + public async Task GetLog_puts_the_id_in_the_path_and_reads_the_entry() + { + using var fixture = NorbixTestFixture.Create(); + fixture.Respond( + "/logs/" + LogId, + new + { + item = new + { + id = LogId, + timestamp = "2026-10-21T08:00:00Z", + module = "app", + level = "information", + eventCode = "app:order:paid", + title = "Order paid", + message = "Order ord_1042 paid by card", + correlationId = "checkout-1042", + env = "PROD", + origin = "app", + meta = new Dictionary { ["orderId"] = "ord_1042" }, + }, + }); + + var response = await fixture.Client.Logs.GetLogAsync(new GetLog { Id = LogId }); + + await Verifier.Verify( + new { Sent = fixture.LastRequest, Entry = response?.Item }, + VerifyConfig.VerifySettings); + } + + [Test] + public async Task TestLoggingIntegration_posts_the_integration_id() + { + using var fixture = NorbixTestFixture.Create(); + fixture.Respond("/logs/integrations/test", new { }); + + await fixture.Client.Logs.TestLoggingIntegrationAsync( + new TestLoggingIntegration { IntegrationId = IntegrationId }); + + await Verifier.Verify(fixture.LastRequest, VerifyConfig.VerifySettings); + } +} diff --git a/tests/Norbix.Hub.Tests/test_results/EndpointCoverageTests.Hub.Internal.verified.txt b/tests/Norbix.Hub.Tests/test_results/EndpointCoverageTests.Hub.Internal.verified.txt index 0d34160..6279237 100644 --- a/tests/Norbix.Hub.Tests/test_results/EndpointCoverageTests.Hub.Internal.verified.txt +++ b/tests/Norbix.Hub.Tests/test_results/EndpointCoverageTests.Hub.Internal.verified.txt @@ -15,7 +15,7 @@ Sent: { Method: GET, Path: /internal/_typegen, - Query: ?typegen_0_SmtpEmailIntegrationRequest=Norbix.Sdk.Types.Hub.SmtpEmailIntegrationRequest&typegen_1_AwsSesEmailIntegrationRequest=Norbix.Sdk.Types.Hub.AwsSesEmailIntegrationRequest&typegen_2_SendGridEmailIntegrationRequest=Norbix.Sdk.Types.Hub.SendGridEmailIntegrationRequest&typegen_3_MailGunEmailIntegrationRequest=Norbix.Sdk.Types.Hub.MailGunEmailIntegrationRequest&typegen_4_EmailToAllUsersDeliverySettingsRequest=Norbix.Sdk.Types.Hub.EmailToAllUsersDeliverySettingsRequest&typegen_5_EmailToAccountUsersDeliverySettingsRequest=Norbix.Sdk.Types.Hub.EmailToAccountUsersDeliverySettingsRequest&typegen_6_EmailToCollectionRecordsDeliverySettingsRequest=Norbix.Sdk.Types.Hub.EmailToCollectionRecordsDeliverySettingsRequest&typegen_7_EmailToEmailsDeliverySettingsRequest=Norbix.Sdk.Types.Hub.EmailToEmailsDeliverySettingsRequest&typegen_8_EmailToUsersDeliverySettingsRequest=Norbix.Sdk.Types.Hub.EmailToUsersDeliverySettingsRequest&typegen_9_MembershipTriggerRequest=Norbix.Sdk.Types.Hub.MembershipTriggerRequest&typegen_10_SchemaTriggerRequest=Norbix.Sdk.Types.Hub.SchemaTriggerRequest&typegen_11_FilesTriggerRequest=Norbix.Sdk.Types.Hub.FilesTriggerRequest&typegen_12_PaymentTriggerRequest=Norbix.Sdk.Types.Hub.PaymentTriggerRequest&typegen_15_MongoDbConnectionStringDatabaseIntegrationRequest=Norbix.Sdk.Types.Hub.MongoDbConnectionStringDatabaseIntegrationRequest&typegen_16_MongoDbAtlasFlexManagedDatabaseIntegrationRequest=Norbix.Sdk.Types.Hub.MongoDbAtlasFlexManagedDatabaseIntegrationRequest&typegen_16_GoogleDriveFilesIntegrationRequest=Norbix.Sdk.Types.Hub.GoogleDriveFilesIntegrationRequest&typegen_17_FtpFilesIntegrationRequest=Norbix.Sdk.Types.Hub.FtpFilesIntegrationRequest&typegen_18_DropBoxFilesIntegrationRequest=Norbix.Sdk.Types.Hub.DropBoxFilesIntegrationRequest&typegen_19_AppleICloudFilesIntegrationRequest=Norbix.Sdk.Types.Hub.AppleICloudFilesIntegrationRequest&typegen_20_AwsS3FilesIntegrationRequest=Norbix.Sdk.Types.Hub.AwsS3FilesIntegrationRequest&typegen_21_GoogleCloudFilesIntegrationRequest=Norbix.Sdk.Types.Hub.GoogleCloudFilesIntegrationRequest&typegen_22_AzureBlobFilesIntegrationRequest=Norbix.Sdk.Types.Hub.AzureBlobFilesIntegrationRequest&typegen_23_LocalFilesIntegrationRequest=Norbix.Sdk.Types.Hub.LocalFilesIntegrationRequest&typegen_24_AmqpLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.AmqpLoggingIntegrationRequest&typegen_25_AwsKinesisLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.AwsKinesisLoggingIntegrationRequest&typegen_26_AwsS3LoggingIntegrationRequest=Norbix.Sdk.Types.Hub.AwsS3LoggingIntegrationRequest&typegen_28_NewRelicLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.NewRelicLoggingIntegrationRequest&typegen_30_MongoDbLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.MongoDbLoggingIntegrationRequest&typegen_31_KafkaLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.KafkaLoggingIntegrationRequest&typegen_32_PrometheusLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.PrometheusLoggingIntegrationRequest&typegen_33_DataDogLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.DataDogLoggingIntegrationRequest&typegen_34_InternalKafkaLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.InternalKafkaLoggingIntegrationRequest&typegen_35_ElasticSearchLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.ElasticSearchLoggingIntegrationRequest&typegen_37_SplunkLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.SplunkLoggingIntegrationRequest&typegen_38_AzureOtelLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.AzureOtelLoggingIntegrationRequest&typegen_39_KibanaLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.KibanaLoggingIntegrationRequest&typegen_40_LocalFileLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.LocalFileLoggingIntegrationRequest&typegen_41_OktaMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.OktaMembershipIntegrationRequest&typegen_42_XMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.XMembershipIntegrationRequest&typegen_43_GoogleMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.GoogleMembershipIntegrationRequest&typegen_44_MicrosoftMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.MicrosoftMembershipIntegrationRequest&typegen_45_GitHubMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.GitHubMembershipIntegrationRequest&typegen_46_MetaMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.MetaMembershipIntegrationRequest&typegen_47_AppleMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.AppleMembershipIntegrationRequest&typegen_48_LemonSqueezyPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.LemonSqueezyPaymentIntegrationRequest&typegen_49_AdyenPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.AdyenPaymentIntegrationRequest&typegen_50_MolliePaymentIntegrationRequest=Norbix.Sdk.Types.Hub.MolliePaymentIntegrationRequest&typegen_51_PaddlePaymentIntegrationRequest=Norbix.Sdk.Types.Hub.PaddlePaymentIntegrationRequest&typegen_52_PayPalPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.PayPalPaymentIntegrationRequest&typegen_53_StripePaymentIntegrationRequest=Norbix.Sdk.Types.Hub.StripePaymentIntegrationRequest&typegen_54_AppleInAppPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.AppleInAppPaymentIntegrationRequest&typegen_55_GoogleInAppPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.GoogleInAppPaymentIntegrationRequest&typegen_285_MontonioPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.MontonioPaymentIntegrationRequest&typegen_287_ShopifyPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.ShopifyPaymentIntegrationRequest&typegen_288_WooCommercePaymentIntegrationRequest=Norbix.Sdk.Types.Hub.WooCommercePaymentIntegrationRequest&typegen_289_MagentoPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.MagentoPaymentIntegrationRequest&typegen_290_BraintreePaymentIntegrationRequest=Norbix.Sdk.Types.Hub.BraintreePaymentIntegrationRequest&typegen_291_AuthorizeNetPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.AuthorizeNetPaymentIntegrationRequest&typegen_292_CheckOutComPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.CheckOutComPaymentIntegrationRequest&typegen_293_WorldpayPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.WorldpayPaymentIntegrationRequest&typegen_56_EdgeWebPushIntegrationRequest=Norbix.Sdk.Types.Hub.EdgeWebPushIntegrationRequest&typegen_57_ChromePluginPushIntegrationRequest=Norbix.Sdk.Types.Hub.ChromePluginPushIntegrationRequest&typegen_58_SafariPushIntegrationRequest=Norbix.Sdk.Types.Hub.SafariPushIntegrationRequest&typegen_59_ChromeWebPushIntegrationRequest=Norbix.Sdk.Types.Hub.ChromeWebPushIntegrationRequest&typegen_60_FirefoxWebPushIntegrationRequest=Norbix.Sdk.Types.Hub.FirefoxWebPushIntegrationRequest&typegen_61_AndroidFirebasePushIntegrationRequest=Norbix.Sdk.Types.Hub.AndroidFirebasePushIntegrationRequest&typegen_62_AppleApnsPushIntegrationRequest=Norbix.Sdk.Types.Hub.AppleApnsPushIntegrationRequest&typegen_65_AwsLambdaCodeIntegrationRequest=Norbix.Sdk.Types.Hub.AwsLambdaCodeIntegrationRequest&typegen_66_AzureFunctionsCodeIntegrationRequest=Norbix.Sdk.Types.Hub.AzureFunctionsCodeIntegrationRequest&typegen_67_GoogleCloudFunctionsCodeIntegrationRequest=Norbix.Sdk.Types.Hub.GoogleCloudFunctionsCodeIntegrationRequest&typegen_68_OllamaLlmIntegrationRequest=Norbix.Sdk.Types.Hub.OllamaLlmIntegrationRequest&typegen_69_OpenRouterLlmIntegrationRequest=Norbix.Sdk.Types.Hub.OpenRouterLlmIntegrationRequest&typegen_70_MistralLlmIntegrationRequest=Norbix.Sdk.Types.Hub.MistralLlmIntegrationRequest&typegen_71_GrokLlmIntegrationRequest=Norbix.Sdk.Types.Hub.GrokLlmIntegrationRequest&typegen_72_GroqLlmIntegrationRequest=Norbix.Sdk.Types.Hub.GroqLlmIntegrationRequest&typegen_73_GoogleLlmIntegrationRequest=Norbix.Sdk.Types.Hub.GoogleLlmIntegrationRequest&typegen_74_AnthropicLlmIntegrationRequest=Norbix.Sdk.Types.Hub.AnthropicLlmIntegrationRequest&typegen_75_OpenAiLlmIntegrationRequest=Norbix.Sdk.Types.Hub.OpenAiLlmIntegrationRequest&typegen_76_PlaywrightMcpIntegrationRequest=Norbix.Sdk.Types.Hub.PlaywrightMcpIntegrationRequest&typegen_77_MongoDbMcpIntegrationRequest=Norbix.Sdk.Types.Hub.MongoDbMcpIntegrationRequest&typegen_78_GitHubMcpIntegrationRequest=Norbix.Sdk.Types.Hub.GitHubMcpIntegrationRequest&typegen_79_StripeMcpIntegrationRequest=Norbix.Sdk.Types.Hub.StripeMcpIntegrationRequest&typegen_80_BraveSearchMcpIntegrationRequest=Norbix.Sdk.Types.Hub.BraveSearchMcpIntegrationRequest&typegen_81_ObsidianMcpIntegrationRequest=Norbix.Sdk.Types.Hub.ObsidianMcpIntegrationRequest&typegen_82_EmailTemplateDto=Norbix.Sdk.Types.Hub.EmailTemplateDto&typegen_83_PushTemplateDto=Norbix.Sdk.Types.Hub.PushTemplateDto&typegen_84_SmsTemplateDto=Norbix.Sdk.Types.Hub.SmsTemplateDto&typegen_85_SystemEmailTemplateDto=Norbix.Sdk.Types.Hub.SystemEmailTemplateDto&typegen_86_TriggerActionEmailDto=Norbix.Sdk.Types.Hub.TriggerActionEmailDto&typegen_87_TriggerActionPushDto=Norbix.Sdk.Types.Hub.TriggerActionPushDto&typegen_88_TriggerActionCodeDto=Norbix.Sdk.Types.Hub.TriggerActionCodeDto&typegen_89_TriggerActionWebhookDto=Norbix.Sdk.Types.Hub.TriggerActionWebhookDto&typegen_236_TriggerActionSmsDto=Norbix.Sdk.Types.Hub.TriggerActionSmsDto&typegen_237_TriggerActionSseDto=Norbix.Sdk.Types.Hub.TriggerActionSseDto&typegen_238_TriggerActionMarketplaceDto=Norbix.Sdk.Types.Hub.TriggerActionMarketplaceDto&typegen_239_SseDeliverySettingsDto=Norbix.Sdk.Types.Hub.SseDeliverySettingsDto&typegen_240_GetTriggers=Norbix.Sdk.Types.Hub.GetTriggers&typegen_241_GetTriggersResponse=Norbix.Sdk.Types.Hub.GetTriggersResponse&typegen_90_EmailToAllUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.EmailToAllUsersDeliverySettingsDto&typegen_91_EmailToAccountUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.EmailToAccountUsersDeliverySettingsDto&typegen_92_EmailToUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.EmailToUsersDeliverySettingsDto&typegen_93_EmailToEmailAddressesDeliverySettingsDto=Norbix.Sdk.Types.Hub.EmailToEmailAddressesDeliverySettingsDto&typegen_94_EmailToCollectionRecordsDeliverySettingsDto=Norbix.Sdk.Types.Hub.EmailToCollectionRecordsDeliverySettingsDto&typegen_95_PushToAllUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.PushToAllUsersDeliverySettingsDto&typegen_96_PushToUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.PushToUsersDeliverySettingsDto&typegen_229_PushToAccountUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.PushToAccountUsersDeliverySettingsDto&typegen_97_PushToCollectionRecordsDeliverySettingsDto=Norbix.Sdk.Types.Hub.PushToCollectionRecordsDeliverySettingsDto&typegen_98_PushToDevicesDeliverySettingsDto=Norbix.Sdk.Types.Hub.PushToDevicesDeliverySettingsDto&typegen_99_SmsToAllUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.SmsToAllUsersDeliverySettingsDto&typegen_100_SmsToUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.SmsToUsersDeliverySettingsDto&typegen_249_SmsToAccountUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.SmsToAccountUsersDeliverySettingsDto&typegen_101_SmsToCollectionRecordsDeliverySettingsDto=Norbix.Sdk.Types.Hub.SmsToCollectionRecordsDeliverySettingsDto&typegen_102_SmsToPhoneNumbersDeliverySettingsDto=Norbix.Sdk.Types.Hub.SmsToPhoneNumbersDeliverySettingsDto&typegen_103_OpenAiLlmIntegrationDto=Norbix.Sdk.Types.Hub.OpenAiLlmIntegrationDto&typegen_104_AnthropicLlmIntegrationDto=Norbix.Sdk.Types.Hub.AnthropicLlmIntegrationDto&typegen_105_OllamaLlmIntegrationDto=Norbix.Sdk.Types.Hub.OllamaLlmIntegrationDto&typegen_106_GroqLlmIntegrationDto=Norbix.Sdk.Types.Hub.GroqLlmIntegrationDto&typegen_107_GoogleLlmIntegrationDto=Norbix.Sdk.Types.Hub.GoogleLlmIntegrationDto&typegen_108_MistralLlmIntegrationDto=Norbix.Sdk.Types.Hub.MistralLlmIntegrationDto&typegen_109_OpenRouterLlmIntegrationDto=Norbix.Sdk.Types.Hub.OpenRouterLlmIntegrationDto&typegen_110_GrokLlmIntegrationDto=Norbix.Sdk.Types.Hub.GrokLlmIntegrationDto&typegen_111_DockerMcpIntegrationDto=Norbix.Sdk.Types.Hub.DockerMcpIntegrationDto&typegen_112_GoogleCalendarMcpIntegrationDto=Norbix.Sdk.Types.Hub.GoogleCalendarMcpIntegrationDto&typegen_113_ObsidianMcpIntegrationDto=Norbix.Sdk.Types.Hub.ObsidianMcpIntegrationDto&typegen_114_AwsLambdaCrossAccountRoleCodeIntegrationDto=Norbix.Sdk.Types.Hub.AwsLambdaCrossAccountRoleCodeIntegrationDto&typegen_115_AwsLambdaIamCodeIntegrationDto=Norbix.Sdk.Types.Hub.AwsLambdaIamCodeIntegrationDto&typegen_116_AzureFunctionsCodeIntegrationDto=Norbix.Sdk.Types.Hub.AzureFunctionsCodeIntegrationDto&typegen_118_GoogleCloudFunctionsCodeIntegrationDto=Norbix.Sdk.Types.Hub.GoogleCloudFunctionsCodeIntegrationDto&typegen_120_AdyenPaymentIntegrationDto=Norbix.Sdk.Types.Hub.AdyenPaymentIntegrationDto&typegen_121_AppleInAppPaymentIntegrationDto=Norbix.Sdk.Types.Hub.AppleInAppPaymentIntegrationDto&typegen_122_GoogleInAppPaymentIntegrationDto=Norbix.Sdk.Types.Hub.GoogleInAppPaymentIntegrationDto&typegen_123_LemonSqueezyPaymentIntegrationDto=Norbix.Sdk.Types.Hub.LemonSqueezyPaymentIntegrationDto&typegen_124_MolliePaymentIntegrationDto=Norbix.Sdk.Types.Hub.MolliePaymentIntegrationDto&typegen_125_PaddlePaymentIntegrationDto=Norbix.Sdk.Types.Hub.PaddlePaymentIntegrationDto&typegen_126_PayPalPaymentIntegrationDto=Norbix.Sdk.Types.Hub.PayPalPaymentIntegrationDto&typegen_127_StripePaymentIntegrationDto=Norbix.Sdk.Types.Hub.StripePaymentIntegrationDto&typegen_184_ShopifyPaymentIntegrationDto=Norbix.Sdk.Types.Hub.ShopifyPaymentIntegrationDto&typegen_185_WooCommercePaymentIntegrationDto=Norbix.Sdk.Types.Hub.WooCommercePaymentIntegrationDto&typegen_186_MagentoPaymentIntegrationDto=Norbix.Sdk.Types.Hub.MagentoPaymentIntegrationDto&typegen_187_BraintreePaymentIntegrationDto=Norbix.Sdk.Types.Hub.BraintreePaymentIntegrationDto&typegen_188_AuthorizeNetPaymentIntegrationDto=Norbix.Sdk.Types.Hub.AuthorizeNetPaymentIntegrationDto&typegen_189_CheckOutComPaymentIntegrationDto=Norbix.Sdk.Types.Hub.CheckOutComPaymentIntegrationDto&typegen_190_WorldpayPaymentIntegrationDto=Norbix.Sdk.Types.Hub.WorldpayPaymentIntegrationDto&typegen_286_MontonioPaymentIntegrationDto=Norbix.Sdk.Types.Hub.MontonioPaymentIntegrationDto&typegen_294_PaymentOrderEventDto=Norbix.Sdk.Types.Hub.PaymentOrderEventDto&typegen_128_AppleSignInMembershipIntegrationDto=Norbix.Sdk.Types.Hub.AppleSignInMembershipIntegrationDto&typegen_129_GitHubMembershipIntegrationDto=Norbix.Sdk.Types.Hub.GitHubMembershipIntegrationDto&typegen_130_GoogleMembershipIntegrationDto=Norbix.Sdk.Types.Hub.GoogleMembershipIntegrationDto&typegen_131_MetaMembershipIntegrationDto=Norbix.Sdk.Types.Hub.MetaMembershipIntegrationDto&typegen_132_MicrosoftMembershipIntegrationDto=Norbix.Sdk.Types.Hub.MicrosoftMembershipIntegrationDto&typegen_133_OktaMembershipIntegrationDto=Norbix.Sdk.Types.Hub.OktaMembershipIntegrationDto&typegen_134_XMembershipIntegrationDto=Norbix.Sdk.Types.Hub.XMembershipIntegrationDto&typegen_135_AmqpLoggingIntegrationDto=Norbix.Sdk.Types.Hub.AmqpLoggingIntegrationDto&typegen_136_AwsKinesisLoggingIntegrationDto=Norbix.Sdk.Types.Hub.AwsKinesisLoggingIntegrationDto&typegen_137_AwsS3CrossAccountRoleLoggingIntegrationDto=Norbix.Sdk.Types.Hub.AwsS3CrossAccountRoleLoggingIntegrationDto&typegen_138_AwsS3IamLoggingIntegrationDto=Norbix.Sdk.Types.Hub.AwsS3IamLoggingIntegrationDto&typegen_139_AzureOtelLoggingIntegrationDto=Norbix.Sdk.Types.Hub.AzureOtelLoggingIntegrationDto&typegen_140_DataDogLoggingIntegrationDto=Norbix.Sdk.Types.Hub.DataDogLoggingIntegrationDto&typegen_141_ElasticSearchLoggingIntegrationDto=Norbix.Sdk.Types.Hub.ElasticSearchLoggingIntegrationDto&typegen_142_InternalKafkaLoggingIntegrationDto=Norbix.Sdk.Types.Hub.InternalKafkaLoggingIntegrationDto&typegen_143_KafkaLoggingIntegrationDto=Norbix.Sdk.Types.Hub.KafkaLoggingIntegrationDto&typegen_144_KibanaLoggingIntegrationDto=Norbix.Sdk.Types.Hub.KibanaLoggingIntegrationDto&typegen_145_LocalFileLoggingIntegrationDto=Norbix.Sdk.Types.Hub.LocalFileLoggingIntegrationDto&typegen_147_MongoDbLoggingIntegrationDto=Norbix.Sdk.Types.Hub.MongoDbLoggingIntegrationDto&typegen_148_NewRelicLoggingIntegrationDto=Norbix.Sdk.Types.Hub.NewRelicLoggingIntegrationDto&typegen_149_PrometheusLoggingIntegrationDto=Norbix.Sdk.Types.Hub.PrometheusLoggingIntegrationDto&typegen_150_SplunkLoggingIntegrationDto=Norbix.Sdk.Types.Hub.SplunkLoggingIntegrationDto&typegen_153_AppleICloudFilesIntegrationDto=Norbix.Sdk.Types.Hub.AppleICloudFilesIntegrationDto&typegen_154_AwsS3CrossAccountRoleFilesIntegrationDto=Norbix.Sdk.Types.Hub.AwsS3CrossAccountRoleFilesIntegrationDto&typegen_155_AwsS3IamFilesIntegrationDto=Norbix.Sdk.Types.Hub.AwsS3IamFilesIntegrationDto&typegen_156_AzureBlobFilesIntegrationDto=Norbix.Sdk.Types.Hub.AzureBlobFilesIntegrationDto&typegen_157_DropBoxFilesIntegrationDto=Norbix.Sdk.Types.Hub.DropBoxFilesIntegrationDto&typegen_158_FtpFilesIntegrationDto=Norbix.Sdk.Types.Hub.FtpFilesIntegrationDto&typegen_159_GoogleCloudFilesIntegrationDto=Norbix.Sdk.Types.Hub.GoogleCloudFilesIntegrationDto&typegen_160_GoogleDriveFilesIntegrationDto=Norbix.Sdk.Types.Hub.GoogleDriveFilesIntegrationDto&typegen_161_LocalFilesIntegrationDto=Norbix.Sdk.Types.Hub.LocalFilesIntegrationDto&typegen_164_MongoDbConnectionStringIntegrationDto=Norbix.Sdk.Types.Hub.MongoDbConnectionStringIntegrationDto&typegen_165_MongoDbAtlasFlexManagedIntegrationDto=Norbix.Sdk.Types.Hub.MongoDbAtlasFlexManagedIntegrationDto&typegen_165_BirdSmsIntegrationDto=Norbix.Sdk.Types.Hub.BirdSmsIntegrationDto&typegen_166_PlivoSmsIntegrationDto=Norbix.Sdk.Types.Hub.PlivoSmsIntegrationDto&typegen_167_SinchSmsIntegrationDto=Norbix.Sdk.Types.Hub.SinchSmsIntegrationDto&typegen_168_TelesignSmsIntegrationDto=Norbix.Sdk.Types.Hub.TelesignSmsIntegrationDto&typegen_169_TelnyxSmsIntegrationDto=Norbix.Sdk.Types.Hub.TelnyxSmsIntegrationDto&typegen_170_TwilioSmsIntegrationDto=Norbix.Sdk.Types.Hub.TwilioSmsIntegrationDto&typegen_171_VonageSmsIntegrationDto=Norbix.Sdk.Types.Hub.VonageSmsIntegrationDto&typegen_246_FakeSmsIntegrationDto=Norbix.Sdk.Types.Hub.FakeSmsIntegrationDto&typegen_172_AndroidFirebasePushIntegrationDto=Norbix.Sdk.Types.Hub.AndroidFirebasePushIntegrationDto&typegen_173_AppleApnsPushIntegrationDto=Norbix.Sdk.Types.Hub.AppleApnsPushIntegrationDto&typegen_174_ChromePluginPushIntegrationDto=Norbix.Sdk.Types.Hub.ChromePluginPushIntegrationDto&typegen_175_ChromeWebPushIntegrationDto=Norbix.Sdk.Types.Hub.ChromeWebPushIntegrationDto&typegen_176_EdgeWebPushIntegrationDto=Norbix.Sdk.Types.Hub.EdgeWebPushIntegrationDto&typegen_177_FirefoxWebPushIntegrationDto=Norbix.Sdk.Types.Hub.FirefoxWebPushIntegrationDto&typegen_178_SafariPushIntegrationDto=Norbix.Sdk.Types.Hub.SafariPushIntegrationDto&typegen_247_FakePushIntegrationDto=Norbix.Sdk.Types.Hub.FakePushIntegrationDto&typegen_179_AwsCrossAccountRoleEmailIntegrationDto=Norbix.Sdk.Types.Hub.AwsCrossAccountRoleEmailIntegrationDto&typegen_180_AwsIamEmailIntegrationDto=Norbix.Sdk.Types.Hub.AwsIamEmailIntegrationDto&typegen_181_MailGunEmailIntegrationDto=Norbix.Sdk.Types.Hub.MailGunEmailIntegrationDto&typegen_182_SendGridEmailIntegrationDto=Norbix.Sdk.Types.Hub.SendGridEmailIntegrationDto&typegen_183_SmtpEmailIntegrationDto=Norbix.Sdk.Types.Hub.SmtpEmailIntegrationDto&typegen_248_FakeEmailIntegrationDto=Norbix.Sdk.Types.Hub.FakeEmailIntegrationDto&typegen_192_WebhookIntegrationDto=Norbix.Sdk.Types.Hub.WebhookIntegrationDto&typegen_193_WebhookDestinationDto=Norbix.Sdk.Types.Hub.WebhookDestinationDto&typegen_194_SchedulerTaskDto=Norbix.Sdk.Types.Hub.SchedulerTaskDto&typegen_249_EmailCampaignSchedulerTaskRequest=Norbix.Sdk.Types.Hub.EmailCampaignSchedulerTaskRequest&typegen_250_SmsCampaignSchedulerTaskRequest=Norbix.Sdk.Types.Hub.SmsCampaignSchedulerTaskRequest&typegen_251_PushCampaignSchedulerTaskRequest=Norbix.Sdk.Types.Hub.PushCampaignSchedulerTaskRequest&typegen_195_MongoDbAggregateDto=Norbix.Sdk.Types.Hub.MongoDbAggregateDto&typegen_196_MarketplaceIntegrationDto=Norbix.Sdk.Types.Hub.MarketplaceIntegrationDto&typegen_197_MarketplaceFunctionDto=Norbix.Sdk.Types.Hub.MarketplaceFunctionDto&typegen_198_MarketplaceListingDto=Norbix.Sdk.Types.Hub.MarketplaceListingDto&typegen_199_MarketplaceFunctionDefinitionDto=Norbix.Sdk.Types.Hub.MarketplaceFunctionDefinitionDto&typegen_200_MarketplaceFunctionParameterDto=Norbix.Sdk.Types.Hub.MarketplaceFunctionParameterDto&typegen_201_EnableCode=Norbix.Sdk.Types.Hub.EnableCode&typegen_202_DisableCode=Norbix.Sdk.Types.Hub.DisableCode&typegen_203_GetCodeIntegrations=Norbix.Sdk.Types.Hub.GetCodeIntegrations&typegen_204_GetCodeIntegration=Norbix.Sdk.Types.Hub.GetCodeIntegration&typegen_205_SaveCodeIntegration=Norbix.Sdk.Types.Hub.SaveCodeIntegration&typegen_206_TestCodeIntegration=Norbix.Sdk.Types.Hub.TestCodeIntegration&typegen_207_ConfirmCodeIntegrationHumanDeliveryRequest=Norbix.Sdk.Types.Hub.ConfirmCodeIntegrationHumanDeliveryRequest&typegen_209_DeleteCodeIntegrationRequest=Norbix.Sdk.Types.Hub.DeleteCodeIntegrationRequest&typegen_210_EnableCodeIntegrationRequest=Norbix.Sdk.Types.Hub.EnableCodeIntegrationRequest&typegen_211_DisableCodeIntegrationRequest=Norbix.Sdk.Types.Hub.DisableCodeIntegrationRequest&typegen_212_GetMarketplaceListings=Norbix.Sdk.Types.Hub.GetMarketplaceListings&typegen_213_GetMarketplaceListingFunctionTokens=Norbix.Sdk.Types.Hub.GetMarketplaceListingFunctionTokens&typegen_214_GetMarketplaceIntegrations=Norbix.Sdk.Types.Hub.GetMarketplaceIntegrations&typegen_215_GetMarketplaceIntegration=Norbix.Sdk.Types.Hub.GetMarketplaceIntegration&typegen_216_SaveMarketplaceIntegration=Norbix.Sdk.Types.Hub.SaveMarketplaceIntegration&typegen_217_DeleteMarketplaceIntegration=Norbix.Sdk.Types.Hub.DeleteMarketplaceIntegration&typegen_218_EnableMarketplaceIntegration=Norbix.Sdk.Types.Hub.EnableMarketplaceIntegration&typegen_219_DisableMarketplaceIntegration=Norbix.Sdk.Types.Hub.DisableMarketplaceIntegration&typegen_221_GetMarketplaceFunctions=Norbix.Sdk.Types.Hub.GetMarketplaceFunctions&typegen_222_GetMarketplaceFunction=Norbix.Sdk.Types.Hub.GetMarketplaceFunction&typegen_223_SaveMarketplaceFunction=Norbix.Sdk.Types.Hub.SaveMarketplaceFunction&typegen_224_DeleteMarketplaceFunction=Norbix.Sdk.Types.Hub.DeleteMarketplaceFunction&typegen_225_EnableMarketplaceFunction=Norbix.Sdk.Types.Hub.EnableMarketplaceFunction&typegen_226_DisableMarketplaceFunction=Norbix.Sdk.Types.Hub.DisableMarketplaceFunction&typegen_227_GetMarketplaceFunctionTokens=Norbix.Sdk.Types.Hub.GetMarketplaceFunctionTokens&typegen_228_InvokeMarketplaceFunction=Norbix.Sdk.Types.Hub.InvokeMarketplaceFunction&typegen_232_GetMarketplaceListing=Norbix.Sdk.Types.Hub.GetMarketplaceListing&typegen_233_TestMarketplaceIntegration=Norbix.Sdk.Types.Hub.TestMarketplaceIntegration&typegen_234_TestMarketplaceIntegrationResponse=Norbix.Sdk.Types.Hub.TestMarketplaceIntegrationResponse&typegen_235_GetMarketplaceListingResponse=Norbix.Sdk.Types.Hub.GetMarketplaceListingResponse&typegen_230_AdminPortalStructureDto=Norbix.Sdk.Types.Hub.AdminPortalStructureDto&typegen_231_AdminPortalModuleDto=Norbix.Sdk.Types.Hub.AdminPortalModuleDto&typegen_236_UserMessageEntryWireDto=Norbix.Sdk.Types.Hub.UserMessageEntryWireDto&typegen_237_AssistantTextEntryWireDto=Norbix.Sdk.Types.Hub.AssistantTextEntryWireDto&typegen_238_AssistantQuestionEntryWireDto=Norbix.Sdk.Types.Hub.AssistantQuestionEntryWireDto&typegen_239_UserAnswerEntryWireDto=Norbix.Sdk.Types.Hub.UserAnswerEntryWireDto&typegen_240_PlanEntryWireDto=Norbix.Sdk.Types.Hub.PlanEntryWireDto&typegen_241_UserDecisionEntryWireDto=Norbix.Sdk.Types.Hub.UserDecisionEntryWireDto&typegen_242_RunStepEntryWireDto=Norbix.Sdk.Types.Hub.RunStepEntryWireDto&typegen_243_ActionPendingEntryWireDto=Norbix.Sdk.Types.Hub.ActionPendingEntryWireDto&typegen_244_NoticeEntryWireDto=Norbix.Sdk.Types.Hub.NoticeEntryWireDto&typegen_245_ConversationSnapshotEntryWireDto=Norbix.Sdk.Types.Hub.ConversationSnapshotEntryWireDto&typegen_269_FunctionRefDto=Norbix.Sdk.Types.Hub.FunctionRefDto&typegen_270_CodeFunctionEventDto=Norbix.Sdk.Types.Hub.CodeFunctionEventDto&typegen_271_CodeFunctionContextDto=Norbix.Sdk.Types.Hub.CodeFunctionContextDto&typegen_272_CodeFunctionCallerDto=Norbix.Sdk.Types.Hub.CodeFunctionCallerDto&typegen_273_CodeFunctionRunAsDto=Norbix.Sdk.Types.Hub.CodeFunctionRunAsDto&typegen_274_CodeFunctionDataDto=Norbix.Sdk.Types.Hub.CodeFunctionDataDto&typegen_275_DatabaseRecordChangeDto=Norbix.Sdk.Types.Hub.DatabaseRecordChangeDto&typegen_276_UserChangeDto=Norbix.Sdk.Types.Hub.UserChangeDto&typegen_277_FileChangeDto=Norbix.Sdk.Types.Hub.FileChangeDto&typegen_278_PaymentFactDto=Norbix.Sdk.Types.Hub.PaymentFactDto&typegen_279_AiUsageEventDto=Norbix.Sdk.Types.Hub.AiUsageEventDto&typegen_280_ScheduledTaskInfoDto=Norbix.Sdk.Types.Hub.ScheduledTaskInfoDto&typegen_281_FakeCodeIntegrationDto=Norbix.Sdk.Types.Hub.FakeCodeIntegrationDto&typegen_282_FakeCodeIntegrationRequest=Norbix.Sdk.Types.Hub.FakeCodeIntegrationRequest&typegen_283_CodeFunctionSchedulerTaskRequest=Norbix.Sdk.Types.Hub.CodeFunctionSchedulerTaskRequest&typegen_284_MarketplaceFunctionSchedulerTaskRequest=Norbix.Sdk.Types.Hub.MarketplaceFunctionSchedulerTaskRequest, + Query: ?typegen_0_SmtpEmailIntegrationRequest=Norbix.Sdk.Types.Hub.SmtpEmailIntegrationRequest&typegen_1_AwsSesEmailIntegrationRequest=Norbix.Sdk.Types.Hub.AwsSesEmailIntegrationRequest&typegen_2_SendGridEmailIntegrationRequest=Norbix.Sdk.Types.Hub.SendGridEmailIntegrationRequest&typegen_3_MailGunEmailIntegrationRequest=Norbix.Sdk.Types.Hub.MailGunEmailIntegrationRequest&typegen_4_EmailToAllUsersDeliverySettingsRequest=Norbix.Sdk.Types.Hub.EmailToAllUsersDeliverySettingsRequest&typegen_5_EmailToAccountUsersDeliverySettingsRequest=Norbix.Sdk.Types.Hub.EmailToAccountUsersDeliverySettingsRequest&typegen_6_EmailToCollectionRecordsDeliverySettingsRequest=Norbix.Sdk.Types.Hub.EmailToCollectionRecordsDeliverySettingsRequest&typegen_7_EmailToEmailsDeliverySettingsRequest=Norbix.Sdk.Types.Hub.EmailToEmailsDeliverySettingsRequest&typegen_8_EmailToUsersDeliverySettingsRequest=Norbix.Sdk.Types.Hub.EmailToUsersDeliverySettingsRequest&typegen_9_MembershipTriggerRequest=Norbix.Sdk.Types.Hub.MembershipTriggerRequest&typegen_10_SchemaTriggerRequest=Norbix.Sdk.Types.Hub.SchemaTriggerRequest&typegen_11_FilesTriggerRequest=Norbix.Sdk.Types.Hub.FilesTriggerRequest&typegen_12_PaymentTriggerRequest=Norbix.Sdk.Types.Hub.PaymentTriggerRequest&typegen_15_MongoDbConnectionStringDatabaseIntegrationRequest=Norbix.Sdk.Types.Hub.MongoDbConnectionStringDatabaseIntegrationRequest&typegen_16_MongoDbAtlasFlexManagedDatabaseIntegrationRequest=Norbix.Sdk.Types.Hub.MongoDbAtlasFlexManagedDatabaseIntegrationRequest&typegen_16_GoogleDriveFilesIntegrationRequest=Norbix.Sdk.Types.Hub.GoogleDriveFilesIntegrationRequest&typegen_17_FtpFilesIntegrationRequest=Norbix.Sdk.Types.Hub.FtpFilesIntegrationRequest&typegen_18_DropBoxFilesIntegrationRequest=Norbix.Sdk.Types.Hub.DropBoxFilesIntegrationRequest&typegen_19_AppleICloudFilesIntegrationRequest=Norbix.Sdk.Types.Hub.AppleICloudFilesIntegrationRequest&typegen_20_AwsS3FilesIntegrationRequest=Norbix.Sdk.Types.Hub.AwsS3FilesIntegrationRequest&typegen_21_GoogleCloudFilesIntegrationRequest=Norbix.Sdk.Types.Hub.GoogleCloudFilesIntegrationRequest&typegen_22_AzureBlobFilesIntegrationRequest=Norbix.Sdk.Types.Hub.AzureBlobFilesIntegrationRequest&typegen_23_LocalFilesIntegrationRequest=Norbix.Sdk.Types.Hub.LocalFilesIntegrationRequest&typegen_24_AmqpLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.AmqpLoggingIntegrationRequest&typegen_25_AwsKinesisLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.AwsKinesisLoggingIntegrationRequest&typegen_26_AwsS3LoggingIntegrationRequest=Norbix.Sdk.Types.Hub.AwsS3LoggingIntegrationRequest&typegen_28_NewRelicLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.NewRelicLoggingIntegrationRequest&typegen_30_MongoDbLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.MongoDbLoggingIntegrationRequest&typegen_31_KafkaLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.KafkaLoggingIntegrationRequest&typegen_32_PrometheusLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.PrometheusLoggingIntegrationRequest&typegen_33_DataDogLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.DataDogLoggingIntegrationRequest&typegen_34_InternalKafkaLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.InternalKafkaLoggingIntegrationRequest&typegen_35_ElasticSearchLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.ElasticSearchLoggingIntegrationRequest&typegen_37_SplunkLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.SplunkLoggingIntegrationRequest&typegen_38_AzureOtelLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.AzureOtelLoggingIntegrationRequest&typegen_39_KibanaLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.KibanaLoggingIntegrationRequest&typegen_40_LocalFileLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.LocalFileLoggingIntegrationRequest&typegen_41_OktaMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.OktaMembershipIntegrationRequest&typegen_42_XMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.XMembershipIntegrationRequest&typegen_43_GoogleMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.GoogleMembershipIntegrationRequest&typegen_44_MicrosoftMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.MicrosoftMembershipIntegrationRequest&typegen_45_GitHubMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.GitHubMembershipIntegrationRequest&typegen_46_MetaMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.MetaMembershipIntegrationRequest&typegen_47_AppleMembershipIntegrationRequest=Norbix.Sdk.Types.Hub.AppleMembershipIntegrationRequest&typegen_48_LemonSqueezyPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.LemonSqueezyPaymentIntegrationRequest&typegen_49_AdyenPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.AdyenPaymentIntegrationRequest&typegen_50_MolliePaymentIntegrationRequest=Norbix.Sdk.Types.Hub.MolliePaymentIntegrationRequest&typegen_51_PaddlePaymentIntegrationRequest=Norbix.Sdk.Types.Hub.PaddlePaymentIntegrationRequest&typegen_52_PayPalPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.PayPalPaymentIntegrationRequest&typegen_53_StripePaymentIntegrationRequest=Norbix.Sdk.Types.Hub.StripePaymentIntegrationRequest&typegen_54_AppleInAppPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.AppleInAppPaymentIntegrationRequest&typegen_55_GoogleInAppPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.GoogleInAppPaymentIntegrationRequest&typegen_285_MontonioPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.MontonioPaymentIntegrationRequest&typegen_287_ShopifyPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.ShopifyPaymentIntegrationRequest&typegen_288_WooCommercePaymentIntegrationRequest=Norbix.Sdk.Types.Hub.WooCommercePaymentIntegrationRequest&typegen_289_MagentoPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.MagentoPaymentIntegrationRequest&typegen_290_BraintreePaymentIntegrationRequest=Norbix.Sdk.Types.Hub.BraintreePaymentIntegrationRequest&typegen_291_AuthorizeNetPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.AuthorizeNetPaymentIntegrationRequest&typegen_292_CheckOutComPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.CheckOutComPaymentIntegrationRequest&typegen_293_WorldpayPaymentIntegrationRequest=Norbix.Sdk.Types.Hub.WorldpayPaymentIntegrationRequest&typegen_56_EdgeWebPushIntegrationRequest=Norbix.Sdk.Types.Hub.EdgeWebPushIntegrationRequest&typegen_57_ChromePluginPushIntegrationRequest=Norbix.Sdk.Types.Hub.ChromePluginPushIntegrationRequest&typegen_58_SafariPushIntegrationRequest=Norbix.Sdk.Types.Hub.SafariPushIntegrationRequest&typegen_59_ChromeWebPushIntegrationRequest=Norbix.Sdk.Types.Hub.ChromeWebPushIntegrationRequest&typegen_60_FirefoxWebPushIntegrationRequest=Norbix.Sdk.Types.Hub.FirefoxWebPushIntegrationRequest&typegen_61_AndroidFirebasePushIntegrationRequest=Norbix.Sdk.Types.Hub.AndroidFirebasePushIntegrationRequest&typegen_62_AppleApnsPushIntegrationRequest=Norbix.Sdk.Types.Hub.AppleApnsPushIntegrationRequest&typegen_65_AwsLambdaCodeIntegrationRequest=Norbix.Sdk.Types.Hub.AwsLambdaCodeIntegrationRequest&typegen_66_AzureFunctionsCodeIntegrationRequest=Norbix.Sdk.Types.Hub.AzureFunctionsCodeIntegrationRequest&typegen_67_GoogleCloudFunctionsCodeIntegrationRequest=Norbix.Sdk.Types.Hub.GoogleCloudFunctionsCodeIntegrationRequest&typegen_68_OllamaLlmIntegrationRequest=Norbix.Sdk.Types.Hub.OllamaLlmIntegrationRequest&typegen_69_OpenRouterLlmIntegrationRequest=Norbix.Sdk.Types.Hub.OpenRouterLlmIntegrationRequest&typegen_70_MistralLlmIntegrationRequest=Norbix.Sdk.Types.Hub.MistralLlmIntegrationRequest&typegen_71_GrokLlmIntegrationRequest=Norbix.Sdk.Types.Hub.GrokLlmIntegrationRequest&typegen_72_GroqLlmIntegrationRequest=Norbix.Sdk.Types.Hub.GroqLlmIntegrationRequest&typegen_73_GoogleLlmIntegrationRequest=Norbix.Sdk.Types.Hub.GoogleLlmIntegrationRequest&typegen_74_AnthropicLlmIntegrationRequest=Norbix.Sdk.Types.Hub.AnthropicLlmIntegrationRequest&typegen_75_OpenAiLlmIntegrationRequest=Norbix.Sdk.Types.Hub.OpenAiLlmIntegrationRequest&typegen_76_PlaywrightMcpIntegrationRequest=Norbix.Sdk.Types.Hub.PlaywrightMcpIntegrationRequest&typegen_77_MongoDbMcpIntegrationRequest=Norbix.Sdk.Types.Hub.MongoDbMcpIntegrationRequest&typegen_78_GitHubMcpIntegrationRequest=Norbix.Sdk.Types.Hub.GitHubMcpIntegrationRequest&typegen_79_StripeMcpIntegrationRequest=Norbix.Sdk.Types.Hub.StripeMcpIntegrationRequest&typegen_80_BraveSearchMcpIntegrationRequest=Norbix.Sdk.Types.Hub.BraveSearchMcpIntegrationRequest&typegen_81_ObsidianMcpIntegrationRequest=Norbix.Sdk.Types.Hub.ObsidianMcpIntegrationRequest&typegen_82_EmailTemplateDto=Norbix.Sdk.Types.Hub.EmailTemplateDto&typegen_83_PushTemplateDto=Norbix.Sdk.Types.Hub.PushTemplateDto&typegen_84_SmsTemplateDto=Norbix.Sdk.Types.Hub.SmsTemplateDto&typegen_85_SystemEmailTemplateDto=Norbix.Sdk.Types.Hub.SystemEmailTemplateDto&typegen_86_TriggerActionEmailDto=Norbix.Sdk.Types.Hub.TriggerActionEmailDto&typegen_87_TriggerActionPushDto=Norbix.Sdk.Types.Hub.TriggerActionPushDto&typegen_88_TriggerActionCodeDto=Norbix.Sdk.Types.Hub.TriggerActionCodeDto&typegen_89_TriggerActionWebhookDto=Norbix.Sdk.Types.Hub.TriggerActionWebhookDto&typegen_236_TriggerActionSmsDto=Norbix.Sdk.Types.Hub.TriggerActionSmsDto&typegen_237_TriggerActionSseDto=Norbix.Sdk.Types.Hub.TriggerActionSseDto&typegen_238_TriggerActionMarketplaceDto=Norbix.Sdk.Types.Hub.TriggerActionMarketplaceDto&typegen_239_SseDeliverySettingsDto=Norbix.Sdk.Types.Hub.SseDeliverySettingsDto&typegen_240_GetTriggers=Norbix.Sdk.Types.Hub.GetTriggers&typegen_241_GetTriggersResponse=Norbix.Sdk.Types.Hub.GetTriggersResponse&typegen_90_EmailToAllUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.EmailToAllUsersDeliverySettingsDto&typegen_91_EmailToAccountUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.EmailToAccountUsersDeliverySettingsDto&typegen_92_EmailToUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.EmailToUsersDeliverySettingsDto&typegen_93_EmailToEmailAddressesDeliverySettingsDto=Norbix.Sdk.Types.Hub.EmailToEmailAddressesDeliverySettingsDto&typegen_94_EmailToCollectionRecordsDeliverySettingsDto=Norbix.Sdk.Types.Hub.EmailToCollectionRecordsDeliverySettingsDto&typegen_95_PushToAllUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.PushToAllUsersDeliverySettingsDto&typegen_96_PushToUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.PushToUsersDeliverySettingsDto&typegen_229_PushToAccountUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.PushToAccountUsersDeliverySettingsDto&typegen_97_PushToCollectionRecordsDeliverySettingsDto=Norbix.Sdk.Types.Hub.PushToCollectionRecordsDeliverySettingsDto&typegen_98_PushToDevicesDeliverySettingsDto=Norbix.Sdk.Types.Hub.PushToDevicesDeliverySettingsDto&typegen_99_SmsToAllUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.SmsToAllUsersDeliverySettingsDto&typegen_100_SmsToUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.SmsToUsersDeliverySettingsDto&typegen_249_SmsToAccountUsersDeliverySettingsDto=Norbix.Sdk.Types.Hub.SmsToAccountUsersDeliverySettingsDto&typegen_101_SmsToCollectionRecordsDeliverySettingsDto=Norbix.Sdk.Types.Hub.SmsToCollectionRecordsDeliverySettingsDto&typegen_102_SmsToPhoneNumbersDeliverySettingsDto=Norbix.Sdk.Types.Hub.SmsToPhoneNumbersDeliverySettingsDto&typegen_103_OpenAiLlmIntegrationDto=Norbix.Sdk.Types.Hub.OpenAiLlmIntegrationDto&typegen_104_AnthropicLlmIntegrationDto=Norbix.Sdk.Types.Hub.AnthropicLlmIntegrationDto&typegen_105_OllamaLlmIntegrationDto=Norbix.Sdk.Types.Hub.OllamaLlmIntegrationDto&typegen_106_GroqLlmIntegrationDto=Norbix.Sdk.Types.Hub.GroqLlmIntegrationDto&typegen_107_GoogleLlmIntegrationDto=Norbix.Sdk.Types.Hub.GoogleLlmIntegrationDto&typegen_108_MistralLlmIntegrationDto=Norbix.Sdk.Types.Hub.MistralLlmIntegrationDto&typegen_109_OpenRouterLlmIntegrationDto=Norbix.Sdk.Types.Hub.OpenRouterLlmIntegrationDto&typegen_110_GrokLlmIntegrationDto=Norbix.Sdk.Types.Hub.GrokLlmIntegrationDto&typegen_111_DockerMcpIntegrationDto=Norbix.Sdk.Types.Hub.DockerMcpIntegrationDto&typegen_112_GoogleCalendarMcpIntegrationDto=Norbix.Sdk.Types.Hub.GoogleCalendarMcpIntegrationDto&typegen_113_ObsidianMcpIntegrationDto=Norbix.Sdk.Types.Hub.ObsidianMcpIntegrationDto&typegen_114_AwsLambdaCrossAccountRoleCodeIntegrationDto=Norbix.Sdk.Types.Hub.AwsLambdaCrossAccountRoleCodeIntegrationDto&typegen_115_AwsLambdaIamCodeIntegrationDto=Norbix.Sdk.Types.Hub.AwsLambdaIamCodeIntegrationDto&typegen_116_AzureFunctionsCodeIntegrationDto=Norbix.Sdk.Types.Hub.AzureFunctionsCodeIntegrationDto&typegen_118_GoogleCloudFunctionsCodeIntegrationDto=Norbix.Sdk.Types.Hub.GoogleCloudFunctionsCodeIntegrationDto&typegen_120_AdyenPaymentIntegrationDto=Norbix.Sdk.Types.Hub.AdyenPaymentIntegrationDto&typegen_121_AppleInAppPaymentIntegrationDto=Norbix.Sdk.Types.Hub.AppleInAppPaymentIntegrationDto&typegen_122_GoogleInAppPaymentIntegrationDto=Norbix.Sdk.Types.Hub.GoogleInAppPaymentIntegrationDto&typegen_123_LemonSqueezyPaymentIntegrationDto=Norbix.Sdk.Types.Hub.LemonSqueezyPaymentIntegrationDto&typegen_124_MolliePaymentIntegrationDto=Norbix.Sdk.Types.Hub.MolliePaymentIntegrationDto&typegen_125_PaddlePaymentIntegrationDto=Norbix.Sdk.Types.Hub.PaddlePaymentIntegrationDto&typegen_126_PayPalPaymentIntegrationDto=Norbix.Sdk.Types.Hub.PayPalPaymentIntegrationDto&typegen_127_StripePaymentIntegrationDto=Norbix.Sdk.Types.Hub.StripePaymentIntegrationDto&typegen_184_ShopifyPaymentIntegrationDto=Norbix.Sdk.Types.Hub.ShopifyPaymentIntegrationDto&typegen_185_WooCommercePaymentIntegrationDto=Norbix.Sdk.Types.Hub.WooCommercePaymentIntegrationDto&typegen_186_MagentoPaymentIntegrationDto=Norbix.Sdk.Types.Hub.MagentoPaymentIntegrationDto&typegen_187_BraintreePaymentIntegrationDto=Norbix.Sdk.Types.Hub.BraintreePaymentIntegrationDto&typegen_188_AuthorizeNetPaymentIntegrationDto=Norbix.Sdk.Types.Hub.AuthorizeNetPaymentIntegrationDto&typegen_189_CheckOutComPaymentIntegrationDto=Norbix.Sdk.Types.Hub.CheckOutComPaymentIntegrationDto&typegen_190_WorldpayPaymentIntegrationDto=Norbix.Sdk.Types.Hub.WorldpayPaymentIntegrationDto&typegen_286_MontonioPaymentIntegrationDto=Norbix.Sdk.Types.Hub.MontonioPaymentIntegrationDto&typegen_294_PaymentOrderEventDto=Norbix.Sdk.Types.Hub.PaymentOrderEventDto&typegen_128_AppleSignInMembershipIntegrationDto=Norbix.Sdk.Types.Hub.AppleSignInMembershipIntegrationDto&typegen_129_GitHubMembershipIntegrationDto=Norbix.Sdk.Types.Hub.GitHubMembershipIntegrationDto&typegen_130_GoogleMembershipIntegrationDto=Norbix.Sdk.Types.Hub.GoogleMembershipIntegrationDto&typegen_131_MetaMembershipIntegrationDto=Norbix.Sdk.Types.Hub.MetaMembershipIntegrationDto&typegen_132_MicrosoftMembershipIntegrationDto=Norbix.Sdk.Types.Hub.MicrosoftMembershipIntegrationDto&typegen_133_OktaMembershipIntegrationDto=Norbix.Sdk.Types.Hub.OktaMembershipIntegrationDto&typegen_134_XMembershipIntegrationDto=Norbix.Sdk.Types.Hub.XMembershipIntegrationDto&typegen_135_AmqpLoggingIntegrationDto=Norbix.Sdk.Types.Hub.AmqpLoggingIntegrationDto&typegen_136_AwsKinesisLoggingIntegrationDto=Norbix.Sdk.Types.Hub.AwsKinesisLoggingIntegrationDto&typegen_137_AwsS3CrossAccountRoleLoggingIntegrationDto=Norbix.Sdk.Types.Hub.AwsS3CrossAccountRoleLoggingIntegrationDto&typegen_138_AwsS3IamLoggingIntegrationDto=Norbix.Sdk.Types.Hub.AwsS3IamLoggingIntegrationDto&typegen_139_AzureOtelLoggingIntegrationDto=Norbix.Sdk.Types.Hub.AzureOtelLoggingIntegrationDto&typegen_140_DataDogLoggingIntegrationDto=Norbix.Sdk.Types.Hub.DataDogLoggingIntegrationDto&typegen_141_ElasticSearchLoggingIntegrationDto=Norbix.Sdk.Types.Hub.ElasticSearchLoggingIntegrationDto&typegen_142_InternalKafkaLoggingIntegrationDto=Norbix.Sdk.Types.Hub.InternalKafkaLoggingIntegrationDto&typegen_143_KafkaLoggingIntegrationDto=Norbix.Sdk.Types.Hub.KafkaLoggingIntegrationDto&typegen_144_KibanaLoggingIntegrationDto=Norbix.Sdk.Types.Hub.KibanaLoggingIntegrationDto&typegen_145_LocalFileLoggingIntegrationDto=Norbix.Sdk.Types.Hub.LocalFileLoggingIntegrationDto&typegen_147_MongoDbLoggingIntegrationDto=Norbix.Sdk.Types.Hub.MongoDbLoggingIntegrationDto&typegen_148_NewRelicLoggingIntegrationDto=Norbix.Sdk.Types.Hub.NewRelicLoggingIntegrationDto&typegen_149_PrometheusLoggingIntegrationDto=Norbix.Sdk.Types.Hub.PrometheusLoggingIntegrationDto&typegen_150_SplunkLoggingIntegrationDto=Norbix.Sdk.Types.Hub.SplunkLoggingIntegrationDto&typegen_153_AppleICloudFilesIntegrationDto=Norbix.Sdk.Types.Hub.AppleICloudFilesIntegrationDto&typegen_154_AwsS3CrossAccountRoleFilesIntegrationDto=Norbix.Sdk.Types.Hub.AwsS3CrossAccountRoleFilesIntegrationDto&typegen_155_AwsS3IamFilesIntegrationDto=Norbix.Sdk.Types.Hub.AwsS3IamFilesIntegrationDto&typegen_156_AzureBlobFilesIntegrationDto=Norbix.Sdk.Types.Hub.AzureBlobFilesIntegrationDto&typegen_157_DropBoxFilesIntegrationDto=Norbix.Sdk.Types.Hub.DropBoxFilesIntegrationDto&typegen_158_FtpFilesIntegrationDto=Norbix.Sdk.Types.Hub.FtpFilesIntegrationDto&typegen_159_GoogleCloudFilesIntegrationDto=Norbix.Sdk.Types.Hub.GoogleCloudFilesIntegrationDto&typegen_160_GoogleDriveFilesIntegrationDto=Norbix.Sdk.Types.Hub.GoogleDriveFilesIntegrationDto&typegen_161_LocalFilesIntegrationDto=Norbix.Sdk.Types.Hub.LocalFilesIntegrationDto&typegen_164_MongoDbConnectionStringIntegrationDto=Norbix.Sdk.Types.Hub.MongoDbConnectionStringIntegrationDto&typegen_165_MongoDbAtlasFlexManagedIntegrationDto=Norbix.Sdk.Types.Hub.MongoDbAtlasFlexManagedIntegrationDto&typegen_165_BirdSmsIntegrationDto=Norbix.Sdk.Types.Hub.BirdSmsIntegrationDto&typegen_166_PlivoSmsIntegrationDto=Norbix.Sdk.Types.Hub.PlivoSmsIntegrationDto&typegen_167_SinchSmsIntegrationDto=Norbix.Sdk.Types.Hub.SinchSmsIntegrationDto&typegen_168_TelesignSmsIntegrationDto=Norbix.Sdk.Types.Hub.TelesignSmsIntegrationDto&typegen_169_TelnyxSmsIntegrationDto=Norbix.Sdk.Types.Hub.TelnyxSmsIntegrationDto&typegen_170_TwilioSmsIntegrationDto=Norbix.Sdk.Types.Hub.TwilioSmsIntegrationDto&typegen_171_VonageSmsIntegrationDto=Norbix.Sdk.Types.Hub.VonageSmsIntegrationDto&typegen_246_FakeSmsIntegrationDto=Norbix.Sdk.Types.Hub.FakeSmsIntegrationDto&typegen_172_AndroidFirebasePushIntegrationDto=Norbix.Sdk.Types.Hub.AndroidFirebasePushIntegrationDto&typegen_173_AppleApnsPushIntegrationDto=Norbix.Sdk.Types.Hub.AppleApnsPushIntegrationDto&typegen_174_ChromePluginPushIntegrationDto=Norbix.Sdk.Types.Hub.ChromePluginPushIntegrationDto&typegen_175_ChromeWebPushIntegrationDto=Norbix.Sdk.Types.Hub.ChromeWebPushIntegrationDto&typegen_176_EdgeWebPushIntegrationDto=Norbix.Sdk.Types.Hub.EdgeWebPushIntegrationDto&typegen_177_FirefoxWebPushIntegrationDto=Norbix.Sdk.Types.Hub.FirefoxWebPushIntegrationDto&typegen_178_SafariPushIntegrationDto=Norbix.Sdk.Types.Hub.SafariPushIntegrationDto&typegen_247_FakePushIntegrationDto=Norbix.Sdk.Types.Hub.FakePushIntegrationDto&typegen_179_AwsCrossAccountRoleEmailIntegrationDto=Norbix.Sdk.Types.Hub.AwsCrossAccountRoleEmailIntegrationDto&typegen_180_AwsIamEmailIntegrationDto=Norbix.Sdk.Types.Hub.AwsIamEmailIntegrationDto&typegen_181_MailGunEmailIntegrationDto=Norbix.Sdk.Types.Hub.MailGunEmailIntegrationDto&typegen_182_SendGridEmailIntegrationDto=Norbix.Sdk.Types.Hub.SendGridEmailIntegrationDto&typegen_183_SmtpEmailIntegrationDto=Norbix.Sdk.Types.Hub.SmtpEmailIntegrationDto&typegen_248_FakeEmailIntegrationDto=Norbix.Sdk.Types.Hub.FakeEmailIntegrationDto&typegen_192_WebhookIntegrationDto=Norbix.Sdk.Types.Hub.WebhookIntegrationDto&typegen_193_WebhookDestinationDto=Norbix.Sdk.Types.Hub.WebhookDestinationDto&typegen_194_SchedulerTaskDto=Norbix.Sdk.Types.Hub.SchedulerTaskDto&typegen_249_EmailCampaignSchedulerTaskRequest=Norbix.Sdk.Types.Hub.EmailCampaignSchedulerTaskRequest&typegen_250_SmsCampaignSchedulerTaskRequest=Norbix.Sdk.Types.Hub.SmsCampaignSchedulerTaskRequest&typegen_251_PushCampaignSchedulerTaskRequest=Norbix.Sdk.Types.Hub.PushCampaignSchedulerTaskRequest&typegen_195_MongoDbAggregateDto=Norbix.Sdk.Types.Hub.MongoDbAggregateDto&typegen_196_MarketplaceIntegrationDto=Norbix.Sdk.Types.Hub.MarketplaceIntegrationDto&typegen_197_MarketplaceFunctionDto=Norbix.Sdk.Types.Hub.MarketplaceFunctionDto&typegen_198_MarketplaceListingDto=Norbix.Sdk.Types.Hub.MarketplaceListingDto&typegen_199_MarketplaceFunctionDefinitionDto=Norbix.Sdk.Types.Hub.MarketplaceFunctionDefinitionDto&typegen_200_MarketplaceFunctionParameterDto=Norbix.Sdk.Types.Hub.MarketplaceFunctionParameterDto&typegen_201_EnableCode=Norbix.Sdk.Types.Hub.EnableCode&typegen_202_DisableCode=Norbix.Sdk.Types.Hub.DisableCode&typegen_203_GetCodeIntegrations=Norbix.Sdk.Types.Hub.GetCodeIntegrations&typegen_204_GetCodeIntegration=Norbix.Sdk.Types.Hub.GetCodeIntegration&typegen_205_SaveCodeIntegration=Norbix.Sdk.Types.Hub.SaveCodeIntegration&typegen_206_TestCodeIntegration=Norbix.Sdk.Types.Hub.TestCodeIntegration&typegen_207_ConfirmCodeIntegrationHumanDeliveryRequest=Norbix.Sdk.Types.Hub.ConfirmCodeIntegrationHumanDeliveryRequest&typegen_209_DeleteCodeIntegrationRequest=Norbix.Sdk.Types.Hub.DeleteCodeIntegrationRequest&typegen_210_EnableCodeIntegrationRequest=Norbix.Sdk.Types.Hub.EnableCodeIntegrationRequest&typegen_211_DisableCodeIntegrationRequest=Norbix.Sdk.Types.Hub.DisableCodeIntegrationRequest&typegen_212_GetMarketplaceListings=Norbix.Sdk.Types.Hub.GetMarketplaceListings&typegen_213_GetMarketplaceListingFunctionTokens=Norbix.Sdk.Types.Hub.GetMarketplaceListingFunctionTokens&typegen_214_GetMarketplaceIntegrations=Norbix.Sdk.Types.Hub.GetMarketplaceIntegrations&typegen_215_GetMarketplaceIntegration=Norbix.Sdk.Types.Hub.GetMarketplaceIntegration&typegen_216_SaveMarketplaceIntegration=Norbix.Sdk.Types.Hub.SaveMarketplaceIntegration&typegen_217_DeleteMarketplaceIntegration=Norbix.Sdk.Types.Hub.DeleteMarketplaceIntegration&typegen_218_EnableMarketplaceIntegration=Norbix.Sdk.Types.Hub.EnableMarketplaceIntegration&typegen_219_DisableMarketplaceIntegration=Norbix.Sdk.Types.Hub.DisableMarketplaceIntegration&typegen_221_GetMarketplaceFunctions=Norbix.Sdk.Types.Hub.GetMarketplaceFunctions&typegen_222_GetMarketplaceFunction=Norbix.Sdk.Types.Hub.GetMarketplaceFunction&typegen_223_SaveMarketplaceFunction=Norbix.Sdk.Types.Hub.SaveMarketplaceFunction&typegen_224_DeleteMarketplaceFunction=Norbix.Sdk.Types.Hub.DeleteMarketplaceFunction&typegen_225_EnableMarketplaceFunction=Norbix.Sdk.Types.Hub.EnableMarketplaceFunction&typegen_226_DisableMarketplaceFunction=Norbix.Sdk.Types.Hub.DisableMarketplaceFunction&typegen_227_GetMarketplaceFunctionTokens=Norbix.Sdk.Types.Hub.GetMarketplaceFunctionTokens&typegen_228_InvokeMarketplaceFunction=Norbix.Sdk.Types.Hub.InvokeMarketplaceFunction&typegen_232_GetMarketplaceListing=Norbix.Sdk.Types.Hub.GetMarketplaceListing&typegen_233_TestMarketplaceIntegration=Norbix.Sdk.Types.Hub.TestMarketplaceIntegration&typegen_234_TestMarketplaceIntegrationResponse=Norbix.Sdk.Types.Hub.TestMarketplaceIntegrationResponse&typegen_235_GetMarketplaceListingResponse=Norbix.Sdk.Types.Hub.GetMarketplaceListingResponse&typegen_230_AdminPortalStructureDto=Norbix.Sdk.Types.Hub.AdminPortalStructureDto&typegen_231_AdminPortalModuleDto=Norbix.Sdk.Types.Hub.AdminPortalModuleDto&typegen_236_UserMessageEntryWireDto=Norbix.Sdk.Types.Hub.UserMessageEntryWireDto&typegen_237_AssistantTextEntryWireDto=Norbix.Sdk.Types.Hub.AssistantTextEntryWireDto&typegen_238_AssistantQuestionEntryWireDto=Norbix.Sdk.Types.Hub.AssistantQuestionEntryWireDto&typegen_239_UserAnswerEntryWireDto=Norbix.Sdk.Types.Hub.UserAnswerEntryWireDto&typegen_240_PlanEntryWireDto=Norbix.Sdk.Types.Hub.PlanEntryWireDto&typegen_241_UserDecisionEntryWireDto=Norbix.Sdk.Types.Hub.UserDecisionEntryWireDto&typegen_242_RunStepEntryWireDto=Norbix.Sdk.Types.Hub.RunStepEntryWireDto&typegen_243_ActionPendingEntryWireDto=Norbix.Sdk.Types.Hub.ActionPendingEntryWireDto&typegen_244_NoticeEntryWireDto=Norbix.Sdk.Types.Hub.NoticeEntryWireDto&typegen_245_ConversationSnapshotEntryWireDto=Norbix.Sdk.Types.Hub.ConversationSnapshotEntryWireDto&typegen_269_FunctionRefDto=Norbix.Sdk.Types.Hub.FunctionRefDto&typegen_270_CodeFunctionEventDto=Norbix.Sdk.Types.Hub.CodeFunctionEventDto&typegen_271_CodeFunctionContextDto=Norbix.Sdk.Types.Hub.CodeFunctionContextDto&typegen_272_CodeFunctionCallerDto=Norbix.Sdk.Types.Hub.CodeFunctionCallerDto&typegen_273_CodeFunctionRunAsDto=Norbix.Sdk.Types.Hub.CodeFunctionRunAsDto&typegen_274_CodeFunctionDataDto=Norbix.Sdk.Types.Hub.CodeFunctionDataDto&typegen_275_DatabaseRecordChangeDto=Norbix.Sdk.Types.Hub.DatabaseRecordChangeDto&typegen_276_UserChangeDto=Norbix.Sdk.Types.Hub.UserChangeDto&typegen_277_FileChangeDto=Norbix.Sdk.Types.Hub.FileChangeDto&typegen_278_PaymentFactDto=Norbix.Sdk.Types.Hub.PaymentFactDto&typegen_279_AiUsageEventDto=Norbix.Sdk.Types.Hub.AiUsageEventDto&typegen_280_ScheduledTaskInfoDto=Norbix.Sdk.Types.Hub.ScheduledTaskInfoDto&typegen_281_FakeCodeIntegrationDto=Norbix.Sdk.Types.Hub.FakeCodeIntegrationDto&typegen_282_FakeCodeIntegrationRequest=Norbix.Sdk.Types.Hub.FakeCodeIntegrationRequest&typegen_283_CodeFunctionSchedulerTaskRequest=Norbix.Sdk.Types.Hub.CodeFunctionSchedulerTaskRequest&typegen_284_MarketplaceFunctionSchedulerTaskRequest=Norbix.Sdk.Types.Hub.MarketplaceFunctionSchedulerTaskRequest&typegen_285_AwsCloudWatchLoggingIntegrationRequest=Norbix.Sdk.Types.Hub.AwsCloudWatchLoggingIntegrationRequest&typegen_286_AwsCloudWatchLoggingIntegrationDto=Norbix.Sdk.Types.Hub.AwsCloudWatchLoggingIntegrationDto, Headers: { Authorization: Bearer test-bearer, norbix-account-id: test-account, diff --git a/tests/Norbix.Hub.Tests/test_results/EndpointCoverageTests.Hub.Logs.verified.txt b/tests/Norbix.Hub.Tests/test_results/EndpointCoverageTests.Hub.Logs.verified.txt index 325b68d..95affbe 100644 --- a/tests/Norbix.Hub.Tests/test_results/EndpointCoverageTests.Hub.Logs.verified.txt +++ b/tests/Norbix.Hub.Tests/test_results/EndpointCoverageTests.Hub.Logs.verified.txt @@ -1,7 +1,7 @@ { Target: Hub, Group: logs, - Count: 14, + Count: 15, Endpoints: [ { Target: Hub, @@ -91,6 +91,45 @@ } } }, + { + Target: Hub, + Group: logs, + MethodName: GetLogAsync, + RequestType: GetLog, + HttpMethod: GET, + Path: /{version}/logs/{Id}, + PathParams: [ + Id + ], + IsAccountScoped: false, + IsUnauthenticated: false, + Sent: { + Method: GET, + Path: /v2/logs/{guid}, + Query: ?env=test-env, + Headers: { + Authorization: Bearer test-bearer, + norbix-account-id: test-account, + norbix-project-id: test-project + } + }, + ResponseType: GetLogResponse, + Response: { + Item: { + Id: Guid_1, + Timestamp: DateTime_1, + Module: test-module, + Level: test-level, + EventCode: test-eventCode, + Title: test-title, + Message: test-message, + CorrelationId: Guid_1 + }, + ResponseStatus: { + IsSuccess: true + } + } + }, { Target: Hub, Group: logs, diff --git a/tests/Norbix.Hub.Tests/test_results/HubLogsEndpointTests.GetLog_puts_the_id_in_the_path_and_reads_the_entry.verified.txt b/tests/Norbix.Hub.Tests/test_results/HubLogsEndpointTests.GetLog_puts_the_id_in_the_path_and_reads_the_entry.verified.txt new file mode 100644 index 0000000..3d30676 --- /dev/null +++ b/tests/Norbix.Hub.Tests/test_results/HubLogsEndpointTests.GetLog_puts_the_id_in_the_path_and_reads_the_entry.verified.txt @@ -0,0 +1,25 @@ +{ + Sent: { + Method: GET, + Path: /v2/logs/6716f2a0c3b1e4d5f6a7b8c9, + Headers: { + Authorization: Bearer test-api-key, + norbix-project-id: test-project + } + }, + Entry: { + Id: 6716f2a0c3b1e4d5f6a7b8c9, + Timestamp: DateTime_1, + Module: app, + Level: information, + EventCode: app:order:paid, + Title: Order paid, + Message: Order ord_1042 paid by card, + CorrelationId: checkout-1042, + Env: PROD, + Origin: app, + Meta: { + orderId: ord_1042 + } + } +} \ No newline at end of file diff --git a/tests/Norbix.Hub.Tests/test_results/HubLogsEndpointTests.TestLoggingIntegration_posts_the_integration_id.verified.txt b/tests/Norbix.Hub.Tests/test_results/HubLogsEndpointTests.TestLoggingIntegration_posts_the_integration_id.verified.txt new file mode 100644 index 0000000..e2ee4c9 --- /dev/null +++ b/tests/Norbix.Hub.Tests/test_results/HubLogsEndpointTests.TestLoggingIntegration_posts_the_integration_id.verified.txt @@ -0,0 +1,12 @@ +{ + Method: POST, + Path: /v2/logs/integrations/test, + Headers: { + Authorization: Bearer test-api-key, + Content-Type: application/json; charset=utf-8, + norbix-project-id: test-project + }, + Body: { + integrationId: Guid_1 + } +} \ No newline at end of file diff --git a/tests/Norbix.Sdk.Tests/LogsEndpointTests.cs b/tests/Norbix.Sdk.Tests/LogsEndpointTests.cs new file mode 100644 index 0000000..6748356 --- /dev/null +++ b/tests/Norbix.Sdk.Tests/LogsEndpointTests.cs @@ -0,0 +1,89 @@ +using System.Net; +using Norbix.Sdk.Tests.Helpers; +using Norbix.Sdk.Types.Api; +using NUnit.Framework; +using VerifyNUnit; + +namespace Norbix.Sdk.Tests; + +/// +/// Public-API logs: an app writes its own log entries to the project's logs +/// (POST /{version}/logs). +/// +/// Hand-written on purpose, like : the +/// coverage snapshot (EndpointCoverageTests.Api.Logs) proves the group +/// is wired up; these prove the entries travel in the body as the gateway reads +/// them, the accepted count comes back typed, and a quota refusal reaches the +/// caller with its status and code. +/// +/// +[TestFixture] +public sealed class LogsEndpointTests +{ + [Test] + public async Task WriteLogs_posts_the_entries_and_reads_the_accepted_count() + { + using var fixture = NorbixTestFixture.Create(); + fixture.Respond("/logs", new { accepted = 2 }); + + var response = await fixture.Client.Logs.WriteLogsAsync(new WriteLogs + { + Entries = + [ + new WriteLogEntry + { + Title = "Order paid", + Message = "Order ord_1042 paid by card", + EventCode = "order:paid", + CorrelationId = "checkout-1042", + Meta = new Dictionary { ["orderId"] = "ord_1042" }, + }, + new WriteLogEntry + { + Level = "warning", + Title = "Stock low", + Timestamp = new DateTime(2026, 10, 21, 8, 0, 0, DateTimeKind.Utc), + }, + ], + }); + + await Verifier.Verify( + new { Sent = fixture.LastRequest, response?.Accepted }, + VerifyConfig.VerifySettings); + } + + [Test] + public void WriteLogs_over_the_minute_quota_throws_429_with_the_logging_code() + { + using var fixture = NorbixTestFixture.Create(); + fixture.Respond( + "/logs", + new + { + responseStatus = new + { + isSuccess = false, + errorCode = "CM-ERRORS-LOGGING-003", + message = "The project's log quota for this minute is used up", + errors = new[] + { + new + { + message = "The project's log quota for this minute is used up", + errorCode = "CM-ERRORS-LOGGING-003", + }, + }, + }, + }, + HttpStatusCode.TooManyRequests); + + var ex = Assert.ThrowsAsync( + async () => await fixture.Client.Logs.WriteLogsAsync(new WriteLogs + { + Entries = [new WriteLogEntry { Title = "Order paid" }], + }))!; + + Assert.That(ex.HttpStatus, Is.EqualTo(429)); + Assert.That(ex.ErrorCode, Is.EqualTo("CM-ERRORS-LOGGING-003")); + } +} diff --git a/tests/Norbix.Sdk.Tests/test_results/EndpointCoverageTests.Api.Logs.verified.txt b/tests/Norbix.Sdk.Tests/test_results/EndpointCoverageTests.Api.Logs.verified.txt new file mode 100644 index 0000000..9f00d15 --- /dev/null +++ b/tests/Norbix.Sdk.Tests/test_results/EndpointCoverageTests.Api.Logs.verified.txt @@ -0,0 +1,40 @@ +{ + Target: Api, + Group: logs, + Count: 1, + Endpoints: [ + { + Target: Api, + Group: logs, + MethodName: WriteLogsAsync, + RequestType: WriteLogs, + HttpMethod: POST, + Path: /{version}/logs, + IsAccountScoped: false, + IsUnauthenticated: false, + Sent: { + Method: POST, + Path: /v2/logs, + Headers: { + Authorization: Bearer test-bearer, + Content-Type: application/json; charset=utf-8, + norbix-account-id: test-account, + norbix-project-id: test-project + }, + Body: { + entries: [ + null + ], + env: test-env + } + }, + ResponseType: WriteLogsResponse, + Response: { + Accepted: 7, + ResponseStatus: { + IsSuccess: true + } + } + } + ] +} \ No newline at end of file diff --git a/tests/Norbix.Sdk.Tests/test_results/LogsEndpointTests.WriteLogs_posts_the_entries_and_reads_the_accepted_count.verified.txt b/tests/Norbix.Sdk.Tests/test_results/LogsEndpointTests.WriteLogs_posts_the_entries_and_reads_the_accepted_count.verified.txt new file mode 100644 index 0000000..9f49142 --- /dev/null +++ b/tests/Norbix.Sdk.Tests/test_results/LogsEndpointTests.WriteLogs_posts_the_entries_and_reads_the_accepted_count.verified.txt @@ -0,0 +1,30 @@ +{ + Sent: { + Method: POST, + Path: /v2/logs, + Headers: { + Authorization: Bearer test-api-key, + Content-Type: application/json; charset=utf-8, + norbix-project-id: test-project + }, + Body: { + entries: [ + { + title: Order paid, + message: Order ord_1042 paid by card, + eventCode: order:paid, + correlationId: checkout-1042, + meta: { + orderId: ord_1042 + } + }, + { + level: warning, + title: Stock low, + timestamp: DateTimeOffset_1 + } + ] + } + }, + Accepted: 2 +} \ No newline at end of file From 92507604ca05b1b067d4e607167b92dd20c3ba44 Mon Sep 17 00:00:00 2001 From: CodeMash Date: Wed, 21 Oct 2026 21:14:40 +0300 Subject: [PATCH 3/3] docs(logs): README rows for WriteLogsAsync and the Hub logs module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hub row names GetLogAsync and says to call TestLoggingIntegrationAsync after saving an integration — nothing is delivered until its last test passed. Co-Authored-By: Claude Opus 5.5 --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bf369d0..40acf2f 100644 --- a/README.md +++ b/README.md @@ -320,6 +320,7 @@ The public endpoint surface is generated from gateway DTOs at compile time. The | `database` | 22 | Collection CRUD (`FindAsync`, `FindOneAsync`, `FindOwnAsync`, insert / update / replace / delete one or many), count, distinct, aggregate, saved aggregate execution (`ExecuteAggregateAsync`), `ChangeResponsibilityAsync`, schema reads, taxonomy and term reads (`FindTermsAsync`, `FindTermsChildrenAsync`, `FindTaxonomyTreeAsync`, `FindTermTreeAsync`, `FindMergedTermTreeAsync`). | | `echo` | 1 | Smoke-test echo endpoint. | | `files` | 13 | List, info, signed URL, upload URL + commit, download, delete one / many, public links, and a file by its stored id (`GetFileByIdAsync`). | +| `logs` | 1 | `WriteLogsAsync` sends your app's own log entries to the project's logs: 1–100 `WriteLogEntry` per call (`Title` up to 200 characters; optional `Level` `information` / `warning` / `error`, `Message`, `EventCode` stored as `app:`, `CorrelationId`, `Timestamp`, `Meta` up to 20 keys). It answers `Accepted` at once — the entries are queued. Over the project's per-minute quota it throws `NorbixException` with `HttpStatus` 429 and `CM-ERRORS-LOGGING-003` (wait a minute and retry); `CM-ERRORS-LOGGING-002` means the Logs module is off. | | `membership` | 18 | User CRUD, registration, preferences, roles, and permissions. | | `payments` | 4 | Payment orders and checkout: `CreatePaymentOrderAsync`, `GetPaymentOrderAsync`, `GetPaymentOrdersAsync`, `StartPaymentCheckoutAsync`. See [Payment orders and checkout](#payment-orders-and-checkout). | | `public` | 2 | The project's public config and legal documents, read by the Admin Portal before sign-in (`GetPublicProjectConfigAsync`, `GetPublicProjectLegalAsync`). See [docs/hub/project.md](./docs/hub/project.md#public-config-and-legal-no-sign-in). | @@ -335,7 +336,7 @@ The public endpoint surface is generated from gateway DTOs at compile time. The | `email` | 2 | Public e-mail link endpoints: `OneClickUnsubscribeAsync` and `GetEmailPreferencesByLinkAsync` (reads the marketing preferences behind a signed unsubscribe link; pass the link's `Token`). Both are public links: they work on a client with no API key (the key is sent only when there is one), like the three `Preview*NotificationAsync` methods. | | `files` | 23 | File storage integrations, triggers, public links, a file by its stored id (`GetFileByIdAsync`), and module settings. | | `internal` | 1 | Internal type-generation endpoint. | -| `logs` | 9 | Logging integrations and module settings. | +| `logs` | 15 | Module on / off, the log list (`GetLogsAsync`), one entry by id (`GetLogAsync`), one flow by correlation id (`GetLogsByCorrelationIdAsync`), `CleanLogsAsync`, log settings, and logging integrations (MongoDB, Datadog, AWS CloudWatch, …). After saving an integration call `TestLoggingIntegrationAsync`: nothing is delivered to an integration until its last test passed. | | `membership` | 25 | Roles, policies, users, preferences, integrations, triggers. | | `notifications` | 123 | Email, push and SMS templates, integrations, campaigns, devices, settings. Push: [docs/hub/push.md](./docs/hub/push.md). SMS: [docs/hub/sms.md](./docs/hub/sms.md). | | `oauth` | 5 | The gateway's OAuth server routes (register, authorize, token, revoke). |