//go:build wireinject // +build wireinject package main import ( "context" "log/slog" "github.com/confluentinc/confluent-kafka-go/v2/kafka" "github.com/google/wire" "go.opentelemetry.io/otel/metric" "go.opentelemetry.io/otel/trace" "github.com/openmeterio/openmeter/app/common" "github.com/openmeterio/openmeter/app/config" "github.com/openmeterio/openmeter/openmeter/billing/creditgrant" "github.com/openmeterio/openmeter/openmeter/cost" "github.com/openmeterio/openmeter/openmeter/currencies" "github.com/openmeterio/openmeter/openmeter/customer" "github.com/openmeterio/openmeter/openmeter/ent/db" "github.com/openmeterio/openmeter/openmeter/governance" "github.com/openmeterio/openmeter/openmeter/ingest" "github.com/openmeterio/openmeter/openmeter/ingest/kafkaingest" "github.com/openmeterio/openmeter/openmeter/ledger" "github.com/openmeterio/openmeter/openmeter/ledger/customerbalance" "github.com/openmeterio/openmeter/openmeter/llmcost" "github.com/openmeterio/openmeter/openmeter/meter" "github.com/openmeterio/openmeter/openmeter/meterevent" "github.com/openmeterio/openmeter/openmeter/namespace" "github.com/openmeterio/openmeter/openmeter/notification" "github.com/openmeterio/openmeter/openmeter/portal" "github.com/openmeterio/openmeter/openmeter/productcatalog/addon" "github.com/openmeterio/openmeter/openmeter/productcatalog/feature" "github.com/openmeterio/openmeter/openmeter/productcatalog/plan" "github.com/openmeterio/openmeter/openmeter/productcatalog/planaddon" "github.com/openmeterio/openmeter/openmeter/progressmanager" "github.com/openmeterio/openmeter/openmeter/registry" "github.com/openmeterio/openmeter/openmeter/secret" "github.com/openmeterio/openmeter/openmeter/server" "github.com/openmeterio/openmeter/openmeter/streaming" "github.com/openmeterio/openmeter/openmeter/subject" subjecthooks "github.com/openmeterio/openmeter/openmeter/subject/service/hooks" "github.com/openmeterio/openmeter/openmeter/taxcode" "github.com/openmeterio/openmeter/openmeter/watermill/eventbus" "github.com/openmeterio/openmeter/pkg/featuregate" "github.com/openmeterio/openmeter/pkg/ffx" kafkametrics "github.com/openmeterio/openmeter/pkg/kafka/metrics" ) type Application struct { common.GlobalInitializer common.Migrator Addon addon.Service AppRegistry common.AppRegistry Customer customer.Service CustomerLedgerHook common.CustomerLedgerHook CustomerSubjectHook common.CustomerSubjectHook CustomerEntitlementValidatorHook common.CustomerEntitlementValidatorHook BillingRegistry common.BillingRegistry CurrencyService currencies.Service CostService cost.Service CreditGrantService creditgrant.Service Ledger ledger.Ledger AccountResolver ledger.AccountResolver CustomerBalanceFacade *customerbalance.Facade EntClient *db.Client EventPublisher eventbus.Publisher EntitlementRegistry *registry.Entitlement FeatureConnector feature.FeatureConnector FeatureFlags ffx.Service GovernanceService governance.Service IngestCollector ingest.Collector IngestService ingest.Service KafkaProducer *kafka.Producer KafkaMetrics *kafkametrics.Metrics KafkaIngestNamespaceHandler *kafkaingest.NamespaceHandler LedgerNamespaceHandler namespace.Handler LLMCostService llmcost.Service Logger *slog.Logger MetricMeter metric.Meter MeterConfigInitializer common.MeterConfigInitializer MeterManageService meter.ManageService MeterEventService meterevent.Service NamespaceManager *namespace.Manager Notification notification.Service NotificationEventHandler notification.EventHandler Plan plan.Service PlanAddon planaddon.Service Portal portal.Service ProgressManager progressmanager.Service RouterHooks *server.RouterHooks PostAuthMiddlewares server.PostAuthMiddlewares Secret secret.Service SubjectService subject.Service SubjectCustomerHook subjecthooks.CustomerSubjectHook Subscription common.SubscriptionServiceWithWorkflow StreamingConnector streaming.Connector TaxCodeNamespaceHandler *taxcode.NamespaceHandler TaxCodeService taxcode.Service TelemetryServer common.TelemetryServer TerminationChecker *common.TerminationChecker RuntimeMetricsCollector common.RuntimeMetricsCollector Tracer trace.Tracer FeatureGate *featuregate.FeatureGateChecker ClientIPMiddleware common.ClientIPMiddleware } func initializeApplication(ctx context.Context, conf config.Configuration) (Application, func(), error) { wire.Build( metadata, common.App, common.Billing, common.ClickHouse, common.Config, common.CreditGrant, common.Currency, common.Customer, common.CustomerBalance, common.NewCustomerLedgerServiceHook, common.NewCustomerSubjectServiceHook, common.NewCustomerEntitlementValidatorServiceHook, common.Database, common.Entitlement, common.Framework, common.FFX, common.Governance, common.Kafka, common.KafkaIngest, common.LLMCost, common.LedgerStack, common.KafkaNamespaceResolver, common.MeterManageWithConfigMeters, common.MeterEvent, common.Namespace, common.StaticNamespace, common.NewDefaultTextMapPropagator, common.NewKafkaIngestCollector, common.NewIngestCollector, common.NewIngestService, common.NewServerPublisher, common.Notification, common.Streaming, common.Portal, common.ProductCatalog, common.ProgressManager, common.Server, common.TaxCode, common.TaxCodeNamespaceHandler, common.Subscription, common.Lockr, common.Secret, common.ServerProvisionTopics, common.Subject, common.NewSvixAPIClient, common.NewSubjectCustomerHook, common.Telemetry, common.TelemetryLoggerNoAdditionalMiddlewares, common.NewTerminationChecker, common.WatermillNoPublisher, wire.Struct(new(Application), "*"), common.FeatureGateChecker, ) return Application{}, nil, nil } func metadata(conf config.Configuration) common.Metadata { return common.NewMetadata(conf, version, "backend") }