diff --git a/components/ledger/cmd/container.go b/components/ledger/cmd/container.go deleted file mode 100644 index 0bbfe4fca4..0000000000 --- a/components/ledger/cmd/container.go +++ /dev/null @@ -1,36 +0,0 @@ -package cmd - -import ( - "github.com/formancehq/ledger/internal/engine" - driver "github.com/formancehq/ledger/internal/storage/driver" - "github.com/formancehq/stack/libs/go-libs/auth" - "github.com/formancehq/stack/libs/go-libs/otlp/otlpmetrics" - "github.com/formancehq/stack/libs/go-libs/otlp/otlptraces" - "github.com/formancehq/stack/libs/go-libs/publish" - "github.com/spf13/cobra" - "github.com/spf13/viper" - "go.uber.org/fx" -) - -const ServiceName = "ledger" - -func resolveOptions(cmd *cobra.Command, userOptions ...fx.Option) []fx.Option { - options := make([]fx.Option, 0) - options = append(options, fx.NopLogger) - - options = append(options, - publish.CLIPublisherModule(ServiceName), - otlptraces.CLITracesModule(), - otlpmetrics.CLIMetricsModule(), - auth.CLIAuthModule(), - driver.CLIModule(cmd), - engine.Module(engine.Configuration{ - NumscriptCache: engine.NumscriptCacheConfiguration{ - MaxCount: viper.GetInt(numscriptCacheMaxCountFlag), - }, - LedgerBatchSize: viper.GetInt(ledgerBatchSizeFlag), - }), - ) - - return append(options, userOptions...) -} diff --git a/components/ledger/cmd/serve.go b/components/ledger/cmd/serve.go index d966bc01c0..36d5597188 100644 --- a/components/ledger/cmd/serve.go +++ b/components/ledger/cmd/serve.go @@ -3,19 +3,23 @@ package cmd import ( "net/http" - "github.com/formancehq/stack/libs/go-libs/time" - - "github.com/formancehq/ledger/internal/storage/driver" - "github.com/formancehq/ledger/internal/api" - + "github.com/formancehq/ledger/internal/engine" + "github.com/formancehq/ledger/internal/storage/driver" + "github.com/formancehq/stack/libs/go-libs/auth" "github.com/formancehq/stack/libs/go-libs/ballast" "github.com/formancehq/stack/libs/go-libs/httpserver" + "github.com/formancehq/stack/libs/go-libs/otlp/otlpmetrics" + "github.com/formancehq/stack/libs/go-libs/otlp/otlptraces" + "github.com/formancehq/stack/libs/go-libs/publish" + "github.com/go-chi/chi/v5" + "github.com/spf13/viper" + + "github.com/formancehq/stack/libs/go-libs/time" + "github.com/formancehq/stack/libs/go-libs/logging" app "github.com/formancehq/stack/libs/go-libs/service" - "github.com/go-chi/chi/v5" "github.com/spf13/cobra" - "github.com/spf13/viper" "go.uber.org/fx" ) @@ -25,6 +29,9 @@ const ( ledgerBatchSizeFlag = "ledger-batch-size" readOnlyFlag = "read-only" autoUpgradeFlag = "auto-upgrade" + emitLogsFlag = "emit-logs" + + ServiceName = "ledger" ) func NewServe() *cobra.Command { @@ -38,8 +45,22 @@ func NewServe() *cobra.Command { return nil }, RunE: func(cmd *cobra.Command, args []string) error { - return app.New(cmd.OutOrStdout(), resolveOptions( - cmd, + return app.New(cmd.OutOrStdout(), + fx.NopLogger, + publish.CLIPublisherModule(ServiceName), + otlptraces.CLITracesModule(), + otlpmetrics.CLIMetricsModule(), + auth.CLIAuthModule(), + driver.CLIModule(cmd), + engine.Module(engine.Configuration{ + NumscriptCache: engine.NumscriptCacheConfiguration{ + MaxCount: viper.GetInt(numscriptCacheMaxCountFlag), + }, + GlobalLedgerConfig: engine.GlobalLedgerConfig{ + BatchSize: viper.GetInt(ledgerBatchSizeFlag), + EmitLogs: viper.GetBool(emitLogsFlag), + }, + }), ballast.Module(viper.GetUint(ballastSizeInBytesFlag)), api.Module(api.Config{ Version: Version, @@ -53,7 +74,6 @@ func NewServe() *cobra.Command { } }), fx.Invoke(func(lc fx.Lifecycle, h chi.Router, logger logging.Logger) { - wrappedRouter := chi.NewRouter() wrappedRouter.Use(func(handler http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { @@ -66,7 +86,7 @@ func NewServe() *cobra.Command { lc.Append(httpserver.NewHook(wrappedRouter, httpserver.WithAddress(viper.GetString(bindFlag)))) }), - )...).Run(cmd.Context()) + ).Run(cmd.Context()) }, } cmd.Flags().Uint(ballastSizeInBytesFlag, 0, "Ballast size in bytes, default to 0") @@ -74,6 +94,7 @@ func NewServe() *cobra.Command { cmd.Flags().Int(ledgerBatchSizeFlag, 50, "ledger batch size") cmd.Flags().Bool(readOnlyFlag, false, "Read only mode") cmd.Flags().Bool(autoUpgradeFlag, false, "Automatically upgrade all schemas") + cmd.Flags().Bool(emitLogsFlag, false, "Emit logs on NATS") return cmd } diff --git a/components/ledger/internal/bus/monitor.go b/components/ledger/internal/bus/monitor.go index 5a2cd992f3..5111c29c56 100644 --- a/components/ledger/internal/bus/monitor.go +++ b/components/ledger/internal/bus/monitor.go @@ -7,6 +7,7 @@ import ( ledger "github.com/formancehq/ledger/internal" "github.com/formancehq/ledger/pkg/events" "github.com/formancehq/stack/libs/go-libs/logging" + "github.com/formancehq/stack/libs/go-libs/logs" "github.com/formancehq/stack/libs/go-libs/metadata" "github.com/formancehq/stack/libs/go-libs/publish" ) @@ -16,13 +17,14 @@ type Monitor interface { SavedMetadata(ctx context.Context, targetType, id string, metadata metadata.Metadata) RevertedTransaction(ctx context.Context, reverted, revert *ledger.Transaction) DeletedMetadata(ctx context.Context, targetType string, targetID any, key string) + Log(ctx context.Context, log *ledger.Log) } type noOpMonitor struct{} +func (n noOpMonitor) Log(ctx context.Context, log *ledger.Log) {} func (n noOpMonitor) DeletedMetadata(ctx context.Context, targetType string, targetID any, key string) { } - func (n noOpMonitor) CommittedTransactions(ctx context.Context, res ledger.Transaction, accountMetadata map[string]metadata.Metadata) { } func (n noOpMonitor) SavedMetadata(ctx context.Context, targetType string, id string, metadata metadata.Metadata) { @@ -89,6 +91,18 @@ func (l *ledgerMonitor) DeletedMetadata(ctx context.Context, targetType string, })) } +func (l *ledgerMonitor) Log(ctx context.Context, log *ledger.Log) { + if err := l.publisher.Publish(events.EventTypeNewLog, publish.NewMessage(ctx, logs.Log{ + Date: log.Date, + Version: events.EventVersion, + Type: events.EventTypeNewLog, + Payload: log.Data, + })); err != nil { + logging.FromContext(ctx).Errorf("publishing message: %s", err) + return + } +} + func (l *ledgerMonitor) publish(ctx context.Context, topic string, ev publish.EventMessage) { if err := l.publisher.Publish(topic, publish.NewMessage(ctx, ev)); err != nil { logging.FromContext(ctx).Errorf("publishing message: %s", err) diff --git a/components/ledger/internal/engine/command/commander.go b/components/ledger/internal/engine/command/commander.go index 179f564ed3..5693d47e0b 100644 --- a/components/ledger/internal/engine/command/commander.go +++ b/components/ledger/internal/engine/command/commander.go @@ -41,8 +41,9 @@ type Commander struct { running sync.WaitGroup referencer *Referencer - monitor bus.Monitor - chain Chainer + monitor bus.Monitor + chain Chainer + emitLogs bool } func New( @@ -53,6 +54,7 @@ func New( monitor bus.Monitor, chain Chainer, batchSize int, + emitLogs bool, ) *Commander { return &Commander{ store: store, @@ -62,6 +64,7 @@ func New( referencer: referencer, Batcher: batching.NewBatcher(store.InsertLogs, 1, batchSize), monitor: monitor, + emitLogs: emitLogs, } } @@ -309,11 +312,6 @@ func (commander *Commander) RevertTransaction(ctx context.Context, parameters Pa return log.Data.(ledger.RevertedTransactionLogPayload).RevertTransaction, nil } -func (commander *Commander) Close() { - commander.Batcher.Close() - commander.running.Wait() -} - func (commander *Commander) DeleteMetadata(ctx context.Context, parameters Parameters, targetType string, targetID any, key string) error { execContext := newExecutionContext(commander, parameters) _, err := execContext.run(ctx, func(executionContext *executionContext) (*ledger.ChainedLog, error) { @@ -352,3 +350,8 @@ func (commander *Commander) DeleteMetadata(ctx context.Context, parameters Param return nil } + +func (commander *Commander) Close() { + commander.Batcher.Close() + commander.running.Wait() +} diff --git a/components/ledger/internal/engine/command/commander_test.go b/components/ledger/internal/engine/command/commander_test.go index 437fad83ba..a342610555 100644 --- a/components/ledger/internal/engine/command/commander_test.go +++ b/components/ledger/internal/engine/command/commander_test.go @@ -162,7 +162,7 @@ func TestCreateTransaction(t *testing.T) { store := storageerrors.NewInMemoryStore() ctx := logging.TestingContext() - commander := New(store, NoOpLocker, NewCompiler(1024), NewReferencer(), bus.NewNoOpMonitor(), chain.New(store), 50) + commander := New(store, NoOpLocker, NewCompiler(1024), NewReferencer(), bus.NewNoOpMonitor(), chain.New(store), 50, false) go commander.Run(ctx) defer commander.Close() @@ -213,7 +213,7 @@ func TestRevert(t *testing.T) { err := store.InsertLogs(context.Background(), log) require.NoError(t, err) - commander := New(store, NoOpLocker, NewCompiler(1024), NewReferencer(), bus.NewNoOpMonitor(), chain.New(store), 50) + commander := New(store, NoOpLocker, NewCompiler(1024), NewReferencer(), bus.NewNoOpMonitor(), chain.New(store), 50, false) go commander.Run(ctx) defer commander.Close() @@ -233,7 +233,7 @@ func TestRevertWithAlreadyReverted(t *testing.T) { ) require.NoError(t, err) - commander := New(store, NoOpLocker, NewCompiler(1024), NewReferencer(), bus.NewNoOpMonitor(), chain.New(store), 50) + commander := New(store, NoOpLocker, NewCompiler(1024), NewReferencer(), bus.NewNoOpMonitor(), chain.New(store), 50, false) go commander.Run(ctx) defer commander.Close() @@ -254,7 +254,7 @@ func TestRevertWithRevertOccurring(t *testing.T) { require.NoError(t, err) referencer := NewReferencer() - commander := New(store, NoOpLocker, NewCompiler(1024), referencer, bus.NewNoOpMonitor(), chain.New(store), 50) + commander := New(store, NoOpLocker, NewCompiler(1024), referencer, bus.NewNoOpMonitor(), chain.New(store), 50, false) go commander.Run(ctx) defer commander.Close() @@ -281,7 +281,7 @@ func TestForceRevert(t *testing.T) { )...) require.NoError(t, err) - commander := New(store, NoOpLocker, NewCompiler(1024), NewReferencer(), bus.NewNoOpMonitor(), chain.New(store), 50) + commander := New(store, NoOpLocker, NewCompiler(1024), NewReferencer(), bus.NewNoOpMonitor(), chain.New(store), 50, false) go commander.Run(ctx) defer commander.Close() @@ -322,7 +322,7 @@ func TestRevertAtEffectiveDate(t *testing.T) { )...) require.NoError(t, err) - commander := New(store, NoOpLocker, NewCompiler(1024), NewReferencer(), bus.NewNoOpMonitor(), chain.New(store), 50) + commander := New(store, NoOpLocker, NewCompiler(1024), NewReferencer(), bus.NewNoOpMonitor(), chain.New(store), 50, false) go commander.Run(ctx) defer commander.Close() @@ -372,7 +372,7 @@ func TestParallelTransactions(t *testing.T) { store, err := ledgerstore.New(bucket, "default") require.NoError(t, err) - commander := New(store, NewDefaultLocker(), NewCompiler(1024), NewReferencer(), bus.NewNoOpMonitor(), chain.New(store), 50) + commander := New(store, NewDefaultLocker(), NewCompiler(1024), NewReferencer(), bus.NewNoOpMonitor(), chain.New(store), 50, false) go commander.Run(ctx) defer commander.Close() diff --git a/components/ledger/internal/engine/command/context.go b/components/ledger/internal/engine/command/context.go index e2f93c5ae7..3d594e8b4f 100644 --- a/components/ledger/internal/engine/command/context.go +++ b/components/ledger/internal/engine/command/context.go @@ -55,6 +55,10 @@ func (e *executionContext) AppendLog(ctx context.Context, log *ledger.Log) (*led return nil, err } + if e.commander.emitLogs { + e.commander.monitor.Log(ctx, log) + } + return chainedLog, nil } diff --git a/components/ledger/internal/engine/ledger.go b/components/ledger/internal/engine/ledger.go index 24267b5cbc..e966df350d 100644 --- a/components/ledger/internal/engine/ledger.go +++ b/components/ledger/internal/engine/ledger.go @@ -29,7 +29,8 @@ type Ledger struct { } type GlobalLedgerConfig struct { - batchSize int + BatchSize int + EmitLogs bool } type LedgerConfig struct { @@ -40,7 +41,7 @@ type LedgerConfig struct { var ( defaultLedgerConfig = GlobalLedgerConfig{ - batchSize: 50, + BatchSize: 50, } ) @@ -64,7 +65,8 @@ func New( command.NewReferencer(), monitor, chain, - ledgerConfig.batchSize, + ledgerConfig.BatchSize, + ledgerConfig.EmitLogs, ), store: store, config: ledgerConfig, diff --git a/components/ledger/internal/engine/module.go b/components/ledger/internal/engine/module.go index d8716e68cf..b2b3dab89b 100644 --- a/components/ledger/internal/engine/module.go +++ b/components/ledger/internal/engine/module.go @@ -17,8 +17,8 @@ type NumscriptCacheConfiguration struct { } type Configuration struct { - NumscriptCache NumscriptCacheConfiguration - LedgerBatchSize int + NumscriptCache NumscriptCacheConfiguration + GlobalLedgerConfig } func Module(configuration Configuration) fx.Option { @@ -37,11 +37,8 @@ func Module(configuration Configuration) fx.Option { if configuration.NumscriptCache.MaxCount != 0 { options = append(options, WithCompiler(command.NewCompiler(configuration.NumscriptCache.MaxCount))) } - if configuration.LedgerBatchSize != 0 { - options = append(options, WithLedgerConfig(GlobalLedgerConfig{ - batchSize: configuration.LedgerBatchSize, - })) - } + options = append(options, WithLedgerConfig(configuration.GlobalLedgerConfig)) + return NewResolver(storageDriver, options...) }), fx.Provide(fx.Annotate(bus.NewNoOpMonitor, fx.As(new(bus.Monitor)))), diff --git a/components/ledger/internal/storage/ledgerstore/logs.go b/components/ledger/internal/storage/ledgerstore/logs.go index 0ea646c898..0530102cde 100644 --- a/components/ledger/internal/storage/ledgerstore/logs.go +++ b/components/ledger/internal/storage/ledgerstore/logs.go @@ -20,10 +20,6 @@ import ( "github.com/uptrace/bun" ) -const ( - LogTableName = "logs" -) - type Logs struct { bun.BaseModel `bun:"logs,alias:logs"` @@ -88,15 +84,6 @@ func (store *Store) logsQueryBuilder(q PaginatedQueryOptions[any]) func(*bun.Sel } func (store *Store) InsertLogs(ctx context.Context, activeLogs ...*ledger.ChainedLog) error { - //links := make([]trace.Link, 0) - //for _, log := range activeLogs { - // links = append(links, trace.LinkFromContext(log.Context)) - //} - // - //ctx, span := tracer.Start(context.Background(), "InsertLogBatch", trace.WithLinks(links...)) - //defer span.End() - // - //span.SetAttributes(attribute.Int("count", len(activeLogs))) _, err := store.bucket.db. NewInsert(). diff --git a/components/ledger/pkg/events/events.go b/components/ledger/pkg/events/events.go index f6d6f55c64..7e7ef27552 100644 --- a/components/ledger/pkg/events/events.go +++ b/components/ledger/pkg/events/events.go @@ -8,4 +8,5 @@ const ( EventTypeSavedMetadata = "SAVED_METADATA" EventTypeRevertedTransaction = "REVERTED_TRANSACTION" EventTypeDeletedMetadata = "DELETED_METADATA" + EventTypeNewLog = "NEW_LOG" ) diff --git a/libs/events/base.yaml b/libs/events/base.yaml index 9b53958bbe..2d49b0a722 100644 --- a/libs/events/base.yaml +++ b/libs/events/base.yaml @@ -3,6 +3,7 @@ type: object properties: app: type: string + deprecated: true version: type: string date: @@ -12,12 +13,12 @@ properties: type: string ledger: type: string + deprecated: true payload: type: object additionalProperties: true required: - date -- app - version - type -- payload +- payload \ No newline at end of file diff --git a/libs/events/generated/all.json b/libs/events/generated/all.json index b3f078cb17..63e73712f9 100644 --- a/libs/events/generated/all.json +++ b/libs/events/generated/all.json @@ -5,7 +5,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -18,7 +19,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -140,7 +142,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -150,7 +151,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -163,7 +165,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -285,7 +288,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -295,7 +297,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -308,7 +311,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -430,7 +434,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -442,7 +445,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -455,7 +459,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -577,7 +582,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -587,7 +591,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -600,8 +605,155 @@ "type": "string" }, "ledger": { + "type": "string", + "deprecated": true + }, + "payload": { + "type": "object", + "required": [ + "id", + "createdAt", + "scheduledAt", + "connectorId", + "provider", + "description", + "type", + "destinationAccountId", + "amount", + "asset", + "attempts", + "status", + "error" + ], + "properties": { + "id": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "scheduledAt": { + "type": "string", + "format": "date-time" + }, + "connectorId": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "description": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "TRANSFER", + "PAYOUT" + ] + }, + "sourceAccountId": { + "type": "string" + }, + "destinationAccountId": { + "type": "string" + }, + "amount": { + "type": "number", + "format": "bigint" + }, + "asset": { + "type": "string" + }, + "attempts": { + "type": "number" + }, + "status": { + "type": "string", + "enum": [ + "WAITING_FOR_VALIDATION", + "PROCESSING", + "PROCESSED", + "FAILED", + "REJECTED", + "VALIDATED", + "ASK_RETRIED", + "ASK_REVERSED", + "REVERSE_PROCESSING", + "REVERSE_FAILED", + "PARTIALLY_REVERSED", + "REVERSED" + ] + }, + "error": { + "type": "string" + }, + "relatedPayments": { + "type": [ + "array", + "null" + ], + "items": { + "type": "object", + "required": [ + "transferInitiationId", + "paymentId", + "createdAt", + "status", + "error" + ], + "properties": { + "transferInitiationId": { + "type": "string" + }, + "paymentId": { + "type": "string" + }, + "createdAt": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string" + }, + "error": { + "type": "string" + } + } + } + } + } + } + }, + "required": [ + "date", + "version", + "type", + "payload" + ] + }, + "NEW_LOG": { + "type": "object", + "properties": { + "app": { + "type": "string", + "deprecated": true + }, + "version": { "type": "string" }, + "date": { + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "ledger": { + "type": "string", + "deprecated": true + }, "payload": { "type": "object", "required": [ @@ -722,7 +874,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -732,7 +883,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -745,7 +897,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -867,7 +1020,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -877,7 +1029,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -890,7 +1043,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -1012,7 +1166,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -1026,7 +1179,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -1039,7 +1193,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -1161,7 +1316,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -1171,7 +1325,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -1184,7 +1339,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -1306,7 +1462,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -1316,7 +1471,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -1329,7 +1485,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -1451,7 +1608,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -1461,7 +1617,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -1474,7 +1631,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -1596,7 +1754,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -1606,7 +1763,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -1619,7 +1777,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -1741,7 +1900,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -1751,7 +1909,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -1764,7 +1923,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -1886,7 +2046,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -1896,7 +2055,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -1909,7 +2069,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -2031,7 +2192,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -2041,7 +2201,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -2054,7 +2215,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -2176,7 +2338,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -2190,7 +2351,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -2203,7 +2365,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -2325,7 +2488,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -2335,7 +2497,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -2348,7 +2511,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -2470,7 +2634,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -2480,7 +2643,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -2493,7 +2657,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -2615,7 +2780,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -2625,7 +2789,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -2638,7 +2803,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -2760,7 +2926,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -2772,7 +2937,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -2785,7 +2951,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -2907,7 +3074,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -2917,7 +3083,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -2930,7 +3097,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -3052,7 +3220,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -3062,7 +3229,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -3075,7 +3243,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -3197,7 +3366,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -3207,7 +3375,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -3220,7 +3389,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -3342,7 +3512,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -3352,7 +3521,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -3365,7 +3535,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -3487,7 +3658,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -3497,7 +3667,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -3510,7 +3681,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -3632,7 +3804,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -3642,7 +3813,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -3655,7 +3827,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -3777,7 +3950,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -3787,7 +3959,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -3800,7 +3973,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -3922,7 +4096,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" @@ -3932,7 +4105,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -3945,7 +4119,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -4067,7 +4242,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/ledger/v1.0.0/COMMITTED_TRANSACTIONS.json b/libs/events/generated/ledger/v1.0.0/COMMITTED_TRANSACTIONS.json index cfde84c2b0..888b4b98ea 100644 --- a/libs/events/generated/ledger/v1.0.0/COMMITTED_TRANSACTIONS.json +++ b/libs/events/generated/ledger/v1.0.0/COMMITTED_TRANSACTIONS.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -87,7 +89,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/ledger/v1.0.0/REVERTED_TRANSACTION.json b/libs/events/generated/ledger/v1.0.0/REVERTED_TRANSACTION.json index 32feadcf18..4ed9be09e1 100644 --- a/libs/events/generated/ledger/v1.0.0/REVERTED_TRANSACTION.json +++ b/libs/events/generated/ledger/v1.0.0/REVERTED_TRANSACTION.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -137,7 +139,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/ledger/v1.0.0/SAVED_METADATA.json b/libs/events/generated/ledger/v1.0.0/SAVED_METADATA.json index c9f49b9cb9..f21b69d595 100644 --- a/libs/events/generated/ledger/v1.0.0/SAVED_METADATA.json +++ b/libs/events/generated/ledger/v1.0.0/SAVED_METADATA.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -44,7 +46,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/ledger/v2.0.0/COMMITTED_TRANSACTIONS.json b/libs/events/generated/ledger/v2.0.0/COMMITTED_TRANSACTIONS.json index ebe9f1cfa4..44b5166818 100644 --- a/libs/events/generated/ledger/v2.0.0/COMMITTED_TRANSACTIONS.json +++ b/libs/events/generated/ledger/v2.0.0/COMMITTED_TRANSACTIONS.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -90,7 +92,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/ledger/v2.0.0/DELETED_METADATA.json b/libs/events/generated/ledger/v2.0.0/DELETED_METADATA.json index 993fdd9c3d..2e15d9b82f 100644 --- a/libs/events/generated/ledger/v2.0.0/DELETED_METADATA.json +++ b/libs/events/generated/ledger/v2.0.0/DELETED_METADATA.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -43,7 +45,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/ledger/v2.0.0/NEW_LOG.json b/libs/events/generated/ledger/v2.0.0/NEW_LOG.json new file mode 100644 index 0000000000..2ef48947b9 --- /dev/null +++ b/libs/events/generated/ledger/v2.0.0/NEW_LOG.json @@ -0,0 +1,33 @@ +{ + "type": "object", + "properties": { + "app": { + "type": "string", + "deprecated": true + }, + "version": { + "type": "string" + }, + "date": { + "type": "string", + "format": "date-time" + }, + "type": { + "type": "string" + }, + "ledger": { + "type": "string", + "deprecated": true + }, + "payload": { + "type": "object", + "additionalProperties": true + } + }, + "required": [ + "date", + "version", + "type", + "payload" + ] +} \ No newline at end of file diff --git a/libs/events/generated/ledger/v2.0.0/REVERTED_TRANSACTION.json b/libs/events/generated/ledger/v2.0.0/REVERTED_TRANSACTION.json index df1e5038fc..d8e1950465 100644 --- a/libs/events/generated/ledger/v2.0.0/REVERTED_TRANSACTION.json +++ b/libs/events/generated/ledger/v2.0.0/REVERTED_TRANSACTION.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -139,7 +141,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/ledger/v2.0.0/SAVED_METADATA.json b/libs/events/generated/ledger/v2.0.0/SAVED_METADATA.json index c9f49b9cb9..f21b69d595 100644 --- a/libs/events/generated/ledger/v2.0.0/SAVED_METADATA.json +++ b/libs/events/generated/ledger/v2.0.0/SAVED_METADATA.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -44,7 +46,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/orchestration/v2.0.0/FAILED_TRIGGER.json b/libs/events/generated/orchestration/v2.0.0/FAILED_TRIGGER.json index 817c65f81c..9113be27c7 100644 --- a/libs/events/generated/orchestration/v2.0.0/FAILED_TRIGGER.json +++ b/libs/events/generated/orchestration/v2.0.0/FAILED_TRIGGER.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -42,7 +44,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/orchestration/v2.0.0/FAILED_WORKFLOW.json b/libs/events/generated/orchestration/v2.0.0/FAILED_WORKFLOW.json index 1828a4851a..a7e3bd3431 100644 --- a/libs/events/generated/orchestration/v2.0.0/FAILED_WORKFLOW.json +++ b/libs/events/generated/orchestration/v2.0.0/FAILED_WORKFLOW.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -42,7 +44,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/orchestration/v2.0.0/FAILED_WORKFLOW_STAGE.json b/libs/events/generated/orchestration/v2.0.0/FAILED_WORKFLOW_STAGE.json index d86b6e019a..2e63166e91 100644 --- a/libs/events/generated/orchestration/v2.0.0/FAILED_WORKFLOW_STAGE.json +++ b/libs/events/generated/orchestration/v2.0.0/FAILED_WORKFLOW_STAGE.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -47,7 +49,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/orchestration/v2.0.0/STARTED_WORKFLOW.json b/libs/events/generated/orchestration/v2.0.0/STARTED_WORKFLOW.json index 51ae0aa89a..82ac819b45 100644 --- a/libs/events/generated/orchestration/v2.0.0/STARTED_WORKFLOW.json +++ b/libs/events/generated/orchestration/v2.0.0/STARTED_WORKFLOW.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -37,7 +39,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/orchestration/v2.0.0/STARTED_WORKFLOW_STAGE.json b/libs/events/generated/orchestration/v2.0.0/STARTED_WORKFLOW_STAGE.json index 0a289f0bda..10cf1f9ade 100644 --- a/libs/events/generated/orchestration/v2.0.0/STARTED_WORKFLOW_STAGE.json +++ b/libs/events/generated/orchestration/v2.0.0/STARTED_WORKFLOW_STAGE.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -42,7 +44,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/orchestration/v2.0.0/SUCCEEDED_TRIGGER.json b/libs/events/generated/orchestration/v2.0.0/SUCCEEDED_TRIGGER.json index 0ccb24d7f8..8d00236ef2 100644 --- a/libs/events/generated/orchestration/v2.0.0/SUCCEEDED_TRIGGER.json +++ b/libs/events/generated/orchestration/v2.0.0/SUCCEEDED_TRIGGER.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -38,7 +40,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/orchestration/v2.0.0/SUCCEEDED_WORKFLOW.json b/libs/events/generated/orchestration/v2.0.0/SUCCEEDED_WORKFLOW.json index 51ae0aa89a..82ac819b45 100644 --- a/libs/events/generated/orchestration/v2.0.0/SUCCEEDED_WORKFLOW.json +++ b/libs/events/generated/orchestration/v2.0.0/SUCCEEDED_WORKFLOW.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -37,7 +39,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/orchestration/v2.0.0/SUCCEEDED_WORKFLOW_STAGE.json b/libs/events/generated/orchestration/v2.0.0/SUCCEEDED_WORKFLOW_STAGE.json index 0a289f0bda..10cf1f9ade 100644 --- a/libs/events/generated/orchestration/v2.0.0/SUCCEEDED_WORKFLOW_STAGE.json +++ b/libs/events/generated/orchestration/v2.0.0/SUCCEEDED_WORKFLOW_STAGE.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -42,7 +44,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v0.0.0/CONNECTOR_RESET.json b/libs/events/generated/payments/v0.0.0/CONNECTOR_RESET.json index 65507d8e19..ea08159e99 100644 --- a/libs/events/generated/payments/v0.0.0/CONNECTOR_RESET.json +++ b/libs/events/generated/payments/v0.0.0/CONNECTOR_RESET.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -35,7 +37,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v0.0.0/SAVED_ACCOUNT.json b/libs/events/generated/payments/v0.0.0/SAVED_ACCOUNT.json index 48fff460d2..30eb27ca86 100644 --- a/libs/events/generated/payments/v0.0.0/SAVED_ACCOUNT.json +++ b/libs/events/generated/payments/v0.0.0/SAVED_ACCOUNT.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -61,7 +63,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v0.0.0/SAVED_BALANCE.json b/libs/events/generated/payments/v0.0.0/SAVED_BALANCE.json index 06976c12bc..a2ce5eaedf 100644 --- a/libs/events/generated/payments/v0.0.0/SAVED_BALANCE.json +++ b/libs/events/generated/payments/v0.0.0/SAVED_BALANCE.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -45,7 +47,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v0.0.0/SAVED_PAYMENT.json b/libs/events/generated/payments/v0.0.0/SAVED_PAYMENT.json index 8578c62afa..7f34ea50d7 100644 --- a/libs/events/generated/payments/v0.0.0/SAVED_PAYMENT.json +++ b/libs/events/generated/payments/v0.0.0/SAVED_PAYMENT.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -134,7 +136,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v2.0.0/CONNECTOR_RESET.json b/libs/events/generated/payments/v2.0.0/CONNECTOR_RESET.json index 8fe73f28a4..1fd83b3e9e 100644 --- a/libs/events/generated/payments/v2.0.0/CONNECTOR_RESET.json +++ b/libs/events/generated/payments/v2.0.0/CONNECTOR_RESET.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -35,7 +37,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v2.0.0/DELETED_POOL.json b/libs/events/generated/payments/v2.0.0/DELETED_POOL.json index 502d509ee4..ee51b821cb 100644 --- a/libs/events/generated/payments/v2.0.0/DELETED_POOL.json +++ b/libs/events/generated/payments/v2.0.0/DELETED_POOL.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -36,7 +38,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v2.0.0/DELETED_TRANSFER_INITIATION.json b/libs/events/generated/payments/v2.0.0/DELETED_TRANSFER_INITIATION.json index 502d509ee4..ee51b821cb 100644 --- a/libs/events/generated/payments/v2.0.0/DELETED_TRANSFER_INITIATION.json +++ b/libs/events/generated/payments/v2.0.0/DELETED_TRANSFER_INITIATION.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -36,7 +38,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v2.0.0/SAVED_ACCOUNT.json b/libs/events/generated/payments/v2.0.0/SAVED_ACCOUNT.json index e3c9c60b70..a5de4dee6e 100644 --- a/libs/events/generated/payments/v2.0.0/SAVED_ACCOUNT.json +++ b/libs/events/generated/payments/v2.0.0/SAVED_ACCOUNT.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -65,7 +67,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v2.0.0/SAVED_BALANCE.json b/libs/events/generated/payments/v2.0.0/SAVED_BALANCE.json index 57ccd355fc..6849c6c952 100644 --- a/libs/events/generated/payments/v2.0.0/SAVED_BALANCE.json +++ b/libs/events/generated/payments/v2.0.0/SAVED_BALANCE.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -49,7 +51,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v2.0.0/SAVED_BANK_ACCOUNT.json b/libs/events/generated/payments/v2.0.0/SAVED_BANK_ACCOUNT.json index 490a1b1561..04513d5eeb 100644 --- a/libs/events/generated/payments/v2.0.0/SAVED_BANK_ACCOUNT.json +++ b/libs/events/generated/payments/v2.0.0/SAVED_BANK_ACCOUNT.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -87,7 +89,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v2.0.0/SAVED_PAYMENT.json b/libs/events/generated/payments/v2.0.0/SAVED_PAYMENT.json index e89648ad67..4feaf2a0bb 100644 --- a/libs/events/generated/payments/v2.0.0/SAVED_PAYMENT.json +++ b/libs/events/generated/payments/v2.0.0/SAVED_PAYMENT.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -138,7 +140,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v2.0.0/SAVED_POOL.json b/libs/events/generated/payments/v2.0.0/SAVED_POOL.json index ed5ac463f9..b6e2d8efe4 100644 --- a/libs/events/generated/payments/v2.0.0/SAVED_POOL.json +++ b/libs/events/generated/payments/v2.0.0/SAVED_POOL.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -47,7 +49,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/generated/payments/v2.0.0/SAVED_TRANSFER_INITIATION.json b/libs/events/generated/payments/v2.0.0/SAVED_TRANSFER_INITIATION.json index 7c26373bb9..4588d43b9d 100644 --- a/libs/events/generated/payments/v2.0.0/SAVED_TRANSFER_INITIATION.json +++ b/libs/events/generated/payments/v2.0.0/SAVED_TRANSFER_INITIATION.json @@ -2,7 +2,8 @@ "type": "object", "properties": { "app": { - "type": "string" + "type": "string", + "deprecated": true }, "version": { "type": "string" @@ -15,7 +16,8 @@ "type": "string" }, "ledger": { - "type": "string" + "type": "string", + "deprecated": true }, "payload": { "type": "object", @@ -137,7 +139,6 @@ }, "required": [ "date", - "app", "version", "type", "payload" diff --git a/libs/events/services/ledger/v2.0.0/NEW_LOG.yaml b/libs/events/services/ledger/v2.0.0/NEW_LOG.yaml new file mode 100644 index 0000000000..8584cdaad4 --- /dev/null +++ b/libs/events/services/ledger/v2.0.0/NEW_LOG.yaml @@ -0,0 +1,2 @@ +type: object +additionalProperties: true \ No newline at end of file diff --git a/libs/go-libs/logs/log.go b/libs/go-libs/logs/log.go new file mode 100644 index 0000000000..2df136eb5d --- /dev/null +++ b/libs/go-libs/logs/log.go @@ -0,0 +1,12 @@ +package logs + +import ( + "github.com/formancehq/stack/libs/go-libs/time" +) + +type Log struct { + Date time.Time `json:"date"` + Version string `json:"version"` + Type string `json:"type"` + Payload any `json:"payload"` +} diff --git a/libs/go-libs/publish/messages.go b/libs/go-libs/publish/messages.go index af1e7a3ff9..1a664c8bd8 100644 --- a/libs/go-libs/publish/messages.go +++ b/libs/go-libs/publish/messages.go @@ -20,7 +20,7 @@ const ( otelContextKey = "otel-context" ) -func NewMessage(ctx context.Context, m EventMessage) *message.Message { +func NewMessage(ctx context.Context, m any) *message.Message { data, err := json.Marshal(m) if err != nil { panic(err) diff --git a/tests/integration/Earthfile b/tests/integration/Earthfile index 2f3ff28dad..255abd98b5 100644 --- a/tests/integration/Earthfile +++ b/tests/integration/Earthfile @@ -38,17 +38,7 @@ tests: WORKDIR /src/tests/integration DO --pass-args core+GO_INSTALL --package=github.com/onsi/ginkgo/v2/ginkgo - ARG GOPROXY - ARG focusFile - ARG skipFile - - LET cmd="ginkgo -p" - IF [ $focusFile != "" ] - SET cmd="$cmd --focus-file=$focusFile" - END - IF [ $skipFile != "" ] - SET cmd="$cmd --skip-file=$skipFile" - END + ARG gingkoArgs WITH DOCKER \ --load temporalite=+temporalite \ @@ -57,7 +47,7 @@ tests: RUN --mount=type=cache,id=gomod,target=${GOPATH}/pkg/mod \ --mount=type=cache,id=gobuild,target=/root/.cache/go-build \ DOCKER_HOSTNAME=$(ip addr show docker0 | head -3 | tail -1 | cut -d / -f1 | cut -d\ -f6) \ - $cmd ./suite/... + ginkgo $ginkgoArgs -p ./suite/... END sources: diff --git a/tests/integration/go.mod b/tests/integration/go.mod index c3ca58ecd7..2b3ad3cda0 100644 --- a/tests/integration/go.mod +++ b/tests/integration/go.mod @@ -3,6 +3,7 @@ module github.com/formancehq/stack/tests/integration go 1.21.6 require ( + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/docker/docker v24.0.9+incompatible github.com/egymgmbh/go-prefix-writer v0.0.0-20180609083313-7326ea162eca github.com/formancehq/auth v0.0.0-00010101000000-000000000000 @@ -73,7 +74,6 @@ require ( github.com/bombsimon/logrusr/v3 v3.1.0 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/containerd/continuity v0.3.0 // indirect - github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect github.com/dnwe/otelsarama v0.0.0-20231212173111-631a0a53d5d4 // indirect github.com/docker/cli v23.0.1+incompatible // indirect diff --git a/tests/integration/internal/events.go b/tests/integration/internal/events.go index b6f17dacb7..a2b02f9cbd 100644 --- a/tests/integration/internal/events.go +++ b/tests/integration/internal/events.go @@ -3,11 +3,13 @@ package internal import ( "encoding/json" "fmt" + "github.com/davecgh/go-spew/spew" "github.com/formancehq/stack/libs/events" "github.com/formancehq/stack/libs/go-libs/publish" "github.com/nats-io/nats.go" . "github.com/onsi/gomega" "github.com/onsi/gomega/types" + "github.com/pkg/errors" ) func NatsClient() *nats.Conn { @@ -87,19 +89,33 @@ func (r *receiveEventMatcher) Match(actual interface{}) (success bool, err error case msg := <-v: data = msg.Data default: - return false, nil + return false, errors.New("no message received") } case chan []byte: select { case msg := <-v: data = msg default: - return false, nil + return false, errors.New("no message received") } default: return false, fmt.Errorf("expected chan *nats.Msg or chan []uint8, got %T", actual) } + spew.Dump(string(data)) + + type typed struct { + Type string `json:"type"` + } + t := typed{} + if err := json.Unmarshal(data, &t); err != nil { + return false, nil + } + + if t.Type != r.eventName { + return false, fmt.Errorf("expect type %s, got %s", r.eventName, t.Type) + } + r.err = events.Check(data, r.serviceName, r.eventName) return r.err == nil, nil } diff --git a/tests/integration/internal/modules/ledger.go b/tests/integration/internal/modules/ledger.go index b4c983b9b4..10758d5e0b 100644 --- a/tests/integration/internal/modules/ledger.go +++ b/tests/integration/internal/modules/ledger.go @@ -23,6 +23,7 @@ var Ledger = internal.NewModule("ledger"). "--json-formatting-logger=false", "--bind=0.0.0.0:0", // Random port "--debug", + "--emit-logs", } }), ) diff --git a/tests/integration/suite/ledger-create-transaction.go b/tests/integration/suite/ledger-create-transaction.go index 664fa1995f..08e7e8a68a 100644 --- a/tests/integration/suite/ledger-create-transaction.go +++ b/tests/integration/suite/ledger-create-transaction.go @@ -11,7 +11,6 @@ import ( "github.com/formancehq/formance-sdk-go/v2/pkg/models/operations" "github.com/formancehq/formance-sdk-go/v2/pkg/models/shared" ledgerevents "github.com/formancehq/ledger/pkg/events" - "github.com/formancehq/stack/libs/events" "github.com/formancehq/stack/libs/go-libs/metadata" "github.com/formancehq/stack/libs/go-libs/pointer" . "github.com/formancehq/stack/tests/integration/internal" @@ -175,10 +174,11 @@ var _ = WithModules([]*Module{modules.Search, modules.Ledger}, func() { }) It("Should fail with "+string(shared.V2ErrorsEnumConflict)+" error code", func() {}) }) - It("should trigger a new event", func() { + It("should trigger two new events", func() { + // Wait for log + Eventually(msgs).Should(ReceiveEvent("ledger", ledgerevents.EventTypeNewLog)) // Wait for created transaction event - msg := WaitOnChanWithTimeout(msgs, 5*time.Second) - Expect(events.Check(msg.Data, "ledger", ledgerevents.EventTypeCommittedTransactions)).Should(Succeed()) + Eventually(msgs).Should(ReceiveEvent("ledger", ledgerevents.EventTypeCommittedTransactions)) }) It("should pop a transaction, two accounts and two assets entries on search service", func() { expectedTx := map[string]any{ diff --git a/tests/integration/suite/ledger-revert-transaction.go b/tests/integration/suite/ledger-revert-transaction.go index ccd076e80d..cffac4fd7f 100644 --- a/tests/integration/suite/ledger-revert-transaction.go +++ b/tests/integration/suite/ledger-revert-transaction.go @@ -15,7 +15,6 @@ import ( "github.com/formancehq/formance-sdk-go/v2/pkg/models/operations" "github.com/formancehq/formance-sdk-go/v2/pkg/models/shared" ledgerevents "github.com/formancehq/ledger/pkg/events" - "github.com/formancehq/stack/libs/events" . "github.com/formancehq/stack/tests/integration/internal" ) @@ -137,8 +136,7 @@ var _ = WithModules([]*Module{modules.Ledger}, func() { }) It("should trigger a new event", func() { // Wait for created transaction event - msg := WaitOnChanWithTimeout(msgs, 5*time.Second) - Expect(events.Check(msg.Data, "ledger", ledgerevents.EventTypeRevertedTransaction)).Should(Succeed()) + Eventually(msgs).Should(ReceiveEvent("ledger", ledgerevents.EventTypeRevertedTransaction)) }) It("should revert the original transaction", func() { response, err := Client().Ledger.V2GetTransaction( diff --git a/tests/integration/suite/ledger-set-metadata-on-account.go b/tests/integration/suite/ledger-set-metadata-on-account.go index 26e4840c7c..6bcd199977 100644 --- a/tests/integration/suite/ledger-set-metadata-on-account.go +++ b/tests/integration/suite/ledger-set-metadata-on-account.go @@ -1,20 +1,17 @@ package suite import ( - "github.com/formancehq/stack/tests/integration/internal/modules" - "math/big" - "net/http" - "reflect" - "time" - "github.com/formancehq/formance-sdk-go/v2/pkg/models/operations" "github.com/formancehq/formance-sdk-go/v2/pkg/models/shared" ledgerevents "github.com/formancehq/ledger/pkg/events" - "github.com/formancehq/stack/libs/events" . "github.com/formancehq/stack/tests/integration/internal" + "github.com/formancehq/stack/tests/integration/internal/modules" "github.com/nats-io/nats.go" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + "math/big" + "net/http" + "reflect" ) var _ = WithModules([]*Module{modules.Search, modules.Ledger}, func() { @@ -159,8 +156,7 @@ var _ = WithModules([]*Module{modules.Search, modules.Ledger}, func() { })) }) It("should trigger a new event", func() { - msg := WaitOnChanWithTimeout(msgs, 5*time.Second) - Expect(events.Check(msg.Data, "ledger", ledgerevents.EventTypeSavedMetadata)).Should(Succeed()) + Eventually(msgs).Should(ReceiveEvent("ledger", ledgerevents.EventTypeSavedMetadata)) }) It("should pop an account with the correct metadata on search service", func() { Eventually(func() bool { diff --git a/tests/integration/suite/payments-connectors-dummy-pay.go b/tests/integration/suite/payments-connectors-dummy-pay.go index fb6b2966fa..8f874091a1 100644 --- a/tests/integration/suite/payments-connectors-dummy-pay.go +++ b/tests/integration/suite/payments-connectors-dummy-pay.go @@ -2,7 +2,6 @@ package suite import ( webhooks "github.com/formancehq/webhooks/pkg" - "io" "net/http" "net/http/httptest" "os" @@ -74,16 +73,14 @@ var _ = WithModules([]*Module{modules.Payments}, func() { WithModules([]*Module{modules.Webhooks}, func() { var ( httpServer *httptest.Server - called chan []byte + called chan struct{} secret = webhooks.NewSecret() ) BeforeEach(func() { - called = make(chan []byte) + called = make(chan struct{}) httpServer = httptest.NewServer( http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - defer close(called) - data, _ := io.ReadAll(r.Body) - called <- data + close(called) })) DeferCleanup(func() { httpServer.Close() @@ -103,7 +100,7 @@ var _ = WithModules([]*Module{modules.Payments}, func() { Expect(response.StatusCode).To(Equal(http.StatusOK)) }) It("Should trigger a webhook", func() { - Eventually(called).Should(ReceiveEvent("payments", paymentEvents.EventTypeSavedPayments)) + Eventually(called).Should(BeClosed()) }) }) })