File size: 6,795 Bytes
b47934a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
//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")
}